/*
* jQuery-1.4.4 shifter by FirstView (http://firstviewmedia.com).
* This lets you shift a group of images inside a parent container
* Options include custom class names, easing and duration.
*/

(function($){
	$.fn.shifter = function(opts) {
	
		var defaults = {
			shifterParentClass: '.viewPort',
			slidreClass: '.aricleLinkContainer',
			slideClass: '.quickLink.category.miniSize',
			nextBtnClass: '._jsNavNext',
			prevBtnClass: '._jsNavPrev',
			numOfVisibleImgs: 4,
			numOfShifts: 3,
			easing: 'easeInOutQuint',
			duration: 500
		};
		var opts								= $.extend(defaults, opts);
		
		return this.each(function(){
			
			// Define vars. //
			var $this = $(this);
			
			var $shifterParent					= $this.find(opts.shifterParentClass);
			var $shifter						= $shifterParent.find(opts.slidreClass);
			var $slide							= $shifterParent.find(opts.slideClass);
			var $next							= $this.find(opts.nextBtnClass);
			var $prev							= $this.find(opts.prevBtnClass);
			
			var numSlides						= $slide.size()-1;
			var numShowing						= opts.numOfVisibleImgs;
			var shiftAmt						= $shifterParent.width();
			var maxLeft							= ( numSlides/numShowing - 1 ) * shiftAmt;
			var currentLeft						= 0;
			var newshifterWidth					= 0;
			
			if( maxLeft < 0 ) maxLeft			= 0;
			
			$slide.each(function( i ){ newshifterWidth += $(this).outerWidth(true); });
			$shifter.width( newshifterWidth );
			
			
			// Define functions. //
			$next.fadeIn(300).click(function( e ){
				e.preventDefault();
				if( $(this).data('disabled') ) return false;
				currentLeft += shiftAmt;
				slideTo( currentLeft );
			});
			$prev.fadeIn(300).click(function( e ){
				e.preventDefault();
				if( $(this).data('disabled') ) return false;
				currentLeft -= shiftAmt;
				slideTo( currentLeft );
			});
			
			function slideTo( shiftAmt ){
				
				//console.log('maxLeft : '+maxLeft);
				
				if( shiftAmt > maxLeft ) shiftAmt = maxLeft;
				else if( shiftAmt <= 0 ) shiftAmt = 0;
				if( numSlides > numShowing && shiftAmt < maxLeft ){
					$next
						.data('disabled',false)
						.removeClass('disabled')
						.fadeTo(300,1);
				}else{
					$next
						.data('disabled',true)
						.addClass('disabled')
						.fadeTo(300,.3);
				}
				if( numSlides > numShowing && shiftAmt > 0 ){
					$prev
						.data('disabled',false)
						.removeClass('disabled')
						.fadeTo(300,1);
				}else{
					$prev
						.data('disabled',true)
						.addClass('disabled')
						.fadeTo(300,.3);
				}
				currentLeft = shiftAmt;
				$shifter.animate({'left':-currentLeft}, {easing:opts.easing, duration:opts.duration});
			}
			
			// Get ball rolling. //
			slideTo(0);
			
			return this;
		});
	};
})(jQuery);

