(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(S,M){var X={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8};var I=A(S).attr("autocomplete","off").addClass(M.inputClass);var P;var B="";var T=A.Autocompleter.Cache(M);var K=0;var N;var E={mouseDownOnSelect:false};var R=A.Autocompleter.Select(M,S,J,E);var Q;A.browser.opera&&A(S.form).bind("submit.autocomplete",function(){if(Q){Q=false;return false}});I.bind((A.browser.opera?"keypress":"keydown")+".autocomplete",function(Y){N=Y.keyCode;switch(Y.keyCode){case X.UP:Y.preventDefault();if(R.visible()){R.prev()}else{W(0,true)}break;case X.DOWN:Y.preventDefault();if(R.visible()){R.next()}else{W(0,true)}break;case X.PAGEUP:Y.preventDefault();if(R.visible()){R.pageUp()}else{W(0,true)}break;case X.PAGEDOWN:Y.preventDefault();if(R.visible()){R.pageDown()}else{W(0,true)}break;case M.multiple&&A.trim(M.multipleSeparator)==","&&X.COMMA:case X.TAB:case X.RETURN:if(J()){Y.preventDefault();Q=true;return false}break;case X.ESC:R.hide();break;default:clearTimeout(P);P=setTimeout(W,M.delay);break}}).focus(function(){K++}).blur(function(){K=0;if(!E.mouseDownOnSelect){F()}}).click(function(){if(K++>1&&!R.visible()){W(0,true)}}).bind("search",function(){var Y=(arguments.length>1)?arguments[1]:null;function Z(d,b){var a;if(b&&b.length){for(var c=0;c<b.length;c++){if(b[c].result.toLowerCase()==d.toLowerCase()){a=b[c];break}}}if(typeof Y=="function"){Y(a)}else{I.trigger("result",a&&[a.data,a.value])}}A.each(C(I.val()),function(b,a){V(a,Z,Z)})}).bind("flushCache",function(){T.flush()}).bind("setOptions",function(){A.extend(M,arguments[1]);if("data" in arguments[1]){T.populate()}}).bind("unautocomplete",function(){R.unbind();I.unbind();A(S.form).unbind(".autocomplete")});function J(){var a=R.selected();if(!a){return false}var Y=a.result;B=Y;if(M.multiple){var Z=C(I.val());if(Z.length>1){Y=Z.slice(0,Z.length-1).join(M.multipleSeparator)+M.multipleSeparator+Y}Y+=M.multipleSeparator}I.val(Y);G();I.trigger("result",[a.data,a.value]);return true}function W(Y,Z){if(N==X.DEL){R.hide();return}var a=I.val();if(!Z&&a==B){return}B=a;a=L(a);if(a.length>=M.minChars){I.addClass(M.loadingClass);if(!M.matchCase){a=a.toLowerCase()}V(a,O,G)}else{U();R.hide()}}function C(Y){if(!Y){return[""]}var a=Y.split(M.multipleSeparator);var Z=[];A.each(a,function(c,b){if(A.trim(b)){Z[c]=A.trim(b)}});return Z}function L(Y){if(!M.multiple){return Y}var Z=C(Y);return Z[Z.length-1]}function D(Z,Y){if(M.autoFill&&(L(I.val()).toLowerCase()==Z.toLowerCase())&&N!=X.BACKSPACE){I.val(I.val()+Y.substring(L(B).length));A.Autocompleter.Selection(S,B.length,B.length+Y.length)}}function F(){clearTimeout(P);P=setTimeout(G,200)}function G(){var Y=R.visible();R.hide();clearTimeout(P);U();if(M.mustMatch){I.search(function(Z){if(!Z){if(M.multiple){var a=C(I.val()).slice(0,-1);I.val(a.join(M.multipleSeparator)+(a.length?M.multipleSeparator:""))}else{I.val("")}}})}if(Y){A.Autocompleter.Selection(S,S.value.length,S.value.length)}}function O(Z,Y){if(Y&&Y.length&&K){U();R.display(Y,Z);D(Z,Y[0].value);R.show()}else{G()}}function V(b,Y,Z){if(!M.matchCase){b=b.toLowerCase()}var c=T.load(b);if(c&&c.length){Y(b,c)}else{if((typeof M.url=="string")&&(M.url.length>0)){var a={timestamp:+new Date()};A.each(M.extraParams,function(d,e){a[d]=typeof e=="function"?e():e});A.ajax({mode:"abort",port:"autocomplete"+S.name,dataType:M.dataType,url:M.url,data:A.extend({q:L(b),limit:M.max},a),success:function(e){var d=M.parse&&M.parse(e)||H(e);T.add(b,d);Y(b,d)}})}else{R.emptyList();Z(b)}}}function H(c){var a=[];var b=c.split("\n");for(var Z=0;Z<b.length;Z++){var Y=A.trim(b[Z]);if(Y){Y=Y.split("|");a[a.length]={data:Y,value:Y[0],result:M.formatResult&&M.formatResult(Y,Y[0])||Y[0]}}}return a}function U(){I.removeClass(M.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()}}};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);