/**
  * drag.js
  *
  * $Id: drag.js,v 1.18 2001/09/04 17:01:58 rainwater Exp $
  *
  * jsDOM API
  * Copyright (C) 2001 Robert Rainwater
  */

DOMElement.prototype.enableDragEvents=function(lyr) {
	this.dragEvents=true;
	this.drag=lyr||this;
	this.elm.onselectstart=function() { return false; };
	this.addEventListener("mousedown",DOMElement.dragEventDown);
	if (!DOMElement.dragCaptured) {
		DOMEvent.addEvent(document.body,"mousemove",DOMElement.dragEventMove);
		DOMEvent.addEvent(document.body,"mouseup",DOMElement.dragEventUp);
		DOMElement.dragCaptured=true;
	}
}
DOMElement.prototype.disableDragEvents=function() {
	this.dragEvents=false;
}
DOMElement.prototype.setBoundary=function(l,t,r,b) {
	this.dragL=l; this.dragT=t; this.dragR=r; this.dragB=b;
}
DOMElement.dragActive=null;
DOMElement.dragEventDown=function(e) {
	var evt=new DOMEvent(e);
	var src=new DOMElement(evt.src.id);
	if (src&&src.dragEvents) {
		DOMElement.dragActive=src;
		src.dragOffsetX=evt.pageX-src.getX();
		src.dragOffsetY=evt.pageY-src.getY();
		src.invokeEvent("dragstart");
	}
}

DOMElement.dragEventMove=function(e) {
	var evt = new DOMEvent(e);
	var src = DOMElement.dragActive;
	if (src) {
	  var x=evt.pageX-src.dragOffsetX;
	  var y=evt.pageY-src.dragOffsetY;
          if ((!src.dragL||src.dragL<x)&&(!src.dragR||src.dragR>x)) {
              //              document.write(x+'|'+y+'|'+src.dragL+'|'+src.dragR+'|'+src.dragT+'|'+src.dragB+'|');
              src.drag.setX(evt.pageX-src.dragOffsetX);
          }
          if ((!src.dragT||src.dragT<y)&&(!src.dragB||src.dragB>y))  {
              src.drag.setY(evt.pageY-src.dragOffsetY);
          }
          src.invokeEvent("drag");
	}
}
DOMElement.dragEventUp=function(e) {
	var src=DOMElement.dragActive;
	if (src) {
            DOMElement.dragActive=null;
            src.invokeEvent("dragend");
	}
}