var mvLastLocationName="";
var mAirportsFound=0;
var mAirportsInList=0;
var mAirportsShowRow=0;
var mAirportsInDebug=false;
var mAirportsInTrace=false;
var mAirportsDivStatus="Closed";
var mfThisFromWhere="";
var mfThisEvent="";
var mfNextControl="";
var gfAALInPopup=false;
var gfAALFromWhere="";
var gfAALMatchAnywhere=false;
var gfAALAutoMatch=true;
var gfAALAirportCode="";

function mfTraceNew()
{
	if (mAirportsInTrace)
	{
		try
		{
			document.getElementById("idDivTrace").innerHTML="";
		}
		catch(er) {}
	}
}
function mfTraceOutput(thisText)
{
	if (mAirportsInTrace)
	{
		try
		{
			var lSoFar=document.getElementById("idDivTrace").innerHTML+"<br />"+thisText;
			
			document.getElementById("idDivTrace").innerHTML=lSoFar;
		}
		catch(er) {}
	}
}
function mfAirportsOnFocus(fromwhere,nextControl)
{
	//mfTraceNew();
	mfTraceOutput("mfAirportsOnFocus: "+fromwhere);

	if(!nextControl)
		mfNextControl="";
	else
		mfNextControl=nextControl;

	mfTraceOutput("mfAirportsOnFocus mfNextControl: "+mfNextControl);
		
	mfThisFromWhere=fromwhere;
	mfThisEvent="onfocus";

	mfTraceOutput("mfAirportsOnFocus gfSetIdHelpHTML");
	gfSetIdHelpHTML();

	mfTraceOutput("mfAirportsOnFocus end");
}
function mfKeypressAirportNames(event,fromwhere)
{
	var e = event || window.event;
	var lEventKeyCode = e.charCode || e.keyCode;
	
	mfTraceOutput("mfKeypressAirportNames event.keyCode:"+lEventKeyCode);
	
	// Handle initial Tab?
	if (mfThisEvent=="onfocus" && lEventKeyCode ==9)
	{
		mfTraceOutput("mfKeypressAirportNames:" + " GOTFOCUS TAB");
		mfThisEvent="tab";
		return(true);
	}
	if (lEventKeyCode ==16)
	{
		mfTraceOutput("mfKeypressAirportNames:" + " GOTFOCUS");
		mfThisEvent="gotfocus";
		return(true);
	}
	
	mfTraceOutput("mfKeypressAirportNames" + " keyCode:"+lEventKeyCode  + " fromwhere:"+fromwhere);
		
	if (lEventKeyCode ==13 && mAirportsShowRow==0)
	{
		mfThisEvent="enter";
		mfAirportNames(99,fromwhere);
		if (mAirportsDivStatus=="Closed")
			mfAirportTabToNextControl(fromwhere);
		return(true);
	}
	
	if (mAirportsDivStatus=="Open")
		if (mfHighlightRow())
			return(true);
		
	if (lEventKeyCode ==9)
	{
		mfTraceOutput("mfKeypressAirportNames:" + " TAB");
		mfThisEvent="tab";
		return(true);
	}
	
	mfTraceOutput("mfKeypressAirportNames" + " do mfAirportNames");
	mfAirportNames(lEventKeyCode ,fromwhere);
	
	return(true);
}

var mAALTimeout=0;
function mfAirportsOnBlur(fromwhere, nextControl)
{
	if(!nextControl)
		mfNextControl="";
	else
		mfNextControl=nextControl;
		
	mfTraceOutput("mfAirportsOnBlur" + " fromwhere:"+fromwhere + " nextControl:"+nextControl);

	mAALTimeout=setTimeout("mfAirportsOnBlurAction('"+fromwhere+"');",500);
}

function mfAirportsOnBlurAction(fromwhere)
{
	mfTraceOutput("mfAirportsOnBlurAction" + " fromwhere:"+fromwhere);
	var lvCode = document.getElementById(fromwhere+'Name').value;
	if (lvCode.length==3)
	{
		mfThisFromWhere=fromwhere;
		mfAirportNames(99, fromwhere);			
	}
}

