/* utils.js - some extra utilities to make life easier */

/* time_since() - return time in years, months and days since a given date */
function time_since(month_start, day_start, year_start)
{
    var date_now = new Date();

    // force to integer, e.g. '09' => 9 or '03' => 3
    month_start = parseInt(month_start, 10);
    day_start = parseInt(day_start, 10);
    year_start = parseInt(year_start, 10);

    var year_diff;
    var month_diff;
    var day_diff;
    var year_now = date_now.getFullYear();
    var month_now = date_now.getMonth()+1; // month: 1 - 12
    var day_now = date_now.getDate(); // day of month: 1 - 31

    var f = 28; // days in february

    var s = '';

    // There are 29 days in February each leap year.
    if ((year_now / 4) - parseInt(year_now / 4) == 0) { f = 29; } 

    var days_in_month = new Array(31, f, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

    // Year.
    year_diff = year_now - year_start;

    // Month.
    month_diff = month_now - month_start;
    if (month_diff < 0)
    {
        month_diff += 12;
        year_diff--;
    }

    // Day.
    day_diff = day_now - day_start;
    if (day_diff < 0)
    {
        var ma = month_start + month_now;
        if (ma > 12) { ma -= 12; }
        if (ma == 0) { ma += 12; }
        day_diff += days_in_month[ma-1];
        month_diff--;
        if (month_diff < 0)
        {
            month_diff += 12;
            year_diff--;
        }
    }

    // Do the years.
    if (year_diff)
    { 
        s += year_diff + ' year'; 
        if (year_diff > 1) { s += 's'; }
        if (month_diff && day_diff) { s += ', '; }
        else if (month_diff || day_diff) { s += ' and '; }
    }

    // Do the months.
    if (month_diff)
    {
        s += month_diff + ' month';
        if (month_diff > 1) { s += 's'; }
        if (day_diff) { s += ' and '; }
    }

    // Do the days.
    if (day_diff)
    {
        s += day_diff + ' day';
        if (day_diff > 1) { s += 's'; }
    }

    return s;
}

