// depends on navbar.js for getPosXY();

// floater_positioner is a one-pixel placeholder image
var floatCoords = getPosXY('floater_positioner');
var floatX = floatCoords.x;
var floatMinY = floatCoords.y;
document.getElementById('floater').style.left = floatX+'px';
document.getElementById('floater').style.top = floatMinY+'px';
document.getElementById('floater').style.visibility = 'visible';

window.onscroll = adjustFloater;

var sliding = false;
var stoppedScrolling = 0;
var totalSlideTime = 700;

function updateFloater() {
  var floatCoords = getPosXY('floater_positioner');
  document.getElementById('floater').style.left = floatCoords.x+'px';
  adjustFloater();
}

function adjustFloater() {
  if (!sliding) {
    sliding = true;
    approachTarget();
  }
  stoppedScrolling = (new Date).getTime();
}

function approachTarget() {
  if (targetAcquired()) {
    sliding = false;
  } else {
    moveCloser();
    setTimeout("approachTarget()",50);
  }
}

function setFloaterY(newY) {
  document.getElementById('floater').style.top = newY+'px';
}

function moveCloser() {
  var targetY = getTargetY();
  var currentY = getFloaterY();
  // what distance is left to cover?
  var distance = targetY - currentY;
  // what percent of the time allotted are we at?
  var now = (new Date).getTime();
  if (now > stoppedScrolling + totalSlideTime) {
    setFloaterY(targetY);
  } else {
    var elapsed = now - stoppedScrolling;
    // move a lot early on, not so much as we approach
    var moveBy = elapsed/totalSlideTime * distance;
    setFloaterY(currentY + parseInt(moveBy));
  }
}

function getScrollY() {
  var iebody=(document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body;
  return document.all? iebody.scrollTop : pageYOffset;
}

function getFloaterY() {
  var currentY = document.getElementById('floater').style.top;
  currentY = parseInt(currentY);
  return currentY;
}

function getTargetY() {
  var targetY = getScrollY() + 20;
  if (targetY < floatMinY) {
    targetY = floatMinY;
  }
  return targetY;
}

function targetAcquired() {
  if (getFloaterY() == getTargetY()) {
    return true;
  } else {
    return false;
  }
}

