﻿/* => http://cw2.columbiweb.no/js/validators.js
Contains functions that override default asp.net validator functions for enhanced UI experience.
*/

ValidatorUpdateIsValid = function() {
    Page_IsValid = AllValidatorsValid(Page_Validators);
    ClearValidatorCallouts();
    SetValidatorCallouts();

    var container = "#"+Skjema_Feil_Container;
    if (Page_IsValid) $(container).hide("fast"); else $(container).show("fast");
} 

ValidatorValidate = function(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);
            }
        }
    }
    
    ClearValidatorCallouts();
    SetValidatorCallouts(); 

    ValidatorUpdateDisplay(val);
}

SetValidatorCallouts = function() {
    var i;
    var pageValid = true;
    for (i = 0; i < Page_Validators.length; i++) {
        var inputControl = document.getElementById(Page_Validators[i].controltovalidate);
        if (!Page_Validators[i].isvalid) {
            if (pageValid) {
                inputControl.focus();

/*  Denne koden sørger for å vise fram rammen med feil-sammendrag.
    Dette skal kun skje ved innsending,
    men nå kalles denne funksjonen hver gang et tekstfelt eller avkryssing endres...

                var containerID = "#"+Skjema_Feil_Container;
                var containers = $(containerID);
                if (containers.length) {
                    var c = containers[0];
                    if (c.scrollIntoView) {
                        c.scrollIntoView();
                    }
                }
*/
            }
            WebForm_AppendToClassName(inputControl, Skjema_Feil_Class);
            pageValid = false;
        }
    }
    return pageValid;
}

ClearValidatorCallouts = function()
{
    var i;                    
    var invalidConrols = [];
    for (i = 0; i < Page_Validators.length; i++) {         
        var inputControl = document.getElementById(Page_Validators[i].controltovalidate);
        WebForm_RemoveClassName(inputControl, Skjema_Feil_Class);                                                  
    }                                        
}   

ValidatorOnChange = function (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;
    }
    var vals;    
    
    if (typeof(targetedControl.Validators) != "undefined") {
        vals = targetedControl.Validators;
    }
    else {
        if (targetedControl.tagName.toLowerCase() == "label") {
            targetedControl = document.getElementById(targetedControl.htmlFor);
            vals = targetedControl.Validators;	                    
        }
    }
    var i;

	//if date picker caused it in IE
    if(vals == null)   
		vals = Page_Validators;
    	
	for (i = 0; i < vals.length; i++) {
		ValidatorValidate(vals[i], null, event);
	}	   
	
	ValidatorUpdateIsValid(); 
}

ValidatorUpdateDisplay = function(val) {
    if (typeof (val.display) == "string") {
        if (val.display == "None") {
            return;
        }
        if (val.display == "Dynamic") {
            //undo comments if not using jQuery
            if (val.isvalid)
                $(val).hide("fast"); //val.style.display = "none";
            else {
                $(val).show("fast"); //val.removeAttribute("style");
            }
            return;
        }
    }
    if ((navigator.userAgent.indexOf("Mac") > -1) && (navigator.userAgent.indexOf("MSIE") > -1)) {
        val.style.display = "inline";
    }

    val.style.visibility = val.isvalid ? "hidden" : "visible";
}

