(function(A){A.fn.extend({autocomplete:function(B,D){var C=typeof B=="string";D=A.extend({},A.Autocompleter.defaults,{url:C?B:null,data:C?null:B,delay:C?A.Autocompleter.defaults.delay:10,max:D&&!D.scroll?10:150},D);D.highlight=D.highlight||function(E){return E};D.formatMatch=D.formatMatch||D.formatItem;return this.each(function(){new A.Autocompleter(this,D)})},result:function(B){return this.bind("result",B)},search:function(B){return this.trigger("search",[B])},flushCache:function(){return this.trigger("flushCache")},setOptions:function(B){return this.trigger("setOptions",[B])},unautocomplete:function(){return this.trigger("unautocomplete")}});A.Autocompleter=function(T,N){var Y={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8};var J=A(T).attr("autocomplete","off").addClass(N.inputClass);var Q;var B="";var U=A.Autocompleter.Cache(N);var L=0;var O;var F={mouseDownOnSelect:false};var S=A.Autocompleter.Select(N,T,K,F);var R;A.browser.opera&&A(T.form).bind("submit.autocomplete",function(){if(R){R=false;return false}});J.bind((A.browser.opera?"keypress":"keydown")+".autocomplete",function(Z){O=Z.keyCode;switch(Z.keyCode){case Y.UP:Z.preventDefault();if(S.visible()){S.prev();E()}else{X(0,true)}break;case Y.DOWN:Z.preventDefault();if(S.visible()){S.next();E()}else{X(0,true)}break;case Y.PAGEUP:Z.preventDefault();if(S.visible()){S.pageUp();E()}else{X(0,true)}break;case Y.PAGEDOWN:Z.preventDefault();if(S.visible()){S.pageDown();E()}else{X(0,true)}break;case N.multiple&&A.trim(N.multipleSeparator)==","&&Y.COMMA:case Y.TAB:case Y.RETURN:if(K()){R=true;return true}break;case Y.ESC:S.hide();break;default:clearTimeout(Q);Q=setTimeout(X,N.delay);break}}).focus(function(){L++}).blur(function(){L=0;if(!F.mouseDownOnSelect){G()}}).click(function(){if(L++>1&&!S.visible()){X(0,true)}}).bind("search",function(){var Z=(arguments.length>1)?arguments[1]:null;function a(e,c){var b;if(c&&c.length){for(var d=0;d<c.length;d++){if(c[d].result.toLowerCase()==e.toLowerCase()){b=c[d];break}}}if(typeof Z=="function"){Z(b)}else{J.trigger("result",b&&[b.data,b.value])}}A.each(C(J.val()),function(c,b){W(b,a,a)})}).bind("flushCache",function(){U.flush()}).bind("setOptions",function(){A.extend(N,arguments[1]);if("data" in arguments[1]){U.populate()}}).bind("unautocomplete",function(){S.unbind();J.unbind();A(T.form).unbind(".autocomplete")}).bind("input",function(){X(0,true)});function K(){var b=S.selected();if(!b){return false}var Z=b.result;B=Z;if(N.multiple){var a=C(J.val());if(a.length>1){Z=a.slice(0,a.length-1).join(N.multipleSeparator)+N.multipleSeparator+Z}Z+=N.multipleSeparator}J.val(Z);H();J.trigger("result",[b.data,b.value]);return true}function E(){var Z=S.getSelectedItem();J.val(Z.result)}function X(Z,a){if(O==Y.DEL){S.hide();return}var b=J.val();if(!a&&b==B){return}B=b;b=M(b);if(b.length>=N.minChars){J.addClass(N.loadingClass);if(!N.matchCase){b=b.toLowerCase()}W(b,P,H)}else{V();S.hide()}}function C(Z){if(!Z){return[""]}var b=Z.split(N.multipleSeparator);var a=[];A.each(b,function(d,c){if(A.trim(c)){a[d]=A.trim(c)}});return a}function M(Z){if(!N.multiple){return Z}var a=C(Z);return a[a.length-1]}function D(a,Z){if(N.autoFill&&(M(J.val()).toLowerCase()==a.toLowerCase())&&O!=Y.BACKSPACE){J.val(J.val()+Z.substring(M(B).length));A.Autocompleter.Selection(T,B.length,B.length+Z.length)}}function G(){clearTimeout(Q);Q=setTimeout(H,200)}function H(){var Z=S.visible();S.hide();clearTimeout(Q);V();if(N.mustMatch){J.search(function(a){if(!a){if(N.multiple){var b=C(J.val()).slice(0,-1);J.val(b.join(N.multipleSeparator)+(b.length?N.multipleSeparator:""))}else{J.val("")}}})}if(Z){A.Autocompleter.Selection(T,T.value.length,T.value.length)}}function P(a,Z){if(Z&&Z.length&&L){V();S.display(Z,a);D(a,Z[0].value);S.show()}else{H()}}function W(c,Z,a){if(!N.matchCase){c=c.toLowerCase()}var d=U.load(c);if(d&&d.length){Z(c,d)}else{if((typeof N.url=="string")&&(N.url.length>0)){var b={timestamp:+new Date()};A.each(N.extraParams,function(e,f){b[e]=typeof f=="function"?f():f});A.ajax({mode:"abort",port:"autocomplete"+T.name,dataType:N.dataType,url:N.url,data:A.extend({q:M(c),limit:N.max},b),success:function(f){var e=N.parse&&N.parse(f)||I(f);U.add(c,e);Z(c,e)}})}else{S.emptyList();a(c)}}}function I(d){var b=[];var c=d.split("\n");for(var a=0;a<c.length;a++){var Z=A.trim(c[a]);if(Z){Z=Z.split("|");b[b.length]={data:Z,value:Z[0],result:N.formatResult&&N.formatResult(Z,Z[0])||Z[0]}}}return b}function V(){J.removeClass(N.loadingClass)}};A.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:false,matchSubset:true,matchContains:false,cacheLength:10,max:100,mustMatch:false,extraParams:{},selectFirst:true,formatItem:function(B){return B[0]},formatMatch:null,autoFill:false,width:0,multiple:false,multipleSeparator:", ",highlight:function(B,C){return B.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+C.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>")},scroll:true,scrollHeight:180};A.Autocompleter.Cache=function(F){var H={};var G=0;function B(J,I){if(!F.matchCase){J=J.toLowerCase()}var K=J.indexOf(I);if(K==-1){return false}return K==0||F.matchContains}function D(J,I){if(G>F.cacheLength){C()}if(!H[J]){G++}H[J]=I}function E(){if(!F.data){return false}var L={},N=0;if(!F.url){F.cacheLength=1}L[""]=[];for(var I=0,J=F.data.length;I<J;I++){var P=F.data[I];P=(typeof P=="string")?[P]:P;var K=F.formatMatch(P,I+1,F.data.length);if(K===false){continue}var O=K.charAt(0).toLowerCase();if(!L[O]){L[O]=[]}var M={value:K,data:P,result:F.formatResult&&F.formatResult(P)||K};L[O].push(M);if(N++<F.max){L[""].push(M)}}A.each(L,function(R,Q){F.cacheLength++;D(R,Q)})}setTimeout(E,25);function C(){H={};G=0}return{flush:C,add:D,populate:E,load:function(M){if(!F.cacheLength||!G){return null}if(!F.url&&F.matchContains){var I=[];for(var L in H){if(L.length>0){var J=H[L];A.each(J,function(O,N){if(B(N.value,M)){I.push(N)}})}}return I}else{if(H[M]){return H[M]}else{if(F.matchSubset){for(var K=M.length-1;K>=F.minChars;K--){var J=H[M.substr(0,K)];if(J){var I=[];A.each(J,function(O,N){if(B(N.value,M)){I[I.length]=N}});return I}}}}}return null}}};A.Autocompleter.Select=function(C,Q,P,B){var L={ACTIVE:"ac_over"};var K,F=-1,E,S="",D=true,J,O;function N(){if(!D){return}J=A("<div/>").hide().addClass(C.resultsClass).css("position","absolute").appendTo(document.body);O=A("<ul/>").appendTo(J).mouseover(function(T){if(R(T).nodeName&&R(T).nodeName.toUpperCase()=="LI"){F=A("li",O).removeClass(L.ACTIVE).index(R(T));A(R(T)).addClass(L.ACTIVE)}}).click(function(T){A(R(T)).addClass(L.ACTIVE);P();Q.focus();return false}).mousedown(function(){B.mouseDownOnSelect=true}).mouseup(function(){B.mouseDownOnSelect=false});if(C.width>0){J.css("width",C.width)}D=false}function R(T){var U=T.target;while(U&&U.tagName!="LI"){U=U.parentNode}if(!U){return[]}return U}function H(T){K.slice(F,F+1).removeClass(L.ACTIVE);G(T);var U=K.slice(F,F+1).addClass(L.ACTIVE);if(C.scroll){var V=0;K.slice(0,F).each(function(){V+=this.offsetHeight});if((V+U[0].offsetHeight-O.scrollTop())>O[0].clientHeight){O.scrollTop(V+U[0].offsetHeight-O.innerHeight())}else{if(V<O.scrollTop()){O.scrollTop(V)}}}}function G(T){F+=T;if(F<0){F=K.size()-1}else{if(F>=K.size()){F=0}}}function I(T){return C.max&&C.max<T?C.max:T}function M(){O.empty();var W=I(E.length);for(var V=0;V<W;V++){if(!E[V]){continue}var T=C.formatItem(E[V].data,V+1,W,E[V].value,S);if(T===false){continue}var U=A("<li/>").html(C.highlight(T,S)).addClass(V%2==0?"ac_even":"ac_odd").appendTo(O)[0];A.data(U,"ac_data",E[V])}K=O.find("li");if(C.selectFirst){K.slice(0,1).addClass(L.ACTIVE);F=0}if(A.fn.bgiframe){O.bgiframe()}}return{display:function(T,U){N();E=T;S=U;M()},next:function(){H(1)},prev:function(){H(-1)},pageUp:function(){if(F!=0&&F-8<0){H(-F)}else{H(-8)}},pageDown:function(){if(F!=K.size()-1&&F+8>K.size()){H(K.size()-1-F)}else{H(8)}},hide:function(){J&&J.hide();K&&K.removeClass(L.ACTIVE);F=-1},visible:function(){return J&&J.is(":visible")},current:function(){return this.visible()&&(K.filter("."+L.ACTIVE)[0]||C.selectFirst&&K[0])},show:function(){var U=A(Q).offset();J.css({width:typeof C.width=="string"||C.width>0?C.width:A(Q).width(),top:U.top+Q.offsetHeight,left:U.left}).show();if(C.scroll){O.scrollTop(0);O.css({maxHeight:C.scrollHeight,overflow:"auto"});if(A.browser.msie&&typeof document.body.style.maxHeight==="undefined"){var T=0;K.each(function(){T+=this.offsetHeight});var V=T>C.scrollHeight;O.css("height",V?C.scrollHeight:T);if(!V){K.width(O.width()-parseInt(K.css("padding-left"))-parseInt(K.css("padding-right")))}}}},selected:function(){var T=K&&K.filter("."+L.ACTIVE).removeClass(L.ACTIVE);return T&&T.length&&A.data(T[0],"ac_data")},emptyList:function(){O&&O.empty()},unbind:function(){J&&J.remove()},getSelectedItem:function(){K.slice(F,F+1).removeClass(L.ACTIVE);var T=K.slice(F,F+1).addClass(L.ACTIVE);return T&&T.length&&A.data(T[0],"ac_data")}}};A.Autocompleter.Selection=function(E,C,D){if(E.createTextRange){var B=E.createTextRange();B.collapse(true);B.moveStart("character",C);B.moveEnd("character",D);B.select()}else{if(E.setSelectionRange){E.setSelectionRange(C,D)}else{if(E.selectionStart){E.selectionStart=C;E.selectionEnd=D}}}E.focus()}})(jQuery);
