var year=0; var firstYear=0                        // int, full 4 digit year
var meridian=0                                     // int, seconds from GMT
var epoch                                          // date, start of year
var amplitude=0                                    // double

// tide-prediction storage -- cst == constituent
var DATUM
var numCsts=0; var numNodes=0; var numEpochs=0     // int
var cstSpeeds; var locAmp; var locEpoch; var work  // double *
var cstEpochs; var cstNodes                        // double **

// secondary port offsets
var haveOffsets=false                              // boolean
var hLevelMult=1; var htLevelOff=0                 // double
var lLevelMult=1; var ltLevelOff=0                 // double
var htTimeOff=0; var ltTimeOff=0                   // int, seconds

// next high and low tides
var tideTime
var htTime, ltTime
var htLevel, ltLevel
var mark=0

// tidelib.c

function allocateCst()                            // allocate tide data storage
{                                                 // hard coded data elsewhere - PDGM
  if (numCsts) work = new Array(numCsts)
}

// load up harmonics data once location is found (called by load_data)
// hard wire Ullapool data here - PDGM
function loadThisData()
{
  meridian = 0
  DATUM = 3.02
  units = "meters"; unitsAbbrv = "m"
  dr = Math.PI/180
  locAmp = new Array(
    0.006, 0.110, 0.160, 0.043, 0.005, 1.510, 0.000, 0.049, 0.000, 0.000,
    0.299, 0.040, 0.070, 0.003, 0.036, 0.021, 0.002, 0.005, 0.000, 0.590,
    0.000, 0.000, 0.035, 0.011, 0.036, 0.058, 0.003, 0.000, 0.000, 0.000,
    0.085, 0.000, 0.000, 0.000, 0.000, 0.090, 0.000)
  locEpoch = new Array(
    200.9, 129.0, 235.7, 220.0,  56.5, 200.0,   0.0, 235.0,   0.0,   0.0,
    180.0, 160.0, 344.0, 274.0, 118.1, 281.0,-159.8, 234.3,   0.0, 233.0,
      0.0,   0.0, 231.7, 215.3, 167.0, 182.7, -78.2,   0.0,   0.0,   0.0,
    315.0,   0.0,   0.0,   0.0,   0.0, 255.0,   0.0)
  for (a = 0; a < numCsts; a++) locEpoch[a] *= dr
}

