﻿// frc.js
// last modified 2008-01-27

main();

var frcYear, frcMonth, frcDay;

function main()
{
	var now = new Date();
	GetFRCDate(now);
	PrintFRCDate();
	delete now;
}

function GetFRCDate(date)
{
	var year = date.getFullYear(), month = date.getMonth(), day = date.getDate();
	frcYear = year - 1792;
	if ((month * 100) + day >= 822) frcYear++;
	var frcNewYear = new Date(frcYear + 1791, 8, 22);
	frcDay = ((date - frcNewYear) / 60000) - date.getTimezoneOffset() + frcNewYear.getTimezoneOffset();
	frcDay = Math.floor(frcDay / 1440);
	delete frcNewYear;

	// next line applies continuous leap-year rule
	// comment this line out to use Romme's proposed fixed rule instead
	// see Wikipedia for explanation of all this
	if ((frcYear % 4) == 0) { frcDay--; if (frcDay < 0) { frcYear--; frcDay = 365; } }

	frcMonth = Math.floor(frcDay / 30);
	frcDay -= (frcMonth * 30);
}

function PrintFRCDate()
{
	if (frcMonth < 12)
	{
		document.write((frcDay + 1) + " " + MonthName(frcMonth + 1) + " an " + Roman(frcYear));
		document.write(" (" + DayName(frcMonth, frcDay) + ")");
	}
	else
	{
		document.write(SpecialDayName(frcDay + 1) + " an " + Roman(frcYear));
	}
}

function MonthName(n)
{
	var eMonths = new Array(
		"Vendémiaire", "Brumaire", "Frimaire", "Nivôse", "Pluviôse", "Ventôse",
		"Germinal", "Floréal", "Prairial", "Messidor", "Thermidor", "Fructidor");
	var Month = eMonths[n - 1];
	delete eMonths;
	return Month;
}

