//*****************************************************************************
// Do not remove this notice.
//
// Copyright 2001 by Mike Hall.
// See http://www.brainjar.com for terms of use.
//*****************************************************************************

// Global object to hold drag information.

var dragObj = new Object();
dragObj.zIndex = 0;


// Get current mouse position
// Apparently, screenX is ok for everyone
function getPosition(event) {
	return(new Point(event.clientX, event.clientY));
}

function dragStart(event, movecallback, id, donecallback) {
  // If an element id was given, find it. Otherwise use the element being
  // clicked on.
  if (id) {
    dragObj.elNode = getElement(id);
  } else {
    dragObj.elNode = eventTarget(event);
    while (dragObj.elNode.nodeType == 3) { 		// If text node, use parent
      dragObj.elNode = dragObj.elNode.parentNode;
	}
  }

  // Get anchor position with respect to the page.
  dragObj.cursor    = getPosition(event);
  dragObj.movecallback  = movecallback == null ? moveme : movecallback;
  dragObj.donecallback  = donecallback;
  dragObj.mousemove= dragGo;
  dragObj.mouseup= dragStop;

  // Capture mousemove and mouseup events on the page.
  mouseDragStart(dragObj.mousemove, dragObj.mouseup);
  stopEvent(event);
}

function dragGo(event) {
  var pos = getPosition(event);

  // Call event callback to Move drag element by the 
  // same amount the cursor has moved.
  newpos = Point.subtract(pos, dragObj.cursor);
  if (dragObj.movecallback) {
      dragObj.movecallback(newpos.x, newpos.y, dragObj);
	  dragObj.cursor = pos;
  }
  stopEvent(event);
}


function dragStop(event) {
  // Stop capturing mousemove and mouseup events.
  mouseDragStop(dragObj.mousemove, dragObj.mouseup);
  if (dragObj.donecallback) dragObj.donecallback(dragObj);
}

// Default callback that moves the entire element
function moveme(x,y,dragObj) {
	//me = getElement(id);
	var me = dragObj.elNode;
	var xpos = parseInt(me.style.left,10);
	var ypos = parseInt(me.style.top,10);
	if (isNaN(xpos)) xpos = 0;
	if (isNaN(ypos)) ypos = 0;

	me.style.left = xpos + x + "px";
	me.style.top  = ypos + y + "px";
}

//<div id="boxA" class="box content" style="left:400px;top:50px;width:12em;"
//     onmousedown="dragStart(event)">
//This is Box A, drag it.
//</div>
