
function CaptionE() {
  //     JAVASCRIPT INCLUDE FILE - (c) J R Stockton  >= 2006-01-24
  //             http://www.merlyn.demon.co.uk/estr-inc.js
  //                  Easter Routines, except Zeller
  //       Routines may be copied, but URL must not be linked to.
  //                    Uses Div from include1.js
  }

var EincT=0


// Auxiliary Easter functions


function YMDobjToDoM(Obj) { // {Y,M,D} to DayOfMarch
  return (Obj.M-3)*31 + Obj.D }


function YMDobjToISO(Obj) { // {Y,M,D} to "Y*-MM-DD"
  with (Obj) return Y + "-" + LZ(M)  + "-" + LZ(D) }


function DoMtoISOdate(MarDay) { var Mth = 3, Day = MarDay
  if (Day>31) { Mth = 4 ; Day -= 31 }
  return 'Year-0' + Mth + '-' + LZ(Day) }


function DoMtoMonDD(DM) {
  return DM>31 ? "Apr "+LZ(DM-31) : "Mar "+DM }


// My Easter functions


function GoldenNumber(Yr) { return 1 + Yr%19 }

function BCPcypher(Yr) { var CD = Div(Yr, 100)
  return ( Div(3*(CD+1), 4) - Div((13+CD*8), 25) - 7 ) % 30 }

function SundayNumber(Y) { // In lieu of Table I
  var Z = 6 + Y + Div(Y, 4) - Div(Y, 100) + Div(Y, 400)
  return 6 - Z % 7 /* 0-6 matches Sunday Letter A-G */}

function BCPGenEaster(YR) { var GN, CY, SN, DM // cf DemoCalc
  GN = GoldenNumber(YR)
  CY = BCPcypher(YR)
  SN = SundayNumber(YR)
  DM = 21 + (273+CY-11*GN)%30 ; DM -= (DM + +(GN>11) > 49) // PFM
  return DM + 1 + (60+SN-DM)%7 }

function JRSEaster(YR) { var GN, CY, SN, DM, xx // cf BCPGenEaster
  GN = 1 + YR%19			// GN = GoldenNumber
  xx = Div(YR, 100)			// CY = BCPcypher
  CY = ( Div(3*(xx+1), 4) - Div((13+xx*8), 25) - 7 ) % 30
  xx = 6 + YR + Div(YR, 4) - Div(YR, 100) + Div(YR, 400)
  SN = 6 - xx%7 // SundayNumber 0-6 matches Sunday Letter A-G
  DM = 21 + (273+CY-11*GN)%30 ; DM -= (DM + +(GN>11) > 49) // PFM
  return DM + 1 + (60+SN-DM)%7 }



// Independent Easter functions


function EGREaster(Yr) { // Gregorian - E G Richards, Algorithm P
  var AA = Math.floor(Yr / 100)
  var BB = AA - Math.floor(AA / 4)
  var CC = Yr % 19
  var DD = (15 + 19*CC + BB -
    Math.floor((AA + 1 - Math.floor((AA+8) / 25)) / 3)) % 30
  var EE = DD - Math.floor((CC+11*DD) / 319)
  var DM = 22 + EE +
    (140004 - (Yr + Math.floor(Yr / 4))%7 + BB - EE) % 7
  var EMo = 3 + Math.floor(DM / 32)
  var EDy = 1 + (DM-1) % 31
  return {Y:Yr, M:EMo, D:EDy} }


function CDWFEaster(year) {
    // http://www.davros.org/misc/easter.html
  var a, b, c, d, e, f, g, h, j, k, m, month, date
  a = year%19
  b = Math.floor(year/100) ; c = year%100
  d = Math.floor(   b/4)   ; e =    b%4
  f = Math.floor(   c/4)   ; g =    c%4
  h = Math.floor((8*b+13)/25)
    j = (19*a+b-d-h+15)%30
  m = Math.floor((a+11*j)/319)
    k = (2*e+2*f-g-j+m+32)%7
  month = Math.floor((j-m+k+90)/25)
    date = (j-m+k+19+month)%32
  return {Y:year, M:month, D:date} }


function USNOEaster(y) {
  // http://aa.usno.navy.mil/faq/docs/easter.html
  var Mf = Math.floor, c, n, k, i, j, l, m, d
  c = Mf(y / 100)
  n = y - 19 * Mf( y / 19 )
  k = Mf(( c - 17 ) / 25)
  i = c - Mf(c / 4) - Mf(( c - k ) / 3) + 19 * n + 15
  i = i - 30 * Mf( i / 30 )
  i = i - Mf( i / 28 ) * ( 1 - Mf( i / 28 ) * Mf( 29 / ( i + 1 ) )
      * ( Mf( 21 - n ) / 11 ) )
  j = y + Mf(y / 4) + i + 2 - c + Mf(c / 4)
  j = j - 7 * Mf( j / 7 )
  l = Math.round(i - j)
  m = 3 + Mf(( l + 40 ) / 44)
  d = l + 28 - 31 * Mf( m / 4 )
  return {Y:y, M:m, D:d} }


function CFAQEaster(year) { var G, C, H, I, J, L
  G = year % 19
  C = Div(year,100)
  H = (C - Div(C,4) - Div(8*C+13,25) + 19*G + 15) % 30
  I = H - Div(H,28)*(1 - Div(29,H+1)*Div(21-G,11))
  J = (year + Div(year,4) + I + 2 - C + Div(C,4)) % 7
  L = I - J
  EasterMonth = 3 + Div(L+40,44)
  EasterDay = L + 28 - 31*Div(EasterMonth,4)
  return {Y:year, M:EasterMonth, D:EasterDay} /* L + 28 */ }


function HenkEaster(year) { var A, B, C, D, E, F, G
  A = year % 19 + 1 			// Golden Number (Meton)
  B = Div(year, 100) + 1		// Century
  C = Div((3 * B), 4) - 12		// Greg-Julian Leap Diff
  D = Div((8 * B + 5), 25) - 5		// to adjust Meton
  E = Div((year * 5), 4) - 10 - C	// day-of-week
  F = ( (11 * A + 20 + D - C) % 30 + 30) % 30
    // the double % protects against F < 0 for large years
  F += (F == 24 || (F == 25 && A > 11))	// Epact
  G = 44 - F				// a Full Moon
  if (G < 21) G += 30			// Paschal Full Moon
  return G + 7 - (E + G) % 7 /* return Day-of-March */ }


var EincB=0 // end.


