var IMG_EXPANDED  = 'Expanded.png';
var IMG_COLLAPSED = 'Collapsed.png';
var IMG_BLANK = 'blank.png';
var IMG_LEAF = 'LeafRowHandle.png';

new Image(9,9),src = IMG_EXPANDED; // caching
new Image(9,9),src = IMG_COLLAPSED; // caching
new Image(9,9),src = IMG_BLANK; // caching
new Image(9,9),src = IMG_LEAF; // caching

function hover(iNode, over) {

    if (over) {
        t = document.getElementById(iNode).alt;
        
        if (t == '*') {
            document.getElementById(iNode).src=IMG_LEAF;
        } else if (t == 'V') {
            document.getElementById(iNode).src=IMG_EXPANDED;
        } else {
            document.getElementById(iNode).src=IMG_COLLAPSED;
        }
    
    } else {
        document.getElementById(iNode).src=IMG_BLANK;
    }
}

function expand(ioNode) {
    ioWedge = "i" + ioNode.substr(1);

    if (document.getElementById && document.getElementById(ioNode) !=  null) {

        document.getElementById(ioNode).className='expanded';

        if (document.getElementById(ioWedge) !=  null) {
            document.getElementById(ioWedge).src=IMG_EXPANDED;
            document.getElementById(ioWedge).title='collapse';
            document.getElementById(ioWedge).alt='V';
        }
    }
}

function collapse(ioNode) {
    ioWedge = "i" + ioNode.substr(1);

    if (document.getElementById && document.getElementById(ioNode) != null) {

        document.getElementById(ioNode).className='collapsed';

        if (document.getElementById(ioWedge) !=  null) {
            document.getElementById(ioWedge).src=IMG_COLLAPSED;
            document.getElementById(ioWedge).title='expand';
            document.getElementById(ioWedge).alt='>';
        }
    }
}

function ioSwitch(ioNode,fully) {

    if (document.getElementById && document.getElementById(ioNode) !=  null) {
        nodeState = document.getElementById(ioNode).className;
    }

    if (nodeState == 'collapsed') {
        if (fully) {
            expandAll();
        } else {
            expand(ioNode);
        }
    }

    else {
        if (fully) {
            collapseAll();
        } else {
            collapse(ioNode);
        }
    }
    updateRowBackgroundColors();
}

function expandAll() {

    if (document.getElementsByTagName) {
        nodeList = document.getElementsByTagName('div');

        for (var i = 0; i < nodeList.length; i++) {
    
            if (nodeList.item(i).className == 'expanded' || nodeList.item(i).className == 'collapsed') {
                expand(nodeList.item(i).id);
            }
        }
    }

    else {
        alert ("Sorry, don't know how to make this run in your browser.");
    }
}

function collapseAll() {

    if (document.getElementsByTagName) {
        nodeList = document.getElementsByTagName('div');

        for (var i = 0; i < nodeList.length; i++) {
    
            if (nodeList.item(i).className == 'expanded' || nodeList.item(i).className == 'collapsed') {
                collapse(nodeList.item(i).id);  
            }
        }
    }

    else {
        alert ("Sorry, don't know how to make this run in your browser.");
    }
}

//
// alternate background color support
//
function hasClass(ele,cls) {
    return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}
function addClass(ele,cls) {
    if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}
function removeClass(ele,cls) {
    if (hasClass(ele,cls)) {
        var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
        ele.className=ele.className.replace(reg,' ');
    }
}

function isVisible(obj)
{
    if (obj == document)
        return true;

    if (!obj)
        return false;
    if (!obj.parentNode)
        return false;
    if (obj.style) {
        if (obj.style.display == 'none')
            return false;
        if (obj.style.visibility == 'hidden')
            return false;
    }

    //Try the computed style in a standard way
    if (window.getComputedStyle) {
        var style = window.getComputedStyle(obj, "");
        if (style.display == 'none')
            return false;
        if (style.visibility == 'hidden')
            return false;
    }

    //Or get the computed style using IE's silly proprietary way
    var style = obj.currentStyle
    if (style) {
        if (style['display'] == 'none')
            return false;
        if (style['visibility'] == 'hidden')
            return false;
    }
    return isVisible(obj.parentNode);
}

function updateRowBackgroundColors() {
    // do not update row colors unless alternate row colors has been specified.
    if (!hasClass(document.body, 'altRowColors'))
        return;
    var possibleRows = document.getElementsByClassName("row");
    var rowCount = 0;
    for(var i = 0; i < possibleRows.length; i++) {
        var element = possibleRows[i];
        if (isVisible(element)) {
            rowCount++;
            if (rowCount % 2 == 0) {
                addClass(element, 'altRow');
            } else {
                removeClass(element, 'altRow');
            }
        }
    }
}

window.onload = updateRowBackgroundColors;

