function TV_PopulateNode(data, index, node, selectNode, selectImageNode, text, path, databound, datapath, parentIsLast)
{
    if (!data) 
    {
        return;
    }
    
    var context = new Object();
    context.data = data;
    context.node = node;
    context.selectNode = selectNode;
    context.selectImageNode = selectImageNode;
    context.index = index;
    context.parentIsLast = parentIsLast;
    context.dataPath = datapath;
    context.doUpdate = true;
    
    var param = index + "|" + data.lastIndex + "|" + databound + "f" + parentIsLast + "|" +
        text.length + "|" + text + datapath.length + "|" + datapath + path;
    
    TV_PopulateNodeDoCallBack(context, param);
}

function TV_ProcessNodeData(result, context) 
{
    if (!context.doUpdate) {
        return;
    }
    

	var treeNode = document.getElementById(context.node);
	
	if (result.length > 0)
	{
		var ci = result.indexOf("|", 0);
		
		context.data.lastIndex = result.substring(0, ci);
		ci = result.indexOf("|", ci + 1);
		var newExpandState = result.substring(context.data.lastIndex.length + 1, ci);
		context.data.expandState.value += newExpandState;
		var chunk = result.substr(ci + 1);
		var newChildren, divContainer;
		
		divContainer = WebForm_GetParentByTagName(treeNode, "DIV");
	
		try
		{
			var newDiv = document.createElement("div");
			newDiv.innerHTML = chunk;
		
			newChildren = null;
			
			if ((typeof(divContainer.nextSibling) == "undefined") || (divContainer.nextSibling == null))
			{
				divContainer.parentNode.insertBefore(newDiv.firstChild, divContainer.nextSibling);
				newChildren = divContainer.previousSibling;
			}
			else
			{
				divContainer = divContainer.nextSibling;
				divContainer.parentNode.insertBefore(newDiv.firstChild, divContainer);
				newChildren = divContainer.previousSibling;
			}
			
			newChildren = document.getElementById(treeNode.id + "Nodes");
		}
		catch (test)
		{
		
		}
		
		if ((typeof(newChildren) != "undefined") && (newChildren != null)) {
            TN_ToggleNodeData(context.data, context.index, context.parentIsLast, treeNode, newChildren);
            var newRef = document.getElementById ?
                "javascript:TN_ToggleNode(" + context.data.name + "," + context.index + ",'" + context.parentIsLast + "',document.getElementById('" + treeNode.id + "'),document.getElementById('" + newChildren.id + "'), '" + context.dataPath + "')" :
                "javascript:TN_ToggleNode(" + context.data.name + "," + context.index + ",'" + context.parentIsLast + "'," + treeNode.id + "," + newChildren.id + ", '" + context.dataPath + "')";
            treeNode.href = newRef;
        }
	}
}

function TN_ToggleNode(data, index, parentIsLast, node, children, dataPath) {

    if (data) {
        var context = new Object();
        context.data = data;
        context.node = node;
        context.selectNode = '';
        context.selectImageNode = '';
        context.index = index;
        context.parentIsLast = parentIsLast;
        context.doUpdate = false;

        var param = index + "|" + data.lastIndex + "|" + "t" + "f" + parentIsLast + "|" +
        0 + "|" + dataPath.length + "|" + dataPath;

        TV_PopulateNodeDoCallBack(context, param);
    }

    TN_ToggleNodeData(data, index, parentIsLast, node, children);
}

function TN_ToggleNodeData(data, index, parentIsLast, node, children) 
{
    if (!data) {
        return;
    }
    var img = node.childNodes[0];
    var newExpandState;
    try {
        if (children.style.display == "none") 
        {
            children.style.display = "block";
            newExpandState = "e";
            
            img.src = data.images[5];
            img.alt = "";
        }
        else 
        {
            children.style.display = "none";
            newExpandState = "c";
            
            img.src = data.images[4];
            img.alt = "";
        }
    }
    catch(e) {}
    
    data.expandState.value =  data.expandState.value.substring(0, index) + newExpandState + data.expandState.value.slice(index + 1);
}

function TV_OpenPage(catId) {

    var newPath = window.location.href;
    var found = newPath.match(/catid=\d*/g);

    if (found) {
        newPath = newPath.replace(found, "catid=" + catId);
    }
    else {
        newPath = newPath + "?catid=" + catId
    }
    
    window.location.href = newPath;
}

function TV_OpenPage2(path) {
    window.location.href = path;
}
