
//---------------------------------------------------------------------------------------------
//Funciones para el calendario
//---------------------------------------------------------------------------------------------
var losMeses = new Array ("Enero","Febrero","Marzo","Abril","Mayo","Junio",
			"Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
var losDias  = new Array (31,28,31,30,31,30,31,31,30,31,30,31);
var losDiasDeLaSemana = new Array("Domingo","Lunes","Martes",
			"Miércoles","Jueves","Viernes","Sabado");
var diasSemana  = new Array ('L','M','X','J','V','S','D');
var firstDayMonday = 1;
var hoy = new Date();
var diaHoy = hoy.getDate();
var mesHoy = hoy.getMonth()+1;
var anhoHoy = hoy.getYear();
if (anhoHoy<1900) {
	anhoHoy+=1900;
}



/*****************************************************************************/
function calcularDiaSemana(dia,mes,anho){
	var dias=365*(anho-1);
	var i;
	var deSemana;
	for (i=0;i<(mes-1);i++){
		dias+=losDias[i];
	}
	dias+=dia-1;
	dias+=(Math.floor((anho-1)/4));
	if((mes>2) && ((anho%4)==0)){
		dias++;
	}
	deSemana=dias % 7;
	if(firstDayMonday){
		if(deSemana==0){
			deSemana=6;
		}else{
			deSemana--;
		}
	}
	return diasSemana[deSemana];
}


/*****************************************************************************/
function mostrarDia(dia,mes,anho,esFiesta,dias_marcados,url_base){
	var celdaDia;
	var cell_text;
	var i;

	// preparar el texo de la celda
	cell_text=""+dia+"";
	for(i=0;i<dias_marcados.length;i++){
		if(	dias_marcados[i]==dia){
			cell_text="<b><a href=\""+url_base+"&dia="+
				dia+"&mes="+mes+"&anho="+anho+"\">"
				+dia+"</a></b>";
		}
	}


	// Poner la celda
	if ((anho>anhoHoy) || ((anho==anhoHoy) && (mes>mesHoy)) ||
		((anho==anhoHoy) && (mes==mesHoy) && (dia>=diaHoy)))
	{
		if((dia==diaHoy) && (mes==mesHoy) && (anho==anhoHoy)){
			// Hoy
			celdaDia = "<td class=\"dia_hoy\">"+cell_text+"</td>";
		}else{
		    if (esFiesta){
				// Festivos
				celdaDia = "<td class=\"dia_fiesta\">"+cell_text+"</td>";
			}else{
				// Normales
				celdaDia = "<td class=\"dia_normal\">"+cell_text+"</td>";
			}
		}
	}else{
		// Pasado
		celdaDia = "<td class=\"dia_pasado\">"+cell_text+"</td>";
	}
	return celdaDia;
}


/*****************************************************************************/
function generarCalendarioMes(campo,mes,anho,url_base){
	var dias=losDias[mes-1];
	var i,j;
	var calendarioMes="";
	var dias_marcados=new Array();

	// Calular el primer dia
	diaUno=calcularDiaSemana(1,mes,anho);

	// limitar las fechas a las del mes actual
	for(i=0;i<fechas.length;i++){
		if((anho==fechas[i][0]) && (mes==fechas[i][1])){
			dias_marcados.push(fechas[i][2]);
		}
	}


	// Cabecera de tabla
	calendarioMes=calendarioMes+"<table border='0'><tr>"

	// Determinar mes y anho anterior y siguiente
	var mesAnt_nmes,mesAnt_nanho,mesSig_nmes,mesSig_nanho;
	if (mes==12){
		mesSig_nmes=1;
		mesSig_nanho=anho+1;
	}else{
		mesSig_nmes=mes+1;
		mesSig_nanho=anho;
	}
	if (mes==1){
		mesAnt_nmes=12;
		mesAnt_nanho=anho-1;
	}else{
		mesAnt_nmes=mes-1;
		mesAnt_nanho=anho;
	}


	// Anterior Mes
	calendarioMes+= "<td class=\"MesAnterior\" onClick=\"mostrarCalendario('"+
		campo+"',"+mesAnt_nmes+","+mesAnt_nanho+",'"+url_base+"')\"><span>&lt;</span></td>";

	// Mes y Anho
	calendarioMes+= "<td class=\"MesAnho\" colspan='5'>"+
		losMeses[mes-1]+"&nbsp;"+anho+"</td>";

	// Siguiente Mes
	calendarioMes+="<td class=\"MesSiguiente\" onClick=\"mostrarCalendario('"+
		campo+"',"+mesSig_nmes+","+mesSig_nanho+",'"+url_base+"')\"><span>&gt;</span></td>";

	// Fin de la primera fila
	calendarioMes+="<tr>";

	// Nombres de los dias abrebiados
	for (i=0;i<7;i++){
		if (firstDayMonday==1){
			calendarioMes=calendarioMes+ "<td class='nombre_dia'>"+
				diasSemana[i]+"</td>";
		}else{
			calendarioMes=calendarioMes+ "<td class='nombre_dia'>"+
				diasSemana[(6+i)%7]+"</td>";
		}
	}

	// Fin y comienzo de fila
	calendarioMes+="</tr><tr>";


	//rellenamos hasta el primer dia de Mes a guiones
	for (i=0;diasSemana[i]!=diaUno;i++){
		calendarioMes+="<td class=\"dia_no\"></td>";
	}
	dias_del_mes = losDias[mes-1];

	// Dias Bisiestos
	if ((mes==2) && (anho % 4==0)){
		dias_del_mes++;
	}

	// Iterar dias de las semanas (N de Kable)
	for (j=i,i=1;i<=dias_del_mes;){
		for (;j<7 && i<=dias_del_mes;j++,i++){
			if (j==6){
				// Domingos
				calendarioMes+=mostrarDia(i,mes,anho,1,dias_marcados,url_base);
			}else{
				// "Normales"
				calendarioMes+=mostrarDia(i,mes,anho,0,dias_marcados,url_base);
			}
		}
		if (j==7){
				calendarioMes+=("</tr><tr>");
				j=0;
		}
	}

	// Rellenar con huecos el resto de la ultima semana, y cerrar fila
	if(j>0){
		for (;j<7;j++){
			calendarioMes+="<td class=\"dia_no\">&nbsp;</td>";
		}
	}

	// Pie de tabla y salir
  	calendarioMes+= "</tr></table>"
  	return calendarioMes;
}



/*****************************************************************************/
function mostrarCalendario(campito,mes,anho,url_base){
	if (anho<1900) {
		anho+=1900;
	}
	var calendario=document.getElementById(campito);
	calendario.innerHTML = generarCalendarioMes(campito,mes,anho,url_base);
}


/*****************************************************************************/
// Punto de entrada
function mainCalendario(campo,url_base){
	mostrarCalendario(campo,mesHoy,anhoHoy,url_base);
}


