// Function getEvents takes a year and month and returns an array of
// arrays that provide the names of events that occur in
// that month. The index into the returned outer array is the day of the
// given month (1-31).
// Each element of this array is an array of strings, each string naming
// an event (or holiday) that occurs on that day.
//
// This function makes use of the functions and data defined in kdt.js
// which is presumed to be included by the application which calls this.
// =====================================================================

function getEvents (year, month)
{
    var ncaMugMtg = '<a href="meetings.html">NCA-MUG meeting</a>';
    var ncaMugMtgCancelled = '<a href="meetings.html">CANCELLED: NCA-MUG meeting</a>';
    var events = [
        ["REL", [2010, 2010, SEPTEMBER, SATURDAY, 7], ncaMugMtg],
        ["REL", [2010, 2010, JULY,      SATURDAY, 7], ncaMugMtg],
        ["REL", [2010, 2010, JUNE,      SATURDAY, 7], ncaMugMtg],
        ["REL", [2010, 2010, MAY,       SATURDAY, 7], ncaMugMtg],
        ["REL", [2010, 2010, APRIL,     SATURDAY, 7], ncaMugMtg],
        ["REL", [2010, 2010, MARCH,     SATURDAY, 7], ncaMugMtg],
        ["REL", [2010, 2010, FEBRUARY,  SATURDAY, 21], ncaMugMtg],
        ["REL", [2010, 2010, JANUARY,   SATURDAY, 7], ncaMugMtg],
        ["REL", [2008, 2008, JANUARY,   SATURDAY,  7], ncaMugMtg],
        ["REL", [2007, 2007, FEBRUARY,  SATURDAY,  7], ncaMugMtg],
        ["REL", [2008, 2008, FEBRUARY,  THURSDAY, 14], ncaMugMtg],
        ["REL", [2007, 2007, MARCH,     THURSDAY, 21], ncaMugMtg],
        ["REL", [2008, 2008, MARCH,     SATURDAY,  7], ncaMugMtg],
        ["ABS", [2008, 2008, APRIL,     24], ncaMugMtg],
        ["ABS", [2007, 2007, APRIL,     19], ncaMugMtg],
        ["REL", [2007, 2007, MAY,       THURSDAY, 14], ncaMugMtg],
        ["REL", [2008, 2008, MAY,       SATURDAY,  7], ncaMugMtg],
        ["REL", [2008, 2008, JUNE,      THURSDAY, 14], ncaMugMtg],
        ["ABS", [2008, 2008, JULY,      12], ncaMugMtg],
        ["ABS", [2008, 2008, SEPTEMBER, 6], ncaMugMtgCancelled],
        ["ABS", [2008, 2008, OCTOBER,   25], ncaMugMtg],
        ["ABS", [2008, 2008, NOVEMBER,  22], ncaMugMtg],
        ["ABS", [2009, 2009, JANUARY,   24], ncaMugMtg],
        ["ABS", [2009, 2009, FEBRUARY,  28], ncaMugMtg],
        ["ABS", [2009, 2009, MARCH,     14], ncaMugMtg],
        ["ABS", [2009, 2009, APRIL,     25], ncaMugMtg],
        ["ABS", [2009, 2009, MAY,       23], "NCA-MUG Meeting <em><strong>Cancelled</strong></em>"],
        ["ABS", [2009, 2009, JUNE,      27], ncaMugMtg],
        ["REL", [2009, 2009, JULY,      SATURDAY, 7], ncaMugMtg],
        ["REL", [2009, 2009, SEPTEMBER, SATURDAY, 7], ncaMugMtg],
        ["REL", [2009, 2009, OCTOBER,   SATURDAY, 7], ncaMugMtg],
        ["REL", [2009, 2009, NOVEMBER,  SATURDAY, 7], ncaMugMtg],
        ["REL", [2007, 2007, JULY,      THURSDAY, 14], ncaMugMtg],
        ["REL", [2007, 2007, SEPTEMBER, SATURDAY,  7], ncaMugMtg],
        ["REL", [2007, 2007, OCTOBER,   THURSDAY, 14], ncaMugMtg],
        ["REL", [2007, 2007, NOVEMBER,  SATURDAY,  7], ncaMugMtg],
        ["ABS", [2007, 2007, OCTOBER, 26],  'Leopard ships'],
        ["ABS", [0, 0, OCTOBER, 31],  '<abbr title="Halloween"><img src="calendar/icons/jackolantern.gif" width="50"></abbr>'],
        ["REL", [1942, 0, NOVEMBER, THURSDAY, 21], '<abbr title="Thanksgiving"><img src="calendar/icons/turkey.gif"></abbr>'],
        ["ABS", [0, 0, DECEMBER, 25],  '<abbr title="Christmas"><img src="calendar/icons/xmasTree.gif" width="45"></abbr>'],
        ["ABS", [0, 0, JANUARY, 1],  '<abbr title="New Year\'s Day"><img src="calendar/icons/newyears.gif" width="45"></abbr>'],
        ["REL", [0, 0, FEBRUARY, MONDAY, 14],  '<abbr title="President\'s Day"><img src="calendar/icons/presday.gif" width="38"></abbr>'],
        ["ABS", [0, 0, FEBRUARY, 14],  '<abbr title="Valentine\'s Day"><img src="calendar/icons/valentine.png"></abbr>'],
        ["ABS", [0, 0, MARCH, 17],  '<abbr title="St. Patrick\'s Day"><img src="calendar/icons/shamrock.jpg" width="45"></abbr>'],
        ["EASTER", [0],  '<abbr title="Easter"><img src="calendar/icons/easter.png" width="48"></abbr>'],
        ["ABS", [1970, 0, APRIL, 22],  '<abbr title="Earth Day"><img src="calendar/icons/earthday.jpeg" width="45"></abbr>'],
        ["RELEND", [0, 0, APRIL, FRIDAY, 0],  '<abbr title="Arbor Day"><img src="calendar/icons/ArborDay.jpg" width="50"></abbr>'],
        ["RELEND", [0, 0, MAY, MONDAY, 0],  '<abbr title="Memorial Day"><img src="calendar/icons/memorialday.gif" width="70"></abbr>'],
        ["ABS", [0, 0, JUNE, 14],  '<abbr title="Flag Day"><img src="calendar/icons/flag.jpg" width="70"></abbr>'],
        ["ABS", [0, 0, JULY, 4],  '<abbr title="Independence Day"><img src="calendar/icons/IndependenceDay.jpg" width="45"></abbr>']
    ];

    var dailyHoliday = new Array (32);  // ignore [0]; use [1]..[31]

    for (var d=1; d<dailyHoliday.length; d++)
        dailyHoliday[d] = [];

    for (var i=0; i<events.length; i++)
    {
        var pyear, pmonth, day, dow, offset, date, moday;
        var func = events[i][0];
        var parm = events[i][1];
        var name = events[i][2];

        switch (func)
        {
            case "ABS":
                if ((pyear = parm[0]) && year < pyear)
                    continue;
                if ((pyear = parm[1]) && year > pyear)
                    continue;
                if ((pmonth = parm[2]) && pmonth != month)
                    continue;
                day = parm[3];
                break;

            case "REL":
                if ((pyear = parm[0]) && year < pyear)
                    continue;
                if ((pyear = parm[1]) && year > pyear)
                    continue;
                if ((pmonth = parm[2]) && pmonth != month)
                    continue;
                dow     = parm[3];
                offset  = parm[4];
                day = kdtRelDay (year, month, dow, offset);
                break;

            case "RELEND":
                if ((pyear = parm[0]) && year < pyear)
                    continue;
                if ((pyear = parm[1]) && year > pyear)
                    continue;
                if ((pmonth = parm[2]) && pmonth != month)
                    continue;
                dow     = parm[3];
                offset  = parm[4];
                day     = kdtRelEndDay (year, month, dow, offset);
                break;

            case "EASTER":
                offset  = parm[0];
                moday   = kdtEaster (year);
                date = kdtNormalize (year, moday[0], moday[1] + offset);
                if (year  != date[0]) continue;
                if (month != date[1]) continue;
                day = date[2];
                break;

            case "ANNV":
                if (parm[1] != month)
                    continue;
                pyear = parm[0];
                if (pyear > year)
                    continue;
                day = parm[2];
                if (pyear > 0)
                    name += " " + (year - pyear)
                break;

            default:
                alert ("getEvents.js: Unrecognized function for \"" +
                        name + "\": " + func);
                continue;
        }

        if (day >= dailyHoliday.length) continue;
        var t = dailyHoliday[day];
        t[t.length] = name;
    }

    return dailyHoliday;
}
