var dTextbox;
var aTextbox;
var arTextbox;
var idTextbox;
var iaTextbox;
var tbTextbox;
var sArea;
var sCountry;

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

addLoadEvent(window.onload = function () {
	if(document.getElementById("txtDepart"))	 
		dTextbox = new AutoSuggestControl(document.getElementById("txtDepart"), new AirportSuggestions());        
	if(document.getElementById("txtDestination"))	 
		aTextbox = new AutoSuggestControl(document.getElementById("txtDestination"), new AirportSuggestions());        
	if(document.getElementById("txtArea"))	 
		arTextbox = new AutoSuggestControl(document.getElementById("txtArea"), new AirportSuggestions());        
	if(document.getElementById("txtIBDepart"))
	 	idTextbox = new AutoSuggestControl(document.getElementById("txtIBDepart"), new AirportSuggestions());        
	if(document.getElementById("txtIBDestination"))
	 	iaTextbox = new AutoSuggestControl(document.getElementById("txtIBDestination"), new AirportSuggestions());        

	if (document.getElementById('txtDepartPointCodeHidden0')) {
		tbTextbox=new AutoSuggestControl(document.getElementById('txtDepartPointCodeHidden0'), new AirportSuggestions());
	}

	if (document.getElementById('txtDepartPointText0')) {
		tbTextbox=new AutoSuggestControl(document.getElementById('txtDepartPointText0'), new AirportSuggestions());
	}


});


function DliveSearchProcessReqChange() {
	if(dTextbox.liveSearchReq.readyState == 4) {
		dTextbox.AirportStr = dTextbox.liveSearchReq.responseText;
		dTextbox.liveSearchProcessReqChange(false);
	}
}
function AliveSearchProcessReqChange() {	
	if(aTextbox.liveSearchReq.readyState == 4) {
		aTextbox.AirportStr = aTextbox.liveSearchReq.responseText;
		aTextbox.liveSearchProcessReqChange(false);
	}
}
function ARliveSearchProcessReqChange() {	
	if(arTextbox.liveSearchReq.readyState == 4) {
		arTextbox.AirportStr = arTextbox.liveSearchReq.responseText;
		arTextbox.liveSearchProcessReqChange(false);
	}
}
function IDliveSearchProcessReqChange() {
	if(idTextbox.liveSearchReq.readyState == 4) {
		idTextbox.AirportStr = idTextbox.liveSearchReq.responseText;
		idTextbox.liveSearchProcessReqChange(false);
	}
}
function IAliveSearchProcessReqChange() {
	if(iaTextbox.liveSearchReq.readyState == 4) {
		iaTextbox.AirportStr = iaTextbox.liveSearchReq.responseText;
		iaTextbox.liveSearchProcessReqChange(false);
	}
}

function TBliveSearchProcessReqChange() {
	if(tbTextbox.liveSearchReq.readyState == 4) {
		tbTextbox.AirportStr = tbTextbox.liveSearchReq.responseText;
		tbTextbox.liveSearchProcessReqChange(false);
	}
}


function chooseAirport(Code,Description,id) {
	if(document.getElementById(id + "Airport")) {
		document.getElementById(id + "Airport").value = Code;		
	}
	if(document.getElementById(id + "AirportCode")) {
		document.getElementById(id + "AirportCode").value = Code;
	}
	if(document.getElementById("AreaCode")) {
		document.getElementById("AreaCode").value = Code;
		if(document.getElementById("DestinationAirport")) {
			document.getElementById("DestinationAirport").value = Code;
		}
	}
	if(Description != "" && document.getElementById("txt" + id)) {
		document.getElementById("txt" + id).value = HtmlDecode(Description.split("~")[0]);
		document.getElementById("txt" + id).title = HtmlDecode(Description.split("~")[0]);
		document.getElementById("txt" + id).blur();
	}
	liveSearchHide("txt" + id);
}

function tryThis() {
	alert('test');
}

