lejanias.js
Código
Lejanías no es un libro: es cada uno de los que tú quieras hacer. Cada día tendría una lectura posible y esa idea es la que motivó su desarrollo como HTML con JavaScript como te explico en este documento.
Resulta ser un libro interactivo que invita a quien lo leer a construirse un recorrido sobre las estaciones y los tipos de poesía que se deseen sobre aquellos poemas que fueron realizados a lo largo del 2003 en las, entonces 81, estaciones de Cercanías de Renfe de la Comunidad de Madrid.
/*
Archivo JavaScript Principal de Lejanías.
Este archivo se divide en varias partes:
1.- Definición de Atributos y Métodos para los OBJETOS
Estaciones, Tipos, Fechas y Foemas
2.- Funciones de Manejo y Creación del formulario SELESTACIONES
3.- Funciones para la Creación y Gestión de las páginas dinámicas
de los Foemas.
4.- Funciones Auxiliares para crear los Recorridos en ventanas
separadas, que se abren con los foemas seleccionados.
5.- Funciones de traza_ utilizadas durante el desarrollo.
6.- Funciones de interés general, ventanas, navegador...
*/
// Construccion de OBJETOS ESTACIONES
// Construccion de OBJETOS ESTACIONES
function url_estacion() {
// Nos forma la URL del Foema antes de encontrarse con los valores
// correspondientes al tipo y número del foema.
var url_est='foemas/'+this.IdEst+'/'+this.IdEst+this.Fecha+this.Hora;
return (url_est);
}
function lugarfecha() {
// Nos forma la una cadena con el Lugar y la Fecha de creación del Foema
var lyf=this.Nombre+', 2003'+this.Fecha;
return (lyf);
}
function crea_checkest() {
// Nos escribe en el documento un checkbox para la estacion
document.writeln('<div class=checkestacion style="position:relative;width:150px;height:50px;">');
document.writeln('<input type="checkbox" name="chk_est" value="'+this.IdEst+'">'+this.Nombre);
document.writeln('</div>');
}
function crea_checkmap() {
// Nos escribe en el documento un checkbox sobre el mapa para la estacion
document.write('<div class=checkestacion style="'+this.PosicionMapa+'">');
if (this.TipoPos==0) document.write('<input type="checkbox" name="chk_est" value='+this.IdEst+'>'+this.Nombre);
else if (this.TipoPos==1) document.write(this.Nombre+'<input type="checkbox" name="chk_est" value='+this.IdEst+'>');
else if (this.TipoPos==2) document.write('<input type="checkbox" name="chk_est" value='+this.IdEst+'><br>'+this.Nombre);
else if (this.TipoPos==3) document.write(this.Nombre+'<br><input type="checkbox" name="chk_est" value='+this.IdEst+'>');
document.write('</div>');
}
function e_props() {
// Escribe en un formato legible (para trazas, por ejemplo) las propiedades del objeto
var props='IdEst= '+this.IdEst+'\nNombre= '+this.Nombre+'\nFecha= '+this.Fecha;
return (props);
}
function estacion(Nombre,IdEst,Fecha,Hora,TipoPos,PosicionMapa,TMAX) {
this.Nombre=Nombre
this.IdEst=IdEst
this.Fecha=Fecha
this.Hora=Hora
this.TipoPos=TipoPos
this.PosicionMapa=PosicionMapa
this.TMAX=TMAX
// estacion.url_estacion()
// Devuelve la parte de la URL dependiente de la estacion
this.url_estacion=url_estacion
this.lugarfecha=lugarfecha
this.e_props=e_props
this.crea_checkest=crea_checkest
this.crea_checkmap=crea_checkmap
}
// Construccion de Objetos TIPOS
// Construccion de Objetos TIPOS
function crea_checktipo() {
// Nos escribe en el documento un checkbox para la estacion
document.writeln('<input type="checkbox" name="chk_tipo" value="'+this.Id+'">'+this.Nombre);
}
function t_props() {
// Escribe en un formato legible (para trazas, por ejemplo) las propiedades del objeto
var props='Id= '+this.Id+'\nNombre= '+this.Nombre+'\nCarpeta= '+this.carpeta+'\nExtensión= '+this.ext;
return (props);
}
function tipofoema(Id,Nombre,carpeta,ext) {
this.Id=Id
this.Nombre=Nombre
this.carpeta=carpeta
this.ext=ext
this.t_props=t_props
this.crea_checktipo=crea_checktipo
}
// Construccion de Objetos FOEMAS
// Construccion de Objetos FOEMAS
function f_props() {
// Escribe en un formato legible (para trazas, por ejemplo) las propiedades del objeto
var props='IdEst= '+this.IdEst+'\nIdTipo= '+this.IdTipo+'\nIdFoema= '+this.IdFoema+'\nURL= '+this.url;
return (props);
}
function f_unido() {
var aux = this.IdEst+','+this.IdTipo+','+this.IdFoema+',\''+this.url+'\'';
return (aux);
}
function foema(IdEst,IdTipo,IdFoema,url) {
this.IdEst=IdEst
this.IdTipo=IdTipo
this.IdFoema=IdFoema
this.url=url
this.f_props=f_props
this.f_unido=f_unido
}
// Construccion de Objetos FECHA
// Construccion de Objetos FECHA
function fech_exacta() {
var aux='Día '+this.dia+' de '+mes_str(this.mes-1)+' de 2003';
return (aux);
}
function fech_props() {
// Escribe en un formato legible (para trazas, por ejemplo) las propiedades del objeto
var props='Fecha Id: '+this.Id+'Fecha: '+this.fech+'\nRecorrido de esa fecha: '+this.rec.join();
return (props);
}
function fecha(Id,mes,dia,rec) {
this.Id=Id
this.mes=mes
this.dia=dia
this.rec=rec
if (dia<10) {var aux="0"+dia} else {var aux=dia};
this.fech=""+mes+aux;
this.f_input='<input class=fecha type="radio" name="chk_fecha" value="'+Id+'">';
this.fech_props=fech_props
this.fech_exacta=fech_exacta
}
// Funciones de Gestión de los FOEMAS seleccionados en el array foemas[]
// Funciones de Gestión de los FOEMAS seleccionados en el array foemas[]
// recrea_foemas()
// sirve para Escribir el Array de foemas[] en cada Ventana que abra
// Llamada desde escribe_foemas()
function recrea_foemas() {
var aux = "";
document.writeln('<script>');
for (var i_foemas=0; i_foemas<foemas.length; i_foemas++) {
aux = foemas[i_foemas].f_unido();
document.writeln('foemas['+i_foemas+']=new foema('+aux+');');
}
document.writeln('</script>');
}
// indice_de_foemas()
// escribe enlaces que para los elementos de foemas[] separándolos por estaciones
// Llamada desde escribe_foemas()
function indice_de_foemas() {
var flink = "", bolita="";
var ultima_estacion = 0;
var num_estacion = 0;
document.writeln('<div class=caja_foemas>');
for (var i_foemas=0; i_foemas<foemas.length; i_foemas++) {
if (foemas[i_foemas].IdEst != ultima_estacion) {
ultima_estacion = foemas[i_foemas].IdEst;
if (num_estacion++ != 0) document.writeln('</div></div>'); // Cerramos caja_estacion
document.writeln('<div class=caja_estacion>');
document.writeln('<img class=bolita_estacion src="img/estacion.gif">');
document.writeln('<div class=nombre_estacion>');
document.writeln(estaciones[ultima_estacion].Nombre);
document.writeln('</div>'); // Cerramos nombre_estacion
document.writeln('<div class=foemas_estacion>');
}
bolita='"img/bolitatipo'+foemas[i_foemas].IdTipo+'.gif"';
flink='<img class=bolita_foema src=' + bolita + ' OnClick="ventanafoema('+i_foemas+');">';
document.writeln(flink);
}
if (num_estacion != 0) document.writeln('</div></div>'); // Cerramos última caja_estacion
document.writeln('</div>'); // Cerramos caja_foemas
}
// Funciones get_check... para recoger los checks de dia, tipos o estaciones
// llamadas desde libro(is_krono) (tipos y (dia o estaciones))
// Se encargan de llenar los arrays recorrido_tipos y recorrido
// que se usan en crea_foemas() generando el array foemas[]
// get_checkdia()
// Función que devuelve el valor del Día Seleccionado
function get_checkdia() {
var dia=-1, i=0;
for (i=0; i < document.SELESTACIONES.chk_fecha.length; i++) {
// Si el DIA está seleccionado, añadirlo al recorrido
if (document.SELESTACIONES.chk_fecha[i].checked) {
dia = document.SELESTACIONES.chk_fecha[i].value;
}
}
if (dia < 0) alert('No has seleccionado Ninguna Fecha');
return (dia);
}
// get_checktipos()
// Función que generara un array con los tipos seleccionados
function get_checktipos() {
var j=0, i=0;
for (i=0; i < document.SELESTACIONES.chk_tipo.length; i++) {
// Si el TIPO está seleccionado, añadirlo al recorrido_tipos
if (document.SELESTACIONES.chk_tipo[i].checked) {
recorrido_tipos[j] = document.SELESTACIONES.chk_tipo[i].value;
j++;
}
}
if (j == 0) {alert('No has seleccionado Ningún Tipo'); return (j); }
return (recorrido_tipos.length);
}
// get_checkestaciones()
// Función que recorre todos los checkboxes del indice y extrae de los
// marcados el recorrido seleccionado.
// Las índices de las estaciones marcadas se almacenan en recorrido[]
function get_checkestaciones() {
var i=0;
var i_est=0;
for (i=0; i < document.SELESTACIONES.chk_est.length; i++) {
// Si la ESTACION está seleccionada, añadirla al recorrido
if (document.SELESTACIONES.chk_est[i].checked) {
recorrido[i_est] = eval(document.SELESTACIONES.chk_est[i].value);
i_est++;
}
}
if (i_est == 0) {alert('No has seleccionado Ninguna Estación'); return (i_est); }
return (i_est);
}
// crea_foemas()
// Función que rellena el array global foemas[] a partir de los arrays
// Los índices de las estaciones marcadas se almacenan en recorrido[]
// Los índices de los tipos marcados se almacenan en recorrido_tipos[]
function crea_foemas() {
var i=0, num_estacion, num_tipo, max_tipo;
var i_est=0, i_tipos=0, i_foemas=0;
var url_estacion="", url_foema="", url_esttipo="";
var aux;
for (i_est=0; i_est < recorrido.length; i_est++) {
num_estacion = recorrido[i_est];
url_estacion = estaciones[num_estacion].url_estacion();
for (i_tipos=0; i_tipos < recorrido_tipos.length; i_tipos++) {
num_tipo = recorrido_tipos[i_tipos];
url_esttipo = url_estacion + num_tipo;
max_tipo = estaciones[num_estacion].TMAX[num_tipo-1];
if (TRAZA>=4) traza_tipos_estacion(num_estacion, num_tipo);
// Formar el Array de FOEMAS...
// FOR para el TIPO num_tipo de la ESTACION num_estacion
for (i=1; i<=max_tipo; i++) {
// Ha de ser de 2 cifras al convertirse en cadena
if (i<10) {aux = "0" + i; } else aux = "" + i;
url_foema = url_esttipo + aux +'.html';
foemas[i_foemas] = new foema(num_estacion, num_tipo, i, url_foema);
i_foemas++;
}
}
}
if (i_foemas == 0) {alert('No hay Foemas para la Selección Actual: Prueba de nuevo'); return (i_foemas); }
else if (TRAZA>=3) alert('Foemas Totales: ' + i_foemas);
if (TRAZA>=4) traza_foemas();
return (i_foemas);
} // Fin de crea_foemas()
// Funciones de generación de la página HTML
// resultante tras la elección del recorrido en el índice
// La función principal es escribe_foemas()
// texto_cabecera()
// Crea la Cabecera y el final del documento base en función del argumento es_inicio
function texto_cabecera(es_inicio) {
if (es_inicio) {
document.writeln('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">');
document.writeln('<HTML lang=es><HEAD><TITLE>'+TITULO+'</TITLE>');
document.writeln('<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">');
document.writeln('<link rel="shortcut icon" href="favicon.ico">');
document.writeln('<script type="text/javascript" src="js/lejanias.js"></script>');
document.writeln('<link rel="stylesheet" href="css/lejanias.css" type="text/css">');
document.writeln('</head><body>');
} else {
document.writeln('</body></html>');
document.close();
}
}
// leyenda_tipos()
// Genera una cajita con la leyenda de los tipos de los foemas en pantalla.
function leyenda_tipos() {
var bolita, flink;
document.writeln('<table class=tabla_tipos>');
for (var i=1; i<tipos.length; i++) {
bolita='img/bolitatipo'+tipos[i].Id+'.gif';
flink='<img src=' + bolita + '>'+tipos[i].Nombre;
document.writeln('<tr><td>'+flink+'</td></tr>');
}
document.writeln('</table>');
}
// escribe_foemas()
// Función que genera la página con el recorrido seleccionado
// almacenado en el array global foemas[]
function escribe_foemas(losfoemas) {
texto_cabecera(true);
// Introducimos losfoemas como variable de la función
// y reescribimos el array global con este
foemas=losfoemas;
// Escribe los constructores de Foemas para el libro seleccionado
// en la página web generada, estando así disponibles para esta ventana
recrea_foemas();
// Escribe la estructura de la parte de arriba de la página
// incluyendo imagen de cerrar y título en pantalla
indice_cabecera(true, 'libro');
// Escribe una cajita con la leyenda de los tipos de foemas
leyenda_tipos();
// Genera los enlaces de los distintos foemas
indice_de_foemas();
indice_cabecera(false, 'libro');
document.writeln('<div class="caja_pie">');
document.writeln('<hr class=barra_titulo>');
var frase='Has elegido este libro a las '+hora_actual()+' del '+fecha_actual();
document.writeln('<div class=lugar_fecha>'+frase+'</div>');
document.writeln('</div>'); // Fin de caja_pie
texto_cabecera(false);
}
// libro(is_krono)
// Llama a la función que genera el recorrido de foemas seleccionados
// Llama a la función que genera la página web con el recorrido
function libro(is_krono) {
// Llamamos a la función que rellena el array recorrido_tipos[]
// en función de los tipos seleccionados
if (get_checktipos() == 0) return (0); // No seguimos si no hay seleccion
if (is_krono) {
var dia_elegido=get_checkdia();
// Asignamos el recorrido[] de estaciones al array fecha.rec[]
recorrido=fechas[dia_elegido].rec;
} else {
// Llamamos a la función que rellena el recorrido[] de estaciones
if (get_checkestaciones() == 0) return (0); // No seguimos si no hay seleccion
}
// Llamamos a la función que genera el contenido del
// array global foemas[] en funcion de recorrido[] y recorrido_tipos[]
var i_foemas = crea_foemas();
if (i_foemas == 0) return (i_foemas); // No seguimos si no hay foemas
// Creamos la variable local losfoemas, la igualamos a la global
var losfoemas=new Array();
losfoemas=foemas;
// Llamamos a la función que genera la página web con el recorrido de foemas
// seleccionado y almacenado en el array global foemas[]
escribe_foemas(losfoemas);
if (TRAZA>=2) alert ('El Libro está terminado');
// window.location.reload(); // Para solucionar un problema de repintado CAMBIAR
}
// crea_checkmapa()
// Crea los CheckBoxes sobre el mapa usando el método de estaciones[]
function crea_checkmapa() {
var i=1;
var num=estaciones.length-1;
for (i=1;i<=num;i++) estaciones[i].crea_checkmap();
return(num); // Devuelve el número de CheckBoxes creados
}
// crea_checkestaciones()
// Crea los CheckBoxes de las estaciones usando el método de estaciones[]
function crea_checkestaciones() {
var i=1;
var num=estaciones.length-1;
for (i=1;i<=num;i++) estaciones[i].crea_checkest();
return(num); // Devuelve el número de CheckBoxes creados
}
// crea_checktipos()
// Crea los CheckBoxes de los tipos usando el método de tipos[]
function crea_checktipos() {
document.writeln('<table class=tabla_tipos>');
for (var i=1;i<tipos.length;i++) {
document.write('<tr><td>');
tipos[i].crea_checktipo();
document.write('</td></tr>');
}
document.writeln('</table>');
// Marca todos los tipos seleccionados por defecto
for (i=0;i<document.SELESTACIONES.chk_tipo.length;i++) {
document.SELESTACIONES.chk_tipo[i].checked=true;
}
return(tipos.length-1); // Devuelve el número de CheckBoxes creados
}
// crea_checkfechas() y crea_checkcalendario()
// Crean los CheckBoxes de las fechas usando el método de fecha[]
IND_FECHA=0;
// fecha_ini ha de ser lunes, fecha_fin ha de ser domingo.
function crea_checkcalendario(mes, fecha_ini, fecha_fin) {
var dia_semana=0;
var cadena_semana, cadena_dia;
document.write('<tr><th colspan=7>'+mes+'</th></tr>');
for (var i_fecha=fecha_ini; i_fecha<=fecha_fin; i_fecha++) {
if ((dia_semana % 7) == 0) { // LUNES
cadena_semana='<tr>';
}
cadena_dia='<td>';
// Si el día es uno de los que hice foemas...
if (i_fecha == fechas[IND_FECHA].dia) {
cadena_dia=cadena_dia+fechas[IND_FECHA].f_input;
if (IND_FECHA < (fechas.length-1)) IND_FECHA++;
}
cadena_dia=cadena_dia+'<div class=fecha_calendario>'+i_fecha+'</div></td>';
cadena_semana=cadena_semana+cadena_dia;
if ((dia_semana % 7) == 6) { // DOMINGO
cadena_semana=cadena_semana+'</tr>';
document.write(cadena_semana);
if (TRAZA >= 3) alert ('Hoy es Domingo '+i_fecha+' de '+mes+' y la cadena es \n'+cadena_semana);
}
dia_semana++;
}
}
function crea_checkfechas() {
document.write('<table class=tabla_calendario>');
document.write('<tr><th>L</th><th>M</th><th>X</th><th>J</th><th>V</th><th>S</th><th>D</th></tr>');
document.write('<tr height=20px></tr>');
crea_checkcalendario('Noviembre', 3, 30);
crea_checkcalendario('Diciembre', 1, 7);
document.write('</table>');
return(fechas.length);
}
// indice_cabecera()
// Crea la Cabecera y el final del documento base en función del argumento es_inicio
function indice_cabecera(es_inicio, llamada) {
var opcs="";
if (es_inicio) {
document.writeln('<div class="caja_cabecera">');
document.writeln('<div class="volver">');
if (llamada=='libro') { opcs=' alt="Volver" OnClick="redireccion(\'lejanias.html\')"'; }
else if (llamada=='indice') { opcs=' alt="Cerrar" OnClick="parent.window.close()"'; }
opcs = '<img class=icono_navegacion src=img/cerrar.gif '+ opcs +'>';
document.writeln(opcs);
document.writeln('</div>');
document.writeln('<H2 class=titulo_libro>'+TITULO+'</H2>');
document.writeln('<hr class=barra_titulo>');
document.writeln('</div>'); // Fin de caja_cabecera
if (llamada=='libro') { document.writeln('<div class=caja_checks>'); }
else if (llamada=='indice') { document.writeln('<div class=caja_checks>'); }
} else {
document.writeln('</div>'); // Fin del div caja_checks o caja_foemas
}
}
// Función de Entrada en este programa desde LEJANIAS.HTML
// Es la encargada de Crear el formulario SELESTACIONES
// Llama a crea_checkfechas() o crea_checkmapa() según proceda
// También recurre a crea_checktipos()
// Antiguamente, se usaban las funciones crea_checkestaciones() y crea_checks_mapa()
//
// Asigna la función libro(KRONO) al OnClick del boton
function indice_lejanias(is_mapa,is_krono) {
if (TRAZA>=3) alert('MAPA: '+MAPA+'\nKRONO: '+KRONO);
// BROWSER=browser(); // Todavía no utilizo el valor de BROWSER, pero puede que luego sí.
indice_cabecera(true, 'indice');
if (TRAZA>=3) traza_tipos();
if (TRAZA>=3) traza_estaciones();
// Comienzo el FORMULARIO de ESTACIONES y TIPOS (SELESTACIONES)
document.writeln('<FORM id=form_indice NAME=SELESTACIONES>');
// Escribo los Checks de los Tipos de foemas para elegir.
crea_checktipos();
// Escribo los Checks de Estaciones o Dias según sea cronológico o no
if (is_krono) {
document.writeln('<div class=nomapaestaciones>');
crea_checkfechas(); // Ponemos los checks de las fechas con foemas en el calendario
document.writeln('</div>');
var cadena_boton=' alt="Esto es lo que hice ese día" OnClick="libro('+is_krono+')"';
var cadena_leyenda='Elige una fecha para ver el recorrido que hice.';
}
else {
if (is_mapa) {
document.writeln('<div class=mapaestaciones>');
crea_checkmapa(); // Ponemos los Checks de las estaciones sobre el Mapa de la Clase mapaestaciones
document.writeln('</div>');
}
else {
document.writeln('<div class=nomapaestaciones>');
crea_checkestaciones(); // Ponemos los checks de las estaciones en orden... pero sin mapa.
document.writeln('</div>');
}
var cadena_boton=' alt="Crea tu propio Libro" OnClick="libro('+is_krono+')"';
var cadena_leyenda='Elige las estaciones y tipos de poemas que quieres leer.';
}
// Escribimos la caja_pie con los botones de navegación y la leyenda
document.writeln('<div class="caja_pie">');
document.writeln('<hr class=barra_titulo>');
document.writeln('<div class=botones_formulario>');
document.writeln('<img class=icono_navegacion src="img/anterior.gif" alt="Limpiar la selección actual" OnClick="document.SELESTACIONES.reset()">');
document.writeln('<img class=icono_navegacion src="img/siguiente.gif" '+cadena_boton+'>');
document.writeln('</div>');
document.writeln('<div class=leyenda>');
document.writeln(cadena_leyenda);
document.writeln('</div>');
document.writeln('</div>'); // Fin de caja_pie
// Termino el FORMULARIO de ESTACIONES y TIPOS (SELESTACIONES)
document.writeln('</FORM>');
indice_cabecera(false, 'indice');
}
// get_foema()
// Función que devuelve el valor del Id del FOEMA
// a partir de su URL (extrayendo la parte relativa, sin la extensión)
function get_foema() {
var archivo = rutarelativa();
var posicionPunto = archivo.indexOf(".");
return(archivo.substring(0,posicionPunto));
}
// html_foema_cabecera(titulo)
// Función llamada desde foema_visual() para formar la cabecera de página
function html_foema_cabecera(titulo) {
document.write('<div class=titulo_poema>'+titulo+'</div>');
document.write('<hr class=barra_titulo>');
document.write('<div class=caja_foema>');
}
// html_foema_pie()
// Función llamada desde foema_visual() para formar el pie de página
function html_foema_pie() {
var idfoema = get_foema();
var id_est = idfoema.substring(0,2); // El Indice de la Estacion
var i_est = eval(id_est); // Para Pasarlo a número para usarlo en estaciones[]
document.write('</div>'); // Cerramos la caja del Foema
document.write('<hr class=barra_pie>');
document.write('<div class=lugar_fecha_poema>');
document.write(estaciones[i_est].lugarfecha());
document.write('</div>');
}
// foema_visual()
// Función llamada desde todos los FOEMAS VISUALES (foto, vídeo, visual)
// que genera, en función del nombre del archivo, el contenido.
// Recupera valores de la estación, el tipo, el id del foema.
function foema_visual(titulo) {
var idfoema = get_foema();
var id_est =idfoema.substring(0,2); // El Indice de la Estacion
var fechtime=idfoema.substring(2,8); // Fecha y Hora juntos
var id_tipo =eval(idfoema.substring(8,9)); // Tipo del foema
var i_foe =idfoema.substring(9,11); // Indice del foema de este tipo
// Obtengo el índice del Array de tipos[] en función del Id
var num_tipo=0;
while (id_tipo != tipos[num_tipo].Id) { num_tipo++; }
var archivo=tipos[num_tipo].carpeta+id_est+'/'+id_est+fechtime+i_foe
+tipos[num_tipo].ext;
html_foema_cabecera(titulo);
document.write('<div class=poema_foto>');
switch (id_tipo) {
case 1: // foema_foto
document.write('<a href="'+archivo+'" alt="Pincha sobre la foto para verla a tamaño completo">');
document.write('<img id=foto class="img_foto" src="'+archivo+'">');
document.write('</a>');
break;
case 3: // foema_video
document.write('<object type="application/x-shockwave-flash" id="FlowPlayer" data="../../js/player.swf" width="420" height="363">');
document.write('<param name="movie" value="../../js/player.swf">');
document.write('<param name="scale" value="noScale">');
document.write('<param name="wmode" value="transparent">');
document.write('<param name="allowScriptAccess" value="sameDomain">');
document.write('<param name="quality" value="high">');
document.write('<param name="flashvars" value="config={ loop: false, autoPlay:true, initialScale: \'fit\',');
// if (TRAZA>=4) alert('PATH del player: ../../js/player.swf \nPATH del videoFile: '+archivo);
document.write('videoFile: \''+archivo+'\', }">');
document.write('</object>');
break;
case 4: // foema_visual
document.write('<a href="'+archivo+'" alt="Pincha sobre el poema para verlo a tamaño completo">');
document.write('<img id=foto class="img_foto" src="'+archivo+'">');
document.write('</a>');
break;
}
document.write('</div>');
html_foema_pie();
}
// Otras FUNCIONES ÚTILES
// Otras FUNCIONES ÚTILES
// Función para abrir una ventana con distintas opciones
// Llamada desde index.html para abrir lejanias.html
function ventanacompleta(pagina) {
BROWSER=browser();
var opciones='toolbar=no,location=no,directories=no,
status=no,menubar=no,resizable=no,scrollbars=no';
if ((BROWSER=='SFRI') || (BROWSER=='CHRM')) {
var ancho=screen.width-30;
var alto =screen.height-80;
opciones=opciones+',width='+ancho+',height='+alto;
// opciones='fullscreen, scrollbars=auto'; // CAMBIAR
}
else if (BROWSER=='MZFF') { opciones='fullscreen'; }
else if (BROWSER=='MSIE') { opciones=opciones+',fullscreen=yes'; }
else { } // Navegador no contemplado... No puedo prever todos los posibles!
wlejanias=window.open(pagina,"WLejanias",opciones);
if ((BROWSER=='SFRI') || (BROWSER=='CHRM')) wlejanias.moveTo(10,0);
wlejanias.focus();
}
function ventanafoema(i_foema) {
FOEMABIERTO=i_foema;
var ancho=900, alto=720;
var desplazamiento=(screen.width-ancho)/2; // Para centra la ventana
var opciones='scrollbars=no,width='+ancho+',height='+alto;
wfoema=window.open('framesfoema.html','WFoema',opciones);
wfoema.moveTo(desplazamiento,10);
wfoema.focus();
}
// crea_recorrido()
// Función llamada desde el frame recorrido.html y que crea el recorrido con Siguiente, etc...
// Podría estar todo su código dentro de la página html, pero así es más bonito.
function crea_recorrido() {
// Recojo el array de foemas[] de la ventana anterior y el Foema de comienzo.
foemas=parent.window.opener.foemas;
FOEMABIERTO=parent.window.opener.FOEMABIERTO;
// Nos situa en la ventana de los Foemas el FOEMABIERTO
parent.window.document.getElementById('vframe').src=foemas[FOEMABIERTO].url;
// En el OnClick modifico el this.HREF hacia el siguiente o el anterior con la funcion
// haz_recorrido(direccion) que modifica el FOEMABIERTO
document.write('<div class=indice_recorrido>');
document.write('<a href="nada.html" id=href_anterior OnClick="this.href=haz_recorrido(\'anterior\');" target=ventana>');
document.write('<img class=icono_navegacion src=img/anterior.gif alt="Anterior"></a>');
document.write('<a href="nada.html" target=ventana OnClick="parent.window.close()">');
document.write('<img class=icono_navegacion src=img/cerrar.gif alt="Cerrar"></a>');
document.write('<a href="nada.html" id=href_siguiente OnClick="this.href=haz_recorrido(\'siguiente\');" target=ventana>');
document.write('<img class=icono_navegacion src=img/siguiente.gif alt="Siguiente"></a>');
document.write('</div>');
}
// haz_recorrido(direccion)
// Función llamada desde la función crea_recorrido() para ir al anterior foema o al siguiente
// modificando el valor de FOEMABIERTO y devolviendo la URL del nuevo foema.
function haz_recorrido(direccion) {
if (direccion == "anterior") {
FOEMABIERTO--;
if (FOEMABIERTO < 0 ) FOEMABIERTO = foemas.length - 1; // Para no ser negativo
}
else if (direccion == "siguiente") {
FOEMABIERTO++;
if (FOEMABIERTO >= foemas.length) FOEMABIERTO = 0; // Para no ser excesivo
}
else alert("Imposible ir en esa dirección: " + direccion);
if (TRAZA>=4) alert('URL del foema nuevo['+FOEMABIERTO+']: ' + foemas[FOEMABIERTO].url);
// Devuelvo la URL del nuevo FOEMABIERTO
return (foemas[FOEMABIERTO].url);
}
// Funciones de TRAZA
// Funciones de TRAZA
// traza_foemas()
// sirve para mostrar las propiedades de todos los foemas en el array foemas[]
function traza_foemas() {
var aux = "";
for (var i_foemas=0; i_foemas<foemas.length; i_foemas++) {
aux = foemas[i_foemas].f_props();
alert('Propiedades del FOEMA['+i_foemas+']\n' + aux);
}
alert('Número Total de Foemas' + i_foemas);
return (i_foemas);
}
// traza_estaciones()
// sirve para mostrar cuantos foemas hay de cada tipo en las estaciones en el array estaciones[]
function traza_estaciones() {
var photos = 0, videos = 0, textos = 0, accion = 0, visual = 0;
var aux = "";
for (var i_estaciones=1; i_estaciones<estaciones.length; i_estaciones++) {
photos = photos + estaciones[i_estaciones].TMAX[0];
accion = accion + estaciones[i_estaciones].TMAX[1];
videos = videos + estaciones[i_estaciones].TMAX[2];
visual = visual + estaciones[i_estaciones].TMAX[3];
textos = textos + estaciones[i_estaciones].TMAX[4];
if (TRAZA>=4) {
aux = estaciones[i_estaciones].e_props();
alert('Propiedades de la ESTACION['+i_estaciones+']\n' + aux);
}
}
i_estaciones--;
alert('Número Total de Estaciones: ' + i_estaciones
+ '\nNúmero Total de Foemas: ' + (photos+accion+videos+visual+textos));
alert('Fotos: ' + photos + '\nAcciones: ' + accion + '\nVídeos: ' + videos + '\nVisuales: ' + visual + '\nTextuales: ' + textos);
return (i_estaciones);
}
// traza_tipos_estacion()
// sirve para mostrar cuantos tipos hay y foemas máximos de ese tipo por cada estación
function traza_tipos_estacion(num_estacion, num_tipo) {
var max_tipo = estaciones[num_estacion].TMAX[num_tipo-1];
alert('Nombre de la Estacion: ' + estaciones[num_estacion].Nombre
+ '\nNombre del TIPO: ' + tipos[num_tipo].Nombre
+ '\nNumero del Tipo: ' + num_tipo
+ '\nNúmero de Foemas de ese tipo: ' + max_tipo);
}
// traza_tipos()
// sirve para mostrar las propiedades de todas las tipos en el array tipos[]
function traza_tipos() {
var aux = "";
alert('Función de TRAZA de Tipos');
for (var i_tipos=1; i_tipos<tipos.length; i_tipos++) {
aux = tipos[i_tipos].t_props();
alert('Propiedades del TIPO['+i_tipos+']\n' + aux);
}
i_tipos--;
alert('Número Total de Tipos' + i_tipos);
return (i_tipos);
}
// traza_fechas()
// sirve para mostrar las propiedades de todas las fechas en el array fechas[]
function traza_fechas() {
var aux = "";
alert('Función de TRAZA de fechas');
for (var i=0; i<fechas.length; i++) {
aux = fechas[i].fech_props();
alert('Propiedades de la Fecha '+fechas[i].fech_exacta());
alert('Propiedades de la Fecha['+i+']\n' + aux);
}
i--;
alert('Número Total de Fechas' + i);
return (i);
}
// traza_recorrido() y traza_recorrido_tipos() no se usan: BORRAR
function traza_recorrido() {
alert('Muestra Recorrido con ' + recorrido.length + ' estaciones');
for (var i=0; i<recorrido.length; i++) alert('recorrido['+i+']= ' + recorrido[i]);
}
function traza_recorrido_tipos() {
alert('Muestra Tipos con ' + recorrido_tipos.length + ' Tipos');
for (var i=0; i<recorrido_tipos.length; i++) alert('recorrido_tipos['+i+']= ' + recorrido_tipos[i]);
}
// Funciones de Propósito General, válidas para otros proyectos
// Funciones de Propósito General, válidas para otros proyectos
// Función que devuelve una cadena de Mes en funcion del número (de 0 a 11)
function mes_str(num) {
var meses = new Array('Enero','Febrero','Marzo','Abril','Mayo','Junio',
'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre');
return(meses[num]);
}
// Función que devuelve una cadena de Dia del Mes del Año
function fecha_actual() {
var fecha = new Date();
var mes = mes_str(fecha.getMonth());
return (fecha.getDate() +' de '+mes+' del '+fecha.getFullYear());
}
// Función que devuelve una cadena de Hora:Minuto
function hora_actual() {
var ahora = new Date();
hora = ahora.getHours();
if (hora<10) hora = "0" + hora;
minuto = ahora.getMinutes();
if (minuto<10) minuto = "0" + minuto;
// segundo = momentoActual.getSeconds();
// if (segundo<10) segundo = "0" + segundo;
return (hora + ':' + minuto);
}
// Función para alertarnos sobre la resolución de la pantalla
function resolucion() {
alert("La resolución de tu pantalla es de: " + screen.width + " x " + screen.height);
}
// Función para Redireccionar la página a una URL indicada en la variable pagina
function redireccion(pagina) {
document.location.href=pagina;
// También se podría hacer con la propiedad location de la ventana
// window.location = pagina;
// También el método window.asign(pagina); Podría servir...
}
// Función que muestra información relevante sobre el Navegador que estamos usando
function browser() {
var x = navigator;
var br;
if (x.appName=="Netscape")
{
if (x.userAgent.indexOf('Firefox')!=-1) { br="MZFF"; }
else if (x.userAgent.indexOf('Chrome')!=-1) { br="CHRM"; }
else if (x.userAgent.indexOf('Safari')!=-1) { br="SFRI"; }
else br="OTRO";
}
else if (x.appName=="Microsoft Internet Explorer") br="MSIE";
else br="OTRO";
return (br);
}
function info_navegador() {
var x = navigator;
document.writeln("<br>BROWSER= " + browser() + "<hr>");
document.writeln("<br>CodeName= " + x.appCodeName);
document.writeln("<br>Name= " + x.appName);
document.writeln("<br>Version= " + x.appVersion);
document.writeln("<br>CookieEnabled= " + x.cookieEnabled);
document.writeln("<br>CPUClass= " + x.cpuClass);
document.writeln("<br>OnLine= " + x.onLine);
document.writeln("<br>Platform= " + x.platform);
document.writeln("<br>JavaEnabled= " + x.javaEnabled());
document.writeln("<br>UserAgent= " + x.userAgent);
document.writeln("<br>BrowserLanguage= " + x.browserLanguage);
document.writeln("<br>SystemLanguage= " + x.systemLanguage);
document.writeln("<br>UserLanguage= " + x.userLanguage);
info_pantalla();
}
function info_pantalla() {
document.writeln('<br>La reolución de la pantalla es la siguiente:');
document.writeln('<br>Resolución Ancho: '+screen.width);
document.writeln('<br>Resolución Alto: '+screen.height);
}
// Función que devuelve la parte Relativa del archivo en curso
function rutarelativa() {
var rutaAbsoluta = self.location.href;
var posicionUltimaBarra = rutaAbsoluta.lastIndexOf("/");
return (rutaAbsoluta.substring(posicionUltimaBarra + "/".length , rutaAbsoluta.length));
}
// Función para mostrar una capa, en función de su ID
function mostrarcapa(capa){
document.getElementById(capa).style.visibility="visible";
}
// Función para ocultar una capa, en función de su ID
function ocultarcapa(capa){
document.getElementById(capa).style.visibility="hidden";
}
// Función que no hace nada. Sí, así es. Es una función relajada
function nada() {}
/////////////////////////////////////////////////////////
// Variables GLOBALES de interés general
// Variables GLOBALES de interés general
var foemas=new Array(); // Se llena en crea_foemas()
var recorrido=new Array(); // Se llena en get_checkestaciones()
var recorrido_tipos=new Array(); // Se llena en get_checktipos()
var url_indice="lejanias.html";
var TITULO="Lejanías";
var TRAZA=1;
var wlejanias;
var wfoema;
var BROWSER;
var MAPA=true;
var KRONO=false;
var FOEMABIERTO=0;
var NUM_ESTACIONES=81;
var NUM_TIPOFOEMAS=5;
/////////////////////////////////////////////////////////
// Incluimos, por último, los datos de estaciones, tipos y fechas, definidos en datos.js
if (self.location.href.indexOf('foemas')!=-1) { document.write("<script src='../../js/datos.js' language='JavaScript' type='text/javascript'></script>"); }
else document.write("<script src='js/datos.js' language='JavaScript' type='text/javascript'></script>");