﻿var selFromCountry = document.getElementById("e2bFromCountry");
var selFromCity = document.getElementById("e2bFromCity");
var selToCountry = document.getElementById("e2bToCountry");
var selToCity = document.getElementById("e2bToCity");
var selOutMonth = document.getElementById("e2bSelOutMonth");
var selBackMonth = document.getElementById("e2bSelHomeMonth");
var tblOutMonth = document.getElementById("e2bTblOutMonth");
var tblBackMonth = document.getElementById("e2bTblBackMonth");
var outTravelDate, backTravelDate;
// Localized/config strings
var selectCityString = "Kies plaats"
var selectDepartureCity = "Selecteer bestemming";
var selectArrivalCity = "Selecteer bestemming";
var departureDatePriorReturnDate = "Heenreis mag niet later dan terugreisdatum zijn!";
var selectDepartureDate = "Kies vertrekdatum!";
var selectReturnDate = "Kies retourdatum!";
var agentID = "cwtnl501";

selFromCountry.onchange = changeFromCountry;
function changeFromCountry()
{
	setupCitySelector(selFromCountry, selFromCity);
}

selToCountry.onchange = changeToCountry;
function changeToCountry()
{
	setupCitySelector(selToCountry, selToCity);
}

function setupCitySelector(countrySel, citySel)
{
	var aCities = getCities(countrySel.options[countrySel.selectedIndex].value, selectCityString);
	var optionCount = citySel.options.length-1;
	for (var i = optionCount; i >= 0; i--)
		citySel.remove(i);
	for (var i = 0; i < aCities.length; i++)
	{
		try 
			{ citySel.add(createCitySelectorOption(aCities[i])); }
		catch (ex)
			{ citySel.add(createCitySelectorOption(aCities[i]), null); }
	}
}

function createCitySelectorOption(values)
{
	var o = document.createElement("option");
	var a = values.split("|");
	o.value = a[0]
	o.text = a[1];
	return o;
}

function getCities(id, selectString)
{
	var startSelector = "-1|" + selectCityString;
	var arrAE=new Array(startSelector, "DXB|Dubai");
	var arrAR=new Array(startSelector, "BUE|Buenos Aires");
	var arrAT=new Array(startSelector, "VIE|Wenen");
	var arrAW=new Array(startSelector, "AUA|Aruba");
	var arrAU=new Array(startSelector, "SYD|Sydney", "CBR|Canberra", "MEL|Melbourne");
	var arrBE=new Array(startSelector, "BRU|Brussel", "ANR|Antwerpen");
	var arrBR=new Array(startSelector, "SAO|Sao Paulo");
	var arrCA=new Array(startSelector, "YTO|Toronto", "YVR|Vancouver", "YYC|Calgary");
	var arrCU=new Array(startSelector, "HAV|Havana")
	var arrCZ=new Array(startSelector, "PRG|Praag");
	var arrDE=new Array(startSelector, "BER|Berlijn", "CGN|Keulen", "DUS|Düsseldorf", "FRA|Frankfurt", "HAM|Hamburg", "MUC|München", "STR|Stuttgart");
	var arrDK=new Array(startSelector, "CPH|Kopenhagen", "AAL|Aalborg", "AAR|Århus");
	var arrDO=new Array(startSelector, "STI|Santiago");
	var arrEE=new Array(startSelector, "TLL|Tallinn");
	var arrES=new Array(startSelector, "BCN|Barcelona", "MAD|Madrid", "VGO|Vigo", "AGP|Malaga", "TFS|Tenerife South", "TFN|Tenerife North");
	var arrFI=new Array(startSelector, "HEL|Helsinki", "OUL|Oulu", "TMP|Tampere", "TUR|Turku");
	var arrFR=new Array(startSelector, "PAR|Parijs", "LYS|Lyon", "NCE|Nice");
	var arrGB=new Array(startSelector, "LON|Londen", "BHX|Birmingham", "EDI|Edinburg", "MAN|Manchester");
	var arrGR=new Array(startSelector, "ATH|Athene");
	var arrGL=new Array(startSelector, "GOH|Nuuk", "JAV|Ilulissat (Jakobshavn)");
	var arrHK=new Array(startSelector, "HKG|Hong Kong");
	var arrID=new Array(startSelector, "CGK|Jakarta", "DPS|Denpasar Bali", "SUB|Surabaya")
	var arrIE=new Array(startSelector, "DUB|Dublin");
	var arrIN=new Array(startSelector, "BLR|Bangalore", "BOM|Bombay (Mumbai)", "DEL|Delhi");
	var arrIS=new Array(startSelector, "REK|Reykjavik");
	var arrIT=new Array(startSelector, "MIL|Milaan", "ROM|Rome");
	var arrJP=new Array(startSelector, "TYO|Tokyo");
	var arrKE=new Array(startSelector, "NBO|Nairobi");
	var arrCN=new Array(startSelector, "PEK|Beijing", "SHA|Shanghai", "CAN|Guanzhou");
	var arrLV=new Array(startSelector, "RIX|Riga");
	var arrLT=new Array(startSelector, "VNO|Vilnius");
	var arrLU=new Array(startSelector, "LUX|Luxemburg");
	var arrMQ=new Array(startSelector, "FDF|Fort de France");
	var arrMU=new Array(startSelector, "MRU|Mauritius");
	var arrMY=new Array(startSelector, "KUL|Kuala Lumpur", "LGK|Langkawi", "SDK|Sandakan");
	var arrMX=new Array(startSelector, "MEX|Mexico City");
	var arrNA=new Array(startSelector, "CUR|Willemstad", "BON|Bonaire");
	var arrNL=new Array(startSelector, "AMS|Amsterdam", "RTM|Rotterdam", "EIN|Eindhoven", "MST|Maastricht", "GRQ|Groningen");
	var arrNO=new Array(startSelector, "OSL|Oslo", "BGO|Bergen", "SVG|Stavanger", "LYR|Longyearbyen");
	var arrNZ=new Array(startSelector, "AKL|Auckland");
	var arrPL=new Array(startSelector, "WAW|Warschau");
	var arrPT=new Array(startSelector, "LIS|Lissabon", "OPO|Porto");
	var arrRO=new Array(startSelector, "OTP|Bucharest");
	var arrRU=new Array(startSelector, "MOW|Moskou");
	var arrCH=new Array(startSelector, "BSL|Basel", "GVA|Geneve", "ZRH|Zurich");
	var arrSG=new Array(startSelector, "SIN|Singapore");
	var arrSE=new Array(startSelector, "STO|Stockholm", "GOT|Göteborg");
	var arrSU=new Array(startSelector, "PBM|Paramaribo");
	var arrZA=new Array(startSelector, "CPT|Kaapstad", "JNB|Johannesburg");
	var arrTW=new Array(startSelector, "TPE|Taipei");
	var arrTH=new Array(startSelector, "BKK|Bangkok");
	var arrTR=new Array(startSelector, "IST|Istanbul");
	var arrTZ=new Array(startSelector, "JRO|Kilimanjaro");
	var arrUN=new Array(startSelector, "BUD|Budapest");
	var arrUS=new Array(startSelector, "ATL|Atlanta", "BOS|Boston", "CHI|Chicago", "DEN|Denver", "DFW|Dallas", "HOU|Houston", "LAS|Las Vegas", "LAX| Los Angeles", "MIA|Miami", "MKC|Kansas City", "MSP|Minneapolis", "NYC|New York", "ORL|Orlando", "RDU|Raleigh", "SAN|San Diego", "SJC|San José", "SEA|Seattle", "SFO|San Francisco", "WAS|Washington");
	var arrVN=new Array(startSelector, "HAN|Hanoi");
	try
		{ return eval("arr" + id); }
	catch (ex)
		{ return new Array(startSelector); }
}