function DayName(month, day)
{
	var eDays = new Array(
	// Vendémiaire
		"Raisin", "Safran", "Châtaigne", "Colchique", "Cheval",
		"Balsamine", "Carotte", "Amarante", "Panais", "Cuve",
		"Pomme de terre", "Immortelle", "Potiron", "Réséda", "Âne",
		"Belle de nuit", "Citrouille", "Sarrasin", "Tournesol", "Pressoir",
		"Chanvre", "Pêche", "Navet", "Amaryllis", "Bœuf",
		"Aubergine", "Piment", "Tomate", "Orge", "Tonneau",
	// Brumaire
		"Pomme", "Céleri", "Poire", "Betterave", "Oie",
		"Héliotrope", "Figue", "Scorsonère", "Alisier", "Charrue",
		"Salsifis", "Macre", "Topinambour", "Endive", "Dindon",
		"Chervis", "Cresson", "Dentelaire", "Grenade", "Herse",
		"Bacchante", "Azerole", "Garance", "Orange", "Faisan",
		"Pistache", "Macjonc", "Coing", "Cormier", "Rouleau",
	// Frimaire
		"Raiponce", "Turneps", "Chicorée", "Nèfle", "Cochon",
		"Mâche", "Chou-fleur", "Miel", "Genièvre", "Pioche",
		"Cire", "Raifort", "Cèdre", "Sapin", "Chevreuil",
		"Ajonc", "Cyprès", "Lierre", "Sabine", "Hoyau",
		"Érable sucré", "Bruyère", "Roseau", "Oseille", "Grillon",
		"Pignon", "Liège", "Truffe", "Olive", "Pelle",
	// Nivôse
		"Tourbe", "Houille", "Bitume", "Soufre", "Chien",
		"Lave", "Terre végétale", "Fumier", "Salpêtre", "Fléau",
		"Granit", "Argile", "Ardoise", "Grès", "Lapin",
		"Silex", "Marne", "Pierre à chaux", "Marbre", "Van",
		"Pierre à plâtre", "Sel", "Fer", "Cuivre", "Chat",
		"Étain", "Plomb", "Zinc", "Mercure", "Crible",
	// Pluviôse
		"Lauréole", "Mousse", "Fragon", "Perce-neige", "Taureau",
		"Laurier-thym", "Amadouvier", "Mézéréon", "Peuplier", "Coignée",
		"Ellébore", "Brocoli", "Laurier", "Avelinier", "Vache",
		"Buis", "Lichen", "If", "Pulmonaire", "Serpette",
		"Thlaspi", "Thimelé", "Chiendent", "Trainasse", "Lièvre",
		"Guède", "Noisetier", "Cyclamen", "Chélidoine", "Traîneau",
	// Ventôse
		"Tussilage", "Cornouiller", "Violier", "Troène", "Bouc",
		"Asaret", "Alaterne", "Violette", "Marceau", "Bêche",
		"Narcisse", "Orme", "Fumeterre", "Vélar", "Chèvre",
		"Épinard", "Doronic", "Mouron", "Cerfeuil", "Cordeau",
		"Mandragore", "Persil", "Cochléaria", "Pâquerette", "Thon",
		"Pissenlit", "Sylve", "Capillaire", "Frêne", "Plantoir",
	// Germinal
		"Primevère", "Platane", "Asperge", "Tulipe", "Poule",
		"Bette", "Bouleau", "Jonquille", "Aulne", "Couvoir",
		"Pervenche", "Charme", "Morille", "Hêtre", "Abeille",
		"Laitue", "Mélèze", "Ciguë", "Radis", "Ruche",
		"Gainier", "Romaine", "Marronnier", "Roquette", "Pigeon",
		"Lilas", "Anémone", "Pensée", "Myrtille", "Greffoir",
	// Floréal
		"Rose", "Chêne", "Fougère", "Aubépine", "Rossignol",
		"Ancolie", "Muguet", "Champignon", "Hyacinthe", "Râteau",
		"Rhubarbe", "Sainfoin", "Bâton-d'or", "Chamérops", "Ver à soie",
		"Consoude", "Pimprenelle", "Corbeille d'or", "Arroche", "Sarcloir",
		"Statice", "Fritillaire", "Bourrache", "Valériane", "Carpe",
		"Fusain", "Civette", "Buglosse", "Sénevé", "Houlette",
	// Prairial
		"Luzerne", "Hémérocalle", "Trèfle", "Angélique", "Canard",
		"Mélisse", "Fromental", "Martagon", "Serpolet", "Faux",
		"Fraise", "Bétoine", "Pois", "Acacia", "Caille",
		"Œillet", "Sureau", "Pavot", "Tilleul", "Fourche",
		"Barbeau", "Camomille", "Chèvrefeuille", "caille-lait", "Tanche",
		"Jasmin", "Verveine", "Thym", "Pivoine", "Chariot",
	// Messidor
		"Seigle", "Avoine", "Oignon", "Véronique", "Mulet",
		"Romarin", "Concombre", "Échalote", "Absinthe", "Faucille",
		"Coriandre", "Artichaut", "Girofle", "Lavande", "Chamois",
		"Tabac", "Groseille", "Gesse", "Cerise", "Parc",
		"Menthe", "Cumin", "Haricot", "Orcanète", "Pintade",
		"Sauge", "Ail", "Vesce", "Blé", "Chalémie",
	// Thermidor
		"Épeautre", "Bouillon blanc", "Melon", "Ivraie", "Bélier",
		"Prêle", "Armoise", "Carthame", "Mûre", "Arrosoir",
		"Panis", "Salicorne", "Abricot", "Basilic", "Brebis",
		"Guimauve", "Lin", "Amande", "Gentiane", "Écluse",
		"Carline", "Câprier", "Lentille", "Aunée", "Loutre",
		"Myrte", "Colza", "Lupin", "Coton", "Moulin",
	// Fructidor
		"Prune", "Millet", "Lycoperdon", "Escourgeon", "Saumon",
		"Tubéreuse", "Sucrion", "Apocyn", "Réglisse", "Échelle",
		"Pastèque", "Fenouil", "Épine vinette", "Noix", "Truite",
		"Citron", "Cardère", "Nerprun", "Tagette", "Hotte",
		"Églantine", "Noisette", "Houblon", "Sorgho", "Écrevisse",
		"Bigarade", "Verge d'or", "Maïs", "Marron", "Panier");
	var Day = eDays[(month * 30) + day];
	delete eDays;
	return Day;
}

function SpecialDayName(n)
{
	var eDays = new Array(
		"La Fête de la Vertu",
		"La Fête du Génie",
		"La Fête du Travail",
		"La Fête de l’Opinion",
		"La Fête des Récompenses",
		"La Fête de la Révolution");
	var Day = eDays[n - 1];
	delete eDays;
	return Day;
}

function Roman(n)
{
	var s = "";

	var d = Math.floor(n / 1000);
	n -= (d * 1000);
	while (d > 0) { s += "M"; d--; }

	d = Math.floor(n / 100);
	n -= (d * 100);
	while (d > 0)
	{
		if ((d % 5) == 4) { s += "C"; d++; }
		else if (d == 10) { s += "M"; d -= 10; }
		else if (d >= 5) { s += "D"; d -= 5; }
		else { s += "C"; d--; }
	}

	d = Math.floor(n / 10);
	n -= (d * 10);
	while (d > 0)
	{
		if ((d % 5) == 4) { s += "X"; d++; }
		else if (d == 10) { s += "C"; d -= 10; }
		else if (d >= 5) { s += "L"; d -= 5; }
		else { s += "X"; d--; }
	}

	d = Math.floor(n);
	while (d > 0)
	{
		if ((d % 5) == 4) { s += "I"; d++; }
		else if (d == 10) { s += "X"; d -= 10; }
		else if (d >= 5) { s += "V"; d -= 5; }
		else { s += "I"; d--; }
	}

	return s;
}

