// JavaScript Document

function jump_to_today() {
	var today = new Date();
	current_month = today.getMonth();
	current_year = today.getFullYear();
	calendar(events,today.getFullYear(),today.getMonth());
}

function next_month() {
	current_month+=1;
	if(current_month == 12) {
		current_month = 0;
		current_year+=1;
	}
	calendar(events,current_year,current_month);
}

function previous_month() {
	current_month-=1;
	if(current_month == -1) {
		current_month = 11;
		current_year-=1;
	}
	calendar(events,current_year,current_month);
}

function calendar(events,current_year,current_month) {	
	var calendar = "";
	calendar += write_header(current_month,current_year);
	calendar += write_day_names();
	calendar += write_days(events,current_year,current_month);
	document.getElementById("month").innerHTML = calendar;
}

function write_header(current_month,current_year) {
	var month = "";
	var month_array = new Array("January", "February", "March", "April", "May", "June","July", 
								"August", "September", "October", "November", "December");
	month += "<table width=\"100%\" cellpadding=\"5\" cellspacing=\"0\" class=\"calendar\">";
	month += "<tr class=\"month_name\">";
	month += "<th style=\"text-align: left;\"><a href=\"javascript:previous_month();\">&lt;&lt; Previous Month</a></th>";
	month += "<th colspan=\"5\" style=\"font-size: 13px; text-align: center; border-left: 0;\"><strong>" + month_array[current_month] + " " + current_year + "</strong></th>";
	month += "<th style=\"text-align: right; border-left: 0;\"><a href=\"javascript:next_month();\">Next Month &gt;&gt;</a></th>";
	month += "</tr>";
	return month;
}

function write_day_names() {
	var days = "";
	var day_name = new Array("Sun","Mon","Tues","Wed","Thu","Fri","Sat");
	days += "<tr class=\"day_name\">";
	for(var i=0;i<day_name.length;i++)
		days += "<th width=\"14%\">" + day_name[i] + "</th>";
	days += "</tr>";
	return days;
}

function write_days(events,current_year,current_month) {
	var weeks = ""; 
	var event_title = ""; //the title of the event
	var event_date_array = new Array(); //event date split by "-"
	var event_date_compare = ""; //event date with leading zeros removed for comparison
	var cell_color = "";
	var current_day = 1;
	
	var today = new Date(); //today's date
	var todays_date = today.getFullYear() + "-" + today.getMonth() + "-" + today.getDate();
	var year = current_year; //current year
	var month_array = new Array("January", "February", "March", "April", "May", "June","July", 
								"August", "September", "October", "November", "December");
	today = new Date(month_array[current_month] + " 1, " + current_year);
	var first_day_of_month = today.getDay(); //find the day of the week of the first day
	
	//find the number of weeks after the first week
	var num_of_weeks = 4;
	if((first_day_of_month == 6 && (days_in_month(year,current_month) == 30 || days_in_month(year,current_month) == 31)) || (first_day_of_month == 5 && days_in_month(year,current_month) == 31))
		num_of_weeks = 5;
	else if(first_day_of_month == 0 && days_in_month(year,current_month) == 28)
		num_of_weeks = 3;
		
	//start calendar week rows
	weeks += "<tr valign=\"top\" height=\"85\">";
	
	//write blank cells at beginning of calendar
	for(var k=0;k<first_day_of_month;k++)
		weeks += "<td>&nbsp;</td>";
		
	//write remaining dates in top row
	for(var j=k;j<7;j++) {
		for (event_date in events) { 
			//delete possible leading zeros from dates in array to compare to calendar date 
			event_date_array = event_date.split("-");
			if(event_date_array[0].indexOf(0) == 0)
				event_date_array[0] = event_date_array[0].replace("0","");
			if(event_date_array[1].indexOf(0) == 0)
				event_date_array[1] = event_date_array[1].replace("0","");
			event_date_compare = event_date_array[0] + "-" + event_date_array[1] + "-" + event_date_array[2];
			if(event_date_compare == "" + (current_month+1) + "-" + current_day + "-" + year)
				event_title = events[event_date];
		}
		
		if(todays_date == year + "-" + current_month + "-" + current_day)
			cell_color = " class=\"current_day\"";
	
		weeks += "<td" + cell_color + ">" + current_day + "<br /><span class=\"event_text\">" + event_title + "</span></td>";
		event_title = "";
		cell_color = "";
		current_day++;
	}
	weeks += "</tr><tr valign=\"top\" height=\"85\">";

	//write remainder of table
	for(var z=0;z<num_of_weeks;z++) {
		for(var y=0;y<7;y++) {
			if(current_day <= days_in_month(year,current_month)) {
				for (event_date in events) { 
					//delete possible leading zeros from dates in array to compare to calendar date 
					event_date_array = event_date.split("-");
					if(event_date_array[0].indexOf(0) == 0)
						event_date_array[0] = event_date_array[0].replace("0","");
					if(event_date_array[1].indexOf(0) == 0)
						event_date_array[1] = event_date_array[1].replace("0","");
					event_date_compare = event_date_array[0] + "-" + event_date_array[1] + "-" + event_date_array[2];
					if(event_date_compare == "" + (current_month+1) + "-" + current_day + "-" + year)
						event_title = events[event_date];
				}
				
				if(todays_date == year + "-" + current_month + "-" + current_day)
					cell_color = " class=\"current_day\"";
			
				weeks += "<td" + cell_color + ">" + current_day + "<br /><span class=\"event_text\">" + event_title + "</span></td>";
				event_title = "";
				cell_color = "";
				current_day++;
			}
		}
		if(z < num_of_weeks-1)
			weeks += "</tr><tr valign=\"top\" height=\"85\">";
	}
	
	//write remaining blank cells at end of table
	today.setDate(days_in_month(year,current_month));
	var last_day_in_month = today.getDay();
	for(var l=last_day_in_month+1;l<7;l++)
		weeks += "<td>&nbsp;</td>";
		
	weeks += "</tr><tr class=\"month_name\"><th colspan=\"7\"><a href=\"javascript:jump_to_today();\">Today</a></th></table><br />";
	return weeks;
}

function days_in_month(year,month) {
	if(year%4 == 0 && (year%100 != 0 || year%400 == 0))
		var day_count = new Array(31,29,31,30,31,30,31,31,30,31,30,31);
	else
		var day_count = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

	return day_count[month];
}


