
var draggingObjId = null;
var hasRegisteredDragDropDocumentEvents = false;
var dragDropEndedCallback = null;

//---------------------------------------------------------------------------
function startDragDrop(event, objId) {
  draggingObjId = objId;
  /*
  var obj = document.getElementById(objId);
  if (obj) {
    obj.style.cursor = "move";
  }
  */
}
//---------------------------------------------------------------------------
function stopDragDrop(event) {
  /*
  var obj = document.getElementById(draggingObjId);
  if (obj) {
    obj.style.cursor = "default";
  }
  */
  if (dragDropEndedCallback) {
    dragDropEndedCallback(draggingObjId);
  }
  draggingObjId = null;
}

//---------------------------------------------------------------------------
function dragDropMouseDown(event, objId) {
  debug("mouseDown event.clientX=" + event.clientX + " event.clientY=" + event.clientY);
  var obj = document.getElementById(objId);
  if (ie) obj.style.filter = "Alpha(opacity=50)";
  if (w3c) obj.style.MozOpacity = 0.5;

  obj.oldLeft = parseInt(obj.style.left);
  obj.oldTop = parseInt(obj.style.top);
  obj.mouseDownX = event.clientX;
  obj.mouseDownY = event.clientY;

  startDragDrop(event, objId);

  /*
  if (document.selection && document.selection.empty) document.selection.empty();
  obj.onselectstart = function()
  {
    event.returnValue = false;
  };
  */

  //event.stopPropagation(); 
  event.returnValue = false;
  return false;
}
//---------------------------------------------------------------------------
function dragDropMouseUp(event) {
  if (draggingObjId) {
    debug("mouseUp");
    var obj = document.getElementById(draggingObjId);
    if (ie) obj.style.filter = "";
    if (w3c) obj.style.MozOpacity = 1.0;
    //window.event.cancelBubble = true;

    stopDragDrop(event);
  }

  return true;
}
//---------------------------------------------------------------------------
function dragDropMouseDragDrop(event, objId) {
  debug("mouseDragDrop");
  //event.cancelBubble = true;
  return false;
}
//---------------------------------------------------------------------------
function dragDropMouseMove(event) {
  if (draggingObjId) {
    var obj = document.getElementById(draggingObjId);
    var newLeft = obj.oldLeft + (event.clientX - obj.mouseDownX);
    var newTop = obj.oldTop + (event.clientY - obj.mouseDownY);

    debug("mouseMove event.clientX=" + event.clientX + " event.clientY=" + event.clientY + " newLeft=" + newLeft + " newTop=" + newTop);
    //event.cancelBubble = true;
    //event.stopPropagation(); 

    obj.style.left = newLeft + "px";
    obj.style.top = newTop + "px";
  }
  //return false;
}
//---------------------------------------------------------------------------
function dragDropMouseOut(event, objId) {
  debug("mouseOut");
  var obj = document.getElementById(objId);
  if (ie) obj.style.filter = "";
  if (w3c) obj.style.MozOpacity = 1.0;
  //window.event.cancelBubble = true;
  return false;
}
//---------------------------------------------------------------------------
function dragDropMouseOver(event, objId) {
  debug("mouseOver");
  //window.event.cancelBubble = true;
  return false;
}

//---------------------------------------------------------------------------
function setDragDropObject(objId) {
  if (!hasRegisteredDragDropDocumentEvents) {
    document.onmouseup = new Function(["event"], "return dragDropMouseUp(event != null ? event : window.event)");
    document.onmousemove = new Function(["event"], "return dragDropMouseMove(event != null ? event : window.event)");
    hasRegisteredDragDropDocumentEvents = true;
  }

  var objElement = document.getElementById(objId);
  if (objElement) {
    objElement.onmousedown = new Function(["event"], "return dragDropMouseDown(event != null ? event : window.event, \"" + objId + "\")");
    objElement.onmouseout = new Function(["event"], "return dragDropMouseOut(event != null ? event : window.event, \"" + objId + "\")");
    objElement.onmouseover = new Function(["event"], "return dragDropMouseOver(event != null ? event : window.event, \"" + objId + "\")");
    objElement.onmousedrag = new Function(["event"], "return dragDropMouseDragDrop(event != null ? event : window.event, \"" + objId + "\")");
    if (ie) objElement.ondragstart = function() { event.returnValue = false; };
    objElement.style.cursor = "move";
  }
}

//---------------------------------------------------------------------------
function registerDragDropEndedCallback(callback) {
  dragDropEndedCallback = callback;
}

