jQuery.autocomplete=function(D,U){var P=this;var Y=$(D).attr("autocomplete","off");if(U.inputClass){Y.addClass(U.inputClass)}var Q=document.createElement("div");var I=$(Q).hide().addClass(U.resultsClass).css("position","absolute");if(U.width>0){I.css("width",U.width)}$("body").append(Q);D.autocompleter=P;var h=null;var X="";var j=-1;var J={};var b=false;var L=false;var A=null;var K=false;var H=false;function M(){J={};J.data={};J.length=0}M();if(U.data!=null){var S="",p={},N=[];if(typeof U.url!="string"){U.cacheLength=1}for(var n=0;n<U.data.length;n++){N=((typeof U.data[n]=="string")?[U.data[n]]:U.data[n]);if(N[0].length>0){S=N[0].substring(0,1).toLowerCase();if(!p[S]){p[S]=[]}p[S].push(N)}}for(var m in p){U.cacheLength++;E(m,p[m])}}Y.keydown(function(i){A=i.keyCode;switch(i.keyCode){case 38:i.preventDefault();d(-1);break;case 40:i.preventDefault();d(1);break;case 9:case 13:if(f()){Y.get(0).blur();i.preventDefault()}break;default:j=-1;if(h){clearTimeout(h)}h=setTimeout(function(){T()},U.delay);break}}).focus(function(){L=true}).blur(function(){L=false;if(!K){C()}});V();function T(){if(A==46||(A>8&&A<32)){return I.hide()}var i=Y.val();if(i==X){return}X=i;if(i.length>=U.minChars){Y.addClass(U.loadingClass);c(i)}else{Y.removeClass(U.loadingClass);I.hide()}}function d(k){var i=$("li",Q);if(!i){return}j+=k;if(j<0){j=0}else{if(j>=i.size()){j=i.size()-1}}i.removeClass("ac_over");$(i[j]).addClass("ac_over")}function f(){var i=$("li.ac_over",Q)[0];if(!i){var k=$("li",Q);if(U.selectOnly){if(k.length==1){i=k[0]}}else{if(U.selectFirst){i=k[0]}}}if(i){R(i);return true}else{return false}}function R(i){if(!i){i=document.createElement("li");i.extra=[];i.selectValue=""}var k=$.trim(i.selectValue?i.selectValue:i.innerHTML);D.lastSelected=k;X=k;I.html("");Y.val(k);V();if(U.onItemSelect){setTimeout(function(){U.onItemSelect(i)},1)}}function B(r,k){var q=Y.get(0);if(q.createTextRange){var i=q.createTextRange();i.collapse(true);i.moveStart("character",r);i.moveEnd("character",k);i.select()}else{if(q.setSelectionRange){q.setSelectionRange(r,k)}else{if(q.selectionStart){q.selectionStart=r;q.selectionEnd=k}}}q.focus()}function W(i){if(A!=8){Y.val(Y.val()+i.substring(X.length));B(X.length,i.length)}}function e(){var k=Z(D);var i=(U.width>0)?U.width:Y.width();I.css({width:parseInt(i)+"px",top:(k.y+D.offsetHeight)+"px",left:k.x+"px"}).show()}function C(){if(h){clearTimeout(h)}h=setTimeout(V,200)}function V(){if(H){return}H=true;if(h){clearTimeout(h)}var i=Y.removeClass(U.loadingClass).val();if(I.is(":visible")){I.hide()}if(U.mustMatch){if(!D.lastSelected||D.lastSelected!=i){R(null)}}H=false}function G(k,i){if(i){Y.removeClass(U.loadingClass);Q.innerHTML="";if(!L||i.length==0){return V()}if($.browser.msie){I.append(document.createElement("iframe"))}Q.appendChild(l(i));if(U.autoFill&&(Y.val().toLowerCase()==k.toLowerCase())){W(i[0][0])}e()}else{V()}}function F(s){if(!s){return null}var k=[];var r=s.split(U.lineSeparator);for(var q=0;q<r.length;q++){var t=$.trim(r[q]);if(t){k[k.length]=t.split(U.cellSeparator)}}return k}function l(v){var u=document.createElement("ul");var s=v.length;if((U.maxItemsToShow>0)&&(U.maxItemsToShow<s)){s=U.maxItemsToShow}for(var t=0;t<s;t++){var w=v[t];if(!w){continue}var q=document.createElement("li");if(U.formatItem){q.innerHTML=U.formatItem(w,t,s);q.selectValue=w[0]}else{q.innerHTML=w[0];q.selectValue=w[0]}var k=null;if(w.length>1){k=[];for(var r=1;r<w.length;r++){k[k.length]=w[r]}}q.extra=k;u.appendChild(q);$(q).hover(function(){$("li",u).removeClass("ac_over");$(this).addClass("ac_over");j=$("li",u).indexOf($(this).get(0))},function(){$(this).removeClass("ac_over")}).click(function(i){i.preventDefault();i.stopPropagation();R(this)})}$(u).mousedown(function(){K=true}).mouseup(function(){K=false});return u}function c(k){if(!U.matchCase){k=k.toLowerCase()}var i=U.cacheLength?o(k):null;if(i){G(k,i)}else{if((typeof U.url=="string")&&(U.url.length>0)){$.get(O(k),function(q){q=F(q);E(k,q);G(k,q)})}else{Y.removeClass(U.loadingClass)}}}function O(t){var r=U.url.indexOf("?")==-1?"?":"&";var k=U.url+r+"q="+encodeURI(t);for(var s in U.extraParams){k+="&"+s+"="+encodeURI(U.extraParams[s])}return k}function o(w){if(!w){return null}if(J.data[w]){return J.data[w]}if(U.matchSubset){for(var u=w.length-1;u>=U.minChars;u--){var r=w.substr(0,u);var y=J.data[r];if(y){var v=[];for(var s=0;s<y.length;s++){var k=y[s];var t=k[0];if(a(t,w)){v[v.length]=k}}return v}}}return null}function a(r,q){if(!U.matchCase){r=r.toLowerCase()}var k=r.indexOf(q);if(k==-1){return false}return k==0||U.matchContains}this.flushCache=function(){M()};this.setExtraParams=function(i){U.extraParams=i};this.findValue=function(){var k=Y.val();if(!U.matchCase){k=k.toLowerCase()}var i=U.cacheLength?o(k):null;if(i){g(k,i)}else{if((typeof U.url=="string")&&(U.url.length>0)){$.get(O(k),function(q){q=F(q);E(k,q);g(k,q)})}else{g(k,null)}}};function g(w,v){if(v){Y.removeClass(U.loadingClass)}var t=(v)?v.length:0;var r=null;for(var u=0;u<t;u++){var x=v[u];if(x[0].toLowerCase()==w.toLowerCase()){r=document.createElement("li");if(U.formatItem){r.innerHTML=U.formatItem(x,u,t);r.selectValue=x[0]}else{r.innerHTML=x[0];r.selectValue=x[0]}var k=null;if(x.length>1){k=[];for(var s=1;s<x.length;s++){k[k.length]=x[s]}}r.extra=k}}if(U.onFindValue){setTimeout(function(){U.onFindValue(r)},1)}}function E(k,i){if(!i||!k||!U.cacheLength){return}if(!J.length||J.length>U.cacheLength){M();J.length++}else{if(!J[k]){J.length++}}J.data[k]=i}function Z(k){var q=k.offsetLeft||0;var i=k.offsetTop||0;while(k=k.offsetParent){q+=k.offsetLeft;i+=k.offsetTop}return{x:q,y:i}}};jQuery.fn.autocomplete=function(B,A,C){A=A||{};A.url=B;A.data=((typeof C=="object")&&(C.constructor==Array))?C:null;A=$.extend({inputClass:"ac_input",resultsClass:"ac_results",lineSeparator:"\n",cellSeparator:"|",minChars:1,delay:400,matchCase:0,matchSubset:1,matchContains:0,cacheLength:1,mustMatch:0,extraParams:{},loadingClass:"ac_loading",selectFirst:false,selectOnly:false,maxItemsToShow:-1,autoFill:false,width:0},A);A.width=parseInt(A.width,10);this.each(function(){var D=this;new jQuery.autocomplete(D,A)});return this};jQuery.fn.autocompleteArray=function(B,A){return this.autocomplete(null,A,B)};jQuery.fn.indexOf=function(B){for(var A=0;A<this.length;A++){if(this[A]==B){return A}}return -1};