addEvent(window, "load", addHotelEvents, false);
addEvent(window, "load", addCharterStep2Events, false);
addEvent(window, "load", addTravelCriteriaEvent, false);
addEvent(window, "load", addAddOnsEvents, false);
addEvent(window, "load", addTotalPriceEvent, false);
addEvent(window, "load", addPassengerDetailsEvents, false);
addEvent(window, "load", addPagingEvents, false);
addEvent(window, "load", addMyHolidayEvents, false);
addEvent(window, "load", addButtonMouseOverEvents, false);
addEvent(window, "load", addOnlineUpsalesEvents, false);
addEvent(window, "load", addValidateEvents, false);
addEvent(window, "load", addBookingStep1Events, false);
addEvent(window, "load", addCharterBookingStep4Events, false);
addEvent(window, "load", addCarRentalEvents, false);
addEvent(window, "load", addCarLayerEvents, false);

var oCarLayer;
var oCarLayerHeading;
var oCarLayerContent;
function addCarLayerEvents(){
	oCarLayer = document.getElementById("car-layer");
	oCarLayerHeading = document.getElementById("car-layer-heading-text");
	oCarLayerContent = document.getElementById("car-layer-content");
	if(oCarLayer){
		var oCloseLink = document.getElementById("car-layer-close-link");
		oCloseLink.onmousedown = function(){
			oCarLayer.className = "display-none";
		}		
		oBodyElmForIE = (bIsIE5)? document.body : document.documentElement;
	}
}
function addCarRentalEvents(){
	var arrAllHelpInfoLinks = getElementsByClassName(document, "a", "car-rental-link");
	for(var i=0; i<arrAllHelpInfoLinks.length; i++)	{
		arrAllHelpInfoLinks[i].onclick = function(oEvent){		
			var oEvent = (typeof oEvent != "undefined")? oEvent : event;
			oEvent.returnValue = false;
			if(oEvent.preventDefault){
				oEvent.preventDefault();
			}
			var intScrollTop = (window.pageYOffset)? document.documentElement.scrollTop : oBodyElmForIE.scrollTop;
			var topPos = ((document.documentElement.clientHeight - 700) / 2) + intScrollTop;
			displayCarRental(topPos, this, "660", "490", "10");		
		};		
	}
}
function displayCarRental(topPos, oElm, width, height, left){
	if(oCarLayer){
		var timeSelectedIndex = document.getElementById("TimeSelectedIndex");		
		oCarLayerHeading.innerHTML = strCarRentalHeading;
		oCarLayerContent.innerHTML = "<iframe src=\"" + 
									  "/BlueSites/Templates/ContentBlocks/Booking/DynamicContent/GetCarRentalInfo.aspx?index="+ timeSelectedIndex.value + 
									  "\" width=\"" + width + "\" height=\"" + height + "\" frameborder=\"0\" scrolling=\"no\" marginheight=\"0\"" + 
									  "marginwidth=\"0\"></iframe>";			
									  
		oCarLayerContent.style.padding = "0px;";				
		oCarLayer.style.top    = topPos + "px";
		oCarLayer.style.left   = left   + "px";
		oCarLayer.style.height = "auto";
		oCarLayer.style.width  = width  + "px";
		oCarLayer.className    = "display-block";		
	}
}

function addCharterStep2Events() {
	oPagingContainer = document.getElementById('book-holiday');	
	if (oPagingContainer) {
		var arrAllCharterLinks = oPagingContainer.getElementsByTagName("a");
		for (i =0; i < arrAllCharterLinks.length; i++) {
			oLink = arrAllCharterLinks[i];
			if (oLink.id.indexOf('price-') == 0) {
				oLink.onclick = function (oEvent) {
						var oEvent = (typeof oEvent != "undefined")? oEvent : event;
						oEvent.returnValue = false;
						if(oEvent.preventDefault) {
							oEvent.preventDefault();
						}
						showRoomInfo(oEvent, this);
					};
			}
			else if (oLink.id.indexOf('show-flights-') == 0) {
				oLink.onclick = function (oEvent) {
						var oEvent = (typeof oEvent != "undefined")? oEvent : event;
						oEvent.returnValue = false;
						if(oEvent.preventDefault) {
							oEvent.preventDefault();
						}
						showAvailableFlights(oEvent, this);
					};
			}
		}		
		var arrAllFlightInfoIcons = getElementsByClassName(document, "img", "flight-info-icon");
		for(var k=0; k<arrAllFlightInfoIcons.length; k++){
			arrAllFlightInfoIcons[k].onclick = function(oEvent){
				var oEvent = (typeof oEvent != "undefined")? oEvent : event;
				displayFlightInfo(oEvent, this);
			};
		}		
		var oLinkTotalMatchTrue = document.getElementById('link-total-match-true');
		if (oLinkTotalMatchTrue) {
			oLinkTotalMatchTrue.onclick = function (oEvent) {
						var oEvent = (typeof oEvent != "undefined")? oEvent : event;
						oEvent.returnValue = false;
						if(oEvent.preventDefault) oEvent.preventDefault();
						document.getElementById('totalMatch').value = 'false';
						document.forms[0].submit();
					};
		}		
		var oLinkTotalMatchFalse = document.getElementById('link-total-match-false');
		if (oLinkTotalMatchFalse) {
			oLinkTotalMatchFalse.onclick = function (oEvent) {
						var oEvent = (typeof oEvent != "undefined")? oEvent : event;
						oEvent.returnValue = false;
						if(oEvent.preventDefault) oEvent.preventDefault();
						document.getElementById('totalMatch').value = 'true';
						document.forms[0].submit();
					};
		}		
		var arrAllSelectSearchCriteria = getElementsByClassName(oPagingContainer, "select", "dropdown-search-criteria");
		for (var i = 0; i < arrAllSelectSearchCriteria.length; i++) {
			arrAllSelectSearchCriteria[i].onchange = function () {
				document.getElementById('updateSearchCriteria').value = 'true';
				__doPostBack(this.name.replace(/:/gi, '$'), '');
			}
		}
	}
}
function displayFlightInfo(oEvent, oElm){
	var trainHeading = document.getElementById("trainHeading");
	var heading = strFlightInfo;
	if(trainHeading)
		heading = trainHeading.value;
	
	var intHotelID = oElm.className.replace(/flight-info-icon flight-info-/g, "");		
	//var blueComfortFlights = document.getElementById('blue-comfort-flights-' + intHotelID).value;
	var blueComfortFlights = $("#blue-comfort-flights-" + intHotelID).val();
	var intFlightID = oElm.getAttribute("id").replace(/flight-info-/g, "");
	var content = showInfoLayer(heading, strRetrievingFlightInfo, 500);
	getXML(("/BlueSites/Templates/ContentBlocks/Booking/DynamicContent/GetFlightInfo.aspx?farecode=" + intFlightID + "&blueComfortFlights=" + blueComfortFlights), content);
}
function addRoomDescriptionEvents() {
	oTableRow = oGlobalTableRow;
	oTD = oGlobalTD;
	var arrAllCloseLinks = oTableRow.getElementsByTagName("a");
	for (i =0; i < arrAllCloseLinks.length; i++) {
		oLink = arrAllCloseLinks[i];
		if (oLink.id.indexOf('close-room-') == 0) {
			oLink.onclick = function (oEvent) {
					var oEvent = (typeof oEvent != "undefined")? oEvent : event;
					oEvent.returnValue = false;
					if(oEvent.preventDefault) {
						oEvent.preventDefault();
					}
					closeRoomInfo(oEvent, this, oTD);
				};
		}
	}
}
var oHotelAndFlightsContainer = null;
function addRoomInfoEvents(){
	if(oHotelAndFlightsContainer){
		var arrAllTables = getElementsByClassName(oHotelAndFlightsContainer, "table", "hotel-and-flights");
		if(arrAllTables.length > 0){			
			var oTable;
			var arrAllLinks;
			var oLink;
			for(var i=0; i<arrAllTables.length; i++){
				oTable = arrAllTables[i];
				arrAllLinks = oTable.getElementsByTagName("a");
				for(var j=0; j<arrAllLinks.length; j++){
					oLink = arrAllLinks[j];					
					if(oLink.className.search(/(previous|upcoming)-flights/i) == -1){
						oLink.onclick = function (oEvent){
							var oEvent = (typeof oEvent != "undefined")? oEvent : event;
							oEvent.returnValue = false;
							if(oEvent.preventDefault){
								oEvent.preventDefault();
							}
							showRoomInfo(oEvent, this);
						};
					}
				}
			}			
			var arrAllFlightInfoIcons = getElementsByClassName(oHotelAndFlightsContainer, "img", "flight-info-icon");
			for(var k=0; k<arrAllFlightInfoIcons.length; k++){
				arrAllFlightInfoIcons[k].onclick = function(oEvent){
					var oEvent = (typeof oEvent != "undefined")? oEvent : event;
					displayFlightInfo(oEvent, this);
				};
			}			
			var oElm;
			var arrPreviousFlightLinks = getElementsByClassName(oHotelAndFlightsContainer, "a", "previous-flights");
			if(arrPreviousFlightLinks.length > 0){
				arrPreviousFlightLinks[0].onclick = function (oEvent){
					var oEvent = (typeof oEvent != "undefined")? oEvent : event;
					oEvent.returnValue = false;
					if(oEvent.preventDefault){
						oEvent.preventDefault();
					}
					showAvailableFlights(oEvent, this.parentNode);
				};				
			}			
			var arrNextFlightLinks = getElementsByClassName(oHotelAndFlightsContainer, "a", "upcoming-flights");
			if(arrNextFlightLinks.length > 0){
				arrNextFlightLinks[0].onclick = function (oEvent){
					var oEvent = (typeof oEvent != "undefined")? oEvent : event;
					oEvent.returnValue = false;
					if(oEvent.preventDefault){
						oEvent.preventDefault();
					}
					showAvailableFlights(oEvent, this.parentNode);
				};
			}			
		}
		else{
			setTimeout("addRoomInfoEvents()", 500);
		}
	}
}

