
function deletePost(node, id)
{
	node.onclick = null;

	var a = new ajaxCall();
	a.send("/scripts/jig_comment_delete.php", { 'id' : id }, _on_deletePostComplete, {'node':node});
}


function _on_deletePostComplete(result, data, userdata)
{
	var code = "ERROR";
	if (result)
	{
		if (data.indexOf("OK") == 0) code = "OK";
	}

	if (code != "OK") return;
	
	var node = findParentByClass(userdata.node, "post");
	if (!node) return;
	node.parentNode.removeChild(node);
}

// ------

function ajax_deletePuzzle(id, undo, callback, userdata)
{
	$.ajax({
		  type: 'POST',
		  url: "/ajax/delete_puzzle.php",
		  data: {id:id,undo:undo},
		  success: function(data, textStatus, jqXHR)
		  {
			  callback(data.result, userdata);
		  },
		  dataType: 'json'
		});
}

function deletePuzzle(node, id, title)
{
	var node = $(node).parents('.puzzle_item');
	var cover = createCover(node);
	cover.html('<div>Deleting puzzle ...</div>');
	ajax_deletePuzzle(id, false, _on_deletePuzzleComplete, {node:cover, id:id});
}


function _on_deletePuzzleComplete(result, userdata)
{
	if (!result) return; // unable to delete puzzle
	userdata.node.html('<div><p>Puzzle deleted</p><span class="js_link" onclick="undeletePuzzle(this, \''+userdata.id+'\')">Undo</span></div>');
}

function undeletePuzzle(node, id)
{
	var cover = $(node).parents('.cover');
	cover.html('<div>Restoring puzzle ...</div>');
	ajax_deletePuzzle(id, true, _on_restoreDeleteComplete, cover);
}

function _on_restoreDeleteComplete(result, cover)
{
	if (!result) return; // unable to undelete puzzle
	cover.remove();
}

// -------

function findParentByClass(node, name)
{
	while (node.className.split(' ').indexOf(name) < 0)
	{
		node = node.parentNode;
		if (!node) return null
	}
	return node;
}

function findChildNodeByClass(node, name)
{
	if (node.className == name) return node;
	for (var k in node.childNodes)
	{
		var n = node.childNodes[k];
		var r = findChildNodeByClass(n, name);
		if (r) return r;
	}
	return null;
}

function createCover(node)
{
	var c = $('<div class="cover" style="width:'+node.width()+'px;height:'+node.height()+'px;position:absolute;"></div>');
	node.append(c);
	return c;
}

function ajax_setBookmark(id, state, callback, userdata)
{
	$.ajax({
		  type: 'POST',
		  url: "/ajax/set_bookmark.php",
		  data: {id:id,set:state},
		  success: function(data, textStatus, jqXHR)
		  {
			  callback(data.result, userdata);
		  },
		  dataType: 'json'
		});
}

function removeBookmarkFromList(node, id)
{
	var node = $(node).parents('.puzzle_item');
	var cover = createCover(node);
	cover.html('<div>Removing bookmark ...</div>');
	ajax_setBookmark(id, 0, _on_removeBookmarkFromListComplete, {node:cover, id:id});
}

function _on_removeBookmarkFromListComplete(result, userdata)
{
	if (!result) return; // unable to remove bookmark
	userdata.node.html('<div><p>Bookmark removed</p><span class="js_link" onclick="restoreBookmark(this, \''+userdata.id+'\')">Undo</span></div>');
}

function restoreBookmark(node, id)
{
	var cover = $(node).parents('.cover');
	cover.html('<div>Restoring bookmark ...</div>');
	ajax_setBookmark(id, 1, _on_restoreBookmarkComplete, cover);
}

function _on_restoreBookmarkComplete(result, cover)
{
	if (!result) return; // unable to add bookmark
	cover.remove();
}

// -----


function bookmarkFromList(node, id)
{
	node.onclick = null;
	
	ajax_setBookmark(id, 1, _on_bookmarkFromListComplete, node);
	
	node.innerHTML = "Bookmarking ...";
	node.className = "js_disabled";
}

function bookmarkFromPuzzle(node, id)
{
	bookmarkFromList(node, id);
}

function _on_bookmarkFromListComplete(result, node)
{
	if (!result) return; // unable to add bookmark

	node.innerHTML = "Bookmarked";
	node.className = "js_disabled";
}

// ----


function addFavorite(node, username)
{
	node.onclick = null;
	
	var a = new ajaxCall();
	a.send("/scripts/jig_favorite_add.php", { 'username' : username }, _on_addFavoritesComplete, {'node':node});
	node.innerHTML = "Adding to favorites ...";
	node.className = "js_disabled";
}

function _on_addFavoritesComplete(result, data, userdata)
{
	var code = "ERROR";
	if (result)
	{
		if (data.indexOf("OK") == 0) code = "OK";
	}
	var node = userdata.node;
	switch (code)
	{
	case "OK":
		node.innerHTML = "Added as favorite";
		node.className = "js_disabled";
		break;
	case "ERROR":
		break;
	}
}

function removeFavorite(node, username)
{
	node.onclick = null;

	var a = new ajaxCall();
	a.send("/scripts/jig_favorite_remove.php", { 'username' : username }, _on_removeFavoriteComplete, {'node':node});
	
	node.innerHTML = "Removing ...";
	node.className = "js_disabled";
}

function _on_removeFavoriteComplete(result, data, userdata)
{
	var code = "ERROR";
	if (result)
	{
		if (data.indexOf("OK") == 0) code = "OK";
	}
	
	userdata.node.innerHTML = data;
	
	if (code != "OK") return;
	
	var node = findParentByClass(userdata.node, "favorite");
	if (!node) return;
	node.parentNode.removeChild(node);
}

// ---- messages ----

function messageMarkAsRead(node, message_id)
{
	node.onclick = null;

	var a = new ajaxCall();
	a.send("/scripts/jig_message_read.php", { 'id' : message_id}, _on_messageMarkAsReadComplete, {'node':node});
	
	node.className += " disabled";
}

function _on_messageMarkAsReadComplete(result, data, userdata)
{
	var code = "ERROR";
	if (result)
	{
		if (data.indexOf("OK") == 0) code = "OK";
	}
	
	if (code != "OK") return;
	
	var node = findParentByClass(userdata.node, "message");
	if (!node) return;
	node.parentNode.removeChild(node);
}

// help

var g_help = null;
var g_help_visible = false;

function showTip(e, id)
{
	hideTip();
	if (g_help == null)
	{
		g_help = document.createElement('div');
		g_help.className = 'help_box';
	}

	var pos = getElementPosition(e);
	g_help.style.left = (pos.x+pos.w+5) + 'px';
	g_help.style.top = (pos.y) + 'px';
		
	switch (id)
	{
	case "no_ads":
		g_help.innerHTML = "No ads will be shown anywhere on jigidi.com";
		break;
	case "favorites":
		g_help.innerHTML = "Keep track of your favorite puzzle creators. Show only puzzles by favorites on your frontpage.";
		break;
	case "profile_filter":
		g_help.innerHTML = "Enable this if you do not want to see any puzzles that may be offensive.<br>Minors should enable this option.";
		break;
	case "comment_delete":
		g_help.innerHTML = "Delete this comment";
		g_help.style.width = 'auto';
		g_help.style.paddingTop = '4px';
		g_help.style.paddingBottom = '5px';
		break;
	}

	g_help_visible = true;
	document.body.appendChild(g_help);
}

function hideTip()
{
	if (!g_help_visible) return;
	document.body.removeChild(g_help);	
	g_help_visible = false;
}

