window.onload = initFloat

function initFloat () {
  if (document.getElementById("aside") && document.getElementById("aside").className.match("float")) {
    createFloat()
  }
}

function createFloat () {
  Float = new Object()
  Float.element = document.getElementById("aside")
  Float.padding = 10
  Float.top = 0
  Float.railTop = 0
  Float.railBottom = document.getElementById("main").offsetHeight

  checkFloat()
}

function checkFloat () {
  var newPosY = Float.top
  var pageYOffset = getPageYOffset()

  // for testing
//  window.status = "WinTop: "+pageYOffset+" RailTop: "+Float.railTop+" RailBot: "+Float.railBottom+" FloatTop: "+Float.top+" FloatBot: "+eval(Float.top + Float.element.offsetHeight)
  
  // check to see if the window top or bottom is overlapping
  if (pageYOffset > Float.element.offsetTop) {
    newPosY = Float.top + (pageYOffset - Float.element.offsetTop)
  } else if (pageYOffset < Float.element.offsetTop) {
    newPosY = Float.top + (pageYOffset - Float.element.offsetTop)
  }

  // check to see if new position is past the rail top or bottom
  if (newPosY < Float.railTop) {
    newPosY = Float.railTop
  } else if (newPosY + Float.element.offsetHeight > Float.railBottom) {
    newPosY = Float.railBottom - Float.element.offsetHeight
  }

  // one extra check to make sure
  if (newPosY < 0) {
    newPosY = 0
  }

  // move if it has been pushed to a new position
  if (newPosY !=  Float.top) {
    Float.top = newPosY
    Float.element.style.top = Float.top+"px"
  }

  setTimeout("checkFloat()", 800);
}

function getPageYOffset () {
  if (typeof(window.pageYOffset) == 'number') {
    return window.pageYOffset
  } else if (document.body && document.body.scrollTop) {
    return document.body.scrollTop
  } else if (document.documentElement && document.documentElement.scrollTop) {
    return document.documentElement.scrollTop;
  } else {
    return 0
  }
}
