//------------------------------------------------------------------
// drag-functionality
//------------------------------------------------------------------

var drag = {
	active: false
};

drag.enable = function(elm) {
	if (typeof document.onmousemove != 'function') document.onmousemove = drag.mousemoveFunc;
	else if (document.onmousemove != drag.mousemoveFunc) alert('document.onmousemove != drag.mousemoveFunc');
	
	if (typeof document.onmouseup != 'function') document.onmouseup = drag.mouseupFunc;
	else if (document.onmouseup != drag.mouseupFunc) alert('document.onmouseup != drag.mouseupFunc');
	
	elm.onmousedown = drag.mousedownFunc;
	elm.onmouseup = drag.mouseupFunc;	
};

drag.disable = function(elm) {
	elm.onmousedown = null;
	elm.onmouseup = null;
};


// Eventhandlers

drag.mousedownFunc = function(e) {
	if (ua.ie) {
		e = event;
		document.body.onselectstart = function() { return false; };
	}
	
	// the object being dragged
	drag.obj = this;

	drag.startX = dom.getX(this);
	drag.startY = dom.getY(this);
	drag.mouseDownX = e.clientX;
	drag.mouseDownY = e.clientY;
	
		
	if (!ua.ie) e.preventDefault();

	if (drag.obj.invokeEvent) drag.obj.invokeEvent('dragstart');
	if (drag.obj.ondragstart) drag.obj.ondragstart();
};
drag.mousemoveFunc = function(e) {
	if (ua.ie) e = event;

	if (drag.obj) {
		//window.status = 'mousemove clientX:' + e.clientX + ' clientY:' + e.clientY;
		var x = (drag.startX + e.clientX - drag.mouseDownX);
		var y = (drag.startY + e.clientY - drag.mouseDownY);
		
		var db = drag.obj.dragBoundary;
		if (db) {
			var t = db[0]; var r = db[1]; var b = db[2]; var l = db[3];
			x = (x < l) ? l : (x > r) ? r : x;
			y = (y < t) ? t : (y > b) ? b : y;
		}
		
		dom.setProperties(drag.obj, {x:x,y:y});
		
		if (drag.obj.invokeEvent) drag.obj.invokeEvent('dragmove');
		if (drag.obj.ondragmove) drag.obj.ondragmove();
	}
	
	return false;
};
drag.mouseupFunc = function(e) {
	if (!drag.obj) return;
	
	if (ua.ie) document.body.onselectstart = null;
	if (!ua.ie) e.preventDefault();

	if (drag.obj.invokeEvent) drag.obj.invokeEvent('dragend');
	if (drag.obj.ondragend) drag.obj.ondragend();

	drag.obj = null;
};



