/* 

	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 = "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: // 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]);
		};
		
	};	
};

