var fixElement = (function() {

	var getPosition = function(el, left, top)
	{
		return (el == null) ? 
			{ left: (left || 0), top: (top || 0) } : 
			getPosition(el.offsetParent, (left || 0) + el.offsetLeft, (top || 0) + el.offsetTop);
	};	
	
	var getWindowSize = function()
	{
		var size = { width: 0, height: 0};

		if( typeof( window.innerWidth ) == 'number' )
		{
			size.width = window.innerWidth;
			size.height = window.innerHeight;
		}
		else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) 
		{
			size.width = document.documentElement.clientWidth;
			size.height = document.documentElement.clientHeight;
		} 
		else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
		{
			size.width = document.body.clientWidth;
			size.height = document.body.clientHeight;
		}
		
		return size;
	};		

	var getWidthAdjustment = function(element)
	{
		var style = (window.getComputedStyle) ? document.defaultView.getComputedStyle(element, "") : element.currentStyle;

		return parseInt(style.paddingLeft) + parseInt(style.paddingRight) + 
			((style.borderLeftStyle == "none") ? 0 : parseInt(style.borderLeftWidth)) + 
			((style.borderRightStyle == "none") ? 0 : parseInt(style.borderRightWidth));
	};	
	
	var concatFunction = function(f1, f2)
	{
		return function()
		{
			if(f1) f1();
			if(f2) f2();
		};
	};

	var getScrollTop = function()
	{
		if(typeof(window.pageYOffset) == "number")
			return window.pageYOffset;
		else if(document.documentElement && typeof(document.documentElement.scrollTop) == "number")
			return document.documentElement.scrollTop;
		else if(document.body.parentNode && typeof(document.body.parentNode.scrollTop) == "number")
			return document.body.parentNode.scrollTop;

		return document.body.scrollTop;
	};
	
	return function(element)
	{
		element = typeof(element) == "string" ? document.getElementById(element) : element;
		element.style.width = (element.offsetWidth - getWidthAdjustment(element)) + "px";
		
		var container = element.parentNode;
		container.style.height = element.offsetHeight + "px";
		
		var relocateElement = function()
		{
			var position = getPosition(container);
			var winSize = getWindowSize();
			var scrollTop = getScrollTop();
			
			if(winSize.height - position.top - element.offsetHeight + scrollTop > 0)
			{
				element.style.position = "static";
			}
			else if(navigator.appVersion.indexOf("MSIE 6.0") != -1)
			{
				element.style.position = "absolute";
				element.style.top = (winSize.height + scrollTop - element.offsetHeight) + "px";
			}
			else
			{
				element.style.position = "fixed";
				element.style.top = (winSize.height - element.offsetHeight) + "px";
			}
		};

		relocateElement();
		
		window.onresize = concatFunction(window.onresize, relocateElement);
		window.onscroll = concatFunction(window.onscroll, relocateElement);
	};
})();
