//-------------------------------------------------------------------------------------------------
// Variables used globally.
// ------------------------------------------------------------------------------------------------
var currentDay;
var currentMonth;
var currentYear;

//==================================================================================================
// Author: Matt Kruse <matt@mattkruse.com>
// WWW: http://www.mattkruse.com/
//
// NOTICE: You may use this code for any purpose, commercial or
// private, without any further permission from the author. You may
// remove this notice from your final code if you wish, however it is
// appreciated by the author if at least my web site address is kept.
//
// You may *NOT* re-distribute this code in any way except through its
// use. That means, you can include it in your product, or your web
// site, or any other form where the code is actually being used. You
// may not put the plain javascript up on your site for download or
// include it in your javascript libraries for download. 
// If you wish to share this code with others, please just point them
// to the URL instead.
// Please DO NOT link directly to my .js files from your site. Copy
// the files to your server and use them there. Thank you.
// =================================================================================================

// HISTORY
// ------------------------------------------------------------------
// May 17, 2003: Fixed bug in parseDate() for dates <1970
// March 11, 2003: Added parseDate() function
// March 11, 2003: Added "NNN" formatting option. Doesn't match up
//                 perfectly with SimpleDateFormat formats, but 
//                 backwards-compatability was required.

// ------------------------------------------------------------------
// These functions use the same 'format' strings as the 
// java.text.SimpleDateFormat class, with minor exceptions.
// The format string consists of the following abbreviations:
// 
// Field        | Full Form          | Short Form
// -------------+--------------------+-----------------------
// Year         | yyyy (4 digits)    | yy (2 digits), y (2 or 4 digits)
// Month        | MMM (name or abbr.)| MM (2 digits), M (1 or 2 digits)
//              | NNN (abbr.)        |
// Day of Month | dd (2 digits)      | d (1 or 2 digits)
// Day of Week  | EE (name)          | E (abbr)
// Hour (1-12)  | hh (2 digits)      | h (1 or 2 digits)
// Hour (0-23)  | HH (2 digits)      | H (1 or 2 digits)
// Hour (0-11)  | KK (2 digits)      | K (1 or 2 digits)
// Hour (1-24)  | kk (2 digits)      | k (1 or 2 digits)
// Minute       | mm (2 digits)      | m (1 or 2 digits)
// Second       | ss (2 digits)      | s (1 or 2 digits)
// AM/PM        | a                  |
//
// NOTE THE DIFFERENCE BETWEEN MM and mm! Month=MM, not mm!
// Examples:
//  "MMM d, y" matches: January 01, 2000
//                      Dec 1, 1900
//                      Nov 20, 00
//  "M/d/yy"   matches: 01/20/00
//                      9/2/00
//  "MMM dd, yyyy hh:mm:ssa" matches: "January 01, 2000 12:30:45AM"
// ------------------------------------------------------------------

var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
function LZ(x) {return(x<0||x>9?"":"0")+x}

// ------------------------------------------------------------------
// isDate ( date_string, format_string )
// Returns true if date string matches format of format string and
// is a valid date. Else returns false.
// It is recommended that you trim whitespace around the value before
// passing it to this function, as whitespace is NOT ignored!
// ------------------------------------------------------------------
function isDate(val,format) {
	var date=getDateFromFormat(val,format);
	if (date==0) { return false; }
	return true;
	}

// -------------------------------------------------------------------
// compareDates(date1,date1format,date2,date2format)
//   Compare two date strings to see which is greater.
//   Returns:
//   1 if date1 is greater than date2
//   0 if date2 is greater than date1 of if they are the same
//  -1 if either of the dates is in an invalid format
// -------------------------------------------------------------------
function compareDates(date1,dateformat1,date2,dateformat2) {
	var d1=getDateFromFormat(date1,dateformat1);
	var d2=getDateFromFormat(date2,dateformat2);
	if (d1==0 || d2==0) {
		return -1;
		}
	else if (d1 > d2) {
		return 1;
		}
	return 0;
	}

// ------------------------------------------------------------------
// formatDate (date_object, format)
// Returns a date in the output format specified.
// The format string uses the same abbreviations as in getDateFromFormat()
// ------------------------------------------------------------------
function formatDate(pDate,format) {
	
	//alert("0010 formatDate");
	
	var date = new Date(pDate);
	
	format=format+"";
	var result="";
	var i_format=0;
	var c="";
	var token="";
	
	//alert("0010b formatDate");
	
	var y=date.getUTCFullYear()+"";
	
	//alert("0010c formatDate");
	
	var M=date.getMonth()+1;
	var d=date.getDate();
	//alert("0010b d=" + d);
	var E=date.getDay();
	var H=date.getHours();
	var m=date.getMinutes();
	var s=date.getSeconds();
	var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
	
	//alert("0011 formatDate");
	
	// Convert real date parts into formatted versions
	var value=new Object();
	
	//alert("0012 formatDate");
	
	if (y.length < 4) {y=""+(y-0+1900);}
	value["y"]=""+y;
	value["yyyy"]=y;
	value["yy"]=y.substring(2,4);
	value["M"]=M;
	value["MM"]=LZ(M);
	value["MMM"]=MONTH_NAMES[M-1];
	value["NNN"]=MONTH_NAMES[M+11];
	value["d"]=d;
	value["dd"]=LZ(d);
	value["E"]=DAY_NAMES[E+7];
	value["EE"]=DAY_NAMES[E];
	value["H"]=H;
	value["HH"]=LZ(H);
	
	//alert("0020 formatDate");
	
	if (H==0){value["h"]=12;}
	else if (H>12){value["h"]=H-12;}
	else {value["h"]=H;}
	value["hh"]=LZ(value["h"]);
	if (H>11){value["K"]=H-12;} else {value["K"]=H;}
	value["k"]=H+1;
	value["KK"]=LZ(value["K"]);
	value["kk"]=LZ(value["k"]);
	if (H > 11) { value["a"]="PM"; }
	else { value["a"]="AM"; }
	value["m"]=m;
	value["mm"]=LZ(m);
	value["s"]=s;
	value["ss"]=LZ(s);
	
	//alert("0030 formatDate");
	
	while (i_format < format.length) {
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		if (value[token] != null) { result=result + value[token]; }
		else { result=result + token; }
		}
	
	//alert("0040 formatDate");
		
	return result;
}
	
// ------------------------------------------------------------------
// Utility functions for parsing in getDateFromFormat()
// ------------------------------------------------------------------
function _isInteger(val) {
	var digits="1234567890";
	for (var i=0; i < val.length; i++) {
		if (digits.indexOf(val.charAt(i))==-1) { return false; }
		}
	return true;
	}
function _getInt(str,i,minlength,maxlength) {
	for (var x=maxlength; x>=minlength; x--) {
		var token=str.substring(i,i+x);
		if (token.length < minlength) { return null; }
		if (_isInteger(token)) { return token; }
		}
	return null;
}
	
