/*
 * simpleFade: a jQuery plugin
 * 
 * author: Tommaso Ferrari
 * version: 1.0
 *
 * simpleFade is a jQuery plugin that creates a very simple fading slider out of a list of images
 * it also comes with a built-in preload functionality
 *
 * For more infos, visit:
 * http://tommasoraspo.com/
 *
 * Copyright (c) 2011
 *
 */

(function($){

	$.simpleFade = {
	
		defaults : {
			timeout 	: 2000,
			speed 		: 600
		}
		
	}

	$.fn.extend({
	
		simpleFade : function(config){
		
			var config = $.extend({}, $.simpleFade.defaults, config);
			
			config.timer = new Array();
			config.hovered = new Array();
			config.running = new Array();
			config.timeout = config.timeout + config.speed;
		
			return $(this).each(function(index){
				
				$(this).simpleFadeInit(config, index);
					
			});
				
		
		},
		
		simpleFadeInit : function(config, index){
			
			var ul = $(this);
			config.running[index] = false;
			config.hovered[index] = false;
			
			if( !ul.find("imgLoader").length ) {
				ul.append('<li class="imgLoader" />');
			}
			var images = $(this).find("img"),
				imgNum = images.length,
				loadImg = 0;
			
			for( i=0; i<imgNum; i++){
			
				var newImg = new Image(),
					url = images.eq(i).attr("src");
				
				newImg.onerror = function() {
					console.log("Some errors occurred while loading images");
				}
				
				newImg.onload = function() {
					loadImg++;
					if(loadImg == imgNum){
						ul.simpleFadeStart(config, index);
					}
				};
				newImg.src = url;
				
			}
			
		},
		
		simpleFadeStart : function(config, index){
		
			var ul = $(this);
			$(this).find(".imgLoader").fadeOut(config.speed, function(){
				$(this).remove();
			});
			
			config.timer[index] = setInterval(function() {
				if(!config.hovered[index]){
					if (!config.running[index]) {
						ul.simpleFadeSlide(config, index);
					}
				}
			}, config.timeout);
			
		},
		
		simpleFadeSlide : function(config, index){
		
			config.running[index] = true;
			
			var current = $(this).find(".current"),
				next = current.next("li");
			if(!next.length){
				next = $(this).find("li").eq(0);
			}
				
			next.addClass("next");
			
			current.animate({opacity: 0}, config.speed, function(){
				current.removeClass("current").css({opacity: 1});
				next.addClass("current").removeClass("next");
				config.running[index] = false;				
			});

		}
			
	});
	
})(window.jQuery);
