var currentNewBlogEntryID = 0;
function generateNewBlogEntryInsertionID() {
	currentNewBlogEntryID--;
	return currentNewBlogEntryID;
}
//--------------
function createBlogEntryStructure(id) {
	return '<div class="blogEntry" id="blogEntry_'+id+'"></div>';
}

function replaceBlogEntry(id, newEntry) {
	Element.update('blogEntry_'+id, newEntry);
	new Effect.Highlight('blogEntry_'+id);
}

function updateBlogEntryIDs(oldID, newID) {
	$('blogEntry_'+oldID).id = 'blogEntry_'+newID;
}

function buildBlogEntry(id, parentID) {
	new Insertion.Bottom('blogEntryList_'+parentID,createBlogEntryStructure(id));
	loadBlogEntry(id);
}

function destroyBlogEntry(id) {
	Element.remove('blogEntry_'+id);
}

function markBlogEntryBusy(id) {
	var c = new Element.ClassNames('blogEntry_'+id);
	c.add('busy');
}

function unmarkBlogEntryBusy(id) {
	var c = new Element.ClassNames('blogEntry_'+id);
	c.remove('busy');
}
//--------------- New BlogEntry
function newBlogEntry(parentID) {
	var insertionID = generateNewBlogEntryInsertionID();
	var url = baseurl+"access/blogging/newblogentry";
	var pars = "&sequence="+insertionID;
	pars += "&blog="+parentID;

	new Insertion.Top('blogEntryList_'+parentID,createBlogEntryStructure(insertionID));
	markBlogEntryBusy(insertionID);

	var myAjax = new Ajax.Request(
	url,
	{
		method: 'post',
		postBody: pars,
		onComplete: addBlogEntrySucceeded,
		onFailure: addBlogEntryFailed
	});
}

function addBlogEntrySucceeded(originalRequest, json) {
	unmarkBlogEntryBusy(json.id);

	replaceBlogEntry(json.id, originalRequest.responseText);

	$('blogEntry_'+json.id).scrollTo();

	evaluateJSONScript(json);
}

function addBlogEntryFailed(originalRequest, json) {
	alert('Failed to fetch BlogEntry Editor.'+originalRequest.responseText);
}
//--------------- Save BlogEntry
function saveBlogEntry(id) {
	markBlogEntryBusy(id);

	var url = baseurl+"access/blogging/saveblogentry";
	var pars = Form.serialize($('blogEntryForm_'+id));
	if (pars.length>0) pars += "&";
	pars += "id="+id;

	var parent = $('blogEntry_'+id).parentNode;

	pars += "&blog="+parent.id.substring(14);

	var myAjax = new Ajax.Request(
		url,
		{
			method: 'post',
			postBody: pars,
			onComplete: saveBlogEntrySucceeded,
			onFailure: saveBlogEntryFailed
		});
}

function saveBlogEntrySucceeded(originalRequest, json) {
	unmarkBlogEntryBusy(json.originalID);
	updateBlogEntryIDs(json.originalID, json.id);
	replaceBlogEntry(json.id, originalRequest.responseText);
	evaluateJSONScript(json);
}

function saveBlogEntryFailed(originalRequest, json) {
	alert('Failed to Save BlogEntry to server.'+originalRequest.responseText);
}
//--------------- load existing blogEntry
function loadBlogEntry(id) {
	markBlogEntryBusy(id);

	var url = baseurl+"access/blogging/loadblogentry";
	var pars = "id="+id;

	var myAjax = new Ajax.Request(
		url,
		{
			method: 'post',
			postBody: pars,
			onComplete: loadBlogEntrySucceeded,
			onFailure: loadBlogEntryFailed
		});
}

function loadBlogEntrySucceeded(originalRequest, json) {
	replaceBlogEntry(json.id, originalRequest.responseText);
	unmarkBlogEntryBusy(json.id);
	evaluateJSONScript(json);
}

function loadBlogEntryFailed(originalRequest, json) {
	alert('Failed to Load BlogEntry from server.'+originalRequest.responseText);
}

//--------------- edit existing blogEntry
function editBlogEntry(id) {

	markBlogEntryBusy(id);

	var url = baseurl+"access/blogging/editblogentry";
	var pars = "&id="+id;


	var myAjax = new Ajax.Request(
		url,
		{
			method: 'post',
			postBody: pars,
			onComplete: editBlogEntrySucceeded,
			onFailure: editBlogEntryFailed
		});
}

function editBlogEntrySucceeded(originalRequest, json) {
	replaceBlogEntry(json.id, originalRequest.responseText);
	unmarkBlogEntryBusy(json.id);
	evaluateJSONScript(json);
}

function editBlogEntryFailed(originalRequest, json) {
	alert('Failed to fetch BlogEntry editor from server.'+originalRequest.responseText);
}

function cancelEditBlogEntry(id) {
	if (id <= 0) {
		deleteBlogEntry(id);
	} else {
		if (confirm("Are you sure? This will discard any changes.")) {
			loadBlogEntry(id);
		}
	}
}

//------------ Delete BlogEntry
function deleteBlogEntry(id) {
	if (id <= 0) {
		destroyBlogEntry(id);
	} else	if (confirm("Are you sure you want to delete this BlogEntry? All content will be lost.")) {
		markBlogEntryBusy(id);

		var url = baseurl+"access/blogging/deleteblogentry";
		var pars = "id="+id;

		var myAjax = new Ajax.Request(
			url,
			{
				method: 'post',
				postBody: pars,
				onComplete: deleteBlogEntrySucceeded,
				onFailure: deleteBlogEntryFailed
			});
	}
}

function deleteBlogEntrySucceeded(originalRequest, json) {
	alert(originalRequest.responseText);
	destroyBlogEntry(json.id);
}

function deleteBlogEntryFailed(originalRequest, json) {
	alert('Failed to delete BlogEntry from server.'+originalRequest.responseText);
}
