/******************************************************
 * Copyright (c) Mar.30.2010
 * 
 * Author:  Tyler Thompson
 * Company: 38pages, LLC.
 * Support: http://www.38pages.com
 * Email:   tyler@38pages.com
 * ---
 * jQuery Pluginified
 * Author: Ryan Schumacher
 * Company: 38pages, LLC
 * Support: http://www.38pages.com
 * Email: ryan@38pages.com
 ******************************************************/

// Image Slider
(function($){
	$.extend($.fn,{
		slider: function(options) {
			
			var defaults = {
				slideTime: 7000,
				width: 'auto',
				height: 'auto',
				navButtons: false,
				navBanner: false,
				centerButtons: true
			};
			
			var opts = $.extend(defaults, options);
			var slidesWrapper = $(this);
			var slides = $(slidesWrapper).find('.slide');
			var currentPosition = 0;
			var slideTimeoutHandle;
			
			// No slides
			if($(slidesWrapper).find('.slide img').length == 0) {return;}
			
			if(opts.width == 'auto') {
				opts.width = $(slidesWrapper).find('.slide img').width();
			}
			if(opts.height == 'auto') {
				opts.height = $(slidesWrapper).find('.slide img').height();
			}
			
			
			// Setting up the CSS for slide_wrapper
			slidesWrapper.css({
				width : opts.width,
				height : opts.height,
				overflow: 'hidden',
				position: 'relative'
			});
			
			// Setting up the CSS for each Slide
			$(slides).each(function(i) {
				$(this).css({
						left : opts.width * i,
						width : opts.width,
						height : opts.height,
						position: 'absolute'
					});
			});
			
			if(opts.navButtons) {
				var nextButton = $(slidesWrapper).find('.buttons .nextButton');
				var prevButton = $(slidesWrapper).find('.buttons .prevButton');
				if(nextButton == null) {
					nextButton = document.createElement('button');
				}
				if(prevButton == null) {
					prevButton = document.createElement('button');				
				}
				
				// Setting CSS top position for prev & next buttons
				if(opts.centerButtons) {
					var height = opts.height / 2 - 20;
					$(nextButton).css('top', height);
					$(prevButton).css('top', height);
				}
					
				// Next slide controls
				$(nextButton).click(function(e) {
					e.preventDefault();
					moveSlide('left');
				});
				// Previous slide controls
				$(prevButton).click(function(e) {
					e.preventDefault();
					moveSlide('right');
				});
			}
			
			// Create the banner
			if(opts.navBanner) {
			}
			
			function moveSlide(direction, callback){
				clearTimeout(slideTimeoutHandle);
				
				// Slide
				if(currentPosition != slides.length - 1) {
					// Move slider right
					if(direction == 'right') {
						direction = '+=';
						manageControls(--currentPosition);
					}
					// Move slider left
					else {
						direction = '-=';
						manageControls(++currentPosition);
					}
					
					$(slides).animate({
						left: direction + opts.width
					}, 1500, function() {});
				} 
				// Last slide start over
				else {
					currentPosition = 0;
				  manageControls(currentPosition);	
					$(slides).animate({
						left: '+=' + (opts.width * (slides.length - 1))
					}, 1500, function() {});
				}
		
				slideTimeoutHandle = setTimeout(moveSlide, opts.slideTime);
			}
			
			function manageControls(position){
				if(slides.length <= 1) {return;}
			
				if(opts.navButtons) {
          if(slides.length >= 1) {
					  // Show prev button if position is not first slide
            if(position > 0) $(prevButton).show();
            else $(prevButton).hide();
            
            // Show next button if position is not last slide
            if(position < slides.length - 1) $(nextButton).show();
            else $(nextButton).hide();				    
          }
				}
				
				// Banner
				if(opts.navBanner) {
					$(banner).find('.s-active').removeClass('s-active');
					$(banner).find('div:nth-child('+ position +')').addClass('s-active');
				}
			}
			
			// Manage controls
			manageControls(currentPosition);
			
			// Start the slider
			if(slides.length >= 1) {
				slideTimeoutHandle = setTimeout(moveSlide, opts.slideTime);
			}
		}
	});
})(jQuery);
