﻿/// <reference path="jquery.js />
/// <reference path="jquery.class.js />
/// <reference path="calendarGlobals.js" />
/// <reference path="calendarEvents.js" />
/// <reference path="calendarHolidays.js" />

/**
* CALENDAR FUNCTIONS
*/
function CreateQuickJumpList()
{
	/// <summary>Writes out the HTML for the quick jump list</summary>
	/// <returns>Nothing</returns>
	if ($('#calendar'))
	{
		var html = new Array();
		var showLength = DisplayMonths.length;
		for (var i = 0; i < showLength; i++)
		{
			var displayMonth = DisplayMonths[i];
			html.push('<a href="#' + displayMonth.month.name + '_' + displayMonth.year + '" class="jumpList">' + displayMonth.month.name + '</a>');
			if (i < showLength - 1)
			{
				html.push(' | ');
			}
		}
		$('#calendar').html(html.join('') + '<br /><br />');
	}
}
function CreateCalendar()
{
	/// <summary>Writes out the HTML for the calendar</summary>
	/// <returns>Nothing</returns>
	if ($('#calendar'))
	{
		var html = new Array();
		var showLength = DisplayMonths.length;
		for (var i = 0; i < showLength; i++)
		{
			var displayMonth = DisplayMonths[i];
			var monthID = displayMonth.month.id;
			var monthName = displayMonth.month.name;
			var monthDays = displayMonth.month.days;
			var year = displayMonth.year
			var currentDate = new Date();
			currentDate.setFullYear(year, monthID, 1);
			html.push(CreateCalendarHeader(displayMonth));
			html.push('<tbody><tr>');
			html.push(AddBlankCells(currentDate.getDay()));
			html.push(CreateCalendarDays(((monthName != 'February') ? monthDays : GetLeapYearDays(year)), currentDate, displayMonth));
			html.push('</tr></tbody></table><br /><br />');
		}
		$('#calendar').append(html.join(''));
	}
}
function CreateCalendarHeader(displayMonth)
{
	/// <summary>Returns the HTML for the HEADER part of the calendar</summary>
	/// <param name="displayMonth" type="Object">Contains the month and year information</param>
	/// <returns>String</returns>
	var html = new Array();
	html.push('<table align="center" class="calendar"><thead><tr><th colspan="7"><h2>');
	html.push('<a name="' + displayMonth.month.name + '_' + displayMonth.year + '"></a>' + displayMonth.month.name + ' ' + displayMonth.year);
	html.push('</h2></th></tr><tr>');
	var daysLength = DaysOrder.length;
	for (var i = 0; i < daysLength; i++)
	{
		var day = DaysOrder[i];
		html.push('<th>' + day.name + '</th>');
	}
	html.push('</tr></thead>');
	return (html.join(''));
}
function CreateCalendarDays(numDays, currentDate, displayMonth)
{
	/// <summary>Returns the HTML for the BODY part of the calendar</summary>
	/// <param name="numDays">Number</param>
	/// <param name="currentDate" type="Date"></param>
	/// <param name="displayMonth" type="Object">Object</param>
	/// <returns>String</returns>
	var html = new Array();
	for (var i = 1; i <= numDays; i++)
	{
		currentDate.setDate(i);
		var dayID = currentDate.getDay();
		if (dayID == 0) { html.push('<tr>'); }
		html.push('<td valign="top">' + i +'<br /><br />');
		// Add events
		var day = DaysOrder[dayID];
		var playTime =
			(currentDate >= OpeningNight && currentDate <= ClosingNight) ?
				displayMonth.month.scheduleType[day.name.toLowerCase()] :
				null;
		var clubClosed = _ClubClosedEvents['_' + displayMonth.month.id + '_' + i + '_' + displayMonth.year]; 	// CLOSED DUE TO NON-HOLIDAY REASON
		var specialEvent = _SpecialEvents['_' + displayMonth.month.id + '_' + i + '_' + displayMonth.year]; 	// SPECIAL EVENT (PLAY IS OPEN)
		var staticHolidays = _StaticHolidays['_' + displayMonth.month.id + '_' + i]; 							// STATIC HOLIDAYS
		var dynamicHolidays = _DynamicHolidays['_' + displayMonth.month.id + '_' + i + '_' + displayMonth.year]; // DYNAMIC HOLIDAYS
		var isClosed =
			(clubClosed) ?
				true :
				(staticHolidays) ?
					((staticHolidays.playType == PlayTypes.CLOSED) ?
						true : 
						false) :
					(dynamicHolidays) ?
						((dynamicHolidays.playType == PlayTypes.CLOSED) ?
							true : 
							false) : 
						false;

		var eventHTML = new Array();
		// DISPLAY REGULAR PLAY TIME
		if (playTime && ! isClosed)
		{
			eventHTML.push(playTime.startTime + ' - ' + playTime.endTime);
		}
		// CLOSED FOR NON-HOLIDAY REASON
		if (clubClosed && !specialEvent)
		{
			eventHTML.push('<br /><span class="bold redSmall">' + PlayTypes.CLOSED + '</span>');
		}
		// DISPLAY THE SPECIAL EVENT (SUCH AS "Ladder")
		if (specialEvent)
		{
			eventHTML.push('<br /><span class="bold redSmall">' + specialEvent.text + '</span>');
			if (specialEvent.textExtension)
			{
				eventHTML.push('<br /><span class="redSmall">' + specialEvent.textExtension + '</span>');
			}
		}
		// DISPLAY HOLIDAY
		var holiday = staticHolidays || dynamicHolidays;
		if (holiday)
		{
			if (playTime && isClosed)
			{
				eventHTML.push('<br /><span class="bold redSmall">' + PlayTypes.CLOSED + '</span>');
			}
			eventHTML.push('<br /><span class="redSmall">' + holiday.text + '</span>');
			if (holiday.textExtension)
			{
				eventHTML.push('<br /><span class="redSmall">' + holiday.textExtension + '</span>');
			}
		}
		html.push(eventHTML.join(''));
		html.push('</td>');
		if (currentDate.getDay() == 6) { html.push('</tr>'); }
	}
	html.push(AddBlankCells(6 - currentDate.getDay()));
	return (html.join(''));
}
function AddBlankCells(n)
{
	/// <summary>Creates n blank cells</summary>
	/// <param name="n">Number</param>
	/// <returns>String</returns>
	var html = new Array();
	for (var i = 0; i < n; i++)
	{
		html.push('<td class="noborder">&nbsp;</td>');
	}
	return (html.join(''));
}
/**
* jQuery starts it off
*/
$(document).ready(
	function ()
	{
		CreateQuickJumpList();
		CreateCalendar();
	}
);
