var flytcSEcontainer;
var oneWayRadio;
var roundTripRadio;
var numberMarketsHiddenField;
var tripType;
var flytcseInputElements;
var flytcseSelectElements;
var sector_1_dd;
var sector_1_yyyymm;
var sector_2_dd;
var sector_2_yyyymm;
var to;
var from;
var dayGap;
var numAdult;
var numChild;
var numInfant;
var AirportsArr = new Array();

//window.onload = function(){initialiseEngine();}

function buildFlyToDropDown(flyingFromCode){

	var fromDropDownDIV = document.getElementById("from1DropDown");
	//Clear out existing destination dropdown
	if(document.getElementById("to1"))
	{
		var destDropDown = document.getElementById("to1");
		fromDropDownDIV.removeChild(destDropDown);
	}
	var fromDropDown = document.getElementById("from1");
	var idLabel = "to1";

	var selectEle = document.createElement("select");
	selectEle.setAttribute("id", idLabel);
	selectEle.setAttribute("class","flytcse_select_location");
	selectEle.setAttribute("size","1");
	selectEle.setAttribute("name", idLabel);

	for(var u=0; u<AirportsArr[flyingFromCode].AirportDestList.length; u++){
		var optionEle = document.createElement("option");
		if( (u==0) && (fromDropDown.value == "???")){
			var optionText = document.createTextNode("Destination");
			optionEle.value = "";
		}else{
			var optionText = document.createTextNode(AirportsArr[AirportsArr[flyingFromCode].AirportDestList[u]].Airportname + " (" + AirportsArr[AirportsArr[flyingFromCode].AirportDestList[u]].Airportcode + ")" + AirportsArr[AirportsArr[flyingFromCode].AirportDestList[u]].AirportOnSalePeriod);
			optionEle.value = AirportsArr[flyingFromCode].AirportDestList[u];
		}
		optionEle.appendChild(optionText);
		selectEle.appendChild(optionEle);
	}
	fromDropDownDIV.appendChild(selectEle);
}

function Airport(Airportcode,Airportname,AirportDestList, AirportOnSalePeriod){
	this.Airportcode = Airportcode;
	this.Airportname = Airportname;
	this.AirportDestList = AirportDestList;
	this.AirportOnSalePeriod = AirportOnSalePeriod;
}

