var full_month = {
	0  : "January",
	1  : "February",
	2  : "March",
	3  : "April",
	4  : "May",
	5  : "June",
	6  : "July",
	7  : "August",
	8  : "September",
	9  : "October",
	10 : "November",
	11 : "December"
};
var short_month = {
	0  : "Jan",
	1  : "Feb",
	2  : "Mar",
	3  : "Apr",
	4  : "May",
	5  : "Jun",
	6  : "Jul",
	7  : "Aug",
	8  : "Sep",
	9  : "Oct",
	10 : "Nov",
	11 : "Dec"
};
var full_weekday = {
	0 : "Sunday",
	1 : "Monday",
	2 : "Tuesday",
	3 : "Wednesday",
	4 : "Thursday",
	5 : "Friday",
	6 : "Saturday"
};
var short_weekday = {
	0 : "S",
	1 : "M",
	2 : "T",
	3 : "W",
	4 : "T",
	5 : "F",
	6 : "S"
};

function decrement_date(date)
{
	var d = new Date(date);
	d.setDate(d.getDate()-1);
	return d;
}

function increment_date(date)
{
	var d = new Date(date);
	d.setDate(d.getDate()+1);
	return d;
}

function make_calendar(start, year, month)
{
	var r = "";

	var now = new Date();
	if (year == null)
		year = now.getFullYear();
	if (month == null)
		month = now.getMonth();
	if (start == null)
		start = 0;

	var date = new Date(year, month, 1, 1, 5, 0);

	r = r + "<table id='wp-calendar'>\n";
    r = r + "<caption>" + full_month[month] + " " + year + "</caption>\n";
	r = r + "<thead>\n<tr>";

	var prev = decrement_date(date);

	while (date.getDay() != start) {
		date = decrement_date(date);
	}

	var i = start;
	while (1) {
		r = r + "<th abbr='" + full_weekday[i] + "' scope='col' title='";
		r = r + full_weekday[i] + "'>" + short_weekday[i] + "</th>\n";
		i++; i %= 7;
		if (i == start)
			break;
	}

	r = r + "</tr>\n</thead>\n<tbody>\n";

	var w = "<tr>\n";
	while (1) {
		if (date.getFullYear() == year && date.getMonth() == month) {
			if (date.getFullYear() == now.getFullYear() &&
				date.getMonth() == now.getMonth() &&
				date.getDate() == now.getDate())
				w = w + "<td id='today'>" + date.getDate() + "</td>";
			else 
				w = w + "<td>" + date.getDate() + "</td>";
		} else
			w = w + "<td>&nbsp;</td>";
		if (date.getDay() == (start + 6) % 7) {
			r = r + w + "\n</tr>\n";
			w = "";
			if (date.getFullYear() > year || date.getMonth() > month)
				break;
		}
		date = increment_date(date);
		if (date.getDay() == start && (date.getFullYear() > year || date.getMonth() > month))
			break;
	}
	r = r + "</tbody>\n";

	var next = increment_date(date);
	var prev_month = prev.getMonth();
	var prev_year  = prev.getFullYear();
	var next_month = next.getMonth();
	var next_year  = next.getFullYear();

	r = r + "<tfoot>\n<tr>\n";
	r = r + "<td abbr='" + full_month[prev_month] +
		"' colspan='3' id='prev'><a href='javascript:generate_calendar(" +
		start + "," + prev_year + "," + prev_month + ");'>&laquo; " +
		short_month[prev_month] + "</a></td>\n";
	r = r + "<td class='pad'>&nbsp;</td>\n";
	r = r + "<td abbr='" + full_month[next_month] +
		"' colspan='3' id='next'><a href='javascript:generate_calendar(" +
		start + "," + next_year + "," + next_month + ");'>" +
		short_month[next_month] + " &raquo;</a></td>\n";
	r = r + "</tr>\n</tfoot>\n</table>\n";

	return r;
}

function generate_calendar(start,year,month)
{
	var cal = document.getElementById("calendar");
	if (cal)
		cal.innerHTML = make_calendar(start,year,month);
}
