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 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 -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 = "" + desc + ""; 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; }