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>