/********************************
Departure airport code mappings
********************************/
var aberdeenMapping=new Object();
aberdeenMapping.searchTerms=["aberdeen", "abz"];
aberdeenMapping.multicomCode="ABZ";

var belfastCityMapping=new Object();
belfastCityMapping.searchTerms=["belfast city", "belfast city george best", "george best", "bhd"];
belfastCityMapping.multicomCode="BHD";

var belfastInternationalMapping=new Object();
belfastInternationalMapping.searchTerms=["belfast international", "belfast int", "bfs"];
belfastInternationalMapping.multicomCode="BFS";

var birminghamInternationalMapping=new Object();
birminghamInternationalMapping.searchTerms=["birmingham", "birmingham int", "birmingham international", "bhx"];
birminghamInternationalMapping.multicomCode="BHX";

var blackpoolMapping=new Object();
blackpoolMapping.searchTerms=["blackpool", "blk"];
blackpoolMapping.multicomCode="BLK";

var bournemouthMapping=new Object();
bournemouthMapping.searchTerms=["bournemouth", "boh"];
bournemouthMapping.multicomCode="BOH";

var bristolMapping=new Object();
bristolMapping.searchTerms=["bristol", "brs"];
bristolMapping.multicomCode="BRS";

var cardiffMapping=new Object();
cardiffMapping.searchTerms=["cardiff", "cvt"];
cardiffMapping.multicomCode="CVT";

var coventryMapping=new Object();
coventryMapping.searchTerms=["coventry", "cwl"];
coventryMapping.multicomCode="CWL";

var doncasterMapping=new Object();
doncasterMapping.searchTerms=["doncaster", "sheffield", "doncaster sheffield", "dsa", "doncaster - sheffield", "doncaster / sheffield", "doncaster/sheffield"];
doncasterMapping.multicomCode="DSA";

var dundeeMapping=new Object();
dundeeMapping.searchTerms=["dundee", "dnd"];
dundeeMapping.multicomCode="DND";

var durhamMapping=new Object();
durhamMapping.searchTerms=["durham", "tees", "valley", "tees valley", "durham tees valley", "mme"];
durhamMapping.multicomCode="MME";

var eastMidlandsMapping=new Object();
eastMidlandsMapping.searchTerms=["east midlands", "midlands", "ema"];
eastMidlandsMapping.multicomCode="EMA";

var edinburghMapping=new Object();
edinburghMapping.searchTerms=["edinburgh", "midlands", "edi"];
edinburghMapping.multicomCode="EDI";

var exeterMapping=new Object();
exeterMapping.searchTerms=["exeter", "ext"];
exeterMapping.multicomCode="EXT";

var glasgowMapping=new Object();
glasgowMapping.searchTerms=["glasgow", "gla"];
glasgowMapping.multicomCode="GLA";

var glasgowPrestwickMapping=new Object();
glasgowPrestwickMapping.searchTerms=["glasgow prestwick", "prestwick", "pik"];
glasgowPrestwickMapping.multicomCode="PIK";

var guernseyMapping=new Object();
guernseyMapping.searchTerms=["guernsey", "gci"];
guernseyMapping.multicomCode="GCI";

var humbersideMapping=new Object();
humbersideMapping.searchTerms=["humberside", "huy"];
humbersideMapping.multicomCode="HUY";

var invernessMapping=new Object();
invernessMapping.searchTerms=["inverness", "inv"];
invernessMapping.multicomCode="INV";

var islayMapping=new Object();
islayMapping.searchTerms=["islay", "ily"];
islayMapping.multicomCode="ILY";

var isleOfManMapping=new Object();
isleOfManMapping.searchTerms=["isle of man", "iom"];
isleOfManMapping.multicomCode="IOM";

var jerseyMapping=new Object();
jerseyMapping.searchTerms=["jersey", "jer"];
jerseyMapping.multicomCode="JER";

var kirkwallMapping=new Object();
kirkwallMapping.searchTerms=["kirkwall", "koi"];
kirkwallMapping.multicomCode="KOI";

var knockMapping=new Object();
knockMapping.searchTerms=["knock", "noc"];
knockMapping.multicomCode="NOC";

