/*Credit JavaScript Kit www.javascriptkit.com

  includer kan event functie drag_onMouseOut(dragElement) definieren
                          en drag_onDragEnd(dragElement)

 */
var evt;

var dragapproved=false;
var dragElement,dragStartX,dragStartY;
var temp1,temp2,correctieY;

// show of hide van dragElement scrollde ons navi-frame nogal eens.
// Het lukte niet om dat te voorkomen dus gewoon positie onthouden
// en vaak terugzetten.
var naviTop;
function dragmove(evt){
    if (!dragapproved)
        return;
    if (!evt.which==1 && !evt.button==1)
    {
        $(dragElement).hide();
        $("#navigationCell").scrollTop(naviTop);
        return;
    }
    if (!evt) evt=event;

    $(dragElement).show()
                  .css('position', 'absolute')
                  .css('left', evt.clientX + temp1 - dragStartX + "px")
                  .css('top',  evt.clientY + temp2 - dragStartY + correctieY + "px");
    $("#navigationCell").scrollTop(naviTop);
    return false;
}

// Let op: we gebruiken eigenlijk default.asp/mydragstart
function dragstart(evt){
    if (!evt) evt=event;
    var srcEl = evt.srcElement || evt.target;
    if (srcEl.className=="draggable")
    {
        /* global */ naviTop = $("#navigationCell").scrollTop();
        clearSelect();
        dragapproved=true;
        dragElement=srcEl;
        var table_id = $(dragElement).closest("table").attr("id");
        var tX = $("#"+table_id).offset().left;
        var tY = $("#"+table_id).offset().top;
        correctieY = -10;  // extra correctie van 10px om te voorkomen dat bij snel verslepen het label verdwijnt.

        temp1 = parseInt($(dragElement).offset().left - tX);
        temp2 = parseInt($(dragElement).offset().top  - tY);

        dragStartX=evt.clientX;
        dragStartY=evt.clientY;
    }
}
function dragend(evt){
   if (dragapproved)
   {
        dragapproved=false;
        $(dragElement).show()
                      .css('left', temp1 + "px")
                      .css('top', temp2 + "px");
        $("#navigationCell").scrollTop(naviTop);
        if (typeof drag_onDragEnd == 'function')
            drag_onDragEnd.call(this, dragElement,evt||event);
    }
}
function mouseout(evt){
   if (dragapproved)
   {
       clearSelect();
       $(dragElement).hide();
       $("#navigationCell").scrollTop(naviTop);
       if (typeof drag_onMouseOut == 'function')
            drag_onMouseOut.call(this, dragElement,evt||event);
   }
}

function draginit()
{
    $(document).on("mouseout", mouseout)
               .on("mousedown", dragstart)
               .on("mousemove", dragmove)
               .on("mouseup", dragend);
}

function clearSelect()
{
   if (document.selection) // IE
   {
        document.selection.clear(); // Is anders irritant
   }
   else
   {
     if (document.getSelection) // Safari
        document.getSelection().removeAllRanges(); // Is anders irritant
   }
}