// Checks to see if the year passed is a leap year.
function isLeapYear(chkYear) {
	if (chkYear % 4 != 0) {return false;}
	if (chkYear % 400 == 0) {return true;}
	if (chkYear % 100 == 0) {return false;}
	return true;
}

// Gets the max number of days available in a month.  isLeapYear() is called to
// determine the number of days in February.
function getDaysMonth(theMonth, theYear) {
	if (theMonth == 1) {return 31;}
	if (theMonth == 2 && isLeapYear(theYear)) {return 29;}
	if (theMonth == 2 && (!isLeapYear(theYear))) {return 28;}
	if (theMonth == 3) {return 31;}
	if (theMonth == 4) {return 30;}
	if (theMonth == 5) {return 31;}
	if (theMonth == 6) {return 30;}
	if (theMonth == 7) {return 31;}
	if (theMonth == 8) {return 31;}
	if (theMonth == 9) {return 30;}
	if (theMonth == 10) {return 31;}
	if (theMonth == 11) {return 30;}
	if (theMonth == 12) {return 31;}
	alert('invalid month!');
	return false;	
}

// sets value of hidden date field
function SetHiddenDate(form, field){
	if (eval('form.' + field.name + '_M')) {
		//selectedIndex_M = eval('document.forms["' + form.name + '"].' + field.name + '_M').selectedIndex
		//month = eval('document.forms["' + form.name + '"].' + field.name + '_M[' + selectedIndex_M + ']').value 
		month = eval('form.' + field.name + '_M.value');
	} else {
		month = '01/'
	}
	if (eval('form.' + field.name + '_D')) {
		//selectedIndex_D = eval('document.forms["' + form.name + '"].' + field.name + '_D').selectedIndex
		//day = eval('document.forms["' + form.name + '"].' + field.name + '_D[' + selectedIndex_D + ']').value 
		day = eval('form.' + field.name + '_D.value');
	} else {
		day = '01/'
	}
	if (eval('form.' + field.name + '_Y')) {
		//selectedIndex_Y = eval('document.forms["' + form.name + '"].' + field.name + '_Y').selectedIndex
		//year = eval('document.forms["' + form.name + '"].' + field.name + '_Y[' + selectedIndex_Y + ']').value 
		year = eval('form.' + field.name + '_Y.value');
	} else {
		year = '1900'
	}	

	if (month != '' && day != '' && year != '') {
		theDateTime =  month + day + year;
		//eval('document.forms["' + form.name + '"].' + field.name).value = theDateTime;
		field.value = theDateTime;
	} else {
		field.value = '';
		//eval('document.forms["' + form.name + '"].' + field.name).value = '';
	}
	return true;
}


// for setting the hidden date value for a SelectYrBox
//	(only allows year selection, so month & day are set to '01/01')
function SetHiddenYrDate(form, field) {
	if (eval('form.' + field.name + '_Y')) {
		selectedIndex_Y = eval('document.forms["' + form.name + '"].' + field.name + '_Y').selectedIndex
		year = eval('document.forms["' + form.name + '"].' + field.name + '_Y[' + selectedIndex_Y + ']').value 
	} else {
		year = '1900'
	}	

	if (year != '') {
		theDateTime =  '01/01/' + year;
		eval('document.forms["' + form.name + '"].' + field.name).value = theDateTime;
	} else {
		eval('document.forms["' + form.name + '"].' + field.name).value = '';
	}
	return true;
}

// purpose:		sets value of hidden DateTime field
function SetHiddenDateTime(form, field) {
	selectedIndex_M = eval('document.forms["' + form.name + '"].' + field.name + '_M').selectedIndex;
	month = eval('document.forms["' + form.name + '"].' + field.name + '_M[' + selectedIndex_M + ']').value;

	selectedIndex_D = eval('document.forms["' + form.name + '"].' + field.name + '_D').selectedIndex;
	day = eval('document.forms["' + form.name + '"].' + field.name + '_D[' + selectedIndex_D + ']').value;

	selectedIndex_Y = eval('document.forms["' + form.name + '"].' + field.name + '_Y').selectedIndex;
	year = eval('document.forms["' + form.name + '"].' + field.name + '_Y[' + selectedIndex_Y + ']').value;

	selectedIndex_H = eval('document.forms["' + form.name + '"].' + field.name + '_H').selectedIndex;
	hour = eval('document.forms["' + form.name + '"].' + field.name + '_H[' + selectedIndex_H + ']').value;

	selectedIndex_N = eval('document.forms["' + form.name + '"].' + field.name + '_N').selectedIndex;
	minute = eval('document.forms["' + form.name + '"].' + field.name + '_N[' + selectedIndex_N + ']').value;

	selectedIndex_AMPM = eval('document.forms["' + form.name + '"].' + field.name + '_AMPM').selectedIndex;
	AMPM = eval('document.forms["' + form.name + '"].' + field.name + '_AMPM[' + selectedIndex_AMPM + ']').value;

	theDateTime =  month + '/' + day + '/' + year;
	theDateTime += ' ' + hour + ':' + minute + ' ' + AMPM;
	eval('document.forms["' + form.name + '"].' + field.name).value = theDateTime;
	//alert(eval('document.forms["' + form.name + '"].' + field.name).value);
	return true;
}

