// JavaScript Document

/*
	Archivo que contiene las funciones para el efecto de transición.
	Elaborado por Guillermo Cruz Delfín.
	18 de Junio de 2007.
*/

/*
	Varaibles globales.
*/

//Objeto para el comportamiento AJAX, en este caso nos sirve para leer los enlaces
//guardados en un archivo XML.
//var ax = iniObj();
//Arreglos para almacenar los enlaces.
var arr_penl = new Array();		//Promociones
var arr_venl = new Array();		//Vida saludable
var arr_menl = new Array();		//Productos
var arr_renl = new Array();		//Recetas
var arr_nenl = new Array();		//Noticias

/*
	Función para la creación e inicialización del objeto XMLHttpRequest.
*/
function iniObj()
{
	//Variables para el objeto AJAX.
	var oajax = false;

	try 
	{
       oajax = new XMLHttpRequest();
 	} 
	catch (trymicrosoft) 
	{
       try 
	   {
        	oajax = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (othermicrosoft) 
		{
       		try
			{
             	oajax = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (failed)
			{
             	oajax = false;
			}
		}
 	}

	 if (!oajax)
	 {
       alert("¡¡ERROR AL INICIALIZAR EL OBJETO, SU NAVEGADOR NO ESTÁ SOPORTADO!!");
	 }
	 
	 //Regresar el objeto AJAX.
	 return oajax;
}

/*
	Función que se encarga de extraer de un archivo XML el conjunto de enlaces para
	los baneres de la página principal.
	Los parámetros que recibe son:
		- ruta: ruta del archivo XML que contiene los enlaces.
		- scc: sección de baneres a la que pertenece.
	Código modificado a partir del encontrado en: http://www.programacionweb.net/articulos/articulo/?num=376
*/
function iniEnl(ruta,scc)
{
	var ax = iniObj();
	this.ruta = ruta;
	this.inicia = function()
	{
		window.status = 'Iniciando enlaces...';
		ax.open('get', this.ruta);
		ax.onreadystatechange = function(){
			if (ax.readyState == 4) 
			{
				//Esta sección se código sirve para corregir el bug del IE
				//que devuelve un valor null si se utiliza responseXML.documentElement.
				//Basado en el código de KC-Luck, http://codingforums.com/archive/index.php?t-79228.html.
				var xml = ax.responseXML;
				if (!xml.documentElement && ax.responseStream) 
				{
					xml.load(ax.responseStream);
				}
				else
				{
					xml = xml.documentElement;
				}
				for (i = 0; i < xml.getElementsByTagName('enlace').length; i++)
				{
					var item = xml.getElementsByTagName('enlace')[i];
					var txt = item.getElementsByTagName('url')[0].firstChild.data;
					//Guardar los elementos en el arreglo destino, en función de la sección.
					switch(scc)
					{
						case 'promo':
						  arr_penl.push(txt);
						  break    
						case 'salu':
						  arr_venl.push(txt);
						  break
						 case 'rece':
						  arr_renl.push(txt);
						  break
						 case 'prod':
						  arr_menl.push(txt);
						  break
						 case 'noti':
						  arr_nenl.push(txt);
						  break
					}
				}
			}
		}
		ax.send(''); 
	}
}

/*
	Función que se encarga de realizar la función de transición entre imágenes.
	Fue modificado de su versión original para agregar la rotación de los enlaces,
	además de realizar la rotación de imágenes en forma aleatoria.
	Script orignal extraido de:
*/
function Animacion(base,max,pref,pimg,penl,scc,ret){
        this.base = base;
        this.cont = 1;
        this.img1 = true;
		this.enl1 = true;
        this.maximo = max;
		this.pre = pref;
		this.pimg = pimg;
		this.penl = penl;
		this.temp = ret * 1000;
		this.tran = this.temp / 2;
        this.inicia = function(){              
                (
				 	function(){
					//Se incrementa el contador
                    //this.cont++;
					this.cont = Math.round(Math.random()*this.maximo);
                    //al llegar al maximo la animacion se inicia
                    if(this.cont > this.maximo || this.cont==0)
                    	this.cont = 1;
                    //var im = 'img1';
					//var en = 'enl1';
					var im = this.pimg + '1';
					var en = this.penl + '1';
					var prefix = 0;
					//var prefix = this.cont+'.jpg';
					if(this.cont<10)
					{
						//prefix = '0'+this.cont+'.jpg';
						prefix = this.pre + '0' + this.cont + '.jpg';
					}
					else
					{
						prefix = this.pre + this.cont + '.jpg';
					}
					if(this.img1 && this.enl1)
					{
						this.img1 = false;
						this.enl1 = false;
						//im = 'img2';
						//en = 'enl2';
						im = this.pimg + '2';
						en = this.penl + '2';
					}
					else
					{
						this.img1 = true;
						this.enl1 = true;
					}
                        //se asigna la nueva imagen a la capa que no se esta viendo
                        $(im).style.backgroundImage = 'url(' + this.base + '/' + prefix + ')';
						//$(en).href = this.aenl[this.cont];
						//Seleccionar la ubicación de los enlaces en función de la sección de
						//baneres utilizada.
						switch(scc)
						{
							case 'promo':
							  $(en).href = arr_penl[this.cont-1];
							  break    
							case 'salu':
							  $(en).href = arr_venl[this.cont-1];
							  break
							 case 'rece':
							  $(en).href = arr_renl[this.cont-1];
							  break
							 case 'prod':
							  $(en).href = arr_menl[this.cont-1];
							  break
							 case 'noti':
							  $(en).href = arr_nenl[this.cont-1];
							  break
						}
						//window.status = 'url(' + this.base + '/' + prefix + ')';
						//window.status = $(en).href;
						//window.status = "Url fondo:" + $(im).style.backgroundImage;
                        //se desaparece la capa con la nueva imagen
                        new Fx.Style(im, 'opacity').set(0);
                       
                        //esta funcion espera un segundo antes de ahcer la transición
                        (function(){
                                //crea el efecto para las dos capas
                                //var x = new Fx.Style('img1', 'opacity');
                                //var y = new Fx.Style('img2', 'opacity');
								var x = new Fx.Style(this.pimg+'1', 'opacity');
                                var y = new Fx.Style(this.pimg+'2', 'opacity');
                                //aparece y desaparece las capas
                                if(this.img1){
                                        x.start(0,1);
                                        y.start(1,0);
                                }else{
                                        x.start(1,0);
                                        y.start(0,1);
                                }
                               
                         }
                        //).delay(2000,this);
						).delay(this.tran,this);
                 }
                //Este es el temporizador, se ejecutará cada tres segundos
                //).periodical(4000,this);
				).periodical(this.temp,this);
        }
}