/* auteur: Cosmos */
/* Date de création: 03-11-16 */
// SOURCE = http://www.24hourtranslations.co.uk/dates.htm
// copyright 2002 24 Hour Translations. You may ask for permission to use this script (or a modified version)
// by contacting the webmaster at webmaster@24hourtranslations.co.uk with details of the site it is to be placed on.

function SetSystemDate(){
	var today=new Date();
	var day=today.getDate();
	var month=today.getMonth()+1;
	var year=today.getFullYear();
	SetGregDate(day,month,year); 
	var julian=new Array(0,0,0);
	julian=ConvertToJulian(day,month,year);
	SetJulianDate(julian[0],julian[1],julian[2]);
	SetRomanDate(julian[0],julian[1],julian[2]);
	SetLatinDate(julian[0],julian[1],julian[2]);
	SetDayOfWeek(day,month,year,1);
}
function SetGregDate(day,month,year){	
	if (year<1) { year=1-year; document.converter.gregyeartype.selectedIndex=0; }
	else { document.converter.gregyeartype.selectedIndex=1; }
	document.converter.gregnum.selectedIndex=day-1;	
	document.converter.gregmonth.selectedIndex=month-1;	
	document.converter.gregyear.value=year;	
}
function SetJulianDate(day,month,year){	
	if (year<1) { year=1-year; document.converter.julyeartype.selectedIndex=0; }
	else { document.converter.julyeartype.selectedIndex=1; }
	document.converter.julnum.selectedIndex=day-1;	
	document.converter.julmonth.selectedIndex=month-1;	
	document.converter.julyear.value=year;	
}
function SetRomanDate(day,month,year){
	var monthidf=new   Array(1,4,5,6,7,8,9,10,11,12,13,14,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33); // 28 day m
	var monthidfl=new  Array(1,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33); // 29 day feb
	var monthid13=new  Array(1,4,5,6,7,8,9,10,11,12,13,14,15,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33); // 30 day m
	var monthid13a=new Array(1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33); // 31 day m
	var monthid15=new  Array(1,2,3,4,5,6,7,8 ,9 ,10,11,12,13,14,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33); // 31 day m (3,5,7,10) id=15th 

	if ((month==3)||(month==5)||(month==7)||(month==10)){ // id=15th
		document.converter.romannum.selectedIndex=monthid15[day-1]-1;	
		if (day<16) document.converter.romanmonth.selectedIndex=month-1;
		else 	if (month==12) document.converter.romanmonth.selectedIndex=0;
			else document.converter.romanmonth.selectedIndex=month;
	} else if ( (month==1) || (month==8) || (month==12) ){ // id=13th 31day
		document.converter.romannum.selectedIndex=monthid13a[day-1]-1;	
		if (day<14) document.converter.romanmonth.selectedIndex=month-1;
		else 	if (month==12) document.converter.romanmonth.selectedIndex=0;
			else document.converter.romanmonth.selectedIndex=month;
	} else if (month==2) {	// feb 
		if (isJulLeap(year)==1) document.converter.romannum.selectedIndex=monthidfl[day-1]-1;	
		else document.converter.romannum.selectedIndex=monthidf[day-1]-1;	
		if (day<14) document.converter.romanmonth.selectedIndex=month-1;
		else 	if (month==12) document.converter.romanmonth.selectedIndex=0;
			else document.converter.romanmonth.selectedIndex=month;
	} else { // idus=13th, 30day
		document.converter.romannum.selectedIndex=monthid13[day-1]-1;	
		if (day<14) document.converter.romanmonth.selectedIndex=month-1;
		else 	if (month==12) document.converter.romanmonth.selectedIndex=0;
			else document.converter.romanmonth.selectedIndex=month;
	}
	if (year<1) year--;
	year=YearToAUC(year);
	year=YearToRoman(year);
	document.converter.romanyear.value=year;		
}
function SetLatinDate(day,month,year){
	if (year<1) { year=1-year; document.converter.latinyeartype.selectedIndex=0; }
	else { document.converter.latinyeartype.selectedIndex=1; }
	document.converter.latinnum.selectedIndex=day-1;	
	document.converter.latinmonth.selectedIndex=month-1;	
	var romanyear=YearToRoman(year);
	document.converter.latinyear.value=romanyear;		
}
function SetDayOfWeek(gregday,gregmonth,gregyear,showjulian){ 
	var dayofweek;
	var jy=gregyear; 
	var jm=gregmonth; 
	var jly; 
	var juldat; 
	if (gregmonth<3) {
		jy=jy-1; 
		jm=jm+12;
	}
	jly=2-Math.floor(jy/100.0)+Math.floor(jy/400.0);
	juldat=1720995.0+Math.floor(365.25*jy)+Math.floor(30.6001*(jm+1))+gregday+jly;
	dayofweek=Math.floor((juldat)%7.0);

	document.converter.gregday.selectedIndex=dayofweek;
	document.converter.julday.selectedIndex=dayofweek;	
	document.converter.romanday.selectedIndex=dayofweek;	
	document.converter.latinday.selectedIndex=dayofweek;	
	if (showjulian==1) document.converter.juliandate.value=juldat;
}
function SetNotes(gregyear,julyear){
	var notes="";
	var gregleap=isGregLeap(gregyear);
	var julleap=isJulLeap(julyear);
	if ((gregleap+julleap)==2) notes="Année grégorienne bissextile et Année Julienne bissextile";
	else {
		if (gregleap==1) notes="Année grégorienne bissextile";
		if (julleap==1) notes="Année Julienne bissextile";
	}
	document.converter.notes.value=notes;
}
function ConvertGregDate(){
	var day=document.converter.gregnum.value-0;
	var month=document.converter.gregmonth.value-0;
	var year=document.converter.gregyear.value-0;
	
	if ( (year+""!=document.converter.gregyear.value+"") || (year<1) || (year>2400) )
		 { document.converter.notes.value="Année grégorienne invalide"; return; }
	if ( (day==31) && ((month==4) || (month==5) || (month==9) || (month==11)) )
		{ document.converter.notes.value="Le jour choisi existe pas"; return; }
	else if ( (month==2) && (day>(28+isGregLeap(year)) ) )
		{ document.converter.notes.value="Le jour choisi existe pas"; return; }
	if (document.converter.gregyeartype.selectedIndex==0) { 
		if (year>753) { document.converter.notes.value="Année grégorienne invalide"; return; }
		year=(-1)*year; year++; 
	}
	var julian=new Array(0,0,0);
	julian=ConvertToJulian(day,month,year);
	SetJulianDate(julian[0],julian[1],julian[2]);
	SetRomanDate(julian[0],julian[1],julian[2]);
	SetLatinDate(julian[0],julian[1],julian[2]);
	SetDayOfWeek(day,month,year,1);
	SetNotes(year,julian[2]);
}
function ConvertJulDate(){
	var day=document.converter.julnum.value-0;
	var month=document.converter.julmonth.value-0;
	var year=parseInt(document.converter.julyear.value);
	if ( (year+""!=document.converter.julyear.value+"") || (year<1) || (year>2400) )
		 { document.converter.notes.value="Année Julienne invalide"; return; }
	if ( (day==31) && ((month==4) || (month==5) || (month==9) || (month==11)) )
		{ document.converter.notes.value="Le jour choisi existe pas"; return; }
	else if ( (month==2) && (day>(28+isJulLeap(year)) ) )
		{ document.converter.notes.value="Le jour choisi existe pas"; return; }
	if (document.converter.julyeartype.selectedIndex==0) { 
		if (year>753) { document.converter.notes.value="Année Julienne invalide"; return; }
		year=(-1)*year; year++; 
	}
	var gregorian=new Array(0,0,0);
	gregorian=ConvertToGregorian(day,month,year);
	SetGregDate(gregorian[0],gregorian[1],gregorian[2]);
	SetRomanDate(day,month,year);
	SetLatinDate(day,month,year);
	SetDayOfWeek(gregorian[0],gregorian[1],gregorian[2],1);
	SetNotes(gregorian[2],year);
}
function ConvertLatinDate(method){
	var day=document.converter.latinnum.value-0;
	var month=document.converter.latinmonth.value-0;
	var year=document.converter.latinyear.value;
	year=year+"";
	year=year.toUpperCase();	
	if (method==1) document.converter.latinyear.value=year;
	year=RomanToYear(year);
	if ((year<1) || (year>2400)) { document.converter.notes.value="Année Latine invalide"; return; }
	if ( (day==31) && ((month==4) || (month==5) || (month==9) || (month==11)) )
		{ document.converter.notes.value="Le jour choisi existe pas"; return; }
	else if ( (month==2) && (day>(28+isJulLeap(year)) ) ) 
		{ document.converter.notes.value="Le jour choisi existe pas"; return; }
	if (document.converter.latinyeartype.selectedIndex==0) { 
		if (year>753) { document.converter.notes.value="Année Latine invalide"; return; }
		year=(-1)*year; year++; 
	}
	var gregorian=new Array(0,0,0);
	gregorian=ConvertToGregorian(day,month,year);
	SetGregDate(gregorian[0],gregorian[1],gregorian[2]);
	SetRomanDate(day,month,year);
	SetJulianDate(day,month,year);
	SetDayOfWeek(gregorian[0],gregorian[1],gregorian[2],1);
	SetNotes(gregorian[2],year);
}
function ConvertRomanDate(method){
	var day=document.converter.romannum.value-0;
	var month=document.converter.romanmonth.value-0;
	var year=document.converter.romanyear.value;
	year=year+"";
	year=year.toUpperCase();	
	if (method==1) document.converter.romanyear.value=year;
	year=RomanToYear(year);
	if ( (year==0) || (year>3143) ){ document.converter.notes.value="Année Romaine invalide"; return; }
	year=AUCToYear(year);
	if (year<-753) { document.converter.notes.value="Année Romaine invalide"; return; }
	if (year<0) year++; // add zero to make up for no year between BC and AD
	var monthid13=new  Array(1,0,0,2,3,4,5,6,7,8 ,9 ,10,11,12,13,0, 14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30);
	var monthid13a=new Array(1,0,0,2,3,4,5,6,7,8 ,9 ,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31);
	var monthid15=new  Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0 ,0, 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31);
	if (day>15) {
		month--;
		if (month==0) month=12;
		if ( (month==3)||(month==5)||(month==7)||(month==10) )	day=monthid15[day-1];
		else if ( (month==1) || (month==8) || (month==12) ) day=monthid13a[day-1];
		else day=monthid13[day-1];
		if (day==0) { document.converter.notes.value="Le jour choisi existe pas"; return; }
	} else {
		if ( (month==3)||(month==5)||(month==7)||(month==10) )	day=monthid15[day-1];
		else if ( (month==1) || (month==8) || (month==12) ) day=monthid13a[day-1];
		else day=monthid13[day-1];
		if (day==0) { document.converter.notes.value="Le jour choisi existe pas"; return; }
	}
	var gregorian=ConvertToGregorian(day,month,year);
	SetGregDate(gregorian[0],gregorian[1],gregorian[2]);
	SetJulianDate(day,month,year);
	SetLatinDate(day,month,year);
	SetDayOfWeek(gregorian[0],gregorian[1],gregorian[2],1);
	SetNotes(gregorian[2],year);
}
function ConvertJulianDate(){ 
	var jd=Math.floor(document.converter.juliandate.value);
	if ( (jd>2598007) || (jd<1446656) ) { document.converter.notes.value="Date Julienne invalide"; return; }
	var day,month,year;
	var x=Math.floor( (jd-1867216.25)/36524.25);
	var n1=jd+1+x-Math.floor(x/4.0);
	var n2=n1+1524;
	var n3=Math.floor( (n2-122.1)/365.25 );
	var n4=Math.floor(365.25 * n3);
	var n5=Math.floor((n2-n4)/30.6001);
	day=n2-n4-Math.floor(30.6001*n5);
	if (n5<13.5) month=n5-1;
	else month=n5-13;
	if (month>2.5) year=n3-4716;
	else year=n3-4715;
	SetGregDate(day,month,year);
	var julian=ConvertToJulian(day,month,year);
	julian=ConvertToJulian(day,month,year);
	SetJulianDate(julian[0],julian[1],julian[2]);
	SetRomanDate(julian[0],julian[1],julian[2]);
	SetLatinDate(julian[0],julian[1],julian[2]);
	SetDayOfWeek(day,month,year,0);
	SetNotes(year,julian[2]);
}
function ConvertToJulian(gregday, gregmonth, gregyear){
	var day=gregday;
	var month=gregmonth;
	var year=gregyear;
	var julmonths=new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
	var jl=0; // the leap year tag for feb
	if (isJulLeap(year)==1) julmonths[2]=29;
	var juldays=CalcJulOffset(year,month);
	day=gregday-juldays;
	if (day<1) {
		if (month==1) { year--; month=12; day=julmonths[month]+day; } 
		else { month--; day=julmonths[month]+day; }
	} else if (day>julmonths[month]) {
		if (month==12){ day=day-julmonths[month]; year++; month=1; } 
		else { day=day-julmonths[month]; month++; }
	}
	julmonths[2]=28;
	julian=new Array(day, month, year);
	return julian;
}
function ConvertToGregorian(julday, julmonth, julyear){
	var day=julday;
	var month=julmonth;
	var year=julyear;
	var gregmonths=new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
	gregmonths[2]+=isGregLeap(year);
	var juldays=CalcJulOffset(year,julmonth);
	day=julday+juldays;
	if (day<1) {
		if (month==1) { year--; month=12; day=gregmonths[month]+day; } 
			      else { month--; day=gregmonths[month]+day;	}
	} else if (day>gregmonths[month]) {
		if (month==12){ day=day-gregmonths[month]; year++; month=1; } 
			 else { day=day-gregmonths[month]; month++; }
	}
	gregmonths[2]=28;
	gregorian=new Array(day, month, year);
	return gregorian;
}
function ConvertDate(datetype){
	return;
}
function isGregLeap(year){
	var isleap=0;
	if (year%4==0) isleap=1;
	if (year%100==0) isleap=0;
	if (year%400==0) isleap=1;
	return isleap;
}
function isJulLeap(year){
	if (year>7) { if (year%4==0) return 1; else return 0;}
	if (year > -47) {
		if ( (year==-44) || (year==-41) || (year==-38) || (year==-35) || (year==-32) || (year==-29) ||
			(year==-26) || (year==-23) || (year==-20) || (year==-17) || (year==-14) ||
			(year==-11) || (year==-8) ) return 1;
		else return 0;
	}
	if (year%4==0) return 1; else return 0;
	return -1;
}	
function YearToAUC(year) {
	if (year<-753) return 0;
	if (year>0) return year+753;
	if (year<0) return 754+year;
	if (year==0) return 0;
}
function AUCToYear(aucyear) {
	if (aucyear<1) return 0;
	if (aucyear<754) return aucyear-754;
	return aucyear-753;
}
function RomanToYear(numeral){
	var array_thousands=new Array("","M","MM","MMM");
	var array_hundreds=new Array("","C","CC","CCC","CD","D","DC","DCC","DCCC","CM");
	var array_tens=new Array("","X","XX","XXX","XL","L","LX","LXX","LXXX","XC");
	var array_ones=new Array("","I","II","III","IV","V","VI","VII","VIII","IX");
	var ones=0;
	var tens=0;
	var hundreds=0;
	var thousands=0;
	var current=0;
	var width=0;
	var number=0;
	for (number=1; number<4; number++){
		if (numeral.indexOf(array_thousands[number],current)==0){
			thousands=number;
			width=array_thousands[number].length;
		}
	}
	current=current+width;
	width=0;
	for (number=1; number<10; number++){
		if (numeral.indexOf(array_hundreds[number],current)==current){
			hundreds=number;
			width=array_hundreds[number].length;
		}
	}
	current=current+width;
	width=0;
	for (number=1; number<10; number++){
		if (numeral.indexOf(array_tens[number],current)==current){
			tens=number;
			width=array_tens[number].length;
		}
	}
	current=current+width;
	width=0;
	for (number=1; number<10; number++){
		if (numeral.indexOf(array_ones[number],current)==current){
			ones=number;
			width=array_ones[number].length;
		}
	}
	current=current+width;
	if (current!=numeral.length) return 0;
	return thousands*1000+hundreds*100+tens*10+ones;;	
}
function YearToRoman(number) {
	if (!(number<3900) || !(number>0)) return false;
	var array_thousands=new Array("","M","MM","MMM");
	var array_hundreds=new Array("","C","CC","CCC","CD","D","DC","DCC","DCCC","CM");
	var array_tens=new Array("","X","XX","XXX","XL","L","LX","LXX","LXXX","XC");
	var array_ones=new Array("","I","II","III","IV","V","VI","VII","VIII","IX");
	var ones=0;
	var tens=0;
	var hundreds=0;
	var thousands=0;
	ones=number%10;
	tens=number%100-ones;
	hundreds=number%1000-(tens+ones);
	thousands=number-(hundreds+tens+ones);
	tens=Math.floor(tens/10.0);
	hundreds=Math.floor(hundreds/100.0);
	thousands=Math.floor(thousands/1000.0);
	return array_thousands[thousands]+array_hundreds[hundreds]+array_tens[tens]+array_ones[ones];
}
function CalcJulOffset(jyear,month) {
	if (month<3) jyear--;
	var ly=Math.floor(jyear/100.0);
	var ly2=Math.floor(jyear/400.0);
	return 10.0+ly-ly2-12;
}