<public:component>
<public:attach event="onmousedown" onevent="startMove()" />
<script>

var _dx, _dy;

function getLeft() {
	return window.screenLeft - getInsets().left;
}

function getTop() {
	return window.screenTop - getInsets().top;
}

function getInsets() {
	// Store the old document position
	var oldScreenLeft = window.screenLeft;
	var oldScreenTop = window.screenTop;

	// if no previous inset calculated assume one
	if (window._insets == null)
		window._insets = {left: 5, top: 80};

	// move to a known position
	window.moveTo(oldScreenLeft - window._insets.left,
				  oldScreenTop - window._insets.top);
	
	// Measure the new document position
	var newScreenLeft = window.screenLeft;
	var newScreenTop = window.screenTop;
	
	// ... and store the insets result
	var res = {
		left:	newScreenLeft - oldScreenLeft + window._insets.left,
		top:	newScreenTop - oldScreenTop + window._insets.top
	};
	
	// move back the window to its original place
	window.moveTo(oldScreenLeft - res.left, oldScreenTop - res.top);
	
	// and backup the insets for next time
	window._insets = res;
	
	return res;
}

function startMove() {
	_dx = event.screenX - getLeft();
	_dy = event.screenY - getTop();
	element.attachEvent("onmousemove", doMove);
	element.attachEvent("onmouseup", endMove);
	element.attachEvent("onlosecapture", endMove);
	element.setCapture();

	event.cancelBubble = true;
}

function doMove() {
	window.moveTo(event.screenX - _dx, event.screenY - _dy);
}

function endMove() {
	element.detachEvent("onmousemove", doMove);
	element.detachEvent("onmouseup", endMove);
	element.detachEvent("onlosecapture", endMove);
	element.releaseCapture();
}



</script>
</public:component>

