var
ie = document.all ? true : false;

var
CalendarsToShow=2,
CalendarColorSchemes = new Array("#CCCCCC|#FFFFFF:#BB0000;#000000",
                                 "#CCCCCC|#FFFFFF:#BB0000;#000000",
                                 "#CCCCCC|#FFFFFF:#BB0000;#000000",
                                 "#CCCCCC|#FFFFFF:#BB0000;#000000",
                                 "#CCCCCC|#FFFFFF:#BB0000;#000000",
                                 "#CCCCCC|#FFFFFF:#BB0000;#000000");

function build_calendar(scheme, colors) {
//alert('entered build_calendar(' + scheme + ', ' + colors + ')');
var master = new Array();
master[1] = new Array("&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;");
master[2] = new Array("&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;");
master[3] = new Array("&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;");
master[4] = new Array("&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;");
master[5] = new Array("&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;");
master[6] = new Array("&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;");
master[7] = new Array("&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;");
master[8] = new Array("&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;");
master[9] = new Array("&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;");
master[10]= new Array("&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;");
master[11]= new Array("&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;");
master[12]= new Array("&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;","&nbsp;");

//master[3][9] = "<a href=\"http://groups.yahoo.com/group/beamug\" target=\"_top\">BEAMUG</a><BR>6pm<br><br>";
//master[3][30] = "<a href=\"http://groups.yahoo.com/group/joap-sig-dfw/\" target=\"_top\">JOAP</a><BR>Survey of Java Desktops &amp; O/S <a href='' onclick=\"alert('7pm 3/30/04\\nAxis Technologies\\n2800 N. Dallas Parkway, Suite 120\\nPlano  75093');return false;\">Location</a><br>7pm<br><br>";

// Change this every year to coincide with where various holidays land.
master[1][1]   = '<i>New Year\'s Day</i><br><br>';
master[1][18]  = '<i>MLK Day</i><br><br>';
master[1][31]  = "<i>AFC&ndash;NFC Pro Bowl<br>Dolphin Stadium, South Florida</i><br>";
master[2][2]   = '<i>Groundhog Day</i><br><br>';
master[2][7]   = "<i>Super Bowl XLIV<br>Dolphin Stadium, South Florida</i><br>";
master[2][17]  = '<i>Ash Wednesday</i><br><br>';
master[2][14]  = "<i>Valentine's Day</i><br><br>";
master[2][15]  = "<i>Presidents' Day</i><br><br>";
master[3][14]   = 'DST begins<br>';
master[3][17]  = "<i>St. Patrick's Day</i><br><br>";
master[3][20]  = 'Spring begins<br><br>';
master[3][28]  = '<i>Palm Sunday</i><br>';
master[4][15]  = '<i>Tax Day</i><br><br>';
master[3][30]  = '<i>Passover</i><br><br>';
master[4][2]  = '<i>Good Friday</i><br>';
master[4][4]  = '<i>Easter</i><br>';
master[5][9]  = '<i>Mother\'s Day</i><br><br>';
master[5][15]  = '<i>Armed Forces Day</i><br><br>';
master[5][31]  = '<i>Memorial Day</i><br>';
master[6][14]  = '<i>Flag Day</i><br><br>';
master[6][20]  = '<i>Father\'s Day</i><br><br>';
master[6][21]  = 'Summer begins<br><br>';
master[7][4]   = '<i>Independence Day</i><br><br>';
master[8][11] = '<i>1st of Ramadan</i><br><br>';
master[9][6]   = '<i>Labor Day</i><br>';
master[9][11]  = '<i>Patriot Day</i><br><br>';
master[9][23]  = 'Autumn begins<br><br>';
master[9][18]  = '<i>Yom Kippur</i><br><br>';
master[9][9]  = '<i>Rosh Hashanah</i><br><br>';
master[10][11]  = '<i>Columbus Day</i><br>';
master[10][31] = '<i>Halloween</i><br>';
master[11][7]  = 'DST ends<br>';
master[11][2]  = '<i>Election Day</i><br><br>';
master[11][11] = '<i>Veterans Day</i><br><br>';
master[11][25] = '<i>Thanksgiving</i><br><br>';
//master[11][24] = ''; // not a real holiday, but sorta
master[12][7]  = '<i>Pearl Harbor Day</i><br><br>';
master[12][21] = 'Winter begins<br><br>';
master[12][2] = '<i>Hanukkah</i><br><br>';
master[12][25] = '<i>Christmas</i><br>';
master[12][31] = '<i>New Year\'s Eve</i><br><br>';

// One shot wonders, i.e., irregular events.
//master[5][13] = "<a href=\"http://www.j2eeguys.com/sigs.htm\" target=\"_top\">J2EE SIG</a><br>The Spring Framework<BR>6:30 social<br>7pm meeting<br><br>";
//master[7][9] = "<a href=\"http://www.nofluffjuststuff.com/2004-07-austin/index.jsp\" target=\"_top\">Lone Star Java Software Symposium</a><br>Austin<br>Thru 7/11<br>";

//master[5][10] = '<a href="http://groups.yahoo.com/group/beamug" target="_top">BEAMUG</a><BR>6:30pm<br><br>';
//master[1][25] = "<a href=\"http://groups.yahoo.com/group/joap-sig-dfw/\" target=\"_top\">JOAP</a><BR>topic is TBD 7pm<br><br>";
//master[6][4]  = '<a href="" target="_top">Java Developers Group of Dallas</a><br>Richardson 2pm<br><i>today only</i><br><br>';
//master[4][3] = '<a href="http://www.dfwjbug.org/" target="_top">DFW JBoss Users Group</a><br>Addison<br>6:30 pizza<br>7pm meeting<br><br>';
//master[5][5] = '<a href="http://www.netbeans.org/community/articles/javaone/2008/nb-day.html" target="_top">NetBeans Software Day</a><br>San Francisco<br><br>';
master[9][19] = '<a href="http://java.sun.com/javaone/" target="_top">JavaOne<sup>SM</sup> Conference</a><br>San Francisco<br><i>thru 9/23</i><br><br>';
//master[9][13] = '<a href="http://www.houstontechfest.com/" target="_top">Houston TechFest</a><br>keynote by Java Technology Evangelist <a href="http://www.javapassion.com/"><i>Sang Shin</i></a><br>U of Houston (free)<br><br>';
//master[3][18] = 'Sun Microsystems<br><i>CommunityOne</i><br><a href="http://developers.sun.com/events/communityone/2009/east/">Live Webcast</a><br>8am CDT<br><br>';


// Define an array for the weekdays
var
  WeekName = new Array(
  "Sun",
  "Mon",
  "Tue",
  "Wed",
  "Thu",
  "Fri",
  "Sat"
  );

// Define an array for the months
var
  MonthName = new Array(
  "January",  "February",
  "March",    "April",
  "May",      "June",
  "July",     "August",
  "September","October",
  "November", "December"
  );
  

// Here is where the meat of the date logic begins;
//  it all starts with "what day is it today?"....
var
  today = new Date();
var
  today_dw = today.getDay(); // day of the week
var
  today_mn; // = today.getMonth();
var
  today_dy = today.getDate(); // day of the month
  var today_yr;
  if (ie) {
    today_yr = today.getYear();
  } else {
    today_yr = today.getYear() + 1900;
  }
  
// Which month to display?  Use 'scheme' as an offset
//  today_mn = today_mn + scheme;
  today_mn = today.getMonth() + scheme;
//alert('today_mn = ' + today_mn + ',   ' + MonthName[today_mn]);
  if (today_mn > 11) {
    today_mn = today_mn - 12;
    today_yr = today_yr + 1;
  }
//alert('b4 setmonth(' + today_mn + ') today=' + today + ', today_mn=' + today_mn);
  today.setMonth(today_mn);

  // HACK: without this next line, the calendar transition screws up between 8/31/04 and 9/1/04
  today.setMonth(today_mn);

//alert('screws up here -- after setmonth(' + today_mn + ') today=' + today);
  today.setYear(today_yr);
//alert('today=' + today);

// Determine which day of the week this month starts on
var
  thismonthbegin = today;
  thismonthbegin.setDate(1);
//alert('thismonthbegin=' + thismonthbegin);
var
  thismonthbegin_dw = thismonthbegin.getDay();

var
  nextmonth = today_mn + 1,
  nextyear = today_yr;
  if (nextmonth > 11) {
    nextmonth = nextmonth - 12;
    nextyear = today_yr + 1;
  }

var
  nextmonthbegin_str = MonthName[nextmonth] + " 01, " + nextyear,
  onedayms = 86400000;
//alert('nextmonthbegin_str=' + nextmonthbegin_str);

// Determine which day of the week this month ends on
// (and how many days are in this month)
var
  thismonthend = today;
  thismonthend.setTime(Date.parse(nextmonthbegin_str) - onedayms);
var
  thismonthend_dw = thismonthend.getDay();
var
  thismonthend_dy = thismonthend.getDate();

// Read and parse parameters that define the color scheme to use
var
  pipe = colors.indexOf("|"),
  colon = colors.indexOf(":"),
  semi = colors.indexOf(";"),
  color1 = colors.substring(0, pipe),
  color2 = colors.substring(pipe+1, colon),
  color3 = colors.substr(colon+1, semi),
  color4 = colors.substr(semi+1);

var
  foreground = new Array(4);
var
  background = new Array(4);
  foreground[0] = color4;
  background[0] = color1;
  foreground[1] = color4;
  background[1] = color2;
  foreground[2] = color2;
  background[2] = color3;
  foreground[3] = color2;
  background[3] = color4;

  
  var
  month = today_mn + scheme;

  
  var
  //scheme = ((scheme % 2) == 0 ? 0 : 1);
  scheme = 0; // don't alternate week colors from one month to the next


  var
  // Before we build the calendar, lets figure out
  // where the pre-defined events will end up
  // (i.e., "first tuesday", "third thursday", etc.)
  Sunday    = 0,
  Monday    = 0,
  Tuesday   = 0,
  Wednesday = 0,
  Thursday  = 0,
  Friday    = 0,
  Saturday  = 0;

  var
  // Determine how many of each DOWs there are in this month
  // This will support directives such as "LastTuesday". [RRW]
  numSunday    = 0,
  numMonday    = 0,
  numTuesday   = 0,
  numWednesday = 0,
  numThursday  = 0,
  numFriday    = 0,
  numSaturday  = 0, i;
  for (i = 0; i < thismonthend_dy; i++) {
    this_DoW = (thismonthbegin_dw + i) % 7;
    if (this_DoW == 0) { numSunday++; }
    if (this_DoW == 1) { numMonday++; }
    if (this_DoW == 2) { numTuesday++; }
    if (this_DoW == 3) { numWednesday++; }
    if (this_DoW == 4) { numThursday++; }
    if (this_DoW == 5) { numFriday++; }
    if (this_DoW == 6) { numSaturday++; }
  }
 
  for (i = 0; i < thismonthend_dy; i++) {
    this_DoW = (thismonthbegin_dw + i) % 7;
    if (this_DoW == 0) { Sunday++; }
    if (this_DoW == 1) { Monday++; }
    if (this_DoW == 2) {
      Tuesday++;
      if (Tuesday   == 1) { master[today_mn+1][i+1] += FirstTuesday; }
      if (Tuesday   == 2) { master[today_mn+1][i+1] += SecondTuesday; }
      if (Tuesday   == 3) { master[today_mn+1][i+1] += ThirdTuesday; }
	  if (Tuesday   == 4) { master[today_mn+1][i+1] += FourthTuesday; }
      if (Tuesday   == 5 || (Tuesday == 4 && numTuesday == 4)) // last Tuesday
			  { master[today_mn+1][i+1] += LastTuesday; }
    }
    if (this_DoW == 3) {
      Wednesday++;
      if (Wednesday == 1) { master[today_mn+1][i+1] += FirstWednesday; }
      if (Wednesday == 2) {
	  	// Look for the special marker of "@m@" and substitute an abbreviated month
		// for it, inside the anchor.
		// See events.js for usage example.
		master[today_mn+1][i+1] += SecondWednesday.replace(/@m@/gi, '#' + MonthName[today_mn].substr(0,3));
		// Look for the special marker of "@y@" and substitute the calculated year
		// for it, inside the anchor.  Required for the case when the number of
		// months being displayed happens to wrap into the next numerically sequential year.
		master[today_mn+1][i+1] = master[today_mn+1][i+1].replace(/@y@/gi, today_yr);
	  }
      if (Wednesday == 3) { master[today_mn+1][i+1] += ThirdWednesday; }
      if (Wednesday == 4) { master[today_mn+1][i+1] += FourthWednesday; }
    }
    if (this_DoW == 4) {
      Thursday++;
      if (Thursday  == 1) { master[today_mn+1][i+1] += FirstThursday; }
      if (Thursday  == 2) { master[today_mn+1][i+1] += SecondThursday; }
      if (Thursday  == 3) { master[today_mn+1][i+1] += ThirdThursday; }
      if (Thursday  == 4) { master[today_mn+1][i+1] += FourthThursday; }
    }
    if (this_DoW == 5) { Friday++; }
    if (this_DoW == 6) {
      Saturday++;
      //if (Saturday  == 1) { master[today_mn+1][i+1] += FirstSaturday; }
      if (Saturday  == 2) { master[today_mn+1][i+1] += SecondSaturday; }
      if (Saturday  == 3) { master[today_mn+1][i+1] += ThirdSaturday; }
      //if (Saturday  == 4) { master[today_mn+1][i+1] += FourthSaturday; }
	  if (Saturday  == 5 || (Saturday == 4 && numSaturday == 4)) // last Saturday
			  { master[today_mn+1][i+1] += LastSaturday; }
    }
  }

  // Other miscellaneous blackout days, e.g., if a user group usually meets on 2nd
  // and 4th Tuesdays, but goes on a summer schedule, then tweak the calendar here.
  // *** Writing into master array here will _clobber_ whatever was there before.

//master[11][21] = '';
//master[9][17] = '<a href="http://springdallasug.org/" target="_top">Spring SIG</a><br>No Sept Mtg<br><br><u>JavaMUG Board Meeting</u><br>Whataburger &#35;608<br>18180 Dallas Pkwy 9:15pm';
master[12][2] = '<i>Hanukkah</i>';
//master[5][20] = '<a href="http://springdallasug.org/" target="_top">Spring SIG</a><br>no meeting this month';
//master[5][26] = '<a href="http://soaug.net" target="_top">SOA UG </a><br>no meeting this month<br>';
//master[8][4] = '<a href="http://clubajax.org/#page=directions" target="_top">Club AJAX</a><br>Sun<br>7pm<br><br><a href="http://www.meetup.com/techvip/" target="_top">Dallas TechVIP</a><br>Davis Library<br>Plano<br>7pm';
//master[12][16] = '<a href="http://springdallasug.org/" target="_top">Spring SIG</a><br>No meeting this month';
//master[10][10] = '<a href="http://www.planojava.org/" target="_top">Just Plano Java</a> <br>see website<br>9:15am<br>';

//master[1][31]  = ""; // hack.  otherwise get "undefined" in rendered output


  // Begin the table
  WriteLayer('<table border="0" align="left" cellpadding="1" cellspacing="1" width="540">');

  // Display the month and year header
  WriteLayer('<tr style="background-color: #BB0000">');
  //WriteLayer('<th align="center" colspan="7" height="18">');
  //WriteLayer('<font face="Verdana, Arial, Helvetica, sans-serif" size=1 color="' +
  //foreground[2] + '"><b>' + MonthName[today_mn] + " " + today_yr + '</b></font></th></tr>');
  WriteLayer('<th style="color: white; text-align: center; font-family: Verdana, Arial, Helvetica, sans-serif" colspan="7" height="18">');
  WriteLayer('<b>' + MonthName[today_mn] + ' ' + today_yr + '</b></th></tr>');

  // Display the days of the week header
  WriteLayer('<tr style="background-color: black; color: white; font-family: Verdana, Arial, Helvetica, sans-serif">');
  for (i = 0; i < 7; i++) {
	//WriteLayer('<th align="center" height=18 width=20 bgcolor="' + background[3] + '">');
	//WriteLayer('<font size=1 color="' + foreground[3] + '" face="Verdana, Arial, Helvetica, //sans-serif">' + WeekName[i] + '</font></th>');
	WriteLayer('<th>' + WeekName[i] + '</th>');
  }
  WriteLayer("</tr>");


  // Print the blank boxes (if any) at the beginning of the month
  WriteLayer("<TR>");
  for (i = 0; i < thismonthbegin_dw; i++) {
	WriteLayer("<td width=\"100\" align=\"center\" ");
	WriteLayer("bgcolor=\"" + background[scheme] + "\" height=\"18\">");
	WriteLayer("<font face=\"Verdana,Arial,Helvetica,sans-serif\" ");
	WriteLayer("size=1 color=\"" + foreground[scheme] + "\">");
	WriteLayer("<b>&nbsp;</b>");
	WriteLayer("</font></td>");
  }
  var
  beginning = 1,
  first_pass = 1,
  last_pass = 0;

  // Print the boxes for each day of the month
  for (i = 1; i <= thismonthend_dy; i++) {
	WriteLayer("<td width=\"100\" bgcolor=\""+background[scheme]+"\" ");
	WriteLayer("height=\"18\" align=\"center\" valign=\"top\">");
        if ((i == thismonthend_dy) && (first_pass)) {
            last_pass = 1;
        }
    if (first_pass) {
      if ((i == today_dy) && (month == today_mn)) {
	WriteLayer('<font color="' + background[2] + '" ');
	WriteLayer('face="Verdana,Arial,Helvetica,sans-serif" size="1"><b>' + i + '</b></font>');
      } else {
	WriteLayer('<font color="' + foreground[scheme] + '" ');
	WriteLayer('face="Verdana,Arial,Helvetica,sans-serif" size="1"><b>' + i + '</b></font>');
      }
    } else {
	WriteLayer('<font color="' + foreground[scheme] + '" size="1" ');
	WriteLayer('face="Verdana, Arial, Helvetica, sans-serif">');
	// squeeze out the vertical white space *above* a day's entry
	//document.writeln("<p align=\"center\">" + master[today_mn+1][i] + "</font>");
	WriteLayer(master[today_mn+1][i] + '</font>');
    }
    WriteLayer('<br></td>');
    if (last_pass) {
      last_pass = 0;
      for (j = thismonthend_dw; j < 6; j++) {
	WriteLayer('<td width="100" align="center" height="18" bgcolor="'+background[scheme]+'">');
	WriteLayer('<font face="Verdana,Arial,Helvetica,sans-serif" size="1" color="'+foreground[scheme]+'">');
	WriteLayer('&nbsp;</font></td>');
      }
      i = i + (6 - thismonthend_dw);
    }

    if ( ((i + thismonthbegin_dw) % 7) == 0) {
      WriteLayer('</TR><TR>');
      if (first_pass) {
        first_pass = 0;
        if (beginning) {
          beginning = 0;
          i = i - (7-thismonthbegin_dw);
          scheme = (scheme == 0 ? 1 : 0);
          for (j = 0; j < thismonthbegin_dw; j++) {
              WriteLayer('<td width="100" align="center" height="18" ');
              WriteLayer('bgcolor="'+background[scheme]+'">');
              WriteLayer('<font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="' + foreground[scheme] + '">');
              WriteLayer('&nbsp;</font></td>');
          }
          scheme = (scheme == 0 ? 1 : 0);
        } else {
          i = i - 7;
        }
      } else {
        first_pass = 1;
      } 
      scheme = (scheme == 0 ? 1 : 0);
    }
  }

  // Print the blank boxes (if any) at the end of the month.
  for (j = thismonthend_dw; j < 6; j++) {
      WriteLayer('<td width="100" align="center" height="18" bgcolor="' + background[scheme] + '">');
      WriteLayer('<font face="Verdana,Arial,Helvetica,sans-serif" ');
      WriteLayer('size=1 color="' + foreground[scheme] + '"><b>&nbsp;</b></font></td>');
  }

  // Finish off the table
  WriteLayer('</TR></TABLE><BR>');
} // end of build_calendar()

