//////////////////////////////////////////////////////////////////////////////////////////////////
//																								//
//	SJACPS Calendar v2.1																		//
//	Copyright (c) St. Joseph's Anglo-Chinese Primary School  									//
//																								//
//////////////////////////////////////////////////////////////////////////////////////////////////

var Today = new Date();
var Month = Today.getMonth()+1;
var Day = Today.getDay();
var DayN = Today.getDate();
var Year = Today.getFullYear();
var MonthDays = new Array("null", 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var MonthName = new Array();
	MonthName[0] = new Array("null","January","February","March","April","May","June","July","August","September","October","November","December");
	MonthName[1] = new Array("null","一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月");
var Week = new Array();
	Week[0] = new Array("SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT");
	Week[1] = new Array("日", "一", "二", "三", "四", "五", "六");


function VaildRange(VRYY, VRMM) {
	// ● 檢查年份(VRYY)及月份(VRMM)是否位於正確範圍內, 回傳true, 否則回傳false
		if (
			CalLimit &&
			((VRYY == CalStartYear && VRMM >= CalStartMonth && VRMM <= 12) ||
			(VRYY > CalStartYear && VRYY < CalEndYear) ||
			(VRYY == CalEndYear && VRMM <= CalEndMonth && VRMM >= 1))
		) {
			return true;
		}
		return false;
}

function DrawCal(DCYY,DCMM) {
	
	//--------------------------------------------------------------------------------------------------------------------------------------------------------
	// 月曆部份 - 設定
	//--------------------------------------------------------------------------------------------------------------------------------------------------------
	var DayCount = 1;
	var WeekCount = 0;
	ContentCal = new String();
	
	// ● 假如年份(DCYY)未被定義, 根據當前日期設定年份(DCYY)及月份(DCMM)
		if (DCYY == null) {
			DCYY = Year;
			DCMM = Month;
		}
	
	// ● 檢查是否閏年, 調整該月日數
		var ThisMonthDays;
		if (((DCYY%4==0 && DCYY%100!=0) || DCYY%400==0) && DCMM==2) { ThisMonthDays = 29; }
		else { ThisMonthDays = MonthDays[DCMM]; }
	
	// ● 定義 第一天(StartDay) 位置
		var SetDay = new Date(MonthName[0][DCMM]+" 1, "+DCYY);
		var StartDay = SetDay.getDay();
	
	// ● 根據設定檔計算月曆闊度(CalWidth)
		var CalWidth = (7 * CalColSz) + (8 * CalBdrSz);
	
	// ● 定義月份選擇工具所需變數
		var PrevYY, PrevMM, NextYY, NextMM;
		if (DCMM == 1) {
			PrevYY = DCYY-1;
			PrevMM = 12;
			NextYY = DCYY;
			NextMM = 2;
		}
		else if (DCMM == 12) {
			PrevYY = DCYY;
			PrevMM = 11;
			NextYY = DCYY+1;
			NextMM = 1;
		}
		else {
			PrevYY = DCYY;
			PrevMM = DCMM-1;
			NextYY = DCYY;
			NextMM = DCMM+1;
		}
		
	//--------------------------------------------------------------------------------------------------------------------------------------------------------
	// 月曆部份 - 標題列
	//--------------------------------------------------------------------------------------------------------------------------------------------------------
	
	ContentCal += "<table cellspacing='0' cellpadding='0' border='0' width='"+CalWidth+"'>";
	ContentCal += "<tr height='"+HeaderHeight+"'>";
	ContentCal += "<td width='50' align='left' valign='bottom' class='HeaderYear'>"+DCYY+"</td>";
	ContentCal += "<td align='right'>";
	
	// ●【開始】根據設定檔設定月份選擇工具(左)
		if (ShowSelector) {
			if (VaildRange(PrevYY, PrevMM)) { ContentCal += "<span class='HeaderArrow' onclick='DrawCal("+PrevYY+","+PrevMM+")' style='cursor:hand'><<</span>"; }
			else { ContentCal += "<span class='HeaderArrow_nul' style='cursor:default'><<</span>"; }
		}
		else {
			ContentCal += "&nbsp;";
		}
	// ◎【結束】根據設定檔設定月份選擇工具(左)
	
	ContentCal += "</td>";
	ContentCal += "<td width='150' align='center' class='HeaderMonth'>"+MonthName[CalLanguage][DCMM]+"</td>";
	ContentCal += "<td align='left'>";
	
	// ●【開始】根據設定檔設定月份選擇工具(右)
		if (ShowSelector) {
			if (VaildRange(NextYY, NextMM)) { ContentCal += "<span class='HeaderArrow' onclick='DrawCal("+NextYY+","+NextMM+")' style='cursor:hand'>>></span>"; }
			else { ContentCal += "<span class='HeaderArrow_nul' style='cursor:default'>>></span>"; }
		}
		else {
			ContentCal += "&nbsp;";
		}
	// ◎【結束】根據設定檔設定月份選擇工具(右)
	
	ContentCal += "</td>";
	ContentCal += "<td width='50'>&nbsp;</td>";
	ContentCal += "</tr>";
	ContentCal += "</table>";
	
	//--------------------------------------------------------------------------------------------------------------------------------------------------------
	// 月曆部份 - 內容
	//--------------------------------------------------------------------------------------------------------------------------------------------------------
	ContentCal += "<table cellspacing='0' cellpadding='0' border='0' width='"+CalWidth+"'>";
	ContentCal += "<tr height='"+CalBdrSz+"'><td colspan='15' bgcolor='"+CalBdrColor+"'></td></tr>";
	
	// ●【開始】寫入月曆第一行資料
		ContentCal += "<tr height='"+CalFrRowSz+"'>";
		ContentCal += "<td width='"+CalBdrSz+"' bgcolor='"+CalBdrColor+"'></td>";
		for(i=0; i<7; i++) {
			var CalFrRowClass;
			// ● 檢查是否星期天, 定義格式(CalSPRowClass)
				if (i==0) { CalFrRowClass = "CalFR_PH"; } 
				else { CalFrRowClass = "CalFR_NR"; }
			// ● 寫入日期方格, 套用格式(CalSPRowClass)
				ContentCal += "<td width='"+CalColSz+"' align='center' class='"+CalFrRowClass+"'>"+Week[CalLanguage][i]+"</td>";
				ContentCal += "<td width='"+CalBdrSz+"' bgcolor='"+CalBdrColor+"'></td>";
		}
		ContentCal += "</tr>";
	// ◎【結束】寫入月曆第一行資料
	
	ContentCal += "<tr height='"+CalBdrSz+"'><td colspan='15' bgcolor='"+CalBdrColor+"'></td></tr>";
	
	ContentCal += "<tr height='"+CalRowSz+"'>";
	ContentCal += "<td width='"+CalBdrSz+"' bgcolor='"+CalBdrColor+"'></td>";
	
	// ●【開始】重覆寫入開始空白方格至該月第一天(StartDay)為止
		for(i=0; i<StartDay; i++) {
			var CalSPRowClass;
			// ● 檢查是否星期天, 定義格式(CalSPRowClass)
				if (WeekCount==0) { CalSPRowClass = "Class_PH_Cal"; } 
				else { CalSPRowClass = "Class_NR_Cal"; }
				
			// ● 寫入日期方格, 套用格式, 累加(WeekCount)值
				ContentCal += "<td width='"+CalColSz+"' align='center' class='"+CalSPRowClass+"'>&nbsp;</td>";
				ContentCal += "<td width='"+CalBdrSz+"' bgcolor='"+CalBdrColor+"'></td>";
				WeekCount++;
		}
	// ◎【結束】重覆寫入開始空白方格至該月第一天(StartDay)為止
	
	// ●【開始】重覆寫入日期方格至該月最後一天(ThisMonthDays)為止
		while (DayCount<=ThisMonthDays) {
			var CalDayClass = null;
			var CalDayIcon = "";
			
			// ● 檢查 EventList, 定義格式(CalSPRowClass)及圖示(CalDayIcon)
				for (i=0; i<EventList.length; i++) {
					if (EventList[i][1] == DCYY && EventList[i][2] == DCMM && EventList[i][3] == DayCount && EventList[i][11]) {
						CalDayClass = EventList[i][8]+"_Cal";
						if (EventList[i][10] != null) { CalDayIcon = eval(EventList[i][10]); }
					}
				}
			
			// ● 檢查是否星期天, 定義格式(CalSPRowClass)
				if (WeekCount==0) {	CalDayClass = "Class_PH_Cal"; } 
			
			// ● 假如格式(CalSPRowClass)未被定義, 使用預設格式值(Class_NR)
				if (CalDayClass==null) { CalDayClass = "Class_NR_Cal"; }
				
			// ● 寫入日期方格, 套用格式(CalSPRowClass)及圖示(CalDayIcon), 累加(WeekCount)值
				ContentCal += "<td width='"+CalColSz+"' align='center' class='"+CalDayClass+"'>";
				// ● 檢查該天是否與今天日期相同, 如是者加框
					if (Year == DCYY && Month == DCMM && DayN == DayCount) {
						ContentCal += "<table class='Class_Border' cellspacing='0' cellpadding='0' border='0' width='100%' height='100%'><tr><td width='33%'>&nbsp;</td><td width='34%' align='center' class='"+CalDayClass+"'>"+DayCount+"</td><td width='33%'>"+CalDayIcon+"</td></tr></table>";
					}
					else {
						ContentCal += "<table cellspacing='0' cellpadding='0' border='0' width='100%' height='100%'><tr><td width='33%'>&nbsp;</td><td width='34%' align='center' class='"+CalDayClass+"'>"+DayCount+"</td><td width='33%'>"+CalDayIcon+"</td></tr></table>";
						//ContentCal += DayCount + CalDayIcon;
					}
				ContentCal += "</td>";
				ContentCal += "<td width='"+CalBdrSz+"' bgcolor='"+CalBdrColor+"'></td>";
				WeekCount++;
				
			// ● 檢查(WeekCount)值是否等於7, 如是者重設(WeekCount)值為 0
				if (WeekCount==7) { 
					WeekCount=0;
				// ● 檢查該天是否該月最後一天, 如是者不寫入跳行, 避免空行出現
					if (DayCount!=ThisMonthDays) {
						ContentCal += "</tr>";
						ContentCal += "<tr height='"+CalBdrSz+"'><td colspan='15' bgcolor='"+CalBdrColor+"'></td></tr>";
						ContentCal += "<tr height='"+CalRowSz+"'>";
						ContentCal += "<td width='"+CalBdrSz+"' bgcolor='"+CalBdrColor+"'></td>";
					}
				}
				
			// ● 累加(DayCount)值
			DayCount++;
		}
	// ◎【結束】重覆寫入日期方格至該月最後一天(ThisMonthDays)為止
	
	// ●【開始】重覆寫入結尾空白方格
		if (WeekCount!=0) {
			for (i=0; i<7-WeekCount; i++) {
				ContentCal += "<td width='"+CalColSz+"' align='center'>&nbsp;</td>";
				ContentCal += "<td width='"+CalBdrSz+"' bgcolor='"+CalBdrColor+"'></td>";
			}
		}
	// ◎【結束】重覆寫入結尾空白方格
	
	ContentCal += "</tr>";
	ContentCal += "<tr height='"+CalBdrSz+"'><td colspan='15' bgcolor='"+CalBdrColor+"'></td></tr>";
	ContentCal += "</table>";
	if (ListShow) {
		DrawList(DCYY, DCMM);
	}
	ContentCal += CalRemarks;
	Calender_Content.innerHTML = ContentCal;
	eval(ExtraCode);
}

function DrawList(DLYY, DLMM) {
	
	//--------------------------------------------------------------------------------------------------------------------------------------------------------
	// 列表部份 - 設定
	//--------------------------------------------------------------------------------------------------------------------------------------------------------
	
	var EventDayClass = null;
	var RowSpanELTemp;
	var EventDayIcon = "";
	var ListRowSpan, ListRowSpanText;
	var ContentList = new String();
	
	// ● 檢查(ListWidthEQCalSz)設定值, 定義列表闊度(ListWidth)及外框闊度(ListBdrSz)與月曆部份相同
		if (ListWidthEQCalSz) {
			ListBdrSz = CalBdrSz;
			ListWidth = (7 * CalColSz) + (8 * CalBdrSz);
		}
		
	// ● 定義列表日期及事項闊度值(ListDateWidth,ListEventWidth)
		ListDateWidth = Math.ceil((ListWidth - (3 * ListBdrSz)) * (ListDateWidthPercent/100));
		ListEventWidth = ListWidth - (3 * ListBdrSz) - ListDateWidth;

	// ●【開始】寫入列表第一行資料
		ContentList += "<br><table cellspacing='0' cellpadding='0' border='0' width='"+ListWidth+"'>";
		ContentList += "<tr height='"+ListBdrSz+"'><td colspan='5' bgcolor='"+ListBdrColor+"'></td></tr>";
		ContentList += "<tr height='"+ListFrRowSz+"'>";
		ContentList += "<td width='"+ListBdrSz+"' bgcolor='"+ListBdrColor+"'></td>";
		ContentList += "<td width='"+ListDateWidth+"' align='center' class='ListFR'>Date</td>";
		ContentList += "<td width='"+ListBdrSz+"' bgcolor='"+ListBdrColor+"'></td>";
		ContentList += "<td width='"+ListEventWidth+"' align='center' class='ListFR'>Events</td>";
		ContentList += "<td width='"+ListBdrSz+"' bgcolor='"+ListBdrColor+"'></td>";
		ContentList += "</tr>";
	// ◎【結束】寫入列表第一行資料
	
	ContentList += "<tr height='"+ListBdrSz+"'><td colspan='5' bgcolor='"+ListBdrColor+"'></td></tr>";
	
	// ●【開始】重覆寫入列表資料
		for (i=0; i<EventList.length; i++) {
			if (
				((EventList[i][1] == DLYY && EventList[i][2] == DLMM) ||
				(EventList[i][4] && EventList[i][5] == DLYY && EventList[i][6] == DLMM)) &&
				EventList[i][12]
			) {
				
			// ● 根據ID值, 定義跨行屬性(ListRowSpan, ListRowSpanText)
				if (EventList[i][0] == 1) {
					ListRowSpan = 0;
					ListRowSpanText = "";
				}
				else {
					ListRowSpan = EventList[i][0]*2-1;
					ListRowSpanText = " rowspan='"+ListRowSpan+"'";
				}
				
			// ● 讀取資料表, 定義格式(EventDayClass)及圖示(EventDayIcon)
				EventDayClass = EventList[i][8]+"_List";
				if (EventList[i][10] != null) { EventDayIcon = eval(EventList[i][10]); }
				else { EventDayIcon = "";}
				
			// ● 寫入列表資料
				ContentList += "<tr height='"+ListRowSz+"'>";
				ContentList += "<td"+ListRowSpanText+" width='"+ListBdrSz+"' bgcolor='"+ListBdrColor+"'></td>";
				if (EventList[i][3] == null) {
					ContentList += "<td"+ListRowSpanText+" width='"+(ListDateWidth+ListBdrSz+ListEventWidth)+"' colspan='3' class='"+EventDayClass+"'>";
						ContentList += "<table cellspacing='0' cellpadding='0' border='0' width='100%' height='100%'><tr><td width='10' class='"+EventDayClass+"'>&nbsp;</td><td class='"+EventDayClass+"'>";
						ContentList += EventList[i][9]+"&nbsp;"+EventDayIcon;
						ContentList += "</td></tr></table>";
				}
				else {
					ContentList += "<td"+ListRowSpanText+" width='"+ListDateWidth+"' align='center' class='"+EventDayClass+"'>";
					if (EventList[i][3] == 0) { ContentList += EventList[i][13]; }
					else if (EventList[i][4]) { ContentList += EventList[i][3]+" / "+EventList[i][2]+" ~ "+EventList[i][7]+" / "+EventList[i][6]; }
					else { ContentList += EventList[i][3]+" / "+EventList[i][2]; }
				}
				ContentList += "</td>";
				if (EventList[i][3] != null) {
					ContentList += "<td"+ListRowSpanText+" width='"+ListBdrSz+"' bgcolor='"+ListBdrColor+"'></td>";
					ContentList += "<td width='"+ListEventWidth+"' align='left'>";
						ContentList += "<table cellspacing='0' cellpadding='0' border='0' width='100%' height='100%'><tr><td width='10' class='"+EventDayClass+"'>&nbsp;</td><td class='"+EventDayClass+"'>";
						ContentList += EventList[i][9]+"&nbsp;"+EventDayIcon;
						ContentList += "</td></tr></table>";
					ContentList += "</td>";
				}
				ContentList += "<td"+ListRowSpanText+" width='"+ListBdrSz+"' bgcolor='"+ListBdrColor+"'></td>";
				ContentList += "</tr>";
				
				// ● 寫入跨行列表資料
				if (EventList[i][0] != 1) {
					RowSpanELTemp = EventList[i][0];
					for (j=1; j<RowSpanELTemp; j++) {
						// ● 讀取資料表, 定義格式(EventDayClass)及圖示(EventDayIcon)
							EventDayClass = EventList[i+j][8]+"_List";
						if (EventList[i+j][10] != null) { EventDayIcon = eval(EventList[i+j][10]); }
						else { EventDayIcon = "";}
						ContentList += "<tr height='"+ListBdrSz+"'><td bgcolor='"+ListBdrColor+"'></td></tr>";
						ContentList += "<tr height='"+ListRowSz+"'>";
						ContentList += "<td width='"+ListEventWidth+"' align='left' class='"+EventDayClass+"'>";
							ContentList += "<table cellspacing='0' cellpadding='0' border='0' width='100%' height='100%'><tr><td width='10' class='"+EventDayClass+"'>&nbsp;</td><td class='"+EventDayClass+"'>";
							ContentList += EventList[i+j][9]+"&nbsp;"+EventDayIcon;
							ContentList += "</td></tr></table>";
						ContentList += "</td>";
						ContentList += "</tr>";
					}
					i+=RowSpanELTemp-1;
				}
				ContentList += "<tr height='"+ListBdrSz+"'><td colspan='5' bgcolor='"+ListBdrColor+"'></td></tr>";
			}
		}
	// ◎【結束】重覆寫入列表資料
	
	ContentList += "</table>";
	ContentCal += ContentList;
}