// From: http://www.shockmedia.com.au/_js/func.slideMenu.js
// Clearly adapted from YoungPup and improved to work with ULs instead of nested DIVs
// animates by changing px height of UL 
// need to add window.onload event in here, so script is contained

slideMenu.Registry = [];
slideMenu.lineHeight = 18;
slideMenu.speed = 2;

function slideMenu(id,numLines) {
	slideMenu.Registry[id] = [];
	slideMenu.Registry[id]['height']       = 1;
	slideMenu.Registry[id]['containerObj'] = document.getElementById(id+"Container");
	slideMenu.Registry[id]['contentObj']   = document.getElementById(id+"Content");
	slideMenu.Registry[id]['maxHeight']    = new Number((numLines * slideMenu.lineHeight) + 2);
//	slideMenu.Registry[id]['maxHeight']    = (slideMenu.Registry[id]['containerObj'].scrollHeight * numLines) - (numLines - 1);
	slideMenu.Registry[id]['interval']     = null;
	slideMenu.Registry[id]['timeout']      = null;
	
	slideMenu.Registry[id]['contentObj'].style.display  = 'none';
	slideMenu.Registry[id]['contentObj'].style.height  = '1px';
	
	// slide down events
	slideMenu.Registry[id]['containerObj'].onmouseover = function() { slideMenu.showMenu(id); }
	slideMenu.Registry[id]['containerObj'].onfocus     = function() { slideMenu.showMenu(id); }
	slideMenu.Registry[id]['containerObj'].onactivate  = function() { slideMenu.showMenu(id); }
	// would be nice to set onclick of child A (if #) to function() { return false; }
	
	// slide up events
	slideMenu.Registry[id]['containerObj'].onmouseout  = function() { slideMenu.hideMenu(id); }
	slideMenu.Registry[id]['containerObj'].onblur      = function() { slideMenu.hideMenu(id); }
	slideMenu.Registry[id]['containerObj'].ondeactivate = function() { slideMenu.hideMenu(id); }
}

slideMenu.showMenu = function(id) {
	clearInterval(slideMenu.Registry[id]['interval']);
		
	//would be nice to set focus on first child Anchor of ContentObj
	slideMenu.Registry[id]['contentObj'].style.display = 'block';
	slideMenu.Registry[id]['contentObj'].style.zIndex += 10;
	
	slideMenu.Registry[id]['interval'] = window.setInterval("slideMenu.slideDown('"+id+"')",1);
	// there should be code here to scroll window if slideDown moves below viewport
}

slideMenu.hideMenu = function(id) {
	clearInterval(slideMenu.Registry[id]['interval']);
	
	slideMenu.Registry[id]['contentObj'].style.zIndex = 10;
	slideMenu.Registry[id]['interval'] = window.setInterval("slideMenu.slideUp('"+id+"')",1);
}

slideMenu.slideDown = function(id) {
	for(var i=0;i<15;i++) {
		if(slideMenu.Registry[id]['height'] >= slideMenu.Registry[id]['maxHeight']) {
			clearInterval(slideMenu.Registry[id]['interval']);
			slideMenu.Registry[id]['contentObj'].style.height='auto';
		} else {
			slideMenu.Registry[id]['contentObj'].style.height = slideMenu.Registry[id]['height']+'px';
			slideMenu.Registry[id]['height'] = slideMenu.Registry[id]['height'] + slideMenu.speed;
		}
	}
}

slideMenu.slideUp = function(id) {
	for(var i=0;i<15;i++) {
		if(slideMenu.Registry[id]['height'] <= 1) {
			clearInterval(slideMenu.Registry[id]['interval']);
			slideMenu.Registry[id]['contentObj'].style.display = 'none';
		} else {
			slideMenu.Registry[id]['contentObj'].style.height = slideMenu.Registry[id]['height']+'px';
			slideMenu.Registry[id]['height'] = slideMenu.Registry[id]['height'] - slideMenu.speed;
		}
	}
}

// events that must happen after DOM has loaded
function loaded () {
	//menu initialization (menu name , #of menu items - for animation if desired)
	slideMenu("menu2",1);
	slideMenu("menu3",1);
	slideMenu("menu4",1);
	slideMenu("menu5",1);
	slideMenu("menu6",1);
	slideMenu("menu8",1);
	slideMenu("menu9",1);	
}

window.onload = function() { loaded() }
