function init() 
{
	if (typeof(populateDates) != "undefined") 
		{  
			populateDates() //in/out dates
		}
}

window.onload = init

var objCookie

//Instantialise and initialise cookie object
function initCookie()
{
	objCookie = new cookieVal("", "", "", "", "")

	var cookieArray = URLDecode(document.cookie).split("|")

	for (var i=0; i<cookieArray.length; i++)
		{
			if (cookieArray[i] == "SearchEng") 
				{
					objCookie.country = cookieArray[i+2]
					objCookie.city = cookieArray[i+3]
					objCookie.suburb = cookieArray[i+4]
					objCookie.inDate = cookieArray[i+5]
					objCookie.outDate = cookieArray[i+6]

					break
				}
		}	
}

//Populate and set select boxes
function populateDates()
{
	//Instantialise and initialise cookie object
	initCookie()

	//Populate dates
	populateDate('inDate', new Date(curYear, curMonth, curDay - 1))  //start from yesterday - to consider the whole world times
	populateDate('outDate', new Date(curYear, curMonth, curDay))

	//Set dafaults
	setVal('inDate', RemoveDateZeros(objCookie.inDate))
	setVal('outDate', RemoveDateZeros(objCookie.outDate))      
	setWkd()
}

//Populate date select box
function populateDate(ctl, startDate)
{
	var optDate = new Date(startDate)
	//clear select box
	ctl.length = 0
	
	if (bookPeriod > 0 && bookPeriod < 11 && ctl.name == "outDate") {
		bookPeriod = bookPeriod + bookPeriod
	} 
	else if (bookPeriod > 10 && bookPeriod < 21 && ctl.name == "outDate") {
		bookPeriod = 21
	}
	
	if (CheckOutPeriod > 0 && CheckOutPeriod < 21 && ctl.name == "outDate") {
		bookPeriod = CheckOutPeriod;
	} 

	//Populate select box
	for (var i=0; i<=bookPeriod; i++) {
		getObject(ctl)[i] = new Option(formatDateText(optDate), formatDateVal(optDate))
		optDate.setDate(optDate.getDate() + 1)
	}

	if(ctl=='inDate' || ctl=='outDate')
		getObject(ctl).selectedIndex = 1
}

function formatDateText(date)
{
	var dateVal

	dateVal = date.getDate()
	if (dateVal < 10) dateVal = "0" + dateVal

	var arrMask = dateMask.split("|")

	var sTmpDate = dateMask.replace(/y/, date.getFullYear())
	sTmpDate = sTmpDate.replace(/m/, monthArray[date.getMonth()])
	sTmpDate = sTmpDate.replace(/d/, dateVal)
	sTmpDate = sTmpDate.replace(/\|/g, arrMask[3])

	if (arrMask[3] != "")
		sTmpDate = sTmpDate.substring(0, sTmpDate.length - 2)

	return sTmpDate
}

function formatDateVal(date)
{
	return date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate()
}

//Extract value from querystring for the passed name
function GetQSVal(qsName) {
	var qsPair
	var qsVal = ""
	var qString = location.search.substr(1)
	var arrNameVal = qString.split("&")

	for (var i in arrNameVal) {
		qsPair = arrNameVal[i].split("=")

		if (URLDecode(qsPair[0]) == qsName) {
			qsVal = URLDecode(qsPair[1])
			break
		}
	}

	return qsVal
}

//UnEncode url-encoded string
function URLDecode(urlStr) {
	return unescape(urlStr.replace(/\+/g, " "))
}

//Cookie values object constructor
function cookieVal(country, city, suburb, inDate, outDate) {
	this.country = country
	this.city = city
	this.suburb = suburb
	this.inDate = inDate
	this.outDate = outDate
}

//Set select box value
function setVal(ctl, newVal) {
	for (var i=0; i<getObject(ctl).length; i++) {
		if (getObject(ctl)[i].value == newVal) {
			getObject(ctl)[i].selected = true
			getObject(ctl).selectedIndex = i
			break
		}
	}
}

//Set days of week and length of stay
function setWkd()
{
	if (!getObject('inWkd')) return
	
	var checkinDate = getDateFromCtl('inDate')
	var checkoutDate = getDateFromCtl('outDate')

	//set days of week
	getObject('inWkd').innerHTML = "(" + wkdArray[checkinDate.getDay()] + ")"
	getObject('outWkd').innerHTML = "(" + wkdArray[checkoutDate.getDay()] + ")"

	
	//Set length of stay
	getObject('lenofstay').innerHTML =  Math.round((checkoutDate - checkinDate) / 86400000)
}

