/*
Eg. :

$(window).scrollPoint({
	scrollAmt : 100,
	beforeCallback : function(){
		$positionChanger.removeClass("fixed");
	},
	afterCallback : function(){
		$positionChanger.addClass("fixed");
	}
});

*/

(function($){
	$.fn.scrollPoint = function(opts) {
		var defaults = {
			scrollAmt : 500,
			beforeCallback : null,
			afterCallback : null,
			continualCallback : false,
			isAfter : false
		};
		var opts								= $.extend(defaults, opts);
		return this.each(function(){
			var $this = $(this);
			$this.scroll(function(){ checkScrollPos(); });
			
			function checkScrollPos(){
				var scrollAmt = $this.scrollTop();
				
				// Call afterCallback function when scrollTop() is bigger than opts.scrollAmt. //
				if( scrollAmt >= opts.scrollAmt ){
					if( opts.continualCallback ){
						if( opts.afterCallback ) opts.afterCallback( $this, scrollAmt );
					}else{
						if( !opts.isAfter ) opts.afterCallback( $this, scrollAmt );
					}
					opts.isAfter = true;
				
				// Call beforeCallback function when scrollTop() is samller than opts.scrollAmt. //
				}else{
					if( opts.continualCallback ){
						if( opts.beforeCallback ) opts.beforeCallback( $this, scrollAmt );
					}else{
						if( opts.isAfter ) opts.beforeCallback( $this, scrollAmt );
					}
					opts.isAfter = false;
				}
			}
			
			
			// Determine if scrollTop() is bigger or smaller than opts.scrollAmt & Call appropriate function. //
			if( $this.scrollTop() >= opts.scrollAmt ){
				opts.isAfter = true;
				opts.afterCallback( $this, $this.scrollTop() );
			}else{
				opts.isAfter = false;
				opts.beforeCallback( $this, $this.scrollTop() );
			}
			
			return this;
		});
	};
})(jQuery);