function buildAirportArray(){
	AirportsArr["???"] = new Airport("???","Origin",new Array("","CIS","CYP","LON","TUK","ABZ","BFS","BHX","BOH","BRS","CWL","DSA","MME","EMA","EDI","EXT","GLA","HUY","LBA","LPL","LGW","LHR","LTN","STN","MAN","NCL","NWI","ALC","LEI","AYT","BJV","BOJ","YYC","CTA","CHQ","CFU","GOI","DLM","YEG","VDB","FAO","AHO","YFC","FUE","FNC","GVA","GRO","YHZ","SKG","HER","IBZ","INN","ADB","XRY","KLX","EFL","KTT","KGS","ACE","LCA","LPA","LAS","LXS","LYS","MAH","AGP","MLA","YUL","MJT","NAP","OLB","YOW","PMI","PFO","PVK","POP","PUY","PUJ","REU","RHO","RMI","SZG","SMI","SFB","JTR","JSI","TFS","YYZ","TLS","TRN","YVR","VAR","VCE","VRN","ZTH"), "");
	AirportsArr[""] = new Airport("","Destination",new Array(""), "");
	AirportsArr["CIS"] = new Airport("CIS","All Canaries Airports",new Array("ABZ","BFS","BHX","BRS","CWL","DSA","EDI","EMA","EXT","GLA","HUY","LBA","LGW","LPL","LTN","MAN","MME","NCL","NWI","STN","LON"), "");
	AirportsArr["CYP"] = new Airport("CYP","All Cyprus Airports",new Array("BFS","BHX","BOH","BRS","CWL","EDI","EMA","EXT","GLA","HUY","LBA","LGW","LTN","MAN","MME","NCL","STN","LON"), "");
	AirportsArr["LON"] = new Airport("LON","All London Airports",new Array("ACE","ADB","AGA","AGP","AHO","ALC","AYT","BJL","BJV","BOJ","CFU","CHQ","CTA","CUN","DJE","DLM","EFL","FAO","FNC","FUE","GOI","GRO","GVA","HER","HRG","IBZ","INN","JSI","JTR","KGS","KLX","KTT","LCA","LEI","LPA","LXR","LXS","LYS","MAH","MBA","MBJ","MIR","MJT","MLA","MLE","NAP","OLB","OSD","PFO","PMI","POP","PUJ","PUY","PVK","REU","RHO","RMF","RMI","RVN","SFB","SKG","SMI","SOF","SPU","SSH","SZG","TCP","TFS","TLS","TRN","TRV","VAR","VCE","VDB","VRN","YEG","YFC","YHZ","YOW","YUL","YVR","YYC","YYZ","ZTH","CIS","CYP","TUK"), "");
	AirportsArr["TUK"] = new Airport("TUK","All Turkey Airports",new Array("BFS","BHX","BOH","BRS","CWL","DSA","EDI","EMA","EXT","GLA","HUY","LBA","LGW","LTN","MAN","MME","NCL","NWI","STN","LON"), "");
	AirportsArr["ABZ"] = new Airport("ABZ","Aberdeen",new Array("ALC","FAO","IBZ","LPA","PMI","REU","TFS","CIS"), "");
	AirportsArr["BFS"] = new Airport("BFS","Belfast",new Array("ACE","ALC","AYT","BJV","CFU","DLM","FAO","FUE","GRO","HER","IBZ","LCA","LPA","MAH","MIR","NAP","PFO","PMI","REU","RHO","SFB","TFS","ZTH","CIS","CYP","TUK"), "");
	AirportsArr["BHX"] = new Airport("BHX","Birmingham",new Array("ACE","ADB","AGA","AGP","AHO","ALC","AYT","BJV","BOJ","CFU","CUN","DLM","EFL","FAO","FNC","FUE","GOI","GRO","HER","HRG","IBZ","KGS","LCA","LEI","LPA","LXR","LYS","MAH","MIR","MLA","NAP","PFO","PMI","POP","REU","RHO","SKG","SOF","SPU","SSH","SZG","TFS","VRN","YYZ","ZTH","CIS","CYP","TUK"), "");
	AirportsArr["BOH"] = new Airport("BOH","Bournemouth",new Array("BJV","HER","LCA","PMI","CYP","TUK"), "");
	AirportsArr["BRS"] = new Airport("BRS","Bristol",new Array("ACE","AGA","ALC","AYT","BJL","BJV","BOJ","CFU","DLM","EFL","FAO","FNC","FUE","HER","IBZ","JSI","KGS","KTT","LCA","LPA","MAH","MIR","MLA","NAP","PFO","PMI","REU","RHO","SPU","SSH","SZG","TFS","VAR","ZTH","CIS","CYP","TUK"), "");
	AirportsArr["CWL"] = new Airport("CWL","Cardiff",new Array("ACE","ALC","BOJ","CFU","DLM","EFL","FAO","FUE","GRO","HER","IBZ","LCA","LPA","MAH","MIR","MLA","PFO","PMI","REU","RHO","SFB","SSH","TFS","ZTH","CIS","CYP","TUK"), "");
	AirportsArr["DSA"] = new Airport("DSA","Doncaster Robin Hood",new Array("DLM","IBZ","LPA","MIR","PMI","TFS","CIS","TUK"), "");
	AirportsArr["MME"] = new Airport("MME","Durham Teeside",new Array("ACE","DLM","IBZ","LCA","PMI","REU","TFS","CIS","CYP","TUK"), "");
	AirportsArr["EMA"] = new Airport("EMA","East Midlands",new Array("ACE","ADB","AGP","ALC","AYT","BJL","BJV","CFU","DLM","FAO","FNC","FUE","HER","IBZ","KGS","LCA","LPA","MAH","MIR","MLA","NAP","PFO","PMI","REU","RHO","SSH","TFS","ZTH","CIS","CYP","TUK"), "");
	AirportsArr["EDI"] = new Airport("EDI","Edinburgh",new Array("ACE","ALC","DLM","FAO","FUE","IBZ","LCA","LPA","MAH","MIR","PMI","REU","RHO","TFS","YYZ","ZTH","CIS","CYP","TUK"), "");
	AirportsArr["EXT"] = new Airport("EXT","Exeter",new Array("ACE","AYT","CFU","DLM","FAO","FNC","IBZ","LCA","LPA","MAH","MLA","PMI","RHO","TFS","YYZ","CIS","CYP","TUK"), "");
	AirportsArr["GLA"] = new Airport("GLA","Glasgow",new Array("ACE","AGP","ALC","AYT","BJV","BOJ","CFU","CUN","DLM","FAO","FNC","FUE","GRO","HER","IBZ","KGS","LCA","LEI","LPA","LYS","MAH","MIR","MLA","NAP","PFO","PMI","POP","REU","RHO","RVN","SFB","SSH","TFS","YVR","YYC","YYZ","ZTH","CIS","CYP","TUK"), "");
	AirportsArr["HUY"] = new Airport("HUY","Humberside",new Array("ACE","AYT","DLM","FAO","FUE","HER","IBZ","LCA","LPA","MAH","PMI","TFS","CIS","CYP","TUK"), "");
	AirportsArr["LBA"] = new Airport("LBA","Leeds Bradford",new Array("ACE","AGP","ALC","CFU","DLM","FAO","FUE","HER","IBZ","LCA","LPA","MAH","MLA","PMI","REU","RHO","TFS","ZTH","CIS","CYP","TUK"), "");
	AirportsArr["LPL"] = new Airport("LPL","Liverpool",new Array("ALC","LPA","MAH","PMI","REU","RHO","TFS","CIS"), "");
	AirportsArr["LGW"] = new Airport("LGW","London Gatwick",new Array("ACE","ADB","AGA","AGP","AHO","ALC","AYT","BJL","BJV","BOJ","CFU","CHQ","CTA","CUN","DJE","DLM","EFL","FAO","FNC","FUE","GOI","GRO","GVA","HER","HRG","IBZ","INN","JSI","JTR","KGS","KLX","LCA","LEI","LPA","LXR","LXS","LYS","MAH","MBA","MBJ","MIR","MJT","MLA","MLE","NAP","OLB","PFO","PMI","POP","PUJ","PUY","PVK","REU","RHO","RMF","RMI","RVN","SFB","SKG","SMI","SOF","SPU","SSH","SZG","TCP","TFS","TLS","TRN","TRV","VAR","VCE","VDB","VRN","YEG","YFC","YHZ","YOW","YUL","YVR","YYC","YYZ","ZTH","CIS","CYP","TUK"), "");
	AirportsArr["LHR"] = new Airport("LHR","London Heathrow",new Array("KTT","OSD","YYZ"), "");
	AirportsArr["LTN"] = new Airport("LTN","London Luton",new Array("ACE","AGP","AYT","BJV","BOJ","CFU","DLM","EFL","FAO","FNC","FUE","IBZ","LCA","LPA","MAH","MIR","PFO","PMI","REU","RHO","SSH","TFS","ZTH","CIS","CYP","TUK"), "");
	AirportsArr["STN"] = new Airport("STN","London Stansted",new Array("ACE","AYT","BJV","BOJ","CFU","DLM","FAO","FUE","HER","IBZ","LCA","LPA","MAH","MIR","MLA","PFO","PMI","REU","RHO","TFS","ZTH","CIS","CYP","TUK"), "");
	AirportsArr["MAN"] = new Airport("MAN","Manchester",new Array("ACE","ADB","AGA","AGP","ALC","AYT","BJL","BJV","BOJ","CFU","CHQ","CTA","CUN","DJE","DLM","EFL","FAO","FNC","FUE","GOI","GRO","GVA","HER","HRG","IBZ","INN","JSI","JTR","KGS","KLX","LAS","LCA","LEI","LPA","LXR","LYS","MAH","MBA","MBJ","MIR","MJT","MLA","MLE","NAP","OLB","PFO","PMI","POP","PUJ","PUY","PVK","REU","RHO","RMF","RMI","RVN","SFB","SKG","SMI","SOF","SPU","SSH","SZG","TCP","TFS","TLS","TRN","VAR","VCE","VRN","XRY","YVR","YYC","YYZ","ZTH","CIS","CYP","TUK"), "");
	AirportsArr["NCL"] = new Airport("NCL","Newcastle",new Array("ACE","ADB","AGP","ALC","AYT","BJV","BOJ","CFU","CUN","DLM","FAO","FNC","FUE","HER","IBZ","KGS","LCA","LPA","MAH","MIR","MLA","NAP","PFO","PMI","POP","REU","RHO","RVN","SFB","SSH","TFS","YYZ","ZTH","CIS","CYP","TUK"), "");
	AirportsArr["NWI"] = new Airport("NWI","Norwich",new Array("ACE","DLM","HER","LPA","PMI","SPU","TFS","CIS","TUK"), "");
	AirportsArr["ALC"] = new Airport("ALC","Alicante",new Array("ABZ","BFS","BHX","BRS","CWL","EDI","EMA","GLA","LBA","LGW","LPL","MAN","NCL","LON"), "");
	AirportsArr["LEI"] = new Airport("LEI","Almeria",new Array("BHX","GLA","LGW","MAN","LON"), " - May to Oct");
	AirportsArr["AYT"] = new Airport("AYT","Antalya",new Array("BFS","BHX","BRS","EMA","EXT","GLA","HUY","LGW","LTN","MAN","NCL","STN","LON"), " ");
	AirportsArr["BJV"] = new Airport("BJV","Bodrum",new Array("BFS","BHX","BOH","BRS","EMA","GLA","LGW","LTN","MAN","NCL","STN","LON"), "");
	AirportsArr["BOJ"] = new Airport("BOJ","Bourgas",new Array("BHX","BRS","CWL","GLA","LGW","LTN","MAN","NCL","STN","LON"), " - May to Oct");
	AirportsArr["YYC"] = new Airport("YYC","Calgary",new Array("LGW","MAN","GLA","LON"), "");
	AirportsArr["CTA"] = new Airport("CTA","Catania",new Array("LGW","MAN","LON"), " - May to Oct");
	AirportsArr["CHQ"] = new Airport("CHQ","Chania",new Array("LGW","MAN","LON"), " - May to Oct");
	AirportsArr["CFU"] = new Airport("CFU","Corfu",new Array("BFS","BHX","BRS","CWL","EMA","EXT","GLA","LBA","LGW","LTN","MAN","NCL","STN","LON"), " - May to Oct");
	AirportsArr["GOI"] = new Airport("GOI","Dabolim/Goa",new Array("BHX","LGW","MAN","LON"), " - Nov to Apr");
	AirportsArr["DLM"] = new Airport("DLM","Dalaman",new Array("BFS","BHX","BRS","CWL","DSA","EDI","EMA","EXT","GLA","HUY","LBA","LGW","LTN","MAN","MME","NCL","NWI","STN","LON"), "");
	AirportsArr["YEG"] = new Airport("YEG","Edmonton",new Array("LGW","LON"), " - May to Oct");
	AirportsArr["VDB"] = new Airport("VDB","Fagernes",new Array("LGW","LON"), " - Nov to Apr");
	AirportsArr["FAO"] = new Airport("FAO","Faro",new Array("ABZ","BFS","BHX","BRS","CWL","EDI","EMA","EXT","GLA","HUY","LBA","LGW","LTN","MAN","NCL","STN","LON"), "");
	AirportsArr["AHO"] = new Airport("AHO","Fertilia",new Array("BHX","LGW","LON"), " - May to Oct");
	AirportsArr["YFC"] = new Airport("YFC","Fredericton",new Array("LGW","LON"), " - May to Oct");
	AirportsArr["FUE"] = new Airport("FUE","Fuerteventura",new Array("BFS","BHX","BRS","CWL","EDI","EMA","GLA","HUY","LBA","LGW","LTN","MAN","NCL","STN","LON"), "");
	AirportsArr["FNC"] = new Airport("FNC","Funchal",new Array("BHX","BRS","EMA","EXT","GLA","LGW","LTN","MAN","NCL","LON"), "");
	AirportsArr["GVA"] = new Airport("GVA","Geneva",new Array("LGW","MAN","LON"), " - Nov to Apr");
	AirportsArr["GRO"] = new Airport("GRO","Gerona",new Array("BFS","BHX","CWL","GLA","LGW","MAN","LON"), "");
	AirportsArr["YHZ"] = new Airport("YHZ","Halifax",new Array("LGW","LON"), " - May to Oct");
	AirportsArr["SKG"] = new Airport("SKG","Halkidiki",new Array("BHX","LGW","MAN","LON"), " - May to Oct");
	AirportsArr["HER"] = new Airport("HER","Heraklion",new Array("BFS","BHX","BOH","BRS","CWL","EMA","GLA","HUY","LBA","LGW","MAN","NCL","NWI","STN","LON"), "");
	AirportsArr["IBZ"] = new Airport("IBZ","Ibiza",new Array("ABZ","BFS","BHX","BRS","CWL","DSA","EDI","EMA","EXT","GLA","HUY","LBA","LGW","LTN","MAN","MME","NCL","STN","LON"), "");
	AirportsArr["INN"] = new Airport("INN","Innsbruck",new Array("LGW","MAN","LON"), " - Nov to Apr");
	AirportsArr["ADB"] = new Airport("ADB","Izmir",new Array("BHX","EMA","LGW","MAN","NCL","LON"), "");
	AirportsArr["XRY"] = new Airport("XRY","Jerez",new Array("MAN"), " - May to Oct");
	AirportsArr["KLX"] = new Airport("KLX","Kalamata",new Array("LGW","MAN","LON"), " - May to Oct");
	AirportsArr["EFL"] = new Airport("EFL","Kefalonia",new Array("BHX","BRS","CWL","LGW","LTN","MAN","LON"), " - May to Oct");
	AirportsArr["KTT"] = new Airport("KTT","Kittila/Finland",new Array("BRS","LHR","LON"), " - Nov to Apr");
	AirportsArr["KGS"] = new Airport("KGS","Kos",new Array("BHX","BRS","EMA","GLA","LGW","MAN","NCL","LON"), " - May to Oct");
	AirportsArr["ACE"] = new Airport("ACE","Lanzarote",new Array("BFS","BHX","BRS","CWL","EDI","EMA","EXT","GLA","HUY","LBA","LGW","LTN","MAN","MME","NCL","NWI","STN","LON"), "");
	AirportsArr["LCA"] = new Airport("LCA","Larnaca",new Array("BFS","BHX","BOH","BRS","CWL","EDI","EMA","EXT","GLA","HUY","LBA","LGW","LTN","MAN","MME","NCL","STN","LON"), "");
	AirportsArr["LPA"] = new Airport("LPA","Las Palmas",new Array("ABZ","BFS","BHX","BRS","CWL","DSA","EDI","EMA","EXT","GLA","HUY","LBA","LGW","LPL","LTN","MAN","NCL","NWI","STN","LON"), "");
	AirportsArr["LAS"] = new Airport("LAS","Las Vegas",new Array("MAN"), " - May to Oct");
	AirportsArr["LXS"] = new Airport("LXS","Lemnos",new Array("LGW","LON"), " - May to Oct");
	AirportsArr["LYS"] = new Airport("LYS","Lyon",new Array("BHX","GLA","LGW","MAN","LON"), " - Nov to Apr");
	AirportsArr["MAH"] = new Airport("MAH","Mahon",new Array("BFS","BHX","BRS","CWL","EDI","EMA","EXT","GLA","HUY","LBA","LGW","LPL","LTN","MAN","NCL","STN","LON"), "");
	AirportsArr["AGP"] = new Airport("AGP","Malaga",new Array("BHX","EMA","GLA","LBA","LGW","LTN","MAN","NCL","LON"), "");
	AirportsArr["MLA"] = new Airport("MLA","Malta",new Array("BHX","BRS","CWL","EMA","EXT","GLA","LBA","LGW","MAN","NCL","STN","LON"), "");
	AirportsArr["YUL"] = new Airport("YUL","Montreal Dorval",new Array("LGW","LON"), "");
	AirportsArr["MJT"] = new Airport("MJT","Mytilene",new Array("LGW","MAN","LON"), " - May to Oct");
	AirportsArr["NAP"] = new Airport("NAP","Naples",new Array("BFS","BHX","BRS","EMA","GLA","LGW","MAN","NCL","LON"), "");
	AirportsArr["OLB"] = new Airport("OLB","Olbia",new Array("LGW","MAN","LON"), " - May to Oct");
	AirportsArr["YOW"] = new Airport("YOW","Ottawa",new Array("LGW","LON"), " - May to Oct");
	AirportsArr["PMI"] = new Airport("PMI","Palma",new Array("ABZ","BFS","BHX","BOH","BRS","CWL","DSA","EDI","EMA","EXT","GLA","HUY","LBA","LGW","LPL","LTN","MAN","MME","NCL","NWI","STN","LON"), "");
	AirportsArr["PFO"] = new Airport("PFO","Paphos",new Array("BFS","BHX","BRS","CWL","EMA","GLA","LGW","LTN","MAN","NCL","STN","LON"), "");
	AirportsArr["PVK"] = new Airport("PVK","Preveza",new Array("LGW","MAN","LON"), " - May to Oct");
	AirportsArr["POP"] = new Airport("POP","Puerto Plata",new Array("BHX","GLA","LGW","MAN","NCL","LON"), "");
	AirportsArr["PUY"] = new Airport("PUY","Pula",new Array("LGW","MAN","LON"), " - May to Oct");
	AirportsArr["PUJ"] = new Airport("PUJ","Punta Cana",new Array("LGW","MAN","LON"), "");
	AirportsArr["REU"] = new Airport("REU","Reus",new Array("ABZ","BFS","BHX","BRS","CWL","EDI","EMA","GLA","LBA","LGW","LPL","LTN","MAN","MME","NCL","STN","LON"), " - May to Oct");
	AirportsArr["RHO"] = new Airport("RHO","Rhodes",new Array("BFS","BHX","BRS","CWL","EDI","EMA","EXT","GLA","LBA","LGW","LPL","LTN","MAN","NCL","STN","LON"), "");
	AirportsArr["RMI"] = new Airport("RMI","Rimini",new Array("LGW","MAN","LON"), " - May to Oct");
	AirportsArr["SZG"] = new Airport("SZG","Salzburg",new Array("BHX","BRS","LGW","MAN","LON"), " - Nov to Apr");
	AirportsArr["SMI"] = new Airport("SMI","Samos",new Array("LGW","MAN","LON"), " - May to Oct");
	AirportsArr["SFB"] = new Airport("SFB","Sanford Florida",new Array("BFS","CWL","GLA","LGW","MAN","NCL","LON"), "");
	AirportsArr["JTR"] = new Airport("JTR","Santorini",new Array("LGW","MAN","LON"), " - May to Oct");
	AirportsArr["JSI"] = new Airport("JSI","Skiathos",new Array("BRS","LGW","MAN","LON"), " - May to Oct");
	AirportsArr["TFS"] = new Airport("TFS","Tenerife",new Array("ABZ","BFS","BHX","BRS","CWL","DSA","EDI","EMA","EXT","GLA","HUY","LBA","LGW","LPL","LTN","MAN","MME","NCL","NWI","STN","LON"), "");
	AirportsArr["YYZ"] = new Airport("YYZ","Toronto",new Array("LGW","MAN","LHR","GLA","BHX","EXT","NCL","EDI","LON"), "");
	AirportsArr["TLS"] = new Airport("TLS","Toulouse",new Array("LGW","MAN","LON"), " - Nov to Apr");
	AirportsArr["TRN"] = new Airport("TRN","Turin",new Array("LGW","MAN","LON"), " - Nov to Apr");
	AirportsArr["YVR"] = new Airport("YVR","Vancouver",new Array("LGW","MAN","GLA","LON"), "");
	AirportsArr["VAR"] = new Airport("VAR","Varna",new Array("BRS","LGW","MAN","LON"), " - May to Oct");
	AirportsArr["VCE"] = new Airport("VCE","Venice",new Array("LGW","MAN","LON"), " - May to Oct");
	AirportsArr["VRN"] = new Airport("VRN","Verona",new Array("BHX","LGW","MAN","LON"), "");
	AirportsArr["ZTH"] = new Airport("ZTH","Zante",new Array("BFS","BHX","BRS","CWL","EDI","EMA","GLA","LBA","LGW","LTN","MAN","NCL","STN","LON"), " - May to Oct");
	AirportsArr["AGA"] = new Airport("AGA","Agadir",new Array("BHX","BRS","LGW","MAN","LON"), "");
	AirportsArr["BJL"] = new Airport("BJL","Banjul",new Array("BRS","EMA","LGW","MAN","LON"), "");
	AirportsArr["CUN"] = new Airport("CUN","Cancun",new Array("BHX","GLA","LGW","MAN","NCL","LON"), "");
	AirportsArr["DJE"] = new Airport("DJE","Djerba-Zarzis",new Array("LGW","MAN","LON"), "");
	AirportsArr["HRG"] = new Airport("HRG","Hurghada",new Array("BHX","LGW","MAN","LON"), "");
	AirportsArr["LXR"] = new Airport("LXR","Luxor",new Array("BHX","LGW","MAN","LON"), "");
	AirportsArr["MBA"] = new Airport("MBA","Mombasa",new Array("LGW","MAN","LON"), "");
	AirportsArr["MBJ"] = new Airport("MBJ","Montego Bay",new Array("LGW","MAN","LON"), "");
	AirportsArr["MIR"] = new Airport("MIR","Monastir",new Array("BFS","BHX","BRS","CWL","DSA","EDI","EMA","GLA","LGW","LTN","MAN","NCL","STN","LON"), "");
	AirportsArr["MLE"] = new Airport("MLE","Male",new Array("LGW","MAN","LON"), "");
	AirportsArr["OSD"] = new Airport("OSD","Ostersund",new Array("LHR","LON"), "");
	AirportsArr["RMF"] = new Airport("RMF","Marsa Alam",new Array("LGW","MAN","LON"), "");
	AirportsArr["RVN"] = new Airport("RVN","Rovaniemi",new Array("GLA","LGW","MAN","NCL","LON"), "");
	AirportsArr["SOF"] = new Airport("SOF","Sofia",new Array("BHX","LGW","MAN","LON"), "");
	AirportsArr["SPU"] = new Airport("SPU","Split",new Array("BHX","BRS","LGW","MAN","NWI","LON"), "");
	AirportsArr["SSH"] = new Airport("SSH","Sharm El Sheikh",new Array("BHX","BRS","CWL","EMA","GLA","LGW","LTN","MAN","NCL","LON"), "");
	AirportsArr["TCP"] = new Airport("TCP","Trivandrum",new Array("LGW","MAN","LON"), "");
	AirportsArr["TRV"] = new Airport("TRV","Zante",new Array("LGW","LON"), "");
}

