$(function() {

	new SlideShow($('.slideshow'));

});

function SlideShow($me){
	
	if(navigator.appVersion.match(/MSIE (7|8)/)){
		$me.addClass('msie-8-minus');
	}
	
	var $holder=$me;
	var width=$me.width();
	var height=$me.height();
	var transition_time=750;
	var slideshow_time=10000;
	var slideshow_running=true;
	var slideshow_timer;
	var slide_num=0;
	
	var $slides=$me.find('.slides');
	var $items=$slides.children();
	
	var count=$items.length;
	
	$slides.width(count*width);
	
	//moving slides' child elements into separate parallax planes
	
	$items.each(function(i){
		var $me=$(this);
		
		$me.children().each(function(i){
			var $plane=$holder.find('.plane-'+i);
			if(!$plane.length){
				$plane=$("<ul class='plane plane-"+i+"'></ul>").appendTo($holder);
			}
			$("<li/>").appendTo($plane).append($(this)).addClass($me.attr('class'));
			
		});
	})
	
	$planes=$holder.find('ul.plane');
	
	$planes.each(function(){
		$(this).width($(this).find('li').width()*count);
	});
	
	var $nav=$me.find('ul.nav');
	
	for(var i=0;i<count;i++){
		$("<li><span></span></li>").appendTo($nav).click(function(){
			navigate($nav.children().index(this));
		});
	}
	
	$($nav.children()[0]).addClass('active');
	
	//SLIDESHOW
	
	//pause when mouse is over holder
	
	$holder.mouseenter(function(){
		stop();
	}).mouseleave(function(){
		start();
	});

	if(slideshow_running) start();
	
	function start(){
		stop();
		slideshow_running=true;
		slideshow_timer=setTimeout(function(){
			navigate(slide_num+1==count?0:slide_num+1);
		},slideshow_time);
	}
	
	function stop(){
		clearTimeout(slideshow_timer);
		slideshow_running=false;
	}
	
	function pause(){
		clearTimeout(slideshow_timer);
	}
	
	//TRANSITION
	
	var plane_trans, plane_timer;
	
	function navigate(num){
		
		pause();
		
		$nav.children().removeClass('active');
		$($nav.children()[num]).addClass('active');

		var $me=$($items.get(num));
		
		var left=num*width;
		
		setTimeout(function(){
			if(slideshow_running) start();
		},transition_time);
		
		plane_trans=[];
		clearInterval(plane_timer);
		var frame_time=10;
		
		var $planes=$holder.find('.slides,.plane');
		
		$planes.each(function(){
			
			var $me=$(this);
			
			var from=parseInt($me.css('left'));
			var to=-num*$(this).children('li').width();			
			
			var count=Math.round(transition_time/frame_time);
			var steps=[];
			
			for(var i=1;i<=count;i++){
				//steps.push(from+Math.round((to-from)/count*i));
				steps.push(ease(i,from,(to-from),count));
			}

			function ease(t, b, c, d) {
				t /= d;
				return -c * t*(t-2) + b;
			};


			plane_trans.push({
				$me:$me[0],
				steps:steps
			});

		});
		
		plane_timer=setInterval(function(){
			var stop=false;
			for(var i=0;i<plane_trans.length;i++){
				var $me=plane_trans[i].$me;
				var steps=plane_trans[i].steps;
				if(!steps.length){
					stop=true;
					continue;
				}
				var l=steps.shift();
				$me.style.left=l+'px';
			}	
				if(stop) clearInterval(plane_timer);
				
			},frame_time);

	
		slide_num=num;
		
	}
	
		
}
	

