﻿var lastMonthDay = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var weekDays = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
var monthNames = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var monthNos = new Array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12");
var postDate = 0;

// =======================
// New Version of Calendar

/**
 * Generate and display the calendar with specified year/month and the post to be marked.
 */
function dispCalendar(yearMonth, withPost) {

	var year = yearMonth.substring(0, 4);
	var month = yearMonth.substring(4);

	var calendar = document.getElementById("calendar");
	calendar.innerHTML = "";
	var header = createHeader(year, month, withPost);
	calendar.appendChild(header);
	var table = createTable(year, month, withPost);
	calendar.appendChild(table);
//	alert(calendar.innerHTML);
}

function createHeader(year, month, withPost) {

	var calTitle = monthNames[month - 1] + " " + year;
	var curArchiveIndex = getArchiveIndex(year + month);
	if (curArchiveIndex == -1 && year + month > archiveFiles[archiveFiles.length - 1][0]) {
		curArchiveIndex = archiveFiles.length;
	}

	var headerDiv = document.createElement("div");
	headerDiv.setAttribute("id", "cal-header");

	var a;
	// output prev month navigator;
	if (curArchiveIndex - 1 >= 0 && curArchiveIndex - 1 < archiveFiles.length) {
		var prevArchive = archiveFiles[curArchiveIndex - 1];
		if (prevArchive) {
			a = "<a href=\"JavaScript:void(0);\" title=\"" + getCalTitle(prevArchive[0]) + "\" onclick=\"dispCalendar('" + prevArchive[0] + "', '" + withPost + "');\">&laquo;</a> ";
			headerDiv.innerHTML = a;
		}
	}

	// output current month navigator;
	var curArchive;
	if (curArchiveIndex >= 0 && curArchiveIndex < archiveFiles.length) {
		var archive = archiveFiles[curArchiveIndex];
		curArchive = "<a href=\"" + archive[1] + "\" title=\"" + calTitle + "\">" + calTitle + "</a>";
	}
	else {
		curArchive = "<span>" + calTitle + "</span>";
	}
	headerDiv.innerHTML += curArchive;

	// output next month navigator;
	if (curArchiveIndex + 1 < archiveFiles.length) {
		var nextArchive = archiveFiles[curArchiveIndex + 1];
		if (nextArchive) {
			a = " <a href=\"JavaScript:void(0);\" title=\"" + getCalTitle(nextArchive[0]) + "\" onclick=\"dispCalendar('" + nextArchive[0] + "', '" + withPost + "');\">&raquo;</a> ";
			headerDiv.innerHTML += a;
		}
	}

	return headerDiv;
}

function createTable(year, month, withPost) {

	var table = document.createElement("table");
	table.width = "100%";
	table.cellPadding = "3";
	table.cellSpacing = "0";
	table.border = "0";
	table.className = "calendar";

	// table header
	var headerRow = document.createElement("tr");
	var tHead = document.createElement("thead");
	table.appendChild(tHead);
	tHead.appendChild(headerRow);
	for (iWeekDay = 0; iWeekDay < weekDays.length; iWeekDay++) {
		var th = document.createElement("th");
		headerRow.appendChild(th);
		th.appendChild(document.createTextNode(weekDays[iWeekDay]));
	}

	var tBody = document.createElement("tbody");
	table.appendChild(tBody);

	var date = new Date();
	date.setYear(year);
	date.setMonth(month - 1);
	date.setDate(1);
	var firstWeekDay = date.getDay();

	if (year % 4 == 0) {
		lastMonthDay[1] = 29;
	}

	var row = document.createElement("tr");
	tBody.appendChild(row);

	var td;
	for (j = 0; j < firstWeekDay; j++) {
		td = document.createElement("td");
		td.innerHTML = "&nbsp;";
		row.appendChild(td);
	}
	

	var postDate = withPost ? withPost.substring(3, 5) : 0;
	var postYearMonth = withPost ? withPost.substring(6, 10) + "" + withPost.substring(0, 2) : "";

	for (j = 1; j <= lastMonthDay[date.getMonth()]; j++) {
		date.setDate(j);

		td = document.createElement("td");
		row.appendChild(td);

		if (isToday(date)) {
			td.className = "today";
		}
		else if (j == postDate && postYearMonth == year + "" + month) {
			td.className = "cur";
		}

		td.innerHTML = getDayContentWithPost(year + "" + month, j);

		if (date.getDay() == 6) {
			row = document.createElement("tr");
			tBody.appendChild(row);
		}
	}

	
	return table;
}


function getDayContentWithPost(yearMonth, date) {
	var post = getPostFromCollection(yearMonth, j);
	if (post && j != postDate) {
		return "<a href=\"" + post[3] + "\" title=\"" + post[2] + "\">" + j + "</a>";
	}
	else {
		return j;
	}
}

