jQuery(function($){

var scroller = $('#scroller'),
	scroller_position = scroller.offset(),
	scroller_fixed = false,
	scroller_y_maxed = false,
	scroller_top_padding = 10,
	scroller_ie6_hack = $.browser.msie && $.browser.version <= 6,
	container = $('.main'),
	max_pos = parseInt(container.outerHeight()) - parseInt(scroller.outerHeight());

$('head').append(
	'<style>'+
	'	.scroller-fixed { '+
	'		left: '+scroller_position.left+'px;' +
	'		top: '+scroller_top_padding+'px !important;' +
	'	}'+
	' .scroller-absolute { '+
	'</style>'
);

$(window).scroll(function(){

	var reference = $(this),
		scroll_y = reference.scrollTop(),
		pos = scroller_position.top - scroll_y - scroller_top_padding;

	if (scroller_ie6_hack)
	{
		if (pos < 0)
		{
			scroller.css('left', '20px');
			scroller.css('top', scroll_y - scroller_position.top);
		}
	}
	else
	{
		if (!scroller_fixed && pos < 0) // fix (scroll with page)
		{
			scroller_fixed = true;
			scroller.after('<div id="scroller-placeholder">&nbsp;</div>');
			scroller.addClass('scroller-fixed');
		}

		if (scroller_fixed)
		{
			if (pos > 0) // unfix (position normally)
			{
				//console.log('unfixing');
				scroller_fixed = false;
				$('#scroller-placeholder').remove();
				scroller.removeClass('scroller-fixed');
			}

			if (scroll_y > max_pos) // past max (prevent from overlapping footer)
			{
				scroller_y_maxed = true;
				scroller.css('top', (max_pos - scroll_y) + 'px');
			}

			if (scroller_y_maxed && scroll_y < max_pos) // no longer past max (no longer on top of footer)
			{
				scroller_y_maxed = false;
				scroller.css('top', scroller_top_padding+'px');
			}
		}
	}
});

});
