/* Funciones de JavaScript */

// cfDirImg contiene el directorio de las imágenes.
var miMail = "granalacant@gmail.com";

// Variable para el diccionario
var filInput = -1;

// Variables para el callejero
var posicion=0;
var ocupados = new Array(1,2,3,4,7,8,9,10,11,12,13,14,15,20,21,22,23,24,25,33,34,35,36,47,48,60,73,77,78,79,80,81,82,83,84,85,89,90,91,92,93,94,95,96);

function js_EnviarCorreo( id, asunto )
{
	/* Envía un correo a la dirección por omisión:
	   - id			Identificador del enlace
	   - asunto		Asunto del correo
	   = Abre el cliente de correo.
	*/

	var oMail;
	var retorno = false;

	if ( id )
	{
		if ( !asunto ) asunto = "Sin asunto";
		oMail = document.getElementById( id );
		oMail.setAttribute("href","mailto:" + miMail + "?subject=" + asunto);
	}
	return retorno;
}

function js_EnviarCorreos( id, num, asunto )
{
	/* Envía un correo a la dirección por omisión:
	   - id			Número Identificador del enlace
	   - asunto		Asunto del correo
	   = Abre el cliente de correo.
	*/

	var iMail;
	var oMail;
	var retorno = false;

	if ( !num ) num = 0;
	if ( id )
	{
		iMail = id + num;
		if ( !asunto ) asunto = "Sin asunto";
		oMail = document.getElementById( iMail );
		oMail.setAttribute("href","mailto:" + aMail1[num] + "@" + aMail2[num] + "?subject=" + asunto);
	}
	return retorno;
}

// Refresca la página actual
function Refrescar(a)
{
	/* Parámetros:
	   a... Valor que se quiere dar a la variable "accion"
	*/
	document.formulario.accion.value = a;
	document.formulario.action = window.location.href;
	document.formulario.submit();
	return true;
}

function js_Confirmar( a, msg )
{
	/* Parámetros:
	   a... Valor que se quiere dar a la variable "accion"
	   msg. Mensaje que se mostrará para la confirmación
	*/

	if ( confirm(msg) ) Refrescar(a);
}

// Envía la página a un destino determinado
function Destino(d)
{
	document.formulario.action = d;
	document.formulario.submit();
	return true;
}

function js_EnviarDatos( ncod, vcod, frm, des )
{
	/* Envía un formulario con los datos pasados:
	   - ncod		Array con los Nombres de los códigos
	   - vcod		Array con los Valores de los código
	   - frm		Formulario a enviar
	   - des		Página de destino
	   = No devuelve nada.
	*/

	var i = 0;

	if ( typeof ncod == "string" )
	{
		eval( 'document.' + frm + '.' + ncod + '.value = "' + vcod + '"' );
	}
	else
	{
		for (i = 0; i < ncod.length; i++)
		{
			eval( 'document.' + frm + '.' + ncod[i] + '.value = "' + vcod[i] + '"' );
		}
	}
	eval( 'document.' + frm + '.action="' + des + '"' );
	eval( 'document.' + frm + '.submit()' );
}

function js_ComprobarIguales( val1, val2 )
{
	if ( val1 != val2 )
	{
		alert("Los valores no son iguales");
		return false;
	}
	return true;
}

function js_ComprobarDatos( ncod, frm, foco, msg )
{
	/* Comprueba que los datos pasados tienen valor:
	   - ncod		Array con los Nombres de los códigos
	   - frm		Formulario a comprobar
	   - foco       Si es 1 en caso de fallo devuelve el foco al elemento
	   - msg        Mensaje a mostrar si falla algún elemento
	   = Devuelve true si todo es correcto o false en caso contrario.
	*/

	var i = 0;
	var v = "";
	var a = new Array();

	if ( !msg ) msg = "El elemento no puede estar vacío.";

	if ( typeof ncod == "string" )
	{
		a[0] = ncod;
	}
	else
	{
		a = ncod;
	}
	for ( i = 0; i < a.length; i++)
	{
		v = eval( 'document.' + frm + '.' + a[i] + '.value' );
		if ( !v )
		{
			alert( msg );
			if ( foco ) eval( 'document.' + frm + '.' + a[i] + '.focus()' );
			return false;
		}
	}
	return true;
}

