// JavaScript Document
// custom functions by DBS

// calendar initialisation, calendar support functions, booking form permit visablity toggler, form validation
// © 2006 Matthew Harris, DBS, www.dbs-uk.co.uk

// this MUST be included after calendar and validation JS files

// initialise the calendars
function sparkCalendar()
{
	// build new calendar objects
	var cal_startdate = new CalendarPopup();
	var cal_enddate = new CalendarPopup();

	// calendar formatting
	cal_startdate.setCssPrefix("TEST");	
	cal_enddate.setCssPrefix("TEST");
	
	// disable dates before today (cant book for the past)
	// todo - for the moment dont disable dates on 1st as breaks the day-1 code below
	var now = new Date();
	if(now.getDate() != 1)
	{
		now.setDate(now.getDate()-1);
		cal_startdate.addDisabledDates(null,formatDate(now,"yyyy-MM-dd"));
		cal_enddate.addDisabledDates(null,formatDate(now,"yyyy-MM-dd"));
	}

	// setup return value hooks
	cal_startdate.setReturnFunction("StartDate_SetNewDates");
	cal_enddate.setReturnFunction("EndDate_SetNewDates");
	
	// add event handler for startdate icon click
	if(document.getElementById('startdate_a'))
	{
		document.getElementById('startdate_a').onclick = function(){
			var frm = document.getElementById('hire_request');
			var dateStrA = getDateString(frm.startdate_year, frm.startdate_month, frm.startdate_date);
			cal_startdate.showCalendar('startdate_a',dateStrA);
			return false;
		}
	}

	// add event handler for enddate icon click
	if(document.getElementById('enddate_a'))
	{	
		document.getElementById('enddate_a').onclick = function(){
			var frm = document.getElementById('hire_request');
			var dateStrA = getDateString(frm.enddate_year, frm.enddate_month, frm.enddate_date);
			cal_enddate.showCalendar('enddate_a', dateStrA);
			return false;
		}
	}
	
	return false;	
}

// the function hook for setting values returned from startdate popup
function StartDate_SetNewDates(y,m,d)
{
	 document.forms[0].startdate_year.value=y;
	 document.forms[0].startdate_month.selectedIndex=m;
	 for (var i=0; i<document.forms[0].startdate_date.options.length; i++) {
		  if (document.forms[0].startdate_date.options[i].value==d) {
			   document.forms[0].startdate_date.selectedIndex=i;
			   }
		  }
}

// the function hook for setting values returned from enddate popup
function EndDate_SetNewDates(y,m,d)
{
	 document.forms[0].enddate_year.value=y;
	 document.forms[0].enddate_month.selectedIndex=m;
	 for (var i=0; i<document.forms[0].enddate_date.options.length; i++) {
		  if (document.forms[0].enddate_date.options[i].value==d) {
			   document.forms[0].enddate_date.selectedIndex=i;
			   }
		  }
}

// utility function - ensure two digit date months
function PadDigits(n, totalDigits) 
{ 
	n = n.toString(); 
	var pd = ''; 
	if (totalDigits > n.length) 
	{ 
		for (i=0; i < (totalDigits-n.length); i++) 
		{ 
			pd += '0'; 
		} 
	} 
	return pd + n.toString(); 
} 
	 
// utility function - get end date or null for validation routines
function getEndDateAsString()
{
	 var frm = document.forms["hire_request"];
	 var y = frm.enddate_year.value;
	 var m = frm.enddate_month.selectedIndex;
	 var d = frm.enddate_date.value;
	 
	 if (y=="" || m=="" || d=="") { return null; }
	 
	 d = PadDigits(d, 2);
	 m = PadDigits(m, 2);
	 
	 var str = d+'-'+m+'-'+y;
	 
	 return str;
}
	 
// utility function - get start date or null for validation routines
function getStartDateAsString()
{
	 var frm = document.forms["hire_request"];
	 var y = frm.startdate_year.value;
	 var m = frm.startdate_month.selectedIndex;
	 var d = frm.startdate_date.value;
	 
	 if (y=="" || m=="" || d=="") { return null; }
	 
	 d = PadDigits(d, 2);	 
	 m = PadDigits(m, 2);	 
	 
	 var str = d+'-'+m+'-'+y;
	 
	 return str;
}		 		 
	 
// utility function - generic date checker used by calendar display function (date icon on form)
function getDateString(y_obj,m_obj,d_obj)
{
	 var y = y_obj.options[y_obj.selectedIndex].value;
	 var m = m_obj.selectedIndex;
	 var d = d_obj.options[d_obj.selectedIndex].value;

	 // if no valid date return today
	 if (isNaN(y) || m < 1 || isNaN(d))
	 {
		 var today = new Date();
		 return str = today.getFullYear() + '-' + (today.getMonth()+1) + '-' + today.getDate();
	 }
	 
	 // valid date found so return it
	 return str = y+'-'+m+'-'+d;
}

// global startup function
/////////////////////////////////////////////////
if(document.getElementById && document.createTextNode)
{
	addEvent(window, 'load', function(e)
	{
		sparkCalendar();
	});
}
