// Carrusel de fotos con transición alfa
// Permite mostrar una secuencia de fotos con transición alfa 
// con carga eficiente en segundo plano. Opcionalmente el orden
// del carrusel sea aleatorio.
//
// Autor: Miguel García Domínguez
// Fecha: 15/06/2010
//
// Actualizacion: 02/11/2010 (imagenes cargadas como fondos de div por lo que se cortan por la derecha de la pantalla)

// Parámetros modificables:
var ruta_imagenes = "imagenes/fondo/";
var imagenes = ["fondo_01.jpg","fondo_02.jpg","fondo_03.jpg","fondo_04.jpg","fondo_05.jpg","fondo_06.jpg"];
var alto_imagenes = 502;
var orden_aleatorio = true;  // false si lo quieres siempre en ese orden
var tiempo_imagenes = 5; // tiempo que permanece cada imagen (en segundos)
var velocidad_transicion = 3000; // slow, normal o fast
// ------------------------------------------------------------------------------------//

// Variables globales:
var imagenes_cargadas = 0;
var id_interval;
var imagen_actual = 0;

// Detectar cuando el documento está cargado:
$(document).ready(function() {	
	// Si se desea orden aleatorio, shuffle del array:
	if (orden_aleatorio) imagenes = shuffle(imagenes);
	
	// Se genera un poco de css para el contenedor:
	//$("#carrusel").css("position","relative");
	
	// Se genera el html para el contenedor:
	var html = "";
	for (var i=0; i<imagenes.length; i++) {		
		html += '<div id="imagen_carrusel'+i+'" style="position:absolute; top:0; left:0; width:100%; height:' + alto_imagenes + 'px;"><!-- --></div>';
		html += '<img id="imagen_carrusel_oculta'+i+'" alt="'+i+'" style="display:none" />';
	}
	$("#carrusel").html(html);
	
	// Una vez cargada la imagen se cargan las demás:
	$("#imagen_carrusel_oculta0").load(function() {
		imagenes_cargadas++;
		$("#imagen_carrusel0").css("background","url('"+ ruta_imagenes + "/" + imagenes[0] + "') center");
		for (var i=1; i<imagenes.length; i++) {		
			$("#imagen_carrusel_oculta"+i).load(function(obj) { 
				imagenes_cargadas++; 
				var index = $(obj.target).attr("alt");				
				$("#imagen_carrusel"+index).css("background","url('"+ ruta_imagenes + "/" + imagenes[index] + "') center");
			});
			$("#imagen_carrusel_oculta"+i).attr("src",ruta_imagenes + "/" + imagenes[i]);
			$("#imagen_carrusel"+i).hide();						
		}
		
		// Se lanza un timer para controlar cuando las imágenes estén cargadas:
		id_interval = setInterval(comprobarCarga,100);
	});
			
	// Se carga la primera imagen:
	$("#imagen_carrusel_oculta0").attr("src", ruta_imagenes + "/" + imagenes[0]);	
});


// Función para comprobar cuándo las imágenes están cargadas y lanzar el carrusel:
function comprobarCarga() {
	if (imagenes_cargadas >= imagenes.length) {
		clearInterval(id_interval);
		id_interval = setInterval(carrusel,tiempo_imagenes*1000);
	}
}


// Función que efectúa el carrusel:
function carrusel() {
	$("#imagen_carrusel"+imagen_actual).fadeOut(velocidad_transicion);
	imagen_actual = (imagen_actual+1)%imagenes.length;
	$("#imagen_carrusel"+imagen_actual).fadeIn(velocidad_transicion);
}



// Función para mezclar un array
// Jonas Raoni Soares Silva
// http://jsfromhell.com/array/shuffle [v1.0]
shuffle = function(o){ //v1.0
	for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
	return o;
};

