//	Calendar Javascript - Copyright (C) 2007-2010 Charles A Upsdell, All Rights Reserved; www.upsdell.com
//
//  For pages with calendars
//
aModule.uses( 'cCalendar_ca', 'cCalendar', 'cal_config' );


// Method to insert HTML for calendar
cCalendar.prototype.toCalendarHTML = function ( type, id, anchor )
{
if ( type === undefined )
	type = 'grid';
if ( id === undefined )
	id = 'ins_calendar_dump';
if ( anchor === undefined )
	anchor = window.location.hash;
var o = getElement( id );
if ( o )
  {
	o.innerHTML = this.toHTML( type, kal.period );
	if ( anchor == '' )
		myScrollTo();
	else
		myScrollToAnchor( anchor );
  }
return false;
}
// Function to switch calendar modes
function calendarSwitchMode ( type, anchor )
{
if ( type === undefined )
	type = 'grid';
if ( anchor === undefined )
	anchor = 'top';
cal.toCalendarHTML( type, 'ins_calendar_dump', anchor );
return false;
}

function calGridAndListInit ( sd )
{
sd.isMarkDate = true;
sd.isManyMonthsOnPage = ( typeof(kal.calendar.hasManyMonthsOnPage) == 'undefined' ) ? false : kal.calendar.hasManyMonthsOnPage;
sd.isMobileDevice = (typeof(isMobileDevice) != 'undefined') && isMobileDevice();
return kal.calendar.topHTML;
}


