<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=false />

<script language="jscript">

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

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

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

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() {
	if (element.enabled) {
		var fromElement = window.event.fromElement ;
		if (fromElement != null) {
			if (getRealItem(fromElement) == element) { return ; }
		}
		if (element.parentElement.parentElement.parentElement.parentElement.activeChild == null) {
			if (!element.menuState) {
				showOver(getRealItem(window.event.srcElement)) ;
				element.parentElement.parentElement.parentElement.parentElement.activeChild = element ;
			}
		}
	}
}

function elementOnMouseOut() {
	if (element.enabled) {
		var toElement = window.event.toElement ;
		if (toElement != null) {
			if (getRealItem(toElement) == element) { return ; }
		}
		if (element.parentElement.parentElement.parentElement.parentElement.activeChild == null
		|| element.parentElement.parentElement.parentElement.parentElement.activeChild == element) {
			if (!element.menuState) {
				showNormal(getRealItem(window.event.srcElement)) ;
				element.parentElement.parentElement.parentElement.parentElement.activeChild = null ;
			}
		}
	}
}

function elementOnMouseDown() {
	var el = getRealItem(window.event.srcElement) ;
	if (element.parentElement.parentElement.parentElement.parentElement.activeChild == null
		|| element.parentElement.parentElement.parentElement.parentElement.activeChild == element) {
		if ((window.event.button == vbLeftButton) && element.enabled) {
			if (el.className.indexOf("2k3MenuButton") == -1) {
				return ;
			}
			if (!element.menuState) {
				showActive(el) ;
				showMenu() ;
			}
		}
	}
}

function elementOnMouseUp() {
	var el = getRealItem(window.event.srcElement) ;
	if (element.parentElement.parentElement.parentElement.parentElement.activeChild == null
		|| element.parentElement.parentElement.parentElement.parentElement.activeChild == element) {
		if ((window.event.button == vbLeftButton) && element.enabled) {
			if (el.className.indexOf("2k3MenuButton") == -1) {
				return ;
			}
			if (element.menuState) {
				hideMenu() ;
				showOver(element) ;
			}
			else {
				if (element.className == "2k3MenuButtonActive") {
					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 showNormal(el) {
	for (var i = 0; i <= 3; i++) {
		if (menuShadowArray[i] != null) {
			menuShadowArray[i].style.visibility = "hidden" ;
		}
	}
	with (el) {
		className = "2k3MenuButton" ;
	}
}

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

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

function showDisabled(el) {
	with (el) {
		var strClassName = className ;
		if (strClassName.substring(0, 13) == "2k3MenuButton" && strClassName.indexOf("Disabled") == -1) {
			className = "2k3MenuButtonDisabled" ;
			if (onclick != null) {
				onClickHolder = onclick ;
				onclick = null ;
			}
		}
	}
}

function showEnabled(el) {
	with (el) {
		if (className == "2k3MenuButtonDisabled") {
			className = "2k3MenuButton" ;
			if (onClickHolder != null) {
				onclick = onClickHolder ;
				onClickHolder = null ;
			}
		}
	}
}

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

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.parentElement.activeChild = null ;
}

function hideMenuEx() {
	var el = window.event.srcElement ;
	if (el.tagName.toLowerCase() == "img") {
		el = el.parentElement ;
	}
	if (el.className != "2k3MenuButtonActive" && el.className != "2k3MenuButtonCaption") {
		hideMenu() ;
		with (window.event) {
			cancelBubble = true ;
			returnValue = false ;
		}
	}
}

function getRealTop(el) {
	var t = 0 ;
	var tElement = el ;
	while (tElement != null) {
		t += tElement.offsetTop ;
		tElement = tElement.offsetParent ;
	}
	return t ;
}

function getRealLeft(el) {
	var l = 0 ;
	var tElement = el ;
	while (tElement != null) {
		l += tElement.offsetLeft ;
		tElement = tElement.offsetParent ;
	}
	return l ;
}

function getRealItem(el) {
	var tmpElement = el ;
	if (tmpElement == null) { return tmpElement ; }
	if (tmpElement.tagName.toLowerCase() == "img") {
		tmpElement = tmpElement.parentElement ;
	}
	if (tmpElement.className == "2k3MenuButtonCaption") {
		tmpElement = tmpElement.parentElement ;
	}
	return tmpElement ;
}

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>