<PUBLIC:COMPONENT
    lightWeight = true
>

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

<PUBLIC:attach event="ondocumentready" onevent="initElement()" />
<PUBLIC:attach event="ondetach" onevent="cleanupElement()" />
<PUBLIC:attach event="oncontextmenu" onevent="elementOnContextMenu()" />
<PUBLIC:attach event="onpropertychange" onevent="elementOnPropertyChange()" />

<PUBLIC:property name="left" value=0 />
<PUBLIC:property name="top" value=0 />
<PUBLIC:property name="height" value=200 />
<PUBLIC:property name="width" value=250 />
<PUBLIC:property name="src" value="" />
<PUBLIC:property name="caption" value="" />
<PUBLIC:property name="resizable" value=true />

<script language="jscript">

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

var isIE6 = ((window.navigator.appVersion).indexOf("MSIE 6.") != -1) ;

var inDrag = false ;
var inSize = false ;

var orgX ;
var orgY ;
var orgTop ;
var orgLeft ;
var orgHeight ;
var orgWidth ;
var orgDirection ;

var objWindowCaption = null ;
var objCaptionImage = null ;
var objCloseButton = null ;
var objContentWindow = null ;
var objCurrentButton = null ;

internalSettingProperties = false ;

// ----------------------------------------------------
// initialize/terminate functions   
// ----------------------------------------------------

function initElement() {
	with (element) {
		resizable = makeBooleanOfAttribute("resizable") ;
		attachEvent("onselectstart", elementOnSelect)
		attachEvent("onmousedown", elementOnMouseDown)
		attachEvent("onmouseup", elementOnMouseUp)
		attachEvent("onmousemove", elementOnMouseMove)
		for (var i = 0; i < children.length; i++) {
			switch (element.children[i].className) {
				case "windowCaption":
					objWindowCaption = children[i] ;
					objWindowCaption.attachEvent("onmousedown", captionOnMouseDown)
					element.caption = objWindowCaption.innerHTML ;
					break ;
				case "captionImage":
					objCaptionImage = children[i] ;
					break ;
				case "windowButtonClose":
					objCloseButton = children[i] ;
					objCloseButton.title = "Close"
					objCloseButton.children[0].setAttribute("src", currentStyle.closeImageUrl)
					objCloseButton.attachEvent("onmousedown", buttonOnMouseDown)
					objCloseButton.attachEvent("onmouseup", buttonOnMouseUp)
					break ;
				case "windowContent":
					objContentWindow = children[i] ;
					objContentWindow.attachEvent("onload", contentOnLoad)
					objContentWindow.setAttribute("src", src)
					break ;
			}
		}
	}
}

function cleanupElement() {
	with (element) {
		detachEvent("onselectstart", elementOnSelect)
		detachEvent("onmousedown", elementOnMouseDown)
		detachEvent("onmouseup", elementOnMouseUp)
		detachEvent("onmousemove", elementOnMouseMove)
	}
	with (objWindowCaption) {
		detachEvent("onmousedown", captionOnMouseDown)
		objWindowCaption = null ;
	}
	with (objCloseButton) {
		detachEvent("onmousedown", buttonOnMouseDown)
		detachEvent("onmouseup", buttonOnMouseUp)
		objCloseButton = null ;
	}
	with (objContentWindow) {
		detachEvent("onload", contentOnLoad)
		objContentWindow = null ;
	}
}


// ----------------------------------------------------
// element functions   
// ----------------------------------------------------

function elementOnMouseDown() {
	var ev = window.event ;
	if (ev.srcElement == element) {
		if (ev.button == 1 && orgDirection != "" && element.resizable) {
			inSize = true
			orgX = ev.clientX ;
			orgY = ev.clientY ;
			orgTop = element.offsetTop ;
			orgLeft = element.offsetLeft ;
			orgHeight = element.offsetHeight ;
			orgWidth = element.offsetWidth ;
			element.setCapture() ;
			with (ev) {
				returnValue = false ;
				cancelBubble = true ;
			}
		}
	}
}

