﻿function waitTillLast(inFunctionCall)
{
	if (document.getElementById("last"))
	{
		eval(inFunctionCall);
	}
	else
	{		
		setTimeout("waitTillLast('" + inFunctionCall + "')", 1);
	}
	
	return true;
}
      
function displayChildAgeBoxes(numChildFld, divName, totNum)
{
    var numChild = document.getElementById(numChildFld).value;
    document.getElementById(divName).style.display = numChild > 0 ? "" : "none";
    for (i=1; i<=numChild; i++)
        document.getElementById(divName + i).style.display = "";
    for (; i<=totNum; i++)
        document.getElementById(divName + i).style.display = "none";
}

function packageSubmit()
{
	// Get Room mixes

	var packageRoomMixes = getRoomMixes("package");
	var hotelRoomMixes = getRoomMixes("hotel");
	//var flightRoomMixes = getRoomMixes("flight");
	var toursRoomMixes = getRoomMixes("tours");
	var selectedTab = document.getElementById("selectedTab").value;	

	document.getElementById("roomMixes").value = packageRoomMixes;
	
	document.getElementById("packageSearch").value = "Search";
	
	var departureDate = document.getElementById("packageStartDate").value;
	var packageLocation = document.getElementById("packageLocation").value;
	
	var newLocation = window.location.pathname + "?";
	
	var forms = getBookingForms();
	
	for (var idx = 0; idx < forms.length; idx++)
	{
		newLocation += collateFields(forms[idx]);
	}
  
  	newLocation += ("roomMixes=" + packageRoomMixes + "&hotelRoomMixes=" + hotelRoomMixes);
    newLocation += ("roomMixes=" + packageRoomMixes + "&hotelRoomMixes=" + hotelRoomMixes);
	newLocation += ("&toursRoomMixes=" + toursRoomMixes);
	newLocation += ("&tabIndex=" + selectedTab);
	newLocation += ("&departureDate=" + departureDate);
	newLocation += ("&destinationRegion=" + packageLocation);
	location.href = newLocation;
}

function formSubmit(inFieldPrefix, inCategoryCode)
{
	// Get Room mixes

	var packageRoomMixes = getRoomMixes("package");
	var hotelRoomMixes = getRoomMixes("hotel");
//	var flightRoomMixes = getRoomMixes("flight"); 
	var toursRoomMixes = getRoomMixes("tours");
	var selectedTab = document.getElementById("selectedTab").value;
	var departureDate = document.getElementById(inFieldPrefix + "StartDate").value;
	var newLocation = validCcmInstance + "/onlinebooking.html?";
    var validation = window[inFieldPrefix + "Validation"];
	
	if (validation)
	{
		if (!validation())
			return(false);
	}
		
	if (inCategoryCode && inCategoryCode >= 0) {
		document.getElementById("packageSearch").value = "Search";
		if (inCategoryCode > 0)
			newLocation += "&orpCategory=" + inCategoryCode;
		var packageDestination = document.getElementById(inFieldPrefix +  "Location").value;				
		newLocation += ("&departureDate=" + departureDate);
		newLocation += ("&destinationRegion=" + packageDestination);			
	}
	
	var forms = getBookingForms();
	
	for (var idx = 0; idx < forms.length; idx++)
	{
		newLocation += collateFields(forms[idx]);
	}

 	newLocation += ("roomMixes=" + packageRoomMixes + "&hotelRoomMixes=" + hotelRoomMixes);
    newLocation += ("roomMixes=" + packageRoomMixes + "&hotelRoomMixes=" + hotelRoomMixes);
	newLocation += ("&toursRoomMixes=" + toursRoomMixes);
	newLocation += ("&tabIndex=" + selectedTab);
	
	newLocation += "&kickOff=" + inFieldPrefix + "Form";
	
	location.href = newLocation;
}

