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

