// JavaScript Document

addEvent(window, "load", makeTrees);

MM_preloadImages('../images/menu_lev1_active.gif','../images/menu_lev1_inactive.gif');


function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}



function makeTrees() {
    // We don't actually need createElement, but we do
    // need good DOM support, so this is a good check.
    if (!document.createElement) return;
    
    uls = document.getElementsByTagName("ul");
    for (uli=0;uli<uls.length;uli++) {
        ul = uls[uli];
        if (ul.nodeName == "UL" && ul.className == "menu") {
            processULEL(ul, true);
        }
    }
}



function processULEL(ul, skiphide)
{
	if (!skiphide) {
		ul.style.display = "none";
	}
	
	if (!ul.childNodes || ul.childNodes.length == 0) return;
    // Iterate LIs
    for (var itemi=0; itemi < ul.childNodes.length; itemi++) {
        var item = ul.childNodes[itemi];
		
        if (item.nodeName == "LI") {
            // Iterate things in this LI
            var a;
            var subul;
	    	subul = "";
            for (var sitemi=0; sitemi < item.childNodes.length; sitemi++) {
				var sitem = item.childNodes[sitemi];
                switch (sitem.nodeName) {
                    case "A":
						a = sitem;
						break;
                    case "UL":
						subul = sitem; 
						processULEL(subul);
                        break;
                } // End switch
            }
            if (subul) {
                associateEL(a, subul);				
				if (a.className == "active") {
					nodeOpen(a, subul);
				} else {
					nodeClose(a, subul);
				}
			}
        }
    } // End loop
} // End func



function associateEL(a,ul)
{
	a.onclick = function () {
        var display = ul.style.display;
        
		closeSiblings(a, true);
		
		if (display == "none") {
			nodeOpen(a,ul);
			
		} else if (display == "block") {
			nodeClose(a,ul);
		}
		
        return false;
    }
	
    a.onmouseover = function() {
        var display = ul.style.display;
        window.status = (display == "block") ? "Collapse" : "Expand";
		return true;
    }
	
    a.onmouseout = function() {
        window.status = "";
		return true;
    }
} // End func



function closeSiblings(a,recursive)
{
	
	parentUL = a.parentNode.parentNode;
	if (parentUL.nodeName != "UL") {return false};
	
	for (var i = 0; i < parentUL.childNodes.length; i++) {
		var elem = parentUL.childNodes[i];
		
		if (elem.nodeName == "LI") {
			for (var subi = 0; subi < elem.childNodes.length; subi++) {
				var subElem = elem.childNodes[subi];
				if (subElem.nodeName == "UL") {
					a = elem.childNodes[subi - 2];
					nodeClose(a, subElem);
					if (recursive) {
						closeChildren(subElem);
					}
				}
			} // End loop
		}		
	} // End loop
} // End func



function closeChildren(ul)
{
	for (var i = 0; i < ul.childNodes.length; i++) {
		var elem = ul.childNodes[i];
		
		if (elem.nodeName == "LI") {
			for (var subi = 0; subi < elem.childNodes.length; subi++) {
				var subElem = elem.childNodes[subi];
				if (subElem.nodeName == "UL") {
					a = elem.childNodes[subi - 2];
					if (a.nodeName == "A") {
						nodeClose(a, subElem);
					}
					closeChildren(subElem);
				}
			} // End loop
		}
	} // End loop
} // End func



function nodeClose(a, ul)
{
	a.style.backgroundImage = "url(../images/menu_lev1_inactive.gif)";
	ul.style.display = "none";
} // End func


function nodeOpen(a, ul)
{
	a.style.backgroundImage = "url(../images/menu_lev1_active.gif)";
	ul.style.display = "block";
} // End func



/*              Utility functions                    */

function addEvent(obj, evType, fn) {
  /* adds an eventListener for browsers which support it
     Written by Scott Andrew */
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, false);
    return true;
  } else if (obj.attachEvent){
	var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
	return false;
  }
}

