var expandable_tree = 
{
    className    : 'expandable_tree',
    tagName      : 'ul',
    
    currentClass : 'current',
    openClass    : 'open',
    closedClass  : 'closed',
    buttonClass  : 'button',
    spacerClass  : 'spacer',
    
    init : function(o)
    {
        var children = getChildrenByTagName(o, 'li');
        for (var child in children)
        {
            var button = document.createElement('span');
            button.innerHTML = '\u00A0';
            button.className = this.spacerClass;
            var grandchildren = getChildrenByTagName(children[child], 'ul');
            if (grandchildren.length)
            {
                observeEvent(button, 'click', function(e)
                {
                    toggleClassNames(e.target.parentNode, expandable_tree.openClass, expandable_tree.closedClass);
                });
                button.className = this.buttonClass;
                children[child].className = children[child].className || this.closedClass;  // default to closed for children
                this.init(grandchildren[0]);
            }
            children[child].insertBefore(button, children[child].firstChild);                
        }    
    }
};
install(expandable_tree);