<PUBLIC:COMPONENT
    lightWeight = true
>

<PUBLIC:DEFAULTS
    contentEditable = false
    tabStop = true
/>

<PUBLIC:attach event="ondocumentready" onevent="initElement()" />
<PUBLIC:attach event="onmouseover" onevent="elementOnMouseOver()" />
<PUBLIC:attach event="onmouseout" onevent="elementOnMouseOut()" />
<PUBLIC:attach event="onmousedown" onevent="elementOnMouseDown()" />
<PUBLIC:attach event="onmouseup" onevent="elementOnMouseUp()" />
<PUBLIC:attach event="onpropertychange" onevent="elementPropertyChange()" />
<PUBLIC:attach event="onselectstart" onevent="elementOnSelect()" />
<PUBLIC:attach event="oncontextmenu" onevent="elementOnContextMenu()" />
<PUBLIC:attach event="ondetach" onevent="cleanupElement()" />

<PUBLIC:property name="enabled" value=true />
<PUBLIC:property name="menu" value />
<PUBLIC:property name="menuState" value />

<PUBLIC:method   name="hideMenu" />

<script language="jscript">

// ----------------------------------------------------
// 2k3Widgets: 2k3MenuRoot
//                                                     
// Copyright ©2002-2004 Stedy Software and Systems     
// Please see http://www.stedy.com for terms of use.   
// ----------------------------------------------------

var menuShadowArray = new Array(null, null, null, null) ;
var vbLeftButton = 1 ;

function initElement() {
	for (var i = 3; i >= 0; i--) {
		menuShadowArray[i] = window.document.createElement("TD") ;
		menuShadowArray[i].className = "2k3ShadowElement" ;
		element.parentElement.insertAdjacentElement("afterBegin", menuShadowArray[i]) ;
	}
	element.enabled = makeBooleanOfAttribute("enabled") ;
	element.subMenuState = makeBooleanOfAttribute("subMenuState") ;
	if (!element.enabled) {
		showDisabled(element) ;
	}
}

function cleanupElement() {
	for (var i = 0; i <= 3; i++) {
		if (menuShadowArray[i] != null) {
			menuShadowArray[i].style.visibility = "hidden" ;
			menuShadowArray[i].removeNode(true) ;
			menuShadowArray[i] = null ;
		}
	}
}

function elementOnMouseOver() {
	var el = window.event.srcElement ;
	if (el.className == "2k3MenuRootCaption") {
		el = el.parentElement ;
	}
	if (el.className == "2k3MenuRoot") {
		if (isElementEnabled(el)) {
			if (checkMenuStates()) {
				if (element.parentElement.parentElement.parentElement.activeChild == null) {
					showActive(el) ;
					showMenu() ;
					element.menuState = true ;
				}
			}
			else {
				if (!element.menuState) {
					if (element.parentElement.parentElement.parentElement.activeChild != null) {
						if (element.parentElement.parentElement.parentElement.activeChild.parentElement == element.parentElement) {
							showOver(el) ;
						}
					}
					else {
						showOver(el) ;
					}
				}
			}
		}
	}
}

function elementOnMouseOut() {
	var el = window.event.srcElement ;
	if (el.className == "2k3MenuRootCaption") {
		el = el.parentElement ;
	}
	if (el.className == "2k3MenuRootOver") { 
		if (isElementEnabled(el)) {
			if (!element.menuState) {
				showNormal(el) ;
			}
		}
	}
}

function elementOnMouseDown() {
	var el = window.event.srcElement ;
	if (el.className == "2k3MenuRootCaption") {
		el = el.parentElement ;
	}
	if (el.className == "2k3MenuRootOver") { 
		if ((window.event.button == vbLeftButton) && isElementEnabled(el)) {
			if (!element.menuState) {
				showActive(el) ;
				showMenu() ;
			}
		}
	}
}

function elementOnMouseUp() {
	var el = window.event.srcElement ;
	if (el.className == "2k3MenuRootCaption") {
		el = el.parentElement ;
	}
	if (el.className == "2k3MenuRootActive") { 
		if ((window.event.button == vbLeftButton) && isElementEnabled(el)) {
			if (element.menuState) {
				hideMenu() ;
				showOver(el) ;
			}
			else {
				element.menuState = true ;
			}
		}
	}
}

