if (window.addEventListener) { window.addEventListener('load',initScroll,false) } 
else if (window.attachEvent) { window.attachEvent('onload',initScroll) }

var scrollTimer, to, scrlDir, body, contentHght, viewportHght;
var lrgJump = 20, wait =10, smlJump = 5, nudge_factor = 5;
function initScroll () {
  body = document.getElementsByTagName('body')[0];
  viewportHght = getViewHeight();
  contentHght = body.offsetHeight;
  var myregexp = /[\/|.html]#(.*)/;
  var match;
  var links = document.getElementsByTagName('a');
  for (var x=0;x<links.length;x++) {
    if ( (match = myregexp.exec(links[x].href)) && match.length > 1) {
  		var location = window.location.toString();
  		var hash = window.location.hash;
  		if (links[x].href.replace('#'+match[1],'') == location.replace(hash,'')) links[x].href = "javascript:scrollToAnchor('"+match[1]+"')";
    }
  }
};
function scrollToAnchor (anchor) {
  if (scrollTimer) clearTimeout(scrollTimer);
  var target = document.getElementById(anchor);
  if ( target == null ) {
    var links = document.getElementsByTagName('a');
    for (var x=0;x<links.length;x++) {
      name = links[x].getAttribute('name');
      if (name != null && name == anchor) target = links[x];
    }
  }
  if (target == null) to = 0;
  else to = getOffsetTop(target);
  if (to == getScroll()) return;
  if (to > contentHght - viewportHght) to = contentHght - viewportHght;
  doScroll();
};
function doScroll () {
  var dif = Math.abs(getScroll() - to);
  var jmp = dif < lrgJump*7 ? (dif < smlJump ? dif : smlJump) : lrgJump;
  jmp = getScroll() > to ? 0 - jmp : jmp;
  window.scrollTo(0,getScroll() + jmp);
  if (dif > jmp) scrollTimer = setTimeout(doScroll,wait);
};
function getOffsetTop (element) { value = element.offsetTop; while (element = element.offsetParent) value += element.offsetTop; return value };
function getViewHeight () {
  if (self.innerHeight) return self.innerHeight;
  else if (document.documentElement && document.documentElement.clientWidth) return document.documentElement.clientHeight;
  else if (document.body) return document.body.clientHeight;
}
function getScroll () {
  if (document.documentElement.scrollTop) return document.documentElement.scrollTop;
  else return document.getElementsByTagName('body')[0].scrollTop;
}