var oGlobalTableRow = null;
var oGlobalTD = null;
function showRoomInfo(oEvent, oElm) {
	var oTD = oElm.parentNode;
	oGlobalTD = oTD;
	var oTR = oElm.parentNode.parentNode;
	var oTable = oElm;
	while(oTable.nodeName.search(/table|tbody/i) == -1 && oTable.parentNode) {
		oTable = oTable.parentNode;
	}
	for (i = 0; i < oTR.childNodes.length; i++) {
		oTR.childNodes[i].className = (oTR.childNodes[i].className.indexOf('selected') != -1) ? oTR.childNodes[i].className.replace(/selected/i, "") : oTR.childNodes[i].className;
		if (oTR.childNodes[i].childNodes[0].className)
			oTR.childNodes[i].childNodes[0].className = (oTR.childNodes[i].childNodes[0].className.indexOf('selected') != -1) ? oTR.childNodes[i].childNodes[0].className.replace(/selected/i, "") : oTR.childNodes[i].childNodes[0].className;
	}
	oTD.className += ' selected';
	oTD.childNodes[0].className += 'selected';
	var intRoomAndFlightId = oElm.getAttribute("id").replace(/price-/, "");
	
	for (i = 1; i < oTable.childNodes.length; i++)
		oTable.childNodes[i].className = 'room-info hidden';
	var oInfoRow = document.getElementById('room-info-' + intRoomAndFlightId);
	if (oInfoRow) {
		oGlobalTableRow = oInfoRow;
		setRoomDescriptionRadioButton(oInfoRow);
		oInfoRow.className = 'room-info';
		return;
	}	
	var oTableRow = document.createElement("tr");
	oTableRow.className = 'room-info';
	oTableRow.setAttribute('id', 'room-info-' + intRoomAndFlightId);
	var oTableCell = document.createElement("td");
	oTableCell.className = 'room-choices-cell';
	oTableCell.setAttribute('colSpan', '5');
	var oBookingType = document.getElementById('bookingType');
	var sAjaxMessage = ((oBookingType) && (oBookingType.value == 'CharterFlight')) ? strRetrievingFlightInfo : strRetrievingHotelInfo;
	oTableCell.innerHTML = '<span class="retrieving-info">' + sAjaxMessage + '</span>';
	oTableRow.appendChild(oTableCell);
	strURLToGet = "/BlueSites/Templates/ContentBlocks/Booking/DynamicContent/GetRoomDescriptions.aspx?farecode=" + intRoomAndFlightId;
	//alert(strURLToGet);
	resetRoomDescriptionRadioButtons();
	getXML(strURLToGet, oTableCell, resultRoomInfo);
	oTable.appendChild(oTableRow);
	
	oGlobalTableRow = oTableRow;
}
function resultRoomInfo() {
	setTimeout("addRoomDescriptionEvents()", 500);
}
function resetRoomDescriptionRadioButtons() {
	var arrAllSelectedInputRadio = getElementsByClassName(document.getElementById("book-holiday"), "td", "room-description");
	for (var i = 0; i < arrAllSelectedInputRadio.length; i++) {
		var oInputRadio = arrAllSelectedInputRadio[i].getElementsByTagName("input")[0];
		oInputRadio.checked = false;
	}
}
function setRoomDescriptionRadioButton(oTr) {
	var oInputRadio = getElementsByClassName(oTr, "td", "room-description")[0].getElementsByTagName("input")[0];
	oInputRadio.checked = true;
}

