// JavaScript Document

/* 	Alterna <div> (u otros tags como <img>) haciendo fades.
	Las funciones a utilizar son:
			DefSwap(nombre,total[,is,willBe,speed,delay,random]): Define la funcin sin lanzar el swap al inicio.
			StartSwap(nombre,total[,is,willBe,speed,delay,random]): Define y lanza la funcin de swap.
			ChangeSwap(nombre,is,willBe): Cambia de un <div> a otro.
			PauseSwap(nombre,is): Detienen o reanuda la funcin.
	
			nombre representa el nombre o el id de la seccin a alternar.
			Los ids de los <div> deben ser nombre1, nombre2, ...
			Al llamar la funcin el nmero no se debe especificar, solamente el nombre.
			
			total representa el nmero total de <div> a alternar.
			
			is representa el nmero del <div> activo.
			
			willBe representa el nmero del <div> al que se desea cambiar.
			
			speed representa la velocidad con la que hace el fade, 0 es instantaneo, entre ms grande, ms lento.
			El valor predeterminado es 10.
			
			delay es el tiempo de espera entre cada transicin en milisegundos.
			El valor predeterminado es 8000.
			
			random indica si el swap se debe hacer en orden o desordenado.
			Los valores posibles son true (desordenado) y false (ordenado).
			Si no se indica o se indica cualquier otro valor se toma false.
			
	Ej;	StartSwap('SwapDiv',5): Define y lanza la funcin en los <div id="SwapDiv1">
	
		DefSwap('SwapDiv',6,1,null,8,6000,true): Define la funcin para los <div> de id
		SwapDiv1, SwapDiv2, ..., SwapDiv6. Empieza en SwapDiv1, la velociadad es 8 y el
		delay es 6000. La funcin se ejecutar desordenada cuando sea activada.
		
		ChangeSwap('SwapDiv',2,3): Pasa al siguiente <div> mientras est en el 2.
		
		PauseSwap('SwapDiv',3): Pausa la funcin en el tercer <div>.
		
	IMPORTANTE:	StartSwap o DefSwap se debe llamar para cada seccin en un script en el <body> o en algn onload eventhandler.
				Los <div> deben tener un width.
				
				El primer <div> a mostrar debe tener este estilo aplicaldo:
				style="opacity:0.99;-moz-opacity:0.99;-khtml-opacity:0.99;filter:alpha(opacity=99);display: block;"
				Los siguientes deben tener este:
				style="opacity:0.0;-moz-opacity:0.0;-khtml-opacity:0.0;filter:alpha(opacity=0);display: none;"

*/


var defDelay = 8000;
var defSpeed = 10;

var tids = new Array();
var autoplay = new Array();

var Nombres = new Array();
var Totals = new Array();
var Iss = new Array();
var WillBes = new Array();
var Speeds = new Array();
var Delays = new Array();
var Randoms = new Array();
var Using = new Array();
var Using2 = new Array();

function checkName(nombre){
	for(var temp=0 ; Nombres[temp] != null ; temp++)
		if(Nombres[temp]==nombre){return temp;}
	return null;
}

function StoreInfo(nombre,total){
	var is=arguments[2];
	var willBe=arguments[3];
	var speed=arguments[4];
	var delay=arguments[5];
	var shuffle=arguments[6];
	var auto=arguments[7];
	if(is==null){is=1;}
	if(willBe==null){willBe=2;}
	if(speed==null){speed=defSpeed;}
	if(delay==null){delay=defDelay;}
	if(shuffle!=true){shuffle=false;}
	if(auto!=false){auto=true;}

	if(checkName(nombre)==null)
	{
		var position = Nombres.length;
		autoplay[position]=auto;
		Totals[position]=total;
		Iss[position]=is;
		WillBes[position]=willBe;
		Speeds[position]=speed;
		Delays[position]=delay;
		Nombres[position]=nombre;
		tids[position]=new Array();
		Randoms[position]=shuffle;
	}
}

function startOrStopScroll(force,numero,is){
	var speed=arguments[3];
	var delay=arguments[4];
	if(speed==null){speed=defSpeed;}
	if(delay==null){delay=defDelay;}

	if(autoplay[numero] == false){
        autoplay[numero] = true;
        var willBe = is;
        if(is+1 > Totals[numero]){
            willBe = 1;
        } else {
            willBe++;
        }
        rollTheScroll(force,numero,is,willBe,speed,delay);
    } else {
        autoplay[numero] = false;
        while(tids[numero].length > 0){
           clearTimeout(tids[numero].pop());
        }
    }
}

