////////// HSS Hire Date Selector Functions //////////////////////

/**
* Return JS time stamp from english date
**/
function shortDateToJS(engDate) {
	var db = new Date();

	var sd = engDate.split('/');

	var s = sd[0]+'';

	if (s.substr(0, 1)=='0') {
		sd[0] = s.substr(1, 1);
	}

	s = sd[1]+'';
	if (s.substr(0, 1)=='0') {
		sd[1] = s.substr(1, 1);
	}

	db.setDate(parseInt(sd[0]));
	db.setMonth(parseInt(sd[1])-1);
	db.setYear(parseInt(sd[2]));

	return db.getTime();
}

/**
* increment a date by days
**/
function dayIncDate(startDate, days) {
	var sDate = new Date(shortDateToJS(startDate));
	var msperday = 1000 * 60 * 60 * 24;
	var timepassed = sDate.getTime() + (days*msperday);

	var days = new Date(timepassed);
	var m = days.getMonth() + 1;
	var d = days.getDate();
	var day = '' + d;
	var month = '' + m;
	if ( d < 10) {
		day = '0' + d;
	}
	if ( m < 10) {
		month = '0' + m;
	}
	//return day + '/' + month + '/' + days.getYear();
	return day + '/' + month + '/' + days.getFullYear();
}

/**
* Returns date (as: dd/mm/yyyy) based on selected hire start date and number on days of the selected hire period
**/
function calcEndDate() {
	var sd = tsGetElementById('fromdate').value;
	var hireperiodsParts = tsGetElementById('hireperiod').options[tsGetElementById('hireperiod').selectedIndex].value.split('|');
	if (hireperiodsParts[1] == 'Weekend (Saturday - Monday)')
	{
	  hireperiodsParts[0] = (hireperiodsParts[0]*1)-1;
	}
	var nd = parseInt(hireperiodsParts[0]);

	tsGetElementById('todate').value = dayIncDate(sd, nd);
	tsGetElementById('hireenddate').value = dayIncDate(sd, nd);

	if(nd > 6) {
		tsGetElementById('EndCalendarIcon').className = 'SmallWidth';
	} else {
		tsGetElementById('EndCalendarIcon').className = 'LargeWidth';
	}

	displayEndDateMonth = dayIncDate(sd, nd).substring(3,5) - 1;
	displayEndDateYear = dayIncDate(sd, nd).substring(6,10);

	savedEndDate = dayIncDate(sd, nd);

}

/**
* Workout when next hire day could be;
**/
function moveDateToNextDayNumber(dayNumber) {
	//return '';

	var sd =  new Date();

	sd.setTime(sd.getTime()+((60000*60)*24));

	while(sd.getDay()!=dayNumber) {
		sd.setTime(sd.getTime()+((60000*60)*24));
	}

	var d = sd.getDate();
	var m = sd.getMonth()+1;

	if (d<10) {
		d = '0'+d;
	}
	if (m<10) {
		m = '0'+m;
	}

	return d+'/'+m+'/'+sd.getFullYear();

}

/**
* Map HSS number of days number susytemto Javascripts, in HSS sunday is 7 not 6 as in javascript
**/
function mapToJsDays(dayNumber)
{
	if (dayNumber==7)
		return 0;
	else
		return dayNumber;
}

/**
* Returns true if select start date matches given dayNumber, dayNumber 0 means hire starts on any day
**/
function startsOnCorrectDay(startDate, dayNumber) {
	var sd =  new Date(shortDateToJS(startDate));

	if (dayNumber<1) { // can start on any day
		return true;
	} if (sd.getDay()==mapToJsDays(dayNumber)) { // start date day must be today
		return true;
	} else {
		return false;
	}
}


var gHSSDaysOfWeek = new Array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');
//0= monday 6= sunday

function calcStartDate() {
	var today = new Date();

	var hirePeriodData = tsGetElementById('hireperiod').options[tsGetElementById('hireperiod').selectedIndex].value.split('|');

	if (!startsOnCorrectDay(tsGetElementById('fromdate').value, hirePeriodData[3]))
	{
		alert('This hire period must start on a '+gHSSDaysOfWeek[hirePeriodData[3]-1]+'. Please adjust the hire period start date.');
		tsGetElementById('fromdate').focus();
	}
	
	// check if the hire period is fri noon - mon noon
	if(tsGetElementById('hireperiod').value.toLowerCase().indexOf("noon") > -1)
	{
		// remove AM option
		tsGetElementById('endampm').remove(0);
		tsGetElementById('startampm').remove(0);
		
		tsGetElementById('endampm').selectedIndex = 0;
		tsGetElementById('startampm').selectedIndex = 0;
	}
	// check if an option has been removed (ie the noon option was selected before this
	else if(tsGetElementById('endampm').options.length == 1)
	{
		
		tsGetElementById('endampm').insertBefore(new Option('AM', 'am', true), tsGetElementById('endampm').options[0]);
		tsGetElementById('startampm').insertBefore(new Option('AM', 'am', true), tsGetElementById('startampm').options[0]);

		if (navigator.appName.indexOf('Microsoft') >-1) // is ie?
		{
    		tsGetElementById('endampm').options[0].value = 'am'
    		tsGetElementById('endampm').options[0].text = 'AM'
    		tsGetElementById('startampm').options[0].value = 'am'
    		tsGetElementById('startampm').options[0].text = 'AM'
		}
		setTimeout("tsGetElementById('endampm').selectedIndex=0;tsGetElementById('startampm').selectedIndex=0", 500);
	}
}