// Initialise Arrays
function mfDoIfEnter(thisFunction)
{
	mfTraceOutput("mfDoIfEnter");
	mfTraceOutput("mfDoIfEnter" + " thisFunction:"+thisFunction);
	if (window.event && window.event.keyCode == 13)
	{
		thisFunction();
	}
	else
	{
		if (window.event && window.event.keyCode == 9)
		{
			mfAirportTabToNextControl("");
		}
	}
}

function mfArrivalDef(avAirportCode,avAirportName)
{
	this.vAirportCode=avAirportCode;
	this.vAirportName=avAirportName;
	this.vNameUppercase=avAirportName.toUpperCase();
}
var maArrivals=new Array();
var mnArrivalCount=0;
function mfArrival(avAirportCode,avAirportName)
{
	mnArrivalCount+=1;
	maArrivals[mnArrivalCount]=new mfArrivalDef(avAirportCode,avAirportName);
}

function mfHighlightRow()
{
	try
	{
		if (!event.keyCode) { return false; }
	}
	catch (er) {return false;}
		
	mfTraceOutput("mfHighlightRow:"+event.keyCode+" Row:"+mAirportsShowRow+" of:"+mAirportsInList);
	if (event.keyCode == 13 || event.keyCode == 9)
	{
		if (mAirportsShowRow>=1 && mAirportsShowRow<=mAirportsInList)
			try {document.getElementById("idRow"+mAirportsShowRow).onclick();}
			catch(er) {}
		return(true);
	}
	if (event.keyCode==40)
	{
		if (mAirportsShowRow<mAirportsInList)
		{
			m_LowLightRow(mAirportsShowRow);
			mAirportsShowRow=mAirportsShowRow+1;
			m_HightLightRow(mAirportsShowRow);
		}
		return(true);
	}
	if (event.keyCode==38)
	{
		if (mAirportsShowRow==1)
		{
			m_LowLightRow(mAirportsShowRow);
			mAirportsShowRow=mAirportsShowRow-1;
		}
		if (mAirportsShowRow>1)
		{
			m_LowLightRow(mAirportsShowRow);
			mAirportsShowRow=mAirportsShowRow-1;
			m_HightLightRow(mAirportsShowRow);
		}
		return(true);
	}
	return(false);
}
function m_LowLightRow(thisRow)
{
	try {document.getElementById("idRow"+thisRow).className="AirportName";}
	catch(er) {}
}
function m_HightLightRow(thisRow)
{
	try {document.getElementById("idRow"+thisRow).className="AirportNameHighlight";}
	catch(er) {}
}

var mregexAALPattern1;
var AALPattern2;

function mfAirportName(airportCode)
{
	for (fnArrivalRow = 1; fnArrivalRow < maArrivals.length; fnArrivalRow++)
	{
		if (maArrivals[fnArrivalRow].vAirportCode == airportCode)
		{
			return(maArrivals[fnArrivalRow].vAirportName);
		}
	}
	return(airportCode);
}

