/*
  $Id$
  Name: search_form.js
  Author: Tanvir Ahmed
  Copyright: (c) Metafour UK Ltd.
 
  Description: Functions on Latebreaks booking form page 
*/

var isIE = (navigator.userAgent.indexOf("MSIE") >= 0);

var ports_london = new Array('LON', 'LHR', 'LGW', 'LTN', 'STN', 'LCY');
var ports_uk = new Array('ABZ', 'BHD', 'BFS', 'BHX', 'BLK', 'BOH', 
			'BRS', 'CWL', 'MME', 'EDI', 'EXT', 'GLA', 
			'PIK', 'GCI', 'JER', 'LBA', 'LPL', 'MAN', 
			'NCL', 'NWI', 'EMA', 'DSA', 'SOU');

function loadOrigin() {
	var originCity = document.getElementById('originCity');

	var option = new Option('------ London -------', '');
	originCity.options[originCity.options.length] = option;
	for (var i in ports_london) {
		if (origs[ports_london[i]]) {
			var port = origs[ports_london[i]][0].split('-');
			var code = port[0].replace(/^\s*|\s*$/g,"");
			var name = port[1].replace(/^\s*|\s*$/g,"");
			var option = new Option(name, code);
			originCity.options[originCity.options.length] = option;
		}
	}

	var option = new Option('------ Rest of the UK -------', '');
	originCity.options[originCity.options.length] = option;
	for (var i in ports_uk) {
		if (origs[ports_uk[i]]) {
			var port = origs[ports_uk[i]][0].split('-');
			var code = port[0].replace(/^\s*|\s*$/g,"");
			var name = port[1].replace(/^\s*|\s*$/g,"");
			var option = new Option(name, code);
			originCity.options[originCity.options.length] = option;
		}
	}

	var option = new Option('------ Europe & Others -------', '');
	originCity.options[originCity.options.length] = option;
	for (var i in origs) {
		// skip pre-selected items
		if (origs[i][0]) {
			var port = origs[i][0].split('-');
			var code = port[0].replace(/^\s*|\s*$/g,"");
			var name = port[1].replace(/^\s*|\s*$/g,"");
			var option = new Option(name, code);
			originCity.options[originCity.options.length] = option;
		}
	}

	var selectedOriginCity = document.getElementById('selectedOriginCity');
	if (selectedOriginCity && selectedOriginCity.value != '') {
		originCity.value = selectedOriginCity.value;
		loadDestination();
	}
}

function loadDestination() {
	var originCity = document.getElementById('originCity');
	var orig = originCity.value;

	var destinationCity = document.getElementById('destinationCity');

	while (destinationCity.options.length > 1) {
		destinationCity.options[destinationCity.options.length-1] = null;
	}

	var dests = origs[orig][1];
	if (dests) {
		for (var i=0; i<dests.length-1; i++) {
			var port = dests[i].split('-');
			var code = port[0].replace(/^\s*|\s*$/g,"");
			var name = port[1].replace(/^\s*|\s*$/g,"");
			var option = new Option(name, code);
			destinationCity.options[destinationCity.options.length] = option;
		}
	}

	var selectedDestinationCity = document.getElementById('selectedDestinationCity');
	if (selectedDestinationCity && selectedDestinationCity.value != '') {
		destinationCity.value = selectedDestinationCity.value;
	}
}

/*
 * Toggle selections according to the booking type
 * 170309 changed by Sunny: Allocate guests to each room
 */
function bookingTypeChanged(which) {
	// reset form
	document.getElementById("labelOrig").innerHTML = "From";
	document.getElementById("labelDepart").innerHTML = "Depart";
	document.getElementById("labelDest").style.visibility = "visible";
	document.getElementById("destinationCity").style.display = "";
	document.getElementById("labelReturn").innerHTML = "Return";
	document.getElementById("labelDouble").style.display = "";
	document.getElementById("doubleRooms").style.display = "";
	document.getElementById("labelTwin").style.display = "";
	document.getElementById("twinRooms").style.display = "";
	document.getElementById("labelSingle").style.display = "";
	document.getElementById("singleRooms").style.display = "";
	document.getElementById("pax_room").style.display = "";
	document.getElementById("pax").style.display = "none";
	if (which.value == 'B') {
		// nothing to do
	}
	if (which.value == 'H') {
		document.getElementById("labelOrig").innerHTML = "Destination";
		document.getElementById("labelDepart").innerHTML = "Check-in";
		document.getElementById("labelDest").style.visibility = "hidden";
		document.getElementById("destinationCity").style.display = "none";
		document.getElementById("labelReturn").innerHTML = "Check-out";
	}
	if (which.value == 'F') {
		document.getElementById("labelDouble").style.display = "none";
		document.getElementById("doubleRooms").style.display = "none";
		document.getElementById("labelTwin").style.display = "none";
		document.getElementById("twinRooms").style.display = "none";
		document.getElementById("labelSingle").style.display = "none";
		document.getElementById("singleRooms").style.display = "none";
		document.getElementById("pax_room").style.display = "none";
		document.getElementById("pax").style.display = "";
	}
}

