(function(a){a.fn.extend({autocomplete:function(c,e){var d=typeof c=="string";e=a.extend({},a.Autocompleter.defaults,{url:d?c:null,data:d?null:c,delay:d?a.Autocompleter.defaults.delay:10,max:e&&!e.scroll?10:150},e);var b=typeof e.highlight;e.highlight=e.highlight||function(f){return f;};e.formatMatch=e.formatMatch||e.formatItem;return this.each(function(){new a.Autocompleter(this,e);});},result:function(b){return this.bind("result",b);},search:function(b){return this.trigger("search",[b]);},flushCache:function(){return this.trigger("flushCache");},setOptions:function(b){return this.trigger("setOptions",[b]);},unautocomplete:function(){return this.trigger("unautocomplete");},hideautocomplete:function(){return this.trigger("hide");},cancelRequest:function(){return this.trigger("cancelRequest");}});a.Autocompleter=function(w,t){var v={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8};var n=a(w).attr("autocomplete","off").addClass(t.inputClass);var q;var k="";var b=a.Autocompleter.Cache(t);var o=0;var g;var u=false;var p={mouseDownOnSelect:false};var s=a.Autocompleter.Select(t,w,m,p);var l;a.browser.opera&&a(w.form).bind("submit.autocomplete",function(){if(l){l=false;return false;}});n.bind((a.browser.opera?"keypress":"keydown")+".autocomplete",function(A){u=false;o=1;g=A.keyCode;switch(A.keyCode){case v.UP:A.preventDefault();if(s.visible()){s.prev();}else{f(0,true);}break;case v.DOWN:A.preventDefault();if(s.visible()){s.next();}else{f(0,true);}break;case v.PAGEUP:A.preventDefault();if(s.visible()){s.pageUp();}else{f(0,true);}break;case v.PAGEDOWN:A.preventDefault();if(s.visible()){s.pageDown();}else{f(0,true);}break;case t.multiple&&a.trim(t.multipleSeparator)==","&&v.COMMA:case v.TAB:case v.RETURN:if(m()){A.preventDefault();l=true;return false;}break;case v.ESC:s.hide();break;default:clearTimeout(q);q=setTimeout(f,t.delay);break;}}).focus(function(){u=false;o++;if(t.showOnFocusInput&&!s.visible()){f(0,true);}}).blur(function(){o=0;if(!p.mouseDownOnSelect){e();}}).click(function(){u=false;if(o++>1&&!s.visible()){f(0,true);}}).bind("search",function(){var A=(arguments.length>1)?arguments[1]:null;function B(C,D){var E;if(D&&D.length){for(var F=0;F<D.length;F++){if(D[F].result.toLowerCase()==C.toLowerCase()){E=D[F];break;}}}if(typeof A=="function"){A(E);}else{n.trigger("result",E&&[E.data,E.value]);}}a.each(i(n.val()),function(C,D){r(D,B,B);});}).bind("flushCache",function(){b.flush();}).bind("setOptions",function(){a.extend(t,arguments[1]);if("data" in arguments[1]){b.populate();}}).bind("unautocomplete",function(){s.unbind();n.unbind();a(w.form).unbind(".autocomplete");}).bind("hide",function(){s.hide();}).bind("cancelRequest",function(){y();});function m(){var C=s.selected();if(!C){return false;}var G=C.result;k=G;if(t.multiple){var D=i(n.val());if(D.length>1){var F=t.multipleSeparator.length;var E=a(w).selection().start;var A,B=0;a.each(D,function(H,I){B+=I.length;if(E<=B){A=H;return false;}B+=F;});D[A]=G;G=D.join(t.multipleSeparator);}G+=t.multipleSeparator;}n.val(G);x();n.trigger("result",[C.data,C.value]);return true;}function f(A,C){if(g==v.DEL){s.hide();return;}var B=n.val();if(!C&&B==k){return;}k=B;B=d(B);if(B.length>=t.minChars){n.addClass(t.loadingClass);if(!t.matchCase){B=B.toLowerCase();}r(B,j,x);}else{h();s.hide();}}function i(A){if(!A){return[""];}if(!t.multiple){return[a.trim(A)];}return a.map(A.split(t.multipleSeparator),function(B){return a.trim(A).length?a.trim(B):null;});}function d(A){if(!t.multiple){return A;}var B=i(A);if(B.length==1){return B[0];}var C=a(w).selection().start;if(C==A.length){B=i(A);}else{B=i(A.replace(A.substring(C),""));}return B[B.length-1];}function z(B,A){if(t.autoFill&&(d(n.val()).toLowerCase()==B.toLowerCase())&&g!=v.BACKSPACE){n.val(n.val()+A.substring(d(k).length));a(w).selection(k.length,k.length+A.length);}}function e(){clearTimeout(q);q=setTimeout(x,200);}function x(){var A=s.visible();s.hide();clearTimeout(q);h();if(t.mustMatch){n.search(function(B){if(!B){if(t.multiple){var C=i(n.val()).slice(0,-1);n.val(C.join(t.multipleSeparator)+(C.length?t.multipleSeparator:""));}else{n.val("");n.trigger("result",null);}}});}}function j(B,A){if(!u&&A&&A.length&&o){h();s.display(A,B);z(B,A[0].result);s.show();}else{x();}}function r(D,E,G){if(!t.matchCase){D=D.toLowerCase();}var A=b.load(D);if(A&&A.length){E(D,A);}else{if((typeof t.url=="string")&&(t.url.length>0)){var C=t.url.indexOf("/")>-1;var F={timestamp:+new Date()};F=a.extend({q:d(D),limit:t.max},F);if(C){var B="GET";a.each(t.extraParams,function(H,I){F[H]=typeof I=="function"?I():I;});if(t.requestType=="POST"){F=IwAG.Base.serialize(F);B=t.requestType;}a.ajax({mode:"abort",port:"autocomplete"+w.name,type:B,contentType:t.contentType,dataType:t.dataType,url:t.url,data:F,success:function(H){var I=t.parse&&t.parse(H)||c(H);b.add(D,I);E(D,I);}});}else{window[t.url](function(H){var I=t.parse&&t.parse(H)||c(H);b.add(D,I);E(D,I);},F.q,F.limit);}}else{s.emptyList();G(D);}}}function c(B){var D=[];var E=B.split("\n");for(var C=0;C<E.length;C++){var A=a.trim(E[C]);if(A){A=A.split("|");D[D.length]={data:A,value:A[0],result:t.formatResult&&t.formatResult(A,A[0])||A[0]};}}return D;}function h(){n.removeClass(t.loadingClass);}function y(){u=true;}};a.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(b){return b[0];},formatMatch:null,autoFill:false,showOnFocusInput:false,focusInputOnHide:true,width:0,multiple:false,multipleSeparator:", ",highlight:function(c,b){return c.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+b.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/i,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","i"),"<strong>$1</strong>");},scroll:true,scrollHeight:180,fixedPosition:false};a.Autocompleter.Cache=function(c){var b={};var g=0;function d(k,l){if(!c.matchCase){k=k.toLowerCase();}var j=k.indexOf(l);if(c.matchContains=="word"){j=k.toLowerCase().search("\\b"+l.toLowerCase());}if(j==-1){return false;}return j==0||c.matchContains;}function f(j,i){if(g>c.cacheLength){h();}if(!b[j]){g++;}b[j]=i;}function e(){if(!c.data){return false;}var o={},p=0;if(!c.url){c.cacheLength=1;}o[""]=[];for(var k=0,n=c.data.length;k<n;k++){var l=c.data[k];l=(typeof l=="string")?[l]:l;var j=c.formatMatch(l,k+1,c.data.length);if(j===false){continue;}var m=j.charAt(0).toLowerCase();if(!o[m]){o[m]=[];}var q={value:j,data:l,result:c.formatResult&&c.formatResult(l)||j};o[m].push(q);if(p++<c.max){o[""].push(q);}}a.each(o,function(r,s){c.cacheLength++;f(r,s);});}setTimeout(e,25);function h(){b={};g=0;}return{flush:h,add:f,populate:e,load:function(j){if(!c.cacheLength||!g){return null;}if(!c.url&&c.matchContains){var o=[];for(var m in b){if(m.length>0){var n=b[m];a.each(n,function(k,p){if(d(p.value,j)){o.push(p);}});}}return o;}else{if(b[j]){return b[j];}else{if(c.matchSubset){for(var l=j.length-1;l>=c.minChars;l--){var n=b[j.substr(0,l)];if(n){var o=[];a.each(n,function(k,p){if(d(p.value,j)){o[o.length]=p;}});return o;}}}}}return null;}};};a.Autocompleter.Select=function(p,q,o,l){var e={ACTIVE:"ac_over"};var i,k=-1,b,g="",m=true,f,n;function j(){if(!m){return;}f=a("<div/>").hide().addClass(p.resultsClass).css("position",p.fixedPosition?"fixed":"absolute").appendTo(document.body);n=a("<ul/>").appendTo(f).mouseover(function(t){if(r(t).nodeName&&r(t).nodeName.toUpperCase()=="LI"){k=a("li",n).removeClass(e.ACTIVE).index(r(t));a(r(t)).addClass(e.ACTIVE);}}).click(function(t){a(r(t)).addClass(e.ACTIVE);o();q.focus();return false;}).mousedown(function(){l.mouseDownOnSelect=true;}).mouseup(function(){l.mouseDownOnSelect=false;});if(p.width>0){f.css("width",p.width);}m=false;}function r(u){var t=u.target;while(t&&t.tagName!="LI"){t=t.parentNode;}if(!t){return[];}return t;}function d(u){i.slice(k,k+1).removeClass(e.ACTIVE);c(u);var t=i.slice(k,k+1).addClass(e.ACTIVE);if(p.scroll){var v=0;i.slice(0,k).each(function(){v+=this.offsetHeight;});if((v+t[0].offsetHeight-n.scrollTop())>n[0].clientHeight){n.scrollTop(v+t[0].offsetHeight-n.innerHeight());}else{if(v<n.scrollTop()){n.scrollTop(v);}}}}function c(t){k+=t;if(k<0){k=i.size()-1;}else{if(k>=i.size()){k=0;}}}function s(t){return p.max&&p.max<t?p.max:t;}function h(){n.empty();var w=s(b.length);for(var t=0;t<w;t++){if(!b[t]){continue;}var u=p.formatItem(b[t].data,t+1,w,b[t].value,g);if(u===false){continue;}var v=a("<li/>").html(p.highlight(u,g)).addClass(t%2==0?"ac_even":"ac_odd").appendTo(n)[0];a.data(v,"ac_data",b[t]);}i=n.find("li");if(p.selectFirst){i.slice(0,1).addClass(e.ACTIVE);k=0;}if(a.fn.bgiframe){n.bgiframe();}}return{display:function(t,u){j();b=t;g=u;h();},next:function(){d(1);},prev:function(){d(-1);},pageUp:function(){if(k!=0&&k-8<0){d(-k);}else{d(-8);}},pageDown:function(){if(k!=i.size()-1&&k+8>i.size()){d(i.size()-1-k);}else{d(8);}},hide:function(){f&&f.hide();i&&i.removeClass(e.ACTIVE);k=-1;if(a.browser.msie&&a.browser.version=="6.0"){a("select").show();}},visible:function(){return f&&f.is(":visible");},current:function(){return this.visible()&&(i.filter("."+e.ACTIVE)[0]||p.selectFirst&&i[0]);},show:function(){if(a.browser.msie&&a.browser.version=="6.0"){a("select").hide();}var v=a(q).offset();f.css({width:typeof p.width=="string"||p.width>0?p.width:a(q).width(),top:v.top+q.offsetHeight,left:v.left}).show();if(p.scroll){n.scrollTop(0);n.css({maxHeight:p.scrollHeight,overflow:"auto"});if(a.browser.msie&&typeof document.body.style.maxHeight==="undefined"){var t=0;i.each(function(){t+=this.offsetHeight;});var u=t>p.scrollHeight;n.css("height",u?p.scrollHeight:t);if(!u){i.width(n.width()-parseInt(i.css("padding-left"))-parseInt(i.css("padding-right")));}}}},selected:function(){var t=i&&i.filter("."+e.ACTIVE).removeClass(e.ACTIVE);return t&&t.length&&a.data(t[0],"ac_data");},emptyList:function(){n&&n.empty();},unbind:function(){f&&f.remove();}};};a.fn.selection=function(d,b){if(d!==undefined){return this.each(function(){if(this.createTextRange){var j=this.createTextRange();if(b===undefined||d==b){j.move("character",d);j.select();}else{j.collapse(true);j.moveStart("character",d);j.moveEnd("character",b);j.select();}}else{if(this.setSelectionRange){this.setSelectionRange(d,b);}else{if(this.selectionStart){this.selectionStart=d;this.selectionEnd=b;}}}});}var f=this[0];if(f.createTextRange){var e=document.selection.createRange(),c=f.value,h="<->",g=e.text.length;e.text=h;var i=f.value.indexOf(h);f.value=c;this.selection(i,i+g);return{start:i,end:i+g};}else{if(f.selectionStart!==undefined){return{start:f.selectionStart,end:f.selectionEnd};}}};})(jQuery);
