jQuery.autocomplete=function(d,x){var s=this;
var D=$(d).attr("autocomplete","off");
if(x.inputClass){D.addClass(x.inputClass)
}var t=document.createElement("div");
var j=$(t);
j.hide().addClass(x.resultsClass).css("position","absolute");
if(x.width>0){j.css("width",x.width)
}$("body").append(t);
d.autocompleter=s;
var e=false;
var M=null;
var B="";
var N=-1;
var l={};
var G=false;
var o=false;
var a=null;
var z=x.call_submit||function(){};
var n=x.call_on_item_selected||function(i,k){};
var Q=x.onChangeInput||function(){};
function p(){l={};
l.data={};
l.length=0
}p();
if(x.data!=null){var v="",T={},q=[];
if(typeof x.url!="string"){x.cacheLength=1
}for(var R=0;
R<x.data.length;
R++){q=((typeof x.data[R]=="string")?[x.data[R]]:x.data[R]);
if(q[0].length>0){v=q[0].substring(0,1).toLowerCase();
if(!T[v]){T[v]=[]
}T[v].push(q)
}}for(var P in T){x.cacheLength++;
f(P,T[P])
}}D.keydown(function(k){a=k.keyCode;
switch(k.keyCode){case 38:k.preventDefault();
I(-1);
break;
case 40:k.preventDefault();
I(1);
break;
case 9:break;
case 13:var i=K();
if(i!=false){if(m(i)==true){u(i);
k.preventDefault()
}else{k.preventDefault();
return false
}}else{z()
}break;
default:N=-1;
if(M){clearTimeout(M)
}M=setTimeout(function(){w()
},x.delay);
break
}});
D.blur(function(i){C(i)
});
D.focus(function(){o=true
});
function w(){if(a==46||(a>8&&a<32)){return j.hide()
}var i=D.val();
if(i==B){return
}B=i;
if(i.length>=x.minChars){D.addClass(x.loadingClass);
H(i)
}else{D.removeClass(x.loadingClass);
j.hide()
}Q()
}function I(k){var i=$("li",t);
if(!i){return
}N+=k;
if(N<0){N=0
}else{if(N>=i.size()){N=i.size()-1
}}i.removeClass("ac_over");
$(i[N]).addClass("ac_over")
}function K(){var i=$("li.ac_over",t)[0];
if(!i){var k=$("li",t);
if(x.selectOnly){if(k.length==1){i=k[0]
}}else{if(x.selectFirst){i=k[0]
}}}if(i){return i
}return false
}function m(i){if(i&&!$(i).children("div").hasClass("unselectable")){return true
}return false
}function u(i){if(!i){i=document.createElement("li");
i.extra=[];
i.selectValue=""
}var k=$.trim(i.selectValue?i.selectValue:i.innerHTML);
n(i,k);
d.lastSelected=k;
B=k;
j.html("");
D.val(k);
if(m(i)){y();
if(x.onItemSelect){setTimeout(function(){x.onItemSelect(i)
},1)
}}}function b(V,k){var U=D.get(0);
if(U.createTextRange){var i=U.createTextRange();
i.collapse(true);
i.moveStart("character",V);
i.moveEnd("character",k);
i.select()
}else{if(U.setSelectionRange){U.setSelectionRange(V,k)
}else{if(U.selectionStart){U.selectionStart=V;
U.selectionEnd=k
}}}U.focus()
}function A(i){if(a!=8){D.val(D.val()+i.substring(B.length));
b(B.length,i.length)
}}function J(){e=true;
var k=E(d);
var i=(x.width>0)?x.width:D.width();
j.css({width:parseInt(i)+"px",top:(k.y+d.offsetHeight)+"px",left:k.x+"px"}).show()
}function C(U){var k=false;
o=false;
var i=K();
if(i!=false&&m(i)){u(i);
c();
U.preventDefault()
}else{if(i!=false&&!m(i)){e=false;
setTimeout(function(){D.focus()
},50)
}else{c()
}}}function c(){e=false;
if(M){clearTimeout(M)
}M=setTimeout(y,200)
}function y(){e=false;
if(M){clearTimeout(M)
}D.removeClass(x.loadingClass);
if(j.is(":visible")){j.hide()
}if(x.mustMatch){var i=D.val();
if(i!=d.lastSelected){u(null)
}}}function h(k,i){if(i){D.removeClass(x.loadingClass);
t.innerHTML="";
if(!o||i.length==0){return y()
}if($.browser.msie){j.append(document.createElement("iframe"))
}t.appendChild(O(i));
if(x.autoFill&&(D.val().toLowerCase()==k.toLowerCase())){A(i[0][0])
}J()
}else{y()
}}function g(k){if(!k){return null
}var i=JSON.parse(k);
return i
}function O(X){var V=document.createElement("ul");
for(var U=0;
U<X.length;
U++){var W=X[U];
var k=document.createElement("li");
if(W.data.style_class){k.className=W.data.style_class
}if(x.formatItem){k.innerHTML=x.formatItem(W);
k.selectValue=W.data.name
}else{k.innerHTML=W.data.name;
k.selectValue=W.data.name
}k.row=W;
$(k).hover(function(){$("li",V).removeClass("ac_over");
$(this).addClass("ac_over");
N=$("li",V).indexOf($(this).get(0))
},function(){$(this).removeClass("ac_over")
});
if(W.data.is_selectable){$(k).click(function(i){i.preventDefault();
i.stopPropagation();
u(this)
})
}else{$(k).unbind("click").click(function(i){})
}V.appendChild(k)
}return V
}function H(k){if(!x.matchCase){k=k.toLowerCase()
}var i=x.cacheLength?S(k):null;
if(i){h(k,i)
}else{if((typeof x.url=="string")&&(x.url.length>0)){$.ajax({url:r(k),type:"GET",dataType:x.dataType,cache:x.cache,data:{cityId:$("#selectedCityId").val(),city:$("#city").val()},success:function(U){f(k,U);
h(k,U)
}})
}else{D.removeClass(x.loadingClass)
}}}function r(V){var k=x.url+$.base64Encode(V);
for(var U in x.extraParams){k+="&"+U+"="+encodeURI(x.extraParams[U])
}return k
}function S(Z){if(!Z){return null
}if(l.data[Z]){return l.data[Z]
}if(x.matchSubset){window.alert(x.matchSubset);
for(var X=Z.length-1;
X>=x.minChars;
X--){var U=Z.substr(0,X);
var aa=l.data[U];
if(aa){var Y=[];
for(var V=0;
V<aa.length;
V++){var k=aa[V];
var W=k[0];
if(F(W,Z)){Y[Y.length]=k
}}return Y
}}}return null
}function F(V,U){if(!x.matchCase){V=V.toLowerCase()
}var k=V.indexOf(U);
if(k==-1){return false
}return k==0||x.matchContains
}this.flushCache=function(){p()
};
this.setExtraParams=function(i){x.extraParams=i
};
this.findValue=function(){var k=D.val();
if(!x.matchCase){k=k.toLowerCase()
}var i=x.cacheLength?S(k):null;
if(i){L(k,i)
}else{if((typeof x.url=="string")&&(x.url.length>0)){$.get(r(k),function(U){U=g(U);
f(k,U);
L(k,U)
})
}else{L(k,null)
}}};
function L(U,k){if(k){D.removeClass(x.loadingClass)
}var i=null;
for(entry in k){if(entry.data.name.toLowerCase()==U.toLowerCase()){i=document.createElement("li");
if(x.formatItem){i.innerHTML=x.formatItem(q);
i.selectValue=entry.data.name
}else{i.innerHTML=entry.data.name;
i.selectValue=entry.data.name
}}}if(x.onFindValue){setTimeout(function(){x.onFindValue(i)
},1)
}}function f(k,i){if(!i||!k||!x.cacheLength){return
}if(!l.length||l.length>x.cacheLength){p();
l.length++
}else{if(!l[k]){l.length++
}}l.data[k]=i
}function E(k){var U=(($.browser.msie)?k.offsetLeft-10:k.offsetLeft)||0;
var i=k.offsetTop||0;
while(k=k.offsetParent){U+=k.offsetLeft;
i+=k.offsetTop
}return{x:U,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.dataType=a.dataType||"json";
a.cache=typeof a.cache=="undefined"?true:a.cache;
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||true;
a.matchContains=a.matchContains||0;
a.cacheLength=a.cacheLength!=null?a.cacheLength:1;
a.mustMatch=a.mustMatch||0;
a.extraParams=a.extraParams||{};
a.loadingClass=a.loadingClass||"";
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;
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
};
