function addAllShows() {
    addShow(new Show(2011, 5, 1, "iRock", "Fredericton, NB", "After Work Happy Hour", ""));
    addShow(new Show(2011, 7, 1, "Pioneer Pub @ Hazen Park", "Oromocto, NB", "Pioneer Days", "9:00 PM"));
    addShow(new Show(2011, 7, 16, "Delta Fredericton", "Fredericton, NB", "Private Function", ""));
    addShow(new Show(2011, 7, 20, "Fredericton Inn", "Fredericton, NB", "Maritime Fire Chiefs Convention", ""));
    addShow(new Show(2011, 8, 11, "Dolan's Pub", "Fredericton, NB", "Public Performance", ""));
    addShow(new Show(2011, 8, 13, "Crowne Plaza", "Fredericton, NB", "Class of 1981 Reunion", ""));
	addShow(new Show(2011, 11, 04, "Fredericton Convention Centre", "Fredericton, NB", "Armour School - 75th Anniversary", ""));
	addShow(new Show(2011, 12, 16, "Fredericton Convention Centre", "Fredericton, NB", "Radian6 Holiday Party", ""));
	addShow(new Show(2011, 12, 23, "Dolan's Pub", "Fredericton, NB", "Public Performance", ""));
	addShow(new Show(2012, 8, 25, "Kingswood", "Fredericton, NB", "Private Function", ""));
	addShow(new Show(2012, 10, 13, "Trade & Convention Centre", "Saint John, NB", "Police Ball", ""));
	addShow(new Show(2012, 12, 8, "Kingswood", "Fredericton, NB", "Private Function", ""));
}

var shows = new Array();
var ONE_DAY = 1000*60*60*24;

function Show(year, month, day, venue, city, event, time) {
    this.date = new Date(year, month - 1, day, 0, 0, 0);
    this.venue = venue;
    this.city = city;
    this.event = event;
    this.time = time;
}

function addShow(show) {
    shows[shows.length] = show;
}

function writeUpcomingShows(numShows) {
    addAllShows();
    var showsWritten = 0;
    
    for (i = 0; i < shows.length; i++) {
        var result = writeUpcomingShow(shows[i]);
        showsWritten += result;
        if (showsWritten == numShows) {
            // got enough, get out
            break;
        } else if (result > 0 && i + 1 < shows.length) {
            writeSeparator();
        }
    }
    
    if (result == 0) {
        document.write("No shows scheduled.");
    }
}

function writeSeparator() {
    document.write('<hr class="dotted"/>');
}

function writeAllShows() {
    addAllShows();

    var showsPrinted = 0;
    for (i = 0; i < shows.length; i++) {
        showsPrinted += writeShow(shows[i]);
    }
    
    if (showsPrinted == 0) {
        document.write('<tr><td colspan="4">No shows scheduled.</td></tr>');
    }
}

var monthsLong = new Array("January", "February", "March", 
    "April", "May", "June", "July", "August", "September",
    "October", "November", "December");

var months = new Array("Jan", "Feb", "Mar", 
    "Apr", "May", "Jun", "Jul", "Aug", "Sep",
    "Oct", "Nov", "Dec");

var days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");

function writeShow(show) {
    if (show.date.getTime() + ONE_DAY > new Date().getTime()) {
        var dateString = months[show.date.getMonth()] + ' ' + show.date.getDate() + ' ' + show.date.getFullYear();
        document.write('<tr>\
                            <td class="dateColumn">' + dateString + '</td>\
                            <td class="cityColumn">' + show.city + '</td>\
                            <td class="venueColumn">' + show.venue + '</td>\
                            <td class="eventColumn">' + show.event + '</td>\
                       </tr>')
        return 1;
    }
    return 0;
}

function writeUpcomingShow(show) {
    if (show.date.getTime() + ONE_DAY > new Date().getTime()) {
        var dateString = days[show.date.getDay()] + ', ' + monthsLong[show.date.getMonth()] + ' ' + show.date.getDate() + ', ' + show.date.getFullYear();
        var venueString = '';
        if (show.venue != null && show.venue != '') {
            venueString = show.venue + '<br/>';
        }
        document.write('<span class="bold">' + dateString + '</span><br/>\
                ' + venueString + show.city + '<br/>\
                ' + show.event + '<br/>' + show.time + '<br/>');
        return 1;
    }
    return 0;
}