// Method to return HTML with a grid of info in calendar
cEventYear.prototype.toGridHTML = function ( y1, m1, y, m, y2, m2, s )
{
var sHTML = '';
var nLastYear = y;
var nLastMonth = m - 1;
var isExtraReporting = ( (typeof(kal.calendar.isExtraReporting) != 'undefined') && (kal.calendar.isExtraReporting) );
if ( nLastMonth < 0 )
  {
	--nLastYear;
	nLastMonth = 11;
  }
if ( (nLastYear < y1) || ((nLastYear == y1) && (nLastMonth < m1)) )
  {
	nLastYear = y1;
	nLastMonth = m1;
  }
var nNextYear = y;
var nNextMonth = m + 1;
if ( nNextMonth > 11 )
  {
	++nNextYear;
	nNextMonth = 0;
  }
if ( (nNextYear > y2) || ((nNextYear == y2) && (nNextMonth > m2)) )
  {
	nNextYear = y2;
	nNextMonth = m2;
  }
var sMonth = kal.aMonthName[ m ];
var sSwitchModeTargetAnchor = '\'\'';
if ( s.isManyMonthsOnPage )
	sSwitchModeTargetAnchor = '\'' + sMonth + y + '\'';

sHTML += '<div class="calendar">\n';
sHTML += '<h3>';

if ( (typeof(calImgGridHTML) != 'undefined') && (calImgGridHTML != '') )
	sHTML += '<img ' + calImgGridHTML + ' class="noprint" alt="Navigational Buttons" usemap="#Map' + sMonth + y + '" />';
sHTML += '<span class="noprint">';
if ( '' != kal.buttonTopOfPageHTML )
	sHTML += '<a href="#top" onclick="return(myScrollTo());"><img src=' + kal.buttonTopOfPageHTML + 'class="calbuttonR" /></a>';
if ( '' != kal.buttonListModeHTML )
	sHTML += '<a href="#' + sMonth + y + '" onclick="return(calendarSwitchMode(\'list\',' + sSwitchModeTargetAnchor + '));"><img src=' + kal.buttonListModeHTML + 'class="calbuttonM" /></a>';
if ( '' != kal.buttonNextMonthHTML )
	sHTML += '<a href="#' + kal.aMonthName[nNextMonth] + nNextYear + '"><img src=' + kal.buttonNextMonthHTML + 'class="calbuttonM" /></a>';
if ( '' != kal.buttonPrevMonthHTML )
	sHTML += '<a href="#' + kal.aMonthName[nLastMonth] + nLastYear + '"><img src=' + kal.buttonPrevMonthHTML + 'class="calbuttonL" /></a>';
sHTML += '</span>\n';
sHTML += sMonth + ' ' + y + '<a id="' + sMonth + y + '" name="' + sMonth + y + '">&nbsp;</a>';
if ( s.isMarkDate )
  {
	if ( ((y == s.this_year) && (m >= s.this_month)) || (y > s.this_year) )
	  {
		sHTML += '<a id="ThisMonth" name="ThisMonth">&nbsp;</a>';
		s.isMarkDate = false;
	  }
  }
sHTML += '</h3>\n';

var nDayMonthStarts = this.aYearDays[m];
var nDaysInMonth = this.aMonthDays[m];
var nColumn = 0;
var nColumns = kal.aWeekDayName.length;
var isHeaderDone = false;
var sEventConflictStyling = ' style="color:#ff0; background-color:#f00;"';
if ( typeof(kal.eventConflictStylingHTML) != 'undefined' )
	sEventConflictStyling = kal.eventConflictStylingHTML;
for ( var d = 0; d < nDaysInMonth; ++d )
  {
	var yd = d + nDayMonthStarts;
	var sToday = '';
	if ( (y == s.this_year) && (m == s.this_month) && (d == s.this_day) )
		sToday = ' today ';
	if ( !isHeaderDone )
	  {
		sHTML += '<table summary="Calendar" class="grid calendar" border="0" cellspacing="0" cellpadding="2">\n';
		sHTML += '<thead>\n';
		sHTML +=  '<tr>\n';
		for ( var k = 0; k < nColumns; ++k )
		  {
			sHTML += '<th>' + ((s.isMobileDevice) ? kal.aWeekDayNameSmall[k] : kal.aWeekDayName[k]) + '</th>\n';
		  }
		sHTML += '</tr>\n';
		sHTML += '</thead>\n';
		sHTML += '<tbody>\n';
		isHeaderDone = true;
	  }
	if ( nColumn == 0 )
	  {
		sHTML += '<tr>\n';
		if ( this.aDay[yd].nWeekDay > 0 )
		  {
			sHTML += '<td class="spacer" colspan="' + this.aDay[yd].nWeekDay + '">&nbsp;</td>\n';
			nColumn += this.aDay[yd].nWeekDay;
		  }
	  }
	var nHighestPriority = 0;
	var isSeriesDay = this.aDay[yd].isSeriesDay;
	var isSeriesBangDay = false;
	var isSeriesGameDay = false;
	var isGameDay = false;
	for ( var e = 0; e < this.aDay[yd].aEvent.length; ++e )
	  {
		var oType = new cType( this.aDay[yd].aEvent[e].oType );
		if ( this.aDay[yd].aEvent[e].isGame )
			isGameDay = true;
		if ( oType.t0.charAt(0) == 'S' )
		  {
			if ( oType.t3 == '!' )
				isSeriesBangDay = true;
		  }
		else if ( (oType.t1 == 'G') && (oType.t2 == 'T') )
		  {
			isSeriesGameDay = true;
			continue;
		  }
		if ( oType.t1 == 'N' )
			continue;
		var nThisPriority = calEventPriority( oType.t0 );
		if ( nThisPriority > nHighestPriority )
			nHighestPriority = nThisPriority;
	  }
	var sEventClass = '';
	if ( nHighestPriority > 0 )
	  {
		sEventClass = ' ' + kal.eventData.getCell( nHighestPriority, 1 );
	  }
	sHTML += '<td class="day' + sToday + sEventClass + '"><span class="mday">' + (1+this.aDay[yd].nMonthDay);
	if ( sToday != '' )
		sHTML += ' <a id="calendar_today" name="calendar_today"></a>(TODAY)';
	sHTML += '</span>';
	var sGameDayComment = ' (game day)';
	for ( var e = 0; e < this.aDay[yd].aEvent.length; ++e )
	  {
		if ( isSeriesDay && (this.aDay[yd].aEvent[e].isGame) )
			continue;
		var oType = new cType( this.aDay[yd].aEvent[e].oType );
		if ( oType.t1 == 'N' )
			continue;
		if ( isSeriesDay )
		  {
			if ( (oType.t0 == 'P') && !isExtraReporting && (isSeriesGameDay || !isSeriesBangDay) )
				continue;
		  }
		var nThisEventPriority = calEventPriority( oType.t0 );
		if ( nThisEventPriority != nHighestPriority )
			sHTML += '<p class="' + kal.eventData.valueOf(oType.t0) + '"><span>';
		else
			sHTML += '<p><span class="' + kal.eventData.valueOf(oType.t0) + '">';
		sHTML += this.aDay[yd].aEvent[e].toHTML( 'calendar' );
		if ( this.aDay[yd].aEvent[e].sConflict != '' )
			sHTML += '<span ' + sEventConflictStyling + '>' + this.aDay[yd].aEvent[e].sConflict + '</span>';
		if ( isSeriesDay && (this.aDay[yd].aEvent[e].oType.t0 == 'P') && (isSeriesGameDay || !isSeriesBangDay) && isExtraReporting )
			sHTML += '<span ' + sEventConflictStyling + '>automatically skipped</span>';
		if ( isSeriesDay && isGameDay )
			sHTML += sGameDayComment;
		sGameDayComment = '';
		sHTML += '</span></p>\n';
	  }
	sHTML += '</td>\n';
	nColumn++;
	if ( nColumn >= nColumns )
	  {
		sHTML += '</tr>\n';
		nColumn = 0;
	  }
  }
if ( isHeaderDone )
  {
	if ( (nColumn > 0) && ((nColumn+1) <= nColumns) )
	  {
		sHTML += '<td class="spacer" colspan="' + (nColumns-nColumn) + '">&nbsp;</td>\n';
		sHTML += '</tr>\n';
	  }
	sHTML += '</tbody>\n';
	sHTML += '</table>\n';
  }
if ( (typeof(calMonthFootnote) != 'undefined') && (calMonthFootnote != '') && (!s.isManyMonthsOnPage) )
	sHTML += calMonthFootnote;
sHTML += '</div>\n';
return sHTML;
}


