function setMenuObjects(menuID) {

	var menuSystem = eval(menuID)
	
	menuSystem.menuObjects = new Object()
	
	applyMenuObjects(menuSystem,menuSystem)
	
	menuSystem.closeAll = function() {
		
		for(var i in this.menuObjects) {
			
			if(this.menuObjects[i].open) {this.menuObjects[i].close()}
		}
	}

}

function revealSelects() {
	for(var i=0;i<document.forms.length;i++) {
		for(var j=0;j<document.forms[i].elements.length;j++) {
			if(document.forms[i].elements[j].type.indexOf("select")>-1) {document.forms[i].elements[j].style.visibility="visible"}
		}
	}
}


function applyMenuObjects(menu,menuSystem) {
	menu.menuSystem = menuSystem
	
	if(menu.parentID) {menu.parent = menuSystem.menuObjects[menu.parentID]}
	
	var parentMenu
	
	menu.close = function() {
		var element = document.getElementById(this.id)
		if(this.parent) {
			var parentElement = document.getElementById(this.parent.id)
			if(!this.parent.over) {
				parentElement.childNodes[0].className="normal"
			}
			parentMenu = menuSystem.menuObjects[this.parent.parentID]
			if(parentMenu) {
				if(this.open&&parentMenu.open) {
									
					if(document.getElementById(parentMenu.id).childNodes[0].focus) {document.getElementById(parentMenu.id).childNodes[0].focus()}
					parentMenu.focus=true
				}
				if(this.open&&!parentMenu.open) {revealSelects()}
				
			}
			
					
		}
		
		else {revealSelects()}
		
		for(var i=0;i<this.items.length;i++) {
			if(this.items[i].childMenu) {
				if(this.items[i].childMenu.open) {this.items[i].childMenu.close()}
			}
			
		}
		this.open = false
		
		try{element.style.visibility = this.visibility}
		catch(e) {}
		
	}
	
	menu.tryClose = function() {
		if(this.hideOn=="onblur"&&this.focus) {return false}
		if(this.hideOn=="onmouseout"&&this.over) {return false}
		if(this.parent) {
			
			if(this.parent.over&&this.hideOn=="onmouseout") {return false}
		}
		for(var i=0;i<this.items.length;i++) {
			//if(this.hideOn=="onblur"&&this.items[i].over) {document.getElementById(this.id).focus();return false}
			if(this.items[i].childMenu) {
				
				if(this.items[i].childMenu.open) {return false}
			}
		}
		this.close()
	}
		
	menu.delayClose = function() {
		this.timeout = setTimeout(this.menuSystem.id+".menuObjects['"+this.id+"'].tryClose()",(this.hideTimeout*1000))
		if(this.parent) {
			var parentMenu = menuSystem.menuObjects[this.parent.parentID]
			if(parentMenu) {parentMenu.delayClose()}
		}
	}
	
	menuSystem.menuObjects[menu.id] = menu
	for(var i=0;i<menu.items.length;i++) {
		menuSystem.menuObjects[menu.items[i].id] = menu.items[i]
		if(menu.items[i].childMenu) {
			applyMenuObjects(menu.items[i].childMenu,menuSystem)
		}
	}
}

function dropMenuCellOver(root,element) {
	
	var menuSystem = eval(root)
	
	var item = menuSystem.menuObjects[element.id]
	var parentMenuItem = menuSystem.menuObjects[item.parentID]
	item.over = true
	
	for(var i=0;i<parentMenuItem.items.length;i++) {
		if(parentMenuItem.items[i].childMenu&&parentMenuItem.items[i]!=item) {
			
			if(parentMenuItem.items[i].childMenu.hideOn=="onmouseout") {
				
				parentMenuItem.items[i].childMenu.close()
			}
		}
	}
	
	if(element.childNodes.length>0) {element.childNodes[0].className = "over"}
}


function dropMenuCellOut(root,element) {
	var menuSystem = eval(root)
	var item = menuSystem.menuObjects[element.id]
	item.over = false
	if(item.childMenu) {
		if(item.childMenu.hideOn=="onmouseout") {item.childMenu.delayClose()}
		else {element.childNodes[0].className = "normal"}
	}
	
	else if(element.childNodes.length>0) {element.childNodes[0].className = "normal"}
	
}

