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

