/*
 * Libreria para el control de la galeria FotoShow de Diario P�blico
 * 
 * autor: Fco. Javier Ant�nez Ruiz, fjantunez@isotrol.com
 * */
function galeriaFS () 
{
		
}
var objGaleriaFS = new galeriaFS();
/* Funci�n para ampliar las im�genes de la fotogaler�a. Recibe un par�metro, ident, que es el identificador 
 * de la imagen que se quiere ampliar. Esta funci�n tambi�n cambia los textos asociados a cada imagen.
 * */
 
 
 
galeriaFS.prototype.ampliaImagen = function (ident) 
{
	var alturaFija = 465; 
	var numeroNuevo = ident.substring (1, ident.length);
	var id_capa = ident + '_1';
	var imagen = document.getElementById(ident);
	var capa = document.getElementById(id_capa);
	var grande = document.getElementById('g0');
	var idImagenActual = 0;

	/*capturo el id de la imagen grande cuando entro*/
	/*var idZoomImagenActual = grande.childNodes[1].getAttribute('id');*/
	var t= grande.getElementsByTagName('img');
	var idZoomImagenActual= t[0].id;
	
	/*obtengo el id de la imagen en pequeno    */
	var idImagenActual = idZoomImagenActual.substring(1, idZoomImagenActual.length);
	/*oculto el comentario asociado a la imagen en grande actual*/
	document.getElementById('p' + idImagenActual).style.display = 'none';
	/*cargamos la imagen nueva*/
	grande.getElementsByTagName('img').item(0).setAttribute ('width', eval("imgZoom_" + numeroNuevo).getAttribute('width'));
	grande.getElementsByTagName('img').item(0).setAttribute ('src', eval("imgZoom_" + numeroNuevo).getAttribute('src'));

	if(eval("imgZoom_" + numeroNuevo).getAttribute('height') != "undefined")
	{
		grande.getElementsByTagName('img').item(0).setAttribute ('height', eval("imgZoom_" + numeroNuevo).getAttribute('height'));
	}
	else
	{
		grande.getElementsByTagName('img').item(0).setAttribute ('height', alturaFija);
	}
	grande.getElementsByTagName('img').item(0).setAttribute ('alt', imagen.getAttribute('alt'));
	grande.getElementsByTagName('img').item(0).setAttribute ('title', imagen.getAttribute('title'));
	grande.getElementsByTagName('img').item(0).setAttribute ('id', 'z' + imagen.getAttribute('id').substring(1, imagen.getAttribute('id').length));
	
	 
	 /*grande.getElementsByTagName('img').item(0).onclick = function () {
		objGaleriaFS.pasaSiguienteFS(null);
	}*/	
	document.getElementById('internaImagenZoom').style.margin = '0 0 0 0;';
	objGaleriaFS.centrado();
		

	/*mostramos el comentario*/
	if(document.getElementById('p' + numeroNuevo) != null)
	{
		document.getElementById('p' + numeroNuevo).removeAttribute('style');
	}
	var barra = document.getElementById('imagenAcutalGaleria');
	if (barra) {
		barra.parentNode.removeChild(barra);
	}
	barra = document.createElement('div');
	barra.setAttribute ('id', 'imagenAcutalGaleria');
	
	barra.className = 'imagenGFSActual';
	capa.appendChild(barra);
}


/*
 * Funci�n que realiza el cambio autom�tico de la imagen en grande de la fotogaleria a la siguiente imagen del
 * listado de im�genes. Recibe dos par�metros:
 * el primero, urlPagSiguiente, es la url de la p�gina siguiente si es que existe.
 * 
 */
 
