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

