﻿/*
http://www.itnewb.com/v/Creating-the-Smooth-Scroll-Effect-with-JavaScript
*/

function currentYPosition() {
if (self.pageYOffset)
return self.pageYOffset;
if (document.documentElement && document.documentElement.scrollTop)
return document.documentElement.scrollTop;
if (document.body.scrollTop)
return document.body.scrollTop;
return 0;
}

function elmYPosition(eID) {
var elm  = document.getElementById(eID);
var y    = elm.offsetTop;
var node = elm;
while (node.offsetParent && node.offsetParent != document.body) {
node = node.offsetParent;
y   += node.offsetTop;
} return y;
}

function smoothScroll(eID,Higher,varSpeed) {
var startY   = currentYPosition();
var stopY    = elmYPosition(eID) - Higher;
var distance = stopY > startY ? stopY - startY : startY - stopY;

if (distance < 100) {
scrollTo(0, stopY); return;
}

var speed = Math.round(distance / 100);
if (speed >= 100) speed = 100;
var step  = Math.round(distance / varSpeed);  

/* Original varSpeed was 25 */

var leapY = stopY > startY ? startY + step : startY - step;
var timer = 0;
if (stopY > startY) {
for ( var i=startY; i<stopY; i+=step ) {
setTimeout("window.scrollTo(0, "+leapY+")", timer * speed);
leapY += step; if (leapY > stopY) leapY = stopY; timer++;
} return;
}
for ( var i=startY; i>stopY; i-=step ) {
setTimeout("window.scrollTo(0, "+leapY+")", timer * speed);
leapY -= step; if (leapY < stopY) leapY = stopY; timer++;
}
}

