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


// Method to insert HTML for news and upcoming events
cCalendar.prototype.toNewsHTML = function ( id_news, id_upcoming, id_updated )
{
var $name = 'toNewsHTML';
if ( id_news === undefined )
	id_news = kal.news.insert[0];
if ( id_upcoming === undefined )
	id_upcoming = kal.news.insert[1];
if ( id_updated === undefined )
	id_updated = kal.news.insert[2];
var o = getElement( id_news );
if ( o )
	o.innerHTML = this.toHTML( 'news' );
o = getElement( id_upcoming );
if ( o )
	o.innerHTML = this.toHTML( 'upcoming' );
o = getElement( id_updated );
if ( o )
  {
	var today = new Date();
	o.innerHTML = 'Updated ' + kal.aWeekDayName[today.getDay()] + ', ' + kal.aMonthName[today.getMonth()] + ' ' + today.getDate() + ', ' + today.getFullYear();
  }
return false ;
}

function calNewsInit ( sd )
{
sd.news_days = -1;
sd.sTournament = '';
sd.nTournamentMonth1 = 0;
sd.nTournamentDay1 = 0;
sd.nTournamentMonth2 = 0;
sd.nTournamentDay2 = 0;
sd.aSeries = [];
sd.aTournamentEventList = new Array();
sd.nUnreportedDays = ( typeof(kal.news.unreportedDays) == 'undefined' ) ? (-1) : kal.news.unreportedDays;
sd.isOdd = true;
return '';
}

function calUpcomingInit ( sd )
{
sd.upcoming_days = -1;
sd.upcoming_items = 0;
sd.upcoming_gap = ( typeof(kal.coming.gapHTML) == 'undefined' ) ? '' : kal.coming.gapHTML;
sd.sSeeTournamentPage = ( typeof(kal.coming.seeSR) == 'undefined' ) ? '' : kal.coming.seeSR;
sd.sListTournamentGames = ( typeof(kal.coming.isListTournamentGames) == 'undefined' ) ? '' : kal.coming.isListTournamentGames;
sd.isOdd = true;
return '';
}

