// ====================================================================================================
// Description:
//	Algorithms for calculation of Moon positions.
//
// Author:
//	Henk Reints
//	http://henk-reints.nl
//
// Version history:			Date:		Version comment:
//	V00.00				Nov 2000	Original version
//
// Usage:
//	To use this module you must also include astro.js
//	which provides general purpose algorithms also needed here.
//
// Reference:
//	Jean Meeus: Astronomical algorithms, 2nd ed. ISBN 0-943396-61-1
//
// DISCLAIMER:
//	THIS PACKAGE IS PROVIDED AS IS, WITHOUT ANY GUARANTEE FOR ACCURACY OR CORRECTNESS.
//	FOR PLANNING ACTIVITIES, ONE SHOULD NOT RELY ON THE RESULTS OF THIS PACKAGE, BUT
//	ALWAYS VERIFY THEM BY CONSULTING OTHER REFERENCES AS WELL.  THE AUTHOR CANNOT BE HELD
//	RESPONSIBLE FOR ANY CONSEQUENCES OF (TYPING OR PROGRAMMING) ERRORS OR MISCALCULATIONS.
//
// Notes:
//	See file astro.js for more information.
// ====================================================================================================

function MoonPosition (icoord, T)
{
	// -------------------------------------------------------------------------------
	// returns moon position at time T = Julian centuries dynamical time since J2000.0
	// icoord:
	//   0 = Longitude in degrees
	//   1 = Latitude  in degrees
	//   2 = Radius    in metres
	// -------------------------------------------------------------------------------
	var p = []
	for (var i = 0; i < moonpostable[0].length; i++) {p[i] = polynomial1 (T, moonpostable[0][i]) }
	var E = [1,p[8],p[8]*p[8]]
	var k = 1 + icoord % 2
	var m = (icoord == 2 ? 5 : 4)
	var r = 0
	for (var j = 0; j < moonpostable[k].length; j++)
	{	var a = 0
		for (var i = 0; i < 4; i++) {a += p[i] * moonpostable[k][j][i] }
		a = normdegrees (a)
		r += E[Math.abs(moonpostable[k][j][1])] * moonpostable[k][j][m] * (m == 4 ? sind(a) : cosd(a) )
	}
	if (icoord == 0) {r +=  3958 * sind(p[5])      + 1962 * sind(p[4]-p[3]) + 318 * sind(p[6])      }
	if (icoord == 1) {r += -2235 * sind(p[4])      +  382 * sind(p[7])      + 175 * sind(p[5]-p[3])
			     +   175 * sind(p[5]+p[3]) +  127 * sind(p[4]-p[2]) - 115 * sind(p[4]+p[2]) }
	if (icoord <  2) {r *= 1e-6}
	var o = [p[4],0,385000560]
	r += o[icoord]
	if (icoord == 0) {r = normdegrees (r) }
	return r
}

// ====================================================================================================

