
/* Start Global declaration of  variables*/
var gAirtradeLastLocatorId = null;
var gAirtradeCompleterResults = {};
var gAirtradeCompleterObjs = {};
var Curid;
var inputTxt;
var tvalue;
var noresultflag = 1;
var PreviousValue ='';
var pop2=false;   //flag if selecting area or selecting an airport name
var closepop2=false;
var gInputId="";
var gLocator=null;

function findPreferredAriline(txt, cval)
{
	Curid = cval;
	inputTxt = txt;
	if(txt.length == 0 ) return;
	
	inputTxt = txt;
	DWREngine._execute(dwrURL, 'FindFlightsDwr', 'getpreferredAliance', "Preferred Alliances","Preferred Airlines",inputTxt,inputTxt, findPreferredArilineCallClistback);
}


function findCityDWR(txt, cval)
{
	
	Curid = cval;
	if(txt.length == 0 ) { DWREngine._execute(dwrURL, 'GeocoderServiceDwr', 'listcities', txt, fillCListDWRCallClistback); }
	if(txt.length < 3 ) return;

	DWREngine._execute(dwrURL, 'GeocoderServiceDwr', 'listcities', txt, fillCListDWRCallClistback);
}

function fillCListDWRCallClistback(citylst) 
{
	city=citylst;
	AirtradeBuildOptions(inputTxt, citylst, Curid)
}


function findPreferredArilineCallClistback(Alinelist) 
{	
	city=Alinelist;
	AirtradeBuildOptions(inputTxt, Alinelist, Curid)
}


function initCompleters()
{
	createLocator();
	completerDept = new AirtradeCompleter("RdeptPlace", completerPopupWrap, completerPopdownWrap, "dapopup");
	completerArr = new AirtradeCompleter("RarrivalPlace", completerPopupWrap, completerPopdownWrap, "dapopup");
	completerArr = new AirtradeCompleter("OdeptPlace", completerPopupWrap, completerPopdownWrap, "dapopup");
	completerArr = new AirtradeCompleter("OarrivalPlace", completerPopupWrap, completerPopdownWrap, "dapopup");
	completerArr = new AirtradeCompleter("MdeptPlace1", completerPopupWrap, completerPopdownWrap, "dapopup");
	completerArr = new AirtradeCompleter("MarrivalPlace1", completerPopupWrap, completerPopdownWrap, "dapopup");
	completerArr = new AirtradeCompleter("MdeptPlace2", completerPopupWrap, completerPopdownWrap, "dapopup");
	completerArr = new AirtradeCompleter("MarrivalPlace2", completerPopupWrap, completerPopdownWrap, "dapopup");
	completerArr = new AirtradeCompleter("MdeptPlace3", completerPopupWrap, completerPopdownWrap, "dapopup");
	completerArr = new AirtradeCompleter("MarrivalPlace3", completerPopupWrap, completerPopdownWrap, "dapopup");
	completerArr = new AirtradeCompleter("MdeptPlace4", completerPopupWrap, completerPopdownWrap, "dapopup");
	completerArr = new AirtradeCompleter("MarrivalPlace4", completerPopupWrap, completerPopdownWrap, "dapopup");

	completerArr = new AirtradeCompleter("FFfindcity", completerPopupWrap, completerPopdownWrap, "dapopup");
	completerArr = new AirtradeCompleter("pCarrier", completerPopupWrap, completerPopdownWrap, "dapopup");
	
	setdefaultselect("pAdults","1");

}


function completerPopupWrap(inputEl)
{	
	popupff(inputEl, "locator",0,1);
}

//asdf
function completerPopdownWrap()
{	//if clicked on an airport name, show div
	if(!pop2)	popdown2(true);
}