// Method to return HTML with a list of news in calendar
cEventYear.prototype.toNewsHTML = function ( y, m, s )
{
var $name = 'toNewsHTML';
var sHTML = '';
var sMonth = kal.aMonthName[ m ];
var nDayMonthStarts = this.aYearDays[m];
var nDaysInMonth = this.aMonthDays[m];

for ( var d = 0; d < nDaysInMonth; ++d )
  {
	if ( --s.nDaysToToday < 0 )
		break;
	var nNewsDays = kal.news.period[0] - s.nDaysToToday;
	var sHTMLforDay = '';
	var yd = d + nDayMonthStarts;

	var sTournament = this.aDay[yd].sTournament;
	var sTournamentItem = '';
	if ( (s.sTournament != '') && (s.sTournament != sTournament) )
		sTournamentItem = this.toTournamentNewsHTML( s );
	if ( (s.sTournament == '') && (sTournament != '') )
	  {
		s.sTournament = sTournament;
		s.nTournamentYear = y;
		s.nTournamentMonth1 = s.nTournamentMonth2 = m;
		s.nTournamentDay1 = s.nTournamentDay2 = d;
		s.nTournamentYearDay1 = s.nTournamentYearDay2 = yd;
		s.aTournamentEventList.length = 0;
		s.sTournamentReport = '';
	  }
	if ( (sTournamentItem != '') && (nNewsDays > 0) )
		sHTML = sTournamentItem + sHTML;

	for ( var e = 0; e < this.aDay[yd].aEvent.length; ++e )
	  {
		if ( (s.sTournament != '') && (s.sTournament != sTournament) )
			sHTML = this.toTournamentNewsHTML( s ) + sHTML;
		var sHTMLforItem = '';
		var oType = new cType( this.aDay[yd].aEvent[e].oType );
		if ( kal.news.ignore.indexOf(oType.t0) != -1 )
			continue;
		if ( oType.t0 == 'S' )
		  {	// Series Events
			continue;
		  }
		else if ( (oType.t1 == 'G') && (oType.t2 == 'T') )
		  { // Tournament Games
			if ( (this.aDay[yd].aEvent[e].sScore1 !== '') || (s.nDaysToToday > s.nUnreportedDays) )
			  {
				if ( typeof(this.aDay[yd].aEvent[e].oType.tournament_report) != 'undefined' )
					s.sTournamentReport = this.aDay[yd].aEvent[e].oType.tournament_report;
				s.aTournamentEventList[s.aTournamentEventList.length] = this.aDay[yd].aEvent[e];
				s.nTournamentMonth2 = m;
				s.nTournamentDay2 = d;
				s.nTournamentYearDay2 = yd;
				continue;
			  }
		  }
		else
		  {	// Other News Events
			var sNewsTitle = '';
			var sText = '';
			if ( oType.t1 == 'N' )
			  {
				if ( (typeof(this.aDay[yd].aEvent[e].sNewsTitle) != 'undefined') && (this.aDay[yd].aEvent[e].sNewsTitle != '') )
					sNewsTitle = ', <em class="title">' + this.aDay[yd].aEvent[e].sNewsTitle + '</em>';
				if ( oType.t0 == 'N!' )
					sHTMLforItem += '<div class="newsalert ' + (s.isOdd ? 'o' : 'e') + '">';
				else
					sHTMLforItem += '<div class="' + (s.isOdd ? 'o' : 'e') + '">';
				s.isOdd = !s.isOdd;
			  }
			else
			  {
				if ( nNewsDays <= 0 )
					continue;
				if ( (s.nDaysToToday != 1) && this.aDay[yd].aEvent[e].isCancelled )
					continue;
				if ( this.aDay[yd].aEvent[e].isGame && (this.aDay[yd].aEvent[e].sScore1 === '') )
				  {
					if ( this.aDay[yd].aEvent[e].isExhibitionGame && (typeof(kal.news.isNoXScore) != 'undefined') && kal.news.isNoXScore )
						continue;
					if ( (s.nDaysToToday <= s.nUnreportedDays) || (s.nDaysToToday == 0) )
						continue;
				  }
				sHTMLforItem += '<div class="' + (s.isOdd ? 'o' : 'e') + '">';
				s.isOdd = !s.isOdd;
			  }

			sHTMLforItem += '<p><strong>' + cal.getDate(yd,-1,y,[' ','m','d'],true) + sNewsTitle;
			if ( this.aDay[yd].aEvent[e].isGame )
				sText += 'we ';
			sText += this.aDay[yd].aEvent[e].toHTML('N');
			if ( sText.length > 0 )
			  {
				var ix = sText.length - 1;
				var sTag = '</span>';
				if ( (sText.length > sTag.length) && (sText.substring(sText.length - sTag.length) == '</span>') )
					ix = sText.length - sTag.length - 1;
				if ( '?!. '.indexOf(sText.charAt(ix)) == -1 )
					sText += '.';
				sHTMLforItem += ':</strong> ';
			  }
			else
			  {
				sHTMLforItem += '</strong>';
			  }
			sHTMLforItem += sText + '</p></div>\n';
		  }
		sHTMLforDay = sHTMLforItem + sHTMLforDay;
	  }
	sHTML = sHTMLforDay + sHTML;
  }
return sHTML;
}




