anchor.diff:      // TODO if so, we don't really need to pass it as a para
       // because it's in event
       // TODO now that we store _currentTarget, we should probably use that
  +    // TODO now that we store _currentTarget, we should definitely use that,
  +    // TODO because this event was attached to body
       if(drag != null) {
         drag(this, event.currentTarget, event);
       }
  
positive.code:     // the mouse down and watch for the other events,
      // but we don't set _dragging or do callbacks
      // until we actually get a mouse move
      _dragging = true;
      
      // register for a move event if the callback exists
      if(drag != null) {
        document.body.on.mouseMove.add(_mouseMove);
      }
      // register for mouse over event if the callback exists
      if(dragOver != null) {
        _currentTarget.on.mouseOver.add(_mouseOver);
      }
      // register for mouse out event if the callback exists
      if(dragOut != null) {
        _currentTarget.on.mouseOut.add(_mouseOut);
      }
      
      // call start callback if it exists
  
negative.code:     // TODO if callbacks are set to null during a drag,
      // they will never be removed. we should define a setter that checks
      
      // TODO if elements are changed during a drag, they won't be removed either
      
      // remove callbacks
      if(drag != null) {
        document.body.on.mouseMove.remove(_mouseMove);
      }
      if(dragOver != null) {
        for(Element e in _targets) {
          e.on.mouseOut.remove(_mouseOver);
        }
      }
      if(dragOut != null) {
        for(Element e in _targets) {
          e.on.mouseOut.remove(_mouseOut);
        }
      }
      
      // call the end callback
  