var symbolClosed = '+';
var symbolOpen = '-';

function Tree_AutoInit()
{
    var candidates = document.getElementsByTagName('ul');
    
    for (i in candidates) {
        if (hasClassName(candidates[i], 'tree')) {
            Tree_Init(candidates[i]);
        }
    }
}

function Tree_Init(element)
{
    for (var i in element.childNodes) {
    
        var li = element.childNodes[i];
        
        if (li.tagName && li.tagName.toLowerCase() == 'li') {
        
            var subTree = Tree_FindChild(li, 'ul');
            
            if (subTree) {
                var expander = document.createElement('a');
                
                expander.className = 'expander';
                expander.href = 'javascript:void(0);';
                expander.onclick = Tree_Toggle;
                
                if (hasClassName(subTree, 'closed')) {
                    expander.innerHTML = symbolClosed;
                } else {
                    expander.innerHTML = symbolOpen;
                }
                
                li.insertBefore(expander, li.firstChild);
                
                Tree_Init(subTree);                
            }
        }
    }
}

function Tree_FindChild(element, childTag)
{   
    for (i in element.childNodes) {
        child = element.childNodes[i];
        if (child.tagName && child.tagName.toLowerCase() == childTag) {
            return child;
        }
    }
    return null;
}
 
function Tree_Toggle()
{
    expander = this;
    li = expander.parentNode;
    subTree = Tree_FindChild(li, 'ul');
    
    if (hasClassName(subTree, 'closed')) {
        removeClassName(subTree, 'closed');
        expander.innerHTML = symbolOpen;
    } else {
        addClassName(subTree, 'closed');
        expander.innerHTML = symbolClosed;
    }
    
} 

appendLoader(Tree_AutoInit);