function elementOnMouseUp() {
	if (inSize) {
		inSize = false ;
		element.releaseCapture() ;
	}
}

function elementOnMouseMove() {
	if (inDrag) {
		return ;
	}
	if (inSize) {
		var btnWidth = objCloseButton.offsetWidth ;
		with (window.event) {
			var cliX = clientX ;
			var cliY = clientY ;
			returnValue = false ;
			cancelBubble = true ;
		}
		if (orgDirection.indexOf("e") != -1) {
			var intX = orgWidth + cliX - orgX ;
			if (intX < 60) {
				intX = 60 ;
			}
			element.style.width = intX ;
			intX -= 8 ;
			objCloseButton.style.left = intX - btnWidth ;
			objContentWindow.style.width = intX ;
		}
		if (orgDirection.indexOf("s") != -1) {
			var intY = orgHeight + cliY - orgY ;
			if (intY < 60) {
				intY = 60 ;
			}
			element.style.height = intY ;
			objContentWindow.style.height = intY - objWindowCaption.offsetHeight - 10 ;
		}
		if (orgDirection.indexOf("w") != -1) {
			var intX = orgWidth - cliX + orgX ;
			var intL = orgLeft + cliX - orgX ;
			if (intX < 60) {
				intX = 60 ;
				intL = orgLeft + orgWidth - 60 ;
			}
			element.style.left = intL ;
			element.style.width = intX ;
			intX -= 8 ;
			objCloseButton.style.left = intX - btnWidth ;
			objContentWindow.style.width = intX ;
		}
		if (orgDirection.indexOf("n") != -1) {
			var intY = orgHeight - cliY + orgY ;
			var intT = orgTop + cliY - orgY ;
			if (intY < 60) {
				intY = 60 ;
				intT = orgTop + orgHeight - 60 ;
			}
			with (element.style) {
				top = intT ;
				height = intY ;
			}
			objContentWindow.style.height = intY - objWindowCaption.offsetHeight - 10 ;
		}
	}
	else {
		if (window.event.srcElement == element && element.resizable) {
			orgDirection = getResizeDirection() ;
			if (orgDirection == "") {
				var strCursor = "default" ;
			}
			else {
				var strCursor = orgDirection + "-resize" ;
			}
			element.style.cursor = strCursor ;
		}
	}
	return false ;
}

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

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

function elementOnPropertyChange() {
	if (internalSettingProperties) {
		return ;
	}
	switch (window.event.propertyName) {
		case "caption":
			objWindowCaption.innerHTML = element.caption ;
			break ;
		case "src":
			objContentWindow.setAttribute("src", element.src) ;
			break ;
		case "left":
		case "top":
		case "width":
		case "height":
			if (inDrag || inSize) {
				return ;
			}
			with (element) {
				style.left = left ;
				style.top = top ;
				style.width = width ;
				style.height = height ;
			}
			with (objWindowCaption) {
				var capWidth = offsetWidth ;
				var capHeight = offsetHeight ;
				var capTop = offsetTop ;
			}
			with (objCloseButton) {
				var btnWidth = offsetWidth ;
				var btnHeight = offsetHeight ;
				style.top = (capHeight / 2) - (btnHeight / 2) + capTop ;
				style.left = capWidth - btnWidth + 1 ;
			}
			with (objCaptionImage) {
				var imgHeight = objCaptionImage.offsetHeight ;
				style.top = (capHeight / 2) - (imgHeight / 2) + capTop + 1 ;
			}
			with (objContentWindow) {
				style.width = capWidth ;
				style.height = element.offsetHeight - capHeight - 10 ;
			}
			break ;
	}
}


// ----------------------------------------------------
// caption functions   
// ----------------------------------------------------

