/* Rewrite IATA (International Air Transport Association) Search, * 26.11.2008, Patrick Kirsch */ function BASWL_IATA_Exception_For_IE () { var _self = this; var _what; var _iFr; _self.init_IE = function(what,iFr) { _what = what; _iFr = iFr; }; _self.ExForIE_get_self = function () { return _self; }; _self.aus = function (dummy) { var DivRef = document.getElementById(_what); var IfrRef = document.getElementById(_iFr); DivRef.style.display = "none"; if( IfrRef ) { IfrRef.style.display = "none"; IfrRef.style.width = DivRef.offsetWidth; IfrRef.style.height = DivRef.offsetHeight; IfrRef.style.top = DivRef.style.top; IfrRef.style.left = DivRef.style.left; IfrRef.style.zIndex = DivRef.style.zIndex - 1; IfrRef.style.display = DivRef.style.display; } }; _self.an = function (dummy) { document.getElementById(_what).style.display = ""; var DivRef = document.getElementById(_what); var IfrRef = document.getElementById(_iFr); if( IfrRef ) { IfrRef.style.height = DivRef.offsetHeight - 3; IfrRef.style.top = DivRef.style.top; IfrRef.style.left = DivRef.style.left; IfrRef.style.zIndex = DivRef.style.zIndex - 1; IfrRef.style.display = "block"; } }; _self.div_display = function (select) { document.getElementById(_what).innerHTML = select; var DivRef = document.getElementById(_what); var IfrRef = document.getElementById(_iFr); DivRef.style.display = "block"; if( IfrRef ) { IfrRef.style.width = DivRef.offsetWidth; IfrRef.style.height = DivRef.offsetHeight - 3; IfrRef.style.top = DivRef.style.top; IfrRef.style.left = DivRef.style.left; IfrRef.style.zIndex = DivRef.style.zIndex - 1; } }; _self.stopPropagation_preventDefault = function (event) { if (!event) event = window.event; event.cancelBubble = true; event.preventDefault = false; }; _self._loadXMLDoc_prep_IE = function() { var ajax = new ActiveXObject("Microsoft.XMLHTTP"); return ajax; }; }; /* Browser Objects, with corresponding quirks*/ function BASWL_IATA_Browser() { var _element; this.init_browser = function(element) { _element = element; }; var _nav_safari_dummy = function (event) { if (event.keyCode == 13) { if (event.stopPropagation) event.stopPropagation(); if (event.preventDefault) event.preventDefault(); return false; } return true; }; this.install_browser = function () { var item = document.getElementById(_element); if ((navigator.userAgent.indexOf("Safari") > 0) || (navigator.product == "Gecko") || (navigator.product == "Konqueror/khtml")) { item.addEventListener ("keydown",_nav_safari_dummy,false); item.addEventListener ("keypress",_nav_safari_dummy,false); item.addEventListener ("keyup",this.nav,false); } else { item.attachEvent('onkeyup',this.nav); item.attachEvent('onkeydown',_nav_safari_dummy); item.attachEvent('onkeypress',_nav_safari_dummy); } }; }; function BASWL_IATA_Maske () { var _self = this; _self.what; _self.TempDiv; _self._ajax_request; _self._xmlSource = "../../inc/3lc.php?"; var TempMultiairport; _self.input_hidden; _self.input_hidden_2; // TODO: Sorry; no idea why this field isn't obsolete _self.initVar; // TODO: initializes the 3lc searches (if the use has typed 3 letters) // nonetheless, the autor is not sure, if that is needed ! _self.indexArray = new Array(); // TODO: This is only for Hotel interesting! _self.oldAP = -1; _self.maxAP = 0; _self.startAP = 0; _self.APs = new Array(); _self.Namespace = ""; _self.Maske_get_self = function () { return _self; }; _self.init_formular = function (what_, TempDiv_, TMPmultiairport_, input_hidden_, input_hidden_2_) { _self.what = what_; _self.TempDiv = TempDiv_; TempMultiairport = TMPmultiairport_; _self.input_hidden = input_hidden_; _self.input_hidden_2 = input_hidden_2_; var elem = document.getElementById(what_); elem.onfocus = ""; elem.onclick = function () { _self.initVAR = false; _self.aus(TempDiv_); document.getElementById(what_).value = ''; document.getElementById(input_hidden_).value = ''; }; }; var old_click = document.body.onclick; /*Workaround for blur event is first event which is executed.*/ document.body.onclick = function (event) { if (document.getElementById(_self.TempDiv).style.display != "none") _self.changeField(0); if (old_click) old_click(event); }; _self.aus = function (div_element) { document.getElementById(div_element).style.display = "none"; }; _self.an = function (div_element) { document.getElementById(div_element).style.display = ""; }; _self.div_display = function (content) { document.getElementById(_self.TempDiv).innerHTML = content; }; _self.init_Maske = function (Namespace_, xmlSource_, startDiv) { _self.Namespace = Namespace_; _self._xmlSource = xmlSource_; _self.aus(startDiv); document.getElementById(startDiv).setAttribute("autocomplete","off"); }; _self.stopPropagation_preventDefault = function (event_) { if (event_.stopPropagation) event_.stopPropagation(); if (event_.preventDefault) event_.preventDefault(); }; var _changeForm_for_starts = function (airport, code) { document.getElementById(_self.what).value = airport; document.getElementById(_self.input_hidden).value = code; }; _self.onBlur_aus = function () { _self.aus(_self.TempDiv); }; _self.changeField = function (index) { _self.aus(_self.TempDiv); _self.oldAP = -1; var items = _self._ajax_request.responseXML.getElementsByTagName("item"); var port3lc = _getElementTextNS("", "portname", items[index], 0); if(port3lc == "N/A") { port3lc = ""; } else { port3lc = " - " + port3lc; } var airport = _getElementTextNS("", "airport", items[index], 0) + port3lc; var code = _getElementTextNS("", "code", items[index], 0); _changeForm_for_starts(airport,code); }; _self.do_with_field = function () { // to be overwritten by child }; _self.buildAirports = function (_letter) { // to be overwritten by child }; _self.action_for_key_escape = function () { // to be overwritten by child }; _self._HilightAirport = function (newAP) { var el; var value=""; el=document.getElementById(_self.Namespace+"_"+_self.oldAP); if (el) el.className = 'lc3'; el=document.getElementById(_self.Namespace+"_"+newAP); if (el) el.className = 'lc3_Hover'; _self.oldAP=newAP; }; var _getElementTextNS = function (bad_code_only_for_compability, LC_type, XML_structure, index) { var result = ""; try { result = XML_structure.getElementsByTagName(LC_type)[index]; } catch(e) { return " "; } if (result) { if (result.childNodes.length > 1) { return result.childNodes[1].nodeValue; } else { return result.firstChild.nodeValue; } } else { return "N/A"; } }; _self.nav = function (event) { if (event.keyCode == 38) { // up arrow if(_self.oldAP > _self.startAP) { _self._HilightAirport(_self.oldAP-1); } } else if (event.keyCode == 40) { // down arrow if(_self.oldAP < _self.maxAP) { _self._HilightAirport(_self.oldAP+1); } } else if (event.keyCode == 27) { // esc _self.action_for_key_escape(); } else if (event.keyCode == 9) { // tab } else if (event.keyCode == 13) { // return _self.do_with_field(); /* Stop progation, depending from which browser */ _self.stopPropagation_preventDefault(event); } else if (event.keyCode == 8) { // backspace if ((document.getElementById(_self.what).value).length < 3){ _self.action_for_key_escape(); return; } _self.buildAirports(document.getElementById(_self.what).value); } else { if ((48 <= event.keyCode && event.keyCode <= 90) || event.keyCode == 0) { /* Only alphanumeric*/ _airline_code(); } } return false; }; var _airline_code = function () { var letter = document.getElementById(_self.what).value; var letter_esc = escape(letter); if(letter.length < 3) { _self.aus(_self.TempDiv); _self.initVar = false; _self.indexArray = new Array(); } else if(letter.length == 3) { _self.aus(_self.TempDiv); _self.initVar = true; _load3lc(_self._xmlSource + 'param=' + letter_esc + '&multi=' + TempMultiairport); } else if(letter.length > 3) { if(_self.initVar == false) { _self.initVar = true; _load3lc(_self._xmlSource + 'param=' + letter_esc + '&multi=' + TempMultiairport); } var letter_comp = letter.toLowerCase(); _self.aus(_self.TempDiv); if (_self._ajax_request.readyState == 4) { if (_self._ajax_request.status == 200) { _self.buildAirports(letter_comp); } } } }; var _load3lc = function (_url) { var e; try { _self._loadXMLDoc(_url); } catch(e) { var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error"); alert("Unable to get XML data:\n" + msg); return; } }; _self._loadXMLDoc_prep = function () { var ajax = new XMLHttpRequest(); return ajax; }; _self._loadXMLDoc = function (_url) { _self._ajax_request = _self._loadXMLDoc_prep(); if (_self._ajax_request) { _self._ajax_request.onreadystatechange = _self._processReqChange; _self._ajax_request.open("GET", _url, true); _self._ajax_request.send(null); //null } else { alert("You have no XMLHTTP, Bookansmile does not work with XMLHTTP disabled!"); } }; _self._processReqChange = function () { if (_self._ajax_request.readyState == 4) { if (_self._ajax_request.status == 200) { _self.buildAirports(""); } else { alert("There was a problem retrieving the XML data:\n" + _self._ajax_request.statusText); } } }; _self._buildAirports = function(letter) { var divid = 0 ; var full = false; var tmp_land = ""; var select = ""; var items = _self._ajax_request.responseXML.getElementsByTagName("item"); divid = _self.startAP = 0; if(letter == "") { for (var i = 0; i < items.length; i++) { var LC_city = _getElementTextNS("", "airport", items[i], 0); var LC_airportname = _getElementTextNS("", "portname", items[i], 0); var LC_id = _getElementTextNS("", "id", items[i], 0); var LC_land = _getElementTextNS("", "land", items[i], 0); var LC_code = _getElementTextNS("", "code", items[i], 0); var LC_airportname_3lc; if(LC_airportname != "N/A") { LC_airportname_3lc = " - " + LC_airportname; LC_airportname = " - " + LC_airportname + " (" + LC_code + ")"; } else { LC_airportname = " (" + LC_code + ")"; LC_airportname_3lc = ""; } if(LC_id != "DOUBLE") { if(LC_id != "SHORT") { if(LC_land != tmp_land) { select = select + "
" + LC_land + "
"; tmp_land = LC_land; } full = true; _self.APs[divid] = i; select = select + "
" + LC_city + LC_airportname + "
"; divid++; } } if( LC_id == "SHORT") { full = true; _self.APs[divid] = i; select = select + "
" + LC_code + " - " + LC_city + LC_airportname_3lc + "
"; divid++; if(items.length > 1) { select = select + "
"; } } } // end for } // if letter == "" else { for (var i = 0; i < items.length; i++) { var LC_city = _getElementTextNS("", "airport", items[i], 0); var LC_id = _getElementTextNS("", "id", items[i], 0); var LC_land = _getElementTextNS("", "land", items[i], 0); var LC_airportname = _getElementTextNS("", "portname", items[i], 0); var LC_code = _getElementTextNS("", "code", items[i], 0); if(LC_airportname != "N/A") { LC_airportname = " - " + LC_airportname + " (" + LC_code + ")"; } else { LC_airportname = " (" + LC_code + ")"; } var CompA = LC_city + LC_airportname; CompA = CompA.substring(0, letter.length); CompA = CompA.toLowerCase(); CompB = letter; if((CompA == CompB) && LC_id != "SHORT") { if(LC_land != tmp_land) { select = select + "
" + LC_land + "
"; tmp_land = LC_land; } full = true; _self.APs[divid] = i; select = select + "
" + LC_city + " " + LC_airportname + "
"; divid++; } } // end for } if(full == true) { _self.div_display(select); _self.an(_self.TempDiv); _self._HilightAirport(_self.startAP); } else { _self.aus(_self.TempDiv); } _self.maxAP=divid-1; }; }; function BASWL_IATA_Fluege () { var _Maske; // Platzhalter für die Instanz var _self = this; var ExForIE_div; var ExForIE_IFr; this.Namespace =""; this.initVAR; this.action_for_key_escape = function () { _Maske.aus(_Maske.TempDiv); _Maske.initVar = false; }; this.do_with_field = function () { if (_Maske.oldAP>-1) { _Maske.changeField(_Maske.APs[_Maske.oldAP]); } else { document.getElementById(_Maske.what).focus(); // is DVON document.getElementById(_Maske.input_hidden_2).value = '0'; // m_over_ } }; _self._init = function (_Namespace,_startDiv,_startIfr, _url_3lc) { this.Namespace = _Namespace; var _Maske_self; var browser = navigator.appName; if (browser == "Microsoft Internet Explorer") { BASWL_IATA_Browser.prototype = new BASWL_IATA_Maske(); BASWL_IATA_Exception_For_IE.prototype = new BASWL_IATA_Browser(); _Maske = new BASWL_IATA_Exception_For_IE(); var _ExForIE_self = _Maske.ExForIE_get_self(); _Maske_self = _Maske.Maske_get_self(); _Maske_self.aus = _ExForIE_self.aus; _Maske_self.an = _ExForIE_self.an; _Maske_self.div_display = _ExForIE_self.div_display; _Maske.stopPropagation_preventDefault = _ExForIE_self.stopPropagation_preventDefault; _Maske.init_IE(_startDiv,_startIfr); _Maske_self._loadXMLDoc_prep = _ExForIE_self._loadXMLDoc_prep_IE; } else { // load general browser BASWL_IATA_Browser.prototype = new BASWL_IATA_Maske(); // create the instance _Maske = new BASWL_IATA_Browser(); _Maske_self = _Maske.Maske_get_self(); } _Maske.init_Maske(this.Namespace, _url_3lc, _startDiv); _Maske_self.buildAirports = _Maske_self._buildAirports; // Simple function override does not work, I have to explicit request the context _Maske_self.do_with_field = this.do_with_field; // Sadly Javascript does not support real class management _Maske_self.action_for_key_escape = this.action_for_key_escape; this.changeField = _Maske.changeField; this.aus = _Maske.aus; this.onBlur = _Maske.onBlur_aus; _Maske_self.initVar = this.initVAR; }; var _keylistener = function (what, TempDiv, TMPmultiairport, input_hidden, input_hidden_2) { _Maske.init_formular(what, TempDiv, TMPmultiairport, input_hidden, input_hidden_2); _Maske.init_browser(what); _Maske.install_browser(); }; this.init = function (_Namespace,srv_param, _url_3lc, object_reference) { document.getElementById(_Namespace+'_res_div').BASWL_IATA_Fluege = object_reference; _self._init(_Namespace+'_namespace',_Namespace+'_res_div', _Namespace+'_res_ifr', _url_3lc); // Namespace resdiv resiframe _keylistener(_Namespace+'_input',_Namespace+'_res_div', srv_param, _Namespace+'_von', _Namespace+'_over_von'); // input resdiv srv-param input_hidden input_hidden }; }; function BASWL_IATA_Hotels () { var _Maske; var _self = this; this.Namespace =""; this.initVAR; _self._Maske_self; _self._startDiv; var divid = 2000; var hitcount = 0; var lines = new Array(); var i = 0; var showmaxhits = 25; var select; var tmpA; var children; _self._checkHotelMatch = function (what,tmpA,tmp_land) { var stmp=""; var names = tmpA[4]; names.unshift(tmpA[1]); for (var aic=0; aic < names.length;aic++) { // check if there is a direct hit if (names[aic].toLowerCase() == what.toLowerCase()) { // insert only this item, for all alternate names if(tmp_land != tmpA[3]) { stmp="
" +tmpA[3] + "
"; tmp_land=tmpA[3]; } stmp+="
" + names[aic] + " (" + tmpA[1] +")" + ((tmpA[2]=="N/A" || tmpA[2]=="" )?"":", " +tmpA[2]) + "
"; return stmp; } } /*if (tmpA[1].toLowerCase().indexOf(what) != -1 ) { if(tmp_land != tmpA[3]) { stmp="
" +tmpA[3] + "
"; tmp_land=tmpA[3]; } stmp+="
" + tmpA[1] + ((tmpA[2]=="N/A" || tmpA[2]=="" )?"":", " +tmpA[2]) + "
"; return stmp; } else {*/ // in alternate names for (var aic=0; aic < names.length;aic++) { // check if there is a direct hit if (names[aic].toLowerCase().substring(0,what.length) == what) { // insert only this item, for all alternate names if(tmp_land != tmpA[3]) { stmp="
" +tmpA[3] + "
"; tmp_land=tmpA[3]; } stmp+="
" + names[aic] + " (" + tmpA[1] +")" + ((tmpA[2]=="N/A" || tmpA[2]=="" )?"":", " +tmpA[2]) + "
"; return stmp; } } for (var aic=0; aic < names.length;aic++) { if (names[aic].toLowerCase().indexOf(what) != -1) { if(tmp_land != tmpA[3]) { stmp="
" +tmpA[3] + "
"; tmp_land=tmpA[3]; } stmp+="
" + names[aic] + " (" + tmpA[1] +")" + ((tmpA[2]=="N/A" || tmpA[2]=="" )?"":", " +tmpA[2]) + "
"; return stmp; } } //} return false; }; var _build_index_array = function (item,_tmp_land,_letter) { children = item.firstChild.nodeValue.split("|"); tmpA = new Array( children[0], // id children[1], // name children[2], // district children[4] // land ); var OaltN = children[3]; var tmpAltN = new Array(); if( OaltN ) { tmpAltN=OaltN.split(","); } tmpA.push(tmpAltN); var stmp=""; if(stmp = _self._checkHotelMatch(_letter,tmpA,_tmp_land)) { if(_tmp_land != tmpA[3]) _tmp_land = tmpA[3]; if (hitcount < showmaxhits) { lines.push(stmp); } _self._Maske_self.APs[divid]=i; divid++; hitcount++; } _tmp_land=tmpA[3]; _self._Maske_self.indexArray.push(tmpA); i++; return _tmp_land; }; var _build_index_array_2 = function (_tmpA,_tmp_land,_letter) { var stmp = ""; if(stmp = _self._checkHotelMatch(_letter,_tmpA,_tmp_land)) { if (hitcount < showmaxhits) { lines.push(stmp); } _self._Maske_self.APs[divid]=i; divid++; hitcount++; _tmp_land=_tmpA[3]; } i++; return _tmp_land; }; _self.buildAirports = function(_letter, redraw) { _self._Maske_self.startAP = 2000; // First-call Index building if (_Maske.indexArray.length < 1) { // parse XML once and build indexArray divid=2000; hitcount=0; i=0; var tmp_land = ""; for (var _i = 0, length = _Maske._ajax_request.responseXML.getElementsByTagName("i").length; _i < length; _i++) { tmp_land = _build_index_array(_Maske._ajax_request.responseXML.getElementsByTagName("i")[_i],tmp_land,_letter); } if( !redraw ) _self.buildAirports(_letter, true); } else { // Actual Search functionality now done over Array instead of xml var _tmp_land = tmp_land; lines = new Array(); divid=2000; hitcount=0; i=0; for (var _i = 0, length = _Maske.indexArray.length; _i < length; _i++) { _tmp_land = _build_index_array_2(_Maske.indexArray[_i],_tmp_land,_letter); } } if (hitcount >= showmaxhits) { lines.push("
...
"); lines.push("
und "+(hitcount-showmaxhits) +" weitere
"); } if (lines.length > 0) { _Maske.div_display(lines.join("\n")); _Maske.an(_Maske.TempDiv); _Maske._HilightAirport(_Maske.startAP); } else { _Maske.aus(_Maske.TempDiv); } _self._Maske_self.maxAP=divid-1; }; _self.changeFieldHotel = function (what) { var indexArray = _Maske.indexArray; document.getElementById(_Maske.what).value = indexArray[what][1] + ((indexArray[what][0]!="N/A")?", "+ indexArray[what][2]:"") + ", " + indexArray[what][3]; document.getElementById(_Maske.input_hidden).value = indexArray[what][0]; _Maske.aus(_Maske.TempDiv); }; _self.do_with_field = function () { if (_Maske.oldAP>-1) { _self.changeFieldHotel(_Maske.APs[_Maske.oldAP]); } else { document.getElementById(_Maske.input_hidden).focus(); // is DVON document.getElementById(_Maske.input_hidden_2).value = '0'; // m_over_ } }; _self.action_for_key_escape = function () { _Maske.aus(_Maske.TempDiv); _Maske.initVar = false; }; _self._init = function (_Namespace,_startDiv,_startIfr, _url_3lc) { this.Namespace = _Namespace; // Check if IE var browser = navigator.appName; if (browser == "Microsoft Internet Explorer") { BASWL_IATA_Browser.prototype = new BASWL_IATA_Maske(); BASWL_IATA_Exception_For_IE.prototype = new BASWL_IATA_Browser(); _Maske = new BASWL_IATA_Exception_For_IE(); var _ExForIE_self = _Maske.ExForIE_get_self(); _self._Maske_self = _Maske.Maske_get_self(); _self._Maske_self.aus = _ExForIE_self.aus; _self._Maske_self.an = _ExForIE_self.an; _self._Maske_self.div_display = _ExForIE_self.div_display; _self._Maske_self.stopPropagation_preventDefault = _ExForIE_self.stopPropagation_preventDefault; _Maske.init_IE(_startDiv,_startIfr); _self._Maske_self._loadXMLDoc_prep = _ExForIE_self._loadXMLDoc_prep_IE; } else { BASWL_IATA_Browser.prototype = new BASWL_IATA_Maske(); // create the instance _Maske = new BASWL_IATA_Browser(); _self._Maske_self = _Maske.Maske_get_self(); } // target: the super classe (Maske) asks for this.buildAirports and we have to override it with local oder with default implementation Maske._buildAirports _Maske.init_Maske(this.Namespace, _url_3lc,_startDiv); _self._Maske_self.do_with_field = _self.do_with_field; // Sadly Javascript does not support real class management _self._Maske_self.buildAirports = _self.buildAirports; _self._Maske_self.action_for_key_escape = _self.action_for_key_escape; _self._startDiv = _startDiv; this.changeFieldHotel = _self.changeFieldHotel; this.aus = _Maske.aus; this.onBlur = _Maske.onBlur_aus; _self._Maske_self.initVar = this.initVAR; }; var _keylistener = function (what, TempDiv, TMPmultiairport, input_hidden, input_hidden_2) { _Maske.init_formular(what, TempDiv, TMPmultiairport, input_hidden, input_hidden_2); _Maske.init_browser(what); _Maske.install_browser(); }; this.init = function (_Namespace, srv_param, _url_3lc, object_reference) { document.BASWL_IATA_Hotels = object_reference; _self._init(_Namespace+'_namespace',_Namespace+'_res_div', _Namespace+'_res_ifr', _url_3lc); // Namespace resdiv resiframe _keylistener(_Namespace+'_input',_Namespace+'_res_div', srv_param, _Namespace+'_von', _Namespace+'_over_von'); // input resdiv srv-param input_hidden input_hidden }; };