/*	This JavaScript routine was developed by Togodumnus for www.Roman-Britain.org
	Permission is given to do whatever the hell you like with it!
	Just remember where you got it from.
	To utilise, simply include the following lines of text within your HTML:

<STYLE TYPE="text/css">
<!--
SPAN	{ text-decoration:overline; }
-->
</STYLE>
<SCRIPT LANGUAGE="JavaScript" SRC="latindate.js"></SCRIPT>

	The SPAN element text-decoration is altered to display roman numerals > MMMCMXCIX,
	so you do not have to include the STYLE elements until the fifth millennium.
	Have fun Dude! */
/* fncArabic2Roman variables */
var RomanI = new Array("","I","II","III","IV","V","VI","VII","VIII","IX");
var RomanX = new Array("","X","XX","XXX","XL","L","LX","LXX","LXXX","XC");
var RomanC = new Array("","C","CC","CCC","CD","D","DC","DCC","DCCC","CM");
var RomanM = new Array("","M","MM","MMM","<SPAN>IV</SPAN>","<SPAN>V</SPAN>","<SPAN>VI</SPAN>","<SPAN>VII</SPAN>","<SPAN>VIII</SPAN>","<SPAN>IX</SPAN>");
function fncArabic2Roman(arabic)
{	/* Note: this function requires custom style-sheet values for <SPAN> */
	var arabicString = new String(arabic);
	var romanString = new String("");
	var aLen = arabicString.length;
	var n = 1;
	while (n <= aLen)
	{	var i = aLen - n;
		var s = parseInt(arabicString.charAt(i));
		if (n == 1) { romanString = RomanI[s]; }
		if (n == 2) { romanString = RomanX[s]+romanString; }
		if (n == 3) { romanString = RomanC[s]+romanString; }
		if (n == 4) { romanString = RomanM[s]+romanString; }
		n++;
	}
	return romanString;
}
/* fncLatinDay variables */
var LatinDayPrefix = "dies ";
var LatinDaySuffix = "";
var LatinDayText = new Array("Solis","Lunae","Martis","Mercuris","Veneris","Iovis","Saturni");
function fncLatinDay(iDay)
{	return LatinDayPrefix+LatinDayText[iDay]+LatinDaySuffix;
}
function fncLatinDate(iMonth,iDays,iYear)
{	/* Uses functions: fncLatinMonth, fncDecline & fncLatinNumeral. */
	var mText = fncLatinMonth(iMonth);
	var nones = 5;
	var ides = 13;
	var dierum = 31;
	if ((mText == "Martius")||(mText == "Maius")||(mText == "Iulius")||(mText == "Octobris")) { nones = 7; ides = 15; }
	if ((mText == "Aprilis")||(mText == "Iunius")||(mText == "Septembris")||(mText == "Novembris")) { dierum = 30; }
	if (mText == "Februarius")
	{	dierum = 28;
		var tYear = iYear - (Math.floor(iYear / 4) * 4);
		if (tYear == 0) { dierum = 29; }
	}
	if (iDays > ides) mText = fncLatinMonth(iMonth+1);
	var dText = "?";
	if (iDays == 1) { dText = "Kalendis"; }
	if (iDays == nones) { dText = "Nonis"; }
	if (iDays == nones-1) { dText = "Pridie Nonas"; mText = fncDecline(mText); }
	if (iDays == ides) { dText = "Idibus"; }
	if (iDays == ides-1) { dText = "Pridie Idibus"; mText = fncDecline(mText); }
	if (iDays == dierum) { dText = "Pridie Kalendas"; mText = fncDecline(mText); }
	if (dText == "?")
	{	if (iDays < nones) { dText = fncLatinNumeral(nones - iDays + 1)+" Nonis"; }
		if ((dText == "?")&&(iDays < ides)) { dText = fncLatinNumeral(ides - iDays + 1)+" Idibus"; }
		if ((dText == "?")&&(iDays < dierum)) { dText = fncLatinNumeral(dierum - iDays + 2)+" Kalendis"; }
		dText = "Ante diem "+dText;
	}
	return dText+" "+mText;
}
/* fncLatinMonth variables */
var LatinMonthText = new Array("Januarius","Februarius","Martius","Aprilis","Maius","Iunius","Iulius","Augustus","Septembris","Octobris","Novembris","Decembris");
function fncLatinMonth(iMonth)
{	var mIndex = iMonth;
	if (mIndex >= 12) mIndex = 0;
	return LatinMonthText[mIndex];
}
function fncDecline(iMonth)
{	var mText = new String();
	if (iMonth.substr(iMonth.length-2) == "us") { mText = iMonth.substring(0,iMonth.length-2)+"as"; }
	if (iMonth.substr(iMonth.length-3) == "ber") { mText = iMonth.substring(0,iMonth.length-2)+"ris"; }
	if (iMonth.substr(iMonth.length-2) == "is") { mText = iMonth.substring(0,iMonth.length-2)+"is"; }
	return mText;
}
/* fncLatinNumeral variables */
var NumeralText = new Array("III","IV","V","VI","VII","VIII","IX","X","XI","XII","XIII","XIV","XV","XVI","XVII","XVIII","XIX");
var NumeralTexto = new Array("tertium","quartum","quintum","sextum","septimum","octavum","nonum","decimum","undecimum","duodecimum","tredecimum","quattuordecimum","quindecimum","sedecimum","septendecimum","duodevicensimum","undevicensimum");
function fncLatinNumeral(iNum)
{	return NumeralText[iNum-3];
}
function fncSuffixDate(date)
{	/* AMENDMENT: Convert into giving date in format: (n days before) the (Calends/Nones/Ides) of (month) */
	var suffix = "th";
	var n = date-(Math.floor(date/10)*10);
	if (date <= 3 || date >=21)
	{	if (n == 1) { suffix = "st"; }
		if (n == 2) { suffix = "nd"; }
		if (n == 3) { suffix = "rd"; }
	}
	return date+suffix+" day";
}
function fncFormatLatinText(iDate,bText)
{	var latinDay = fncLatinDay(iDate.getDay());
	var latinDate = fncLatinDate(iDate.getMonth(),iDate.getDate(),iDate.getFullYear());
	var convertedYear = fncArabic2Roman(iDate.getFullYear());
	var dateText = "Hodie est "+latinDay+bText;
	dateText += latinDate+bText;
	dateText += "anno domini "+convertedYear;
	return dateText;
}
var Hodie = new Date();
document.write(fncFormatLatinText(Hodie,'<BR>'));
