/* vDate uses function checkStr, besure to include checkStr.js */

/*
example call:
vDate("txtDate","From Date",1,form)

"txtDate"   - obj is text box name
"From Date" - fieldName is what you want to display on error message 
1 = required field
0 = not a required field optional, if data in field it will be verified
form  - is the name of the form submitting
*/

var month = 0;
var day = 0;
var year = 0;

//get functions can be used to compare if one date is <= >= != < > ==
function getMonth(){ return (parseInt(month)); }
function getDay(){ return (parseInt(day)); }
function getYear(){ return (parseInt(year)); }
	
function vDate(obj,fieldName,requiredField,form){
var slashFound = 0;
var daysMonths = [ ["January",31],["February",28],["March",31],["April",30],["May",31],["June",30],["July",31],["August",31],["September",30],["October",31],["November",30],["December",31] ];
var maxYear = 1900;

 if ( (requiredField == 0) && (document.forms[form].elements[obj].value == "") ){
 	return (1); 
 }
 if ( document.forms[form].elements[obj].value == ""){
 	alert("Error, specify " + fieldName + ".\n\nFormat MM/DD/YYYY\n\nexample: 1/5/2004");
 	document.forms[form].elements[obj].focus();
 	return (0);
 }
 if (checkStr(document.forms[form].elements[obj].value, "/0123456789\t\r\n\f") == false){
  	alert(fieldName + " field is numeric characters only with the exception of /");
    document.forms[form].elements[obj].focus();
    return (0);
 }
 if ( (document.forms[form].elements[obj].value.length > 10) || (document.forms[form].elements[obj].value.length < 8) ){
	alert("Error, incorrect " + fieldName + " format.\n\nCorrect Format MM/DD/YYYY\n\nexample: 1/5/2004");
 	document.forms[form].elements[obj].focus();
 	return (0);
 }
 for (i = 0;  i < document.forms[form].elements[obj].value.length;  i++){
    if (document.forms[form].elements[obj].value.charAt(i) == '/')
    	slashFound++;
 }
 if (slashFound != 2){
 	alert("Error, incorrect " + fieldName + " format.\n\nCorrect Format MM/DD/YYYY\n\nexample: 1/5/2004");
 	document.forms[form].elements[obj].focus();
 	return (0);
 }
 if (document.forms[form].elements[obj].value.length == 10){
	 if ( (document.forms[form].elements[obj].value.charAt(0) == '0') || (document.forms[form].elements[obj].value.charAt(3) == '0') || (document.forms[form].elements[obj].value.charAt(2) != '/') || (document.forms[form].elements[obj].value.charAt(5) != '/') ){
	 	if (!deleteLeadingZero(form,obj,0,3)){
	 		alert("Error, incorrect " + fieldName + " format.\n\nCorrect Format MM/DD/YYYY\n\nexample: 1/5/2004");
 	 		document.forms[form].elements[obj].focus();
	 		return (0);
	    }
	 }
 	 month = document.forms[form].elements[obj].value.substr(0,2);
	 day = document.forms[form].elements[obj].value.substr(3,2);
	 year = document.forms[form].elements[obj].value.substr(6,4);
 }
 if (document.forms[form].elements[obj].value.length == 9){
	 if (document.forms[form].elements[obj].value.charAt(1) == '/'){
		 if ( (document.forms[form].elements[obj].value.charAt(0) == '0') || (document.forms[form].elements[obj].value.charAt(2) == '0') || (document.forms[form].elements[obj].value.charAt(1) != '/') || (document.forms[form].elements[obj].value.charAt(4) != '/') ){
		 	if (!deleteLeadingZero(form,obj,0,2)){
			 	alert("Error, incorrect " + fieldName + " format.\n\nCorrect Format MM/DD/YYYY\n\nexample: 1/5/2004");
			 	document.forms[form].elements[obj].focus();
			 	return (0);
			}
		 }
	  	 month = document.forms[form].elements[obj].value.substr(0,1);
		 day = document.forms[form].elements[obj].value.substr(2,2);
		 year = document.forms[form].elements[obj].value.substr(5,4);
	 }
	 else{
	 	if (document.forms[form].elements[obj].value.charAt(2) == '/'){
		 	if ( (document.forms[form].elements[obj].value.charAt(0) == '0') || (document.forms[form].elements[obj].value.charAt(3) == '0') || (document.forms[form].elements[obj].value.charAt(2) != '/') || (document.forms[form].elements[obj].value.charAt(4) != '/') ){
			 	if (!deleteLeadingZero(form,obj,0,3)){
				 	alert("Error, incorrect " + fieldName + " format.\n\nCorrect Format MM/DD/YYYY\n\nexample: 1/5/2004");
				 	document.forms[form].elements[obj].focus();
				 	return (0);
				}
			 }
			 month = document.forms[form].elements[obj].value.substr(0,2);
			 day = document.forms[form].elements[obj].value.substr(3,1);
			 year = document.forms[form].elements[obj].value.substr(5,4);
		}
		else{
			alert("Error, incorrect " + fieldName + " format.\n\nCorrect Format MM/DD/YYYY\n\nexample: 1/5/2004");
		 	document.forms[form].elements[obj].focus();
		 	return (0);
		}
	 }		
 }
 if (document.forms[form].elements[obj].value.length == 8){
	 if (document.forms[form].elements[obj].value.charAt(1) == '/'){
		 if ( (document.forms[form].elements[obj].value.charAt(0) == '0') || (document.forms[form].elements[obj].value.charAt(2) == '0') || (document.forms[form].elements[obj].value.charAt(1) != '/') || (document.forms[form].elements[obj].value.charAt(3) != '/') ){
		 	if (!deleteLeadingZero(form,obj,0,2)){
			 	alert("Error, incorrect " + fieldName + " format.\n\nCorrect Format MM/DD/YYYY\n\nexample: 1/5/2004");
			 	document.forms[form].elements[obj].focus();
			 	return (0);
			}
		 }
	 }
	 else{
	 	if (document.forms[form].elements[obj].value.charAt(3) == '/'){
		 	if ( (document.forms[form].elements[obj].value.charAt(0) == '0') || (document.forms[form].elements[obj].value.charAt(2) == '0') || (document.forms[form].elements[obj].value.charAt(1) != '/') || (document.forms[form].elements[obj].value.charAt(3) != '/') ){
			 	if (!deleteLeadingZero(form,obj,0,2)){
				 	alert("Error, incorrect " + fieldName + " format.\n\nCorrect Format MM/DD/YYYY\n\nexample: 1/5/2004");
				 	document.forms[form].elements[obj].focus();
				 	return (0);
				}
			 }
		}
		else{
			alert("Error, incorrect " + fieldName + " format.\n\nCorrect Format MM/DD/YYYY\n\nexample: 1/5/2004");
		 	document.forms[form].elements[obj].focus();
		 	return (0);
		}
	 }
	 month = document.forms[form].elements[obj].value.substr(0,1);
	 day = document.forms[form].elements[obj].value.substr(2,1);
	 year = document.forms[form].elements[obj].value.substr(4,4);
 }
if (month > 12){
	alert("There are only 12 months in a year.\nValues 1-12 are valid.");
	document.forms[form].elements[obj].focus();
 	return (0);
}
//leap year
if ( (month == 2) && (year%4 == 0) && (day > 29) ){
	alert("There are only 29 days in " + daysMonths[month-1][0] + " for the given year.");
	document.forms[form].elements[obj].focus();
 	return (0);
}
else{
	if ( ((day > daysMonths[month-1][1]) && (year%4 != 0) && (month != 2)) || ((day > daysMonths[month-1][1]) && (year%4 == 0) && (month != 2)) || ((day > daysMonths[month-1][1]) && (year%4 != 0) && (month == 2)) ){
		alert("There are only " + daysMonths[month-1][1] + " days in " + daysMonths[month-1][0] + ".");
		document.forms[form].elements[obj].focus();
	 	return (0);
	}
}
if (year < maxYear){
	alert("The year must be greater than " + maxYear + ".");
	document.forms[form].elements[obj].focus();
 	return (0);
}
return (1);
}

function deleteLeadingZero(form,obj,m,d){
 var str;
 var newStr = '~';
 if (document.forms[form].elements[obj].value.charAt(m) == '0'){zm = 1;}
 else{zm = 0;}
 if (document.forms[form].elements[obj].value.charAt(d) == '0'){zd = 1;}
 else{zd = 0;}
 if (zm){
 	if (document.forms[form].elements[obj].value.charAt(m+1) != '/'){
	 	str = document.forms[form].elements[obj].value
	    newStr = str.substring(1, str.length)
	}else{zm = 0;}
 }
 if (zd){ 
 	if (document.forms[form].elements[obj].value.charAt(d+1) != '/'){
	    if (newStr == '~'){newStr = document.forms[form].elements[obj].value;}
	  	if ( (newStr.length == 10) && (!zm) ){
			newStr = newStr.substring(0, 3) + newStr.substring(4, newStr.length)
		}	  	
		else{
			newStr = newStr.substring(0, 2) + newStr.substring(3, newStr.length)
		}
		document.forms[form].elements[obj].value = newStr;
	}else{zd = 0;}
 }
 if (zm && !zd){document.forms[form].elements[obj].value = newStr;}
 if (zm || zd){return (true);}
 else{return (false);}
}