function fCalendar( iMonth, iYear, sEvents )
{
var cal = "";				// for displaying the calendar

//  SET ARRAY
var aMonths = new Array('January','February','March','April','May','June','July','August','September','October','November','December');

//  DECLARE AND INITIALIZE VARIABLES
var Calendar = new Date();

var todayDay = Calendar.getDate();	// Returns day (1-31)
var todayMon = Calendar.getMonth();	// Returns month (1-12)
var weekday = Calendar.getDay();	// Returns day (1-31)

var DAYS_OF_WEEK = 7;			// constant for number of days in a week
var DAYS_OF_MONTH = 31;			// constant for number of days in a month
var iEventNumber = 0;			// when an event matches, increment by on (array positions)

// events are comma delimited and each event date is eight characters long (yyyymmdd)
// null is no events, no comma is one event, any comma is comma count plus one
if (sEvents == "")
	{
		var iEvents = 0;			// used for event display
		var aEvents = new Array( 1 );		// so there is an array, even for no events
		aEvents[0] = '';
	}
else	// this is line 27 (for now)
	{
		if (sEvents.substr( 0, 1) == ',')		// check if leading comma, if so, get rid of it
		{
			sEvents = sEvents.substr( 1, sEvents.length );
		}
		var iEvents = ((sEvents.length + 1) / 9);	// count of events, +1 to accommodate the comma for all but the last event (no trailing comma)
		var aEvents = new Array( iEvents );		// init event array
		for (x=0; x<=(iEvents-1); x++)			// minus 1 due to array begins at zero
		{
			aEvents[x] = sEvents.substr( x*9, 8);
		}
	}

Calendar.setDate(1);			// Start the calendar day at '1'
Calendar.setMonth(iMonth);		// Start the calendar month in use
Calendar.setYear(iYear);		// Start the calendar year in use

// VARIABLES FOR FORMATTING
var TR_start = '<TR>';
var TR_end = '</TR>';
var highlight_start = '<TD WIDTH="18" align="CENTER"><B><span class="calendarday">';
var highlight_startWE = '<TD WIDTH="18" align="CENTER" BGCOLOR="#EFEFEF"><B><span class="calendarday">';
var highlight_startToday = '<TD WIDTH="18" align="CENTER"><span class="calendartoday" title="Today">';
var highlight_startEvent = '<TD WIDTH="18" align="CENTER"><span class="calendarevent" title="Event">';
var highlight_startWEToday = '<TD WIDTH="18" align="CENTER" BGCOLOR="#EFEFEF"><span class="calendartoday" title="Today">';
var highlight_startWEEvent = '<TD WIDTH="18" align="CENTER" BGCOLOR="#EFEFEF"><span class="calendarevent" title="Event">';
var highlight_end = '</span></B>';
var TD_start = '<TD WIDTH="18" align="CENTER"><span class="calendarday">';
var TD_startWE = '<TD WIDTH="18" BGCOLOR="#EFEFEF" align="CENTER"><span class="calendarday">';
var TD_end = '</span></TD>';

// BEGIN CODE FOR CALENDAR
cal += '<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=0 BORDERCOLOR=BBBBBB align="center"><TR><TD>';
cal += '<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>'+ TR_start;
cal += '<TD COLSPAN="'+ DAYS_OF_WEEK +'" BGCOLOR="#EFEFEF"><CENTER><B>';
if (todayMon==Calendar.getMonth())
	cal += '<span class="calendartitle">'+ aMonths[iMonth] +'  '+ iYear +'</span></B>'+ TD_end + TR_end;
else
	cal += '<span class="calendartitle">'+ aMonths[iMonth] +'  '+ iYear +'</span></B>'+ TD_end + TR_end;
cal += TR_start;
cal += TD_end + TR_end;
cal += TR_start;

// FILL IN BLANK GAPS UNTIL TODAY'S DAY
for(index=0; index < Calendar.getDay(); index++)
{
	if ( index==0 )
		cal += TD_startWE +'  '+ TD_end;
	else
		cal += TD_start +'  ' + TD_end;
}

// LOOPS FOR EACH DAY IN CALENDAR
for(index=0; index < DAYS_OF_MONTH; index++)
{
	if( Calendar.getDate() > index )
	{
		// RETURNS THE NEXT DAY TO PRINT
		week_day = Calendar.getDay();
		
		// START NEW ROW FOR FIRST DAY OF WEEK
		if(week_day == 0)
			cal += TR_start;
		
		if(week_day != DAYS_OF_WEEK)
		{
			
			// SET VARIABLE INSIDE LOOP FOR INCREMENTING PURPOSES
			var day = Calendar.getDate();
			
			var eventDay = "";
			eventDay = iYear.toString() + ("0"+ (iMonth+1).toString()).substr( ("0"+ (iMonth+1).toString()).length-2 ) + ("0"+ day.toString()).substr( ("0"+ day.toString()).length-2 );
			
//cal += eventDay +", "+ aEvents[iEventNumber];
			// funciton called multiple times, need to reposition to next set of events
			if (iEvents > 0)
				while (aEvents[ iEventNumber ] < eventDay)
					iEventNumber++
			
			
			// Highlight an event
//			if (eventDay == sEvents)
			if (eventDay == aEvents[iEventNumber])
				{
				iEventNumber++;			// next event
				// see if it is a weekend
				if ((week_day == 0) | (week_day == (DAYS_OF_WEEK - 1) ))
					cal += highlight_startWEEvent +'<a href="#'+ eventDay +'" class="event" target="_self">'+ day +'</a>'+ highlight_end + TD_end;
//					cal += highlight_startWE + day + highlight_end + TD_end;
				else
					cal += highlight_startEvent +'<a href="#'+ eventDay +'" class="event" target="_self">'+ day +'</a>'+ highlight_end + TD_end;
//					cal += highlight_startEvent + day + highlight_end + TD_end;
				}
			else
				
				// HIGHLIGHT TODAY'S DATE
				if ( (todayDay == Calendar.getDate()) & (todayMon == Calendar.getMonth()) )
					// see if it is a weekend
					if ((week_day == 0) | (week_day == (DAYS_OF_WEEK - 1) ))
						cal += highlight_startWEToday + day + highlight_end + TD_end;
					else
						cal += highlight_startToday + day + highlight_end + TD_end;
				
				// PRINTS DAY
				else
					// see if it is a weekend
					if ( (week_day == 0) | (week_day == (DAYS_OF_WEEK - 1) ))
						cal += TD_startWE + day + TD_end;
					else
						cal += TD_start + day + TD_end;
		}
		
		// END ROW FOR LAST DAY OF WEEK
		if(week_day == DAYS_OF_WEEK)
			cal += TR_end;
	}
	
	// INCREMENTS UNTIL END OF THE MONTH
	Calendar.setDate(Calendar.getDate()+1);

}  // end for loop

// FILL IN BLANK GAPS UNTIL END OF THE WEEK
for(index = (week_day + 1); index < DAYS_OF_WEEK; index++)
{
	if (( index == 0 ) | (index == (DAYS_OF_WEEK - 1) ) )
		cal += TD_startWE +'  '+ TD_end;
	else
		cal += TD_start +'  '+ TD_end;
}

cal += '</TD></TR></TABLE></TABLE>';

return cal;

//  End -->

}