var feedUri = 'http://www.google.com/calendar/feeds/cpnaz.org@gmail.com/public/full/';
var eventCalendarService = new google.gdata.calendar.CalendarService('cpnaz.org');
var curDate = new Date();
var calQuery = new google.gdata.calendar.CalendarEventQuery(feedUri);
	calQuery.setOrderBy('starttime');
	calQuery.setSortOrder('ascending');
	calQuery.setSingleEvents(true);
	calQuery.setMinimumStartTime((curDate.getFullYear() - 2) + "-01-01");
	calQuery.setMaxResults(1000000);

var minStartYear = curDate.getFullYear() - 2, displayMonth = curDate.getMonth(), displayYear = curDate.getFullYear();

var eventsArry;

function numDays(date)
{
	var year = date.getFullYear();
	switch(date.getMonth())
	{
		case 1:
			if(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
			{
				return 29;
			}
			else
			{
				return 28;
			}
		case 3:
			return 30;
		case 5:
			return 30;
		case 8:
			return 30;
		case 10:
			return 30;
		default:
			return 31;
	}
}

function formatDate(startDate, endDate)
{
	var dateString = new String();
	var tempEndDate = new Date(endDate.getFullYear(), endDate.getMonth(), (endDate.getDate() - 1));
	if((startDate.getFullYear() == endDate.getFullYear()) && (startDate.getMonth() == endDate.getMonth()) && (startDate.getDate() == endDate.getDate()))
	{
		if((startDate.getHours() == endDate.getHours()) && (startDate.getMinutes() == endDate.getMinutes()))
		{
			dateString = (startDate.getMonth() + 1) + "/" + startDate.getDate() + "/" + startDate.getFullYear() + " " + to12Hour(startDate)
		}
		else
		{
			dateString = (startDate.getMonth() + 1) + "/" + startDate.getDate() + "/" + startDate.getFullYear() + " " + to12Hour(startDate) + " - " + to12Hour(endDate);
		}
	}
	else if((startDate.getHours() == "0") && (endDate.getHours() == "0") && (startDate.getMinutes() == "0") && (endDate.getMinutes() == "0"))
	{
		if((startDate.getMonth() == tempEndDate.getMonth()) && (startDate.getDate() == tempEndDate.getDate()))
		{
			dateString = (startDate.getMonth() + 1) + "/" + startDate.getDate() + "/" + startDate.getFullYear();
		}
		else
		{
			dateString = (startDate.getMonth() + 1) + "/" + startDate.getDate() + "/" + startDate.getFullYear() + " - " + (tempEndDate.getMonth() + 1) + "/" + tempEndDate.getDate() + "/" + tempEndDate.getFullYear();
		}
	}
	else
	{
		dateString = (startDate.getMonth() + 1) + "/" + startDate.getDate() + "/" + startDate.getFullYear() + " " + to12Hour(startDate) + " - " + (endDate.getMonth() + 1) + "/" + endDate.getDate() + "/" + endDate.getFullYear() + " " + to12Hour(endDate); 
	}
	return dateString
}

function to12Hour(date)
{
	// thanks to http://javascript.internet.com/time-date/hour-format-clock.html for much of the code
	var hour = date.getHours();
	var min = date.getMinutes();
	var add;
	if (min <= 9)
	{
		min = "0" + min;
	}
	if (hour > 12)
	{
		hour = hour - 12;
		add = " p.m.";
	}
	else
	{
		hour = hour;
		add = " a.m.";
	}
	if (hour == 12)
	{
		add = " p.m.";
	}
	if (hour == 00)
	{
		hour = "12";
	}
	return hour + ":" + min + add;
}

function calCallback (feedRoot)
{
	eventsArry = new Array();
	var curDate = new Date();
	var todayYear = curDate.getFullYear();
	var todayMonth = curDate.getMonth();
	var entries = feedRoot.feed.getEntries();
	var len = entries.length;
	for (var i = 0; i< len; i++)
	{
		var entry = entries[i];
		var title = entry.getTitle().getText();
		var startDateTime = null;
		var startJSDate = null;
		var endDateTime = null;
		var endJSDate = null;
		var times = entry.getTimes();
		if (times.length > 0)
		{
			startDateTime = times[0].getStartTime();
			startJSDate = startDateTime.getDate();
			endDateTime = times[0].getEndTime();
			endJSDate = endDateTime.getDate();
		}
		var description = entry.getContent().getText();
		var location = entry.getLocations()[0].getValueString();
		var stringTimes = new String();
		stringTimes = formatDate(startJSDate, endJSDate);
		if ((startJSDate.getDate()!= endJSDate.getDate()) || (startJSDate.getMonth() != endJSDate.getMonth()))
		{
			var startDate = new Date();
			startDate.setFullYear(startJSDate.getFullYear(), startJSDate.getMonth(), startJSDate.getDate());
			var endDate = new Date();
			endDate.setFullYear(endJSDate.getFullYear(), endJSDate.getMonth(), endJSDate.getDate());
			var diff = (endDate - startDate);
			var length = (diff / 24 / 60 / 60 / 1000);
			var actualLength = length.toFixed(0);
			if ((endJSDate.getHours() != "0") || (endJSDate.getMinutes() != "0"))
			{
				actualLength++;
			}
			for (j = 0; j < actualLength; j++)
			{
				var eventDate = new Date();
				eventDate.setFullYear(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());
				eventDate.setDate(eventDate.getDate() + j);
				var arrayDate = eventDate.getFullYear() + "." + (eventDate.getMonth() + 1) + "." + eventDate.getDate();
				if(eventsArry[arrayDate] == null)
				{
					eventsArry[arrayDate] = new Array(1);
					eventsArry[arrayDate][0] = [null,title,formatDate(startJSDate, endJSDate),location,description,null];
				} 
				else
				{
					eventsArry[arrayDate].push([null,title,formatDate(startJSDate, endJSDate),location,description,null]);
				}
			}
		}
		else
		{
			var arrayDate = startJSDate.getFullYear() + "." + (startJSDate.getMonth() + 1) + "." + startJSDate.getDate();
			if(eventsArry[arrayDate] == null)
			{
				eventsArry[arrayDate] = new Array(1);
				eventsArry[arrayDate][0] = [null,title,formatDate(startJSDate, endJSDate),location,description,null];
			}
			else
			{
				eventsArry[arrayDate].push([null,title,formatDate(startJSDate, endJSDate),location,description,null]);
			}
		}
	}
	writeGCalSmall(displayYear,displayMonth);
}

function writeGCalSmall(y, m)
{
	var displaymonth = new Date();
	var eventsArray = new Array();
	eventsArray = eventsArry;
	var today = displaymonth.getFullYear()+"."+(displaymonth.getMonth()+1)+"."+displaymonth.getDate();
	displaymonth.setFullYear(y,m,1);
	var selectedmonth = document.getElementById("monthDivInner");
	selectedmonth.value = m;
	var selectedyear = document.getElementById("yearDivInner");
	selectedmonth.innerHTML = document.getElementById(m).innerHTML;
	selectedyear.innerHTML = y;
	var currentday = 1;
	var numdays = numDays(displaymonth);
	var newcaltable = "<table id='calendar' border='0px' cellspacing='1px' cellpadding='3px'><tr><td id='su' class='dayName'>Su</td><td id='mo' class='dayName'>Mo</td><td id='tu' class='dayName'>Tu</td><td id='we' class='dayName'>We</td><td id='th' class='dayName'>Th</td><td id='fr' class='dayName'>Fr</td><td id='sa' class='dayName'>Sa</td></tr><tr>";
	if(displaymonth.getDay() > 0)
	{
		for(var i=0; i<displaymonth.getDay(); i++)
		{
			newcaltable += "<td class='calDayNoDate'>&nbsp;</td>";
		}
	}
	for(var i=displaymonth.getDay(); i<7; i++)
	{
		var eventmonth = displaymonth.getMonth()+1;
		var eventdate = displaymonth.getFullYear()+"."+eventmonth+"."+currentday;
		if(eventsArray[eventdate] != null)
		{
			newcaltable += "<td class='eventDay' onclick='window.location=\"events.shtml\"' value=\"";
			for(var j=0; j<eventsArray[eventdate].length-1; j++)
			{
				newcaltable += eventsArray[eventdate][j][1].replace(/\"/g,"&#34;")+"<br><br>";
			}
			newcaltable += eventsArray[eventdate][eventsArray[eventdate].length-1][1].replace(/\"/g,"&#34;")+"\"";
		}
		else
		{
			newcaltable += "<td class='calDay'";
		}
		if(eventdate == today)
		{
			newcaltable += " style='text-decoration:underline;'";
		}
		newcaltable += ">"+currentday+"</td>";
		currentday++;
	}
	newcaltable += "</tr>";
	while(currentday+7 <= numdays)
	{
		newcaltable += "<tr>";
		for(var i=0; i<7; i++)
		{
			var eventmonth = displaymonth.getMonth()+1;
			var eventdate = displaymonth.getFullYear()+"."+eventmonth+"."+currentday;
			if(eventsArray[eventdate] != null)
			{
				newcaltable += "<td class='eventDay' onclick='window.location=\"events.shtml\"' value=\"";
				for(var j=0; j<eventsArray[eventdate].length-1; j++)
				{
					newcaltable += eventsArray[eventdate][j][1].replace(/\"/g,"&#34;")+"<br><br>";
				}
				newcaltable += eventsArray[eventdate][eventsArray[eventdate].length-1][1].replace(/\"/g,"&#34;")+"\"";
			}
			else
			{
				newcaltable += "<td class='calDay'";
			}
			if(eventdate == today)
			{
				newcaltable += " style='text-decoration:underline;'";
			}
			newcaltable += ">"+currentday+"</td>";
			currentday++;
		}
		newcaltable += "</tr>";
	}
	displaymonth.setDate(numdays);
	newcaltable += "<tr>";
	for(var i=0; i<=displaymonth.getDay(); i++)
	{
		var eventmonth = displaymonth.getMonth()+1;
		var eventdate = displaymonth.getFullYear()+"."+eventmonth+"."+currentday;
		if(eventsArray[eventdate] != null)
		{
			newcaltable += "<td class='eventDay' onclick='window.location=\"events.shtml\"' value=\"";
			for(var j=0; j<eventsArray[eventdate].length-1; j++)
			{
				newcaltable += eventsArray[eventdate][j][1].replace(/\"/g,"&#34;")+"<br><br>";
			}
			newcaltable += eventsArray[eventdate][eventsArray[eventdate].length-1][1].replace(/\"/g,"&#34;")+"\"";
		}
		else
		{
			newcaltable += "<td class='calDay'";
		}
		if(eventdate == today)
		{
			newcaltable += " style='text-decoration:underline;'";
		}
		newcaltable += ">"+currentday+"</td>";
		currentday++;
	}
	if(displaymonth.getDay() % 7 < 6)
	{
		for(var i = displaymonth.getDay()+1 % 7; i<7; i++)
		{
			newcaltable += "<td class='calDayNoDate'>&nbsp;</td>";
		}
	}
	newcaltable += "</tr><tr><td class='weekly' style='cursor:pointer;' onmouseover='this.className=\"weeklyHighlight\"; window.status=\"http://cpnaz.org/events.shtml#weekly\"' onmouseout='this.className=\"weekly\"; window.status=\"\"' onclick='window.location=\"events.shtml#weekly\"' colspan='7'>Weekly Events</td></tr></table>";
	var calcell = document.getElementById("calcell");
	calcell.innerHTML = newcaltable;
	var daynames = new Array(document.getElementById("su"), document.getElementById("mo"), document.getElementById("tu"), document.getElementById("we"), document.getElementById("th"), document.getElementById("fr"),document.getElementById("sa"));
	var maxdaywidth = maxDayWidth(daynames);
	document.getElementById("calendar").style.width = 7*(maxdaywidth+1)+1+"px";
	for(var i=0; i<daynames.length; i++)
	{
		daynames[i].style.width = maxdaywidth+"px";
	}
	$("td.eventDay").hover(showEvents,hideEvents);
}

function changeMonth(m)
{
	$("#monthPosition2").slideUp();
	var monthDivInner = document.getElementById("monthDivInner");
	monthDivInner.innerHTML = document.getElementById(m).innerHTML
	monthDivInner.value = m;
	writeGCalSmall(document.getElementById("yearDivInner").innerHTML,m);
}

function changeYear(y)
{
	$("#yearPosition2").slideUp();
	document.getElementById("yearDivInner").innerHTML = y;
	writeGCalSmall(y,document.getElementById("monthDivInner").value);
}

function adjMonth(plusminus)
{
	var selectedmonth = document.getElementById("monthDivInner");
	var selectedyear = document.getElementById("yearDivInner");
	var newmonth = (parseInt(selectedmonth.value) + 12 + plusminus) % 12;
	selectedmonth.innerHTML = document.getElementById(newmonth).innerHTML;
	selectedmonth.value = newmonth;
	if((newmonth==0 && plusminus==1) || (newmonth==11 && plusminus==-1))
	{
		selectedyear.innerHTML = parseInt(selectedyear.innerHTML) + plusminus;
	}
	displayYear = parseInt(selectedyear.innerHTML);
	displayMonth = parseInt(selectedmonth.value);
	if (displayYear != minStartYear) {
		writeGCalSmall(displayYear, displayMonth);
	}
	else {
		minStartYear = displayYear - 2;
		calQuery.setMinimumStartTime(minStartYear + "-01-01");
		calQuery.setMaxResults(calQuery.getMaxResults() + 2000);
		document.getElementById("calcell").innerHTML = '<img src="images/load.gif" alt="Loading Calendar..." />';
		eventCalendarService.getEventsFeed(calQuery, calCallback, handleError);
	}
}

function maxDayWidth(arrayobj)
{
	var tempmax = 0;
	for(var i=0; i<arrayobj.length; i++)
	{
		tempmax = Math.max(tempmax, arrayobj[i].offsetWidth);
	}
	return tempmax;
}

function showMYMenu(event)
{
	var oParentMenu = $(event.relatedTarget).parents("div.selectedMY");
	var nParentMenu = $(event.currentTarget).parents("div.selectedMY");
	var nMenu = nParentMenu.find("div.MYPosition2");
	if(nMenu.length > 0)
	{
		if((oParentMenu.attr("id") != nParentMenu.attr("id")) && (event.currentTarget.className == "selectedMYInner"))
		{
			nMenu.stop(true,true);
			nMenu.delay("fast").slideDown();
		}
	}
}

function hideMYMenu(event)
{
	var oParentMenu = $(event.currentTarget).parents("div.selectedMY");
	var nParentMenu = $(event.relatedTarget).parents("div.selectedMY");
	if(oParentMenu.attr("id") != nParentMenu.attr("id"))
	{
		var oParentSubMenu = oParentMenu.find("div.MYPosition2");
		if(oParentSubMenu.length > 0)
		{
			if(oParentSubMenu.queue().length > 1)  //Try to account for the delay function on the queue (there may be other situations where length>1)
			{
				oParentSubMenu.stop(true,true);
			}
			oParentSubMenu.slideUp();
		}
	}
}

function showEvents()
{
	window.status="http://cpnaz.org/events.shtml";
	var eventsDivInner = document.getElementById("eventsDivInner");
	if(eventsDivInner.innerHTML != "")
	{
		$("#eventsDivInner").stop(true,true);
	}
	$("#eventsDivInner").html($(this).attr("value")).fadeIn("normal");
}

function hideEvents()
{
	window.status="";
	$("#eventsDivInner").fadeOut(100,clearText);
}

function clearText()
{
	var eventsDivInner = document.getElementById("eventsDivInner");
	eventsDivInner.innerHTML = "";
}
