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