// JavaScript Document
//-----------------------------------------------------------------------------------------
// Author: SavithaV
// Purpose: General JavaScript function to validate web pages
// Modified History: 
//		04/26/06 - validateStartEndDates to compare dates function
//-----------------------------------------------------------------------------------------

// Create a 'get' query string with the data from a given form

//---------------------------------------------------------------------
//Form Validation
//---------------------------------------------------------------------       
function getFormErrors(form) {
   
   var element;
   var mess = '';
   var errors = new Array();
   // For each form element, extract the name and value

   //alert(form.elements.length);   
   for (var i = 0; i < form.elements.length; i++) 
   {
     	element = form.elements[i];
		
	    //alert (i + '  ' + element.id + '  '+  element.type);

		if (element.type == "text" || element.type == "textarea")
		{
			  // validate for format - General/Zip code/phone number/ssn/only character/only numbers/
 			   
			   // step 1: trim white spaces
			    element.value = trimWhitespace(element.value)
				
			  // step 2: required check
			     if (element.required  && element.value == '')
				 {
            		errors[errors.length] = element.Error;
				 }
				 else if (element.maxlength && isValidLength(element.value, 0, element.maxlength) == false) {
					 			 // step 3: maximum length
           			 //errors[errors.length] = element.maxlengthError;
					 errors[errors.length] = element.maxlengthError;
        		 }
         		else if (element.minlength && isValidLength(element.value, element.minlength, Number.MAX_VALUE) == false) {
					// Step 4: minimum length
            		errors[errors.length] = element.minlengthError;
				}
				// pattern ( alphanumeric, numeric, alphabetic)
         		else if (element.pattern) {
					//alert(element.pattern);
					if ((element.pattern.toLowerCase() == 'alphanumeric' && isAlphanumeric(element.value, true) == false) ||
                  		(element.pattern.toLowerCase() == 'numeric' && isNumeric(element.value, true) == false) ||
                  		(element.pattern.toLowerCase() == 'alphabetic' && isAlphabetic(element.value, true) == false)||
						(element.pattern.toLowerCase() == 'decimal43' && isDecimal43(element.value, true) == false) ||
						(element.pattern.toLowerCase() == 'decimal22' && isDecimal22(element.value, true) == false) ||
						(element.pattern.toLowerCase() == 'decimalany' && isDecimalAny(element.value, true) == false))
					{
						 errors[errors.length] = element.patternError;
						 //+ element.id;
					}
					
					if (element.pattern.toLowerCase() == 'datestring' && isValidDate(element, true) == false) 
						errors[errors.length] = element.patternError;

		 		}
				 

			//	alert(errors[errors.length]);
		 
		  }
		  
		 else if (element.type == "select-one" || element.type == "select-multiple" || element.type == "select") 
		 {
	
			 // required element
			 if (element.required && element.selectedIndex == -1) {
				errors[errors.length] = element.Error;
			 }
         
		   // disallow empty value selection
			 else if (element.disallowEmptyValue && (element.options[element.selectedIndex].value == ''|| element.options[element.selectedIndex].value == 'select-one')) {
				errors[errors.length] = element.Error;
			 }
		 }	
   }
   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
      if (string.charAt(i) != ' ' && string.charCodeAt(i) != 9) {
         
         // 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;
}

//---------------------------------------------------------------------
// Check that the number of characters in a string is between a max and a min
//---------------------------------------------------------------------
function isValidLength(string, min, max) {
   if (string.length < min || string.length > max) return false;
   else return true;
}

//---------------------------------------------------------------------
// Check that a string contains only letters and numbers
//---------------------------------------------------------------------
function isAlphanumeric(string, ignoreWhiteSpace) {
   if (string.search) {
      if ((ignoreWhiteSpace && string.search(/[^\w\s]/) != -1) || (!ignoreWhiteSpace && string.search(/\W/) != -1)) return false;
   }
   return true;
}

//---------------------------------------------------------------------
// Check that a string contains only letters
//---------------------------------------------------------------------
function isAlphabetic(string, ignoreWhiteSpace) {
   if (string.search) {
      if ((ignoreWhiteSpace && string.search(/[^a-zA-Z\s]/) != -1) || (!ignoreWhiteSpace && string.search(/[^a-zA-Z]/) != -1)) return false;
   }
   return true;
}

//---------------------------------------------------------------------
// Check that a string contains only numbers
//---------------------------------------------------------------------
function isNumeric(string, ignoreWhiteSpace) {
   if (string.search) {
	   string = trimWhitespace(string);
       if ((ignoreWhiteSpace && string.search(/^\s*[-+.]\d*$/) != -1) || (!ignoreWhiteSpace && string.search(/^\s*[-+.]\d*$/) != -1)) return false;
	}
   return true;
}

//---------------------------------------------------------------------
// Check that a string contains 1 digit right of decimal and 
// 3 digits after decimal
//---------------------------------------------------------------------
function isDecimal43(string, ignoreWhiteSpace) {
if (string.search) 
   {
	 string = trimWhitespace(string);

	 if ((string.search(/^(\d\.\d\d\d)$/) == -1) && (string != 0))
		return false;
  }
   return true;
}

//---------------------------------------------------------------------
// Check that a string contains 0 digit right of decimal and 
// 2 digits after decimal
//---------------------------------------------------------------------
function isDecimal22(string, ignoreWhiteSpace) {
if (string.search) 
   {
	 string = trimWhitespace(string);

	 if ((string.search(/^(0\.\d\d)$/) == -1) && (string != 0))
		return false;
   }
   return true;
}

//---------------------------------------------------------------------
// Check that a string contains 1 digit right of decimal and 
// 3 digits after decimal
//---------------------------------------------------------------------
function isDecimalAny(string, ignoreWhiteSpace) {
if (string.search) 
   {
	 string = trimWhitespace(string);

	 if ((string.search(/^(\d+\.\d+)$/) == -1) && (string != 0))
		return false;
   }
   return true;
}

//---------------------------------------------------------------------
// Check that a string contains only 2 decimal
//---------------------------------------------------------------------
function isDecimalAny2(string, ignoreWhiteSpace) {
	 string = trimWhitespace(string);

	 if (ignoreWhiteSpace && (s.search(/^(\d+\.\d\d)$/)!= -1)&& (string != 0))
		return false;
   
   return true;
}

//---------------------------------------------------------------------
// Check that a string contains only 2 decimal
//---------------------------------------------------------------------
function isYearSavi(string, ignoreWhiteSpace) {
 //if (string.search) 
  // {
	// string = trimWhitespace(string);

	// if (s.search(/^(\d\d\d\d)$/)!= -1)
		return false;
	//	else
		//return true;
   //}
   //return true;
}

//---------------------------------------------------------------------
//compare 2 dates
//---------------------------------------------------------------------
function padout(number) { return (number < 10) ? '0' + number : number; }

function y2k(number) { return (number < 1000) ? number + 1900 : number; }

function validateStartEndDates(std,end) 
{

    var startdate = new Date(std);
    var enddate = new Date(end);

    var validstartdate = padout(startdate.getDate()) + '/' + padout(startdate.getMonth()+1) + '/' + y2k(startdate.getYear())
    var validenddate = padout(enddate.getDate()) + '/' + padout(enddate.getMonth()+1) + '/' + y2k(enddate.getYear())
    
    starttime = Date.UTC(y2k(startdate.getYear()),startdate.getMonth(),startdate.getDate(),0,0,0);
    endtime = Date.UTC(y2k(enddate.getYear()),enddate.getMonth(),enddate.getDate(),0,0,0);
    
    if (starttime < endtime) {
        return true;
    }
    else 
    {
        return false
    }
    
    return true;
}

//---------------------------------------------------------------------
//isValidDate
//---------------------------------------------------------------------
function isValidDate(field){
var checkstr = "0123456789";
var DateField = field;
var Datevalue = "";
var DateTemp = "";
var seperator = "/";
var day;
var month;
var year;
var leap = 0;
var err = 0;
var i;
   err = 0;
   DateValue = DateField.value;
   /* Delete all chars except 0..9 */
   for (i = 0; i < DateValue.length; i++) {
	  if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
	     DateTemp = DateTemp + DateValue.substr(i,1);
	  }
   }
   DateValue = DateTemp;
   /* Always change date to 8 digits - string*/
   /* if year is entered as 2-digit / always assume 20xx */
   if (DateValue.length == 6) {
      DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
   if (DateValue.length != 8) {
      err = 19;}
   /* year is wrong if year = 0000 */
   year = DateValue.substr(4,4);
   if (year == 0) {
      err = 20;
   }
   /* Validation of month*/
   month = DateValue.substr(0,2);
   if ((month < 1) || (month > 12)) {
      err = 21;
   }
   /* Validation of day*/
   day = DateValue.substr(2,2);
   if (day < 1) {
     err = 22;
   }
   /* Validation leap-year / february / day */
   if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
      leap = 1;
   }
   if ((month == 2) && (leap == 1) && (day > 29)) {
      err = 23;
   }
   if ((month == 2) && (leap != 1) && (day > 28)) {
      err = 24;
   }
   /* Validation of other months */
   if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
      err = 25;
   }
   if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
      err = 26;
   }
   /* if 00 ist entered, no error, deleting the entry */
   if ((day == 0) && (month == 0) && (year == 00)) {
      err = 0; day = ""; month = ""; year = ""; seperator = "";
   }

/* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
   if (err == 0) {
      DateField.value = month+ seperator + day  + seperator + year;
	  return true;
   }
   /* Error-message if err != 0 */
   else {
     return false; // not valid date
   }
}

//End compare dates



