(function() {
	
	if (typeof jQuery === 'undefined') {
		return;	
	}
	
	var $ = jQuery;
	
	$.scrollFollow = function(box, options) {
		
		function ani(box, iTop) {
			$( box ).dequeue();
			
			var pageScroll = $( document ).scrollTop();
			var offsetHeight = (options.offsetTopBox && $( options.offsetTopBox ).length > 0? $( options.offsetTopBox ).get(0).offsetHeight: 0);
			var parentTop = $( options.container ).offset().top + offsetHeight;
			var parentHeight = $( options.container ).height() - offsetHeight;
			var boxTop = $( box ).offset().top;
			var boxHeight = box.offsetHeight;
			var aniTop;
			
			aniTop = Math.min( ( Math.max( ( parentTop + iTop ), ( pageScroll + options.offset ) ) - parentTop ), ( parentHeight - boxHeight ) );
			if (aniTop < 0) {aniTop = 0;}
			$(box).animate({top: aniTop}, options.speed);
		}
		
		var initialTop = $( box ).css( 'top' );
		
		if (initialTop == 'auto') {
			initialTop = 0;
		}
		else {
			initialTop = parseInt( initialTop.substr( 0, initialTop.indexOf( 'p' ) ) );
		}
		
		$(window).scroll(function() {
			ani(box, initialTop);
		});
	};
	
	
	
	$.fn.scrollFollow = function (options) {
		var options = {
			container: options.container || this.parent(),
			speed: options.speed || 500,
			offset: options.offset || 0,
			offsetTopBox: options.offsetTopBox
		};
		
		this.each(function() {
			new $.scrollFollow(this, options);
		});
		
		return this;
	};
	
})();