function closeRoomInfo(oEvent, oElm, oTD) {
	var oTR = oElm.parentNode.parentNode;
	oTR.className = 'room-info hidden';
	oTRPrev = oTR.previousSibling;
	i = 0;
	while ((oTRPrev.className != '') && (oTRPrev.className.indexOf('alt-row') == -1) && (i < 5)) {
		oTRPrev = oTRPrev.previousSibling;
		i++;
	}
	for (i = 0; i < oTRPrev.childNodes.length; i++) {
		oTRPrev.childNodes[i].className = (oTRPrev.childNodes[i].className.indexOf('selected') != -1) ? oTRPrev.childNodes[i].className.replace(/selected/i, "") : oTRPrev.childNodes[i].className;
		if (oTRPrev.childNodes[i].childNodes[0] && oTRPrev.childNodes[i].childNodes[0].className) oTRPrev.childNodes[i].childNodes[0].className = (oTRPrev.childNodes[i].childNodes[0].className.indexOf('selected') != -1) ? oTRPrev.childNodes[i].childNodes[0].className.replace(/selected/i, "") : oTRPrev.childNodes[i].childNodes[0].className;
	}
	//oTD.className = '';
	//for (i = 0; i < oTR.childNodes.length; i++)
	//	oTR.childNodes[i].className = (oTR.childNodes[i].className == 'selected') ? '' : oTR.childNodes[i].className;
}
var oDD;
function showAvailableFlights(oEvent, oElm) {
	bFwd = (oElm.parentNode.className.indexOf('upcoming') == 0);
	intPackageCode = oElm.parentNode.parentNode.getAttribute("id").replace(/show-flights-container-/i, "");
	intHotelID = intPackageCode.substring(0, intPackageCode.indexOf('-'));
	intPackageCode = intPackageCode.substring(intPackageCode.indexOf('-')+1);
	intNextFlightFareCode = oElm.getAttribute("id").replace(/show-flights-/i, "");
	var oDL = document.getElementById('hotel-and-flights-container-' + intHotelID);
	
	if(!isTemaSite)
	{
		var blueComfortFlights = document.getElementById('blue-comfort-flights-' + intHotelID).value;
		var jumboJetFlights = document.getElementById('jumbojet-flights-' + intHotelID).value;
	}
	
	oDDTemp = oElm.parentNode;
	i = 0;
	while ((oDDTemp.tagName.toUpperCase() != 'DD') && (i < 10))
		oDDTemp = oDDTemp.parentNode;
	if ((oDDTemp.previousSibling) && (oDDTemp.previousSibling.tagName == 'DD') && (!bFwd)) {
		oDD = oDDTemp.previousSibling;
		for (i = 0; i < oDL.childNodes.length; i++)
			oDL.childNodes[i].className = (oDL.childNodes[i].className == 'display-block') ? 'display-none' : oDL.childNodes[i].className;
		oDD.className = 'display-block';
		return;
	}
	else if ((oDDTemp.nextSibling) && (oDDTemp.nextSibling.tagName == 'DD') && (bFwd)) {
		oDD = oDDTemp.nextSibling;
		for (i = 0; i < oDL.childNodes.length; i++)
			oDL.childNodes[i].className = (oDL.childNodes[i].className == 'display-block') ? 'display-none' : oDL.childNodes[i].className;
		oDD.className = 'display-block';
		return;
	}
	// Ska alltid ny data hämtas? 
	//alert(intNextFlightFareCode);
	//if (document.getElementById('hotel-and-flights-item-' + intPackageCode + '-' + intNextFlightFareCode))
	//	alert(document.getElementById('hotel-and-flights-item-' + intPackageCode + '-' + intNextFlightFareCode).outerHTML);
	
	oDD = document.createElement("dd");
	oDD.setAttribute('id', 'hotel-and-flights-item-' + intPackageCode + '-' + intNextFlightFareCode);
	oDD.className = 'display-block';
	
	var strURLToGet = "/BlueSites/Templates/ContentBlocks/Booking/DynamicContent/GetPackage.aspx?HotelID=" + intHotelID + "&PackageCode=" + intPackageCode + "&blueComfortFlights=" + blueComfortFlights + "&jumboJetFlights=" + jumboJetFlights;
	
	if(isTemaSite)
		strURLToGet = "/BlueSites/Templates/ContentBlocks/Booking/DynamicContent/GetPackage.aspx?HotelID=" + intHotelID + "&PackageCode=" + intPackageCode;
	
	if (bFwd)
		strURLToGet +=  "&NextFlightFareCode=" + intNextFlightFareCode;
	else
		strURLToGet += "&PreviousPackageFareCode=" + intNextFlightFareCode;
	//alert(strURLToGet);
	oDD.innerHTML = '<span class="retrieving-info">' + strRetrievingFlights + '</span>';
	getXML(strURLToGet, oDD, resultAvailableFlights);
	for (i = 0; i < oDL.childNodes.length; i++)
		oDL.childNodes[i].className = (oDL.childNodes[i].className == 'display-block') ? 'display-none' : oDL.childNodes[i].className;
	oDL.appendChild(oDD);			
}

