/*  JavaScript French Revolutionary Calendar routines *
 *   Created by Steve Pugh steve@pugh.net             *
 *   Last modified May 5 2000                         */


function LeapYear(year) {
    if ((year/4)   != Math.floor(year/4))   return false;
    if ((year/100) != Math.floor(year/100)) return true;
    if ((year/400) != Math.floor(year/400)) return false;
    if ((year/4000) != Math.floor(year/4000)) return true;    
    return true;
}

function leapYearGreg (year) {
    if ((year/4)   != Math.floor(year/4))   return false;
    if ((year/100) != Math.floor(year/100)) return true;
    if ((year/400) != Math.floor(year/400)) return false;
    return true;
}

function IsNumberString (InString) {
	if (InString.length == 0) return (false);
	var RefString = "1234567890";
	for (count = 0; count < InString.length; count++){
		TempChar = InString.substring (count, count+1);
		if (RefString.indexOf(TempChar, 0) == -1)
		return (false);
		}
	return (true);
	}

var romanOnes = new Array('I','II','III','IV','V','VI','VII','VIII','IX');
var romanTens = new Array('X','XX','XXX','XL','L','LX','LXX','LXXX','XC');
var romanHundreds = new Array('C','CC','CCC','CD','D','DC','DCC','DCCC','CM');
var revMonthName = new Array('Vendémiaire','Brumaire','Frimaire','Nivôse','Pluviôse','Ventôse','Germinal','Floréal','Prairial','Messidor','Thermidor','Fructidor');
var revDayName = new Array('Decadi','Primidi','Duodi','Tridi','Quartidi','Quintidi','Sextidi','Septidi','Octidi','Nonidi');
var revSansName = new Array('Jour de la Vertu','Jour de la Génie','Jour du Labour','Jour de la Raison','Jour de la Récompense','Jour de la Révolution');
var MonthLength = new Array('31','28','31','30','31','30','31','31','30','31','30','31','29')

function timeDifference(laterdate) {
    var earlierdate = new Date(1792,8,21); 
    var difference = laterdate.getTime() - earlierdate.getTime();
    var daysDifference = Math.floor(difference/1000/60/60/24);
    difference -= daysDifference*1000*60*60*24

    for (var revYear=1; ;revYear++) {
        if (LeapYear(revYear)) {yearDays = 366}
        else {yearDays = 365}
        if (daysDifference - yearDays <= 0) break
        else {daysDifference = daysDifference - yearDays}
    }          
 
    for (var revMonth=1; ;revMonth++) {
        if (daysDifference - 30 <= 0) break
        else {daysDifference = daysDifference - 30}
    }    
    
    var revDays = daysDifference;
    if (revDays >=1 && revDays  <11) revDecade = 'I';
    if (revDays >=11 && revDays <21) revDecade = 'II';
    if (revDays >=21 && revDays <31) revDecade = 'III';
    
    if (revMonth == 13) {
        var revCal = revSansName[revDays-1];
    }
    else {
        revMonth = revMonthName[revMonth-1];
        revDays = revDayName[revDays%10];
        var revCal = 'Décade ' + revDecade + ', ' + revDays + ' de ' + revMonth;
    }
    var num = revYear;
    var ones = num % 10;
        num = (num - ones) / 10;
    var tens = num % 10;
        num = (num - tens) / 10;
    var hundreds = num % 10;
        num = (num - hundreds) / 10;

    var revYearRoman = "";
    
    for (i=0; i < num; i++){
	    revYearRoman += 'M';
    }
    if (hundreds) {revYearRoman += romanHundreds[hundreds-1]; }
    if (tens) {revYearRoman += romanTens[tens-1];}
    if (ones) {revYearRoman += romanOnes[ones-1];}
       
    var Output =  revCal + ' de l\'Année ' + revYearRoman + ' de la Revolution.';
    return Output;
}

function todayIs(laterdate) {
    document.write(timeDifference(laterdate));
}

function todayIsVTT(laterdate) {
	document.write('<div class="callout">')
    document.write(timeDifference(laterdate));
	document.write('<p class="note"><a href="/revcalendar.html">What\'s this?</a></p>')
	document.write('</div>')
}


function ConvertTo(form) {
	TestVar = IsNumberString (form.year.value);
	if (TestVar == 1) {var YearIn = eval(form.year.value)}
	else {alert("You must enter a numeric value for the year."); return false}
    var MonthIn = form.month.selectedIndex;
	TestVar = IsNumberString (form.day.value);
	if (TestVar == 1) {var DayIn = eval(form.day.value)}
	else {alert("You must enter a numeric value for the day."); return false}
    var i = (leapYearGreg (YearIn) && MonthIn == 1) ? 12 : MonthIn;
	if (DayIn > MonthLength[i]) {alert("There aren't that many days in the month you've chosen."); return false}
    if ((YearIn < 1792) || ((YearIn == 1792) && ((MonthIn < 8) || ((MonthIn == 8) && (DayIn < 22)))))    
     {alert("This calculator only works for dates after September 22nd 1792"); return false}
    var laterdate = new Date(YearIn,MonthIn,DayIn);
    form.result.value = timeDifference(laterdate);
 }
 
 
 var gregMonthName = new Array('January','February','March','April','May','June','July','August','September','October','November','December'); 

 function ConvertFrom(form) {
	var YearIn = form.year.selectedIndex;
	var leapDay = 0;
	if (YearIn > 2) leapDay ++;	
	if (YearIn > 6) leapDay ++;	
	if (YearIn > 10) leapDay ++;	

    var runningdate = Date.UTC(1792,8,22); 

	if (form.dayType[0].checked) { 
		var DecadeIn = form.decade.selectedIndex;
		var DayIn = form.day.selectedIndex;
	    var MonthIn = form.month.selectedIndex;
		var adddate = (YearIn*365 + leapDay + MonthIn*30 + DecadeIn*10 + DayIn) *1000*60*60*24;
	} else { if (form.dayType[1].checked) {
			var DayIn = 360;
			if (form.sansDay.selectedIndex == 5 && (YearIn != 2 && YearIn != 6 && YearIn != 10)) {
				alert("There was only a Jour de la Révolution in years III, VII and XI");
				return false;
			}
			var sansDayIn = form.sansDay.selectedIndex;
			var adddate = (YearIn*365 + leapDay + DayIn + sansDayIn) *1000*60*60*24;
		} else return false;
	}
	runningdate += adddate;
	var	newDate = new Date();
	newDate.setTime(runningdate);
	var DayOut = newDate.getDate();
	var MonthOut = newDate.getMonth();
	var YearOut = newDate.getYear();
    form.result.value = DayOut + ", " + gregMonthName[MonthOut] + " " + YearOut;
 }