// Method to return HTML with tournament information
cEventYear.prototype.toTournamentNewsHTML = function ( s )
{
var $name = 'toTournamentNewsHTML';
var isOtherDay = false;
if ( (s.sTournament == '') || (s.aTournamentEventList.length == 0) )
	return '';
var sHTML = '<p><strong>' + cal.getDate(s.nTournamentYearDay1,-1,s.nTournamentYear,[' ','m','d'],true);
if ( s.nTournamentMonth1 != s.nTournamentMonth2 )
  {
	sHTML += ' &#8211; ' + cal.getDate(s.nTournamentYearDay2,-1,s.nTournamentYear,[' ','m'],true);
	isOtherDay = true;
  }
else if ( s.nTournamentDay1 != s.nTournamentDay2 )
  {
	sHTML += '&#8211;';
	isOtherDay = true;
  }
if ( isOtherDay )
	sHTML += ' ' + cal.getDate(s.nTournamentYearDay2,-1,s.nTournamentYear,['d'],true);
sHTML += ', <em class="title">' + s.sTournament + '</em>:</strong> ';
var sPrefix = 'we ';
for ( var d = 0; d < s.aTournamentEventList.length; ++d )
  {
	var sPrevOpponent = (d == 0) ? '' : s.aTournamentEventList[d-1].sTeam2;
	var sNextOpponent = (d+1 == s.aTournamentEventList.length) ? '' : s.aTournamentEventList[d+1].sTeam2;
	var sNews = sPrefix;
	if ( sPrefix != '' )
		sPrefix = '';
	sNews += s.aTournamentEventList[d].toHTML('NT',sPrevOpponent);
	if ( (sPrevOpponent == s.aTournamentEventList[d].sTeam2) && (sNextOpponent != s.aTournamentEventList[d].sTeam2) )
	  {
		if ( sNextOpponent == '' )
			sNews = 'and then ' + sNews;
		else
			sNews = 'then ' + sNews;
	  }
	else if ( (sNextOpponent == '') && (sPrevOpponent != '') )
		sNews = 'and ' + sNews;
	sHTML += sNews;
	if ( sNextOpponent == '' )
		sHTML += '.';
	else
	  {
		if ( sNextOpponent == s.aTournamentEventList[d].sTeam2 )
		  {
			sHTML += ', ';
		  }
		else
		  {
			sHTML += '; ';
			if ( sPrevOpponent == s.aTournamentEventList[d].sTeam2 )
				sPrefix = 'we then ';
		  }
	  }
  }
if ( s.sTournamentReport != '' )
	sHTML += ' ' + s.sTournamentReport;
s.sTournament = '';
return '<div class="' + (s.isOdd ? 'o' : 'e') + '">' + sHTML + '</div>\n';
}


