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