<!--
// Functions for initialising and updating the room request form

var stayLen=4;
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 weekday=new Array(7)
weekday[0]="Sunday"
weekday[1]="Monday"
weekday[2]="Tuesday"
weekday[3]="Wednesday"
weekday[4]="Thursday"
weekday[5]="Friday"
weekday[6]="Saturday"


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");
roomtype_options[2] = new Array("TW");
roomtype_options[3] = new Array("TR");
roomtype_options[4] = new Array("QD");

var roomtype_option_labels = new Array();
roomtype_option_labels['1'] = "Single";
roomtype_option_labels['2'] = "Twin/Double";
roomtype_option_labels['3'] = "Triple";
roomtype_option_labels['4'] = "Quad";

function changeHtmlContent(elementid,content){
  if (document.all) {
	  document.getElementById(elementid).innerHTML = content;
		}
  else if (document.getElementById){
    rng = document.createRange();
    el = document.getElementById(elementid);
    rng.setStartBefore(el);
    htmlFrag = rng.createContextualFragment(content);
    while (el.hasChildNodes())
      el.removeChild(el.lastChild);
    el.appendChild(htmlFrag);
    }
  }

function makeArray()    {
    this[0] = makeArray.arguments.length;
    for (i = 0; i<makeArray.arguments.length; i++) {
        this[i+1] = makeArray.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 PopulateNumDD(objDD, numOpts, sel) {
  var n = (arguments.length>3) ? arguments[3] : 1;
  objDD.options.length = numOpts;
	for (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>5) return false;
  objDD.value=roomtype_option_labels[numAdults];
  /*
	numOpts = roomtype_options[numAdults].length;
  objDD.options.length = numOpts;
	for (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;
		}
		
		*/
	}



function PopulateChildAgeDD(objDD, sel) {
  var numOpts = maxchildage+2;
  objDD.options.length = numOpts;
	objDD[0] = new Option('-',null,(sel==''));
	for (i=1; i<numOpts; i++) {
		objDD[i] = new Option(i-1,i-1,(i-1==sel));
		}
	objDD.value = sel;
	}



function populateRoomsDDs(frmObj, roomsArray) {
	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);
			PopulateChildAgeDD(ddObj, roomArray['childages'][childNum]);
			}

		}
	}

function getQuery() {
  var queryArr = new Object();
  var query = location.search.substring(1);
  var params = query.split("&");
  for(var i = 0; i < params.length; i++) {
    var pos = params[i].indexOf('=');
    if (pos == -1) continue;
    var paramName = params[i].substring(0,pos);
    var value = params[i].substring(pos+1);
    queryArr[paramName] = unescape(value);
    }
  return queryArr;
  }

function swapHotels(listObj1, listObj2) {
  if ((listObj1.value != noHotel) && (listObj2.value != noHotel)) {
    var swapVal = listObj1.value;
    listObj1.value = listObj2.value;
    listObj2.value = swapVal;
	}
  }

var queryGrabbed = false;
function swapQuery(formObj, listName, listNo) {
  var listObjName = listName + String(listNo);
  var queryParams = getQuery();
  if (queryParams.hotel && !queryGrabbed) {
    var queryString = new String(queryParams.hotel);
    while (queryString.indexOf('+') != -1) {
      queryString = queryString.replace('+', ' ');
      }
	var duplicate = false;
	for (i=1; i<=listmax; i++) {
	  checkValName = listName + String(i);
	  if (formObj.elements[checkValName].value == queryString) duplicate = true;
	  }
	if (!duplicate) formObj.elements[listObjName].value = queryString;
	else deleteHotel(formObj, listName, listNo);
	queryGrabbed = true;
	}
  else {
    deleteHotel(formObj, listName, listNo);
	}
  }
  
function deleteHotel(formObj, listName, listNo) {
  var listObjName = listName + String(listNo);
  if (listNo == listmax ) {
	formObj.elements[listObjName].value = noHotel;
    }
  else {
    var nextObjName = listName + String(listNo+1);
	formObj.elements[listObjName].value = formObj.elements[nextObjName].value;
	deleteHotel(formObj, listName, (listNo+1));
    }
  }


function checkRadio(radioObj, radioVal) {
  if (standardVal==radioVal) {
    radioObj.checked = false;
	standardVal = 0;
	}
  else standardVal = radioVal;
  }


function formSave() {
  if (formSave.arguments.length>0) {
    document.requestForm.fwdpage.value=formSave.arguments[0];
	}
  document.requestForm.formAction.value='save_data'; // information only
  document.requestForm.submit();
  }
  
  
  
