/*!
 * CrispAndClean Featured Slider
 *
 * @category    WorryFreeLabs
 * @package     js
 * @copyright   Copyright (c) 2010 Worry Free Labs, LLC. (http://worryfreelabs.com/)
 * @author      Oleksandr Bernatskyi
 */
;(function($)
{
	$.fn.extend
	({
		crispAndCleanFeatured: function(options)
		{
			var defaults =
			{
				animationDuration: 600,
				itemsPerSlide: 1,
				reverseDirection: false,
				//slideWidth: 940/4,
				//slideHeight: 259,
				sliderControlLeft: null,
				sliderControlRight: null
			};
			
			var options = $.extend(defaults, options);
			
			return this.each
			(
				function()
				{
					var o = options;
					var $this = $(this);
					var $slider = $('ul', $this);
					var viewWidth = $this.width();
					
					// Number of slides
					var slidesNumber = Math.ceil($('> li', $slider).length / o.itemsPerSlide);
					var sliderWidth = o.slideWidth * slidesNumber;

					// CSS adaptation
					$slider.css
					({
						left: o.reverseDirection ? -o.slideWidth * (slidesNumber - 1) : 0,
						top: 0,
						width: sliderWidth,
						height: o.slideHeight,
						overflow: 'hidden',
						position: 'relative'
					});
					
					// Animation effect
					var $controlLeft = $(o.sliderControlLeft);
					var $controlRight = $(o.sliderControlRight);
					
					var checkControls = function()
					{
						var leftOffset = Math.abs(parseInt($slider.css('left')));
						var rightOffset = sliderWidth - viewWidth - leftOffset;

						var cannotGoRight = (leftOffset <= 0);
						var cannotGoLeft = (rightOffset <= 0);
						
						if (cannotGoLeft)
						{
							$controlLeft.attr('class', 'inactive');
						}
						else
						{
							$controlLeft.attr('class', 'active');
						}

						if (cannotGoRight)
						{
							$controlRight.attr('class', 'inactive');
						}
						else
						{
							$controlRight.attr('class', 'active');
						}
					};
					
					$controlRight.click
					(
						function(ev)
						{
							ev.preventDefault();
							if ($slider.is(':animated') || $controlRight.is('.inactive'))
							{
								return false;
							}
							
							$slider.animate({left: '+=' + o.slideWidth}, o.animationDuration, checkControls);
						}
					);

					$controlLeft.click
					(
						function(ev)
						{
							ev.preventDefault();
							if ($slider.is(':animated') || $controlLeft.is('.inactive'))
							{
								return false;
							}
							
							$slider.animate({left: '-=' + o.slideWidth}, o.animationDuration, checkControls);
						}
					);
					
					checkControls();
				}
			);
		}
	});
})(jQuery);