function initialiseEngine(){

	buildDateDropDowns(1);
	buildDateDropDowns(2);
	buildAirportArray();
	
	//FIREFOX/IE popup event handler function calls
	!document.all ? document.addEventListener('click',resetPopups,true) : document.attachEvent('onclick',resetPopups);

	AndyCal_buildCalendar('AndyCal',1);

	if(document.getElementById("flytcsea_search_container")){

		flytcSEcontainer = document.getElementById("flytcsea_search_container");
		oneWayRadio = document.getElementById("oneWayRadio");
		roundTripRadio = document.getElementById("roundTripRadio");
		numberMarketsHiddenField = document.getElementById("numberMarkets");
		tripType = (oneWayRadio.checked) ? 1 : 2;
		flytcseInputElements = flytcSEcontainer.getElementsByTagName("input");
		flytcseSelectElements = flytcSEcontainer.getElementsByTagName("select");
		sector_1_dd = document.getElementById('departDay1Select');
		sector_1_yyyymm = document.getElementById('departMonth1Select');
		sector_2_dd = document.getElementById('departDay2Select');
		sector_2_yyyymm = document.getElementById('departMonth2Select');
		to = document.getElementById('to1');
		from = document.getElementById('from1')
		dayGap = 7;
		numAdult = document.getElementById("ADULTSelect");
		numChild = document.getElementById("CHILDSelect");
		numInfant = document.getElementById("INFANTSelect");

		//For refresh and onload of page set the to1 select dropdown based on from1 selected value
		buildFlyToDropDown(from.value);

		//Initalise tripType settings
		if(oneWayRadio.checked){
			numberMarketsHiddenField.value = 1;
			document.getElementById("returndateblock").style.display = "none";
		}
		else{
			numberMarketsHiddenField.value = 2;
		}

		//Set out date to today's date
		populateToday(1);

		//Initalise dates
		correctDates(dayGap, sector_1_dd);
		
		// Apply onchange and onclick functions to Input Elements
		for(flytcse_count1 = 0;flytcse_count1<flytcseInputElements.length;flytcse_count1++){

			switch(flytcseInputElements[flytcse_count1].id){

				case "roundTripRadio"	:	var radioVal1 = flytcseInputElements[flytcse_count1].value;
											flytcseInputElements[flytcse_count1].onclick = function(){
												numberMarketsHiddenField.value = radioVal1;
												document.getElementById("returndateblock").style.display = "";
											}
											break;

				case "oneWayRadio"		:	var radioVal2 = flytcseInputElements[flytcse_count1].value;
											flytcseInputElements[flytcse_count1].onclick = function(){
												numberMarketsHiddenField.value = radioVal2;
												//to.options[0].selected = true;
												document.getElementById("returndateblock").style.display = "none";
											}
											break;
			}
		}

		// Apply onchange and onclick functions to Select Elements
		for(flytcse_count2 = 0;flytcse_count2<flytcseSelectElements.length;flytcse_count2++){

			switch(flytcseSelectElements[flytcse_count2].id){

				case "departDay1Select"		:	flytcseSelectElements[flytcse_count2].onchange = function(){
													correctDates(dayGap, this, 1);
													AndyCal_buildCalendar('AndyCal',1);
												}
												break;

				case "departDay2Select"		:	flytcseSelectElements[flytcse_count2].onchange = function(){
													correctDates(dayGap, this, 2);
													AndyCal_buildCalendar('AndyCal',2);
												}
												break;
				case "departMonth1Select"	:	flytcseSelectElements[flytcse_count2].onchange = function(){
													correctDates(dayGap, this, 1);
													AndyCal_buildCalendar('AndyCal',1);
													changeDay(1);changeDay(2);
												}
												break;
				case "departMonth2Select"	:	flytcseSelectElements[flytcse_count2].onchange = function(){
													correctDates(dayGap, this, 2);
													AndyCal_buildCalendar('AndyCal',2);
												}
												break;

				case "from1"			:	flytcseSelectElements[flytcse_count2].onchange = function(){
													buildFlyToDropDown(this.value);
												}
												break;
			}
		}
	}
	
}

