var historia;
var paginaInicial;
var secuencia;
var inicializado = false;

function bigban(pagina) {
	secuencia = new Secuencia(configuracion.imagenesInicio);
	historia = new Historia();

	paginaInicial = pagina;

	inicializarGraficos(null, function() {
		if (!inicializado) {
			DynarchMenu.setup('menuList', { electric: true, shadows: null });
			ocultarLoader();
			cargarPag(pagina);
			inicializado = true;
		}
	});
}

function cargarPag(pagina, img) {
	dojo.byId(configuracion.idContenedor).innerHTML = "";
	mostrarLoader();
	var ts = new Date();
	dojo.xhrGet({
		url: "articulo.php?redireccionar=false&ts=" + ts.getTime() + "&nombre=" + pagina  ,
		handle: recibirPagina,
    handleAs: "text",
		contenedor: dojo.byId(configuracion.idContenedor),
		fondo: dojo.byId(configuracion.idFondo),
		imagen: img,
		seccion: pagina,

		error: manejarError
	});
}

function cambiarImagenInicio() {
    cargarPag(paginaInicial, secuencia.siguiente())
}

function volver () {
    var p = historia.volver();
    if (p) cargarPag(p);
}

function recibirPagina(data, ioArgs) {
	dojo.require("dojo.io.script");

	var a = ioArgs.args;
	historia.avanzar(a.seccion);

	a.contenedor.innerHTML = "";
	ocultarLoader();

	dojo.fadeOut({
		node: a.fondo,
		duration: configuracion.tiempoDifuminado,
		onEnd: function() {
			var i = a.imagen ? a.imagen : imagenPara(a.seccion);
			a.fondo.style.background = "url('" + i + "')";
			dojo.fadeIn({
				node: a.fondo,
				duration: configuracion.tiempoDifuminado,
				onEnd: function() {
		            a.contenedor.innerHTML = data;
		
		            var scripts = a.contenedor.getElementsByTagName("script")
		            document.s = scripts;
		            if (scripts.length > 0) {
		                for (var s = 0; s < scripts.length; s++) {
		                	if (scripts[s].innerHTML) {
		                        runScript("head", scripts[s].innerHTML)
		                  	}
		                  	
		                    if (scripts[s] && scripts[s].getAttribute("src") != null) {
		                   		dojo.io.script.attach("script" + s, scripts[s].getAttribute("src"), document)
		                	}

		                	/*
		                    if (scripts[s].childNodes && scripts[s].childNodes.length > 0) {
			                    alert("ejecutando: " + scripts[s].childNodes[0].data)
		                        runScript("head", scripts[s].childNodes[0].data)
		                    } else if (scripts[s] && scripts[s].getAttribute("src") != null) {
		                   		dojo.io.script.attach("script" + s, scripts[s].getAttribute("src"), document)
		                  	}
		                  	*/
		                }
		            }
				}
			}).play();
		}
	}).play();
}

function runScript(location, script) {
    if (window.execScript) {
        window.execScript(script)
    } else {
        var element = document.createElement('script');
        element.setAttribute("type", "text/javascript");
        element.innerHTML = script;
        document.getElementsByTagName(location).item(0).appendChild(element);
    }
}

function manejarError(data, ioArgs) {
	alert('Error when retrieving data from the server!');
}

/* reveer */
var imagenesPrecargadas = new Array();

// inicializacion
function inicializarGraficos(funcionAvance, funcionFin) {
	dojo.require("dojox.timing._base");
	
	var totalImagenes = 0;
	var imagenesCargadas = 0;
	var timer = new dojox.timing.Timer(1000);
	var reintentos = 0;
	var maximosReintentos = 10; /* 20 * 1500ms = 30 segundos */
	
	timer.onTick = function() {
		if (imagenesCargadas == totalImagenes || reintentos++ == maximosReintentos) {
			timer.stop();
			if (funcionFin) {
           		funcionFin()
          	}
		}
	}

	timer.start();
	
    for (k in configuracion.imagenes) totalImagenes++;

    for (k in configuracion.imagenes) {
        imagenesPrecargadas[k] = new Image();
        imagenesPrecargadas[k].src = configuracion.imagenes[k];
        imagenesPrecargadas[k].onload = function () {
            imagenesCargadas += 1;
            if (funcionAvance) funcionAvance(imagenesCargadas / totalImagenes);
        };
    }

}

function imagenPara(seccion) {
    return imagenesPrecargadas[seccion].src;
}

function Historia () {
	var pagHist = Array();
	var indiceImagen = 0;

	this.avanzar = function (url) {
		pagHist.push(url);
	}

	this.volver = function () {
	    var p = pagHist.pop();
	    return pagHist.pop();
	}
}

function Secuencia (lista) {
	var indice = 0;
	this.siguiente = function () {
	    if (lista[indice+1]) {
	        indice += 1;
	    } else {
	        indice = 0;
	    }
	    return lista[indice];
    }
}

function mostrarLoader() {
    document.getElementById(configuracion.idLoader).setAttribute("class", "loader");
    document.getElementById(configuracion.idLoader).setAttribute("className", "loader");
    document.getElementById(configuracion.idPrincipal).style.visibility = "visible";
}

function ocultarLoader() {
    document.getElementById(configuracion.idLoader).setAttribute("class", "loader loader_oculto");
    document.getElementById(configuracion.idLoader).setAttribute("className", "loader loader_oculto");
}
