(function($){
	$(document).ready(function () {
		$("#shoppingCartArea").scrollingElement()
	});
	
	$.fn.scrollingElement = function(){
		var windowObj = $(window);
		
		return this.each(function(){
			
			var elem = $(this),
			elemOffset = elem.offset(),
			elemOffsetStart = elemOffset.top,
			elemHeight = elem.innerHeight(),
			basic = $('#basis'),
			basicHeight,
			basicOffset = basic.offset(),
			elemHeight,
			windowScrollTop,
			windowScrollTopPrev,
			windowHeight = windowObj.height();
			
			elem.css({position:'relative'});
			
			windowObj.bind('scrollWindow',function(){
				elem.stop();
				elemOffset = elem.offset();
				elemHeight = elem.innerHeight();
				basicHeight = basic.innerHeight();
				windowScrollTop = windowObj.scrollTop();
				if(typeof windowScrollTopPrev == 'undefined')
					windowScrollTopPrev = windowScrollTop;
				/* Start animation */
				if(windowScrollTop - elemOffsetStart < 0){
					elem.animate({top:0},300);
					windowScrollTopPrev = windowScrollTop;
					return;
				};
				if(windowHeight + windowScrollTop > (elemOffset.top + elemHeight)){
					if(windowScrollTop - basicOffset.top + elemHeight <= basicHeight - 40){
						elem.animate({top:windowScrollTop - elemOffsetStart},300);
					}
					else {
						elem.animate({top:basicOffset.top + basicHeight - 40 - elemHeight - elemOffsetStart},300)
					}
				}
				else {
					if(windowScrollTopPrev > windowScrollTop){
						elem.animate({top:windowScrollTop - elemOffsetStart},300);
					};
				};
				windowScrollTopPrev = windowScrollTop;
			});
			
			windowObj.resize(function(){
				windowHeight = windowObj.height();
				windowObj.trigger('scrollWindow');
			});
			
			windowObj.trigger('scrollWindow');
			
			windowObj.scroll(function(){
				windowObj.trigger('scrollWindow');
			});
						
		});
	};
})(jQuery)
