// JavaScript Document
// Attach function to 'onload' or 'load' event for window.
// This is necessary because the document might already have a load event.
// ----------------------------------------------------------------------------------


if (window.addEventListener) { // W3C-compatible browser
   window.addEventListener('load', setEventHandlers, false);
} else {   // Non-compliant MS browser
   window.attachEvent('onload', setEventHandlers);
}

function setEventHandlers() {
   if (zXmlHttp.isSupported()) {
      // Check which form should be AJAX-enabled. These forms have a name like 'ajax_xxx':
      for ( var i=0; i < document.forms.length; i++ ) {
         //if ( document.forms[i].name.substr(0, 5) == 'ajax_' ) {
            oTheForm = document.forms[i];
            // Get all form elements which need validation.
            // These have a class starting with 'validation-' associated with them:
            for ( var j=0; j < oTheForm.elements.length; j++ ) {
               aAllElementClasses = oTheForm.elements[j].className.split(' ');
               // Check if validation class is present:
               for ( var k=0; k < aAllElementClasses.length; k++ ) {
                  if ( aAllElementClasses[k].substring(0, 9) == 'validate-' ) {
                     var formElement = document.getElementById(oTheForm.elements[j].name);
                     formElement.onblur = validateField;
					 //formElement.onchange = validateField;
                     if ( aAllElementClasses[k].substring(9, 18) == 'required-' ) {
						 if(document.getElementById('page').value == 'add'){
                        formElement.valid = false; // Default for required fields: invalid
                     } else {
                        formElement.valid = true;  // Default for optional fields: valid (since initially they're empty)
                     }
					 }
                     // Reset label's text (in case this function is called somewhen after the initial page load):
                     //oLabel = document.getElementById('lbl'+oTheForm.elements[j].name.substr(3));
                     //oLabel.innerHTML = resetLabelText(oLabel);
                  }
               } // for (element classes)
            } // for (form elements)
			try{
				if(document.getElementById('page').value == 'add'){
				toggleSubmitButtons(oTheForm, true); // Default: Disable all submit buttons
				} else {
				toggleSubmitButtons(oTheForm, false);
				}
			}catch(e){
			}
         } // if ajax
     // } // for (forms)
    }
};