galeriaFS.prototype.pasaSiguienteFS = function () 
{
	var urlPagSiguiente = document.getElementById("capa_urlPagSiguiente").innerHTML.replace("&amp;", "&");
	var grande = document.getElementById('g0'); // Imagen Grande
	var actual = grande.getElementsByTagName('img').item(0).getAttribute('id'); // ID de la imagen actual
	var idActual = actual.substring(1, actual.length); // ID num�rico de la imagen actual
	
	var capaImagenes = document.getElementById('galeriaFS'); // DIV que contiene las imágenes miniatura
	var listaImagenes = capaImagenes.getElementsByTagName('img'); // Set con las im�genes en miniatura
	
	var numImagenes = listaImagenes.length; // Número de imágenes en miniatura
	var i = 0;
	var b = false;
	while( i < numImagenes && !b)
	{
		var idTratado = listaImagenes.item(i).getAttribute('id');
		idTratado = idTratado.substring(1, idTratado.length);
		
		if (idTratado == idActual)
		{
			b = true; // Hemos encontrado la imagen que hay ahora mismo cargada
		}
		else
		{
			i++;
		}
	}
	/* Si es la �ltima imagen de la página actual */
	if(b == true && i == (numImagenes - 1))
	{
		/*Si no hay pagina siguiente, es que la galeria sólo tiene una página, asi que tengo que cargar
		 * la primera imagen de esta galeria*/
/*		 if(urlPagSiguiente == null)*/
		 if(urlPagSiguiente == "")
		 {
		 	this.ampliaImagen(listaImagenes.item(0).getAttribute("id"));
		 	var interna = document.getElementById('internaImagenZoom');
		 	interna.style.margin = '0px;';		 	
		 	objGaleriaFS.centrado();
		 }
		 else
		 {
		 	this.actualizarPagGaleria(urlPagSiguiente);
		 }
	}
	/*como la búsqueda siempre tiene éxito, no hay más condiciones. Sólo hay que pasar al siguiente*/
	else
	{
		this.ampliaImagen(listaImagenes.item(i+1).getAttribute("id"));
		document.getElementById('internaImagenZoom').style.margin = '0 0 0 0;';
		objGaleriaFS.centrado();
	}
}


/* Función que realiza la votaci�n por estrelas de una galeria. Recibe como par�metros
 * idGaleria, que es el id de la galer�a sobre la que se est� realizando la votaci�n
 * idVotacion, el id del elemento ul que muestra la votaci�n por estrellas de esta galer�a
 * valorVoto, el voto que se hace sobre la galeria
 * url, la direcci�n a la que se envia la votaci�n
 * 
 * */
galeriaFS.prototype.votaGaleriaFS = function (idGaleria, idVotacion, valorVoto, url) {
	var altura = document.getElementById ("infoGaleriaFotoShow").offsetHeight;
	var anchura = document.getElementById ("infoGaleriaFotoShow").offsetWidth;
	var opaca = creaCapaOpaca(altura, anchura);
new Ajax.Request(url, {   
			parameters: '?idGaleria='+idGaleria+'&valorVoto='+valorVoto ,
			asynchronous: false,
			method: 'get',   
			onSuccess: function(respuesta) 
				{     
					objGaleriaFS.actualizaVotacionFS(idVotacion, valorVoto);	
					var cadena = respuesta.responseText;
					cadena = trim(cadena);
					var inicio = cadena.indexOf("<error>");
					var fin = cadena.indexOf("</error>");
					if (inicio != -1 && fin != -1)
					{						
						var padre = document.getElementById("infoGaleriaFotoShow");
						var mensaje = cadena.substring (inicio + 7 , fin);
						setTextoOpaca(opaca, mensaje)
						document.body.style.cursor = "default"; 				
						padre.appendChild(opaca);				
					}
					else 
					{				
						setTextoOpaca(opaca, cadena);
					}
				}, 
			onFailure: function(respuesta) 
				{     				
					objMensaje.creaMensaje(respuesta.responseText);
				}		
		});
}

/* Funci�n que actualiza la votaci�n por estrellas de una galeria. Recibe como parametros
 * idVotacion, el id del elemento ul que representa la votaci�n de esta galer�a concreta
 * */
galeriaFS.prototype.actualizaVotacionFS = function (idVotacion, valor) 
{
	var lista = document.getElementById(idVotacion);
	var	enlaces = lista.getElementsByTagName('a');
	
	/*reinicio todas la votaciones*/
	enlaces[0].className = 'one-star';
	enlaces[1].className = 'two-stars';
	enlaces[2].className = 'three-stars';
	enlaces[3].className = 'four-stars';
	enlaces[4].className = 'five-stars';
		
	/*establezco la nueva votacion*/
	var antigua = enlaces[valor - 1].className;
	enlaces[valor-1].className =  'current-rating ' + antigua;
	
	var val = valor; 
	if (valor == 1)
		val = "uno-";
	if (valor == 2)
		val = "dos-";
	if (valor == 3)
		val = "tres-";
	if (valor == 4)
		val = "cuatro-";			
	if (valor == 5)
		val = "cinco-";	
	var estrella = val + 'star';
	
	document.getElementById(estrella).style.display = 'block';

}