function MakeArray(n){
	this.length = n
	return this
}

/*
Created by:		David H.
Date:			1/24/2002
purpose:		validation for Date Select Box function
*/
function ValidateSelectDate(form, field, DateName, required){
	if (!field) { return true; }

	// alternate way to get the other field names & values ;-)
	// no need to pass the form object - just the field;

	if (field.value == "" && required) {
		alert('Please enter a valid  \'' + DateName + '\'.');
		if (eval('document.forms["' + form.name + '"].' + field.name + '_M') && eval('document.forms["' + form.name + '"].' + field.name + '_M').type == 'hidden') {
			return false;
		} else if (eval('document.forms["' + form.name + '"].' + field.name + '_M')) {
			eval('document.forms["' + form.name + '"].' + field.name + '_M').focus();
			return false;
		} else if (eval('document.forms["' + form.name + '"].' + field.name + '_Y') && eval('document.forms["' + form.name + '"].' + field.name + '_Y').type == 'hidden') {
			return false;
		} else {
			return false;
		}
	} else if (field.value == "") { 
		return true; 
	}

//	alert('ok');
	if (eval('document.forms["' + form.name + '"].' + field.name + '_M') && eval('document.forms["' + form.name + '"].' + field.name + '_M').type != 'hidden') {
		selectedIndex_M = eval('document.forms["' + form.name + '"].' + field.name + '_M').selectedIndex
		selectedIndex_D = eval('document.forms["' + form.name + '"].' + field.name + '_D').selectedIndex
		selectedIndex_Y = eval('document.forms["' + form.name + '"].' + field.name + '_Y').selectedIndex
	
		if (!selectedIndex_M > 0){
			alert('please select ' + DateName + ' month');
			eval('document.forms["' + form.name + '"].' + field.name + '_M').focus();
			return false;
		}
		if (!selectedIndex_D > 0){
			alert('please select ' + DateName + ' day');
			eval('document.forms["' + form.name + '"].' + field.name + '_D').focus();
			return false;
		}
		if (!selectedIndex_Y > 0){
			alert('please select ' + DateName + ' year');
			eval('document.forms["' + form.name + '"].' + field.name + '_Y').focus();
			return false;
		}
	
		FirstSlash = field.value.indexOf("/",0)
		SecondSlash = field.value.indexOf("/",FirstSlash+1)
		month="";
		for (i=0; i<FirstSlash; i++) {
			month = month + field.value.charAt(i);
		}
	
		// Days are validated as numbers with values of 1-31
		// Validation does not accomodate month specific max days. IE. 2/31/1999 could be specified
		day="";
		for (i=(FirstSlash+1); i<SecondSlash; i++) {
			day = day + field.value.charAt(i);
		}
		
		// years are validated as numbers with a length of 4 digits
		year="";
		for (i=(SecondSlash+1); i<field.value.length; i++) {
			year = year + field.value.charAt(i);
		}
	
		monthName = new MakeArray(12)
		monthName[1] = "January"
		monthName[2] = "February"
		monthName[3] = "March"
		monthName[4] = "April"
		monthName[5] = "May"
		monthName[6] = "June"
		monthName[7] = "July"
		monthName[8] = "August"
		monthName[9] = "September"
		monthName[10] = "October"
		monthName[11] = "November"
		monthName[12] = "December"
		
		if (day > getDaysMonth(month, year)) {
			alert('There are only ' + getDaysMonth(month, year) + ' days in ' + monthName[month] + ' ' + year);
			eval('document.forms["' + form.name + '"].' + field.name + '_D').focus();
			return false;
		}
	}
	return true;
}



