var ajaxSuggestions={elmIdToPresentResultsIn:"search-results",elmIdResultsContainer:"search-result-suggestions",charactersBeforeSearch:2,timeBeforeSuggest:100,sameWidthAsInputElm:false,offsetLeft:0,offsetTop:0,urlExt:"search=",addSearchTermToQueryString:true,addKeyNavigationEvents:true,hideResultsOnDocumentClick:true,itemClassName:"item",itemSelectedClassName:"selected",itemInsertValueIntoInputClassName:"choose-value",itemInsertValueSetFocusToInput:true,hideResultsWhenInsertValueIsSelected:true,itemSeparator:";",turnAutoCompleteOff:true,xmlHttp:null,elements:[],timer:null,currentElm:null,currentKeyEvent:null,suggestionsForElm:null,elmToPresentResultsIn:null,elmResultsContainer:null,suggestions:[],resultIndex:0,selectedItem:-1,resultsAreVisible:false,valueAddedFromResultsListToInput:false,init:function(){this.xmlHttp=this.createXmlHttp();if(this.xmlHttp){if(typeof document.getElementsByClassName!="function"){document.getElementsByClassName=this.elmByClass}this.elements=document.getElementsByClassName("ajax-suggestion","input");this.applyEvents();this.elmToPresentResultsIn=document.getElementById(this.elmIdToPresentResultsIn);this.elmResultsContainer=document.getElementById(this.elmIdResultsContainer);if(this.addKeyNavigationEvents){this.addEvent(document,"keydown",this.preventDefaultForArrowKeys);this.addEvent(document,"keypress",this.preventDefaultForArrowKeys);this.addEvent(document,"keyup",this.navigateResults)}if(this.hideResultsOnDocumentClick){this.addEvent(document,"click",this.clearResultsElement)}}},createXmlHttp:function(){this.xmlHttp=null;if(typeof XMLHttpRequest!="undefined"){this.xmlHttp=new XMLHttpRequest()}else{if(typeof window.ActiveXObject!="undefined"){try{this.xmlHttp=new ActiveXObject("Msxml2.XMLHTTP.4.0")}catch(a){try{this.xmlHttp=new ActiveXObject("MSXML2.XMLHTTP")}catch(a){try{this.xmlHttp=new ActiveXObject("Microsoft.XMLHTTP")}catch(a){this.xmlHttp=null}}}}}return this.xmlHttp},applyEvents:function(){var b;for(var a=0;a<this.elements.length;a++){b=this.elements[a];if(this.turnAutoCompleteOff){b.setAttribute("autocomplete","off")}this.addEvent(b,"keyup",this.startSuggestionsTimer);if(this.hideResultsOnDocumentClick){this.addEvent(b,"click",this.preventInputClickBubbling)}}},startSuggestionsTimer:function(a){clearTimeout(ajaxSuggestions.timer);ajaxSuggestions.currentElm=(/input/i.test(this.nodeName))?this:a.srcElement;ajaxSuggestions.currentKeyEvent=a.keyCode;ajaxSuggestions.timer=setTimeout("ajaxSuggestions.getSuggestions()",ajaxSuggestions.timeBeforeSuggest)},getSuggestions:function(){var b=this.currentElm.value;if(!/13|27|37|39/.test(this.currentKeyEvent)){var a=this.currentElm.className.replace("ajax-suggestion url-","");if(!this.valueAddedFromResultsListToInput){ajaxSuggestions.clearResults(true)}if(b.length>this.charactersBeforeSearch&&a.length>0){this.makeSuggestionCall(b,a)}else{if(b.length==0||!this.valueAddedFromResultsListToInput){ajaxSuggestions.clearResults()}}}},makeSuggestionCall:function(f,c){var b=new RegExp(("^"+f+"$"),"i");var e=false;var a;var c=c+((/\?/.test(c))?"&":"?")+this.urlExt+((this.addSearchTermToQueryString)?f:"");for(var d=0;d<this.suggestions.length;d++){a=this.suggestions[d];if(b.test(a[0])&&c==a[2]){e=true;this.resultIndex=d;this.presentResult(this.suggestions[d][1]);break}}if(!e){this.xmlHttp.onreadystatechange=function(){};this.xmlHttp.abort();this.currentValue=f;this.currentURL=c;this.xmlHttp.open("GET",c,true);this.xmlHttp.onreadystatechange=this.getResults;this.xmlHttp.send(null)}},getResults:function(){if(ajaxSuggestions.xmlHttp.readyState==4&&ajaxSuggestions.xmlHttp.responseText.length>0){ajaxSuggestions.loadResults()}},loadResults:function(){this.resultIndex=this.suggestions.length;this.suggestions.push([this.currentValue,this.xmlHttp.responseText,this.currentURL]);this.presentResult()},presentResult:function(){this.elmToPresentResultsIn.innerHTML=this.suggestions[this.resultIndex][1];var a=this.getCoordinates();var b=this.elmResultsContainer.style;b.left=a[0]+this.offsetLeft+"px";b.top=a[1]+this.currentElm.offsetHeight+this.offsetTop+"px";if(this.sameWidthAsInputElm){b.width=this.currentElm.offsetWidth+"px"}this.applyResultEvents();b.display="block";this.resultsAreVisible=true;if(this.addKeyNavigationEvents&&/38|40/.test(this.currentKeyEvent)){if(!this.valueAddedFromResultsListToInput){this.selectedItem=-1}this.navigateResults(null,this.currentKeyEvent)}},clearResults:function(a){if(this.elmResultsContainer&&this.elmToPresentResultsIn){if(!a){this.elmResultsContainer.style.display="none";this.resultsAreVisible=false}this.elmToPresentResultsIn.innerHTML="";this.selectedItem=-1}},clearResultsElement:function(){ajaxSuggestions.clearResults()},navigateResults:function(n,o){if(ajaxSuggestions.currentElm&&ajaxSuggestions.elmToPresentResultsIn){var c=(typeof n!="undefined")?n:c;if(typeof ajaxSuggestions.elmToPresentResultsIn.getElementsByClassName!="function"){ajaxSuggestions.elmToPresentResultsIn.getElementsByClassName=ajaxSuggestions.elmByClass}var j=ajaxSuggestions.elmToPresentResultsIn.getElementsByClassName(ajaxSuggestions.itemClassName);var d=(!n&&o==38)?j.length:ajaxSuggestions.selectedItem;var o=o||c.keyCode;var f=o==37||o==38;var b=o==39||o==40;if(j.length>0&&(f||b)){if(f){if((d-1)>=0){d--}else{d=-1}}else{if(b){if((d+1)<j.length){d++}else{d=-1}}}var p;var l;for(var h=0;h<j.length;h++){p=j[h];l=new RegExp((ajaxSuggestions.itemSelectedClassName+"s?"),"i");p.className=p.className.replace(l,"").replace(/^\s?|\s?$/g,"")}ajaxSuggestions.selectedItem=d;var a=ajaxSuggestions.currentElm;if(d>-1){var m=j[d];var g=p.className;if(!new RegExp(ajaxSuggestions.itemSelectedClassName,"i").test(g)){m.className=g+((g.length>0)?" ":"")+ajaxSuggestions.itemSelectedClassName}a=j[d]}try{a.focus()}catch(k){}if(c){if(c.preventDefault){c.preventDefault()}else{c.returnValue=false}if(c.stopPropagation){c.stopPropagation()}else{c.cancelBubble=true}}return false}else{if(o==27){ajaxSuggestions.clearResults();try{ajaxSuggestions.currentElm.focus()}catch(k){}}}}},applyResultEvents:function(){if(typeof this.elmToPresentResultsIn.getElementsByClassName!="function"){this.elmToPresentResultsIn.getElementsByClassName=this.elmByClass}var a=this.elmToPresentResultsIn.getElementsByClassName(this.itemInsertValueIntoInputClassName,"a");var c;for(var b=0;b<a.length;b++){c=a[b];c.inputRef=this.currentElm;this.addEvent(c,"click",this.insertValueIntoField)}},insertValueIntoField:function(a){var f=(/a/i.test(this.nodeName))?this:a.srcElement;var b=f.inputRef;var c=f.getAttribute("href");if(!new RegExp(c).test(b.value)){b.value=((b.value.length>0&&/;/i.test(b.value))?(b.value+c):c)+ajaxSuggestions.itemSeparator}if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}if(a.stopPropagation){a.stopPropagation()}else{a.cancelBubble=true}if(ajaxSuggestions.itemInsertValueSetFocusToInput){try{b.focus()}catch(d){}}if(ajaxSuggestions.hideResultsWhenInsertValueIsSelected){ajaxSuggestions.clearResults()}ajaxSuggestions.valueAddedFromResultsListToInput=true},preventInputClickBubbling:function(a){if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}if(a.stopPropagation){a.stopPropagation()}else{a.cancelBubble=true}return false},preventDefaultForArrowKeys:function(a){var d=a.keyCode;var c=d==37||d==38;var b=d==39||d==40;if((!a.ctrlKey&&!a.metaKey)&&ajaxSuggestions.resultsAreVisible&&(c||b)){if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}if(a.stopPropagation){a.stopPropagation()}else{a.cancelBubble=true}return false}},getCoordinates:function(){var c=this.currentElm;var b=0;var a=0;while(c.offsetParent){b+=c.offsetLeft;a+=c.offsetTop;if(c.scrollTop>0){a-=c.scrollTop}c=c.offsetParent}return[b,a]},closeSession:function(){delete ajaxSuggestions;ajaxSuggestions=null},elmByClass:function(b,a){return ajaxSuggestions.getElementsByClassName.call(this,b,a)},getElementsByClassName:function(f,a){var e=((!a||a=="*")&&this.all)?this.all:this.getElementsByTagName(a||"*");var c=[];var f=f.replace(/\-/g,"\\-");var b=new RegExp("(^|\\s)"+f+"(\\s|$)");var g;for(var d=0;d<e.length;d++){g=e[d];if(b.test(g.className)){c.push(g)}}return(c)},addEvent:function(c,a,b){if(c){if(c.addEventListener){c.addEventListener(a,b,false)}else{if(window.attachEvent){c.attachEvent(("on"+a),b)}}}}};ajaxSuggestions.addEvent(window,"load",function(){ajaxSuggestions.init()});ajaxSuggestions.addEvent(window,"unload",function(){ajaxSuggestions.closeSession()});
