// This script and many more are available free online at
// The JavaScript Source!! http://javascript.internet.com
// Created by: Shaun Bailey | http://www.sbwebdevelopment.co.uk */
// set up variables
var monthsArray = new Array("Januari","Pebruari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember");
var daysArray = new Array("Minggu","Senin","Selasa","Rabu","Kamis","Jum'at","Sabtu");
var prevYears = 10;	// number of years before current date
var futureYears = 10;	// number of years after current date
var today = new Date();
var nowMonth = today.getMonth();
var nowYear = today.getFullYear();
var curMonth = nowMonth;
var curYear = nowYear;
var monthEvents;
today.setDate(1);	// set to first day of the month

var eventsArray = new Array();
// format: dd,mm,yyyy,"event","frequency (Annual/Monthly/Weekly)" - Delete frequency for once-time occurrences
eventsArray[0] = new newEvent(25,7,2000,"Ulang tahun FEDUs","Annual");
eventsArray[1] = new newEvent(24,3,2007,"Parent Class 1 Bekasi");
eventsArray[2] = new newEvent(31,3,2007,"Parent Class 1 Bekasi");
eventsArray[3] = new newEvent(6,4,2007,"Parent Class 2 Depok");
eventsArray[4] = new newEvent(7,4,2007,"Parent Class 2 Depok");
eventsArray[5] = new newEvent(21,4,2007,"Parent Class 3 Panasonic");
eventsArray[6] = new newEvent(28,4,2007,"Parent Class 3 Panasonic");
eventsArray[7] = new newEvent(29,4,2007,"Parent Class 4 Jakarta");
eventsArray[8] = new newEvent(5,5,2007,"Parent Class 4 Jakarta");
eventsArray[9] = new newEvent(30,6,2007,"Parent Class 5 Cikarang");
eventsArray[10] = new newEvent(7,7,2007,"Parent Class 5 Cikarang");
eventsArray[11] = new newEvent(12,8,2007,"Parent Class 6 Cikarang");
eventsArray[12] = new newEvent(19,8,2007,"Parent Class 6 Cikarang");
eventsArray[13] = new newEvent(1,9,2007,"Parent Class 7 Bekasi");
eventsArray[14] = new newEvent(2,9,2007,"Parent Class 7 Bekasi");
eventsArray[15] = new newEvent(11,11,2007,"Parent Class 8 Cikarang");
eventsArray[16] = new newEvent(18,11,2007,"Parent Class 8 Cikarang");
eventsArray[17] = new newEvent(2,12,2007,"Parent Class 9 Cikarang");
eventsArray[18] = new newEvent(9,12,2007,"Parent Class 9 Cikarang");
eventsArray[19] = new newEvent(9,9,2007,"Klub Lantika 5 : Tahukah Anak kita Keturunan Jenius?");
eventsArray[20] = new newEvent(5,8,2007,"Klub Lantika 4 : Nyebur ke sawah & Komunikasi dalam Keluarga");
eventsArray[21] = new newEvent(16,6,2007,"Klub Lantika 2 : 4 Tipe Anak & Pendampingan yang Tepat");
eventsArray[22] = new newEvent(6,5,2007,"Klub Lantika 1 : Kick off & ");
eventsArray[23] = new newEvent(9,11,2007,"Klub Lantika 7");
eventsArray[24] = new newEvent(29,9,2007,"Buka Puasa Bersama FEDUs & anak-anak kampung");
eventsArray[25] = new newEvent(19,9,2007,"[PENDING] Kunjungan PAUD FEDUs ke pabrik Sari Roti");
eventsArray[26] = new newEvent(26,9,2007,"[PENDING] Kunjungan Klub Lantika ke pabrik Sari Roti");
eventsArray[27] = new newEvent(26,9,2007,"[PENDING] Kunjungan Klub Lantika ke pabrik Sari Roti");
eventsArray[28] = new newEvent(17,8,2007,"Dirgahayu RI","Annual");
eventsArray[29] = new newEvent(7,10,2007,"Buka Puasa Bersama & Klub Lantika 6 :  Psikologi Anak");
eventsArray[30] = new newEvent(22,7,2007,"Klub Lantika 3 : No TV Day");
eventsArray[31] = new newEvent(17,2,2008,"Parent Class 8 Cikarang Hari-1");
eventsArray[32] = new newEvent(24,2,2008,"Parent Class 8 Cikarang Hari-2");
eventsArray[33] = new newEvent(2,3,2008,"Parent Class 9 Cikarang Hari-1");
eventsArray[34] = new newEvent(9,3,2008,"Parent Class 9 Cikarang Hari-2");
eventsArray[35] = new newEvent(6,4,2008,"Parent Class 10 Cikarang Hari-1");
eventsArray[36] = new newEvent(13,4,2008,"Parent Class 10 Cikarang Hari-2");
eventsArray[37] = new newEvent(4,5,2008,"Parent Class 11 Cikarang Hari-1");
eventsArray[38] = new newEvent(11,5,2008,"Parent Class 11 Cikarang Hari-2");
eventsArray[39] = new newEvent(8,6,2008,"Parent Class 12 Cikarang Hari-1");
eventsArray[40] = new newEvent(15,6,2008,"Parent Class 12 Cikarang Hari-2");
eventsArray[41] = new newEvent(5,7,2008,"Parent Class 13 Cikarang Hari-1");
eventsArray[42] = new newEvent(6,7,2008,"Parent Class 13 Cikarang Hari-2");
eventsArray[43] = new newEvent(3,8,2008,"Parent Class 14 Cikarang Hari-1");
eventsArray[44] = new newEvent(10,8,2008,"Parent Class 14 Cikarang Hari-2");
eventsArray[45] = new newEvent(2,11,2008,"Parent Class 15 Cikarang Hari-1");
eventsArray[46] = new newEvent(9,11,2008,"Parent Class 15 Cikarang Hari-2");
eventsArray[47] = new newEvent(7,12,2008,"Parent Class 16 Cikarang Hari-1");
eventsArray[48] = new newEvent(14,12,2008,"Parent Class 16 Cikarang Hari-2");
eventsArray[49] = new newEvent(5,7,2008,"Parent Class dgn Kak-Seto Hari-1");
eventsArray[50] = new newEvent(6,7,2008,"Parent Class dgn Kak-Seto Hari-2");
eventsArray[51] = new newEvent(27,1,2008,"Orasi Keluarga Digital");