function js_CopiarDatos( id1, id2, base )
{
	/* Copia los datos de un sitio a otro:
	   - id1 		Identificador del sitio de origen de los datos
	   - id2		Identificador del sitio de destino de los datos
	   - base		Copia toda la cadena (false) o solo el fichero base (true)
	   = Copia los datos del origen en el destino.
	*/

	var valor = document.getElementById(id1).innerHTML;

	if ( base )
	{
		var v1 = valor.split("/");
		valor = v1[v1.length-1];
	}
	document.getElementById(id2).value = valor;
}

// Muestra la noticia seleccionada
function fmostrarNoticia(c)
{
	document.formulario.codnot.value = c;
	document.formulario.submit();
}

// Abre un destino en una nueva ventana
function Ventana(d,s,w,h)
{
	/* Parámetros:
	   d... dirección de la nueva ventana
	   s... barras de desplazamiento (0 no, 1 sí)
	   w... ancho de la ventana
	   h... alto de la ventana
	*/
	window.open(d,"","toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=" + s + ",resizable=1,width=" + w + ",height=" + h + "");
}

// Borra el contenido de un objeto con identificador 'id'
function BorrarValor(id)
{
	var nodo = document.getElementById(id);
	nodo.setAttribute("value", "");
}

// Pone en mayúsculas el contenido de un objeto con identificador 'id'
function PonerMayusculas(id)
{
	var nodo = document.getElementById(id);
	var texto = nodo.value;
	texto = texto.toUpperCase();
	nodo.value = texto;
}

/*** FUNCIONES DEL FORO ***/

// Selecciona un tema del foro
function ElegirTema(c)
{
	document.formulario.codtema.value = c;
	Refrescar("ELEGIR");
}

// Comprueba que los datos de los temas son correctos antes de grabarlos
function ComprobarTema(a,m1,m2)
{
	if (!document.formulario.codusu.value)
	{
		// No se ha puesto ningún usuario
		alert(m1);
		document.formulario.codusu.focus();
	}
	else if (a == "GRABAR" && !document.formulario.titulo.value)
	{
		// Se va a grabar y no se ha puesto título del tema
		alert(m2);
		document.formulario.titulo.focus();
	}
	else
	{
		if ( document.formulario.bGrabar ) js_ocultar('bGrabar');

		Refrescar(a);
	}
}

// Muestra las respuestas siguientes o anteriores
function MostrarRespuestas(r,a)
{
	var r1 = parseInt(document.formulario.desde.value);
	if (a == 0)
		r1 = r1 + r;
	else
		r1 = r1 - r;
	document.formulario.desde.value = r1;
	Refrescar("ELEGIR");
}

// Ordena por fechas
function OrdenarFechas(o)
{
	document.formulario.orden.value = o;
	Refrescar("ELEGIR");
}

