// element must be position: relative;
// it should also have a parent container (like wrapper);

// original: http://blog.echoenduring.com/wp-content/uploads/demos/echo_ContainedStickyScroll/jquery-contained-sticky-scroll.js
// enhanced by pa-ket 2011/jul/13
////////////////////////////////////
(function( $ ){
  $.fn.containedStickyScroll = function( options ) {
	var defaults = {  
		oSelector : this.selector,
		unstick : false,
		easing: 'linear',
		duration: 300,
		queue: false,
		closeChar: 'x',
		closeTop: 0,
		closeRight: 0,
		padTopOrig: '0px', // original padding of element
		padTop: 20 // how much space should be left above element
		
	}  
	var options =  $.extend(defaults, options);
	options.padTopOrig = parseInt($(options.oSelector).css('padding-top'), 10);
	
	if(options.unstick == true){  
		this.css('position','relative');
		this.append('<a class="scrollFixIt">' + options.closeChar + '</a>');
		$(options.oSelector + ' .scrollFixIt').css('position','absolute');
		$(options.oSelector + ' .scrollFixIt').css('top',options.closeTop + 'px');
		$(options.oSelector + ' .scrollFixIt').css('right',options.closeTop + 'px');
		$(options.oSelector + ' .scrollFixIt').css('cursor','pointer');
		$(options.oSelector + ' .scrollFixIt').click(function() {
			o = options.oSelector;
			$(o).animate({ top: "0px" },
				{ queue: options.queue, easing: options.easing, duration: options.duration });
			$(window).unbind();
			$('.scrollFixIt').remove();
		});
	} 
	
  $(window).scroll(function() {
  	o = options.oSelector;
    if($(window).scrollTop() > ($(o).parent().offset().top) &&
    ($(o).parent().height() + $(o).parent().position().top - 30) > ($(window).scrollTop() + $(o).height())) {
      var top = ($(window).scrollTop() - $(o).parent().offset().top);
      var padadjust = (top < options.padTopOrig - options.padTop) ? options.padTopOrig - top : 20;
    	$(o).animate({ 'paddingTop': padadjust+'px', 'top': top + "px" }, 
        { queue: options.queue, easing: options.easing, duration: options.duration });
    }
    else if($(window).scrollTop() < ($(o).parent().offset().top)) {
    	$(o).animate({ 'top': '0px', 'paddingTop': options.padTopOrig + 'px' },
        { queue: options.queue, easing: options.easing, duration: options.duration });
    }
	});
};

})( jQuery );