function populateToday(plusMonthAmt){
	var today = new Date();
	var todayMonth = today.getMonth();
	var todayYear = today.getFullYear();
	var todayDate = today.getDate();
	todayMonth = todayMonth + plusMonthAmt;

	if(todayMonth == 12)
	{
	todayMonth = 1;
	todayYear = todayYear + 1;
	}
	else
	{
	todayMonth = todayMonth + 1;
	}

	todayDate = AddZerosToDate(todayDate);
	todayMonth = AddZerosToDate(todayMonth);

	var fullMonth = todayYear.toString() + todayMonth.toString();

	sector_1_yyyymm.value = fullMonth;
	sector_1_dd.value = todayDate;
}

function AddZerosToDate(num){
	if(num < 10){num = "0" + num}
	return num;
}

function getMaxDaysInMonth(monthfield){

	var month = monthfield.value.substring(4) - 0;
	var year = monthfield.value.substring(0,4);
	var maxDays;

	switch(month)
	{
		case 1: maxDays = 31;
			break;
		case 3: maxDays = 31;
			break;
		case 5: maxDays = 31;
			break;
		case 7: maxDays = 31;
			break;
		case 8: maxDays = 31;
			break;
		case 10: maxDays = 31;
			break;
		case 12: maxDays = 31;
			break;
		case 4: maxDays = 30;
			break;
		case 6: maxDays = 30;
			break;
		case 9: maxDays = 30;
			break;
		case 11: maxDays = 30;
			break;
		case 2:	if(year%4 == 0)
				{
					maxDays = 29;
				}
				else
				{
					maxDays = 28;
				}
			break;
	}

	return maxDays;
}

