var savedEndDate = '';
var savedHireStartDate = '';
var displayEndDateMonth = '';
var displayEndDateYear = '';



/**
* Returns max number of days in selected hire period
**/
function getNumberOfDaysInHirePeriod() {
	var periodParts = tsGetElementById('hireperiod')[tsGetElementById('hireperiod').selectedIndex].value.split('|');

	return parseInt(periodParts[0]);
}

/*
varibleHirePeriods - 4 days from max number of days in hire period
3-7 Days - range from +3 to +7
One week - +3 to +7
Two weeks - +10 to +14
Three weeks - +17 to +21
Four weeks - +24 to +28
Eight weeks - +52 to +56
Thirteen weeks - +87 to +91
*/

function incEndMonth(delta) {
	displayEndDateMonth += delta;

	/*var testMonth = (Math.round(savedEndDate.substring(3,5)) - 1) + delta;
	var testYear = savedEndDate.substring(6,10);
	if (testMonth < 0) {
		testMonth = 11;
	}
	if (testMonth > 11) {
		testMonth = 0;
	}
	daysInComingMonth = getDays(testMonth,testYear);
	if (savedEndDate.substring(0,2) > daysInComingMonth) {
		savedEndDate = daysInComingMonth + savedEndDate.substring(2,10);
	}*/

	if (displayEndDateMonth >= 12) {
		displayEndDateMonth = 0;
		incEndDateYear(1);
	} else if (displayEndDateMonth <= -1) {
		displayEndDateMonth = 11;
		incEndDateYear(-1);
	} else {
		newMonth = displayEndDateMonth + 1;
		if (newMonth < 10) {
			newMonth = '0' + newMonth;
		}
		savedEndDate = savedEndDate.substring(0,3) + newMonth + savedEndDate.substring(5,10);
		newEndDateCalendar('');
	}
}

function incEndDateYear(delta) {

	displayEndDateYear = parseInt(displayEndDateYear + '') + delta;
	newYear = displayEndDateYear;
	if (delta > 0) {
		savedEndDate = savedEndDate.substring(0,2) + '/01/' + newYear;
	} else {
		savedEndDate = savedEndDate.substring(0,2) + '/12/' + newYear;
	}
	newEndDateCalendar('');
}

function makeDaysEndDateGrid(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="EndDateCalendarTable">';
	daysGrid += '<div id="EndDateCalendarHeader"><h4><span class="Hidden">The calendar below shows dates for </span>' + months[month] + ' ' + year + '</h4></div>';
	daysGrid += '<div id="EndDateCalendarControl"><p><span class="Hidden">Change month: </span><a href="javascript:incEndMonth(-1)" onfocus="tsGetElementById(\'EndDateCalendar\').className = \'Show\'" onblur="tsGetElementById(\'EndDateCalendar\').className = \'Hide\'" title="Previous Month" id="PrevMonth">Previous Month</a> | <a href="javascript:incEndMonth(1)" onfocus="tsGetElementById(\'EndDateCalendar\').className = \'Show\'" onblur="tsGetElementById(\'EndDateCalendar\').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";

				var idDay = dayOfMonth;
				if (idDay < 10) {
					idDay = '0' + idDay;
				}
				var idMonth = savedEndDate.substring(3,5);
				var idYear = displayEndDateYear;


				if  (isValidReturnDate(idDay,idMonth, idYear))
				{
					daysGrid += '<td><a href="javascript:setEndDateDay(';
					daysGrid += dayOfMonth + ')" '
					daysGrid += 'class="' + linkClass + '" ';

					daysGrid += 'title="' + dayOfMonth + ' ' + months[month] + ' ' + year + '" id="Link2_' + idDay + '_' + idMonth + '_' + idYear + '" onfocus="tsGetElementById(\'EndDateCalendar\').className = \'Show\'" onblur="tsGetElementById(\'EndDateCalendar\').className = \'Hide\'">';

					var dayString = dayOfMonth + "</a></td>";
					if (dayString.length == 6){
						dayString = '0' + dayString;
					}

					daysGrid += dayString;
				}
				else
				{
					daysGrid += '<td><span class="Invalid" title="' + dayOfMonth + ' ' + months[month] + ' ' + year + ' is not a valid \'Hire End Date\'">'+dayOfMonth+'</span></td>';
				}
			} else {
				daysGrid += '<td class="Empty"> </td>';
			}
		}
		if ((dayOfMonth >= 0) && (intWeek < (weeks -1))) {
			daysGrid += "</tr><tr>";
		}
	}
	return daysGrid + '</tr></table></div>';
}

