var __prevValidatorUpdateDisplay;
//var Page_ValidatorExtenders = new Array();
var Page_ValidatorExtendersSummaryByControl = new Array();

function newValidatorUpdateDisplay(val)
{
    // call previous ValidatorUpdateDisplay() function
    __prevValidatorUpdateDisplay(val);
    
    for(i = 0; i < Page_ValidatorExtenders.length; i++)
    {
        var __veValidatorID = Page_ValidatorExtenders[i][0];
        var __veControlID = Page_ValidatorExtenders[i][1];
        var __veErrorClassName = Page_ValidatorExtenders[i][2];
        var __veErrorCallFunction = Page_ValidatorExtenders[i][3];
        var __veOriginalClassName = Page_ValidatorExtenders[i][4];
        var __veExtendedControlID = Page_ValidatorExtenders[i][5];
        var __veShowValidator = Page_ValidatorExtenders[i][6];
        
        if(val.id == __veValidatorID &&
			((val.controltovalidate == __veControlID) ||
			(val.controltovalidate == null && __veControlID == "")))
        {
            var control = document.getElementById(__veControlID);
            var validatorControl = document.getElementById(__veValidatorID);
            var extendedControl = document.getElementById(__veExtendedControlID);
            
           // alert(__veValidatorID + ' / ' + __veControlID + ' / ' + __veExtendedControlID);
           
            // add class and change tooltip
            if(__veErrorClassName != "")
            {
                // remove error class name and title if no one of the previous validators
                // with the same controltovalidate property wasn't failed
                var hasErrors = false;
//                for(i in Page_ValidatorExtendersSummaryByControl[__veControlID])
//                    if(!Page_ValidatorExtendersSummaryByControl[__veControlID][i].isvalid)
//						hasErrors = true;
                for(j in Page_ValidatorExtendersSummaryByControl[__veExtendedControlID])
                    if(!Page_ValidatorExtendersSummaryByControl[__veExtendedControlID][j].isvalid)
						hasErrors = true;
                
                if (!hasErrors)
                {
                    //RemoveClassName(control, __veErrorClassName);
                    RemoveClassName(extendedControl, __veErrorClassName);
                    if(control != null)
						if(control.title != null)
							control.title = "";
                }
                
                if (!val.isvalid)
                {
                    //AddClassName(control, __veErrorClassName);
                    AddClassName(extendedControl, __veErrorClassName);
                    if(control != null)
	                    if(control.title != null && val.attributes.title != null)
		                    control.title = val.attributes.title.value;
                }
                
                if(!__veShowValidator)
					validatorControl.style.display = 'none';
                
                //if(typeof(Page_ValidatorExtendersSummaryByControl[__veControlID]) == "undefined")
                //    Page_ValidatorExtendersSummaryByControl[__veControlID] = new Array();
                //Page_ValidatorExtendersSummaryByControl[__veControlID][__veValidatorID] = val;

                if(typeof(Page_ValidatorExtendersSummaryByControl[__veExtendedControlID]) == "undefined")
                    Page_ValidatorExtendersSummaryByControl[__veExtendedControlID] = new Array();
                Page_ValidatorExtendersSummaryByControl[__veExtendedControlID][__veValidatorID] = val;
            }
            
            // call custom function
            if(__veErrorCallFunction != "" && eval("typeof("+__veErrorCallFunction+")") == "function")
                if (!val.isvalid)
                    eval(__veErrorCallFunction+"(val)");
        }
    }
}

function trim(str) {
    return str.replace(/^\s+|\s+$/, "");
}

function AddClassName (elem, className) {
    RemoveClassName(elem, className);
    elem.className = trim(elem.className + " " + className);
}

function RemoveClassName (elem, className) {
    elem.className = trim(elem.className.replace(className, ""));
}

var __prevWindowOnLoad = window.onload;
window.onload = function()
{
	if(typeof(ValidatorUpdateDisplay) == 'function')
	{
		// save previous ValidatorUpdateDisplay()
		__prevValidatorUpdateDisplay = ValidatorUpdateDisplay;

		// set new ValidatorUpdateDisplay()
		ValidatorUpdateDisplay = newValidatorUpdateDisplay;
	}

	// call previous window.onload() event
	if(typeof(__prevWindowOnLoad) == 'function')
		__prevWindowOnLoad();
}

function CaseInsensitiveRegularExpressionValidatorEvaluateIsValid(val)
{
	var value = ValidatorGetValue(val.controltovalidate);
	if (ValidatorTrim(value).length == 0)
		return true;
	var rx;// = new RegExp(val.validationexpression);
	if(val.validationexpression.indexOf('(?i)') != -1)
		rx = new RegExp(val.validationexpression.replace('(?i)', ''), 'i');
	else
		rx = new RegExp(val.validationexpression);
	var matches = rx.exec(value);
	return (matches != null && value == matches[0]);
}