
var oldValidatorUpdateDisplay;
var errorElements = new Object();
if (typeof (ValidatorUpdateDisplay) == "function") {
    oldValidatorUpdateDisplay = ValidatorUpdateDisplay;
}
ValidatorUpdateDisplay = As24ValidatorUpdateDisplay;
RegularExpressionValidatorEvaluateIsValid = As24RegularExpressionValidatorEvaluateIsValid;
ValidationSummaryOnSubmit = As24ValidationSummaryOnSubmit;

var Page_LastValidationGroup;

function RequiredFieldValidatorEvaluateIsValid(val) {
    var tb = gE(val.controltovalidate);
    if (tb.defaultText && tb.defaultText.length > 0) {
        var tbval = ValidatorTrim(ValidatorGetValue(val.controltovalidate));
        if (tbval == tb.defaultText || tbval.length == 0) return false;
        return true;
    }
    return (ValidatorTrim(ValidatorGetValue(val.controltovalidate)) != ValidatorTrim(val.initialvalue))
}
function As24ValidatorUpdateDisplay(val) {
    // call original ValidatorUpdateDisplay
    if (oldValidatorUpdateDisplay != null) {
        oldValidatorUpdateDisplay(val);
    }
    if (!val.controltovalidate) return;
    if (val.isrequired && val.isrequired.toUpperCase() == 'TRUE') {
        if ((val.isrequired.toUpperCase() == 'TRUE') &&
			  (ValidatorTrim(ValidatorGetValue(val.controltovalidate)).length == 0) &&
			  (val.requirederrormessage)) {
            val.innerText = val.requirederrormessage;
        }
        else {
            val.innerText = val.errormessage;
        }
    }

    // the highlighting extension
    var objControlToValidate = gE(val.controltovalidate);
    if (val.enablecontrolhighlighting == null || val.enablecontrolhighlighting == true) {
        if (val.errorcssclass) {
            if (val.isvalid)
                RemoveClassName(objControlToValidate, val.errorcssclass);
            else
                AddClassName(objControlToValidate, val.errorcssclass);
        }
    }

    UpdateAs24ValidationSummary(val);
}

function As24RegularExpressionValidatorEvaluateIsValid(val) {
    var value = ValidatorGetValue(val.controltovalidate);
    var req = (val.isrequired.toUpperCase() != 'TRUE');
    if (ValidatorTrim(value).length == 0) return req;
    var cv = gE(val.controltovalidate);
    if (cv.attributes.defaultText && cv.attributes.defaultText.value == value) return req;
    var rx = new RegExp(val.validationexpression);
    var matches = rx.exec(value);
    return (matches != null && value == matches[0]);
}

function RadiusZipValidatorCustomHookup() {
    if (typeof (Page_Validators) == "undefined")
        return;
    var i, val;
    for (i = 0; i < Page_Validators.length; i++) {
        val = Page_Validators[i];
        if (typeof (val.selectlisttovalidate) == "string") {
            ValidatorHookupControlID(val.selectlisttovalidate, val);

            if (typeof (val.controltovalidate) == "string") {
                var radiusDropDown = gE(val.selectlisttovalidate);
                var zipCodeTextBox = gE(val.controltovalidate);
                if (radiusDropDown != null && zipCodeTextBox != null && zipCodeTextBox.defaultText != null) {
                    var prevalidateFunction = "SetZipCodeToDefault(this, '" + zipCodeTextBox.id + "', '" + val.ddldefault + "'); ";
                    ValidatorHookupEvent(radiusDropDown, "onchange", prevalidateFunction);
                }
            }
        }
    }
}

function SetZipCodeToDefault(radiusDropDown, zipCodeTextBoxId, ddlDefaultValue) {
    if (radiusDropDown.options[radiusDropDown.selectedIndex].value == ddlDefaultValue) {
        var zipCodeTextBox = gE(zipCodeTextBoxId);
        zipCodeTextBox.value = zipCodeTextBox.defaultText;
    }
}

