// This script populates
// a header in each document, displaying the date in English and in French, the number
// of days since the ratification of the US Constitution, and the browser name.

// The script requires several elements in the header of the document which are detailed
// at the end of the file; see the end of this file for implementation.

function romannumeral(arabic)
{

if (arabic < 1 || arabic > 3999 || arabic != parseInt(arabic) ) return arabic;

var thousands = parseInt(arabic / 1000);
var hundreds = parseInt(arabic / 100) - 10 * thousands;
var tens = parseInt(arabic / 10) - 100 * thousands - 10 * hundreds;
var ones = parseInt(arabic / 1) - 1000 * thousands - 100 * hundreds - 10 * tens;

var numeral = '';

switch(thousands) {
   case 0:
   break;
   case 1:
      numeral += 'M';
   break;
   case 2:
      numeral += 'MM';
   break;
   case 3:
      numeral += 'MMM';
   break;
}

switch(hundreds) {
   case 0:
   break;
   case 1:
      numeral += 'C';
   break;
   case 2:
      numeral += 'CC';
   break;
   case 3:
      numeral += 'CCC';
   break;
   case 4:
      numeral += 'CD';
   break;
   case 5:
      numeral += 'D';
   break;
   case 6:
      numeral += 'DC';
   break;
   case 7:
      numeral += 'DCC';
   break;
   case 8:
      numeral += 'DCCC';
   break;
   case 9:
      numeral += 'CM';
   break;
}

switch(tens) {
   case 0:
   break;
   case 1:
      numeral += 'X';
   break;
   case 2:
      numeral += 'XX';
   break;
   case 3:
      numeral += 'XXX';
   break;
   case 4:
      numeral += 'XL';
   break;
   case 5:
      numeral += 'L';
   break;
   case 6:
      numeral += 'LX';
   break;
   case 7:
      numeral += 'LXX';
   break;
   case 8:
      numeral += 'LXXX';
   break;
   case 9:
      numeral += 'XC';
   break;
}

switch(ones) {
   case 0:
   break;
   case 1:
      numeral += 'I';
   break;
   case 2:
      numeral += 'II';
   break;
   case 3:
      numeral += 'III';
   break;
   case 4:
      numeral += 'IV';
   break;
   case 5:
      numeral += 'V';
   break;
   case 6:
      numeral += 'VI';
   break;
   case 7:
      numeral += 'VII';
   break;
   case 8:
      numeral += 'VIII';
   break;
   case 9:
      numeral += 'IX';
   break;
}

return numeral;
}

var today = new Date();
var constratif = new Date();
constratif.setFullYear(1788,6,25);
var constdaysinforce = Math.floor((today.getTime() - constratif.getTime())/(24*3600*1000));
var jebdob = new Date();
jebdob.setFullYear(1976,8,18,23,1);
var jebdaysold = Math.floor((today.getTime() - jebdob.getTime())/(24*3600*1000));

var todaystring = 'Today is ';
var todaystringfrench = 'Aujourd\'hui, c\'est ';
var todaystringlatin = 'Hodie ';
var dayweek = today.getDay();
var daymonth = today.getDate();
var daylatin = daymonth;
var nowmonth = today.getMonth();
var latinmonth = nowmonth;
var nowyear = today.getFullYear();

// An easter egg flag for Jason's birthday.
var birthday = false;
if (daymonth == 18 && nowmonth == 7) birthday = true;

switch(dayweek) {
   case 0:
      todaystring += 'Sunday, ';
      todaystringfrench += 'dimanche, le ';
   break;
   case 1:
      todaystring += 'Monday, ';
      todaystringfrench += 'lundi, le ';
   break;
   case 2:
      todaystring += 'Tuesday, ';
      todaystringfrench += 'mardi, le ';
   break;
   case 3:
      todaystring += 'Wednesday, ';
      todaystringfrench += 'mercredi, le ';
   break;
   case 4:
      todaystring += 'Thursday, ';
      todaystringfrench += 'jeudi, le ';
   break;
   case 5:
      todaystring += 'Friday, ';
      todaystringfrench += 'vendredi, le ';
   break;
   case 6:
      todaystring += 'Saturday, ';
      todaystringfrench += 'samedi, le ';
   break;
}

