Prado.WebUI.TInPlaceTextBox=Base.extend({constructor:function(a){this.isSaving=false;this.isEditing=false;this.editField=null;this.readOnly=a.ReadOnly;this.options=Object.extend({LoadTextFromSource:false,TextMode:"SingleLine"},a||{});this.element=$(this.options.ID);Prado.WebUI.TInPlaceTextBox.register(this);this.createEditorInput();this.initializeListeners();Prado.Registry.set(a.ID,this)},initializeListeners:function(){this.onclickListener=this.enterEditMode.bindAsEventListener(this);Event.observe(this.element,"click",this.onclickListener);if(this.options.ExternalControl){Event.observe($(this.options.ExternalControl),"click",this.onclickListener)}},enterEditMode:function(a){if(this.isSaving||this.isEditing||this.readOnly){return}this.isEditing=true;this.onEnterEditMode();this.createEditorInput();this.showTextBox();this.editField.disabled=false;if(this.options.LoadTextOnEdit){this.loadExternalText()}Prado.Element.focus(this.editField);if(a){Event.stop(a)}return false},exitEditMode:function(a){this.isEditing=false;this.isSaving=false;this.editField.disabled=false;this.element.innerHTML=this.editField.value;this.showLabel()},showTextBox:function(){Element.hide(this.element);Element.show(this.editField)},showLabel:function(){Element.show(this.element);Element.hide(this.editField)},createEditorInput:function(){if(this.editField==null){this.createTextBox()}this.editField.value=this.getText()},loadExternalText:function(){this.editField.disabled=true;this.onLoadingText();options=new Array("__InlineEditor_loadExternalText__",this.getText());request=new Prado.CallbackRequest(this.options.EventTarget,this.options);request.setCausesValidation(false);request.setCallbackParameter(options);request.ActiveControl.onSuccess=this.onloadExternalTextSuccess.bind(this);request.ActiveControl.onFailure=this.onloadExternalTextFailure.bind(this);request.dispatch()},createTextBox:function(){cssClass=this.element.className||"";inputName=this.options.EventTarget;options={className:cssClass,name:inputName,id:this.options.TextBoxID};if(this.options.TextMode=="SingleLine"){if(this.options.MaxLength>0){options.maxlength=this.options.MaxLength}this.editField=INPUT(options)}else{if(this.options.Rows>0){options.rows=this.options.Rows}if(this.options.Columns>0){options.cols=this.options.Columns}if(this.options.Wrap){options.wrap="off"}this.editField=TEXTAREA(options)}this.editField.style.display="none";this.element.parentNode.insertBefore(this.editField,this.element);if(this.options.TextMode=="SingleLine"){Event.observe(this.editField,"keydown",function(b){if(Event.keyCode(b)==Event.KEY_RETURN){var a=Event.element(b);if(a){Event.fireEvent(a,"blur");Event.stop(b)}}})}Event.observe(this.editField,"blur",this.onTextBoxBlur.bind(this));Event.observe(this.editField,"keypress",this.onKeyPressed.bind(this))},getText:function(){return this.element.innerHTML},onEnterEditMode:function(){if(typeof(this.options.onEnterEditMode)=="function"){this.options.onEnterEditMode(this,null)}},onTextBoxBlur:function(a){text=this.element.innerHTML;if(this.options.AutoPostBack&&text!=this.editField.value){if(this.isEditing){this.onTextChanged(text)}}else{this.element.innerHTML=this.editField.value;this.isEditing=false;if(this.options.AutoHide){this.showLabel()}}},onKeyPressed:function(a){if(Event.keyCode(a)==Event.KEY_ESC){this.editField.value=this.getText();this.isEditing=false;if(this.options.AutoHide){this.showLabel()}}else{if(Event.keyCode(a)==Event.KEY_RETURN&&this.options.TextMode!="MultiLine"){Event.stop(a)}}},onTextChanged:function(a){request=new Prado.CallbackRequest(this.options.EventTarget,this.options);request.setCallbackParameter(a);request.ActiveControl.onSuccess=this.onTextChangedSuccess.bind(this);request.ActiveControl.onFailure=this.onTextChangedFailure.bind(this);if(request.dispatch()){this.isSaving=true;this.editField.disabled=true}},onLoadingText:function(){},onloadExternalTextSuccess:function(a,b){this.isEditing=true;this.editField.disabled=false;this.editField.value=this.getText();Prado.Element.focus(this.editField);if(typeof(this.options.onSuccess)=="function"){this.options.onSuccess(sender,b)}},onloadExternalTextFailure:function(a,b){this.isSaving=false;this.isEditing=false;this.showLabel();if(typeof(this.options.onFailure)=="function"){this.options.onFailure(sender,b)}},onTextChangedSuccess:function(a,b){this.isSaving=false;this.isEditing=false;if(this.options.AutoHide){this.showLabel()}this.element.innerHTML=b==null?this.editField.value:b;this.editField.disabled=false;if(typeof(this.options.onSuccess)=="function"){this.options.onSuccess(a,b)}},onTextChangedFailure:function(a,b){this.editField.disabled=false;this.isSaving=false;this.isEditing=false;if(typeof(this.options.onFailure)=="function"){this.options.onFailure(a,b)}}},{textboxes:{},register:function(a){Prado.WebUI.TInPlaceTextBox.textboxes[a.options.TextBoxID]=a},setDisplayTextBox:function(c,b){var a=Prado.WebUI.TInPlaceTextBox.textboxes[c];if(a){if(b){a.enterEditMode(null)}else{a.exitEditMode(null)}}},setReadOnly:function(c,b){var a=Prado.WebUI.TInPlaceTextBox.textboxes[c];if(a){a.readOnly=b}}});