// load harmonics data
// hard coded data here - PDGM
function loadData()
{
  dr = Math.PI/180
  drs = dr/3600

  // estimated offsets for Ploc
  hLevelMult = 1.0769; htLevelOff = 0
  lLevelMult = 1.0714; ltLevelOff = -0.05
  htTimeOff = -300; ltTimeOff = -840
  haveOffsets = true

  // data for Ullapool
  numCsts = 37
  allocateCst(numCsts)

  // constituent speeds
  cstSpeeds = new Array(
    15.5854433, 15.0410686, 30.0821373, 29.5284789, 14.4966939, 28.9841042,
    43.4761563, 57.9682084, 86.9523126,115.9364169, 28.4397295, 27.8953548,
    13.9430356, 16.1391017, 14.9589314, 13.3986609, 12.8542862, 30.0410667,
    15.0000000, 30.0000000, 60.0000000, 90.0000000, 29.9589333, 29.4556253,
    27.9682084, 28.5125831, 13.4715145, 44.0251729, 42.9271398, 57.4238337,
    58.9841042, 31.0158958,  1.0980331,  1.0158958,  0.5443747,  0.0410686,
     0.0821373)
  for (a = 0; a < numCsts; a++) cstSpeeds[a] *= drs // convert to radians per second

  firstYear = 1970                                  // first year for nodes & epochs

  // epoch table
  numEpochs = 68
  cstEpochs = new Array(numCsts)
  cstEpochs[0] = new Array(
    270.05,   1.78,  92.97, 197.37, 286.57,  14.27, 100.25, 198.59, 281.78,   4.92,
     89.08, 188.94, 276.50,   5.57,  95.83, 201.00, 292.69,  24.71, 116.80, 222.80,
    314.35,  45.25, 135.20, 237.90, 324.96,  50.25, 134.02, 231.09, 314.52,  39.28,
    125.78, 228.00, 317.57,  48.20, 139.58, 245.48, 337.55,  69.61, 161.44, 266.83,
    357.39,  86.88, 174.94, 275.37,   0.02,  83.38, 166.42, 264.32, 349.74,  76.91,
    165.67, 269.74,   0.69,  92.28, 184.25, 290.40,  22.39, 114.06, 205.13, 309.37,
     38.34, 125.78, 211.47, 309.58,  32.69, 115.92, 200.32, 300.47)
  cstEpochs[1] = new Array(
     13.44,  15.49,  17.10,  19.05,  19.16,  18.22,  16.17,  14.11,  10.46,   6.78,
      3.66,   2.49,   1.46,   1.47,   2.36,   4.91,   6.93,   9.21,  11.55,  14.76,
     16.66,  18.05,  18.71,  19.41,  18.04,  15.58,  12.24,   9.48,   5.96,   3.18,
      1.46,   1.83,   2.21,   3.38,   5.15,   8.28,  10.60,  12.92,  15.04,  17.76,
     18.89,  19.20,  18.51,  17.70,  14.86,  11.30,   7.56,   5.26,   2.87,   1.58,
      1.37,   3.07,   4.49,   6.43,   8.66,  12.00,  14.26,  16.25,  17.78,  19.60,
     19.55,  18.43,  16.21,  14.02,  10.32,   6.69,   3.71,   2.72)
  cstEpochs[2] = new Array(
    207.25, 211.54, 214.77, 218.44, 218.22, 215.87, 211.50, 207.58, 200.89, 194.16,
    188.16, 185.60, 183.05, 182.63, 184.17, 189.26, 193.46, 198.30, 203.30, 209.98,
    213.91, 216.60, 217.60, 218.53, 215.36, 210.34, 204.04, 199.21, 192.68, 187.17,
    183.36, 183.61, 183.99, 186.18, 189.78, 196.26, 201.21, 206.15, 210.62, 216.10,
    218.18, 218.42, 216.55, 214.58, 208.98, 202.40, 195.61, 191.35, 186.43, 183.41,
    182.51, 185.62, 188.41, 192.41, 197.15, 204.13, 208.93, 213.08, 216.10, 219.49,
    218.93, 216.23, 211.57, 207.47, 200.72, 194.06, 188.25, 185.98)
  cstEpochs[3] = new Array(
    263.01,  59.88, 245.03,  81.90, 282.66,  98.96, 276.37,  99.71, 297.89, 131.01,
    310.20, 116.37, 313.40, 159.24, 350.38, 135.56, 334.44, 188.11,  26.26, 165.34,
      2.18, 212.44,  49.08, 205.69,  30.36, 229.37,  66.73, 242.79,  59.19, 244.12,
     83.71, 275.07,  95.26, 260.71, 105.01, 306.25, 133.04, 286.91, 131.88, 331.50,
    160.87, 324.65, 157.82, 348.14, 182.73,   3.65, 182.09,   1.96, 202.17,  39.83,
    211.34,  17.26, 224.34,  74.18, 246.06,  41.02, 250.95, 101.09, 279.45,  75.08,
    275.50, 118.08, 307.73, 112.34, 296.36, 131.77, 330.90, 150.45)
  cstEpochs[4] = new Array(
    155.31,  48.57, 307.44, 235.19, 158.91,  51.78, 302.47, 198.58, 135.99,  41.87,
    291.54, 170.58,  87.77,  30.23, 291.57, 171.70,  81.59,  31.81, 299.20, 179.73,
     85.44,  33.71, 304.99, 184.05,  79.09,   4.84, 293.81, 176.94,  64.81, 319.81,
    251.40, 167.57,  62.96, 316.20, 237.35, 169.82,  70.23, 323.54, 239.49, 174.78,
     77.30, 328.53, 231.31, 159.58,  72.78, 322.99, 211.44, 102.41,  42.75, 314.62,
    206.58,  90.25,  24.65, 317.03, 213.12,  96.21,  25.29, 323.68, 220.94, 101.49,
     16.36, 318.70, 220.30,  96.57, 348.29, 265.70, 200.61,  88.19)
  cstEpochs[5] = new Array(
    165.43, 266.78,   7.96,  84.54, 185.26, 285.75,  26.03, 101.78, 201.83, 301.88,
     42.01, 117.89, 218.36, 319.06,  60.00, 136.77, 238.11, 339.56,  81.04, 158.08,
    259.37,   0.47, 101.33, 177.58, 277.98,  18.20, 118.30, 193.96, 294.03,  34.20,
    134.53, 210.71, 311.50,  52.53, 153.76, 230.77, 332.24,  73.70, 175.08, 251.92,
    352.94,  93.71, 194.25, 270.19,  10.35, 110.42, 210.46, 286.18,  26.41, 126.83,
    227.47, 303.98,  45.09, 146.39, 247.82, 324.92,  66.36, 167.68, 268.83, 345.37,
     86.05, 186.50, 286.76,   2.49, 102.54, 202.60, 302.74,  18.65)
  cstEpochs[6] = new Array(
     68.15,  40.17,  11.94, 306.81, 277.89, 248.62, 219.04, 152.67, 122.75,  92.83,
     63.01, 356.84, 327.54, 298.58, 269.99, 205.16, 177.17, 149.34, 121.55,  57.12,
     29.05,   0.70, 332.00, 266.37, 236.97, 207.30, 177.44, 110.93,  81.04,  51.30,
     21.80, 316.06, 287.25, 258.79, 230.64, 166.15, 138.36, 110.55,  82.63,  17.89,
    349.41, 320.57, 291.37, 225.29, 195.53, 165.63, 135.69,  69.27,  39.62,  10.24,
    341.21, 275.96, 247.63, 219.59, 191.73, 127.38,  99.54,  71.53,  43.25, 338.06,
    309.08, 279.76, 250.14, 183.74, 153.81, 123.90,  94.11,  27.98)
  cstEpochs[7] = new Array(
    330.86, 173.56,  15.92, 169.08,  10.52, 211.49,  52.06, 203.56,  43.67, 243.77,
     84.01, 235.78,  76.72, 278.11, 119.99, 273.55, 116.22, 319.12, 162.07, 316.15,
    158.73,   0.93, 202.67, 355.16, 195.97,  36.40, 236.59,  27.91, 228.05,  68.39,
    269.07,  61.41, 263.00, 105.05, 307.52, 101.54, 304.48, 147.41, 350.17, 143.85,
    345.87, 187.43,  28.50, 180.39,  20.71, 220.84,  60.93, 212.36,  52.82, 253.66,
     94.94, 247.95,  90.18, 292.78, 135.64, 289.83, 132.72, 335.37, 177.66, 330.75,
    172.11,  13.01, 213.52,   4.99, 205.08,  45.20, 245.48,  37.31)
  cstEpochs[8] = new Array(
    136.29,  80.34,  23.88, 253.62, 195.78, 137.24,  78.09, 305.34, 245.50, 185.65,
    126.02, 353.68, 295.07, 237.17, 179.99,  50.32, 354.33, 298.67, 243.11, 114.23,
     58.10,   1.40, 304.00, 172.74, 113.95,  54.61, 354.89, 221.87, 162.08, 102.59,
     43.60, 272.12, 214.49, 157.58, 101.29, 332.31, 276.71, 221.11, 165.25,  35.77,
    338.81, 281.14, 222.75,  90.58,  31.06, 331.26, 271.39, 138.54,  79.23,  20.48,
    322.42, 191.93, 135.27,  79.17,  23.46, 254.75, 199.08, 143.05,  86.50, 316.12,
    258.16, 199.51, 140.28,   7.48, 307.62, 247.79, 188.22,  55.96)
  cstEpochs[9] = new Array(
    301.72, 347.12,  31.84, 338.16,  21.04,  62.98, 104.12,  47.12,  87.34, 127.54,
    168.03, 111.57, 153.43, 196.22, 239.98, 187.10, 232.45, 278.23, 324.14, 272.31,
    317.47,   1.86,  45.34, 350.32,  31.93,  72.81, 113.18,  55.82,  96.10, 136.79,
    178.14, 122.82, 165.99, 210.11, 255.05, 203.08, 248.95, 294.81, 340.33, 287.70,
    331.75,  14.85,  57.00,   0.77,  41.42,  81.68, 121.85,  64.73, 105.64, 147.31,
    189.89, 135.90, 180.36, 225.57, 271.28, 219.67, 265.43, 310.74, 355.33, 301.49,
    344.22,  26.02,  67.04,   9.97,  50.16,  90.39, 130.96,  74.61)
  cstEpochs[10] = new Array(
    270.11, 282.73, 295.19, 269.98, 281.98, 293.74, 305.31, 279.27, 290.60, 301.93,
    313.33, 287.43, 299.17, 311.15, 323.36, 298.35, 310.97, 323.69, 336.45, 311.70,
    324.27, 336.65, 348.79, 323.25, 334.93, 346.43, 357.80, 331.67, 343.02, 354.47,
      6.08, 340.47, 352.54,   4.84,  17.36, 352.58,   5.32,  18.07,  30.72,   5.78,
     18.07,  30.12,  41.94,  16.09,  27.53,  38.87,  50.20,  24.13,  35.63,  47.33,
     59.25,  33.97,  46.36,  58.94,  71.64,  46.95,  59.67,  72.28,  84.70,  59.45,
     71.41,  83.14,  94.67,  68.62,  79.95,  91.28, 102.70,  76.83)
  cstEpochs[11] = new Array(
     14.78, 298.69, 222.42,  95.43,  18.70, 301.74, 224.58,  96.76,  19.37, 301.97,
    224.65,  96.96,  19.98, 303.24, 226.73,  99.94,  23.83, 307.83, 231.86, 105.33,
     29.17, 312.83, 236.25, 108.92,  31.88, 314.66, 237.30, 109.39,  32.01, 314.74,
    237.63, 110.23,  33.58, 317.16, 240.95, 114.39,  38.41, 322.43, 246.37, 119.63,
     43.20, 326.53, 249.62, 121.99,  44.71, 327.33, 249.93, 122.07,  44.86, 327.83,
    251.03, 123.96,  47.63, 331.48, 255.47, 128.99,  52.99, 336.87, 260.57, 133.54,
     56.77, 339.78, 262.59, 134.75,  57.35, 339.96, 262.66, 135.00)
  cstEpochs[12] = new Array(
    150.70, 249.04, 347.76,  61.72, 161.97, 263.47,   6.50,  85.70, 191.28, 296.92,
     41.60, 119.41, 221.05, 321.40,  60.80, 134.19, 232.56, 330.72,  68.82, 141.65,
    240.11, 339.03,  78.68, 154.01, 256.08, 359.72, 104.77, 185.15, 290.51,  34.64,
    137.21, 212.94, 312.88,  52.01, 150.59, 223.48, 321.60,  59.73, 158.00, 231.24,
    330.41,  70.43, 171.62, 248.92, 353.16,  98.58, 204.31, 283.91,  27.45, 129.41,
    230.02, 304.24,  43.13, 141.57, 239.75, 312.48,  50.65, 149.04, 247.83, 321.92,
     62.35, 164.09, 267.37, 346.78,  92.45, 197.99, 302.46,  20.01)
  cstEpochs[13] = new Array(
     58.75, 326.43, 232.65, 163.92,  64.60, 321.07, 212.54, 126.46,   9.82, 253.01,
    139.20,  57.54, 313.57, 213.91, 117.58,  50.97, 318.55, 226.97, 135.62,  71.21,
    338.41, 243.83, 146.63,  73.14, 327.73, 217.24, 102.27,  12.47, 256.52, 144.46,
     37.45, 322.60, 224.34, 129.03,  35.76, 331.10, 239.67, 148.23,  56.16, 350.12,
    254.63, 156.14,  53.64, 333.61, 221.23, 105.09, 348.00, 260.62, 150.48,  45.42,
    304.87, 235.22, 140.79,  48.09, 316.39, 252.38, 160.76,  68.26, 334.17, 264.98,
    165.05,  60.75, 311.40, 224.63, 107.73, 351.22, 238.11, 157.28)
  cstEpochs[14] = new Array(
    349.76, 350.00, 350.24, 349.50, 349.73, 349.97, 350.21, 349.46, 349.70, 349.94,
    350.18, 349.43, 349.67, 349.91, 350.15, 349.40, 349.64, 349.88, 350.12, 349.37,
    349.61, 349.85, 350.09, 349.34, 349.58, 349.82, 350.06, 349.31, 349.55, 349.79,
    350.03, 349.28, 349.52, 349.76, 350.00, 349.25, 349.49, 349.73, 349.97, 349.22,
    349.46, 349.70, 349.93, 349.19, 349.43, 349.67, 349.90, 349.16, 349.40, 349.63,
    349.87, 349.13, 349.36, 349.60, 349.84, 349.10, 349.33, 349.57, 349.81, 349.06,
    349.30, 349.54, 349.78, 349.03, 349.27, 349.51, 349.75, 349.00)
  cstEpochs[15] = new Array(
    255.38, 265.00, 274.99, 247.16, 258.69, 271.47, 285.78, 263.19, 280.05, 296.96,
    312.93, 288.95, 301.86, 313.49, 324.17, 295.77, 305.42, 314.85, 324.23, 295.27,
    305.01, 315.21, 326.14, 299.68, 313.03, 327.95, 344.28, 322.86, 339.51, 354.92,
      8.76, 342.70, 353.92,   4.32,  14.18, 345.29, 354.69,   4.09,  13.64, 345.10,
    355.55,   6.84,  19.31, 354.82,  10.34,  27.04,  44.04,  21.86,  36.67,  49.91,
     61.80,  34.24,  44.40,  54.11,  63.57,  34.52,  43.96,  53.63,  63.70,  36.00,
     47.71,  60.72,  75.29,  52.91,  69.86,  86.67, 102.42,  78.18)
  cstEpochs[16] = new Array(
      0.06, 280.95, 202.22,  72.61, 355.41, 279.47, 205.06,  80.68,   8.82, 297.01,
    224.25,  98.48,  22.67, 305.58, 227.54,  97.35,  18.28, 298.99, 219.64,  88.90,
      9.92, 291.40, 213.60,  85.35,   9.98, 296.18, 223.78, 100.58,  28.50, 315.19,
    240.31, 112.46,  34.96, 316.64, 237.78, 107.10,  27.77, 308.45, 229.28,  98.95,
     20.68, 303.25, 226.99, 100.72,  27.51, 315.49, 243.78, 119.80,  45.89, 330.41,
    253.58, 124.23,  45.67, 326.66, 247.40, 116.56,  37.28, 318.22, 239.57, 110.09,
     33.07, 317.36, 243.20, 119.04,  47.26, 335.36, 262.38, 136.36)
  cstEpochs[17] = new Array(
    177.81, 177.55, 177.30, 178.03, 177.77, 177.52, 177.26, 177.99, 177.73, 177.48,
    177.22, 177.95, 177.70, 177.44, 177.19, 177.91, 177.66, 177.40, 177.15, 177.88,
    177.62, 177.36, 177.11, 177.84, 177.58, 177.33, 177.07, 177.80, 177.54, 177.29,
    177.03, 177.76, 177.51, 177.25, 177.00, 177.72, 177.47, 177.21, 176.96, 177.69,
    177.43, 177.17, 176.92, 177.65, 177.39, 177.14, 176.88, 177.61, 177.35, 177.10,
    176.84, 177.57, 177.32, 177.06, 176.81, 177.53, 177.28, 177.02, 176.77, 177.50,
    177.24, 176.98, 176.73, 177.46, 177.20, 176.95, 176.69, 177.42)
  cstEpochs[18] = new Array(numEpochs); for (a=0; a< numEpochs; a++) cstEpochs[18][a] = 180
  cstEpochs[19] = new Array(numEpochs); for (a=0; a< numEpochs; a++) cstEpochs[19][a] = 0
  cstEpochs[20] = new Array(numEpochs); for (a=0; a< numEpochs; a++) cstEpochs[20][a] = 0
  cstEpochs[21] = new Array(numEpochs); for (a=0; a< numEpochs; a++) cstEpochs[21][a] = 0
  cstEpochs[22] = new Array(
      2.19,   2.45,   2.70,   1.97,   2.23,   2.48,   2.74,   2.01,   2.27,   2.52,
      2.78,   2.05,   2.30,   2.56,   2.81,   2.09,   2.34,   2.60,   2.85,   2.12,
      2.38,   2.64,   2.89,   2.16,   2.42,   2.67,   2.93,   2.20,   2.46,   2.71,
      2.97,   2.24,   2.49,   2.75,   3.00,   2.28,   2.53,   2.79,   3.04,   2.31,
      2.57,   2.83,   3.08,   2.35,   2.61,   2.86,   3.12,   2.39,   2.65,   2.90,
      3.16,   2.43,   2.68,   2.94,   3.19,   2.47,   2.72,   2.98,   3.23,   2.50,
      2.76,   3.02,   3.27,   2.54,   2.80,   3.05,   3.31,   2.58)
  cstEpochs[23] = new Array(
    285.57, 197.44, 109.14,   7.56, 278.81, 189.82, 100.63, 358.22, 268.80, 179.37,
     90.02, 347.75, 258.74, 169.96,  81.43, 340.05, 251.91, 163.88,  75.88, 334.76,
    246.58, 158.20,  69.60, 327.68, 238.61, 149.35,  59.97, 317.47, 228.07, 138.76,
     49.63, 307.64, 218.96, 130.51,  42.27, 301.12, 213.11, 125.10,  37.01, 295.69,
    207.23, 118.53,  29.59, 287.37, 198.06, 108.65,  19.22, 276.78, 187.53,  98.47,
      9.64, 267.99, 179.62,  91.45,   3.41, 262.34, 174.31,  86.16, 357.83, 256.21,
    167.42,  78.40, 349.18, 246.75, 157.32,  67.90, 338.57, 236.33)
  cstEpochs[24] = new Array(
    329.97, 172.07,  14.01, 166.96,   8.43, 209.67,  50.71, 202.83,  43.64, 244.44,
     85.31, 237.57,  78.79, 280.24, 121.93, 275.08, 117.17, 319.37, 161.60, 315.02,
    157.06, 358.91, 200.53, 353.15, 194.31,  35.28, 236.12,  28.15, 228.98,  69.90,
    270.99,  63.54, 265.08, 106.86, 308.85, 102.23, 304.45, 146.67, 348.80, 142.01,
    343.78, 185.31,  26.60, 178.91,  19.83, 220.65,  61.44, 213.53,  54.51, 255.68,
     97.08, 249.96,  91.82, 293.88, 136.06, 289.53, 131.72, 333.80, 175.70, 328.61,
    170.05,  11.25, 212.26,   4.36, 205.16,  45.97, 246.87,  39.15)
  cstEpochs[25] = new Array(
    225.30, 156.12,  86.78, 341.51, 271.71, 201.67, 131.43,  25.34, 314.87, 244.39,
    173.99,  68.04, 357.98, 288.15, 218.56, 113.50,  44.32, 335.24, 266.19, 161.39,
     92.16,  22.73, 313.07, 207.48, 137.36,  67.05, 356.62, 250.44, 179.98, 109.63,
     39.44, 293.77, 224.04, 154.54,  85.25, 340.42, 271.36, 202.30, 133.16,  28.16,
    318.65, 248.90, 178.91,  73.01,   2.65, 292.19, 221.71, 115.59,  45.29, 335.18,
    265.30, 159.97,  90.55,  21.33, 312.24, 207.49, 138.41,  69.21, 359.83, 254.53,
    184.69, 114.61,  44.34, 298.24, 227.76, 157.29,  86.91, 340.98)
  cstEpochs[26] = new Array(
    210.57, 138.38,  66.57, 318.70, 248.42, 179.40, 111.91,   9.26, 304.32, 239.43,
    173.59,  69.56,   0.67, 290.49, 219.37, 110.92,  38.76, 326.40, 253.97, 144.96,
     72.90,   1.30, 290.42, 183.91, 115.45,  48.57, 343.10, 241.63, 176.47, 110.08,
     42.12, 296.01, 225.43, 154.02,  82.08, 333.13, 260.73, 188.33, 116.08,   7.48,
    296.13, 225.61, 156.28,  51.75, 345.46, 280.36, 215.56, 113.32,  46.33, 337.77,
    267.86, 160.23,  88.59,  16.51, 304.17, 195.06, 122.70,  50.56, 338.83, 231.08,
    160.99,  92.20,  24.96, 282.53, 217.67, 152.68,  86.63, 342.34)
  cstEpochs[27] = new Array(
    178.87, 282.27,  25.06, 103.59, 204.42, 303.97,  42.20, 115.89, 212.29, 308.66,
     45.66, 120.38, 219.81, 320.53,  62.36, 141.69, 245.04, 348.76,  92.59, 172.84,
    276.03,  18.52, 120.04, 196.99, 296.03,  33.78, 130.54, 203.44, 299.98,  37.38,
    135.99, 212.54, 313.71,  55.91, 158.91, 239.05, 342.84,  86.62, 190.13, 269.68,
     11.83, 112.91, 212.76, 287.89,  25.21, 121.72, 218.02, 291.44,  29.28, 128.41,
    228.84, 307.04,  49.58, 152.82, 256.49, 336.91,  80.62, 183.94, 286.61,   4.98,
    105.60, 204.94, 302.97,  16.51, 112.86, 209.29, 306.45,  21.37)
  cstEpochs[28] = new Array(
    317.42, 158.07, 358.82, 150.03, 351.36, 193.27,  35.89, 189.45,  33.21, 236.99,
     80.36, 233.29,  75.26, 276.64, 117.63, 268.64, 109.29, 309.91, 150.52, 301.39,
    142.07, 342.88, 183.96, 335.75, 177.92,  20.82, 224.35,  18.43, 222.09,  65.21,
    267.61,  59.58, 260.79, 101.67, 302.38,  93.26, 293.87, 134.49, 335.12, 126.09,
    326.99, 168.22,   9.99, 162.69,   5.85, 209.54,  53.36, 207.11,  49.95, 252.08,
     93.58, 244.89,  85.68, 286.36, 126.98, 277.84, 118.46, 319.12, 159.89, 311.14,
    152.56, 354.58, 197.31, 350.97, 194.76,  38.50, 241.77,  34.59)
  cstEpochs[29] = new Array(
     75.54, 189.51, 303.15, 354.52, 107.24, 219.49, 331.33,  21.05, 132.44, 243.81,
    355.34,  45.32, 157.53, 270.20,  23.36,  75.13, 189.08, 303.25,  57.48, 109.78,
    223.64, 337.11,  90.13, 140.83, 252.92,   4.63, 116.09, 165.63, 277.04,  28.67,
    140.62, 191.17, 304.04,  57.37, 171.12, 223.35, 337.56,  91.77, 205.81, 257.70,
     11.01, 123.83, 236.19, 286.28,  37.89, 149.30, 260.66, 310.31,  62.04, 174.16,
    286.72, 337.94,  91.45, 205.33, 319.46,  11.87, 126.03, 239.96, 353.53,  44.83,
    157.47, 269.65,  21.43,  71.11, 182.49, 293.88,  45.44,  95.48)
  cstEpochs[30] = new Array(
    165.43, 266.78,   7.96,  84.54, 185.26, 285.75,  26.03, 101.78, 201.83, 301.88,
     42.01, 117.89, 218.36, 319.06,  60.00, 136.77, 238.11, 339.56,  81.04, 158.08,
    259.37,   0.47, 101.33, 177.58, 277.98,  18.20, 118.30, 193.96, 294.03,  34.20,
    134.53, 210.71, 311.50,  52.53, 153.76, 230.77, 332.24,  73.70, 175.08, 251.92,
    352.94,  93.71, 194.25, 270.19,  10.35, 110.42, 210.46, 286.18,  26.41, 126.83,
    227.47, 303.98,  45.09, 146.39, 247.82, 324.92,  66.36, 167.68, 268.83, 345.37,
     86.05, 186.50, 286.76,   2.49, 102.54, 202.60, 302.74,  18.65)
  cstEpochs[31] = new Array(
    194.57,  93.22, 352.04, 275.46, 174.74,  74.25, 333.97, 258.22, 158.17,  58.12,
    317.99, 242.11, 141.64,  40.94, 300.00, 223.23, 121.89,  20.44, 278.96, 201.92,
    100.63, 359.53, 258.67, 182.42,  82.02, 341.80, 241.70, 166.04,  65.97, 325.80,
    225.47, 149.29,  48.50, 307.47, 206.24, 129.23,  27.76, 286.30, 184.92, 108.08,
      7.06, 266.29, 165.75,  89.81, 349.65, 249.58, 149.54,  73.82, 333.59, 233.17,
    132.53,  56.02, 314.91, 213.61, 112.18,  35.08, 293.64, 192.32,  91.17,  14.63,
    273.95, 173.50,  73.24, 357.51, 257.46, 157.40,  57.26, 341.35)
  cstEpochs[32] = new Array(
     44.02, 308.69, 212.45, 141.10,  41.32, 298.80, 193.02, 110.38, 359.27, 248.05,
    138.80,  59.06, 316.26, 216.26, 118.39,  48.39, 312.99, 218.12, 123.40,  54.78,
    319.15, 222.40, 123.97,  49.56, 305.83, 198.76,  88.75,   3.66, 253.00, 144.91,
     40.12, 324.83, 225.73, 128.51,  32.59, 323.81, 229.04, 134.25,  39.08, 329.44,
    232.11, 132.86,  31.01, 312.34, 204.03,  93.25, 341.84, 258.36, 151.52,  48.00,
    307.42, 235.49, 138.83,  43.26, 308.32, 239.95, 145.06,  49.61, 313.17, 241.53,
    141.35,  38.33, 292.01, 208.93,  97.64, 346.62, 237.83, 158.63)
  cstEpochs[33] = new Array(
    194.57,  93.22, 352.04, 275.46, 174.74,  74.25, 333.97, 258.22, 158.17,  58.12,
    317.99, 242.11, 141.64,  40.94, 300.00, 223.23, 121.89,  20.44, 278.96, 201.92,
    100.63, 359.53, 258.67, 182.42,  82.02, 341.80, 241.70, 166.04,  65.97, 325.80,
    225.47, 149.29,  48.50, 307.47, 206.24, 129.23,  27.76, 286.30, 184.92, 108.08,
      7.06, 266.29, 165.75,  89.81, 349.65, 249.58, 149.54,  73.82, 333.59, 233.17,
    132.53,  56.02, 314.91, 213.61, 112.18,  35.08, 293.64, 192.32,  91.17,  14.63,
    273.95, 173.50,  73.24, 357.51, 257.46, 157.40,  57.26, 341.35)
  cstEpochs[34] = new Array(
    255.32, 344.05,  72.77, 174.56, 263.28, 352.00,  80.72, 182.51, 271.23, 359.96,
     88.68, 190.47, 279.19,   7.91,  96.63, 198.42, 287.14,  15.86, 104.59, 206.37,
    295.10,  23.82, 112.54, 214.33, 303.05,  31.77, 120.50, 222.28, 311.01,  39.73,
    128.45, 230.24, 318.96,  47.68, 136.40, 238.19, 326.91,  55.64, 144.36, 246.15,
    334.87,  63.59, 152.31, 254.10, 342.82,  71.55, 160.27, 262.05, 350.78,  79.50,
    168.22, 270.01, 358.73,  87.45, 176.18, 277.96,   6.69,  95.41, 184.13, 285.92,
     14.64, 103.36, 192.09, 293.87,  22.59, 111.32, 200.04, 301.83)
  cstEpochs[35] = new Array(
    280.24, 280.00, 279.76, 280.50, 280.27, 280.03, 279.79, 280.54, 280.30, 280.06,
    279.82, 280.57, 280.33, 280.09, 279.85, 280.60, 280.36, 280.12, 279.88, 280.63,
    280.39, 280.15, 279.91, 280.66, 280.42, 280.18, 279.94, 280.69, 280.45, 280.21,
    279.97, 280.72, 280.48, 280.24, 280.00, 280.75, 280.51, 280.27, 280.03, 280.78,
    280.54, 280.30, 280.07, 280.81, 280.57, 280.33, 280.10, 280.84, 280.60, 280.37,
    280.13, 280.87, 280.64, 280.40, 280.16, 280.90, 280.67, 280.43, 280.19, 280.94,
    280.70, 280.46, 280.22, 280.97, 280.73, 280.49, 280.25, 281.00)
  cstEpochs[36] = new Array(
    200.47, 199.99, 199.52, 201.01, 200.53, 200.05, 199.58, 201.07, 200.59, 200.12,
    199.64, 201.13, 200.65, 200.18, 199.70, 201.19, 200.72, 200.24, 199.76, 201.26,
    200.78, 200.30, 199.82, 201.32, 200.84, 200.36, 199.88, 201.38, 200.90, 200.42,
    199.95, 201.44, 200.96, 200.48, 200.01, 201.50, 201.02, 200.55, 200.07, 201.56,
    201.09, 200.61, 200.13, 201.62, 201.15, 200.67, 200.19, 201.69, 201.21, 200.73,
    200.25, 201.75, 201.27, 200.79, 200.32, 201.81, 201.33, 200.85, 200.38, 201.87,
    201.39, 200.92, 200.44, 201.93, 201.45, 200.98, 200.50, 201.99)
  for (a = 0; a < numCsts; a++)
    for (b = 0; b < numEpochs; b++)
      cstEpochs[a][b] = cstEpochs[a][b]*dr

  // node factor table
  numNodes = 68
  cstNodes = new Array(numCsts)
  cstNodes[0] = new Array(
    1.1550, 1.1324, 1.0972, 1.0504, 0.9949, 0.9359, 0.8815, 0.8421, 0.8268, 0.8396,
    0.8771, 0.9305, 0.9895, 1.0456, 1.0934, 1.1297, 1.1534, 1.1643, 1.1624, 1.1477,
    1.1203, 1.0804, 1.0298, 0.9720, 0.9137, 0.8640, 0.8329, 0.8284, 0.8516, 0.8964,
    0.9532, 1.0120, 1.0653, 1.1089, 1.1404, 1.1592, 1.1651, 1.1583, 1.1386, 1.1062,
    1.0619, 1.0080, 0.9491, 0.8928, 0.8492, 0.8278, 0.8343, 0.8669, 0.9176, 0.9761,
    1.0336, 1.0836, 1.1226, 1.1492, 1.1630, 1.1640, 1.1522, 1.1276, 1.0904, 1.0419,
    0.9854, 0.9265, 0.8739, 0.8378, 0.8269, 0.8441, 0.8849, 0.9399)
  cstNodes[1] = new Array(
1.1052, 1.0884, 1.0627, 1.0294, 0.9910, 0.9514, 0.9161, 0.8912, 0.8817, 0.8897,
0.9133, 0.9479, 0.9873, 1.0260, 1.0600, 1.0864, 1.1040, 1.1122, 1.1108, 1.0998,
1.0795, 1.0507, 1.0150, 0.9755, 0.9369, 0.9050, 0.8855, 0.8827, 0.8972, 0.9257,
0.9629, 1.0027, 1.0399, 1.0712, 1.0943, 1.1083, 1.1128, 1.1077, 1.0930, 1.0693,
1.0375, 0.9999, 0.9602, 0.9234, 0.8957, 0.8824, 0.8864, 0.9068, 0.9394, 0.9782,
1.0176, 1.0529, 1.0812, 1.1008, 1.1112, 1.1119, 1.1031, 1.0849, 1.0578, 1.0235,
0.9845, 0.9453, 0.9113, 0.8886, 0.8818, 0.8925, 0.9183, 0.9541)
  cstNodes[2] = new Array(
1.2888, 1.2313, 1.1495, 1.0538, 0.9566, 0.8697, 0.8026, 0.7610, 0.7462, 0.7585,
0.7977, 0.8626, 0.9480, 1.0447, 1.1411, 1.2247, 1.2847, 1.3140, 1.3089, 1.2699,
1.2020, 1.1135, 1.0157, 0.9210, 0.8409, 0.7834, 0.7521, 0.7478, 0.7705, 0.8199,
0.8936, 0.9848, 1.0828, 1.1755, 1.2511, 1.3000, 1.3162, 1.2977, 1.2467, 1.1695,
1.0761, 0.9781, 0.8878, 0.8156, 0.7680, 0.7472, 0.7534, 0.7865, 0.8458, 0.9272,
1.0225, 1.1201, 1.2075, 1.2736, 1.3103, 1.3131, 1.2815, 1.2195, 1.1347, 1.0379,
0.9415, 0.8573, 0.7941, 0.7567, 0.7464, 0.7630, 0.8065, 0.8751)
  cstNodes[3] = new Array(
0.8831, 0.6623, 1.1220, 1.2746, 1.0150, 0.8055, 0.9886, 1.1790, 1.1703, 0.9946,
0.8452, 1.0012, 1.2407, 1.1589, 0.7443, 0.8102, 1.2664, 1.2492, 0.7484, 0.7453,
1.2196, 1.2498, 0.8975, 0.7985, 1.0789, 1.2102, 1.1077, 0.9196, 0.8915, 1.0966,
1.2402, 1.0587, 0.7049, 0.9429, 1.3097, 1.1554, 0.6393, 0.8671, 1.2911, 1.1868,
0.7787, 0.8482, 1.1647, 1.2047, 1.0215, 0.8780, 0.9704, 1.1656, 1.2040, 0.9582,
0.7337, 1.0650, 1.3148, 1.0392, 0.5914, 1.0009, 1.3288, 1.0909, 0.6859, 0.9409,
1.2309, 1.1616, 0.9271, 0.8837, 1.0590, 1.1994, 1.1385, 0.8768)
  cstNodes[4] = new Array(
1.9909, 2.1825, 1.5072, 0.9987, 1.5402, 1.7807, 1.4297, 0.8695, 0.8719, 1.3637,
1.6606, 1.4722, 0.9663, 1.3242, 2.0508, 2.0350, 1.2909, 1.3641, 2.1506, 2.1303,
1.3325, 1.1549, 1.7790, 1.8323, 1.2847, 0.7916, 1.0850, 1.4900, 1.5626, 1.2148,
0.8804, 1.4839, 2.0511, 1.8350, 1.1273, 1.5657, 2.2502, 2.0159, 1.1805, 1.3818,
1.9709, 1.8157, 1.1232, 0.8780, 1.3201, 1.5575, 1.4048, 0.9652, 0.9344, 1.6115,
1.9812, 1.5935, 1.0584, 1.7583, 2.2830, 1.8465, 1.0994, 1.6269, 2.1025, 1.7335,
0.9911, 1.0897, 1.5305, 1.5594, 1.2040, 0.7928, 1.0825, 1.6896)
  cstNodes[5] = new Array(
0.9665, 0.9734, 0.9833, 0.9953, 1.0078, 1.0195, 1.0291, 1.0355, 1.0378, 1.0359,
1.0299, 1.0205, 1.0089, 0.9964, 0.9844, 0.9742, 0.9670, 0.9635, 0.9641, 0.9687,
0.9769, 0.9878, 1.0001, 1.0125, 1.0236, 1.0320, 1.0369, 1.0376, 1.0340, 1.0266,
1.0162, 1.0041, 0.9916, 0.9802, 0.9710, 0.9651, 0.9632, 0.9654, 0.9715, 0.9809,
0.9925, 1.0050, 1.0170, 1.0272, 1.0344, 1.0377, 1.0367, 1.0315, 1.0229, 1.0117,
0.9992, 0.9870, 0.9763, 0.9683, 0.9639, 0.9636, 0.9674, 0.9748, 0.9852, 0.9973,
1.0098, 1.0212, 1.0304, 1.0361, 1.0378, 1.0352, 1.0286, 1.0188)
  cstNodes[6] = new Array(
0.9502, 0.9604, 0.9751, 0.9929, 1.0117, 1.0295, 1.0440, 1.0537, 1.0573, 1.0543,
1.0452, 1.0310, 1.0134, 0.9946, 0.9767, 0.9616, 0.9509, 0.9457, 0.9466, 0.9535,
0.9656, 0.9818, 1.0002, 1.0188, 1.0356, 1.0485, 1.0559, 1.0569, 1.0515, 1.0402,
1.0245, 1.0062, 0.9875, 0.9704, 0.9568, 0.9482, 0.9454, 0.9486, 0.9576, 0.9715,
0.9887, 1.0075, 1.0257, 1.0411, 1.0520, 1.0571, 1.0556, 1.0477, 1.0345, 1.0176,
0.9989, 0.9805, 0.9646, 0.9529, 0.9464, 0.9459, 0.9515, 0.9625, 0.9779, 0.9959,
1.0147, 1.0321, 1.0460, 1.0547, 1.0573, 1.0532, 1.0432, 1.0283)
  cstNodes[7] = new Array(
0.9341, 0.9475, 0.9670, 0.9905, 1.0156, 1.0394, 1.0591, 1.0722, 1.0771, 1.0730,
1.0606, 1.0414, 1.0179, 0.9928, 0.9690, 0.9490, 0.9350, 0.9283, 0.9295, 0.9385,
0.9544, 0.9757, 1.0002, 1.0252, 1.0477, 1.0651, 1.0751, 1.0766, 1.0692, 1.0539,
1.0327, 1.0082, 0.9833, 0.9607, 0.9428, 0.9315, 0.9278, 0.9320, 0.9439, 0.9621,
0.9850, 1.0099, 1.0343, 1.0552, 1.0699, 1.0768, 1.0747, 1.0641, 1.0463, 1.0235,
0.9985, 0.9741, 0.9531, 0.9376, 0.9291, 0.9285, 0.9358, 0.9503, 0.9706, 0.9946,
1.0196, 1.0429, 1.0617, 1.0736, 1.0770, 1.0716, 1.0579, 1.0379)
  cstNodes[8] = new Array(
0.9028, 0.9223, 0.9509, 0.9858, 1.0235, 1.0597, 1.0900, 1.1103, 1.1178, 1.1115,
1.0923, 1.0628, 1.0270, 0.9893, 0.9539, 0.9246, 0.9041, 0.8944, 0.8961, 0.9091,
0.9324, 0.9638, 1.0003, 1.0380, 1.0724, 1.0992, 1.1148, 1.1170, 1.1055, 1.0819,
1.0495, 1.0123, 0.9750, 0.9416, 0.9155, 0.8990, 0.8937, 0.8998, 0.9170, 0.9438,
0.9775, 1.0150, 1.0519, 1.0839, 1.1067, 1.1173, 1.1141, 1.0977, 1.0702, 1.0354,
0.9977, 0.9614, 0.9305, 0.9079, 0.8956, 0.8947, 0.9052, 0.9263, 0.9562, 0.9918,
1.0296, 1.0651, 1.0940, 1.1124, 1.1177, 1.1093, 1.0882, 1.0573)
  cstNodes[9] = new Array(
0.8725, 0.8977, 0.9350, 0.9812, 1.0315, 1.0804, 1.1217, 1.1497, 1.1601, 1.1514,
1.1249, 1.0846, 1.0361, 0.9857, 0.9390, 0.9007, 0.8743, 0.8617, 0.8639, 0.8807,
0.9109, 0.9520, 1.0004, 1.0510, 1.0977, 1.1344, 1.1559, 1.1590, 1.1431, 1.1107,
1.0665, 1.0165, 0.9669, 0.9230, 0.8889, 0.8677, 0.8608, 0.8687, 0.8909, 0.9257,
0.9702, 1.0200, 1.0698, 1.1134, 1.1448, 1.1594, 1.1550, 1.1323, 1.0947, 1.0475,
0.9969, 0.9489, 0.9084, 0.8791, 0.8633, 0.8621, 0.8757, 0.9030, 0.9420, 0.9891,
1.0396, 1.0877, 1.1273, 1.1526, 1.1600, 1.1483, 1.1193, 1.0772)
  cstNodes[10] = new Array(
0.9665, 0.9734, 0.9833, 0.9953, 1.0078, 1.0195, 1.0291, 1.0355, 1.0378, 1.0359,
1.0299, 1.0205, 1.0089, 0.9964, 0.9844, 0.9742, 0.9670, 0.9635, 0.9641, 0.9687,
0.9769, 0.9878, 1.0001, 1.0125, 1.0236, 1.0320, 1.0369, 1.0376, 1.0340, 1.0266,
1.0162, 1.0041, 0.9916, 0.9802, 0.9710, 0.9651, 0.9632, 0.9654, 0.9715, 0.9809,
0.9925, 1.0050, 1.0170, 1.0272, 1.0344, 1.0377, 1.0367, 1.0315, 1.0229, 1.0117,
0.9992, 0.9870, 0.9763, 0.9683, 0.9639, 0.9636, 0.9674, 0.9748, 0.9852, 0.9973,
1.0098, 1.0212, 1.0304, 1.0361, 1.0378, 1.0352, 1.0286, 1.0188)
  cstNodes[11] = new Array(
0.9665, 0.9734, 0.9833, 0.9953, 1.0078, 1.0195, 1.0291, 1.0355, 1.0378, 1.0359,
1.0299, 1.0205, 1.0089, 0.9964, 0.9844, 0.9742, 0.9670, 0.9635, 0.9641, 0.9687,
0.9769, 0.9878, 1.0001, 1.0125, 1.0236, 1.0320, 1.0369, 1.0376, 1.0340, 1.0266,
1.0162, 1.0041, 0.9916, 0.9802, 0.9710, 0.9651, 0.9632, 0.9654, 0.9715, 0.9809,
0.9925, 1.0050, 1.0170, 1.0272, 1.0344, 1.0377, 1.0367, 1.0315, 1.0229, 1.0117,
0.9992, 0.9870, 0.9763, 0.9683, 0.9639, 0.9636, 0.9674, 0.9748, 0.9852, 0.9973,
1.0098, 1.0212, 1.0304, 1.0361, 1.0378, 1.0352, 1.0286, 1.0188)
  cstNodes[12] = new Array(
1.1702, 1.1428, 1.1010, 1.0470, 0.9849, 0.9207, 0.8629, 0.8216, 0.8057, 0.8190,
0.8582, 0.9150, 0.9789, 1.0415, 1.0965, 1.1395, 1.1683, 1.1818, 1.1794, 1.1613,
1.1282, 1.0814, 1.0237, 0.9598, 0.8970, 0.8444, 0.8121, 0.8074, 0.8315, 0.8786,
0.9394, 1.0038, 1.0640, 1.1146, 1.1524, 1.1754, 1.1828, 1.1743, 1.1503, 1.1115,
1.0601, 0.9994, 0.9349, 0.8748, 0.8290, 0.8068, 0.8135, 0.8475, 0.9011, 0.9643,
1.0279, 1.0850, 1.1309, 1.1631, 1.1801, 1.1813, 1.1668, 1.1370, 1.0930, 1.0374,
0.9745, 0.9107, 0.8549, 0.8171, 0.8059, 0.8237, 0.8665, 0.9250)
  cstNodes[13] = new Array(
1.7125, 1.5723, 1.3776, 1.1566, 0.9389, 0.7495, 0.6055, 0.5163, 0.4848, 0.5110,
0.5950, 0.7342, 0.9200, 1.1360, 1.3579, 1.5563, 1.7025, 1.7748, 1.7621, 1.6661,
1.5019, 1.2937, 1.0705, 0.8609, 0.6876, 0.5643, 0.4973, 0.4881, 0.5367, 0.6425,
0.8012, 1.0014, 1.2229, 1.4389, 1.6203, 1.7402, 1.7802, 1.7343, 1.6095, 1.4247,
1.2074, 0.9866, 0.7887, 0.6334, 0.5315, 0.4868, 0.5000, 0.5711, 0.6981, 0.8745,
1.0859, 1.3090, 1.5150, 1.6752, 1.7657, 1.7725, 1.6945, 1.5439, 1.3430, 1.1205,
0.9059, 0.7229, 0.5873, 0.5073, 0.4851, 0.5207, 0.6138, 0.7613)
  cstNodes[14] = new Array(
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000)
  cstNodes[15] = new Array(
1.1702, 1.1428, 1.1010, 1.0470, 0.9849, 0.9207, 0.8629, 0.8216, 0.8057, 0.8190,
0.8582, 0.9150, 0.9789, 1.0415, 1.0965, 1.1395, 1.1683, 1.1818, 1.1794, 1.1613,
1.1282, 1.0814, 1.0237, 0.9598, 0.8970, 0.8444, 0.8121, 0.8074, 0.8315, 0.8786,
0.9394, 1.0038, 1.0640, 1.1146, 1.1524, 1.1754, 1.1828, 1.1743, 1.1503, 1.1115,
1.0601, 0.9994, 0.9349, 0.8748, 0.8290, 0.8068, 0.8135, 0.8475, 0.9011, 0.9643,
1.0279, 1.0850, 1.1309, 1.1631, 1.1801, 1.1813, 1.1668, 1.1370, 1.0930, 1.0374,
0.9745, 0.9107, 0.8549, 0.8171, 0.8059, 0.8237, 0.8665, 0.9250)
  cstNodes[16] = new Array(
1.1702, 1.1428, 1.1010, 1.0470, 0.9849, 0.9207, 0.8629, 0.8216, 0.8057, 0.8190,
0.8582, 0.9150, 0.9789, 1.0415, 1.0965, 1.1395, 1.1683, 1.1818, 1.1794, 1.1613,
1.1282, 1.0814, 1.0237, 0.9598, 0.8970, 0.8444, 0.8121, 0.8074, 0.8315, 0.8786,
0.9394, 1.0038, 1.0640, 1.1146, 1.1524, 1.1754, 1.1828, 1.1743, 1.1503, 1.1115,
1.0601, 0.9994, 0.9349, 0.8748, 0.8290, 0.8068, 0.8135, 0.8475, 0.9011, 0.9643,
1.0279, 1.0850, 1.1309, 1.1631, 1.1801, 1.1813, 1.1668, 1.1370, 1.0930, 1.0374,
0.9745, 0.9107, 0.8549, 0.8171, 0.8059, 0.8237, 0.8665, 0.9250)
  cstNodes[17] = new Array(
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000)
  cstNodes[18] = new Array(
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000)
  cstNodes[19] = new Array(
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000                )
  cstNodes[20] = new Array(
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000)
  cstNodes[21] = new Array(
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000)
  cstNodes[22] = new Array(
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000)
  cstNodes[23] = new Array(
0.9665, 0.9734, 0.9833, 0.9953, 1.0078, 1.0195, 1.0291, 1.0355, 1.0378, 1.0359,
1.0299, 1.0205, 1.0089, 0.9964, 0.9844, 0.9742, 0.9670, 0.9635, 0.9641, 0.9687,
0.9769, 0.9878, 1.0001, 1.0125, 1.0236, 1.0320, 1.0369, 1.0376, 1.0340, 1.0266,
1.0162, 1.0041, 0.9916, 0.9802, 0.9710, 0.9651, 0.9632, 0.9654, 0.9715, 0.9809,
0.9925, 1.0050, 1.0170, 1.0272, 1.0344, 1.0377, 1.0367, 1.0315, 1.0229, 1.0117,
0.9992, 0.9870, 0.9763, 0.9683, 0.9639, 0.9636, 0.9674, 0.9748, 0.9852, 0.9973,
1.0098, 1.0212, 1.0304, 1.0361, 1.0378, 1.0352, 1.0286, 1.0188)
  cstNodes[24] = new Array(
0.9665, 0.9734, 0.9833, 0.9953, 1.0078, 1.0195, 1.0291, 1.0355, 1.0378, 1.0359,
1.0299, 1.0205, 1.0089, 0.9964, 0.9844, 0.9742, 0.9670, 0.9635, 0.9641, 0.9687,
0.9769, 0.9878, 1.0001, 1.0125, 1.0236, 1.0320, 1.0369, 1.0376, 1.0340, 1.0266,
1.0162, 1.0041, 0.9916, 0.9802, 0.9710, 0.9651, 0.9632, 0.9654, 0.9715, 0.9809,
0.9925, 1.0050, 1.0170, 1.0272, 1.0344, 1.0377, 1.0367, 1.0315, 1.0229, 1.0117,
0.9992, 0.9870, 0.9763, 0.9683, 0.9639, 0.9636, 0.9674, 0.9748, 0.9852, 0.9973,
1.0098, 1.0212, 1.0304, 1.0361, 1.0378, 1.0352, 1.0286, 1.0188)
  cstNodes[25] = new Array(
0.9665, 0.9734, 0.9833, 0.9953, 1.0078, 1.0195, 1.0291, 1.0355, 1.0378, 1.0359,
1.0299, 1.0205, 1.0089, 0.9964, 0.9844, 0.9742, 0.9670, 0.9635, 0.9641, 0.9687,
0.9769, 0.9878, 1.0001, 1.0125, 1.0236, 1.0320, 1.0369, 1.0376, 1.0340, 1.0266,
1.0162, 1.0041, 0.9916, 0.9802, 0.9710, 0.9651, 0.9632, 0.9654, 0.9715, 0.9809,
0.9925, 1.0050, 1.0170, 1.0272, 1.0344, 1.0377, 1.0367, 1.0315, 1.0229, 1.0117,
0.9992, 0.9870, 0.9763, 0.9683, 0.9639, 0.9636, 0.9674, 0.9748, 0.9852, 0.9973,
1.0098, 1.0212, 1.0304, 1.0361, 1.0378, 1.0352, 1.0286, 1.0188)
  cstNodes[26] = new Array(
1.1702, 1.1428, 1.1010, 1.0470, 0.9849, 0.9207, 0.8629, 0.8216, 0.8057, 0.8190,
0.8582, 0.9150, 0.9789, 1.0415, 1.0965, 1.1395, 1.1683, 1.1818, 1.1794, 1.1613,
1.1282, 1.0814, 1.0237, 0.9598, 0.8970, 0.8444, 0.8121, 0.8074, 0.8315, 0.8786,
0.9394, 1.0038, 1.0640, 1.1146, 1.1524, 1.1754, 1.1828, 1.1743, 1.1503, 1.1115,
1.0601, 0.9994, 0.9349, 0.8748, 0.8290, 0.8068, 0.8135, 0.8475, 0.9011, 0.9643,
1.0279, 1.0850, 1.1309, 1.1631, 1.1801, 1.1813, 1.1668, 1.1370, 1.0930, 1.0374,
0.9745, 0.9107, 0.8549, 0.8171, 0.8059, 0.8237, 0.8665, 0.9250)
  cstNodes[27] = new Array(
1.0681, 1.0595, 1.0450, 1.0245, 0.9987, 0.9700, 0.9428, 0.9229, 0.9151, 0.9216,
0.9406, 0.9673, 0.9961, 1.0223, 1.0434, 1.0584, 1.0676, 1.0716, 1.0709, 1.0654,
1.0546, 1.0378, 1.0151, 0.9877, 0.9590, 0.9339, 0.9182, 0.9159, 0.9277, 0.9503,
0.9785, 1.0068, 1.0312, 1.0499, 1.0626, 1.0697, 1.0719, 1.0694, 1.0619, 1.0488,
1.0297, 1.0049, 0.9765, 0.9485, 0.9265, 0.9156, 0.9189, 0.9354, 0.9609, 0.9897,
1.0168, 1.0392, 1.0555, 1.0660, 1.0711, 1.0715, 1.0671, 1.0575, 1.0421, 1.0207,
0.9941, 0.9654, 0.9390, 0.9207, 0.9152, 0.9239, 0.9445, 0.9720)
  cstNodes[28] = new Array(
1.0323, 1.0313, 1.0276, 1.0197, 1.0065, 0.9889, 0.9703, 0.9556, 0.9497, 0.9546,
0.9687, 0.9872, 1.0050, 1.0187, 1.0271, 1.0311, 1.0323, 1.0324, 1.0324, 1.0321,
1.0303, 1.0252, 1.0152, 1.0000, 0.9816, 0.9639, 0.9521, 0.9503, 0.9592, 0.9756,
0.9944, 1.0109, 1.0226, 1.0291, 1.0318, 1.0324, 1.0324, 1.0324, 1.0317, 1.0288,
1.0219, 1.0099, 0.9931, 0.9743, 0.9583, 0.9501, 0.9526, 0.9650, 0.9829, 1.0012,
1.0160, 1.0256, 1.0305, 1.0322, 1.0324, 1.0324, 1.0323, 1.0309, 1.0267, 1.0179,
1.0039, 0.9859, 0.9675, 0.9540, 0.9498, 0.9564, 0.9715, 0.9902)
  cstNodes[29] = new Array(
0.9341, 0.9475, 0.9670, 0.9905, 1.0156, 1.0394, 1.0591, 1.0722, 1.0771, 1.0730,
1.0606, 1.0414, 1.0179, 0.9928, 0.9690, 0.9490, 0.9350, 0.9283, 0.9295, 0.9385,
0.9544, 0.9757, 1.0002, 1.0252, 1.0477, 1.0651, 1.0751, 1.0766, 1.0692, 1.0539,
1.0327, 1.0082, 0.9833, 0.9607, 0.9428, 0.9315, 0.9278, 0.9320, 0.9439, 0.9621,
0.9850, 1.0099, 1.0343, 1.0552, 1.0699, 1.0768, 1.0747, 1.0641, 1.0463, 1.0235,
0.9985, 0.9741, 0.9531, 0.9376, 0.9291, 0.9285, 0.9358, 0.9503, 0.9706, 0.9946,
1.0196, 1.0429, 1.0617, 1.0736, 1.0770, 1.0716, 1.0579, 1.0379)
  cstNodes[30] = new Array(
0.9665, 0.9734, 0.9833, 0.9953, 1.0078, 1.0195, 1.0291, 1.0355, 1.0378, 1.0359,
1.0299, 1.0205, 1.0089, 0.9964, 0.9844, 0.9742, 0.9670, 0.9635, 0.9641, 0.9687,
0.9769, 0.9878, 1.0001, 1.0125, 1.0236, 1.0320, 1.0369, 1.0376, 1.0340, 1.0266,
1.0162, 1.0041, 0.9916, 0.9802, 0.9710, 0.9651, 0.9632, 0.9654, 0.9715, 0.9809,
0.9925, 1.0050, 1.0170, 1.0272, 1.0344, 1.0377, 1.0367, 1.0315, 1.0229, 1.0117,
0.9992, 0.9870, 0.9763, 0.9683, 0.9639, 0.9636, 0.9674, 0.9748, 0.9852, 0.9973,
1.0098, 1.0212, 1.0304, 1.0361, 1.0378, 1.0352, 1.0286, 1.0188)
  cstNodes[31] = new Array(
0.9665, 0.9734, 0.9833, 0.9953, 1.0078, 1.0195, 1.0291, 1.0355, 1.0378, 1.0359,
1.0299, 1.0205, 1.0089, 0.9964, 0.9844, 0.9742, 0.9670, 0.9635, 0.9641, 0.9687,
0.9769, 0.9878, 1.0001, 1.0125, 1.0236, 1.0320, 1.0369, 1.0376, 1.0340, 1.0266,
1.0162, 1.0041, 0.9916, 0.9802, 0.9710, 0.9651, 0.9632, 0.9654, 0.9715, 0.9809,
0.9925, 1.0050, 1.0170, 1.0272, 1.0344, 1.0377, 1.0367, 1.0315, 1.0229, 1.0117,
0.9992, 0.9870, 0.9763, 0.9683, 0.9639, 0.9636, 0.9674, 0.9748, 0.9852, 0.9973,
1.0098, 1.0212, 1.0304, 1.0361, 1.0378, 1.0352, 1.0286, 1.0188                )
  cstNodes[32] = new Array(
1.4164, 1.3412, 1.2322, 1.1010, 0.9622, 0.8312, 0.7232, 0.6517, 0.6253, 0.6473,
0.7150, 0.8200, 0.9495, 1.0883, 1.2209, 1.3324, 1.4111, 1.4490, 1.4424, 1.3918,
1.3024, 1.1834, 1.0474, 0.9095, 0.7858, 0.6907, 0.6358, 0.6281, 0.6684, 0.7517,
0.8680, 1.0032, 1.1413, 1.2671, 1.3672, 1.4310, 1.4518, 1.4279, 1.3614, 1.2591,
1.1320, 0.9935, 0.8592, 0.7448, 0.6642, 0.6271, 0.6382, 0.6961, 0.7936, 0.9188,
1.0571, 1.1924, 1.3097, 1.3966, 1.4443, 1.4478, 1.4069, 1.3256, 1.2122, 1.0787,
0.9401, 0.8118, 0.7090, 0.6442, 0.6256, 0.6552, 0.7297, 0.8397)
  cstNodes[33] = new Array(
0.9665, 0.9734, 0.9833, 0.9953, 1.0078, 1.0195, 1.0291, 1.0355, 1.0378, 1.0359,
1.0299, 1.0205, 1.0089, 0.9964, 0.9844, 0.9742, 0.9670, 0.9635, 0.9641, 0.9687,
0.9769, 0.9878, 1.0001, 1.0125, 1.0236, 1.0320, 1.0369, 1.0376, 1.0340, 1.0266,
1.0162, 1.0041, 0.9916, 0.9802, 0.9710, 0.9651, 0.9632, 0.9654, 0.9715, 0.9809,
0.9925, 1.0050, 1.0170, 1.0272, 1.0344, 1.0377, 1.0367, 1.0315, 1.0229, 1.0117,
0.9992, 0.9870, 0.9763, 0.9683, 0.9639, 0.9636, 0.9674, 0.9748, 0.9852, 0.9973,
1.0098, 1.0212, 1.0304, 1.0361, 1.0378, 1.0352, 1.0286, 1.0188)
  cstNodes[34] = new Array(
0.8826, 0.9063, 0.9405, 0.9817, 1.0254, 1.0665, 1.1005, 1.1229, 1.1312, 1.1243,
1.1031, 1.0700, 1.0293, 0.9857, 0.9441, 0.9090, 0.8843, 0.8724, 0.8744, 0.8904,
0.9184, 0.9558, 0.9986, 1.0419, 1.0808, 1.1107, 1.1279, 1.1304, 1.1177, 1.0915,
1.0550, 1.0125, 0.9691, 0.9295, 0.8981, 0.8780, 0.8715, 0.8790, 0.8999, 0.9320,
0.9720, 1.0155, 1.0577, 1.0937, 1.1190, 1.1307, 1.1272, 1.1090, 1.0783, 1.0390,
0.9955, 0.9530, 0.9162, 0.8888, 0.8738, 0.8727, 0.8856, 0.9111, 0.9468, 0.9887,
1.0323, 1.0726, 1.1049, 1.1253, 1.1312, 1.1218, 1.0984, 1.0639)
  cstNodes[35] = new Array(
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000)
  cstNodes[36] = new Array(
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000)

  loadThisData()
}