// ------------------------------------------------------------------
// getDateFromFormat( date_string , format_string )
//
// This function takes a date string and a format string. It matches
// If the date string matches the format string, it returns the 
// getTime() of the date. If it does not match, it returns 0.
// ------------------------------------------------------------------
function getDateFromFormat(val,format) {
	val=val+"";
	format=format+"";
	var i_val=0;
	var i_format=0;
	var c="";
	var token="";
	var token2="";
	var x,y;
	var now=new Date();
	var year=now.getUTCFullYear();
	var month=now.getMonth()+1;
	var date=1;
	var hh=now.getHours();
	var mm=now.getMinutes();
	var ss=now.getSeconds();
	var ampm="";
	
	while (i_format < format.length) {
		// Get next token from format string
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		// Extract contents of value based on format token
		if (token=="yyyy" || token=="yy" || token=="y") {
			if (token=="yyyy") { x=4;y=4; }
			if (token=="yy")   { x=2;y=2; }
			if (token=="y")    { x=2;y=4; }
			year=_getInt(val,i_val,x,y);
			if (year==null) { return 0; }
			i_val += year.length;
			if (year.length==2) {
				if (year > 70) { year=1900+(year-0); }
				else { year=2000+(year-0); }
				}
			}
		else if (token=="MMM"||token=="NNN"){
			month=0;
			for (var i=0; i<MONTH_NAMES.length; i++) {
				var month_name=MONTH_NAMES[i];
				if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {
					if (token=="MMM"||(token=="NNN"&&i>11)) {
						month=i+1;
						if (month>12) { month -= 12; }
						i_val += month_name.length;
						break;
						}
					}
				}
			if ((month < 1)||(month>12)){return 0;}
			}
		else if (token=="EE"||token=="E"){
			for (var i=0; i<DAY_NAMES.length; i++) {
				var day_name=DAY_NAMES[i];
				if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {
					i_val += day_name.length;
					break;
					}
				}
			}
		else if (token=="MM"||token=="M") {
			month=_getInt(val,i_val,token.length,2);
			if(month==null||(month<1)||(month>12)){return 0;}
			i_val+=month.length;}
		else if (token=="dd"||token=="d") {
			date=_getInt(val,i_val,token.length,2);
			if(date==null||(date<1)||(date>31)){return 0;}
			i_val+=date.length;}
		else if (token=="hh"||token=="h") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>12)){return 0;}
			i_val+=hh.length;}
		else if (token=="HH"||token=="H") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>23)){return 0;}
			i_val+=hh.length;}
		else if (token=="KK"||token=="K") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>11)){return 0;}
			i_val+=hh.length;}
		else if (token=="kk"||token=="k") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>24)){return 0;}
			i_val+=hh.length;hh--;}
		else if (token=="mm"||token=="m") {
			mm=_getInt(val,i_val,token.length,2);
			if(mm==null||(mm<0)||(mm>59)){return 0;}
			i_val+=mm.length;}
		else if (token=="ss"||token=="s") {
			ss=_getInt(val,i_val,token.length,2);
			if(ss==null||(ss<0)||(ss>59)){return 0;}
			i_val+=ss.length;}
		else if (token=="a") {
			if (val.substring(i_val,i_val+2).toLowerCase()=="am") {ampm="AM";}
			else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {ampm="PM";}
			else {return 0;}
			i_val+=2;}
		else {
			if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
			else {i_val+=token.length;}
			}
		}
	// If there are any trailing characters left in the value, it doesn't match
	if (i_val != val.length) { return 0; }
	// Is date valid for month?
	if (month==2) {
		// Check for leap year
		if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
			if (date > 29){ return 0; }
			}
		else { if (date > 28) { return 0; } }
		}
	if ((month==4)||(month==6)||(month==9)||(month==11)) {
		if (date > 30) { return 0; }
		}
	// Correct hours value
	if (hh<12 && ampm=="PM") { hh=hh-0+12; }
	else if (hh>11 && ampm=="AM") { hh-=12; }
	var newdate=new Date(year,month-1,date,hh,mm,ss);
	return newdate.getTime();
}

// ------------------------------------------------------------------
// parseDate( date_string [, prefer_euro_format] )
//
// This function takes a date string and tries to match it to a
// number of possible date formats to get the value. It will try to
// match against the following international formats, in this order:
// y-M-d   MMM d, y   MMM d,y   y-MMM-d   d-MMM-y  MMM d
// M/d/y   M-d-y      M.d.y     MMM-d     M/d      M-d
// d/M/y   d-M-y      d.M.y     d-MMM     d/M      d-M
// A second argument may be passed to instruct the method to search
// for formats like d/M/y (european format) before M/d/y (American).
// Returns a Date object or null if no patterns match.
// ------------------------------------------------------------------
function parseDate(val) {
	var preferEuro=(arguments.length==2)?arguments[1]:false;
	generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');
	monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');
	dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');
	var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');
	var d=null;
	for (var i=0; i<checkList.length; i++) {
		var l=window[checkList[i]];
		for (var j=0; j<l.length; j++) {
			d=getDateFromFormat(val,l[j]);
			if (d!=0) { return new Date(d); }
			}
		}
	return null;
}

//==================================================================================================


//-------------------------------------------------------------------------------------------------
// The EventData object and its associated prototypes will be used for holding information
// about an event.
// ------------------------------------------------------------------------------------------------
function EventData(pName){
	this.name = pName;
	this.init();
}

EventData.prototype.init = function() {
	this.eventDate = new Date("January 1, 2006");
	this.eventShortDescription = "";
	this.eventLongDescription = "";
	this.eventLink = "";
	this.eventType = "";
}

EventData.prototype.eventDate = function(pValue) {this.eventDate = new Date(pValue);}
EventData.prototype.eventShortDescription = function(pValue) {this.eventShortDescription = pValue;}
EventData.prototype.eventLongDescription = function(pValue) {this.eventLongDescription = pValue;}
EventData.prototype.eventLink = function(pValue) {this.eventLink = pValue;}
EventData.prototype.eventType = function(pValue) {this.eventType = pValue;}

var eventListing = new Array(50);
var eventListingCount = 0;

