if(typeof Effect=="undefined"){throw ("controls.js requires including script.aculo.us' effects.js library")}function IsSafari(){return(navigator.vendor&&(navigator.vendor.indexOf("Apple")>-1))}var Autocompleter={};Autocompleter.Base=Class.create({baseInitialize:function(C,B,D,A){C=$(C);this.element=C;this.key=B;this.update=$(D);this.hasFocus=false;this.changed=false;this.active=false;this.index=0;this.entryCount=0;this.scrollPrev=0;this.oldElementValue=this.element.value;if(this.setOptions){this.setOptions(A)}else{this.options=A||{}}this.options.paramName=this.options.paramName||this.element.name;this.options.defaultKey=this.options.defaultKey||"";this.options.tokens=this.options.tokens||[];this.options.frequency=this.options.frequency||0.4;this.options.minChars=this.options.minChars||1;this.options.onShow=this.options.onShow||function(E,F){if(!F.style.position||F.style.position=="absolute"){F.style.position="absolute";Position.clone(E,F,{setHeight:false,offsetTop:E.offsetHeight})}Effect.Appear(F,{duration:0.15})};this.options.onHide=this.options.onHide||function(E,F){new Effect.Fade(F,{duration:0.15})};Event.observe(window,"load",this.initImages.bind(this));if(typeof (this.options.tokens)=="string"){this.options.tokens=new Array(this.options.tokens)}if(!this.options.tokens.include("\n")){this.options.tokens.push("\n")}this.observer=null;this.element.setAttribute("autocomplete","off");Element.hide(this.update);Event.observe(this.element,"blur",this.onBlur.bindAsEventListener(this));Event.observe(this.update,"blur",this.onBlur.bindAsEventListener(this));Event.observe(this.element,"focus",this.onFocus.bindAsEventListener(this));Event.observe(this.update,"focus",this.onFocus.bindAsEventListener(this));Event.observe(this.element,"keydown",this.onKeyPress.bindAsEventListener(this))},initImages:function(){if(this.options.expander){var C=$(this.options.expander);C.style.position="absolute";Position.clone(this.element,C,{setHeight:false,setWidth:false,offsetLeft:this.element.offsetWidth-Element.getWidth(C)-1,offsetTop:1});Element.show(C)}if(this.options.shrinker){var B=$(this.options.shrinker);B.style.position="absolute";Position.clone(this.element,B,{setHeight:false,setWidth:false,offsetLeft:this.element.offsetWidth-Element.getWidth(B)-1,offsetTop:1})}if(this.options.indicator){var A=$(this.options.indicator);A.style.position="absolute";Position.clone(this.element,A,{setHeight:false,setWidth:false,offsetLeft:this.element.offsetWidth-Element.getWidth(A)-1,offsetTop:1})}},show:function(){if(Element.getStyle(this.update,"display")=="none"){this.options.onShow(this.element,this.update)}if(!this.iefix&&(Prototype.Browser.IE)&&(Element.getStyle(this.update,"position")=="absolute")){new Insertion.After(this.update,'<iframe id="'+this.update.id+'_iefix" style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" src="javascript:false;" frameborder="0" scrolling="no"></iframe>');this.iefix=$(this.update.id+"_iefix")}if(this.iefix){setTimeout(this.fixIEOverlapping.bind(this),50)}if(this.options.expander){Element.hide(this.options.expander)}if(this.options.shrinker){Element.show(this.options.shrinker)}},fixIEOverlapping:function(){Position.clone(this.update,this.iefix,{setTop:(!this.update.style.height)});this.iefix.style.zIndex=1;this.update.style.zIndex=2;Element.show(this.iefix)},hide:function(){this.stopIndicator();if(Element.getStyle(this.update,"display")!="none"){this.options.onHide(this.element,this.update)}if(this.iefix){Element.hide(this.iefix)}if(this.options.shrinker){Element.hide(this.options.shrinker)}if(this.options.expander){Element.show(this.options.expander)}},expand:function(){if(this.options.minChars>this.getToken().length){this.options.minChars=this.getToken().length}setTimeout(this.activate.bind(this),250)},startIndicator:function(){if(this.options.expander){Element.hide(this.options.expander)}if(this.options.shrinker){Element.hide(this.options.shrinker)}if(this.options.indicator){Element.show(this.options.indicator)}},stopIndicator:function(){if(this.options.indicator){Element.hide(this.options.indicator)}if(this.options.expander&&!this.active){Element.show(this.options.expander)}if(this.options.shrinker&&this.active){Element.show(this.options.shrinker)}},onKeyPress:function(B){var A=true;if(this.active){switch(B.keyCode){case Event.KEY_TAB:case Event.KEY_RETURN:this.selectEntry();Event.stop(B);A=false;case Event.KEY_ESC:this.hide();this.active=false;Event.stop(B);return ;case Event.KEY_LEFT:case Event.KEY_RIGHT:return ;case Event.KEY_UP:this.markPrevious();this.render();Event.stop(B);return ;case Event.KEY_DOWN:this.markNext();this.render();Event.stop(B);return }}else{if(B.keyCode==Event.KEY_TAB||B.keyCode==Event.KEY_RETURN||(Prototype.Browser.WebKit>0&&B.keyCode==0)){return }}if(B.keyCode==Event.KEY_SHIFT||B.keyCode==Event.KEY_CTRL||B.keyCode==Event.KEY_ALT){A=false}if(A&&this.key){$(this.key).value=this.options.defaultKey}this.changed=true;this.hasFocus=true;if(this.observer){clearTimeout(this.observer)}this.observer=setTimeout(this.onObserverEvent.bind(this),this.options.frequency*1000)},activate:function(){this.changed=false;this.hasFocus=true;this.element.focus();this.getUpdatedChoices()},onHover:function(B){var A=Event.findElement(B,"LI");if(this.index!=A.autocompleteIndex){this.index=A.autocompleteIndex;this.render()}Event.stop(B)},onClick:function(B){var A=Event.findElement(B,"LI");this.index=A.autocompleteIndex;this.selectEntry();this.hide()},onBlur:function(A){this.scrollPrev=this.update.scrollTop;setTimeout(this.hideIfNoFocus.bind(this),250);this.hasFocus=false;this.active=false},onFocus:function(A){this.hasFocus=true},hideIfNoFocus:function(){var A=!this.hasFocus&&(IsSafari()?(this.update.scrollTop==this.scrollPrev):true);if(A){this.hide()}},render:function(){if(this.entryCount>0){for(var A=0;A<this.entryCount;A++){this.index==A?Element.addClassName(this.getEntry(A),"selected"):Element.removeClassName(this.getEntry(A),"selected")}if(this.hasFocus){this.show();this.active=true}}else{this.active=false;this.hide()}},markPrevious:function(){if(this.index>0){this.index--}this.getEntry(this.index).scrollIntoView(false)},markNext:function(){if(this.index<this.entryCount-1){this.index++}this.getEntry(this.index).scrollIntoView(false)},getEntry:function(A){return this.update.firstChild.childNodes[A]},getCurrentEntry:function(){return this.getEntry(this.index)},selectEntry:function(){this.active=false;this.updateElement(this.getCurrentEntry())},updateElement:function(F){if(this.options.updateElement){this.options.updateElement(F);return }var D="";if(this.options.select){var A=$(F).select("."+this.options.select)||[];if(A.length>0){D=Element.collectTextNodes(A[0],this.options.select)}}else{D=Element.collectTextNodesIgnoreClass(F,"informal")}if(D==""){return }var C=this.getTokenBounds();if(C[0]!=-1){var E=this.element.value.substr(0,C[0]);var B=this.element.value.substr(C[0]).match(/^\s+/);if(B){E+=B[0]}this.element.value=E+D+this.element.value.substr(C[1])}else{this.element.value=D}this.oldElementValue=this.element.value;this.element.focus();if(this.key){$(this.key).value=Element.readAttribute(F,"matchid")}if(this.options.afterUpdateElement){this.options.afterUpdateElement(this.element,F)}},updateChoices:function(C){if(!this.changed&&this.hasFocus){this.update.innerHTML=C;Element.cleanWhitespace(this.update);Element.cleanWhitespace(this.update.down());if(this.update.firstChild&&this.update.down().childNodes){this.entryCount=this.update.down().childNodes.length;for(var A=0;A<this.entryCount;A++){var B=this.getEntry(A);B.autocompleteIndex=A;this.addObservers(B)}}else{this.entryCount=0}if(this.entryCount>this.options.maxResultsWithoutScroll){this.update.style.overflow="auto";this.update.style.height=(Element.getHeight(this.element)*this.options.maxResultsWithoutScroll)+"px"}else{this.update.style.height=""}this.stopIndicator();this.index=0;if(this.key&&Element.collectTextNodes(this.getCurrentEntry()).toLowerCase()==$(this.element).value.toLowerCase()){$(this.key).value=Element.readAttribute(this.getCurrentEntry(),"matchid")}if(this.entryCount==1&&this.options.autoSelect){this.selectEntry();this.hide()}else{this.render()}}},addObservers:function(A){Event.observe(A,"mouseover",this.onHover.bindAsEventListener(this));Event.observe(A,"click",this.onClick.bindAsEventListener(this))},onObserverEvent:function(){this.changed=false;this.tokenBounds=null;if(this.getToken().length>=this.options.minChars){this.getUpdatedChoices()}else{this.active=false;this.hide()}this.oldElementValue=this.element.value},getToken:function(){var A=this.getTokenBounds();return this.element.value.substring(A[0],A[1]).strip()},getTokenBounds:function(){if(null!=this.tokenBounds){return this.tokenBounds}var E=this.element.value;if(E.strip().empty()){return[-1,0]}var F=arguments.callee.getFirstDifferencePos(E,this.oldElementValue);var H=(F==this.oldElementValue.length?1:0);var D=-1,C=E.length;var G;for(var B=0,A=this.options.tokens.length;B<A;++B){G=E.lastIndexOf(this.options.tokens[B],F+H-1);if(G>D){D=G}G=E.indexOf(this.options.tokens[B],F+H);if(-1!=G&&G<C){C=G}}return(this.tokenBounds=[D+1,C])}});Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos=function(C,A){var D=Math.min(C.length,A.length);for(var B=0;B<D;++B){if(C[B]!=A[B]){return B}}return D};Ajax.Autocompleter=Class.create(Autocompleter.Base,{initialize:function(D,C,E,B,A){this.baseInitialize(D,C,E,A);this.options.asynchronous=true;this.options.onComplete=this.onComplete.bind(this);this.options.defaultParams=this.options.parameters||null;this.url=B},getUpdatedChoices:function(){this.startIndicator();var A=encodeURIComponent(this.options.paramName)+"="+encodeURIComponent(this.getToken());this.options.parameters=this.options.callback?this.options.callback(this.element,A):A;if(this.options.defaultParams){this.options.parameters+="&"+this.options.defaultParams}new Ajax.Request(this.url,this.options)},onComplete:function(A){this.updateChoices(A.responseText)}});Autocompleter.AjaxPro=Class.create(Autocompleter.Base,{initialize:function(C,B,E,D,A){this.baseInitialize(C,B,E,A);this.options.onComplete=this.onComplete.bind(this);this.options.noMatchFoundText=A.noMatchFoundText||"No matches found";this.func=D},getUpdatedChoices:function(){this.startIndicator();this.func(this.options.data,this.options.mode,this.options.maxResults,this.options.maxLength,this.getToken(),this.options.onComplete)},onComplete:function(A){var B;if(A.error){B='<ul><li class="error"><span class="informal">'+A.error.Message+"</span></li></ul>"}else{if(A.value==""){B='<ul><li class="error"><span class="informal">'+this.options.noMatchFoundText+"</span></li></ul>"}else{B=A.value}}this.updateChoices(B)}});