/* Función que actualiza los thumbnails que hay en cada página de la galeria
 * cuando se cambia de página. Realiza la precarga de las nuevas imágenes.
 * Recibe dos parámetros
 * url, la url a la que se realiza la petición ajax de las nuevas imagenes
 * param, los parámetros de la petición
 * */
galeriaFS.prototype.actualizarPagGaleria = function (url, param) 
{
	/* guardo la información que se pierde en la recarga */
	var titular = document.getElementById('h1FotoShow').innerHTML;
	var numComentariosTop = document.getElementById('numComentariosTop').innerHTML;	
	/* veo si se ha votado ya */
	var idVotado ='';
	
	/*capturo el contenedor a recargar*/
	var contenedor = document.getElementById('infoGaleriaFotoShow');
	var listaMiniaturas = document.getElementById('galeriaFS');
	var salida;
	var enlaceAnterior =  document.getElementById('pagAnteriorGal');
	var enlaceSiguiente =  document.getElementById('pagSiguienteGal');
	
	/*realizo la peticion*/
	new Ajax.Request(url, {   
			parameters: param ,
			asynchronous: false,
			method: 'get',   
			onSuccess: function(respuesta) 
				{     										
					var capaFalsa = document.createElement("div");
					capaFalsa.className = 'oculto';				
					capaFalsa.innerHTML = respuesta.responseText;
					var nodo = capaFalsa.firstChild;
					
					/*colocamos la minigaleria*/
					var aux = objGaleriaFS.parseador("galeriaFS", nodo);
					document.getElementById("galeriaFS").innerHTML = aux;
					
					
					/* colocamos la paginacion*/
					aux = objGaleriaFS.parseador("paginacionFS", nodo);
					document.getElementById("paginacionFS").innerHTML = aux;					
					objGaleriaFS.actualizaEnlaces();
					
					
					
					
					
					/*precarga*/
					aux = objGaleriaFS.parseador("bloqJSprecarga", nodo);
					document.getElementById("bloqJSprecarga").innerHTML = aux;
									
					aux = objGaleriaFS.parseador("bloqTextoRelImagenZoom", nodo);				
					document.getElementById("bloqTextoRelImagenZoom").innerHTML = aux;

					aux = objGaleriaFS.parseador("capa_urlPagSiguiente", nodo);						
					document.getElementById("capa_urlPagSiguiente").innerHTML = aux;
					
				}, 
			onFailure: function(respuesta) 
				{     				
					//alert('error al refrecar la galeria');
				},
			onComplete: function ()			
			    {			    		
			    		var cadena = salida;		    		
			    		/*var ini = cadena.indexOf('<script type="text/javascript">');
			    		var fin = cadena.indexOf('</script>');
			    		var cuerpoFunc = cadena.subString(ini, fin);
			    		var funcTempo =  document.createElement('script');
			    		funcTempo.innerHTML = cuerpoFunc;*/
			    		
			    		var titular2 = document.getElementById('h1FotoShow');
			    		titular2.innerHTML = titular;
						var numComentariosTop2 = document.getElementById('numComentariosTop');
						numComentariosTop2.innerHTML = numComentariosTop;
						if(idVotado != '')
						{
							var votado2 = document.getElementById(idVotado);
							votado2.style.display = 'block';
						}	
						document.getElementById('internaImagenZoom').style.margin = '0 0 0 0;';			
						objGaleriaFS.ampliarPrimera();
						objGaleriaFS.actualizaEnlaces()
			    }
		});
}

/*	Función que parsea una respuesta del servidor y devuelve el nodo cuyo id se pasa. La respuesta del servidor va en el nodo
 * */

galeriaFS.prototype.parseador = function (idBuscado, nodo)
{
	var resultado = null;
	var nodoAux = nodo;

	while (nodoAux) 
	{
		if (nodoAux.tagName && nodoAux.getAttribute("id") == idBuscado) 
		{
			 break; 
		}
		nodoAux = nodoAux.nextSibling;
	}
	if (nodoAux.tagName && nodoAux.getAttribute("id") == idBuscado) 
	{
		resultado = nodoAux;
	} 
	else 
	{
		resultado = null;
	}	
	
	if(resultado != null)
	{
		resultado = resultado.innerHTML;
	}
	return resultado;
}