// figure out max amplitude over all the years in the node factors table
// this function by Geoffrey T. Dairiki
function figureAmplitude()
{
  var i; var a; var y
  if (amplitude == 0.0) {
    for (i = 0; i < numNodes; i++) {
      y = 0.0
      for (a=0; a < numCsts; a++)
        y += locAmp[a] * cstNodes[a][i]
      if (y > amplitude) amplitude = y
    }
// assert(amplitude > 0.0)

    // figure other, related global values (DWF)
    absmax = DATUM + amplitude
    absmin = DATUM - amplitude
  
    absmax = htLevelOff + hLevelMult * absmax
    absmin = ltLevelOff + lLevelMult * absmin
    if (absmax <= absmin) barf (MAXBELOWMIN)
    fakedatum = (absmax + absmin) / 2.0
    fakeamplitude = (absmax - absmin) / 2.0
    if (Math.abs(fakedatum) >= 100.0 || fakeamplitude >= 100.0)
      document.write("Tidelib warning:  tidal range out of normal bounds<br>")
  }
}

// figure out normalized multipliers for constituents for a particular year
function figureMultipliers()
{
  var a

  figureAmplitude()
  if (year < firstYear || year >= firstYear + numNodes) {
    doError("Tidelib:  Don't have node factors for ", year)
  }
  for (a = 0; a < numCsts; a++)
    work[a] = locAmp[a]*cstNodes[a][year-firstYear]/amplitude  // BOGUS_amplitude?
}