function ValidateSelectDateTime(field, DateName, required){
	if (!field) { return true; }
	//if (field.type == 'hidden') {alert('ok'); return true;}
	if (field.value == '' && required == 'N') { return true; }

	//if no month field, it may be a hidden field
	if (!eval(field.form.name + '.' + field.name + '_M')){ return true; }
	//if month is hidden, then the whole thing must be hidden
	if (eval(field.form.name + '.' + field.name + '_M').type == 'hidden') { return true; }
	
	selectedIndex_M = eval(field.form.name + '.' + field.name + '_M').selectedIndex
	selectedIndex_D = eval(field.form.name + '.' + field.name + '_D').selectedIndex
	selectedIndex_Y = eval(field.form.name + '.' + field.name + '_Y').selectedIndex
	selectedIndex_H = eval(field.form.name + '.' + field.name + '_H').selectedIndex
	selectedIndex_N = eval(field.form.name + '.' + field.name + '_N').selectedIndex

	if (field.value == '' && required == 'Y') {
		alert('Please enter a valid  \'' + DateName + '\'.');
		eval(field.form.name + '.' + field.name + '_M').focus();
		return false;
	}

	if (!selectedIndex_M > 0){
		alert('please select a ' + DateName + ' month.');
		eval(field.form.name + '.' + field.name + '_M').focus();
		return false;
	}
	if (!selectedIndex_D > 0){
		alert('please select a ' + DateName + ' day.');
		eval(field.form.name + '.' + field.name + '_D').focus();
		return false;
	}
	if (!selectedIndex_Y > 0){
		alert('please select a ' + DateName + ' year.');
		eval(field.form.name + '.' + field.name + '_Y').focus();
		return false;
	}
	if (!selectedIndex_H > 0){
		alert('please select a ' + DateName + ' hour.');
		eval(field.form.name + '.' + field.name + '_H').focus();
		return false;
	}
	if (!selectedIndex_N > 0){
		alert('please select a ' + DateName + ' minute.');
		eval(field.form.name + '.' + field.name + '_N').focus();
		return false;
	}

	FirstSlash = field.value.indexOf("/",0)
	SecondSlash = field.value.indexOf("/",FirstSlash+1)
	month="";
	for (i=0; i<FirstSlash; i++) { month = month + field.value.charAt(i); }
	day="";
	for (i=(FirstSlash+1); i<SecondSlash; i++) { day = day + field.value.charAt(i);	}
	year="";
	for (i=(SecondSlash+1); i<(SecondSlash+4); i++) { year = year + field.value.charAt(i); }
	//alert(month + '/' + day + '/' + year);
	return true;
}


// checks for a valid date entered in 'mm/dd/yyyy' format
// 		formfield	- is the formfield object, (ie. form.StartDate)
//		DateName	- is the name of date field FOR DISPLAY,
//		Required	- boolean flag, (true or false) to indicate if a date is required
function ChkDate(formfield, DateName, required) {
	if (!formfield) {return true;}

	// if desired, we can pop an alert and return false if the date is required here
	if (formfield.value == "" && required) {
		alert('Please enter a valid  \'' + DateName + '\'.');
		formfield.focus();
		return false;
	} else if (formfield.value == "") { return true; }

	if (formfield.value.length == 8 && !isNaN(formfield.value)) { 
		str = formfield.value;
		yyyyVal = str.charAt(4) + str.charAt(5) + str.charAt(6) + str.charAt(7);
		formfield.value = str.charAt(0) + str.charAt(1) + '/' + str.charAt(2) + str.charAt(3) + '/' + yyyyVal;
	}

	FirstSlash = formfield.value.indexOf("\/",0)
	if (FirstSlash == -1) {
		FirstSlash = formfield.value.indexOf("-",0)
		if (FirstSlash == -1) {
			FirstSlash = formfield.value.indexOf(" ",0)
			if (FirstSlash == -1) {
				alert('Invalid date entry for the ' + DateName + '.\n\nPlease enter this date in \'mm/dd/yyyy\' format.');
				formfield.focus();
				return false;
			}
		}
	}
	SecondSlash = formfield.value.indexOf("\/",FirstSlash+1)
	if (SecondSlash == -1) {
		SecondSlash = formfield.value.indexOf("-",FirstSlash+1)
		if (SecondSlash == -1) {
			SecondSlash = formfield.value.indexOf(" ",FirstSlash+1)
			if (SecondSlash == -1) {
				alert('Invalid date entry for the ' + DateName + '.\n\nPlease enter this date in \'mm/dd/yyyy\' format.');
				formfield.focus();
				return false;
			}
		}
	}

	month="";
	for (i=0; i<FirstSlash; i++) {
		month = month + formfield.value.charAt(i);
	}
	if (isNaN(month) || month > 12 || month < 1) {
		alert('Invalid Month of   \'' + month + '\'   entered for the ' + DateName + '.');
		formfield.focus();
		return false;
	}

	// Days are validated as numbers with values of 1-31
	// Validation does not accomodate month specific max days. IE. 2/31/1999 could be specified
	day="";
	for (i=(FirstSlash+1); i<SecondSlash; i++) {
		day = day + formfield.value.charAt(i);
	}
	
	// years are validated as numbers with a length of 4 digits
	year="";
	for (i=(SecondSlash+1); i<formfield.value.length; i++) {
		year = year + formfield.value.charAt(i);
	}
	if (!isNaN(year) && year.length == 2) { 
		if (year < 20) {
			year = '20' + year;
		} else {
			year = '19' + year;
		}
	}
	if (isNaN(year) || year.length != 4 || year.indexOf("\-",0) != -1) {
		alert('Invalid year of   \'' + year + '\'   entered for the ' + DateName + '.');
		formfield.focus();
		return false;
	}

	if (isNaN(day) || day > getDaysMonth(month, year) || day < 1) {
		alert('Invalid Day of   \'' + day + '\'   entered for the ' + DateName + '.');
		formfield.focus();
		return false;
	}
	formfield.value = month + '/' + day + '/' + year;

	if (!ChkDBDate(formfield, DateName)) { return false; }
	return true;
}