function elementPropertyChange() {
	if (window.event.propertyName == "enabled") {
		if (element.enabled) {
			showEnabled(element) ;
		}
		else {
			showDisabled(element) ;
		}
	}
}

function elementOnSelect() {
	with (window.event) {
		cancelBubble = true ;
		returnValue = false ;
	}
	return false ;
}

function elementOnContextMenu() {
	with (window.event) {
		cancelBubble = true ;
		returnValue = false ;
	}
	return false ;
}

function isElementEnabled(el) {
	return el.enabled ;
}

function showNormal(el) {
	for (var i = 0; i <= 3; i++) {
		if (menuShadowArray[i] != null) {
			menuShadowArray[i].style.visibility = "hidden" ;
		}
	}
	el.className = "2k3MenuRoot" ;
}

function showOver(el) {
	el.className = "2k3MenuRootOver" ;
}

function showActive(el) {
	el.className = "2k3MenuRootActive" ;
	for (var i = 3; i >= 0; i--) {
		with (menuShadowArray[i].style) {
			left = el.offsetLeft + (4 + i) - 1 ;
			top = el.offsetTop + (4 + i) ;
			width =  el.offsetWidth - (i * 2) ;
			height = el.offsetHeight - (i * 2) ;
			zIndex = el.style.zIndex - 1 ;
			visibility = "visible" ;
		}
	}
}

function showDisabled(el) {
	el.className = "2k3MenuRootDisabled" ;
}

function showEnabled(el) {
	el.className = "2k3MenuRoot" ;
}

function checkMenuStates() {
	for (var i = 0; i < element.parentElement.children.length; i++) {
		var childElement = element.parentElement.children[i] ;
		if (childElement != element) {
			with (childElement) {
				if (className == "2k3MenuRootActive") {
					hideMenu() ;
					return true ;
				}
			}
		}
	}
	return false ;
}

function showMenu() {
	with (element) {
		var x = offsetLeft + parentElement.parentElement.parentElement.offsetLeft ;
		var y = offsetTop + offsetHeight + parentElement.parentElement.parentElement.offsetTop - 3 ;
		var w = offsetWidth - 2 ;
	}
	with (window.document) {
		attachEvent("onclick", hideMenuEx) ;
		getElementById(element.menu).showMenu(x, y, w) ;
	}
	element.parentElement.parentElement.parentElement.activeChild = element ;
}

function hideMenu() {
	var el = window.event.srcElement ;
	var elParent = el.parentElement ;
	if (elParent != null) {
		switch (elParent.className) {
			case "2k3MenuImageShadow":
				elParent = elParent.parentElement ;
				break ;
			case "2k3MenuImage":
				elParent = elParent.parentElement ;
				break ;
			case "2k3MenuItemOver":
				el = elParent.parentElement.parentElement ;
				if (el.subMenuState) {
					elParent = null ;
					el = null ;
					return ;
				}
				break ;
		}
	}
	with (window.document) {
		detachEvent("onclick", hideMenuEx) ;
		getElementById(element.menu).hideMenu() ;
	}
	showNormal(element) ;
	element.menuState = false ;
	element.parentElement.parentElement.parentElement.activeChild = null ;
}

function hideMenuEx() {
	var el = window.event.srcElement ;
	if (el.className != "2k3MenuRootActive" && el.className != "2k3MenuRootCaption") {
		hideMenu() ;
		with (window.event) {
			cancelBubble = true ;
			returnValue = false ;
		}
	}
}

function makeBooleanOfAttribute(attName) {
	a = element.getAttribute(attName) ;
	if (typeof(a) == "boolean") {
		return a ;
	}
	else if (a == null) {
		a = false ;
	}
	else if (typeof(a) == "string") {
		a = a.toLowerCase() ;
		a = (a == "true" || a == "1" || a == "yes") ;
	}
	else {
		a = new Boolean(a) ;
	}
	return a ;
}

</script>

</PUBLIC:COMPONENT>