/**************************************************************
Calendario con efem�rides y eventos. Script por Tunait! (21/4/2007)
Script de libre uso con la condici�n de que permanezcan intactas estas l�neas, osea, los cr�ditos.
Distribuci�n no autorizada en sitios de script sin previa autorizaci�n
Ver condiciones de uso en http://javascript.tunait.com/
tunait@yahoo.com 
****************************************************************/
/* La configuracion en el archivo calendarioefemerides_config.js */
var hoy = new Date()
var mes = hoy.getMonth()
var dia = 1
var anio = hoy.getFullYear()
var diasSemana = new Array ('L','M','M','J','V','S','D')
var meses = new Array('Xaneiro','Febreiro','Marzo','Abril','Maio','Xu\u00F1o','Xullo','Agosto','Setembro','Outubro','Novembro','Decembro')
var categorias = new Array('cultura','acto','congreso')  // datos a incluir de bdd
var tunIex=navigator.appName=="Microsoft Internet Explorer"?true:false;
if(tunIex && navigator.userAgent.indexOf('Opera')>=0){tunIex = false}
tunOp = navigator.userAgent.indexOf('Opera')>=0 ? true: false;
var tunSel = false
var gHoy = 0;
var anCelda, alCelda, carga =false;
var nEventosPag= 3;
var iPag=1; // pagina en la que estamos. Incialmente en la primera  
var w = 0; // indice para el objeto eventos
var eventos;