var leedsMapping=new Object();
leedsMapping.searchTerms=["leeds", "bradford", "leeds bradford", "lba"];
leedsMapping.multicomCode="LBA";

var liverpoolMapping=new Object();
liverpoolMapping.searchTerms=["liverpool", "liverpool john lennon", "john lennon", "lennon", "lpl"];
liverpoolMapping.multicomCode="LPL";

var londonAllMapping=new Object();
londonAllMapping.searchTerms=["london", "london all", "london any", "lon"];
londonAllMapping.multicomCode="LON";

var londonCityMapping=new Object();
londonCityMapping.searchTerms=["london city", "city", "lcy"];
londonCityMapping.multicomCode="LCY";

var londonGatwickMapping=new Object();
londonGatwickMapping.searchTerms=["london gatwick", "gatwick", "lgw"];
londonGatwickMapping.multicomCode="LGW";

var londonHeathrowMapping=new Object();
londonHeathrowMapping.searchTerms=["london heathrow", "heathrow", "lhr"];
londonHeathrowMapping.multicomCode="LHR";

var londonLutonMapping=new Object();
londonLutonMapping.searchTerms=["london luton", "luton", "ltn"];
londonLutonMapping.multicomCode="LTN";

var londonSouthendMapping=new Object();
londonSouthendMapping.searchTerms=["london southend", "southend", "sen"];
londonSouthendMapping.multicomCode="SEN";

var londonStanstedMapping=new Object();
londonStanstedMapping.searchTerms=["london stansted", "stansted", "stn"];
londonStanstedMapping.multicomCode="STN";

var londonderryMapping=new Object();
londonderryMapping.searchTerms=["londonderry", "ldy"];
londonderryMapping.multicomCode="LDY";

var manchesterMapping=new Object();
manchesterMapping.searchTerms=["manchester", "man"];
manchesterMapping.multicomCode="MAN";

var newcastleMapping=new Object();
newcastleMapping.searchTerms=["newcastle", "ncl"];
newcastleMapping.multicomCode="NCL";

var newquayMapping=new Object();
newquayMapping.searchTerms=["newquay", "nqy"];
newquayMapping.multicomCode="NQY";

var norwichMapping=new Object();
norwichMapping.searchTerms=["norwich", "nwi"];
norwichMapping.multicomCode="NWI";

var plymouthMapping=new Object();
plymouthMapping.searchTerms=["plymouth", "plh"];
plymouthMapping.multicomCode="PLH";

var southamptonMapping=new Object();
southamptonMapping.searchTerms=["southampton", "sou"];
southamptonMapping.multicomCode="SOU";

var stornowayMapping=new Object();
stornowayMapping.searchTerms=["stornoway", "syy"];
stornowayMapping.multicomCode="SYY";

var wickMapping=new Object();
wickMapping.searchTerms=["wick", "wic"];
wickMapping.multicomCode="WIC";

var departureAirportCodeMapping=[aberdeenMapping, belfastCityMapping, belfastInternationalMapping, birminghamInternationalMapping, blackpoolMapping, bournemouthMapping, bristolMapping, cardiffMapping, coventryMapping, doncasterMapping, dundeeMapping, durhamMapping, eastMidlandsMapping, edinburghMapping, exeterMapping, glasgowMapping, glasgowPrestwickMapping, guernseyMapping, humbersideMapping, invernessMapping, islayMapping, isleOfManMapping, jerseyMapping, kirkwallMapping, knockMapping, leedsMapping, liverpoolMapping, londonAllMapping, londonCityMapping, londonGatwickMapping, londonHeathrowMapping, londonLutonMapping, londonSouthendMapping, londonStanstedMapping, londonderryMapping, manchesterMapping, newcastleMapping, newquayMapping, norwichMapping, plymouthMapping, southamptonMapping, stornowayMapping, wickMapping];

/********************************
Destination airport code mappings
********************************/
var banjulMapping=new Object();
banjulMapping.searchTerms=["banjul", "gambia", "banjul gambia", "gambia banjul", "gambia, banjul", "banjul, gambia", "bjl"];
banjulMapping.multicomCode="BJL";

var holguinMapping=new Object();
holguinMapping.searchTerms=["holguin", "holguin, cuba", "holguin cuba", "hog"];
holguinMapping.multicomCode="HOG";


