var openImg = new Image();
openImg.src = 'libraries/jstree/img/folder_opened.png';
var closedImg = new Image();
closedImg.src = 'libraries/jstree/img/folder.png';

var lastSelected = null;

var g_onTreeAfterSelect = null;

function toggleBranch(branch, performSelect)
{
	var id = branch.id;
	var imgId = id + '_img';
	var branchId = id + '_children';
	var innerId = id + '_inner';
	var isLast = (branch.className.indexOf('last') > -1);
	
	var objBranch = document.getElementById(branchId);
	if (objBranch != null)
	{
		if (objBranch.style.display == 'block')
		{
			objBranch.style.display = 'none';
		}
		else
		{
			objBranch.style.display = 'block';
		}
	}
	
	var objImg = document.getElementById(imgId);
	if (objImg != null)
	{
		if (objImg.src.indexOf('folder.png') > -1)
		{
			objImg.src = openImg.src;
			branch.style.backgroundImage = isLast ? 'url(libraries/jstree/img/last_expanded.png)' : 'url(libraries/jstree/img/expanded.png)';
		}
		else
		{
			objImg.src = closedImg.src;
			branch.style.backgroundImage = isLast ? 'url(libraries/jstree/img/last_closed.png)' : 'url(libraries/jstree/img/closed.png)';
		}
	}

	if (performSelect)
	{	
		selectNode(id);
	}
}

function onClickLeaf(leaf)
{
	selectNode(leaf.id);
}

function selectNode(nodeId)
{
	if ((lastSelected != null) && (lastSelected == nodeId))
	{
		return;
	}

	var objInner = document.getElementById(nodeId + '_inner');
	if (objInner != null)
	{
		objInner.style.backgroundColor = 'rgb(0, 0, 255)';
		objInner.style.color = 'rgb(255, 255, 255)';
		
		if (lastSelected != null)
		{
			var objInnerLast = document.getElementById(lastSelected + '_inner');
			if (objInnerLast != null)
			{
				objInnerLast.style.backgroundColor = 'rgb(255, 255, 255)';
				objInnerLast.style.color = 'rgb(0, 0, 0)';
			}
		}
		lastSelected = nodeId;
	}
	
	if (g_onTreeAfterSelect != null)
	{
		g_onTreeAfterSelect(nodeId);
	}
}

function ensureVisible(nodeId)
{
	var obj = document.getElementById(nodeId);
	if (obj == null)
	{
		return false;
	}
	
	var oParent = obj.parentNode;
	if (oParent == null)
	{
		return false;
	}

	if (oParent.style.display != 'block')
	{
		var parentId = oParent.id;
		var idx = parentId.indexOf('_');
		if (idx < 0)
		{
			return false;
		}
		
		var parentNodeId = parentId.substring(0, idx);
		ensureVisible(parentNodeId);
		
		var oTrigger = document.getElementById(parentNodeId);
		if (oTrigger != null)
		{
			toggleBranch(oTrigger, false);
		}
	}
}