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

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;
    }
}