function changeScroller(numero,is,willBe){
	var speed=arguments[3];
	if(speed==null){speed=defSpeed;}

	var timer = 0;
	for(i = 99; i >= 0; i--) { // Se utiliza 99 como la opacidad mxima para eliminar un error en mozilla
    	var tid = setTimeout("changeOpac(" + i + ",'" + Nombres[numero] + is + "')",(timer * speed));
    	if(autoplay[numero]){tids[numero].push(tid);}
    	timer++;
    }

	var tid1 = setTimeout("document.getElementById('" + Nombres[numero] + is + "').style.display = 'none'", (timer * speed));
    var tid2 = setTimeout("document.getElementById('" + Nombres[numero] + willBe + "').style.display = 'block'", (timer * speed));
    if(autoplay[numero]){tids[numero].push(tid1, tid2);}
    timer++;
    for(i = 0; i <= 99; i++) {
		var tid = setTimeout("changeOpac(" + i + ",'" + Nombres[numero] + willBe + "')",(timer * speed));
		if(autoplay[numero]){tids[numero].push(tid);}
		timer++;
    }
}

// Cambia la opacidad para los diferentes exploradores
function changeOpac(opacity, id){
	var object = document.getElementById(id);
	if(typeof object.style.filter != 'undefined') object.style.filter = 'alpha(opacity='+opacity+')';
    else if(typeof object.style.MozOpacity != 'undefined') object.style.MozOpacity=opacity/100;
    else if(typeof object.style.khtmlOpacity != 'undefined') object.style.khtmlOpacity = opacity/100;
    else object.style.opacity = opacity/100;
}

function rollTheScroll(force,numero,is){
	var willBe=arguments[3];
	var speed=arguments[4];
	var delay=arguments[5];
	var delayNow=delay;
	var rand=Math.round( Math.random() * ( Totals[numero]-1 ) + 1 );
	while(rand==is){
		rand=Math.round( Math.random() * ( Totals[numero]-1 ) + 1 );
	}
	if(force==true){delayNow=0;}
	if(Randoms[numero]==true){willBe=rand;}
	if(willBe==null){willBe=is+1;}
	if(speed==null){speed=defSpeed;}
	if(delay==null){delay=defDelay;}

	var tid = setTimeout("changeScroller(" + numero + "," + is + "," + willBe + "," + speed + ")", delayNow);
    if(autoplay[numero]){tids[numero].push(tid);}
	if(Randoms[numero]==true){
		is=willBe;
	} else {
    	if(is+1 > Totals[numero]){is = 1;} else {is++;}
	}
    if(willBe+1 > Totals[numero]){willBe = 1;} else {willBe++;}
    if(autoplay[numero]){
        var tid = setTimeout("rollTheScroll(" + false + "," + numero + "," + is + "," + willBe + "," + speed + "," + delay + ")", delay);
        tids[numero].push(tid);
    }
}

function changeAndResetTimer(numero,is,willBe){
	var speed=arguments[3];
	var delay=arguments[4];
	if(is==null){is=Iss[numero];}
	if(speed==null){speed=Speeds[numero];}
	if(delay==null){delay=Delays[numero];}

//	startOrStopScroll(false,numero,is,speed,delay);
//	autoplay[numero] = true;
    changeScroller(numero,is,willBe,speed);
//	autoplay[numero] = false;
//	startOrStopScroll(false,numero,willBe,speed,delay);

	Iss[numero]=willBe;
}

function DefSwap(nombre,total){
	var is=arguments[2];
	var willBe=arguments[3];
	var speed=arguments[4];
	var delay=arguments[5];
	var shuffle=arguments[6];
	if(is==null){is=1;}
	StoreInfo(nombre,total,is,willBe,speed,delay,shuffle,false);
}

function StartSwap(nombre,total){
	var is=arguments[2];
	var willBe=arguments[3];
	var speed=arguments[4];
	var delay=arguments[5];
	var shuffle=arguments[6];
	if(is==null){is=1;}
	StoreInfo(nombre,total,is,willBe,speed,delay,shuffle,true);
	var position = Nombres.length-1;
	var force=false;
	rollTheScroll(force,position,Iss[position],WillBes[position],Speeds[position],Delays[position]);
}

function ChangeSwap(nombre,is,willBe){
	var speed=arguments[3];
	var delay=arguments[4];
	var temp=checkName(nombre);
	if(temp==null){return temp;}
	changeAndResetTimer(temp,is,willBe);
}

function PauseSwap(nombre,is){
	var willBe=arguments[2];
	var speed=arguments[3];
	var delay=arguments[4];
	var temp=checkName(nombre);
	if(temp==null){return temp;}
	Iss[temp]=is;
	startOrStopScroll(true,temp,Iss[temp],Speeds[temp],Delays[temp]);
}

