// Creacion de una libreria para generar calendarios
// mediante JavaScript
// Autores: Juan Antonio Jimenez
// Fecha: 2001 12 11


// Inicialización de Variables	
	Ancho = 195;						//ancho de la tabla

	Fondo 			= "#FFCC99";		//color de la celda
	FondoFestivo 	= "#FEBF7D";		//color de la celda en día festivo
	FondoTitulo 	= "#003366";		//color de fondo para el título
	FondoDiasSemana = "#DB9000";		//color de fondo para los días de la semana
	
	colorLinea 		= "#FFFFFF";		//color de la linea entre las celdas
	
	cp = 1;								// cellpadding
	cs = 1;								// cellspacing

	Meses = new Array;
		Meses[0]  = "Enero";
		Meses[1]  = "Febrero";
		Meses[2]  = "Marzo";
		Meses[3]  = "Abril";
		Meses[4]  = "Mayo";
		Meses[5]  = "Junio";
		Meses[6]  = "Julio";
		Meses[7]  = "Agosto";
		Meses[8]  = "Septiembre";
		Meses[9]  = "Octubre";
		Meses[10] = "Noviembre";
		Meses[11] = "Diciembre";
	
	DiasSemana = new Array ("L","M","M","J","V","S","D");
	DiasMes = new Array(31,esBisiesto(),31,30,31,30,31,31,30,31,30,31);
	Eventos 	= new Array ();

	var hoy;
	var fecha;
	var dia;
	var diaSemana;
	var mes;
	var anno;

function obtenerFechaActual(){
	hoy = new Date();
	fecha = new Date();
	dividirFecha(hoy);
}

function dividirFecha(fecha){
	diaSemana = fecha.getDay();
	dia = fecha.getDate();
	mes = fecha.getMonth();
	anno = fecha.getFullYear();
}

function mesAnterior(){
	if(mes!=0)
		fecha.setDate(fecha.getDate()-DiasMes[mes-1]);
	else{
		mes = 11;
		fecha.setDate(fecha.getDate()-DiasMes[mes]);
	}
	dividirFecha(fecha);
	escribirCalendario()
}

function mesSiguiente(){
	if(mes!=11)
		fecha.setDate(fecha.getDate()+DiasMes[mes+1]);
	else{
		mes = 0;
		fecha.setDate(fecha.getDate()+DiasMes[mes]);
	}
	dividirFecha(fecha);
	escribirCalendario()
}

function mesActual(){
	obtenerFechaActual();
	escribirCalendario()
}

function esBisiesto(){
	numDias = 0;

	if (anno%4 == 0)
		numDias = 29;	//Si es bisiesto Febrero tiene 29 dias
	else
		numDias = 28;

	return numDias;
}

function esHoy(iAux){
	if ( (iAux == dia)&&(mes == hoy.getMonth())&&(anno == hoy.getFullYear()) )
		return true;
	else
		return false;
}

