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