// create event object
function newEvent(day, month, year, memo, occurrence) {
	this.day = day;
	this.month = month;
	this.year = year;
	this.memo = memo;
	this.occurrence = occurrence;
	this.createMonth = createMonth;
}

// creates calendar for the current month
function createMonth() {
	var startDay = today.getDay();	// first day of the month
	var monLength = monthLength();	// number of days in month
	var lastDay = startDay+monLength-1;	// last day of the month
	monthEvents = new Array();	// array to hold events for current month
	var fullContent;

	// search through events for current month
	for(i=0;i<eventsArray.length;i++) {
		if(eventsArray[i].month == (curMonth+1) && (eventsArray[i].year == curYear || eventsArray[i].occurrence == "Annual")) {
			monthEvents[monthEvents.length] = i;
		}
		else if(eventsArray[i].occurrence == "Monthly" || eventsArray[i].occurrence == "Weekly") {
			monthEvents[monthEvents.length] = i;
		}
	}

var content = "<table class=\"calendar\" cellspacing=\"0\">\n";
	// create headers
	content += "<tr>\n<th>\n<th>\n<th>\n";
	content += "<a class=\"button\" href=\"javascript:void(prevYr())\"><<</a>";
	content += " " + " " + "<a class=\"button\" href=\"javascript:void(prev())\"><</a>";
	content += "<th colspan=\"1\"><a class=\"button\" href=\"javascript:void(back2curMonth())\">" + monthsArray[curMonth] + " " + curYear + "</a>" + "  ";
	content += "<th>\n<a class=\"button\" href=\"javascript:void(next())\">></a>";
	content += " " + " " + "<a class=\"button\" href=\"javascript:void(nextYr())\">>></a>";

	content += "</th>\n<th>\n<th>\n</tr><tr>\n";

	for(i=0;i<7;i++) {
		content += "<th>" + daysArray[i] + "</th>\n";
	}
	content += "</tr>\n<tr>\n";

	// create main content of calendar
	for(i=0;i<42;i++) {
		var occ = "";
		var occContent = "";
		var curDay = i+1-startDay;
		// check day against months events
		for(j=0;j<monthEvents.length;j++) {
				var occDate = new Date();
				occDate.setDate(eventsArray[monthEvents[j]].day);
				occDate.setMonth(eventsArray[monthEvents[j]].month);
				occDate.setFullYear(eventsArray[monthEvents[j]].year);

				if(curDay == eventsArray[monthEvents[j]].day && eventsArray[monthEvents[j]].occurrence != "Weekly") {	// deal with day, monthly and annual events
					occ = " class=\"occassion\"";
					fullContent = eventsArray[monthEvents[j]].memo;
					if(eventsArray[monthEvents[j]].memo.length > 14) {
						occContent = fullContent.substr(0,13) + "...";
						break;
					}
					else {
						occContent = fullContent;
						break;
					}
				}
				else if(occDate.getDate() == (i%7) && eventsArray[monthEvents[j]].occurrence == "Weekly") {	// deal with weekly events
					occ = " class=\"occassion\"";
						fullContent = eventsArray[monthEvents[j]].memo;
					if(eventsArray[monthEvents[j]].memo.length > 14) {
						occContent = fullContent.substr(0,13) + "...";
						break;
					}
					else {
						occContent = fullContent;
						break;
					}
				}
		}
		if(i>lastDay && i==35) {	// do not show last row if not needed
			break;
		}
		if(i<startDay || i>lastDay) {	// show blank cells before and after month
			content += "<td class=\"blank\"> </td>\n";
		}
		else {
			if(!(i%7) || !((i+1)%7) ) {	// get days of the weekend
				if(!(i%7)&& i>0) {
					content += "</tr>\n<tr>\n";
				}
				content += "<td" + occ + "><span class=\"weekend\">"+curDay+"</span><br /><a href=\"javascript:void(alert('"+fullContent+"'));s\">"+occContent+"</a></td>\n";
			}
			else {
				content += "<td" + occ + ">"+curDay+"<br /><a href=\"javascript:void(alert('"+fullContent+"'));\">"+occContent+"</a></td>\n";
			}
		}
	}
	content += "</tr></table>\n";

	return content;
}

