(function($){
$.fn.extend({autocomplete:function(_1,_2){
var _3=typeof _1=="string";
_2=$.extend({},$.Autocompleter.defaults,{url:_3?_1:null,data:_3?null:_1,delay:_3?$.Autocompleter.defaults.delay:10,max:_2&&!_2.scroll?10:150},_2);
_2.highlight=_2.highlight||function(_4){
return _4;
};
_2.formatMatch=_2.formatMatch||_2.formatItem;
return this.each(function(){
new $.Autocompleter(this,_2);
});
},result:function(_5){
return this.bind("result",_5);
},search:function(_6){
return this.trigger("search",[_6]);
},flushCache:function(){
return this.trigger("flushCache");
},setOptions:function(_7){
return this.trigger("setOptions",[_7]);
},unautocomplete:function(){
return this.trigger("unautocomplete");
}});
$.Autocompleter=function(_8,_9){
var _a={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8};
var _b=$(_8).attr("autocomplete","off").addClass(_9.inputClass);
var _c;
var _d="";
var _e=$.Autocompleter.Cache(_9);
var _f=0;
var _10;
var _11={mouseDownOnSelect:false};
var _12=$.Autocompleter.Select(_9,_8,_13,_11);
var _14;
$.browser.opera&&$(_8.form).bind("submit.autocomplete",function(){
if(_14){
_14=false;
return false;
}
});
_b.bind(($.browser.opera?"keypress":"keydown")+".autocomplete",function(_15){
_10=_15.keyCode;
switch(_15.keyCode){
case _a.UP:
_15.preventDefault();
if(_12.visible()){
_12.prev();
}else{
_16(0,true);
}
break;
case _a.DOWN:
_15.preventDefault();
if(_12.visible()){
_12.next();
}else{
_16(0,true);
}
break;
case _a.PAGEUP:
_15.preventDefault();
if(_12.visible()){
_12.pageUp();
}else{
_16(0,true);
}
break;
case _a.PAGEDOWN:
_15.preventDefault();
if(_12.visible()){
_12.pageDown();
}else{
_16(0,true);
}
break;
case _9.multiple&&$.trim(_9.multipleSeparator)==","&&_a.COMMA:
case _a.TAB:
case _a.RETURN:
if(_13()){
_15.preventDefault();
_14=true;
return false;
}
break;
case _a.ESC:
_12.hide();
break;
default:
clearTimeout(_c);
_c=setTimeout(_16,_9.delay);
break;
}
}).focus(function(){
_f++;
}).blur(function(){
_f=0;
if(!_11.mouseDownOnSelect){
_17();
}
}).click(function(){
if(_f++>1&&!_12.visible()){
_16(0,true);
}
}).bind("search",function(){
var fn=(arguments.length>1)?arguments[1]:null;
function _18(q,_19){
var _1a;
if(_19&&_19.length){
for(var i=0;i<_19.length;i++){
if(_19[i].result.toLowerCase()==q.toLowerCase()){
_1a=_19[i];
break;
}
}
}
if(typeof fn=="function"){
fn(_1a);
}else{
_b.trigger("result",_1a&&[_1a.data,_1a.value]);
}
};
$.each(_1f(_b.val()),function(i,_1b){
_1c(_1b,_18,_18);
});
}).bind("flushCache",function(){
_e.flush();
}).bind("setOptions",function(){
$.extend(_9,arguments[1]);
if("data" in arguments[1]){
_e.populate();
}
}).bind("unautocomplete",function(){
_12.unbind();
_b.unbind();
$(_8.form).unbind(".autocomplete");
});
function _13(){
var _1d=_12.selected();
if(!_1d){
return false;
}
var v=_1d.result;
_d=v;
if(_9.multiple){
var _1e=_1f(_b.val());
if(_1e.length>1){
v=_1e.slice(0,_1e.length-1).join(_9.multipleSeparator)+_9.multipleSeparator+v;
}
v+=_9.multipleSeparator;
}
_b.val(v);
_20();
_b.trigger("result",[_1d.data,_1d.value]);
return true;
};
function _16(_21,_22){
if(_10==_a.DEL){
_12.hide();
return;
}
var _23=_b.val();
if(!_22&&_23==_d){
return;
}
_d=_23;
_23=_24(_23);
if(_23.length>=_9.minChars){
_b.addClass(_9.loadingClass);
if(!_9.matchCase){
_23=_23.toLowerCase();
}
_1c(_23,_25,_20);
}else{
_26();
_12.hide();
}
};
function _1f(_27){
if(!_27){
return [""];
}
var _28=_27.split(_9.multipleSeparator);
var _29=[];
$.each(_28,function(i,_2a){
if($.trim(_2a)){
_29[i]=$.trim(_2a);
}
});
return _29;
};
function _24(_2b){
if(!_9.multiple){
return _2b;
}
var _2c=_1f(_2b);
return _2c[_2c.length-1];
};
function _2d(q,_2e){
if(_9.autoFill&&(_24(_b.val()).toLowerCase()==q.toLowerCase())&&_10!=_a.BACKSPACE){
_b.val(_b.val()+_2e.substring(_24(_d).length));
$.Autocompleter.Selection(_8,_d.length,_d.length+_2e.length);
}
};
function _17(){
clearTimeout(_c);
_c=setTimeout(_20,200);
};
function _20(){
var _2f=_12.visible();
_12.hide();
clearTimeout(_c);
_26();
if(_9.mustMatch){
_b.search(function(_30){
if(!_30){
if(_9.multiple){
var _31=_1f(_b.val()).slice(0,-1);
_b.val(_31.join(_9.multipleSeparator)+(_31.length?_9.multipleSeparator:""));
}else{
_b.val("");
}
}
});
}
if(_2f){
$.Autocompleter.Selection(_8,_8.value.length,_8.value.length);
}
};
function _25(q,_32){
if(_32&&_32.length&&_f){
_26();
_12.display(_32,q);
_2d(q,_32[0].value);
_12.show();
}else{
_20();
}
};
function _1c(_33,_34,_35){
if(!_9.matchCase){
_33=_33.toLowerCase();
}
var _36=_e.load(_33);
if(_36&&_36.length){
_34(_33,_36);
}else{
if((typeof _9.url=="string")&&(_9.url.length>0)){
var _37={timestamp:+new Date()};
$.each(_9.extraParams,function(key,_38){
_37[key]=typeof _38=="function"?_38():_38;
});
$.ajax({mode:"abort",port:"autocomplete"+_8.name,dataType:_9.dataType,url:_9.url,data:$.extend({q:_24(_33),limit:_9.max},_37),success:function(_39){
var _3a=_9.parse&&_9.parse(_39)||_3b(_39);
_e.add(_33,_3a);
_34(_33,_3a);
}});
}else{
_12.emptyList();
_35(_33);
}
}
};
function _3b(_3c){
var _3d=[];
var _3e=_3c.split("\n");
for(var i=0;i<_3e.length;i++){
var row=$.trim(_3e[i]);
if(row){
row=row.split("|");
_3d[_3d.length]={data:row,value:row[0],result:_9.formatResult&&_9.formatResult(row,row[0])||row[0]};
}
}
return _3d;
};
function _26(){
_b.removeClass(_9.loadingClass);
};
};
$.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(row){
return row[0];
},formatMatch:null,autoFill:false,width:0,multiple:false,multipleSeparator:", ",highlight:function(_3f,_40){
return _3f.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+_40.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>");
},scroll:true,scrollHeight:180};
$.Autocompleter.Cache=function(_41){
var _42={};
var _43=0;
function _44(s,sub){
if(!_41.matchCase){
s=s.toLowerCase();
}
var i=s.indexOf(sub);
if(i==-1){
return false;
}
return i==0||_41.matchContains;
};
function add(q,_45){
if(_43>_41.cacheLength){
_46();
}
if(!_42[q]){
_43++;
}
_42[q]=_45;
};
function _47(){
if(!_41.data){
return false;
}
var _48={},_49=0;
if(!_41.url){
_41.cacheLength=1;
}
_48[""]=[];
for(var i=0,ol=_41.data.length;i<ol;i++){
var _4a=_41.data[i];
_4a=(typeof _4a=="string")?[_4a]:_4a;
var _4b=_41.formatMatch(_4a,i+1,_41.data.length);
if(_4b===false){
continue;
}
var _4c=_4b.charAt(0).toLowerCase();
if(!_48[_4c]){
_48[_4c]=[];
}
var row={value:_4b,data:_4a,result:_41.formatResult&&_41.formatResult(_4a)||_4b};
_48[_4c].push(row);
if(_49++<_41.max){
_48[""].push(row);
}
}
$.each(_48,function(i,_4d){
_41.cacheLength++;
add(i,_4d);
});
};
setTimeout(_47,25);
function _46(){
_42={};
_43=0;
};
return {flush:_46,add:add,populate:_47,load:function(q){
if(!_41.cacheLength||!_43){
return null;
}
if(!_41.url&&_41.matchContains){
var _4e=[];
for(var k in _42){
if(k.length>0){
var c=_42[k];
$.each(c,function(i,x){
if(_44(x.value,q)){
_4e.push(x);
}
});
}
}
return _4e;
}else{
if(_42[q]){
return _42[q];
}else{
if(_41.matchSubset){
for(var i=q.length-1;i>=_41.minChars;i--){
var c=_42[q.substr(0,i)];
if(c){
var _4e=[];
$.each(c,function(i,x){
if(_44(x.value,q)){
_4e[_4e.length]=x;
}
});
return _4e;
}
}
}
}
}
return null;
}};
};
$.Autocompleter.Select=function(_4f,_50,_51,_52){
var _53={ACTIVE:"ac_over"};
var _54,_55=-1,_56,_57="",_58=true,_59,_5a;
function _5b(){
if(!_58){
return;
}
_59=$("<div/>").hide().addClass(_4f.resultsClass).css("position","absolute").appendTo(document.body);
_5a=$("<ul/>").appendTo(_59).mouseover(function(_5c){
if(_5e(_5c).nodeName&&_5e(_5c).nodeName.toUpperCase()=="LI"){
_55=$("li",_5a).removeClass(_53.ACTIVE).index(_5e(_5c));
$(_5e(_5c)).addClass(_53.ACTIVE);
}
}).click(function(_5d){
$(_5e(_5d)).addClass(_53.ACTIVE);
_51();
_50.focus();
return false;
}).mousedown(function(){
_52.mouseDownOnSelect=true;
}).mouseup(function(){
_52.mouseDownOnSelect=false;
});
if(_4f.width>0){
_59.css("width",_4f.width);
}
_58=false;
};
function _5e(_5f){
var _60=_5f.target;
while(_60&&_60.tagName!="LI"){
_60=_60.parentNode;
}
if(!_60){
return [];
}
return _60;
};
function _61(_62){
_54.slice(_55,_55+1).removeClass(_53.ACTIVE);
_63(_62);
var _64=_54.slice(_55,_55+1).addClass(_53.ACTIVE);
if(_4f.scroll){
var _65=0;
_54.slice(0,_55).each(function(){
_65+=this.offsetHeight;
});
if((_65+_64[0].offsetHeight-_5a.scrollTop())>_5a[0].clientHeight){
_5a.scrollTop(_65+_64[0].offsetHeight-_5a.innerHeight());
}else{
if(_65<_5a.scrollTop()){
_5a.scrollTop(_65);
}
}
}
};
function _63(_66){
_55+=_66;
if(_55<0){
_55=_54.size()-1;
}else{
if(_55>=_54.size()){
_55=0;
}
}
};
function _67(_68){
return _4f.max&&_4f.max<_68?_4f.max:_68;
};
function _69(){
_5a.empty();
var max=_67(_56.length);
for(var i=0;i<max;i++){
if(!_56[i]){
continue;
}
var _6a=_4f.formatItem(_56[i].data,i+1,max,_56[i].value,_57);
if(_6a===false){
continue;
}
var li=$("<li/>").html(_4f.highlight(_6a,_57)).addClass(i%2==0?"ac_even":"ac_odd").appendTo(_5a)[0];
$.data(li,"ac_data",_56[i]);
}
_54=_5a.find("li");
if(_4f.selectFirst){
_54.slice(0,1).addClass(_53.ACTIVE);
_55=0;
}
if($.fn.bgiframe){
_5a.bgiframe();
}
};
return {display:function(d,q){
_5b();
_56=d;
_57=q;
_69();
},next:function(){
_61(1);
},prev:function(){
_61(-1);
},pageUp:function(){
if(_55!=0&&_55-8<0){
_61(-_55);
}else{
_61(-8);
}
},pageDown:function(){
if(_55!=_54.size()-1&&_55+8>_54.size()){
_61(_54.size()-1-_55);
}else{
_61(8);
}
},hide:function(){
_59&&_59.hide();
_54&&_54.removeClass(_53.ACTIVE);
_55=-1;
},visible:function(){
return _59&&_59.is(":visible");
},current:function(){
return this.visible()&&(_54.filter("."+_53.ACTIVE)[0]||_4f.selectFirst&&_54[0]);
},show:function(){
var _6b=$(_50).offset();
_59.css({width:typeof _4f.width=="string"||_4f.width>0?_4f.width:$(_50).width(),top:_6b.top+_50.offsetHeight,left:_6b.left}).show();
if(_4f.scroll){
_5a.scrollTop(0);
_5a.css({maxHeight:_4f.scrollHeight,overflow:"auto"});
if($.browser.msie&&typeof document.body.style.maxHeight==="undefined"){
var _6c=0;
_54.each(function(){
_6c+=this.offsetHeight;
});
var _6d=_6c>_4f.scrollHeight;
_5a.css("height",_6d?_4f.scrollHeight:_6c);
if(!_6d){
_54.width(_5a.width()-parseInt(_54.css("padding-left"))-parseInt(_54.css("padding-right")));
}
}
}
},selected:function(){
var _6e=_54&&_54.filter("."+_53.ACTIVE).removeClass(_53.ACTIVE);
return _6e&&_6e.length&&$.data(_6e[0],"ac_data");
},emptyList:function(){
_5a&&_5a.empty();
},unbind:function(){
_59&&_59.remove();
}};
};
$.Autocompleter.Selection=function(_6f,_70,end){
if(_6f.createTextRange){
var _71=_6f.createTextRange();
_71.collapse(true);
_71.moveStart("character",_70);
_71.moveEnd("character",end);
_71.select();
}else{
if(_6f.setSelectionRange){
_6f.setSelectionRange(_70,end);
}else{
if(_6f.selectionStart){
_6f.selectionStart=_70;
_6f.selectionEnd=end;
}
}
}
_6f.focus();
};
})(jQuery);