//-------------------------------------------------------------------------------------------------
// The buildEventData function will contain:
//    - the date of the event
//    - a brief description of the event
//    - a link (if any) to more information about the event.
// ------------------------------------------------------------------------------------------------
function buildEventData() {
	
	eventListingCount = 0;

	eventListingCount++;
	eventListing[eventListingCount - 1] = new EventData("item");
	eventListing[eventListingCount - 1].eventDate = "April 23, 2006";
	eventListing[eventListingCount - 1].eventShortDescription = "Washtenaw CTA April Liturgy and Potluck (Planning Meeting 1 PM, Liturgy 2 PM)";
	eventListing[eventListingCount - 1].eventLink = "UpcomingActivities/2006_April_Gathering.html";
	
	eventListingCount++;
	eventListing[eventListingCount - 1] = new EventData("item");
	eventListing[eventListingCount - 1].eventDate = "May 21, 2006";
	eventListing[eventListingCount - 1].eventShortDescription = "Washtenaw CTA May Pentecost Liturgy and Potluck with Bishop Gumbleton - Sunday, May 21, 2006 (special time 3 PM)";
	eventListing[eventListingCount - 1].eventLink = "UpcomingActivities/2006_May_Gathering.html";
	
	eventListingCount++;
	eventListing[eventListingCount - 1] = new EventData("item");
	eventListing[eventListingCount - 1].eventDate = "June 25, 2006";
	eventListing[eventListingCount - 1].eventShortDescription = "Washtenaw CTA June Liturgy and Potluck (Planning Meeting 1 PM, Liturgy 2 PM)";
	eventListing[eventListingCount - 1].eventLink = "UpcomingActivities/2006_June_Gathering.html";
	
	eventListingCount++;
	eventListing[eventListingCount - 1] = new EventData("item");
	eventListing[eventListingCount - 1].eventDate = "July 23, 2006";
	eventListing[eventListingCount - 1].eventShortDescription = "Washtenaw CTA July Liturgy and Potluck (Planning Meeting 1 PM, Liturgy 2 PM)";
	eventListing[eventListingCount - 1].eventLink = "UpcomingActivities/2006_July_Gathering.html";
	
	eventListingCount++;
	eventListing[eventListingCount - 1] = new EventData("item");
	eventListing[eventListingCount - 1].eventDate = "August 27, 2006";
	eventListing[eventListingCount - 1].eventShortDescription = "Washtenaw CTA August Liturgy and Potluck (Planning Meeting 1 PM, Liturgy 2 PM)";
	eventListing[eventListingCount - 1].eventLink = "UpcomingActivities/2006_August_Gathering.html";
	
	eventListingCount++;
	eventListing[eventListingCount - 1] = new EventData("item");
	eventListing[eventListingCount - 1].eventDate = "September 24, 2006";
	eventListing[eventListingCount - 1].eventShortDescription = "Washtenaw CTA September Liturgy and Potluck (Planning Meeting 1 PM, Liturgy 2 PM)";
	eventListing[eventListingCount - 1].eventLink = "UpcomingActivities/2006_September_Gathering.html";
	
	eventListingCount++;
	eventListing[eventListingCount - 1] = new EventData("item");
	eventListing[eventListingCount - 1].eventDate = "October 22, 2006";
	eventListing[eventListingCount - 1].eventShortDescription = "Washtenaw CTA October Liturgy and Potluck (Planning Meeting 1 PM, Liturgy 2 PM)";
	eventListing[eventListingCount - 1].eventLink = "UpcomingActivities/2006_October_Gathering.html";
	
	eventListingCount++;
	eventListing[eventListingCount - 1] = new EventData("item");
	eventListing[eventListingCount - 1].eventDate = "November 3, 2006";
	eventListing[eventListingCount - 1].eventShortDescription = "CTA National Conference";
	eventListing[eventListingCount - 1].eventLink = "";
	
	eventListingCount++;
	eventListing[eventListingCount - 1] = new EventData("item");
	eventListing[eventListingCount - 1].eventDate = "November 4, 2006";
	eventListing[eventListingCount - 1].eventShortDescription = "CTA National Conference";
	eventListing[eventListingCount - 1].eventLink = "";
	
	eventListingCount++;
	eventListing[eventListingCount - 1] = new EventData("item");
	eventListing[eventListingCount - 1].eventDate = "November 5, 2006";
	eventListing[eventListingCount - 1].eventShortDescription = "CTA National Conference";
	eventListing[eventListingCount - 1].eventLink = "";
	
	eventListingCount++;
	eventListing[eventListingCount - 1] = new EventData("item");
	eventListing[eventListingCount - 1].eventDate = "December 3, 2006";
	eventListing[eventListingCount - 1].eventShortDescription = "Washtenaw CTA December Liturgy and Potluck (Planning Meeting 1 PM, Liturgy 2 PM)";
	eventListing[eventListingCount - 1].eventLink = "";

}


//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
// Convert a 1 character day or month numeric value into a 2 character string.
// ------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
function convertDateToString(dateToConvert) {
	
	var convertedDate = new String("");
	convertedDate = dateToConvert + '';
	
	if (convertedDate.length == 1)
		convertedDate = "0" + convertedDate;  // add preceding zero
		
	return convertedDate;
	
}


//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
// The assignInnerHTML function will build event information (comprised of the event
// description and link to event detail) within the date cell within the calendar.
// Each date cell contains a <span> </span> tag within which the event information will be
// put.
// ------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
function assignEventInnerHTML(pEventItemNumber) {

	var icount = 0;

	var convertedDate = new String("");
	
	var workDate = new Date(eventListing[pEventItemNumber].eventDate);
	
	convertedDate = convertDateToString(workDate.getDate()) + ''
				    + convertDateToString(workDate.getMonth()) + ''
					+ workDate.getUTCFullYear();
					
	//alert("assignEventInnerHTML convertedDate=" + convertedDate);
						  
	var eventHTML = new String("");
	
	// Get all of the <span> </span> tag objects contained within the document.
	var spanTagList = document.getElementsByTagName("span");
	
	//alert("assignEventInnerHTML spanTagList.length=" + spanTagList.length);
	
	//-----------------------------------------------------------------------------------------------
	// Go through all of the <span> tags and see if any <span> tag has a name attribute that matches
	// the event date parameter that was passed to this function.  Each date cell within the 
	// calendar has a <span> tag within it which, in turn, has a name attribute 
	// comprised of (day of month + month + year).  For example, the date cell corresponding 
	// to April 23, 2006, has a <span> tag as follows:
	// <span name="2332006"> event data </span>.  (Note: the month number is an offset, so 
	// the number for April is 3 (January being 0)).		
	//-----------------------------------------------------------------------------------------------
	for (var j = 0; j < spanTagList.length; j++) {
		
		icount++;
		
		//if (icount < 10)
		//	alert("assignEventInnerHTML spanTagList[j].id=" + spanTagList[j].id);
		
		if (convertedDate == spanTagList[j].id) {
			
			//alert("assignEventInnerHTML 0010 convertedDate=" + convertedDate);
			//alert("assignEventInnerHTML 0010 spanTagList[j].id=" + spanTagList[j].id);
		
			// Check to see if there already is some innter HTML within the <span> </span> tag.  
			// If so, then save the HTML so that the new HTLM can be appended to it.  This is
			// because a given date can have more than one event occuring on that date.
			eventHTML += spanTagList[j].innerHTML;
			if (eventHTML.length > 0)
				eventHTML += "<br><br>";  // put some blanks to separate the event information 
				                     // for this date
		
			// If there is a link that goes with this event, then the <a> tag needs to be
			// included.
			if ((eventListing[pEventItemNumber].eventLink).length > 0) {
				eventHTML += '<a href="' + eventListing[pEventItemNumber].eventLink + '">';
			}
			
			// Include the event short description as text within the <span> </span> tag.
			eventHTML += eventListing[pEventItemNumber].eventShortDescription;
			
			// If there is a link that goes with this event, then the </a> tag needs to be
			// included.
			if ((eventListing[pEventItemNumber].eventLink).length > 0) {
				eventHTML += '</a>';
			}
		
			spanTagList[j].innerHTML = eventHTML;
			
			j = spanTagList.length + 999;
		}
	}

	return;
}