function captionOnMouseDown() {
	with (window.event) {
		if (button != 1) {
			return ;
		}
		inDrag = true ;
		orgX = clientX - element.style.pixelLeft ;
		orgY = clientY - element.style.pixelTop ;
		cancelBubble = true ;
		returnValue = false ;
	}
	element.setCapture() ;
	with (window.document) {
		attachEvent("onmouseup", captionOnMouseUp) ;
		attachEvent("onmousemove", captionOnMouseMove) ;
	}
}

function captionOnMouseUp() {
	inDrag = false ;
	element.releaseCapture() ;
	with (window.document) {
		detachEvent("onmouseup", captionOnMouseUp) ;
		detachEvent("onmousemove", captionOnMouseMove) ;
	}
}

function captionOnMouseMove() {
	if (inDrag) {
		with (window.event) {
			if (clientX > 0 && clientX < element.parentElement.offsetWidth) {
				element.style.left = clientX - orgX ;
			}
			if (clientY > 0 && clientY < element.parentElement.offsetHeight) {
				element.style.top = clientY - orgY ;
			}
			returnValue = false ;
			cancelBubble = true ;
		}
	}
}


// ----------------------------------------------------
// close button functions   
// ----------------------------------------------------

function buttonOnMouseDown() {
	with (window.event) {
		if (button != 1) {
			return ;
		}
		var el = srcElement ;
	}
	if (el.tagName == "IMG") {
		el = el.parentElement ;
	}
	showPressed(el, el.children[0]) ;
	el.setCapture() ;
	objCurrentButton = el ;
}

function buttonOnMouseUp() {
	with (window.event) {
		if (button != 1) {
			return ;
		}
		var el = srcElement ;
	}
	if (el.tagName == "IMG") {
		el = el.parentElement ;
	}
	showRaised(objCurrentButton, objCurrentButton.children[0]) ;
	objCurrentButton.releaseCapture() ;
	if (el == objCurrentButton) {
		element.style.visibility = "hidden" ;
	}
	objCurrentButton = null ;
}


// ----------------------------------------------------
// iframe functions   
// ----------------------------------------------------

function contentOnLoad() {
	try {
		if (window.event.srcElement.contentWindow.document.title != "") {
			element.caption = window.event.srcElement.contentWindow.document.title ;
		}
	}
	catch(e) { return ; }
}


// ----------------------------------------------------
// internal functions   
// ----------------------------------------------------

function showRaised(el, elImage) {
	with (el.style) {
		borderLeft   = "1px solid buttonhighlight" ;
		borderRight  = "1px solid threeddarkshadow" ;
		borderTop    = "1px solid buttonhighlight" ;
		borderBottom = "1px solid threeddarkshadow" ;
	}
	with (elImage.style) {
		borderLeft   = "" ;
		borderRight  = "1px solid buttonshadow" ;
		borderTop    = "" ;
		borderBottom = "1px solid buttonshadow" ;
	}
}

function showPressed(el, elImage) {
	with (el.style) {
		borderLeft   = "1px solid threeddarkshadow" ;
		borderRight  = "1px solid buttonhighlight" ;
		borderTop    = "1px solid threeddarkshadow" ;
		borderBottom = "1px solid buttonhighlight" ;
	}
	with (elImage.style) {
		borderLeft   = "1px solid buttonshadow" ;
		borderRight  = "" ;
		borderTop    = "1px solid buttonshadow" ;
		borderBottom = "" ;
	}
}

function getResizeDirection() {
	var sResult = "" ;
	var offSet = 8 ;
	with (window.event) {
		var xPos = offsetX ;
		var yPos = offsetY ;
	}
	if (yPos < offSet) {
		sResult += "n" ;
	}
	if (yPos > element.offsetHeight - offSet) {
		sResult += "s" ;
	}
	if (xPos < offSet) {
		sResult += "w" ;
	}
	if (xPos > element.offsetWidth - offSet) {
		sResult += "e" ;
	}
	return sResult ;
}

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>