(function(g){g.fn.editInPlace=function(h){var i=g.extend({},g.fn.editInPlace.defaults,h);d(i);e(i.saving_image);return this.each(function(){var j=g(this);if(j.data("editInPlace")){return}j.data("editInPlace",true);new f(i,j).init()})};g.fn.editInPlace.defaults={url:"",bg_over:"#ffc",bg_out:"transparent",hover_class:"",show_buttons:false,save_button:'<button class="inplace_save">Save</button>',cancel_button:'<button class="inplace_cancel">Cancel</button>',params:"",field_type:"text",default_text:"(Click here to add text)",use_html:false,textarea_rows:10,textarea_cols:25,select_text:"Choose new value",select_options:"",text_size:null,saving_text:undefined,saving_image:"",saving_animation_color:"transparent",value_required:false,element_id:"element_id",update_value:"update_value",original_value:"original_value",original_html:"original_html",save_if_nothing_changed:false,on_blur:"save",cancel:"",callback:null,callback_skip_dom_reset:false,success:null,error:null,error_sink:function(h,i){alert(i)},preinit:null,postclose:null,delegate:null};var c={shouldOpenEditInPlace:function(j,i,h){},willOpenEditInPlace:function(i,h){},didOpenEditInPlace:function(i,h){},shouldCloseEditInPlace:function(j,i,h){},willCloseEditInPlace:function(i,h){},didCloseEditInPlace:function(i,h){},missingCommaErrorPreventer:""};function f(h,i){this.settings=h;this.dom=i;this.originalValue=null;this.didInsertDefaultText=false;this.shouldDelayReinit=false}g.extend(f.prototype,{init:function(){this.setDefaultTextIfNeccessary();this.connectOpeningEvents()},reinit:function(){if(this.shouldDelayReinit){return}this.triggerCallback(this.settings.postclose,this.dom);this.triggerDelegateCall("didCloseEditInPlace");this.markEditorAsInactive();this.connectOpeningEvents()},setDefaultTextIfNeccessary:function(){if(""!==this.dom.html()){return}this.dom.html(this.settings.default_text);this.didInsertDefaultText=true},connectOpeningEvents:function(){var h=this;this.dom.bind("mouseenter.editInPlace",function(){h.addHoverEffect()}).bind("mouseleave.editInPlace",function(){h.removeHoverEffect()}).bind("click.editInPlace",function(i){h.openEditor(i)})},disconnectOpeningEvents:function(){this.dom.unbind(".editInPlace")},addHoverEffect:function(){if(this.settings.hover_class){this.dom.addClass(this.settings.hover_class)}else{this.dom.css("background-color",this.settings.bg_over)}},removeHoverEffect:function(){if(this.settings.hover_class){this.dom.removeClass(this.settings.hover_class)}else{this.dom.css("background-color",this.settings.bg_out)}},openEditor:function(h){if(!this.shouldOpenEditor(h)){return}this.workAroundFirefoxBlurBug();this.disconnectOpeningEvents();this.removeHoverEffect();this.removeInsertedDefaultTextIfNeccessary();this.saveOriginalValue();this.markEditorAsActive();this.replaceContentWithEditor();this.connectOpeningEventsToEditor();this.triggerDelegateCall("didOpenEditInPlace")},shouldOpenEditor:function(h){if(this.isClickedObjectCancelled(h.target)){return false}if(false===this.triggerCallback(this.settings.preinit,this.dom)){return false}if(false===this.triggerDelegateCall("shouldOpenEditInPlace",true,h)){return false}return true},removeInsertedDefaultTextIfNeccessary:function(){if(!this.didInsertDefaultText||this.dom.html()!==this.settings.default_text){return}this.dom.html("");this.didInsertDefaultText=false},isClickedObjectCancelled:function(j){if(!this.settings.cancel){return false}var h=g(j).parents().andSelf();var i=h.filter(this.settings.cancel);return 0!==i.length},saveOriginalValue:function(){if(this.settings.use_html){this.originalValue=this.dom.html()}else{this.originalValue=a(this.dom.text())}},restoreOriginalValue:function(){this.setClosedEditorContent(this.originalValue)},setClosedEditorContent:function(h){if(this.settings.use_html){this.dom.html(h)}else{this.dom.text(h)}},workAroundFirefoxBlurBug:function(){if(!g.browser.mozilla){return}this.dom.parents(":last").find(".editInPlace-active :input").blur()},replaceContentWithEditor:function(){var i=(this.settings.show_buttons)?this.settings.save_button+" "+this.settings.cancel_button:"";var h=this.createEditorElement();this.dom.html('<form class="inplace_form" style="display: inline; margin: 0; padding: 0;"></form>').find("form").append(h).append(i)},createEditorElement:function(){if(-1===g.inArray(this.settings.field_type,["text","textarea","select"])){throw"Unknown field_type <fnord>, supported are 'text', 'textarea' and 'select'"}var h=null;if("select"===this.settings.field_type){h=this.createSelectEditor()}else{if("text"===this.settings.field_type){h=g('<input type="text" '+this.inputNameAndClass()+' size="'+this.settings.text_size+'" />')}else{if("textarea"===this.settings.field_type){h=g("<textarea "+this.inputNameAndClass()+' rows="'+this.settings.textarea_rows+'"  cols="'+this.settings.textarea_cols+'" />')}}}h.val(this.triggerDelegateCall("willOpenEditInPlace",this.originalValue));return h},inputNameAndClass:function(){return' name="inplace_value" class="inplace_field" '},createSelectEditor:function(){var n=g("<select"+this.inputNameAndClass()+'><option disabled="true" value="">'+this.settings.select_text+"</option></select>");var j=this.settings.select_options;if(!g.isArray(j)){j=j.split(",")}for(var k=0;k<j.length;k++){var h=j[k];if(!g.isArray(h)){h=h.split(":")}var o=a(h[1]||h[0]);var p=a(h[0]);var m=(o==this.originalValue)?'selected="selected" ':"";var l=g("<option "+m+" ></option>").val(o).text(p);n.append(l)}return n},connectOpeningEventsToEditor:function(){var k=this;function j(l){k.handleCancelEditor(l);return false}function h(l){k.handleSaveEditor(l);return false}var i=this.dom.find("form");i.find(".inplace_field").focus().select();i.find(".inplace_cancel").click(j);i.find(".inplace_save").click(h);if(!this.settings.show_buttons){if("save"===this.settings.on_blur){i.find(".inplace_field").blur(h)}else{i.find(".inplace_field").blur(j)}if(g.browser.mozilla){this.bindSubmitOnEnterInInput()}}i.keyup(function(l){var m=27;if(m===l.which){return j()}});if(g.browser.safari){this.bindSubmitOnEnterInInput()}i.submit(h)},bindSubmitOnEnterInInput:function(){if("textarea"===this.settings.field_type){return}var h=this;this.dom.find(":input").keyup(function(i){var j=13;if(j===i.which){return h.dom.find("form").submit()}})},handleCancelEditor:function(h){if(false===this.triggerDelegateCall("shouldCloseEditInPlace",true,h)){return}var i=this.dom.find(":input").val();i=this.triggerDelegateCall("willCloseEditInPlace",i);this.restoreOriginalValue();if(b(i)&&!this.isDisabledDefaultSelectChoice()){this.setClosedEditorContent(i)}this.reinit()},handleSaveEditor:function(h){if(false===this.triggerDelegateCall("shouldCloseEditInPlace",true,h)){return}var i=this.dom.find(":input").val();i=this.triggerDelegateCall("willCloseEditInPlace",i);if(this.isDisabledDefaultSelectChoice()||this.isUnchangedInput(i)){this.handleCancelEditor(h);return}if(this.didForgetRequiredText(i)){this.handleCancelEditor(h);this.reportError("Error: You must enter a value to save this field");return}this.showSaving(i);if(this.settings.callback){this.handleSubmitToCallback(i)}else{this.handleSubmitToServer(i)}},didForgetRequiredText:function(h){return this.settings.value_required&&(""===h||undefined===h||null===h)},isDisabledDefaultSelectChoice:function(){return this.dom.find("option").eq(0).is(":selected:disabled")},isUnchangedInput:function(h){return !this.settings.save_if_nothing_changed&&this.originalValue===h},showSaving:function(i){if(this.settings.callback&&this.settings.callback_skip_dom_reset){return}var h=i;if(b(this.settings.saving_text)){h=this.settings.saving_text}if(b(this.settings.saving_image)){h=g("<img />").attr("src",this.settings.saving_image).attr("alt",h)}this.dom.html(h)},handleSubmitToCallback:function(h){this.enableOrDisableAnimationCallbacks(true,false);var i=this.triggerCallback(this.settings.callback,this.id(),h,this.originalValue,this.settings.params,this.savingAnimationCallbacks());if(this.settings.callback_skip_dom_reset){}else{if(undefined===i){this.reportError("Error: Failed to save value: "+h);this.restoreOriginalValue()}else{this.dom.html(i)}}if(this.didCallNoCallbacks()){this.enableOrDisableAnimationCallbacks(false,false);this.reinit()}},handleSubmitToServer:function(h){var j=this.settings.update_value+"="+encodeURIComponent(h)+"&"+this.settings.element_id+"="+this.dom.attr("id")+((this.settings.params)?"&"+this.settings.params:"")+"&"+this.settings.original_html+"="+encodeURIComponent(this.originalValue)+"&"+this.settings.original_value+"="+encodeURIComponent(this.originalValue);this.enableOrDisableAnimationCallbacks(true,false);this.didStartSaving();var i=this;g.ajax({url:i.settings.url,type:"POST",data:j,dataType:"html",complete:function(k){i.didEndSaving()},success:function(l){var k=l||i.settings.default_text;i.dom.html(k);i.triggerCallback(i.settings.success,l)},error:function(k){i.dom.html(i.originalHTML);if(i.settings.error){i.triggerCallback(i.settings.error,k)}else{i.reportError("Failed to save value: "+k.responseText||"Unspecified Error")}}})},triggerCallback:function(i){if(!i){return}var h=Array.prototype.splice.call(arguments,1);return i.apply(this.dom[0],h)},triggerDelegateCall:function(j,i,h){if(!this.settings.delegate||!g.isFunction(this.settings.delegate[j])){return i}var k=this.settings.delegate[j](this.dom,this.settings,h);return(undefined===k)?i:k},reportError:function(h){this.triggerCallback(this.settings.error_sink,this.id(),h)},id:function(){return this.dom.attr("id")},markEditorAsActive:function(){this.dom.addClass("editInPlace-active")},markEditorAsInactive:function(){this.dom.removeClass("editInPlace-active")},savingAnimationCallbacks:function(){var h=this;return{didStartSaving:function(){h.didStartSaving()},didEndSaving:function(){h.didEndSaving()}}},enableOrDisableAnimationCallbacks:function(i,h){this.didStartSaving.enabled=i;this.didEndSaving.enabled=h},didCallNoCallbacks:function(){return this.didStartSaving.enabled&&!this.didEndSaving.enabled},assertCanCall:function(h){if(!this[h].enabled){throw new Error("Cannot call "+h+" now. See documentation for details.")}},didStartSaving:function(){this.assertCanCall("didStartSaving");this.shouldDelayReinit=true;this.enableOrDisableAnimationCallbacks(false,true);this.startSavingAnimation()},didEndSaving:function(){this.assertCanCall("didEndSaving");this.shouldDelayReinit=false;this.enableOrDisableAnimationCallbacks(false,false);this.reinit();this.stopSavingAnimation()},startSavingAnimation:function(){var h=this;this.dom.animate({backgroundColor:this.settings.saving_animation_color},400).animate({backgroundColor:"transparent"},400,"swing",function(){setTimeout(function(){h.startSavingAnimation()},10)})},stopSavingAnimation:function(){this.dom.stop(true).css({backgroundColor:""})},missingCommaErrorPreventer:""});function d(h){if(h.url||h.callback){return}throw new Error("Need to set either url: or callback: option for the inline editor to work.")}function e(i){if(""===i){return}var h=new Image();h.src=i}function a(h){return h.replace(/^\s+/,"").replace(/\s+$/,"")}function b(h){if(undefined===h||null===h){return false}if(0===h.length){return false}return true}})(jQuery);
