function CMyImageMove(sClassName, sDivName)
{
  var m_sClassName = sClassName;
  var m_sDivName = sDivName;
  var m_pTimerID = 0;
  var m_arImagePath = 0;
  var m_nSteps = 0;
  var m_nCounter = 0;
  var m_nSpeed = 50;
  var m_sOnStart = "";
  var m_sOnEnd = "";  

  this.Move = Move;
  this.GetImagePosition = GetImagePosition;
  this.Set_JSOnStart = Set_JSOnStart;
  this.Set_JSOnEnd = Set_JSOnEnd;

  this.SlideImage = SlideImage;
  this.fCalculatePath = fCalculatePath;
  this.fKillTimer = fKillTimer;

  function Move(sImageName, nXPos, nYPos, nSteps)
  {
    fKillTimer();

    var arFrom = GetImagePosition(sImageName);
    var arTo = [nXPos, nYPos];

    m_arImagePath = fCalculatePath(arFrom, arTo, nSteps);
    m_nSteps = nSteps;
    m_nCounter = 0;

    var oObjSrc = document.getElementById(sImageName);
    var oObjDest = document.getElementById(m_sDivName+"img");
    
    oObjDest.src = oObjSrc.src;

    if(m_sOnStart!=""){setTimeout(m_sOnStart, 0);}

    m_pTimerID = setTimeout(m_sClassName+".SlideImage()", m_nSpeed);
  }

  function GetImagePosition(sImageName)
  {
    var nLeft = nTop = 0;

    var oObj = document.getElementById(sImageName);
    if(oObj==null) {alert("Image not found:" + sImageName); return[-1,-1];}

    if (oObj.offsetParent)
    {
      do
      {
        nLeft += oObj.offsetLeft;
        nTop += oObj.offsetTop;
      } 
      while (oObj = oObj.offsetParent);
    }
    else
    {
      nLeft = oObj.offsetLeft;
      nTop = oObj.offsetTop;
    }

    return [nLeft, nTop];
  }

  function Set_JSOnStart(sOnStart)
  {
    m_sOnStart = sOnStart;
  }

  function Set_JSOnEnd(sOnEnd)
  {
    m_sOnEnd = sOnEnd;
  }

  function SlideImage()
  {
    var oObj = document.getElementById(m_sDivName);

    if(m_nCounter < m_nSteps)
    {
      oObj.style.visibility = "visible";

      oObj.style.top = m_arImagePath[m_nCounter][1];
      oObj.style.left = m_arImagePath[m_nCounter][0];

      m_nCounter++;
      m_pTimerID = setTimeout(m_sClassName+".SlideImage()", 50);
    }
    else
    {
      oObj.style.visibility = "hidden";
      m_nCounter++;
      m_pTimerID = 0;
      if(m_sOnEnd!=""){setTimeout(m_sOnEnd, 0);}
    }
  }

  function fCalculatePath(arFrom, arTo, nSteps)
  {
    var aPath = new Array(nSteps);
    aPath[0] = arFrom;
    aPath[nSteps-1] = arTo;

    var nX = ((arTo[0] - arFrom[0])>0) ? (arTo[0] - arFrom[0]) / (nSteps-1) : -(arFrom[0] - arTo[0]) / (nSteps-1);
    var nY = ((arTo[1] - arFrom[1])>0) ? (arTo[1] - arFrom[1]) / (nSteps-1) : -(arFrom[1] - arTo[1]) / (nSteps-1);

    for(var i=1; i<(nSteps-1); i++)
    {
      aPath[i] = [parseInt(arFrom[0] + (nX * i)), parseInt(arFrom[1] + (nY * i))];
    }
    return aPath;
  }


  function fKillTimer()
  {
    var oObj = document.getElementById(m_sDivName);
    oObj.style.visibility = "hidden";

    if(m_pTimerID)
    {
      clearTimeout(m_pTimerID);
      m_pTimerID = 0;
      if(m_sOnEnd!=""){setTimeout(m_sOnEnd, 0);}
    }
  }
}