// Method to return HTML with a list of info in calendar
cEventYear.prototype.toListHTML = function ( y1, m1, y, m, y2, m2, s )
{
var sHTML = '';
var nLastYear = y;
var nLastMonth = m - 1;
var isExtraReporting = ( (typeof(kal.calendar.isExtraReporting) != 'undefined') && (kal.calendar.isExtraReporting) );
if ( nLastMonth < 0 )
  {
	--nLastYear;
	nLastMonth = 11;
  }
if ( (nLastYear < y1) || ((nLastYear == y1) && (nLastMonth < m1)) )
  {
	nLastYear = y1;
	nLastMonth = m1;
  }
var nNextYear = y;
var nNextMonth = m + 1;
if ( nNextMonth > 11 )
  {
	++nNextYear;
	nNextMonth = 0;
  }
if ( (nNextYear > y2) || ((nNextYear == y2) && (nNextMonth > m2)) )
  {
	nNextYear = y2;
	nNextMonth = m2;
  }
var sMonth = kal.aMonthName[ m ];
var sSwitchModeTargetAnchor = '\'\'';
if ( s.isManyMonthsOnPage )
	sSwitchModeTargetAnchor = '\'' + sMonth + y + '\'';

sHTML += '<div class="calendar">\n';
sHTML += '<h3>';

if ( (typeof(calImgListHTML) != 'undefined') && (calImgListHTML != '') )
	sHTML += '<img ' + calImgListHTML + ' class="noprint screen" alt="Navigational Buttons" usemap="#Map' + sMonth + y + '" />';
sHTML += '<div class="noprint">';
if ( '' != kal.buttonTopOfPageHTML )
	sHTML += '<a href="#top" onclick="return(myScrollTo());"><img src=' + kal.buttonTopOfPageHTML + 'class="calbuttonR" /></a>';
if ( '' != kal.buttonGridModeHTML )
	sHTML += '<a href="#' + sMonth + y + '" onclick="return(calendarSwitchMode(\'grid\',' + sSwitchModeTargetAnchor + '));"><img src=' + kal.buttonGridModeHTML + 'class="calbuttonM" /></a>';
if ( '' != kal.buttonNextMonthHTML )
	sHTML += '<a href="#' + kal.aMonthName[nNextMonth] + nNextYear + '"><img src=' + kal.buttonNextMonthHTML + 'class="calbuttonM" /></a>';
if ( '' != kal.buttonPrevMonthHTML )
	sHTML += '<a href="#' + kal.aMonthName[nLastMonth] + nLastYear + '"><img src=' + kal.buttonPrevMonthHTML + 'class="calbuttonL" /></a>';
sHTML += '</div>\n';
sHTML += sMonth + ' ' + y + '<a id="' + sMonth + y + '" name="' + sMonth + y + '">&nbsp;</a>\n';
if ( s.isMarkDate )
  {
	if ( ((y == s.this_year) && (m >= s.this_month)) || (y > s.this_year) )
	  {
		sHTML += '<a id="ThisMonth" name="ThisMonth">&nbsp;</a>';
		s.isMarkDate = false;
	  }
  }
sHTML += '</h3>\n';

var isHeaderDone = false;
var nDayMonthStarts = this.aYearDays[m];
var nDaysInMonth = this.aMonthDays[m];
var isOddWeek = true;
var sEventConflictStyling = ' style="color:#ff0; background-color:#f00;"';
if ( typeof(kal.eventConflictStylingHTML) != 'undefined' )
	sEventConflictStyling = kal.eventConflictStylingHTML;
for ( var d = 0; d < nDaysInMonth; ++d )
  {
	var yd = d + nDayMonthStarts;
	var sToday = '';
	if ( (y == s.this_year) && (m == s.this_month) && (d == s.this_day) )
		sToday = ' today ';
	if ( !isHeaderDone )
	  {
		sHTML += '<table summary="Calendar" class="grid" border="0" cellspacing="0" cellpadding="2">\n';
		sHTML += '<thead>\n';
		sHTML +=  '<tr>\n';
		sHTML += '<th colspan="2">DAY</th>\n';
		sHTML += '<th>EVENT</th>\n';
		sHTML += '</tr>\n';
		sHTML += '</thead>\n';
		sHTML += '<tbody>\n';
		isHeaderDone = true;
	  }
	var isSeriesDay = this.aDay[yd].isSeriesDay;
	var isSeriesBangDay = false;
	var isSeriesGameDay = false;
	var isGameDay = false;
	for ( var e = 0; e < this.aDay[yd].aEvent.length; ++e )
	  {
		var oType = new cType( this.aDay[yd].aEvent[e].oType );
		if ( this.aDay[yd].aEvent[e].isGame )
			isGameDay = true;
		if ( oType.t0.charAt(0) == 'S' )
		  {
			if ( oType.t3 == '!' )
				isSeriesBangDay = true;
		  }
		else if ( (oType.t1 == 'G') && (oType.t2 == 'T') )
		  {
			isSeriesGameDay = true;
			continue;
		  }
	  }
	var isWeekdayReported = false;
	var isFirstEvent = (sToday != '');
	for ( var e = 0; (e == 0) || (e < this.aDay[d+nDayMonthStarts].aEvent.length); ++e )
	  {
		var weekday = s.isMobileDevice ? kal.aWeekDayNameXSmall[this.aDay[yd].nWeekDay] : kal.aWeekDayNameSmall[this.aDay[yd].nWeekDay];
		var type = '';
		var event = '&nbsp;';
		var event_type = '';
		if ( this.aDay[yd].aEvent.length > 0 )
		  {
			var oType = new cType( this.aDay[yd].aEvent[e].oType );
			if ( oType.t1 == 'N' )
				continue;

			if ( isSeriesDay )
			  {
				if ( (oType.t0 == 'P') && !isExtraReporting && (isSeriesGameDay || !isSeriesBangDay) )
					continue;
			  }

			type += ' ' + kal.eventData.valueOf( oType.t0 );
			event = this.aDay[yd].aEvent[e].toHTML( 'list' );
			if ( !isGameDay && (oType.t2 == 'T') )
				event += ' (no game scheduled today)';
			event_type += ' ' + ( (oType.t0 == '-') ? '-' : '' );
		  }
		if ( isWeekdayReported )
			weekday = '&nbsp;';
		else
			isWeekdayReported = true;
		if ( isOddWeek )
			sHTML += '<tr>\n';
		else
			sHTML += '<tr class="e">\n';
		sHTML += '<td class="dayname">' + weekday + '</td>\n';
		sHTML += '<td class="daynumb' + type + '">' + (1+this.aDay[yd].nMonthDay) + '</td>\n';
		sHTML += '<td class="scheduled' + event_type + '">' + event;
		if ( isFirstEvent )
		  {
			sHTML += '<a id="calendar_today" name="calendar_today"></a>';
			isFirstEvent = false;
		  }
		if ( (this.aDay[yd].aEvent.length > 0) && (this.aDay[yd].aEvent[e].sConflict != '') )
			sHTML += '<span ' + sEventConflictStyling + '>' + this.aDay[yd].aEvent[e].sConflict + '</span>';
		if ( isSeriesDay && (this.aDay[yd].aEvent[e].oType.t0 == 'P') && (isSeriesGameDay || !isSeriesBangDay) && isExtraReporting )
			sHTML += '<span ' + sEventConflictStyling + '>practice on tournament day automatically skipped</span>';
		sHTML += '</td>\n';
		sHTML += '</tr>\n';
	  }
	if ( this.aDay[yd].nWeekDay == 6)
		isOddWeek = !isOddWeek;
  }
if ( isHeaderDone )
  {
	sHTML += '</tbody>\n';
	sHTML += '</table>\n';
  }
sHTML += '</div>\n';
return sHTML;
}


