var inInlineEditMode = false;

EditBox = Class.create();
EditBox.prototype = {
	initialize: function(elem){
		this.fieldName = 'value';
		this.elem = elem;
		this.origInnerHTML = this.elem.innerHTML;
		new Insertion.After(elem, '<div class="inlineedit" />');
		this.editDiv = elem.nextSibling;

		var name = this.elem.getAttribute("textname");
		new Ajax.Updater(this.editDiv, "/WorldWW/text/editText.do", {
			method: 'get', 
			parameters: "modus=ajax&name=" + escape(name),
			onComplete: this.textEditLoaded.bind(this)
		});
	},
	textEditLoaded: function() {
		var fckrichtext = $(this.fieldName+'___Frame');
		if (fckrichtext) {
			$('textEditForm').texteditChanged = this.editChange.bind(this);
		} else {
			this.editTextarea = $(this.fieldName);
			this.editTextarea.onkeyup = this.editChange.bind(this);
		}
		$('textSaveButton').onclick = this.editSave.bind(this);
		$('textCancelButton').onclick = this.editCancel.bind(this);
	},
	editChange: function(editorInstance) {
		if (!inInlineEditMode)
			return;
		if (editorInstance && editorInstance.GetHTML)
			this.elem.innerHTML = editorInstance.GetHTML();
		else
			this.elem.innerHTML = $F(this.fieldName).escapeHTML();
	},
	editSave: function() {
		var newText;
		if (typeof FCKeditorAPI != "undefined" && $(this.fieldName+'___Frame')) {
			var editorInstance = FCKeditorAPI.GetInstance(this.fieldName);
			this.elem.innerHTML = editorInstance.GetHTML();
			newText = this.elem.innerHTML;
		} else
			newText = $F(this.fieldName);
		new Ajax.Updater(this.editDiv, "/WorldWW/text/editText.do", {
			method: 'post', 
			parameters: { name: $F('textEditName'), value: newText }
		});
		this.close();
		return false;
	}, 
	editCancel: function() {
		this.close();
		this.elem.innerHTML = this.origInnerHTML;
	}, 
	close: function() {
		this.elem.parentNode.removeChild(this.editDiv);
		inInlineEditMode = false;
	}
}

function removeLinks(elem) {
	if (!elem)
		return;
	if (typeof elem.href != 'undefined') {
		elem.savedonclick = elem.onclick;
		elem.onclick = verifyEditMode;
	}
	removeLinks(elem.parentNode);
}

function verifyEditMode(event) {
	if (inInlineEditMode)
		return false;
	if (!event) event = window.event;
	var elem = Event.element(event);
	if (elem.savedonclick)
		return elem.savedonclick();
	return true;
}

function FCKeditor_OnComplete( editorInstance )
{
	if (editorInstance.LinkedField.form.texteditChanged) {
		editorInstance.Events.AttachEvent( 'OnSelectionChange', editorInstance.LinkedField.form.texteditChanged ) ;
    }
}

function editMe(event)
{
	var elem = Event.element(event);
	elem = elem.previousSibling;
	if (isInForm(elem)) {
		var name = elem.getAttribute("textname");
		window.open('/WorldWW/text/editText.do?name='+ escape(name), 'textedit', 'height=450,width=600,toolbar=no' );
	} else {
		new EditBox(elem);
		inInlineEditMode = true;
	}
	Event.stop(event);
	return false;
}

function isInForm(elem) 
{
	if (elem && elem.nodeName) {
		if(elem.nodeName == "FORM")
			return true;
		return isInForm(elem.parentNode);
	}
	return false;
}

function makeEditable(elem)
{
	new Insertion.After(elem, '<img src="/images/edit.gif" class="inlineedit" />');
	var img = elem.nextSibling;
	Event.observe(img, 'click', editMe);
	// do not follow link if you're editing a link
	removeLinks(img);
}

function inlineeditInit()
{
	var editableElements = $$('span[class="inlineedit"]');
	for (var i = 0; i < editableElements.length; i++)
		makeEditable(editableElements[i]);
}