var luxorMapping=new Object();
luxorMapping.searchTerms=["luxor", "luxor, egypt", "luxor egypt", "lxr"];
luxorMapping.multicomCode="LXR";

var varaderoMapping=new Object();
varaderoMapping.searchTerms=["varadero", "varadero, cuba", "varadero cuba", "vra"];
varaderoMapping.multicomCode="VRA";

var goaMapping=new Object();
goaMapping.searchTerms=["goa", "goa, india", "goa india", "goi"];
goaMapping.multicomCode="GOI";

var innsbruckMapping=new Object();
innsbruckMapping.searchTerms=["innsbruck", "innsbruck, austria", "innsbruck austria", "inn"];
innsbruckMapping.multicomCode="INN";

var salzburgMapping=new Object();
salzburgMapping.searchTerms=["salzburg", "salzburg, austria", "salzburg austria", "szg"];
salzburgMapping.multicomCode="SZG";

var luxurMapping=new Object();
luxurMapping.searchTerms=["luxor", "luxor, egypt", "luxor egypt", "lxr"];
luxurMapping.multicomCode="LXR";

var lanzaroteMapping=new Object();
lanzaroteMapping.searchTerms=["lanzarote", "lanzarote, canary islands", "lanzarote canary islands", "ace"];
lanzaroteMapping.multicomCode="ACE";

var fuerteventuraMapping=new Object();
fuerteventuraMapping.searchTerms=["fuerteventura", "fuerteventura, canary islands", "fuerteventura canary islands", "fue"];
fuerteventuraMapping.multicomCode="FUE";

var granCanariaMapping=new Object();
granCanariaMapping.searchTerms=["gran canaria", "gran canaria, canary islands", "gran canaria canary islands", "lpa"];
granCanariaMapping.multicomCode="LPA";

var tenerifeMapping=new Object();
tenerifeMapping.searchTerms=["tenerife", "tenerife, canary islands", "tenerife canary islands", "tfs"];
tenerifeMapping.multicomCode="TFS";

var sharmElSheikhMapping=new Object();
sharmElSheikhMapping.searchTerms=["sharm el sheikh", "sharm", "sharm el sheikh, egypt", "sharm el sheikh egypt", "ssh"];
sharmElSheikhMapping.multicomCode="SSH";

var hurghadaMapping=new Object();
hurghadaMapping.searchTerms=["hurghada", "hurghada, egypt", "hurghada egypt", "hrg"];
hurghadaMapping.multicomCode="HRG";

var paphosMapping=new Object();
paphosMapping.searchTerms=["paphos", "cyprus", "paphos cyprus", "paphos, cyprus", "pfo"];
paphosMapping.multicomCode="PFO";

var antalyaMapping=new Object();
antalyaMapping.searchTerms=["antalya", "antalya turkey", "antalya, turkey", "ayt"];
antalyaMapping.multicomCode="AYT";

var bodrumMapping=new Object();
bodrumMapping.searchTerms=["bodrum", "bodrum turkey", "bodrum, turkey", "bjv"];
bodrumMapping.multicomCode="BJV";

var dalamanMapping=new Object();
dalamanMapping.searchTerms=["dalaman", "dalaman turkey", "dalaman, turkey", "dlm"];
dalamanMapping.multicomCode="DLM";

var funchalMapping=new Object();
funchalMapping.searchTerms=["funchal", "portugal", "funchal, portugal", "funchal portugal",  "fnc"];
funchalMapping.multicomCode="FNC";

var sanfordMapping=new Object();
sanfordMapping.searchTerms=["sanford", "florida", "sanford, florida", "sanford florida",  "sfb"];
sanfordMapping.multicomCode="SFB";

var zanteMapping=new Object();
zanteMapping.searchTerms=["zante", "zante, greece", "zante greece",  "zth"];
zanteMapping.multicomCode="ZTH";

var mahonMapping=new Object();
mahonMapping.searchTerms=["mahon", "menorca", "balearics", "menorca balearics", "menorca, balearics", "mah"];
mahonMapping.multicomCode="MAH";

var faroMapping=new Object();
faroMapping.searchTerms=["faro", "faro portugal", "faro, portugal", "faro algarve", "faro, algarve", "fao"];
faroMapping.multicomCode="FAO";

