

var DaD = new function () {
  var box;
  var deltaX, deltaY;
  var deltaXPl, deltaYPl;
  var client;


  this.setdr = function ( el, plEl, prn ) {
    el.onmousedown = dragPress;
    var dad = new Array();
    el.dad = dad;
    if ( ! el.style.left ) { el.style.left = 0; };
    if ( ! el.style.top ) { el.style.top = 0; };
    if ( plEl ) {
      if ( ! plEl.style.left ) { plEl.style.left = 0; };
      if ( ! plEl.style.top ) { plEl.style.top = 0; };
      el.dad.plel = plEl;
      el.dad.prn = prn;
    };


  }

  function Evt(evt) {
    this.evt = evt ? evt : window.event;
    this.source = evt.target ? evt.target : evt.srcElement;
    this.x = evt.pageX ? evt.pageX : evt.clientX;
    this.y = evt.pageY ? evt.pageY : evt.clientY;
  }

  Evt.prototype.consume = function () {
    if (this.evt.stopPropagation) {
      this.evt.stopPropagation();
      this.evt.preventDefault();
    } else if (this.evt.cancelBubble) {
      this.evt.cancelBubble = true;
      this.evt.returnValue  = false;
    }
  };

  function addHdl (target,type,func,bubbles) {
    if (document.addEventListener) {
      target.addEventListener(type,func,bubbles);
    } else if (document.attachEvent) {
      target.attachEvent("on"+type,func,bubbles);
    } else {
      target["on"+type] = func;
    }
  };

  function rmvHdl (target,type,func,bubbles) {
    if (document.removeEventListener) {
      target.removeEventListener(type,func,bubbles);
    } else if (document.detachEvent) {
      target.detachEvent("on"+type,func,bubbles);
    } else {
      target["on"+type] = null;
    }
  };

  function dragPress(evt) {
    if ( evt ) {
      evt = new Evt(evt);
      box = evt.source;
    }
    else {
      evt = window.event;
      box = evt.srcElement;
    }

    deltaX = evt.x - parseInt(box.style.left);
    deltaY = evt.y - parseInt(box.style.top);

    if ( box.dad && box.dad.plel ) {
      deltaXPl = evt.x - parseInt(box.dad.plel.style.left);
      deltaYPl = evt.y - parseInt(box.dad.plel.style.top);
    }
    addHdl(document,"mousemove",dragMove,false);
    addHdl(document,"mouseup",dragRelease,false);
  }

  function dragMove(evt) {
    evt = new Evt(evt);
    if ( ! ( box.dad && box.dad.plel && box.dad.prn ) ) {
      box.style.left = evt.x - deltaX;
      box.style.top = evt.y - deltaY;
    }
    if ( box.dad && box.dad.plel ) {
      box.dad.plel.style.left = evt.x - deltaXPl;
      box.dad.plel.style.top = evt.y - deltaYPl;
    }
    evt.consume();
  }

  function dragRelease(evt) {
    evt = new Evt(evt);
    rmvHdl(document,"mousemove",dragMove,false);
    rmvHdl(document,"mouseup",dragRelease,false);
  }

}








