function EmitCalendarItemHeader(sItemHeaderText)
{
  document.writeln("    <td class='clsTableTopHeader'>");
  document.write("      ");
  document.writeln(sItemHeaderText);
  document.writeln("    </td>");
}

/* -- */

function EmitCalendarHeader(sCalendarName)
{
  document.writeln("<table width='100%' border='1'>");
  document.writeln("  <tr>");
  EmitCalendarItemHeader("Date");
    if (sCalendarName !== "greengrange")
    {
      EmitCalendarItemHeader("Venue");
    }
  EmitCalendarItemHeader("Caller");
  EmitCalendarItemHeader("Music");
    if ((sCalendarName == "montereybay") | (sCalendarName == "andy") |
        (sCalendarName == "andyold") | (sCalendarName == "all"))
    {
      EmitCalendarItemHeader("Sponsor");
    }
  document.writeln("  </tr>");
}

/* -- */

function EmitCalendarFooter()
{
  document.writeln("</table>");
}

/* -- */

function EmitMusicCell(lMusicItem)
{
  var iMusicianItem;
  document.writeln("    <td class='clsCalendarCell'>");
  document.writeln("      ", lMusicItem[0]);
  document.writeln("      <ul>");
  for (iMusicianItem in lMusicItem[1])
  {
    document.writeln("<li>");
    document.writeln(lMusicItem[1][iMusicianItem]);
  }
  document.writeln("      </ul>");
  document.writeln("    </td>");
}

/* -- */

function EmitCalendarItem(lCalItem, sCalendarName)
{
  document.writeln("  <tr>");

  // Date
  document.writeln("    <td class='clsCalendarCell'>");
  document.write("      ");
  document.writeln(lCalItem[0]);
  document.writeln("    </td>");

  // Venue
  if (sCalendarName !== "greengrange")
  {
    document.writeln("    <td class='clsCalendarCell'>");
    document.write("      ");
    document.writeln(lCalItem[1]);
    document.writeln("    </td>");
  }

  // Caller
  document.writeln("    <td class='clsCalendarCell'>");
  document.write("      ");
  document.writeln(lCalItem[2]);
  document.writeln("    </td>");

  // Music
  EmitMusicCell(lCalItem[3]);

  // Sponsor
  if ((sCalendarName != "tdsc") && (sCalendarName != "greengrange"))
  // if ((sCalendarName == "montereybay") | (sCalendarName == "andy") | (sCalendarName == "all"))
  {
    document.writeln("    <td class='clsCalendarCell'>");
    document.write("      ");
    document.writeln(lCalItem[4]);
    document.writeln("    </td>");
    document.writeln("  </tr>");
  }
}

/* -- */

function CalendarItemMatchesCalendarName(lCalendarItem, sCalendarName)
{
  var bMatch;
  var iCalPublishName;
  bMatch = false;
  for (iCalPublishName in lCalendarItem[5])
  {
    if (sCalendarName == lCalendarItem[5][iCalPublishName]
        | (
           sCalendarName == "all"
           && (
                lCalendarItem[5][iCalPublishName].charAt(0) != "!"
                && (lCalendarItem[5][iCalPublishName].substr(
                  ((lCalendarItem[5][iCalPublishName].length) - 3),
                  ((lCalendarItem[5][iCalPublishName].length) - 1)) != "old"))
          )
       )
    {
      bMatch = true;
    }
  }
  
  return (bMatch);
}

/* -- */

function EmitCalendar(sCalendarName)
{
  EmitCalendarForward(sCalendarName);
}

/* -- */

function EmitCalendarForward(sCalendarName)
{
  var iCalItem;

  EmitCalendarHeader(sCalendarName);

  for (iCalItem in lCalContent)
  {
    if (CalendarItemMatchesCalendarName(lCalContent[iCalItem], sCalendarName))
    {
      EmitCalendarItem(lCalContent[iCalItem], sCalendarName);
    }
  }
  EmitCalendarFooter();
}

/* -- */

function EmitCalendarBackward(sCalendarName)
{
  var iCalItem;
  var nCalItemIndex;

  EmitCalendarHeader(sCalendarName);

  for (iCalItem = lCalContent.length - 1; iCalItem >= 0; iCalItem--)
  {
    if (CalendarItemMatchesCalendarName(lCalContent[iCalItem], sCalendarName))
    {
      EmitCalendarItem(lCalContent[iCalItem], sCalendarName);
    }
  }
  EmitCalendarFooter();
}