function launchChildDropMenu(root,element) {
	
	var menuSystem = eval(root)
	var item = menuSystem.menuObjects[element.id]
	var childMenuItem = item.childMenu
	var childMenuElement = document.getElementById(childMenuItem.id)
	var parentMenuItem = menuSystem.menuObjects[item.parentID]
	
	var clientLeft =getClientLeft(element)
	var clientTop = getClientTop(element)
	var clientHeight = element.offsetHeight
	var clientWidth = element.offsetWidth
	
	//alert(clientTop)
	
	if(menuSystem.sync) {
		var sync = eval(menuSystem.sync)
		sync.closeAll()
		
	}
	
	
	for(var i=0;i<parentMenuItem.items.length;i++) {
		if(parentMenuItem.items[i].childMenu&&parentMenuItem.items[i]!=item) {
			parentMenuItem.items[i].childMenu.close()
		}
	}
		
	
	var newLeft
	var newTop
	
	
	
	if(childMenuItem.align=="bottomLeft") {
		newLeft = clientLeft
		newTop = clientTop+clientHeight
	}
	
	else if(childMenuItem.align=="topLeft") {
		newLeft = clientLeft-childMenuElement.clientWidth
		newTop = clientTop
	}
	
	else if(childMenuItem.align=="bottomRight") {
		newLeft = clientLeft-(childMenuElement.clientWidth-clientWidth)
		newTop = clientTop+clientHeight
	}
	
	else {
		newLeft = clientLeft+clientWidth
		newTop = clientTop
	}
	
	newLeft += childMenuItem.hOffset
	newTop += childMenuItem.vOffset
	
	childMenuItem.open = true
	
	childMenuElement.style.position = "absolute"
	
	childMenuElement.style.left = newLeft
	
	childMenuElement.style.top = newTop
	
	if(topZ) {childMenuElement.style.zIndex = topZ+1}
	
	childMenuElement.style.visibility = "visible"
	
	/* - Hide Form Picklists
	for(var i=0;i<document.forms.length;i++) {
		for(var j=0;j<document.forms[i].elements.length;j++) {
			if(document.forms[i].elements[j].type.indexOf("select")>-1) {document.forms[i].elements[j].style.visibility="hidden"}
		}
	}
	*/
	var dropShadow = document.getElementById(childMenuItem.id+"_dropShadow")
	
	var baseShadow = document.getElementById(childMenuItem.id+"_baseShadow")
	
	if(dropShadow) {
	
		dropShadow.style.height = 0
		dropShadow.style.left = 0
	
		if(baseShadow) {
			baseShadow.style.width = 0
			baseShadow.style.top = 0
		}
	
		dropShadow.style.left = childMenuElement.offsetWidth
		dropShadow.style.height = childMenuElement.offsetHeight
	
		if(baseShadow) {
			baseShadow.style.width = childMenuElement.offsetWidth-dropShadow.offsetWidth
			baseShadow.style.top = childMenuElement.offsetHeight
			//baseShadow.style.left = -childMenuElement.offsetWidth
		}
	}
	
	
	
	/*
	var shadowWidth = childMenuElement.offsetWidth+childMenuItem.shadowWidthOffset
	var shadowHeight = childMenuElement.offsetHeight+childMenuItem.shadowHeightOffset
	
	dropShadow.style.width = shadowWidth
	dropShadow.style.height = shadowHeight
	dropShadow.style.top = childMenuItem.shadowVoffset
	dropShadow.style.left = childMenuItem.shadowHoffset
	
	dropShadow.style.height = shadowHeight-(dropShadow.offsetHeight-shadowHeight)
	dropShadow.style.width = shadowWidth-(dropShadow.offsetWidth-shadowWidth)
	
	//dropShadow.style.display="inline"
	
	*/
	
	//dropShadow.style.display="inline"
	
	
	
	childMenuItem.focus=true
	if(childMenuElement.childNodes[0].focus) {childMenuElement.childNodes[0].focus()}
	
}

function dropMenuTableOver(root,element) {
	var menuSystem = eval(root)
	var item = menuSystem.menuObjects[element.parentNode.id]
	item.over = true
}

function dropMenuTableOut(root,element) {
	var menuSystem = eval(root)
	var item = menuSystem.menuObjects[element.parentNode.id]
	item.over = false
	if(item.hideOn=="onmouseout") {item.delayClose()}
}

function dropMenuTableFocus(root,element) {
	var menuSystem = eval(root)
	var item = menuSystem.menuObjects[element.parentElement.id]
	item.focus = true
	
}

function dropMenuTableBlur(root,element) {
	var menuSystem = eval(root)
	var item = menuSystem.menuObjects[element.parentElement.id]
	item.focus = false
	if(item.hideOn=="onblur") {item.tryClose()}
	
	
}