// Popout menu scripting
var d = document // saves typing
var mnu_showing = new Array()
var IE = navigator.userAgent.indexOf('MSIE')>-1



function menu_show(name, event, level) {
	var menu = d.getElementById(name)
if(IE)
	var p_menu_item = event.srcElement
else
	var p_menu_item = event.target
	var x, y, l

	/*** hide any other menus ***/

	menu_hide(level)

	/*** place it and show it ***/

	l = new loc(p_menu_item)
	menu.style.top = l.y - 2
	menu.style.left = l.x+p_menu_item.offsetWidth - 2
	menu.style.visibility = "visible"

	mnu_showing.length = level + 1
	mnu_showing[level] = menu
}

function menu_cleanup(event) {
	var x
	var y
if(IE) {
	x = event.clientX+d.body.scrollLeft
	y = event.clientY+d.body.scrollTop
} else {
	x = event.pageX
	y = event.pageY
}
	x = IsInMenu(x, y)
	if(x<0) menu_hide(0)
}

function menu_hide(level) {
	var x
	var len = mnu_showing.length

	if(level<len) {
		len--;
		for(x=len; x>=level; x--)
			mnu_showing[x].style.visibility="hidden"
		if(level<len) mnu_showing.length=level
	}
}

function menu_launch(url) {
	menu_hide(0)
	window.location=url
}

function menu_dump(event) {
	var s, x, m

	s='*** MENU DUMP ***\n\n'
	for(x=0; x<mnu_showing.length; x++) {
		m=mnu_showing[x]
		s+=x.toString()+': ('+m.offsetLeft.toString()+', '+m.offsetTop.toString()+', '+m.offsetWidth.toString()+', '+m.offsetHeight.toString()+') '+m.id+'\n'
	}
if(IE)
	s+='\n*** Mouse @ ****\n\n'+(event.clientX-d.body.clientLeft).toString()+', '+(event.clientY-d.body.clientTop).toString()
else
	s+='\n*** Mouse @ ****\n\n'+event.pageX.toString()+', '+event.pageY.toString()
	//alert(s)
}

function IsInMenu(x, y) {
	var z, l

	for(z=0; z<mnu_showing.length; z++) {
		if(!z)
			l = new loc(mnu_showing[z])
		else
			l.loc(mnu_showing[z])
		if(x>=l.x && x<=l.r && y>=l.y && y<=l.b) return z
	}
	return -1
}

function loc(object) {
	var x, y, p

	/*** calc x & y of pop up menu ***/

	p=object
	for(x=0, y=0; p; p=p.offsetParent) {
		x+=p.offsetLeft
		y+=p.offsetTop
		if(p.offsetParent && p.offsetParent.clientLeft) {
			x+=p.offsetParent.clientLeft;
			y+=p.offsetParent.clientTop;
		}
	}
	this.x = x
	this.y = y
	this.r = x+object.clientWidth-1
	this.b = y+object.clientHeight-1
	if(object.clientLeft) {
		this.r+=object.clientLeft*2
		this.b+=object.clientTop*2
	}
	if(!this.loc) this.loc = loc
}