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