/* This script and many more are available free online at
The JavaScript Source!! http://javascript.internet.com
Created by: Justas | http://www.webtoolkit.info/ */
var DragHandler = {

// private property.
_oElem : null,

// public method. Attach drag handler to an element.
attach : function(oElem) {
		oElem.onmousedown = DragHandler._dragBegin;
		// callbacks
		oElem.dragBegin = new Function();
		oElem.drag = new Function();
		oElem.dragEnd = new Function();
		return oElem;
},

// private method. Begin drag process.
_dragBegin : function(e) {
		var oElem = DragHandler._oElem = this;
		if (isNaN(parseInt(oElem.style.left))) { oElem.style.left = '0px'; }
		if (isNaN(parseInt(oElem.style.top))) { oElem.style.top = '0px'; }
		var x = parseInt(oElem.style.left);
		var y = parseInt(oElem.style.top);
		e = e ? e : window.event;
		oElem.mouseX = e.clientX;
		oElem.mouseY = e.clientY;
		oElem.dragBegin(oElem, x, y);
		document.onmousemove = DragHandler._drag;
		document.onmouseup = DragHandler._dragEnd;
		return false;
},

// private method. Drag (move) element.
_drag : function(e) {
		var oElem = DragHandler._oElem;
		var x = parseInt(oElem.style.left);
		var y = parseInt(oElem.style.top);
		e = e ? e : window.event;
		oElem.style.left = x + (e.clientX - oElem.mouseX) + 'px';
		oElem.style.top = y + (e.clientY - oElem.mouseY) + 'px';
		oElem.mouseX = e.clientX;
		oElem.mouseY = e.clientY;
		oElem.drag(oElem, x, y);
		return false;
},

// private method. Stop drag process.
_dragEnd : function() {
		var oElem = DragHandler._oElem;
		var x = parseInt(oElem.style.left);
		var y = parseInt(oElem.style.top);
		oElem.dragEnd(oElem, x, y);
		document.onmousemove = null;
		document.onmouseup = null;
		DragHandler._oElem = null;
	}
};

// =============

function beginScript() {
  function begin (element, x, y) {
  		var s = '#' + element.id + ' (begin drag)' + ' x:' + x + ', y:' + y;
  		updateInfo(s);
  }

  function drag (element, x, y) {
  		var s = '#' + element.id + ' (dragging)' + ' x:' + x + ', y:' + y;
  		updateInfo(s);
  }

  function end (element, x, y) {
  		var s = '#' + element.id + ' (end drag)' + ' x:' + x + ', y:' + y;
  		updateInfo(s);
  }

  function updateInfo(s) {
  // Comment out the line below to stop displaying the location
  		document.getElementById('info').innerHTML = s;
  }

  var dragable1 = DragHandler.attach(document.getElementById('dragable1'));
  var dragable2 = DragHandler.attach(document.getElementById('dragable2'));
  var dragable3 = DragHandler.attach(document.getElementById('dragable3'));

  dragable1.dragBegin = begin;
  dragable1.drag = drag;
  dragable1.dragEnd = end;

  dragable2.dragBegin = begin;
  dragable2.drag = drag;
  dragable2.dragEnd = end;

  dragable3.dragBegin = begin;
  dragable3.drag = drag;
  dragable3.dragEnd = end;
}

// =============

// Multiple onload function created by: Simon Willison
// http://simon.incutio.com/archive/2004/05/26/addLoadEvent
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

addLoadEvent(function() {
  beginScript();
});