function newEndDateCalendar(showOrNot) {

	//only show on varible hire periods, less than 7 days are non varible hire periods
	if (getNumberOfDaysInHirePeriod()<6) {
		return;
	}

	today = new getToday();

	/*if (displayEndDateMonth == 0) {
		displayEndDateMonth = today.month;
	}

	if (displayEndDateYear == 0) {
		displayEndDateYear = today.year;
	}*/


	var parseYear = parseInt(displayEndDateYear + '');
	var newCal = new Date(parseYear,displayEndDateMonth,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 = makeDaysEndDateGrid(startDayOfWeek,day,intDaysInMonth,newCal);

	tsGetElementById('EndDateCalendar').innerHTML = daysGrid;
	tsGetElementById('EndDateCalendar').style.display = 'block';

	if (showOrNot == 'hidden') {
		tsGetElementById('EndDateCalendar').className = 'Hidden';
	} else if (showOrNot != 'hidden') {

		tsGetElementById('EndDateCalendar').className = 'Show';

		var replacedDate = replace(savedEndDate,'/','_');

		var selectedDate = 'Link2_' + replacedDate;

		if (tsGetElementById(selectedDate) == null) {
			tsGetElementById('PrevMonth').focus();
		} else {
			tsGetElementById(selectedDate).focus();
			tsGetElementById(selectedDate).className = 'CalendarSelected';
		}
	}
}

function setEndDateDay(day) {
	if (day < 10) {
		day = '0' + day;
	}
	var calendarMonth = displayEndDateMonth + 1;
	if (calendarMonth < 10) {
		calendarMonth = '0' + calendarMonth;
	}
	tsGetElementById('todate').value = day + "/" + calendarMonth + "/" + displayEndDateYear;
	savedEndDate = day + "/" + calendarMonth + "/" + displayEndDateYear;
	tsGetElementById('EndDateCalendar').style.display = 'none';
	tsGetElementById('endampm').focus();
}


function isValidReturnDate(day, month, year) {


	//only show on varible hire periods, one and two day hire is the only non varible
	var numberOfDays = getNumberOfDaysInHirePeriod();
	var variableNumberOfDays = numberOfDays-4;

	var fromDateParts = tsGetElementById('fromdate').value.split('/');
	var startDateDay = fromDateParts[0];
	var startDateMonth = 0;
	startDateMonth = fromDateParts[1];
	startDateMonth--;

	var startDateYear = fromDateParts[2];

	var startDate = new Date( startDateYear, startDateMonth, startDateDay, '01','01','01');

	if (numberOfDays>6) {
		var ct = startDate.getTime();
		var minDaysMilliSes = variableNumberOfDays*((60000*60)*24)-0;

		var n1 = 0;
		n1 = ct+minDaysMilliSes;
		startDate.setTime(n1);

	}

	var endDateParts = tsGetElementById('hireenddate').value.split('/');

	var endDateDay = endDateParts[0];
	var endDateMonth = 0;
	endDateMonth = endDateParts[1];

	endDateMonth--;

	var endDateYear = endDateParts[2];

	var endDate = new Date( endDateYear, endDateMonth, endDateDay,'01','01','01');


	var month2 = 0;
	month2 = month;
	month2--;

	var dateTest = new Date (year, month2, day,'01','01','01');

	if (dateTest.getTime() > startDate.getTime() && dateTest.getTime() <= endDate.getTime()) {
		return true;
	} else {
		return false;
	}

}