function tunCalendario(){

	//if(hoy.getDate()+1 == dia && mes == hoy.getMonth() && anio == hoy.getFullYear() && !gHoy){
	gHoy=0;

//	window.onload = function() // manejadora del onclick
	dia2 = dia
	// añade un cuadro de texto para mostrar les eventos
	fCalendario = document.createElement('div')
	fCalendario.style.position= 'relative';
	fCalendario.id = 'tunCuadroTexto';
	document.getElementById(idContenedor).innerHTML = '';
	document.getElementById(idContenedor).appendChild(fCalendario)
	// crea una tabla que se llama calendario
	tab = document.createElement('table')
	tab.id = 'calendario'
	// le añade la tabla sobre la que se construye el calendario
	document.getElementById(idContenedor).appendChild(tab)
	tcabeza = document.createElement('thead')
	tab.appendChild(tcabeza)
/*
	fi2 = document.createElement('tr')
	
	fi2b = document.createElement('th')
	fi2b.className = "colormes";
	fi2b.colSpan = 7
	fi2.id = 'mesCalendario'
	fi2b.appendChild(document.createTextNode(meses[mes] + "  -  " + anio))
	fi2.appendChild(fi2b)
	tcabeza.appendChild(fi2)
	*/
	
	fi = document.createElement('tr')
	fi.className ="linea";
	tcabeza.appendChild(fi)
	for(m=0;m<7;m++){
		// pone en la cabecera los días de la semana
		ce = document.createElement('th')
		ce.appendChild(document.createTextNode(diasSemana[m]))
		fi.appendChild(ce)		
	}
	var escribe = false  // escribe para marcar evento
	var escribe2 = true  // escribe dia del calendario
	

	fecha = new Date(anio,mes,dia) // construye la fecha actual

	
	var d = fecha.getDay()-1 
	if(d<0){d = 6}
	tcuerpo = document.createElement('tbody')
	tab.appendChild(tcuerpo)
	while(escribe2){
		fi = document.createElement('tr')
		co = 0
		for(t=0;t<7;t++){
			ce = document.createElement('td')
			if(escribe && escribe2){
				fecha2 = new Date(anio,mes,dia)
				
				/*****EVENTOS****/
				var _anio = fecha2.getFullYear().toString()
				var _mes = fecha2.getMonth() + 1
				_mes = _mes < 10 ? '0' + _mes : _mes.toString()
				var _dia = fecha2.getDate()
				_dia = _dia < 10 ? '0' + _dia : _dia.toString()
			//	buscaEv = buscaEvento(_anio + _mes + _dia, _mes + _dia)
			//  llamada a la función que obtiene los datos en lugar de buscaEvento
			//  obtenerDatosEventosdelDia(fecha,categoria)
				// poner el globito informativo para el dia cuando hover
			/*	if(buscaEv){
					_titl = '';
					for( var x in buscaEv){
						_titl += buscaEv[x].titulo						
						_titl += x < (buscaEv.length - 1) ? '; ' : '';
					}				
				} */
				
			//	ce.title = buscaEv ? _titl : formatoFecha(_anio + _mes + _dia) 
			//	ce.className = buscaEv ? 'hayEvento' : '' 
				/****FIN EVENTOS****/
			
				if(fecha2.getMonth() != mes){escribe2 = false;}
				else{
					ce.appendChild(document.createTextNode(dia));
					dia++;
					co++;
					ce.style.cursor = calendarioCursor
					ce.onclick = marcaCalendario
				}
			} 
			if(d == t && !escribe){
				ce.appendChild(document.createTextNode(dia))
				/*****EVENTOS****/
				var _anio = anio
				var _mes = mes + 1
				_mes = _mes < 10 ? '0' + _mes : _mes.toString()
				var _dia = dia
				_dia = _dia < 10 ? '0' + _dia : _dia.toString()
			/*	buscaEv = buscaEvento(_anio + _mes + _dia, _mes + _dia)
				if(buscaEv){
					_titl = '';
					for( var x in buscaEv){
						_titl += buscaEv[x].titulo
						_titl += x < (buscaEv.length - 1) ? '; ' : '';
					}
				}*/
				ce.title = formatoFecha(_anio + _mes + _dia)
			//	ce.className = buscaEv ? 'hayEvento' : ''
				/****FIN EVENTOS****/
				dia++;co++
				escribe = true
				ce.style.cursor = calendarioCursor
				ce.onclick = marcaCalendario
	//  *********  POR AQU�  ********** //
			}
			else{
				ce.appendChild(document.createTextNode(" "))
			}
			fi.appendChild(ce)
		
			

			
			
			if(hoy.getDate()+1 == dia && mes == hoy.getMonth() && anio == hoy.getFullYear() && !gHoy){				
				ce.className = "Hoy"
				gHoy = 1;
			/*	if(buscaEv){ escribeEvento(buscaEv)}
				else{*/ escribeFecha(_anio + _mes + _dia); /* enlaceListarMes() } */

			}
			
						
			
		} //fin for t
			
		if(co>0){tcuerpo.appendChild(fi)}
		
		} // fin while
	dia = dia2
}

/* 
 * Escribe la fecha como parametro en el campo s:hidden y ejecuta el s:submit
 * 
 */
function marcaCalendario(){
	var _anio = anio.toString();
	var _mes = mes + 1;
	_mes = _mes < 10 ? '0' + _mes  : _mes.toString();
	var _dia = this.firstChild.nodeType == 1 ? this.firstChild.nextSibling.nodeValue : this.firstChild.nodeValue;
	_dia = _dia < 10 ? '0' + _dia  : _dia.toString();
	document.getElementById("fechaCalendario").value = _dia+'/' + _mes + '/'+ _anio;
	
	document.getElementById("btnCargaEventosCalendario").click();
}

function borra(){
	document.getElementById(idContenedor).removeChild(document.getElementById('calendario'))
	document.getElementById(idContenedor).removeChild(document.getElementById('tunCuadroTexto'))
}
function establecerFecha(){	
	//tunFe = new Date()
	tunFe = new Date(anio,mes,dia);
	document.getElementById('tunMes').options[tunFe.getMonth()].selected = true
	document.getElementById('tunAnio').value = tunFe.getFullYear()
}