function orpSubmit(inCategoryCode, inFieldPrefix)
{
	// Get Room mixes

	var packageRoomMixes = getRoomMixes("package");
	var hotelRoomMixes = getRoomMixes("hotel");
	//var flightRoomMixes = getRoomMixes("flight");
	var toursRoomMixes = getRoomMixes("tours");
	var selectedTab = document.getElementById("selectedTab").value;
	var departureDate = document.getElementById(inFieldPrefix + "StartDate").value;
	var packageLocation = document.getElementById(inFieldPrefix +  "Location").value;
	
	document.getElementById("packageSearch").value = "Search";
	
	
	var newLocation = window.location.pathname + "?orpCategory=" + inCategoryCode + "&";
	
	var forms = getBookingForms();
	
	for (var idx = 0; idx < forms.length; idx++)
	{
		newLocation += collateFields(forms[idx]);
	}
	newLocation += ("roomMixes=" + packageRoomMixes + "&hotelRoomMixes=" + hotelRoomMixes);
	newLocation += ("&toursRoomMixes=" + toursRoomMixes);
	newLocation += ("&tabIndex=" + selectedTab);
	
	newLocation += ("&departureDate=" + departureDate);
	newLocation += ("&destinationRegion=" + packageLocation);

	location.href = newLocation;
}

function getBookingForms()
{
	var forms = document.getElementsByTagName("form");
	var returnForms = new Array();

	for (var i = 0; i < forms.length; i++)
	{
		if (forms[i].className.match(/getContent/))
		{
			returnForms.push(forms[i]);
		}
	}
	
	return(returnForms);
}

function collateFields(inForm)
{
	var inputs = inForm.getElementsByTagName("input");
	var newLocation = "";
	
	for (var idx = 0; idx < inputs.length; idx++)
	{
		var fld = inputs[idx];
		

		
		if (fld.id && fld.id.length > 0) {
			if (fld.type == "checkbox")
			{
				newLocation += (fld.id + "=true&");
			}

			else if (fld.type != "hidden") 
			{
				newLocation += (fld.id + "=" + fld.value + "&");
			}
			
			else if (fld.type == "hidden" && hasClass(fld, "includeInUrl"))
			{
				newLocation += (fld.id + "=" + fld.value + "&");
			}
		}
	}
	
	var selects = inForm.getElementsByTagName("select");
	for (var idx2 = 0; idx2 < selects.length; idx2++)
	{
		var fld = selects[idx2];
		var value = fld.options[fld.selectedIndex].value;
		
		if (fld.id && fld.id.length > 0)
			newLocation += (fld.id + "=" + value + "&");
	}	
	
	return(newLocation);
		
}

function kickOff(inFormId)
{
	var form = document.getElementById(inFormId);
	if (form)
	{
		form.onsubmit();
	}
}

// Code nicked (in part) from http://snipplr.com/view/1696/get-elements-by-class-name/

function hasClass(inElement, inClass)
{
	var testClass = new RegExp("(^|\\\\s)" + inClass + "(\\\\s|$)");

	return(testClass.test(inElement.className));
	
}

function hotelBook()
{
	var roomMixes = getRoomMixes("hotel");
	var duration = document.getElementById("hotelDuration").value;
	var hotelLocn = document.getElementById("hotelLocation").value;
	var packageCode = document.getElementById("hotelPackageCode").value;	
	var startDate = document.getElementById("hotelStartDate").value;

	if (!hotelValidation())
		return(false);

	runCommon(convertDateDDMMYYYY(startDate), "hotel");

	package.addGlobalParameter("duration", duration);
	package.addGlobalParameter("htlCity", hotelLocn);
	package.start(packageCode, parseStartDate(startDate), roomMixes);

	return(false);
}

function hotelValidation()
{
	var hotelLocn = document.getElementById("hotelLocation").value;
	if (hotelLocn.length == 0) {
		alert("Please specify a location");
		return(false);
	}	
	return(true);
}

function toursBook()
{
	var roomMixes = getRoomMixes("tours");
	var toursLocn = document.getElementById("toursLocation").value;
	var packageCode = document.getElementById("toursPackageCode").value;	
	var startDate = document.getElementById("toursStartDate").value;
	var duration = document.getElementById("toursDuration").value;
	if (!toursValidation())
		return(false);
	runCommon(convertDateDDMMYYYY(startDate), "tours");

	package.addGlobalParameter("htlCity", toursLocn);
	package.addGlobalParameter("duration", duration);
	package.addGlobalParameter("hideNights", "true");
	package.start(packageCode, parseStartDate(startDate), roomMixes);

	return(false);
}

