// MenuList Object
// a cascading menu widget utilizing the List Object
// 19990326

// Copyright (C) 1999 Dan Steinman
// Distributed under the terms of the GNU Library General Public License
// Available at http://www.dansteinman.com/dynapi/

// Thanks to: Knut Dale <Knut.S.Dale@eto.ericsson.se>

function MenuList() {
	// main-menu constructor (x,y,width,itemH)
	// sub-menu constructor (parentMenu,parentItemIndex)

	this.name = "MenuList"+(MenuList.count++)
	this.obj = this.name + "MenuListObject"
	this.isovercount = 0	this.isactive = 0	this.direction = 1	eval(this.obj + "=this")
	if (arguments.length==4) {
		this.isChild = false
		this.x = arguments[0]
		this.y = arguments[1]
		this.w = arguments[2]
		this.itemH = arguments[3]
		this.subOnSelect = false
		this.offsetX = -1
		this.offsetY = 0
	}
	else {
		this.isChild = true
		this.parent = arguments[0]
		if(this.parent) { this.direction = this.parent.direction; }		var index = arguments[1]
		this.parent.list.items[index].hasImage = true
		this.parent.list.items[index].hasChild = true
		this.parent.list.items[index].child = this		if((is.ns) || (this.direction == 1)) { this.x = this.parent.w }		else { this.x = 0-(this.parent.w-2) }
		this.y = this.parent.list.items[index].y
		this.w = (arguments.length==3)? arguments[2] : this.parent.w
		this.itemH = this.parent.itemH
		this.childShown = null
		this.subOnSelect = this.parent.subOnSelect
		this.offsetX = this.parent.offsetX
		this.offsetY = this.parent.offsetY
	}

	this.visibility = 'hidden'
	this.zIndex = 10
	this.overOpen = true	this.isGrown = false
	
	this.list = new List(1,1,this.w-2,this.itemH)
	this.list.visibility = 'inherit'
	this.list.allowDeselect = true
	this.list.menulist = this	this.list.bordercolour = '#000000'
	if (this.isChild) {
		this.list.image = this.parent.list.image
		this.list.normalstate = this.parent.list.normalstate
		this.list.rollstate = this.parent.list.rollstate
		this.list.selectstate = this.parent.list.selectstate
		this.list.itemSpacing = this.parent.list.itemSpacing		this.list.bordercolour = this.parent.list.bordercolour
	}
	
	this.cssChildren = ''
	this.divChildren = ''
	this.build = MenuListBuild
	this.activate = MenuListActivate
	this.showMenu = MenuListShowMenu
	this.hideMenu = MenuListHideMenu
	this.show = MenuListShow
	this.hide = MenuListHide
	this.toggle = MenuListToggle
	this.select = MenuListSelect
	if (this.isChild) this.onSelect = this.parent.onSelect
	else this.onSelect = menuHandle
}
function MenuListBuild(write) {
	for (var i=0;i<this.list.items.length;i++) {
		if (this.list.items[i].hasChild) {
			this.list.items[i].child.overOpen = this.overOpen
			this.list.items[i].child.build()
		}
	}
	this.list.overOpen = this.overOpen
	this.list.build()
	this.css = css(this.name,this.x+this.offsetX,this.y+this.offsetY,null,null,null,(this.isChild)?'hidden':this.visibility,this.zIndex)+
	css(this.name+'ListW',0,0,this.w,this.list.h+2,this.list.bordercolour)+
	this.list.css+
	this.cssChildren

	this.div = '<div id="'+this.name+'">\n'+
	'<div id="'+this.name+'ListW">\n'+
	this.list.div+
	'</div>\n'+
	this.divChildren+
	'</div>\n'

	if (this.isChild) {
		this.parent.cssChildren += this.css
		this.parent.divChildren += this.div
	}
}
function MenuListActivate() {
	this.list.activate()	this.lyr = new DynLayer(this.name)'\n'	this.h = 0	this.maxh = this.list.items.length * (this.itemH+4)
	if (is.ns && !this.isChild) {
		this.lyr.clipInit()
		this.lyr.clipTo(0,this.w,this.maxh,0)
	}
	this.list.onSelect = new Function(this.obj+'.select(); return false;')
	for (var i=0;i<this.list.items.length;i++) {
				if (this.list.items[i].hasChild) this.list.items[i].child.activate()
	}\n	this.isactive = 1
}
function MenuListSelect() {
	var i = this.list.selectedIndex
	if (i!=null) {
		if (!this.list.items[i].hasChild || i == this.childShown) this.onSelect()
		this.hideMenu()
				if (this.list.items[i].hasChild) this.showMenu(i)
	}
}
function MenuListHideMenu() {	var i = this.childShown
	if (i!=null && this.list.items[i]!=null) {		this.childShown = null
		this.list.items[i].child.lyr.hide()
		this.list.items[i].child.hideMenu()
		if (this.list.items[i].child.list.selectedIndex!=null) {
			this.list.items[i].child.list.deselect(this.list.items[i].child.list.selectedIndex)
		}
	}
}
function MenuListShowMenu(i) {
	if (is.ns && !this.isChild) this.lyr.clipTo(0,this.lyr.w,this.lyr.h,0)	this.list.items[i].child.lyr.show()
	this.childShown = i
}
function MenuListToggle() {
	if (!this.visible) this.show()
	else this.hide()
}
function MenuListHide(objName) {
	if (this.list.items.length > 0) {
	if(this.list.isover==true) {		this.isovercount = 0
		window.setTimeout(objName+'.hide("'+objName+'")',1);	} else {
		if(this.isovercount < 3) {			this.isovercount = this.isovercount + 1
			window.setTimeout(objName+'.hide("'+objName+'")',1);
		} else {			this.isovercount = 0			this.hideMenu()
			this.list.deselect(this.list.selectedIndex)
			this.lyr.hide()
			this.visible = false
		}	}	}
}
function MenuListShow(x,y) {	if (this.list.items.length > 0) {
	window.status = false	this.lyr.css.visibility = 'inherit'	this.lyr.moveTo(x-3,y-4)
	this.visible = true	this.list.isover = true	}
}
function MenuListRedirect() {
	this.hide()	alert('got in here');
	location.href = this.list.value
}
MenuList.count = 0
