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