function dateChanged(which) {
	var departDate = document.getElementById('departDate');
	var returnDate = document.getElementById('returnDate');
	var dd = parseDate(departDate.value, true);
	var dr = parseDate(returnDate.value, true);
	if ((dr.valueOf() - dd.valueOf()) <  0) {
		// keep the changed date, adjust the other
		if (which.id == 'departDate') {
			returnDate.value = departDate.value; 
		} else if (which.id == 'returnDate') {
			departDate.value = returnDate.value;
		}
	}
}

function simpleCalendar(trigger) {
	var target = trigger;

	if (trigger.id == 'departCal') {
		target = document.getElementById('departDate');
	}
	if (trigger.id == 'returnCal') {
		target = document.getElementById('returnDate');
	}
	scwNextAction = dateChanged.runsAfterSCW(trigger, target);
	scwShow(target, trigger);
}

function initPlanForm() {
	var bookingType = document.getElementsByName("bookingType");
	for (i=0; i<bookingType.length; i++) {
		if (bookingType[i].checked) {
			bookingTypeChanged(bookingType[i]);
		}
	}
	loadOrigin();
	// 170309 added by Sunny: Reload passenger allocations
	loadPaxRoom();
}

/*
 * Reload passenger allocations according to room selection
 * 170309 added by Sunny
 */
function loadPaxRoom() {
	// Remember the current selection and clear it
	var allocation = new Array();
	var selectsToRemove = new Array();
	var selects = document.getElementsByTagName("select");
	var j = 0;
	for (var i = 0; i < selects.length; i++) {
		var select = selects[i];
		var id = select.id;
		if (id.substr(0, 9) == "numAdults" && id != "numAdults") {
			allocation[id] = [select.value];
			selectsToRemove[j++] = select;
		}		
	}
	for (var i = 0; i < selectsToRemove.length; i++) {
		var select = selectsToRemove[i];
		select.parentNode.parentNode.parentNode.removeChild(select.parentNode.parentNode);
	}
	// Reload
	var double = document.getElementById("doubleRooms").value;
	var twin = document.getElementById("twinRooms").value;
	var single = document.getElementById("singleRooms").value;
	if (!double && !twin && !single) {
		// No room selected
		return;
	}	
	showPaxRoom("D", double, allocation);
	showPaxRoom("T", twin, allocation);
	showPaxRoom("S", single, allocation);
}

/*
 * Show room allocations of "type" "number" of times
 * 170309 added by Sunny
 */
function showPaxRoom(type, number, allocation) {
	var div = document.getElementById("pax_room");
	for (var i = 1; i <= number; i++) {
		var html  = "<div class=\"row_pax\">";
		html     += "  <span class=\"label_room\">";
		html     += "    <select id=\"numAdults" + type + i + "\" name=\"numAdults" + type + i + "\">";
		var end = (type == "S" ? 2 : 3);
		for (var j = 0; j < end; j++) {
			html += "      <option value=\"" + j + "\"";
			if (allocation["numAdults" + type + i] == j) {
				html += " selected";
			}
			html += ">" + j + "</option>";
		}
		html     += "    </select>";
		html     += "  </span>";
		var index = "";
		if (i == 1) {
			index = "1st";
		} else if (i == 2) {
			index = "2nd";
		} else if (i == 3) {
			index = "3rd";
		} else {
			index = i + "th";
		}
		var room = "";
		if (type == "D") {
			room = "Double";
		} else if (type == "T") {
			room = "Twin";
		} else if (type == "S") {
			room = "Single";
		}
		html     += "  <span>in " + index + " " + room + "</span>";
		html     += "</div>";
		div.innerHTML += html;	
	}
} 