// get length of month
function monthLength() {
	monLength = 31;
	if(curMonth == 3 || curMonth == 5 || curMonth == 8 || curMonth == 10) monLength = 30;
	if(curMonth == 1) {
		if(curYear%4) {
			monLength = 28;
		}
		else {
			monLength = 29;
		}
	}
	return monLength;
}

function droplists() {
	content = "<form name=\"calNav\" method=\"post\" action=\"\">\n";
	content += "<select name=\"month\">\n";
	for(i=0;i<12;i++) {
		content += "<option value=\""+i +"\"";
		if(i == curMonth) {
			content += " selected=\"selected\"";
		}
		content += ">" + monthsArray[i] + "</option>\n";
	}
	content += "</select> <select name=\"year\">\n";
	for(i=(nowYear-prevYears);i<=(nowYear+futureYears);i++) {
		content += "<option value=\""+i +"\"";
		if(i == curYear) {
			content += " selected=\"selected\"";
		}
		content += ">" + i + "</option>\n";
	}
	content += "</select>\n<input type=\"button\" value=\"Show\" onclick=\"newMonth()\" />\n";
	content += "</form>\n";
	return content;
}

// goto selected month & year
function newMonth() {
	var mon = document.calNav.month.selectedIndex;
	curMonth = parseInt(document.calNav.month.options[mon].value);
	var yr = document.calNav.year.selectedIndex;
	curYear = parseInt(document.calNav.year.options[yr].value);
	today.setMonth(curMonth);
	today.setFullYear(curYear);
	document.getElementById("showCal").innerHTML = droplists() + createMonth();
}

// goto current month & year
function back2curMonth() {
	curMonth = nowMonth;
	curYear = nowYear;
	today.setMonth(curMonth);
	today.setFullYear(curYear);
	document.getElementById("showCal").innerHTML = droplists() + createMonth();
}

// goto previous year
function prevYr() {
	curYear -= 1;
	if(curYear<(nowYear-prevYears)) {
		curYear=(nowYear-prevYears);
	}
	today.setMonth(curMonth);
	today.setFullYear(curYear);
	document.getElementById("showCal").innerHTML = droplists() + createMonth();
}

// goto next year
function nextYr() {
        curYear += 1;
	if(curYear>(nowYear+futureYears)) {
		curYear=(nowYear+futureYears);
	}
	today.setMonth(curMonth);
	today.setFullYear(curYear);
	document.getElementById("showCal").innerHTML = droplists() + createMonth();
}

// goto previous month
function prev() {
	curMonth -= 1;
	if(curMonth<0) {
		curMonth=11;
		if(curYear>(nowYear-prevYears)) {
			curYear -= 1;
		}
	}
	today.setMonth(curMonth);
	today.setFullYear(curYear);
	document.getElementById("showCal").innerHTML = droplists() + createMonth();
}

// goto next month
function next() {
	curMonth += 1;
	if(curMonth>11) {
		curMonth=0;
		if(curYear<(nowYear+futureYears)) {
			curYear += 1;
		}
	}
	today.setMonth(curMonth);
	today.setFullYear(curYear);
	document.getElementById("showCal").innerHTML = droplists() + createMonth();
}