function updateCheckOut(frm, stayLen) {
	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)

	dayofweek=document.getElementById('checkinText');
	dayofweek.innerHTML=weekday[chkIn.getDay()];
	
}

	

  
function getYr(frm, in_out) {
	var now = new Date;
	var year = now.getFullYear();
	var month = now.getMonth();
	var 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}
}  

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 (intCounter=0;intCounter<days;intCounter++)
	{
	 objDay[intCounter] = new Option
			(intCounter+1,intCounter+1,false,false);
	}

	if (daySel > days) daySel = days;
	objDay.value = daySel;
	}
  
  
function createChildAgeDDs(index) {
  var childCount = roomsArray[index]['numchildren'];
	if (childCount > 0) {
	  var selHtml = '<div class="form_seg" style="width:200px;float:left" >'+
	  '<div class="form_sub_seg">Child Age:  </div>';
	  	  selHtml += '<div class="form_sub_seg">';
		for (childNum=0;childNum<childCount;childNum++) {
			var objName = 'room_' + String(index) + '_childage_' + String(childNum);
		  selHtml += '<select name="' + objName +
								 '" onChange="roomsArray[' + String(index) +
								 '][\'childages\'][' + childNum + ']=this.value;"></select>';
			}
			selHtml +='</div></div>';
		return selHtml;
		}
	else {
		return '<div class="form_seg" style="width:200px;float:left;">&nbsp;</div>';
		}
	}



function createTypeDD(index) {
  var adultCount = roomsArray[index]['numadults'];
	var selHtml = (adultCount>5) ? '' :'<div class="form_seg" style="float:left;width:200px">'+
								'<div class="form_sub_seg">Room Type:&nbsp;</div>' +
								'<div class="form_sub_seg"> <input name="room_' + String(index) +
								'_type" onChange="roomsArray[' + String(index) +
								'][\'type\']=this.value;" type="text" readonly="readonly" size="10"></input></div></div>';
	return selHtml;
	}



