var oSitemap = {
    init : function() {
        if(!document.getElementById) return;
        oSitemap.oContainer = document.getElementById("sitemap");
        var aNodes = selectChildren(oSitemap.oContainer);
        if(aNodes.length) {
            oSitemap.oList = aNodes[0];
            oSitemap.stopPropagation("ul");
            oSitemap.stopPropagation("li");
            oSitemap.stopPropagation("a");
            oSitemap.setEvents();
        };
        var oLinks = document.createElement("ul");
        oLinks.setAttribute("id", "expand");
        oSitemap.oContainer.insertBefore(oLinks, oSitemap.oContainer.firstChild);
        oSitemap.addCollapse(oLinks);
        oSitemap.addExpand(oLinks);
    },  
    addExpand : function(oContainer) {
        var oExpand = document.createElement("li");
        var oText = document.createTextNode("Expand all");
        oExpand.appendChild(oText);
        oContainer.insertBefore(oExpand, oContainer.firstChild);
        oExpand.onmousedown = function() {
            oSitemap.setEvents("open");
        };
    },
    addCollapse : function(oContainer) {
        var oCollapse = document.createElement("li");
        var oText = document.createTextNode("Collapse all");
        oCollapse.appendChild(oText);
        oContainer.insertBefore(oCollapse, oContainer.firstChild);
        oCollapse.onmousedown = function() {
            oSitemap.setEvents("closed");
        };
    },
    stopPropagation : function(sTag) { 
        var oNodes = oSitemap.oList.getElementsByTagName(sTag);
        for(var i = 0; i < oNodes.length; i++) {
            oNodes[i].onmousedown = function(e) {
                if(!e) var e = window.event;
                if(e.preventDefault) {
                    e.preventDefault();
                };
                e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true; 
            };   
        };       
    },
    /**
     * Description: Affects class names of LIs to change default styles
     * Author: Peter Hammans | Wead Ltd 
     * Email: peter.hammans@wead.co.uk
     **/
    setEvents : function(sExpand) {  
        sExpand = sExpand || "";              
        var oLis = oSitemap.oList.getElementsByTagName("li");    
        for(var i = 0; i < oLis.length; i++) {
            var aNodes = selectChildren(oLis[i]);
            if(aNodes.length > 1) {
                if(!sExpand) {
                    if(oSitemap.hasLevel(oLis[i]) < 4) {
                        oLis[i].className = "open";
                    } else {
                        oLis[i].className = "closed";                    
                    };
                    oLis[i].onmousedown = function(e) {
                        if(this.className.lastIndexOf("open") > -1 || this.className == "") {
                            this.className = "closed";
                        } else {
                            this.className = "open";
                        };
                    };
                } else {
                    oLis[i].className = sExpand;
                };
            };
        };
    },
    /**
     * Description: Returns the level of the current LI
     * Author: Peter Hammans | Wead Ltd 
     * Email: peter.hammans@wead.co.uk
     **/
    hasLevel : function(oNode) {
        var nLevel = 1;
        while(oNode.parentNode != oSitemap.oContainer) {
            if(oNode.parentNode.tagName.toLowerCase() == "ul") {
                nLevel++;
            };
            oNode = oNode.parentNode;
        };
        return nLevel;
    }
};
attachEvent(oSitemap.init, "onload");