function correctDates(dayGap, Elem, mrkNo){

	var SELECTED_MktNo = (Elem.name.toString().indexOf("1") != -1) ? 1 : 2;
	var TARGET_MktNo = (Elem.name.toString().indexOf("1") != -1) ? 2 : 1;
	var TARGET_dayField = document.getElementById("departDay" + TARGET_MktNo + "Select");
	var SELECTED_dayField = document.getElementById("departDay" + SELECTED_MktNo + "Select");
	var TARGET_monthField = document.getElementById("departMonth" + TARGET_MktNo + "Select");
	var SELECTED_monthField = document.getElementById("departMonth" + SELECTED_MktNo + "Select");
	var maxDays_1_Month = getMaxDaysInMonth(sector_1_yyyymm);
	var maxDays_2_Month = getMaxDaysInMonth(sector_2_yyyymm);
	var daysOverflow = (parseInt(sector_1_dd.value) + dayGap) - parseInt(getMaxDaysInMonth(sector_1_yyyymm));

	//If out date then set the back date + 7 days
	if(SELECTED_MktNo == 1){
		TARGET_dayField.value = AddZerosToDate(parseInt(SELECTED_dayField.value.toString()-0)+ dayGap);
	}

	//Correct days to max days allowed in month
	if(SELECTED_dayField.value > eval("maxDays_" + SELECTED_MktNo + "_Month")){
		SELECTED_dayField.value = eval("maxDays_" + SELECTED_MktNo + "_Month");
	}

	//No Timelords please
	if(sector_2_yyyymm.value < sector_1_yyyymm.value){
		sector_2_yyyymm.value = sector_1_yyyymm.value;
	}

	//Overflow days for back day field
	if(SELECTED_dayField.name == "departDay1"){
		if(daysOverflow > 0){
			TARGET_dayField.value = AddZerosToDate(daysOverflow);

			if(SELECTED_monthField.value == TARGET_monthField.value){
				if(SELECTED_monthField.value.substring(4, SELECTED_monthField.value.length) == "12"){
					/*If there is overflow in the month of December we need to increment the returning Year!*/
					TARGET_monthField.value =  (parseInt(SELECTED_monthField.value.substring(0,4))+1).toString() + "01";
				}
				else{
					TARGET_monthField.value = parseInt(SELECTED_monthField.value) + 1;
				}
				//Increment month when date overflow unless no more months to increment!!!
				if( (SELECTED_monthField.selectedIndex + 1) == (SELECTED_monthField.options.length) ){
					TARGET_dayField.value = parseInt(getMaxDaysInMonth(TARGET_monthField));
				}
			}
		}
		else{
			TARGET_monthField.value = SELECTED_monthField.value;
		}
	}
	else{
		if( (sector_2_yyyymm.value == sector_1_yyyymm.value) && (parseInt(sector_2_dd.value.toString()-0) < parseInt(sector_1_dd.value.toString()-0))  ){
			if(daysOverflow < 0){
				sector_2_dd.value = AddZerosToDate(parseInt(sector_1_dd.value.toString()-0)+ dayGap);
			}
			else{
				sector_2_dd.value = AddZerosToDate(daysOverflow);
				if( sector_1_yyyymm.value.substring(4,sector_1_yyyymm.value.length) == "12" ){
					//increment year and set month to 01
					sector_2_yyyymm.value = (parseInt(sector_1_yyyymm.value.substring(0,4)) + 1).toString() +  "01";
				}
				else{
					sector_2_yyyymm.value = parseInt(sector_1_yyyymm.value-0) + 1;
				}
			}
		}
	}
	
	changeDay(1);changeDay(2);
}

