<!-- ********************************************************************************* --> 
<!-- *                            ACTIVATE CLOAKING DEVICE                           * --> 
<!-- ********************************************************************************* -->

<!-- ********************************************************************************** -->
<!-- *                                 The Date Validator                             * -->
<!-- *                                                                                * -->
<!-- * This routine will validate a date entered using any of the following date      * -->
<!-- * formats and seperators.                                                        * -->
<!-- *                                                                                * -->
<!-- * Valid Date Formats                                                             * -->
<!-- *		ddmmyy, ddmmmyy, ddmmyyyy, ddmmmyyyy, d/m/yy, dd/m/yy, d/mm/yy,           * -->
<!-- *       dd/mm/yy, d/mmm/yy, dd/mmm/yy, d/m/yyyy, dd/m/yyyy, d/mm/yyyy,           * -->
<!-- *       dd/mm/yyyy, d/mmm/yyyy, dd/mmm/yyyy                                      * -->
<!-- *                                                                                * -->
<!-- * Valid Date Seperators                                                          * -->
<!-- * 	'-','.','/',' ',':','_',','                                                   * -->
<!-- *                                                                                * -->
<!-- * Use the following syntax example.                                              * -->
<!-- * 	<INPUT onBlur="JavaScript:convert_date(strDate);"                             * -->
<!-- *        maxLength=11 size=11 name=strDate>                                      * -->
<!-- *                                                                                * -->
<!-- * Copyright (c) 2001 Ascii Technologies. All Rights Reserved.                    * -->
<!-- *                                                                                * -->
<!-- ********************************************************************************** --> 

/*******************************************************************
   convert_date()
   
   Function to convert supplied dates to format - dd/mm/yyyy.
	Valid input dates = 
		ddmmyy, ddmmmyy, ddmmyyyy, ddmmmyyyy,
		d/m/yy, dd/m/yy, d/mm/yy, dd/mm/yy, d/mmm/yy, dd/mmm/yy,
		d/m/yyyy, dd/m/yyyy, d/mm/yyyy, dd/mm/yyyy, d/mmm/yyyy, dd/mmm/yyyy
	Valid date seperators =
		'-','.','/',' ',':','_',','
		
	Calls convert_month()
			invalid_date()
			validate_date()
			validate_year()
			
	Changes:  
		05/24/02	PO'S.  Modified to present dates in mm/dd/yyyy format.
					The above formats should now be viewed in this light.
*******************************************************************/