// automatically adds slashes to a Date field entry, (used 'onBlur').
function SetDate(DateField) {
	str = DateField.value;
	if (str.length == 2) {
		if (str.charAt(1) == '/') { str = '0' + str; }
		if (str.charAt(1) != '/') { str = str + '/'; }
	}
	if (str.length == 5) {
		if (str.charAt(4) == '/') { str = str.substr(0,3) + '0' + str.substr(3,2); }
		if (str.charAt(4) != '/') { str = str + '/'; }
	}
	DateField.value = str;
	return true;
}

// function temporarily disabled
function FormatDate(DateField) {
//	str = DateField.value;
//	isNetscape=(document.layers);
//	eventChooser = (isNetscape) ? keyStroke.which : event.keyCode;
//	ThisKey = String.fromCharCode(eventChooser).toLowerCase();
	// if NaN and not 'backspace', '/' or '-' then disallow the entry.
//	if (isNaN(ThisKey) && eventChooser != 8 && eventChooser != 191 && eventChooser != 189) {
//		alert(eventChooser);
//		alert(ThisKey); 
//		str = str.substr(0,str.length-1);
//	}
//	if (str.length == 2 && str.charAt(1) == '/') { str = '0' + str; }
//	if (str.length == 3 && str.charAt(2) != '/') { str = str.substr(0,2) + '/' + str.substr(2,3); }
//	if (str.length == 5 && str.charAt(4) == '/') { str = str.substr(0,3) + '0' + str.substr(3,2); }
//	if (str.length == 6 && str.charAt(5) != '/') { str = str.substr(0,5) + '/' + str.substr(5,6); }
//	DateField.value = str;
	return true;
}


// Checks to make sure that a given start date is before its end date.
function ChkStartDate(StartDate, StartDateName, EndDate, EndDateName) {
	if (StartDate && StartDate.value != '' && EndDate && EndDate.value != '') {
		dtStartDate = new Date(Date.parse(StartDate.value));
		dtEndDate = new Date(Date.parse(EndDate.value));
		DayDifference = ((dtStartDate - dtEndDate)/(1000*60*60*24));
//		alert(DayDifference);
		if (DayDifference > 0) {
			alert('Error!\n\nThe ' + StartDateName + ' must be before the ' + EndDateName + '.');
			if (StartDate.type != 'hidden') { StartDate.focus(); }
			return false;
		}
	}
	return true;
}


// returns Age in years, (returns 0 if no Birth_Date field exists!)
function GetAge(Birth_Date, AsOfDate) {
	if (Birth_Date) {	
		BDate = new Date(Birth_Date.value)
		BDay = BDate.getDate()
		BMonth = BDate.getMonth()
		BYear = BDate.getFullYear()

		dtDate = new Date()
		if (AsOfDate) { dtDate = new Date(AsOfDate); }
		dtDay = dtDate.getDate()
		dtMonth = dtDate.getMonth()
		dtYear = dtDate.getFullYear()
		VarYear = dtYear - BYear

		if (BMonth > dtMonth) { VarYear = VarYear - 1 }
		if (BMonth == dtMonth && BDay > dtDay) { VarYear = VarYear - 1 }
		return VarYear;
	} else {
		return 0;
	}
}		


function ChkDBDate(DBDate, DBDateName) {
	if (DBDate && DBDate.value != '') {
		dtDBDate = new Date(Date.parse(DBDate.value));
		dtFirstDate = new Date(Date.parse('1/1/1800'));
		dtLastDate = new Date(Date.parse('1/1/2200'));

		FirstDayDiff = ((dtFirstDate - dtDBDate)/(1000*60*60*24));
		//alert(FirstDayDiff);
		if (FirstDayDiff > 0) {
			alert('Error!\n\nThe ' + DBDateName + ' is invalid - it must be after 1/1/1800.');
			if (DBDate.type != 'hidden') { DBDate.focus(); }
			return false;
		}

		LastDayDiff = ((dtLastDate - dtDBDate)/(1000*60*60*24));
		//alert(LastDayDiff);
		if (LastDayDiff < 0) {
			alert('Error!\n\nThe ' + DBDateName + ' is invalid - it must be before 1/1/2200.');
			if (DBDate.type != 'hidden') { DBDate.focus(); }
			return false;
		}
	}
	return true;
}