function AirtradeCompleter(inputId, popupFunc, popdownFunc, popupid)
{   
	this.locCode = null;
	this.locDesc = null;
	// internal vars
	this.inputId = inputId;
	this.currentLocator = null;
	this.completerTimeout = 0;
	this.currentOption = -1;
	this.nrOfOptions = 0;
	this.popupFunc = popupFunc;
	this.popdownFunc = popdownFunc;
	this.popupid = popupid;
	this.locked = false;
 
	this.OPTION_FILLER = "&nbsp;&nbsp;";
	this.LOCATORID = "Airtradelocator";

	gAirtradeCompleterObjs[inputId] = this;
   
	this.setCode = function(code) 
	{
		this.locCode = code;
	}

	this.setDesc = function(desc) 
	{ 
		var inp = document.getElementById(this.inputId);
		inp.value = desc;
		this.locDesc = new Object();
		this.locDesc.y = desc;
		this.locDesc.c = '';
		this.locDesc.cc = '';
	}

	this.removeOptionFiller = function(option)
	{
		return option.replace(RegExp("^\&nbsp;\&nbsp;(.*)","ig"),"$1");
	}

	this.selectLocatorOption = function(nr, locator)
	{ 
		if (locator == null)
			locator = document.getElementById(this.LOCATORID);

		var inp = document.getElementById(this.inputId);
		this.selectOption(city[nr], inp);
	}
	this.selectOption = function(option, inp)
	{   gInputId=inp.id;
		gLocator=document.getElementById(this.LOCATORID);
		if(inp.id == 'pCarrier')
		{
			if(option.indexOf("((") != -1)
				document.getElementById("pCarrierhidden").value=option.substr(option.length-9,8).replace(/^\s*|\s*$/g,"");
			else
				document.getElementById("pCarrierhidden").value=option.substr(option.length-3,2).replace(/^\s*|\s*$/g,"");
		}	
		if(inp.id == 'RdeptPlace')
		{	//option selected isn't airport name but area
			getOption(inp.id,option);
		}
		else if(inp.id == 'RarrivalPlace'){	//option selected isn't airport name but area
			
			getOption(inp.id,option);
		}
		else if(inp.id == 'OdeptPlace'){	//option selected isn't airport name but area
			
			getOption(inp.id,option);
		}
		else if(inp.id == 'OarrivalPlace'){	//option selected isn't airport name but area
			
			getOption(inp.id,option);
		}
		else if(inp.id == 'MdeptPlace1')getOption(inp.id,option);
		else if(inp.id == 'MarrivalPlace1')getOption(inp.id,option);
		else if(inp.id == 'MdeptPlace2')getOption(inp.id,option);
		else if(inp.id == 'MarrivalPlace2')getOption(inp.id,option);
		else if(inp.id == 'MdeptPlace3') getOption(inp.id,option);
		else if(inp.id == 'MarrivalPlace3') getOption(inp.id,option);
		else if(inp.id == 'MdeptPlace4')getOption(inp.id,option);
		else if(inp.id == 'MarrivalPlace4')getOption(inp.id,option);

		else if(inp.id == 'FFfindcity')
		{
			document.getElementById("FFfindcityhidden").value=option.substr(option.length-4,3);
		}
		//if clicked on an airpot name add value and interact with map
		if(!pop2){
			 
			inp.value = option;
			//interactwithMap();
			this.locDesc = option;
			document.getElementById("dapopup2").style.display="none";
			document.getElementById("dapopup2").innerHTML="";
			document.getElementById("dapopupcover2").style.display="none";
		}
		else{  //asdf
			airportsInArea(document.getElementById(gInputId+"hidden").value);
		}
		//asdf
				
	}


	this.lowlight = function()
	{  
		var bla = document.getElementById(this.LOCATORID);
		if(this.currentOption >= 0 && bla.childNodes[this.currentOption] != "undefined")
			bla.childNodes[this.currentOption].className = "locatoroption";
	}
	this.highlight = function(dir, update, scrollIntoView)
	{
		var bla = document.getElementById(this.LOCATORID);
		if(this.currentOption >= 0 && this.nrOfOptions > 0)
			bla.childNodes[this.currentOption].className = "locatoroption";
		this.currentOption = this.currentOption + dir;
		if(this.currentOption < 0)
			this.currentOption = 0; 
		else if(this.currentOption >= bla.childNodes.length)
			this.currentOption = bla.childNodes.length-1; 
		bla.childNodes[this.currentOption].className = "locatoroptionmo";
		bla.childNodes[this.currentOption].display = "none";
		if (scrollIntoView)
		{
			if (scrollIntoView == 1) // down
				bla.childNodes[this.currentOption].scrollIntoView(false);
			else if (scrollIntoView == -1) // up
				bla.childNodes[this.currentOption].scrollIntoView(true);
		}
		if(update &&  this.nrOfOptions > 0) {
			
			this.selectLocatorOption(this.currentOption, bla);
		}
	}

	this.adjustLocatorHeight = function(locator,extra)
	{
		// check the locator height
		var nr = (this.nrOfOptions) ? this.nrOfOptions+(extra?extra:0) : 1;
		nr = (nr > this.MAXOPTIONS) ? this.MAXOPTIONS : nr;
		var h = locator.firstChild.offsetHeight;

		var ieExtraSpace = 3;

		var pop = document.getElementById(this.popupid);
		if (nr < 10){
			pop.style.height = h*nr+3+ "px";
		}else{
			pop.style.height = h*10+ "px";
		}
		horzPosPopup();
		setPopupCover();
	}

	this.selectDefaultAirport = function(locator, shouldTab)
	{
		var tabToEl = null;
		if (this.nrOfOptions && locator.childNodes.length > 0)
		{
			if (this.currentOption != -1)
				this.selectLocatorOption(this.currentOption, locator);	
			else if(!closepop2)
				this.selectLocatorOption(0, locator);
		}
		//if clicked on an airport name
	    if(pop2==false){
			this.removeAllOptions();	
			this.popdownFunc();
		} 
		else{
			popdown2(false);
		}

		if (tabToEl && tabToEl.select && getMouseOverCtrl() == '')  
			tabToEl.select();
	}

	// =============================
	// Events handlers for the input

	this.locatorkd = function(me, ev)
	{
		var locator = null;
		var bla = document.getElementById(this.popupid);
		if(bla.calledby != me)
		{
			this.popupFunc(me);
			locator = document.getElementById(this.LOCATORID);
			if (locator.firstChild == null)
			{
				nothing =  document.createElement('DIV');
				locator.appendChild(nothing);
				
					if(me.id == "pCarrier")
						nothing.innerHTML = "<span class=\"noresults\">Enter 1 Character To Search...</span>";
					else	
						nothing.innerHTML = "<span class=\"noresults\">" + rm.nowSearching + "</span>";
				this.adjustLocatorHeight(locator);
			}
		}
		//catch tab dispense the rest to locator
		ev=ev||event||null;
		if (ev) 
		{
			var cc=ev.charCode||ev.keyCode||ev.which;

			if(cc == 9 || cc == 13) //tab, enter
			{
				if (locator == null)
					locator = document.getElementById(this.LOCATORID);
				this.selectDefaultAirport(locator, false);
				return false;
			}
			else if(cc==38||cc==57385)
			{
				this.highlight(-1, true, -1);
				return false;
			}
			else if(cc==40||cc==57386)
			{
				this.highlight(1, true, 1);
				return false;
			}
		}
		return true;
	}

	this.locatorkp = function(me, ev)
	{
		closePopup2();
		ev=ev||event||null;
		if (ev) 
		{  
			var cc=ev.charCode||ev.keyCode||ev.which;
		    if (cc==38||cc==57385||cc==40||cc==57386) return false; //up or down
          
			if (cc==13 && this.currentOption > -1)
			{   
				this.selectLocatorOption(this.currentOption);
				this.lowlight();
				popdown2(true);
			}
		}
		return true;
	}
	this.locatorku = function(me, ev)
	{   
		var bla = document.getElementById(this.popupid);
		if(bla.calledby == me)
		{	
			ev=ev||event||null;
			if (ev) 
			{
				 var cc=ev.charCode||ev.keyCode||ev.which;
				 if (cc==38||cc==40||cc==57385||cc==57386||cc==13 || cc==27) { return false; }
				 gAirtradeLastLocatorId = me.id;
				 		 
				 window.clearTimeout(this.completerTimeout);	
				 this.completerTimeout = window.setTimeout(AirtradeCompleterGo, 1);
			}
	
		}
	
		return true;
	}

	this.locatormc = function(me, ev)
	{
		me.select();
	}

	this.locatorblur = function(me)
	{
		if (me.id != this.inputId)
			return;

		var locator = document.getElementById(this.LOCATORID);
		if (locator == null)
		{
			return;
		}

		this.selectDefaultAirport(locator, true);
	}

	// =============================
	// Events handlers for the options

	this.Airtradeoptionmc = function(me, ev)
	{
	}

	this.Airtradeoptionmout = function()
	{
		this.lowlight();
		this.className = "locatoroption";
		this.currentOption = -1;
	}

	this.Airtradeoptionmover = function(option)
	{
		this.lowlight();
		this.currentOption = option.index;
		this.highlight(0);
	}

	// =============================


	this.removeAllOptions = function()
	{
		var bla = document.getElementById(this.LOCATORID);
		if (bla && bla.childNodes)
		{
			while (bla.childNodes.length)
			{
				bla.removeChild(bla.firstChild);
			}
		}
		
		this.nrOfOptions = 0;
		this.currentOption = -1;
	}
	this.loadLocked = function(txt)
	{    
		var matches = [];
		var one;
		var utxt = txt.toUpperCase();
		for(var i = 0; i < this.locked.length-1;i++)
		{
			one = this.locked[i];
			if(one.m.toUpperCase().indexOf(utxt)==0 || one.y.toUpperCase().indexOf(utxt)==0)
				matches[matches.length] = one;
		}
		if(matches.length>0)
			AirtradeShowOptions(txt,matches,this.inputId);
		else
		{
			AirtradeShowOptions(txt,this.locked,this.inputId);					
			var input =  document.getElementById(this.inputId);
			input.value = rm.lockedpicker;
			input.select();

		}
	}
}

