(function(d){var a=new RegExp("(\\"+["/",".","*","+","?","|","(",")","[","]","{","}","\\"].join("|\\")+")","g");function c(h,g,e){var f="("+e.replace(a,"\\$1")+")";return h.replace(new RegExp(f,"gi"),"<strong>$1</strong>")}function b(f,e){this.el=d(f);this.el.attr("autocomplete","off");this.suggestions=[];this.data=[];this.badQueries=[];this.selectedIndex=-1;this.currentValue=this.el.val();this.intervalId=0;this.cachedResponse=[];this.onChangeInterval=null;this.ignoreValueChange=false;this.serviceUrl=e.serviceUrl;this.isLocal=false;this.options={uid:e.uid!=undefined?e.uid:Math.floor(Math.random()*1048576).toString(16),autoSubmit:false,minChars:1,maxHeight:300,deferRequestBy:0,width:0,highlight:true,params:{},fnFormatResult:c,delimiter:null,zIndex:9999};this.initialize();this.setOptions(e)}d.fn.autocomplete=function(e){return new b(this.get(0)||d("<input />"),e)};b.prototype={killerFn:null,initialize:function(){var f,e;f=this;e="Autocomplete_"+this.options.uid;this.killerFn=function(g){if(d(g.target).parents(".autocomplete").size()===0){f.killSuggestions();f.disableKillerFn()}};if(!this.options.width){this.options.width=this.el.width()}this.mainContainerId="AutocompleteContainter_"+this.options.uid;d('<div id="'+this.mainContainerId+'" style="position:absolute;z-index:9999;"><div class="autocomplete-w1"><div class="autocomplete" id="'+e+'" style="display:none; width:300px;"></div></div></div>').appendTo("body");this.container=d("#"+e);this.fixPosition();if(window.opera){this.el.keypress(function(g){f.onKeyPress(g)})}else{this.el.keydown(function(g){f.onKeyPress(g)})}this.el.keyup(function(g){f.onKeyUp(g)});this.el.blur(function(){f.enableKillerFn()});this.el.focus(function(){f.fixPosition()})},setOptions:function(e){var f=this.options;d.extend(f,e);if(f.lookup){this.isLocal=true;if(d.isArray(f.lookup)){f.lookup={suggestions:f.lookup,data:[]}}}d("#"+this.mainContainerId).css({zIndex:f.zIndex});this.container.css({maxHeight:f.maxHeight+"px",width:f.width})},clearCache:function(){this.cachedResponse=[];this.badQueries=[]},disable:function(){this.disabled=true},enable:function(){this.disabled=false},fixPosition:function(){var e=this.el.offset();d("#"+this.mainContainerId).css({top:(e.top+this.el.innerHeight())+"px",left:e.left+"px"})},enableKillerFn:function(){var e=this;d(document).bind("click",e.killerFn)},disableKillerFn:function(){var e=this;d(document).unbind("click",e.killerFn)},killSuggestions:function(){var e=this;this.stopKillSuggestions();this.intervalId=window.setInterval(function(){e.hide();e.stopKillSuggestions()},300)},stopKillSuggestions:function(){window.clearInterval(this.intervalId)},onKeyPress:function(f){if(this.disabled||!this.enabled){return}switch(f.keyCode){case 27:this.el.val(this.currentValue);this.hide();break;case 9:case 13:if(this.selectedIndex===-1){this.hide();return}this.select(this.selectedIndex);if(f.keyCode===9){return}break;case 38:this.moveUp();break;case 40:this.moveDown();break;default:return}f.stopImmediatePropagation();f.preventDefault()},onKeyUp:function(g){if(this.disabled){return}switch(g.keyCode){case 38:case 40:return}clearInterval(this.onChangeInterval);if(this.currentValue!==this.el.val()){if(this.options.deferRequestBy>0){var f=this;this.onChangeInterval=setInterval(function(){f.onValueChange()},this.options.deferRequestBy)}else{this.onValueChange()}}},onValueChange:function(){clearInterval(this.onChangeInterval);this.currentValue=this.el.val();var e=this.getQuery(this.currentValue);this.selectedIndex=-1;if(this.ignoreValueChange){this.ignoreValueChange=false;return}if(e===""||e.length<this.options.minChars){this.hide()}else{this.getSuggestions(e)}},getQuery:function(g){var f,e;f=this.options.delimiter;if(!f){return d.trim(g)}e=g.split(f);return d.trim(e[e.length-1])},getSuggestionsLocal:function(j){var g,f,e,k,h;f=this.options.lookup;e=f.suggestions.length;g={suggestions:[],data:[]};j=j.toLowerCase();for(h=0;h<e;h++){k=f.suggestions[h];if(k.toLowerCase().indexOf(j)===0){g.suggestions.push(k);g.data.push(f.data[h])}}return g},getSuggestions:function(g){var f,e;f=this.isLocal?this.getSuggestionsLocal(g):this.cachedResponse[g];if(f&&d.isArray(f.suggestions)){this.suggestions=f.suggestions;this.data=f.data;this.suggest()}else{if(!this.isBadQuery(g)){e=this;e.options.params.query=g;d.getJSON(this.serviceUrl+"?callback=?",e.options.params,function(h){e.processResponse(h)})}}},isBadQuery:function(f){var e=this.badQueries.length;while(e--){if(f.indexOf(this.badQueries[e])===0){return true}}return false},hide:function(){this.enabled=false;this.selectedIndex=-1;this.container.hide()},suggest:function(){if(this.suggestions.length===0){this.hide();return}var m,l,e,k,n,h,o,j,g;m=this;l=this.suggestions.length;k=this.options.fnFormatResult;n=this.getQuery(this.currentValue);j=function(f){return function(){m.activate(f)}};g=function(f){return function(){m.select(f)}};this.container.hide().empty();for(h=0;h<l;h++){o=this.suggestions[h];e=d((m.selectedIndex===h?'<div class="selected"':"<div")+' title="'+o+'">'+k(o,this.data[h],n)+"</div>");e.mouseover(j(h));e.click(g(h));this.container.append(e)}this.enabled=true;this.container.show()},processResponse:function(e){if(!d.isArray(e.data)){e.data=[]}if(!this.options.noCache){this.cachedResponse[e.query]=e;if(e.suggestions.length===0){this.badQueries.push(e.query)}}if(e.query===this.getQuery(this.currentValue)){this.suggestions=e.suggestions;this.data=e.data;this.suggest()}},activate:function(e){var f,g;f=this.container.children();if(this.selectedIndex!==-1&&f.length>this.selectedIndex){d(f.get(this.selectedIndex)).removeClass()}this.selectedIndex=e;if(this.selectedIndex!==-1&&f.length>this.selectedIndex){g=f.get(this.selectedIndex);d(g).addClass("selected")}return g},deactivate:function(f,e){f.className="";if(this.selectedIndex===e){this.selectedIndex=-1}},select:function(g){var e,h;e=this.suggestions[g];if(e){this.el.val(e);if(this.options.autoSubmit){h=this.el.parents("form");if(h.length>0){h.get(0).submit()}}this.ignoreValueChange=true;this.hide();this.onSelect(g)}},moveUp:function(){if(this.selectedIndex===-1){return}if(this.selectedIndex===0){this.container.children().get(0).className="";this.selectedIndex=-1;this.el.val(this.currentValue);return}this.adjustScroll(this.selectedIndex-1)},moveDown:function(){if(this.selectedIndex===(this.suggestions.length-1)){return}this.adjustScroll(this.selectedIndex+1)},adjustScroll:function(e){var j,f,g,h;j=this.activate(e);f=j.offsetTop;g=this.container.scrollTop();h=g+this.options.maxHeight-25;if(f<g){this.container.scrollTop(f)}else{if(f>h){this.container.scrollTop(f-this.options.maxHeight+25)}}this.el.val(this.getValue(this.suggestions[e]))},onSelect:function(e){var h,g,f,j;h=this;g=h.options.onSelect;f=h.suggestions[e];j=h.data[e];h.el.val(h.getValue(f));if(d.isFunction(g)){g(f,j,h.el)}},getValue:function(i){var f,h,e,g;g=this;f=g.options.delimiter;if(!f){return i}h=g.currentValue;e=h.split(f);if(e.length===1){return i}return h.substr(0,h.length-e[e.length-1].length)+i}}}(jQuery));
