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