function getToday() {
	this.now = new Date();
	this.year = this.now.getFullYear();
	this.month = this.now.getMonth();
	this.day = this.now.getDate();
}

function getDays(month, year)
{
	if (1 == month)
	return ((0 == year % 4) && (0 != (year % 100))) ||
	  (0 == year % 400) ? 29 : 28;
	else
	return daysInMonth[month];
}

var isIE = (document.all ? true : false);
var isDOM = (document.getElementById ? true : false);
var months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var displayMonth = new Date().getMonth();
var displayYear = new Date().getFullYear();
today = new getToday();

var savedDate = '';

function incMonth(delta) {
	displayMonth += delta;
	var testMonth = (Math.round(savedDate.substring(3,5)) - 1) + delta;
	var testYear = savedDate.substring(6,10);
	if (testMonth < 0) {
		testMonth = 11;
	}
	if (testMonth > 11) {
		testMonth = 0;
	}
	daysInComingMonth = getDays(testMonth,testYear);
	if (savedDate.substring(0,2) > daysInComingMonth) {
		savedDate = daysInComingMonth + savedDate.substring(2,10);
	}
	if (displayMonth >= 12) {
		displayMonth = 0;
		incYear(1);
	} else if (displayMonth <= -1) {
		displayMonth = 11;
		incYear(-1);
	} else {
		newMonth = displayMonth + 1;
		if (newMonth < 10) {
			newMonth = '0' + newMonth;
		}
		savedDate = savedDate.substring(0,3) + newMonth + savedDate.substring(5,10);
		newCalendar('');
	}
}

function incYear(delta) {
	displayYear = parseInt(displayYear + '') + delta;

	newYear = displayYear;

	if (delta > 0) {
		savedDate = savedDate.substring(0,2) + '/01/' + newYear;
	} else {
		savedDate = savedDate.substring(0,2) + '/12/' + newYear;
	}
	newCalendar('');
}

function makeDaysGrid(startDay,day,intDaysInMonth,newCal) {
	var daysGrid;
	var month = newCal.getMonth();
	var year = newCal.getFullYear();
	var isThisYear = (year == new Date().getFullYear());
	var isThisMonth = (day > -1)
	daysGrid ='<div id="CalendarTable">';
	daysGrid += '<div id="CalendarHeader"><h4><span class="Hidden">The calendar below shows dates for </span>' + months[month] + ' ' + year + '</h4></div>';
	daysGrid += '<div id="CalendarControl"><p><span class="Hidden">Change month: </span><a href="javascript:incMonth(-1)" onfocus="tsGetElementById(\'Calendar\').className = \'Show\'" onblur="tsGetElementById(\'Calendar\').className = \'Hide\'" title="Previous Month">Previous Month</a> | <a href="javascript:incMonth(1)" onfocus="tsGetElementById(\'Calendar\').className = \'Show\'" onblur="tsGetElementById(\'Calendar\').className = \'Hide\'" title="Next Month">Next Month</a></p></div>';
	daysGrid += '<table border="2" cellspacing="0" cellpadding="10"><tr><th>Mon<span class="Hidden">day</span></th><th>Tue<span class="Hidden">sday</span></th><th>Wed<span class="Hidden">nesday</span></th><th>Thu<span class="Hidden">rsday</span></th><th>Fri<span class="Hidden">day</span></th><th>Sat<span class="Hidden">urday</span></th><th>Sun<span class="Hidden">day</span></th></tr><tr>';
	var dayOfMonthOfFirstSunday = (7 - startDay + 2);
	if ((startDay + intDaysInMonth) > 35) {
		var weeks = 6;
	} else {
		var weeks = 5;
	}
	for (var intWeek = 0; intWeek < weeks; intWeek++) {
		var dayOfMonth;
		for (var intDay = 0; intDay < 7; intDay++) {
			dayOfMonth = (intWeek * 7) + intDay + dayOfMonthOfFirstSunday - 7;
			if (dayOfMonth <= 0) {
				daysGrid += '<td class="Empty"> </td>';
			} else if (dayOfMonth <= intDaysInMonth) {
				var linkClass = " ";
				if (day > 0 && day == dayOfMonth) linkClass = "Today";
					daysGrid += '<td><a href="javascript:setDay(';
					daysGrid += dayOfMonth + ')" '
					daysGrid += 'class="' + linkClass + '" ';
					var idDay = dayOfMonth;
					if (idDay < 10) {
						idDay = '0' + idDay;
					}
					var idMonth = savedDate.substring(3,5);
					var idYear = displayYear;
					daysGrid += 'title="' + dayOfMonth + ' ' + months[month] + ' ' + year + '" id="Link_' + idDay + '_' + idMonth + '_' + idYear + '" onfocus="tsGetElementById(\'Calendar\').className = \'Show\'" onblur="tsGetElementById(\'Calendar\').className = \'Hide\'">';
					var dayString = dayOfMonth + "</a></td>";
					if (dayString.length == 6){
						dayString = '0' + dayString;
					}
						daysGrid += dayString;
					} else {
					daysGrid += '<td class="Empty"> </td>';
				}
			}
		if ((dayOfMonth >= 0) && (intWeek < (weeks -1))) {
		daysGrid += "</tr><tr>";
		}
	}
	return daysGrid + '</tr></table></div>';
}

function newCalendar(showOrNot) {

	today = new getToday();
	var parseYear = parseInt(displayYear + '');
	var newCal = new Date(parseYear,displayMonth,1);
	var day = -1;
	var startDayOfWeek = newCal.getDay();
	if ((today.year == newCal.getFullYear()) && (today.month == newCal.getMonth())) {
		day = today.day;
	}
	var intDaysInMonth = getDays(newCal.getMonth(), newCal.getFullYear());
	var daysGrid = makeDaysGrid(startDayOfWeek,day,intDaysInMonth,newCal);
	tsGetElementById('Calendar').innerHTML = daysGrid;
	tsGetElementById('Calendar').style.display = 'block';
	if (showOrNot == 'hidden') {
		tsGetElementById('Calendar').className = 'Hidden';
	} else if (showOrNot != 'hidden') {
		tsGetElementById('Calendar').className = 'Show';
		var replacedDate = replace(savedDate,'/','_');
		var selectedDate = 'Link_' + replacedDate;
		tsGetElementById(selectedDate).focus();
		tsGetElementById(selectedDate).className = 'CalendarSelected';
	}
}

function replace(string,text,by) {
	var strLength = string.length, txtLength = text.length;
	if ((strLength == 0) || (txtLength == 0)) return string;
		var i = string.indexOf(text);
	if ((!i) && (text != string.substring(0,txtLength))) return string;
	if (i == -1) return string;
		var newstr = string.substring(0,i) + by;
	if (i+txtLength < strLength)
		newstr += replace(string.substring(i+txtLength,strLength),text,by);
	return newstr;
}

function setDay(day) {
	if (day < 10) {
		day = '0' + day;
	}
	var calendarMonth = displayMonth + 1;
	if (calendarMonth < 10) {
		calendarMonth = '0' + calendarMonth;
	}
	tsGetElementById('fromdate').value = day + "/" + calendarMonth + "/" + displayYear;
	savedDate = day + "/" + calendarMonth + "/" + displayYear;
	tsGetElementById('Calendar').style.display = 'none';
	tsGetElementById('startampm').focus();

	calcEndDate();
}