var alicanteMapping=new Object();
alicanteMapping.searchTerms=["alicante", "alicante costa blanca", "alicante, costa blanca", "alc"];
alicanteMapping.multicomCode="ALC";

var malagaMapping=new Object();
malagaMapping.searchTerms=["malaga", "malaga costa del sol", "malaga, costa del sol", "agp"];
malagaMapping.multicomCode="AGP";

var larnacaMapping=new Object();
larnacaMapping.searchTerms=["larnaca", "larnaca cyprus", "larnaca, cyprus", "lca"];
larnacaMapping.multicomCode="LCA";

var heraklionMapping=new Object();
heraklionMapping.searchTerms=["heraklion", "heraklion crete", "heraklion, crete", "her"];
heraklionMapping.multicomCode="HER";

var rhodesMapping=new Object();
rhodesMapping.searchTerms=["rhodes", "rhodes greece", "rhodes, greece", "rho"];
rhodesMapping.multicomCode="RHO";

var puertoPlataMapping=new Object();
puertoPlataMapping.searchTerms=["puerto plata", "puerto plata dominican republic", "puerto plata, dominican republic", "pop"];
puertoPlataMapping.multicomCode="POP";

var cancunMapping=new Object();
cancunMapping.searchTerms=["cancun", "cancun mexico", "cancun, mexico", "cun"];
cancunMapping.multicomCode="CUN";

var maltaMapping=new Object();
maltaMapping.searchTerms=["malta", "mla"];
maltaMapping.multicomCode="MLA";

var monastirMapping=new Object();
monastirMapping.searchTerms=["monastir", "monastir tunisia", "monastir, tunisia",  "mir"];
monastirMapping.multicomCode="MIR";

var ibizaMapping=new Object();
ibizaMapping.searchTerms=["ibiza", "ibiza balearics", "ibiza, balearics",  "ibz"];
ibizaMapping.multicomCode="IBZ";

var majorcaMapping=new Object();
majorcaMapping.searchTerms=["majorca", "palma", "palma majorca", "palma, majorca", "pmi"];
majorcaMapping.multicomCode="PMI";

var reusMapping=new Object();
reusMapping.searchTerms=["reus", "reus, costa dorada", "reus costa dorada", "reu"];
reusMapping.multicomCode="REU";

var kosMapping=new Object();
kosMapping.searchTerms=["kos", "kos greece", "kos, greece", "kgs"];
kosMapping.multicomCode="KGS";

var kefaloniaMapping=new Object();
kefaloniaMapping.searchTerms=["kefalonia", "kefalonia, greece", "kefalonia greece", "efl"];
kefaloniaMapping.multicomCode="EFL";

var santoriniMapping=new Object();
santoriniMapping.searchTerms=["santorini", "santorini, greece", "santorini greece", "jtr"];
santoriniMapping.multicomCode="JTR";

var skiathosMapping=new Object();
skiathosMapping.searchTerms=["skiathos", "skiathos, greece", "skiathos greece", "jsi"];
skiathosMapping.multicomCode="JSI";

var destinationAirportCodeMapping=[lanzaroteMapping, fuerteventuraMapping, granCanariaMapping, tenerifeMapping, sharmElSheikhMapping, hurghadaMapping, paphosMapping, antalyaMapping, bodrumMapping, dalamanMapping, funchalMapping, sanfordMapping, faroMapping, alicanteMapping, malagaMapping, larnacaMapping, heraklionMapping, rhodesMapping, puertoPlataMapping, cancunMapping, maltaMapping, monastirMapping, banjulMapping, holguinMapping, varaderoMapping, goaMapping, innsbruckMapping, salzburgMapping, luxorMapping, zanteMapping, mahonMapping, ibizaMapping, majorcaMapping, reusMapping, kefaloniaMapping, kosMapping, santoriniMapping, skiathosMapping];

/********************************
Static vars
********************************/
var multicomURL = "http://ww7.thomascook.com/ft/booking/flights?method=search"
var monthArray=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]


/********************************
Charter flight scenarios
********************************/
var winterRule=new Object();
winterRule.destinationSearchMappings=[banjulMapping, holguinMapping, varaderoMapping, goaMapping, innsbruckMapping, salzburgMapping, luxorMapping];
winterRule.departurePointSearchMappings=null;
winterRule.monthFrom=11;
winterRule.monthTo=4;

