/**
* Date Selector Input
*
* An intelligent set of 3 combo boxes for entering dates.
* The boxes update according to which day/month/year has been selected
* to account for days in each month (including leap years).
* @Author: Norman
*/

/**
* Sets year combo values range
*
*/
function adjustYearsRange(yearObj, yearTopVariant, yearsAgo, headerValue) {
	addHeader = 0;
	if (headerValue = true) {
		addHeader = 1;
	}
	today = new Date();
	currentYear = this.today.getFullYear();
	yearTop = currentYear + yearTopVariant;
	yearBottom = currentYear - yearsAgo;

	//alert("yearTop" + yearTop);
	//alert("yearBottom" + yearBottom);
	prevYearsInSelection = yearObj.length
	for (i = 0; i < (prevYearsInSelection-addHeader); i++) {
		yearObj.options[yearObj.options.length - 1] = null
	}
	
	for(i = yearBottom; i <= yearTop; i++ ) {
		var newOption = new Option(i, i);
		var optionsColl = yearObj.options;
		optionsColl[optionsColl.length] = newOption;
	}
}

/**
* Adjust the 'days' box according to the
* current month and year
*/
function adjustDaysInMonth(yearObj, monthObj, dayObj, headerValue) {
	addHeader = 0;
	if (headerValue = true) {
		addHeader = 1;
	}

	month = monthObj[monthObj.selectedIndex].value;
	year = yearObj[yearObj.selectedIndex].value;
	DaysForThisSelection = getDaysInMonth(month, year);
	PrevDaysInSelection = dayObj.length;
	
	if ((PrevDaysInSelection-addHeader) > DaysForThisSelection) {
		lastSelectedIndex = dayObj.selectedIndex;
		for (i = 0; i<((PrevDaysInSelection-addHeader)-DaysForThisSelection); i++) {
			dayObj.options[dayObj.options.length - 1] = null
		}
		if (dayObj.selectedIndex <= 0 && (lastSelectedIndex - addHeader) > DaysForThisSelection) {
			dayObj.selectedIndex = (dayObj.length - 1);
		}
	}
	
	if ((PrevDaysInSelection-addHeader) < DaysForThisSelection) {
		var prevLastDay = (dayObj.options.length - addHeader);
		for(i = prevLastDay + 1; i <= DaysForThisSelection; i++ ) {
			if (i < 10) {
				var newOption = new Option("0" + i, "0" + i);
			} else {
				var newOption = new Option(i, i);
			}
			var optionsColl = dayObj.options;
			optionsColl[optionsColl.length] = newOption;
		}
	}
}

function getDaysInMonth( m, y ) {
	monthdays = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	var month = parseInt(m);
	var year = parseInt(y)
	if ((month != 2) || (year == 0)) {
		return monthdays[month];
	} else {
		return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ? 29 : 28);
	}
}
