<PUBLIC:COMPONENT>
<PUBLIC:ATTACH event="ondocumentready" handler="init" />

<SCRIPT>

//---------------------------------------------------------------------------
// Проект:      Zoom - 2
//
// Copyright:   "Nota-PI group" 2000г.
//
//---------------------------------------------------------------------------
// Модуль:      dragable.htc
// Категория:   Обработчик таскания для popup;
// Язык:        JavaScript
//
// Описание:    Общие функции
//
// Автор:       Андрей Прикупец
// Разработка:  29.08.2001 - ...
//---------------------------------------------------------------------------

var moPopup = null;
var moTableRow = null;

var dragObj = new Object();
dragObj.zIndex = 1000;

function init() {
  if (!moPopup) {
   moPopup = getPopup();
   if (!moPopup) {
      alert ("dragable.htc: Ошибка - Не найден вышестоящий элемент с классом popupMenu")
      return null;
   }
   if (moPopup.className == "popupMenu") {
     if (typeof(moPopup.onresize) != "function") {
       moPopup.onresize = resizeHandler;
     }
     moPopup.onmove = moPopup.onresize;
   }
   moTableRow = getTableRow();
   if (!moTableRow) {
      alert ("dragable.htc: Ошибка - Не найден вышестоящий TR")
      return null;
   }
   moTableRow.style.cursor = "move";
   moTableRow.attachEvent("onmousedown", dragStart);
  }
}

function getPopup () {
  var p = element;
  var lbFound = false;
  while (p && (p.tagName != "BODY")) {
    if ((p.tagName == "DIV") && (p.currentStyle.position == "absolute")) {
      lbFound = true;
      break;
    }
    p = p.parentNode;
  }
  if (!lbFound)
    p = null;
  return p;
}

function getTableRow () {
  var p = element;
  var lbFound = false;
  while (p && (p.tagName != "BODY")) {
    if (p.tagName == "TR") {
      lbFound = true;
      break;
    }
    p = p.parentNode;
  }
  if (!lbFound)
    p = null;
  return p;
}

function resizeHandler() {
  syncBkFrame(moPopup.id);
}

function dragStart() {
  dragObj.elNode = moPopup;

  dragObj.borderColor = moPopup.currentStyle.borderColor;
  dragObj.borderWidth = moPopup.currentStyle.borderWidth;
  dragObj.borderStyle = moPopup.currentStyle.borderStyle;
  moPopup.style.border = "2 dashed silver";

  if (typeof(dragObj.elNode.dragableHandler) != "undefined") {
    dragObj.elNode.dragableHandler (dragObj.elNode, true, 0, 0);
  }

  var el;
  var x, y;

  // Get cursor position with respect to the page.

    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;

  // Save starting positions of cursor and element.

  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);

  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

  // Update element's z-index.

  dragObj.elNode.style.zIndex = ++dragObj.zIndex;

  // Capture mousemove and mouseup events on the page.

    moTableRow.attachEvent("onmousemove", dragGo);
    moTableRow.attachEvent("onmouseup",   dragStop);
    document.attachEvent("onselectionstart", disableSelection);
    window.event.cancelBubble = true;
    window.event.returnValue = false;

  moTableRow.setCapture();
}

function disableSelection (event) {
  return false;
}

function dragGo() {

  var x, y;

  // Get cursor position with respect to the page.

    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
	if (x < 0) return
	if (y < 0) return
  // Move drag element by the same amount the cursor has moved.

	dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
	dragObj.elNode.style.top  = (dragObj.elStartTop  + y - dragObj.cursorStartY) + "px";

    window.event.cancelBubble = true;
    window.event.returnValue = false;
}

function dragStop() {

  // Stop capturing mousemove and mouseup events.

    moTableRow.detachEvent("onmousemove", dragGo);
    moTableRow.detachEvent("onmouseup",   dragStop);
    document.detachEvent("onselectionstart", disableSelection);

  moTableRow.releaseCapture();

  moPopup.style.borderColor = dragObj.borderColor;
  moPopup.style.borderWidth = dragObj.borderWidth;
  moPopup.style.borderStyle = dragObj.borderStyle;

  if (typeof(dragObj.elNode.dragableHandler) != "undefined") {
    dragObj.elNode.dragableHandler (dragObj.elNode, false, 
          dragObj.elNode.style.pixelLeft-element.document.documentElement.scrollLeft-element.document.body.scrollLeft, 
          dragObj.elNode.style.pixelTop-element.document.documentElement.scrollTop-element.document.body.scrollTop);
  }

  dragObj.elNode = null;
}

</SCRIPT>
</PUBLIC:COMPONENT>
