/*
 * 	loopedSlider 0.5.1 - 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
 *
 */


(function($) {
	$.fn.loopedSlider = function(options) {
		
	var defaults = {			
		container: '.container',
		slides: '.slides',
		pagination: '.pagination',
		slidination: '.slideloc',
		containerClick: true, // Click container for next slide
		autoStart: 0, // Set to positive number for auto interval and interval time
		intervalTime: 4000,  //interval time
		slidespeed: 400, // Speed of slide animation
		fadespeed: 800, // Speed of fade animation
		autoHeight: false, // Set to positive number for auto height and animation speed
		slideType: 'scroll' //Allow different types (Fade or Scroll)
		
	};
		
	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;
		
		if(o.slideType !='fade'){
			$(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(o.autoHeight){autoHeight(t);}
			$('.next',obj).click(function(){
				if(u===false) {
					if(o.slideType =='fade'){
							animate('fade2',true);
					}else{
						animate('next',true);
					}
					if(o.autoStart){clearInterval(sliderIntervalID);}
				} return false;
			});
			
			$('.previous',obj).click(function(){
				if(u===false) {	
					if(o.slideType =='fade'){
							animate('fade2',true);
					}else{
						animate('prev',true);
					}
					if(o.autoStart){clearInterval(sliderIntervalID);}
				} return false;
			});
			
			if (o.containerClick) {
				$(o.container ,obj).click(function(){
					if(u===false) {
						if(o.slideType =='fade'){
							fadeit();
						}else{
							animate('next',true);
						}
						if(o.autoStart){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){clearInterval(sliderIntervalID);}
				} return false;
			});

			if (o.autoStart) {
				if(o.autoStart){
					var autoInverval = o.autoStart;
				}else{
					var autoInverval = 200; //o.autoStart;
				}
				u = false;
				sliderIntervalID = setInterval(function(){
					if(u===false) {
						if(o.slideType =='fade2'){
							animate('fade2',true);
						}else if(o.slideType =='fade'){
							fadeit();
							autoInverval = '100';
						}else{
							animate('next',true);
						}
					}
				}, autoInverval);
			}
		}else{
			t=0;
			$(o.slides,obj).children().fadeOut();
			$('.s1').fadeIn();
			sliderIntervalID = setInterval(function(){fadeit();}, 3000);
		}
		
		function astart(){
				if(o.autoStart){var autoInverval = o.autoStart;}else{autoInverval = 200;}
				sliderIntervalID = setInterval(function(){if(u===false) {animate('fade2',true);}}, autoInverval);
		}
		function fadeit(){
			if(t===0){
				t=1;
				clearInterval(sliderIntervalID);
				sliderIntervalID2 = setInterval(function(){fadeit();}, 9000);
			}
			if(t===1){
				$('.s1').fadeOut(o.fadespeed, function(){$('.s2').fadeIn(o.fadespeed);});
				t=2;
			}else if(t===2){
				$('.s2').fadeOut(o.fadespeed, function(){$('.s3').fadeIn(o.fadespeed);});
				t=3;
			}else if(t===3){
				$('.s3').fadeOut(o.fadespeed, function(){$('.s4').fadeIn(o.fadespeed);});
				t=4;
			}else if(t===4){
				$('.s4').fadeOut(o.fadespeed, function(){$('.s1').fadeIn(o.fadespeed);});
				t=1;
			}
		}
		
	
		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);}
					$(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);}
					$(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; 
					
				case 'fade2':
					t = t+1;
					m = (-(t*w-w));
					current(t);
					//alert(m+'|'+t);
					$(o.slides,obj).children().fadeOut(o.fadespeed, function(){
						$(o.slides,obj).css({left: m});
						if (t===s+1) {
							t = 1;
							//$(o.slides,obj).css({left:0},function(){$(o.slides,obj).css({left:m})});
							$(o.slides,obj).css({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;	
						$(o.slides,obj).children().fadeIn(o.fadespeed);
					});
					break;
				}					
			};
		});
	};
})(jQuery);