if (daylatin != 1) {
   switch(latinmonth) {
      case 2:
      case 4:
      case 6:
      case 9:
      break;
      default:
         daylatin += 2;
      break;
   }
}

if (daylatin > 15) {

   switch(latinmonth) {
      case 1:
         daylatin += 1;
      case 2:
      case 4:
      case 6:
      case 9:
         daylatin += 1;
      case 3:
      case 5:
      case 8:
      case 10:
         daylatin += 1;
      break;
      default:
      break;
   }
   latinmonth += 1;
   if (latinmonth == 12) latinmonth = 0;

}

if (daymonth < 10) {
   todaystring += '0' + daymonth + ' ';
   if (daymonth == 1) todaystringfrench += '1er ';
   else todaystringfrench += '0' + daymonth + ' ';
   }
else {
   todaystring += daymonth + ' ';
   todaystringfrench += daymonth + ' ';
   }

switch(nowmonth) {
   case 0:
      todaystring += 'January ';
      todaystringfrench += 'janvier, ';
   break;
   case 1:
      todaystring += 'February ';
      todaystringfrench += 'f&#0233;vrier, ';
   break;
   case 2:
      todaystring += 'March ';
      todaystringfrench += 'mars, ';
   break;
   case 3:
      todaystring += 'April ';
      todaystringfrench += 'avril, ';
   break;
   case 4:
      todaystring += 'May ';
      todaystringfrench += 'mai, ';
   break;
   case 5:
      todaystring += 'June ';
      todaystringfrench += 'juin, ';
   break;
   case 6:
      todaystring += 'July ';
      todaystringfrench += 'juillet, ';
   break;
   case 7:
      todaystring += 'August ';
      todaystringfrench += 'ao&#0251;t, ';
   break;
   case 8:
      todaystring += 'September ';
      todaystringfrench += 'septembre, ';
   break;
   case 9:
      todaystring += 'October ';
      todaystringfrench += 'octobre, ';
   break;
   case 10:
      todaystring += 'November ';
      todaystringfrench += 'novembre, ';
   break;
   case 11:
      todaystring += 'December ';
      todaystringfrench += 'd&#0233;cembre, ';
   break;
}

todaystring += nowyear + '.';
todaystringfrench += nowyear + '.';

switch(daylatin) {
   case 1:
      todaystringlatin += 'Kalendas ';
   break;
   case 2:
      todaystringlatin += 'ante diem VI Nones ';
   break;
   case 3:
      todaystringlatin += 'ante diem V Nones ';
   break;
   case 4:
      todaystringlatin += 'ante diem IV Nones ';
   break;
   case 5:
      todaystringlatin += 'ante diem III Nones ';
   break;
   case 6:
      todaystringlatin += 'pridie Nones ';
   break;
   case 7:
      todaystringlatin += 'Nones ';
   break;
   case 8:
      todaystringlatin += 'ante diem VIII Ides ';
   break;
   case 9:
      todaystringlatin += 'ante diem VII Ides ';
   break;
   case 10:
      todaystringlatin += 'ante diem VI Ides ';
   break;
   case 11:
      todaystringlatin += 'ante diem V Ides ';
   break;
   case 12:
      todaystringlatin += 'ante diem IV Ides ';
   break;
   case 13:
      todaystringlatin += 'ante diem III Ides ';
   break;
   case 14:
      todaystringlatin += 'pridie Ides ';
   break;
   case 15:
      todaystringlatin += 'Ides ';
   break;
   case 16:
      todaystringlatin += 'ante diem XIX Kalendas ';
   break;
   case 17:
      todaystringlatin += 'ante diem XVIII Kalendas ';
   break;
   case 18:
      todaystringlatin += 'ante diem XVII Kalendas ';
   break;
   case 19:
      todaystringlatin += 'ante diem XVI Kalendas ';
   break;
   case 20:
      todaystringlatin += 'ante diem XV Kalendas ';
   break;
   case 21:
      todaystringlatin += 'ante diem XIV Kalendas ';
   break;
   case 22:
      todaystringlatin += 'ante diem XIII Kalendas ';
   break;
   case 23:
      todaystringlatin += 'ante diem XII Kalendas ';
   break;
   case 24:
      todaystringlatin += 'ante diem XI Kalendas ';
   break;
   case 25:
      todaystringlatin += 'ante diem X Kalendas ';
   break;
   case 26:
      todaystringlatin += 'ante diem IX Kalendas ';
   break;
   case 27:
      todaystringlatin += 'ante diem VIII Kalendas ';
   break;
   case 28:
      todaystringlatin += 'ante diem VII Kalendas ';
   break;
   case 29:
      todaystringlatin += 'ante diem VI Kalendas ';
   break;
   case 30:
      todaystringlatin += 'ante diem V Kalendas ';
   break;
   case 31:
      todaystringlatin += 'ante diem IV Kalendas ';
   break;
   case 32:
      todaystringlatin += 'ante diem III Kalendas ';
   break;
   case 33:
      todaystringlatin += 'pridie Kalendas ';
   break;
}

