/*
 * 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 $
 * Revision: $Id: jquery.autocomplete.js 16 2010-11-01 10:30:27Z kevin.scally $
 * Updated to support Search as you Type functionality: Version 1.06
 */
(function(f){f.fn.extend({autocomplete:function(a,d){var s=typeof a=="string";d=f.extend({},f.Autocompleter.defaults,{url:s?a:null,data:s?null:a,delay:s?f.Autocompleter.defaults.delay:10,max:d&&!d.scroll?10:150},d);d.highlight=d.highlight||function(p){return p};d.formatMatch=d.formatMatch||d.formatItem;return this.each(function(){new f.Autocompleter(this,d)})},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")}});f.Autocompleter=function(a,d){function s(){var b=j.selected();if(!b)return false;var c=b.result;k=c;if(d.multiple){var g=x(i.val());if(g.length>1){var m=d.multipleSeparator.length,w=f(a).selection().start,v,t=0;f.each(g,function(C,A){t+=A.length;if(w<=t){v=C;return false}t+=m});g[v]=c;c=g.join(d.multipleSeparator)}c+=d.multipleSeparator}if(g=(g=b.data.view_href?b.data.view_href:
"")?g:b.data.link)document.location.href=g;else i.val(c);q();i.trigger("result",[b.data,b.value]);return true}function p(b,c){if(B==l.DEL)j.hide();else{var g=i.val();if(!(!c&&g==k)){k=g;g=r(g);if(g.length>=d.minChars){i.addClass(d.loadingClass);d.matchCase||(g=g.toLowerCase());u(g,n,q)}else{i.removeClass(d.loadingClass);j.hide()}}}}function x(b){if(!b)return[""];if(!d.multiple)return[f.trim(b)];return f.map(b.split(d.multipleSeparator),function(c){return f.trim(b).length?f.trim(c):null})}function r(b){if(!d.multiple)return b;
var c=x(b);if(c.length==1)return c[0];c=f(a).selection().start;c=c==b.length?x(b):x(b.replace(b.substring(c),""));return c[c.length-1]}function q(){j.visible();j.hide();clearTimeout(h);i.removeClass(d.loadingClass);d.mustMatch&&i.search(function(b){if(!b)if(d.multiple){b=x(i.val()).slice(0,-1);i.val(b.join(d.multipleSeparator)+(b.length?d.multipleSeparator:""))}else{i.val("");i.trigger("result",null)}})}function n(b,c){var g;if(!(g=c&&c.length&&y)){if(g=c.sayt){for(var m=g=0;m<c.sayt.length;m++)g+=
c.sayt[m].results&&c.sayt[m].results.length?c.sayt[m].results.length:0;g=g}g=g}if(g){i.removeClass(d.loadingClass);j.display(c,b);if(!d.sayt){g=c[0].value;if(d.autoFill&&r(i.val()).toLowerCase()==b.toLowerCase()&&B!=l.BACKSPACE){i.val(i.val()+g.substring(r(k).length));f(a).selection(k.length,k.length+g.length)}}j.show()}else q()}function u(b,c,g){d.matchCase||(b=b.toLowerCase());var m=o.load(b);if(m&&m.length&&!m.sayt)c(b,m);else if(m&&m.sayt){d.dataraw=m;c(b,m)}else if(typeof d.url=="string"&&d.url.length>
0){var w={timestamp:+new Date};f.each(d.extraParams,function(v,t){w[v]=typeof t=="function"?t():t});f.ajax({mode:"abort",port:"autocomplete"+a.name,dataType:d.dataType,url:d.url,data:f.extend({q:r(b)+"*",limit:d.max},w),success:function(v){d.dataraw=v;var t;if(!(t=d.parse&&d.parse(v))){t=[];v=v.split("\n");for(var C=0;C<v.length;C++){var A=f.trim(v[C]);if(A){A=A.split("|");t[t.length]={data:A,value:A[0],result:d.formatResult&&d.formatResult(A,A[0])||A[0]}}}t=t}t=t;o.add(b,t);c(b,t)}})}else{j.emptyList();
g(b)}}var l={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8},i=f(a).attr("autocomplete","off").addClass(d.inputClass),h,k="",o=f.Autocompleter.Cache(d),y=0,B,z={mouseDownOnSelect:false},j=f.Autocompleter.Select(d,a,s,z),e;f.browser.opera&&f(a.form).bind("submit.autocomplete",function(){if(e)return e=false});i.bind((f.browser.opera?"keypress":"keydown")+".autocomplete",function(b){y=1;B=b.keyCode;switch(b.keyCode){case l.UP:b.preventDefault();j.visible()?j.prev():
p(0,true);break;case l.DOWN:b.preventDefault();j.visible()?j.next():p(0,true);break;case l.PAGEUP:b.preventDefault();j.visible()?j.pageUp():p(0,true);break;case l.PAGEDOWN:b.preventDefault();j.visible()?j.pageDown():p(0,true);break;case d.multiple&&f.trim(d.multipleSeparator)==","&&l.COMMA:case l.TAB:case l.RETURN:if(s()){b.preventDefault();e=true;return false}break;case l.ESC:j.hide();break;default:clearTimeout(h);h=setTimeout(p,d.delay)}}).focus(function(){y++}).blur(function(){y=0;if(!z.mouseDownOnSelect){clearTimeout(h);
h=setTimeout(q,200)}}).click(function(){y++>1&&!j.visible()&&p(0,true)}).bind("search",function(){function b(g,m){var w;if(m&&m.length)for(var v=0;v<m.length;v++)if(m[v].result.toLowerCase()==g.toLowerCase()){w=m[v];break}typeof c=="function"?c(w):i.trigger("result",w&&[w.data,w.value])}var c=arguments.length>1?arguments[1]:null;f.each(x(i.val()),function(g,m){u(m,b,b)})}).bind("flushCache",function(){o.flush()}).bind("setOptions",function(b,c){f.extend(d,c);"data"in c&&o.populate()}).bind("unautocomplete",
function(){j.unbind();i.unbind();f(a.form).unbind(".autocomplete")})};f.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:", ",scroll:true,scrollHeight:180,adjustListLeft:0,adjustListTop:0,setListLeft:0,
setListTop:0,displayAction:null,dataraw:null,hideAction:null,highlight:function(a,d){return a.replace(RegExp("(?![^&;]+;)(?!<[^<>]*)("+d.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>")},sayt:false,isodd:"",issearch:"",evenClass:"",oddClass:"",overClass:"sd-col-alt",firstClass:"sd-col-first",lastClass:"sd-col-last",url:"",dataType:"",inputElement:"",inputFormElement:"",wrapperId:"",wrapperClass:"",templateId:"",resultsSelector:"<ul/>",wildcard:"*"};
f.Autocompleter.Cache=function(a){function d(n,u){a.matchCase||(n=n.toLowerCase());var l=n.indexOf(u);if(a.matchContains=="word")l=n.toLowerCase().search("\\b"+u.toLowerCase());if(l==-1)return false;return l==0||a.matchContains}function s(n,u){q>a.cacheLength&&x();r[n]||q++;r[n]=u}function p(){if(!a.data)return false;var n={},u=0;if(!a.url)a.cacheLength=1;n[""]=[];for(var l=0,i=a.data.length;l<i;l++){var h=a.data[l];h=typeof h=="string"?[h]:h;var k=a.formatMatch(h,l+1,a.data.length);if(k!==false){var o=
k.charAt(0).toLowerCase();n[o]||(n[o]=[]);h={value:k,data:h,result:a.formatResult&&a.formatResult(h)||k};n[o].push(h);u++<a.max&&n[""].push(h)}}f.each(n,function(y,B){a.cacheLength++;s(y,B)})}function x(){r={};q=0}var r={},q=0;setTimeout(p,25);return{flush:x,add:s,populate:p,load:function(n){if(!a.cacheLength||!q)return null;if(!a.url&&a.matchContains){var u=[],l;for(l in r)if(l.length>0){var i=r[l];f.each(i,function(h,k){d(k.value,n)&&u.push(k)})}return u}else if(r[n])return r[n];else if(a.matchSubset)for(l=
n.length-1;l>=a.minChars;l--)if(i=r[n.substr(0,l)]){u=[];f.each(i,function(h,k){if(d(k.value,n))u[u.length]=k});return u}return null}}};f.Autocompleter.Select=function(a,d,s,p){function x(){if(a.overClass)i.ACTIVE=a.overClass;if(B){wrapid=a.wrapperId?a.wrapperId:"";wrapclass=a.wrapperClass?a.wrapperClass:"";suffix=wrapid?" id='"+wrapid+"'":"";suffix+=wrapclass?" class='"+wrapclass+"'":suffix;z=wrapid&&a.resultsClass?f("<div"+suffix+"/>").hide().addClass(a.resultsClass).css("position","absolute").appendTo(document.body):
wrapid&&!a.resultsClass?f("<div"+suffix+"/>").hide().css("position","absolute").appendTo(document.body):f("<div/>").hide().addClass(a.resultsClass).css("position","absolute").appendTo(document.body);j=f(a.resultsSelector).appendTo(z).mouseover(function(e){if(!a.sayt)if(r(e).nodeName&&r(e).nodeName.toUpperCase()=="LI"){k=f("li",j).removeClass(i.ACTIVE).index(r(e));f(r(e)).addClass(i.ACTIVE)}}).click(function(e){f(r(e)).addClass(i.ACTIVE);s();d.focus();return true}).mousedown(function(){p.mouseDownOnSelect=
true}).mouseup(function(){p.mouseDownOnSelect=false});a.width>0&&z.css("width",a.width);B=false}}function r(e){for(e=e.target;e&&e.tagName!="LI";)e=e.parentNode;if(!e)return[];return e}function q(e){str="";h=a.sayt?f(a.resultsSelector):h;h.slice(k,k+1).removeClass(i.ACTIVE);k+=e;if(k<0)k=h.size()-1;else if(k>=h.size())k=0;e=h.slice(k,k+1).addClass(i.ACTIVE);if(a.scroll){var b=0;h.slice(0,k).each(function(){b+=this.offsetHeight});if(b+e[0].offsetHeight-j.scrollTop()>j[0].clientHeight)j.scrollTop(b+
e[0].offsetHeight-j.innerHeight());else b<j.scrollTop()&&j.scrollTop(b)}}function n(e,b,c,g){if(e)if(b)if(e=e[b]?e[b]:"")return c.replace("[[VALUE]]",e);else if(g)return g;return""}function u(e,b,c){if(!a.issearch)a.issearch=e.search;if(a.issearch!=e.search){a.issearch=e.search;a.isodd=""}e=c.index==(b.length?b.length:0)?true:false;a.isodd=(c.index==1?true:false)?a.firstClass?a.firstClass:a.isodd:e?a.lastClass?a.lastClass:a.isodd:a.isodd==a.oddClass?a.evenClass:a.oddClass;return a.isodd}function l(){if(a.sayt&&
a.dataraw&&a.dataraw.sayt){var e=false;for(c=0;c<a.dataraw.sayt.length;c++)if(a.dataraw.sayt[c].results.length)e=true;if(e){e=f("#"+a.wrapperId);if(!e.hasTemplate()){var b=f(a.templateId).html();e.setTemplate(b,null,{filter_data:false});e.setParam("camel",u);e.setParam("fieldExists",n);e.setParam("term",y)}e.processTemplate(a.dataraw);var c=0,g=0;f.each(f(a.resultsSelector),function(){if(o.sayt[g]&&o.sayt[g].results[c]){var m=[],w;for(w in o.sayt[g].results[c])m[w]=o.sayt[g].results[c][w];o.sayt[g].results[c].data=
m;o.sayt[g].results[c].result=o.sayt[g].results[c].link;f.data(this,"ac_data",o.sayt[g].results[c]);(c=typeof o.sayt[g].results[c+1]!=undefined?c+1:0)||++g}$(this).html(a.highlight($(this).html(),y));$(this).mouseover(function(){$(this).addClass(i.ACTIVE)});$(this).mouseout(function(){$(this).removeClass(i.ACTIVE)})})}}else{j.empty();e=a.max&&a.max<o.length?a.max:o.length;for(c=0;c<e;c++)if(o[c]){b=a.formatItem(o[c].data,c+1,e,o[c].value,y);if(b!==false){b=f("<li/>").html(a.highlight(b,y)).addClass(c%
2==0?"ac_even":"ac_odd").appendTo(j)[0];f.data(b,"ac_data",o[c])}}h=j.find("li");if(a.selectFirst){h.slice(0,1).addClass(i.ACTIVE);k=0}f.fn.bgiframe&&j.bgiframe()}}var i={ACTIVE:"ac_over"},h,k=-1,o,y="",B=true,z,j;return{display:function(e,b){x();o=e;y=b;k=-1;l()},next:function(){q(1)},prev:function(){q(-1)},pageUp:function(){k!=0&&k-8<0?q(-k):q(-8)},pageDown:function(){k!=h.size()-1&&k+8>h.size()?q(h.size()-1-k):q(8)},hide:function(){z&&z.hide();h&&h.removeClass(i.ACTIVE);k=-1;a.hideAction&&a.hideAction()},
visible:function(){return z&&z.is(":visible")},current:function(){return this.visible()&&(h.filter("."+i.ACTIVE)[0]||a.selectFirst&&h[0])},show:function(){var e=f(d).offset(),b=a.adjustListLeft?a.adjustListLeft:0,c=a.adjustListTop?a.adjustListTop:0;z.css({width:typeof a.width=="string"||a.width>0?a.width:$(d).width(),top:e.top+d.offsetHeight+c,left:e.left+b}).show();if(a.scroll){j.scrollTop(0);j.css({maxHeight:a.scrollHeight,overflow:"auto"});if(f.browser.msie&&typeof document.body.style.maxHeight===
"undefined"){var g=0;h.each(function(){g+=this.offsetHeight});e=g>a.scrollHeight;j.css("height",e?a.scrollHeight:g);e||h.width(j.width()-parseInt(h.css("padding-left"))-parseInt(h.css("padding-right")))}}a.displayAction&&a.displayAction()},selected:function(){var e=h&&h.filter("."+i.ACTIVE).removeClass(i.ACTIVE);return e&&e.length&&f.data(e[0],"ac_data")},emptyList:function(){j&&j.empty()},unbind:function(){z&&z.remove()}}};f.fn.selection=function(a,d){if(a!==undefined)return this.each(function(){if(this.createTextRange){var q=
this.createTextRange();if(d===undefined||a==d)q.move("character",a);else{q.collapse(true);q.moveStart("character",a);q.moveEnd("character",d)}q.select()}else if(this.setSelectionRange)this.setSelectionRange(a,d);else if(this.selectionStart){this.selectionStart=a;this.selectionEnd=d}});var s=this[0];if(s.createTextRange){var p=document.selection.createRange(),x=s.value,r=p.text.length;p.text="<->";p=s.value.indexOf("<->");s.value=x;this.selection(p,p+r);return{start:p,end:p+r}}else if(s.selectionStart!==
undefined)return{start:s.selectionStart,end:s.selectionEnd}}})(jQuery);

