$.fn.bgiframe=function(s){if($.browser.msie&&"Microsoft Internet Explorer"==navigator.appName&&/MSIE 6./.test(navigator.userAgent)){var prop=function(n){return n&&n.constructor==Number?n+"px":n},html='<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+(s=$.extend({top:"auto",left:"auto",width:"auto",height:"auto",opacity:!0,src:"javascript:false;"},s||{})).src+'"style="display:block;position:absolute;z-index:-1;'+(!1!==s.opacity?"filter:Alpha(Opacity='0');":"")+"top:"+("auto"==s.top?"expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+'px')":prop(s.top))+";left:"+("auto"==s.left?"expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+'px')":prop(s.left))+";width:"+("auto"==s.width?"expression(this.parentNode.offsetWidth+'px')":prop(s.width))+";height:"+("auto"==s.height?"expression(this.parentNode.offsetHeight+'px')":prop(s.height))+';"/>';return this.each((function(){0==$("> iframe.bgiframe",this).length&&this.insertBefore(document.createElement(html),this.firstChild)}))}return this},function($){$.fn.extend({autocomplete:function(urlOrData,options){var isUrl="string"==typeof urlOrData;return(options=$.extend({},$.Autocompleter.defaults,{url:isUrl?urlOrData:null,data:isUrl?null:urlOrData,delay:isUrl?$.Autocompleter.defaults.delay:10,max:options&&!options.scroll?10:150},options)).highlight=options.highlight||function(value){return value},options.formatMatch=options.formatMatch||options.formatItem,this.each((function(){new $.Autocompleter(this,options)}))},result:function(handler){return this.on("result",handler)},search:function(handler){return this.trigger("search",[handler])},flushCache:function(){return this.trigger("flushCache")},setOptions:function(options){return this.trigger("setOptions",[options])},unautocomplete:function(){return this.trigger("unautocomplete")}}),$.Autocompleter=function(input,options){var timeout,lastKeyPressCode,blockSubmit,KEY_UP=38,KEY_DOWN=40,KEY_DEL=46,KEY_TAB=9,KEY_RETURN=13,KEY_ESC=27,KEY_COMMA=188,KEY_PAGEUP=33,KEY_PAGEDOWN=34,KEY_BACKSPACE=8,$input=$(input).attr("autocomplete","off").addClass(options.inputClass),previousValue="",cache=$.Autocompleter.Cache(options),hasFocus=0,config={mouseDownOnSelect:!1},select=$.Autocompleter.Select(options,input,selectCurrent,config);function selectCurrent(){var selected=select.selected();if(!selected)return!1;var v=selected.result;if(previousValue=v,options.multiple){var words=trimWords($input.val());words.length>1&&(v=words.slice(0,words.length-1).join(options.multipleSeparator)+options.multipleSeparator+v),v+=options.multipleSeparator}return $input.val(v),hideResultsNow(),$input.trigger("result",[selected.data,selected.value]),!0}function onChange(crap,skipPrevCheck){if(lastKeyPressCode!=KEY_DEL){var currentValue=$input.val();(skipPrevCheck||currentValue!=previousValue)&&(previousValue=currentValue,(currentValue=lastWord(currentValue)).length>=options.minChars?($input.addClass(options.loadingClass),options.matchCase||(currentValue=currentValue.toLowerCase()),request(currentValue,receiveData,hideResultsNow)):(stopLoading(),select.hide()))}else select.hide()}function trimWords(value){if(!value)return[""];var words=value.split(options.multipleSeparator),result=[];return $.each(words,(function(i,value){$.trim(value)&&(result[i]=$.trim(value))})),result}function lastWord(value){if(!options.multiple)return value;var words=trimWords(value);return words[words.length-1]}function hideResultsNow(){var wasVisible=select.visible();select.hide(),clearTimeout(timeout),stopLoading(),options.mustMatch&&$input.search((function(result){if(!result)if(options.multiple){var words=trimWords($input.val()).slice(0,-1);$input.val(words.join(options.multipleSeparator)+(words.length?options.multipleSeparator:""))}else $input.val("")})),wasVisible&&$.Autocompleter.Selection(input,input.value.length,input.value.length)}function receiveData(q,data){data&&data.length&&hasFocus?(stopLoading(),select.display(data,q),function(q,sValue){options.autoFill&&lastWord($input.val()).toLowerCase()==q.toLowerCase()&&lastKeyPressCode!=KEY_BACKSPACE&&($input.val($input.val()+sValue.substring(lastWord(previousValue).length)),$.Autocompleter.Selection(input,previousValue.length,previousValue.length+sValue.length))}(q,data[0].value),select.show()):hideResultsNow()}function request(term,success,failure){options.matchCase||(term=term.toLowerCase());var data=cache.load(term);if(data&&data.length)success(term,data);else if("string"==typeof options.url&&options.url.length>0){var extraParams={timestamp:+new Date};$.each(options.extraParams,(function(key,param){extraParams[key]="function"==typeof param?param():param})),$.ajax({mode:"abort",port:"autocomplete"+input.name,dataType:options.dataType,url:options.url,data:$.extend({q:lastWord(term),limit:options.max},extraParams),success:function(data){var parsed=options.parse&&options.parse(data)||function(data){for(var parsed=[],rows=data.split("\n"),i=0;i<rows.length;i++){var row=$.trim(rows[i]);row&&(row=row.split("|"),parsed[parsed.length]={data:row,value:row[0],result:options.formatResult&&options.formatResult(row,row[0])||row[0]})}return parsed}(data);cache.add(term,parsed),success(term,parsed)}})}else select.emptyList(),failure(term)}function stopLoading(){$input.removeClass(options.loadingClass)}$.browser.opera&&$(input.form).on("submit.autocomplete",(function(){if(blockSubmit)return blockSubmit=!1,!1})),$input.on(($.browser.opera?"keypress":"keydown")+".autocomplete",(function(event){switch(lastKeyPressCode=event.keyCode,event.keyCode){case KEY_UP:event.preventDefault(),select.visible()?select.prev():onChange(0,!0);break;case KEY_DOWN:event.preventDefault(),select.visible()?select.next():onChange(0,!0);break;case KEY_PAGEUP:event.preventDefault(),select.visible()?select.pageUp():onChange(0,!0);break;case KEY_PAGEDOWN:event.preventDefault(),select.visible()?select.pageDown():onChange(0,!0);break;case options.multiple&&","===$.trim(options.multipleSeparator)&&KEY_COMMA:case KEY_TAB:case KEY_RETURN:if(selectCurrent())return event.preventDefault(),blockSubmit=!0,!1;break;case KEY_ESC:select.hide();break;default:clearTimeout(timeout),timeout=setTimeout(onChange,options.delay)}})).on("focus",(function(){hasFocus++})).on("blur",(function(){hasFocus=0,config.mouseDownOnSelect||(clearTimeout(timeout),timeout=setTimeout(hideResultsNow,200))})).on("click",(function(){hasFocus++>1&&!select.visible()&&onChange(0,!0)})).on("search",(function(){var fn=arguments.length>1?arguments[1]:null;function findValueCallback(q,data){var result;if(data&&data.length)for(var i=0;i<data.length;i++)if(data[i].result.toLowerCase()==q.toLowerCase()){result=data[i];break}"function"==typeof fn?fn(result):$input.trigger("result",result&&[result.data,result.value])}$.each(trimWords($input.val()),(function(i,value){request(value,findValueCallback,findValueCallback)}))})).on("flushCache",(function(){cache.flush()})).on("setOptions",(function(){$.extend(options,arguments[1]),"data"in arguments[1]&&cache.populate()})).on("unautocomplete",(function(){select.off(),$input.off(),$(input.form).off(".autocomplete")}))},$.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(row){return row[0]},formatMatch:null,autoFill:!1,width:0,multiple:!1,multipleSeparator:", ",highlight:function(value,term){return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>")},scroll:!0,scrollHeight:180},$.Autocompleter.Cache=function(options){var data={},length=0;function matchSubset(s,sub){options.matchCase||(s=s.toLowerCase());var i=s.indexOf(sub);return-1!=i&&(0==i||options.matchContains)}function add(q,value){length>options.cacheLength&&flush(),data[q]||length++,data[q]=value}function populate(){if(!options.data)return!1;var stMatchSets={},nullData=0;options.url||(options.cacheLength=1),stMatchSets[""]=[];for(var i=0,ol=options.data.length;i<ol;i++){var rawValue=options.data[i];rawValue="string"==typeof rawValue?[rawValue]:rawValue;var value=options.formatMatch(rawValue,i+1,options.data.length);if(!1!==value){var firstChar=value.charAt(0).toLowerCase();stMatchSets[firstChar]||(stMatchSets[firstChar]=[]);var row={value:value,data:rawValue,result:options.formatResult&&options.formatResult(rawValue)||value};stMatchSets[firstChar].push(row),nullData++<options.max&&stMatchSets[""].push(row)}}$.each(stMatchSets,(function(i,value){options.cacheLength++,add(i,value)}))}function flush(){data={},length=0}return setTimeout(populate,25),{flush:flush,add:add,populate:populate,load:function(q){if(!options.cacheLength||!length)return null;if(!options.url&&options.matchContains){var csub=[];for(var k in data)if(k.length>0){var c=data[k];$.each(c,(function(i,x){matchSubset(x.value,q)&&csub.push(x)}))}return csub}if(data[q])return data[q];if(options.matchSubset)for(var i=q.length-1;i>=options.minChars;i--){if(c=data[q.substr(0,i)]){csub=[];return $.each(c,(function(i,x){matchSubset(x.value,q)&&(csub[csub.length]=x)})),csub}}return null}}},$.Autocompleter.Select=function(options,input,select,config){var listItems,data,element,list,CLASSES_ACTIVE="ac_over",active=-1,term="",needsInit=!0;function target(event){for(var element=event.target;element&&"LI"!=element.tagName;)element=element.parentNode;return element||[]}function moveSelect(step){listItems.slice(active,active+1).removeClass(CLASSES_ACTIVE),function(step){(active+=step)<0?active=listItems.size()-1:active>=listItems.size()&&(active=0)}(step);var activeItem=listItems.slice(active,active+1).addClass(CLASSES_ACTIVE);if(options.scroll){var offset=0;listItems.slice(0,active).each((function(){offset+=this.offsetHeight})),offset+activeItem[0].offsetHeight-list.scrollTop()>list[0].clientHeight?list.scrollTop(offset+activeItem[0].offsetHeight-list.innerHeight()):offset<list.scrollTop()&&list.scrollTop(offset)}}function fillList(){list.empty();for(var available,max=(available=data.length,options.max&&options.max<available?options.max:available),i=0;i<max;i++)if(data[i]){var formatted=options.formatItem(data[i].data,i+1,max,data[i].value,term);if(!1!==formatted){var li=$("<li/>").html(options.highlight(formatted,term)).addClass(i%2==0?"ac_even":"ac_odd").appendTo(list)[0];$.data(li,"ac_data",data[i])}}listItems=list.find("li"),options.selectFirst&&(listItems.slice(0,1).addClass(CLASSES_ACTIVE),active=0),$.fn.bgiframe&&list.bgiframe()}return{display:function(d,q){needsInit&&(element=$("<div/>").hide().addClass(options.resultsClass).css("position","absolute").appendTo(document.body),list=$("<ul/>").appendTo(element).mouseover((function(event){target(event).nodeName&&"LI"==target(event).nodeName.toUpperCase()&&(active=$("li",list).removeClass(CLASSES_ACTIVE).index(target(event)),$(target(event)).addClass(CLASSES_ACTIVE))})).click((function(event){return $(target(event)).addClass(CLASSES_ACTIVE),select(),input.focus(),!1})).mousedown((function(){config.mouseDownOnSelect=!0})).mouseup((function(){config.mouseDownOnSelect=!1})),options.width>0&&element.css("width",options.width),needsInit=!1),data=d,term=q,fillList()},next:function(){moveSelect(1)},prev:function(){moveSelect(-1)},pageUp:function(){moveSelect(0!=active&&active-8<0?-active:-8)},pageDown:function(){active!=listItems.size()-1&&active+8>listItems.size()?moveSelect(listItems.size()-1-active):moveSelect(8)},hide:function(){element&&element.hide(),listItems&&listItems.removeClass(CLASSES_ACTIVE),active=-1},visible:function(){return element&&element.is(":visible")},current:function(){return this.visible()&&(listItems.filter("."+CLASSES_ACTIVE)[0]||options.selectFirst&&listItems[0])},show:function(){var offset=$(input).offset();if(element.css({width:"string"==typeof options.width||options.width>0?options.width:$(input).width(),top:offset.top+input.offsetHeight,left:offset.left}).show(),options.scroll&&(list.scrollTop(0),list.css({maxHeight:options.scrollHeight,overflow:"auto"}),$.browser.msie&&void 0===document.body.style.maxHeight)){var listHeight=0;listItems.each((function(){listHeight+=this.offsetHeight}));var scrollbarsVisible=listHeight>options.scrollHeight;list.css("height",scrollbarsVisible?options.scrollHeight:listHeight),scrollbarsVisible||listItems.width(list.width()-parseInt(listItems.css("padding-left"))-parseInt(listItems.css("padding-right")))}},selected:function(){var selected=listItems&&listItems.filter("."+CLASSES_ACTIVE).removeClass(CLASSES_ACTIVE);return selected&&selected.length&&$.data(selected[0],"ac_data")},emptyList:function(){list&&list.empty()},unbind:function(){element&&element.remove()}}},$.Autocompleter.Selection=function(field,start,end){if(field.createTextRange){var selRange=field.createTextRange();selRange.collapse(!0),selRange.moveStart("character",start),selRange.moveEnd("character",end),selRange.select()}else field.setSelectionRange?field.setSelectionRange(start,end):field.selectionStart&&(field.selectionStart=start,field.selectionEnd=end);field.focus()}}(jQuery);