// kalends.js
// last modified 2007-05-19

var nRmonth, nRevent, nRday, bRbis;

// main(true);
main(false);

function main(bURL)
{
	if (bURL)
		PrintLink();

	PrintRomanDate();

	if (bURL)
		document.write("</a>");
}

function PrintLink()
{
	var nYear, nMonth, nDay, nPageDay;

	var t = new Date();
	nYear = t.getFullYear();
	nMonth = t.getMonth() + 1;
	nDay = t.getDate();
	delete t;

	nPageDay = Math.min(26, (Math.floor((nDay - 1) / 5) * 5) + 1);

//	url = "http://www.clubs.psu.edu/aegsa/rome/" + EnglishMonthName(nMonth) + TwoDigit(nPageDay) + ".htm#" + EnglishMonthName(nMonth) + TwoDigit(nDay);
	url = "http://www.personal.psu.edu/users/w/x/wxk116/RomanCalendar/" + EnglishMonthName(nMonth) + TwoDigit(nPageDay) + ".htm#" + EnglishMonthName(nMonth) + TwoDigit(nDay);
	document.write("<a href='" + url + "'>")
}

function EnglishMonthName(n)
{
	var eMonths = new Array("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec");
	var Month = eMonths[n - 1];
	delete eMonths;
	return Month;
}

function TwoDigit(n)
{
	var s = n;
	if (n < 10)
		s = "0" + s;
	return s;
}

function PrintRomanDate()
{
	GetRomanDate();

	if (nRday == 2)
		document.write("pr. ");
	else if (nRday > 2)
	{
		document.write("a.d. ");
		if (bRbis)
			document.write("bis ");
		document.write(Roman(nRday) + " ");
	}

	if (nRevent == 0)	// kalends
		document.write("Kal. ");
	else if (nRevent == 1)	// nones
		document.write("Non. ");
	else	// ides
		document.write("Id. ");

	document.write(RomanMonthName(nRmonth));
}

function GetRomanDate()
{
	var nYear, nMonth, nDay;
//	var nHour;
	var nDaysInMonth;
	var nNones, nIdes;

	var t = new Date();
	nYear = t.getFullYear();
	nMonth = t.getMonth() + 1;
	nDay = t.getDate();
//	nHour = t.getHours();
	delete t;

	// Begin the day at sunrise (06:00).
	// Historians disagree whether the Roman day began at midnight or sunrise.
	//
//	if (nHour < 6)
//	{
//		nDay--;
//		if (nDay <= 0)
//		{
//			nMonth--;
//			if (nMonth <= 0)
//			{
//				nYear--;
//				nMonth += 12;
//			}
//			nDay = DaysInMonth(nMonth, nYear);
//		}
//	}

	nDaysInMonth = DaysInMonth(nMonth, nYear);

	if ((nMonth == 3) || (nMonth == 5) || (nMonth == 7) || (nMonth == 10))
		nNones = 7;
	else
		nNones = 5;

	nIdes = nNones + 8;

	bRbis = false;

	if (nDay == 1)
	{
		nRmonth = nMonth;
		nRevent = 0;	// kalends
		nRday = 1;
	}
	else if (nDay <= nNones)
	{
		nRmonth = nMonth;
		nRevent = 1;	// nones
		nRday = nNones - nDay + 1;
	}
	else if (nDay <= nIdes)
	{
		nRmonth = nMonth;
		nRevent = 2;	// ides
		nRday = nIdes - nDay + 1;
	}
	else
	{
		nRmonth = (nMonth % 12) + 1;
		nRevent = 0;	// kalends
		nRday = nDaysInMonth - nDay + 2;
		if (nMonth == 2 && LeapYear(nYear))
		{
			if (nDay < 25)
				nRday--;
			else if (nDay == 25)
				bRbis = true;
		}
	}
}

function DaysInMonth(m, y)
{
	if ((m == 4) || (m == 6) || (m == 9) || (m == 11))
		return 30;
	else if (m != 2)
		return 31;
	else if (LeapYear(y))
		return 29;
	else
		return 28;
}

function LeapYear(y)
// works for all years
{
	if ((y % 4) != 0)
		return false;
	else if ((y % 100) != 0)
		return true;
	else if ((y % 400) != 0)
		return false;
	else
		return true;
}

function Roman(n)
// only works for values up to 39
{
	var s = "";
	while (n > 0)
	{
		if ((n == 4) || (n == 9))
		{
			s += "I";
			n++;
		}
		else if (n >= 10)
		{
			s += "X";
			n -= 10;
		}
		else if (n >= 5)
		{
			s += "V";
			n -= 5;
		}
		else
		{
			s += "I";
			n--;
		}
	}

	return s;
}

function RomanMonthName(n)
{
	var rMonths = new Array("Ian.", "Feb.", "Mart.", "Apr.", "Mai.", "Iun.", "Iul.", "Aug.", "Sept.", "Oct.", "Nov.", "Dec.");
	var Month = rMonths[n - 1];
	delete rMonths;
	return Month;
}

