var ignore_children = 0;
var ignore_parent = 0;
var current_item = "";

function treelist_collapse(handle, children)
{
	handle.src = handle.src.replace(/collapse/gi, 'expand');
	handle.onclick = function() { treelist_expand(handle, children); };
	
	var children_obj = document.getElementById(children);
	children_obj.style.display = "none";
}

function treelist_expand(handle, children)
{
	handle.src = handle.src.replace(/expand/gi, 'collapse');
	handle.onclick = function() { treelist_collapse(handle, children); };
	
	var children_obj = document.getElementById(children);
	children_obj.style.display = "block";
}

function treelist_check(parent, me, children)
{
	var me_obj = document.getElementById(me);
	var parent_obj = document.getElementById(parent);
	
	if(me_obj.checked)
	{
		me_obj.checked = false;
		
		if(!ignore_children && children)
		{
			var children_obj = document.getElementById(children);
			var items = children_obj.getElementsByTagName("li");
			
			for (var i = 0, n = items.length; i < n; i++)
			{
				var check_obj = items[i].getElementsByTagName("input")[0];
				
				if(items[i].parentNode.id == children_obj.id)
				{
					ignore_parent = 1;
					check_obj.checked = true; // opposite to desired
					items[i].getElementsByTagName("span")[0].onclick();
					ignore_parent = 0;
				}
			}
		}
		
		if(!ignore_parent && parent_obj)
		{
			ignore_children = 1;
			parent_obj.getElementsByTagName("input")[0].checked = true; // opposite to desired
			parent_obj.getElementsByTagName("span")[0].onclick();
			ignore_children = 0;
		}
	}
	else if(!me_obj.checked)
	{
		me_obj.checked = true;
		
		if(!ignore_children && children)
		{
			var children_obj = document.getElementById(children);
			var items = children_obj.getElementsByTagName("li");
			
			for (var i = 0, n = items.length; i < n; i++)
			{
				var check_obj = items[i].getElementsByTagName("input")[0];
				
				if(items[i].parentNode.id == children_obj.id)
				{
					check_obj.checked = false; // opposite to desired
					items[i].getElementsByTagName("span")[0].onclick();
				}
			}
		}
	}
}

function treelist_output(start)
{
	var str = '';
	
	var current = document.getElementById(start);
	
	var items = current.getElementsByTagName("li");
	
	for (var i = 0, n = items.length; i < n; i++)
	{
		if(items[i].parentNode.id == current.id)
		{
			if(items[i].id.indexOf("item") != -1)
			{
				var check_obj = items[i].getElementsByTagName("input")[0];
				
				if(check_obj.checked)
				{
					str = str + items[i].id.substr(5) + ',';
				}
				else
				{
					var child_id = items[i].id.substr(0, 1) + 'children' + items[i].id.substr(5);
					
					str = str + treelist_output(child_id);
				}
			}
		}
	}
	
	return str;
}

function treelist_visible(id)
{
	var current = document.getElementById(current_item);
	
	if(current)
	{
		current.style.display = "none";
	}
	
	current_item = "item_" + id;
	
	var current = document.getElementById(current_item);
	
	if(current)
	{
		current.style.display = "block";
	}
}
