//from: http://developer.netscape.com/viewsource/goodman_dateobject.html
var MINUTE = 60 * 1000
var HOUR = MINUTE * 60
var DAY = HOUR * 24
var WEEK = DAY * 7

//var today = new Date()
//var xmas = new Date(1997,11,25)
//var shoppingDays = (xmas - today) / DAY 

var Days = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
var DaysAbrv = new Array('Sun','Mon','Tues','Wed','Thur','Fri','Sat');

function populate(objElement)
{
	//get the elements form object
	var objForm = objElement.Form;
	//get the elements name
	var objElementName = objElement.name;
	//get the elements prefix (including first "_")
	var prefix = objElementName.substring(0, objElementName.indexOf("_") + 1)
	//get the Day object matching this objElement's set
	var dayObject = document.getElementById(prefix + "Day");
	
	//get the first day of the next month after the selected month
	timeA = getTimeA(objElement)
	//subtract 1 day to get the last day value of the selected month
	timeDifference = timeA - (DAY * 1); 
	//create a date object of the last day of the selected month
	timeB = new Date(timeDifference);
	//now we know how many days are in this selected month
	var daysInMonth = timeB.getDate();
	//clear the current options of the Day select object
	for (var i = 0; i < dayObject.length; i++)
	{
		dayObject.options[0] = null;
	}
	//insert new options for the Day select object
	for (var i = 0; i < daysInMonth; i++)
	{
		dayObject.options[i] = new Option(i+1,i+1);
		//optionName = new Option([text, value, defaultSelected, selected]) (javascript syntax)
	}
	//make the first day selected
	dayObject.options[0].selected = true;
	//update the Weekday field with the current date selections
	ChangeWeekDay(objElement)
}

function getTimeA(objElement)
// first day of the next month
{
	//get the elements form object
	var objForm = objElement.Form;
	//get the elements name
	var objElementName = objElement.name;
	//get the elements prefix (including first "_")
	var prefix = objElementName.substring(0, objElementName.indexOf("_") + 1)
	//get the Month object matching this objElement's set
	var monthObject = document.getElementById(prefix + "Month");
	//get the Year object matching this objElement's set
	var yearObject = document.getElementById(prefix + "Year");

	var aYear = yearObject.options[yearObject.selectedIndex].value
	var aMonth = parseInt(monthObject.options[monthObject.selectedIndex].value, 10) + 1
	// if the next month is to be january, (11+1), increment the year
	if(aMonth == 12)
	{
		aYear+=1
		// January = 0, Febrauary = 1, etc in javascript
		aMonth = 0
	}
	var aDay = 1
	return new Date(aYear,aMonth,aDay);
}

//Daylight Savings for North America
//from: http://webexhibits.org/daylightsaving/g.html
//Start - first Sunday in April
//End - last Sunday in October
function IncrementDate(objElement,val)
{
	//get the elements form object
	var objForm = objElement.Form;
	//get the elements name
	var objElementName = objElement.name;
	//get the elements prefix (including first "_")
	var prefix = objElementName.substring(0, objElementName.indexOf("_") + 1)
	//get the Day object matching this objElement's set
	var dayObject = document.getElementById(prefix + "Day");
	//get the Month object matching this objElement's set
	var monthObject = document.getElementById(prefix + "Month");
	//get the Year object matching this objElement's set
	var yearObject = document.getElementById(prefix + "Year");
	
	var currDate = getCurrentSelectedDate(objElement)
	//I use the minus-minus method to avoid using the plus which just adds the vars togethers like strings
	var newDate = currDate - ((DAY * val) * -1)
	newDate = new Date(newDate)
	//add/subtract 1 HOUR for Daylight Savings
	//its not until you look at the hours of the new date value that you can see
	//where daylight saving took or gave its hour
	var IsDaylightSavings = newDate.getHours();
	//normally the Hours should be 0 for midnight
	//but for Daylight Savings it will be either 1:00am or 23:00pm
	if(IsDaylightSavings > 0)
	{
		if(IsDaylightSavings == 1) newDate = Date.parse(newDate) - (parseInt(HOUR, 10));
		if(IsDaylightSavings == 23) newDate = Date.parse(newDate) + (parseInt(HOUR, 10));
		newDate = new Date(newDate);
	}
	monthObject.selectedIndex = newDate.getMonth();
	yearObject.selectedIndex = getSelectedIndexFor(yearObject, parseInt(newDate.getFullYear(), 10));
	populate(objElement);
	dayObject.selectedIndex = parseInt(newDate.getDate(), 10) - 1;
	ChangeWeekDay(objElement);
}

function getCurrentSelectedDate(objElement)
{
	//get the elements form object
	var objForm = objElement.Form;
	//get the elements name
	var objElementName = objElement.name;
	//get the elements prefix (including first "_")
	var prefix = objElementName.substring(0, objElementName.indexOf("_") + 1)
	//get the Day object matching this objElement's set
	var dayObject = document.getElementById(prefix + "Day");
	//get the Month object matching this objElement's set
	var monthObject = document.getElementById(prefix + "Month");
	//get the Year object matching this objElement's set
	var yearObject = document.getElementById(prefix + "Year");

	return new Date(yearObject.options[yearObject.selectedIndex].value, monthObject.options[monthObject.selectedIndex].value, dayObject.options[dayObject.selectedIndex].value);
}

function ChangeWeekDay(objElement)
{
	//get the elements form object
	var objForm = objElement.Form;
	//get the elements name
	var objElementName = objElement.name;
	//get the elements prefix (including first "_")
	var prefix = objElementName.substring(0, objElementName.indexOf("_") + 1)
	//get the WeekDay object matching this objElement's set
	var weekdayObject = document.getElementById(prefix + "WeekDay");

	timeC = getCurrentSelectedDate(objElement)
	weekdayObject.value = DaysAbrv[timeC.getDay()];
}

function getSelectedIndexFor(objElement,val)
{
	var returnVal;
	
	for(i = 0; i < objElement.options.length; i++)
	{
		if(objElement.options[i].value.toLowerCase() == val.toString().toLowerCase())
		{
			returnVal = i
			break;
		}
	}
	return returnVal;
}

function DateDiff(date1,date2) 
{
	return (Math.round((date2 - date1) / 86400000));
}