window.onload = initAll;

var sidemenus = [];
var cur_menu = null;
var updating_menus = false;

var speed = 1;

function initAll() {
	var allLinks = document.getElementsByTagName("a");
	var link;
	
	for (var i=0; i<allLinks.length; i++) {
	    link = allLinks[i];
		if (link.className.indexOf("sidemenuLink") > -1) {
        	var startsideMenu = link.href.lastIndexOf("/")+1;
        	var stopsideMenu = link.href.lastIndexOf(".");
        	var thissideMenuName = link.href.substring(startsideMenu,stopsideMenu);
        	var e = document.getElementById(thissideMenuName);
        	
        	if (e) {
            	e.height = getMenuHeight(e);
    		    
    		    sidemenus.push(e);
    			link.onclick = function() {return false;}
    			link.onmouseover = showMenu;
        	}
		}
	}
}

function startMenuUpdater() {
    updating_menus = true;
    
    updateMenus();
}

function updateMenus() {
    var menu;
    var keep_updating = false;
    for (m in sidemenus) {
        menu = sidemenus[m];
        h = parseInt(menu.style.height.substring(0, menu.style.height.length - 2));
        
        if (menu == cur_menu) {
            // Expand this menu
            h = Math.min(h + speed, menu.height);
            
            menu.style.height = h + "px";
            
            if (h < menu.height) {
                keep_updating = true;
            }

        } else if (h > 0) {
            h = Math.max(h - speed, 0);
            
            menu.style.height = h + "px";
                
            if (h == 0) {
                menu.style.display = "none";
            } else {
                keep_updating = true;
            }
        }
    }
    
    if (keep_updating) {
        window.setTimeout('updateMenus()', 1);
    } else {
        updating_menus = false;
    }
}

function showMenu() {
	var startsideMenu = this.href.lastIndexOf("/")+1;
	var stopsideMenu = this.href.lastIndexOf(".");
	var thissideMenuName = this.href.substring(startsideMenu,stopsideMenu);
	var e = document.getElementById(thissideMenuName);

    if (e && e != cur_menu) {
        cur_menu = e;
        e.style.display = "block";
        // Set offset.
        e.style.overflow = "hidden";
        e.style.height = "0px";
    
        if (!updating_menus) {
            // Add in JS timer to keep updating menus.
            startMenuUpdater();
        }
    }
}

function getMenuHeight(m) { 
    m.style.display = "block";
    var height = m.offsetHeight;
    m.style.display = "none";
    
    return height;
}



function togglesideMenu() {
	var startsideMenu = this.href.lastIndexOf("/")+1;
	var stopsideMenu = this.href.lastIndexOf(".");
	var thissideMenuName = this.href.substring(startsideMenu,stopsideMenu);

	document.getElementById(thissideMenuName).style.display = "block";

	this.parentNode.className = thissideMenuName;
	//this.parentNode.onmouseout = toggleDivOff;
	this.parentNode.onmouseover = toggleDivOn;	
}

function toggleDivOn() {
    var e = document.getElementById(this.className);
    
    if (cur_menu != e && cur_menu) {
        cur_menu.style.display = "none";
    }
    
    e.style.display = "block";
    cur_menu = e;
}

function toggleDivOff() {
	var e = document.getElementById(this.className);
	
	e.style.display = "none";
}



