var year;
var month;

function calendarEvent(calendar_event_id, calendar_event_type_id, start_date, end_date, event_time, short_title, full_title, location, location_url, description, event_url, health_center_id, health_center, calendar_event_type)
{
	this.calendar_event_id = calendar_event_id;
	this.calendar_event_type_id = calendar_event_type_id;
	this.start_date = start_date;
	this.end_date = end_date;
	this.event_time = event_time;
	this.short_title = short_title;
	this.full_title = full_title
	this.location = location;
	this.location_url = location_url;
	this.description = description
	this.event_url = event_url;
	this.health_center_id = health_center_id;
	this.health_center = health_center;
	this.calendar_event_type = calendar_event_type;
	this.renderDate = calendarEvent_renderDate;
}
function calendarEvent_renderDate()
{
	var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
	var months = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"];
	
	var startDate = new Date(this.start_date.replace(/\-/g, "/"));
	var endDate = new Date(this.end_date.replace(/\-/g, "/"));
	
	var displayDate = months[startDate.getMonth()] + " " + startDate.getDate() + (startDate.getFullYear() != endDate.getFullYear() ? " " + startDate.getFullYear() : "");
	if(endDate > startDate)
	{
		displayDate += "-" + (endDate.getMonth() != startDate.getMonth() ? months[endDate.getMonth()] + " " : "") + endDate.getDate();
	}
	displayDate += " " + endDate.getFullYear();
	
	return displayDate;
}


function renderCalendar(year, month, events)
{
	var days = {};
	for(var i = 0; i < events.length; i++)
	{
		var e = events[i];
		var startDate = new Date(e.start_date.replace(/\-/g, "/"));
		var endDate = new Date(e.end_date.replace(/\-/g, "/"));
		for(var currentDate = startDate; currentDate <= endDate; currentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate() + 1))
		{
			var key = currentDate.getFullYear() + "-" + (currentDate.getMonth() + 1) + "-" + currentDate.getDate();
			var eventsForDay = days[key];
			if(!eventsForDay)
			{
				eventsForDay = [];
				days[key] = eventsForDay;
			}
			eventsForDay.push(e);
		}
	}

	var firstDay = new Date(year, month-1, 1).getDay();
	var currentDay = new Date(year, month-1, -firstDay + 1);
	document.write('<table class="calendar" cellspacing="0">');
	document.write('<thead>');
	document.write('<th>Sun</th>');
	document.write('<th>Mon</th>');
	document.write('<th>Tues</th>');
	document.write('<th>Wed</th>');
	document.write('<th>Thur</th>');
	document.write('<th>Fri</th>');
	document.write('<th>Sat</th>');
	document.write('</thead>');
	
	var currentMonth = currentDay.getMonth() + 1;
	var currentYear = currentDay.getFullYear();
	while((currentMonth <= month && currentYear <= year) || (currentMonth > month && currentYear < year)) {
		document.write('<tr class="week" height="50">');
		for(var i = 0; i < 7; i++)
		{
			var aCellClass = [];
			if(i == 0 || i == 6) {
				aCellClass.push("weekend");
			}
			if(currentMonth != month) aCellClass.push(" otherMonth");
					
			var cellClass = aCellClass.join("");
			
			document.write('<td class="' + cellClass + '" valign="top" width="120">');
			document.write('<div class="number" style="text-align: right">' + currentDay.getDate() + '</div>');
			
			var key = currentDay.getFullYear() + "-" + (currentDay.getMonth() + 1) + "-" + currentDay.getDate();
			var eventsForDay = days[key];
			
			if(eventsForDay)
			{
				for(var c = 0; c < eventsForDay.length; c++)
				{
					var e = eventsForDay[c];
					if(c != 0) document.write('<hr>');
					document.write('<a href="Event.php?id=' + e.calendar_event_id + '">' + htmlEncode(e.short_title) + '</a>');
				}
			}
			
			//TODO: Add Event descriptions here.
			document.write('</td>');
			// Increment the current day by 1 day.
			currentDay = new Date(currentDay.getFullYear(), currentDay.getMonth(), currentDay.getDate() + 1);
			currentMonth = currentDay.getMonth() + 1;
			currentYear = currentDay.getFullYear();
		}
		document.write('</tr>');
	}
	document.write('</table>');	
}

function applyTypeFilter(types)
{
	document.forms.frmNavigation.type.value = types;
	document.forms.frmNavigation.submit();
}

function setMode(mode)
{
	document.forms.frmNavigation.mode.value = mode;
	document.forms.frmNavigation.submit();
}

function nextMonth()
{
	var date = new Date(year, month, 1);
	var m = "0" + (date.getMonth() + 1);
	var ym = date.getFullYear() + m.substr(m.length - 2, 2);
	document.forms.frmNavigation.ym.value = ym;
	document.forms.frmNavigation.submit();
}

function previousMonth()
{
	var date = new Date(year, month - 2, 1);
	var m = "0" + (date.getMonth() + 1);
	var ym = date.getFullYear() + m.substr(m.length - 2, 2);
	document.forms.frmNavigation.ym.value = ym;
	document.forms.frmNavigation.submit();
}

function renderList(events)
{
	if(events.length != 0)
	{
		document.write('<table class="eventList" cellspacing="0">');
		document.write('<thead><th>Date</th><th>Event</td><th>Type</th></thead>');
		for(var i = 0; i < events.length; i++)
		{
			var e = events[i];
			document.write('<tr><td nowrap>' + e.renderDate() + '</td><td><a href="Event.php?id=' + e.calendar_event_id + '">' + htmlEncode(e.full_title) + '</a></td><td>' + htmlEncode(e.calendar_event_type) + '</td></tr>');
			
		}
		document.write('</table>');
	}
	else
	{
		document.write("<br><br>There are no events this month.<br>");
	}
}

function htmlEncode(text) {
	var re = /[\&\<\>"'\x0A\x0D]|[\u0080-\uffff]/g;
	if(text) {
		return(text.toString().replace(re, 
			function(match) {
				switch(match) {
					case "<":
						return("&lt;");
						break;
					case ">":
						return("&gt;");
						break;
					case "&":
						return("&amp;");
						break;
					case "\"":
						return("&quot;");
						break;
					case "'":
						return("&#39;");
						break;
					case String.fromCharCode(10):
						return("&#10;");
						break;
					case String.fromCharCode(13):
						return("&#13;");
						break;
					default:
						return("&#" + match.charCodeAt(0) + ";");
				}
			})
		);
	}
	else {
		return("");
	}
}