function RadiusZipValidatorEvaluateIsValid(source, clientArgs) {
    try {
        var value = ValidatorGetValue(source.controltovalidate);
        var ddl = gE(source.selectlisttovalidate);
        var tb = gE(source.controltovalidate);
        var tbVal = (tb.defaultText ? tb.defaultText : value);
        var skipregex = false;
        if (ddl.selectedIndex > source.ddldefault) {
            tbVal = (tb.defaultText ? tb.defaultText : '');
            if ((ValidatorTrim(value).length == 0) || (tbVal == value)) {
                //ticket 11466, No direct error message when change the radius
                clientArgs.IsValid = true; //false
                skipregex = true;
            }
        }
        else {
            if (tbVal == value) {
                clientArgs.IsValid = true;
                skipregex = true;
            }
        }
        if (!skipregex) {
            var rx = new RegExp(source.validationexpression);
            var matches = rx.exec(value);
            clientArgs.IsValid = (matches != null && value == matches[0]);
            if (clientArgs.IsValid && ddl.selectedIndex <= source.ddldefault) {
                clientArgs.IsValid = false;
            }
        }
    }
    catch (e) { clientArgs.IsValid = false; }
    // mark drop down as wrong
    if (source.errorcssclass) {
        if (clientArgs.IsValid)
            RemoveClassName(ddl, source.errorcssclass);
        else
            AddClassName(ddl, source.errorcssclass);
    }
}

function As24ValidationSummaryOnSubmit(validationGroup) {
    if (typeof (Page_ValidationSummaries) == "undefined") return;
    Page_LastValidationGroup = validationGroup;
    var summary, s;
    for (var sums = 0; sums < Page_ValidationSummaries.length; sums++) {
        summary = Page_ValidationSummaries[sums];
        summary.style.display = "none";
        var dm = summary.displaymode ? summary.displaymode.value : summary.attributes.displaymode.value;
        if (!Page_IsValid && IsValidationGroupMatch(summary, validationGroup)) {
            if (summary.showsummary != "False") {
                summary.style.display = "block";
                // next line is new
                if (dm != 'None') {
                    switch (dm) {
                        case "List":
                            first = "";
                            pre = "<span>";
                            post = "</span><br/>";
                            end = "";
                            break;
                        case "BulletList":
                        default:
                            first = "<ul>";
                            pre = "<li>";
                            post = "</li>";
                            end = "</ul>";
                            break;
                        case "SingleParagraph":
                            first = "";
                            pre = "<span>";
                            post = " </span>";
                            end = "<br/>";
                            break;
                    }
                    s = first;
                    for (var i = 0; i < Page_Validators.length; i++) {
                        if (!Page_Validators[i].isvalid && typeof (Page_Validators[i].errormessage) == "string") {
                            //s += pre + Page_Validators[i].errormessage + post;
                            // new:
                            var valCtrl = Page_Validators[i].controltovalidate;
                            var pre1 = pre;
                            if (Page_Validators[i].attributes.resourcekey) {
                                var pv = Page_Validators[i];
                                pre1 = pre.substring(0, pre.length - 1) +
								' controltype="' + pv.attributes.controltype.value + '"' +
								' propertiestotranslate="ErrorMessage"' +
								' resourcekey="' + pv.attributes.resourcekey.value + '">';
                            }
                            if (!valCtrl || valCtrl == 'undefined') {
                                if (Page_Validators[i].attributes.focusElement)
                                    valCtrl = Page_Validators[i].attributes.focusElement.value;
                            }
                            if (valCtrl && valCtrl != 'undefined') {
                                s += pre1 + '<a href="javascript:Val_SetFocus(\'' +
														valCtrl + '\')">' +
														GetErrorMessage(Page_Validators[i]) + '</a>' + post;
                            }
                            else {
                                s += pre1 + GetErrorMessage(Page_Validators[i]) + post;
                            }
                            if (dm == 'SingleParagraph') pre = ', ' + pre;
                        }
                    }
                    s += end;
                    var summaryFields = gE(summary.id + '_fields');
                    try { summaryFields.innerHTML = s; } catch (e) { }
                }
                window.scrollTo(0, 0);
            }
            if (summary.showmessagebox == "True") {
                s = "";
                if (typeof (summary.headertext) == "string") {
                    s += summary.headertext + "\r\n";
                }
                var lastValIndex = Page_Validators.length - 1;
                for (var i = 0; i <= lastValIndex; i++) {
                    if (!Page_Validators[i].isvalid && typeof (Page_Validators[i].errormessage) == "string") {
                        switch (dm) {
                            case "List":
                                s += GetErrorMessage(Page_Validators[i]);
                                if (i < lastValIndex) {
                                    s += "\r\n";
                                }
                                break;
                            case "BulletList":
                            default:
                                s += "- " + GetErrorMessage(Page_Validators[i]);
                                if (i < lastValIndex) {
                                    s += "\r\n";
                                }
                                break;
                            case "SingleParagraph":
                                s += GetErrorMessage(Page_Validators[i]) + " ";
                                break;
                        }
                    }
                }
            }
        }
    }
    if (typeof (onValidationFailed) == 'function') onValidationFailed();
}
var onFormSubmit = false;
As24ValidationOnSubmit = function() {    
    $(".error-elm").hide();
    var s;
    onFormSubmit = true;
    if (!Page_IsValid) {
        for (var i = 0; i < Page_Validators.length; i++) {
            if (!Page_Validators[i].isvalid && typeof (Page_Validators[i].errormessage) == "string") {
                var valCtrl = Page_Validators[i].controltovalidate;
                if (Page_Validators[i].errorcssclass != null) {
                    $('#' + valCtrl).addClass(Page_Validators[i].errorcssclass);
                }
                var targetElement = gE(errorElements[Page_Validators[i].id]);
                s = GetErrorMessage(Page_Validators[i]);
                if (targetElement != null) {
                    targetElement.innerHTML = s;
                    targetElement.style.display = "block";
                }
                valCtrl = gE(valCtrl);
                if (valCtrl != null && valCtrl.nodeName.toLowerCase() == "input" && (valCtrl.type.toLowerCase() == "text" || valCtrl.type.toLowerCase() == "password")) {
                    valCtrl.ErrorCss = Page_Validators[i].errorcssclass;
                    valCtrl.ErrorElementId = errorElements[Page_Validators[i].id];
                    //valCtrl.onkeyup = hideInputError;
                }
            }
        }
    }
    onFormSubmit = false;

    if (typeof (onValidationFailed) == 'function') onValidationFailed();
}

