/* x_drag.js compiled from X 4.0 with XC 0.27b. Distributed by GNU LGPL. For copyrights, license, documentation and more visit Cross-Browser.com */

function OnDragStart(ele, mx, my)
{
  window.status = '';
  ele.totalMX = 0;
  ele.totalMY = 0;
}
function OnDrag(ele, mdx, mdy)
{
  xMoveTo(ele, xLeft(ele) + mdx, xTop(ele) + mdy);
  ele.totalMX += mdx;
  ele.totalMY += mdy;
}

function xDisableDrag(id, last)
{
	if (!window._xDrgMgr) return;
	var ele = xGetElementById(id);
	ele.xDraggable = false;
	ele.xODS = null;
	ele.xOD = null;
	ele.xODE = null;
	xRemoveEventListener(ele, 'mousedown', _xOMD, false);
	
	if (_xDrgMgr.mm && last) 
	{
		_xDrgMgr.mm = false;
		xRemoveEventListener(document, 'mousemove', _xOMM, false);
	}
}

var _xDrgMgr = {ele:null, mm:false};

function xEnableDrag(id,fS,fD,fE)
{
	var ele = xGetElementById(id);
	ele.xDraggable = true;
	ele.xODS = fS;
	ele.xOD = fD;
	ele.xODE = fE;
	xAddEventListener(ele, 'mousedown', _xOMD, false);
	if (!_xDrgMgr.mm) 
	{
		_xDrgMgr.mm = true;
		xAddEventListener(document, 'mousemove', _xOMM, false);
	}
}

function _xOMD(e) 
{
	var evt = new xEvent(e);
	var ele = evt.target;
	while(ele && !ele.xDraggable) 
	{
		ele = xParent(ele);
	}
	if (ele) 
	{
		xPreventDefault(e);
		ele.xDPX = evt.pageX;
		ele.xDPY = evt.pageY;
		_xDrgMgr.ele = ele;
		xAddEventListener(document, 'mouseup', _xOMU, false);
		if (ele.xODS) 
		{
			ele.xODS(ele, evt.pageX, evt.pageY);
		}
	}
}

function _xOMM(e) 
{
	var evt = new xEvent(e);
	if (_xDrgMgr.ele) 
	{
		xPreventDefault(e);
		var ele = _xDrgMgr.ele;
		var dx = evt.pageX - ele.xDPX;
		var dy = evt.pageY - ele.xDPY;
		ele.xDPX = evt.pageX;
		ele.xDPY = evt.pageY;
		if (ele.xOD) 
		{
			ele.xOD(ele, dx, dy);
		}
		else 
		{
			xMoveTo(ele, xLeft(ele) + dx, xTop(ele) + dy);
		}
	}  
}

function _xOMU(e) 
{
	if (_xDrgMgr.ele) 
	{
		xPreventDefault(e);
		xRemoveEventListener(document, 'mouseup', _xOMU, false);
		if (_xDrgMgr.ele.xODE) 
		{
			var evt = new xEvent(e);
			_xDrgMgr.ele.xODE(_xDrgMgr.ele, evt.pageX, evt.pageY);
		}
		_xDrgMgr.ele = null;
	}  
}