function validForm(){
	var valid = true;
	var msg = "Please correct the following:\n\n";


	if(((parseInt(numAdult.value) + parseInt(numChild.value)) > 9)){
		valid = false;
		msg = msg + "- The number of passengers Adults and Children exceed our maximum number of 9 passengers allowed to travel on 1 booking.\n";
	}

	if(parseInt(numInfant.value) > parseInt(numAdult.value)){
		valid = false;
		msg = msg + "- For every infant travelling there must be an adult to accompany them. 1 infant to 1 adult.\n";
	}

	if(document.getElementById("from1").options[document.getElementById("from1").selectedIndex].text == "Origin"){
		valid = false;
		msg = msg + "- Please select where you would like to fly from.\n";
	}

	if(document.getElementById("to1").options[document.getElementById("to1").selectedIndex].text == "Destination"){
		valid = false;
		msg = msg + "- Please select where you would like to fly to.\n";
	}
	
	// for mac addresses and LFS - not allowed
	var fromTest = document.getElementById("from1").options[document.getElementById("from1").selectedIndex].value;
	var toTest = document.getElementById("to1").options[document.getElementById("to1").selectedIndex].value;
	var farePriority = document.getElementById("farePriority").options[document.getElementById("farePriority").selectedIndex].value;
	var pattern = /CIS|CYP|LON|TUK/i; //ie the mac airports
	
	if ( ( pattern.test(fromTest) || pattern.test(toTest) ) && (farePriority == "2") ){
		valid = false;
		msg = msg + "- Sorry, but grouped airports can't be used with a 'Lowest fares only' search. Please select a specific airport to use this search feature.\n";
	}	
	

	if(!valid){alert(msg);}

	return valid;
}

function buildDateDropDowns(mrkNo){
	var monthsToOffer = 18;
	var today = new Date();
	var dateDropDownDiv = document.getElementById("monthYearDropDown" + mrkNo);
	var monthNames = 							new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
	var idLabel = "departMonth" + mrkNo + "Select";
	var nameLabel = "departMonth" + mrkNo;

	var selectEle = document.createElement("select");
	selectEle.setAttribute("id", idLabel);
	selectEle.setAttribute("class","flytcse_select_fields");
	selectEle.setAttribute("size","1");
	selectEle.setAttribute("name", nameLabel);

	for(var t=0; t<monthsToOffer; t++){
		if(t>0){
			today.setMonth(today.getMonth() + 1);
		}
		var optionEle = document.createElement("option");
		var optionText = document.createTextNode(monthNames[today.getMonth()] + " " + today.getFullYear());
		optionEle.appendChild(optionText);
		optionEle.value = today.getFullYear().toString() + AddZerosToDate(today.getMonth()+1);

		selectEle.appendChild(optionEle);
	}
	dateDropDownDiv.appendChild(selectEle);
}

function changeDay(market){
	var dayField = document.getElementById("departDay" + market + "Select");
	var dayTextDIV = document.getElementById("dayText" + market);
	var monthField = document.getElementById("departMonth" + market + "Select");
	var year = monthField.value.substring(0,4);
	var month = monthField.value.substring(4);
	var strMonth = "";
	var strDay = "";
	var dayTextSpan;

	if(document.getElementById("DayText" + market)){
		dayTextSpan = document.getElementById("DayText" + market);
	}
	
	if(dayTextDIV.hasChildNodes()){
		dayTextDIV.removeChild(dayTextDIV.childNodes[0]);
	}
	
	switch(month){
		case "01":strMonth = "January"; break;
		case "02":strMonth = "February";break;
		case "03":strMonth = "March";break;
		case "04":strMonth = "April";break;
		case "05":strMonth = "May";break;
		case "06":strMonth = "June";break;
		case "07":strMonth = "July";break;
		case "08":strMonth = "August";break;
		case "09":strMonth = "September";break;
		case "10":strMonth = "October";break;
		case "11":strMonth = "November";break;
		case "12":strMonth = "December";break;
	}
   	var fulldateStr = strMonth + " " + dayField.value + ", " + year;
	var selectedDate = new Date(fulldateStr);
	var dayNum = selectedDate.getDay().toString();
	
	switch (dayNum){
		case "0":strDay = "Sun";break;
		case "1":strDay = "Mon";break;
		case "2":strDay = "Tue";break;
		case "3":strDay = "Wed";break;
		case "4":strDay = "Thu";break;
		case "5":strDay = "Fri";break;
		case "6":strDay = "Sat";break;
	}
	dayTextSpan = document.createElement("span");
	dayTextSpan.id = "DayText" + market;
	var dayTextText = document.createTextNode(strDay);
	dayTextSpan.appendChild(dayTextText);	
	dayTextDIV.appendChild(dayTextSpan);
}

/*#### Calendar ####*/

