/* 

    Sitemap Styler v0.2
    written by Scott Watkins
    University of Oklahoma, College of Education
        * added openMap() and closeMap() functions
        * added support for key presses to expand/collapse elements
        * added support to expand all elements if javascript is turned off
            - add to heading of containing document
                <noscript>
                    <style type="text/css">
                        #sitemap ul{display:block;}
                    </style>
                </noscript>
    
    Enhancements based on code provided by:
    Sitemap Styler v0.1
    written by Alen Grakalic, provided by Css Globe (cssglobe.com)
    visit http://cssglobe.com/lab/sitemap_styler/
    
    Dependent Files:
        * sitemapstyler.css
        
    Instructions:
        1.  include this file in the head of the document
        2.  include the sitemapstyler.css file in the head of the document
        3.  links should be a nested unordered list
        4.  containing ul element needs an id of 'sitemap'
            *  <ul id="sitemap">
            
*/

this.sitemapstyler = function(){
    var sitemap = document.getElementById("sitemap")
    if(sitemap){
        
        this.listItem = function(li){
            if(li.getElementsByTagName("ul").length > 0){
                var ul = li.getElementsByTagName("ul")[0];
                ul.style.display = "expanded"; //'none' für geschlossene liste
                var span = document.createElement("span");
                span.className = "expanded"; //'collapsed' für +zeichen bei geschlossener liste
                span.onclick = function(){
                    ul.style.display = (ul.style.display == "none") ? "block" : "none";
                    this.className = (ul.style.display == "none") ? "collapsed" : "expanded";
                };
                li.onkeydown = function(e){
                    var KeyID = (window.event) ? event.keyCode : e.keyCode;
                    switch(KeyID){
                        case 37: // left arrow key press
                            ul.style.display = "none";
                            span.className = "collapsed";
                        break;
                        case 39: // right arrow key press
                            ul.style.display = "block";
                            span.className = "expanded";
                        break;
                    }
                };
                li.appendChild(span);
            };
        };
        
        var items = sitemap.getElementsByTagName("li");
        for(var i=0;i<items.length;i++){
            listItem(items[i]);
        };
        
    };    
};

window.onload = sitemapstyler;

function openMap(){
    var sitemap = document.getElementById("sitemap")
    if(sitemap){
        
        this.listItem = function(li){
            if(li.getElementsByTagName("ul").length > 0){
                var ul = li.getElementsByTagName("ul")[0];
                ul.style.display = "block";
                var span = document.createElement("span");
                span.className = "expanded";
                span.onclick = function(){
                    ul.style.display = (ul.style.display == "none") ? "block" : "none";
                    this.className = (ul.style.display == "none") ? "collapsed" : "expanded";
                };
                li.onkeydown = function(e){
                    var KeyID = (window.event) ? event.keyCode : e.keyCode;
                    switch(KeyID){
                        case 37:
                            ul.style.display = "none";
                            span.className = "collapsed";
                        break;
                        case 39:
                            ul.style.display = "block";
                            span.className = "expanded";
                        break;
                    }
                };
                li.appendChild(span);
            };
        };
        
        var items = sitemap.getElementsByTagName("li");
        for(var i=0;i<items.length;i++){
            listItem(items[i]);
        };
        
    };    
};

function closeMap(){
    var sitemap = document.getElementById("sitemap")
    if(sitemap){
        
        this.listItem = function(li){
            if(li.getElementsByTagName("ul").length > 0){
                var ul = li.getElementsByTagName("ul")[0];
                ul.style.display = "none";
                var span = document.createElement("span");
                span.className = "collapsed";
                span.onclick = function(){
                    ul.style.display = (ul.style.display == "none") ? "block" : "none";
                    this.className = (ul.style.display == "none") ? "collapsed" : "expanded";
                };
                li.onkeydown = function(e){
                    var KeyID = (window.event) ? event.keyCode : e.keyCode;
                    switch(KeyID){
                        case 37:
                            ul.style.display = "none";
                            span.className = "collapsed";
                        break;
                        case 39:
                            ul.style.display = "block";
                            span.className = "expanded";
                        break;
                    }
                };
                li.appendChild(span);
            };
        };
        
        var items = sitemap.getElementsByTagName("li");
        for(var i=0;i<items.length;i++){
            listItem(items[i]);
        };
        
    };    
};