function convert_date(field1) {
	var fLength = field1.value.length; // Length of supplied field in characters.

	// Array to hold permitted date seperators.  Add in '\' value
	var divider_values = new Array ('-','.','/',' ',':','_',',');
	var array_elements = 7;							// Number of elements in the divider_values().
	var day1 = new String(null);					// day value holder
	var month1 = new String(null);					// month value holder
	var year1 = new String(null);					// year value holder
	var divider1 = null;							// divider holder
	var outdate1 = null;							// formatted date to return
	var counter1 = 0;								// counter for divider looping 
	var divider_holder = new Array ('0','0','0');	// array to hold positions of dividers in dates
	var s = String(field1.value);					// supplied date value variable

	//alert("Date passed to convert_date: " + s);

	//If field is empty do nothing
	if ( fLength == 0 ) {
	   return true;
	}

	// Deal with today or now
	if ( field1.value.toUpperCase() == 'NOW' || field1.value.toUpperCase() == 'TODAY' ) {
		var newDate1 = new Date();
	  	if (navigator.appName == "Netscape") {
	    	var myYear1 = newDate1.getYear() + 1900;
	  	}
	  	else {
	  		var myYear1 =newDate1.getYear();
	  	}
	  
		var myMonth1 = newDate1.getMonth()+1;  
		var myDay1 = newDate1.getDate();
		
		// 05/23/02 - PO'S.  Replaced.
		//field1.value = myDay1 + "/" + myMonth1 + "/" + myYear1;
		field1.value = myMonth1 + "/" + myDay1 + "/" + myYear1;
		
		fLength = field1.value.length;//re-evaluate string length.
		s = String(field1.value)//re-evaluate the string value.
	}

	//Check the date is the required length
	if ( fLength != 0 && (fLength < 6 || fLength > 11) ) {
		invalid_date(field1);
		return false;   
	}

	// Find position and type of divider in the date
	for ( var i=0; i<3; i++ ) {
		for ( var x=0; x<array_elements; x++ ) {
			if ( s.indexOf(divider_values[x], counter1) != -1 ) {
				// return the divider
				divider1 = divider_values[x];
				// return the divider's position in string
				divider_holder[i] = s.indexOf(divider_values[x], counter1);
				// get beginning position for next search
				counter1 = divider_holder[i] + 1;
				break;
			}
	 	}
	 }

	// if element 2 is not 0 then more than 2 dividers have been found so date is invalid.
	if ( divider_holder[2] != 0 ) {
		invalid_date(field1);
		return false;   
	}

	// See if no dividers are present in the date string.
	if ( divider_holder[0] == 0 && divider_holder[1] == 0 ) { 
		//continue processing
		if ( fLength == 6 ) {	//ddmmyy - mmddyy
			/* 05/24/02 - PO'S. Replaced.
	   		day1 = field1.value.substring(0,2);
	    	month1 = field1.value.substring(2,4);
	    	*/
			month1 = field1.value.substring(0,2);
	    	day1 = field1.value.substring(2,4);

	  		year1 = field1.value.substring(4,6);
	  		
	  		if ( (year1 = validate_year(year1)) == false ) {
	   			invalid_date(field1);
				return false; 
			}
		}
			
		else if ( fLength == 7 ) {	//ddmmmy - mmmddyy
			/* 05/24/02 - PO'S. Replaced.
	   		day1 = field1.value.substring(0,2);
	  		month1 = field1.value.substring(2,5);
	  		*/
	  		month1 = field1.value.substring(0,3);
	  		day1 = field1.value.substring(3,5);

	  		year1 = field1.value.substring(5,7);
	  		if ( (month1 = convert_month(month1)) == false ) {
	   			invalid_date(field1);
				return false; 
			}
	  		if ( (year1 = validate_year(year1)) == false ) {
	   			invalid_date(field1);
				return false; 
			}
		}
			
		else if ( fLength == 8 ) {	//ddmmyyyy - mmddyyyy
			/* 05/24/02 - PO'S. Replaced.
	   		day1 = field1.value.substring(0,2);
	  		month1 = field1.value.substring(2,4);
	  		*/
	   		month1 = field1.value.substring(0,2);
	  		day1 = field1.value.substring(2,4);
	  		
	  		year1 = field1.value.substring(4,8);	  		
		}

		else if ( fLength == 9 ) {	//ddmmmyyyy - mmmddyyyy
			/* 05/24/02 - PO'S. Replaced.
	   		day1 = field1.value.substring(0,2);
	  		month1 = field1.value.substring(2,5);
	  		*/
	   		month1 = field1.value.substring(0,3);
	  		day1 = field1.value.substring(3,5);
	  		
	  		year1 = field1.value.substring(5,9);
	  		if ( (month1 = convert_month(month1)) == false ) {
	   			invalid_date(field1);
				return false; 
			}
		}
			
		if ( (outdate1 = validate_date(day1,month1,year1)) == false ) {
	   		alert("The value " + field1.value + " is not a vaild date.\n\r" +  
			//"Please enter a valid date in the format dd/mm/yyyy");
			"Please enter a valid date in the format mm/dd/yyyy");
			field1.focus();
			field1.select();
			return false;
		}

		field1.value = outdate1;
		return true;	// All OK
	}
			
	// 2 dividers are present so continue to process	
	if ( divider_holder[0] != 0 && divider_holder[1] != 0 ) { 
		/* 05/24/02 - PO'S. Replaced.
	  	day1 = field1.value.substring(0, divider_holder[0]);
	  	month1 = field1.value.substring(divider_holder[0] + 1, divider_holder[1]);
	  	*/
	  	month1 = field1.value.substring(0, divider_holder[0]);
	  	day1 = field1.value.substring(divider_holder[0] + 1, divider_holder[1]);
	  	
	  	year1 = field1.value.substring(divider_holder[1] + 1, field1.value.length);
	}

	if ( isNaN(day1) && isNaN(year1) ) {	// Check day and year are numeric
		invalid_date(field1);
		return false;  
	}

	if ( day1.length == 1 ) {	//Make d day dd
	   day1 = '0' + day1;  
	}

	if ( month1.length == 1 ) {	//Make m month mm
		month1 = '0' + month1;   
	}

	if ( year1.length == 2 ) {	//Make yy year yyyy
		if ( (year1 = validate_year(year1)) == false ) {
			invalid_date(field1);
			return false;  
		}
	}

	if ( month1.length == 3 || month1.length == 4 ) {	//Make mmm month mm
		if ( (month1 = convert_month(month1)) == false) {
			alert("month1" + month1);
			invalid_date(field1);
			return false;  
		}
	}

	// Date components are OK
	if ( (day1.length == 2 || month1.length == 2 || year1.length == 4) == false) {
	   invalid_date(field1);
	   return false;
	}

	//Validate the date
	if ( (outdate1 = validate_date(day1, month1, year1)) == false ) {
		alert("The value " + field1.value + " is not a vaild date.\n\r" + 
		// 05/24/02 - PO'S.  Replaced.
		//"Please enter a valid date in the format dd/mm/yyyy");
		"Please enter a valid date in the format mm/dd/yyyy");
		field1.value = ""		// PDF - Clear the Field Value
		field1.focus();
		field1.select();
		return false;
	}

	// Redisplay the date in mm/dd/yyyy format
	field1.value = outdate1;
	return true;		//All is well

}	// End function


