//overrides the built-in call in the Asp.Net validators system
function ValidatorOnChange(event) {
    if (!event) {
        event = window.event;
    }
    Page_InvalidControlToBeFocused = null;
    var targetedControl;
    if ((typeof (event.srcElement) != "undefined") && (event.srcElement != null)) {
        targetedControl = event.srcElement;
    }
    else {
        targetedControl = event.target;
    }
    ValidateSingleControl(targetedControl, event);
}

function ValidateSingleControl1(targetedControl) {
    if (typeof targetedControl.length == "undefined") {
        ValidateSingleControl(targetedControl, null);
    }
    else {
        targetedControl.each(function(i) {
            ValidateSingleControl(targetedControl[i]);
        });
    }
}
function ValidateSingleControl(targetedControl, event)
{
    var vals;
    if (typeof (targetedControl.Validators) != "undefined") {
        vals = targetedControl.Validators;
    }
    else {
        if (targetedControl.tagName.toLowerCase() == "label") {
            targetedControl = document.getElementById(targetedControl.htmlFor);
            vals = targetedControl.Validators;
        }
        else {
            return;
        }
    }
    var i;
    targetedControl.ValidationHasRun = true;
    targetedControl.IsValid = true;
    for (i = 0; i < vals.length; i++) {
        ValidatorValidate(vals[i], null, event);
        vals[i].controltovalidate.ValidationHasRun = true;
        if (!vals[i].isvalid) {
            vals[i].controltovalidate.IsValid = false;
            //targetedControl.ValidationHasRun = true;
            //targetedControl.IsValid = false;
            //break;
        }
    }
    //ValidatorUpdateControlIsValid(targetedControl);
    ValidatorUpdateIsValid();
}

function Page_ClientValidate(validationGroup) {
    Page_InvalidControlToBeFocused = null;
    if (typeof (Page_Validators) == "undefined") {
        return true;
    }
    var i;
    for (i = 0; i < Page_Validators.length; i++) {
        var val = Page_Validators[i];
        if ((val.controltovalidate != null) && (typeof (val.controltovalidate) == "string")) {
            var ctrl = $('#' + val.controltovalidate);
            if (ctrl.length > 0) {
                ctrl[0].ValidationHasRun = true;
                ctrl[0].IsValid = true;
            }
        }
    }
    for (i = 0; i < Page_Validators.length; i++) {
        ValidatorValidate(Page_Validators[i], validationGroup, null);
    }
    ValidatorUpdateIsValid();
    ValidationSummaryOnSubmit(validationGroup);
    Page_BlockSubmit = !Page_IsValid;
    return Page_IsValid;
}

function ValidatorUpdateControlIsValid(ctrl) {
    $(ctrl).parents("div.field").removeClass("valid error");

    if (typeof (ctrl.ValidationHasRun) == "undefined") {
        ctrl.ValidationHasRun = false;
    }

    if (ctrl.ValidationHasRun) {
        if (typeof (ctrl.IsValid) == "undefined") {
            ctrl.IsValid = true;
        }
        if (ctrl.IsValid) {
            $(ctrl).parents("div.field").addClass("valid");
        }
        else {
            $(ctrl).parents("div.field").addClass("error");
        }
    }

}

//overrides the built-in call in the Asp.Net validators system
ValidatorUpdateDisplay = function(val) {
    if (typeof (val.display) == "string") {
        if (val.display == "None") {
            return;
        }
        if (val.display == "Dynamic") {
            var ctrl = $('#' + val.controltovalidate)[0];
            if (val.isvalid) {
                $(val).hide();
            }
            else {
                $(val).show();
                if(ctrl != null)
                    ctrl.IsValid = false;
            }

            if (ctrl != null)
                ValidatorUpdateControlIsValid(ctrl);
            return;
        }
    }
}

//overrides the built-in call in the Asp.Net validators system
function ValidatorHookupControl(control, val) {
    if (typeof (control.tagName) != "string") {
        return;
    }
    if (control.tagName != "INPUT" && control.tagName != "TEXTAREA" && control.tagName != "SELECT") {
        var i;
        for (i = 0; i < control.childNodes.length; i++) {
            ValidatorHookupControl(control.childNodes[i], val);
        }
        return;
    }
    else {
        if (typeof (control.Validators) == "undefined") {
            control.Validators = new Array;
            var eventType;
            if ((control.type == "radio") || (control.type == "checkbox")) {
                eventType = "onclick";
            } else {
                eventType = "onchange";
                if (typeof (val.focusOnError) == "string" && val.focusOnError == "t") {
                    ValidatorHookupEvent(control, "onblur", "ValidatedControlOnBlur(event); ");
                }
            }
            ValidatorHookupEvent(control, eventType, "ValidatorOnChange(event); ");
            if (control.type == "text" ||
                control.type == "password" ||
                control.type == "file") {
                ValidatorHookupEvent(control, "onkeypress",
                    "if (!ValidatedTextBoxOnKeyPress(event)) { event.cancelBubble = true; if (event.stopPropagation) event.stopPropagation(); return false; } ");
            }
        }
        control.Validators[control.Validators.length] = val;
    }
}
function ValidatorValidate(val, validationGroup, event) {
    val.isvalid = true;
    if ((typeof (val.enabled) == "undefined" || val.enabled != false) && IsValidationGroupMatch(val, validationGroup)) {
        if (typeof (val.evaluationfunction) == "function") {
            val.isvalid = val.evaluationfunction(val);
            if (!val.isvalid && Page_InvalidControlToBeFocused == null &&
                typeof (val.focusOnError) == "string" && val.focusOnError == "t") {
                ValidatorSetFocus(val, event);
            }
        }
    }
    if (val.controltovalidate != undefined)
        $('#' + val.controltovalidate)[0].ValidationHasRun = true;
    ValidatorUpdateDisplay(val);
}