// Month/date selector functions ------------------------------------------------------------------
function setMonthSelectors()
{
	for (var i = 0; i < 13; i++)
	{
		var d = Date.today().set({day:1}).addMonths(i);
		try
		{
			selOutMonth.add(createMonthSelectorOption(d));
			selBackMonth.add(createMonthSelectorOption(d));
		}
		catch (ex)
		{
			selOutMonth.add(createMonthSelectorOption(d), null);
			selBackMonth.add(createMonthSelectorOption(d), null);
		}
	}
	renderMonth(tblOutMonth, selOutMonth.options[0].value);
	selOutMonth.onchange = selectOutMonth;
	renderMonth(tblBackMonth, selBackMonth.options[0].value);
	selBackMonth.onchange = selectBackMonth;
}

function selectOutMonth(selectedDate)
{
	var selectedDate = selOutMonth.options[selOutMonth.selectedIndex].value;
	outTravelDate = null;
	renderMonth(tblOutMonth, selectedDate);
	setBackMonth(selectedDate);
}

function selectBackMonth()
{
	var selectedDate = selBackMonth.options[selBackMonth.selectedIndex].value;
	if (validateMonthSelectors(selectedDate))
		setBackMonth();
}

function setBackMonth(date)
{
	for (var i = 0; i < selBackMonth.options.length; i++)
	{
		if (date == selBackMonth.options[i].value) selBackMonth.selectedIndex = i;
	}
	backTravelDate = null;
	renderMonth(tblBackMonth, selBackMonth.options[selBackMonth.selectedIndex].value);
}

function validateMonthSelectors(date)
{
	var outDate = selOutMonth.options[selOutMonth.selectedIndex].value;
	if (Date.parseExact(outDate, "dd-MM-yyyy").compareTo(Date.parseExact(date, "dd-MM-yyyy")) == 1)
	{
		alert(departureDatePriorReturnDate);
		setBackMonth(outDate);
		return false;
	}
	return true;
}