function LookupAirportTextbox(code,target) {

	currentTextbox = target;

	if (window.XMLHttpRequest) {
		liveSearchReq = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		liveSearchReq = new ActiveXObject("Microsoft.XMLHTTP");
	}

	switch(target) {
		case "txtDepart":
			if (document.getElementById('arrowsOut')) {
				document.getElementById('arrowsOut').style.display = 'block';
				statusMessage('Searching for departure points');
			}
			variable = "DeparturePoints"			
			break;
		case "txtDestination":		
			if (document.getElementById('arrowsIn')) {
				document.getElementById('arrowsIn').style.display = 'block';
				statusMessage('Searching for destination points');
			}
			variable = "DestinationPoints"
			break;
		case "txtArea":
			if (document.getElementById('arrowsIn')) {
				document.getElementById('arrowsIn').style.display = 'block';
				statusMessage('Searching for areas');
			}
			variable = "DestinationAreas"
			break;
		case "txtIBDepart":
			if (document.getElementById('arrowsIOut')) {
				document.getElementById('arrowsIOut').style.display = 'block';
				statusMessage('Searching for inbound departure points');
			}
			variable = "IBDeparturePoints"
			break;
		case "txtIBDestination":
			if (document.getElementById('arrowsIIn')) {
				document.getElementById('arrowsIIn').style.display = 'block';
				statusMessage('Searching for inbound destination points');
			}
			variable = "IBDestinationPoints"
			break;
		variable = "DestinationPoints"
	}

	liveSearchReq.onreadystatechange= liveSearchLookupAirport;
	
	if(window.adminpage) {
		liveSearchReq.open("GET", "../livesearch.asp?Lookup=True&target=" + target + "&q=" + code.value,true);		
	} else {		
		liveSearchReq.open("GET", "livesearch.asp?Lookup=True&target=" + target + "&q=" + code.value,true);		
	}	
	liveSearchReq.send(null);
}
function liveSearchLookupAirport() {
	if (liveSearchReq.readyState == 4) {
		response = liveSearchReq.responseText;
		
		if(response != "" && response.indexOf('<') == 0) {
			alert("Airport lookup as failed, please refresh the page and try again.");
			return;
		}

		if (response.indexOf('|')>-1) {
			Airport = response.split('|')[0];
			target = response.split('|')[1];
		}
		else {
			Airport = response;
			target = currentTextbox;
		}

		Airport = URLDecode(Airport);

		switch (target) {
			case "txtDepart":
				if (document.getElementById('arrowsOut')) {
					document.getElementById('arrowsOut').style.display = 'none';
				}
				chooseAirport(document.getElementById("DepartAirportCode").value,Airport,"Depart")
				chooseAirport(document.getElementById("DepartAirportCode").value,Airport,"IBDestination")
				break;
			case "txtDestination":						
				if (document.getElementById('arrowsIn')) {
					document.getElementById('arrowsIn').style.display = 'none';
				}
				chooseAirport(document.getElementById("DestinationAirportCode").value,Airport,"Destination")
				chooseAirport(document.getElementById("DestinationAirportCode").value,Airport,"IBDepart")
				break;
			case "txtArea":										
				if (document.getElementById('arrowsIn')) {
					document.getElementById('arrowsIn').style.display = 'none';
				}
				chooseAirport(document.getElementById("AreaCode").value,Airport,"Destination")				
				break;
			case "txtIBDepart":
				if (document.getElementById('arrowsIOut')) {
					document.getElementById('arrowsIOut').style.display = 'none';
				}
				chooseAirport(document.getElementById("IBDepartAirportCode").value,Airport,"IBDepart")
				break;
			case "txtIBDestination":
				if (document.getElementById('arrowsIIn')) {
					document.getElementById('arrowsIIn').style.display = 'none';
				}
				chooseAirport(document.getElementById("IBDestinationAirportCode").value,Airport,"IBDestination")
				break;
		}

		if (target.indexOf('txtDepartPointText')==0||target.indexOf('txtArrivePointText')==0) {
			document.getElementById(target).value = HtmlDecode(Airport.split("~")[0]);
			document.getElementById(target).title = HtmlDecode(Airport.split("~")[0]);
			document.getElementById(target).blur();
		}



		if(Airport=="") {
			document.getElementById(target).value = "";
		}
	}
}
function liveSearchHideDelayed(tb) {		
	window.setTimeout("liveSearchHide('" + tb + "')",400);
	
}
function liveSearchHide(textBox) {
	if (document.getElementById('lsDiv')) {
		document.getElementById('lsDiv').style.display = 'none';
	}
	if (document.getElementById('lsDiv')) {
		document.getElementById('lsDiv1').style.display = 'none';
	}
	FixSelectLists(false,textBox);
}
function HtmlDecode(s) 
{ 
      var out = ""; 
      if (s==null) return; 
  
      var l = s.length; 
      for (var i=0; i<l; i++) 
      { 
            var ch = s.charAt(i); 
            
            if (ch == '&') 
            { 
                  var semicolonIndex = s.indexOf(';', i+1); 
                  
            if (semicolonIndex > 0) 
            { 
                        var entity = s.substring(i + 1, semicolonIndex); 
                        if (entity.length > 1 && entity.charAt(0) == '#') 
                        { 
                              if (entity.charAt(1) == 'x' || entity.charAt(1) == 'X') 
                                    ch = String.fromCharCode(eval('0'+entity.substring(1))); 
                              else 
                                    ch = String.fromCharCode(eval(entity.substring(1))); 
                        } 
                    else 
                      { 
                              switch (entity) 
                              { 
                                    case 'quot': ch = String.fromCharCode(0x0022); break; 
                                    case 'amp': ch = String.fromCharCode(0x0026); break; 
                                    case 'lt': ch = String.fromCharCode(0x003c); break; 
                                    case 'gt': ch = String.fromCharCode(0x003e); break; 
                                    case 'nbsp': ch = String.fromCharCode(0x00a0); break; 
                                    case 'iexcl': ch = String.fromCharCode(0x00a1); break; 
                                    case 'cent': ch = String.fromCharCode(0x00a2); break; 
                                    case 'pound': ch = String.fromCharCode(0x00a3); break; 
                                    case 'curren': ch = String.fromCharCode(0x00a4); break; 
                                    case 'yen': ch = String.fromCharCode(0x00a5); break; 
                                    case 'brvbar': ch = String.fromCharCode(0x00a6); break; 
                                    case 'sect': ch = String.fromCharCode(0x00a7); break; 
                                    case 'uml': ch = String.fromCharCode(0x00a8); break; 
                                    case 'copy': ch = String.fromCharCode(0x00a9); break; 
                                    case 'ordf': ch = String.fromCharCode(0x00aa); break; 
                                    case 'laquo': ch = String.fromCharCode(0x00ab); break; 
                                    case 'not': ch = String.fromCharCode(0x00ac); break; 
                                    case 'shy': ch = String.fromCharCode(0x00ad); break; 
                                    case 'reg': ch = String.fromCharCode(0x00ae); break; 
                                    case 'macr': ch = String.fromCharCode(0x00af); break; 
                                    case 'deg': ch = String.fromCharCode(0x00b0); break; 
                                    case 'plusmn': ch = String.fromCharCode(0x00b1); break; 
                                    case 'sup2': ch = String.fromCharCode(0x00b2); break; 
                                    case 'sup3': ch = String.fromCharCode(0x00b3); break; 
                                    case 'acute': ch = String.fromCharCode(0x00b4); break; 
                                    case 'micro': ch = String.fromCharCode(0x00b5); break; 
                                    case 'para': ch = String.fromCharCode(0x00b6); break; 
                                    case 'middot': ch = String.fromCharCode(0x00b7); break; 
                                    case 'cedil': ch = String.fromCharCode(0x00b8); break; 
                                    case 'sup1': ch = String.fromCharCode(0x00b9); break; 
                                    case 'ordm': ch = String.fromCharCode(0x00ba); break; 
                                    case 'raquo': ch = String.fromCharCode(0x00bb); break; 
                                    case 'frac14': ch = String.fromCharCode(0x00bc); break; 
                                    case 'frac12': ch = String.fromCharCode(0x00bd); break; 
                                    case 'frac34': ch = String.fromCharCode(0x00be); break; 
                                    case 'iquest': ch = String.fromCharCode(0x00bf); break; 
                                    case 'Agrave': ch = String.fromCharCode(0x00c0); break; 
                                    case 'Aacute': ch = String.fromCharCode(0x00c1); break; 
                                    case 'Acirc': ch = String.fromCharCode(0x00c2); break; 
                                    case 'Atilde': ch = String.fromCharCode(0x00c3); break; 
                                    case 'Auml': ch = String.fromCharCode(0x00c4); break; 
                                    case 'Aring': ch = String.fromCharCode(0x00c5); break; 
                                    case 'AElig': ch = String.fromCharCode(0x00c6); break; 
                                    case 'Ccedil': ch = String.fromCharCode(0x00c7); break; 
                                    case 'Egrave': ch = String.fromCharCode(0x00c8); break; 
                                    case 'Eacute': ch = String.fromCharCode(0x00c9); break; 
                                    case 'Ecirc': ch = String.fromCharCode(0x00ca); break; 
                                    case 'Euml': ch = String.fromCharCode(0x00cb); break; 
                                    case 'Igrave': ch = String.fromCharCode(0x00cc); break; 
                                    case 'Iacute': ch = String.fromCharCode(0x00cd); break; 
                                    case 'Icirc': ch = String.fromCharCode(0x00ce ); break; 
                                    case 'Iuml': ch = String.fromCharCode(0x00cf); break; 
                                    case 'ETH': ch = String.fromCharCode(0x00d0); break; 
                                    case 'Ntilde': ch = String.fromCharCode(0x00d1); break; 
                                    case 'Ograve': ch = String.fromCharCode(0x00d2); break; 
                                    case 'Oacute': ch = String.fromCharCode(0x00d3); break; 
                                    case 'Ocirc': ch = String.fromCharCode(0x00d4); break; 
                                    case 'Otilde': ch = String.fromCharCode(0x00d5); break; 
                                    case 'Ouml': ch = String.fromCharCode(0x00d6); break; 
                                    case 'times': ch = String.fromCharCode(0x00d7); break; 
                                    case 'Oslash': ch = String.fromCharCode(0x00d8); break; 
                                    case 'Ugrave': ch = String.fromCharCode(0x00d9); break; 
                                    case 'Uacute': ch = String.fromCharCode(0x00da); break; 
                                    case 'Ucirc': ch = String.fromCharCode(0x00db); break; 
                                    case 'Uuml': ch = String.fromCharCode(0x00dc); break; 
                                    case 'Yacute': ch = String.fromCharCode(0x00dd); break; 
                                    case 'THORN': ch = String.fromCharCode(0x00de); break; 
                                    case 'szlig': ch = String.fromCharCode(0x00df); break; 
                                    case 'agrave': ch = String.fromCharCode(0x00e0); break; 
                                    case 'aacute': ch = String.fromCharCode(0x00e1); break; 
                                    case 'acirc': ch = String.fromCharCode(0x00e2); break; 
                                    case 'atilde': ch = String.fromCharCode(0x00e3); break; 
                                    case 'auml': ch = String.fromCharCode(0x00e4); break; 
                                    case 'aring': ch = String.fromCharCode(0x00e5); break; 
                                    case 'aelig': ch = String.fromCharCode(0x00e6); break; 
                                    case 'ccedil': ch = String.fromCharCode(0x00e7); break; 
                                    case 'egrave': ch = String.fromCharCode(0x00e8); break; 
                                    case 'eacute': ch = String.fromCharCode(0x00e9); break; 
                                    case 'ecirc': ch = String.fromCharCode(0x00ea); break; 
                                    case 'euml': ch = String.fromCharCode(0x00eb); break; 
                                    case 'igrave': ch = String.fromCharCode(0x00ec); break; 
                                    case 'iacute': ch = String.fromCharCode(0x00ed); break; 
                                    case 'icirc': ch = String.fromCharCode(0x00ee); break; 
                                    case 'iuml': ch = String.fromCharCode(0x00ef); break; 
                                    case 'eth': ch = String.fromCharCode(0x00f0); break; 
                                    case 'ntilde': ch = String.fromCharCode(0x00f1); break; 
                                    case 'ograve': ch = String.fromCharCode(0x00f2); break; 
                                    case 'oacute': ch = String.fromCharCode(0x00f3); break; 
                                    case 'ocirc': ch = String.fromCharCode(0x00f4); break; 
                                    case 'otilde': ch = String.fromCharCode(0x00f5); break; 
                                    case 'ouml': ch = String.fromCharCode(0x00f6); break; 
                                    case 'divide': ch = String.fromCharCode(0x00f7); break; 
                                    case 'oslash': ch = String.fromCharCode(0x00f8); break; 
                                    case 'ugrave': ch = String.fromCharCode(0x00f9); break; 
                                    case 'uacute': ch = String.fromCharCode(0x00fa); break; 
                                    case 'ucirc': ch = String.fromCharCode(0x00fb); break; 
                                    case 'uuml': ch = String.fromCharCode(0x00fc); break; 
                                    case 'yacute': ch = String.fromCharCode(0x00fd); break; 
                                    case 'thorn': ch = String.fromCharCode(0x00fe); break; 
                                    case 'yuml': ch = String.fromCharCode(0x00ff); break; 
                                    case 'OElig': ch = String.fromCharCode(0x0152); break; 
                                    case 'oelig': ch = String.fromCharCode(0x0153); break; 
                                    case 'Scaron': ch = String.fromCharCode(0x0160); break; 
                                    case 'scaron': ch = String.fromCharCode(0x0161); break; 
                                    case 'Yuml': ch = String.fromCharCode(0x0178); break; 
                                    case 'fnof': ch = String.fromCharCode(0x0192); break; 
                                    case 'circ': ch = String.fromCharCode(0x02c6); break; 
                                    case 'tilde': ch = String.fromCharCode(0x02dc); break; 
                                    case 'Alpha': ch = String.fromCharCode(0x0391); break; 
                                    case 'Beta': ch = String.fromCharCode(0x0392); break; 
                                    case 'Gamma': ch = String.fromCharCode(0x0393); break; 
                                    case 'Delta': ch = String.fromCharCode(0x0394); break; 
                                    case 'Epsilon': ch = String.fromCharCode(0x0395); break; 
                                    case 'Zeta': ch = String.fromCharCode(0x0396); break; 
                                    case 'Eta': ch = String.fromCharCode(0x0397); break; 
                                    case 'Theta': ch = String.fromCharCode(0x0398); break; 
                                    case 'Iota': ch = String.fromCharCode(0x0399); break; 
                                    case 'Kappa': ch = String.fromCharCode(0x039a); break; 
                                    case 'Lambda': ch = String.fromCharCode(0x039b); break; 
                                    case 'Mu': ch = String.fromCharCode(0x039c); break; 
                                    case 'Nu': ch = String.fromCharCode(0x039d); break; 
                                    case 'Xi': ch = String.fromCharCode(0x039e); break; 
                                    case 'Omicron': ch = String.fromCharCode(0x039f); break; 
                                    case 'Pi': ch = String.fromCharCode(0x03a0); break; 
                                    case ' Rho ': ch = String.fromCharCode(0x03a1); break; 
                                    case 'Sigma': ch = String.fromCharCode(0x03a3); break; 
                                    case 'Tau': ch = String.fromCharCode(0x03a4); break; 
                                    case 'Upsilon': ch = String.fromCharCode(0x03a5); break; 
                                    case 'Phi': ch = String.fromCharCode(0x03a6); break; 
                                    case 'Chi': ch = String.fromCharCode(0x03a7); break; 
                                    case 'Psi': ch = String.fromCharCode(0x03a8); break; 
                                    case 'Omega': ch = String.fromCharCode(0x03a9); break; 
                                    case 'alpha': ch = String.fromCharCode(0x03b1); break; 
                                    case 'beta': ch = String.fromCharCode(0x03b2); break; 
                                    case 'gamma': ch = String.fromCharCode(0x03b3); break; 
                                    case 'delta': ch = String.fromCharCode(0x03b4); break; 
                                    case 'epsilon': ch = String.fromCharCode(0x03b5); break; 
                                    case 'zeta': ch = String.fromCharCode(0x03b6); break; 
                                    case 'eta': ch = String.fromCharCode(0x03b7); break; 
                                    case 'theta': ch = String.fromCharCode(0x03b8); break; 
                                    case 'iota': ch = String.fromCharCode(0x03b9); break; 
                                    case 'kappa': ch = String.fromCharCode(0x03ba); break; 
                                    case 'lambda': ch = String.fromCharCode(0x03bb); break; 
                                    case 'mu': ch = String.fromCharCode(0x03bc); break; 
                                    case 'nu': ch = String.fromCharCode(0x03bd); break; 
                                    case 'xi': ch = String.fromCharCode(0x03be); break; 
                                    case 'omicron': ch = String.fromCharCode(0x03bf); break; 
                                    case 'pi': ch = String.fromCharCode(0x03c0); break; 
                                    case 'rho': ch = String.fromCharCode(0x03c1); break; 
                                    case 'sigmaf': ch = String.fromCharCode(0x03c2); break; 
                                    case 'sigma': ch = String.fromCharCode(0x03c3); break; 
                                    case 'tau': ch = String.fromCharCode(0x03c4); break; 
                                    case 'upsilon': ch = String.fromCharCode(0x03c5); break; 
                                    case 'phi': ch = String.fromCharCode(0x03c6); break; 
                                    case 'chi': ch = String.fromCharCode(0x03c7); break; 
                                    case 'psi': ch = String.fromCharCode(0x03c8); break; 
                                    case 'omega': ch = String.fromCharCode(0x03c9); break; 
                                    case 'thetasym': ch = String.fromCharCode(0x03d1); break; 
                                    case 'upsih': ch = String.fromCharCode(0x03d2); break; 
                                    case 'piv': ch = String.fromCharCode(0x03d6); break; 
                                    case 'ensp': ch = String.fromCharCode(0x2002); break; 
                                    case 'emsp': ch = String.fromCharCode(0x2003); break; 
                                    case 'thinsp': ch = String.fromCharCode(0x2009); break; 
                                    case 'zwnj': ch = String.fromCharCode(0x200c); break; 
                                    case 'zwj': ch = String.fromCharCode(0x200d); break; 
                                    case 'lrm': ch = String.fromCharCode(0x200e); break; 
                                    case 'rlm': ch = String.fromCharCode(0x200f); break; 
                                    case 'ndash': ch = String.fromCharCode(0x2013); break; 
                                    case 'mdash': ch = String.fromCharCode(0x2014); break; 
                                    case 'lsquo': ch = String.fromCharCode(0x2018); break; 
                                    case 'rsquo': ch = String.fromCharCode(0x2019); break; 
                                    case 'sbquo': ch = String.fromCharCode(0x201a); break; 
                                    case 'ldquo': ch = String.fromCharCode(0x201c); break; 
                                    case 'rdquo': ch = String.fromCharCode(0x201d); break; 
                                    case 'bdquo': ch = String.fromCharCode(0x201e); break; 
                                    case 'dagger': ch = String.fromCharCode(0x2020); break; 
                                    case 'Dagger': ch = String.fromCharCode(0x2021); break; 
                                    case 'bull': ch = String.fromCharCode(0x2022); break; 
                                    case 'hellip': ch = String.fromCharCode(0x2026); break; 
                                    case 'permil': ch = String.fromCharCode(0x2030); break; 
                                    case 'prime': ch = String.fromCharCode(0x2032); break; 
                                    case 'Prime': ch = String.fromCharCode(0x2033); break; 
                                    case 'lsaquo': ch = String.fromCharCode(0x2039); break; 
                                    case 'rsaquo': ch = String.fromCharCode(0x203a); break; 
                                    case 'oline': ch = String.fromCharCode(0x203e); break; 
                                    case 'frasl': ch = String.fromCharCode(0x2044); break; 
                                    case 'euro': ch = String.fromCharCode(0x20ac); break; 
                                    case 'image': ch = String.fromCharCode(0x2111); break; 
                                    case 'weierp': ch = String.fromCharCode(0x2118); break; 
                                    case 'real': ch = String.fromCharCode(0x211c); break; 
                                    case 'trade': ch = String.fromCharCode(0x2122); break; 
                                    case 'alefsym': ch = String.fromCharCode(0x2135); break; 
                                    case 'larr': ch = String.fromCharCode(0x2190); break; 
                                    case 'uarr': ch = String.fromCharCode(0x2191); break; 
                                    case 'rarr': ch = String.fromCharCode(0x2192); break; 
                                    case 'darr': ch = String.fromCharCode(0x2193); break; 
                                    case 'harr': ch = String.fromCharCode(0x2194); break; 
                                    case 'crarr': ch = String.fromCharCode(0x21b5); break; 
                                    case 'lArr': ch = String.fromCharCode(0x21d0); break; 
                                    case 'uArr': ch = String.fromCharCode(0x21d1); break; 
                                    case 'rArr': ch = String.fromCharCode(0x21d2); break; 
                                    case 'dArr': ch = String.fromCharCode(0x21d3); break; 
                                    case 'hArr': ch = String.fromCharCode(0x21d4); break; 
                                    case 'forall': ch = String.fromCharCode(0x2200); break; 
                                    case 'part': ch = String.fromCharCode(0x2202); break; 
                                    case 'exist': ch = String.fromCharCode(0x2203); break; 
                                    case 'empty': ch = String.fromCharCode(0x2205); break; 
                                    case 'nabla': ch = String.fromCharCode(0x2207); break; 
                                    case 'isin': ch = String.fromCharCode(0x2208); break; 
                                    case 'notin': ch = String.fromCharCode(0x2209); break; 
                                    case 'ni': ch = String.fromCharCode(0x220b); break; 
                                    case 'prod': ch = String.fromCharCode(0x220f); break; 
                                    case 'sum': ch = String.fromCharCode(0x2211); break; 
                                    case 'minus': ch = String.fromCharCode(0x2212); break; 
                                    case 'lowast': ch = String.fromCharCode(0x2217); break; 
                                    case 'radic': ch = String.fromCharCode(0x221a); break; 
                                    case 'prop': ch = String.fromCharCode(0x221d); break; 
                                    case 'infin': ch = String.fromCharCode(0x221e); break; 
                                    case 'ang': ch = String.fromCharCode(0x2220); break; 
                                    case 'and': ch = String.fromCharCode(0x2227); break; 
                                    case 'or': ch = String.fromCharCode(0x2228); break; 
                                    case 'cap': ch = String.fromCharCode(0x2229); break; 
                                    case 'cup': ch = String.fromCharCode(0x222a); break; 
                                    case 'int': ch = String.fromCharCode(0x222b); break; 
                                    case 'there4': ch = String.fromCharCode(0x2234); break; 
                                    case 'sim': ch = String.fromCharCode(0x223c); break; 
                                    case 'cong': ch = String.fromCharCode(0x2245); break; 
                                    case 'asymp': ch = String.fromCharCode(0x2248); break; 
                                    case 'ne': ch = String.fromCharCode(0x2260); break; 
                                    case 'equiv': ch = String.fromCharCode(0x2261); break; 
                                    case 'le': ch = String.fromCharCode(0x2264); break; 
                                    case 'ge': ch = String.fromCharCode(0x2265); break; 
                                    case 'sub': ch = String.fromCharCode(0x2282); break; 
                                    case 'sup': ch = String.fromCharCode(0x2283); break; 
                                    case 'nsub': ch = String.fromCharCode(0x2284); break; 
                                    case 'sube': ch = String.fromCharCode(0x2286); break; 
                                    case 'supe': ch = String.fromCharCode(0x2287); break; 
                                    case 'oplus': ch = String.fromCharCode(0x2295); break; 
                                    case 'otimes': ch = String.fromCharCode(0x2297); break; 
                                    case 'perp': ch = String.fromCharCode(0x22a5); break; 
                                    case 'sdot': ch = String.fromCharCode(0x22c5); break; 
                                    case 'lceil': ch = String.fromCharCode(0x2308); break; 
                                    case 'rceil': ch = String.fromCharCode(0x2309); break; 
                                    case 'lfloor': ch = String.fromCharCode(0x230a); break; 
                                    case 'rfloor': ch = String.fromCharCode(0x230b); break; 
                                    case 'lang': ch = String.fromCharCode(0x2329); break; 
                                    case 'rang': ch = String.fromCharCode(0x232a); break; 
                                    case 'loz': ch = String.fromCharCode(0x25ca); break; 
                                    case 'spades': ch = String.fromCharCode(0x2660); break; 
                                    case 'clubs': ch = String.fromCharCode(0x2663); break; 
                                    case 'hearts': ch = String.fromCharCode(0x2665); break; 
                                    case 'diams': ch = String.fromCharCode(0x2666); break; 
                                    default: ch = ''; break; 
                              } 
                        } 
                        i = semicolonIndex; 
                  } 
            } 
            out += ch; 
      } 
      return out; 
}
function URLDecode(encoded)
{
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
	   if (ch == "+") {
	       plaintext += " ";
		   i++;
	   } else if (ch == "%") {
			if (i < (encoded.length-2) 
					&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
					&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				//alert( 'Bad escape combination near ...' + encoded.substr(i) );
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	} // while
   return plaintext;
}
/**
 * An autosuggest textbox control.
 * @class
 * @scope public
 */
function AutoSuggestControl(oTextbox /*:HTMLInputElement*/, 
                            oProvider /*:SuggestionProvider*/) {
       
    /**
     * Suggestion provider for the autosuggest feature.
     * @scope private.
     */
    this.provider /*:SuggestionProvider*/ = oProvider;
    
    /**
     * The textbox to capture.
     * @scope private
     */
    this.textbox /*:HTMLInputElement*/ = oTextbox;
    
	 this.AirportStr = "";
	 this.firstThreeChars = "";
	 
    //initialize the control
    this.init();
    
}

/**
 * Autosuggests one or more suggestions for what the user has typed.
 * If no suggestions are passed in, then no autosuggest occurs.
 * @scope private
 * @param aSuggestions An array of suggestion strings.
 */
AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/) {
    
    //make sure there's at least one suggestion
    if (aSuggestions.length > 0) {
        this.typeAhead(aSuggestions[0]);
    }
};


