/* ========================================= */
/* include as well utils.js                  */
/* see CommonJS class in CetLib project      */
/* ========================================= */
var COMMON_MovingStep = 60;
var COMMON_MovementInterval = 80;
var COMMON_tmMovement = null;
var COMMON_oMovedElement = null;

function COMMON_MoveElementToTarget (el, elTarget, bReplace)
//       ~~~~~~~~~~~~~~~~~~~~~~~~~~
{
  COMMON_StopMoveElement();
  el.oTarget = elTarget;
  el.bReplace = bReplace;
  COMMON_oMovedElement = el;
  COMMON_tmMovement = window.setInterval(COMMON_MovementStep, COMMON_MovementInterval)
}
//--------------------------------------------------

function COMMON_MovementStep ()
//       ~~~~~~~~~~~~~~~~~~~
{
  if (!COMMON_oMovedElement)
    return;
  var nDist = COMMON_hypotenuse(COMMON_oMovedElement.targetLeft - COMMON_oMovedElement.style.pixelLeft, COMMON_oMovedElement.targetTop - COMMON_oMovedElement.style.pixelTop);
  var nRatioX = (COMMON_oMovedElement.targetLeft - COMMON_oMovedElement.style.pixelLeft) / nDist;
  var nRatioY = (COMMON_oMovedElement.targetTop  - COMMON_oMovedElement.style.pixelTop ) / nDist;
  var nStepX = Math.round(COMMON_MovingStep * nRatioX);
  var nStepY = Math.round(COMMON_MovingStep * nRatioY);
  if ((Math.abs(COMMON_oMovedElement.style.pixelLeft - COMMON_oMovedElement.targetLeft) < Math.abs(nStepX)) ||
      (Math.abs(COMMON_oMovedElement.style.pixelTop  - COMMON_oMovedElement.targetTop ) < Math.abs(nStepY)))
  {
    COMMON_StopMoveElement();
  }
  else
  {
    COMMON_oMovedElement.style.pixelLeft += nStepX;
    COMMON_oMovedElement.style.pixelTop  += nStepY;
  }

}
//--------------------------------------------------

function COMMON_StopMoveElement ()
//       ~~~~~~~~~~~~~~~~~~~~~~
{
  if (COMMON_oMovedElement)
  {
    window.clearInterval(COMMON_tmMovement);
    if (COMMON_oMovedElement.bReplace)
      COMMON_oMovedElement.oTarget.style.display = "";
    COMMON_oMovedElement.parentNode.removeChild(COMMON_oMovedElement);
    COMMON_oMovedElement = null;
  }
}
//--------------------------------------------------


//************************************************************

var ACTIVITY_elScrolled = null;
var ACTIVITY_ScrollStep = 10;
var ACTIVITY_ScrollIntreval = 50;
var ACTIVITY_tmScroll = null; //setInterval return value

function ACTIVITY_ScrollIntoView (el, fCallBack)
//       ~~~~~~~~~~~~~~~~~~~~~~~
{
  ACTIVITY_ScrollIntoViewEnd();
  ACTIVITY_elScrolled = el;
  el.rc = COMMON_GetBounds(el);
  el.fCallBack = fCallBack;
  ACTIVITY_tmScroll = window.setInterval(ACTIVITY_ScrollIntoViewStep, ACTIVITY_ScrollIntreval);
}
//----------------------------------

function ACTIVITY_ScrollIntoViewStep ()
//       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
{
  var nStepX = ACTIVITY_GetScrollStepX(ACTIVITY_elScrolled);
  var nStepY = ACTIVITY_GetScrollStepY(ACTIVITY_elScrolled);

  if (nStepX == 0 && nStepY == 0)
    ACTIVITY_ScrollIntoViewEnd();
  if (nStepX != 0)
    document.body.scrollLeft += nStepX;
  if (nStepY != 0)
    document.body.scrollTop  += nStepY;
}
//----------------------------------

function ACTIVITY_ScrollIntoViewEnd ()
//       ~~~~~~~~~~~~~~~~~~~~~~~~~~
{
  if (ACTIVITY_elScrolled && ACTIVITY_elScrolled.fCallBack)
    ACTIVITY_elScrolled.fCallBack();
  ACTIVITY_elScrolled = null;
  window.clearTimeout(ACTIVITY_tmScroll);
}
//----------------------------------

function ACTIVITY_GetScrollStepX (el)
//       ~~~~~~~~~~~~~~~~~~~~~~~
{
  if (el.clientWidth >= document.body.clientWidth)
  {
    if (el.rc.left <= document.body.scrollLeft && el.rc.right >= document.body.scrollLeft + document.body.clientWidth)
      return 0;
    else if (el.rc.left < document.body.scrollLeft)
      return -1 * ACTIVITY_GetScrollStepByDist(document.body.scrollLeft - el.rc.left);
    else if (el.rc.right > document.body.scrollLeft + document.body.clientWidth)
      return 1 * ACTIVITY_GetScrollStepByDist(el.rc.right - (document.body.scrollLeft + document.body.clientWidth));
  }
  else
  {
    if (el.rc.left >= document.body.scrollLeft && el.rc.right <= document.body.scrollLeft + document.body.clientWidth)
      return 0;
    else if (el.rc.right > document.body.scrollLeft + document.body.clientWidth)
      return 1 * ACTIVITY_GetScrollStepByDist(el.rc.right - (document.body.scrollLeft + document.body.clientWidth));
    else if (el.rc.left < document.body.scrollLeft)
      return -1 * ACTIVITY_GetScrollStepByDist(document.body.scrollLeft - el.rc.left);
  }
  return 0;
}
//----------------------------------

function ACTIVITY_GetScrollStepY (el)
//       ~~~~~~~~~~~~~~~~~~~~~~~
{
  if (el.clientHeight >= document.body.clientHeight)
  {
    if (el.rc.top <= document.body.scrollTop && el.rc.bottom >= document.body.scrollTop + document.body.clientHeight)
      return 0;
    else if (el.rc.top < document.body.scrollTop)
      return -1 * ACTIVITY_GetScrollStepByDist(document.body.scrollTop - el.rc.top);
    else if (el.rc.bottom > document.body.scrollTop + document.body.clientHeight)
      return 1 * ACTIVITY_GetScrollStepByDist(el.rc.bottom - (document.body.scrollTop + document.body.clientHeight));
  }
  else
  {
    if (el.rc.top >= document.body.scrollTop && el.rc.bottom <= document.body.scrollTop + document.body.clientHeight)
      return 0;
    else if (el.rc.bottom > document.body.scrollTop + document.body.clientHeight)
      return 1 * ACTIVITY_GetScrollStepByDist(el.rc.bottom - (document.body.scrollTop + document.body.clientHeight));
    else if (el.rc.top < document.body.scrollTop)
      return -1 * ACTIVITY_GetScrollStepByDist(document.body.scrollTop - el.rc.top);
  }
  return 0;
}
//----------------------------------

function ACTIVITY_GetScrollStepByDist (nDist)
//       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{
  return Math.min(ACTIVITY_ScrollStep, Math.abs(nDist));
}
//----------------------------------

