var prevY = 0;
var sY = 0; tY = 0;
var scrollTimeout = null;

(function (obj, type, fn)
{
	if (obj.attachEvent)
	{
		obj['e' + type + fn] = fn;
		obj[type + fn] = function() { obj['e' + type + fn](window.event); }
		obj.attachEvent('on' + type, obj[type + fn]);
	}
	else
	{
		obj.addEventListener(type, fn, false);
	}
})(window, 'scroll', function () {
	if (!document.getElementById('sideBoxesContent')) { return; }
	var y = (pageOffset().top - getAbsPos(document.getElementById('sideBoxes')).y);
	var innerHeight = window.innerHeight ? window.innerHeight : ((window.document.compatMode && window.document.compatMode == "CSS1Compat") ? window.document.documentElement : window.document.body).clientHeight;
	if (document.getElementById('sideBoxesContent').offsetHeight < innerHeight || y < prevY)
	{
		if (scrollTimeout != null) { clearTimeout(scrollTimeout); scrollTimeout = null; }
		tY = (y < 0 ? 0 : y);
		if (sY == 0) { sY = tY; }
		scrollTimeout = setTimeout(smoothScroll, 100);
		prevY = y;
	}
});

/*
	function smoothScroll()
	{
		sY = tY;
		document.getElementById('sideBoxes').style.paddingTop = sY + 'px';
	}
*/
function smoothScroll()
{
	scrollTimeout = null;
	if (sY < tY)
	{
		sY += (Math.round((tY - sY) / 6) + 1);
		if (sY > tY) { sY = tY; }
	}
	else if (sY > tY)
	{
		sY -= (Math.round((sY - tY) / 6) + 1);
		if (sY < tY) { sY = tY; }
	}
	document.getElementById('sideBoxes').style.paddingTop = sY + 'px';
	if (sY != tY) { scrollTimeout = setTimeout(smoothScroll, 30); }
}

function getAbsPos(elem)
{
	var pos = { x:0, y:0, level:0 };
	while (elem != null)
	{
		pos.x += elem.offsetLeft;
		pos.y += elem.offsetTop;
		pos.level++;
		elem = elem.offsetParent;
	}
	return pos;
}

function pageOffset()
{
    var pos = {left:0, top:0};

    if(typeof window.pageXOffset != 'undefined')
    {
         // Mozilla/Netscape
         pos.left = window.pageXOffset;
         pos.top = window.pageYOffset;
    }
    else
    {
         var obj = (window.document.compatMode && window.document.compatMode == "CSS1Compat") ?
         window.document.documentElement : window.document.body || null;

         pos.left = obj.scrollLeft;
         pos.top = obj.scrollTop;
    }
    return pos;
}