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