MochiDrag = {
    _move: null,
    _down: null,
    
    start: function(e) {
        e.stop();
        
        MochiDrag._target = e.target();
		
        MochiDrag._offset = MochiDrag._diff(e.mouse().page, getElementPosition(MochiDrag._target));
        
        MochiDrag._move = connect(document, 'onmousemove', MochiDrag._drag);
        MochiDrag._down = connect(document, 'onmouseup', MochiDrag._stop);
    },

    _offset: null,
    _target: null,
    
    _diff: function(lhs, rhs) {
        return new MochiKit.Style.Coordinates(lhs.x - rhs.x, lhs.y - rhs.y);
    },
        
    _drag: function(e) {
        e.stop();
        setElementPosition(MochiDrag._target, MochiDrag._diff(e.mouse().page, MochiDrag._offset));
    },
    
    _stop: function(e) {
        disconnect(MochiDrag._move);
        disconnect(MochiDrag._down);
    }
};

connect(window, 'onload', function() {
        var d = getElementsByTagAndClassName('DIV', 'draggable');
        forEach(d, function(elem) {
                connect(elem, 'onmousedown', MochiDrag.start);
        });
                        
});
