Código:
<SCRIPT LANGUAGE="JavaScript">
var fuente_numeros=6; //Tamaño de la fuente
var color_fondo="blue"; //Color de fondo del calendario
var color_texto_normal="white"; //Color del texto del calendario
var color_dia_fiesta="red"; //Color de los días festivos
var meses=new Array ("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio",
"Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
var dias=new Array("Lun", "Mar", "Mie", "Jue", "Vie", "Sab", "Dom");
var nueva_ventana; //Ventana sobre la que se escribe el calendario
var mes_actual; //Mes actual del calendario
var ano_actual; //Año actual del calendario
//Funcion que transforma el dia de la semana para que el 0 sea el lunes y
//el 6 el domingo
function actualiza_dia_semana(dia){
if (dia > 0)
return dia-1;
else
return 6;
}
//Devuelve el numero de dias que tiene un mes sabiendo que Enero es mes 0,
//Febrero el 1, etc., y teniendo en cuenta los años bisiestos
function numero_de_dias(mes,ano){
if (mes==3 || mes==5 || mes==8 || mes==10)
return 30;
else if ((mes==1) && es_bisiesto(ano))
return 29;
else if (mes==1)
return 28;
else return 31;
}
//Determina si un año es bisiesto
function es_bisiesto(ano){
if (((ano%4==0) && ano%100!=0) || ano%400==0)
return true;
else return false;
}
//Devuelve el color asignado para los festivos(dia==6) o el correspondiente
//con el resto de los dias
function ver_color(dia){
if (dia==6)
return color_dia_fiesta;
else
return color_texto_normal;
}
//Asigna al elemento situado en el documento inicial la fecha seleccionada
//en la ventana de ayuda y cierra esta ventana
function finalizar(dia){
nueva_ventana.close();
window.document.formulario.Fecha.value=dia+"/"+(mes_actual+1)+"/"+ano_actual;
}
//Escribe en la ventana de ayuda el calendario correspondiente con un mes
//de un año determinado
function calendario(mes,ano){
var primer_dia=new Date(ano,mes,1);
var dia_inicial=actualiza_dia_semana(primer_dia.getDay());
var ultimo_dia=numero_de_dias(mes,ano);
with (nueva_ventana)
{
document.open();
document.writeln("<HTML>\n<BODY>\n<CENTER>");
//Escritura de los botones de avance o retroceso del mes o año
document.writeln("<FORM>");
document.writeln("<INPUT TYPE='BUTTON' VALUE='Mes +'"+
"onClick='window.opener.actualizar_calendario(2)'>");
document.writeln("<INPUT TYPE='BUTTON' VALUE='Mes -'"+
"onClick='window.opener.actualizar_calendario(3)'>");
document.writeln("<INPUT TYPE='BUTTON' VALUE='Ano +'"+
"onClick='window.opener.actualizar_calendario(4)'>");
document.writeln("<INPUT TYPE='BUTTON' VALUE='Ano -'"+
"onClick='window.opener.actualizar_calendario(5)'>");
document.writeln("<INPUT TYPE='BUTTON' VALUE='Cerrar'"+
"onClick='self.close()'>");
document.writeln("<FORM>\n<CENTER>");
//escritura de la tabla que representa el calendario
document.writeln ("<TABLE BORDER=2 ALIGN=CENTER>\n<TR>");
//escribir la cabecera que incluye el mes y el año del calendario
document.writeln("<TD ALIGN=CENTER COLSPAN=7 BGCOLOR="+color_fondo+">"+
"<FONT SIZE="+fuente_numeros+" COLOR="+color_texto_normal+"> "+meses[mes]+" "+ano+
"</FONT></TD>\n</TR>");
//escribir la cabecera que indica los dias de la semana
for (var i=0;i<7; i++){
document.writeln("<TD ALIGN=CENTER BGCOLOR="+color_fondo+">"+
"<FONT SIZE=3 COLOR="+color_texto_normal+">"+
dias[i]+"</FONT></TD>");
document.write("</TR>\n<TR>");
//escribir los dias del mes
contador_de_dias=1;
primera=true;
while (contador_de_dias<=ultimo_dia){
for (i=0;i<7;i++)
if ((i<dia_inicial && primera) || contador_de_dias>ultimo_dia)
document.writeln("<TD ALIGN=CENTER><FONT SIZE=" +fuente_numeros+
"COLOR="+color_texto_normal+
"> </FONT></TD>");
else{
var texto=ver_color(i);
document.writeln("<TD ALIGN=CENTER BGCOLOR="+color_fondo+">"+
"<A HREF='javascript:window.opener.finalizar("+contador_de_dias+")'>"+"<FONT SIZE="+
fuente_nuemros+" COLOR="+texto+">"+contador_de_dias+
"</FONT></A></TD>");
contador_de_dias++;
}
primera=false;
document.writeln ("</TR>\n<TR>");
}
document.writeln("</TR>\n</TABLE>\n</HTML>");
document.close();
}
}
// Abre la ventana de ayuda. Actualiza las variables que indican el mes y el año
// actual y escribe el calendario correspondiente con estos ultimos valores
function actualizar_calendario(valor){
nueva_ventana=open("","miventana","height=390,width=320,left=330,top=130,alwaysRaised=yes");
switch (valor){
case 1: //mes y año actuales
var hoy=newDate();
mes_actual=hoy.getMonth();
ano_actual=hoy.getYear();
break;
case 2: //mes siguiente
if ((mes_actual + 1)/12 == 1){
ano_actual++;
mes_actual=0;
}
else
mes_actual++;
break;
case 3: // mes anterior
if ((mes_actual-1)==-1){
ano_actual--:
mes_actual=11;
}
else
mes_actual--;
break;
case 4: // año siguiente
ano_actual++;
break;
case 5: // año anterior
ano_actual--;
break;
}
calendario(mes_actual,ano_actual);
}
</SCRIPT>