function AndyCal_buildCalendar(calendarContainerDivID,mrkNo,dateArg,monthYearArg)
{
if(document.getElementById(calendarContainerDivID))
{
	var AndyCalDiv = document.getElementById(calendarContainerDivID);
	var minMonthToDisplay;
	var minMonthToDisplayYear2;
	var maxMonthToDisplayYear2;
	var mrkNo = mrkNo;

	//Important variable handlers - decides on the start month of the season calendar
	if(document.getElementById("departDay" +  mrkNo + "Select"))
	{
		var DayField = document.getElementById("departDay" +  mrkNo + "Select");
		var MonthField = document.getElementById("departMonth" +  mrkNo + "Select");

		minMonthToDisplay = parseInt(document.getElementById("departMonth" +  mrkNo + "Select").options[0].value.substring(4, document.getElementById("departMonth" +  mrkNo + "Select").options[0].value.length)-0);
		minMonthToDisplayYear2 = "1"; /*##### Controls YEAR 2 start month this should always be static and YEAR 1 when no form fields exist. #####*/
		maxMonthToDisplayYear2 = parseInt(document.getElementById("departMonth" +  mrkNo + "Select").options[document.getElementById("departMonth" +  mrkNo + "Select").options.length-1].value.substring(4, document.getElementById("departMonth" +  mrkNo + "Select").options[document.getElementById("departMonth" +  mrkNo + "Select").options.length-1].value.length)-0);
	}
	else
	{
		//No date fields to read available dropdown date range the hardcode the values
		minMonthToDisplay = 1;
		minMonthToDisplayYear2 = 1;
		maxMonthToDisplayYear2 = 12;

	}

	//Clear out existing calendar table
	if(document.getElementById("calendar"))
	{
		var AndyCalTable = document.getElementById("calendar");
		AndyCalDiv.removeChild(AndyCalTable);
	}

	var monthNames=['January','February','March','April','May','June','July','August','September','October','November','December'];

	if(arguments.length == 2 && document.getElementById("departDay" +  mrkNo + "Select")) //Capture Engine dates if no arguments are passed to this function
	{
		var Engine_date = DayField.value;
		var Engine_month = MonthField.value.substring(4, MonthField.value.length);
		var Engine_year = MonthField.value.substring(0, 4);
	}
	else if(arguments.length == 2 && !document.getElementById("departDay" +  mrkNo + "Select"))
	{
		//Exception caught - no information is provided to build calendar
		alert("AndyCal_buildCalendar Function Error:\n Insufficient information provided. Form elements Date and Month or parameters required! Please refer to documentation within js file.");
		return false;
	}
	else
	{
		//Function is being passed arguments so used these instead of the engine fields
		var Engine_date = dateArg;
		var Engine_month = monthYearArg.substring(4, MonthField.value.length);
		var Engine_year = monthYearArg.substring(0, 4);
	}

	var Engine_dateObj = new Date(monthNames[(Engine_month - 0)-1] + " 01," + Engine_year);
	var DaysInMonth = AndyCal_getDaysInMonth(Engine_dateObj);
	//Set this for onclick dates
	var onclickMonthYear = Engine_dateObj.getFullYear().toString() + AddZerosToDate(Engine_dateObj.getMonth()+1);

	//Calculate number of table rows needed
	var emptyStartCels = Engine_dateObj.getDay()-1;
	var emptyStartCelsToAdd = Engine_dateObj.getDay();
	var tableCels = DaysInMonth + emptyStartCelsToAdd;
	var tableRows = Math.floor(tableCels / 7);
	if((tableCels % 7) != 0){tableRows += 1;}

	//Add an extra 2 rows for month and day displays
	tableRows += 2;

	//Build calendar table
	var tableEle = document.createElement("TABLE");
	tableEle.setAttribute("class", "calLink");
	tableEle.setAttribute("id","calendar");
	tableEle.setAttribute("border","1");

	var tablebodyEle = document.createElement("TBODY");
	tableEle.appendChild(tablebodyEle);

	AndyCalDiv.appendChild(tableEle);
	var dayCount = 1;

	for(var tableRowsCount = 0; tableRowsCount<tableRows; tableRowsCount++)
	{

		if(tableRowsCount == 0){ //Month display row

			var prevMonth = Engine_dateObj.getMonth()+1;
			var prevYear = Engine_dateObj.getFullYear();
			var nextMonth = Engine_dateObj.getMonth()+1;
			var nextYear = Engine_dateObj.getFullYear();
			var rowEle = document.createElement("tr");

			for(var tableColsCount = 0; tableColsCount<3; tableColsCount++)
			{
				if(tableColsCount == 0) // Insert prev button in row 1 cell 2
				{
					var colEle = document.createElement("th");
					colEle.setAttribute("id","prevth");

					//Create prev button
					var prevMonthLinkEle = document.createElement("a");
					var prevMonthLinkTextEle = document.createTextNode("<<");
					prevMonthLinkEle.setAttribute("href","Javascript:void(0)");

					if( (prevMonth > minMonthToDisplay) && (prevYear == new Date().getFullYear()) ) //Stops prev button when April is reached if the engine year is the same as current year
					{
						prevMonth = parseInt(prevMonth)-1;
					}
					else if( (prevYear > new Date().getFullYear()) && (prevMonth == minMonthToDisplayYear2) ) //If year is greater than current year and the month is March then allow prev button to go back to October in prev year
					{
						prevMonth = "12";
						prevYear = parseInt(prevYear)-1;
					}
					else if( (prevYear > new Date().getFullYear()) && (prevMonth > minMonthToDisplayYear2) ) //If year is greater than current year and the month is greater than March then allow prev button to go back a month in that year
					{
						prevMonth = parseInt(prevMonth)-1;
					}

					var prevMonthYear = prevYear.toString() + AddZerosToDate(parseInt(prevMonth));

					prevMonthLinkEle.onclick = function(){AndyCal_buildCalendar('AndyCal',mrkNo,'01',prevMonthYear)};
					prevMonthLinkEle.setAttribute("class", "calLink");
					prevMonthLinkEle.appendChild(prevMonthLinkTextEle)
					colEle.appendChild(prevMonthLinkEle);
					rowEle.appendChild(colEle);
				}
				else if(tableColsCount == 1) // Insert name of month in row 1 cell 2
				{
					var colEle = document.createElement("th");
					colEle.setAttribute("id","dateth");
					colEle.setAttribute("colSpan","5");

					var colTextEle = document.createTextNode(monthNames[Engine_dateObj.getMonth()] + " " + Engine_dateObj.getFullYear());
					colEle.appendChild(colTextEle);

					rowEle.appendChild(colEle);
				}
				else if(tableColsCount == 2) // Insert next button in row 1 cell3
				{
					var colEle = document.createElement("th");
					colEle.setAttribute("id","nextth");

					//Create next button
					var nextMonthLinkEle = document.createElement("a");
					var nextMonthLinkTextEle = document.createTextNode(">>");
					nextMonthLinkEle.setAttribute("href","Javascript:void(0)");

					if( (nextMonth == 12) && (nextYear < parseInt(new Date().getFullYear())+1) )
					{
						nextMonth = AddZerosToDate(minMonthToDisplayYear2); /*##### Retains the seasonal month in YEAR 2 display minMonthToDisplayYear2! Set this to minMonthToDisplay if you need to mimic YEAR 1#####*/
						nextYear = parseInt(nextYear)+1;
					}
					else if( (nextMonth < 12) && (nextYear <= parseInt(new Date().getFullYear())+1) )
					{
						if( (nextYear == parseInt(new Date().getFullYear())+1) && (nextMonth < maxMonthToDisplayYear2) ){
							nextMonth = AddZerosToDate((parseInt(nextMonth)+1));
						}
						else if(nextYear != parseInt(new Date().getFullYear())+1){
							nextMonth = AddZerosToDate((parseInt(nextMonth)+1));
						}
					}

					var nextMonthYear = nextYear.toString() + nextMonth;
					nextMonthLinkEle.onclick = function(){AndyCal_buildCalendar('AndyCal', mrkNo,'01',nextMonthYear)};
					nextMonthLinkEle.setAttribute("class", "calLink");
					nextMonthLinkEle.appendChild(nextMonthLinkTextEle);
					colEle.appendChild(nextMonthLinkEle);
					rowEle.appendChild(colEle);
				}
			}
		}
		else if(tableRowsCount == 1){ //Day display row
			var rowEle = document.createElement("tr");

			for(var tableColsCount = 0; tableColsCount<7; tableColsCount++)
			{
				var colEle = document.createElement("th");
				colEle.setAttribute("class", "datesth");
				colEle.appendChild(document.createTextNode("SMTWTFS".substring(tableColsCount,tableColsCount+1)));
				rowEle.appendChild(colEle);
			}
		}
		else{
			var rowEle = document.createElement("tr");

			//Handle 1st row which possibly contains empty starting cels
			if(tableRowsCount==2)
			{
				var rowEle = document.createElement("tr");

				for(var tableColsCount = 0; tableColsCount<7; tableColsCount++)
				{
					if(tableColsCount>emptyStartCels) //Create date populated cells in row 2
					{
						var colEle = document.createElement("td");
						rowEle.appendChild(colEle);

						/********************* Start build date links ********************/
						colEle.appendChild(buildDateLink(AndyCalDiv,dayCount,onclickMonthYear,mrkNo));
						/*********************  End build date links  ********************/
						dayCount += 1;
					}
					else //Create start empty cels if required
					{
						var colEle = document.createElement("td");
						rowEle.appendChild(colEle);
						var colTextEle = document.createTextNode(" ");
						colEle.appendChild(colTextEle);
					}
				}
			}
			else //middle rows of dates that do not require empty cells
			{
				var rowEle = document.createElement("tr");

				for(var tableColsCount = 0; tableColsCount<7; tableColsCount++)
				{
					var colEle = document.createElement("td");
					if(dayCount <= DaysInMonth)
					{
						/********************* Start build date links ********************/
						colEle.appendChild(buildDateLink(AndyCalDiv, dayCount,onclickMonthYear,mrkNo));
						/*********************  End build date links  ********************/
						dayCount += 1;
					}
					else // Create end empty cels
					{
						var colTextEle = document.createTextNode(" ");
						colEle.appendChild(colTextEle);
					}
					rowEle.appendChild(colEle);
				}
			}

		} /*##### END of build dates in month block ######*/

		tablebodyEle.appendChild(rowEle); //Add the resulting row to the table!

	}/*##### END of build table rows block ######*/
} //End of AndyCal DIV existance
else
{
	alert("AndyCal_buildCalendar Function Error:\n AndyDiv is not present on the page!");
	return false;
}
}