function buscaEvento(f, fc){
	try{
		eval(meses[mes].toLowerCase())
	}
	catch(error){
		return false
	}
	var _array = eval(meses[mes].toLowerCase())
	var _eventos = new Array()
	for(var m in _array){
		if(_array[m].fecha == f || _array[m].fecha == fc){
			_eventos.push(_array[m])
		}
	}
	return _eventos.length > 0 ? _eventos : false;
}

/* obj -> objeto que contiene los eventos de un día */
function escribeEvento(obj){
	eventos= obj;
	escribeFecha(obj[0].fecha) 
	escribeEvento2(obj, false)  // quitar obj como argumento?
}
function escribeEvento2(obj, fec){
	var salto;
	var textoEnlace;
	var enlace;
	var nav;
	var textoNav;
	var numEventos = eventos.length;
	var cont; // para controlar que no se muestren más de 3 eventos por pagina
	/* obtengo el numero de paginas de eventos */
	numPagTot= numEventos / nEventosPag;
	if ((numEventos % nEventosPag) != 0){
		numPagTot= parseInt(numPagTot+1);		
	}
//	alert(numPagTot);
	// w está ya inicializada
	cont= 1;
	while ( (cont <= nEventosPag) && (w<numEventos)){ //w in obj
		var ti = document.createElement(tagTitulos) /* ti es un sólo evento */
		ti.id="ev"+cont;
		/* aqui entra cuando se llama de escribirEventosMes */
		if (fec) {
			_fec = formatoFecha(eventos[w].fecha)
			_d = _fec.substr(0, 2)
			ti.appendChild(document.createTextNode(_d + " - "))
		}
		// crea el enlace que añade al objeto que se va a mostrar y lo añade al evento
		var o = ti
		if (eventos[w].enlace) {
			var en = document.createElement('a')
			en.href = eventos[w].enlace
			o.appendChild(en)
			o = en
		}
		o.appendChild(document.createTextNode(eventos[w].titulo))
		document.getElementById('tunCuadroTexto').appendChild(ti)
		w++;
		cont++;
	}
	
/* En función de en qué pagina estamos y cuántas hay, poner los enlaces Ant y/o Sig
   Preparar dichos enlaces para que llamen a una función que actualice el indice w,
   borre los eventos mostrados hasta ese momento (hijos de tunCuadroTexto en el DOM)
*/	
	if (numPagTot>1){ // si es una sola pagina no ponemos enlace
		if (iPag == 1){
			// poner navegador Sig
			nav = document.createElement("span")
			nav.id= "navSig";
			nav.className= "navEventos"
			nav.onclick = function() {cambiaPag("Sig", cont-1, "parametro 0")}
			textoNav= document.createTextNode("Sig")
			nav.appendChild(textoNav)
			document.getElementById('tunCuadroTexto').appendChild(nav)
		}
		else if (iPag < numPagTot){
			// Poner enlace Ant y Sig
			nav = document.createElement("span")
			nav.id= "navAnt";
			nav.className= "navEventos"
			nav.onclick = function() {cambiaPag("Ant", cont-1,"parametro 1")}
			textoNav= document.createTextNode("Ant    ")
			nav.appendChild(textoNav)
			document.getElementById('tunCuadroTexto').appendChild(nav)			
			nav = document.createElement("span")
			nav.id= "navSig";
			nav.className= "navEventos"
			nav.onclick = function() {cambiaPag("Sig",cont-1, "parametro 2")}
			textoNav= document.createTextNode("    Sig")
			nav.appendChild(textoNav)
			document.getElementById('tunCuadroTexto').appendChild(nav)			
		}
		else{  // iPag == numPagTot -> es la última pagina de eventos
			// poner enlace Ant
			nav = document.createElement("span")
			nav.id= "navAnt";
			nav.className= "navEventos"
			nav.onclick = function() {cambiaPag("Ant",cont-1," parametro 3")}
			textoNav= document.createTextNode("Ant")
			nav.appendChild(textoNav)
			document.getElementById('tunCuadroTexto').appendChild(nav)
		}
	}
/* Enlace Volver al Calendario */
	salto= document.createElement("br")
	salto.id="salto1"
	document.getElementById('tunCuadroTexto').appendChild(salto)
	salto= document.createElement("br")
	salto.id="salto2"	
	document.getElementById('tunCuadroTexto').appendChild(salto)
	enlace = document.createElement("a")
	enlace.id= "volverCalendario"
	textoEnlace = document.createTextNode("Volver al calendario");
//	enlace.innerHTML= "Volver al calendario"
	enlace.href= "index.html"
	enlace.appendChild(textoEnlace)
	document.getElementById('tunCuadroTexto').appendChild(enlace)
//	enlaceListarMes()
} 