function toursValidation()
{
	var toursLocn = document.getElementById("toursLocation").value;
	
	if (toursLocn.length == 0) {
		alert("Please specify a location");
		return(false);
	}	
	return(true);
}
/*
function flightBook()
{
	var roomMixes = getRoomMixes("flight");
	var flightDeparture = document.getElementById("flightDeparture").value;
	var flightDestination = document.getElementById("flightDestination").value;	
	var startDate = document.getElementById("flightStartDate").value;
	var endDate = document.getElementById("flightEndDate").value;
	var carriers = document.getElementById("flightCarrierCodes").value;
	var flightTransfer = document.getElementById("flightTransfer").checked;
	var packageCode;
	if (flightTransfer)
		packageCode = "td_fthmmmm";	
	else
		packageCode = "td_fhmmmm"
	
	var duration;

	if (!flightValidation())
		return(false);
			
	runCommon(convertDateDDMMYYYY(startDate), "flight");

    var retDate = new Date(convertDate(endDate));	
	var depDate = new Date(convertDate(startDate)); 
    var oneDay = 1000*60*60*24;
    var duration = Math.ceil((retDate.getTime() - depDate.getTime()) / oneDay);
	
	package.addGlobalParameter("fltFromCity", flightDeparture);
	package.addGlobalParameter("fltToCity", flightDestination);
	package.addGlobalParameter("htlCity", flightDestination);
	package.addGlobalParameter("duration", duration);
	package.addGlobalParameter("carrierCodes", carriers);
	package.start(packageCode, parseStartDate(startDate), roomMixes);

	return(false); 
}  

function flightValidation()
{
	var flightDeparture = document.getElementById("flightDeparture").value;
	var flightDestination = document.getElementById("flightDestination").value;	
	var packageCode = document.getElementById("flightPackageCode").value;	
	var endDate = document.getElementById("flightEndDate").value;
	var errors = "";
		
	if (endDate == null || endDate.length == 0) {
		errors += "- Specified a valid returning date\n"
	}
	
	if (flightDeparture == null || flightDeparture.length == 0)
	{
		errors += "- Specified a departing point\n";
	}
	
	if (flightDestination == null || flightDestination.length == 0)
	{
		errors += "- Specified a returning point\n"
	}
	

	if (errors != "")
	{
		alert("Please ensure you have ... \n" + errors);
		return(false);
	}	
	return(true);
}
*/
function changePackageCode()
{
	var hasTransfer = document.getElementById("flightTransfer").checked;

	if (hasTransfer)
	{
		document.getElementById("flightPackageCode").value = 'td_fthmmmm'
	}
	else
	{
		document.getElementById("flightPackageCode").value = 'td_fhmmmm'
	}
}

function updatePackageSearch()
{
	document.getElementById("packageSearc").value = Search;
	return(true);
}

function parseStartDate(inStartDate)
{
	return parseUserFmtDate(inStartDate).print("%d/%m/%Y")
}

function getRoomMixes(inPrefix)
{
    var roomMixes = "";
	var adultCount = document.getElementById(inPrefix + "NumberAdults").value;
	var childCount = document.getElementById(inPrefix + "NumberChildren").value;
	
	if (adultCount == 0) return roomMixes;
	
	roomMixes = adultCount + "A";
	
	if (childCount > 0)
	{
		roomMixes += childCount + "C";
		
		for (i=1; i<= childCount; i++)
		{
			roomMixes += "-" + document.getElementById(inPrefix + "ChildAge" +  i).value ;
		}
	}

	return(roomMixes);
}

// The following relates to the history support



function revealFirst(inDefaultTab)
{
	 // Forces this to be displayed 
	 var isReady = document.getElementById("last");
	 if (!isReady) setTimeout("revealFirst()", 1);
	 var anchorString = window.location.hash;
	 
	 if (anchorString)
	 {
		switchTab(anchorString.substr(1));
	 }
	 else
	 {
		TT.ttshow(inDefaultTab);
	 }
}	

/** Our callback to receive history change
  events. */
 
function initialize() 
{
	// initialize the DHTML History
	// framework
	callLast();	
  /*	dhtmlHistory.initialize();
	if (dhtmlHistory.isFirstLoad())
	{ 
		revealFirst(glbDefaultTab);
	}
	// subscribe to DHTML history change events
	dhtmlHistory.addListener(historyChange); */

}

function historyChange(newLocation, historyData) 
{
    switchTab(newLocation);               
}


function switchTab(inAnchorString)
{
	var paramsArray = getParams(inAnchorString);
	
	var form;
	
	for (var idx = 0; idx < paramsArray.length; idx++) {
		var aParam = paramsArray[idx];

		if (aParam.key == 'tab') 
		{
			TT.ttshow(aParam.value);
		}
		else if (aParam.key.match("^input-")) 
		{
			var inputFld = aParam.key.replace("input-", "");
			var field = document.getElementById(inputFld)
			if (field) 
			{
				field.value = aParam.value;

				if (field.onchange) {
					eval(field.getAttribute("onchange"));
				}
			}
		}
	}
}

