if(typeof Effect=="undefined"){throw ("controls.js requires including script.aculo.us' effects.js library")}var Autocompleter={};Autocompleter.Base=Class.create({baseInitialize:function(d,f,e){d=$(d);this.element=d;this.update=$(f);this.hasFocus=false;this.changed=false;this.active=false;this.index=0;this.entryCount=0;this.oldElementValue=this.element.value;if(this.setOptions){this.setOptions(e)}else{this.options=e||{}}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(b,a){if(!a.style.position||a.style.position=="absolute"){a.style.position="absolute";Position.clone(b,a,{setHeight:false,offsetTop:b.offsetHeight})}Effect.Appear(a,{duration:0.15})};this.options.onHide=this.options.onHide||function(b,a){new Effect.Fade(a,{duration:0.15})};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.element,"keydown",this.onKeyPress.bindAsEventListener(this))},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)}},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)}},startIndicator:function(){if(this.options.indicator){Element.show(this.options.indicator)}},stopIndicator:function(){if(this.options.indicator){Element.hide(this.options.indicator)}},onKeyPress:function(b){if(this.active){switch(b.keyCode){case Event.KEY_TAB:case Event.KEY_RETURN:this.selectEntry();Event.stop(b);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}}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(c){var d=Event.findElement(c,"LI");if(this.index!=d.autocompleteIndex){this.index=d.autocompleteIndex;this.render()}Event.stop(c)},onClick:function(c){var d=Event.findElement(c,"LI");this.index=d.autocompleteIndex;this.selectEntry();this.hide()},onBlur:function(b){setTimeout(this.hide.bind(this),250);this.hasFocus=false;this.active=false},render:function(){if(this.entryCount>0){for(var b=0;b<this.entryCount;b++){this.index==b?Element.addClassName(this.getEntry(b),"selected"):Element.removeClassName(this.getEntry(b),"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}this.getEntry(this.index).scrollIntoView(false)},getEntry:function(b){return this.update.firstChild.childNodes[b]},getCurrentEntry:function(){return this.getEntry(this.index)},selectEntry:function(){this.active=false;this.updateElement(this.getCurrentEntry())},updateElement:function(i){if(this.options.updateElement){this.options.updateElement(i);return}var k="";if(this.options.select){var h=$(i).select("."+this.options.select)||[];if(h.length>0){k=Element.collectTextNodes(h[0],this.options.select)}}else{k=Element.collectTextNodesIgnoreClass(i,"informal")}var l=this.getTokenBounds();if(l[0]!=-1){var j=this.element.value.substr(0,l[0]);var g=this.element.value.substr(l[0]).match(/^\s+/);if(g){j+=g[0]}this.element.value=j+k+this.element.value.substr(l[1])}else{this.element.value=k}this.oldElementValue=this.element.value;this.element.focus();if(this.options.afterUpdateElement){this.options.afterUpdateElement(this.element,i)}},updateChoices:function(f){if(!this.changed&&this.hasFocus){this.update.innerHTML=f;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 e=0;e<this.entryCount;e++){var d=this.getEntry(e);d.autocompleteIndex=e;this.addObservers(d)}}else{this.entryCount=0}this.stopIndicator();this.index=0;if(this.entryCount==1&&this.options.autoSelect){this.selectEntry();this.hide()}else{this.render()}}},addObservers:function(b){Event.observe(b,"mouseover",this.onHover.bindAsEventListener(this));Event.observe(b,"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 b=this.getTokenBounds();return this.element.value.substring(b[0],b[1]).strip()},getTokenBounds:function(){if(null!=this.tokenBounds){return this.tokenBounds}var n=this.element.value;if(n.strip().empty()){return[-1,0]}var m=arguments.callee.getFirstDifferencePos(n,this.oldElementValue);var k=(m==this.oldElementValue.length?1:0);var o=-1,p=n.length;var l;for(var i=0,j=this.options.tokens.length;i<j;++i){l=n.lastIndexOf(this.options.tokens[i],m+k-1);if(l>o){o=l}l=n.indexOf(this.options.tokens[i],m+k);if(-1!=l&&l<p){p=l}}return(this.tokenBounds=[o+1,p])}});Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos=function(h,f){var g=Math.min(h.length,f.length);for(var e=0;e<g;++e){if(h[e]!=f[e]){return e}}return g};Ajax.Autocompleter=Class.create(Autocompleter.Base,{initialize:function(h,g,e,f){this.baseInitialize(h,g,f);this.options.asynchronous=true;this.options.onComplete=this.onComplete.bind(this);this.options.defaultParams=this.options.parameters||null;this.url=e},getUpdatedChoices:function(){this.startIndicator();var b=encodeURIComponent(this.options.paramName)+"="+encodeURIComponent(this.getToken());this.options.parameters=this.options.callback?this.options.callback(this.element,b):b;if(this.options.defaultParams){this.options.parameters+="&"+this.options.defaultParams}new Ajax.Request(this.url,this.options)},onComplete:function(b){this.updateChoices(b.responseText)}});Autocompleter.Local=Class.create(Autocompleter.Base,{initialize:function(e,g,h,f){this.baseInitialize(e,g,f);this.options.array=h},getUpdatedChoices:function(){this.updateChoices(this.options.selector(this))},setOptions:function(b){this.options=Object.extend({choices:10,partialSearch:true,partialChars:2,ignoreCase:true,fullSearch:false,selector:function(a){var o=[];var p=[];var k=a.getToken();var l=0;for(var n=0;n<a.options.array.length&&o.length<a.options.choices;n++){var m=a.options.array[n];var i=a.options.ignoreCase?m.toLowerCase().indexOf(k.toLowerCase()):m.indexOf(k);while(i!=-1){if(i==0&&m.length!=k.length){o.push("<li><strong>"+m.substr(0,k.length)+"</strong>"+m.substr(k.length)+"</li>");break}else{if(k.length>=a.options.partialChars&&a.options.partialSearch&&i!=-1){if(a.options.fullSearch||/\s/.test(m.substr(i-1,1))){p.push("<li>"+m.substr(0,i)+"<strong>"+m.substr(i,k.length)+"</strong>"+m.substr(i+k.length)+"</li>");break}}}i=a.options.ignoreCase?m.toLowerCase().indexOf(k.toLowerCase(),i+1):m.indexOf(k,i+1)}}if(p.length){o=o.concat(p.slice(0,a.options.choices-o.length))}return"<ul>"+o.join("")+"</ul>"}},b||{})}});Field.scrollFreeActivate=function(b){setTimeout(function(){Field.activate(b)},1)};Ajax.InPlaceEditor=Class.create({initialize:function(f,d,e){this.url=d;this.element=f=$(f);this.prepareOptions();this._controls={};arguments.callee.dealWithDeprecatedOptions(e);Object.extend(this.options,e||{});if(!this.options.formId&&this.element.id){this.options.formId=this.element.id+"-inplaceeditor";if($(this.options.formId)){this.options.formId=""}}if(this.options.externalControl){this.options.externalControl=$(this.options.externalControl)}if(!this.options.externalControl){this.options.externalControlOnly=false}this._originalBackground=this.element.getStyle("background-color")||"transparent";this.element.title=this.options.clickToEditText;this._boundCancelHandler=this.handleFormCancellation.bind(this);this._boundComplete=(this.options.onComplete||Prototype.emptyFunction).bind(this);this._boundFailureHandler=this.handleAJAXFailure.bind(this);this._boundSubmitHandler=this.handleFormSubmission.bind(this);this._boundWrapperHandler=this.wrapUp.bind(this);this.registerListeners()},checkForEscapeOrReturn:function(b){if(!this._editing||b.ctrlKey||b.altKey||b.shiftKey){return}if(Event.KEY_ESC==b.keyCode){this.handleFormCancellation(b)}else{if(Event.KEY_RETURN==b.keyCode){this.handleFormSubmission(b)}}},createControl:function(j,n,h){var l=this.options[j+"Control"];var k=this.options[j+"Text"];if("button"==l){var i=document.createElement("input");i.type="submit";i.value=k;i.className="editor_"+j+"_button";if("cancel"==j){i.onclick=this._boundCancelHandler}this._form.appendChild(i);this._controls[j]=i}else{if("link"==l){var m=document.createElement("a");m.href="#";m.appendChild(document.createTextNode(k));m.onclick="cancel"==j?this._boundCancelHandler:this._boundSubmitHandler;m.className="editor_"+j+"_link";if(h){m.className+=" "+h}this._form.appendChild(m);this._controls[j]=m}}},createEditField:function(){var f=(this.options.loadTextURL?this.options.loadingText:this.getText());var d;if(1>=this.options.rows&&!/\r|\n/.test(this.getText())){d=document.createElement("input");d.type="text";var e=this.options.size||this.options.cols||0;if(0<e){d.size=e}}else{d=document.createElement("textarea");d.rows=(1>=this.options.rows?this.options.autoRows:this.options.rows);d.cols=this.options.cols||40}d.name=this.options.paramName;d.value=f;d.className="editor_field";if(this.options.submitOnBlur){d.onblur=this._boundSubmitHandler}this._controls.editor=d;if(this.options.loadTextURL){this.loadExternalText()}this._form.appendChild(this._controls.editor)},createForm:function(){var c=this;function d(b,a){var f=c.options["text"+b+"Controls"];if(!f||a===false){return}c._form.appendChild(document.createTextNode(f))}this._form=$(document.createElement("form"));this._form.id=this.options.formId;this._form.addClassName(this.options.formClassName);this._form.onsubmit=this._boundSubmitHandler;this.createEditField();if("textarea"==this._controls.editor.tagName.toLowerCase()){this._form.appendChild(document.createElement("br"))}if(this.options.onFormCustomization){this.options.onFormCustomization(this,this._form)}d("Before",this.options.okControl||this.options.cancelControl);this.createControl("ok",this._boundSubmitHandler);d("Between",this.options.okControl&&this.options.cancelControl);this.createControl("cancel",this._boundCancelHandler,"editor_cancel");d("After",this.options.okControl||this.options.cancelControl)},destroy:function(){if(this._oldInnerHTML){this.element.innerHTML=this._oldInnerHTML}this.leaveEditMode();this.unregisterListeners()},enterEditMode:function(b){if(this._saving||this._editing){return}this._editing=true;this.triggerCallback("onEnterEditMode");if(this.options.externalControl){this.options.externalControl.hide()}this.element.hide();this.createForm();this.element.parentNode.insertBefore(this._form,this.element);if(!this.options.loadTextURL){this.postProcessEditField()}if(b){Event.stop(b)}},enterHover:function(b){if(this.options.hoverClassName){this.element.addClassName(this.options.hoverClassName)}if(this._saving){return}this.triggerCallback("onEnterHover")},getText:function(){return this.element.innerHTML.unescapeHTML()},handleAJAXFailure:function(b){this.triggerCallback("onFailure",b);if(this._oldInnerHTML){this.element.innerHTML=this._oldInnerHTML;this._oldInnerHTML=null}},handleFormCancellation:function(b){this.wrapUp();if(b){Event.stop(b)}},handleFormSubmission:function(i){var e=this._form;var j=$F(this._controls.editor);this.prepareSubmission();var h=this.options.callback(e,j)||"";if(Object.isString(h)){h=h.toQueryParams()}h.editorId=this.element.id;if(this.options.htmlResponse){var g=Object.extend({evalScripts:true},this.options.ajaxOptions);Object.extend(g,{parameters:h,onComplete:this._boundWrapperHandler,onFailure:this._boundFailureHandler});new Ajax.Updater({success:this.element},this.url,g)}else{var g=Object.extend({method:"get"},this.options.ajaxOptions);Object.extend(g,{parameters:h,onComplete:this._boundWrapperHandler,onFailure:this._boundFailureHandler});new Ajax.Request(this.url,g)}if(i){Event.stop(i)}},leaveEditMode:function(){this.element.removeClassName(this.options.savingClassName);this.removeForm();this.leaveHover();this.element.style.backgroundColor=this._originalBackground;this.element.show();if(this.options.externalControl){this.options.externalControl.show()}this._saving=false;this._editing=false;this._oldInnerHTML=null;this.triggerCallback("onLeaveEditMode")},leaveHover:function(b){if(this.options.hoverClassName){this.element.removeClassName(this.options.hoverClassName)}if(this._saving){return}this.triggerCallback("onLeaveHover")},loadExternalText:function(){this._form.addClassName(this.options.loadingClassName);this._controls.editor.disabled=true;var b=Object.extend({method:"get"},this.options.ajaxOptions);Object.extend(b,{parameters:"editorId="+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(d){this._form.removeClassName(this.options.loadingClassName);var a=d.responseText;if(this.options.stripLoadedTextTags){a=a.stripTags()}this._controls.editor.value=a;this._controls.editor.disabled=false;this.postProcessEditField()}.bind(this),onFailure:this._boundFailureHandler});new Ajax.Request(this.options.loadTextURL,b)},postProcessEditField:function(){var b=this.options.fieldPostCreation;if(b){$(this._controls.editor)["focus"==b?"focus":"activate"]()}},prepareOptions:function(){this.options=Object.clone(Ajax.InPlaceEditor.DefaultOptions);Object.extend(this.options,Ajax.InPlaceEditor.DefaultCallbacks);[this._extraDefaultOptions].flatten().compact().each(function(b){Object.extend(this.options,b)}.bind(this))},prepareSubmission:function(){this._saving=true;this.removeForm();this.leaveHover();this.showSaving()},registerListeners:function(){this._listeners={};var b;$H(Ajax.InPlaceEditor.Listeners).each(function(a){b=this[a.value].bind(this);this._listeners[a.key]=b;if(!this.options.externalControlOnly){this.element.observe(a.key,b)}if(this.options.externalControl){this.options.externalControl.observe(a.key,b)}}.bind(this))},removeForm:function(){if(!this._form){return}this._form.remove();this._form=null;this._controls={}},showSaving:function(){this._oldInnerHTML=this.element.innerHTML;this.element.innerHTML=this.options.savingText;this.element.addClassName(this.options.savingClassName);this.element.style.backgroundColor=this._originalBackground;this.element.show()},triggerCallback:function(c,d){if("function"==typeof this.options[c]){this.options[c](this,d)}},unregisterListeners:function(){$H(this._listeners).each(function(b){if(!this.options.externalControlOnly){this.element.stopObserving(b.key,b.value)}if(this.options.externalControl){this.options.externalControl.stopObserving(b.key,b.value)}}.bind(this))},wrapUp:function(b){this.leaveEditMode();this._boundComplete(b,this.element)}});Object.extend(Ajax.InPlaceEditor.prototype,{dispose:Ajax.InPlaceEditor.prototype.destroy});Ajax.InPlaceCollectionEditor=Class.create(Ajax.InPlaceEditor,{initialize:function($super,f,d,e){this._extraDefaultOptions=Ajax.InPlaceCollectionEditor.DefaultOptions;$super(f,d,e)},createEditField:function(){var b=document.createElement("select");b.name=this.options.paramName;b.size=1;this._controls.editor=b;this._collection=this.options.collection||[];if(this.options.loadCollectionURL){this.loadCollection()}else{this.checkForExternalText()}this._form.appendChild(this._controls.editor)},loadCollection:function(){this._form.addClassName(this.options.loadingClassName);this.showLoadingText(this.options.loadingCollectionText);var options=Object.extend({method:"get"},this.options.ajaxOptions);Object.extend(options,{parameters:"editorId="+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(transport){var js=transport.responseText.strip();if(!/^\[.*\]$/.test(js)){throw ("Server returned an invalid collection representation.")}this._collection=eval(js);this.checkForExternalText()}.bind(this),onFailure:this.onFailure});new Ajax.Request(this.options.loadCollectionURL,options)},showLoadingText:function(c){this._controls.editor.disabled=true;var d=this._controls.editor.firstChild;if(!d){d=document.createElement("option");d.value="";this._controls.editor.appendChild(d);d.selected=true}d.update((c||"").stripScripts().stripTags())},checkForExternalText:function(){this._text=this.getText();if(this.options.loadTextURL){this.loadExternalText()}else{this.buildOptionList()}},loadExternalText:function(){this.showLoadingText(this.options.loadingText);var b=Object.extend({method:"get"},this.options.ajaxOptions);Object.extend(b,{parameters:"editorId="+encodeURIComponent(this.element.id),onComplete:Prototype.emptyFunction,onSuccess:function(a){this._text=a.responseText.strip();this.buildOptionList()}.bind(this),onFailure:this.onFailure});new Ajax.Request(this.options.loadTextURL,b)},buildOptionList:function(){this._form.removeClassName(this.options.loadingClassName);this._collection=this._collection.map(function(a){return 2===a.length?a:[a,a].flatten()});var d=("value" in this.options)?this.options.value:this._text;var e=this._collection.any(function(a){return a[0]==d}.bind(this));this._controls.editor.update("");var f;this._collection.each(function(a,b){f=document.createElement("option");f.value=a[0];f.selected=e?a[0]==d:0==b;f.appendChild(document.createTextNode(a[1]));this._controls.editor.appendChild(f)}.bind(this));this._controls.editor.disabled=false;Field.scrollFreeActivate(this._controls.editor)}});Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions=function(d){if(!d){return}function c(b,a){if(b in d||a===undefined){return}d[b]=a}c("cancelControl",(d.cancelLink?"link":(d.cancelButton?"button":d.cancelLink==d.cancelButton==false?false:undefined)));c("okControl",(d.okLink?"link":(d.okButton?"button":d.okLink==d.okButton==false?false:undefined)));c("highlightColor",d.highlightcolor);c("highlightEndColor",d.highlightendcolor)};Object.extend(Ajax.InPlaceEditor,{DefaultOptions:{ajaxOptions:{},autoRows:3,cancelControl:"link",cancelText:"cancel",clickToEditText:"Click to edit",externalControl:null,externalControlOnly:false,fieldPostCreation:"activate",formClassName:"inplaceeditor-form",formId:null,highlightColor:"#ffff99",highlightEndColor:"#ffffff",hoverClassName:"",htmlResponse:true,loadingClassName:"inplaceeditor-loading",loadingText:"Loading...",okControl:"button",okText:"ok",paramName:"value",rows:1,savingClassName:"inplaceeditor-saving",savingText:"Saving...",size:0,stripLoadedTextTags:false,submitOnBlur:false,textAfterControls:"",textBeforeControls:"",textBetweenControls:""},DefaultCallbacks:{callback:function(b){return Form.serialize(b)},onComplete:function(c,d){new Effect.Highlight(d,{startcolor:this.options.highlightColor,keepBackgroundImage:true})},onEnterEditMode:null,onEnterHover:function(b){b.element.style.backgroundColor=b.options.highlightColor;if(b._effect){b._effect.cancel()}},onFailure:function(c,d){alert("Error communication with the server: "+c.responseText.stripTags())},onFormCustomization:null,onLeaveEditMode:null,onLeaveHover:function(b){b._effect=new Effect.Highlight(b.element,{startcolor:b.options.highlightColor,endcolor:b.options.highlightEndColor,restorecolor:b._originalBackground,keepBackgroundImage:true})}},Listeners:{click:"enterEditMode",keydown:"checkForEscapeOrReturn",mouseover:"enterHover",mouseout:"leaveHover"}});Ajax.InPlaceCollectionEditor.DefaultOptions={loadingCollectionText:"Loading options..."};Form.Element.DelayedObserver=Class.create({initialize:function(d,e,f){this.delay=e||0.5;this.element=$(d);this.callback=f;this.timer=null;this.lastValue=$F(this.element);Event.observe(this.element,"keyup",this.delayedListener.bindAsEventListener(this))},delayedListener:function(b){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))}});
