/*
подключение:

        onmousedown = 'initMove(this, event);'
        onmouseup = 'moveState = false;'
        onmousemove = 'moveHandler(this, event);'
        
*/
// Объявим глобальные переменные
// Переменная состояния, по умолчанию ничего не двигается = false
var moveState = false;
// Переменные координат мыши в начале перемещения, пока неизвестны
var x0, y0;
// Начальные координаты элемента, пока неизвестны
var divX0, divY0;
      
// Объявим функцию для определения координат мыши
function defPosition(event) {
      var x = y = 0;
      if (document.attachEvent != null) { // Internet Explorer & Opera
            x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
            y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
      }
      if (!document.attachEvent && document.addEventListener) { // Gecko
            x = event.clientX + window.scrollX;
            y = event.clientY + window.scrollY;
      }
      return {x:x, y:y};
}

// Функция инициализации движения
// Записываем всё параметры начального состояния
function initMove(div, event) {
      var event = event || window.event;
      //debugger;
      x0 = defPosition(event).x;
      y0 = defPosition(event).y;
      divX0 = parseInt(div.style.left);
      divX0 = isNaN(divX0) ? 0 : divX0;
      divY0 = parseInt(div.style.top);
      divY0 = isNaN(divY0) ? 0 : divY0;
      moveState = true;
      if (document.all && navigator.appName != 'Opera')
      {
        document.body.onselectstart = function(){return false;}
        document.onselect = function() {return false;}

      }
      else
      {
        document.onmousedown=function(){return false} 
      }
}

// Если клавишу мыши отпустили вне элемента движение должно прекратиться
document.onmouseup = function() {
      moveState = false;
      if (document.all && navigator.appName != 'Opera')
      {
        document.body.onselectstart = function(){return true;}
        document.onselect = function() {return true;}
      }
      else
      {
        document.onmousedown=function(){return true} 
      }
}

// И последнее
// Функция обработки движения:
function moveHandler(div, event) {
      var event = event || window.event;
      if (moveState) {
            div.style.left = divX0 + defPosition(event).x - x0;
            div.style.top = divY0 + defPosition(event).y - y0;
      }
}


// Пишем функцию, определяющую координаты
function defPosition(event) {
      var x = y = 0;
      if (document.attachEvent != null) { // Internet Explorer & Opera
            x = window.event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
            y = window.event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
      }
      if (!document.attachEvent && document.addEventListener) { // Gecko
            x = event.clientX + window.scrollX;
            y = event.clientY + window.scrollY;
      }
      return {x:x, y:y};
}