/**
 * Handles keyup events.
 * @scope private
 * @param oEvent The event object for the keyup event.
 */
AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) {

    var iKeyCode = oEvent.keyCode;

    //make sure not to interfere with non-character keys
    if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode <= 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
			this.liveSearchProcessReqChange(true);
    }
    else {
        //request suggestions from the suggestion provider
		if (this.getNonSelectedText().length >=3 && (this.provider.Airports.length == 0 || this.firstThreeChars.toLowerCase() != this.getNonSelectedText().toLowerCase().substr(0,3))) {  
			var searchFor = trim(this.getNonSelectedText()," ");
			
			if (searchFor!=''){
				
				if (window.XMLHttpRequest) {
					this.liveSearchReq = new XMLHttpRequest()
				}
				else if (window.ActiveXObject) {
					this.liveSearchReq = new ActiveXObject("Microsoft.XMLHTTP");
				}
				
				sArea = '';
				sCountry = ''
				
				switch(this.textbox.id) {
					case "txtDepart":
						if (document.getElementById('arrowsOut')) {
							document.getElementById('arrowsOut').style.display = 'block';
							statusMessage('Searching for departure points');
						}
						this.liveSearchReq.onreadystatechange = DliveSearchProcessReqChange;
						break;
					case "txtDestination":
						//show searching symbol
						if (document.getElementById('arrowsIn')) {
							document.getElementById('arrowsIn').style.display = 'block';
							statusMessage('Searching for destination points');
						}
						this.liveSearchReq.onreadystatechange = AliveSearchProcessReqChange;
						break;
					case "txtArea":
						//show searching symbol
						if (document.getElementById('arrowsIn')) {
							document.getElementById('arrowsIn').style.display = 'block';
							statusMessage('Searching for areas');
							sArea = 'area';
						}
						this.liveSearchReq.onreadystatechange = ARliveSearchProcessReqChange;
						break;
					case "txtIBDepart":
						this.liveSearchReq.onreadystatechange = IDliveSearchProcessReqChange;
						break;
					case "txtIBDestination":
						this.liveSearchReq.onreadystatechange = IAliveSearchProcessReqChange;
						break;
				}
	
				if (this.textbox.id.indexOf('txtDepartPointText')==0) {
					this.liveSearchReq.onreadystatechange = TBliveSearchProcessReqChange;
				}
	
				
				if(window.adminpage) {				
					this.liveSearchReq.open("GET", "../livesearch.asp?t=" + sArea + "&q=" + escape(this.textbox.value));
				}
				else if (window.name == 'enquiry_quick') {								
					this.liveSearchReq.open("GET", "../package-it/livesearch.asp?t=" + sArea + "&q=" + escape(this.textbox.value));
				}
				else {		
					this.liveSearchReq.open("GET", "livesearch.asp?t=" + sArea + "&q=" + escape(this.textbox.value));
				}					
				this.liveSearchReq.send(null);
			}
		}
		else {
			if(this.textbox.value.length >= 2)
			this.liveSearchProcessReqChange(false);
		}
		if(this.textbox.value.length >= 3) {
			this.firstThreeChars = this.textbox.value.toLowerCase().substr(0,3);
		}
	}
};

