Ajax.InPlaceRichEditor = Class.create();
Object.extend(Ajax.InPlaceRichEditor.prototype, Ajax.InPlaceEditor.prototype);
Object.extend(Ajax.InPlaceRichEditor.prototype,
{
	createEditField: function() {
		var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
		var fld;
		if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
		  fld = document.createElement('input');
		  fld.type = 'text';
		  var size = this.options.size || this.options.cols || 0;
		  if (0 < size) fld.size = size;
		} else {
		  fld = document.createElement('textarea');
		  fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
		  fld.cols = this.options.cols || 40;
		}
		fld.name = this.options.paramName;
		fld.id = this.element.id + '_editor';
		fld.value = text; // No HTML breaks conversion anymore
		fld.className = 'editor_field';
		if (this.options.submitOnBlur)
		  fld.onblur = this._boundSubmitHandler;
		this._controls.editor = fld;
		if (this.options.loadTextURL)
		  this.loadExternalText();
		this._form.appendChild(this._controls.editor);
	},
	enterEditMode: function(e)
	{
		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);
		tinyMCE.execCommand("mceAddControl", false, this._controls.editor.id);
		
    		if (!this.options.loadTextURL)
      	  this.postProcessEditField();
    		if (e) Event.stop(e);
	},
	leaveEditMode: function() {
		tinyMCE.execCommand("mceRemoveControl", false, this._controls.editor.id);
		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');
	},
	handleFormSubmission: function(e) {
		var form = this._form;
		var value = tinymce.EditorManager.getInstanceById(this._controls.editor.id).getContent();
		this.prepareSubmission();
		var params = 'value=' + escape(value);
		if (Object.isString(params))
		  params = params.toQueryParams();
		params.editorId = this.element.id;
		if (this.options.htmlResponse) {
		  var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
		  Object.extend(options, {
			parameters: params,
			onComplete: this._boundWrapperHandler,
			onFailure: this._boundFailureHandler
		  });
		  new Ajax.Updater({ success: this.element }, this.url, options);
		} else {
		  var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
		  Object.extend(options, {
			parameters: params,
			onComplete: this._boundWrapperHandler,
			onFailure: this._boundFailureHandler
		  });
		  new Ajax.Request(this.url, options);
		}
		if (e) Event.stop(e);
	}

});