// Form Validation Functions  v1.1.6
// http://www.dithered.com/javascript/form_validation/index.html
// code by Chris Nott (chris@NOSPAMdithered.com - remove NOSPAM)

//This function is for iterating through the list of required fields specified.
function checkForm(form) {

	var form = eval(form);
	for (var i = 0; i < requiredFields.length; i++){
		var fieldName = requiredFields[i];
			
		finalval = eval("form."+fieldName);
        if (finalval != null){
    		finalval.required = true;				
        }
	}
	checkFormActions(form);
	
}

function getFormErrors(form) {
   var errors = new Array();
   
   // loop thru all form elements
   for (var elementIndex = 0; elementIndex < form.elements.length; elementIndex++) {
      var element = form.elements[elementIndex];
	      
      // text and textarea types
      if (element.type == "text" || element.type == "textarea"  || element.type == "hidden") {
      
      	 element.value = trimWhitespace(element.value)
         
	 // required element
         if (element.required  && element.value == '') {
            errors[errors.length] = element.name;
         }
         
         // maximum length
         else if (element.maxlength && isValidLength(element.value, 0, element.maxlength) == false) {
            errors[errors.length] = element.name;
         }

         // minimum length
         else if (element.minlength && isValidLength(element.value, element.minlength, Number.MAX_VALUE) == false) {
            errors[errors.length] = element.name;
         }
         
       }  
      
      // password 
      else if (element.type == "password") {
         
         // required element
         if (element.required  && element.value == '') {
            errors[errors.length] = element.name;
         }
         
         // maximum length
         else if (element.maxlength && isValidLength(element.value, 0, element.maxlength) == false) {
            errors[errors.length] = element.name;
         }

         // minimum length
         else if (element.minlength && isValidLength(element.value, element.minlength, Number.MAX_VALUE) == false) {
            errors[errors.length] = element.name;
         }
      }
      
      // file upload
      if (element.type == "file") {
         
         // required element
         if (element.required  && element.value == '') {
            errors[errors.length] = element.name;
         }
      }
      
      // select
      
      else if (element.type == "select" || element.type == "selectlist" || element.type == "select-one" || element.type == "select-multiple") {
		
         // required element
         
         if (element.required && element.options[element.selectedIndex].value == -1) {
            errors[errors.length] = element.name;
         }
         
	 // disallow empty value selection
         else if (element.disallowEmptyValue && element.options[element.selectedIndex].value == '') {
            errors[errors.length] = element.name;
         }

      }
	  
      
      // radio buttons
      else if (element.type == "radio") {
         var radiogroup = form[element.name];
         // required element
         if (radiogroup.required && radiogroup.length) {
            var checkedRadioButton = -1;
            for (var radioIndex = 0; radioIndex < radiogroup.length; radioIndex++) {
               if (radiogroup[radioIndex].checked == true) {
                  checkedRadioButton = radioIndex;
                  break;
               }
            }
            if (checkedRadioButton == -1) {
               errors[errors.length] = radiogroup[0].name;
            }
         }
         
         radiogroup = null;
      }
      
      // checkbox buttons
      
      else if (element.type == "checkbox") {      
    	var chkboxgrp = form[element.name];

    	// required element
        if (chkboxgrp.required){
          if (chkboxgrp.length != null){
        	  var checkedBox = -1;
        	  for (var chkIndex = 0; chkIndex < chkboxgrp.length; chkIndex++) {
        	    if (chkboxgrp[chkIndex].checked == true) {
        		    checkedBox = chkIndex;
        		    break;
        	    }
              }
              if (checkedBox == -1) {
                errors[errors.length] = chkboxgrp[0].name;
              }
          }else {
            var chkedBox = -1;
            if (chkboxgrp.checked == true){ 
                chkedBox = 0;
            }
            if (chkedBox == -1) {
                errors[errors.length] = chkboxgrp.name;
            }
        }
        chkboxgrp = null;
       }
     }
   }   
	return errors;
}


// Remove leading and trailing whitespace from a string
function trimWhitespace(string) {
	var newString  = '';
	var substring  = '';
	beginningFound = false;
	
	// copy characters over to a new string
	// retain whitespace characters if they are between other characters
	for (var i = 0; i < string.length; i++) {
		
			
		// copy non-whitespace characters
		
		//Adding check for char code 22 also. This character is equivalent to Ctrl+V and 
		//on Mac if we use this character (ctrl+V) to fill in text boxes,
		//it may result in application error if framework required field error messages 
		//are not created,because the framework code does not recognize this as a valid character.
		//Even though this being fixed for 1213 page, the effect would be global.
		//   -pjames-
		
		if (string.charAt(i) != ' ' && string.charCodeAt(i) != 9 && string.charCodeAt(i)!=22) {
			
			
			// if the temporary string contains some whitespace characters, copy them first
			if (substring != '') {
				newString += substring;
				substring = '';
			}
			newString += string.charAt(i);
			if (beginningFound == false) beginningFound = true;
		}
		
		// hold whitespace characters in a temporary string if they follow a non-whitespace character
		else if (beginningFound == true) substring += string.charAt(i);
	}
	return newString;
}


// The following function is called after all the validation have been done
function checkFormActions(form) {
	for (var elementIndex = 0; elementIndex < form.elements.length; elementIndex++) {
		var element = form.elements[elementIndex];
		
		if (document.getElementById(element.name)) {
            if (navigator.appName == 'Netscape'){
                document.getElementById(element.name).style.color = "#000000";
            } else {
                if (document.getElementById(element.name).type != null){
                    var strNewName = element.name + "td";
                    if (document.getElementById(strNewName)) {
                        document.getElementById(strNewName).style.color = "#000000";
                    }
                } else {
        			document.getElementById(element.name).style.color = "#000000";
                }
            }
		}
	}

	var errors = getFormErrors(form);
	if (errors.length > 0) {
		for (var errorIndex = 0; errorIndex < errors.length; errorIndex++) {
            if (navigator.appName == 'Netscape'){
                document.getElementById(errors[errorIndex]).style.color = "#FF3333";
            } else {        
                if (document.getElementById(errors[errorIndex]).type != null){ 
                    var strNewName = errors[errorIndex] + "td" ;
    			    document.getElementById(strNewName).style.color = "#FF3333";
                }else{
                    document.getElementById(errors[errorIndex]).style.color = "#FF3333";
                }
            }
		}
		document.getElementById(errorDivID).style.visibility = "visible";
		document.getElementById(errorDivID).style.display = "inline";
		window.scroll(0,0);
		return false;
	}
	return true
	//form.submit();
}
