function Browser()
{
    this.isIE    = false;
    this.isNS    = false;

    if (document.attachEvent != null)
    {
      this.isIE = true;
      return;
    }
    if (!document.attachEvent && document.addEventListener)
    {
      this.isNS = true;
      return;
    }

}

var browser   = new Browser();
var item4drag = new Object();
item4drag.zIndex = 0;
function dragStart(event, id) {

    var el;
    var x, y;

    // Если передвигать надо не тот элемент, на котором кликнули, то ищем его
    if (id)
        item4drag.itemNode = document.getElementById(id);
    else
    {
        item4drag.itemNode = (event.target) ? event.target : event.srcElement;
        if (item4drag.itemNode.nodeType == 3)
            item4drag.itemNode = item4drag.itemNode.parentNode;
    }

    // Выбираем позицию курсора, с учетом окна браузера
    if (browser.isIE)
    {
        x = window.event.clientX + document.documentElement.scrollLeft
            + document.body.scrollLeft;
        y = window.event.clientY + document.documentElement.scrollTop
            + document.body.scrollTop;
    }
    if (browser.isNS) {
        x = event.clientX + window.scrollX;
        y = event.clientY + window.scrollY;
    }

    // Сохраняем начальные позиции курсора и элемента
    item4drag.cursorStartX = x;
    item4drag.cursorStartY = y;
    item4drag.itemStartLeft  = parseInt(item4drag.itemNode.style.left, 10);
    item4drag.itemStartTop   = parseInt(item4drag.itemNode.style.top,  10);

    if (isNaN(item4drag.itemStartLeft)) item4drag.itemStartLeft = 0;
    if (isNaN(item4drag.itemStartTop))  item4drag.itemStartTop = 0;

    // Обновляем z-index элемента.
    item4drag.itemNode.style.zIndex = ++item4drag.zIndex;

    // Перехватываем на странице события mousemove и mouseup.
    if (browser.isIE)
    {
        document.attachEvent("onmousemove", dragGo);
        document.attachEvent("onmouseup",   dragStop);
        window.event.cancelBubble = true;
        window.event.returnValue = false;
    }
    if (browser.isNS)
    {
        document.addEventListener("mousemove", dragGo,   true);
        document.addEventListener("mouseup",   dragStop, true);
        event.preventDefault();
    }
}

function dragGo(event)
{

    var x, y;
    // Вычисление позиции курсора относительно страницы.
    if (browser.isIE)
    {
        x = window.event.clientX + document.documentElement.scrollLeft
            + document.body.scrollLeft;
        y = window.event.clientY + document.documentElement.scrollTop
            + document.body.scrollTop;
    }
    if (browser.isNS)
    {
        x = event.clientX + window.scrollX;
        y = event.clientY + window.scrollY;
    }

    // Перемещение элемента на то же расстояние, на которое перемещен курсор.
    item4drag.itemNode.style.left = (item4drag.itemStartLeft + x - item4drag.cursorStartX) + "px";
    item4drag.itemNode.style.top  = (item4drag.itemStartTop  + y - item4drag.cursorStartY) + "px";

    if (browser.isIE)
    {
        window.event.cancelBubble = true;
        window.event.returnValue = false;
    }
    if (browser.isNS)
        event.preventDefault();
}

function dragStop(event)
{

    // Удаление данных о перетаскиваем элементе.
    item4drag.itemNode = null;

    // Прекратить перехват событий mousemove и mouseup.
    if (browser.isIE)
    {
        document.detachEvent("onmousemove", dragGo);
        document.detachEvent("onmouseup",   dragStop);
    }
    if (browser.isNS)
    {
        document.removeEventListener("mousemove", dragGo,   true);
        document.removeEventListener("mouseup",   dragStop, true);
    }
}