/* Función que actualiza los enlaces superiores del carrusel de imagenes. 
 * */
galeriaFS.prototype.actualizaEnlaces = function () 
{
	var bloqPaginacion = document.getElementById("paginacionFS");
	var listaEnlaces = bloqPaginacion.getElementsByTagName("a");
	var enlaceAnterior1 = document.getElementById("pagAnteriorGal");
	var enlaceSiguiente1 = document.getElementById("pagSiguienteGal");
	var longLista = listaEnlaces.length;
	
	
	var urlEnlaceAnterior2 = listaEnlaces.item(0).getAttribute("onclick");	
	
	
	var urlEnlaceSiguiente2 = listaEnlaces.item(longLista - 1).getAttribute("onclick");

	enlaceAnterior1.setAttribute('onclick', urlEnlaceAnterior2);
	enlaceSiguiente1.setAttribute('onclick',urlEnlaceSiguiente2);
}


/* Función que amplia la primera imagen de la galeria lateral cuando se ha hecho un cambio de página
 * */
galeriaFS.prototype.ampliarPrimera = function () 
{
	
	var galeria = document.getElementById('galeriaFS');
	var imagenes = galeria.getElementsByTagName('img');
	objGaleriaFS.funcPrecarga();
	var imagen = imagenes[0];
	var ident = imagen.getAttribute('id');
	var numeroNuevo = ident.substring (1, ident.length);
	var t= eval("imgZoom_" + numeroNuevo).getAttribute('src');
	var grande = document.getElementById('g0');
	
	grande.getElementsByTagName('img').item(0).setAttribute ('width', eval("imgZoom_" + numeroNuevo).getAttribute('width'));
	grande.getElementsByTagName('img').item(0).setAttribute ('src', eval("imgZoom_" + numeroNuevo).getAttribute('src'));
	if(eval("imgZoom_" + numeroNuevo).getAttribute('height') != "undefined")
	{
		grande.getElementsByTagName('img').item(0).setAttribute ('height', eval("imgZoom_" + numeroNuevo).getAttribute('height'));
	}
	else
	{
		grande.getElementsByTagName('img').item(0).setAttribute ('height', alturaFija);
	}
	grande.getElementsByTagName('img').item(0).setAttribute ('alt', imagen.getAttribute('alt'));
	grande.getElementsByTagName('img').item(0).setAttribute ('title', imagen.getAttribute('title'));
	grande.getElementsByTagName('img').item(0).setAttribute ('id', 'z' + imagen.getAttribute('id').substring(1, imagen.getAttribute('id').length));
	/*grande.getElementsByTagName('img').item(0).onclick = function () {
		objGaleriaFS.pasaSiguienteFS(null);
	}*/
	document.getElementById('internaImagenZoom').style.margin = '0 0 0 0;';
	objGaleriaFS.centrado();

	
}


galeriaFS.prototype.centrado = function () 
{
	var alturaFija = 465; 
	
	var interna = document.getElementById('internaImagenZoom');
	var imagen = interna.getElementsByTagName('img');


	var idG0 = imagen[0].id;
	var numeroNuevo = idG0.substring (1, idG0.length);
	var alturaImagen = eval("imgZoom_" + numeroNuevo).getAttribute('height');
	if(alturaImagen == 'undefined' || alturaImagen == null)
	{
		alturaImagen = alturaFija;
	}
	/*
	try{
		alturaImagen = imagen[0].height;
	}
	catch(e)
	{
		alturaImagen = alturaFija;
	}*/
	var espacioNecesario = Math.floor((alturaFija - alturaImagen) /2 );
	interna.style.margin = espacioNecesario +"px 0 0 0;";
}


galeriaFS.prototype.funcPrecarga = function () 
{
	var t = document.getElementById('scriptPrecarga').innerHTML;
	var texto = t.replace(/\n/gi, "");
	eval(texto);
	var padre = document.getElementById('scriptPrecarga').parentNode;
	padre.removeChild(document.getElementById('scriptPrecarga'));
}



