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