function happyNewYear(newYear)       // Re-initialize for a different year
{
  year = newYear
  figureMultipliers()
  if (year < firstYear || year >= firstYear + numEpochs) {
    document.write("Tidelib: no data for ", year, "<br>")
  }
  var t = new Date(year, 0, 1, 0, 0, 0)
  epoch = Math.floor(t.getTime()/1000+0.5)
}

// calculate the normalized tide (-1.0 .. 1.0) for a given time
function time2tide(t) // double time2tide(time_t t)
{
  var tide=0; var a
  newYear = t.getFullYear()
  if (newYear != year) happyNewYear(newYear)
  var time = (t.getTime())/1000-epoch+meridian
  for (a=0;a<numCsts;a++)
    tide += work[a]*Math.cos(cstSpeeds[a]*time+cstEpochs[a][year-firstYear]-locEpoch[a])
  return tide
}

// calculate the denormalized tide
function time2atide(t) // double time2atide(time_t t)
{
  return amplitude*time2tide(t) + DATUM
}

// next high tide, low tide, transition of the mark level, or some combination.
//  Bit      Meaning
//   0       low tide
//   1       high tide
//   2       falling transition - not implemented
//   3       rising transition  - not implemented

function nextBigEvent(args)                      // args.tm, date of interest
{
  var p; var q
  var flags=0; var slope=0
  var t=args.tm.getTime()
  p = time2atide(args.tm); args.tm.setTime(t+=60000)
  q = time2atide(args.tm)
  slope = (p < q)
  // advance 30 minutes at a time until slope changes
  while (slope == (p < q)) {
    t+=1800000; args.tm.setTime(t)
    p = time2atide(args.tm); args.tm.setTime(t+=60000)
    q = time2atide(args.tm)
  }
  // backup 1 minute at a time to point of interest
  q = p; args.tm.setTime(t-=120000)
  p = time2atide(args.tm)
  while (slope != (p < q)) {
    q = p; args.tm.setTime(t-=60000)
    p = time2atide(args.tm); 
  }
  flags |= slope ? 2 : 1
  t+=120000
  args.tm.setTime(t)
  args.tide = q
  return flags
}

function getNextTides(date)
{
  var args = {tm:date, tide:0}
  var flags = 0; var f
  
  // find next high and low tides
  if (!htTime) htTime = new Date()
  if (!ltTime) ltTime = new Date()
  while(flags != 3)
  {
    flags |= (f = nextBigEvent(args))
    if (f & 1) {
      ltLevel = args.tide
      ltTime.setTime(args.tm.getTime())
    }
    if (f & 2) {
      htLevel = args.tide
      htTime.setTime(args.tm.getTime())
    }
  }
}

function time2asecondary(date)          // get tide height at a secondary port
{
  var tm = new Date()
  tm.setTime(date.getTime())
  getNextTides(tm)
  tm.setTime(date.getTime()-(htTimeOff+ltTimeOff)*500)
  var t = time2atide(tm)
  var r = htLevel-ltLevel
  var a = (htLevel-t)/r; var b = (t-ltLevel)/r
  tm.setTime(date.getTime()-(ltTimeOff*a+htTimeOff*b)*1000)
  t = time2atide(tm)*(lLevelMult*a+hLevelMult*b)+(ltLevelOff*a+htLevelOff*b)
  return t
}


