<!--
// Coded by: Golddess
// Version:  1.25 August 3, 2005
// Use:      Various constants and functions used by mithratimeclock.js and mithratimeairship.js
//
// Feel free to copy and display on your website, but please give credit where credit is due
// by mentioning MithraPride as the source and linking back to http://www.mithrapride.org/
// on the page that displays the clock.
//
// Version Update List:
//   1.25: Changed the format of Vana'diel time.
//           -Split the time calculation functions into 2 functions. 1 displays time on 1 line, 1 splits time over 2 lines.
//         Removed some things that really didn't have to be in here.
//   1.20: Various tweaks to the functions, hopefully keeping local variables local.
//   1.10: Milliseconds have been removed from Vana'diel time.
//   1.00: These basic constants and functions are seperated from the main file.

// Various constants
MSPSec         = 1000;
SecPMin        = 60;
MinPHour       = 60;
HourPDay       = 24;
DayPEWeek      = 7;
DayPVWeek      = 8;
DayPVMon       = 30;
MonPYear       = 12;
DayPVYear      = 360;
MoonPhaseMod   = 84;
TavernMod      = 25;
VanaToEarth    = .025;
SelbinaMhaura  = 28800;
ConquestUpdate = 604800000;

// Various arrays
EarthDay      = new Array("SUN","MON","TUE","WED","THU","FRI","SAT");
EarthMonth    = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
VanaDay       = new Array("Firesday", "Earthsday", "Watersday", "Windsday", "Iceday", "Lightningday", "Lightsday", "Darksday");

// Vana'diel's time of "birth"
// Earth time     : 2002/06/23 16:00:03 GMT
// Vana'diel time : 0898/02/01 00:00:00

// Time in Earth seconds since the Crystal Era began
vBirthTime = (((898 * DayPVYear) + DayPVMon) * HourPDay * MinPHour * SecPMin) / VanaToEarth;

// When Vana'diel was "born" in GMT time
Bday = new Date();
Bday.setUTCFullYear(2002, 5, 23);
Bday.setUTCHours(15, 0, 0, 0);

// Time in Earth milliseconds since the Current Era began
localBirthTime = Bday.getTime();

Diff = vBirthTime - localBirthTime;



// Takes a time in Vana'diel seconds, and calculates how many hours:minutes:seconds in Earth time that that time represents
function CalculateDelay(TheDelay) {
  TheDelay = TheDelay / VanaToEarth;

  var TheDelayHour = Math.floor(TheDelay / (MSPSec * SecPMin * MinPHour));
  TheDelay    -= (TheDelayHour * MSPSec * SecPMin * MinPHour);
  var TheDelayMin  = Math.floor(TheDelay / (MSPSec * SecPMin));
  TheDelay    -= (TheDelayMin * MSPSec * SecPMin);
  var TheDelaySec  = Math.floor(TheDelay /  MSPSec);

  TheDelay = "";

  if (TheDelayHour > 0)  { TheDelay    = TheDelayHour + ":"; }
  if (TheDelayMin  < 10) { TheDelayMin = "0" + TheDelayMin;  }
  if (TheDelaySec  < 10) { TheDelaySec = "0" + TheDelaySec;  }
  TheDelay += TheDelayMin + ":" + TheDelaySec;

  return TheDelay;
}



// Takes a properly formated Date() variable, and rearranges it into something a little more eye-pleasing.
function CalculateEarthTime(CurrentTime) {
  var eYear = CurrentTime.getFullYear();
  var eMon  = CurrentTime.getMonth();
  var eDate = CurrentTime.getDate();
  var eHour = CurrentTime.getHours();
  var eMin  = CurrentTime.getMinutes();
  var eSec  = CurrentTime.getSeconds();
  var eDay  = CurrentTime.getDay();

  // Assigns a leading zero if neccessary
  if (eDate < 10) { eDate = "0" + eDate; }
  if (eHour < 10) { eHour = "0" + eHour; }
  if (eMin < 10)  { eMin  = "0" + eMin;  }
  if (eSec < 10)  { eSec  = "0" + eSec;  }

  // Organizes the earth time for display
  var TextTime = EarthMonth[eMon] + " " + eDate + ", " + eYear + " (" + EarthDay[eDay] + ") " + eHour + ":" + eMin + ":" + eSec;

  return TextTime;
}