function escribirCalendario(){
	
	DiasMes[1] = esBisiesto();
	
	stTexto = "";
	stTexto += "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n";
	stTexto += "<tr>\n";
	stTexto += "	<td bgcolor=\"" + colorLinea + "\" colspan=\"2\">\n";
	stTexto += "		<table cellpadding=\"" + cp +"\" cellspacing=\"" + cs + "\" border=\"0\" width=\"" + Ancho + "\">\n";
	stTexto += "		<tr>\n";
	stTexto += "			<td colspan=\"7\" bgcolor=\"" + FondoTitulo + "\" class=\"titulo\" align=\"center\"><b>" + Meses[mes].toUpperCase() + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + anno + "</b></td>\n";
	stTexto += "		</tr>\n";
	stTexto += "		<tr>\n";

	for(i=0;i<7;i++){
		stTexto += ("<td bgcolor=\"" + FondoDiasSemana + "\" class=\"txt\" align=\"center\"><b>&nbsp;" + DiasSemana[i] + "&nbsp;</b></td>");
	}
			
	
	stTexto += "";			
	stTexto += "		</tr>\n";

	aux = (dia - diaSemana + 1)%7
	//aux es el primer lunes del calendario
	
	if (aux > 1) {
		aux = aux - 7;				
		//aux es la primera casilla del calendario. 
		//Suele tener valor negativo
	}

	nS = Math.ceil((DiasMes[mes] - aux + 1)/7);
	//numero de semanas que va a ocupar ese mes
	
	// construye el calendario
	//   el 1er for genera las filas (semanas)
	//   y el 2o for escribe cada día de la semana para esa semana
	for (var numSemana = 0; numSemana < nS; numSemana++){
		stTexto +=("<tr>");
		for (i=0; i<7 ; i++){

			if (i > 4) {
				// es fin de semana
				fondo = FondoFestivo;
				clase = "txtFestivo";
			} else {
				// es dia laborable
				fondo = Fondo;
				clase = "txt";
			}

			iAux = aux + i + numSemana*7;
			if (iAux < 1){	// escribimos celdas vacias porque el dia 1 aun no ha llegado
				stTexto +=("<td align=\"center\" bgcolor=\"" + fondo +"\" class=\"" + clase +"\">&nbsp;</td>");
			}else if (iAux < DiasMes[mes] + 1 ){
				if (esHoy(iAux) && hayEvento(iAux)!=-1){
					stTexto +=("<td align=\"center\" bgcolor=\"" + Eventos[hayEvento(iAux)][3] +"\" class=\"" + clase +"\"<b>" + iAux + "</b></td>");
				}else if (esHoy(iAux)){	// ponemos el dia en negrita si coincide con la fecha que le hemos pasado a la funcion
					stTexto +=("<td align=\"center\" bgcolor=\"" + fondo +"\" class=\"" + clase +"\"><b>" + iAux + "</b></td>");				
				}else if (hayEvento(iAux)!=-1){
					stTexto +=("<td align=\"center\" bgcolor=\"" + Eventos[hayEvento(iAux)][3] +"\" class=\"" + clase +"\">" + iAux + "</td>");
				}else{
					stTexto +=("<td align=\"center\" bgcolor=\"" + fondo +"\" class=\"" + clase +"\">" + iAux + "</td>");
				}
			}else{	// terminamos de rellenar la tabla con celdas vacias
				stTexto +=("<td align=\"center\" bgcolor=\"" + fondo +"\" class=\"" + clase +"\">&nbsp;</td>");
			}
		}
		
		stTexto +=("</tr>");
	}
	
	stTexto += "";			
	stTexto += "		</tr>\n";
	stTexto += "		</table>\n";
	stTexto += "	</td>\n";
	stTexto += "</tr>\n";

	stTexto2 = "";
	stTexto2 += listarEventos(stTexto);

	stTexto2 += "</table>\n";
	changeText(stTexto2);
}

function hayEvento(iAux){
	var evento = -1;

	for ( var i = 0; i < Eventos.length; i++ )
	{
		for ( var j = 0; j < Eventos[i].length; j++ )
		{
			if ( (anno == Eventos[i][2]) && (mes == (Eventos[i][1]-1)) &&  (iAux == Eventos[i][0])){
				evento = i;
				break;
			}
			else{
				break;
			}
		}	
	}
	return evento;
}

function listarEventos(texto){
	var hayEventos = false;
	var diaEvento = "";
	var nombreEvento = "";
	
	for (var i=1; i<=31 ; i++){
		if (hayEvento(i)!=-1){
			hayEventos = true;
			diaEvento = Eventos[hayEvento(i)][0];
			colorEvento = Eventos[hayEvento(i)][3];
			nombreEvento = Eventos[hayEvento(i)][4];

				texto += "<table width=\"195\" cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\n";
				texto += "<tr>\n";
				texto += "	<td align='center' class=\"txt\" bgcolor=\"" + colorEvento +"\">";
				texto += "&nbsp;"+diaEvento +"&nbsp;\n";
				texto += "	</td>\n";
				texto += "	<td class=\"txt\">";
				texto += 		"&nbsp;"+nombreEvento;
				texto += "	</td>\n";
				texto += "</tr>\n";
				texto += "</table>\n";
		}
	}

	if(hayEventos==false){
		texto += "<tr>\n";
		texto += "	<td class=\"txt\">";
		texto += "	&nbsp;&nbsp;\n";
		texto += "	</td>\n";
		texto += "	<td class=\"txt\" align=\"center\">\n";
		texto += 		"No hay Eventos este mes."+"\n";
		texto += "	</td>\n";
		texto += "</tr>\n";
	}

	return texto;
}

//////////////////////////////////////////////////////////////////////////
//VALIDACION DEL NAVEGADOR
//////////////////////////////////////////////////////////////////////////
var iens6=document.all||document.getElementById
var ns4=document.layers


//////////////////////////////////////////////////////////////////////////
//ESCRIBE EL CONTENIDO DEL ARCHIVO HTML EN EL AREA ESPECIFICADA
//////////////////////////////////////////////////////////////////////////
function changeText(text)
{
	changeTextInit()
	if(iens6 || ns4) {
		oMessage1.writeIt(text)
	}
}

function changeTextInit()
{
	if(iens6 || ns4) {
		oMessage1=new makeChangeTextObj('contenido')
	}
}

function makeChangeTextObj(obj){											
   	this.writeref=(ns4) ? eval('document.'+obj+'.document'):eval(document.getElementById(obj));
	this.writeIt=b_writeIt;	
}

function b_writeIt(text)
{
	if(ns4){
		this.writeref.write(text)
		this.writeref.close()
	}
	if(iens6){
	this.writeref.innerHTML=text
	}
}