/*
 * Borra los eventos mostrados de tunCuadroTexto y llama a escribeEvento2 con los
 *  parámetros  actualizados: iPag (pagina actual) y w (indice para el evento a mostrar)
 *  Siempre actualizar primero el indice antes que la pagina
 *  cantEv: nº de eventos pintados en la pagina. Para borrarlos.
 */
function cambiaPag(direccion,cantEv,texto){	
	var i;
//	alert('soy la función cambiaPag '+texto+'el enlace que has pinchado es '+direccion)
	// borrar eventos y enlaces Ant Sig
	for (i = 1; i <= cantEv; i++) {
		eliminarElemento('ev'+i);
	}
	// comprobar si falla en caso de que no exista el enlace
	if (document.getElementById('navAnt') != null){	eliminarElemento('navAnt')}
	if (document.getElementById('navSig') != null){	eliminarElemento('navSig')}	
	eliminarElemento('salto1')
	eliminarElemento('salto2')
	eliminarElemento('volverCalendario')

	// actualizar índices
	if (direccion=='Sig'){ // w estará bien posicionado pero para evitar incoherencias
		w= iPag*nEventosPag; // no se le suma 1 porque w empieza en 0
		iPag= iPag+1;
	}
	else { // direccion=='ant'
		w= (iPag-2)*nEventosPag; // no se le suma 1 porque w empieza en 0
		iPag= iPag-1;
	}
	// llamar a escribeEventos2 */
	var obj; var fe;
	 escribeEvento2(obj,fe);  
}


function eliminarElemento(id){
	elem = document.getElementById(id);
	padre = elem.parentNode;
	padre.removeChild(elem);
}


function enlaceListarMes(){
	try{
		eval(meses[mes].toLowerCase())
	}
	catch(error){
		return false
	}
	var verTodos = document.createElement('strong')
	verTodos.style.cursor = 'pointer'
	verTodos.style.display = 'block'
	verTodos.appendChild(document.createTextNode(textoVerTodos))
	verTodos.onclick = escribirEventosMes
	document.getElementById('tunCuadroTexto').appendChild(verTodos)
	
}

function escribeFecha(fecha){
	lNodos = document.getElementById('tunCuadroTexto').childNodes.length
	if(lNodos){
		for(var m = 0; m < lNodos; m++){
			document.getElementById('tunCuadroTexto').removeChild(document.getElementById('tunCuadroTexto').childNodes[0])
		}
	}
	var fe = document.createElement('strong')
	fe.appendChild(document.createTextNode(formatoFecha(fecha)))
	document.getElementById('tunCuadroTexto').appendChild(fe)
}

function formatoDiaMes(v){
	v = v < 10 ? '0' + v : v ;
	return v
}

function formatoFecha(fecha){ 
	if(fecha.toString().length == 8){
		var an = fecha.toString().substring(0,4)
		var me = fecha.toString().substring(4,6)
		var di = fecha.toString().substring(6,8)
	}
	else{
		if(fecha.toString().length == 6){
			var an = fecha.toString().substring(0,4)
			var me = fecha.toString().substring(4,6)
			var di = ''
		}
		else{
			var an = ''
			var me = fecha.toString().substring(0,2)
			var di = fecha.toString().substring(2,4)
		}
	}
	me = eval(me)
	me = meses[me-1]
	return di + " " + me + " " + an
}