function getOption(divId,option){
	if(option.indexOf("<div")!=-1)
	{	 
		pop2=true;
		var code=option.substr(0,option.length-38);
		code=code.substring(code.indexOf(">")+1);
		document.getElementById(divId+"hidden").value=code;
	}
	else
	{	pop2=false; 
		document.getElementById(divId+"hidden").value=option.substr(option.length-4,3);
	}
}


// *** Timer method ***

function AirtradeCompleterGo()
{		
	var obj = gAirtradeCompleterObjs[gAirtradeLastLocatorId];
	var bla = document.getElementById(gAirtradeLastLocatorId);
	if(bla) {
		
		var txt = bla.value;
			
		if(obj.locked) { obj.loadLocked(txt); }
		else {
			if(bla.id == "pCarrier") {
				findPreferredAriline(txt, gAirtradeLastLocatorId);
			}
			else {
				findCityDWR(txt, gAirtradeLastLocatorId);
			}
		}
	}
	
}

// *** Event handlers ***

function Airtradelocatorkd(me,ev)
{
	var hfiedl = me.id  +"hidden";
	PreviousValue = document.getElementById(hfiedl).value;
	var obj = gAirtradeCompleterObjs[me.id];
	obj.locatorkd(me, ev);
}

function Airtradelocatorkp(me, ev)
{   
	var obj = gAirtradeCompleterObjs[me.id];
    obj.locatorkp(me, ev);

	if( (me.id != "FFfindcity") && (ev.keyCode == 13) )
	{
		var hidvar = me.id + "hidden";
	   // if(me.id.indexOf("arrivalPlace") != -1)
		   // ShowDestinationonblur(PreviousValue, me.value.substr(me.value.length-4,3));
	}
}