function resultAvailableFlights(){
	setTimeout("addCharterStep2Events()", 500);
}
function addTravelCriteriaEvent(){
	var oBookHoliday = document.getElementById("book-holiday");
	var oResetTravelCriterias = document.getElementById("reset-travel-criterias");
	if(oBookHoliday && oResetTravelCriterias){
		$("div#book-holiday div.travel-criteria img.edit-button").click(function(){resetTravelCriterias();});
		//oResetTravelCriterias.onclick = resetTravelCriterias;
	}
}
function resetTravelCriterias(){
	var oBookHoliday = document.getElementById("book-holiday");
	var oResetTravelCriterias = document.getElementById("reset-travel-criterias");
	var arrTravelCriterias = getElementsByClassName(oBookHoliday, "*", "travel-criteria");
	var oTravelCriteria;
	for(var i=0; i<arrTravelCriterias.length; i++){
		oTravelCriteria = arrTravelCriterias[i];
		oTravelCriteria.className = oTravelCriteria.className.replace(/display-none/i, "display-inline");
	}
	var arrPrefilledTravelCriterias = getElementsByClassName(oBookHoliday, "*", "prefilled-travel-criteria");
	for(var j=0; j<arrPrefilledTravelCriterias.length; j++){
		oTravelCriteria = arrPrefilledTravelCriterias[j];
		oTravelCriteria.className = "display-none";
	}
	oResetTravelCriterias.className = "display-none";
	
	// The departure dropdown may be filtered so make sure all departures can be selected.
	resetDepartureDropDown()
}
function resetDepartureDropDown(){
	// This url prints out all available departures in options-tags for a dropdown.
	var strUrl = "/BlueSites/Templates/ContentBlocks/Booking/DynamicContent/GetDropDownItems.aspx?strBookingType=2&type=departureStart";
	// Get all departures and update the departure dropdown list.
	getJavaScriptArrayWithIdentifier("charter-select-departure", strUrl, "fillDropDownWithIdentifier");
}
var priceSpecificationContent;
function addTotalPriceEvent(){
	$("#panel-show-total-trip-price").click(function (){
			priceSpecificationContent = document.createElement("div");
			getXML("/BlueSites/Templates/ContentBlocks/Booking/DynamicContent/GetPriceSpecificationInfo.aspx", priceSpecificationContent, updatePriceSpecificationInfoLayer);
		}
	);
}
function updatePriceSpecificationInfoLayer(){
	showInfoLayer(strPriceSpecificationTitle, priceSpecificationContent.innerHTML);
	var oPriceSpecificationAddonsPrice = document.getElementById("price-specification-info-layer-addons-price");
	if (oPriceSpecificationAddonsPrice){
		var oTotalAddonsPriceHidden = document.getElementById("add-ons-total-price-hidden");
		if (oTotalAddonsPriceHidden){
			oPriceSpecificationAddonsPrice.innerHTML = FormatPrice(oTotalAddonsPriceHidden.value);
		}
	}
	var oPriceSpecificationInsurancePrice = document.getElementById("price-specification-info-layer-insurance-price");
	var oPassengerInfoContainer = document.getElementById("passenger-info-container");
	if (oPriceSpecificationInsurancePrice && oPassengerInfoContainer){
		var arrInsuranceInfo = getElementsByClassName(oPassengerInfoContainer, "div", "insurance-info");
		for (var i=0; i<arrInsuranceInfo.length; i++){
			var oInsuranceInputHidden = document.getElementsByName("insurance-price-hidden")[i];
			var oInsurancePriceRow = document.getElementById("price-specification-info-layer-insurances-price");
			if (oInsuranceInputHidden && oInsurancePriceRow)			{
				var strPassengerNoName = "PassengerNo-" + i.toString();
				var arrPassengers = oInsurancePriceRow.getElementsByTagName("td");
				for (var j=0; j<arrPassengers.length; j++){
					var attrName = arrPassengers[j].attributes.getNamedItem("name");
					if (attrName && attrName.value == strPassengerNoName){
						if (oInsuranceInputHidden.value == "0")
							arrPassengers[j].innerHTML = "";
						else if (oInsuranceInputHidden.value == "99999")
							arrPassengers[j].innerHTML = strTravelInsuranceIncluded;
						else
							arrPassengers[j].innerHTML = FormatPrice(oInsuranceInputHidden.value);
					}
				}
			}
		}
		var oTotalInsurancePriceHidden = document.getElementById("total-insurance-hidden");
		if (oTotalInsurancePriceHidden)
		{
			oPriceSpecificationInsurancePrice.innerHTML = FormatPrice(oTotalInsurancePriceHidden.value);
		}
	}
}
var oDivAddOns;
var arrAllAddOnRadioButtons = new Array();
function addAddOnsEvents(){
	oDivAddOns = document.getElementById("add-ons");	
	if(oDivAddOns){
		var arrAllInputs = oDivAddOns.getElementsByTagName("input");
		var oInput;
		var strInputType;
		var strInputId;
		var strIntNameIndex;
		var strSelectedAddOn;
		var strGuid;
		var strPassengerIndex;
		var oElementIdRegExp;
		for(var i=0; i<arrAllInputs.length; i++){
			oInput = arrAllInputs[i];
			strInputType = oInput.getAttribute("type");
			strInputId = oInput.getAttribute("id");
			if(strInputType.search(/radio|checkbox/i) != -1){
				if(strInputType.search(/radio/i) != -1){				
					if(arrAllAddOnRadioButtons.toString().search(oInput.getAttribute("name")) == -1){
						arrAllAddOnRadioButtons.push(oInput.getAttribute("name"));					
					}
				}
				oInput.onclick = function (){
					sumAddOns();
				};
			}
			else if(strInputType.search(/text/i) != -1){
				if(arrTravellers.length > 0){
					strIntNameIndex = parseInt(strInputId.replace(/.*(\d+)$/i, "$1"), 10) - 1;
					if(arrTravellers[strIntNameIndex].length > 0){
						oInput.value = arrTravellers[strIntNameIndex];
					}
				}
			}			
			var arrSubmitButtons = getElementsByClassName(document, "input", "submit-button");
			if(arrSubmitButtons.length > 0){
				var oSubmitButton = arrSubmitButtons[0];
				oInput.onkeypress = function (oEvent){
					var oEvent = (typeof oEvent != "undefined")? oEvent : event;
					var intKeyCode = oEvent.keyCode;
					if(intKeyCode == 13){
						oEvent.returnValue = false;
						if(oEvent.preventDefault){
							oEvent.preventDefault();
						}
						clickSubmitButton(oEvent, oSubmitButton.getAttribute("id"));
					}
				}
			}			
			for(var k=0; k<arrSelectedAddOns.length; k++){
				strSelectedAddOn = arrSelectedAddOns[k];
				strGuid = strSelectedAddOn.replace(/\|\d*$/i, "");
				strPassengerIndex = strSelectedAddOn.replace(/.*\|(\d)+/i, "$1");
				oElementIdRegExp = new RegExp(("-" + strPassengerIndex + "-"), "i");				
				if(oInput.value == strGuid && oElementIdRegExp.test(strInputId)){		
					oInput.click();
				}
			}
		}		
		var oContinueButton = document.getElementById("continue-button");
		if(oContinueButton){
			var arrRadioButtonCollection;
			oContinueButton.onclick = function (oEvent){
				var oEvent = (typeof oEvent != "undefined")? oEvent : event;
				var bContainsError = false;
				var sMsg = $("input#msgMandatory").val();
				$("input#clientIsValid").val("true");
				$("div#add-ons tr.names-row th input").each(
					function(i) {
						if (jQuery.trim($(this).val()) == "") {
							bContainsError = true;
							sMsg += "<br /> - " + $("input#msgFirstName").val();
							return false;
						}
					}
				);
				var sPrevGroupHeader = "";
				for(var l=0; l<arrAllAddOnRadioButtons.length; l++){
					arrRadioButtonCollection = document.getElementsByName(arrAllAddOnRadioButtons[l]);
					var bChecked = false;
					for(var m=0; m<arrRadioButtonCollection.length; m++){
						if(arrRadioButtonCollection[m].checked){
							bChecked = true;
							break;
						}
					}
					if(!bChecked) {
						bContainsError = true;
						oGroupHeader = $(arrRadioButtonCollection[0]).parent().parent().prev(".group-header");
						if (sPrevGroupHeader != oGroupHeader.text().replace(/\*/gi, '')) sMsg += "<br /> - " + oGroupHeader.text().replace(/\*/gi, '');
						if (!$("th.table-name a.group-header-link", oGroupHeader).hasClass("selected")) { 
							oGroupHeader.addClass("expanded-group");
							$("th.table-name a.group-header-link", oGroupHeader).addClass("selected");
							oGroupHeader.nextAll("tr").each(
								function(i) {
									if ($(this).hasClass("group-header")) return false;
									$(this).removeClass("display-none");
								}
							);
							//$("th.table-name a.group-header-link", oGroupHeader).click(); 
						}
						$("input#clientIsValid").val("false");
						sPrevGroupHeader = oGroupHeader.text().replace(/\*/gi, '');
						//if (document.getElementById('clientIsValid')) document.getElementById('clientIsValid').value = 'false';
						//break;
					}
				}
				if (bContainsError) {
					window.scrollTo(0,200);
					sErrHtml = '<div class="inner"><p>' + sMsg + '</p></div>';
					oErrorBox = $("div.error-box");
					if (oErrorBox.length == 0) $("div#breadcrumbs-container").after('<div class="error-box">' + sErrHtml + '</div>');
					else oErrorBox.html(sErrHtml);
					return false;
				}
			};
		}		
		var arrAddOnsGroupHeaderLinks = getElementsByClassName(oDivAddOns, "a", "group-header-link");
		for(var n=0; n<arrAddOnsGroupHeaderLinks.length; n++){
			arrAddOnsGroupHeaderLinks[n].onclick = function (oEvent){
				var oEvent = (typeof oEvent != "undefined")? oEvent : event;
				oEvent.returnValue = false;
				if(oEvent.preventDefault){
					oEvent.preventDefault();
				}
				var oTableRow = this.parentNode.parentNode;
				var bExpand = (oTableRow.className.search(/expanded-group/) == -1)? true : false;
				var strAddOnsClassName = "display-table-row";
				if(bExpand){
					oTableRow.className += " expanded-group";
				}
				else{
					oTableRow.className = oTableRow.className.replace(/\sexpanded-group/i, "");
					strAddOnsClassName = "display-none";
				}				
				var strNewClassName;
				while(oTableRow.nextSibling){
					oTableRow = oTableRow.nextSibling;
					if(oTableRow.nodeName.search(/tr/i) != -1 && oTableRow.className.search(/group-header/) == -1){
						strNewClassName = oTableRow.className.replace(/\s?display-(table-row|none)/gi, "");
						oTableRow.className = strNewClassName + " " + strAddOnsClassName;
					}
					else if(oTableRow.nodeType == 3){
						continue;
					}
					else{
						break;
					}
				}
				this.className = (this.className.indexOf(' selected') != -1) ? this.className.replace(/ selected/gi, '') : this.className + ' selected';
			}
		}
		sumAddOns();
	}
}
var oValidationMessage;
function showClientSideValidation(){
	oValidationMessage = document.getElementById("client-side-validation");
	if(oValidationMessage){		
		var intScrollTop = (window.pageYOffset)? window.scrollY : oBodyElmForIE.scrollTop;
		oValidationMessage.style.top = 200 + intScrollTop + "px";		
		document.getElementById("client-side-validation-content").innerHTML = strDoAllMandatorySelections;
		document.getElementById("close-client-side-validation-message").onclick = function (){
			oValidationMessage.className = "validation-message display-none";
		};
		oValidationMessage.className = "validation-message display-block";
	}
	else{
		alert(strDoAllMandatorySelections);
	}
}
function sumAddOns(){	
	var arrTableRows;	
	if (!oDivAddOns)
		oDivAddOns = window.parent.document.getElementById("add-ons");
	
	if(oDivAddOns)
		arrTableRows = oDivAddOns.getElementsByTagName("tr");
		
	var oTableRow;
	var arrCurrentRowInputs;
	var oPriceCell;
	var intAddonPrice;
	var oInput;
	if (arrTableRows){
		for(var i=0; i<arrTableRows.length; i++){
			oTableRow = arrTableRows[i];
			oPriceCell = getElementsByClassName(oTableRow, "td", "total-price");
			arrCurrentRowInputs = oTableRow.getElementsByTagName("input");
			if(oPriceCell.length > 0){
				oPriceCell = oPriceCell[0];
				intAddonPrice = 0;
				for(var j=0; j<arrCurrentRowInputs.length; j++){
					oInput = arrCurrentRowInputs[j];
					if(oInput.checked){
						intAddonPrice += parseInt(oInput.getAttribute("id").replace(/.*-(\d+)$/i, "$1"), 10);
					}
					else if(parseInt(oInput.getAttribute("id").replace(/.*-(\d+)$/i, "$1"), 10) == 999999){
						intAddonPrice += parseInt(oInput.value);
					}
				}
				oPriceCell.innerHTML = intAddonPrice + strCurrencySymbol;
			}
		}		
	}	
	var oTotalPrice = document.getElementById("add-ons-total-price");
	var oTotalPriceHidden = document.getElementById("add-ons-total-price-hidden");
	var oTotalPriceUnchangedHidden = document.getElementById("add-ons-total-price-unchanged-hidden");

	if (!oTotalPrice)
		oTotalPrice = window.parent.document.getElementById("add-ons-total-price");
		
	if (!oTotalPriceHidden)
		oTotalPriceHidden = window.parent.document.getElementById("add-ons-total-price-hidden");
		
    if (!oTotalPriceUnchangedHidden)
		oTotalPriceUnchangedHidden = window.parent.document.getElementById("add-ons-total-price-unchanged-hidden");
		
	if(oTotalPrice){
		var intTotalAddonsPrice = 0;
		var arrAllTotalPrices = getElementsByClassName(oDivAddOns, "td", "total-price");
		var oCell;

		for(var k=0; k<arrAllTotalPrices.length; k++){
			oCell = arrAllTotalPrices[k];
			if(oCell.innerHTML.search(/\d+/) != -1){
				intTotalAddonsPrice += parseInt(oCell.innerHTML, 10);
			}
		}
		if(oTotalPrice)
			oTotalPrice.innerHTML = FormatPriceWithCurrencySymbol(intTotalAddonsPrice);
		if (oTotalPriceHidden){
			if (oTotalPriceUnchangedHidden)
				if (oTotalPriceHidden.value == "")
					oTotalPriceUnchangedHidden.value = intTotalAddonsPrice.toString();
			oTotalPriceHidden.value = intTotalAddonsPrice.toString();
		}
		var oInsurancesPriceHidden = document.getElementById("insurances-total-price-hidden");
		if (!oInsurancesPriceHidden)
			oInsurancesPriceHidden = window.parent.document.getElementById("insurances-total-price-hidden");

		var oCancellationsPriceHidden = document.getElementById("cancellations-total-price-hidden");
		if (!oCancellationsPriceHidden)
			oCancellationsPriceHidden = window.parent.document.getElementById("cancellations-total-price-hidden");

		if (oTotalPriceHidden && oInsurancesPriceHidden && oCancellationsPriceHidden){
			var intInsurancesPrice = parseInt(oInsurancesPriceHidden.value, 10);
			var intCancellationsPrice = parseInt(oCancellationsPriceHidden.value, 10);
			UpdateMySelection(intTotalAddonsPrice + intInsurancesPrice + intCancellationsPrice);
		}
	}
}
function FormatPrice(price){
	var strPrice = price.toString();

	if(strPrice.length > 3){
		strPrice = strPrice.replace(/(\d{3}$)/, " $1");
	}	
	return strPrice;
}
function FormatPriceWithCurrencySymbol(price){
	return FormatPrice(price) + strCurrencySymbol;
}
function UpdateMySelection(intExtrasPrice){
	var oMySelectionPrice = document.getElementById("myselections-price-hidden");
	var oMySelectionAddonsPrice = document.getElementById("myselections-addons-price");
	var oMySelectionTotalPrice = document.getElementById("myselections-total-price");

	if (!oMySelectionPrice)
		oMySelectionPrice = window.parent.document.getElementById("myselections-price-hidden");
	if (!oMySelectionAddonsPrice)
		oMySelectionAddonsPrice = window.parent.document.getElementById("myselections-addons-price");
	if (!oMySelectionTotalPrice)
		oMySelectionTotalPrice = window.parent.document.getElementById("myselections-total-price");

	if(oMySelectionPrice && oMySelectionAddonsPrice && oMySelectionTotalPrice){
		var intTotalPrice = 0;
		var intPrice = 0;
		var strPrice = oMySelectionPrice.value;

		intPrice = parseInt(strPrice, 10);
		intTotalPrice = intPrice + intExtrasPrice;

		oMySelectionAddonsPrice.innerHTML = FormatPriceWithCurrencySymbol(intExtrasPrice);
		oMySelectionTotalPrice.innerHTML = FormatPriceWithCurrencySymbol(intTotalPrice);
	}
}
function addPassengerDetailsEvents(){
	var oPassengerInfoContainer = document.getElementById("passenger-info-container");
	if(oPassengerInfoContainer){		
		var arrSubmitButtons = getElementsByClassName(oPassengerInfoContainer, "input", "submit-button");
		if(arrSubmitButtons.length > 0){
			var oSubmitButton = arrSubmitButtons[0];
			var arrAllInputs = oPassengerInfoContainer.getElementsByTagName("input");
			var oInput;
			for(var i=0; i<arrAllInputs.length; i++){
				oInput = arrAllInputs[i];
				if(oInput.getAttribute("type").search(/text/i) != -1){
					oInput.onkeypress = function (oEvent){
						var oEvent = (typeof oEvent != "undefined")? oEvent : event;
						var intKeyCode = oEvent.keyCode;
						if(intKeyCode == 13){
							oEvent.returnValue = false;
							if(oEvent.preventDefault){
								oEvent.preventDefault();
							}
							clickSubmitButton(oEvent, oSubmitButton.getAttribute("id"));
						}	
					}
				}
			}
		}		
		var arrCancellationInsurance = getElementsByClassName(oPassengerInfoContainer, "input", "cancellation-insurance");
		for(var j=0; j<arrCancellationInsurance.length; j++){
			arrCancellationInsurance[j].onclick = function (oEvent){
				var oEvent = (typeof oEvent != "undefined")? oEvent : event;
				if(!this.childNodes[0].checked)
				{
					showInfoLayer(strCancellationInsuranceHeading, strCancellationInsuranceInformation, 300);
				}
				else
				{
					cClick();
				}
			}
		}
		var arrCancellationInsuranceSpan = getElementsByClassName(oPassengerInfoContainer, "span", "cancellation-insurance");
		for(var j=0; j<arrCancellationInsuranceSpan.length; j++){
			arrCancellationInsuranceSpan[j].onclick = function (oEvent){
				var oEvent = (typeof oEvent != "undefined")? oEvent : event;
				if(!this.childNodes[0].checked)				
					showInfoLayer(strCancellationInsuranceHeading, strCancellationInsuranceInformation, 300);				
				else
					cClick();
			}
		}
		var arrTravelInsurance = getElementsByClassName(oPassengerInfoContainer, "select", "travel-insurance");
		for(var j=0; j<arrTravelInsurance.length; j++){
			arrTravelInsurance[j].onchange = function (oEvent){
				var oEvent = (typeof oEvent != "undefined")? oEvent : event;
				var selectedValue = this.options[this.options.selectedIndex].value.split("$");
				var selectedCode = "";
				var selectedPriceCode = "";

				selectedCode = selectedValue[0];
				if (selectedValue.length == 3)				
					selectedPriceCode = selectedValue[1];
				
				if (selectedCode == "N"){
					var topPos = ((document.documentElement.clientHeight - 210) / 2);// + intScrollTop;
					displayTravelInsurance(topPos, this, "400", "500", "250");
					setInsuranceForOtherPassengers("SelectInsurance");
				}
				else{
					if (selectedPriceCode == "F")					
						setInsuranceForOtherPassengers("NoInsurance");					
					else					
						setInsuranceForOtherPassengers("SelectInsurance");					
				}
				sumInsurances();
			}
		}
		sumInsurances();
	}	
}
function displayTravelInsurance(topPos, oElm, width, height, x){
	var strURL = "/BlueSites/Templates/ContentBlocks/Booking/DynamicContent/GetEpiPage.aspx?id=" + strTravelInsurancePageId;
	var content = showInfoLayer(strCancellationTravelInsuranceHeading, null, width, 200,["TEXTFONTCLASS", "'overlib-text-font-class overlib-height-200'"]);
	getXML(strURL, content);
}
function setInsuranceForOtherPassengers(action){
	var oPassengerInfoContainer = document.getElementById("passenger-info-container");
	if(oPassengerInfoContainer){
		var arrTravelInsurance = getElementsByClassName(oPassengerInfoContainer, "select", "travel-insurance");
		for (var i=1; i<arrTravelInsurance.length; i++){
			var oInsuranceInput = arrTravelInsurance[i];
			switch (action)
			{
				case 'NoInsurance':
					oInsuranceInput.options[oInsuranceInput.options.length - 1].selected = true;
					oInsuranceInput.disabled = true;
					break;
				case 'SelectInsurance':
					if (oInsuranceInput.disabled){
						oInsuranceInput.options[0].selected = true;
						oInsuranceInput.disabled = false;
					}
					break
				default:
			}
		}
	}
}
function sumInsurances(){
	var oPassengerInfoContainer = document.getElementById("passenger-info-container");
	if(oPassengerInfoContainer){
		var sumInsurancesPrice = 0;
		var arrInsuranceInfo = getElementsByClassName(oPassengerInfoContainer, "div", "insurance-info");
		for (var i=0; i<arrInsuranceInfo.length; i++){
			var arrInsuranceInput = getElementsByClassName(arrInsuranceInfo[i], "select", "travel-insurance");
			if (arrInsuranceInput.length == 1){
				var oInsuranceInput = arrInsuranceInput[0];
				var selectedValue = oInsuranceInput.options[oInsuranceInput.selectedIndex].value;
				var arrValues = selectedValue.split("$");
				var price = "0";
				if (arrValues.length == 3)
					price = arrValues[2];
				
				sumInsurancesPrice += price != "99999" ? parseInt(price, 10) : 0;

				var oInsuranceInputHidden = document.getElementsByName("insurance-price-hidden")[i];
				if (oInsuranceInputHidden)			
					oInsuranceInputHidden.value = price;
				}
			}
		var oTotalAddonsHidden = document.getElementById("total_addons_hidden");
		var oInsurancesPriceHidden = document.getElementById("total-insurance-hidden");
		var oCancellationsPriceHidden = document.getElementById("total-cancellation-hidden");
		if (oTotalAddonsHidden && oInsurancesPriceHidden && oCancellationsPriceHidden)		{
			var trimmedTotalAddons = oTotalAddonsHidden.value.replace(' ', '');
			var sumTotalAddons = parseInt(trimmedTotalAddons, 10);
			var sumTotalCancellations = parseInt(oCancellationsPriceHidden.value, 10);
			oInsurancesPriceHidden.value = sumInsurancesPrice.toString();
			UpdateMySelection(sumTotalAddons + sumInsurancesPrice + sumTotalCancellations);
		}
	}
}
//------ Scripts for Car rental -------------//
function CloseWindow(updatePrice, selectedIndex){

	if(selectedIndex != null){
		var timeDropListIndex = window.parent.document.getElementById("TimeSelectedIndex");
		timeDropListIndex.value = selectedIndex;
	}

	if(updatePrice == true)
		AddCarRentalPrice();
		
	var infoLayer = window.parent.document.getElementById("car-layer");
	infoLayer.className = "display-none";				
}
function ShowCarMessage(fareCode){				
	var arrImportantMessage = getElementsByClassName(document, "li", "*");
	for(var i=0; i<arrImportantMessage.length; i++)	{						
		if(arrImportantMessage[i].className != fareCode && arrImportantMessage[i].className != "ImportantInformation")				
			arrImportantMessage[i].style.display = "none";
		else if(arrImportantMessage[i].className == fareCode || arrImportantMessage[i].className == "ImportantInformation")
			arrImportantMessage[i].style.display = "block";								
	}
}
function SetHiddenValue(fareCode){
	var hiddenField = document.getElementById("FarCodeHidden");		
	hiddenField.value = fareCode;	
	
	var arrImportantMessage = getElementsByClassName(document, "li", "*");
	for(var i=0; i<arrImportantMessage.length; i++){				
		if(arrImportantMessage[i].className != fareCode && arrImportantMessage[i].className != "ImportantInformation")				
			arrImportantMessage[i].style.display = "none";
		else if(arrImportantMessage[i].className == fareCode || arrImportantMessage[i].className == "ImportantInformation")
			arrImportantMessage[i].style.display = "block";								
	}		
	var radioButton = document.getElementById(fareCode);
	if(radioButton.getAttribute("class") == "air-port" || radioButton.className == "air-port")
	{			
		var timeDropList = document.getElementById("TimeDropList");
					
		if(timeDropList.selectedIndex != 6){
			timeDropList.selectedIndex = 6;
			timeDropList.onchange();	
		}		
	}
	else if(radioButton.getAttribute("class") == "not-air-port"  || radioButton.className == "not-air-port"){
		var timeDropList = document.getElementById("TimeDropList");

		if(timeDropList.selectedIndex == 0)						
			timeDropList.selectedIndex = 1;
		else if(timeDropList.selectedIndex > 0 && timeDropList.selectedIndex <= 6)
			timeDropList.selectedIndex = 0;
			
		timeDropList.options[6] = null;
		timeDropList.onchange();
	}
}	
function AddCarRentalPrice(){
	var totalPriceLabel = document.getElementById("TotalPriceLabel");
	var carPrice = parseInt(totalPriceLabel.innerHTML);
	var carPriceHidden = window.parent.document.getElementById("CarRentalPrice-999-999999");
	
	carPriceHidden.value = carPrice;
	sumAddOns();
}
//------ Scripts for Car rental -------------//
function addHotelEvents(){
	var oBookHoliday = document.getElementById("book-holiday");
	if(oBookHoliday){
		// Add events to all input buttons
		var arrAllHotelNames = getElementsByClassName(oBookHoliday, "h3", "hotel-name");
		for(var j=0; j<arrAllHotelNames.length; j++){
			arrAllHotelNames[j].onclick = function (oEvent){
				var oEvent = (typeof oEvent != "undefined")? oEvent : event;
				handleCharterHotelClick(oEvent, this, '');
			};
		}
		arrAllHotelNames = getElementsByClassName(oBookHoliday, "h5", "hotel-name");
		for(var j=0; j<arrAllHotelNames.length; j++){
			arrAllHotelNames[j].onclick = function (oEvent){
				var oEvent = (typeof oEvent != "undefined")? oEvent : event;
				handleCharterHotelClick(oEvent, this, '');
			};
		}
		arrAllHotelNames = getElementsByClassName(oBookHoliday, "dt", "hotel-name");
		for(var j=0; j<arrAllHotelNames.length; j++){
			arrAllHotelNames[j].onclick = function (oEvent){
				var oEvent = (typeof oEvent != "undefined")? oEvent : event;
				handleCharterHotelClick(oEvent, this, '');
			};
		}
	}
}
function handleCharterHotelClick(oEvent, oElm, intHotelId) {
	if (intHotelId == '') {
		if (oElm.tagName.toUpperCase() == 'H5') {
			while (oElm.previousSibling && oElm.tagName.toUpperCase() != 'H2' && oElm.tagName.toUpperCase() != 'H3')
				oElm = oElm.previousSibling;
		}
		if (!oElm.getAttribute("id")) return;
		intHotelId = oElm.getAttribute("id").replace(/hotel-id-/g, "");
	}
	if (isTemaSite) {
		displayCityInfo(intHotelId);
	} else {
		displayHotelInfo(intHotelId);
	}
}
function displayHotelInfo(intHotelId){
	var content = showInfoLayer(strHotelInfo, strRetrievingHotelInfo, 700, 500, ["TEXTFONTCLASS", "'overlib-text-font-class overlib-height-500'"]);
	getXML(("/BlueSites/Templates/ContentBlocks/Booking/DynamicContent/GetHotelInfo.aspx?hotelid=" + intHotelId), content, showImageBrowsingBar);
}
function displayCityInfo(intCityId) {
	var content = showInfoLayer(strCityInfo, strRetrievingCityInfo, 700, 500, ["TEXTFONTCLASS", "'overlib-text-font-class overlib-height-500'"]);
	getXML(("/BlueSites/Templates/ContentBlocks/Booking/DynamicContent/GetCityInfo.aspx?cityid=" + intCityId), content, showImageBrowsingBar);
}
function addPagingEvents(){
	var oBookHoliday = document.getElementById("book-holiday");
	if(oBookHoliday){
		// Add events to all paging links
		var arrAllPagingLinks = getElementsByClassName(oBookHoliday, "a", "paging-link");
		for(var j=0; j<arrAllPagingLinks.length; j++){
			arrAllPagingLinks[j].onclick = function (oEvent){
				var oEvent = (typeof oEvent != "undefined")? oEvent : event;
				oEvent.returnValue = false;
				if(oEvent.preventDefault) {
					oEvent.preventDefault();
				}
				switchPage(oEvent, this);
			};
		}
	}
}
function switchPage(oEvent, oElm) {
	var nDisplayPage = oElm.className.replace(/paging-link link-/g, "");
	document.getElementById('displayPageNo').value = nDisplayPage;
	document.forms[0].submit();
}
// -- MY HOLIDAY --
function addMyHolidayEvents() {
	oMyHoliday = document.getElementById('my-holiday');
	if (oMyHoliday) {
		var arrEditBookingGroupHeaderLinks = getElementsByClassName(oMyHoliday, "a", "group-header-link");
		for(var n=0; n<arrEditBookingGroupHeaderLinks.length; n++) {
			arrEditBookingGroupHeaderLinks[n].onclick = function (oEvent) {
				var oEvent = (typeof oEvent != "undefined")? oEvent : event;
				oEvent.returnValue = false;
				if(oEvent.preventDefault){
					oEvent.preventDefault();
				}
				var oTableRow = this.parentNode.parentNode;
				var bExpand = (oTableRow.className.search(/expanded-group/) == -1)? true : false;
				var strEditBookingClassName = "display-table-row";
				if(bExpand){
					oTableRow.className += " expanded-group";
				}
				else{
					oTableRow.className = oTableRow.className.replace(/\sexpanded-group/i, "");
					strEditBookingClassName = "display-none";
				}
				this.className = (this.className == 'group-header-link') ? 'group-header-link selected' : 'group-header-link';
				var strNewClassName;
				while(oTableRow.nextSibling) {
					oTableRow = oTableRow.nextSibling;
					if (oTableRow.nodeName.search(/tr/i) != -1 && oTableRow.className.search(/group-header/) == -1) {
						strNewClassName = oTableRow.className.replace(/\s?display-(table-row|none)/gi, "");
						oTableRow.className = strNewClassName + " " + strEditBookingClassName;
					}
					else if (oTableRow.nodeType == 3) {
						continue;
					}
					else {
						break;
					}
				}
			}
		}	
		var arrEditBookingCloseLinks = getElementsByClassName(oMyHoliday, "a", "close-edit-booking-row");
		for(var n=0; n<arrEditBookingCloseLinks.length; n++) {
			arrEditBookingCloseLinks[n].onclick = function (oEvent) {
				var oEvent = (typeof oEvent != "undefined")? oEvent : event;
				oEvent.returnValue = false;
				if(oEvent.preventDefault){
					oEvent.preventDefault();
				}
				var oTableRow = this.parentNode.parentNode.previousSibling;
				var bExpand = (oTableRow.className.search(/expanded-group/) == -1)? true : false;
				var strEditBookingClassName = "display-table-row";
				if(bExpand){
					oTableRow.className += " expanded-group";
				}
				else{
					oTableRow.className = oTableRow.className.replace(/\sexpanded-group/i, "");
					strEditBookingClassName = "display-none";
				}
				oGroupHeaderLink = oTableRow.childNodes[0].childNodes[0];
				oGroupHeaderLink.className = (oGroupHeaderLink.className == 'group-header-link') ? 'group-header-link selected' : 'group-header-link';
				var strNewClassName;
				while(oTableRow.nextSibling) {
					oTableRow = oTableRow.nextSibling;
					if (oTableRow.nodeName.search(/tr/i) != -1 && oTableRow.className.search(/group-header/) == -1) {
						strNewClassName = oTableRow.className.replace(/\s?display-(table-row|none)/gi, "");
						oTableRow.className = strNewClassName + " " + strEditBookingClassName;
					}
					else if (oTableRow.nodeType == 3) {
						continue;
					}
					else {
						break;
					}
				}
			}
		}		
		var oEditBookingSubmitButton = document.getElementById('btnCancelBooking');
		if (oEditBookingSubmitButton) {
			oEditBookingSubmitButton.onclick = function (oEvent) {
				var oEvent = (typeof oEvent != "undefined")? oEvent : event;
				oEvent.returnValue = false;
				if(oEvent.preventDefault) oEvent.preventDefault();
				oCancelBookingConfirmLayer.className = 'display-block';
			}
		}		
		var oCancelBookingConfirmLayer = document.getElementById("cancel-booking-confirm-info-layer");
		if(oCancelBookingConfirmLayer){
			var oHeadingElm = document.getElementById("cancel-booking-confirm-info-layer-heading");
			oHeadingElm.onmousedown = function(oEvent){
				initDrag(oEvent, this);
			}	
			var oCloseLink = document.getElementById("cancel-booking-confirm-info-layer-close-link");
			oCloseLink.onmousedown = function(){
				oCancelBookingConfirmLayer.className = "display-none";
			}
			var oCancelButton = document.getElementById("btnCancelBookingCancel");
			oCancelButton.onmousedown = function(){
				oCancelBookingConfirmLayer.className = "display-none";
			}
		}	
	}
}
function addButtonMouseOverEvents() {
	oBookingPanelStart = document.getElementById('booking-panel-start');
	if (oBookingPanelStart) {
		var arrAllMouseOverButtons = getElementsByClassName(oBookingPanelStart, "input", "handle-mouse-over");
		for (var i = 0; i < arrAllMouseOverButtons.length; i++) {
			arrAllMouseOverButtons[i].onmouseover = function () {
				if (this.src) this.src = this.src.replace(/-1/i, '-2');
			}
			arrAllMouseOverButtons[i].onmouseout = function () {
				if (this.src) this.src = this.src.replace(/-2/i, '-1');
			}
		}
	}
}

