(function(h){h.fn.indexOf=function(a){for(var b=0;b<this.length;b++){if(this[b]==a)return b}return-1};function s(e){this.populate=function(b){var c=this;if(!c.t.options.matchCase)b=b.toLowerCase();var d=c.t.ccL?c.t.loadFromCache(b):null;if(d)c.t.populate_list(b,d);else c.gd(b,function(a){if(a)c.t.populate_list(b,a);else h(c.t.text_input).removeClass(c.t.options.loadingClass)})}}function t(d){var e=this;e.t=d;e.gd=function(b,c){h.getJSON(g(b),function(a){c(e.iD(b,a))})};e.iD=function(a,b){e.t.addToCache(a,b);return b};function g(a){var b=d.options.url+"?q="+encodeURI(a);for(var c in d.options.extraParams){b+="&"+c+"="+encodeURI(d.options.extraParams[c])}return b}}t.prototype=new s('ajax');function u(g){var j=this;j.t=g;j.gd=function(a,b){if(!j.t.options.data)b();else{var c=[],d=[];for(var e=0;e<j.t.options.data.length;e++){d=((typeof j.t.options.data[e]=="string")?[j.t.options.data[e]]:j.t.options.data[e]);c.push(d)}j.t.ccL++;j.t.addToCache('',c);b(this.t.loadFromCache(a))}}}u.prototype=new s('data');function w(){var k=this;k.fC=function(){this.cc={data:{},length:0}};k.addToCache=function(a,b){if(!b||!this.ccL)return;if(!this.cc.length||this.cc.length>this.ccL){this.fC();this.cc.length++}else if(!this.cc[a])this.cc.length++;this.cc.data[a]=b};k.loadFromCache=function(a){if(!a)return null;if(this.cc.data[a])return this.cc.data[a];for(var b=a.length-1;b>=0;b--){var c=a.substr(0,b);var d=this.cc.data[c];if(d){var e=[];for(var g=0;g<d.length;g++){var j=d[g],m=j[0];if(this.findMatch(this.options.match,m,a))e[e.length]=j}return e.sort(o(this.options.match,a))}}return null};k.findMatch=function(a,b,c){if(!this.options.matchCase)b=b.toLowerCase();switch(a){case'substring':var d=b.indexOf(c);if(d==-1)return false;return d==0||this.options.matchContains;case'quicksilver':return b.score(c)>0}};function o(e,g){switch(e){case'substring':return function(a,b){var c=[a[0],b[0]].sort;return(a[0]==c[0])-(b[0]==c[1])};case'quicksilver':return function(a,b){var c=a[0].toLowerCase().score(g),d=b[0].toLowerCase().score(g);return(c>d?-1:(d>c?1:0))}}};k.moveSelect=function(a){var b=h("li",this.results);if(!b)return;this.active+=a;if(this.active<0)this.active=0;else if(this.active>=b.size())this.active=b.size()-1;b.removeClass(this.options.selectedClass);h(b[this.active]).addClass(this.options.selectedClass)};k.selectCurrent=function(){var a=h("li."+this.options.selectedClass,this.results)[0];if(a){this.selectItem(a);return true}else{if(this.options.mustMatch&&this.loadFromCache(this.$text_input.val().toLowerCase()).length==0)this.options.additional_fields.each(function(i,p){h(p).val('')});return false}};k.selectItem=function(c,d){var e=this;if(!c){c=document.createElement("li");c.values=[]}var g=h.trim(c.values[0]||c.innerHTML);this.text_input.lS=h.trim(c.values[0]||c.innerHTML);this.previous_value=g;this.$results.html("");this.options.additional_fields.each(function(a,b){h(b).val(c.values[a])});if(!d)this.hideResultsNow();if(this.options.onItemSelect)setTimeout(function(){e.options.onItemSelect(c)},1)};k.showResults=function(){var a=l(this.text_input),b=(this.options.width>0)?this.options.width:this.$text_input.width();this.$results.css({width:parseInt(b)+"px",top:(a.y+this.text_input.offsetHeight)+"px",left:a.x+"px"}).show()};function l(a){var b=a.offsetLeft||0,c=a.offsetTop||0;while(a=a.offsetParent){b+=a.offsetLeft;c+=a.offsetTop}return{x:b,y:c}}k.hideResults=function(){var a=this;if(a.timeout)clearTimeout(a.timeout);a.timeout=setTimeout(function(){a.hideResultsNow()},200)};k.hideResultsNow=function(){var a=this;if(a.timeout)clearTimeout(a.timeout);a.$text_input.removeClass(a.options.loadingClass);if(a.$results.is(":visible"))a.$results.hide();if(a.options.mustMatch&&a.$text_input.val()!=a.text_input.lS)a.selectItem(null,true)};k.onChange=function(){if(this.last_keyCode==46||(this.last_keyCode>8&&this.last_keyCode<32))return this.$results.hide();var a=this.$text_input.val();if(a==this.previous_value)return;this.previous_value=a;if(a.length>=this.options.minChars){this.$text_input.addClass(this.options.loadingClass);this.populater.populate(a)}else{if((this.options.onBlank&&this.options.onBlank())||true)this.options.additional_fields.each(function(i,input){h(input).val('')});this.$text_input.removeClass(this.options.loadingClass);this.$results.hide()}};k.autoFill=function(a){if(this.last_keyCode!=8){this.$text_input.val(this.$text_input.val()+a.substring(this.previous_value.length));n(this,this.previous_value.length,a.length)}};function n(a,b,c){var d=h(a.text_input).get(0);if(d.createTextRange){var e=d.createTextRange();e.collapse(true);e.moveStart("character",b);e.moveEnd("character",c);e.select()}else if(d.setSelectionRange)d.setSelectionRange(b,c);else if(d.selectionStart){d.selectionStart=b;d.selectionEnd=c}d.focus()}k.populater=function(a){if(a=='ajax')return new t(this);if(a=='data')return new u(this)};k.populate_list=function(a,b){if(b){this.$text_input.removeClass(this.options.loadingClass);this.results.innerHTML="";if(!this.hasFocus||b.length==0)return this.hideResultsNow();this.results.appendChild(f(b,this));if(this.options.autoFill&&(this.$text_input.val().toLowerCase()==a.toLowerCase()))this.autoFill(b[0][0]);this.showResults();if(this.options.autoSelectFirst||(this.options.selectOnly&&b.length==1))this.moveSelect(0)}else this.hideResultsNow()};function f(b,c){var d=document.createElement("ul"),e=b.length;if((c.options.maxItemsToShow>0)&&(c.options.maxItemsToShow<e))e=c.options.maxItemsToShow;for(var g=0;g<e;g++){var j=b[g];if(!j)continue;var m=document.createElement("li");m.innerHTML=c.options.formatItem?c.options.formatItem(j,g,e):j[0];var q=[];for(var r=0;r<j.length;r++){q[q.length]=j[r]}m.values=q;d.appendChild(m);h(m).hover(function(){h("li",d).removeClass(c.options.selectedClass);h(this).addClass(c.options.selectedClass);c.active=h("li",d).indexOf(h(this).get(0))},function(){h(this).removeClass(c.options.selectedClass)}).click(function(a){a.preventDefault();a.stopPropagation();c.selectItem(this)})}return d}}function v(b,c){var d=this;d.text_input=b;d.options=c;b.quickselector=d;var e=h(b).attr("quickselect","off");d.$text_input=e;if(c.inputClass)e.addClass(c.inputClass);var g=document.createElement("div");d.results=g;var j=h(g);d.$results=j;j.hide().addClass(c.resultsClass).css("position","absolute");if(c.width>0)j.css("width",c.width);h("body").append(g);d.fC();d.active=-1;d.previous_value='';d.timeout=null;d.last_keyCode=null;e.keydown(function(a){d.last_keyCode=a.keyCode;switch(a.keyCode){case 38:a.preventDefault();d.moveSelect(-1);break;case 40:a.preventDefault();d.moveSelect(1);break;case 13:if(d.selectCurrent()){a.preventDefault();e.get(0).select()}break;case 9:d.selectCurrent();default:d.active=0;if(d.timeout)clearTimeout(d.timeout);d.timeout=setTimeout(function(){d.onChange()},c.delay);break}}).focus(function(){d.hasFocus=true}).blur(function(){d.selectCurrent();d.hasFocus=false;d.hideResults()});d.ccL=1;d.populater=d.populater(c.url?'ajax':'data');d.hideResultsNow()}v.prototype=new w();h.fn.quickselect=function(f){f=f||{};f.url=f.url||f.ajax;f.extraParams=f.extraParams||{};f.data=((typeof f.data=="object")&&(f.data.constructor==Array))?f.data:null;f.minChars=f.minChars||1;f.inputClass=f.inputClass||"auto_select_input";f.loadingClass=f.loadingClass||"auto_select_loading";f.resultsClass=f.resultsClass||"auto_select_results";f.selectedClass=f.selectedClass||"auto_select_selected";f.match=f.match||((typeof''.score=='function')&&'l'.score('l')==1?'quicksilver':'substring');f.matchContains=f.matchContains||false;f.autoSelectFirst=f.autoSelectFirst||true;f.selectOnly=f.selectOnly||true;f.maxItemsToShow=f.maxItemsToShow||-1;f.autoFill=f.autoFill||false;if(f.match=='quicksilver')f.autoFill=false;f.width=parseInt(f.width,10)||0;this.each(function(){var c=this,d=function(){};d.prototype=f;var e=new d();if(c.tagName=='INPUT'){e.delay=e.delay||400;e.matchCase=e.matchCase||false;e.mustMatch=e.mustMatch||false;e.additional_fields=h(c).add(e.additional_fields);new v(c,e)}else if(c.tagName=='SELECT'){e.delay=e.delay||10;e.matchCase=e.matchCase||false;e.mustMatch=e.mustMatch||true;var g=h(c);e.data=[];g.find('option').each(function(a,b){e.data[a]=[b.innerHTML,b.value]});var j=g[0].name,m=g[0].id,q=g[0].className,r=g.attr('accesskey'),k=g.attr('tabindex'),o=g.find("option:selected")[0],l=document.createElement("input");l.type='text';l.className=q;l.id=m+'_0';h(l).attr('accesskey',r);h(l).attr('tabindex',k);if(o)l.value=o.innerHTML;var n=document.createElement("input");n.type='hidden';n.id=m;n.name=g[0].name;if(o)n.value=o.value;e.additional_fields=h(n);g.after(l).after(n).remove();h(l).quickselect(e)}})}})(jQuery);