hideInputError = function(e) {
    var elm;
    if (!e) {
        elm = window.event.srcElement
    }
    else {
        elm = e.currentTarget;
    }

    $("#" + elm.id).removeClass(elm.ErrorCss);
    $("#" + elm.ErrorElementId)[0].style.display = "none";
}

function GetErrorMessage(val) {
    if (val.isrequired && val.isrequired.toUpperCase() == 'TRUE' && gE(val.controltovalidate).value.length == 0)
        return val.requirederrormessage;
    return val.errormessage;
}

function Val_SetFocus(id) {
    var obj = gE(id);
    if (obj) {
        obj.focus();
        if (obj.select) obj.select();
    }
}

function UpdateAs24ValidationSummary(val) {
    if (typeof (Page_ValidationSummaries) == "undefined") return;

    var summary, s;
    for (var sums = 0; sums < Page_ValidationSummaries.length; sums++) {
        summary = Page_ValidationSummaries[sums];
        summary.style.display = "none";
        if ((!val.isvalid || !Page_IsValid) && IsValidationGroupMatch(summary, val.validationGroup)) {
            if (summary.showsummary != "False") {
                summary.style.display = "block";
                // next line is new
                if (summary.displaymode != 'None') {
                    switch (summary.displaymode) {
                        case "List":
                            first = "";
                            pre = "<span>";
                            post = "</span><br/>";
                            end = "";
                            break;
                        case "BulletList":
                        default:
                            first = "<ul>";
                            pre = "<li>";
                            post = "</li>";
                            end = "</ul>";
                            break;
                        case "SingleParagraph":
                            first = "";
                            pre = "<span>";
                            post = " </span>";
                            end = "<br/>";
                            break;
                    }
                    s = first;
                    for (var i = 0; i < Page_Validators.length; i++) {
                        if (!Page_Validators[i].isvalid && typeof (Page_Validators[i].errormessage) == "string" && IsValidationGroupMatch(summary, Page_Validators[i].validationGroup)) {
                            var valCtrl = Page_Validators[i].controltovalidate;
                            var pre1 = pre;
                            if (Page_Validators[i].attributes.resourcekey) {
                                var pv = Page_Validators[i];
                                pre1 = pre.substring(0, pre.length - 1) +
								' controltype="' + pv.attributes.controltype.value + '"' +
								' propertiestotranslate="ErrorMessage"' +
								' resourcekey="' + pv.attributes.resourcekey.value + '">';
                            }
                            if (!valCtrl || valCtrl == 'undefined') {
                                if (Page_Validators[i].attributes.focusElement)
                                    valCtrl = Page_Validators[i].attributes.focusElement.value;
                            }
                            if (valCtrl && valCtrl != 'undefined') {
                                s += pre1 + '<a href="javascript:Val_SetFocus(\'' +
														valCtrl + '\')">' +
														GetErrorMessage(Page_Validators[i]) + '</a>' + post;
                            }
                            else {
                                s += pre1 + GetErrorMessage(Page_Validators[i]) + post;
                            }
                            if (summary.displaymode == 'SingleParagraph') pre = ', ' + pre;
                        }
                    }
                    s += end;
                    var summaryFields = gE(summary.id + '_fields');
                    try { summaryFields.innerHTML = s; } catch (e) { }
                }
            }
        }
    }
}
