1 const cometEllipticalNames = {
  2     encke: "Encke",
  3     temple2: "Temple 2",
  4     hanedaCampos: "Haneda-Campos",
  5     schwassmannWachmann2: "Schwassmann-Wachmann 2",
  6     borrelly: "Borrelly",
  7     whipple: "Whipple",
  8     oterma: "Oterma",
  9     schaumasse: "Schaumasse",
 10     comasSola: "Comas Sola",
 11     schwassmannWachmann1: "Schwassmann-Wachmann 1",
 12     neujmin1: "Neujmin 1",
 13     crommelin: "Crommelin",
 14     olbers: "Olbers",
 15     ponsBrooks: "Pons-Brooks",
 16     halley: "Halley"
 17 };
 18 
 19 const cometParabolicNames = {
 20     kohler: "Kohler"
 21 };
 22 
 23 /**
 24  * Comet Elliptical Data
 25  * 
 26  * Elements:
 27  *   0: Name
 28  *   1: epoch_EpochOfPerihelion
 29  *   2: peri_LongitudeOfPerihelion
 30  *   3: node_LongitudeOfAscendingNode
 31  *   4: period_PeriodOfOrbit
 32  *   5: axis_SemiMajorAxisOfOrbit
 33  *   6: ecc_EccentricityOfOrbit
 34  *   7: incl_InclinationOfOrbit
 35  */
 36 const cometEllipticalData = [
 37     [cometEllipticalNames.encke, 1974.32, 160.1, 334.2, 3.3, 2.21, 0.85, 12.0],
 38     [cometEllipticalNames.temple2, 1972.87, 310.2, 119.3, 5.26, 3.02, 0.55, 12.5],
 39     [cometEllipticalNames.hanedaCampos, 1978.77, 12.02, 131.7, 5.37, 3.07, 0.64, 5.81],
 40     [cometEllipticalNames.schwassmannWachmann2, 1974.7, 123.3, 126.0, 6.51, 3.49, 0.39, 3.7],
 41     [cometEllipticalNames.borrelly, 1974.36, 67.8, 75.1, 6.76, 3.58, 0.63, 30.2],
 42     [cometEllipticalNames.whipple, 1970.77, 18.2, 188.4, 7.47, 3.82, 0.35, 10.2],
 43     [cometEllipticalNames.oterma, 1958.44, 150.0, 155.1, 7.88, 3.96, 0.14, 4.0],
 44     [cometEllipticalNames.schaumasse, 1960.29, 138.1, 86.2, 8.18, 4.05, 0.71, 12.0],
 45     [cometEllipticalNames.comasSola, 1969.83, 102.9, 62.8, 8.55, 4.18, 0.58, 13.4],
 46     [cometEllipticalNames.schwassmannWachmann1, 1974.12, 334.1, 319.6, 15.03, 6.09, 0.11, 9.7],
 47     [cometEllipticalNames.neujmin1, 1966.94, 334.0, 347.2, 17.93, 6.86, 0.78, 15.0],
 48     [cometEllipticalNames.crommelin, 1956.82, 86.4, 250.4, 27.89, 9.17, 0.92, 28.9],
 49     [cometEllipticalNames.olbers, 1956.46, 150.0, 85.4, 69.47, 16.84, 0.93, 44.6],
 50     [cometEllipticalNames.ponsBrooks, 1954.39, 94.2, 255.2, 70.98, 17.2, 0.96, 74.2],
 51     [cometEllipticalNames.halley, 1986.112, 170.011, 58.154, 76.0081, 17.9435, 0.9673, 162.2384]
 52 ];
 53 
 54 /**
 55  * Comet Parabolic Data 
 56  * 
 57  * Elements:
 58  *   0: comet_name
 59  *   1: epochPeriDay
 60  *   2: epochPeriMonth
 61  *   3: epochPeriYear
 62  *   4: argPeri
 63  *   5: node
 64  *   6: periDist
 65  *   7: incl 
 66  */
 67 const cometParabolicData = [
 68     [cometParabolicNames.kohler, 10.5659, 11, 1977, 163.4799, 181.8175, 0.990662, 48.7196]
 69 ];
 70 
 71 function getCometEllipticalData(cometName) {
 72     let [comet_name, epoch_EpochOfPerihelion, peri_LongitudeOfPerihelion, node_LongitudeOfAscendingNode, period_PeriodOfOrbit, axis_SemiMajorAxisOfOrbit, ecc_EccentricityOfOrbit, incl_InclinationOfOrbit] = ["not found", -99, -99, -99, -99, -99, -99, -99]
 73 
 74     for (let iLoop = 0; iLoop < cometEllipticalData.length; iLoop++) {
 75         if (cometEllipticalData[iLoop][0] == cometName) {
 76             comet_name = String(cometEllipticalData[iLoop][0]);
 77             epoch_EpochOfPerihelion = Number(cometEllipticalData[iLoop][1]);
 78             peri_LongitudeOfPerihelion = Number(cometEllipticalData[iLoop][2]);
 79             node_LongitudeOfAscendingNode = Number(cometEllipticalData[iLoop][3]);
 80             period_PeriodOfOrbit = Number(cometEllipticalData[iLoop][4]);
 81             axis_SemiMajorAxisOfOrbit = Number(cometEllipticalData[iLoop][5]);
 82             ecc_EccentricityOfOrbit = Number(cometEllipticalData[iLoop][6]);
 83             incl_InclinationOfOrbit = Number(cometEllipticalData[iLoop][7]);
 84 
 85             break;
 86         }
 87     }
 88 
 89     return [comet_name, epoch_EpochOfPerihelion, peri_LongitudeOfPerihelion, node_LongitudeOfAscendingNode, period_PeriodOfOrbit, axis_SemiMajorAxisOfOrbit, ecc_EccentricityOfOrbit, incl_InclinationOfOrbit];
 90 };
 91 
 92 function getCometParabolicData(cometName) {
 93     let [comet_name, epochPeriDay, epochPeriMonth, epochPeriYear, argPeri, node, periDist, incl] = ["not found", -99, -99, -99, -99, -99, -99, -99];
 94 
 95     for (let iLoop = 0; iLoop < cometParabolicData.length; iLoop++) {
 96         if (cometParabolicData[iLoop][0] == cometName) {
 97             comet_name = String(cometParabolicData[iLoop][0]);
 98             epochPeriDay = Number(cometParabolicData[iLoop][1]);
 99             epochPeriMonth = Number(cometParabolicData[iLoop][2]);
100             epochPeriYear = Number(cometParabolicData[iLoop][3]);
101             argPeri = Number(cometParabolicData[iLoop][4]);
102             node = Number(cometParabolicData[iLoop][5]);
103             periDist = Number(cometParabolicData[iLoop][6]);
104             incl = Number(cometParabolicData[iLoop][7]);
105 
106             break;
107         }
108     }
109 
110     return [comet_name, epochPeriDay, epochPeriMonth, epochPeriYear, argPeri, node, periDist, incl];
111 }
112 
113 
114 module.exports = {
115     cometEllipticalNames,
116     cometParabolicNames,
117     cometEllipticalData,
118     cometParabolicData,
119     getCometEllipticalData,
120     getCometParabolicData
121 };