var gsText = "";
function showIt(ID,parentID) {
	//alert("WRITING to layer " + ID + gsText);
	if (document.layers) { // NN 4.* -- broken for us bcuz it always rewrites entire layer
		var oLayer = (parentID)? eval('document.' + parentID + '.document.' + ID + '.document') : document.layers[ID].document;
		oLayer.open();
		oLayer.write(gsText);
		oLayer.close();
	}
	else if (ie) document.all[ID].innerHTML = gsText;
	else if (parseInt(navigator.appVersion)>=5 && navigator.appName=="Netscape") { // NN 5/6/7
		document.getElementById(ID).innerHTML = gsText;
	}
	gsText = "";
} // end of showIt()

function WriteLayer(sText) {
// Two examples of a div tag, into which the button below will write:
//<DIV ID="MyLayer" style="width:180px;height:200px;overflow:auto;border:1px black solid;" onselectstart=" window.event.returnValue = false; "></DIV>
//<DIV ID="MyLayer" style="position:absolute; top:10;left:10;">Initial layer text</DIV>
//<form>
//	<br>
//	<br>
//	<input type="button" value="Write Time" onclick="showIt('MyLayer',null)">
//</form>
// See http://www.sitepoint.com/article/1024
	//alert("writing '" + sText + "'");
	gsText += sText;
} // end of WriteLayer()

