var Autocompleter={};Autocompleter.Base=function(){};Autocompleter.Base.prototype={baseInitialize:function(Q,m,t){this.element=$(Q);this.update=$(m);this.hasFocus=false;this.changed=false;this.active=false;this.index=0;this.entryCount=0;if(this.setOptions){this.setOptions(t);}else{this.options=t||{};}this.options.paramName=this.options.paramName||this.element.name;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(M,w){if(!w.style.position||w.style.position=="absolute"){w.style.position="absolute";Position.clone(M,w,{setHeight:false,offsetTop:M.offsetHeight});}Effect.Appear(w,{duration:0.15});};this.options.onHide=this.options.onHide||function(M,w){new Effect.Fade(w,{duration:0.15});};if(typeof (this.options.tokens)=="string"){this.options.tokens=new Array(this.options.tokens);}this.observer=null;this.element.setAttribute("autocomplete","off");Element.hide(this.update);Event.observe(this.element,"blur",this.onBlur.bindAsEventListener(this));Event.observe(this.element,"keypress",this.onKeyPress.bindAsEventListener(this));},show:function(){if(Element.getStyle(this.update,"display")=="none"){this.options.onShow(this.element,this.update);}if(!this.iefix&&(navigator.appVersion.indexOf("MSIE")>0)&&(navigator.userAgent.indexOf("Opera")<0)&&(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);}},fixIEOverlapping:function(){Position.clone(this.update,this.iefix);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);}},startIndicator:function(){if(this.options.indicator){Element.show(this.options.indicator);}},stopIndicator:function(){if(this.options.indicator){Element.hide(this.options.indicator);}},onKeyPress:function(t){if(this.active){switch(t.keyCode){case Event.KEY_TAB:case Event.KEY_RETURN:this.selectEntry();Event.stop(t);case Event.KEY_ESC:this.hide();this.active=false;Event.stop(t);return ;case Event.KEY_LEFT:case Event.KEY_RIGHT:return ;case Event.KEY_UP:this.markPrevious();this.render();if(navigator.appVersion.indexOf("AppleWebKit")>0){Event.stop(t);}return ;case Event.KEY_DOWN:this.markNext();this.render();if(navigator.appVersion.indexOf("AppleWebKit")>0){Event.stop(t);}return ;}}else{if(t.keyCode==Event.KEY_TAB||t.keyCode==Event.KEY_RETURN||(navigator.appVersion.indexOf("AppleWebKit")>0&&t.keyCode==0)){return ;}}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.getUpdatedChoices();},onHover:function(Q){var t=Event.findElement(Q,"LI");if(this.index!=t.autocompleteIndex){this.index=t.autocompleteIndex;this.render();}Event.stop(Q);},onClick:function(Q){var t=Event.findElement(Q,"LI");this.index=t.autocompleteIndex;this.selectEntry();this.hide();},onBlur:function(t){setTimeout(this.hide.bind(this),250);this.hasFocus=false;this.active=false;},render:function(){if(this.entryCount>0){for(var t=0;t<this.entryCount;t++){this.index==t?Element.addClassName(this.getEntry(t),"selected"):Element.removeClassName(this.getEntry(t),"selected");}if(this.hasFocus){this.show();this.active=true;}}else{this.active=false;this.hide();}},markPrevious:function(){if(this.index>0){this.index--;}else{this.index=this.entryCount-1;}},markNext:function(){if(this.index<this.entryCount-1){this.index++;}else{this.index=0;}},getEntry:function(t){return this.update.firstChild.childNodes[t];},getCurrentEntry:function(){return this.getEntry(this.index);},selectEntry:function(){this.active=false;this.updateElement(this.getCurrentEntry());},updateElement:function(D){if(this.options.updateElement){this.options.updateElement(D);return ;}var m="";if(this.options.select){var t=document.getElementsByClassName(this.options.select,D)||[];if(t.length>0){m=Element.collectTextNodes(t[0],this.options.select);}}else{m=Element.collectTextNodesIgnoreClass(D,"informal");}var w=this.findLastToken();if(w!=-1){var M=this.element.value.substr(0,w+1);var Q=this.element.value.substr(w+1).match(/^\s+/);if(Q){M+=Q[0];}this.element.value=M+m;}else{this.element.value=m;}this.element.focus();if(this.options.afterUpdateElement){this.options.afterUpdateElement(this.element,D);}},updateChoices:function(m){if(!this.changed&&this.hasFocus){this.update.innerHTML=m;Element.cleanWhitespace(this.update);Element.cleanWhitespace(this.update.firstChild);if(this.update.firstChild&&this.update.firstChild.childNodes){this.entryCount=this.update.firstChild.childNodes.length;for(var t=0;t<this.entryCount;t++){var Q=this.getEntry(t);Q.autocompleteIndex=t;this.addObservers(Q);}}else{this.entryCount=0;}this.stopIndicator();this.index=0;this.render();}},addObservers:function(t){Event.observe(t,"mouseover",this.onHover.bindAsEventListener(this));Event.observe(t,"click",this.onClick.bindAsEventListener(this));},onObserverEvent:function(){this.changed=false;if(this.getToken().length>=this.options.minChars){this.startIndicator();this.getUpdatedChoices();}else{this.active=false;this.hide();}},getToken:function(){var Q=this.findLastToken();if(Q!=-1){var t=this.element.value.substr(Q+1).replace(/^\s+/,"").replace(/\s+$/,"");}else{var t=this.element.value;}return /\n/.test(t)?"":t;},findLastToken:function(){var m=-1;for(var Q=0;Q<this.options.tokens.length;Q++){var t=this.element.value.lastIndexOf(this.options.tokens[Q]);if(t>m){m=t;}}return m;}};Ajax.Autocompleter=Class.create();Object.extend(Object.extend(Ajax.Autocompleter.prototype,Autocompleter.Base.prototype),{initialize:function(m,M,Q,t){this.baseInitialize(m,M,t);this.options.asynchronous=true;this.options.onComplete=this.onComplete.bind(this);this.options.defaultParams=this.options.parameters||null;this.url=Q;},getUpdatedChoices:function(){entry=encodeURIComponent(this.options.paramName)+"="+encodeURIComponent(this.getToken());this.options.parameters=this.options.callback?this.options.callback(this.element,entry):entry;if(this.options.defaultParams){this.options.parameters+="&"+this.options.defaultParams;}new Ajax.Request(this.url,this.options);},onComplete:function(t){this.updateChoices(t.responseText);}});Autocompleter.Local=Class.create();Autocompleter.Local.prototype=Object.extend(new Autocompleter.Base(),{initialize:function(Q,M,m,t){this.baseInitialize(Q,M,t);this.options.array=m;},getUpdatedChoices:function(){this.updateChoices(this.options.selector(this));},setOptions:function(t){this.options=Object.extend({choices:10,partialSearch:true,partialChars:2,ignoreCase:true,fullSearch:false,selector:function(Q){var M=[];var m=[];var S=Q.getToken();var K=0;for(var w=0;w<Q.options.array.length&&M.length<Q.options.choices;w++){var D=Q.options.array[w];var r=Q.options.ignoreCase?D.toLowerCase().indexOf(S.toLowerCase()):D.indexOf(S);while(r!=-1){if(r==0&&D.length!=S.length){M.push("<li><strong>"+D.substr(0,S.length)+"</strong>"+D.substr(S.length)+"</li>");break;}else{if(S.length>=Q.options.partialChars&&Q.options.partialSearch&&r!=-1){if(Q.options.fullSearch||/\s/.test(D.substr(r-1,1))){m.push("<li>"+D.substr(0,r)+"<strong>"+D.substr(r,S.length)+"</strong>"+D.substr(r+S.length)+"</li>");break;}}}r=Q.options.ignoreCase?D.toLowerCase().indexOf(S.toLowerCase(),r+1):D.indexOf(S,r+1);}}if(m.length){M=M.concat(m.slice(0,Q.options.choices-M.length));}return "<ul>"+M.join("")+"</ul>";}},t||{});}});Field.scrollFreeActivate=function(t){setTimeout(function(){Field.activate(t);},1);};Ajax.InPlaceEditor=Class.create();Ajax.InPlaceEditor.defaultHighlightColor="#FFFF99";Ajax.InPlaceEditor.prototype={initialize:function(m,Q,t){this.url=Q;this.element=$(m);this.options=Object.extend({okButton:true,okText:"ok",cancelLink:true,cancelText:"cancel",savingText:"Saving...",clickToEditText:"Click to edit",okText:"ok",rows:1,onComplete:function(w,M){new Effect.Highlight(M,{startcolor:this.options.highlightcolor});},onFailure:function(M){alert("Error communicating with the server: "+M.responseText.stripTags());},callback:function(M){return Form.serialize(M);},handleLineBreaks:true,loadingText:"Loading...",savingClassName:"inplaceeditor-saving",loadingClassName:"inplaceeditor-loading",formClassName:"inplaceeditor-form",highlightcolor:Ajax.InPlaceEditor.defaultHighlightColor,highlightendcolor:"#FFFFFF",externalControl:null,submitOnBlur:false,ajaxOptions:{},evalScripts:false},t||{});if(!this.options.formId&&this.element.id){this.options.formId=this.element.id+"-inplaceeditor";if($(this.options.formId)){this.options.formId=null;}}if(this.options.externalControl){this.options.externalControl=$(this.options.externalControl);}this.originalBackground=Element.getStyle(this.element,"background-color");if(!this.originalBackground){this.originalBackground="transparent";}this.element.title=this.options.clickToEditText;this.onclickListener=this.enterEditMode.bindAsEventListener(this);this.mouseoverListener=this.enterHover.bindAsEventListener(this);this.mouseoutListener=this.leaveHover.bindAsEventListener(this);Event.observe(this.element,"click",this.onclickListener);Event.observe(this.element,"mouseover",this.mouseoverListener);Event.observe(this.element,"mouseout",this.mouseoutListener);if(this.options.externalControl){Event.observe(this.options.externalControl,"click",this.onclickListener);Event.observe(this.options.externalControl,"mouseover",this.mouseoverListener);Event.observe(this.options.externalControl,"mouseout",this.mouseoutListener);}},enterEditMode:function(t){if(this.saving){return ;}if(this.editing){return ;}this.editing=true;this.onEnterEditMode();if(this.options.externalControl){Element.hide(this.options.externalControl);}Element.hide(this.element);this.createForm();this.element.parentNode.insertBefore(this.form,this.element);Field.scrollFreeActivate(this.editField);if(t){Event.stop(t);}return false;},createForm:function(){this.form=document.createElement("form");this.form.id=this.options.formId;Element.addClassName(this.form,this.options.formClassName);this.form.onsubmit=this.onSubmit.bind(this);this.createEditField();if(this.options.textarea){var t=document.createElement("br");this.form.appendChild(t);}if(this.options.okButton){okButton=document.createElement("input");okButton.type="submit";okButton.value=this.options.okText;okButton.className="editor_ok_button";this.form.appendChild(okButton);}if(this.options.cancelLink){cancelLink=document.createElement("a");cancelLink.href="#";cancelLink.appendChild(document.createTextNode(this.options.cancelText));cancelLink.onclick=this.onclickCancel.bind(this);cancelLink.className="editor_cancel";this.form.appendChild(cancelLink);}},hasHTMLLineBreaks:function(t){if(!this.options.handleLineBreaks){return false;}return t.match(/<br/i)||t.match(/<p>/i);},convertHTMLLineBreaks:function(t){return t.replace(/<br>/gi,"\n").replace(/<br\/>/gi,"\n").replace(/<\/p>/gi,"\n").replace(/<p>/gi,"");},createEditField:function(){var w;if(this.options.loadTextURL){w=this.options.loadingText;}else{w=this.getText();}var m=this;if(this.options.rows==1&&!this.hasHTMLLineBreaks(w)){this.options.textarea=false;var t=document.createElement("input");t.obj=this;t.type="text";t.name="value";t.value=w;t.style.backgroundColor=this.options.highlightcolor;t.className="editor_field";var Q=this.options.size||this.options.cols||0;if(Q!=0){t.size=Q;}if(this.options.submitOnBlur){t.onblur=this.onSubmit.bind(this);}this.editField=t;}else{this.options.textarea=true;var M=document.createElement("textarea");M.obj=this;M.name="value";M.value=this.convertHTMLLineBreaks(w);M.rows=this.options.rows;M.cols=this.options.cols||40;M.className="editor_field";if(this.options.submitOnBlur){M.onblur=this.onSubmit.bind(this);}this.editField=M;}if(this.options.loadTextURL){this.loadExternalText();}this.form.appendChild(this.editField);},getText:function(){return this.element.innerHTML;},loadExternalText:function(){Element.addClassName(this.form,this.options.loadingClassName);this.editField.disabled=true;new Ajax.Request(this.options.loadTextURL,Object.extend({asynchronous:true,onComplete:this.onLoadedExternalText.bind(this)},this.options.ajaxOptions));},onLoadedExternalText:function(t){Element.removeClassName(this.form,this.options.loadingClassName);this.editField.disabled=false;this.editField.value=t.responseText.stripTags();},onclickCancel:function(){this.onComplete();this.leaveEditMode();return false;},onFailure:function(t){this.options.onFailure(t);if(this.oldInnerHTML){this.element.innerHTML=this.oldInnerHTML;this.oldInnerHTML=null;}return false;},onSubmit:function(){var t=this.form;var Q=this.editField.value;this.onLoading();if(this.options.evalScripts){new Ajax.Request(this.url,Object.extend({parameters:this.options.callback(t,Q),onComplete:this.onComplete.bind(this),onFailure:this.onFailure.bind(this),asynchronous:true,evalScripts:true},this.options.ajaxOptions));}else{new Ajax.Updater({success:this.element,failure:null},this.url,Object.extend({parameters:this.options.callback(t,Q),onComplete:this.onComplete.bind(this),onFailure:this.onFailure.bind(this)},this.options.ajaxOptions));}if(arguments.length>1){Event.stop(arguments[0]);}return false;},onLoading:function(){this.saving=true;this.removeForm();this.leaveHover();this.showSaving();},showSaving:function(){this.oldInnerHTML=this.element.innerHTML;this.element.innerHTML=this.options.savingText;Element.addClassName(this.element,this.options.savingClassName);this.element.style.backgroundColor=this.originalBackground;Element.show(this.element);},removeForm:function(){if(this.form){if(this.form.parentNode){Element.remove(this.form);}this.form=null;}},enterHover:function(){if(this.saving){return ;}this.element.style.backgroundColor=this.options.highlightcolor;if(this.effect){this.effect.cancel();}Element.addClassName(this.element,this.options.hoverClassName);},leaveHover:function(){if(this.options.backgroundColor){this.element.style.backgroundColor=this.oldBackground;}Element.removeClassName(this.element,this.options.hoverClassName);if(this.saving){return ;}this.effect=new Effect.Highlight(this.element,{startcolor:this.options.highlightcolor,endcolor:this.options.highlightendcolor,restorecolor:this.originalBackground});},leaveEditMode:function(){Element.removeClassName(this.element,this.options.savingClassName);this.removeForm();this.leaveHover();this.element.style.backgroundColor=this.originalBackground;Element.show(this.element);if(this.options.externalControl){Element.show(this.options.externalControl);}this.editing=false;this.saving=false;this.oldInnerHTML=null;this.onLeaveEditMode();},onComplete:function(t){this.leaveEditMode();this.options.onComplete.bind(this)(t,this.element);},onEnterEditMode:function(){},onLeaveEditMode:function(){},dispose:function(){if(this.oldInnerHTML){this.element.innerHTML=this.oldInnerHTML;}this.leaveEditMode();Event.stopObserving(this.element,"click",this.onclickListener);Event.stopObserving(this.element,"mouseover",this.mouseoverListener);Event.stopObserving(this.element,"mouseout",this.mouseoutListener);if(this.options.externalControl){Event.stopObserving(this.options.externalControl,"click",this.onclickListener);Event.stopObserving(this.options.externalControl,"mouseover",this.mouseoverListener);Event.stopObserving(this.options.externalControl,"mouseout",this.mouseoutListener);}}};Ajax.InPlaceCollectionEditor=Class.create();Object.extend(Ajax.InPlaceCollectionEditor.prototype,Ajax.InPlaceEditor.prototype);Object.extend(Ajax.InPlaceCollectionEditor.prototype,{createEditField:function(){if(!this.cached_selectTag){var t=document.createElement("select");var m=this.options.collection||[];var Q;m.each(function(w,M){Q=document.createElement("option");Q.value=(w instanceof Array)?w[0]:w;if(this.options.value==Q.value){Q.selected=true;}Q.appendChild(document.createTextNode((w instanceof Array)?w[1]:w));t.appendChild(Q);}.bind(this));this.cached_selectTag=t;}this.editField=this.cached_selectTag;if(this.options.loadTextURL){this.loadExternalText();}this.form.appendChild(this.editField);this.options.callback=function(M,w){return "value="+encodeURIComponent(w);};}});Form.Element.DelayedObserver=Class.create();Form.Element.DelayedObserver.prototype={initialize:function(Q,t,m){this.delay=t||0.5;this.element=$(Q);this.callback=m;this.timer=null;this.lastValue=$F(this.element);Event.observe(this.element,"keyup",this.delayedListener.bindAsEventListener(this));},delayedListener:function(t){if(this.lastValue==$F(this.element)){return ;}if(this.timer){clearTimeout(this.timer);}this.timer=setTimeout(this.onTimerEvent.bind(this),this.delay*1000);this.lastValue=$F(this.element);},onTimerEvent:function(){this.timer=null;this.callback(this.element,$F(this.element));}};