(function(d){d.fn.extend({autocomplete:function(a,b){var s=typeof a=="string";b=d.extend({},d.Autocompleter.defaults,{url:s?a:null,data:s?null:a,delay:s?d.Autocompleter.defaults.delay:10,max:b&&!b.scroll?10:150},b);b.highlight=b.highlight||function(l){return l};b.formatMatch=b.formatMatch||b.formatItem;return this.each(function(){new d.Autocompleter(this,b)})},result:function(a){return this.bind("result",a)},search:function(a){return this.trigger("search",[a])},flushCache:function(){return this.trigger("flushCache")},
setOptions:function(a){return this.trigger("setOptions",[a])},unautocomplete:function(){return this.trigger("unautocomplete")}});d.Autocompleter=function(a,b){function s(){var c=m.selected();if(!c)return false;var j=c.result;r=j;if(b.multiple){var q=x(h.val());if(q.length>1){var y=b.multipleSeparator.length,A=d(a).selection().start,v,u=0;d.each(q,function(C,B){u+=B.length;if(A<=u){v=C;return false}u+=y});q[v]=j;j=q.join(b.multipleSeparator)}j+=b.multipleSeparator}h.val(j);n();h.trigger("result",[c.data,
c.value]);return true}function l(c,j){if(f==e.DEL)m.hide();else{var q=h.val();if(!(!j&&q==r)){r=q;q=o(q);if(q.length>=b.minChars){h.addClass(b.loadingClass);b.matchCase||(q=q.toLowerCase());g(q,i,n)}else{h.removeClass(b.loadingClass);m.hide()}}}}function x(c){if(!c)return[""];if(!b.multiple)return[d.trim(c)];return d.map(c.split(b.multipleSeparator),function(j){return d.trim(c).length?d.trim(j):null})}function o(c){if(!b.multiple)return c;var j=x(c);if(j.length==1)return j[0];j=d(a).selection().start;
j=j==c.length?x(c):x(c.replace(c.substring(j),""));return j[j.length-1]}function n(){m.visible();m.hide();clearTimeout(p);h.removeClass(b.loadingClass);b.mustMatch&&h.search(function(c){if(!c)if(b.multiple){c=x(h.val()).slice(0,-1);h.val(c.join(b.multipleSeparator)+(c.length?b.multipleSeparator:""))}else{h.val("");h.trigger("result",null)}})}function i(c,j){if(j&&j.length&&k){h.removeClass(b.loadingClass);m.display(j,c);var q=j[0].value;if(b.autoFill&&o(h.val()).toLowerCase()==c.toLowerCase()&&f!=
e.BACKSPACE){h.val(h.val()+q.substring(o(r).length));d(a).selection(r.length,r.length+q.length)}m.show()}else n()}function g(c,j,q){b.matchCase||(c=c.toLowerCase());var y=t.load(c);if(y&&y.length)j(c,y);else if(typeof b.url=="string"&&b.url.length>0){var A={timestamp:+new Date};d.each(b.extraParams,function(v,u){A[v]=typeof u=="function"?u():u});d.ajax({mode:"abort",port:"autocomplete"+a.name,dataType:b.dataType,url:b.url,data:d.extend({q:o(c),limit:b.max},A),success:function(v){v=v.replace(/<!--(.*)--\>/,
"");var u;if(!(u=b.parse&&b.parse(v))){u=[];v=v.split("\n");for(var C=0;C<v.length;C++){var B=d.trim(v[C]);if(B){B=B.split("|");u[u.length]={data:B,value:B[0],result:b.formatResult&&b.formatResult(B,B[0])||B[0]}}}u=u}u=u;t.add(c,u);j(c,u)}})}else{m.emptyList();q(c)}}var e={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8},h=d(a).attr("autocomplete","off").addClass(b.inputClass),p,r="",t=d.Autocompleter.Cache(b),k=0,f,w={mouseDownOnSelect:false},m=d.Autocompleter.Select(b,
a,s,w),z;d.browser.opera&&d(a.form).bind("submit.autocomplete",function(){if(z)return z=false});h.bind((d.browser.opera?"keypress":"keyup")+".autocomplete",function(c){k=1;f=c.keyCode;switch(c.keyCode){case e.UP:c.preventDefault();m.visible()?m.prev():l(0,true);break;case e.DOWN:c.preventDefault();m.visible()?m.next():l(0,true);break;case e.PAGEUP:c.preventDefault();m.visible()?m.pageUp():l(0,true);break;case e.PAGEDOWN:c.preventDefault();m.visible()?m.pageDown():l(0,true);break;case b.multiple&&
d.trim(b.multipleSeparator)==","&&e.COMMA:case e.TAB:case e.RETURN:if(s()){c.preventDefault();z=true;return false}break;case e.ESC:m.hide();break;default:clearTimeout(p);p=setTimeout(l,b.delay)}}).focus(function(){k++}).blur(function(){k=0;if(!w.mouseDownOnSelect){clearTimeout(p);p=setTimeout(n,200)}}).click(function(){k++>1&&!m.visible()&&l(0,true)}).bind("search",function(){function c(q,y){var A;if(y&&y.length)for(var v=0;v<y.length;v++)if(y[v].result.toLowerCase()==q.toLowerCase()){A=y[v];break}typeof j==
"function"?j(A):h.trigger("result",A&&[A.data,A.value])}var j=arguments.length>1?arguments[1]:null;d.each(x(h.val()),function(q,y){g(y,c,c)})}).bind("flushCache",function(){t.flush()}).bind("setOptions",function(c,j){d.extend(b,j);"data"in j&&t.populate()}).bind("unautocomplete",function(){m.unbind();h.unbind();d(a.form).unbind(".autocomplete")}).bind("input",function(){l(0,true)});d(window).bind("resize",function(){l(0,true)})};d.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:false,formatItem:function(a){return a[0]},formatMatch:null,autoFill:false,width:0,multiple:false,multipleSeparator:", ",highlight:function(a,b){return a.replace(RegExp("(?![^&;]+;)(?!<[^<>]*)("+b.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),'<b style="color:#333;font-weight:bold;">$1</b>')},scroll:true,
scrollHeight:180};d.Autocompleter.Cache=function(a){function b(i,g){a.matchCase||(i=i.toLowerCase());var e=i.indexOf(g);if(a.matchContains=="word")e=i.toLowerCase().search("\\b"+g.toLowerCase());if(e==-1)return false;return e==0||a.matchContains}function s(i,g){n>a.cacheLength&&x();o[i]||n++;o[i]=g}function l(){if(!a.data)return false;var i={},g=0;if(!a.url)a.cacheLength=1;i[""]=[];for(var e=0,h=a.data.length;e<h;e++){var p=a.data[e];p=typeof p=="string"?[p]:p;var r=a.formatMatch(p,e+1,a.data.length);
if(r!==false){var t=r.charAt(0).toLowerCase();i[t]||(i[t]=[]);p={value:r,data:p,result:a.formatResult&&a.formatResult(p)||r};i[t].push(p);g++<a.max&&i[""].push(p)}}d.each(i,function(k,f){a.cacheLength++;s(k,f)})}function x(){o={};n=0}var o={},n=0;setTimeout(l,25);return{flush:x,add:s,populate:l,load:function(i){if(!a.cacheLength||!n)return null;if(!a.url&&a.matchContains){var g=[],e;for(e in o)if(e.length>0){var h=o[e];d.each(h,function(p,r){b(r.value,i)&&g.push(r)})}return g}else if(o[i])return o[i];
else if(a.matchSubset)for(e=i.length-1;e>=a.minChars;e--)if(h=o[i.substr(0,e)]){g=[];d.each(h,function(p,r){if(b(r.value,i))g[g.length]=r});return g}return null}}};d.Autocompleter.Select=function(a,b,s,l){function x(){if(r){t=d("<div/>").hide().addClass(a.resultsClass).css("position","absolute").appendTo(document.body);k=d("<ul/>").appendTo(t).mouseover(function(f){if(o(f).nodeName&&o(f).nodeName.toUpperCase()=="LI"){e=d("li",k).removeClass(i.ACTIVE).index(o(f));d(o(f)).addClass(i.ACTIVE)}}).click(function(f){d(o(f)).addClass(i.ACTIVE);
s();b.focus();return false}).mousedown(function(){l.mouseDownOnSelect=true}).mouseup(function(){l.mouseDownOnSelect=false});a.width>0&&t.css("width",a.width);r=false}}function o(f){for(f=f.target;f&&f.tagName!="LI";)f=f.parentNode;if(!f)return[];return f}function n(f){g.slice(e,e+1).removeClass(i.ACTIVE);e+=f;if(e<0)e=g.size()-1;else if(e>=g.size())e=0;f=g.slice(e,e+1).addClass(i.ACTIVE);if(a.scroll){var w=0;g.slice(0,e).each(function(){w+=this.offsetHeight});if(w+f[0].offsetHeight-k.scrollTop()>
k[0].clientHeight)k.scrollTop(w+f[0].offsetHeight-k.innerHeight());else w<k.scrollTop()&&k.scrollTop(w)}}var i={ACTIVE:"ac_over"},g,e=-1,h,p="",r=true,t,k;return{display:function(f,w){x();h=f;p=w;k.empty();for(var m=a.max&&a.max<h.length?a.max:h.length,z=0;z<m;z++)if(h[z]){var c=a.formatItem(h[z].data,z+1,m,h[z].value,p);if(c!==false){c=d("<li/>").html(a.highlight(c,p)).addClass(z%2==0?"ac_even":"ac_odd").appendTo(k)[0];d.data(c,"ac_data",h[z])}}g=k.find("li");if(a.selectFirst){g.slice(0,1).addClass(i.ACTIVE);
e=0}d.fn.bgiframe&&k.bgiframe()},next:function(){n(1)},prev:function(){n(-1)},pageUp:function(){e!=0&&e-8<0?n(-e):n(-8)},pageDown:function(){e!=g.size()-1&&e+8>g.size()?n(g.size()-1-e):n(8)},hide:function(){t&&t.hide();g&&g.removeClass(i.ACTIVE);e=-1},visible:function(){return t&&t.is(":visible")},current:function(){return this.visible()&&(g.filter("."+i.ACTIVE)[0]||a.selectFirst&&g[0])},show:function(){var f=d(b).offset();t.css({width:typeof a.width=="string"||a.width>0?a.width:d(b).width(),top:f.top+
b.offsetHeight,left:f.left}).show();if(a.scroll){k.scrollTop(0);k.css({maxHeight:a.scrollHeight,overflow:"auto"});if(d.browser.msie&&typeof document.body.style.maxHeight==="undefined"){var w=0;g.each(function(){w+=this.offsetHeight});f=w>a.scrollHeight;k.css("height",f?a.scrollHeight:w);f||g.width(k.width()-parseInt(g.css("padding-left"))-parseInt(g.css("padding-right")))}}},selected:function(){var f=g&&g.filter("."+i.ACTIVE).removeClass(i.ACTIVE);return f&&f.length&&d.data(f[0],"ac_data")},emptyList:function(){k&&
k.empty()},unbind:function(){t&&t.remove()}}};d.fn.selection=function(a,b){if(a!==undefined)return this.each(function(){if(this.createTextRange){var n=this.createTextRange();if(b===undefined||a==b)n.move("character",a);else{n.collapse(true);n.moveStart("character",a);n.moveEnd("character",b)}n.select()}else if(this.setSelectionRange)this.setSelectionRange(a,b);else if(this.selectionStart){this.selectionStart=a;this.selectionEnd=b}});var s=this[0];if(s.createTextRange){var l=document.selection.createRange(),
x=s.value,o=l.text.length;l.text="<->";l=s.value.indexOf("<->");s.value=x;this.selection(l,l+o);return{start:l,end:l+o}}else if(s.selectionStart!==undefined)return{start:s.selectionStart,end:s.selectionEnd}}})(jQuery);
