/*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;

// 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', temp1+evt.clientX-dragStartX + "px")
                  .css('top', temp2+evt.clientY-dragStartY + "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;
        temp1=$(dragElement).position().left;
        temp2=$(dragElement).position().top;
        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
   }
}