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