// Declaración de tablas con constantes e inicialización de variables

var tabla_meses_nominativo = new Array ("IANVARIVS","FEBRVARIVS","MARTIVS","APRILIS","MAIVS","IVNIVS","QVINTILIS","SEXTILIS","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER","IANVARIVS")

var tabla_meses_acusativo_plural = new Array ("IANVARIAS","FEBRVARIAS","MARTIAS","APRILES","MAIAS","IVNIAS","QVINTILES","SEXTILES","SEPTEMBRES","OCTOBRES","NOVEMBRES","DECEMBRES","IANVARIAS")

var tabla_meses_ablativo_plural = new Array ("IANVARIIS","FEBRVARIIS","MARTIIS","APRILIBVS","MAIIS","IVNIIS","QVINTILIBVS","SEXTILIBVS","SEPTEMBRIBVS","OCTOBRIBVS","NOVEMBRIBVS","DECEMBRIBVS","IANVARIIS")

var numero_romano = new Array ("","I","II","III","IIII","V","VI","VII","VIII","VIIII","X","XI","XII","XIII","XIIII","XV","XVI","XVII","XVIII","XVIIII")

var tipo_mes = 0
var dias_mes = 0
var texto_dia = ""
var numero_arabe = 0
var bisiesto = "NO"

// Obtención de fecha , año y mes para cálculo de año romano
 
var hoy  = new Date()
var any = hoy.getFullYear()
var mesr = hoy.getMonth()+1

// Cálculo de tipo de año (bisiesto o no) 

var cociente = any/4
var entero = Math.round(cociente)

if (cociente == entero)	{ 
	bisiesto = "SI"
}

// Parche para corregir el año obtenido cuando la página se abra con un navegador tipo firefox o googlechrome
if (any < 1000) {
   any = any + 1900
}
// Fin Parche


// Adición de fundación de Roma

any = any + 753

// Si estamos en enero o febrero se resta 1 al año porque el año romano empieza en marzo

switch (mesr) {
case (mesr = 1):
case (mesr = 2):
 	any = any - 1;
	break
} 

// Conversión estática del año a formato romano

switch (any) {
case (any = 2760):
  any = "MMDCCLX";
	break
case (any = 2761):
  any = "MMDCCLXI";
	break
case (any = 2762):
  any = "MMDCCLXII";
  break
case (any = 2763):
  any = "MMDCCLXIII";
  break
case (any = 2764):
  any = "MMDCCLXIIII";
  break
case (any = 2765):
  any = "MMDCCLXV";
  break
case (any = 2766):
  any = "MMDCCLXVI";
  break
case (any = 2767):
  any = "MMDCCLXVII";
  break
case (any = 2768):
  any = "MMDCCLXVIII";
  break
case (any = 2769):
  any = "MMDCCLXVIIII";
  break
} 

// Cálculo de mes actual, mes siguiente, tipo de mes actual y días del mes actual

var mes = hoy.getMonth()+1
var dia = hoy.getDate()

mes_actual_nominativo = tabla_meses_nominativo[hoy.getMonth()]
mes_actual_acusativo  = tabla_meses_acusativo_plural[hoy.getMonth()]
mes_actual_ablativo   = tabla_meses_ablativo_plural[hoy.getMonth()]

mes_siguiente_nominativo = tabla_meses_nominativo[hoy.getMonth()+1]  
mes_siguiente_acusativo  = tabla_meses_acusativo_plural[hoy.getMonth()+1]
mes_siguiente_ablativo   = tabla_meses_ablativo_plural[hoy.getMonth()+1]

switch (mes) {
case 3:
case 5:
case 7:
case 10:
 	tipo_mes = 1
 	dias_mes = 31;
	break;

case 1:
case 8:
case 12:
	tipo_mes = 2
	dias_mes = 31;
	break;

case 4:
case 6:
case 9:
case 11:
	tipo_mes = 2
	dias_mes = 30;
	break;

case 2:
	tipo_mes = 2
	
	switch (bisiesto) {
	case "NO":
		dias_mes = 28;
		break;
	case "SI":
		dias_mes = 29;
		break;
	};
	break;	
} 

// Cálculo de fecha completa para tipo de mes 1: Nonas día 7, Idus día 15
	
if ((tipo_mes == 1)) { 
	switch (dia) {
	case 1: 
		texto_dia = "KALENDIS " + mes_actual_ablativo;
		break;

	case 2: case 3: case 4: case 5:
		numero_arabe = (8 - dia)
		texto_dia = "A.D. " + numero_romano[numero_arabe] + " NONAS " + mes_actual_acusativo;
		break;

	case 6:
		texto_dia = "PRIDIE NONAS " + mes_actual_acusativo;
		break;

	case 7: 
		texto_dia = "NONIS " + mes_actual_ablativo;
		break;

	case 8: case 9: case 10: case 11: case 12: case 13:
		numero_arabe = (16 - dia),
		texto_dia = "A.D. " + numero_romano[numero_arabe] + " IDVS " + mes_actual_acusativo;
		break;

	case 14:
		texto_dia = "PRIDIE IDVS " + mes_actual_acusativo;
		break;

	case 15:
		texto_dia = "IDIBVS " + mes_actual_ablativo;
		break;

	case 31:
		texto_dia = "PRIDIE KALENDIS " + mes_siguiente_acusativo;
		break;

	default:
		numero_arabe = (33 - dia)
		texto_dia = "A.D. " + numero_romano[numero_arabe] + " KALENDIS " + mes_siguiente_acusativo;
		break;
	}
} 

// Cálculo de fecha completa para tipo de mes 2: Nonas día 5, Idus día 13	
	
if ((tipo_mes == 2)) { 
	switch (dia) {
	case 1: 
		texto_dia = "KALENDIS " + mes_actual_ablativo;
		break;

	case 2: case 3:
		numero_arabe = (6 - dia)
		texto_dia = "A.D. " + numero_romano[numero_arabe] + " NONAS " + mes_actual_acusativo;
		break;

	case 4:
		texto_dia = "PRIDIE NONAS " + mes_actual_acusativo;
		break;

	case 5: 
		texto_dia = "NONIS " + mes_actual_ablativo;
		break;

	case 6: case 7: case 8: case 9: case 10: case 11:
		numero_arabe = (14 - dia),
		texto_dia = "A.D. " + numero_romano[numero_arabe] + " IDVS " + mes_actual_acusativo;
		break;

	case 12:
		texto_dia = "PRIDIE IDVS " + mes_actual_acusativo;
		break;

	case 13:
		texto_dia = "IDIBVS " + mes_actual_ablativo;
		break;

	default:
		if ((dia == dias_mes)) {
			texto_dia = "PRIDIE KALENDIS " + mes_siguiente_acusativo
		}
		else {
			numero_arabe = (dias_mes + 2 - dia)
			texto_dia = "A.D. " + numero_romano[numero_arabe] + " KALENDIS " + mes_siguiente_acusativo
		}; 
		break;
	}
} 	
	
// Escribe la fecha de hoy en formato Romano
document.write(texto_dia + " " + any + " A.V.C.")

