var months = ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"];
var entryList, entryM = {};

function updateCalData(entries, current) {
	var entriesM = [];
	for (var i in entries) {
		if (i > 0)
			entriesM[entriesM.length] = Math.floor(i/100);
	} 
	entriesM.sort(function(a, b) { return a-b; });

	for (var i = 0; i < entriesM.length; ++i) {
		if (i > 0) {
			if (entryM[entriesM[i]] == entryM[entriesM[i-1]]) {
				entryM[entriesM[i]][1] = (i < entriesM.length-1 ? entriesM[i+1] : null);
				continue;
			}
		}
		entryM[entriesM[i]] = [(i > 0 ? entriesM[i-1] : null), (i < entriesM.length-1 ? entriesM[i+1] : null)];
	}

	entryList = entries;

	if (!current[0]) {
		current[0] = (new Date()).getFullYear();
		current[1] = ((new Date()).getMonth()+1);
	}
	
	var now = 100*current[0]+10+current[1];
	if (!entryM[now]) {
		var nextest = 999999, prevest = 0;
		for (var i in entryM) {
			if (i > prevest && i < now)
				prevest = i;
			if (i < nextest && i > now)
				nextest = i;
		}
		entryM[now] = [prevest, (nextest == 999999 ? 0 : nextest)];
		if (prevest != 0)
			entryM[prevest][1] = now;
		if (nextest != 999999)
			entryM[nextest][0] = now;
	}
	
	calendar(current[0], current[1], current[2]);
}

function getLink(year, month, next) {
	var now = 100*year+10+month;
	if (entryM[now]) {
		var linkTo = entryM[now][next ? 1 : 0];
	
		var link = "&nbsp;";
		if (linkTo) {
			year = Math.floor(linkTo/100);
			month = linkTo-100*Math.floor(linkTo/100)-10;
			link = "<span onclick=\"calendar(" + year + "," + month + ")\">" + (next ? "&lt;" : "&gt;") + "</span>";
		}

		return link;
	} else
		return "";
}

function prevLink(year, month) {
	return getLink(year, month, false);
}

function nextLink(year, month) {
	return getLink(year, month, true);
}

function calendar(year, month, day) {
	if (year == 0) {
		for (var i in entryM) {
			newYear = Math.floor(i/100);
			newMonth = i-100*newYear-10;
			if ((newYear > year) || (newYear == year && newMonth > month)) {
				year = newYear;
				month = newMonth;
			}
		}
	}
	if (year == 0) {
		year = new Date();
		month = year.getMonth()+1;
		year = year.getFullYear();
	}
	var now = new Date(year, month-1, 0, 1, 0);
	var end = new Date(year, month, 0, 1, 0);

	var cal = "<table cellspacing=\"0\">" +
		  "<tr><th>" + nextLink(year, month) + "</th><th colspan=\"5\">" + months[month-1] + " " + year + "<th>" + prevLink(year, month) + "</th></tr>" +
		  "<tr><th>א</th><th>ב</th><th>ג</th><th>ד</th><th>ה</th><th>ו</th><th>ש</th></tr>";
	if (now.getDay() < 6) {
		cal += "<tr>";
		for (var i = 0; i <= now.getDay(); ++i)
			cal += "<td></td>";
	}
	while (now < end) {
		if (now.getDay() == 6)
			cal += "<tr>";
		now.setSeconds(now.getSeconds() + 86400);
		cal += "<td" + (now.getDate() == day ? " class=\"today\"" : "") + ">";

		if (entryList[10000*now.getFullYear() + 100*(11+now.getMonth()) + (10+now.getDate())])
			cal += "<a href=\"?y=" + now.getFullYear() + "&m=" + (now.getMonth()+1) + "&d=" + now.getDate() + "\">" + now.getDate() + "</a>";
		else
			cal += now.getDate();
		cal += "</td>";
		if (now.getDay() == 6)
			cal += "</tr>";
	}
	if (now.getDay() < 6) {
		for (var i = 6; i >= now.getDay(); --i)
			cal += "<td></td>";
		cal += "</tr>";
	}
	cal += "</table>";
	
	document.getElementById("calendar").innerHTML = cal;
}

