var neodys;
if (!neodys) neodys = {};
//neodys = {};

neodys.basicTools = {};

neodys.basicTools.MJDtoCalendar = function(mjd) {
    /**
     * Returns the year-month-day corresponding to the Modified Julian Day mjd 
     * 
     * Doesn't handle day fractions
     **/

    var y, m, d, h;
    var jd, jdi, jdf;
    var l, n;
    
    // Julian day
    jd = Math.floor (mjd) + 2400000.5;
    jdi = Math.floor (jd); // Integer part
    jdf = jd - jdi + 0.5; // Fractional part 
    // Fix jdi and jdf if jdf >= 1
    if (jdf >= 1.0) { 
	jdf = jdf - 1.0; 
	jdi  = jdi + 1;
    }

    h = jdf * 24.0;    
    l = jdi + 68569;
    n = Math.floor (4 * l / 146097);
   
    l = Math.floor (l) - Math.floor ((146097 * n + 3) / 4);
    y = Math.floor (4000 * (l + 1) / 1461001);
    
    l = l - (Math.floor (1461 * y / 4)) + 31;
    m = Math.floor (80 * l / 2447);
    
    d = l - Math.floor (2447 * m / 80);
    
    l = Math.floor (m / 11);
    
    m = Math.floor (m + 2 - 12 * l);
    y = Math.floor (100 * (n - 49) + y + l);

    if (m < 10)
       m = "0" + m;
       
    if (d < 10)
       d = "0" + d;
    
    return (new Array (y, m, d));
}

neodys.basicTools.CalendarToMJD = function(year, month, day) {    
    /**
     * Returns the Modified Julian Day corresponding to year-month-day
     * 
     * Doesn't handle day fractions
     **/
      
    var y = Math.floor (year), 
	m = Math.floor (month),
	d = Math.floor (day),          
	L = Math.ceil ((m - 14) / 12); // -1 for Jan & Feb in leap years, otherwise 0
             
    var a = d - 32075 + Math.floor (1461 * (y + 4800 + L) / 4),
        b = Math.floor (367 * (m - 2 - L * 12) / 12),
	c = 3 * Math.floor (Math.floor ((y + 4900 + L) / 100) / 4);

    var jd = a + b - c - 0.5,
	mjd = jd - 2400000.5;
    
    return (mjd);
}
