﻿// JScript File
//TreeView.js

function TreeView_AppendToClassName(element, className) {
    var current = element.className;
    if (current) {
        if (current.charAt(current.length - 1) != " ") {
            current += " ";
        }
        current += className;
    }
    else {
        current = className;
    }
    element.className = current;
}
function TreeView_HoverNode(data, node) {
    node.hoverClass = data.hoverClass;
    TreeView_AppendToClassName(node, data.hoverClass);
    if (__nonMSDOMBrowser) {
        node = node.childNodes[node.childNodes.length - 1];
    }
    else {
        node = node.children[node.children.length - 1];
    }
    node.hoverHyperLinkClass = data.hoverHyperLinkClass;
    TreeView_AppendToClassName(node, data.hoverHyperLinkClass);
}
function TreeView_GetNodeText(node) {
    var trNode = node.parentNode.parentNode;
    var outerNodes;
    if (trNode.childNodes[trNode.childNodes.length - 1].getElementsByTagName) {
        outerNodes = trNode.childNodes[trNode.childNodes.length - 1].getElementsByTagName("A");
    }
    var textNode = (outerNodes && outerNodes.length > 0) ?
        outerNodes[0].childNodes[0] :
        trNode.childNodes[trNode.childNodes.length - 1].childNodes[0];
    return (textNode && textNode.nodeValue) ? textNode.nodeValue : "";
}
function TreeView_PopulateNode(data, index, node, selectNode, selectImageNode, lineType, text, path, databound, datapath, parentIsLast) {
    data.node = node;
    data.selectNode = selectNode;
    data.selectImageNode = selectImageNode;
    data.lineType = lineType;
    data.index = index;
    var param = index + "|" + data.lastIndex + "|" + databound + "|" + parentIsLast + "|" +
        text.length + "|" + text + datapath.length + "|" + datapath + path;
    TreeView_PopulateNodeDoCallBack(data, param);
}
function TreeView_ProcessNodeData(result, data) {
    var treeNode = data.node;
    if (result.length > 0) {
        var ci =  result.indexOf("|", 0);
        data.lastIndex = result.substring(0, ci);
        ci = result.indexOf("|", ci + 1);
        var newExpandState = result.substring(data.lastIndex.length + 1, ci);
        data.expandState.value =  data.expandState.value + newExpandState;
        var chunk = result.substr(ci + 1);
        var newChildren, table;
        if (__nonMSDOMBrowser) {
            var newSpan = document.createElement("span");
            newSpan.innerHTML = chunk;
            table = treeNode.parentNode.parentNode.parentNode.parentNode;
            newChildren = null;
            if (table.nextSibling == null) {
                table.parentNode.insertBefore(newSpan.firstChild, table.nextSibling);
                newChildren = table.previousSibling;
            }
            else {
                table = table.nextSibling;
                table.parentNode.insertBefore(newSpan.firstChild, table);
                newChildren = table.previousSibling;
            }
            newChildren = document.getElementById(treeNode.id + "Nodes");
        }
        else {
            table = treeNode.parentElement.parentElement.parentElement.parentElement;
            table.insertAdjacentHTML("afterEnd", chunk);
            newChildren = document.all[treeNode.id + "Nodes"];
        }
        if (newChildren != null) {
            TreeView_ToggleNode(data, data.index, treeNode, data.lineType, newChildren);
            treeNode.href = document.getElementById ?
                "javascript:TreeView_ToggleNode(" + data.name + "," + data.index + ",document.getElementById('" + treeNode.id + "'),'" + data.lineType + "',document.getElementById('" + newChildren.id + "'))" :
                "javascript:TreeView_ToggleNode(" + data.name + "," + data.index + "," + treeNode.id + ",'" + data.lineType + "'," + newChildren.id + ")";
            if ((data.selectNode != null) && data.selectNode.href &&
                (data.selectNode.href.indexOf("javascript:TreeView_PopulateNode", 0) == 0)) {
                data.selectNode.href = treeNode.href;
            }
            if ((data.selectImageNode != null) && data.selectNode.href &&
                (data.selectImageNode.href.indexOf("javascript:TreeView_PopulateNode", 0) == 0)) {
                data.selectImageNode.href = treeNode.href;
            }
        }
        data.populateLog.value = data.populateLog.value + data.index + ",";
    }
    else {
        var img = treeNode.childNodes ? treeNode.childNodes[0] : treeNode.children[0];
        if (img != null) {
            var lineType = data.lineType;
            if (lineType == "l") {
                img.src = data.images[13];
            }
            else if (lineType == "t") {
                img.src = data.images[10];
            }
            else if (lineType == "-") {
                img.src = data.images[16];
            }
            else {
                img.src = data.images[3];
            }
            var pe;
            if (__nonMSDOMBrowser) {
                pe = treeNode.parentNode;
                pe.insertBefore(img, treeNode);
                pe.removeChild(treeNode);
            }
            else {
                pe = treeNode.parentElement;
                treeNode.style.visibility="hidden";
                treeNode.style.display="none";
                pe.insertAdjacentElement("afterBegin", img);
            }
        }
    }
}
function TreeView_RemoveClassName(element, className) {
    var current = element.className;
    if (current.substring(current.length - className.length - 1, current.length) == " " + className) {
        element.className = current.substring(0, current.length - className.length - 1);
        return;
    }
    if (current == className) {
        element.className = "";
        return;
    }
    var index = current.indexOf(" " + className + " ");
    if (index != -1) {
        element.className = current.substring(0, index) + current.substring(index + className.length + 2, current.length);
        return;
    }
    if (current.substring(0, className.length) == className + " ") {
        element.className = current.substring(className.length + 1, current.length);
    }
}
function TreeView_SelectNode(data, node, nodeId) {
    if (data.selectedClass != null) {
        var id = data.selectedNodeID.value;
        if (id.length > 0) {
            var selectedNode = document.getElementById(id);
            if (selectedNode != null) {
                var index = selectedNode.className.indexOf(data.selectedHyperLinkClass);
                selectedNode.className = selectedNode.className.substring(0, index) + selectedNode.className.slice(index + data.selectedHyperLinkClass.length);
                selectedNode = selectedNode.parentNode;
                index = selectedNode.className.indexOf(data.selectedClass);
                selectedNode.className = selectedNode.className.substring(0, index) + selectedNode.className.slice(index + data.selectedClass.length);
            }
        }
        node.className = node.className + data.selectedHyperLinkClass;
        node = node.parentNode;
        node.className = node.className + data.selectedClass;
    }
    data.selectedNodeID.value = nodeId;
}
function TreeView_ToggleNode(data, index, node, lineType, children) {
    var img = node.childNodes[0];
    var newExpandState = "e";
    if (children.style.display == "none") {
       children.style.display = "block";
       if (img != null) {
           if (lineType == "l") {
              img.src = data.images[15];
           }
           else if (lineType == "t") {
              img.src = data.images[12];
           }
           else if (lineType == "-") {
              img.src = data.images[18];
           }
           else {
              img.src = data.images[5];
           }
           img.alt = data.collapseToolTip.replace(/\{0\}/, TreeView_GetNodeText(node));
       }
    }
    else {
       newExpandState = "c";
       children.style.display = "none";
       if (img != null) {
           if (lineType == "l") {
              img.src = data.images[14];
           }
           else if (lineType == "t") {
              img.src = data.images[11];
           }
           else if (lineType == "-") {
              img.src = data.images[17];
           }
           else {
              img.src = data.images[4];
           }
           img.alt = data.expandToolTip.replace(/\{0\}/, TreeView_GetNodeText(node));
       }
    }
    data.expandState.value =  data.expandState.value.substring(0, index) + newExpandState + data.expandState.value.slice(index + 1);
}
function TreeView_UnhoverNode(node) {
    TreeView_RemoveClassName(node, node.hoverClass);
    if (__nonMSDOMBrowser) {
        node = node.childNodes[node.childNodes.length - 1];
    }
    else {
        node = node.children[node.children.length - 1];
    }
    TreeView_RemoveClassName(node, node.hoverHyperLinkClass);
}