// Para ordenar la tabla de temas

	/* Lee los datos de una tabla y los ordena por la celda indicada y en el orden indicado */
	function ordenarDatos(nombre, celda, ordenDatos)
	{
		/* Parámetros
				 nombre... Nombre del conjunto de datos (tabla) a ordenar
				 celda.... Número de la celda por la que se va a ordenar
				 ordenarDatos... Orden de los datos: 0-Sin ordernar 1-Ascendente, 2-Descendente
		*/

		var tabla  = document.getElementById(nombre);  // Tabla a ordenar
		var filas  = tabla.getElementsByTagName("tr"); // Obtenemos las filas de la tabla
		var numfi  = filas.length;                     // Número de filas
		var tipoFecha = 0;							   // Normal (0), Inglesa (1)

		// Arrays donde se guardarán los datos de las celdas
		var imagen = new Array();	// Imagen
		var imaAlt = new Array();	// Alt de la imagen
		var descri = new Array();	// Descripción del tema
		var enlace = new Array();	// Enlace
		var fecha  = new Array();	// Fecha del tema
		var ultima = new Array();	// Fecha de la última respuesta
		var respu  = new Array();	// Número de respuestas
		var ordena = new Array();	// Array auxiliar para ordenar los datos

		var celdas;
		var aux;
		var i = 0;

		// Recorre las filas y guarda los datos en matrices
		for (i = 0; i < numfi; i++)
		{
			celdas = filas[i].getElementsByTagName("td");                              // Array de celdas
			imagen[i] = celdas[0].getElementsByTagName("img")[0].getAttribute("src");  // Imagen
			imaAlt[i] = celdas[0].getElementsByTagName("img")[0].getAttribute("alt");  // Alt de la imagen
			descri[i] = celdas[1].getElementsByTagName("a")[0].firstChild.nodeValue;   // Nombre del tema
			enlace[i] = celdas[1].getElementsByTagName("a")[0].getAttribute("href");   // Enlace del tema
			fecha[i]  = celdas[2].firstChild.nodeValue;                                // Fecha del tema
			ultima[i] = celdas[3].firstChild.nodeValue;                                // Fecha última respuesta
			respu[i]  = celdas[4].firstChild.nodeValue;                                // Número de respuestas

			if (ordenDatos > 0)
			{
				// Ordenamos por la celda seleccionada
				ordena[i] = new Array(2);

				switch (celda)
				{
					case 2: ordena[i][0] = cambiarFecha(fecha[i],tipoFecha); break;		// Fecha del tema
					case 3: ordena[i][0] = cambiarFecha(ultima[i],tipoFecha); break;	// Fecha última respuesta
					case 4: ordena[i][0] = diezDigitos(respu[i]); break;		        // Número de respuestas
					default: ordena[i][0] = descri[i]; 									// Nombre del tema
				}
				ordena[i][1] = i;
			}
		}

		if (ordenDatos > 0)
		{
			// Ordena los datos
			ordena.sort();

			// Orden descendente
			if (ordenDatos == 2)
			{
				ordena.reverse();
			}
		}

		// Reescribe las filas
		for (i = 0; i < numfi; i++)
		{
			// Obtenemos el índice del elemento
			if (ordenDatos > 0)
				aux = ordena[i][1];
			else
				aux = ordena[i][1];
			celdas = filas[i].getElementsByTagName("td"); 								// Obtenemos las celdas
			celdas[0].getElementsByTagName("img")[0].setAttribute("src", imagen[aux]);	// Imagen --> imagen
			celdas[0].getElementsByTagName("img")[0].setAttribute("alt", imaAlt[aux]);	// Imagen --> alt
			celdas[0].getElementsByTagName("a")[0].setAttribute("href", enlace[aux]);	// Imagen --> enlace
			celdas[0].getElementsByTagName("a")[0].setAttribute("title", imaAlt[aux]);  // Imagen --> title
			celdas[1].getElementsByTagName("a")[0].firstChild.nodeValue = descri[aux];  // Tema   --> descripción
			celdas[1].getElementsByTagName("a")[0].setAttribute("href", enlace[aux]);	// Tema   --> enlace
			celdas[2].firstChild.nodeValue = fecha[aux];                                // Fecha
			celdas[3].firstChild.nodeValue = ultima[aux];                                // Ultima
			celdas[4].firstChild.nodeValue = respu[aux];								// Respuestas
		}
	}

	/* Lee una fecha y la devuelve en formato AAAAMMDD */
	function cambiarFecha(fecha,tipo)
	{
		/* Parámetros:
				 fecha... Fecha que queremos transformar
				 tipo.... Indica si la fecha esta en formato normal DD-MM-AAAA (0), o inglés MM-DD-AAAA (1)
		*/

		var separador, p1, p2, p3;
		var nueva = "";

		// Separador de la fecha
		if (fecha.indexOf("-") != -1)
			separador = "-";
		else if (fecha.indexOf("/") != -1)
			separador = "/";
		else
			separador = "";

		// Separamos el día, mes y año
		if (separador)
		{
			p1 = fecha.substr(0,2);
			p2 = fecha.substr(3,2);
			p3 = fecha.substr(6);
		}
		else
		{
			p1 = fecha.substr(0,2);
			p2 = fecha.substr(2,2);
			p3 = fecha.substr(4);
		}

		// Reconstruimos según el tipo de fecha
		if (tipo)
			nueva = p3 + p1 + p2;	// inglesa
		else
			nueva = p3 + p2 + p1;	// normal

		return nueva;
	}

	// Dando un número lo convierte a diez dígitos con ceros delante
	function diezDigitos(num)
	{
		var res = "0000000000" + num;
		res = res.slice(res.length - 10);
		return res;
	}

	// Pone las imágenes de las flechas o del cuadrado
	function ponerFlechas(flecha)
	{
		document.formulario.a1.src = cfDirImg + "/objetos/orAb.gif";
		document.formulario.b1.src = cfDirImg + "/objetos/orAr.gif";
		document.formulario.a2.src = cfDirImg + "/objetos/orAb.gif";
		document.formulario.b2.src = cfDirImg + "/objetos/orAr.gif";
		document.formulario.a3.src = cfDirImg + "/objetos/orAb.gif";
		document.formulario.b3.src = cfDirImg + "/objetos/orAr.gif";
		document.formulario.a4.src = cfDirImg + "/objetos/orAb.gif";
		document.formulario.b4.src = cfDirImg + "/objetos/orAr.gif";
		switch (flecha)
		{
			case 1 : document.formulario.a1.src = cfDirImg + "/objetos/orNo.gif"; break;
			case 2 : document.formulario.b1.src = cfDirImg + "/objetos/orNo.gif"; break;
			case 3 : document.formulario.a2.src = cfDirImg + "/objetos/orNo.gif"; break;
			case 4 : document.formulario.b2.src = cfDirImg + "/objetos/orNo.gif"; break;
			case 5 : document.formulario.a3.src = cfDirImg + "/objetos/orNo.gif"; break;
			case 6 : document.formulario.b3.src = cfDirImg + "/objetos/orNo.gif"; break;
			case 7 : document.formulario.a4.src = cfDirImg + "/objetos/orNo.gif"; break;
			case 8 : document.formulario.b4.src = cfDirImg + "/objetos/orNo.gif"; break;
		}
	}