var yearRoundRule=new Object();
yearRoundRule.destinationSearchMappings=[lanzaroteMapping, fuerteventuraMapping, granCanariaMapping, tenerifeMapping, sharmElSheikhMapping, hurghadaMapping, paphosMapping, antalyaMapping, bodrumMapping, dalamanMapping, funchalMapping, sanfordMapping, faroMapping, alicanteMapping, malagaMapping, larnacaMapping, heraklionMapping, rhodesMapping, puertoPlataMapping, cancunMapping, maltaMapping, monastirMapping];
yearRoundRule.departurePointSearchMappings=null;
yearRoundRule.monthFrom=null;
yearRoundRule.monthTo=null;


var summerRule=new Object();
summerRule.destinationSearchMappings=[zanteMapping, mahonMapping, ibizaMapping, majorcaMapping, reusMapping, kefaloniaMapping, kosMapping, santoriniMapping, skiathosMapping];
summerRule.departurePointSearchMappings=null;
summerRule.monthFrom=5;
summerRule.monthTo=10;

var scenarios=[winterRule, yearRoundRule, summerRule];

/********************************
Code
********************************/

function charterFlightCheck(){
	if(isCharterFlight()) {
		 return convertSearchParameters();
	}
	return true;
}



function isCharterFlight(){
	for(var i=0; i < scenarios.length; i++){
		if(isScenarioApplicable(scenarios[i])){
			return true;
		}
	}
	return false;
}


function isScenarioApplicable(scenario){
	var applicableScenario = false;
	var destinationStr;
	var departureStr;
	
	if(!isUndefined(scenario)){
		if(!isUndefined(scenario.destinationSearchMappings)){
			if(!isUndefined(getDocumentElementById('flightTo'))){
				destinationStr = getDocumentElementById('flightTo').value;
				applicableScenario = isValidScenarioAttribute(scenario.destinationSearchMappings, destinationStr);
			}
		} else {
			applicableScenario = true;
		}

		if(applicableScenario){
			if(!isUndefined(scenario.departurePointSearchMappings)){
				if(!isUndefined(getDocumentElementById('flightFrom'))){
					departureStr = getDocumentElementById('flightFrom').value;
					applicableScenario = isValidScenarioAttribute(scenario.departurePointSearchMappings, departureStr);
				}
			}
		}
		
		if(applicableScenario && !isUndefined(scenario.monthFrom) && !isUndefined(scenario.monthTo)){
			if(!isUndefined(destinationStr) || !isUndefined(departureStr)){
				if(!isUndefined(getDocumentElementById('Text5'))){
					applicableScenario = isDepartureDateValid(scenario.monthFrom, scenario.monthTo, getDocumentElementById('Text5').value);
				} else {
					applicableScenario = false;
				}
			} else {
				applicableScenario = false;
			}
		}
	}
	return applicableScenario;
}

function isDepartureDateValid(monthFrom, monthTo, dateStr){
	var dateArray = dateStr.split("/");
	if(!isUndefined(dateArray) && dateArray.length == 3){
		departureDate = new Date(dateArray[2], (dateArray[1] - 1), dateArray[0]);
		dateFrom = new Date(dateArray[2], (monthFrom - 1), dateArray[0]);
		dateTo = new Date(dateArray[2], (monthTo - 1), dateArray[0]);
		
		if(dateFrom > dateTo){
			if(departureDate >= dateFrom || departureDate <= dateTo){
				return true;
			}
		} else {
			if(departureDate >= dateFrom && departureDate <= dateTo){
				return true;
			}
		}
	}
	return false;
}

function isValidScenarioAttribute(airpotMappings, elem){
	if(!isUndefined(airpotMappings) && !isUndefined(elem)){
		for(var i=0; i < airpotMappings.length; i++){
			if(!isUndefined(airpotMappings[i])){
				for(var x=0; x < airpotMappings[i].searchTerms.length; x++){
					if(airpotMappings[i].searchTerms[x].toLowerCase() == elem.toLowerCase()){
						return true;
					}
				}
			}
		}
	}
	return false
}

