<!--

////////////////////////////////////////////////////////
// Copyright 2003, Timothy James Forsythe, all rights reserved.
// Permission granted to use, copy, modify, and distribute so long as
// the above copyright and this permission statement are retained in all
// copies.  THERE IS NO WARRANTY - USE AT YOUR OWN RISK.
//
// based on the algorithms of ?
////////////////////////////////////////////////////////

function IFCDate()
{
  this.dstr = "";
  this.d    = "";
  this.mstr = "";
  this.y    = "";
}

function IFCd (n)
{
  var result = n % 28;
  if (result == 0)
  {
    result = 28;
  }
  return result;
}

function GregorianToIFC(d,m,year)
{
  var DAYS   = new Array("Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Year Day");
  var MONTHS = new Array("January", "February", "March", "April", "May", "June", "Sol", "July", "August", "September", "October", "November", "December");
  var MO_LEN = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30);

  var date = new IFCDate();
  
  if (year > 0)
  {
    var doy = d;

    m=m-1;
 
    var leapYear = false;
    if (   (   ((year % 4) == 0)
            && ((year % 100) != 0)
           )
        || ((year % 400) == 0)
       )
    {
      leapYear = true;
    }

    if (leapYear)
    {
      MO_LEN[1] = 29;
    }

    for(i=0; i < m; ++i)
    {
      doy += MO_LEN[i];
    }

    if (leapYear && (doy > 169))
    {
      date.dstr = DAYS[(doy-1) % 7];
      date.mstr = MONTHS[parseInt(((doy-1)+27)/28)-1];
      date.d    = IFCd(doy-1);
    }
    else
    {
      date.dstr = DAYS[doy % 7];
      date.mstr = MONTHS[parseInt((doy+27)/28)-1];
      date.d    = IFCd(doy);
    }

    if (leapYear)
    {
      if (doy == 366)
      {
        date.dstr = DAYS[7];
        date.mstr = MONTHS[13-1];
        date.d    = 29;
      }

      if(doy == 169)
      {
        date.dstr = DAYS[7];
        date.mstr = MONTHS[6-1];
        date.d    = 29;
      }
    }
    else
    {
      if (doy == 365)
      {
        date.dstr = DAYS[7];
        date.mstr = MONTHS[13-1];
        date.d    = 29;
      }
    }

    date.y = year;
  }  

  return date;
}


-->

