<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="buttonStyle" value="normal" />
<PUBLIC:property name="group" value="" />
<PUBLIC:property name="value" value=false />
<PUBLIC:property name="enabled" value=true />

<script language="jscript">

// ----------------------------------------------------
// 2k3Widgets: 2k3Button
// 
// 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 ;

function initElement() {
	settingValueInternally = true ;
	element.value = makeBooleanOfAttribute("value") ;
	if (element.value) {
		showToggled(element) ;
	}
	element.enabled = makeBooleanOfAttribute("enabled") ;
	if (!element.enabled) {
		showDisabled(element) ;
	}
	settingValueInternally = false ;
}

function cleanupElement() {
}

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.buttonStyle.toLowerCase() == "toggle" && element.value) {
				showActive(element) ;
			}
			else {
				showOver(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) {
			if (element.buttonStyle.toLowerCase() == "toggle" && element.value) {
				showToggled(element) ;
			}	
			else {
				showNormal(element) ;
			}
		}
	}
}

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

function elementOnMouseUp() {
	var el = getRealItem(window.event.srcElement) ;
	if (element.parentElement.parentElement.parentElement.parentElement.activeChild == null) {
		if ((window.event.button == vbLeftButton) && element.enabled) {
			if (el.className.indexOf("2k3Button") == -1) {
				return ;
			}
			if (el.className == "2k3ButtonActive") {
				if (el == element) {
					element.settingValueInternally = true ;
					element.value = !element.value ;
					element.settingValueInternally = false ;
					if (buttonStyle == "toggle" && element.value) {
						showActive(el) ;
						setGroupItemState(el) ;
					}
					else {
						showOver(el) ;
					}
				}
				else {
					showNormal(element) ;
				}
			}
		}
	}
}

function elementPropertyChange() {
	if (window.event.propertyName == "enabled") {
		if (element.enabled) {
			showEnabled(element) ;
		}
		else {
			showDisabled(element) ;
		}
	}
	if (window.event.propertyName == "value") {
		if (!element.settingValueInternally && element.enabled) {
			setGroupItemState(element) ;
			if (element.value) {
				showToggled(element) ;
			}
			else {
				showNormal(element) ;
			}
			// un-comment next line if you want a click event on toggle state change
			//element.click() ;
		}
	}
}

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

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

function setGroupItemState(objUnknown) {
	var currentRow = element.parentElement.parentElement ;
	for (var i = 0; i < currentRow.cells.length; i++) {
		var el = currentRow.cells[i].children[0] ;
		if (el != null) {
			if (el.className == "2k3ButtonToggled") {
				if (el != element && el.group == element.group && el.group != "") {
					if (el.value) {
						el.value = false ;
						return ;
					}
				}
			}
		}
	}
}

function showNormal(el) {
	with (el) {
		if (className = "2k3Button") { className = "2k3Button" } ;
	}
}

function showOver(el) {
	with (el) {
		if (className = "2k3ButtonOver") { className = "2k3ButtonOver" } ;
	}
}

function showActive(el) {
	with (el) {
		if (className = "2k3ButtonActive") { className = "2k3ButtonActive" } ;
	}
}

function showToggled(el) {
	with (el) {
		if (className = "2k3ButtonToggled") { className = "2k3ButtonToggled" } ;
	}
}

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

function showEnabled(el) {
	with (el) {
		if (className == "2k3ButtonDisabled") {
			if (element.buttonStyle == "toggle" && element.value) {
				className = "2k3ButtonToggled" ;
			}
			else {
				className = "2k3Button" ;
			}
			if (onClickHolder != null) {
				onclick = onClickHolder ;
				onClickHolder = null ;
			}
		}
	}
}

function getRealItem(el) {
	var tmpElement = el ;
	if (tmpElement == null) { return tmpElement ; }
	if (tmpElement.tagName.toLowerCase() == "img") {
		tmpElement = tmpElement.parentElement ;
	}
	if (tmpElement.className == "2k3ButtonCaption") {
		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>