﻿Array.prototype.indexOf = IndexOf;

//Toggles between two classes for an element
function ToggleClass(element, firstClass, secondClass, event) {
    event.cancelBubble = true;

    var classes = element.className.split(" ");
    var firstClassIndex = classes.indexOf(firstClass);
    var secondClassIndex = classes.indexOf(secondClass);

    if (firstClassIndex == -1 && secondClassIndex == -1) {
        classes[classes.length] = firstClass;
    }
    else if (firstClassIndex != -1) {
        classes[firstClassIndex] = secondClass;
    }
    else {
        classes[secondClassIndex] = firstClass;
    }

    element.className = classes.join(" ");

}

//Finds the index of an item in an array
function IndexOf(item) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == item) {
            return i;
        }
    }

    return -1;
}

//The toggle event handler for each expandable/collapsable node
//- Note that this also exists to prevent any IE memory leaks 
//(due to circular references caused by this)
function ToggleNodeStateHandler(event) {
    ToggleClass(this, "Collapsed", "Expanded", (event == null) ? window.event : event);
}

//Prevents the onclick event from bubbling up to parent elements
function PreventBubbleHandler(event) {
    if (!event) event = window.event;
    event.cancelBubble = true;
}

//Adds the relevant onclick handlers for the nodes in the tree view
function SetupTreeView(elementId) {
    var tree = document.getElementById(elementId);
    var treeElements = tree.getElementsByTagName("li");

    for (var i = 0; i < treeElements.length; i++) {
        if (treeElements[i].getElementsByTagName("ul").length > 0) {
            treeElements[i].onclick = ToggleNodeStateHandler;
        }
        else {
            treeElements[i].onclick = PreventBubbleHandler;
        }
    }
} 