/*
 * 	Gallery Fader 1.0 - jQuery plugin
 *	written by Erik Goens	
 *	http://corvusconceptions.com/jquery-gallery-fader
 * 
 *  Greatly inspired by 
 * 	Easy Slider 1.5 - jQuery plugin
 *	written by Alen Grakalic	
 *	http://cssglobe.com/post/4004/easy-slider-15-the-easiest-jquery-plugin-for-sliding
 *  Big up to Alen
 * 
 *	Copyright (c) 2009 Erik Goens (http://corvusconceptions.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 $("#eyepiece").galleryFader();
 *	
 * 	<div id="eyepiece">
 *		<ul>
 *			<li><img src="images/01.jpg" alt="" /></li>
 *			<li><img src="images/02.jpg" alt="" /></li>
 *			<li><img src="images/03.jpg" alt="" /></li>
 *			<li><img src="images/04.jpg" alt="" /></li>
 *			<li><img src="images/05.jpg" alt="" /></li>
 *		</ul>
 *	</div>
 *
 */

(function($) {
	
	$.fn.galleryFader = function(options){
		var defaults = {
			showControls: true,
			controlsBefore: '<div class="gallery_fader_controls">',
			controlsAfter: '</div>',
			prevClass: 'previous',
			prevText: 'Previous',
			nextClass: 'next',
			nextText: 'Next',
			showCount: false,
			speed: 400,
			pause: 4000,
			auto: false,
			continuous: true
		};
	
		var options = $.extend(defaults, options);
	
		this.each(function() {
			var obj = $(this);
			var the_lis = $("li", obj);
			var s = the_lis.length;
			var w = the_lis.width(); 
			var h = the_lis.height();
			obj.width(w);
			obj.height(h);
			obj.css({overflow:"hidden",position:"relative"});
			var ts = s-1;
			var t = 0;
			the_lis.each(function() {
				$(this).css({position:"absolute",display:"none"});
			});
			var first_li = $("li:first", obj);
			var last_li = $("li:last",obj);
			$(first_li).show();
			$(first_li).addClass('current');
			var p_paused = false;
		
			$("ul", obj).css('width',w);
			
			if(options.showControls && s > 1){
				var html = options.controlsBefore;
				html += '<span class="'+ options.prevClass +'"><a href=\"javascript:void(0);\">'+ options.prevText +'</a></span>';
				if(options.showCount){
					the_lis.each(function(i,elem) {
						var item = i +1;
						html += '<a class="control_num num' + item + '" href=\"javascript:void(0);\">' + item + '</a>';
					});
				};
				html += '<span class="'+ options.nextClass +'"><a href=\"javascript:void(0);\">'+ options.nextText +'</a></span>';
				html += options.controlsAfter;
				$("ul",obj).after(html);
				$("ul",obj).next().css({position:'absolute',zIndex:s+1});
				
				
				function animateNext() {
				  if(options.auto){
  				  var ot = t;
  				  t = (ot>=ts) ? (options.continuous ? 0 : ts) : t+1;
  				  var diff = Math.abs(ot-t);
			    };
				  
  				// init
    			var curr_li_index = $("li",obj).index($('li.current'));
					var curr_li = $('li',obj)[curr_li_index];
					var next_li_index = curr_li_index+1;

					$(curr_li).fadeItOut();
					var curr_a = $('a.current');
					$(curr_a).removeClass('current');
					
					if (next_li_index == s) {
						next_li_index = 0;
						$(first_li).addClass('current');
						var first_a = 'a.num' + (next_li_index + 1);
						$(first_a).addClass('current');
					} else {
						$(curr_a).next('a').addClass('current');
					}
					var show_num = $('li',obj)[next_li_index];
					setTimeout(function() {$(show_num).fadeItIn()}, options.speed);
					
					
  				if(options.auto && p_paused != true){
  				  clearTimeout(timeout);
  					timeout = setTimeout(function(){
  						animateNext();
  					},diff*options.speed+options.pause);
  				};
			  };
				
				
				function animatePrevious() {
				  var curr_li_index = $("li",obj).index($('li.current'));
					var curr_li = $('li',obj)[curr_li_index];
					var prev_li_index = curr_li_index-1;
					
					$(curr_li).fadeItOut();
					var curr_a = $('a.current');
					$(curr_a).removeClass('current');
					
					if (prev_li_index<0) { 
						prev_li_index = s-1;
						$(last_li).addClass('current');
						var last_a = 'a.num' + (prev_li_index + 1);
						$(last_a).addClass('current');
					} else {
						$(curr_a).prev('a').addClass('current');
					}
					
					var show_num = $('li',obj)[prev_li_index];
					setTimeout(function() {$(show_num).fadeItIn()}, options.speed);
				}
				
				// next
				$("span.next",obj).click(function() {
				  clearTimeout(timeout);
					animateNext();
				});
				
				// previous
				$("span.previous",obj).click(function() {
				  clearTimeout(timeout);
					animatePrevious();
				});
			};
			
			if(options.showCount) {
				$('a.control_num:first').addClass('current');
				$('.control_num').click(function() {
				  p_paused = true;
				  clearTimeout(timeout);
			    $('#eyepiece').addClass("play");
					$('li.current',obj).fadeItOut();
					$('a.current',obj).removeClass('current');
					var show_num = Math.floor($(this).text()-1);
					var show_li = $("li", obj)[show_num];
					setTimeout(function() {$(show_li).fadeItIn()}, options.speed);
					var curr_a = $('.control_num',obj)[show_num];
					$(curr_a).addClass('current');
				});
			};
			
			jQuery.fn.fadeItOut = function() {
				$(this).removeClass('current');
				$(this).fadeOut(options.speed);
			};
			
			jQuery.fn.fadeItIn = function() {
				$(this).addClass('current');
				$(this).fadeIn(options.speed);
			};
			
			// init
			var timeout;
			if(options.auto && (s > 1)){
			  $('#eyepiece').append("<a id='play_pause'></a>");
			  $('#eyepiece').mouseover(function() {
			    $('#play_pause').show();
			  }).mouseout(function() {
			    $('#play_pause').hide();
			  });
			  $('#play_pause').toggle(function() {
          clearTimeout(timeout);
          $('#eyepiece').addClass("play");
          p_paused = true;
          console.log(p_paused);
        }, function() {
			    $('#eyepiece').removeClass("play");
			    timeout = setTimeout(function(){
    				animateNext();
    			},options.pause);
    			p_paused = false;
          console.log(p_paused);
        });
			  
				timeout = setTimeout(function(){
					animateNext();
				},options.pause);

			};
		
			if(!options.continuous && options.controlsFade){					
				$("a","#"+options.prevId).hide();
				$("a","#"+options.firstId).hide();				
			};
			
		});
	};
	
})(jQuery);