//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
// Parse through all of the event data and populate the appropriate date (day, month, year)
// within the calendar with the event data.
// ------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
function populateCalendarWithEventData() {
	
	//alert("1 populateCalendarWithEventData eventListingCount=" + eventListingCount);
	
	try {
		buildEventData2();
	} catch (e) {
		alert("populateCalendarWithEventData error=" + e.description);
	}
	
	//alert("2 populateCalendarWithEventData eventListingCount=" + eventListingCount);

	for (var i = 0; i < eventListingCount; i++) {
		assignEventInnerHTML(i);
	}
	
	return;
}


var default_changeMonth_color = new String("");
var default_changeMonth_cursor = new String("");
var	default_changeMonth_background = new String("");

//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
function changeMonth_onMouseOver(pControl) {
	default_changeMonth_color = pControl.style.color;
	default_changeMonth_cursor = pControl.style.cursor;
	default_changeMonth_background = pControl.style.background;
	pControl.style.color = "#FF0000";
	//pControl.style.cursor = "hand";
	pControl.style.cursor = "pointer";
	pControl.style.background = "#DDDDDD";
}

//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
function changeMonth_onMouseOut(pControl) {
	pControl.style.color = default_changeMonth_color;
	pControl.style.cursor = default_changeMonth_cursor;
	pControl.style.background = default_changeMonth_background;
}


var default_activitycell_color = new String("");
var default_activitycell_cursor = new String("");
var	default_activitycell_background = new String("");
var	default_activitycell_backgroundColor = new String("");

//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
function selectActivityCell_onMouseOver(pControl, pCellType) {
	default_activitycell_color = pControl.style.color;
	default_activitycell_cursor = pControl.style.cursor;
	default_activitycell_background = pControl.style.background;
	default_activitycell_backgroundColor = pControl.style.backgroundColor;
	//alert("default_activitycell_background=" + default_activitycell_background);
	//pControl.className = "activityLinksHover";
	pControl.style.color = "#FF0000";
	//pControl.style.cursor = "hand";
	pControl.style.background = "#DDDDDD";
}

//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
function selectActivityCell_onMouseOut(pControl, pCellType) {
	//pControl.className = "activityLinksNormal";
	pControl.style.color = default_activitycell_color;
	//pControl.style.cursor = default_activitycell_cursor;
	pControl.style.background = default_activitycell_background;  
	pControl.style.backgroundColor = default_activitycell_backgroundColor;  
	////if (pCellType == 0)
	////	pControl.style.background = "#F2FFFF";
	////else pControl.style.background = "#FFFFDF";
}


var default_activitycellcontents_color = new String("");
var default_activitycellcontents_cursor = new String("");
var	default_activitycellcontents_background = new String("");
var	default_activitycellcontents_fontWeight = new String("");
var	default_activitycellcontents_textDecoration = new String("");

//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
function selectActivityCellContents_onMouseOver(pControl, pCellType) {
	default_activitycellcontents_color = pControl.style.color;
	default_activitycellcontents_cursor = pControl.style.cursor;
	default_activitycellcontents_background = pControl.style.background;
	default_activitycellcontents_fontWeight = pControl.style.fontWeight;
	default_activitycellcontents_textDecoration = pControl.style.textDecoration;
	//pControl.className = "activityLinksHover";
	pControl.style.fontWeight = "normal";
	////pControl.style.color = "#FF0000";
	////pControl.style.textDecoration = "underline";
	pControl.style.cursor = "default";
	////pControl.style.background = "#DDDDDD";
	
	//alert("selectActivityCellContents_onMouseOver");
	
}

//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
function selectActivityCellContents_onMouseOut(pControl, pCellType) {
	//pControl.className = "activityLinksNormal";
	pControl.style.color = default_activitycellcontents_color;
	pControl.style.cursor = default_activitycellcontents_cursor;
	pControl.style.background = default_activitycellcontents_background;
	pControl.style.fontWeight = default_activitycellcontents_fontWeight;
	pControl.style.textDecoration = default_activitycellcontents_textDecoration;
}

var daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
var monthNames = ['January','February','March','April','May','June',
                  'July','August','September','October','November','December'];

// Returns the number of days in the month in a given year (January=0)
function getDaysInMonth(month, year) {
  if ((month == 1) && (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0))){
    return 29;
  }else{
    return daysInMonth[month];
  }
}

//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
// Performs an action when a date is clicked
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
function dateCellClicked(dateCell, day, month, year) {
	
	//alert("dateCellClicked day=" + day + " month=" + month + " year=" + year);
		
	var dateCellName = new String('');
	dateCellName = day + '' + month + '' + year;
	//alert("dateCellClicked dateCellName=" + dateCellName);
		 
	//var dateCell = document.getElementsByName(dateCellName);
		
	//alert("dateClicked dateCell=" + dateCell); 
	//alert("dateCellClicked dateCell.innerHTML=" + dateCell.innerHTML);
			
	var dateCellChildNodes = dateCell.childNodes[0];
	//alert("dateCellClicked dateCell.hasChildNodes()=" + dateCell.hasChildNodes());
	//alert("dateCellClicked dateCell.childNodes.length=" + dateCell.childNodes.length);
		
	for (var i = 0; i < dateCell.childNodes.length; i++) {
		//alert("dateCellClicked dateCell.childNodes[i].nodeType=" + dateCell.childNodes[i].nodeType);
		//alert("dateCellClicked dateCell.childNodes[i].nodeName=" + dateCell.childNodes[i].nodeName);
	}
	
}
  
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
// Performs an action when a date is clicked
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
function dateCellContentsClicked(dateCell, day, month, year) {
	
	//alert("dateCellContentsClicked day=" + day + " month=" + month + " year=" + year);
	
	var dateCellName = new String('');
	dateCellName = day + '' + month + '' + year;
	//alert("dateCellContentsClicked dateCellName=" + dateCellName);
	 
	//var dateCell = document.getElementsByName(dateCellName);
	
	//alert("dateCellContentsClicked dateCell=" + dateCell); 
	//alert("dateCellContentsClicked dateCell.innerHTML=" + dateCell.innerHTML);
	 
}
  
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
// Performs an action when previous month is clicked in table header 
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
function previousMonthClicked(pMonth, pYear) {

	//alert("previousMonthClicked 1 currentMonth=" + currentMonth);

	var month = pMonth;
	var year = pYear;
	
	var previousmonth = month - 1;
	var previousyear = year;
	var nextyear = year;
	 
	if (previousmonth < 0) {
		previousmonth = 11;
		previousyear = year - 1;
	}
		
	var nextmonth = month + 1;
	if (nextmonth > 11) {
		nextmonth = 0;
		nextyear = year + 1; 
	}
	
	buildCalendarMonth (previousmonth, previousyear);
	populateCalendarWithEventData();
	
	currentMonth = previousmonth;
	currentYear = previousyear;
	document.getElementById("hCurrentMonth").value = currentMonth;
	document.getElementById("hCurrentYear").value = currentYear;
	
	//alert("previousMonthClicked 2 currentMonth=" + currentMonth);

}