/**
* Returns day of week required by selected hire period
**/
function checkHireStartDay() {
	var ret = '';

	var hirePeriodData = tsGetElementById('hireperiod').options[tsGetElementById('hireperiod').selectedIndex].value.split('|');

	if (!startsOnCorrectDay(tsGetElementById('fromdate').value, hirePeriodData[3]))
	{
		ret = gHSSDaysOfWeek[hirePeriodData[3]-1];
	}

	return ret;

}

/**
* Check start day matches selected hire period
**/
function validate_startday() {
	var ret = true;

	var res1 = checkHireStartDay();
	if (res1!='') {
		alert('Selected hire period must start on a '+res1+'.  Please change start date or the selected hire period in order to proceed.');
		ret = false;
	}
	else
	{
		var dateStrParts = tsGetElementById('fromdate').value.split('/');
		var enddateStrParts = tsGetElementById('todate').value.split('/');

		if (getDateDayName(dateStrParts[2],dateStrParts[1],dateStrParts[0]) == 'Sunday')
		{
			alert('Sorry, but HSS cannot accept Internet Hire Requests that commence on a Sunday.  Please change your Hire Start Date to a Saturday');
			ret = false;
		}
		else if (getDateDayName(dateStrParts[2],dateStrParts[1],dateStrParts[0]) == 'Saturday')
		{
			alert('Some HSS branches close early on Saturdays.  Please contact your preferred branch before travelling to confirm that they will be open');
			ret = true;
		}
		else
		{

			if (getDateDayName(enddateStrParts[2],enddateStrParts[1],enddateStrParts[0]) == 'Sunday')
			{
				alert('Only selected branches are open on Sundays.  Please check with your branch before attempting to return equipment on a Sunday. HSS does not collect equipment on Sundays.');
				ret = true;
			}
		}

	}

	return ret;
}

/**
* returns the name of the day of week
**/
function getDateDayName(ayear, amonth, aday) {
	var ret = '';
	var months = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
	var days = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");

	var mtend = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	var opt = new Array("Past","Future");

	var y1 = ''+ayear; //make sure we got strings
	var m1 = ''+amonth;
	var d1 = ''+aday;

	var y = parseInt(y1);   // trim leading zeros

	if (m1.substr(0, 1)=='0') {
		var m = parseInt(m1.substr(1, 1));
	} else {
		var m = parseInt(m1);
	}

	m--;//make zero based not 1 based

	if (d1.substr(0, 1)=='0') {
		var d = parseInt(d1.substr(1, 1));
	} else {
		var d = parseInt(d1);
	}


	var hlpr = mtend[m];

	if (d < mtend[m] + 1) {
		if (m == 1 && y % 4 == 0) { hlpr++; }

		var c = new Date(y,m,d);
		var dayOfWeek = c.getDay();

		ret = days[dayOfWeek];

		if(c.getTime() > new Date().getTime()) {
			//ret = opt[1];
		} else  {
			ret = '';
	   }
	}

   return ret;
}

/**
* Is date in the past and therefore invalid
**/
function isFromDateValid(fromdate)
{
	var ret = true;
	var dateStrParts = fromdate.split('/');

	if (getDateDayName(dateStrParts[2],dateStrParts[1],dateStrParts[0])=='') {
		ret = false;
	}

	return ret;
}

/**
* Is from date today's date
**/
function isFromDateToday(fromdate)
{
	var ret = false;

	var c = new Date(shortDateToJS(fromdate));
	c.setHours(0);
	c.setMinutes(0);
	c.setSeconds(0);
	c.setMilliseconds(0);

	var d = new Date();
	d.setHours(0);
	d.setMinutes(0);
	d.setSeconds(0);
	d.setMilliseconds(0);

	return (d.getTime()==c.getTime());
}

/**
* Validate hire start date and selected hire period
**/
function validate_startdate() {
	if (validate_startday()) {
		var sd = tsGetElementById('fromdate').value;

		if (isFromDateToday(tsGetElementById('fromdate').value))
		{
			alert('HSS cannot always guarantee same day availability. Please proceed and we will contact you regarding your enquiry.');
			return true;
		}
		else if (isFromDateValid(sd)==false)
		{
			alert('Earliest hire start date is today. Please change start date in order to proceed.');
			tsGetElementById('fromdate').focus();
			return false;
		} else {
			return true;
		}
	}
	else
	{
		return false;
	}
}


function makeSelectsTheSame(objId1, objId2) {
	tsGetElementById(objId2).selectedIndex =  tsGetElementById(objId1).selectedIndex;
}

