//
// (c) SiteLeader, 2005-2008 || http://www.siteleader.ru/
//

dragObj = new Object;
dragObj.e = null;
var cur_zIndex = 1;
// Перехват событий
addEvent(document, 'mousedown', startDrag);
addEvent(document, 'mousemove', waitDrag);
// Ожидание перемещения
function waitDrag(event) {
  var el = slObj.IE ? window.event.srcElement : event.target;
  // Mouse pointer
  if (el.getAttribute('drag') && el.getAttribute('drag').match(/x|y|1/)) {
    if (!el.style.cursor || el.style.cursor.match(/auto/)) el.style.cursor = "pointer";
  }
}
// Старт перемещения
function startDrag(event) {
  var drag = slObj.IE ? window.event.srcElement.getAttribute('drag') : event.target.getAttribute('drag');
  if (drag && drag.match(/x|y|1/)) {
    // Target element
    var target = slObj.IE ? window.event.srcElement.getAttribute('target') : event.target.getAttribute('target');
    // Drag Element
    dragObj.e = slObj.IE ? window.event.srcElement : event.target;
    // Drag Target (Element or Target Element)
    if (target) target = document.getElementById(target);
    dragObj.target = target ? target : dragObj.e;
    // Move
    dragObj.x = (drag.match(/x|1/)) ? 1 : 0;
    dragObj.y = (drag.match(/y|1/)) ? 1 : 0;
    // For Element
    var _for = dragObj.e.getAttribute('for')
    if (_for) {
      _for = document.getElementById(_for);
      dragObj._for = _for;
      dragObj.forLeft = _for.offsetLeft + (parseInt(_for.style.left, 10) || 0);
      dragObj.forTop = _for.offsetTop + (parseInt(_for.style.top, 10) || 0);
      dragObj.forRight = dragObj.forLeft + _for.offsetWidth;
      dragObj.forBottom = dragObj.forTop + _for.offsetHeight;
    }
    dragObj.e.style.cursor = "move";
    dragObj.target.style.baseLeft = (dragObj.target.style.left ? parseInt(dragObj.target.style.left, 10) : 0) - getScreenMouseX(event);
    dragObj.target.style.baseTop = (dragObj.target.style.top ? parseInt(dragObj.target.style.top, 10) : 0) - getScreenMouseY(event);
    dragObj.target.style.zIndex = cur_zIndex;
    cur_zIndex += 1;
    document.onmouseup = stopDrag;
    document.onmousemove = moveDrag;
    if (slObj.IE) {
      window.event.cancelBubble = true;
      window.event.returnValue = false;
    } else {
      event.preventDefault();
    }
    return false;
  }  
}
function stopDrag() {
  if (dragObj.e) {
    dragObj.e.style.cursor = "pointer";
    dragObj.e = null;
    dragObj.target = null;
    dragObj._for = null;
    document.onmouseup = null;
    document.onmousemove = waitDrag;
  }
  return false;
}
function moveDrag(event) {
  if (dragObj.e) {
    // Координаты верхнего левого угла
    var x = dragObj.target.style.baseLeft + getScreenMouseX(event);
    var y = dragObj.target.style.baseTop + getScreenMouseY(event);
    // Граница по X
    if (dragObj.x) {
      if (dragObj._for) {
        if (x < dragObj.forLeft) x = dragObj.forLeft;
        else {
          var max_x = dragObj.forRight - dragObj.target.offsetWidth;
          if (x > max_x) x = max_x;
        }
      }
      dragObj.target.style.left = x + 'px';
    }
    // Граница по Y
    if (dragObj.y) {
      if (dragObj._for) {
        if (y < dragObj.forLeft) y = dragObj.forLeft;
        else {
          var max_y = dragObj.forBottom - dragObj.target.offsetHeight;
          if (y > max_y) y = max_y;
        }
      }
      dragObj.target.style.top = y + 'px';
    }
    if (slObj.IE) {
      window.event.cancelBubble = true;
      window.event.returnValue = false;
    } else {
      event.preventDefault();
    }
  }
  return false;
}
/*
slObj.IE
dragObg
  e     - элемент, на который вешается драг;
  _for  - элемент, ограничевающий перемещение target объекта;
  target   - элемент, который надо таскать.
        т.е. target element таскается за e element;
  x     - перемещать объект по оси X;
  y     - перемещать объект по оси Y;
  _forTopХ
  _forTopY
  _forBottomX
  _forBottomY
Атрибуты:
drag=[1|0|x|y|xy|yx] - включаем драг по осям;
target=[id] - целевой блок для драга (давим на один элемент, а таскаем другой);
*/
