//Date Picker - start

/* some nasty globals */
var bDatePickerFormSubmit;
var bDatePickerDateValidated;


function CheckDate(obj) {
	var validformat = /^\d{2}\/\d{2}\/\d{4}$/;  //Basic check for format validity 'dd/mm/yyyy'
	var returnval = false;
	if (!(validformat.test(obj.value))) {
		//alert("Invalid Date Format. Please correct and submit again.")
	}
	else { //Detailed check for valid date ranges
		var dayfield = obj.value.split("/")[0];
		var monthfield = obj.value.split("/")[1];
		var yearfield = obj.value.split("/")[2];
		var dayobj = new Date(yearfield, monthfield - 1, dayfield);
		if ((dayobj.getDate() != dayfield) || (dayobj.getMonth() != monthfield - 1) || (dayobj.getFullYear() != yearfield)) {
			//alert("Invalid Day, Month, or Year range detected. Please correct and submit again.")
		}
		else {
			returnval = true;
		}
	}
	if (returnval === false) {
		obj.select();
	}
	return returnval;
}

function getUrlVar(name) {
	name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
	var regexS = "[\\?&]" + name + "=([^&#]*)";
	var regex = new RegExp(regexS);
	var results = regex.exec(window.location.href);
	if (results === null) {
		return "";
	}
	else {
		return unescape(results[1]);
	}
}

function getUrlVarWithDflt(name, dfltVal) {
	var strVal = getUrlVar(name);
	if (strVal === '') {
		return dfltVal;
	}
	else {
		return strVal;
	}
}

var DatePickerInit = function(strContainerQuery, strInputClass, strRefineQuery, strDfltDate) {
	//alert('bDatePickerFormSubmit='+bDatePickerFormSubmit);
	//replace start date select drop down lists with a text field and a calendar

	var $container = $(strContainerQuery);

	$container.ready(function() {
		$(strContainerQuery)
			.html('<input name="' + strInputClass + '" value="' + getUrlVarWithDflt(strInputClass, strDfltDate) + '" class="date-pick dp-applied ' + strInputClass + '"/><span class="error"></span>')
			.find('.date-pick')
			.datePicker({ clickInput: true });
	});

	//alert('strContainerID='+strContainerID)
	var $container = $(strContainerQuery);
	var error = $container.find('.error');
	var $input = $container.find('input.' + strInputClass);
	//validate start date on change
	$input.bind("change", function(e) {
		if (CheckDate($input[0])) {
			error.text("");
			error.css("padding", "0");
			bDatePickerFormSubmit = true;
			bDatePickerDateValidated = strContainerQuery;
		}
		else {
			error.text("Please choose a date");
			error.css("padding", "2px");
			bDatePickerFormSubmit = false;
		}
	});

	//validate start date on form submit
	$container.parents('form').bind("submit", function(e) {

		//alert($('#'+strRefineID).length);
		var bValidPreCheck = true;
		var $this = $(this);
		var $refine = $(strRefineQuery);
		if ($refine.length > 0) {
			if ($refine[0].checked !== true) {
				bValidPreCheck = false;
			}
		}
		//alert(strInputID);
		//alert(CheckDate($('#'+strInputID).get(0)));	
		//alert('bValidPreCheck='+bValidPreCheck);
		if (bValidPreCheck) {

			if (CheckDate($this.find('input.' + strInputClass)[0]) && bDatePickerFormSubmit) {
				return; //we want to just return from here, if we force a submit any other events don't fire!
			}
			else {
				e.preventDefault(); //stop default
				e.stopPropagation(); //stop over events
				//alert('strContainerID='+strContainerID);
				if (bDatePickerDateValidated !== strContainerQuery) {
					error.text("Please choose a date");
					error.css("padding", "2px");
				}
				bDatePickerFormSubmit = false;
			}
		}
	});
};

//this function uses the Date constructor and .getDate() to pass in a 32nd day of the month
//this overflows into the next month
//parameters: month and year of the date you want to check (month is 0 to 11)
//example: 2,2009: 32nd March overflows to become 1st April = 32-1 = 31 days in March
//example: 1,2009: 32nd Feb overflows to become 4th March (3rd on a leap year) = 32-4 = 28 days in Feb or 29 for leap year
function getDaysInMonth(iMonth, iYear) {
	return 32 - new Date(iYear, iMonth, 32).getDate();
}

function DatePickerInitialise() {

	var $refineSearchForm = $('#refineBySearchForm');

	//Init Avail Calendar Start Date if refine availability exists
	if ($refineSearchForm.find('#refine-availability').length > 0) {
		bDatePickerFormSubmit = true;
		DatePickerInit('#refineBySearchForm dd span.calStayDate', 'isostartdate', '#refine-availability', 'dd/mm/yyyy');
	}

	//Init Events Start and End Dates 
	if ($refineSearchForm.find('#refine-date').length > 0) {
		bDatePickerFormSubmit = true;

		var today = new Date();
		var dd = today.getDate();
		var nextdd = dd;
		var mm = today.getMonth() + 1; //January is 0!
		var nextmm = mm + 1;
		var yyyy = today.getFullYear();
		var nextyyyy = yyyy;

		//dates in dec are returning a 13th month so changing this to Jan and increasing the year
		if (nextmm > 12) { nextmm = 1; nextyyyy = today.getFullYear() + 1; }

		//nextmm - 1 because getDaysInMonth requires 0 based arg
		var daysInNextMonth = getDaysInMonth(nextmm - 1, nextyyyy);

		//if the next day is larger than the number of days in the next month 
		//then set it to match the number of days in the next month
		if (daysInNextMonth < nextdd) { nextdd = daysInNextMonth; }

		if (dd < 10) { dd = '0' + dd; }
		if (mm < 10) { mm = '0' + mm; }
		if (nextdd < 10) { nextdd = '0' + nextdd; }
		if (nextmm < 10) { nextmm = '0' + nextmm; }
		var strTodayDate = dd + '/' + mm + '/' + yyyy;
		var strNextMonthDate = nextdd + '/' + nextmm + '/' + nextyyyy;
		//alert (strTodayDate);
		//alert (strNextMonthDate);

		DatePickerInit('#refineBySearchForm dd span.calStartDate', 'isostartdate', '#refine-date', strTodayDate);
		DatePickerInit('#refineBySearchForm dd span.calEndDate', 'isoenddate', '#refine-date', strNextMonthDate);
	}

	//Init Ajax Availability Calendar Searches

	if ($('#calendarForm').length > 0) {
		DatePickerInit('#calendarForm span.calStayDate', 'isostartdate', '', 'dd/mm/yyyy');
	}
}

if (window.jQuery) {
	$(function() {
		DatePickerInitialise();
	});
}

//Date Picker - end 