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