/*
//	© 2008 InWise Internet Company do Brasil S.A. - Todos os direitos reservados
//	www.inwise.com.br
*/

var hDragElement;
var iOriginalX;
var iOriginalY;
var bOnlyMoveInVisibleArea = true;
var oOriginalHandlers;

function StartDrag( hEvent, sDragElementRef ) {

	hEvent = GetEvent( hEvent );
	hDragElement = document.getElementById( sDragElementRef );
	iOriginalX = GetEventClientX( hEvent ) - GetElementLeft( hDragElement );
	iOriginalY = GetEventClientY( hEvent ) - GetElementTop( hDragElement );

	oOriginalHandlers = {
	
		onmousemove: document.onmousemove,
		onmouseup: document.onmouseup,
		ondragstart: document.ondragstart
	}

	document.onmousemove = DoDrag;
	document.onmouseup = StopDrag;
	document.ondragstart = CancelEvent;

	if ( isIE()) {

		document.onselectstart = CancelEvent;
		hDragElement.setCapture();

	} else {

		document.onmousedown = CancelEvent;

	}

	var hIFrame = hDragElement.getElementsByTagName( "iFrame" );
	if (( hIFrame != null ) && ( hIFrame.length > 0 )) {

		hIFrame = hIFrame[0];
		var hDummyLayer = document.createElement( "div" );
		hDummyLayer.style.top = hIFrame.parentNode.offsetTop;
		hDummyLayer.style.left = hIFrame.parentNode.offsetLeft;
		hDummyLayer.style.width = hIFrame.offsetWidth;
		hDummyLayer.style.height = hIFrame.offsetHeight;
		hDummyLayer.style.position = "absolute";
		hDummyLayer.style.zIndex = "2";
		hDummyLayer.id = "xFrameMoveDummyLayer";
		hDragElement.appendChild( hDummyLayer );

	}

	return true;

}

function DoDrag( hEvent ) {

	if ( hDragElement != null ) {

		hEvent = GetEvent( hEvent );
		var iNewLeft = GetEventClientX( hEvent ) - iOriginalX;
		var iNewTop = GetEventClientY( hEvent ) - iOriginalY;

		// Movimento somente dentro da area cliente visivel?
		if ( bOnlyMoveInVisibleArea ) {

			if ( iNewLeft < ( 0 + document.body.scrollLeft )) 
				iNewLeft = ( 0 + document.body.scrollLeft );

			else if (( document.body.clientWidth > hDragElement.offsetWidth ) &&
					(( iNewLeft + hDragElement.offsetWidth ) > ( document.body.clientWidth + document.body.scrollLeft )))
				iNewLeft = ( document.body.clientWidth + document.body.scrollLeft ) - hDragElement.offsetWidth;

			if ( iNewTop < ( 0 + document.body.scrollTop ))
				iNewTop = ( 0 + document.body.scrollTop );

			else if (( document.body.clientHeight > hDragElement.offsetHeight ) &&
					(( iNewTop + hDragElement.offsetHeight ) > ( document.body.clientHeight + document.body.scrollTop )))
				iNewTop = ( document.body.clientHeight + document.body.scrollTop ) - hDragElement.offsetHeight;

		}

		hDragElement.style.left = iNewLeft;
		hDragElement.style.top = iNewTop;

	}

	return true;

}

function StopDrag( hEvent ) {

	if ( hDragElement != null ) {

		if ( isIE()) {

			hDragElement.releaseCapture();
			document.onselectstart = null;

		} else {

			document.onmousedown = null;		

		}

		hFrameMoveDummyLayer = document.getElementById( "xFrameMoveDummyLayer" );
		if ( hFrameMoveDummyLayer != null )
			hDragElement.removeChild( hFrameMoveDummyLayer );

		document.onmousemove = oOriginalHandlers.onmousemove;
		document.onmouseup = oOriginalHandlers.onmouseup;
		document.ondragstart = oOriginalHandlers.ondragstart;

		hDragElement = null;

	}

	return true;

}