function Airtradelocatorku(me, ev)
{
	var obj = gAirtradeCompleterObjs[me.id];
	obj.locatorku(me, ev);
	if(ev.keyCode == 46)
	{
		var hfiedl = me.id  +"hidden";
		me.value = '';
		document.getElementById(hfiedl).value = '';
		return null;
	}
}

function Airtradelocatormc(me, ev)
{ 	 
	var obj = gAirtradeCompleterObjs[me.id];
	obj.locatormc(me, ev);
}

/**
	Method called on blur from the text box. thoe set the values in hidden variable
*/
function Airtradelocatorblur(me)
{ 
	var obj = gAirtradeCompleterObjs[me.id];
	obj.locatorblur(me);
	var hidid = me.id + 'hidden';
	if(me.value == '')
	{
		document.getElementById(hidid).value='';
	}
	
	if(document.getElementById(hidid).value.replace(/^\s*|\s*$/g,"").length == 0)
	{
		me.value = '';
	}
	if(noresultflag == 0)
	{
		me.value='';
		document.getElementById(hidid).value='';
	}
	if( (me.id == "MarrivalPlace1") && (me.value==''))
	{
		document.getElementById("MarrivalPlace2hidden").value='';
		document.getElementById("MarrivalPlace2").value='';
		document.getElementById("MdeptPlace2hidden").value='';
		document.getElementById("MdeptPlace2").value='';
		document.getElementById("MarrivalPlace3hidden").value='';
		document.getElementById("MarrivalPlace3").value='';
		document.getElementById("MdeptPlace3hidden").value='';
		document.getElementById("MdeptPlace3").value='';
	}
	else if( (me.id == "MarrivalPlace2") && (me.value==''))
	{
		document.getElementById("MarrivalPlace2hidden").value='';
		document.getElementById("MarrivalPlace2").value='';
		document.getElementById("MarrivalPlace3hidden").value='';
		document.getElementById("MarrivalPlace3").value='';
		document.getElementById("MdeptPlace3hidden").value='';
		document.getElementById("MdeptPlace3").value='';
	}
	else if( (me.id == "MarrivalPlace3") && (me.value==''))
	{
		document.getElementById("MdeptPlace3").value='';
		document.getElementById("MarrivalPlace3hidden").value='';
		document.getElementById("MdeptPlace3hidden").value='';
	}
	else if( (me.id == "MarrivalPlace4") && (me.value==''))
	{
		document.getElementById("MdeptPlace4").value='';
		document.getElementById("MarrivalPlace4hidden").value='';
		document.getElementById("MdeptPlace4hidden").value='';
	}

	if(me.value.length <3)
	{
		me.value=''
		document.getElementById(hidid).value='';
	}
}

