var Lister = {
	
	updateStatus: function(postUrl, itemId, statusImg)
	{
		var newValue = !(statusImg.src.indexOf(1) > 0);
		
		var req = new AJAX.Request(postUrl, {
			method: "POST",
			json: true,
			parameters: ['id=' + itemId, 'value=' + Number(newValue)],
			onComplete: function(response)
			{
				if (response.responseJSON.result)
				{
					Images.change.bind(statusImg)();
				}
			}
		})
		
	},
	
	editItem: function(link)
	{
		var req = new AJAX.Request(Request.get('basepath') + '/users/api_check_activity', {
			method: "POST",
			json: true,
			asynchronous: false,
			parameters: ['digest=' + md5(link.getAttribute('href').split(Request.get('basepath')).pop())]
		});
		
		if (req.response.responseJSON.username)
		{
			var dia = new Dialog(PHPVars.get('edit_entry_message').fill({username: req.response.responseJSON.username}), [
				{
					label: PHPVars.get('yes'),
					callback: function(){
						document.location = link.getAttribute('href');
						dia.close();
					}
				},
				{
					label: PHPVars.get('no'),
					callback: 'close'
				}
			]);
		}
		else
		{
			document.location = link.getAttribute('href');
		}
	},
	
	deleteItem: function(postUrl, itemId, row, callback)
	{
		var dia = new Dialog(PHPVars.get('delete_entry_message'), [
			{
				label: PHPVars.get('yes'),
				callback: function(){
					var req = new AJAX.Request(postUrl, {
						method: "POST",
						json: true,
						parameters: ['id=' + itemId],
						onComplete : function(response)
						{
							if (callback) callback(itemId, row, response.responseJSON.result);	
							if (response.responseJSON.result)
							{
								DOM.disappear(row, 50, function(element){
									DOM.remove(element);
									//Explorer has problems with rendering (what a surprise)
									//Lets help him :D
									if (Browser.isIE())
									{
										DOM.hide($('layout_right'));
										DOM.show($('layout_right'));
									}
								});
							}
						}
					});
					dia.close();
				}
			},
			{
				label: PHPVars.get('no'),
				callback: 'close'
			}
		]);
	},
	
	deleteGroup: function(postUrl, itemId, row)
	{
		if (row.parentNode.rows.length == 1)
			Lister.deleteItem(postUrl, itemId, row);
		else
			new Dialog(PHPVars.get('delete_group_message'), [
				{
					label: 'Ok',
					callback: 'close'
				}
			]);
	},
	
	toggleGroup: function(tbody, action)
	{
		var rows = tbody.rows, length = rows.length;
		if (length > 1)
		{
			var state = rows[1].style.display == 'none' ? 'show' : 'hide';
			
			if (typeof action == 'undefined')
			{
				action = state;
			}
			else if (state != action) return;
			
			Images.change.apply(rows[0].cells[0].getElementsByTagName('img')[0]);
			
			for (var r = 1; r < length; r++)
			{
				DOM[action](rows[r]);
			}
		}
	},
	
	toggleGroups: function(table, action)
	{
		var tBodies = table.tBodies; length = tBodies.length;
		for (var t = 0; t < length; t++)
		{
			Lister.toggleGroup(tBodies[t], action);
		}
	},
	
	orderMoveUp: function(postUrl, itemId, row)
	{
		var parent = row.parentNode;
		var rows = parent.getElementsByTagName('tr');
		
		for(var rowId = 0; rowId < rows.length; rowId++)
		{
			var cRow = rows[rowId];
			
			if (cRow == row)
			{
				if (Lister.isTableHeader(rows[rowId - 1]))
				{
					// cant move up, first entry..
					return false;
				}
				
				var req = new AJAX.Request(postUrl, {
					method: "POST",
					json: true,
					parameters: ['id=' + itemId, 'direction=up'],
					onComplete : function(response)
					{
						if (response.responseJSON.result)
						{
							DOM.swap(rows[rowId - 1], row);
						}	
					}
				});
				
				return true;
			}
		}
	},
	
	orderMoveDown: function(postUrl, itemId, row)
	{
		var parent = row.parentNode;
		var rows = parent.getElementsByTagName('tr');
		
		for(var rowId = 0; rowId < rows.length; rowId++)
		{
			var cRow = rows[rowId];
			
			if (cRow == row)
			{
				if ((rowId + 1) == rows.length)
				{
					// cant move down, last entry..
					return false;
				}
				
				var req = new AJAX.Request(postUrl, {
					method: "POST",
					json: true,
					parameters: ['id=' + itemId, 'direction=down'],
					onComplete : function(response)
					{
						if (response.responseJSON.result)
						{
							DOM.swap(row, rows[rowId + 1]);
						}	
					}
				});
				
				return true;
			}
		}
	},
	
	isTableHeader: function(row)
	{
		var rTh = row.getElementsByTagName('th');
		return (rTh.length > 0);
	}
};

Lister.Hierarchy = {
	
	toggle : function(postUrl, itemId, element)
	{
		var li = DOM.up(element, 'li');
		var ul = li.getElementsByTagName('ul')[0];
		
		if (DOM.hasClassName(element, 'hierarchy-visible'))
		{
			DOM.removeClassName(element, 'hierarchy-visible');
			DOM.addClassName(element, 'hierarchy-hidden');
			DOM.hide(ul);
		}
		else
		{
			DOM.removeClassName(element, 'hierarchy-hidden');
			DOM.addClassName(element, 'hierarchy-visible');
			DOM.show(ul);
		}
		
		//Explorer has problems with rendering (what a surprise)
		//Lets help him :D
		if (Browser.isIE())
		{
			DOM.hide($('layout_right'));
			DOM.show($('layout_right'));
		}
	},
		
	orderMoveUp: function(postUrl, itemId, row)
	{
		var li = DOM.up(row, 'li');
		var up = DOM.previous(li);
		if (up)
		{	
			var req = new AJAX.Request(postUrl, {
				method: "POST",
				json: true,
				parameters: ['id=' + itemId, 'direction=up'],
				onComplete : function(response)
				{
					if (response.responseJSON.result)
					{
						DOM.swap(li, up);
					}
				}
			});
		}
	},
	
	orderMoveDown: function(postUrl, itemId, row)
	{
		var li = DOM.up(row, 'li');
		var down = DOM.next(li);
		if (down)
		{
			var req = new AJAX.Request(postUrl, {
				method: "POST",
				json: true,
				parameters: ['id=' + itemId, 'direction=down'],
				onComplete : function(response)
				{
					if (response.responseJSON.result)
					{
						DOM.swap(li, down);
					}
				}
			});
		}
	},
	
	deleteCallback : function(id, row, result)
	{
		if (result && DOM.up(row, 'li'))
		{
			var parent = DOM.up(row, 'ul');
			if (DOM.children(parent).length == 1)
			{
				var paragraphs = DOM.previous(parent).getElementsByTagName('p');
				for (var i = 0; i < paragraphs.length; i++)
				{
					if (DOM.hasClassName(paragraphs[i], 'hierarchy-(hidden|visible)'))
					{
						DOM.removeClassName(paragraphs[i], 'hierarchy-(hidden|visible)');
						paragraphs[i].removeAttribute('onclick');
					}
				}
			}
		}
	}
	
};