switch(latinmonth) {
   case 0:
      todaystringlatin += 'Ianuarii ';
   break;
   case 1:
      todaystringlatin += 'Februarii ';
   break;
   case 2:
      todaystringlatin += 'Martii ';
   break;
   case 3:
      todaystringlatin += 'Aprilis ';
   break;
   case 4:
      todaystringlatin += 'Maii ';
   break;
   case 5:
      todaystringlatin += 'Iunii ';
   break;
   case 6:
      todaystringlatin += 'Iulias ';
   break;
   case 7:
      todaystringlatin += 'Augusti ';
   break;
   case 8:
      todaystringlatin += 'Septembris ';
   break;
   case 9:
      todaystringlatin += 'Octobris ';
   break;
   case 10:
      todaystringlatin += 'Novembris ';
   break;
   case 11:
      todaystringlatin += 'Decembris ';
   break;
}

todaystringroman = todaystringlatin;

todaystringlatin += 'anno Domini ' + romannumeral(nowyear) + ' est.';
todaystringroman += 'anno Urbis conditae ' + romannumeral(nowyear + 0753) + ' est.';

var constitutionstring = 'The United States Constitution:  ' + constdaysinforce + ' days in force.';
var agestring = 'Jason Elliot Benda is ' + jebdaysold + ' days old.';
if (birthday) agestring += ' (Happy birthday, Jason!)';

var browserstring = 'You are viewing this page with ' + navigator.appName + ' Version ' + navigator.appVersion + '.';

var alertstring = todaystring + '\n' + todaystringfrench + '\n' + todaystringlatin + '\n' + constitutionstring + '\n' + agestring + '\n' + browserstring;

// The element ids referenced below are assumed to exist in the document.
document.getElementById('today').innerHTML = todaystring;
document.getElementById('todayfrench').innerHTML = todaystringfrench;
document.getElementById('todaylatin').innerHTML = todaystringlatin;
// document.getElementById('todayroman').innerHTML = todaystringroman;
document.getElementById('constitution').innerHTML = constitutionstring;
document.getElementById('age').innerHTML = agestring;
document.getElementById('browser').innerHTML = browserstring;

// Implementation of this file:
// See immediately above for a list of expected element ids in the implementation.
// These elements shouldbe created in the XHTML document before the script is called.
// Sample implementation:

/*
<body>
<div class="header"><span id="today">&nbsp;</span>
<span id="todayfrench">&nbsp;</span><br />
<span id="todaylatin">&nbsp;</span>
<!--<span id="todayroman">&nbsp;</span><br />-->
<span id="constitution">&nbsp;</span>
<span id="age">&nbsp;</span><br/>
<span id="browser">&nbsp;</span></div>
<hr />
<script type="text/javascript" src="header.js"></script>
*/

// In the sample above, a <div> element with a class of "header" wraps
// all the required elements (which are simply <span> elements).