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