﻿// Draws a calendar month with the specified day highlighted.
// Andy Upton 2011

function CalendarPage(dd, mm, yyyy) {
    var dayId = "cal" + Math.floor(Math.random() * 9999);
    var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    var html = "<table class='calendar'>";
    html += "<tr><th colspan='7' >" + months[mm - 1] + " " + yyyy + "</th></tr>";
    html += "<tr><th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr>";
    html += "<tr>";

    // Add empty cell before the first day.
    var mmyyyy = new Date(yyyy, mm - 1, 1);
    var bom = mmyyyy.getDay();
    for (var i = 0; i < bom; i++) {
        html += "<td></td>";
    }

    // Add table cells for each day
    var eom = DaysInMonth(mm, yyyy);
    for (var day = 1; day < eom + 1; day++) {
        if (day == dd) {
            // Highlighted day
            html += "<td id='" + dayId + "'";
        }
        else {
            html += "<td";
        }
        html += ">" + day + "</td>";

        // end the week
        if ((bom + day) % 7 == 0) {
            html += "</tr>";
            if (day < eom) {
                html += "<tr>";
            }
        }
    }

    // Add empty cells after the last day.
    for (var i = (bom + eom) % 7; i < 7; i++) {
        html += "<td></td>";
    }

    html += "</tr></table>";
    document.write(html);

    // Style the highlighted day
    var highlight = document.getElementById(dayId);
    highlight.style.color = "white";
    highlight.style.backgroundColor = "red";
}

// Calculate the number of day in a month
// mm = 1 to 12
function DaysInMonth(mm, yyyy) {
    var result;
    if ((mm == 4) || (mm == 6) || (mm == 9) || (mm == 11)) {
        result = 30;
    }
    else {
        result = 31;
        if (mm == 2) {
            if (yyyy / 4 - parseInt(yyyy / 4) != 0) {
                result = 28;
            }
            else {
                result = 29;
            }
        }
    }
    return result;
}
