var AirportList=[];//list of objects
var CityBoxAirportsList={};//list of (un)checked airports

var Load = {
	AirSearch:function(){
		State.init($('state'));
		TripType.init();
		InputHint.date(['dt1', 'dt2', 'dt3', 'dt4', 'rdt']);
		AirportList=[[from1Obj, to1Obj],[from2Obj, to2Obj],[from3Obj, to3Obj],[from4Obj, to4Obj]];
		if(State.value.cb_airports)CityBoxAirportsList=State.value.cb_airports;
		setAirport();
	},
	MiniAirSearch:function(){
	    State.init($('state'));
		TripType.init();
		InputHint.date(['dt1', 'dt2', 'dt3', 'dt4', 'rdt']);
	}
}


function changeAirport(c,ac){
	var airpl=CityBoxAirportsList[c].Airports;
	for(var i=0;i<airpl.length; i++)
		if(airpl[i].Code==ac){var apL=$('iap').value;apL=(apL=='')?[]:apL.split(',');
	if(airpl[i].Sel=!airpl[i].Sel){for(var j=0;j<apL.length;j++)if(apL[j]==airpl[i].Code){apL.splice(j,1);break;}}
	else apL.push(airpl[i].Code);
	
	$('iap').value=apL.join(',');
	State.setValue('cb_airports', CityBoxAirportsList);return;}
}
function writeAirport(id){var h='<h2>Search the following airports:</h2>';
	var apL=[];
	for(var i1=0;i1<TripType.ApList.length;i1++){
		var c=TripType.ApList[i1];
		var obj=CityBoxAirportsList[TripType.ApList[i1]];var airpl=obj.Airports;if(airpl.length==0)continue;
		h+='<h3>Airports in '+obj.Name+'</h3>';
		for (var i=0;i<airpl.length;i++){var airp=airpl[i];
			var idn=id+airp.Code;
			if (!airp.Sel)apL.push(airp.Code);
			h+='<span><input onclick="changeAirport(\''+c+'\',\''+airp.Code+'\')" type="checkbox" '+((airp.Sel)?' checked="checked"':'')+' id="'+idn+'" /><label for="'+idn+'">'+airp.Name+'</label></span>';
		}
		$('iap').value=apL.join(',');
	}
	if(h=='<h2>Search the following airports:</h2>')$(id).hide();
	else{$(id).innerHTML=h;$(id).show();}
}

function setAirport(cbObj,item){
	if(cbObj){
		if(!CityBoxAirportsList[item.Code])CityBoxAirportsList[item.Code]=item;
		State.setValue('cb_airports', CityBoxAirportsList);
	}else{
		for(var i1=0;i1<AirportList.length;i1++)
			for(var i2=0;i2<2;i2++){
				var o=AirportList[i1][i2];
				if(o.code.value!='')
					o.init(CityBoxAirportsList[o.code.value]);
			}
	}

	TripType.ApList=[];
	if(AirportList[0][0].item)TripType.ApList.push(AirportList[0][0].item.Code);
	if(AirportList[0][1].item&&(TripType.ApList.length==0||TripType.ApList[0]!=AirportList[0][1].item.Code))TripType.ApList.push(AirportList[0][1].item.Code);
	if(TripType.getType()=='md')
		for(var i1=1;i1<TripType.getMdLegs();i1++)
			for(var i2=0;i2<2;i2++){
				var itm=AirportList[i1][i2].item;var b;
				if(itm)for(var i3=0;i3<TripType.ApList.length;i3++)if(b=(TripType.ApList[i3]==itm.Code))break;
				if(!b&&itm)TripType.ApList.push(itm.Code);
			}
	writeAirport('ap_list');
}



/*
REQUIRED ON PAGE:
	TripType.Disaply{
		Run(fade){call appropriate toggle function based on state}
		Toggle{
			O(fade){Change Display for one-way}
			R(fade){round-trip}
			M(fade){multiple-dest}
		}
		//If multi dest is supported the following are also required
		AddFlight{show fight area (for multi)}
		RemoveFlight{hide last fight area (for multi)}
		RemoveFlightBtn{hide flight button}	
*/
var TripType={
addFlt:function(){
	if(this.getMdLegs()==4)
		Dialog.warn({msg:"We're sorry but there is a maximum of four trip legs per itinerary.  If your trip involves more than four legs, please break it down into two or more parts and book each part separately."});
	if(this.getMdLegs()<4){
		this.setMdLegs(this.getMdLegs()+1);
		this.Display.AddFlight();		
	}
	this.Display.RemoveFlightBtn();
},
rmvFlt:function(){
	if(this.getMdLegs()>2){
		this.Display.RemoveFlight();
		this.setMdLegs(this.getMdLegs()-1);
	}
	this.Display.RemoveFlightBtn();
},
setType:function(nv,fade){State.setValue('tt',nv); this.Display.Run(fade); $$('form')[0].focusFirstElement();},
getType:function(){State.value.tt},
setMdLegs:function(num){State.setValue('md_legs',num);},
getMdLegs:function(){return State.value.md_legs},
getLegs:function(){switch(State.value.tt){case 'ow':return 1;case 'rt':return 2;default: return this.getMdLegs(); }},
getType:function(){return State.value.tt},
init:function(){this.Display.Run();}
}


var DateFields={
dt1:function(){
	switch(TripType.getType()){
	case 'O':return [$('dt1')]
	case 'R': case 'F': return [$('dt1'),$('rdt')]
	case 'M':
		var aF=[];
		for(var i=1;i<=TripType.getMdLegs();i++)
			aF.push($('dt'+i));
		return aF;
	}
},
dt2:function(){
	var aF=[];
	for(var i=1;i<=TripType.getMdLegs();i++)
		aF.push($('dt'+i));
	return aF;
},
dt3:function(){
	var aF=[];
	for(var i=1;i<=TripType.getMdLegs();i++)
		aF.push($('dt'+i));
	return aF;
},
dt4:function(){
	var aF=[];
	for(var i=1;i<=TripType.getMdLegs();i++)
		aF.push($('dt'+i));
	return aF;
}
}

var ComboNext={
tm1:function(){
	switch(TripType.getType()){
	case "R":  $('rdt').focus(); break;
	case "O":  $('adlt').focus(); break;
	case "M":  $('from2').focus(); break;
	}
},
tm2:function(){
	switch(TripType.getLegs()){
	case 2: $('btn-addFlt').focus(); break;
	default: $('from3').focus();
	}
},
tm3:function(){
	switch(TripType.getLegs()){
	case 3: $('btn-rmvFlt').focus(); break;
	default: $('from4').focus();
	}
}
}
