function tCiv(hr,mn,sc) { this.h=hr; this.m=mn; this.s=sc };
function t2c(time) {
  var min = (time - parseInt(time))*60;
  return new tCiv(parseInt(time), parseInt(min), parseInt((min-parseInt(min))*60));
};
function dCiv(dy,mo,yr,hr) { this.d=dy; this.m=mo; this.y=yr; this.h=hr };
function CALDAT(MJD) {
  var B, D, F;
  var JD, JD0, C, E;
    JD  = MJD + 2400000.5;
    JD0 = parseInt(JD+0.5);
    if ( JD0 < 2299161.0 ) { B = 0; C = JD0+1524.0  }
    else { B = parseInt((JD0-1867216.25)/36524.25);
           C = JD0+(B-parseInt(B/4))+1525.0         };
    D     = parseInt((C-122.1)/365.25);
    E     = 365.0*D+parseInt(D/4);
    F     = parseInt((C-E)/30.6001);
    DAY   = parseInt(C-E+0.5)-parseInt(30.6001*F);
    MONTH = F-1-12*parseInt(F/14);
    YEAR  = D-4715-parseInt((7+MONTH)/10);
    HOUR  = 24.0*(JD+0.5-JD0);
    return new dCiv(DAY, MONTH, YEAR, HOUR);
};
function MJD(DAY, MONTH, YEAR, HOUR) {
  var A, B;
    A = 10000.0*YEAR + 100.0*MONTH + DAY;
    if (MONTH<=2) { MONTH = MONTH+12; YEAR = YEAR-1 };
    if (A<=15821004.1) B = -2 + parseInt((YEAR+4716)/4)-1179
      else             B = parseInt(YEAR/400)-parseInt(YEAR/100)+parseInt(YEAR/4);
    A = 365.0*YEAR - 679004.0;    
    return A + B + parseInt(30.6001*(MONTH+1)) + DAY + HOUR/24.0;
};