//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
// Performs an action when next month is clicked in table header 
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
function nextMonthClicked(pMonth, pYear) {

	var month = pMonth;
	var year = pYear;
	
	var previousmonth = month - 1;
	var previousyear = year;
	var nextyear = year;
	 
	if (previousmonth < 0) {
		previousmonth = 11;
		previousyear = year - 1;
	}
		
	var nextmonth = month + 1;
	if (nextmonth > 11) {
		nextmonth = 0;
		nextyear = year + 1; 
	}
	
	buildCalendarMonth (nextmonth, nextyear);
	populateCalendarWithEventData();
	
	currentMonth = nextmonth;
	currentYear = nextyear;
	document.getElementById("hCurrentMonth").value = currentMonth;
	document.getElementById("hCurrentYear").value = currentYear;
	
	//alert("nextMonthClicked currentMonth=" + currentMonth);
}


//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
// Sets the displayed month
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
function setDisplayedMonth(month) {
	////if (month < 0) {
	////  alert('You have reached the beginning of this calendar');
	////}else if (month >= months){
	////  alert('You have reached the end of this calendar');
	////}else{
	////  for (var i = 0; i < months; i++) {
	////    document.getElementById('calendarMonth' + i).style.display = 'none';
		//document.getElementById('calendarMonth' + i).style.display = 'block';
	////  }
	  document.getElementById('calendarMonth' + month).style.display = 'block';
	////}
}

var default_color;
var default_cursor;
var	default_background;


//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
function activity_onMouseOver(pListElement) {

	default_color = pListElement.style.color;
	default_cursor = pListElement.style.cursor;
	default_background = pListElement.style.background;
	pListElement.className = "activityLinksHover";
	pListElement.style.color = "#FF0000";
	//pListElement.style.cursor = "hand";
	pListElement.style.cursor = "pointer";
	pListElement.style.background = "#DDDDDD";

}