function buildDateLink(calDIVtoClose,dayCount, monthYear, mrkNo){
	//Builds date links and return element to be appended to each column
	var dateLink = document.createElement("a");
	var dateLinkText = document.createTextNode(dayCount);
	dateLink.setAttribute("href","Javascript:void(0)");
	dateLink.onclick = function(){
		SetDates("typeCal", AddZerosToDate(dayCount), monthYear, mrkNo);
		var mktDateField = document.getElementById("departDay" + mrkNo + "Select");
		correctDates(dayGap, mktDateField, mrkNo);;
	}
	dateLink.appendChild(dateLinkText);
	return dateLink;
}

function AndyCal_getDaysInMonth(Date)
{
	var MonthField = "";
	var YearField = "";

	if(arguments.length > 0)
	{
		MonthField = Date.getMonth();
		YearField = Date.getFullYear();
	}
	else
	{
		MonthField = document.getElementById("departMonth" +  mrkNo + "Select").value.substring(4) - 0;
		YearField = document.getElementById("departMonth" +  mrkNo + "Select").value.substring(0,4);
	}

	var maxDaysInMonth = 0;
	var isLeapYear = Leap(parseInt(YearField));

	switch(MonthField)
	{
		case 0: maxDaysInMonth=31;
		case 2: maxDaysInMonth=31;
		case 4: maxDaysInMonth=31;
		case 6: maxDaysInMonth=31;
		case 7: maxDaysInMonth=31;
		case 9: maxDaysInMonth=31;
		case 11: maxDaysInMonth=31; break;
		case 3: maxDaysInMonth=30;
		case 5: maxDaysInMonth=30;
		case 8: maxDaysInMonth=30;
		case 10: maxDaysInMonth=30; break;
		default: isLeapYear?maxDaysInMonth=29:maxDaysInMonth=28;
	}
	return maxDaysInMonth;
}

function SetDates(callType, day, monthYear, mrkNo)
{
	var DayField = document.getElementById("departDay" +  mrkNo + "Select");
	var MonthField = document.getElementById("departMonth" +  mrkNo + "Select");

	//For calendar callType only set the day and month dropdowns
	if(arguments.length > 0){
		DayField.value = day;
		MonthField.value = monthYear;
	}
}

function Leap(Year)
{
	if((Year % 4) == 0){if((Year % 100) == 0){Result = ((Year % 400) == 0);}else{Result = 1;}}else{Result = 0;}
	return (Result);
}

function openPopLayer(layerID,e,mm1)
{
	/*Reset all popups to hidden except the current popup*/
	var popupIdArr = new Array("AndyCal");


	for(var j=0; j<popupIdArr.length; j++)
	{
		if((popupIdArr[j] != layerID) && (document.getElementById(popupIdArr[j])) ){
		document.getElementById(popupIdArr[j]).style.display = "none";
		}
	}

    var layerObj = document.getElementById(layerID);

	var e = (document.all) ? window.event : e; //window.event is IE6

    var cursor = {x:0, y:0};

    if (e.pageX || e.pageY)
    {
	//moz
	cursor.x = e.pageX;
	cursor.y = e.pageY;
    }
    else
    {
	//win
	var de = document.documentElement;
	var b = document.body;
	cursor.x = e.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
	cursor.y = e.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
    }

	if (document.all)//win
	{
		//position layer depending on layer identity

		switch(layerID)
		{
			case "AndyCal" : layerObj.style.display = "block";
						//layerObj.style.top = (cursor.y - 90);
						//layerObj.style.left = (cursor.x);
					//layerObj.style.top = (15);
					//layerObj.style.left = (420);
					 break;
		}
	}
	else //moz
	{
		//position layer depending on layer identity
		switch(layerID)
		{
			case "AndyCal" : layerObj.setAttribute("style", "display: block;"); /*top: " + (15) + "px ; left: " + (420) + "px ;");*/ break;
		}
	}

}

function resetPopups(evt)
{
	var popupIdArr = new Array("AndyCal");
	var elem = (evt.target) ? evt.target : evt.srcElement;
	if( (elem.className != "calLink") && (elem.id != "CalImg1" && elem.id != "CalImg2" && elem.id != "signup_header" && elem.id != "submitbtn_paxLayer" && elem.id != "paxPopupDIV" && elem.id != "AdultPaxDIV_paxLayer" && elem.id != "ChildPaxDIV_paxLayer" && elem.id != "InfantPaxDIV_paxLayer" && elem.id != "AdultPax_paxLayer" && elem.id != "ChildPax_paxLayer" && elem.id != "InfantPax_paxLayer" && elem.id != "paxLayer_body" && elem.id != "paxLayer_container" && elem.className != "opt" && elem.className != "smllabel") )
	{
		for(var i=0; i<popupIdArr.length;i++)
		{
			if(document.getElementById(popupIdArr[i]))
			{
				var popupID = document.getElementById(popupIdArr[i]);
				popupID.style.display = "none";
			}
		}
	}
}
/*##### END Calendar #####*/