/*

 * 	loopedSlider 0.5.4 - jQuery plugin

 *	written by Nathan Searles	

 *	http://nathansearles.com/loopedslider/

 *

 *	Copyright (c) 2009 Nathan Searles (http://nathansearles.com/)

 *	Dual licensed under the MIT (MIT-LICENSE.txt)

 *	and GPL (GPL-LICENSE.txt) licenses.

 *

 *	Built for jQuery library

 *	http://jquery.com

 *

 */



/*

 *	markup example for $("#loopedSlider").loopedSlider();

 *

 *	<div id="loopedSlider">	

 *		<div class="container">

 *			<div class="slides">

 *				<div><img src="01.jpg" alt="" /></div>

 *				<div><img src="02.jpg" alt="" /></div>

 *				<div><img src="03.jpg" alt="" /></div>

 *				<div><img src="04.jpg" alt="" /></div>

 *			</div>

 *		</div>

 *		<a href="#" class="previous">previous</a>

 *		<a href="#" class="next">next</a>

 *		<ul class="pagination">

 *			<li><a href="#">1</a></li>

 *			<li><a href="#">2</a></li>

 *			<li><a href="#">3</a></li>

 *			<li><a href="#">4</a></li>

 *		</ul>	

 *	</div>

 *

*/



(function($) {

	$.fn.loopedSlider = function(options) {

		

	var defaults = {			

		container: '.container',

		slides: '.slides',

		pagination: '.pagination',

		containerClick: true, // Click container for next slide

		autoStart: 5500, // Set to positive number for auto start and interval time

		restart: 5000, // Set to positive number for restart and restart time

		//autoStart: 0, // Set to positive number for auto start and interval time

		//restart: 0, // Set to positive number for restart and restart time

		slidespeed: 2000, // Speed of slide animation

		fadespeed: 300, // Speed of fade animation

		autoHeight: false // Set to positive number for auto height and animation speed

	};

		

	this.each(function() {

		

		var obj = $(this);

		var o = $.extend(defaults, options);

		var pagination = $(o.pagination+' li a',obj);

		var m = 0;

		var t = 1;

		var s = $(o.slides,obj).children().size();

		var w = $(o.slides,obj).children().outerWidth();

		var p = 0;

		var u = false;

		var n = 0;

		var interval=0;

		var restart=0;

		

		$(o.slides,obj).css({width:(s*w)});

		

		$(o.slides,obj).children().each(function(){

			$(this).css({position:'absolute',left:p,display:'block'});

			p=p+w;

		});

		

		$(pagination,obj).each(function(){

			n=n+1;

			$(this).attr('rel',n);

			$(pagination.eq(0),obj).parent().addClass('active');

		});

		

		$(o.slides,obj).children(':eq('+(s-1)+')').css({position:'absolute',left:-w});

		

		if (s>3) {

			$(o.slides,obj).children(':eq('+(s-1)+')').css({position:'absolute',left:-w});

		}

		

		if(o.autoHeight){autoHeight(t);}

		

		$('.next',obj).click(function(){

			if(u===false) {

				animate('next',true);

				if(o.autoStart){

					if (o.restart) {autoStart();}

					else {clearInterval(sliderIntervalID);}

				}

			} return false;

		});

		

		$('.previous',obj).click(function(){

			if(u===false) {	

				animate('prev',true);

				if(o.autoStart){

					if (o.restart) {autoStart();}

					else {clearInterval(sliderIntervalID);}

				}

			} return false;

		});

		

		if (o.containerClick) {

			$(o.container ,obj).click(function(){

				if(u===false) {

					animate('next',true);

					if(o.autoStart){

						if (o.restart) {autoStart();}

						else {clearInterval(sliderIntervalID);}

					}

				} return false;

			});

		}

		

		$(pagination,obj).click(function(){

			if ($(this).parent().hasClass('active')) {return false;}

			else {

				t = $(this).attr('rel');

				$(pagination,obj).parent().siblings().removeClass('active');

				$(this).parent().addClass('active');

				animate('fade',t);

				if(o.autoStart){

					if (o.restart) {autoStart();}

					else {clearInterval(sliderIntervalID);}

				}

			} return false;

		});

	

		if (o.autoStart) {

			sliderIntervalID = setInterval(function(){

				if(u===false) {animate('next',true);}

			}, o.autoStart);

			function autoStart() {

				if (o.restart) {

				clearInterval(sliderIntervalID);

				clearInterval(interval);

				clearTimeout(restart);

					restart = setTimeout(function() {

						interval = setInterval(	function(){

							animate('next',true);

						},o.autoStart);

					},o.restart);

				} else {

					sliderIntervalID = setInterval(function(){

						if(u===false) {animate('next',true);}

					},o.autoStart);

				}

			};

		}

		

		function current(t) {

			if(t===s+1){t=1;}

			if(t===0){t=s;}

			$(pagination,obj).parent().siblings().removeClass('active');

			$(pagination+'[rel="' + (t) + '"]',obj).parent().addClass('active');

		};

		

		function autoHeight(t) {

			if(t===s+1){t=1;}

			if(t===0){t=s;}	

			var getHeight = $(o.slides,obj).children(':eq('+(t-1)+')',obj).outerHeight();

			$(o.container,obj).animate({height: getHeight},o.autoHeight);					

		};		

		

		function animate(dir,clicked){	

			u = true;	

			switch(dir){

				case 'next':

					t = t+1;

					m = (-(t*w-w));

					current(t);

					if(o.autoHeight){autoHeight(t);}

					if(s<3){

						if (t===3){$(o.slides,obj).children(':eq(0)').css({left:(s*w)});}

						if (t===2){$(o.slides,obj).children(':eq('+(s-1)+')').css({position:'absolute',left:(w)});}

					}

					$(o.slides,obj).animate({left: m}, o.slidespeed,function(){

						if (t===s+1) {

							t = 1;

							$(o.slides,obj).css({left:0},function(){$(o.slides,obj).animate({left:m})});							

							$(o.slides,obj).children(':eq(0)').css({left: 0});

							$(o.slides,obj).children(':eq('+(s-1)+')').css({ position:'absolute',left:-w});				

						}

						if (t===s) $(o.slides,obj).children(':eq(0)').css({left:(s*w)});

						if (t===s-1) $(o.slides,obj).children(':eq('+(s-1)+')').css({left:s*w-w});

						u = false;

					});					

					break; 

				case 'prev':

					t = t-1;

					m = (-(t*w-w));

					current(t);

					if(o.autoHeight){autoHeight(t);}

					if (s<3){

						if(t===0){$(o.slides,obj).children(':eq('+(s-1)+')').css({position:'absolute',left:(-w)});}

						if(t===1){$(o.slides,obj).children(':eq(0)').css({position:'absolute',left:0});}

					}

					$(o.slides,obj).animate({left: m}, o.slidespeed,function(){

						if (t===0) {

							t = s;

							$(o.slides,obj).children(':eq('+(s-1)+')').css({position:'absolute',left:(s*w-w)});

							$(o.slides,obj).css({left: -(s*w-w)});

							$(o.slides,obj).children(':eq(0)').css({left:(s*w)});

						}

						if (t===2 ) $(o.slides,obj).children(':eq(0)').css({position:'absolute',left:0});

						if (t===1) $(o.slides,obj).children(':eq('+ (s-1) +')').css({position:'absolute',left:-w});

						u = false;

					});

					break;

				case 'fade':

					t = [t]*1;

					m = (-(t*w-w));

					current(t);

					if(o.autoHeight){autoHeight(t);}

					$(o.slides,obj).children().fadeOut(o.fadespeed, function(){

						$(o.slides,obj).css({left: m});

						$(o.slides,obj).children(':eq('+(s-1)+')').css({left:s*w-w});

						$(o.slides,obj).children(':eq(0)').css({left:0});

						if(t===s){$(o.slides,obj).children(':eq(0)').css({left:(s*w)});}

						if(t===1){$(o.slides,obj).children(':eq('+(s-1)+')').css({ position:'absolute',left:-w});}

						$(o.slides,obj).children().fadeIn(o.fadespeed);

						u = false;

					});

					break; 

				default:

					break;

				}					

			};

		});

	};

})(jQuery);