function loadPostCommentBox(commentBoxId, itemId) {
	var ih = '';
	ih += '<form action="javascript:postComment(\''+ commentBoxId +'\', '+ itemId +');" style="margin:0;">';
	ih += '<textarea id="' + commentBoxId + '_content" rows="5" style="width: 95%;" cols="40"></textarea>';
	ih += '<br />';
	ih += '<input id="'+commentBoxId+'_submit" type="submit" value="Post" />';
	ih += ' <a href="javascript:void(0);" onclick="javascript:$(\''+commentBoxId+'\').innerHTML=\'\';">Cancel</a>';
	ih += '</form>';

	$(commentBoxId).innerHTML = ih;

	$(commentBoxId + '_content').focus();
}

function postComment(commentBoxId, itemId) {
	var xmlhttp = getXMLHttp();
	if (!xmlhttp) {
		return;
	}

	$(commentBoxId + '_submit').disabled = true;

	var content = $(commentBoxId + '_content').value;

	var obj = {
		'func' : 'postComment',
		'itemId' : itemId,
		'content' : content
	};

	//var request = obj.toJSONString();
	var request = Object.toJSON(obj);

	xmlhttp.open('POST', '/todo/todo_ajax.php?request=' + escape(request), true);
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4) {
			var response = xmlhttp.responseText;
			var res = response.evalJSON();

			if (res.success) {
				var ih = '<div class="comment">';
				ih += '<small>' + res.username + ' just said:</small><br />';
				ih += res.content + '</div>';

				$('comments').innerHTML += ih;

				$(commentBoxId).innerHTML = '';

				//update number of comments
				var num = parseInt($('numComments').innerHTML) + 1;
				$('numComments').innerHTML = (num);

				if (num == 1) {
					$('numCommentsPlural').innerHTML = '';
				} else {
					$('numCommentsPlural').innerHTML = 's';
				}
			}
		}
	}
	xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlhttp.send(null);
}

