﻿var cursorStartLeft = 0;
var cursorStartTop = 0;
var elementStartLeft = 0;
var elementStartTop = 0;
var box = null;
var index = 0;

function mouseDown(event, boxName)
{
    //var ev = e || window.event;
    
    box = document.getElementById(boxName);
    var position = getCursorPosition(event);
    
    cursorStartLeft = position.left;
    cursorStartTop = position.top;
    elementStartLeft = parseInt(box.offsetLeft, 10);
    elementStartTop = parseInt(box.offsetTop, 10);
    
    if (isNaN(elementStartLeft))
    {
        elementStartLeft = 0;
    }
    if (isNaN(elementStartTop))
    {
        elementStartTop = 0;
    }
    
    index = parseInt(box.style.zIndex);
    if (isNaN(index))
    {
        index = 100;
    }
    
    box.style.zIndex = 999;

    addEvent(document, 'mousemove', mouseMove);
    addEvent(document, 'mouseup', mouseUp);

    try
    {
        event.cancelBubble = true;
        event.returnValue = false;
        event.stopPropagation();
    }
    catch(e) {}
}

function mouseMove(event)
{
    var position = getCursorPosition(event);
    
    box.style.left = (elementStartLeft + position.left - cursorStartLeft) + 'px';
    box.style.top = (elementStartTop + position.top - cursorStartTop) + 'px';
    
    try
    {
        event.cancelBubble = true;
        event.returnValue = false;
        event.stopPropagation();
    }
    catch(e) {}
    
}

function mouseUp(event)
{
    box.style.zIndex = 100;

    removeEvent(document, 'mousemove', mouseMove);
    removeEvent(document, 'mouseup', mouseUp);
}

function getCursorPosition(event)
{
    var p = {left:0, top:0};

    if (document.documentElement)
    {
        p.left = event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
        p.top = event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
    }
    else
    {
        p.left = event.clientX + window.scrollX;
        p.top = event.clientY + window.scrollY;
    }
    return p;
}

function addEvent(element, eventName, callback)
{
    if (element.addEventListener)
    {
        element.addEventListener(eventName, callback, false);
    }
    else if (element.attachEvent)
    {
        element.attachEvent('on' + eventName, callback);
    }
    else
    {
        element['on' + eventName] = callback;
    }
}

function removeEvent(element, eventName, callback)
{
    if (element.removeEventListener)
    {
        element.removeEventListener(eventName, callback, false);
    }
    else if (element.detachEvent)
    {
        element.detachEvent('on' + eventName, callback);
    }
    else
    {
        element['on' + eventName] = null;
    }
}