// JavaScript Document

var leftnavContainerId = 'categories';
var ulElementName = 'UL';
var liElementName = 'LI';
var divElementName = 'DIV';
var crosslinkPanelPrefix = 'CrossLinkPanel';
var cssShow = 'show';
var cssHide = 'hide';

function collapse(
    /*<a> element*/
    element, 
    /*<div> under <li>*/
    subPanelID)
{
    if(!element)
        return;
    
	var hrefString = element.href;
	if(hrefString && hrefString.substring(hrefString.length-1, hrefString.length) != '#')
	    return;  

    var divEle = document.getElementById(subPanelID);
    if(!divEle)
        return;

    var liEle = element.parentNode;//get <li> element
	
    if(divEle.className == cssHide)
    {
		hideSameLevelLeaf(liEle);//recursive hide all expanded tree levels
        divEle.className = "show";
        liEle.className += ' open bold';
    }
    else
    {
        divEle.className = cssHide;
        var index = liEle.className.indexOf(' open bold');
        if (index != -1) {
            liEle.className = liEle.className.substring(0, index);
        }
    }
}


function hideSameLevelLeaf(/*<ul> element or its sub element*/levelElement)
{
    if(!levelElement)
        return;
        
    var liEle = levelElement;//current <li> element
    while(liEle && liEle.id != leftnavContainerId && liEle.nodeName.toUpperCase() != ulElementName)
    {
        liEle = liEle.parentNode;
    }
    if(liEle.id == leftnavContainerId)//find to the root
        return;
    if(liEle.nodeName.toUpperCase() == ulElementName)
    {
        var nodeList = liEle.childNodes;//all <li> elements
        if(nodeList && nodeList.length != 0)
        {
            for(var node in nodeList)
            {
                if((nodeList[node].nodeName) && nodeList[node].nodeName.toUpperCase() == liElementName)
                {
                    var index = nodeList[node].className.indexOf(' open bold');
                    if (index != -1) {
                        nodeList[node].className = nodeList[node].className.substring(0, index);
                    }
                    
                    var subPanelItems = nodeList[node].childNodes;
                    if(subPanelItems)
                    {
                        for(var subPanelItem in subPanelItems)
                        {
                            var item = subPanelItems[subPanelItem];
                            if((item.nodeName) && item.nodeName.toUpperCase() == divElementName)
                            {
                                item.className = cssHide;
                                var subLi = item.firstChild;
                                while(subLi && subLi.nodeName && subLi.nodeName.toUpperCase() != ulElementName)
                                    subLi = subLi.nextSibling;
                                hideSameLevelLeaf(subLi);
                            }
                        }
                    }
                }
            }
        }
    }
}