function renderMonth(table, startDate)
{
	rowCount = table.rows.length-1;
	for (i = rowCount; i >= 0; i--)
		table.deleteRow(i);
	var headerRow = table.insertRow(0);
	var myDayNames = new Array("m","t","w","t","f","s","s");
	for (var i = 0; i < myDayNames.length; i++)
	{
		var cell = headerRow.insertCell(i);
		cell.style.textAlign = "center";
		cell.style.padding = "2px 0";
		cell.innerHTML = myDayNames[i].toUpperCase();
	}
	var month = Date.parseExact(startDate, "dd-MM-yyyy").getMonth();
	var firstDate = Date.parseExact(startDate, "dd-MM-yyyy").last().sunday();
	for (var i = 1; i < 7; i++)
	{
		var row = table.insertRow(i)
		for (var j = 0; j < 7; j++)
		{
			var cell = row.insertCell(j);
			cell.innerHTML = firstDate.addDays(1).toString("d");
			cell.id = table.id + firstDate.toString("yyyyMMdd")
			cell.style.border = "1px solid #dedede";
			cell.style.textAlign = "center";
			cell.style.padding = "2px 0";
			if (firstDate.getMonth() != month) cell.style.color = "#ccc";
			if (firstDate < Date.today()) 
				cell.style.backgroundColor = "#666666";
			else
				cell.onclick = selectDate;
		}
	}
}

function selectDate()
{
	if (this.id.indexOf("Out")>0)
	{
		outTravelDate = Date.parseExact(this.id.slice(-8), "yyyyMMdd");
		if (validateDates())
		{
			resetBackgrounds(tblOutMonth);
			this.style.background= "#f00";
		}
		else
		{
			resetBackgrounds(tblOutMonth);
			this.style.background= "#f00";
			backTravelDate = outTravelDate;
			resetBackgrounds(tblBackMonth);
			document.getElementById(tblBackMonth.id + outTravelDate.toString("yyyyMMdd")).style.background = "#f00";
		}
	}
	else
	{
		backTravelDate = 	Date.parseExact(this.id.slice(-8), "yyyyMMdd");
		if (validateDates())
		{
			resetBackgrounds(tblBackMonth);
			this.style.background= "#f00";
		}
		else
		{
			backTravelDate = outTravelDate;
			resetBackgrounds(tblBackMonth);
			document.getElementById(tblBackMonth.id + outTravelDate.toString("yyyyMMdd")).style.background = "#f00";
			alert(departureDatePriorReturnDate);
		}
	}
}

function resetBackgrounds(el)
{
	for (var i = 0; i < el.rows.length; i++)
		for (var j = 0; j < el.rows[i].cells.length; j++)
			if (el.rows[i].cells[j].onclick != null)
				el.rows[i].cells[j].style.background = "#E6E6E6";
	
}

function validateDates()
{
	if (backTravelDate == null)
		return true;
	if (outTravelDate.compareTo(backTravelDate) == 1)
		return false;
	return true;
}

function createMonthSelectorOption(date)
{
	var o = document.createElement("option");
	o.text = date.toString("MMMM yyyy");
	o.value = date.toString("dd-MM-yyyy");
	return o;
}

function setBackDateForm()
{
	if (document.getElementById("e2bTravelType1").checked)
	{
		document.getElementById("e2bBackMonthTd1").style.visibility = "visible";
		document.getElementById("e2bBackMonthTd2").style.visibility = "visible";
	}
	else
	{
		document.getElementById("e2bBackMonthTd1").style.visibility = "hidden";
		document.getElementById("e2bBackMonthTd2").style.visibility = "hidden";
	}
}

// Form and validation functions ------------------------------------------------------------------
function e2bSendForm()
{
	if (validateForm())
	{
		var location = "http://flights2.infosys.de/index.phtml?agent="+ agentID + "&AorK=K&pax=1&pax_chd=0&pax_inf=0&only_avail=Y"
		location += "&from=" + selFromCity.options[selFromCity.selectedIndex].value;
		location += "&Day=" + outTravelDate.toString("d");
		location += "&month_1=" + outTravelDate.toString("M-yyyy");
		location += "&to=" + selToCity.options[selToCity.selectedIndex].value;
		location += "&tarif_klasse=";
		location += document.getElementById("e2bTravelClassN").checked ? "N" : "JB";
		if (document.getElementById("e2bTravelType1").checked)
		{
			location += "&onewayswitch=0"
			location += "&RetDay=" + backTravelDate.toString("d");
			location += "&month_2=" + backTravelDate.toString("M-yyyy");
		}
		else
		{
			location += "&onewayswitch=1"
		}
		location += "&lang=en_GB"
		window.location = location;
	}
}

function validateForm()
{
	if (selFromCity.options[selFromCity.selectedIndex].value == "-1")
	{
		alert(selectDepartureCity);
		return false;
	}
	
	if (selToCity.options[selToCity.selectedIndex].value == -1)
	{
		alert(selectArrivalCity);
		return false;
	}
	
	if (!validateTravelDates())
			return false;
		
	return true;
}

function validateTravelDates()
{
	if (outTravelDate == null)
	{
		alert(selectDepartureDate);
		return false;
	}
	
	if (backTravelDate == null && document.getElementById("e2bTravelType1").checked)
	{
		alert(selectReturnDate);
		return false;
	}
	
	return true;
}

setMonthSelectors();
changeFromCountry();
changeToCountry();

