 
RegExp.escape=function(b){if(!arguments.callee.sRE){var a=["/",".","*","+","?","|","(",")","[","]","{","}","\\"];arguments.callee.sRE=new RegExp("(\\"+a.join("|\\")+")","g")}return b.replace(arguments.callee.sRE,"\\$1")};var BComplete=Class.create();BComplete.prototype={MAX_VISIBLE:8,TIMER_TICK:10,CANCEL_SUBMISSION_TIMEOUT:10,initialize:function(e,b){if(b){this.MAX_VISIBLE=b}this.data=new Array();this.element=$(e);if(!this.element){throw ("The specified <input> element does not exist.")}this.element.setAttribute("autocomplete","off");Element.addClassName(this.element,"bcomplete-field");this.visible=false;this.cancelSubmit=false;this.scroll=0;this.selectedIndex=-1;this.matches=new Array();this.popup=document.createElement("div");Element.hide(this.popup);this.popup.className="bcomplete-popup";document.body.appendChild(this.popup);this.listItems=new Array();for(var d=0;d<this.MAX_VISIBLE;d++){var g=document.createElement("div");this.listItems[d]=g;g.className="item";this.popup.appendChild(g);g.autocomplete=this;g.number=d;g.onclick=this.onItemClick;g.onmouseover=this.onItemOn;g.onmouseout=this.onItemOff}Event.observe(this.element,"keyup",this.onKeyPress.bindAsEventListener(this));Event.observe(this.element,"keydown",this.onKeyDown.bindAsEventListener(this));Event.observe(document,"click",this.onWindowClick.bindAsEventListener(this));this.onTick=this.onTick.bind(this);this.onSubmit=this.onSubmit.bind(this);var a=this.element.parentNode;this.PARENT_FORM_ELEMENT=a;while(a){if(a.tagName.toLowerCase()=="form"){break}a=a.parentNode}var f=this;if(a){var c=a.onsubmit;a.onsubmit=function(){if(c){return(c()&&f.onSubmit())}else{return f.onSubmit()}}}},addItem:function(a){this.data[this.data.length]=a;this.data.sort()},setData:function(a){this.data=a;a.sort()},loadData:function(url){var me=this;var success=function(request){try{var data=eval(request.responseText);if(typeof data=="object"){me.setData(data)}}catch(exception){throw ("BComplete: Invalid data format.")}};var request=new Ajax.Request(url,{method:"get",onSuccess:success})},findMatches:function(d){var b=new Array();var c=new RegExp(RegExp.escape(d),"i");for(var a=0;a<this.data.length;a++){if(this.data[a].match(c)){b[b.length]=this.data[a]}}return b},temporarilyDisableSubmission:function(){this.cancelSubmit=true;var b=this;var a=function(){b.cancelSubmit=false};setTimeout(a,this.CANCEL_SUBMISSION_TIMEOUT)},onWindowClick:function(c){var a=Event.element(c);var b=a;while(b){if(b==this.element||b==this.popup||b==this.showAllButton){return}b=b.parentNode}this.hide()},onUpButton:function(a){this.selectedIndex=-1;this.scroll--;if(this.scroll<0){this.scroll=0}this.show();Event.stop(a);this.element.focus()},onDownButton:function(a){this.selectedIndex=-1;this.scroll++;if(this.scroll>(this.matches.length-this.MAX_VISIBLE)){this.scroll=(this.matches.length-this.MAX_VISIBLE)}this.show();Event.stop(a);this.element.focus()},onKeyDown:function(a){if(a.keyCode==13&&this.visible){this.temporarilyDisableSubmission();this.select();Event.stop(a);return false}},showAll:function(){this.matches=this.findMatches("");this.element.focus();this.show()},onKeyPress:function(a){if(a.keyCode==Event.KEY_TAB){if(this.visible){this.select();Event.stop(a);return false}}else{if(a.keyCode==Event.KEY_DOWN){this.selectedIndex++;if(this.selectedIndex<this.scroll){this.selectedIndex=this.scroll}if(this.selectedIndex>=this.matches.length){this.selectedIndex=this.matches.length-1}if(this.scroll<=(this.selectedIndex-this.MAX_VISIBLE)){this.scroll++}if(this.matches.length==0){this.matches=this.findMatches(this.element.value)}this.show();Event.stop(a);return}else{if(a.keyCode==Event.KEY_UP){this.selectedIndex--;if(this.selectedIndex<=-1&&this.scroll<=0){this.selectedIndex=-1;this.hide();Event.stop(a);return}if(this.selectedIndex<=-1){this.selectedIndex=this.scroll+(this.MAX_VISIBLE-1)}if(this.scroll>this.selectedIndex){this.scroll--}this.show();Event.stop(a);return}else{if(a.keyCode!=13){if(this.timerId){clearTimeout(this.timerId)}this.timerId=setTimeout(this.onTick,this.TIMER_TICK)}}}}},onTick:function(){this.selectedIndex=-1;this.scroll=0;if(this.element.value!=""){this.matches=this.findMatches(this.element.value);if(this.matches.length>0){this.show()}else{this.hide()}}else{this.hide()}},onSubmit:function(){if(this.cancelSubmit){this.cancelSubmit=false;return false}else{return true}},onItemOn:function(){for(var a=0;a<this.autocomplete.MAX_VISIBLE;a++){Element.removeClassName(this.autocomplete.listItems[a],"selected")}Element.addClassName(this,"selected");this.autocomplete.selectedIndex=this.number},onItemOff:function(){Element.removeClassName(this,"selected");this.autocomplete.selectedIndex=-1},onItemClick:function(){this.autocomplete.selectedIndex=this.number;this.autocomplete.select()},show:function(){if(this.matches.length<=0){return}var c=this.element.value;var b=new RegExp("("+RegExp.escape(c)+")","i");if(this.scroll>0){Element.removeClassName(this.upButton,"disabled")}else{Element.addClassName(this.upButton,"disabled")}if((this.scroll+this.MAX_VISIBLE)<this.matches.length){Element.removeClassName(this.downButton,"disabled")}else{Element.addClassName(this.downButton,"disabled")}for(var a=0;a<this.MAX_VISIBLE;a++){if(this.matches[a+this.scroll]){var c=this.matches[a+this.scroll];c=c.replace(b,"<strong>$1</strong>");this.listItems[a].innerHTML=c;this.listItems[a].number=a+this.scroll;this.listItems[a].value=this.matches[a+this.scroll];if(this.selectedIndex==(this.scroll+a)){Element.addClassName(this.listItems[a],"selected")}else{Element.removeClassName(this.listItems[a],"selected")}Element.show(this.listItems[a])}else{Element.hide(this.listItems[a])}}this.visible=true;Element.show(this.popup);this.setPopupPosition()},setPopupPosition:function(){var a=Position.cumulativeOffset(this.element);var d=document.body.scrollTop?document.body.scrollTop:document.documentElement.scrollTop;var b=(navigator.userAgent.toLowerCase().indexOf("safari")!=-1&&window.innerHeight)?window.innerHeight:document.documentElement.clientHeight;this.popup.style.width=(this.element.offsetWidth-2)+"px";this.popup.style.left=a[0]+9+"px";var c=a[1]+Element.getHeight(this.element);if((c+this.popup.offsetHeight>d+b)&&(a[1]-this.popup.offsetHeight>d)){c=a[1]-this.popup.offsetHeight}this.popup.style.top=c+"px"},hide:function(){this.matches=new Array();this.selectedIndex=-1;this.scroll=0;this.visible=false;Element.hide(this.popup)},select:function(){if(this.selectedIndex!=-1){this.element.value=this.matches[this.selectedIndex]}this.hide();parentForm.submit()}};Event.observe(window,"load",function(){var a=new BComplete("loc",8);a.loadData("/locations.txt")}); 
function createCookie(c,d,e){if(e){var b=new Date();b.setTime(b.getTime()+(e*24*60*60*1000));var a="; expires="+b.toGMTString()}else{var a=""}document.cookie=c+"="+d+a+"; path=/"}function readCookie(b){var e=b+"=";var a=document.cookie.split(";");for(var d=0;d<a.length;d++){var f=a[d];while(f.charAt(0)==" "){f=f.substring(1,f.length)}if(f.indexOf(e)==0){return f.substring(e.length,f.length)}}return null}function eraseCookie(a){createCookie(a,"",-1)}; 

