// JavaScript Document

/*
Plugin: Sideswap v 1.0.1
Author: BrianBlocker.com
Tools: Dreamweaver CS4 / 2009 iMac (early edition) / 2009 Mac Mini (late edition)
*/

(function($)
{					
	$.fn.sideswap = function(options)
	{
		$.fn.sideswap.defaults = 
		{
			navigation: true, /* CREATE LEFT AND RIGHT NAVIGATION IF TRUE, OR DO NOTHING IF FALSE */
			previous: 'prev', /* HTML TO BE USED FOR THE PREVIOUS ARROW */
			next: 'next', /* HTML TO BE USED FOR THE NEXT ARROW */
			display_time: 5000, /* NUMBER OF 1/1000 SECONDS AN IMAGE IS DISPLAYED def 5000*/
			transition_speed: 500, /* SPEED OF TRANSITIONS IN 1/1000 SECONDS def 200*/
			auto_run: true /* AUTOMATICALLY TRANSITIONS THE SLIDES (IF TRUE) */
		};
				
		var opts = $.extend({}, $.fn.sideswap.defaults, options), /* PUTS ALL THE DEFAULT VALUES INTO A VARIABLE */
				clicked = false; /* TRUE AFTER A PREVIOUS OR NEXT BUTTON HAS BEEN CLICKED, HELPS PREVENT ERRORS */
		
		return this.each(function()
		{
			/* VARIABLES */
			var $this = $(this), /* SETS A "GLOBAL" VARIABLE FOR THE CURRENT MATCHED OBJECT */
					$parent = $this.parent(), /* SETS A "GLOBAL" VARIABLE FOR THE MATCHED OBJECT'S PARENT */
					timer = false, /* THE SETINTERVAL FUNCTION IDENTIFIER */
					$images = $this.children(), /* THE IMAGES TO BE ROTATED */
					count = $images.size(); /* THE TOTAL NUMBER OF IMAGES THAT WILL BE ROTATED */
			
			/* SETUP THE IMAGES */
			setup();			
			
			/* SETS UP THE IMAGE DISPLAYS */
			function setup()
			{
				/* OVERRIDE THE CSS STYLES */
				$this.css('position','relative');
				$images.css({"position":"absolute","top":"0px","left":"0px"}).removeClass('hide').hide();
				$this.children(':first').show();
							
				/* CALL THE FUNCTION TO CREATE THE NAVIGATION */
				if(opts.navigation && count > 1)
				{
					createNavigation();
				}
				
				/* SET THE ROTATOR TO RUN AUTOMATICALLY IF AUTO IS TRUE, AND MORE THAN 1 OBJECT EXISTS TO ROTATE */
				if(opts.auto_run && count > 1)
				{
					initiateInterval();
					
					/* PAUSE THE ROTATOR WHEN THE USER HAS THEIR MOUSE OVER AN IMAGE */
					$parent.hover(function()
					{
						clearInterval(timer);
					},function()
					{
						initiateInterval();
					});
				}
			}
			
			/* CONSTRUCTOR */
			function rotate(direction)
			{
				var $current_image = $this.children(':visible:first') == 'undefined' ? $this.children(':first') : $this.children(':visible:first'),
						$previous_image = $current_image.prev() == 'undefined' || $current_image.prev().html() == null ? $this.children(':last') : $current_image.prev(),
						$next_image = $current_image.next() == 'undefined' || $current_image.next().html() == null ? $this.children(':first') : $current_image.next();
				
				if(count > 1)
				{
					$current_image.fadeOut(opts.duration);
					
					switch(direction)
					{
						case -1:
							$previous_image.fadeIn(opts.duration,function()
							{
								clicked = false;
							});
							break;
						default:
							$next_image.fadeIn(opts.duration,function()
							{
								clicked = false;
							});
							break;
					}
				}
			}
			
			/* CREATES THE NAVIGATION TO SCROLL */
			function createNavigation()
			{
				var $div = $('<DIV></DIV>'), /* CREATE THE DIV OBJECT */
						$next = $div.clone().addClass('sideswap_nav sideswap_next').html(opts.next).appendTo($parent).hide(), /* CREATE THE NEXT OBJECT */
						$previous = $div.clone().addClass('sideswap_nav sideswap_previous').html(opts.previous).appendTo($parent).hide(); /* CREATE THE PREVIOUS OBJECT */
				
				$next.click(function()
				{
					if(!clicked)
					{
						clicked = true;
						rotate(1);
					}
				});
				$previous.click(function()
				{
					if(!clicked)
					{
						clicked = true;
						rotate(-1);
					}
				});
				
				$parent.hover(function()
				{
					$next.fadeIn(opts.duration);
					$previous.fadeIn(opts.duration);
				},function()
				{
					$next.fadeOut(opts.duration);
					$previous.fadeOut(opts.duration);
				});
			}
			
			/* INITIATES THE INTERVAL TIMER */
			function initiateInterval()
			{
				timer = setInterval(function()
				{
					rotate();
				},opts.display_time);
			}
			
		});	
	};
})(jQuery);