AutoSuggestControl.prototype.liveSearchProcessReqChange = function(ignore) {
	
	if(this.AirportStr != "") {		
		this.provider.Airports = this.AirportStr.split("|");
	}
	
	if(this.AirportStr != "" && this.AirportStr.indexOf('~') < 0) {		
		alert("Airport lookup as failed, please refresh the page and try again.");
		return;
	}
	
	var sugg = this.provider.requestSuggestions(this, ignore);
	
	var c=findPos(this.textbox);

	if (!document.getElementById('lsDiv')) {
		lsDiv = document.createElement('DIV');
		lsDiv.id = 'lsDiv';
		lsDiv.style.position = 'absolute';
		lsDiv.style.zIndex = '201';
		lsDiv.style.left = '0px';
		lsDiv.style.top = '0px';
		lsDiv.style.width = '';
		lsDiv.className = 'LSTable';
	}

	lsDiv.innerHTML='';
	
	if(sugg.length > 0) {
		id = 	this.textbox.id.replace("txt","");
		code = sugg[0].split("~")[1];
		desc = sugg[0].split("~")[0];
		chooseAirport(code,"",id);	
		
		IBid = id;
		
		if(id.indexOf("Depart") > -1) {
			IBid = id.replace("Depart","Destination");	
		} else if (id.indexOf("Destination") > -1) {
			IBid = id.replace("Destination","Depart");	
		}
		chooseAirport(code,desc.replace(/'/g,"\\'"),"IB" + IBid);	
	}

	for(i=0; i<sugg.length; i++) {
		code = sugg[i].split("~")[1];
		desc = sugg[i].split("~")[0];
		js = "chooseAirport('" + code + "','" + desc.replace(/'/g,"\\'") + "','" + id + "'); "	
		
		IBid = id;
		
		if(id.indexOf("Depart") > -1) {
			IBid = id.replace("Depart","Destination");	
		} else if (id.indexOf("Destination") > -1) {
			IBid = id.replace("Destination","Depart");	
		}
		
		js = js + "chooseAirport('" + code + "','" + desc.replace(/'/g,"\\'") + "','IB" + IBid + "');";
		rowDiv = document.createElement('DIV');
		rowDiv.className = 'LSoff';		
		rowDiv.innerHTML = "<a id=\"LSlink\" onMouseOut=\"this.className='LSoff'; this.parentNode.className='LSoff';\" onMouseOver=\"this.className='LSon'; this.parentNode.className='LSon'; \" href=\"javascript: void(0)\" onClick=\"" + js + "\" class=\"LSoff\">" + desc + "</a>";
		lsDiv.appendChild(rowDiv);
	}
	
	if(sugg.length > 0) {
		document.body.appendChild(lsDiv);

		if (!document.getElementById('lsDiv1')) {
			lsDiv1 = document.createElement('DIV');
			lsDiv1.id = 'lsDiv1';
			lsDiv1.style.opacity = '0.2';
			lsDiv1.style.filter = 'alpha(opacity=20)';
			lsDiv1.style.position = 'absolute';
			lsDiv1.style.zIndex = '200';
			lsDiv1.style.left = '0px';
			lsDiv1.style.top = '0px';
			lsDiv1.style.width = '';
			lsDiv1.style.backgroundColor = 'black';
			if(sugg.length > 0) {
				document.body.appendChild(lsDiv1);
			}
		}
	
		document.getElementById('lsDiv').style.display = 'block';
		document.getElementById('lsDiv').style.left = (c[0] + 1) + 'px';
		document.getElementById('lsDiv').style.top = (c[1] + 20) + 'px';
		
		document.getElementById('lsDiv1').style.display = 'block';
		document.getElementById('lsDiv1').style.left = (c[0] + 4) + 'px';
		document.getElementById('lsDiv1').style.top = (c[1] + 23) + 'px';
		
		//Stops the searching logos
		if (document.getElementById('arrowsOut')) {
			document.getElementById('arrowsOut').style.display = 'none';
			statusMessage('');
			}
			
		if (document.getElementById('arrowsIn')) {
			document.getElementById('arrowsIn').style.display = 'none';
			statusMessage('');
			}
		
		//lsDiv.innerHTML = liveSearchReq.responseText;
	
		lsDiv1.style.height = (lsDiv.offsetHeight) + 'px';
		lsDiv1.style.width = (lsDiv.offsetWidth) + 'px';
	
		FixSelectLists(false);
		FixSelectLists(true);
	} else {
			if (document.getElementById('lsDiv')) {
				document.getElementById('lsDiv').style.display = 'none';
			}
			if (document.getElementById('lsDiv1')) {
				document.getElementById('lsDiv1').style.display = 'none';
			}
			FixSelectLists(false);
	}
}

/**
 * Initializes the textbox with event handlers for
 * auto suggest functionality.
 * @scope private
 */
AutoSuggestControl.prototype.init = function () {

    //save a reference to this object
    var oThis = this;
    
    //assign the onkeyup event handler
    this.textbox.onkeyup = function (oEvent) {
    
        //check for the proper location of the event object
        if (!oEvent) {
            oEvent = window.event;
        }    
        
        //call the handleKeyUp() method with the event object
        oThis.handleKeyUp(oEvent);
    };
    
};

AutoSuggestControl.prototype.getNonSelectedText = function() {
	var s;
	if (this.textbox.createTextRange) {
		var r = this.textbox.document.selection.createRange().duplicate();
		r.moveEnd("textedit", 1);
		s = this.textbox.value.substring(0, this.textbox.value.length - r.text.length);
	}
	else if(this.textbox.setSelectionRange) {
		s = this.textbox.value.substring(0, this.textbox.selectionStart);
	}
	else
		s = this.textbox.value;
	return s;
}

/**
 * Selects a range of text in the textbox.
 * @scope public
 * @param iStart The start index (base 0) of the selection.
 * @param iLength The number of characters to select.
 */
AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) {

    //use text ranges for Internet Explorer
    if (this.textbox.createTextRange) {
        var oRange = this.textbox.createTextRange(); 
        oRange.moveStart("character", iStart); 
        oRange.moveEnd("character", iLength - this.textbox.value.length);      
        oRange.select();
        
    //use setSelectionRange() for Mozilla
    } else if (this.textbox.setSelectionRange) {
        this.textbox.setSelectionRange(iStart, iLength);
    }     

    //set focus back to the textbox
   this.textbox.focus();  
}; 

/**
 * Inserts a suggestion into the textbox, highlighting the 
 * suggested part of the text.
 * @scope private
 * @param sSuggestion The suggestion for the textbox.
 */
AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) {

    //check for support of typeahead functionality
    if (this.textbox.createTextRange || this.textbox.setSelectionRange){
        var iLen = this.textbox.value.length; 
        this.textbox.value = HtmlDecode(sSuggestion.split("~")[0]); 
        this.selectRange(iLen, sSuggestion.split("~")[0].length);
    }
};


function AirportSuggestions() {
	
    this.Airports = new Array();
}

/**
 * Request suggestions for the given autosuggest control. 
 * @scope protected
 * @param oAutoSuggestControl The autosuggest control to provide suggestions for.
 */
AirportSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl, ignore /*:AutoSuggestControl*/) {
    var aSuggestions = [];
    var sTextboxValue = oAutoSuggestControl.getNonSelectedText();

    if (sTextboxValue.length > 0){	    
        //search for matching Airports
        for (var i=0; i < this.Airports.length; i++) { 
            if (HtmlDecode(this.Airports[i]).toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) {
					aSuggestions.push(this.Airports[i]);
				}
				/*else if (this.Airports[i].toUpperCase().indexOf("(" + sTextboxValue.toUpperCase() + ")") > 0) {
					aSuggestions.push(this.Airports[i]);
				}*/
        }
    }

	if(!ignore) {
		//provide suggestions to the control
		 oAutoSuggestControl.autosuggest(aSuggestions);
	}
	return aSuggestions;
};


function statusMessage(message){
window.status = message;
}
