﻿if(typeof ValidatorUpdateDisplay == "function") {
    var __funcbody, newfunc;
    __funcbody = ValidatorUpdateDisplay.toString();
    __funcbody = __funcbody.substring(__funcbody.indexOf("{") + 1, __funcbody.lastIndexOf("}"));

    newfunc = new Function("val", "ChangeControlToValidate(val); " + __funcbody );

    ValidatorUpdateDisplay = newfunc;
}

if(typeof Page_ClientValidate == "function") {
    var __funcSubmit, newSubmit
    __funcSubmit = Page_ClientValidate.toString();
    __funcSubmit = __funcSubmit.substring(__funcSubmit.indexOf("{") + 1, __funcSubmit.lastIndexOf("}"));

    newSubmit = new Function("validationGroup", "SetValidationBySubmit(validationGroup); " + __funcSubmit);

    Page_ClientValidate = newSubmit;
}

var validationIsBySubmit = false;
var firstValidatorPage;
var firstInvalidObject;
var lastTabIndex = 0;

function SetValidationBySubmit(valGroup) {  
    try {
        validationIsBySubmit = true;

        var maxTabIndex = theForm.elements.length + 1;

        for(var i = 0; i < theForm.elements.length; i++) {
            if(theForm.elements[i].tabIndex.toString() != "-1") {
                if(theForm.elements[i].type == "submit") {
                    theForm.elements[i].tabIndex = maxTabIndex;
                } else {
                    theForm.elements[i].tabIndex = maxTabIndex + 1;
                }
            }
        }
            
        lastTabIndex = 0;
    } catch(err) {
        alert(err);
    }
}

function ChangeControlToValidate(objValidator) {
    try {
        var ulValidationMessages = document.getElementById("validationsummaryitems");
        var divValidationSummary = document.getElementById("validationsummary");
        var divInputInformation = document.getElementById("inputinformation");
            
        if(firstValidatorPage == null || firstValidatorPage == objValidator.id) {
            firstValidatorPage = objValidator.id;
            firstInvalidObject = null;
            
            // Remove all validation messages
            if(ulValidationMessages == null){
                while(ulValidationMessages.hasChildNodes()) {
                    ulValidationMessages.removeChild(ulValidationMessages.lastChild);
                }
            }
        }
    
        var blnIsValid = checkObjectToValidateIsValid(objValidator.controltovalidate);

        //change the controlToValidate
        var objToValidate = document.getElementById(objValidator.controltovalidate);
        
        if(blnIsValid) {
            if(objToValidate.getAttribute("preview") != null) {
                objPreview = document.getElementById(objToValidate.getAttribute("preview"));
                
                objPreview.style.borderColor = "";
                objPreview.style.color = "inherit";
                //objPreview.style.backgroundColor = "";
            }
        
            objToValidate.style.borderColor = "";
            objToValidate.style.backgroundColor = "";
            
            if(firstInvalidObject != null && firstInvalidObject.id == objToValidate.id){
                firstInvalidObject = null;
            }
        }
        else {                    
            if(objToValidate.getAttribute("preview") != null) {
                objPreview = document.getElementById(objToValidate.getAttribute("preview"));
                
                objPreview.style.borderColor = "#ff0000";
                objPreview.style.color = "#ff0000";
                //objPreview.style.backgroundColor = "#fbeeee";
            }
            
            objToValidate.style.borderColor = "#ff0000";
            objToValidate.style.backgroundColor = "#fbeeee";
            
            if(firstInvalidObject == null) {
                firstInvalidObject = objToValidate;
            }
            
            if(validationIsBySubmit) {
                //set tabindex
                lastTabIndex++;
                
                objToValidate.tabIndex = lastTabIndex;
            }
        }
        
        //if validator not is required field validator then replace the message to the validationsummary
        var curType = objValidator.evaluationfunction.toString();
        var curIsRequiredFieldValidator = (curType.indexOf("RequiredFieldValidatorEvaluateIsValid") != -1);
        
        if(!objValidator.isvalid && !curIsRequiredFieldValidator) {
            //get the fielddescription
            var counter = 0;
            var strFieldDescription = "";
            var objParentTR = objValidator.parentNode;
            while(objParentTR.nodeName != "TR") {
                objParentTR = objParentTR.parentNode;
                counter++;
                
                if(counter > 5)
                    continue;
            }
            
            for(var c = 0; c < objParentTR.childNodes.length; c++) {
                if(objParentTR.childNodes[c].nodeName == "TD") {
                    strFieldDescription = objParentTR.childNodes[c].firstChild.innerHTML;
                    break;
                }
            }
            
            strFieldDescription = strFieldDescription.replace("*", "");
            
            var li = document.createElement("li");
            li.onclick = function() { objToValidate.select() };
            li.innerHTML = strFieldDescription + ":<i>" + objValidator.innerHTML + ".</i>";
                        
            if(ulValidationMessages != null) {
                ulValidationMessages.appendChild(li);
                objValidator.style.display = "none";
            }
        }
        
        //count NOT requriedfieldvalidators > 0: show
        if(ulValidationMessages != null && ulValidationMessages.childNodes.length > 0) {
            if(divInputInformation != null) {
                document.getElementById("inputinformation").style.display = "none";
            }
            
            if(divValidationSummary != null && divValidationSummary.style.display != "block") {
                document.getElementById("validationsummary").style.display = "block";
                opacity("validationsummary", 0, 100, 150);
            }
        }
        else {
            if(divInputInformation != null && divInputInformation.style.display != "block") {
                document.getElementById("inputinformation").style.display = "block";
                opacity("inputinformation", 0, 100, 150);
            }
        
            if(divValidationSummary != null) {
                document.getElementById("validationsummary").style.display = "none";
            }
        }
        
        if(firstInvalidObject != null) {
            firstInvalidObject.select();
        }
    }
    catch(err) {
        //alert(err);
    }
}

function checkObjectToValidateIsValid(objToValidateID){
    var arrValidators = new Array();
    
    for(var i = 0; i < Page_Validators.length; i++) {
        if(Page_Validators[i].controltovalidate == objToValidateID)
            arrValidators.push(Page_Validators[i]);
    }
    //determine if one of the associated validators fails
    for(var j = 0; j < arrValidators.length; j++) {
        if(!arrValidators[j].isvalid) {
            return false;
        }
    }
    return true;
}