function edit(obj, handler)
{
	Element.hide(obj);
	Element.show(obj.id+"_editor");
	
	Event.observe(obj.id+'_save', 'click', function(){saveChanges(obj, handler)}, false);
	Event.observe(obj.id+'_cancel', 'click', function(){cleanUp(obj)}, false);
}

function showAsEditable(obj, clear)
{
	if (!clear)
	{
		Element.addClassName(obj, 'editable');
	}
	else
	{
		Element.removeClassName(obj, 'editable');
	}
}

function saveChanges(obj, handler)
{
	var new_content	=  escape($F(obj.id+'_edit'));

	obj.innerHTML	= "Saving...";
	cleanUp(obj, true);

	var success	= function(t){editComplete(t, obj);}
	var failure	= function(t){editFailed(t, obj);}

	var pars = 'id='+obj.id+'&content='+new_content;
	var myAjax = new Ajax.Request(handler, {method:'post', postBody:pars, onSuccess:success, onFailure:failure});
}

function cleanUp(obj, keepEditable)
{
	Element.hide(obj.id+'_editor');
	Element.show(obj);
	if (!keepEditable) 
		showAsEditable(obj, true);
}

function editComplete(t, obj)
{
	obj.innerHTML	= t.responseText;
	showAsEditable(obj, true);
}

function editFailed(t, obj)
{
	obj.innerHTML	= 'Sorry, the update failed.';
	cleanUp(obj);
}