/**
	Method called on mouse click on the text box.
*/
function Airtradeoptionmc(ev)
{
	//focus on the textbox when click on area text, otherwise can't select airport
	if(pop2){
		document.getElementById(gInputId).focus();
		document.getElementById(gInputId).select();
	}
}

/**
	Method called on mouse out from the text box.
*/

function Airtradeoptionmout(ev)
{
	ev=ev||window.event||null;
	var targ = getEvTarget(ev);
	var option = (targ.inputId) ? targ : targ.parentNode;
	var obj = gAirtradeCompleterObjs[option.inputId];
	obj.Airtradeoptionmout();
}

/**
	Method called on mouse over the text box.
*/

function Airtradeoptionmover(ev)
{
	ev=ev||window.event||null;
	var targ = getEvTarget(ev);
	var option = (targ.inputId) ? targ : targ.parentNode;
	var obj = gAirtradeCompleterObjs[option.inputId];
	obj.Airtradeoptionmover(option);
}

/**
	Method to set the parameters to airtradeshow option method.
*/
function AirtradeBuildOptions(input, matches, inputId)
{
	gAirtradeCompleterResults[input] = matches;
	AirtradeShowOptions(input,matches,inputId);
}

/**
	Method to set and display the matching vlaues inthe drop down box.
*/
function AirtradeShowOptions(input, Clist, inputId)
    {   
	    noresultflag = 1;
		cityList = Clist;
		var obj = gAirtradeCompleterObjs[inputId];
		obj.removeAllOptions();
		var bla = document.getElementById(obj.LOCATORID);
		var option,match,name;
		var home = false;
		if(bla) 
		{   
			if(  (cityList != null) && (cityList.length > 0 ) )
			{								
				var r1 = new RegExp("([(, ]" + input+")","ig");	
				var r2 = new RegExp("^(" + input+")","i");				
				for (var i=0; i < cityList.length; i++ )
				{				
					match = cityList[i];				
					option =  document.createElement('DIV');
					bla.appendChild(option);
					option.onmouseover = Airtradeoptionmover; 
					option.onmouseout = Airtradeoptionmout;
					option.onclick = Airtradeoptionmc;
					option.className = "locatoroption";
					option.index = i;
					option.inputId = inputId;
					name =cityList[i].replace(r1,"<b>$1</b>");
					option.innerHTML = obj.OPTION_FILLER+cityList[i];
					option.option = match;	
				}
				
				obj.nrOfOptions = cityList.length + (home?1:0);
			}	
			else //no results or default results
			{
				nothing =  document.createElement('DIV');
				bla.appendChild(nothing);
				if(!input || input.length == 0) 
				{
					if(inputId == "pCarrier")
						nothing.innerHTML = "<span class=\"noresults\">Enter 1 Character To Search...</span>";
					else	
						nothing.innerHTML = "<span class=\"noresults\">" + rm.noResults + "</span>";
				}
				else
				{
					if(inputId == "pCarrier")
						nothing.innerHTML = "<span class=\"noresults\">No Matching Airline Found</span>";
					else
						nothing.innerHTML = "<span class=\"noresults\">" + rm.noResults + "</span>";	
					noresultflag = 0;
				}
				obj.nrOfOptions = 0;
			}
			obj.adjustLocatorHeight(bla);
			if(!input || input.length == 0) return false;
 		 }
	}
	
