// 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 función sin lanzar el swap al inicio.

			StartSwap(nombre,total[,is,willBe,speed,delay,random]): Define y lanza la función de swap.

			ChangeSwap(nombre,is,willBe): Cambia de un <div> a otro.

			PauseSwap(nombre,is): Detienen o reanuda la función.

	

			nombre representa el nombre o el id de la sección a alternar.

			Los ids de los <div> deben ser nombre1, nombre2, ...

			Al llamar la función el número no se debe especificar, solamente el nombre.

			

			total representa el número total de <div> a alternar.

			

			is representa el número del <div> activo.

			

			willBe representa el número del <div> al que se desea cambiar.

			

			speed representa la velocidad con la que hace el fade, 0 es instantaneo, entre más grande, más lento.

			El valor predeterminado es 10.

			

			delay es el tiempo de espera entre cada transición 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 función en los <div id="SwapDiv1">

	

		DefSwap('SwapDiv',6,1,null,8,6000,true): Define la función para los <div> de id

		SwapDiv1, SwapDiv2, ..., SwapDiv6. Empieza en SwapDiv1, la velociadad es 8 y el

		delay es 6000. La función se ejecutará desordenada cuando sea activada.

		

		ChangeSwap('SwapDiv',2,3): Pasa al siguiente <div> mientras está en el 2.

		

		PauseSwap('SwapDiv',3): Pausa la función en el tercer <div>.

		

	IMPORTANTE:	StartSwap o DefSwap se debe llamar para cada sección en un script en el <body> o en algún 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 máxima 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]);

}