/**
 * Generate and display the calendar with specified year/month and the post to be marked.
 */
function getYearMonthFromArchiveFileName(archiveFileName) {
	return archiveFileName.substring(0, 7).replace('_', '');
}

function getYearMonthFromPostDate(postTime) {
//	return 
}

// =======================

function genCalendar(yearMonth) {

	var year = yearMonth.substring(0, 4);
	var month = yearMonth.substring(4);

	document.write("<div id=\"calendar\">");
	genCalendarTitle(year, month);
	genCalendarHeader();

	var date = new Date();
	date.setYear(year);
	date.setMonth(month - 1);
	date.setDate(1);
	var firstWeekDay = date.getDay();

	document.writeln("<tr>");
	for (j = 0; j < firstWeekDay; j++) {
		document.writeln("<td>&nbsp;</td>");
	}

	if (year % 4 == 0) {
		lastMonthDay[1] = 29;
	}

	for (j = 1; j <= lastMonthDay[date.getMonth()]; j++) {
		date.setDate(j);

		if (isToday(date)) {
			document.write("<td class=\"today\">");
		}
		else if (j == postDate) {
			document.write("<td class=\"cur\">");
		}
		else {
			document.write("<td>");
		}
		genDayWithPost(yearMonth, j);
		document.writeln("</td>");

		if (date.getDay() == 6) {
			document.writeln("</tr>");
			document.writeln("<tr>");
		}
	}

	document.writeln("</tr>");
	document.writeln("</table>");
	document.writeln("</div>");
}

function isToday(date) {
	var today = new Date();
	if (date.getFullYear() != today.getFullYear()) {
		return false;
	}
	if (date.getMonth() != today.getMonth()) {
		return false;
	}
	if (date.getDate() != today.getDate()) {
		return false;
	}
	return true;
}

function genCalendarTitle(year, month) {

	var calTitle = monthNames[month - 1] + " " + year;
	var curArchiveIndex = getArchiveIndex(year + month);
	if (curArchiveIndex == -1 && year + month > archiveFiles[archiveFiles.length - 1][0]) {
		curArchiveIndex = archiveFiles.length;
	}

	document.write("<div id=\"cal-header\">");

	// output prev month navigator;
	if (curArchiveIndex - 1 > -1 && curArchiveIndex - 1 < archiveFiles.length) {
		var prevArchive = archiveFiles[curArchiveIndex - 1];
		if (prevArchive) {
			document.write("<a href=\"" + prevArchive[1] + "\" title=\"" + getCalTitle(prevArchive[0]) + "\">&laquo;</a> ");
		}
	}

	// output current month navigator;
	if (curArchiveIndex > -1 && curArchiveIndex < archiveFiles.length) {
		var archive = archiveFiles[curArchiveIndex];
		document.write("<a href=\"" + archive[1] + "\" title=\"" + calTitle + "\">" + calTitle + "</a>");
	}
	else {
		document.write(calTitle);
	}

	// output next month navigator;
	if (curArchiveIndex + 1 < archiveFiles.length) {
		var nextArchive = archiveFiles[curArchiveIndex + 1];
		if (nextArchive) {
			document.write(" <a href=\"" + nextArchive[1] + "\" title=\"" + getCalTitle(nextArchive[0]) + "\">&raquo;</a> ");
		}
	}

	
	document.writeln("</div>");
}

function getCalTitle(yearMonth) {

	var yearStr = yearMonth.substring(0, 4);
	var monthStr = yearMonth.substring(4);
	var title = monthNames[monthStr - 1] + " " + yearStr;
	return title;
}

function genCalendarHeader() {
	document.writeln("<table width=\"100%\" cellpadding=\"3\" cellspacing=\"0\" border=\"0\" class=\"calendar\">");
	document.writeln("<tr>");
	for (iWeekDay = 0; iWeekDay < weekDays.length; iWeekDay++) {
		document.writeln("<th>" + weekDays[iWeekDay] + "</th>");
	}
	document.writeln("</tr>");
}

function genDayWithPost(yearMonth, date) {
	var post = getPostFromCollection(yearMonth, j);
	if (post && j != postDate) {
		document.writeln("<a href=\"" + post[3] + "\" title=\"" + post[2] + "\">" + j + "</a>");
	}
	else {
		document.writeln(j);
	}
}

function getPostFromCollection(month, date) {

	if (date < 10) {
		date = '0' + date;
	}

	for (i = 0; i < posts.length; i++) {
		if (posts[i][0] == month) {
			if (posts[i][1] == date) {
				return posts[i];
			}
		}
	}

	return false;
}

function getArchiveIndex(yearMonth) {
	for (k = 0; k < archiveFiles.length; k++) {
		if (archiveFiles[k][0] == yearMonth) {
			return k;
		}
	}

	return -1;
}