//Define Global Variables
  var ErrorClassName   = "Error";
  var SummaryColor     = "Red";
  var SummaryClassName = "";
  var SummaryIntro     = "<hr size='1' color='black'>The following errors have been found with your page.<ul>";
  var SummaryExit      = "</ul>Please correct these errors before continuing.";
  var SummaryRequired  = "";
  var ShowSummary      = true;
  var ErrorItemPrefix  = "<li>";
  var ErrorItemSuffix  = "</li>";
  var LabelName        ;
  var AreLabelsSet     = false;

//Set global variables on load
//SetLabels();

//SetVariable: Sets a javascript variable dynamically
  function SetVariable (paramVariable, paramValue) {
    eval(paramVariable + "=" + paramValue);
    }

//ToggleClassName: Adds/removes a classname to an object
  function ToggleClassName(srcObject, strClassName, bolState) {
  //debug//alert("ToggleClassName(" + strObject + "," + strClassName + ")");

    if (strClassName == null || strClassName == "") return;

  //var objSource = document.getElementById(strObject);
  //if (objSource == null) return;

    if (srcObject == null) return;
      
    if (srcObject.className.indexOf(strClassName) >= 0 && (bolState == null || bolState == false)) {
      srcObject.className = srcObject.className.replace(' ' + strClassName, '');
      }
    else if (bolState == null || bolState == true) {
      srcObject.className = srcObject.className + ' ' + strClassName;
      }
    }

//ChangeClassName: Changes the class associated with a specific object
  function ChangeClassName(paramObject, paramClassName) {
    if (paramObject !== null) {
      if (paramObject.oldclassName == undefined) {
        paramObject.oldclassName = paramObject.className;
        }
      paramObject.className = paramClassName;
      }
    }

//RestoreClassName: Restores the class name of an object prior to ChangeClassName running.
//Note: If ChangeClassName is run multiple times, the original ClassName will be retained.
  function RestoreClassName(paramObject) {
    if (paramObject !== null) {
      if (paramObject.oldclassName !== undefined) {
        paramObject.className = paramObject.oldclassName;
        }
      else {
      //paramObject.className = "";
        }
      }
    }

//SetLabels: Go through all "labels" on the page and set the field's Label property accordingly
  function SetLabels() {
    if (AreLabelsSet) return true;
    var i = 0;
    var strTagName;
    var oElements = (document.all) ? document.all.tags("label") : document.getElementsByTagName("label");
    for (var t=0; t < oElements.length; t++) {
      if (oElements.item(t).htmlFor != null && oElements.item(t).htmlFor != "") {
        var oTarget = document.getElementById(oElements.item(t).htmlFor);
        if (oTarget != null) {
          if (oElements.item(t).id == "") {
            oElements.item(t).id = "LabelFor" + oElements.item(t).htmlFor;
            }
          oTarget.Label = oElements.item(t).id;
          }
        }
      }
    AreLabelsSet = true;
    return true;
    }

//ClientOnChange: Runs any time a form field is changed; generally provides client side form validation feedback
  function ClientOnChange() {
  
    if (!AreLabelsSet) SetLabels();
  
    var TargetObject, TargetLabel;
    var intErrorCount  = 0;
    var intBlankFields = 0;
    var strValidation  = "";

    if (typeof(Page_Validators) == "undefined") return true;

  //This will force full validation on entry
  //Page_ClientValidate();

  //Clear existing error messages; these will be overwritten
    strValidation += "<font Style='Color:" + SummaryColor + "' class='" + SummaryClassName + "'>";
    strValidation += SummaryIntro;

    for (i=0; i<Page_Validators.length; i++) {

      TargetObject = document.getElementById(Page_Validators[i].controltovalidate);
      
      TargetLabel  = document.getElementById(TargetObject.Label);
      
      if (!Page_Validators[i].isvalid) {

        TargetObject.invalid = 1;
      //ValidatorValidate(Page_Validators[i]);
      
        if (TargetObject.errorDisplayed == undefined) {
          ToggleClassName(TargetObject, ErrorClassName, true);
          ToggleClassName(TargetLabel,  ErrorClassName, true);
          TargetObject.errorDisplayed = 1;
          }

        intErrorCount += 1;
        if (Page_Validators[i].errormessage !== undefined) {
          strValidation += ErrorItemPrefix + Page_Validators[i].errormessage + ErrorItemSuffix;
          }
        else {
          intBlankFields += 1;
          }
        }
      else {
        if (TargetObject.invalid == 1) {
        //Disregard error but don't clear previous errors
          }
        else if (TargetObject.errorDisplayed == 1) {
          ToggleClassName(TargetObject, ErrorClassName, false);
          ToggleClassName(TargetLabel, ErrorClassName, false);
          TargetObject.errorDisplayed = undefined;
          }
        }
      }

    var oLabel = document.getElementById(LabelName);
    
    if (intErrorCount > 0) {
      if (intBlankFields > 0) {
        if (SummaryRequired == "") {
          strValidation += ErrorItemPrefix + intBlankFields + " required field" + ((intBlankFields > 1) ? "s were" : " was") + " left blank and need" + ((intBlankFields > 1) ? "" : "s") + " to be completed" + ErrorItemSuffix;
          }
        else {
          strValidation += ErrorItemPrefix + intBlankFields + " " + SummaryRequired + ErrorItemSuffix;
          }
        }
      strValidation += SummaryExit;
      strValidation += "</font>";
      if (ShowSummary) {
        oLabel.innerHTML = strValidation;
        oLabel.style.display = '';
        }
      }
    else {
      oLabel.innerHTML = "";
      oLabel.style.display = 'none';
      }

  //Return "invalid" property back to undefined; must be evaluated per check
    for (i=0; i<Page_Validators.length; i++) {
      TargetObject = document.getElementById(Page_Validators[i].controltovalidate);
      TargetObject.invalid = undefined;
      }
    return true;
    }