function addOnlineUpsalesEvents() {
	var oBookHoliday = document.getElementById("book-holiday");
	if (oBookHoliday) {
		var arrAllNonEditable = getElementsByClassName(oBookHoliday, "input", "non-editable");
		for (var i = 0; i < arrAllNonEditable.length; i++) {
			switch (arrAllNonEditable[i].attributes.getNamedItem("type").value) {
				case 'radio': 
					arrAllNonEditable[i].disabled = true;
					break;
				case 'checkbox': 
					arrAllNonEditable[i].disabled = true;
					break;
				default: 
					arrAllNonEditable[i].readOnly = true;
					break;
			}
		}
		arrAllNonEditable = getElementsByClassName(oBookHoliday, "select", "non-editable");
		for (var i = 0; i < arrAllNonEditable.length; i++) {
			arrAllNonEditable[i].disabled = true;
		}
		
		arrAllNonEditable = getElementsByClassName(oBookHoliday, "span", "non-editable");
		for (var i = 0; i < arrAllNonEditable.length; i++) {
			var arrAllNonEditableChildren = arrAllNonEditable[i].getElementsByTagName('input');
			for (var j = 0; j < arrAllNonEditableChildren.length; j++) {
				arrAllNonEditableChildren[j].disabled = true;
			}
		}
	}	
	var oMyHoliday = document.getElementById("my-holiday");
	if (oMyHoliday) {
		oOnlineUpsalesTable = document.getElementById('online-upsales-table');
		if (oOnlineUpsalesTable) {
			var arrAllTableRows = getElementsByClassName(oOnlineUpsalesTable, "tr", "display-none");
			var j = 0;
			for (var i = 0; i < arrAllTableRows.length-1; i++) {
				j = i;
				if (arrAllTableRows[i].className.indexOf('ignore-alt-row') != -1) {
					j = 0;
					continue;
				}
				arrAllTableRows[i].className = (j % 2 == 0) ? arrAllTableRows[i].className.replace(/alt-row/i, '') : arrAllTableRows[i].className.replace(/alt-row/i, '') + ' alt-row';
			}
		}
	}
}
function addBookingStep1Events() {
	var oBookHoliday = document.getElementById("book-holiday");
	if (oBookHoliday) {
		var arrAllPrefilledCriteria = getElementsByClassName(oBookHoliday, "span", "prefilled-travel-criteria");
		for (var i = 0; i < arrAllPrefilledCriteria.length; i++) {
			if (arrAllPrefilledCriteria[i].innerHTML.trim().length == 0) arrAllPrefilledCriteria[i].className = arrAllPrefilledCriteria[i].className.replace(/display-none/gi, '') + ' display-none';
		}
	}
}
// -- Clientvalidation booking passenger step START --
function bExcludeFromValidation(obj) {
	if ((obj.attr("class") && obj.attr("class").indexOf("exclude-from-validation") != -1) || (obj.attr("class") && obj.attr("class").indexOf("non-editable") != -1)) return true;
	return false;
}