/*** FUNCIONES PARTICULARES ***/

// Comprueba los datos en las felicitaciones de cumpleaños
function ComprobarFel(mens1,mens2,mens3,cod)
{
	if (document.formulario.diaFel.selectedIndex < 1)
	{
		alert(mens1);
		document.formulario.diaFel.focus();
	}
	else
	{
			if (document.formulario.mesFel.selectedIndex < 1)
			{
				alert(mens2);
				document.formulario.mesFel.focus();
			}
			else
			{
					if (!document.formulario.texFel.value)
					{
						alert(mens3);
						document.formulario.texFel.focus();
					}
					else
					{
						document.formulario.codFel.value = cod;
						document.formulario.submit();
					}
			}
	}
}

// Escribe la explicación de menú de contenidos
function js_EscribirContenido(text, title)
{
	var txt = "<p class='normneg'>" + title + "</p><p class='margen'>" + text + "</p>";
	js_escribirObjeto( "explicaMenu", txt );
	status = title;
}

// Comprueba la selección de votos
function js_ComprobarVoto( mens )
{
	var elegido = false;
	for ( i=0; i < document.formulario.opcion.length; i++ )
	{
		if ( document.formulario.opcion[i].checked == true )
		{
			elegido = true;
		}
	}

	if (!elegido)
		alert( mens );
	else
		Refrescar( "VOTAR" );
}

// Funciones para el plano de calles
function js_Posicion( p )
{
	js_PonerMarco( 0 );
	var fi0 = ( posicion - 1 ) / 12;
	var fi  = parseInt( fi0 ) + 1;
	var co  = posicion % 12;
	var fi1 = fi;
	var co1 = co;
	var nueva;
	var buena;
	var im;
	var i;

	if ( co == 0 ) co = 12;

	switch ( p )
	{
		case 1: if ( fi > 1 ) fi1 = fi - 1;  else fi1 = 1;  break;
		case 2: if ( co < 12 ) co1 = co + 1; else co1 = 12; break;
		case 3: if ( fi < 8 ) fi1 = fi + 1;  else fi1 = 8;  break;
		case 4: if ( co >1  ) co1 = co - 1;  else co1 = 1;  break;
	}

	nueva = ( (fi1-1) * 12 ) + co1;

	if ( nueva != posicion )
	{
		buena = true;
		for( i = 0; i < ocupados.length; i++ )
			if ( nueva == ocupados[i] ) buena = false;

		if ( buena )
		{
			im = cfDirImg + "/plano/p_r" + fi1 + "_c" + co1 + ".jpg";
			document.formulario.vista.src = im;
			posicion = nueva;
		}
	}
	js_PonerMarco( 1 );
}