function loadItemsByTag(listId, tagId, sortField, sortOrder) {
	var obj = {
		'func' : 'loadItemsByTag',
		'listId' : listId,
		'tagId' : tagId,
		'sortField': sortField,
		'sortOrder': sortOrder
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var ajax = new Ajax.Updater(
		'todoItemDisplay',
		'/todo/todo_ajax.php',
		{
			method: 'post',
			parameters: 'request=' + param,
			evalScripts: true
		});
}

function showHideNewListBox(event) {
	var id = $F(event.target);

	if (id == -1) {
		Element.show('newListDiv');
		$('listTitle').focus();
	} else {
		Element.hide('newListDiv');
	}
}

/************************************************************************/

function toggleFolderCheck(event) {
	var linkId = Event.element(event).id;;
	var linkArr = linkId.split('_');
	var folderId = linkArr[1];

	var isChecked = !!$F(linkId);

	var obj = {
		func: 'toggleAllListsInFolder',
		folderId: folderId,
		isChecked: isChecked,
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var ajax = new Ajax.Request(
		'/todo/todo_ajax.php',
		{
			method: 'post',
			parameters: 'request=' + param,
			onComplete: function() {
				loadTodoListsView();
				loadSubscribedLists();
				loadSubscribedCommZones();
				loadTodoStatusView();
				loadTodoTagsView();
				loadTodoMainView();
			}
		});
}

function toggleList(event) {
	var linkId = Event.element(event).id;
	var linkArr = linkId.split('_');
	var listId = linkArr[1];

	var obj = {
		func: 'toggleList',
		listId: listId,
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var ajax = new Ajax.Request(
		'/todo/todo_ajax.php',
		{
			method: 'post',
			parameters: 'request=' + param,
			onComplete: function() {
				loadTodoListsView();
				loadSubscribedLists();
				loadSubscribedCommZones();
				loadTodoStatusView();
				loadTodoTagsView();
				loadTodoMainView();
			}
		});
}

function toggleFolder(event) {
	var linkId = Event.element(event).id;
	var linkArr = linkId.split('_');
	var folderId = linkArr[1];

	var obj = {
		func: 'toggleFolder',
		folderId: folderId,
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var ajax = new Ajax.Request(
		'/todo/todo_ajax.php',
		{
			method: 'post',
			parameters: 'request=' + param,
			onComplete: function() {
				loadTodoListsView();
				loadSubscribedLists();
				loadSubscribedCommZones();
			}
		});
}

function setTodoTag(event) {
	var linkId = Event.element(event).id;
	var linkArr = linkId.split('_');
	var tagId = linkArr[1];

	var obj = {
		func: 'setTodoTag',
		tagId: tagId,
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var ajax = new Ajax.Request(
		'/todo/todo_ajax.php',
		{
			method: 'post',
			parameters: 'request=' + param,
			onComplete: function() {
				loadTodoTagsView();
				loadTodoMainView();
			}
		});
}

function setTodoStatus(event) {
	var linkId = Event.element(event).id;
	var linkArr = linkId.split('_');
	var status = linkArr[1];

	var obj = {
		func: 'setTodoStatus',
		status: status,
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var ajax = new Ajax.Request(
		'/todo/todo_ajax.php',
		{
			method: 'post',
			parameters: 'request=' + param,
			onComplete: function() {
				loadTodoStatusView();
				loadTodoMainView();
			}
		});
}

function setTodoSortBy(event) {
	var sortBy = $F('todoSort');

	var obj = {
		func: 'setTodoSortBy',
		sortBy: sortBy,
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var ajax = new Ajax.Request(
		'/todo/todo_ajax.php',
		{
			method: 'post',
			parameters: 'request=' + param,
			onComplete: function() {
				loadTodoMainView();
			}
		});
}

function setTodoSortOrder(event) {
	var sortOrder = $F('todoSortOrder');

	var obj = {
		func: 'setTodoSortOrder',
		sortOrder: sortOrder,
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var ajax = new Ajax.Request(
		'/todo/todo_ajax.php',
		{
			method: 'post',
			parameters: 'request=' + param,
			onComplete: function() {
				loadTodoMainView();
			}
		});
}

function setTodoSearchTerm() {
	var searchTerm = $F('searchTerm');

	var obj = {
		func: 'setTodoSearchTerm',
		searchTerm: searchTerm,
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var ajax = new Ajax.Request(
		'/todo/todo_ajax.php',
		{
			method: 'post',
			parameters: 'request=' + param,
			onComplete: function() {
				loadTodoMainView();
			}
		});
}

function clearTodoSearchTerm() {
	var searchTerm = '';

	var obj = {
        func: 'setTodoSearchTerm',
        searchTerm: searchTerm,
		state: todoState
    };

    //var param = obj.toJSONString();
	var param = Object.toJSON(obj);

    var ajax = new Ajax.Request(
        '/todo/todo_ajax.php',
        {
            method: 'post',
            parameters: 'request=' + param,
            onComplete: function() {
                loadTodoMainView();
            }
        });
}

/************************************************************************/

function closeActionMenus() {
	var menus = document.getElementsByClassName('actionMenu');

	for (var i=0; i < menus.length; i++) {
		Element.remove(menus[i].id);
		$(menus[i].id.substring(0, menus[i].id.indexOf('_popup'))).src = '/include/images/action_menu.gif';
	}
}

function loadFolderMenu(event) {
	var linkId = Event.element(event).id;
	var linkArr = linkId.split('_');
	var folderId = linkArr[1];

	var obj = {
		func: 'loadFolderMenu',
	  	folderId: folderId,
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var divId = linkId + '_popup';

	if ($(divId)) {
		Element.remove(divId);
		$(linkId).src = '/include/images/action_menu.gif';
		return;
	}

	closeActionMenus();

	$(linkId).src = '/include/images/action_menu_flip.gif';

	//get the position and size of the link
	var pos = getPosition($(linkId));
	var dim = Element.getDimensions(linkId);

	var div = document.createElement('DIV');
	div.id = divId;
	div.className = 'actionMenu';
	div.style.top = (pos.y + dim.height) + 'px';
	div.style.left = (pos.x + 0) + 'px';

	div.innerHTML = 'Loading...';

	document.body.appendChild(div);

	var ajax = new Ajax.Updater(
		divId,
		'/todo/todo_ajax.php',
		{
			method: 'get',
			parameters: 'request=' + param
		});
}

function loadListMenu(event) {
	var linkId = Event.element(event).id;
	var linkArr = linkId.split('_');
	var listId = linkArr[1];

	var obj = {
		func: 'loadListMenu',
		listId: listId,
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var divId = linkId + '_popup';

	if ($(divId)) {
		Element.remove(divId);
		$(linkId).src = '/include/images/action_menu.gif';
		return;
	}

	closeActionMenus();

	$(linkId).src = '/include/images/action_menu_flip.gif';

	//get the position and size of the link
	var pos = getPosition($(linkId));
	var dim = Element.getDimensions(linkId);

	var div = document.createElement('DIV');
	div.id = divId;
	div.className = 'actionMenu';
	div.style.top = (pos.y + dim.height) + 'px';
	div.style.left = (pos.x + 0) + 'px';

	div.innerHTML = 'Loading...';

	document.body.appendChild(div);

	var ajax = new Ajax.Updater(
	    divId,
		'/todo/todo_ajax.php',
		{
			method: 'get',
			parameters: 'request=' + param
		});
}

function loadItemMenu(event) {
	var linkId = Event.element(event).id;
	var linkArr = linkId.split('_');
	var itemId = linkArr[1];

	var obj = {
		func: 'loadItemMenu',
		itemId: itemId,
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var divId = linkId + '_popup';

	if ($(divId)) {
		Element.remove(divId);
		$(linkId).src = '/include/images/action_menu.gif';
		return;
	}

	closeActionMenus();

	$(linkId).src = '/include/images/action_menu_flip.gif';

	//get the position and size of the link
	var pos = getPosition($(linkId));
	var dim = Element.getDimensions(linkId);

	var div = document.createElement('DIV');
	div.id = divId;
	div.className = 'actionMenu';
	div.style.top = (pos.y + dim.height) + 'px';
	div.style.left = (pos.x + 0) + 'px';

	div.innerHTML = 'Loading...';

	document.body.appendChild(div);

	var ajax = new Ajax.Updater(
		divId,
		'/todo/todo_ajax.php',
		{
			method: 'get',
			parameters: 'request=' + param
		});
}

/*************************************************************************/

function loadSubscribedLists() {
	if (!$('listSubscriptions')) {
		return;
	}
	
	var obj = {
		func: 'loadSubscribedLists',
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var ajax = new Ajax.Updater(
		'listSubscriptions',
		'/todo/todo_ajax.php',
		{
			method: 'get',
			parameters: 'request=' + param,
			evalScripts: true
		});
}

function loadSubscribedCommZones() {
	if (!$('czSubscriptions')) {
		return;
	}

	var obj = {
		func: 'loadSubscribedCommZones',
		state: todoState
	};

	var param = Object.toJSON(obj);

	var ajax = new Ajax.Updater(
		'czSubscriptions',
		'/todo/todo_ajax.php',
		{
			method: 'get',
			parameters: 'request=' + param,
			evalScripts: true
		});
}

function loadTodoMainView(offset) {
	if (offset == null) {
		var obj = {
			func: 'loadTodoMainView',
			state: todoState
		};
	} else {
		var obj = {
			func: 'loadTodoMainView',
			offset: offset,
			state: todoState
		};
	}

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var ajax = new Ajax.Updater(
		'todoMainDiv',
		'/todo/todo_ajax.php',
		{
			method: 'get',
			parameters: 'request=' + param,
			evalScripts: true
		});
}

function loadTodoListsView() {
	var obj = {
		func: 'loadTodoListsView',
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var ajax = new Ajax.Updater(
		'todoListsDiv',
		'/todo/todo_ajax.php',
		{
			method: 'get',
			parameters: 'request=' + param,
			evalScripts: true
		});
}

function loadTodoQuickAddView() {
	var obj = {
		func: 'loadQuickAddView',
		state: todoState
	};

	var param = Object.toJSON(obj);

	var ajax = new Ajax.Updater(
		'todoQuickAddDiv',
		'/todo/todo_ajax.php',
		{
			method: 'get',
			parameters: 'request=' + param,
			evalScripts: true
		});
}

function loadTodoTagsView() {
	var obj = {
		func: 'loadTodoTagsView',
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var ajax = new Ajax.Updater(
		'todoTagsDiv',
		'/todo/todo_ajax.php',
		{
			method: 'get',
			parameters: 'request=' + param,
			evalScripts: true
		});
}

function loadTodoStatusView() {
	var obj = {
		func: 'loadTodoStatusView',
		state: todoState
	};

	//var param = obj.toJSONString();
	var param = Object.toJSON(obj);

	var ajax = new Ajax.Updater(
		'todoStatusDiv',
		'/todo/todo_ajax.php',
		{
			method: 'get',
			parameters: 'request=' + param,
			evalScripts: true
		});
}

/******************************************************************/

function pageThroughResults(event) {
    var linkId = Event.findElement(event, 'a').id;
    var linkArr = linkId.split('_');
    var type = linkArr[1];
    var currentOffset = parseInt(linkArr[2]);
    var pageSize = parseInt(linkArr[3]);
    var totalItems = parseInt(linkArr[4]);

    if (type == 'first') {
        var offset = 0;
    } else if (type == 'prev') {
        var offset = currentOffset - pageSize;
    } else if (type == 'next') {
        var offset = currentOffset + pageSize;
    } else if (type == 'last') {
        var offset = totalItems - pageSize + 1;
    }

    loadTodoMainView(offset);
}

function dropTodoItem() {
}

function quickAddAction() {
	var title = $F('quickAddTitle');
	var listId = $F('quickAddListId');

	if (title.length <= 0) {
		return;
	}

	var obj = {
		func: 'quickAddItem',
		listId: listId,
		title: title,
		state: todoState
	};

	var param = escape(Object.toJSON(obj));

	var ajax = new Ajax.Request(
		'/todo/todo_ajax.php',
		{
			method: 'post',
			parameters: 'request=' + param,
			onComplete: function() {
				loadTodoMainView();
				loadTodoQuickAddView();
			}
		});
}

/******************************************************************/

function todoOnLoad() {
	if ($('todoListsDiv')) {
		loadTodoListsView();
	}
	if ($('todoQuickAddDiv')) {
		loadTodoQuickAddView();
	}
	if ($('todoTagsDiv')) {
		loadTodoTagsView();
	}
	if ($('todoStatusDiv')) {
		loadTodoStatusView();
	}
	if ($('todoMainDiv')) {
		loadTodoMainView();
	}
	if ($('listSubscriptions')) {
		loadSubscribedLists();
	}
	if ($('czSubscriptions')) {
		loadSubscribedCommZones();
	}
}

Event.observe(window, 'load', todoOnLoad, false);

