// AbsoluteScrollFollow.js - version 1.0
// 
// param object			- string	- id of object that will follow page scrolling
// param offset			- int		- pixel distance when activeClass is triggered
// param defaultClass	- string	- object class when above offset
// param activeClass	- string	- object class when below offset
	
var Absolute;
if (!Absolute) Absolute = {};

Absolute.ScrollFollow = function(object, offset, defaultClass, activeClass)
{
	var thisClass = this;
	var scrollTop;
	
	this.obj = document.getElementById(object);
	this.objDefaultLeft = this.obj.style.left;
	
	if (offset == null)
	{
		this.offset = 0;
	} else {
		this.offset = offset;	
	}
	if (defaultClass == null)
	{
		this.defaultClass = "";
	} else {
		this.defaultClass = defaultClass;	
	}
	if (activeClass == null)
	{
		this.activeClass = "";
	} else {
		this.activeClass = activeClass;	
	}
	
	this.scrollFollow = function()
	{
		scrollTop = document.documentElement.scrollTop;
		
		if (this.obj.className == this.defaultClass)
		{
			if (scrollTop > this.offset)
			{	
				this.objOffset = this.findTrueOffset(this.obj);
				this.obj.className = this.activeClass;
				this.obj.style.left = this.objOffset[0].toString() + 'px';
			}
		} else {			
			if (scrollTop <= this.offset)
			{
				this.obj.className = this.defaultClass;
				this.obj.style.left = this.objDefaultLeft;
			}
		}
	}
	
	this.interval = setInterval(
		function(e) {
			thisClass.scrollFollow()
		},
		100
	);
}

Absolute.ScrollFollow.prototype.findTrueOffset = function findTrueOffset(obj)
{
	var curLeft = curTop = 0;
	
	if (obj.offsetParent)
	{
		do
		{
			curLeft += obj.offsetLeft;
			curTop  += obj.offsetTop;
		}
		while (obj = obj.offsetParent);
		
		return [curLeft,curTop];
	}
	return false;	
}