var WeekDays = new Array('M','T','W','T','F','S','S');
var MonthDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var MonthNames = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var CurrentDate = new Date();
var CurrentYear = CurrentDate.getYear();
if (CurrentYear < 1000)
	CurrentYear += 1900
var CurrentMonth = CurrentDate.getMonth();
var CurrentDay = CurrentDate.getDate();
var Today = CurrentDate.getDate();
var newMonth = CurrentMonth;
var newYear = CurrentYear

function DateMonthAdd(theDate, direction) {
	var thisMonth = theDate.getMonth();
	var thisYear = theDate.getYear();
	if (thisYear < 1000)
		thisYear += 1900
	if (direction) {
		if (thisMonth == 11) {
			newMonth = 0;
			newYear = thisYear + 1;
		} else {
			newMonth = thisMonth + 1;
			newYear = thisYear;
		}
	} else {
		if (thisMonth == 0) {
			newMonth = 11;
			newYear = thisYear - 1;
		} else {
			newMonth = thisMonth - 1;
			newYear = thisYear;
		}
	}
}

function DateMaxAdd(restrictRange) {
	var thisMonth = CurrentMonth;
	var thisYear = CurrentYear;
	if (thisYear < 1000)
		thisYear += 1900
	switch (restrictRange) {
		case 1 :
			if (thisMonth >= 2) {
				newYear = thisYear + 1;
				newMonth = thisMonth + 11 - 12;
			} else {
				newYear = thisYear;
				newMonth = thisMonth + 11;
			}
			break;
		default :
			newYear = thisYear + 2;
			newMonth = 0;
	}
}

function js_MakeCalendar(str_DateInput, restrictRange, Year, Month, Day) {
	var dat_OutputDate = new Date(Year, Month, 1);
	var dat_FirstDate = dat_OutputDate.getDay();
	if (dat_FirstDate == 0)
		dat_FirstDate = 7;
	DateMonthAdd(dat_OutputDate, 0)
	var previousMonth = newMonth;
	var previousYear = newYear;
	DateMonthAdd(dat_OutputDate, 1)
	var nextMonth = newMonth;
	var nextYear = newYear;
	DateMaxAdd(restrictRange);
	var maxMonth = newMonth;
	var maxYear = newYear;
	// Update for leap years
	if(Month==1&&Year%4==0)MonthDays[Month]=29; else if (Month == 1) MonthDays[Month]=28;
	if (((MonthDays[Month] == 31) && (dat_FirstDate >= 6)) || ((MonthDays[Month] == 30) && (dat_FirstDate == 7))) {
		var Rows = 6;
	} else if ((MonthDays[Month] == 28) && (dat_FirstDate == 1)) {
		var Rows = 4;
	} else {
		var Rows = 5;
	}
	var HTMLString = '<table><tr><td valign="top"><table border="0" cellspacing="0" cellpadding="2">';
	if (((previousMonth < CurrentMonth) && (previousYear == CurrentYear)) || ((previousMonth > CurrentMonth) && (previousYear < CurrentYear))) {
		HTMLString += '<tr><th colspan="7" align="center"><table cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td>&nbsp;</td><td align="center">' + MonthNames[Month] + ' ' + Year + '</td><td><a href="javascript:js_MakeCalendar(\''+str_DateInput+'\','+restrictRange+','+nextYear+','+nextMonth+')">&gt;</a></td></tr></table></th></tr>';
	} else if ((maxMonth == nextMonth) && (maxYear == nextYear)) {
		HTMLString += '<tr><th colspan="7" align="center"><table cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td><a href="javascript:js_MakeCalendar(\''+str_DateInput+'\','+restrictRange+','+previousYear+','+previousMonth+')">&lt;</a></td><td align="center">' + MonthNames[Month] + ' ' + Year + '</td><td>&nbsp;</td></tr></table></th></tr>';
	} else {
		HTMLString += '<tr><th colspan="7" align="center"><table cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td><a href="javascript:js_MakeCalendar(\''+str_DateInput+'\','+restrictRange+','+previousYear+','+previousMonth+')">&lt;</a></td><td align="center">' + MonthNames[Month] + ' ' + Year + '</td><td><a href="javascript:js_MakeCalendar(\''+str_DateInput+'\','+restrictRange+','+nextYear+','+nextMonth+')">&gt;</a></td></tr></table></th></tr>';
	}
	HTMLString += '<tr><th align="center">M</th><th align="center">T</th><th align="center">W</th><th align="center">T</th><th align="center">F</th><th align="center">S</th><th align="center">S</th></tr>';
	var num_DayCounter = 1;
	var num_LoopCounter = 1;
	var num_OutputMonth = Month + 1;
	for (var j = 1; j <= Rows; j++) {
		HTMLString += '<tr align="left" valign="top">';
		for (var i = 1; i < 8; i++) {
			if ((num_LoopCounter >= dat_FirstDate) && (num_DayCounter <= MonthDays[Month])) {
				if ((num_DayCounter < Today) && (Month == CurrentMonth) && (Year == CurrentYear)) {
					HTMLString += '<td style="color:#999999;">' + num_DayCounter + '</td>';
				} else if (num_DayCounter == Day) {
					HTMLString += '<td><strong><a href="javascript:js_InsertValue(\''+str_DateInput+'\', \''+num_DayCounter+'/'+num_OutputMonth+'/'+Year+'\')">' + num_DayCounter + '</a></strong></td>';
				} else {
					HTMLString += '<td><a href="javascript:js_InsertValue(\''+str_DateInput+'\', \''+num_DayCounter+'/'+num_OutputMonth+'/'+Year+'\')">' + num_DayCounter + '</a></td>';
				}
				num_DayCounter++;    
			} else {
				HTMLString += '<td>&nbsp;</td>';
			}
			num_LoopCounter++;
		}
		HTMLString += '</tr>';
	}
	HTMLString += '</table></td></tr><tr><td colspan="7" align="center"><a href="javascript:js_hideCalendar(\'sCalHolder\');">Close</a></td></table>';
	var obj_Cal = document.getElementById('sCalHolder');
	obj_Cal.innerHTML = HTMLString;
}

function js_InsertValue(str_DateInput, dateValue) {
	document.getElementById(str_DateInput).value = dateValue;
	js_hideCalendar('sCalHolder');
}