// JavaScript Document

function isValidDate(dateStr) {		
	var matchArray = dateStr.split("-");
	
	if (matchArray == null) {
		alert(dateStr + " Date is not in a valid format.")
		return false;
	}
							
	year 	= matchArray[0]; 	// parse date into variables
	month 	= matchArray[1]; 	// YYYY-MM-DD
	day 	= matchArray[2];	// 0123-45-67
		
	if (month < 1 || month > 12) { // check month range
		alert("Month must be between 1 and 12.");
		return false;
	}
	if (day < 1 || day > 31) {
		alert("Day must be between 1 and 31.");
		return false;
	}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		alert("Month "+month+" doesn't have 31 days!")
		return false;
	}
	
	if (month == 2) { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) {
			alert("February " + year + " doesn't have " + day + " days!");
			return false;
		}
	}
	
	return true;
}
	
function isValidTime(timeStr) {
	// Checks if time is in HH:MM:SS AM/PM format.
	// The seconds and AM/PM are optional.
	
	var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
	
	var matchArray = timeStr.match(timePat);
	
	if (matchArray == null) {
		//alert("Time is not in a valid format.");
		return false;
	}
	
	hour = matchArray[1];
	minute = matchArray[2];
	second = matchArray[4];
	ampm = matchArray[6];
	
	if (second=="") { second = null; }
	if (ampm=="") { ampm = null }
	
	if (hour < 0  || hour > 23) {
		//alert("Hour must be between 1 and 12. (or 0 and 23 for military time)");
		return false;
	}
	//if (hour <= 12 && ampm == null) {
		//if (confirm("Please indicate which time format you are using.  OK = Standard Time, CANCEL = Military Time")) {
			//alert("You must specify AM or PM.");
			//return false;
	   //}
	//}
	if  (hour > 12 && ampm != null) {
		//alert("You can't specify AM or PM for military time.");
		return false;
	}
	if (minute < 0 || minute > 59) {
		//alert ("Minute must be between 0 and 59.");
		return false;
	}
	if (second != null && (second < 0 || second > 59)) {
		//alert ("Second must be between 0 and 59.");
		return false;
	}
	return true;
}
	
function dateDiff(fdate1, fdate2) {
	if (fdate1 instanceof Date)
	{
		date1 = fdate1;
	}
	else
	{
		var sdate1 = fdate1.split("-");
		
		date1 = new Date(sdate1[0], sdate1[1] - 1, sdate1[2]);
	}
	
	if (fdate2 instanceof Date)
	{
		date2 = fdate2;
	}
	else
	{
		var sdate2 = fdate2.split("-");
		
		date2 = new Date(sdate2[0], sdate2[1] - 1, sdate2[2]);
	}
	
	diff  = new Date();
	
	/*if (isValidDate(dateform.firstdate.value) && isValidTime(dateform.firsttime.value)) { // Validates first date 
	date1temp = new Date(dateform.firstdate.value + " " + dateform.firsttime.value);
	date1.setTime(date1temp.getTime());
	}
	else return false; // otherwise exits
	
	if (isValidDate(dateform.seconddate.value) && isValidTime(dateform.secondtime.value)) { // Validates second date 
	date2temp = new Date(dateform.seconddate.value + " " + dateform.secondtime.value);
	date2.setTime(date2temp.getTime());
	}
	else return false; // otherwise exits*/
		
	// sets difference date to difference of first date and second date
	
	diff.setTime(date1.getTime() - date2.getTime());
	
	timediff = diff.getTime();
	
	//weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
	//timediff -= weeks * (1000 * 60 * 60 * 24 * 7);
	
	days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
	timediff -= days * (1000 * 60 * 60 * 24);
	
	hours = Math.floor(timediff / (1000 * 60 * 60)); 
	timediff -= hours * (1000 * 60 * 60);
	
	mins = Math.floor(timediff / (1000 * 60)); 
	timediff -= mins * (1000 * 60);
	
	secs = Math.floor(timediff / 1000); 
	timediff -= secs * 1000;
	
	//dateform.difference.value = weeks + " weeks, " + days + " days, " + hours + " hours, " + mins + " minutes, and " + secs + " seconds";
	
	return -days;
}