function setupAnchor()
{
  var anchorString = "tab=" + glbSelectedTab;
  

  var bkListInputs = document.getElementById("bkList").getElementsByTagName("input");
  var bkListSelects = document.getElementById("bkList").getElementsByTagName("select");

  for (idx = 0; idx < bkListInputs.length; idx++)
  {
  	  var id = bkListInputs[idx].id;
	  var value =  bkListInputs[idx].value;
  	  if (bkListInputs[idx].id && bkListInputs[idx].id.length > 0)
	      anchorString += ("&input-" + bkListInputs[idx].id + "=" + bkListInputs[idx].value);
  }

  for (idx = 0; idx < bkListSelects.length; idx++)
  {
  	  var id = bkListSelects[idx].id;
	  var value =  bkListSelects[idx].value;
  	  if (bkListSelects[idx].id && bkListSelects[idx].id.length > 0)
	      anchorString += ("&input-" + bkListSelects[idx].id + "=" + bkListSelects[idx].value);
  }
   
  // dhtmlHistory.add(anchorString, "");	
}

function getParams(inAnchorString)
{
	var params = inAnchorString.split("&");
	var paramsArray = new Array();
	
	for (var idx2=0;idx2<params.length;idx2++)
	{
		var paramSplit = params[idx2].split("=");
		
		var aParam = new Object();
		
		aParam.key = paramSplit[0];
		aParam.value = paramSplit[1];
		
		paramsArray.push(aParam)
	}	
	return(paramsArray);
}

function quickRerun(inPackage, inStartDate, inRoomMixes)
{
    nPkgRetry++;
    package.addGlobalParameter("previous_package_start_" + nPkgRetry, inStartDate);
    package.start(inPackage, inStartDate, inRoomMixes);
    
}

function formLoad(inTodaysDate)
{
 	var offset = 14;

	var startDate = convertToDateStr(getOffsetDate(inTodaysDate, offset));
	var startDate2 = convertToDateStr(getOffsetDate(inTodaysDate, offset + 2));
	var endDate = convertToDateStr(getOffsetDate(inTodaysDate, 365));
	
	document.getElementById("startDate").value = startDate;
	document.getElementById("startDate2").value = startDate2;
	document.getElementById("endDate").value = endDate;
	
	initCalDate("hotelStartDate", startDate, endDate, null, false);
	initCalDate("toursStartDate", startDate, endDate, null, false);
	initCalDate("packageStartDate", startDate, endDate, null, true);
	initCalDate("cruiseStartDate", startDate, endDate, null, true);
	initCalDate("carStartDate", startDate, endDate, null, true);
	initCalDate("extToursStartDate", startDate, endDate, null, true);

	//initCalDate("flightStartDate", startDate, endDate, onFltDurSelect, false);
	//initCalDate("flightEndDate", startDate2, endDate, onFltDurSelect, false); 
}

function convertToDateStr(inDate)
{
	var month = inDate.getMonth() + 1;
	var day = inDate.getDate();
	var year = inDate.getFullYear();
	
	month = (month.toString().length == 1) ? "0" + month : month;
	day = (day.toString().length == 1) ? "0" + day : day;
	
	return(month + "/" + day + "/" + year);
}


function initCalDate(inFldId, inStartDate, inEndDate, inDateSelect, inDefaultBlank)
{
	var dateSelect = (inDateSelect) ? inDateSelect : onSelect;
	initNormCalendar(inFldId, inStartDate, inStartDate, inEndDate, '', dateSelect, onClose, inDefaultBlank);
}
    
function getOffsetDate(inDate, inOffset)
{
	var retDate = new Date(inDate);
	retDate.setDate(retDate.getDate() + inOffset)
	return(retDate);			  
}

var TT = {
  ttshow : function(inOption){
      var sfEls = document.getElementById("bkList").getElementsByTagName("dd");
      
      var selectedTabInput = document.getElementById("selectedTab");
      if (selectedTabInput)
      {
        selectedTabInput.value = inOption;
      }
      
      for (var i=0; i<sfEls.length + 1; i++) {
        if (i != 2)
            document.getElementById("menu"+i).style.display = "none"; 
      }
      
      document.getElementById("menu"+inOption).style.display = "block";
  }
}
