// WB's Element drag and dropper
// Copyright (c) 2010 Broomfield Associates

dragobj = null;
dragged = false;
dragil = 0;
dragit = 0;
dragmx = 0;
dragmy = 0;
dragmouseup = null;

// Make an element draggable
function MakeDraggable(obj) {
    obj["onmousedown"] = function(evt){mouseDown(evt, obj); return false;};
}

// Make an element undraggable
function MakeUnDraggable(obj) {
    obj["onmousedown"] = null;
}

function mouseDown(ev, obj) {

    ev  = ev || window.event;
    dragobj = obj;
    dragmouseup = dragobj["onmouseup"]; dragobj["onmouseup"] = null;
    document["onmouseup"] = function(evt){mouseUp(evt); return false;};
    dragged = false;

    tmpnode = dragobj;
    dragil = tmpnode.offsetLeft;
    dragit = tmpnode.offsetTop;
	while(tmpnode.offsetParent) {
		dragil += tmpnode.offsetParent.offsetLeft;
		dragit += tmpnode.offsetParent.offsetTop;
		tmpnode = tmpnode.offsetParent;
	};

    dragmx = ev.screenX;
    dragmy = ev.screenY;
    document["onmousemove"] = mouseMove;

}

function mouseUp(ev) {
    ev  = ev || window.event;
    document["onmousemove"] = null;
    document["onmouseup"] = null;
    dragobj["onmouseup"] = dragmouseup;
    if(!dragged) {
        dragobj = null;
        dragged = false;
        if(dragmouseup != null) dragmouseup();
    } else {
        dragobj = null;
        dragged = false;
    };
}

function mouseMove(ev) {
    ev  = ev || window.event;
    if(dragobj != null) {
        if( (ev.screenX - dragmx == 0) && (ev.screenY - dragmy == 0) ) return false;
        dragil += ev.screenX - dragmx;
        dragit += ev.screenY - dragmy;
        dragmx = ev.screenX;
        dragmy = ev.screenY;
        dragged = true;
        dragobj.style.left = dragil + "px";
        dragobj.style.top = dragit + "px";
    };
    return false;
}