//Get date from the date select box
function getDateFromCtl(ctl)
{
	var arrDate = getVal(ctl).split("-")
	return new Date(arrDate[0], arrDate[1] - 1, arrDate[2])
}

//Remove leading zeros from canonically-formatted date elements
function RemoveDateZeros(dtStr)
{
	var dtArr = dtStr.split("-")
	return Number(dtArr[0]) + "-" + Number(dtArr[1]) + "-" + Number(dtArr[2])
}

//Get select box value
function getVal(ctl) 
{
	return  getObject(ctl).value
}

//Reset out date to (in date + 1) if out date <= in date
function resetOutDate()
{
	if (getObject('outDate').selectedIndex < getObject('inDate').selectedIndex) getObject('outDate').selectedIndex = getObject('inDate').selectedIndex
	DateChangeExtras()
}

//Reset in date to (out date - 1) if in date >= out date
function resetInDate()
{
	if (getObject('inDate').selectedIndex > getObject('outDate').selectedIndex) getObject('inDate').selectedIndex = getObject('outDate').selectedIndex
	DateChangeExtras()
}

//Extra work that needs to be done when a date is changed
function DateChangeExtras()
{
	//set weekdays and length of stay
	setWkd()
}

//Save selected dates and location to cookie
function setSelCookie(country, city, suburb, inDate, outDate)
{
	document.cookie = escape("|SearchEng|") + "=" + escape("|"
		+ country + "|" + city + "|" + suburb + "|"
		+ inDate + "|" + outDate + "|")
		+ ";path=/"
}

