// (c)2011 MrOrange

﻿
mrO.autoComplete=function(id,className,args){mrO.object.call(this,id,className,args);var defaultSettings={jQueryWebService:"AutoCompleteWebService.asmx/SomeFunction",timeout:2500,delay:200,minchars:3,maxresults:25,offsety:0,height:250,width:240,idleText:"",cssLiMouseOver:"ACmouseOver",cssProcess:"ACProcessingTextbox",processStyle:"textbox"};this.applyDefaultSettings(defaultSettings);var dom=mrO.dom;this.id=id;this.textBox=null;this.input=null;this.divID=null;this.divObj=null;this.waitDivID=null;this.waitDivObj=null;this.iFrameID=null;this.iFrameObj=null;this.toplistDivID=null;this.toplistDivObj=null;this.hiddenIATA=null;this.listObj=null;this.objArr=null;this.timeoutID=null;this.pos=new Array(2);this.XSL=null;this.iHigh=null;this.parameters=new Array();this.slaves=new Array();this.lastX=null;this.lastY=null;var hiddenName=this.id+"AutoComplete";if(this.hiddenIATA==null){this.hiddenIATA=document.getElementById(hiddenName);if(this.hiddenIATA==null){this.hiddenIATA=dom.cE("input",{id:hiddenName,name:hiddenName,type:"hidden"});document.getElementsByTagName("form")[0].appendChild(this.hiddenIATA);}}
this.textBox=document.getElementById(this.id);this.textBox.setAttribute("autocomplete","off");this.originalCSS=this.textBox.className;var pointer=this;this.textBox.onkeypress=function(ev){return pointer.onKeyPress(ev);};this.textBox.onkeyup=function(ev){return pointer.onKeyUp(ev);};this.textBox.onclick=function(ev){pointer.getSuggestions(pointer.textBox.value);mrO.dom.cancelBubble(ev);};this.textBox.onblur=function(ev){return pointer.looseFocus(ev);};if(this.textBox.value==""){this.textBox.value=this.settings['idleText'];}};mrO.autoComplete.prototype=new mrO.object;mrO.autoComplete.prototype.initObject=mrO.autoComplete.prototype.init;mrO.autoComplete.prototype.init=function(args){this.initObject(args);var dom=mrO.dom;this.divID="AC_div_"+this.id;this.divObj=dom.cE("div",{id:this.divID,display:"none"});this.waitDivID="AC_waitDiv_"+this.id;this.waitDivObj=dom.cE("div",{id:this.waitDivID,display:"none"});this.iFrameID="AC_iFrame_"+this.id;this.iFrameObj=null;var Obj=this.divObj;var pointer=this;var clickFunction=function(ev){if(!dom.clickInside(ev,Obj)){pointer.HidePopupDiv(pointer.divObj,pointer.iFrameObj);pointer.iFrameObj=null;}};document.all?document.attachEvent("onclick",clickFunction):document.addEventListener("click",clickFunction,false);document.getElementsByTagName("body")[0].appendChild(this.divObj);document.getElementsByTagName("body")[0].appendChild(this.waitDivObj);this.objArr=new Array();this.input="";};mrO.autoComplete.prototype.registerTopListDiv=function(toplistDivID){this.toplistDivID=toplistDivID;};mrO.autoComplete.prototype.looseFocus=function(ev){if(this.textBox.value==""){this.textBox.value=this.settings['idleText'];}};mrO.autoComplete.prototype.registerParameter=function(name,value,template){var param=new Array(3);param[0]=name;param[1]=value;param[2]=template,this.parameters[this.parameters.length]=param;};mrO.autoComplete.prototype.liObj=function(id,ele,title,cssClass){this.id=id;this.ele=ele;this.title=title;this.cssClass=cssClass;};mrO.autoComplete.prototype.onKeyPress=function(ev){var key=(window.event)?window.event.keyCode:ev.keyCode;var bubble=true;var RETURN=13;var TAB=9;var ESC=27;switch(key)
{case RETURN:this.setHighlightedValue();bubble=false;break;case TAB:this.setHighlightedValue();bubble=false;break;case ESC:this.clearSuggestions();break;}
return bubble;};mrO.autoComplete.prototype.onKeyUp=function(ev){var key=(window.event)?window.event.keyCode:ev.keyCode;var bubble=true;var ARRUP=38;var ARRDN=40;var RETURN=13;var TAB=9;var ESC=27;switch(key)
{case RETURN:break;case TAB:break;case ESC:break;case ARRUP:this.changeHighlight(key,ev);bubble=false;break;case ARRDN:this.changeHighlight(key,ev);bubble=false;break;default:this.getSuggestions(this.textBox.value);}
return bubble;};mrO.autoComplete.prototype.getSuggestions=function(input){if(this.textBox.value==this.settings['idleText']){this.textBox.value="";}
if(this.divObj==null){this.init();}
if(input!=this.sInp){this.hiddenIATA.value="";this.updateSlaves();}
this.sInp=input;if(input.length<this.settings.minchars){this.objArr=new Array();this.nInpC=input.length;this.clearSuggestions();return 0;}
var ol=this.nInpC;this.nInpC=input.length?input.length:0;var pointer=this;clearTimeout(this.timeoutID);this.timeoutID=setTimeout(function(){pointer.doAjaxRequest(input)},this.settings.delay);return false;};mrO.autoComplete.prototype.doAjaxRequest=function(input){if(input!=this.textBox.value)
return false;this.divObj.style.display="none";this.waitDivObj.style.display="none";if(this.settings.processStyle=='textbox'){this.textBox.className=this.settings.cssProcess;}else{this.waitDivObj.innerHTML='&nbsp;';this.waitDivObj.className=this.settings.cssProcess;var pos=mrO.dom.getPos(this.textBox);this.ShowPopupDiv(this.waitDivObj,pos.x,(pos.y+this.textBox.offsetHeight+this.settings.offsety));}
var pointer=this;var onSuccessFunc=function(req){pointer.createList(req)};var args=this.getArguments();if(mrO.isDefined(this.settings.jQueryWebService)){mrO.utils.callWebServiceWithData(this.settings.jQueryWebService,args,input,onSuccessFunc);}else{if(mrO.page.debugging({sender:"mrO.autoComplete.prototype.doAjaxRequest"})){mrO.utils.writeToConsole("mrO.autoComplete.prototype.doAjaxRequest: No webservice defined...");}}};mrO.autoComplete.prototype.AjaxFailed=function(msg){};mrO.autoComplete.prototype.AjaxSucceeded=function(msg){};mrO.autoComplete.prototype.getArguments=function(){var args={};if(mrO.isDefined(this.settings.xslTemplate)){args["xslTemplate"]=this.settings.xslTemplate;}
if(typeof(airSearchInput)!='undefined'&&airSearchInput!=null){args["city1"]=airSearchInput.getCity1IATA();args["city2"]=airSearchInput.getCity2IATA();args["city3"]=airSearchInput.getCity3IATA();args["city4"]=airSearchInput.getCity4IATA();args["fromdate"]=airSearchInput.getFromDate();args["todate"]=airSearchInput.getToDate();}
return args;};mrO.autoComplete.prototype.populateDiv=function(result){var myHTML;if(this.XSL===null&&typeof(this.settings.XSLFileName)!=='undefined'&&this.settings.XSLFileName!==null){var myXML=mrOxml.getXMLObj(result,2);this.XSL=mrOxml.getXMLObj(this.settings.XSLFileName,1);var res=mrOxml.applyXSL(myXML,this.XSL);if(window.ActiveXObject){this.divObj.innerHTML=res;}else if(window.XSLTProcessor){this.divObj.appendChild(res);}}else if(typeof(this.settings.xslTemplate)!=='undefined'&&this.settings.xslTemplate!==null){this.divObj.innerHTML=result;}};mrO.autoComplete.prototype.createList=function(result){var pointer=this;if(this.settings.processStyle=='textbox'){this.textBox.className=this.originalCSS;}else{this.HidePopupDiv(this.waitDivObj,this.iFrameObj);this.iFrameObj=null;this.waitDivObj.innerHTML='&nbsp;';this.waitDivObj.className='';}
this.killTimeout();mrO.dom.remE(this.divObj);this.divObj=mrO.dom.cE("div",{id:this.divID,display:"none"});document.getElementsByTagName("body")[0].appendChild(this.divObj);var pos=mrO.dom.getPos(this.textBox);this.divObj.className="ACcontainerDiv";this.divObj.onmouseover=function(){pointer.killTimeout()};this.divObj.style.overflow="auto";this.divObj.style.height=this.settings.height+'px';this.divObj.style.width=(this.settings.width!=0)?(this.settings.width+'px'):(this.textBox.offsetWidth+'px');this.divObj.innerHTML="";this.divObj.style.display='none';if(mrO.isDefined(result.d))
result=result.d;this.populateDiv(result);this.ShowPopupDiv(this.divObj,pos.x,(pos.y+this.textBox.offsetHeight+this.settings.offsety));this.iHigh=0;this.listObj=mrO.dom.gE("as_ul");this.listObj.id="as_ul_"+this.id;var listArr=this.listObj.getElementsByTagName("li");this.objArr=new Array(listArr.length);for(var i=0;i<listArr.length;i++){var ele=listArr[i];var val=listArr[i].title.trim();this.objArr[i]=new this.liObj(listArr[i].id,ele,val,listArr[i].className);listArr[i].title=val;listArr[i].name=i+1;listArr[i].onclick=function(){pointer.setHighlightedValue();return false;};listArr[i].onmouseover=function(ev){var x=(ev||event).clientX;var y=(ev||event).clientY;if((pointer.lastX&&pointer.lastY)&&(pointer.lastX!=x||pointer.lastY!=y)){pointer.setHighlight(this.name,ev);}else{if(x!=null){pointer.lastX=x;pointer.lastY=y;}}};}};mrO.autoComplete.prototype.IsIE=function(){return(navigator.appName=="Microsoft Internet Explorer");};mrO.autoComplete.prototype.HidePopupDiv=function(divObj,iFrameObj){divObj.style.display='none';if(iFrameObj!=null){document.body.removeChild(iFrameObj);}};mrO.autoComplete.prototype.ShowPopupDiv=function(divObj,left,top){divObj.style.left=left+"px";divObj.style.top=top+"px";if(this.iFrameObj){this.HidePopupDiv(divObj,this.iFrameObj);this.iFrameObj=null;}
this.iFrameObj=document.createElement("IFRAME");this.iFrameObj.setAttribute("src","");this.iFrameObj.style.position="absolute";this.iFrameObj.style.left=left+'px';this.iFrameObj.style.top=top+'px';this.iFrameObj.style.border='0px';this.iFrameObj.style.filter='alpha(opacity=0)';document.body.appendChild(this.iFrameObj);divObj.style.zIndex=this.iFrameObj.style.zIndex+100;divObj.style.display='';this.iFrameObj.style.width=divObj.offsetWidth+'px';this.iFrameObj.style.height=divObj.offsetHeight+'px';};mrO.autoComplete.prototype.killTimeout=function(){clearTimeout(this.timeoutID);};mrO.autoComplete.prototype.resetTimeout=function(){clearTimeout(this.timeoutID);var pointer=this;this.timeoutID=setTimeout(function(){pointer.clearSuggestions()},this.settings.timeout);};mrO.autoComplete.prototype.changeHighlight=function(key,ev)
{var pointer=mrO.autoComplete;var list=this.listObj;if(!list)
return false;var n;if(key==40){n=this.iHigh+1;}else if(key==38){n=this.iHigh-1;}
if(n>list.childNodes.length)
n=list.childNodes.length;if(n<1)
n=1;var top=list.childNodes[n-1].offsetTop;var bottom=(top+list.childNodes[n-1].offsetHeight);var divBottom=this.divObj.scrollTop+this.divObj.offsetHeight;if(this.divObj.scrollTop>top){this.divObj.scrollTop=top;}else if(bottom>divBottom){this.divObj.scrollTop=bottom-this.divObj.offsetHeight;}
this.setHighlight(n,ev);};mrO.autoComplete.prototype.setHighlight=function(n,ev)
{var list=this.listObj;if(!list)
return false;if(this.iHigh>0)
this.clearHighlight();this.iHigh=Number(n);list.childNodes[this.iHigh-1].className=this.settings.cssLiMouseOver;this.killTimeout();var x=(ev||event).clientX;var y=(ev||event).clientY;this.lastX=x;this.lastY=y;};mrO.autoComplete.prototype.clearHighlight=function()
{var list=this.listObj;if(!list)
return false;if(this.iHigh>0)
{list.childNodes[this.iHigh-1].className=this.objArr[this.iHigh-1].cssClass;this.iHigh=0;}};mrO.autoComplete.prototype.setHighlightedValue=function(){if(this.iHigh){this.input=this.textBox.value=this.objArr[this.iHigh-1].title;this.hiddenIATA.value=document.getElementById(this.hiddenIATA.id).value=this.objArr[this.iHigh-1].id;this.updateSlaves();this.clearSuggestions();this.iHigh=0;this.textBox.blur();var pointer=this;var onSuccessFunc=function(req){pointer.setTopList(req)};if(this.settings.TopListWebService){var args=this.getArguments();this.settings.TopListWebService(args,onSuccessFunc,mrOwebservice.OnTimeOut,mrOwebservice.OnError);}}};mrO.autoComplete.prototype.setTopList=function(result){if(this.toplistDivObj==null){this.toplistDivObj=document.getElementById(this.toplistDivID);}
if(this.toplistDivObj!=null){this.toplistDivObj.innerHTML=result;}};mrO.autoComplete.prototype.clearSuggestions=function(){this.killTimeout();this.HidePopupDiv(this.divObj,this.iFrameObj);this.iFrameObj=null;};mrO.autoComplete.prototype.registerSlave=function(pointer){this.slaves[this.slaves.length]=pointer;};mrO.autoComplete.prototype.updateSlaves=function(){if(this.slaves.length>0){for(var i in this.slaves){this.slaves[i].textBox.value=this.textBox.value;this.slaves[i].hiddenIATA.value=this.hiddenIATA.value;}}};