function validateField(oEvent) {
   oEvent = oEvent || window.event;
   var formElement = oEvent.target || oEvent.srcElement;

   // Get name of the form to which this element belongs:
   var oForm = getParentForm(formElement);

   var oXmlHttp = zXmlHttp.createRequest();

   // Get form element's classes and extract the one which represents the validation rule.
   // (scheme: "validation-hereIsTheRule"). Need to extract from possible other classes:
   var sClassName = formElement.className;
   var iValidationClassStart = sClassName.indexOf('validate-');
   var iValidationClassEnd   = ( sClassName.indexOf(' ') > 0 ) ? sClassName.indexOf(' ') : sClassName.length;
   var sValidation = sClassName.substr(iValidationClassStart, iValidationClassEnd);

   // Add form element's name and validation rule to url:
   var cdate = document.getElementById('ContractDate').value;
   var sURL = "ajaxValidateForm.php?formElement=" + formElement.name + "&value=" + encodeURIComponent(formElement.value);
   sURL += '&validation=' + sValidation + '&cdate=' + cdate + "&dummy=" + new Date().getTime();;
   var boolIsFormValid = false;

   oXmlHttp.open("get", sURL, true);
   oXmlHttp.onreadystatechange = function() {
	   var vId = 'img'+formElement.name;
      if (oXmlHttp.readyState == 4) {
      try{
         if (oXmlHttp.status == 200) {
			//alert(oXmlHttp.responseText);
            var arrInfo = oXmlHttp.responseText.split("||");
			
            //var sImage = '<img src="/images/exclamation.jpg" width="20" height"20" title="' + arrInfo[1] + '" />';
            //var oLabel = document.getElementById('lbl'+formElement.name.substr(3));
            //sLabelText = resetLabelText(oLabel);
			
			var sInput = document.getElementById(formElement.name);
            if (!eval(arrInfo[0])) {
               //oLabel.innerHTML  = sLabelText + sImage;
			   if(formElement.name == 'SchoolName'){
				document.getElementById('errMessage').innerHTML = arrInfo[1];
			   }
			   if(formElement.name == 'AccountName'){
				document.getElementById('errMessage1').innerHTML = arrInfo[1];
			   }
			   if(formElement.name == 'ExpireDate'){
				document.getElementById('expireErrMessage').innerHTML = arrInfo[1];
			   }
			   document.getElementById(vId).src = "images/false.gif";
			   sInput.style.border = "1px solid #d12f19";
               formElement.valid = false;
            } else {
				if(formElement.name == 'SchoolName'){
				document.getElementById('errMessage').innerHTML = arrInfo[1];
			   }
			   if(formElement.name == 'AccountName'){
				document.getElementById('errMessage1').innerHTML = arrInfo[1];
			   }
			   if(formElement.name == 'ExpireDate'){
				document.getElementById('expireErrMessage').innerHTML = arrInfo[1];
			   }
               //oLabel.innerHTML  = sLabelText;
			   document.getElementById(vId).src = "images/true.gif";
			   sInput.style.border = "1px solid #338800";
               formElement.valid = true;
            }

            // Enable or disable all Ajax submit buttons on this form:
            boolIsFormValid = isFormValid(oForm);
            toggleSubmitButtons(oForm, !boolIsFormValid);
         } else {
            alert("An error occurred while trying to contact the server:"+oXmlHttp.status+', '+oXmlHttp.responseText);
         }
         }
         catch(err){
			//alert(err);
			toggleSubmitButtons(oForm, true);
         }
      } else {
      	document.getElementById(vId).src = "images/ajax-loader.gif";
      }
   };
   oXmlHttp.send(null);
};
function resetLabelText(oLabel) {
// Resets the label's text to what it was before the error image was added.
   if ( !oLabel) { alert('Missing label for field which should be validated.'); }
   sLabelText = oLabel.innerHTML.toUpperCase(); // Better be safe. IE adds dynamically generated tags in upper case!
   iImagePos  = sLabelText.indexOf('<IMG');
   if ( iImagePos != -1 ) {
      return oLabel.innerHTML.substr(0, iImagePos);
   } else {
      return oLabel.innerHTML;
   }
}
function getParentForm(oElement) {
   while ( oElement.nodeName != 'FORM' ) {
      oElement = oElement.parentNode;
   }
   return oElement;
}
function toggleSubmitButtons(oForm, boolDisabled) {
   for ( var j=0; j < oForm.elements.length; j++ ) {
      if ( oForm.elements[j].id.substring(0, 11) == 'ajaxSubmit_' ) {
         oForm.elements[j].disabled = boolDisabled;
      }
   }
}
function isFormValid(oForm) {
   var boolValid = true;
   for (var i=0; i < oForm.elements.length; i++) {
      if (typeof oForm.elements[i].valid == "boolean") {
         boolValid = boolValid && oForm.elements[i].valid;
      }
   }
   return boolValid;
}
function prepareItemEdit() {
// Prepare editing an item: populates & shows form
   //populateLowerForm(...);
   //makeFormValid(document.ajax_form_1); // Make all form elements 'valid' because data comes from database (function is in AJAX code)
   makeFormValid(document.form);
}
function makeFormValid(oForm) {
// Sets all form elements which have the custom property 'valid' defined to 'true'.
// Used to make entire form valid initially e.g. when loaded with database values.
   for (var i=0; i < oForm.elements.length; i++) {
      if (typeof oForm.elements[i].valid == "boolean") {
         oForm.elements[i].valid = 'true';
      }
   }
}