moonpostable =
[[[297.8501921,445267.1114034 ,-0.0018819, 1/545868  ,-1/113065000]	// p[0] = D
 ,[357.5291092, 35999.0502909 ,-0.0001536, 1/24490000]			// p[1] = M
 ,[134.9633964,477198.8675055 , 0.0087414, 1/69699   ,-1/14712000 ]	// p[2] = M'
 ,[ 93.2720950,483202.0175233 ,-0.0036539,-1/3526000 , 1/863310000]	// p[3] = F
 ,[218.3164477,481267.88123421,-0.0015786, 1/538841  ,-1/65194000 ]	// p[4] = L'
 ,[119.75     ,   131.849     ]						// p[5] = A1
 ,[ 53.09     ,479264.290     ]						// p[6] = A2
 ,[313.45     ,481266.484     ]						// p[7] = A3
 ,[  1        ,    -0.002516  ,-0.0000074]				// p[8] = E
 ]
,[[0, 0, 1, 0,6288774,-20905355]
 ,[2, 0,-1, 0,1274027, -3699111]
 ,[2, 0, 0, 0, 658314, -2955968]
 ,[0, 0, 2, 0, 213618,  -569925]
 ,[0, 1, 0, 0,-185116,    48888]
 ,[0, 0, 0, 2,-114332,    -3149]
 ,[2, 0,-2, 0,  58793,   246158]
 ,[2,-1,-1, 0,  57066,  -152138]
 ,[2, 0, 1, 0,  53322,  -170733]
 ,[2,-1, 0, 0,  45758,  -204586]
 ,[0, 1,-1, 0, -40923,  -129620]
 ,[1, 0, 0, 0, -34720,   108743]
 ,[0, 1, 1, 0, -30383,   104755]
 ,[2, 0, 0,-2,  15327,    10321]
 ,[0, 0, 1, 2, -12528,        0]
 ,[0, 0, 1,-2,  10980,    79661]
 ,[4, 0,-1, 0,  10675,   -34782]
 ,[0, 0, 3, 0,  10034,   -23210]
 ,[4, 0,-2, 0,   8548,   -21636]
 ,[2, 1,-1, 0,  -7888,    24208]
 ,[2, 1, 0, 0,  -6766,    30824]
 ,[1, 0,-1, 0,  -5163,    -8379]
 ,[1, 1, 0, 0,   4987,   -16675]
 ,[2,-1, 1, 0,   4036,   -12831]
 ,[2, 0, 2, 0,   3994,   -10445]
 ,[4, 0, 0, 0,   3861,   -11650]
 ,[2, 0,-3, 0,   3665,    14403]
 ,[0, 1,-2, 0,  -2689,    -7003]
 ,[2, 0,-1, 2,  -2602,        0]
 ,[2,-1,-2, 0,   2390,    10056]
 ,[1, 0, 1, 0,  -2348,     6322]
 ,[2,-2, 0, 0,   2236,    -9884]
 ,[0, 1, 2, 0,  -2120,     5751]
 ,[0, 2, 0, 0,  -2069,        0]
 ,[2,-2,-1, 0,   2048,    -4950]
 ,[2, 0, 1,-2,  -1773,     4130]
 ,[2, 0, 0, 2,  -1595,        0]
 ,[4,-1,-1, 0,   1215,    -3958]
 ,[0, 0, 2, 2,  -1110,        0]
 ,[3, 0,-1, 0,   -892,     3258]
 ,[2, 1, 1, 0,   -810,     2616]
 ,[4,-1,-2, 0,    759,    -1897]
 ,[0, 2,-1, 0,   -713,    -2117]
 ,[2, 2,-1, 0,   -700,     2354]
 ,[2, 1,-2, 0,    691,        0]
 ,[2,-1, 0,-2,    596,        0]
 ,[4, 0, 1, 0,    549,    -1423]
 ,[0, 0, 4, 0,    537,    -1117]
 ,[4,-1, 0, 0,    520,    -1571]
 ,[1, 0,-2, 0,   -487,    -1739]
 ,[2, 1, 0,-2,   -399,        0]
 ,[0, 0, 2,-2,   -381,    -4421]
 ,[1, 1, 1, 0,    351,        0]
 ,[3, 0,-2, 0,   -340,        0]
 ,[4, 0,-3, 0,    330,        0]
 ,[2,-1, 2, 0,    327,        0]
 ,[0, 2, 1, 0,   -323,     1165]
 ,[1, 1,-1, 0,    299,        0]
 ,[2, 0, 3, 0,    294,        0]
 ,[2, 0,-1,-2,      0,     8752]
 ]
,[[0, 0, 0, 1,5128122]
 ,[0, 0, 1, 1, 280602]
 ,[0, 0, 1,-1, 277693]
 ,[2, 0, 0,-1, 173237]
 ,[2, 0,-1, 1,  55413]
 ,[2, 0,-1,-1,  46271]
 ,[2, 0, 0, 1,  32573]
 ,[0, 0, 2, 1,  17198]
 ,[2, 0, 1,-1,   9266]
 ,[0, 0, 2,-1,   8822]
 ,[2,-1, 0,-1,   8216]
 ,[2, 0,-2,-1,   4324]
 ,[2, 0, 1, 1,   4200]
 ,[2, 1, 0,-1,  -3359]
 ,[2,-1,-1, 1,   2463]
 ,[2,-1, 0, 1,   2211]
 ,[2,-1,-1,-1,   2065]
 ,[0, 1,-1,-1,  -1870]
 ,[4, 0,-1,-1,   1828]
 ,[0, 1, 0, 1,  -1794]
 ,[0, 0, 0, 3,  -1749]
 ,[0, 1,-1, 1,  -1565]
 ,[1, 0, 0, 1,  -1491]
 ,[0, 1, 1, 1,  -1475]
 ,[0, 1, 1,-1,  -1410]
 ,[0, 1, 0,-1,  -1344]
 ,[1, 0, 0,-1,  -1335]
 ,[0, 0, 3, 1,   1107]
 ,[4, 0, 0,-1,   1021]
 ,[4, 0,-1, 1,    833]
 ,[0, 0, 1,-3,    777]
 ,[4, 0,-2, 1,    671]
 ,[2, 0, 0,-3,    607]
 ,[2, 0, 2,-1,    596]
 ,[2,-1, 1,-1,    491]
 ,[2, 0,-2, 1,   -451]
 ,[0, 0, 3,-1,    439]
 ,[2, 0, 2, 1,    422]
 ,[2, 0,-3,-1,    421]
 ,[2, 1,-1, 1,   -366]
 ,[2, 1, 0, 1,   -351]
 ,[4, 0, 0, 1,    331]
 ,[2,-1, 1, 1,    315]
 ,[2,-2, 0,-1,    302]
 ,[0, 0, 1, 3,   -283]
 ,[2, 1, 1,-1,   -229]
 ,[1, 1, 0,-1,    223]
 ,[1, 1, 0, 1,    223]
 ,[0, 1,-2,-1,   -220]
 ,[2, 1,-1,-1,   -220]
 ,[1, 0, 1, 1,   -185]
 ,[2,-1,-2,-1,    181]
 ,[0, 1, 2, 1,   -177]
 ,[4, 0,-2,-1,    176]
 ,[4,-1,-1,-1,    166]
 ,[1, 0, 1,-1,   -164]
 ,[4, 0, 1,-1,    132]
 ,[1, 0,-1,-1,   -119]
 ,[4,-1, 0,-1,    115]
 ,[2,-2, 0, 1,    107]
]]

// ====================================================================================================
// ====================================================================================================
// end of file; Copyright (c) 2000 Henk Reints