//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
function buildCalendarMonth (pMonth, pYear) {	
	  
	//alert("buildCalendarMonth pMonth=" + pMonth);
	//alert("buildCalendarMonth pYear=" + pYear);
	 
	var currentDay;
	var currentMonth;
	var currentYear;
	var Today = new Date();
  	currentDate = Today.getDate(); 
	currentMonth = Today.getMonth();
	currentYear = Today.getUTCFullYear();
	 
	//alert("buildCalendarMonth currentYear=" + currentYear);
	  
	calendarHTML = "";  
	
	var formattingClassToUse = "date";
	var formattingSaturdayIDToUse = "saturdays";
	var formattingSundayIDToUse = "sundays";
	
	var isCurrentMonth = false;
	var isPreviousMonth = false;
	var isNextMonth = false;  
	
	var firstEntryInPreviousMonth = true;
	var firstEntryInNextMonth = true;
	
	var isSunday = false;
	var isSaturday = false;
	
	var isLastRow = false;
	  
	var displaydate = "999";
	var month = parseInt(pMonth);
	var year = parseInt(pYear);
	
	var previousmonth = month - 1;
	var previousyear = year;
	var nextyear = year;
	 
	if (previousmonth < 0) {
		previousmonth = 11;
		previousyear = year - 1;
	}
		
	var nextmonth = month + 1;
	
	//alert("1 buildCalendarMonth nextmonth=" + nextmonth);
	
	if (nextmonth > 11) {
		nextmonth = 0;
		nextyear = year + 1; 
	}
	
	//alert("2 buildCalendarMonth nextmonth=" + nextmonth);
	
	months = 3;
	
	////for (var i = 0; i < months; i++) {
	
	   calendarHTML += '<table name="currentmonth" width="100%" bordercolordark="#000000" cellpadding="0" cellspacing="0" border="0" align="center">';
	   calendarHTML += '<tr>';

	   
	   calendarHTML += '<tr>'
		  + '<th class="calmonthleft" onClick="previousMonthClicked(' + month + ', ' + year + ')" onmouseover="return changeMonth_onMouseOver(this)" onmouseout="return changeMonth_onMouseOut(this)"><</th>'
		  + '<th class="calmonthcenter" colspan="5">'
		  + monthNames[month]+ ' ' + year
		  + '</th>'
		  + '<th class="calmonthright" onClick="nextMonthClicked(' + month + ', ' + year + ')" onmouseover="return changeMonth_onMouseOver(this)" onmouseout="return changeMonth_onMouseOut(this)">></th>'
		  + '</tr>';
	   
	   
	   ////calendarHTML += '<td colspan="7" class="calmonth">' +  monthNames[month] + ' ' + year + '</td>';	 
	   
	   calendarHTML += '</tr>';  
	   calendarHTML += '<tr>';
	   		calendarHTML += '<td class="dayname">Sun</td>';
	   		calendarHTML += '<td class="dayname">Mon</td>';
	   		calendarHTML += '<td class="dayname">Tue</td>';
	   		calendarHTML += '<td class="dayname">Wed</td>';
	   		calendarHTML += '<td class="dayname">Thu</td>';
	   		calendarHTML += '<td class="dayname">Fri</td>';
	   		calendarHTML += '<td class="dayname">Sat</td>';
	   calendarHTML += '</tr>';
	   calendarHTML += '<tr>';
	   
	
	  //calendarHTML += '<table class="calendarMonth" '
	  //	  + 'id="calendarMonth' + month + '" cellspacing="0">';
		  
	  //calendarHTML += '<tr>'
		//  + '<th class="calendarPrevious" onClick="previousMonthClicked(' + month + ', ' + year + ')"><</th>'
		//  + '<th class="calendarTitle" colspan="5">'
		//  + monthNames[month] + ' ' + year
		//  + '</th>'
		//  + '<th class="calendarNext" onClick="nextMonthClicked(' + month + ', ' + year + ')">></th>'
		//  + '</tr>';
		  
	  //calendarHTML += '<tr><th>Sun</th><th>Mon</th><th>Tue</th>'
		//  +'<th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr>';
		  
	  firstDayDate = new Date(year, month, 1);
	  firstDay = firstDayDate.getDay();
	  
	  //alert("firstDayDate=" + firstDayDate);
	  //alert("firstDay=" + firstDay);
	  //alert("getDaysInMonth(month, year)=" + getDaysInMonth(month, year));
	  
	  for (var j = 0; j < 42; j++){
	  
	     isCurrentMonth = false;
	     isPreviousMonth = false;
	     isNextMonth = false;  
		 isSunday = false;
	     isSaturday = false;
		 
		 formattingClassToUse = "date";
		 formattingSaturdayIDToUse = "saturdays";
		 formattingSundayIDToUse = "sundays";
	  
		if (j % 7 == 0) {
			calendarHTML += '<tr>';
			isSunday = true;
			//alert("isSunday=" + j);
		}
		
		if (((j + 1) % 7 == 0) && (!isSunday)) {
			isSaturday = true;
			//alert("isSaturday=" + j);
		}
		
		if ((j % 35 == 0) && (j > 0)) {
			isLastRow = true;
			//alert("isLastRow=" + j);
		}
		
		////if ((j == firstDay + getDaysInMonth(month, year))) {
		  ////document.write('<td class="calendarEmpty"></td>');
		////}else{
		
			//------------------------------------------------------------------------------
			// 
			//------------------------------------------------------------------------------
			if (j - firstDay + 1 < 1) {
				//displaydate = -1;
				displaydate = (j - firstDay + 1) + getDaysInMonth(previousmonth, previousyear);
				isPreviousMonth = true;
			//------------------------------------------------------------------------------
			// 
			//------------------------------------------------------------------------------
			} else if (j - firstDay + 1 > getDaysInMonth(month, year)) {
					//displaydate = 99;
					displaydate = ((j - firstDay + 1) - getDaysInMonth(month, year));
					isNextMonth = true;
					//------------------------------------------------------------------------------
					// 
					//------------------------------------------------------------------------------
					} else {
						displaydate = (j - firstDay + 1);
						isCurrentMonth = true;
						}
		
			//alert("j=" + j + "  isCurrentMonth=" + isCurrentMonth + "  isPreviousMonth=" + isPreviousMonth + "  isNextMonth=" + isNextMonth);
			
			//alert("j=" + j + "  displaydate=" + displaydate + "  currentDate=" + currentDate + "  month=" + month + "  currentMonth=" + currentMonth + "  year=" + year + "  currentYear=" + currentYear);
			
			//alert("j=" + j + "  displaydate=" + displaydate + "  currentDate=" + currentDate + "  previousmonth=" + previousmonth + "  currentMonth=" + currentMonth + "  previousyear=" + previousyear + "  currentYear=" + currentYear);
			
			//alert("j=" + j + "  displaydate=" + displaydate + "  currentDate=" + currentDate + "  nextmonth=" + nextmonth + "  currentMonth=" + currentMonth + "  nextyear=" + nextyear + "  currentYear=" + currentYear);
						
			if (isPreviousMonth) {
				
				// If the cell date in the calendar matches today's date, then highlight the cell's border.
				if ((displaydate == currentDate) && (previousmonth == currentMonth) && (previousyear == currentYear)) {
					formattingClassToUse = "matchingdate";
					formattingSaturdayIDToUse = "matchingsaturdays";
					formattingSundayIDToUse = "matchingsundays";
					//alert("************* here 010   j=" + j);
				}
				
				if (firstEntryInPreviousMonth) {
					
					if (formattingClassToUse == "matchingdate") {
						calendarHTML += '<td class="' + formattingClassToUse + '" id="matching_oldmonth" onClick="dateCellClicked(this, '
							+ displaydate + ',' + previousmonth + ',' + previousyear + ')" '
							+ 'onmouseover="selectActivityCell_onMouseOver(this, -1)" ' 				                        
							+ 'onmouseout="selectActivityCell_onMouseOut(this, -1)">'
							+ '<h5>' +  monthNames[previousmonth] + ' ' + displaydate + '  '
							+ '<span name="' + convertDateToString(displaydate) + '' + convertDateToString(previousmonth) + '' + previousyear + '" '
							+ 'id="' + convertDateToString(displaydate) + '' + convertDateToString(previousmonth) + '' + previousyear + '" '
							+ 'onClick="dateCellContentsClicked(this, '
							+ displaydate + ',' + nextmonth + ',' + nextyear + ')" '
							+ 'onmouseover="selectActivityCell_onMouseOver(this, -1)" ' 				                        
							+ 'onmouseout="selectActivityCell_onMouseOut(this, -1)">'
							+ '</span>'
							+ '</h5></td>';
					} else {
						calendarHTML += '<td class="' + formattingClassToUse + '" id="oldmonth" onClick="dateCellClicked(this, '
							+ displaydate + ',' + previousmonth + ',' + previousyear + ')" '
							+ 'onmouseover="selectActivityCell_onMouseOver(this, -1)" ' 				                        
							+ 'onmouseout="selectActivityCell_onMouseOut(this, -1)">'
							+ '<h5>' +  monthNames[previousmonth] + ' ' + displaydate + '  '
							+ '<span name="' + convertDateToString(displaydate) + '' + convertDateToString(previousmonth) + '' + previousyear + '" '
							+ 'id="' + convertDateToString(displaydate) + '' + convertDateToString(previousmonth) + '' + previousyear + '" '
							+ 'onClick="dateCellContentsClicked(this, '
							+ displaydate + ',' + nextmonth + ',' + nextyear + ')" '
							+ 'onmouseover="selectActivityCell_onMouseOver(this, -1)" ' 				                        
							+ 'onmouseout="selectActivityCell_onMouseOut(this, -1)">'
							+ '</span>'
							+ '</h5></td>';
					}
					firstEntryInPreviousMonth = false;
				}
				else {
					
					if (formattingClassToUse == "matchingdate") {
						calendarHTML += '<td class="' + formattingClassToUse + '" id="matching_oldmonth" onClick="dateCellClicked(this, '
							+ displaydate + ',' + previousmonth + ',' + previousyear + ')" '
							+ 'onmouseover="selectActivityCell_onMouseOver(this, -1)" ' 				                        
							+ 'onmouseout="selectActivityCell_onMouseOut(this, -1)">'
							+ '<h5>' +  ' ' + displaydate + '  '
							+ '<span name="' + convertDateToString(displaydate) + '' + convertDateToString(previousmonth) + '' + previousyear + '" '
							+ 'id="' + convertDateToString(displaydate) + '' + convertDateToString(previousmonth) + '' + previousyear + '" '
							+ 'onClick="dateCellContentsClicked(this, '
							+ displaydate + ',' + nextmonth + ',' + nextyear + ')" '
							+ 'onmouseover="selectActivityCellContents_onMouseOver(this, -1)" ' 			                        	+ 'onmouseout="selectActivityCellContents_onMouseOut(this, -1)">'
							+ '</span>'
							+ '</h5></td>'; 
					} else {
						calendarHTML += '<td class="' + formattingClassToUse + '" id="oldmonth" onClick="dateCellClicked(this, '
							+ displaydate + ',' + previousmonth + ',' + previousyear + ')" '
							+ 'onmouseover="selectActivityCell_onMouseOver(this, -1)" ' 				                        
							+ 'onmouseout="selectActivityCell_onMouseOut(this, -1)">'
							+ '<h5>' +  ' ' + displaydate + '  '
							+ '<span name="' + convertDateToString(displaydate) + '' + convertDateToString(previousmonth) + '' + previousyear + '" '
							+ 'id="' + convertDateToString(displaydate) + '' + convertDateToString(previousmonth) + '' + previousyear + '" '
							+ 'onClick="dateCellContentsClicked(this, '
							+ displaydate + ',' + nextmonth + ',' + nextyear + ')" '
							+ 'onmouseover="selectActivityCellContents_onMouseOver(this, -1)" ' 			                        	+ 'onmouseout="selectActivityCellContents_onMouseOut(this, -1)">'
							+ '</span>'
							+ '</h5></td>'; 
					}
				}		
			}
			
			if (isCurrentMonth) {
				
				// If the cell date in the calendar matches today's date, then highlight the cell's border.
				if ((displaydate == currentDate) && (month == currentMonth) && (year == currentYear)) {
					formattingClassToUse = "matchingdate";
					formattingSaturdayIDToUse = "matchingsaturdays";
					formattingSundayIDToUse = "matchingsundays";
					//alert("************* here 010   j=" + j);
				}
				
				if (isLastRow) {
					
					//alert("************* here 020   j=" + j);
					
					if (formattingClassToUse == "matchingdate") {
						calendarHTML += '<td class="' + formattingClassToUse + '" onClick="dateCellClicked(this, '
							+ displaydate + ',' + month + ',' + year + ')" '
							+ 'onmouseover="selectActivityCell_onMouseOver(this, 0)" ' 				                        
							+ 'onmouseout="selectActivityCell_onMouseOut(this, 0)">'
							+ '<h6>' + displaydate + ' </h6><h5>' 
							+ '<span name="' + convertDateToString(displaydate) + '' + convertDateToString(month) + '' + year + '" '
							+ 'id="' + convertDateToString(displaydate) + '' + convertDateToString(month) + '' + year + '" '
							+ 'onClick="dateCellContentsClicked(this, '
							+ displaydate + ',' + month + ',' + year + ')" '
							+ 'onmouseover="selectActivityCellContents_onMouseOver(this, 0)" ' 				                      
							+ 'onmouseout="selectActivityCellContents_onMouseOut(this, 0)">'
							+ '</span>'
							+ '</h5></td>';
					} else {
						calendarHTML += '<td id="lowerleft" class="' + formattingClassToUse + '" onClick="dateCellClicked(this, '
							+ displaydate + ',' + month + ',' + year + ')" '
							+ 'onmouseover="selectActivityCell_onMouseOver(this, 0)" ' 				                        
							+ 'onmouseout="selectActivityCell_onMouseOut(this, 0)">'
							+ '<h6>' + displaydate + ' </h6><h5>' 
							+ '<span name="' + convertDateToString(displaydate) + '' + convertDateToString(month) + '' + year + '" '
							+ 'id="' + convertDateToString(displaydate) + '' + convertDateToString(month) + '' + year + '" '
							+ 'onClick="dateCellContentsClicked(this, '
							+ displaydate + ',' + month + ',' + year + ')" '
							+ 'onmouseover="selectActivityCellContents_onMouseOver(this, 0)" ' 				                      
							+ 'onmouseout="selectActivityCellContents_onMouseOut(this, 0)">'
							+ '</span>'
							+ '</h5></td>';
					}
				} else if (isSunday) {
					
					//alert("************* here 030   j=" + j);
					
					calendarHTML += '<td id="' + formattingSundayIDToUse + '" class="' + formattingClassToUse + '" onClick="dateCellClicked(this, '
						+ displaydate + ',' + month + ',' + year + ')" '
						+ 'onmouseover="selectActivityCell_onMouseOver(this, 0)" ' 				                        
						+ 'onmouseout="selectActivityCell_onMouseOut(this, 0)">'
						+ '<h6>' + displaydate + ' </h6><h5>' 
						+ '<span name="' + convertDateToString(displaydate) + '' + convertDateToString(month) + '' + year + '" '
						+ 'id="' + convertDateToString(displaydate) + '' + convertDateToString(month) + '' + year + '" '
						+ 'onClick="dateCellContentsClicked(this, '
						+ displaydate + ',' + month + ',' + year + ')" '
						+ 'onmouseover="selectActivityCellContents_onMouseOver(this, 0)" ' 				                        
						+ 'onmouseout="selectActivityCellContents_onMouseOut(this, 0)">'
						+ '</span>'
						+ '</h5></td>';
				} else if (isSaturday) {
					
						//alert("************* here 040   j=" + j);
					
						calendarHTML += '<td id="' + formattingSaturdayIDToUse + '" class="' + formattingClassToUse + '" onClick="dateCellClicked(this, '
						+ displaydate + ',' + month + ',' + year + ')" '
						+ 'onmouseover="selectActivityCell_onMouseOver(this, 0)" ' 				                        
						+ 'onmouseout="selectActivityCell_onMouseOut(this, 0)">' 
						+ '<h6>' + displaydate + ' </h6><h5>' 
						+ '<span name="' + convertDateToString(displaydate) + '' + convertDateToString(month) + '' + year + '" '
						+ 'id="' + convertDateToString(displaydate) + '' + convertDateToString(month) + '' + year + '" '
						+ 'onClick="dateCellContentsClicked(this, '
						+ displaydate + ',' + month + ',' + year + ')" '
						+ 'onmouseover="selectActivityCellContents_onMouseOver(this, 0)" ' 				                        
						+ 'onmouseout="selectActivityCellContents_onMouseOut(this, 0)">'
						+ '</span>'
						+ '</h5></td>';
				} else {
					
						//alert("************* here 050   j=" + j);
					
						calendarHTML += '<td class="' + formattingClassToUse + '" onClick="dateCellClicked(this, '
						+ displaydate + ',' + month + ',' + year + ')" '
						+ 'onmouseover="selectActivityCell_onMouseOver(this, 0)" ' 				                        
						+ 'onmouseout="selectActivityCell_onMouseOut(this, 0)">' 
						+ '<h6>' + displaydate + ' </h6><h5>' 
						+ '<span name="' + convertDateToString(displaydate) + '' + convertDateToString(month) + '' + year + '" '
						+ 'id="' + convertDateToString(displaydate) + '' + convertDateToString(month) + '' + year + '" '
						+ 'onClick="dateCellContentsClicked(this, '
						+ displaydate + ',' + month + ',' + year + ')" '
						+ 'onmouseover="selectActivityCellContents_onMouseOver(this, 0)" ' 				                        
						+ 'onmouseout="selectActivityCellContents_onMouseOut(this, 0)">'
						+ '</span>'

						+ '</h5></td>';
				}
			}
			
			if (isNextMonth) {
				
				// If the cell date in the calendar matches today's date, then highlight the cell's border.
				if ((displaydate == currentDate) && (nextmonth == currentMonth) && (nextyear == currentYear)) {
					formattingClassToUse = "matchingdate";
					formattingSaturdayIDToUse = "matchingsaturdays";
					formattingSundayIDToUse = "matchingsundays";
					//alert("************* here 010   j=" + j);
				}
				
				
				if (firstEntryInNextMonth) {
					
					//alert("buildCalendarMonth nextmonth=" + nextmonth);
					//alert("buildCalendarMonth monthNames[nextmonth]=" + monthNames[nextmonth]);
					
					//alert("************* here 030a   j=" + j + "  formattingClassToUse=" + formattingClassToUse);
					if (formattingClassToUse == "matchingdate") {
						calendarHTML += '<td class="' + formattingClassToUse + '" id="matching_newmonth" onClick="dateCellClicked(this, '
							+ displaydate + ',' + nextmonth + ',' + nextyear + ')" '
							+ 'onmouseover="selectActivityCell_onMouseOver(this, 1)" ' 				                        
							+ 'onmouseout="selectActivityCell_onMouseOut(this, 1)">'
							+ '<h5>' +  monthNames[nextmonth] + ' ' + displaydate + '  '
							+ '<span name="' + convertDateToString(displaydate) + '' + convertDateToString(nextmonth) + '' + nextyear + '" '
							+ 'id="' + convertDateToString(displaydate) + '' + convertDateToString(nextmonth) + '' + nextyear + '" '
							+ 'onClick="dateCellContentsClicked(this, '
							+ displaydate + ',' + nextmonth + ',' + nextyear + ')" '
							+ 'onmouseover="selectActivityCellContents_onMouseOver(this, 1)" ' 				                       		+ 'onmouseout="selectActivityCellContents_onMouseOut(this, 1)">'
							+ '</span>'
							+ '</h5></td>';
					} else {
						calendarHTML += '<td class="' + formattingClassToUse + '" id="newmonth" onClick="dateCellClicked(this, '
							+ displaydate + ',' + nextmonth + ',' + nextyear + ')" '
							+ 'onmouseover="selectActivityCell_onMouseOver(this, 1)" ' 				                        
							+ 'onmouseout="selectActivityCell_onMouseOut(this, 1)">'
							+ '<h5>' +  monthNames[nextmonth] + ' ' + displaydate + '  '
							+ '<span name="' + convertDateToString(displaydate) + '' + convertDateToString(nextmonth) + '' + nextyear + '" '
							+ 'id="' + convertDateToString(displaydate) + '' + convertDateToString(nextmonth) + '' + nextyear + '" '
							+ 'onClick="dateCellContentsClicked(this, '
							+ displaydate + ',' + nextmonth + ',' + nextyear + ')" '
							+ 'onmouseover="selectActivityCellContents_onMouseOver(this, 1)" ' 				                       		+ 'onmouseout="selectActivityCellContents_onMouseOut(this, 1)">'
							+ '</span>'
							+ '</h5></td>';
					}
					firstEntryInNextMonth = false;
				}
				else {
					
					//alert("************* here 030b   j=" + j + "  formattingClassToUse=" + formattingClassToUse);
					
					if (formattingClassToUse == "matchingdate") {
						calendarHTML += '<td class="' + formattingClassToUse + '" id="matching_newmonth" onClick="dateCellClicked(this, '
							+ displaydate + ',' + nextmonth + ',' + nextyear + ')" '
							+ 'onmouseover="selectActivityCell_onMouseOver(this, 1)" ' 				                        
							+ 'onmouseout="selectActivityCell_onMouseOut(this, 1)">'
							+ '<h5>' +  displaydate + '  '
							+ '<span name="' + convertDateToString(displaydate) + '' + convertDateToString(nextmonth) + '' + nextyear + '" '
							+ 'id="' + convertDateToString(displaydate) + '' + convertDateToString(nextmonth) + '' + nextyear + '" '
							+ 'onClick="dateCellContentsClicked(this, '
							+ displaydate + ',' + nextmonth + ',' + nextyear + ')" '
							+ 'onmouseover="selectActivityCellContents_onMouseOver(this, 1)" ' 				                        	+ 'onmouseout="selectActivityCellContents_onMouseOut(this, 1)">'
							+ '</span>'
							+ '</h5></td>'; 
					} else {
						calendarHTML += '<td class="' + formattingClassToUse + '" id="newmonth" onClick="dateCellClicked(this, '
							+ displaydate + ',' + nextmonth + ',' + nextyear + ')" '
							+ 'onmouseover="selectActivityCell_onMouseOver(this, 1)" ' 				                        
							+ 'onmouseout="selectActivityCell_onMouseOut(this, 1)">'
							+ '<h5>' +  displaydate + '  '
							+ '<span name="' + convertDateToString(displaydate) + '' + convertDateToString(nextmonth) + '' + nextyear + '" '
							+ 'id="' + convertDateToString(displaydate) + '' + convertDateToString(nextmonth) + '' + nextyear + '" '
							+ 'onClick="dateCellContentsClicked(this, '
							+ displaydate + ',' + nextmonth + ',' + nextyear + ')" '
							+ 'onmouseover="selectActivityCellContents_onMouseOver(this, 1)" ' 				                        	+ 'onmouseout="selectActivityCellContents_onMouseOut(this, 1)">'
							+ '</span>'
							+ '</h5></td>'; 
					}
				}
			}



			
		////}
		
		if (j % 7 == 6) calendarHTML += '</tr>';
	  }
	  
	  calendarHTML += '</table>';
	  
	  var displayedMonth = document.getElementById("displayedMonth");
	  displayedMonth.innerHTML = calendarHTML;
	  
	  
	  //alert("calendarevents.js calendarHTML=" + calendarHTML);
	  
	  
	  
	  ////month++;
	  
	  ////if (month >= 12) {
		////month = 0;
	////	year++;
	  ////}
	////}
	
	////setDisplayedMonth(month);
	
}