// Method to return HTML with a list of upcoming events in calendar
cEventYear.prototype.toUpcomingHTML = function ( y, m, s )
{
var $name = 'toUpcomingHTML';
var sHTML = '';
var sMonth = kal.aMonthName[ m ];
var nDayMonthStarts = this.aYearDays[m];
var nDaysInMonth = this.aMonthDays[m];
var isEventToday = false;

for ( var d = 0; d < nDaysInMonth; ++d )
  {
	if ( ((s.upcoming_days > kal.news.period[1])&&(s.upcoming_items>1)) || (y < s.this_year) || ((y == s.this_year) && (m < s.this_month)) || ((y == s.this_year) && (m == s.this_month) && (d < s.this_day)) )
		continue;
	var isToday = (y == s.this_year) && (m == s.this_month) && (d == s.this_day);
	if ( isToday && (s.upcoming_days < 0) )
		s.upcoming_days = 1;
	else if ( s.upcoming_days >= 0 )
		s.upcoming_days++;
	else if ( s.upcoming_items > 0 )
		continue;
	var yd = d + nDayMonthStarts;
	var isSeriesDay = this.aDay[yd].isSeriesDay;
	var isSeriesBangDay = false;
	var isSeriesGameDay = false;
	for ( var e = 0; e < this.aDay[yd].aEvent.length; ++e )
	  {
		var oType = new cType( this.aDay[yd].aEvent[e].oType );
		if ( oType.t0.charAt(0) == 'S' )
		  {
			if ( oType.t3 == '!' )
				isSeriesBangDay = true;
			continue;
		  }
		else if ( (oType.t1 == 'G') && (oType.t2 == 'T') )
		  {
			isSeriesGameDay = true;
			continue;
		  }
	  }
	var nTournamentEvent = -1;
	for ( var e = 0; e < this.aDay[yd].aEvent.length; ++e )
	  {
		var ix = e;
		if ( this.aDay[yd].aEvent[ix].oType.isEqual(['S','S','T']) )
		  {
			if ( !s.sListTournamentGames )
				nTournamentEvent = ix;
			else
				continue;
		  }
		if ( (nTournamentEvent >= 0) && this.aDay[yd].aEvent[ix].isGame  )
		  {
			continue;
//			ix = nTournamentEvent;
//			nTournamentEvent = -1;
		  }
		var oType = new cType( this.aDay[yd].aEvent[ix].oType );
		if ( isSeriesDay )
		  {
			if ( this.aDay[yd].aEvent[ix].isGame && !s.sListTournamentGames )
				continue;
			else if ( (oType.t0 == 'P') && (isSeriesGameDay || !isSeriesBangDay) )
				continue;
		  }
		if ( kal.coming.ignore.indexOf(oType.t0) != -1 )
			continue;
		if ( isToday )
		  {
			if ( (this.aDay[yd].aEvent[ix].sScore1 != '')  && (this.aDay[yd].aEvent[ix].sWhyCancelled != 'Forfeit') )
				continue;
			if ( (this.aDay[yd].aEvent[ix].oTime.t2 > 0) && (s.this_minute > this.aDay[yd].aEvent[ix].oTime.t2) )
				continue;
		  }
		if ( (this.aDay[yd].aEvent[ix].isGame) && (this.aDay[yd].aEvent[ix].sWhyCancelled != 'Forfeit') && (this.aDay[yd].aEvent[ix].sScore1 !== '') && (this.aDay[yd].aEvent[ix].sScore1 >= 0) )
			continue;
		var sContent = '';
		var isUpcomingTournament = false;
		++s.upcoming_items;
		sHTML += '<div class="' + (s.isOdd ? 'o' : 'ix') + '">';
		s.isOdd = !s.isOdd;
		if ( isToday || !(this.aDay[yd].aEvent[ix].isSeries) || (this.aDay[yd].aEvent[ix].oMultiDayEvent.nDays > 0) )
			sContent = this.aDay[yd].aEvent[ix].toHTML( 'upcoming' );
		if ( sContent != '' )
		  {
			var nMultiDaysLeft = this.aDay[yd].aEvent[ix].oMultiDayEvent.daysLeft();
			var sMoreContent = '';
			if ( isToday )
				isEventToday = true;
			if ( (this.aDay[yd].aEvent[ix].oMultiDayEvent.isDaySkipped == false) && (nMultiDaysLeft > 0) )
			  {
				if ( (this.aDay[yd].aEvent[ix].oMultiDayEvent.nDay == 1) || (s.upcoming_days == 1) )
				  {
					if ( (cal.getDate(d,m,y,['m'])) != cal.getDate(yd+nMultiDaysLeft-1,-1,y,['m']) )
						sMoreContent += '<p><strong>' + cal.getDate(yd-this.aDay[yd].aEvent[ix].oMultiDayEvent.nDay+1,-1,y,[' ','m','d'],true) + ' &#8211; ' + cal.getDate(yd+nMultiDaysLeft-1,-1,y,[' ','m','d'],true) + ':</strong> ';
					else if ( (cal.getDate(d,m,y,[' ','m','d'])) == (cal.getDate(yd+nMultiDaysLeft-1,-1,y,[' ','m','d'])) )
						sMoreContent += '<p><strong>' + cal.getDate(yd,-1,y,[' ','m','d'],true) + ':</strong> ';
					else
						sMoreContent += '<p><strong>' + cal.getDate(yd,-1,y,[' ','m','d'],true) + '&#8211;' + cal.getDate(yd+nMultiDaysLeft-1,-1,y,['d'],true) + ':</strong> ';
				  }
				if ( (sMoreContent.length > 0) && (oType.t0 == 'S') )
					isUpcomingTournament = true;
			  }
			else
			  {
				sMoreContent += '<p><strong>' + cal.getDate(yd,-1,y,[' ','m','d'],true) + ':</strong> ';
			  }
			if ( sMoreContent.length > 0 )
			  {
				sHTML += sMoreContent;
				sHTML += sContent;
				if ( isUpcomingTournament )
					sHTML += s.sSeeTournamentPage;
				sHTML += '.</p>\n</div>\n';
			  }
		  }
	  }
	if ( isEventToday )
	  {
		if ( '' != s.upcoming_gap )
			sHTML += s.upcoming_gap;
		isEventToday = false;
	  }
  }

return sHTML;
}