function setNumMonths() {
	var	CalendarsToShow = 1;
	for (var i = 0; i < document.mnths.elements.length; i++) {
		if (document.mnths.numOfMonths[i].checked) {
			//alert("selected " + document.mnths.numOfMonths[i].value);
			CalendarsToShow = document.mnths.numOfMonths[i].value;
			break;
		}
	}
	
	//alert("CalendarsToShow is " + CalendarsToShow);
	for (var cal = 0; cal < CalendarsToShow; cal++) {
		build_calendar(cal, CalendarColorSchemes[cal]);
		WriteLayer("<br clear=\"all\">&nbsp;&nbsp;<a href=\"#_top\">Top</a>");
		WriteLayer("<p style=\"margin-top: 0; margin-bottom: 0\" align=left>&nbsp;</p>");
	}
	WriteCalSuffix();

	showIt('CalLayer',null);
} // end of setNumMonths()

function WriteCalSuffix() {
	var coded = "1owzc5:fsp1obcsa@xoeo1du.5au"; // webmaster at javamug period org
	var persName = "webmaster";
	var cipher= "aZbYcXdWeVfUgThSiRjQkPlOmNnMoLpKqJrIsHtGuFvEwDxCyBzA1234567890";
	var shift=coded.length;
	var link="";
	for (i=0; i<coded.length; i++) {
		if (cipher.indexOf(coded.charAt(i))==-1) {
			ltr=coded.charAt(i)
			link+=(ltr)
		}
		else {     
			ltr = (cipher.indexOf(coded.charAt(i))-shift+cipher.length) % cipher.length
			link+=(cipher.charAt(ltr))
		}				
	}
	gsText += '<font face="Verdana, Arial, Helvetica, sans-serif" size="1">';
	//gsText += "<br>&nbsp;<a href=\"#_top\">Top</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
	gsText += '&nbsp;&nbsp;Please report any errors found in this schedule to the <a href="';
	gsText += link + '">' + persName + '<\/a>.</font><p>&nbsp;</p>';
} // end of WriteCalSuffix()
