<!--
// Functions for initialising and updating booking form

var stayLen=2;
var daysofmonth   = new makeArray(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var daysofmonthLY = new makeArray(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var	oneDay = 24*60*60*1000; // 24hrs * 60 mins * 60 secs * 1000 ms

var maxrooms=5;
var maxadults=4;
var maxchildren=2;
var maxchildage=12;
var default_numadults = 2;
var default_numchildren = 0;
var default_numrooms = 1;
var roomsArray = new Array(default_numrooms);
var roomtype_options = new Array();
roomtype_options[1] = new Array("S","TSU");
roomtype_options[2] = new Array("TW","DB");
var roomtype_option_labels = new Array();
roomtype_option_labels['S'] = "Single";
roomtype_option_labels['TSU'] = "Twin (Sole Use)";
roomtype_option_labels['TW'] = "Twin";
roomtype_option_labels['DB'] = "Double";



function changeHtmlContent(elementid,content){
  if (document.all) {
	  document.getElementById(elementid).innerHTML = content;
		}
  else if (document.getElementById){
    var rng = document.createRange();
    var el = document.getElementById(elementid);
    rng.setStartBefore(el);
    var htmlFrag = rng.createContextualFragment(content);
    while (el.hasChildNodes())
      el.removeChild(el.lastChild);
    el.appendChild(htmlFrag);
    }
  }



function makeArray()    {
    this[0] = arguments.length;
    for (var i = 0; i<arguments.length; i++) {
        this[i+1] = arguments[i];
				}
}



function LeapYear(year) {
    if ((year/4)   != Math.floor(year/4))   return false;
    if ((year/100) != Math.floor(year/100)) return true;
    if ((year/400) != Math.floor(year/400)) return false;
    return true;
}



function getYr(frm, in_out) {
	var now, year, month, day, chkInM, chkInD, chkInY, chkOutM, chkOutD, chkOutY;
	now = new Date;
	year = now.getFullYear();
	month = now.getMonth();
	day = now.getDate();
	
	chkInM = Number(frm.checkinMonth.value);
	chkInD = Number(frm.checkinDay.value);
	chkOutM = Number(frm.checkoutMonth.value);
	chkOutD = Number(frm.checkoutDay.value);
	
	chkInY = ((chkInM < month) || (chkInM==month && chkInD<day)) ? year+1 : year;
	chkOutY = ((chkOutM < chkInM) || (chkOutM==chkInM && chkOutD<=chkInD)) ? chkInY+1 : chkInY;

	if (in_out=='I') {return chkInY}
	else if (in_out=='O') {return chkOutY}
	else {return false}
}



function PopulateDay(objMnth, objDay, fYear)
	{
	var daySel = objDay.value;
	objDay.options.length=0;

	if (LeapYear(fYear)) var days = daysofmonthLY[objMnth.selectedIndex+1]; 
	else                 var days = daysofmonth[objMnth.selectedIndex+1];

	for (var intCounter=0;intCounter<days;intCounter++)
	{
	 objDay[intCounter] = new Option
			(intCounter+1,intCounter+1,false,false);
	}

	if (daySel > days) daySel = days;
	objDay.value = daySel;
	}



function PopulateNumDD(objDD, numOpts, sel) {
  var n = (arguments.length>3) ? arguments[3] : 1;
  objDD.options.length = numOpts;
	for (var i=0; i<numOpts; i++) {
		objDD[i] = new Option(i+n,i+n,(i+n==sel));
		}
	objDD.value = sel;
	}



function PopulateTypeDD(objDD, numAdults, sel) {
  if (numAdults>2) return false;
	var numOpts = roomtype_options[numAdults].length;
  objDD.options.length = numOpts;
	var ddVal, ddText;
	for (var i=0; i<numOpts; i++) {
	  ddVal = roomtype_options[numAdults][i];
		ddText = roomtype_option_labels[ddVal];
		objDD[i] = new Option(ddText, ddVal, (ddVal==sel));
		if (ddVal==sel) {
		  var setIndex = i;
			}
		}
	if (setIndex) {
	  objDD.selectedIndex = setIndex;
		}
	return true;
	}



function PopulateChildAgeDD(objDD, sel) {
  var numOpts = maxchildage+2;
  objDD.options.length = numOpts;
	objDD[0] = new Option('-',null,(sel==''));
	for (var i=1; i<numOpts; i++) {
		objDD[i] = new Option(i-1,i-1,(i-1==sel));
		}
	objDD.value = sel;
	}



function populateRoomsDDs(frmObj, roomsArray) {
	var numberOfChildren, childNum, numberOfAdults, roomArray, ddObj, objName;
	for (roomNumber in roomsArray) {
	  roomArray = roomsArray[roomNumber];
		
	  numberOfAdults = roomArray['numadults'];
		objName = 'room_' + roomNumber + '_numadults';
		eval("ddObj = frmObj." + objName);
		PopulateNumDD(ddObj, maxadults, numberOfAdults);
		
		objName = 'room_' + roomNumber + '_type';
		eval("ddObj = frmObj." + objName);
		PopulateTypeDD(ddObj, numberOfAdults, roomArray['type']);
		
		numberOfChildren = roomArray['numchildren'];
		objName = 'room_' + roomNumber + '_numchildren';
		eval("ddObj = frmObj." + objName);
		PopulateNumDD(ddObj, maxchildren+1, numberOfChildren, 0);
		for (childNum=0;childNum<numberOfChildren;childNum++) {
			objName = 'room_' + roomNumber + '_childage_' + childNum;
			eval("ddObj = frmObj." + objName);
			
			selAge = (roomArray['childages']) ? roomArray['childages'][childNum] : null;
			PopulateChildAgeDD(ddObj, selAge);
			//PopulateChildAgeDD(ddObj, roomArray['childages'][childNum]);
			}

		}
	}
	


function getstayLen(frm) {
  var checkoutYear = getYr(frm,'O');
	checkout_Object.setPicked(checkoutYear, frm.checkoutMonth.value, frm.checkoutDay.value);
	
	var chkIn = new Date(frm.checkinYear.value, frm.checkinMonth.value, frm.checkinDay.value);
	var chkOut = new Date(checkoutYear, frm.checkoutMonth.value, frm.checkoutDay.value);
	
	var diff = new Date(chkOut.getTime() - chkIn.getTime());
	frm.duration.value = Math.round(diff.getTime()/oneDay);
  frm.checkoutYear.value = checkoutYear;
	return frm.duration.value;
}



function updateCheckOut(frm, stayLen) {
	var now = new Date();
	var year = now.getFullYear();
	var month = now.getMonth();
	var day = now.getDate();
	
	var chkInM = frm.checkinMonth.value;
	var chkInD = frm.checkinDay.value;
	var chkInY = getYr(frm,'I');
	if (frm.checkinYear.value != chkInY)
	{
		frm.checkinYear.value = chkInY;
		checkin_Object.setPicked(frm.checkinYear.value, frm.checkinMonth.value, frm.checkinDay.value)
	}
	
	var chkIn = new Date(chkInY, chkInM, chkInD);
	initCheckOut(frm, chkIn, stayLen);
	checkout_Object.setPicked(frm.checkoutYear.value, frm.checkoutMonth.value, frm.checkoutDay.value);
}



function initCheckOut(frm, chkIn, stayLen) {
/* frm : form object
   chkIn : Date object
	 stayLen : integer */
// this assignment has problems when it comes to daylight savings times
//	var chkOut = new Date(chkIn.getTime() + stayLen*oneDay);

// this one seems to be fine - eg December 42nd 2009 = January 11th 2010
	var chkOut = new Date(chkIn.getFullYear(), chkIn.getMonth(), Number(stayLen) + chkIn.getDate());
	
	frm.checkoutYear.value = chkOut.getFullYear();
	frm.checkoutMonth.value = chkOut.getMonth();
	PopulateDay(frm.checkoutMonth, frm.checkoutDay, frm.checkoutYear.value);
	frm.checkoutDay.value = chkOut.getDate();
}



function createChildAgeDDs(index) {
  var childCount = roomsArray[index]['numchildren'];
	if (childCount > 0) {
	  var selHtml = '';
		for (childNum=0;childNum<childCount;childNum++) {
			var objName = 'room_' + String(index) + '_childage_' + String(childNum);
		  selHtml += '<div class="form_seg" style="border:none"><div class="form_seg_label">Child Age: </div>' +
			           '<div class="form_seg_item"><select name="' + objName +
								 '" onChange="roomsArray[' + String(index) +
								 '][\'childages\'][' + childNum + ']=this.value;"></select></div></div>';
			}
		return selHtml;
		}
	else {
		return '';
		}
	}



function createTypeDD(index) {
  var adultCount = roomsArray[index]['numadults'];
	var selHtml = (adultCount>2) ? '' :
								'<div class="form_seg"><div class="form_seg_label">Room Type:&nbsp;</div>' +
								'<div class="form_seg_item" style="float:right;"><select name="room_' + String(index) +
								'_type" onChange="roomsArray[' + String(index) +
								'][\'type\']=this.value;"></select></div></div>';
	return selHtml;
	}



function getRoomHTML(index) {
// header row if more than one room
  var htmlStr = '<div class="form_seg_block_label" style="font-weight:bold;margin-top:5px;">';
	if (roomsArray.length > 1)
	{
		htmlStr += 'Room ' + (index+1);
	}
	htmlStr += '</div>';
	
// #adults and roomtype row
  htmlStr += '<div class="form_seg"><div class="form_seg_label">Number of Adults</div>' +
	           '<div class="form_seg_item" style="float:right;"><select name="room_' +
	           String(index) + '_numadults" onChange="roomsArray[' +
						 String(index) + '][\'numadults\']=this.value;' +
						 'formRooms(this.form,\'roomDetail\',roomsArray,roomsArray.length);return true;">' +
						 '</select></div></div>';
  htmlStr += createTypeDD(index);

// #kids and child ages row
  htmlStr += '<div class="form_seg"><div class="form_seg_label">Number of Children</div>' +
	           '<div class="form_seg_item" style="float:right;"><select name="room_' +
	           String(index) + '_numchildren" onChange="roomsArray[' +
						 String(index) + '][\'numchildren\']=this.value;' +
						 'formRooms(this.form,\'roomDetail\',roomsArray,roomsArray.length);return true;">' +
						 '</select></div></div>';
  htmlStr += createChildAgeDDs(index);
	return htmlStr;
	}



function formRoomsHtml(numRooms) {
	var html = '';
  var existingRooms = roomsArray.length;
	if (numRooms < existingRooms) {
	  deleteRoom(roomsArray, (existingRooms-numRooms));
		}
	else if (numRooms > existingRooms) {
	  addNewRoom(roomsArray, (numRooms-existingRooms));
		}
	var i=0;
	while (i<numRooms) {
	  html += getRoomHTML(i);
		i++;
		}
	return html;
	}


function createRoom(numAdults, roomType, numKids) {

	var room = new Array();
	if (createRoom.arguments.length == 0) {
		numAdults = default_numadults;
		roomType = roomtype_options[default_numadults][0];
		numKids = default_numchildren;
	}

	room['numadults'] = numAdults;
	room['type'] = roomType;
	room['numchildren'] = numKids;
	room['childages'] = new Array();

	return room;

	}



/*
function createRoom() {
	var room = new Array();
	room['numadults'] = default_numadults;
	room['numchildren'] = default_numchildren;
	room['type'] = roomtype_options[default_numadults][0];
	room['childages'] = new Array();
	return room;
	}
*/


function addNewRoom(roomsArr) {
  var i = (arguments.length>1) ? arguments[1] : 1;
	while (i>0) {
		var numRooms = roomsArr.length;
		roomsArr[numRooms] = createRoom();
		i--;
		}
	return roomsArr;
	}



function deleteRoom(roomsArr) {
  var i = (arguments.length>1) ? arguments[1] : 1;
	while (i>0) {
		var numRooms = roomsArr.length;
		roomsArr[numRooms-1] = null;
		roomsArr.length--;
		i--;
    }
	return roomsArr;
	}



function initRooms(roomsArr) {
  var numRooms = roomsArr.length;
	for (var i=0;i<numRooms;i++) {
		roomsArr[i] = createRoom();
		}
	return roomsArr;
	}



function initForm(frm, divName, yrNum, moNum, dayNum, roomArr) {
	if (document.forms.length > 0) {
		var now = new Date;
		if (arguments.length < 3) {
			var chkIn = new Date(now.getTime() + 14*oneDay); // default checkIn to 2 weeks from now
		}
		else {
			var chkIn = new Date(yrNum, moNum, dayNum);
		}

		frm.checkinYear.value = chkIn.getFullYear();
		frm.checkinMonth.value = chkIn.getMonth();
		PopulateDay(frm.checkinMonth, frm.checkinDay, frm.checkinYear.value);
		frm.checkinDay.value = chkIn.getDate();
		checkin_Object.setPicked(frm.checkinYear.value, frm.checkinMonth.value, frm.checkinDay.value);
		
		frm.duration.value = stayLen;
		initCheckOut(frm, chkIn, stayLen);
		checkout_Object.setPicked(frm.checkoutYear.value, frm.checkoutMonth.value, frm.checkoutDay.value);
		
		if (arguments.length < 6) {
			var numRooms = default_numrooms;
			var roomArr = new Array(numRooms);
			roomsArray = initRooms(roomArr);
		}
		else {
			var numRooms = roomArr.length;
		}
		PopulateNumDD(frm.numrooms, maxrooms, numRooms, 1);
		formRooms(frm, divName, roomArr, numRooms);
		frm.numrooms[frm.numrooms.options.length] = new Option((maxrooms+1) + "+", 0);
	}
}



function formRooms(frmObj, divName, roomsArr, numRooms) {
	changeHtmlContent(divName,formRoomsHtml(numRooms));
	populateRoomsDDs(frmObj, roomsArr);
	return true;
}



function postHTTPdata(url) 
{
	var data = (arguments.length > 1) ? arguments[1] : null;
	// branch for native XMLHttpRequest object
	if (window.XMLHttpRequest)
	{
		req = new XMLHttpRequest();
	// branch for IE/Windows ActiveX version
	}
	else if (window.ActiveXObject)
	{
		try
		{
				req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e)
			{
				try
				{
						req = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) { return true; }
			}
	}
	if (req)
	{
		req.open('POST', url, true);
		req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		req.send(data);
	}
	return true;
}



function validateForm(frmObj)
{
	var errArr = new Array();
	var Today = new Date();
	if (checkin_Object.picked.date < Today)
	{
		errArr[errArr.length] = "You must choose a check-in date in the future!";
	}
	if ((frmObj.duration.value < 1) || (frmObj.duration.value > 21))
	{
		errArr[errArr.length] = "Your stay length can be from 1 night up to a maximum of 21 nights";
	}
	var objPrefix = '';
	var numKids = false;
	var testVal = 0;
	var kidAgeObjName = '';
	for (var i=0;i<frmObj.numrooms.value;i++)
	{
		objPrefix = 'room_' + i + '_';
		eval ('numKids = frmObj.' + objPrefix + 'numchildren.value;');
		if (numKids > 0)
		{
			for (j=0;j<numKids;j++)
			{
				eval ('testVal = frmObj.' + objPrefix + 'childage_' + j + '.value;');
				if (!testVal || testVal==null || testVal=='null')
				{
					errArr[errArr.length] = "Please specify an age for child " + (j+1) + " in room " + (i+1);
				}
			}
		}
	}
	if (errArr.length > 0)
	{
		var errString = '';
		for (i in errArr)
		{
			errString += errArr[i] + "\n";
		}
		var pronounPart = (errArr.length > 1) ? 'these fields' : 'this field';
		errString += "\nPlease amend " + pronounPart +  " and try submitting your request again";
	  alert (errString);
		formValidated = false;
		return false;
	}
	else
	{
		if (frmObj.numrooms.value == 0)
		{
		/* ----------------------------------------------------
				 CHANGE THIS TO GO TO A *SPECIAL* FORM FOR GROUPS
			 ---------------------------------------------------- */
			frmObj.action = '/request/savegroupsession.php';
		}
		/*
		Pretty sure we no longer use thes or even if it ever worked... GD 7/4/09
		postHTTPdata('/request/logsearchsubmit.php',
								 'checksum=' + frmObj.checksum.value + '&formpage=' + frmObj.formpage.value);
		*/
		var qStr = '';
		var concatChar = '';
		var argMatch = /^(formpage|checksum|checkin(Month|Day|Year)|duration|numrooms|room_\d_\w+)$/;
		for (i=0; i<frmObj.elements.length; i++)
		{
			if (argMatch.test(frmObj.elements[i].name))
			{
				qStr += concatChar + frmObj.elements[i].name + '=' + frmObj.elements[i].value;
				concatChar = '&';
			}
		}
		document.cookie = 'savedForm=' + encodeURI(qStr);
		frmObj.day.value = frmObj.checkinDay.value;
		frmObj.month.value = (Number(frmObj.checkinMonth.value)+1);
		frmObj.year.value = frmObj.checkinYear.value;
		return true;
	}
	}


//-->


