var image;

function close_all(id)
{
    if (!id) id = 'catalog_index';
    var topelement = document.getElementById(id);
    li = topelement.getElementsByTagName('li');
    for(i=0; i<li.length; ++i) {
        if (li[i].className=='root') {
            switch (li[i].state) {
                case 'expanded':
                    if (li[i]!==this.li)
                    {
                        this.li[i].state = 'collapsed';
                        this.li[i].img.src = image.collapsed;
                        this.li[i].ul.style.display = 'none';
                    }
                    break;
                default:
            }
        }
    }
}

function make_tree(id, settings)/*callback_activate, callback_deactivate)*/
{
    var tree = new Object();
    var topelement = document.getElementById(id);
    if (!topelement) return false;

    var listtype = 'ul'; // or 'ol'
    var callback_activate = null;
    var callback_deactivate = null;
    image = { expanded: '/img/tree-expanded.gif',
              collapsed: '/img/tree-collapsed.gif',
              item: '/img/tree-item.gif'
            };

    if (settings) {
        if (settings.listtype) listtype = settings.listtype;
        if (settings.callback_activate) callback_activate = settings.callback_activate;
        if (settings.callback_deactivate) callback_deactivate = settings.callback_deactivate;
        if (settings.image) {
            if (settings.image.expanded) image.expanded = settings.image.expanded;
            if (settings.image.collapsed) image.collapsed = settings.image.collapsed;
            if (settings.image.item) image.item = settings.image.item;
            }
        }

    // find list-items on different levels
    li = topelement.getElementsByTagName('li');
    tree.root = new Object();
    tree.id = id;
    tree.active = false;
    tree.activate_click = false;
    tree.callback_activate = callback_activate;
    tree.callback_deactivate = callback_deactivate;
    tree.image = image;
    for(i=0; i<li.length; ++i) {

        li[i].tree = tree;
        li[i].img = null;
        li[i].div = null;
        li[i].a = null;
        li[i].ul = null;
        li[i].state = li[i].getAttribute('state');

        children = li[i].childNodes;
        for(j=0; j<children.length; ++j) if (children[j].tagName) {
            tagname = children[j].tagName.toLowerCase();
            if (tagname=='img') {
                li[i].img = children[j];
                li[i].img.li = li[i];
            }
            if (tagname=='div') {
                li[i].div = children[j];
                li[i].div.li = li[i];
                a = li[i].div.getElementsByTagName('a');
                if (a.length) {
                    li[i].a = a[0];
                    li[i].a.li = li[i];
                    }
                }
            if (tagname==listtype) {
                li[i].ul = children[j];
                li[i].ul.li = li[i];
                }
            }

        switch (li[i].state) {
            case 'collapsed':
                if (li[i].img.src!=image.collapsed) li[i].img.src = image.collapsed;
                if (li[i].ul) li[i].ul.style.display = 'none';
                break;
            case 'expanded':
                if (li[i].img.src!=image.expanded) li[i].img.src = image.expanded;
                if (li[i].ul) li[i].ul.style.display = 'block';
                break;
            default:
                // alert(li[i].img.className);
                if (li[i].className == 'root') {
                    if (li[i].img.src!=image.item) li[i].img.src = image.item;
                }
            }

        // on each link, set the onmouseover or onclick events
        li[i].div.onmouseover = treeitem_div_onmouseover;
        li[i].div.onmouseout = treeitem_div_onmouseout;
        if (li[i].ul) { // has items
            li[i].a.onclick = treeitem_a_onclick;
            li[i].img.onclick = treeitem_onclick;
            li[i].div.style.cursor = 'pointer';
            li[i].div.onclick = treeitem_onclick;
            }
        }
    return tree;
}

function treeitem_a_onclick()
{
    return false;
}
function treeitem_div_onmouseover()
{
    if (this.li.tree.callback_activate) this.li.tree.callback_activate(this);
}
function treeitem_div_onmouseout()
{
    if (this.li.tree.callback_deactivate) this.li.tree.callback_deactivate(this);
}
function treeitem_onclick()
{
    if (this.li.state=='collapsed') {
        close_all(this.li.tree.id);
        this.li.state = 'expanded';
        this.li.img.src = this.li.tree.image.expanded;
        this.li.ul.style.display = 'block';
        }
    else {
        this.li.state = 'collapsed';
        this.li.img.src = this.li.tree.image.collapsed;
        this.li.ul.style.display = 'none';
        }
}


function destroy_tree(id)
{
    var topelement = document.getElementById(id);
    if (!topelement) return false;
    li = topelement.getElementsByTagName('li');
    for(i=0; i<li.length; ++i) {
        if (li[i].div.onmouseover) li[i].div.onmouseover = null;
        if (li[i].div.onmouseout) li[i].div.onmouseout = null;
        if (li[i].ul) { // has items
            if (li[i].a.onclick) li[i].a.onclick = null;
            if (li[i].img.onclick) li[i].img.onclick = null;
            if (li[i].div.onclick) li[i].div.onclick = null;
        }
        li[i].tree = null;
        li[i].img = null;
        li[i].div = null;
        li[i].a = null;
        li[i].ul = null;
        li[i].state = null;
    }
}