/******************************************************************
   convert_month()
   
   Function to convert mmm month to mm month 
   
   Called by convert_date()
*******************************************************************/
function convert_month(monthIn) {

	var month_values = new Array ("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC");
	monthIn = monthIn.toUpperCase(); 

	if ( monthIn.length == 3 ) {
		for ( var i=0; i<12; i++ ) {
	   		if ( monthIn == month_values[i] ) {
				monthIn = i + 1;
				if ( i != 10 && i != 11 && i != 12 ) {
	   				monthIn = '0' + monthIn;
				}	//End if
				return monthIn;
			}	//End if
		}	// End For
	}	// End if

	else if ( monthIn.length == 4 && monthIn == 'SEPT') {
	   monthIn = '09';
	   return monthIn;
	}
		
	else {
		return false;
	} 
}	// End Function


/******************************************************************
   invalid_date()
   
   If an entered date is deemed to be invalid, invali
   d_date() is called to display a warning message to
   the user.  Also returns focus to the date  in que
   stion and selects the date for edit.
        
   Called by convert_date()
   
*******************************************************************/
function invalid_date(inField) {
	alert("The value " + inField.value + " is not in a vaild date format.\n\r" + 
			// 05/24/02 - PO'S.  Replaced.
	        //"Please enter date in the format dd/mm/yyyy");
	        "Please enter date in the format mm/dd/yyyy");
	inField.value = ""	// PDF - Clear the field Value
	inField.focus();
	inField.select();
	return true   
}


/******************************************************************
   validate_date()
   
   Validates date output from convert_date().  Checks
   day is valid for month, leap years, month !> 12,.  
*******************************************************************/
function validate_date(day2, month2, year2) { 
	var DayArray = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	var MonthArray = new Array("01","02","03","04","05","06","07","08","09","10","11","12");
	//var inpDate = day2 + month2 + year2;		
	var inpDate =  month2 + day2 + year2;
	var filter=/^[0-9]{2}[0-9]{2}[0-9]{4}$/;

	//alert("Passed to validate_date: " + inpDate);

	//Check ddmmyyyy date supplied
	if (! filter.test(inpDate)) {
	  return false;
	}
	
	/* Check Valid Month */ 
	filter=/01|02|03|04|05|06|07|08|09|10|11|12/ ; 
	if (! filter.test(month2)) {
	  return false;
	}
	
	/* Check For Leap Year */
	var N = Number(year2);
	if ( ( N%4==0 && N%100 !=0 ) || ( N%400==0 ) ) {
	   DayArray[1]=29;
	}
  	
	/* Check for valid days for month */
	for(var ctr=0; ctr<=11; ctr++) {
		if (MonthArray[ctr]==month2) {
			if (day2<= DayArray[ctr] && day2 >0 ) {
				// 05/24/02 - PO'S.  Replaced.
				//inpDate = day2 + '/' + month2 + '/' + year2;
				inpDate = month2 + '/' + day2 + '/' + + year2;
				return inpDate;
			}
			else {
				return false;
			}
		}
	}
}	//End function

/******************************************************************
   validate_year()

   converts yy years to yyyy
   Uses a hinge date of 10
        < 10 = 20yy 
        => 10 = 19yy.
         
   Called by convert_date() before validate_date().
*******************************************************************/
function validate_year(inYear) {
	if ( inYear < 10 ) {
	   inYear = "20" + inYear;
	   return inYear;
	}
	else if ( inYear >= 10 ){
	   inYear = "19" + inYear;
	   return inYear;
	}
	else {
		return false;
	}   
}	//End funciton

<!-- ********************************************************************************* --> 
<!-- *                            DEACTIVATE CLOAKING DEVICE                         * --> 
<!-- ********************************************************************************* -->