function js_PonerMarco( m )
{
	var ruta = document.formulario.vista.src;	// Ruta entera de la imagen grande
	var r0 = ruta.split("/");		// Divide la ruta en partes /
	var r1 = r0[r0.length-1];		// La última parte, nombre del archivo de imagen
	if (r1 != "nada.jpg")
	{
		var r2 = r1.slice(3);
		var r3 = r1.slice(6);
		var r4 = parseInt(r2);			// Número de fila
		var r5 = parseInt(r3);			// Nümero de columna
		var r6 = ( (r4-1) * 12 ) + r5;
		r6 = "document.formulario.im" + r6	// Nombre de la imagen pequeña
		if ( !m )
			eval( r6 + ".border=0" );		// Le quita el marco
		else
			eval( r6 + ".border=1" );		// Le pone el marco
	}
}

// Mostrar la foto real
function js_mostrarFoto( idImg )
{
	var oImg = js_obtenerObjetoPuro( idImg );		// Obtiene la imagen miniatura
	if ( oImg )
	{
		var oDiv = js_obtenerObjetoPuro( 'dfoto' );		// DIV que contendrá la foto real
		var oFot = js_obtenerObjetoPuro( 'imgfoto' );	// Imagen que contiene la foto real
		var oTxt = js_obtenerObjetoPuro( 'divtxt' );	// DIV que contiene el texto de la foto
		var texto = oImg.alt;							// Texto de la imagen
		var miniatura = oImg.src;						// Nombre del archivo de la imagen en miniatura
		var archivo = "";                               // Nombre del archivo de la imagen real
		var m = miniatura.lastIndexOf("_");
		if ( m != -1 )
			archivo = miniatura.substr(0, m) + miniatura.substr(m+1);
		else
			archivo = miniatura;
		//var archivo = miniatura.replace('_','');		// Nombre del archivo de la imagen real
		var anchoV = js_obtenerAnchoInterno();			// Ancho de la ventana del navegador
		var arriI = js_obtenerTop( idImg );				// Posición Y de la miniatura
		var altoI = js_obtenerAlto( idImg );			// Alto de la imagen en miniatura
		var altoD = arriI + altoI + 5;					// Posición del contendor de la imagen

		// Ponemos la imagen real y el texto
		oFot.src = archivo;
		oTxt.innerHTML = texto;

		// Tamaño del DIV
		var anchoF = js_obtenerAncho( oFot );	// Ancho de la foto real
		var anchoD = ( anchoV - anchoF ) / 2;	// Posición izquierda de la foto

		js_mover( oDiv, anchoD, altoD )
		js_mostrar( 'dfoto' );
	}
}

// Poner un input donde hay un texto
function js_PonerInput( obj )
{
	var id = obj.id;
	var id1 = "in" + id;
	var txt = obj.innerHTML;
	var nuevo = '<input type="text" name="' + id1 + '" id="' + id1 + '" value="' + txt + '" maxlenght="25" />';

	obj.innerHTML = nuevo;
	obj.setAttribute("onclick","");
}

function js_PonerInputs( vJ )
{
	// Pone los inputs de la fila actual
	var ant = document.getElementById("inpFila").value;

	if ( ant > -1 )
	{
		js_QuitarInputs( ant );
	}

	// Pone los nuevos inputs
	var oInput;
	var sInput = "";
	for ( var i = 1; i <= tbl_numCols; i++ )
	{
		sInput = "texto" + vJ + "_" + i;
		oInput = document.getElementById( sInput );
		js_PonerInput( oInput );
	}
	document.getElementById("inpFila").value = vJ;
}

function js_QuitarInputs( vJ )
{
	var oInput;
	var sInput = "";
	for ( var i = 1; i <= tbl_numCols; i++ )
	{
		sInput = "texto" + vJ + "_" + i;
		oInput = document.getElementById( sInput );
		js_QuitarInput( oInput );
	}
}

function js_QuitarInput( obj, fil )
{
	var id = obj.id;
	var id1 = "in" + id;
	var inp = document.getElementById(id1);
	var txt = inp.value;
	var fun = "js_PonerInputs(" + fil + ")";
	obj.innerHTML = txt;
	obj.setAttribute("onclick", fun );
}