//Reload page with new in/out dates
function changeDates()
{

	//debugger;
	//To check 25 nights of booking.
	var arrinDate = getVal('inDate').split("-")
	var arroutDate = getVal('outDate').split("-")
	
	var checkin = new Date(arrinDate[0], arrinDate[1] - 1, arrinDate[2])
	var checkout = new Date(arroutDate[0], arroutDate[1] - 1, arroutDate[2])
	
	if (Math.round((checkout - checkin) / 86400000) > 25)
	{
		if (typeof (StayTooLong_Msg) == "undefined")
			StayTooLong_Msg =GetTagValue("SB_StayTooLong");

		alert(StayTooLong_Msg)
		getObject('outDate').focus()
		return
	}

	//Save new dates to the cookie
	setSelCookie(objCookie.country, objCookie.city, objCookie.suburb, getVal('inDate'), getVal('outDate'))

	//Get new querystring
	var qString = location.search.substr(1)
	
	qString = setQStringName(qString, "inDate", new Array(getVal('inDate')))
	qString = setQStringName(qString, "outDate", new Array(getVal('outDate')))

	//Do some extra work if dates are changed on the search results page

	if (getObject('showAll')) {
		//Set page to 1
		qString = setQStringName(qString, "page", new Array("1"))
		
		//set currenctly selected search option
		//for (var i = 0; 1 < getObject('showAll').length; i++) {
			if (getObject('showAll').checked) {
				var showAll = getObject('showAll').value
				//break
			}

			if (getObject('showAvail').checked) {
				var showAll = getObject('showAvail').value
				//break
			}
		//}

		qString = setQStringName(qString, "ShowAll", new Array(showAll))
	}
	

	if (getObject('SearchHotel')) {
		
		//set currenctly selected Hotel search option
			if (getObject('SearchHotel').checked) {
				
				var SearchHotel = getObject('SearchHotel').value
			}

			if (getObject('SearchApartments').checked) {
				var SearchHotel = getObject('SearchApartments').value
			}
		//}

		qString = setQStringName(qString, "SearchHotel", new Array(SearchHotel))
	}

	if (getObject('SearchHoteloption'))
	{
			var varSearchHOption
			var varTotalSearchCriteria
			varTotalSearchCriteria = 0
			var varLoopSearch
			var vardivID
			var varObjID


			if (getObject('TotalSearchType'))
			{
				varTotalSearchCriteria = getObject('TotalSearchType').value;
				varSearchHOption = ""
				for (varLoopSearch=1; varLoopSearch <= varTotalSearchCriteria; varLoopSearch++)
				{
					vardivID = 'SearchProp' + (varLoopSearch + 1)
					varObjID = 'PropBox' + (varLoopSearch + 1)
					if (getObject(vardivID).checked && getObject(varObjID).style.display=="block") 
					{
						varSearchHOption = varSearchHOption + '1'
					}
					else{
						varSearchHOption = varSearchHOption + '0'
					}
				}
			}

			if (varSearchHOption.indexOf("1") < 0 && document.getElementById("hideAccomType").style.display=="block") {
			
				if (typeof (ErrorAccomType) == "undefined")
					ErrorAccomType =GetTagValue("SB_ErrorAccomType");
				
				alert(ErrorAccomType)
				return
			}
			
			qString = setQStringName(qString, "SearchHOption", new Array(varSearchHOption))
	}

	if (getObject('star5'))
	{
			
		//set currenctly selected 5 Star rating
			if (getObject('star5').checked) 
			{
				var Star5 = 'on'
				qString = setQStringName(qString, "star5", new Array(Star5))
			}
			else
			{
				qString = qString.replace('&star5=on','')
				qString = qString.replace('&star5=true','')
				var Star5 = 'false'
				qString = setQStringName(qString, "star5", new Array(Star5))
			}
	}

	if (getObject('star4'))
	{
			
		//set currenctly selected 4 Star rating
			if (getObject('star4').checked) 
			{
				var Star4  = 'on'
				qString = setQStringName(qString, "star4", new Array(Star4))
			}
			else
			{
				qString = qString.replace('&star4=on','')
				var Star4 = 'false'
				qString = setQStringName(qString, "Star4", new Array(Star4))
			}
	}

	if (getObject('star3'))
	{
			
		//set currenctly selected 3 Star rating
			if (getObject('star3').checked) 
			{
				var Star3 = 'on'
				qString = setQStringName(qString, "star3", new Array(Star3))
			}
			else
			{
				qString = qString.replace('&star3=on','')
				var Star3 = 'false'
				qString = setQStringName(qString, "Star3", new Array(Star3))

			}
	}
	
	if (getObject('price1'))
	{
		    if (getObject('price1').checked) 
			{
				var price1 = 'on'
				qString = setQStringName(qString, "price1", new Array(price1))
			}
			else
			{
				qString = qString.replace('&price1=on','')
				var price1 = 'false'
				qString = setQStringName(qString, "price1", new Array(price1))
			}
	}
	
	if (getObject('price2'))
	{
			if (getObject('price2').checked) 
			{
				var price2 = 'on'
				qString = setQStringName(qString, "price2", new Array(price2))
			}
			else
			{
				qString = qString.replace('&price2=on','')
				var price2 = 'false'
				qString = setQStringName(qString, "price2", new Array(price2))
			}
	}
	
	if (getObject('price3'))
	{
			if (getObject('price3').checked) 
			{
				var price3 = 'on'
				qString = setQStringName(qString, "price3", new Array(price3))
			}
			else
			{
				qString = qString.replace('&price3=on','')
				var price3 = 'false'
				qString = setQStringName(qString, "price3", new Array(price3))
			}
	}
	
	if (getObject('price4'))
	{
			if (getObject('price4').checked) 
			{
				var price4 = 'on'
				qString = setQStringName(qString, "price4", new Array(price4))
			}
			else
			{
				qString = qString.replace('&price4=on','')
				var price4 = 'false'
				qString = setQStringName(qString, "price4", new Array(price4))
			}
	}
	
	if (getObject('price5'))
	{
			if (getObject('price5').checked) 
			{
				var price5 = 'on'
				qString = setQStringName(qString, "price5", new Array(price5))
			}
			else
			{
				qString = qString.replace('&price5=on','')
				var price5 = 'false'
				qString = setQStringName(qString, "price5", new Array(price5))
			}
	}

		
	//set Length of Stay
	var lenStay = Math.round((checkout - checkin) / 86400000) + '';
	qString = setQStringName(qString, 'lenStay', new Array(lenStay))
	
	//alert(qString)
	location = location.pathname + "?" + qString
}


//Replace or add a name/value pairs in url-encoded querystring
function setQStringName(qString, name, arrVal) {
	var i
	var qStringNew = ""

	if (qString != "") {
		var curName
		var arrNameVal = qString.split("&")

		for (i in arrNameVal) {
			curName = arrNameVal[i].split("=")[0]
			curName = URLDecode(curName)
			if (curName.toLowerCase() != name.toLowerCase()) qStringNew += "&" + arrNameVal[i]
		}
	}

	for (i in arrVal) {
		qStringNew += "&" + escape(name) + "=" + escape(arrVal[i])
	}

	return qStringNew.substr(1)
}