function getRoomHTML(index) {
// header row if more than one room
  var htmlStr = '';
	if (roomsArray.length>1) {
		htmlStr += '<div class="form_seg" style="font-weight: bold;">Room ' + (index+1) + '</div>';
	}
	
// #adults and roomtype row
  htmlStr += '<div class="form_seg" style="width:200px;float:left;">'+
  			   '<div class="form_sub_seg">Number of Adults </div>' +
	           '<div class="form_sub_seg"><select name="room_' +
	           String(index) + '_numadults" onChange="roomsArray[' +
						 String(index) + '][\'numadults\']=this.value;' +
			     	     'checkMaxPers(this.form,'+String(index)+',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" style="width:200px;float:left">'+
			  '<div class="form_sub_seg">Number of Children </div>' +
	           '<div class="form_sub_seg"><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);
  htmlStr +='<div id="form_seg_bottom"></div>';
	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 createNewRoom(adults,type,children,ages)
{
	var room = new Array();
	room['numadults'] = adults;
	room['numchildren'] = children;
	room['type'] = type;
	if (ages)
	{
	room['childages'] = ages;	
	}
	else
	{
	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 (i=0;i<numRooms;i++) {
		roomsArr[i] = createRoom();
		}
	return roomsArr;
	}

  function formRooms(frmObj, divName, roomsArr, numRooms) {
	groupTextRow=document.getElementById("groupText");
	groupControlsRow=document.getElementById("groupControls");
	changeHtmlContent(divName,formRoomsHtml(numRooms));
if (numRooms==0)
	{
		if (navigator.appName=="Microsoft Internet Explorer")
		{
			groupTextRow.style.display="inline";
			groupControlsRow.style.display="inline";
			
		}
		else
		{
			groupTextRow.style.display="table-row";
			groupControlsRow.style.display="table-row";
		}
	// set the request type
	frmObj.requestType.value="group";
	}
	else
	{

	populateRoomsDDs(frmObj, roomsArr);
	
	groupTextRow.style.display="none";
	groupControlsRow.style.display="none";
	frmObj.requestType.value="normal";
	}
	return true;
}
  
  
function initCheckOut(frm, chkIn, stayLen) {
/* frm : form object
   chkIn : Date object
	 stayLen : integer */
	//var chkOut = new Date(chkIn.getTime() + stayLen*oneDay);
	var chkOut = new Date(Date.UTC(chkIn.getFullYear(), chkIn.getMonth(), chkIn.getDate()) + stayLen*oneDay);

	frm.checkoutYear.value = chkOut.getUTCFullYear();
	frm.checkoutMonth.value = chkOut.getUTCMonth();
	PopulateDay(frm.checkoutMonth, frm.checkoutDay, frm.checkoutYear.value);
	frm.checkoutDay.value = chkOut.getUTCDate();
	checkoutDay=document.getElementById('checkoutText');
	checkoutDay.innerHTML=weekday[chkOut.getDay()];
	
}  
  
  
function getstayLen(frm) {

	var checkoutYear = getYr(frm,'O');
    frm.checkoutYear.value=checkoutYear;

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.stayLength.value = Math.round(diff.getTime()/oneDay);
	updateDayOfWeek(frm);
	return frm.stayLength.value;
	
}

function updateDayOfWeek(frm)
{


	var checkoutYear = getYr(frm,'O');
	var chkIn = new Date(frm.checkinYear.value, frm.checkinMonth.value, frm.checkinDay.value);
	var chkOut = new Date(frm.checkoutYear.value, frm.checkoutMonth.value, frm.checkoutDay.value);
	checkoutDay=document.getElementById('checkoutText');
	checkoutDay.innerHTML=weekday[chkOut.getDay()];
	dayofweek=document.getElementById('checkinText');
	dayofweek.innerHTML=weekday[chkIn.getDay()];

}

function initForm(frm, divName, yrNum, moNum, dayNum, roomArr) {

	if (true) {

		var now = new Date;
		if (initForm.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.stayLength.value = stayLen;
		initCheckOut(frm, chkIn, stayLen);
		checkout_Object.setPicked(frm.checkoutYear.value, frm.checkoutMonth.value, frm.checkoutDay.value)

		updateDayOfWeek(frm);

		if (initForm.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,false,(numRooms==0));
		frm.numrooms.selectedIndex=(numRooms==0)?frm.numrooms.options.length-1:numRooms-1;
		}
	
}  




function validateForm(frmObj) {
	var errArr = new Array();
	var Today = new Date();
	Today = new Date(Today.getFullYear(), Today.getMonth(), Today.getDate());
	if (checkin_Object.picked.date < Today) {
		errArr[errArr.length] = "You must choose a check-in date in the future!";
	}
	if ((frmObj.stayLength.value < 1) || (frmObj.stayLength.value > 21)) {
		errArr[errArr.length] = "Your stay length can be from 1 night up to a maximum of 21 nights";
	}
	// check that a number of rooms has veen selected
	if ((frmObj.requestType.value=='group') && (frmObj.totalRooms.value<1)) {
		errArr[errArr.length] = "Please indicate how many rooms you would like";
	}
	// make name a required field
	if (frmObj.name.value.length==0) {
		errArr[errArr.length] = "Please enter your name";
	}
	// make email a required field
	if (frmObj.email.value.length==0) {
		errArr[errArr.length] = "Please enter your email address";
	}
	
	var reg = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i;
	if (!frmObj.email.value.match(reg))
	{
		errArr[errArr.length] = "The email you have entered does not appear to be valid.";
	}
	
	
	var objPrefix = '';
	var numKids = false;
	var testVal = 0;
	var kidAgeObjName = '';
	for (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);
		return false;
	}
	else {
		if (frmObj.numrooms.value == 0) {
		/* ----------------------------------------------------
				 Display the hidden group booking text
			 ---------------------------------------------------- */
				//alert("please fill in details in box below");
		}
		frmObj.day.value = frmObj.checkinDay.value;
		frmObj.month.value = (Number(frmObj.checkinMonth.value)+1);
		frmObj.year.value = frmObj.checkinYear.value;
		//var qStr = 'cs=' + frmObj.checksum.value + '&url=' + frmObj.formpage.value;
		//loadHTTPDoc('/request/logsearchsubmit.php?' + qStr);
		return true;
	}
	}
	
	function submitForm(frm)
	{
		if (validateForm(frm))
		{
		frm.submit();	
		}
		
	}
	
	function checkMaxPers(form,index,numberOfAdults)
	{
		
		// used to prevent users requesting more than 4 people in one room
		switch (numberOfAdults) 
		{
		case '3':
		mxchildren=1;
		break;
		case '4':
		mxchildren=0;
		break;
		default:
		mxchildren=2;
		}

		if (roomsArray[index]['numchildren']>mxchildren)
		{
		roomsArray[index]['numchildren']=mxchildren;	
		}
		
	}
//-->