// Takes an amount of time in Vana'diel seconds, and rearranges it into something a little more eye-pleasing.
function CalculateVanaTime(CurrentTime) {
  var vYear = Math.floor( CurrentTime / (DayPVYear * HourPDay * MinPHour * SecPMin));
  var vMon  = Math.floor((CurrentTime / (DayPVMon  * HourPDay * MinPHour * SecPMin)) % MonPYear ) + 1;
  var vDate = Math.floor((CurrentTime / (            HourPDay * MinPHour * SecPMin)) % DayPVMon ) + 1;
  var vHour = Math.floor((CurrentTime / (                       MinPHour * SecPMin)) % HourPDay );
  var vMin  = Math.floor((CurrentTime / (                                  SecPMin)) % MinPHour );
  var vDay  = Math.floor((CurrentTime / (            HourPDay * MinPHour * SecPMin)) % DayPVWeek);

  // Assigns a leading zero if neccessary
  if (vMon  < 10) { vMon  = "0" + vMon;  } else { vMon  = vMon;  }
  if (vDate < 10) { vDate = "0" + vDate; } else { vDate = vDate; }
  if (vHour < 10) { vHour = "0" + vHour; } else { vHour = vHour; }
  if (vMin  < 10) { vMin  = "0" + vMin;  } else { vMin  = vMin;  }

  // Organizes the Vana'diel time for display
  var TextTime = vMon + "/" + vDate + "/" + vYear + " (" + VanaDay[vDay] + ") " + vHour + ":" + vMin;

  return TextTime;
}



// Takes a properly formated Date() variable, and rearranges it into something a little more eye-pleasing over 2 lines.
function CalculateEarthTime2(CurrentTime) {
  var eYear = CurrentTime.getFullYear();
  var eMon  = CurrentTime.getMonth();
  var eDate = CurrentTime.getDate();
  var eHour = CurrentTime.getHours();
  var eMin  = CurrentTime.getMinutes();
  var eSec  = CurrentTime.getSeconds();
  var eDay  = CurrentTime.getDay();

  // Assigns a leading zero if neccessary
  if (eDate < 10) { eDate = "0" + eDate; }
  if (eHour < 10) { eHour = "0" + eHour; }
  if (eMin < 10)  { eMin  = "0" + eMin;  }
  if (eSec < 10)  { eSec  = "0" + eSec;  }

  // Organizes the earth time for display
  var TextTime = EarthMonth[eMon] + " " + eDate + ", " + eYear + "<br />" + " (" + EarthDay[eDay] + ") " +  eHour + ":" + eMin + ":" + eSec;

  return TextTime;
}



// Takes an amount of time in Vana'diel seconds, and rearranges it into something a little more eye-pleasing over 2 lines.
function CalculateVanaTime2(CurrentTime) {
  var vYear = Math.floor( CurrentTime / (DayPVYear * HourPDay * MinPHour * SecPMin));
  var vMon  = Math.floor((CurrentTime / (DayPVMon  * HourPDay * MinPHour * SecPMin)) % MonPYear ) + 1;
  var vDate = Math.floor((CurrentTime / (            HourPDay * MinPHour * SecPMin)) % DayPVMon ) + 1;
  var vHour = Math.floor((CurrentTime / (                       MinPHour * SecPMin)) % HourPDay );
  var vMin  = Math.floor((CurrentTime / (                                  SecPMin)) % MinPHour );
  var vDay  = Math.floor((CurrentTime / (            HourPDay * MinPHour * SecPMin)) % DayPVWeek);

  // Assigns a leading zero if neccessary
  if (vMon  < 10) { vMon  = "0" + vMon;  } else { vMon  = vMon;  }
  if (vDate < 10) { vDate = "0" + vDate; } else { vDate = vDate; }
  if (vHour < 10) { vHour = "0" + vHour; } else { vHour = vHour; }
  if (vMin  < 10) { vMin  = "0" + vMin;  } else { vMin  = vMin;  }

  // Organizes the Vana'diel time for display
  var TextTime = vMon + "/" + vDate + "/" + vYear + "<br />" + " (" + VanaDay[vDay] + ") " + vHour + ":" + vMin;

  return TextTime;
}



// Given a time in Vana'diel seconds, this calculates when the next conquest update will occur
function ConqUpdate(vTempTime) {
  var ConqTime       = (Math.floor((vTempTime + (ConquestUpdate * VanaToEarth) + (90 * HourPDay * MinPHour * SecPMin)) / (ConquestUpdate * VanaToEarth)) * (ConquestUpdate * VanaToEarth)) - (90 * HourPDay * MinPHour * SecPMin);
  var ConqLimitTemp  = CalculateEarthTime(new Date(Math.floor(ConqTime / VanaToEarth) - Diff));
  ConqLimitTemp     += " (" + CalculateDelay(ConqTime - vTempTime) + ")";

  return ConqLimitTemp;
}
// -->