function mfAirportNames(keyCode, fromwhere)
{
	//if (mAirportsInDebug)
	mfTraceOutput("mfAirportNames:" + " keyCode:"+keyCode + " fromwhere:"+fromwhere+" maArrivals:"+maArrivals.length);
		
	var lvSpanHTML = "";
	var lvOneNameCode = "";
	var lvOneName = "";
	mAirportsFound=0;
	mAirportsInList=0;
	mAirportsShowRow=0;
	
	var lvCode = document.getElementById(fromwhere+'Name').value;

	mfTraceOutput("mfAirportNames:" + " lvCode:"+lvCode);
	
	var lnLength = lvCode.length;

	if (lnLength < 3)
	{
		mvLastLocationName = lvCode;
		mfHideAirportDiv(fromwhere);
		document.getElementById(fromwhere).value = '';
		mfTraceOutput("mfAirportNames:"+"lnLength < 3");
		return true;
	}

	if(keyCode==9)
	{
		mfTraceOutput("mfAirportNames:"+"keyCode==9");
		return(true);
	}
		
	if (keyCode == 1)
		mvLastLocationName = "";
		
	if(keyCode!=99)
	{
		mfTraceOutput("mfAirportNames:"+"keyCode:"+keyCode);
		if (mvLastLocationName == lvCode)
		{
			mfTraceOutput("mfAirportNames:"+"!=99 mvLastLocationName == lvCode:"+lvCode);
			return(true);
		}
		mvLastLocationName = lvCode;
		mfTraceOutput("mfAirportNames:"+"!=99 new mvLastLocationName:"+lvCode);
	
		if (lnLength > 2)
		{
			lvCode = lvCode.toUpperCase();
			if (gfAALMatchAnywhere)
				mregexAALPattern1 = new RegExp(lvCode);
			else
				mregexAALPattern1 = new RegExp("^"+lvCode);
			
			mfTraceOutput("mfAirportNames:"+"!=99 new mvLastLocationName:"+lvCode+" maArrivals.length:"+maArrivals.length);
		
			for (fnArrivalRow = 1; fnArrivalRow < maArrivals.length; fnArrivalRow++)
			{
				if (maArrivals[fnArrivalRow].vAirportCode == lvCode)
				{
					lvSpanHTML += mfAddName(fnArrivalRow,fromwhere);
					lvOneName = maArrivals[fnArrivalRow].vAirportName;
					lvOneNameCode = maArrivals[fnArrivalRow].vAirportCode;
					mAirportsFound+= 1;
					mfTraceOutput("mfAirportNames:"+"!=99 Found By Code:"+maArrivals[fnArrivalRow].vAirportName);
				}
				else
				{
					//alert(maArrivals[fnArrivalRow].vNameUppercase.substr(0,lnLength));
					//if (maArrivals[fnArrivalRow].vNameUppercase.substr(0,lnLength) == lvCode)
					if (mregexAALPattern1.exec(maArrivals[fnArrivalRow].vNameUppercase) != null)
					{
						lvSpanHTML += mfAddName(fnArrivalRow,fromwhere);
						lvOneName = maArrivals[fnArrivalRow].vAirportName;
						lvOneNameCode = maArrivals[fnArrivalRow].vAirportCode;
						mAirportsFound+= 1;
						//alert("mfAirportNames:"+"!=99 Found By Name:"+maArrivals[fnArrivalRow].vAirportName);
					}
				}
			}
		}
	}
	else
	{
		if (mvLastLocationName == lvCode && lnLength!=3)
		{
			mfTraceOutput("mfAirportNames:"+"99 mvLastLocationName == lvCode && lnLength!=3:"+lvCode);
			return(true);
		}
		mvLastLocationName = lvCode;

		// Tab pressed scan codes if size=3
		if(lnLength==3)
		{
			lvCode = lvCode.toUpperCase();
			mfTraceOutput("mfAirportNames:"+"lnLength==3:"+lvCode);
		
			for (fnArrivalRow = 1; fnArrivalRow < maArrivals.length; fnArrivalRow++)
			{
				if (maArrivals[fnArrivalRow].vAirportCode == lvCode)
				{
					lvSpanHTML += mfAddName(fnArrivalRow,fromwhere);
					lvOneName = maArrivals[fnArrivalRow].vAirportName;
					lvOneNameCode = maArrivals[fnArrivalRow].vAirportCode;
					mAirportsFound+= 1;
					//alert("mfAirportNames:"+"found:"+lvOneName);
				}
			}
		}
		else
		{
			//Scan descriptions
			lvCode = lvCode.toUpperCase();
		
			for (fnArrivalRow = 1; fnArrivalRow < maArrivals.length; fnArrivalRow++)
			{
				if (maArrivals[fnArrivalRow].vNameUppercase.substr(0,lnLength) == lvCode)
				{
					lvSpanHTML += mfAddName(fnArrivalRow,fromwhere);
					lvOneName = maArrivals[fnArrivalRow].vAirportName;
					lvOneNameCode = maArrivals[fnArrivalRow].vAirportCode;
					mAirportsFound+= 1;
				}
			}
		}
	}
	if (mAirportsFound == 1 && gfAALAutoMatch)
	{
		if(keyCode!=8)
		{
			var mixedName = '';
			var nextcharUpper = 'Y';
			for(var i=0;i<lvOneName.length;i++)
			{
				if(lvOneName.substr(i,1)==' ')
				{
					mixedName=mixedName+lvOneName.substr(i,1);
					nextcharUpper = 'Y';
				}
				else if(nextcharUpper == 'Y')
				{
					mixedName=mixedName+lvOneName.substr(i,1).toUpperCase();
					nextcharUpper = 'N';
				}
				else
				{
					mixedName=mixedName+lvOneName.substr(i,1).toLowerCase();
				}
			}
			//Turn off mixed-case name display
			//lvOneName=mixedName;
			mfHideAirportDiv(fromwhere);
			//cClick();
			//alterReturns(fromwhere);
			document.getElementById(fromwhere).value = lvOneNameCode;
			document.getElementById(fromwhere+'Name').value = lvOneName;
			mfTraceOutput("Done keyCode:"+keyCode+" lvOneNameCode:"+lvOneNameCode);
		}
	}
	else
	{
		if (mAirportsFound> 1 || gfAALAutoMatch==false)
		{
			var obj = document.getElementById(fromwhere+'Div');
			//zlvbzz_wtop = 0;
			//obj.style.left = document.body.scrollLeft + event.clientX;
			//obj.style.left = document.body.scrollLeft + document.getElementById("idShowHere").style.left;
			//obj.style.top = zlvbzz_wtop + event.clientY;
			//obj.style.visibility = "visible";
			obj.innerHTML=lvSpanHTML;
			mfShowAirportDiv(fromwhere);
		}
	}
	return(true);
}
function mfAddName(anAirportNum,fromwhere)
{
	mAirportsInList=mAirportsInList+1;
	//var lvOneHTML = "<a id='idRow" + mAirportsInList + "' onkeyup='mfDoIfEnter(mfUseName(" + anAirportNum + ",\"" + fromwhere + "\"))' onclick='mfTraceOutput(\"onclick\");mfUseName(" + anAirportNum + ",\"" + fromwhere + "\")' class='AirportName'>" + maArrivals[anAirportNum].vAirportName + "</a>";

	var lvOneHTML = "<button id='idRow" + mAirportsInList + "' onkeyup='mfTraceOutput(\"onkeyup\");mfDoIfEnter(function () {mfUseName(" + anAirportNum + ",\"" + fromwhere + "\",\"onkeyup\")})' onclick='mfTraceOutput(\"onclick\");mfUseName(" + anAirportNum + ",\"" + fromwhere + "\",\"onclick\")' class='AirportName'>" + maArrivals[anAirportNum].vAirportName + "</button><br />";

	//alert(lvOneHTML);
	
	return (lvOneHTML);
}
function mfAirportTabToNextControl(anfromwhere)
{
	mfTraceOutput("mfAirportTabToNextControl:"+mfNextControl+" focus");
	if (mfNextControl != "")
	{
		mfTraceOutput("mfAirportTabToNextControl:" + mfNextControl + " focus");
		if (anfromwhere != "")
			document.getElementById(anfromwhere+'Name').focus();
		try {
			document.getElementById(mfNextControl).select();
		}
		catch (er) { }
		try {
			document.getElementById(mfNextControl).focus();
		}
		catch (er) { }
	}	
}
function gfAALSetOpener(selectObject, airportCode, airportName)
{
	var lSelect = document.getElementById(selectObject);
	var lNewOption = lSelect.options.length;
	
	try {lSelect.options[lNewOption] = new Option("","")}
	catch (er) {alert(er);}
	
	lSelect.options[lNewOption].value = airportCode;
	lSelect.options[lNewOption].text = airportName;
	lSelect.options[lNewOption].selected = true;
}