function cambiarMes(val){
	var _anio = document.getElementById('tunAnio').value
	var _mes = document.getElementById('tunMes').options[document.getElementById('tunMes').selectedIndex].value
	var _dia = 1;
	eval('_mes' + val + val)
	_mes = _mes < 0 && val == '-' ? 11 : _mes
	_mes = _mes > 11 && val == '+' ? 0 : _mes
	if(eval(_mes) == 0 && val == '+') _anio++
	if(eval(_mes) == 11 && val == '-') _anio--
	document.getElementById('tunMes').options[_mes].selected = true
	document.getElementById('tunAnio').value = _anio
	mes = _mes
	anio = _anio
	borra();
	gHoy = 0;
	tunCalendario()
	escribeFecha(_anio.toString() + formatoDiaMes(_mes + 1)); enlaceListarMes()
}

function escribirEventosMes(){
	escribeFecha(anio.toString() + formatoDiaMes((mes + 1).toString()))
	escribeEvento2(eval(meses[mes].toLowerCase()), true)
}

function escribeControles(){
	var idioma = dameIdioma();
	if (idioma=='gl'){
		meses = new Array('Xaneiro','Febreiro','Marzo','Abril','Maio','Xu\u00F1o','Xullo','Agosto','Setembro','Outubro','Novembro','Decembro')
	}
	else{
		meses = new Array('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre')
	}
	var obj = document.getElementById('controles1');
	var comboCategoria = document.createElement("select");
/*//	comboCategoria.className = "selectores"
	comboCategoria.id= "categoria"
/*	combo.onchange = function (){
		categ= this.selectedIndex		
	}*/
/*	for(var p in categorias){
		opt = document.createElement('option')
		opt.value = p
		opt.appendChild(document.createTextNode(categorias[p]))
		comboCategoria.appendChild(opt)
	}
	obj.appendChild(comboCategoria)	
	
	var sp = document.createElement('span')
	sp.className = "cambiaMes"
	sp.id = "flechaIzq"
	sp.onclick = function() {cambiarMes('-')}
	sp.appendChild(document.createTextNode('<'))
	obj.appendChild(sp) */
	
	var sel = document.createElement('select')
	sel.className = 'selectores'
	sel.id = 'tunMes'
	sel.onchange = function(){
		mes = this.selectedIndex; borra(); tunCalendario()
	}
	for(var p in meses){
		opt = document.createElement('option')
		opt.value = p
		opt.appendChild(document.createTextNode(meses[p]))
		sel.appendChild(opt)
	}
	obj.appendChild(sel);
		
	var selAnio = document.createElement('select');
	selAnio.id = 'tunAnio';
	selAnio.className = 'selectores';
	selAnio.onchange = function(){
		anio= this.selectedIndex; borra(); tunCalendario();
	}
	for (i=-1; i<2 ; i++){ 
		opt = document.createElement('option');
		opt.value = anio + i;
		if (i==0) {opt.selected= 'true';}
		opt.appendChild(document.createTextNode(anio+i));	
		selAnio.appendChild(opt);
	}		
	obj.appendChild(selAnio);
	
/*	
a�o como estaba originalmente, un campo de texto 
	var campo = document.createElement('input')
	campo.type = 'text'
	campo.id = 'tunAnio'
	campo.className = "selectores"
	campo.maxlength = "4" 
	campo.size = 4
	campo.onblur = function(){
		if(!isNaN(this.value)){anio=this.value;borra();tunCalendario()}
	}	
	obj.appendChild(campo)
	*/
	/* cambia sig mes con flecha
	var sp = document.createElement('span')
	sp.className = "cambiaMes" 
	sp.id = "flechaDer"
	sp.onclick = function() {cambiarMes('+')}
	sp.appendChild(document.createTextNode('>'))
	obj.appendChild(sp)
	carga = true*/
	

}
