
    //Checking if ValidatorValidate exists
if (typeof (ValidatorValidate) != "undefined") {
    //Copy ValidatorValidate to BaseValidatorValidate
    BaseValidatorValidate = ValidatorValidate;
    
    //Used to remeber the current activated validationGroup
    _lastValidationGroup = null;

    //Replacing ValidatorValidate
    ValidatorValidate = function(val, validationGroup, event) {
        //Calling original ValidatorValidate function saved in BaseValidatorValidate
        BaseValidatorValidate(val, validationGroup, event);
        
        //Remembering the current validationGroup
        if (validationGroup != null) _lastValidationGroup = validationGroup;
        
        //Seting valid all the validations not in the current validationGroup
        if ((typeof (val.validationGroup) == "undefined" && _lastValidationGroup != "") || (typeof (val.validationGroup) != "undefined" && val.validationGroup != _lastValidationGroup)) val.isvalid = true;

        //If a Class is defined ...
        if (val.Class || (val.Class = val.getAttribute("Class"))) {
            //Checking if all validators on the same controltovalidate with the same validationGroup are valid
            var flag1 = val.isvalid;
            for (var num1 = 0; num1 < Page_Validators.length; num1++) {
                var val2 = Page_Validators[num1];
                if (val2.controltovalidate == val.controltovalidate && (validationGroup == null || typeof (val2.validationGroup) == "undefined" || val2.validationGroup == validationGroup)) flag1 &= val2.isvalid;
            }

            //Adding or removing Class from controltovalidate
            if (typeof ($get) != "undefined") {
                //Do it with ASP.NET ajax functions
                Sys.UI.DomElement[flag1 ? 'removeCssClass' : 'addCssClass']($get(val.controltovalidate), val.Class);
            }
            else {
                //Do it with standard javascript without ajax functions
                var el = document.getElementById(val.controltovalidate);
                if (el != null) {
                    var flag2 = el.className.indexOf(val.Class) != -1;
                    if (flag1 && flag2) {
                        el.className = el.className.replace(new RegExp("\\b" + val.Class + "\\b", "i"), "").replace(/^\s+|\s(?=\s+)|\s+$/m, "");
                    }
                    else if (!flag1 && !flag2) {
                        el.className += (el.className.length != 0 ? " " : "") + val.Class;
                    }
                }
            }
        }

        //Refreshing ValidationSummary
        if (typeof (Page_ValidationSummaries) != "undefined" && _lastValidationGroup != null) {
            for (var num2 = 0; num2 < Page_ValidationSummaries.length; num2++) {
                var pageVal = Page_ValidationSummaries[num2];
                //If the ValidationSummary validationGroup is equal the last validationGroup updating it.
                if ((typeof (pageVal.validationGroup) == "undefined" && _lastValidationGroup == "") || (typeof (pageVal.validationGroup) != "undefined" && pageVal.validationGroup == _lastValidationGroup)) {
                    setTimeout(function() { ValidationSummaryOnSubmit(_lastValidationGroup); }, 0);
                    break;
                }
            }
        }
    }
}