function mfUseName(anAirportNum,anfromwhere,anEventName)
{
	if (anEventName == "onkeyup")
		return (false);
		
	mfTraceOutput("mfUseName:"+anAirportNum+" "+maArrivals[anAirportNum].vAirportName+" "+anEventName);
	mfTraceOutput("mfUseName mAirportsShowRow:"+mAirportsShowRow);
	mfTraceOutput("mfUseName gfAALInPopup:"+gfAALInPopup);
	mfTraceOutput("mfUseName gfAALFromWhere:"+gfAALFromWhere);

/*
	if (mAirportsShowRow==0)
	{
		mfAirportNames(99, anfromwhere);
		mfAirportTabToNextControl(anfromwhere);
		return(true);
	}
*/	
	if (gfAALInPopup)
	{
		if (gfAALFromWhere == "selectOutDepName")
		{
			window.opener.gfAALSetOpener("idOutDepName",maArrivals[anAirportNum].vAirportCode,maArrivals[anAirportNum].vAirportName);
		}
		else if (gfAALFromWhere == "selectOutDepPoint")
		{
			window.opener.gfAALSetOpener("idOutDepPoint",maArrivals[anAirportNum].vAirportCode,maArrivals[anAirportNum].vAirportName);
		}
		else if (gfAALFromWhere == "selectInArrName")
		{
			window.opener.gfAALSetOpener("idInArrName",maArrivals[anAirportNum].vAirportCode,maArrivals[anAirportNum].vAirportName);
		}
		else if (gfAALFromWhere == "custom")
		{
			gfAALAirportCode=maArrivals[anAirportNum].vAirportCode;
			mfCustomUseName(gfAALAirportCode);
		}
		else
		{
			window.opener.document.getElementById(gfAALFromWhere+'Name').value = maArrivals[anAirportNum].vAirportName;
			window.opener.document.getElementById(gfAALFromWhere).value = maArrivals[anAirportNum].vAirportCode;
		}
		window.close();
	}
	else
	{
		document.getElementById(anfromwhere+'Name').value = maArrivals[anAirportNum].vAirportName;
		document.getElementById(anfromwhere).value = maArrivals[anAirportNum].vAirportCode;
	}
	var mixedName = '';
	var nextcharUpper = 'Y';
	for(var i=0;i<document.getElementById(anfromwhere+'Name').value.length;i++)
	{
		if(document.getElementById(anfromwhere+'Name').value.substr(i,1)==' ')
		{
			mixedName=mixedName+document.getElementById(anfromwhere+'Name').value.substr(i,1);
			nextcharUpper = 'Y';
		}
		else if(nextcharUpper == 'Y')
		{
			mixedName=mixedName+document.getElementById(anfromwhere+'Name').value.substr(i,1).toUpperCase();
			nextcharUpper = 'N';
		}
		else
		{
			mixedName=mixedName+document.getElementById(anfromwhere+'Name').value.substr(i,1).toLowerCase();
		}
	}
	//document.getElementById(anfromwhere+'Name').value=mixedName;
	mfHideAirportDiv(anfromwhere);
	//cClick();
	//alterReturns(anfromwhere);
	mfAirportTabToNextControl(anfromwhere);
}

function mfShowAirportDiv(fromwhere)
{
	mfTraceOutput("mfShowAirportDiv:" + fromwhere+ " start");
	document.getElementById(fromwhere+'Div').style.display = "inline";
	document.getElementById(fromwhere+'Div').style.visibility = "visible";
	document.getElementById(fromwhere+'Name').className="FltLocationNameOpen";
	mAirportsDivStatus="Open";
	mfTraceOutput("mfShowAirportDiv:" + fromwhere+ " end");
}
function mfHideAirportDiv(fromwhere) 
{
	mfTraceOutput("mfHideAirportDiv" + fromwhere);
	document.getElementById(fromwhere+'Div').style.display="none";
	document.getElementById(fromwhere+'Div').innerHTML="";
	document.getElementById(fromwhere+'Name').className="FltLocationNameClosed";
	mAirportsDivStatus="Closed";
}
//alert("ArrivalAirport.js");

