// date field validation (called by other validation functions that specify minYear/maxYear)
function isDate(inputStr) 
{
// convert hyphen delimiters to slashes
	while (inputStr.indexOf("-") != -1) 
	{
		inputStr = replaceString(inputStr,"-","/");
	}
	var delim1 = inputStr.indexOf("/");
	var delim2 = inputStr.lastIndexOf("/");
	if (delim1 != -1 && delim1 == delim2) 
	{
// there is only one delimiter in the string
		alert("The date entry is not in an acceptable format.\n\nYou can enter dates in the following formats: mmddyyyy, mm/dd/yyyy, or mm-dd-yyyy. (If the month or date data is not available, enter \'01\' in the appropriate location.)");
		return false;
	}
	if (delim1 != -1) 
	{
// there are delimiters; extract component values
		var mm = parseInt(inputStr.substring(0,delim1),10);
		var dd = parseInt(inputStr.substring(delim1 + 1,delim2),10);
		var yyyy = parseInt(inputStr.substring(delim2 + 1, inputStr.length),10);
	} 
	else 
	{
// there are no delimiters; extract component values
		var mm = parseInt(inputStr.substring(0,2),10);
		var dd = parseInt(inputStr.substring(2,4),10);
		var yyyy = parseInt(inputStr.substring(4,inputStr.length),10);
	}
	if (isNaN(mm) || isNaN(dd) || isNaN(yyyy)) 
	{
// there is a non-numeric character in one of the component values
		alert("The date entry is not in an acceptable format.\n\nYou can enter dates in the following formats: mmddyyyy, mm/dd/yyyy, or mm-dd-yyyy.");
		return false;
	}
	if (mm < 1 || mm > 12) 
	{
// month value is not 1 thru 12
		alert("Months must be entered between the range of 01 (January) and 12 (December).");
		return false;
	}
	if (dd < 1 || dd > 31) 
	{
// date value is not 1 thru 31
		alert("Days must be entered between the range of 01 and a maximum of 31 (depending on the month and year).");
		return false;
	}
// validate year, allowing for checks between year ranges
// passed as parameters from other validation functions
	if (yyyy < 100) 
	{
// entered value is two digits, which we allow for 1930-2029
		if (yyyy >= 30) 
		{
			yyyy += 1900;
		} 
		else 
		{
			yyyy += 2000;
		}
	}
	else
	{
		if (yyyy < 1900)
		{
			alert("Year must be between 1900 and 2079")
			return false;
		}
		
		if (yyyy > 2079)
		{
			alert("Year must be between 1900 and 2079")
			return false;
		}
	}

	if (!checkMonthLength(mm,dd)) 
	{
		return false;
	}
	if (mm == 2) 
	{
		if (!checkLeapMonth(mm,dd,yyyy)) 
		{
			return false;
		}
	}
	return true;
}
// convert month or day number to string,
// padding with leading zero if needed
function monthDayFormat(val) 
{
	if (isNaN(val) || val == 0) 
	{
		return "01";
	} 
	else if (val < 10) 
	{
		return "0" + val;
	}
	return "" + val;
}
// check the entered month for too high a value
function checkMonthLength(mm,dd) 
{
	var months = new Array("","January","February","March","April","May","June","July","August","September","October","November","December");
	if ((mm == 4 || mm == 6 || mm == 9 || mm == 11) && dd > 30) 
	{
		alert(months[mm] + " has only 30 days.");
		return false;
	} 
	else if (dd > 31) 
	{
		alert(months[mm] + " has only 31 days.");
		return false;
	}
	return true;
}
// check the entered February date for too high a value
function checkLeapMonth(mm,dd,yyyy) 
{
	if (yyyy % 4 > 0 && dd > 28) 
	{
		alert("February of " + yyyy + " has only 28 days.");
		return false;
	} 
	else if (dd > 29) 
	{
		alert("February of " + yyyy + " has only 29 days.");
		return false;
	}
	return true;
}