function convertSearchParameters(){
	var flightReturn;
	var depDate;
	var depMonthYear;
	var retDate;
	var retMonthYear;
	var depCode;
	var destCode;
	var adults;
	var children;
	var seniors;
	
	if(!isUndefined(getDocumentElementById('flightFrom'))) depCode = getAirportCode(departureAirportCodeMapping, getDocumentElementById('flightFrom').value);
	if(!isUndefined(getDocumentElementById('flightTo'))) destCode = getAirportCode(destinationAirportCodeMapping, getDocumentElementById('flightTo').value);
	if(!isUndefined(getDocumentElementById('returnFlight'))) flightReturn = getDocumentElementById('returnFlight').checked;
	
	if(!isUndefined(getDocumentElementById('Text5'))){
		depDate = getDate(getDocumentElementById('Text5').value);
		depMonthYear = getMonthYear(getDocumentElementById('Text5').value);
		
		if(!isUndefined(flightReturn) && !isUndefined('Text7') && flightReturn){
			retDate = getDate(getDocumentElementById('Text7').value);
			retMonthYear = getMonthYear(getDocumentElementById('Text7').value);
		}
	}
	
	if(!isUndefined(flightReturn) && !isUndefined(depDate) && !isUndefined(depMonthYear) && !isUndefined(depCode) && !isUndefined(destCode)){
		
		if(!isUndefined(getDocumentElementById('Select10'))) adults = getDocumentElementById('Select10').value;
		if(!isUndefined(getDocumentElementById('Select12'))) children = getDocumentElementById('Select12').value;
		if(!isUndefined(getDocumentElementById('Select11'))) seniors = getDocumentElementById('Select11').value;
		
		adults = parseInt(adults) + parseInt(seniors);
		
		if(flightReturn && !isUndefined(retDate) && !isUndefined(retMonthYear)){
			redirectToMulticom(flightReturn, depDate, depMonthYear, retDate, retMonthYear, depCode, destCode, adults, children);
			return false;
		} else {
			redirectToMulticom(flightReturn, depDate, depMonthYear, retDate, retMonthYear, depCode, destCode, adults, children);
			return false;
		}
	}
	return true;
}

function redirectToMulticom(flightReturn, depDate, depMonthYear, retDate, retMonthYear, depCode, destCode, adults, children){
	var url = multicomURL + "&return=" + flightReturn + "&depAirportCode=" + depCode + "&arrAirportCode=" + destCode + "&startDateD=" + depDate + "&startDateMY=" + depMonthYear + "&adults=" + adults + "&children=" + children;
	if(flightReturn) url = url + "&endDateD=" + retDate + "&endDateMY=" + retMonthYear;
	window.parent.location = url;
}

function  getAirportCode(airportArray, airportStr){
	if(!isUndefined(airportArray) && !isUndefined(airportStr)){
		for(var i=0; i<airportArray.length; i++){
			if(!isUndefined(airportArray[i].searchTerms)){
				for(var x=0; x<airportArray[i].searchTerms.length; x++){
					if(airportStr.toLowerCase() == airportArray[i].searchTerms[x].toLowerCase()){
						if(!isUndefined(airportArray[i].multicomCode)) return airportArray[i].multicomCode;
					}

				}
			}
		}
	}
	return null;
}

function getDate(dateStr){
	if(!isUndefined(dateStr)){
		var dateArray = dateStr.split("/");
		if(!isUndefined(dateArray) && dateArray.length == 3 && !isUndefined(dateArray[0])){
			return dateArray[0];
		}
	}
	return null;
}

function getMonthYear(dateStr){
	if(!isUndefined(dateStr)){
		var dateArray = dateStr.split("/");
		if(!isUndefined(dateArray) && dateArray.length == 3 && !isUndefined(dateArray[1]) && !isUndefined(dateArray[2])){
			return monthArray[(parseInt(dateArray[1])-1)]+"-"+dateArray[2];
		}
	}
	return null;
}

function isUndefined(elem){
	if(typeof(elem) !== 'undefined' && elem != null) {
		return false;
	} else {
		return true;
	}
}

function getDocumentElementById(elemId){
	if(!isUndefined(document.getElementById(elemId))){
		return document.getElementById(elemId);
	} else {
		return null;
	}
}
