function ValidatorUpdateDisplay(val) {
  if (typeof(val.display) == "string") {
    if (val.display == "None") {
      return;
    }
    if (val.display == "Dynamic") {
      val.style.display = val.isvalid ? "none" : "block";
      return;
    }
  }
  if ((navigator.userAgent.indexOf("Mac") > -1) &&
      (navigator.userAgent.indexOf("MSIE") > -1)) {
    val.style.display = "block";
  }
  val.style.visibility = val.isvalid ? "hidden" : "visible";
}

function ValidatorReset(valId) {
	var val = document.getElementById(valId);	
	val.isvalid = true;	
	ValidatorUpdateDisplay(val);
}

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)) return false; ");
            }
        }
        control.Validators[control.Validators.length] = val;
    }
}

function AtLeastOneValidatorEvaluateIsValid(val) {
	var c = val.controlstovalidate.split(',');
	for(var i = 0; i < c.length; i++) {
	  var value = ValidatorGetValue(c[i]);
	  if(ValidatorTrim(value).length > 0) {
	    return true;
	  }
	}
	return false;
}

function ListSelectionEvaluateIsValid(val) {
  var ctrl = document.getElementById(val.controltovalidate);
  if(ctrl != null) {
    var minsel = parseInt(val.minimumselected);
    var maxsel = parseInt(val.maximumselected);
    
		var selCount = 0;
		for(var i = 0; i < ctrl.options.length; i++) {
      if (ctrl.options[i].selected) {
				selCount++;
			}
		}

		if (selCount < minsel) {
			return false;
		}

		if (maxsel > 0) {
			if (selCount > maxsel) {
				return false;
			}
		}
  }
  return true;
}

function CheckEvaluateIsValid(val) {
  var ctrl = document.getElementById(val.controltovalidate);
  if(ctrl != null) {
    return ctrl.checked;
  }
  return true;
}

function Page_ClientValidateGroups(validationGroups) {
	Page_InvalidControlToBeFocused = null;
	if (typeof(Page_Validators) == "undefined") {
		return true;
	}
	var i;
	for(i = 0; i < Page_Validators.length; i++) {
		var g;
		for(g = 0; g < validationGroups.length; g++) {
			if(Page_Validators[i].validationGroup == validationGroups[g]) {
				ValidatorValidate(Page_Validators[i], validationGroups[g], null);
			}
		}
	}
	ValidatorUpdateIsValid();
	Page_BlockSubmit = !Page_IsValid;
	return Page_IsValid;    
}