/*Funci�n que realiza el efecto asociado al over del tooltip en la lista de galerias. Recibe dos parametros
 *  id: id del enlace
* texto: el texto que saldr� en el tooltip
*/
galeriaFS.prototype.tooltipOver = function (id, texto) {
	var enlace = document.getElementById(id);
	
	var padre = enlace.parentNode;
	
	var capa = document.createElement('div');
	capa.className = 'capaTooltip tooltip_FS';
	capa.id = 'capaTooltip';
	
	var zonaTexto = document.createElement('div');
	zonaTexto.innerHTML = texto;
	
	capa.appendChild(zonaTexto);
	padre.appendChild(capa);
}

/*Funci�n que realiza el efecto asociado al out del tooltip en la lista de galerias. Recibe un par�metro
 * id : id del enlace
*/
galeriaFS.prototype.tooltipOut = function (id) {
		var tooltip = document.getElementById('capaTooltip');
		if(tooltip)
		{
			var padre = tooltip.parentNode;	
			padre.removeChild(tooltip);
		}
}





/************************************************* LISTADO DE GALERIAS ********************************************/



function listaGalerias () 
{
		
}
var objListaGalerias = new listaGalerias();

/*Funci�n que realiza el efecto asociado al over de capa galeria en la lista de galerias. Recibe un parametro
* idCapa : el id de la capa de transparencia asociada a la galeria
*/
listaGalerias.prototype.efectoOver = function (idCapa) {
	var imagen = document.getElementById(idCapa + '_img');
/*	imagen.style.zIndex = 3;*/
	var capa = document.getElementById(idCapa);
	capa.className = 'contenedorElemLG sinOpacidadLG';
}


/*Funci�n que realiza el efecto asociado al out de capa galeria en la lista de galerias. Recibe un parametro
* idCapa : el id de la capa de transparencia asociada a la galeria
*/
listaGalerias.prototype.efectoOut = function (idCapa) {
	var capa = document.getElementById(idCapa);
	capa.className = 'contenedorElemLG opacidadLG';
	var imagen = document.getElementById(idCapa + '_img');
	/*imagen.style.zIndex = 0;*/
}

/*Funci�n que realiza el efecto asociado al over del tooltip en la lista de galerias. Recibe dos parametro
* idImg : el id de la capa que contiene a la imagen asociada
* texto: el texto que saldr� en el tooltip
*/
listaGalerias.prototype.tooltipOver = function (idImg, texto) {
	var padre = document.getElementById(idImg + '_tooltip');
	
	var capa = document.createElement('div');
	capa.className = 'capaTooltip tooltip_LFS';
	capa.id = 'capaTooltip';
	
	var zonaTexto = document.createElement('div');
	zonaTexto.innerHTML = texto;
	
	capa.appendChild(zonaTexto);
	padre.appendChild(capa);
}

/*Funci�n que realiza el efecto asociado al out del tooltip en la lista de galerias. Recibe un parametro
* idImg : el id de la capa que contiene a la imagen asociada
*/
listaGalerias.prototype.tooltipOut = function (idImg) {
		var capa = document.getElementById('capaTooltip');
		if(capa)
		{
			var padre = capa.parentNode;
			padre.removeChild(capa);
		}
}


/* Funci�n que actualiza los thumbnails que hay en cada p�gina del listado
 * de galerias cuando se cambia de p�gina.
 * Recibe cuatro par�metros
 * url, la url a la que se realiza la petici�n ajax de la nueva p�gina
 * param, los par�metros de la petici�n
 * resetSelect, booleano que nos dice si debemos resetear el campo select o no
 * */
listaGalerias.prototype.actualizarPag = function (url, param, obj, resetSelect) 
{
	
	/*capturo el contenedor a recargar*/
	var contenedor = document.getElementById('contenedorLG');
	var salida;

	/*realizo la peticion*/
	new Ajax.Request(url, {   
			parameters: param ,
			asynchronous: false,
			method: 'get',   
			onSuccess: function(respuesta) 
				{    
					var aMenus = obj.parentNode.parentNode.getElementsByTagName("a");
					for (var i=0; i<aMenus.length; i++)
					{
						aMenus[i].className = "";
					}
					obj.className = "actual";		
					contenedor.innerHTML = respuesta.responseText;				
					salida = respuesta.responseText;
					if (resetSelect)
						document.getElementById("selectSeccionLG").value = ""; // Reseteamos el select
				}, 
			onFailure: function(respuesta) 
				{     				
				},
			onComplete: function ()			
			    {
			    }
		});
}