function addCharterBookingStep4Events() {
	$("div.booking-passenger-step input.submit-button").click(
		function() {
			$("div.booking-passenger-step input:text, div.booking-passenger-step div.radio-button-list, div.booking-passenger-step select").removeAttr("style");
			var oRadioName = "", oRadioChecked = false, bValid = true;
			$("div.booking-passenger-step input").each(
				function() {
					_this = $(this);
					switch(_this.attr("type")) {
						case "text":
								if (jQuery.trim(_this.val()) == "" && (!bExcludeFromValidation(_this))) { _this.css({border:"1px solid #C00", padding:"1px"}); bValid = false; }
							break;
						case "radio":
								if ((oRadioName == _this.attr("name")) && (!oRadioChecked) && (!this.checked)) { _this.parents("div.radio-button-list").css({border:"1px solid #C00", padding:"1px"}); bValid = false; }
								oRadioName = _this.attr("name"); oRadioChecked = this.checked;
							break;
					}
				}
			);
			$("div.booking-passenger-step select").each(
				function() { if (jQuery.trim($(this).val()) == "") { $(this).css("border", "1px solid #C00"); bValid = false; }}
			);
			$("div#div-client-validation").attr("class", (bValid) ? "error-box display-none" : "error-box");
			if (!bValid) window.scrollTo(0,200);
			return bValid;
		}
	);
	$("div.booking-passenger-step input:text, div.booking-passenger-step div.radio-button-list, div.booking-passenger-step select").focus( function() { $(this).removeAttr("style"); } );
}
// -- Clientvalidation booking passenger step END --
// -- Validate events --
function addValidateEvents() {
	var oBookHoliday = document.getElementById("book-holiday");
	if (oBookHoliday) {
		var arrAllValidateZipCode = getElementsByClassName(oBookHoliday, "input", "validate-zipcode");
		for (var i = 0; i < arrAllValidateZipCode.length; i++) {
			arrAllValidateZipCode[i].onblur = function () {
				oErrorBoxContainer = document.getElementById('div-client-validation');
				this.value = this.value.trim();
				bValid = isValidPostalNo(this.value);
				writeMessage(this, bValid);
			}
		}
		var arrAllValidatePostalAddress = getElementsByClassName(oBookHoliday, "input", "validate-postaladdress");
		for (var i = 0; i < arrAllValidatePostalAddress.length; i++) {
			arrAllValidatePostalAddress[i].onblur = function () {
				oErrorBoxContainer = document.getElementById('div-client-validation');
				this.value = this.value.trim();
				bValid = isValidPostalAddress(this.value);
				writeMessage(this, bValid);
			}
		}
		var arrAllValidatePhoneDay = getElementsByClassName(oBookHoliday, "input", "validate-phoneday");
		for (var i = 0; i < arrAllValidatePhoneDay.length; i++) {
			arrAllValidatePhoneDay[i].onblur = function () {
				oErrorBoxContainer = document.getElementById('div-client-validation');
				this.value = this.value.trim();
				bValid = isValidTelephone(this.value);
				writeMessage(this, bValid);
			}
		}
		var arrAllValidatePhoneEvening = getElementsByClassName(oBookHoliday, "input", "validate-phoneevening");
		for (var i = 0; i < arrAllValidatePhoneEvening.length; i++) {
			arrAllValidatePhoneEvening[i].onblur = function () {
				oErrorBoxContainer = document.getElementById('div-client-validation');
				this.value = this.value.trim();
				bValid = isValidTelephone(this.value);
				writeMessage(this, bValid);
			}
		}
		var arrAllValidateEmail = getElementsByClassName(oBookHoliday, "input", "validate-email");
		for (var i = 0; i < arrAllValidateEmail.length; i++) {
			arrAllValidateEmail[i].onblur = function () {
				this.value = this.value.trim();
				bValid = isValidEmail(this.value);
				writeMessage(this, bValid);
			}
		}
	}
}
function isValidPostalNo(str) {
	var rx = /([^0-9.])/g;
	str  = str.replace(rx, '');
	if (str.length != 5) return false
	else return true;
}
function isValidEmail(str) {
	var rx = /(^([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))$)/i;
	return rx.test(str);
}
function isValidPostalAddress(str) {	
	var rx = /([^a-zA-ZåäöÅÄÖáéíóúýÁÉÍÓÚÝñÑõÕ -])/g;
	if (str.match(rx) || str == '') return false
	else return true;
}
function isValidTelephone(str) {
	var rx = /([0-9]|-){8,11}/g;
	if (str.match(rx) == str) {
		str = str.replace('-', '');
		for (i=1; i<str.length; i++) {
			if (str.charAt(i-1) != str.charAt(i)) return true;
		}
	}
	return false;
}
function isValidCellphone(str) {
	var rx = /([0-9]|-){8,20}/g;
	if (str.match(rx) == str) {
		str = str.replace('-', '');
		for (i=1; i<str.length; i++) {
			if (str.charAt(i-1) != str.charAt(i)) return true;
		}
	}
	return false;
}
function writeMessage(oInput, bValid)
{
	if (bValid || oInput.value == ''){
		return;
	}
	showInfoLayer(getErrorHeader(oInput.className), getErrorMessage(oInput.className));
}
function getErrorHeader(className) {
	switch (className.replace(/validate-/gi, '')) {
		case 'zipcode': return oErrorMessages[0].header;
			break;
		case 'postaladdress': return oErrorMessages[1].header;
			break;
		case 'phoneday': return oErrorMessages[2].header;
			break;
		case 'phoneevening': return oErrorMessages[3].header;
			break;
		case 'email': return oErrorMessages[4].header;
			break;
	}
}
function getErrorMessage(className) {
	switch (className.replace(/validate-/gi, '')) {
		case 'zipcode': return oErrorMessages[0].message;
			break;
		case 'postaladdress': return oErrorMessages[1].message;
			break;
		case 'phoneday': return oErrorMessages[2].message;
			break;
		case 'phoneevening': return oErrorMessages[3].message;
			break;
		case 'email': return oErrorMessages[4].message;
			break;
	}
}
String.prototype.trim = function () {
  return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
};

