var slideData   = new Array();
var slideTimers = new Array();

function slideObject(targetID, slideToX, slideToY) {

  var targetObject  = document.getElementById(targetID);

  if( targetObject ) {

    var targetW       = targetObject.clientWidth ? targetObject.clientWidth : targetObject.offsetWidth;
    var targetH       = targetObject.clientHeight ? targetObject.clientHeight : targetObject.offsetHeight;
    var targetX       = 0;
    var targetY       = 0;

    if( targetObject.offsetParent ) {
  		do {
  			targetX += targetObject.offsetLeft;
  			targetY += targetObject.offsetTop;
  		} while( targetObject = targetObject.offsetParent );
  	}

    slideData[targetID + '-W'] = targetW;
    slideData[targetID + '-H'] = targetH;
    slideData[targetID + '-X'] = targetX;
    slideData[targetID + '-Y'] = targetY;
    slideData[targetID + '-start-X']  = targetX;
    slideData[targetID + '-start-Y']  = targetY;
    slideData[targetID + '-target-X'] = slideToX;
    slideData[targetID + '-target-Y'] = slideToY;

    slideTimers[targetID] = setInterval('doSlideObject("' + targetID + '")', 5);

  } // ! valid object?

} // ! slideObject()



function doSlideObject(targetID) {

  thisW       = slideData[targetID + '-W'];
  thisH       = slideData[targetID + '-H'];
  thisX       = slideData[targetID + '-X'];
  thisY       = slideData[targetID + '-Y'];
  thisStartX  = slideData[targetID + '-start-X'];
  thisStartY  = slideData[targetID + '-start-Y'];
  thisTargetX = slideData[targetID + '-target-X'];
  thisTargetY = slideData[targetID + '-target-Y'];

  movement    = false;

  // LEFT / RIGHT
  if( thisX > thisTargetX ) {

    // Calculate percentage of movement remaining (right to left)
    thisP     = Math.round((((thisStartX - thisTargetX) - (thisStartX - thisX)) * 100) / (thisStartX - thisTargetX));

    movementX = thisP > 10 ? 25 : 100 - Math.abs(thisP - 100);
    movementX = movementX < 1 ? 1 : movementX;

    thisX = thisX - movementX;
    //thisX = thisX < 0 ? 0 : thisX;

    movement  = true;

  } else if( thisX < thisTargetX ) {

    // Calculate percentage of movement remaining (left to right)
    thisP     = Math.round((thisX * 100) / thisTargetX);

    movementX = thisP < 90 ? 25 : Math.abs(thisP - 100);
    movementX = movementX < 1 ? 1 : movementX;

    thisX = thisX + movementX;
    thisX = thisX > thisTargetX ? thisTargetX : thisX;

    movement  = true;

  }


  // UP / DOWN
  if( thisY > thisTargetY ) {

    // Calculate percentage of movement remaining (up to down)
    thisP     = Math.round((((thisStartY - thisTargetY) - (thisStartY - thisY)) * 100) / (thisStartY - thisTargetY));

    movementY = thisP > 10 ? 25 : 100 - Math.abs(thisP - 100);
    movementY = movementY < 1 ? 1 : movementY;

    thisY = thisY - movementY;
    thisY = thisY < 0 ? 0 : thisY;

    movement  = true;

  } else if( thisY < thisTargetY ) {

    // Calculate percentage of movement remaining (down to up)
    thisP     = Math.round((thisY * 100) / thisTargetY);

    movementY = thisP < 90 ? 25 : Math.abs(thisP - 100);
    movementY = movementY < 1 ? 1 : movementY;

    thisY = thisY + movementY;
    thisY = thisY > thisTargetY ? thisTargetY : thisY;

    movement  = true;

  }

  // If nothing moved, stop the slider for this object
  if( movement == false ) {
    clearInterval(slideTimers[targetID]);
    return true;
  }


  slideData[targetID + '-X'] = thisX;
  slideData[targetID + '-Y'] = thisY;

  targetObject            = document.getElementById(targetID);
  targetObject.style.left = thisX + 'px';
  targetObject.style.top  = thisY + 'px';

} // ! doSlideObject()

