jQuery.fn.extend({autocomplete:function(A,B){var C=typeof A=="string";B=jQuery.extend({},jQuery.Autocompleter.defaults,{url:C?A:null,data:C?null:A,delay:C?jQuery.Autocompleter.defaults.delay:10},B);return this.each(function(){new jQuery.Autocompleter(this,B)})},result:function(A){return this.bind("result",A)},search:function(){return this.trigger("search")}});jQuery.Autocompleter=function(K,F){var B={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188};var A=$(K).attr("autocomplete","off").addClass(F.inputClass);var I;var O="";var L=jQuery.Autocompleter.Cache(F);var D=0;var T;var Q=jQuery.Autocompleter.Select(F,K,C);A.keydown(function(V){T=V.keyCode;switch(V.keyCode){case B.UP:V.preventDefault();if(Q.visible()){Q.prev()}else{S(0,true)}break;case B.DOWN:V.preventDefault();if(Q.visible()){Q.next()}else{S(0,true)}break;case F.multiple&&jQuery.trim(F.multipleSeparator)==","&&B.COMMA:case B.TAB:case B.RETURN:if(C()){if(!F.multiple){A.blur()}V.preventDefault()}break;case B.ESC:Q.hide();break;default:clearTimeout(I);I=setTimeout(S,F.delay);break}}).keypress(function(){}).focus(function(){D++}).blur(function(){D=0;R()}).click(function(){if(D++>1&&!Q.visible()){S(0,true)}}).bind("search",function(){function V(Z,Y){var W;if(Y&&Y.length){for(var X=0;X<Y.length;X++){if(Y[X].result.toLowerCase()==Z.toLowerCase()){W=Y[X];break}}}A.trigger("result",W&&[W.data,W.value])}jQuery.each(G(A.val()),function(W,X){E(X,V,V)})});U();function C(){var W=Q.selected();if(!W){return false}var V=W.result;O=V;if(F.multiple){var X=G(A.val());if(X.length>1){V=X.slice(0,X.length-1).join(F.multipleSeparator)+F.multipleSeparator+V}V+=F.multipleSeparator}A.val(V);U();A.trigger("result",[W.data,W.value]);return true}function S(X,W){if(T==B.DEL){Q.hide();return }var V=A.val();if(!W&&V==O){return }O=V;V=H(V);if(V.length>=F.minChars){A.addClass(F.loadingClass);if(!F.matchCase){V=V.toLowerCase()}E(V,J,M)}else{M();Q.hide()}}function G(W){if(!W){return[""]}var X=W.split(jQuery.trim(F.multipleSeparator));var V=[];jQuery.each(X,function(Y,Z){if(jQuery.trim(Z)){V[Y]=jQuery.trim(Z)}});return V}function H(V){if(!F.multiple){return V}var W=G(V);return W[W.length-1]}function P(V,W){if(F.autoFill&&(H(A.val()).toLowerCase()==V.toLowerCase())&&T!=8){A.val(A.val()+W.substring(H(O).length));jQuery.Autocompleter.Selection(K,O.length,O.length+W.length)}}function R(){clearTimeout(I);I=setTimeout(U,200)}function U(){Q.hide();clearTimeout(I);M();if(F.mustMatch){if(A.val()!=O){}}}function J(W,V){if(V&&V.length&&D){M();Q.display(V,W);P(W,V[0].value);Q.show()}else{U()}}function E(W,Y,V){if(!F.matchCase){W=W.toLowerCase()}var X=L.load(W);if(X&&X.length){Y(W,X)}else{if((typeof F.url=="string")&&(F.url.length>0)){jQuery.ajax({url:F.url,data:jQuery.extend({q:H(W),limit:F.max},F.extraParams),success:function(a){var Z=F.parse&&F.parse(a)||N(a);L.add(W,Z);Y(W,Z)}})}else{V(W)}}}function N(Y){var V=[];var X=Y.split("\n");for(var W=0;W<X.length;W++){var Z=jQuery.trim(X[W]);if(Z){Z=Z.split("|");V[V.length]={data:Z,value:Z[0],result:F.formatResult&&F.formatResult(Z)||Z[0]}}}return V}function M(){A.removeClass(F.loadingClass)}};jQuery.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:false,matchSubset:true,matchContains:false,cacheLength:10,mustMatch:false,extraParams:{},selectFirst:true,max:10,autoFill:false,width:0,multiple:false,multipleSeparator:", "};jQuery.Autocompleter.Cache=function(C){var E={};var D=0;function G(J,I){if(!C.matchCase){J=J.toLowerCase()}var H=J.indexOf(I);if(H==-1){return false}return H==0||C.matchContains}function F(I,H){if(D>C.cacheLength){this.flush()}if(!E[I]){D++}E[I]=H}if(C.data){var B={},A=0;if(!C.url){C.cacheLength=1}B[""]=[];jQuery.each(C.data,function(H,J){value=C.formatItem?C.formatItem(J,H+1,C.data.length):J;var I=value.charAt(0).toLowerCase();if(!B[I]){B[I]=[]}var K={value:value,data:J,result:C.formatResult&&C.formatResult(J)||value};B[I].push(K);if(A++<C.max){B[""].push(K)}});jQuery.each(B,function(H,I){C.cacheLength++;F(H,I)})}return{flush:function(){E={};D=0},add:F,load:function(J){if(!C.cacheLength||!D){return null}if(E[J]){return E[J]}if(C.matchSubset){for(var H=J.length-1;H>=C.minChars;H--){var K=E[J.substr(0,H)];if(K){var I=[];jQuery.each(K,function(M,L){if(G(L.value,J)){I[I.length]=L}});return I}}}return null}}};jQuery.Autocompleter.Select=function(O,L,M){var K={ACTIVE:"ac_over"};var G=jQuery("<div>").hide().addClass(O.resultsClass).css("position","absolute").appendTo("body");var J=jQuery("<ul>").appendTo(G).mouseover(function(P){C=jQuery("li",J).removeClass(K.ACTIVE).index(I(P));jQuery(I(P)).addClass(K.ACTIVE)}).mouseout(function(P){jQuery(I(P)).removeClass(K.ACTIVE)}).click(function(P){jQuery(I(P)).addClass(K.ACTIVE);M();L.focus();return false});var D,C=-1,F,B="";if(O.width>0){G.css("width",O.width)}function I(Q){var P=Q.target;while(P.tagName!="LI"){P=P.parentNode}return P}function E(P){C+=P;A();D.removeClass(K.ACTIVE).eq(C).addClass(K.ACTIVE)}function A(){if(C<0){C=D.size()-1}else{if(C>=D.size()){C=0}}}function N(P){return(O.max>0)&&(O.max<P)?O.max:P}function H(){var Q=N(F.length);for(var R=0;R<Q;R++){if(!F[R]){continue}function P(S){return S.replace(new RegExp("("+B+")","gi"),"<strong>$1</strong>")}jQuery("<li>").html(O.formatItem?P(O.formatItem(F[R].data,R+1,Q)):P(F[R].value)).appendTo(J)}D=J.find("li");if(O.selectFirst){D.eq(0).addClass(K.ACTIVE);C=0}}return{display:function(Q,P){F=Q;B=P;J.empty();H();J.bgiframe()},next:function(){E(1)},prev:function(){E(-1)},hide:function(){G.hide();C=-1},visible:function(){return G.is(":visible")},current:function(){return this.visible()&&(D.filter("."+K.ACTIVE)[0]||O.selectFirst&&D[0])},show:function(){var P=jQuery(L).offset({scroll:false,border:false});G.css({width:O.width>0?O.width:jQuery(L).width(),top:P.top+L.offsetHeight,left:P.left}).show()},selected:function(){return F&&F[C]}}};jQuery.Autocompleter.Selection=function(C,D,B){if(C.createTextRange){var A=C.createTextRange();A.collapse(true);A.moveStart("character",D);A.moveEnd("character",B);A.select()}else{if(C.setSelectionRange){C.setSelectionRange(D,B)}else{if(C.selectionStart){C.selectionStart=D;C.selectionEnd=B}}}C.focus()}