function SetSelected() {
    /* might be better to do in JQuery*/
    var rootNode = document.getElementById("ul1");
    if (rootNode != null) {
        CollapseAll(rootNode, true); // collapse all nodes

        var ahrefIDStr = gup('sn');
        if (ahrefIDStr != null && ahrefIDStr != "") {
            var ahref = document.getElementById(ahrefIDStr.toString());
            ahref.className = "selected";

            var parentLi = ahref.parentNode; // should never be null, since ahref will always have an LI as parent
            // Expand the parents LIs and all children ULs of the selected node
            var currentUL = parentLi.parentNode;
            SetSelectedParentLi(parentLi, true);
            ExpandImmediateChildULNodes(parentLi);
            ExpandAllParentNodes(currentUL);
        }
    }  
}

// Sets all child UL nodes of the selected node to be expanded
function ExpandImmediateChildULNodes(currentLi) {
    if (currentLi.childNodes.length > 1);
    for (var i = 1; i < currentLi.childNodes.length; i++) {
        var childNodeUL = currentLi.childNodes[i];
        if (childNodeUL.nodeName == "UL") {
            childNodeUL.className = "leftNavSubNodeOpen";
        }
    }
}

// Sets all the LI nodes to be type "selected" , which has specific styling
function SetSelectedParentLi(newParentLi, isCurrentSelected) {
    if (newParentLi != null) {
        if (newParentLi.nodeName == "LI") {
            if (!isCurrentSelected) {
                newParentLi.className = "open";
            }
            else {
                newParentLi.className = "selected";
            }
        }
        SetSelectedParentLi(newParentLi.parentNode.parentNode,false);
    }
}

//Sets all the parent UL nodes of the selected node to be expanded, 
//so the relevant portion of the tree is expanded,visible and correctly styled.
function ExpandAllParentNodes(currentChildUL) {
    currentChildUL.className = "leftNavSubNodeOpen";
    var parentUL = currentChildUL.parentNode.parentNode;
    if (parentUL != null && parentUL.nodeName == "UL") {
        ExpandAllParentNodes(parentUL);
    }
}

/*get querystring from URL*/
/* ref: http://www.netlobo.com/url_query_string_javascript.html*/
/* modified with a try catch to accomodate for requests that come without the querystring variable sn*/
function gup(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    try {
        var results = regex.exec(window.location.href);
        if (results == null)
            return "";
        else
            return results[1];
    }
    catch (myErr) {
        return "";
    }
}

function CollapseAll(inputNode, isRootNode) {
    var currentNode;
    var currentNodeClassName;

    if (isRootNode == false) {

        if (inputNode.nodeName == "UL") {
            inputNode.className = "leftNavSubNodeClose";
        }
        if (inputNode.className != null) {
            currentNodeClassName = inputNode.className;
            if (currentNodeClassName.indexOf("open") == 0) {
                inputNode.className = "";
            }
            if (currentNodeClassName.indexOf("selected") == 0) {
                inputNode.className = "";
            }
        }
    }
    if (inputNode.hasChildNodes() == true) {
        if ((inputNode.nodeName == "A") || (inputNode.nodeName == "LI") || (inputNode.nodeName == "UL")) {
            for (var i = 0; i < inputNode.childNodes.length; i++) {
                var childNode = inputNode.childNodes[i];
                if ((childNode.nodeName == "A") || (childNode.nodeName == "LI") || (childNode.nodeName == "UL")) {
                    CollapseAll(childNode, false)
                }
            }
        }
    }
}
