<!--

/******** 料金Ｂ設定日をddmm形式で列挙 *********/ var Btbl = new Array
    (
     104, 105, 106, 107, 111,
     210,
     319, 320, 322, 323, 324, 325, 326, 327, 329, 330, 331,
     401, 402, 403, 501, 502,
     718, 719, 720, 721, 722, 723, 725, 726, 727, 728, 729, 730, 731,
     822, 823, 824, 825, 826, 827, 829, 830, 831,
     919, 922, 1010, 1102, 1122,
     1222, 1226, 1227, 1228, 1229, 1230);
/******** 料金Ａ設定日 *********/ var Atbl = new Array
    (0,
     0,
     0);
/******** 特定日料金設定日 *********/ var Stbl = new Array
    (
     502, 503, 504, 505,
     
     801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812,
     813, 814, 815, 816, 817, 818, 819, 820, 821,
     1231, 101, 102, 103);


//年の選択肢
var yearFrom = 2010;
var yearTo   = 2011;

//カレンダー属性
var cellWidth = 40;
var cellHeight = 30;
var headerHeight = 20;
//曜日の色　Array(日曜の色, 月曜の色, 火曜の色, 水曜の色, 木曜の色, 金曜の色, 土曜の色)
//１６進形式でもＯＫ
var weekColor = new Array("red", "black", "black", "black", "#000000", "#000000", "blue");
var weekTitle = new Array("日", "月", "火", "水", "木", "金", "土");
var holbg = "pink";


var holidayColor = "red";
var todayBGColor = "yellow";
var bgcChgC = "white";     //料金Ｃ背景色
var bgcChgB = "#e1f5ff";   //料金Ｂ背景色
var bgcChgA = "#f2ffd7";   //料金Ａ背景色
var bgcChgS = "#ffefce";   //料金特定日背景色


//祝日の定義
//毎年固定の祝日（海の日と敬老の日は２００２年まで）
var holidayYear  = new Array(   0,   0,   0,   0,   0,   0,2002,2002,   0,   0,   0);
var holidayMonth = new Array(   1,   2,   4,   5,   5,   5,   7,   9,  11,  11,  12);
var holidayDay   = new Array(   1,  11,  29,   3,   4,   5,  20,  15,   3,  23,  23);
var holidayTitle = new Array("元日","建国記念の日","昭和の日","憲法記念日","みどりの日","こどもの日","海の日","敬老の日","文化の日","勤労感謝の日","天皇誕生日");
//ハッピーマンデー（海の日と敬老の日は２００３年から）
var happyYear  = new Array(   0,2003,2003,   0);
var happyMonth = new Array(   1,   7,   9,  10);
var happyWeek  = new Array(   2,   3,   3,   2);
var happyTitle = new Array("成人の日","海の日","敬老の日","体育の日");

var todayYear;
var todayMonth;
var todayDay;

function changeCalender(who) {
	displayCalender(who.year.selectedIndex+yearFrom, who.month.selectedIndex+1);
}

function displayCalender(y, m) {
	var html = makeCalTable(y, m);
	var objTbl;

	if ((y * 100 + m) < (todayYear * 100 + todayMonth)) {
		alert("当月以前の表示は出来ません。");
		return;
	}

	if (document.all) {
		objTbl=document.all("ssCal");
		objTbl.innerHTML=html;
		objTbl.style.visibility = "visible";
	} else if (document.getElementById) {
		objTbl=document.getElementById("ssCal");
		objTbl.innerHTML=html;
		objTbl.style.visibility = "visible";
	} else if (document.layers) {
		objTbl=document.layers["ssCal"];
		objTbl.document.open();
		objTbl.document.write(html);
		objTbl.document.close();
		objTbl.visibility = "show";
	}
}

function visibleCalender() {
	var objTbl;

	if (document.all) {
		objTbl=document.all("ssCal");
		objTbl.style.visibility = "visible";
	} else if (document.getElementById) {
		objTbl=document.getElementById("ssCal");
		objTbl.style.visibility = "visible";
	} else if (document.layers) {
		objTbl=document.layers["ssCal"];
		objTbl.visibility = "show";
	}
}


function isHoliday(y, m, d) {
	var i;
	for (i=0;i<holidayMonth.length;++i) {
		if (holidayYear[i]==0 || y<=holidayYear[i]) {
			if (m==holidayMonth[i] && d==holidayDay[i]) {
				return holidayTitle[i];
			}
		}
	}
	return "";
}

function isHappy(y, m, d, w) {
	var i;
	if (w!=1) return "";
	for (i=0;i<happyMonth.length;++i) {
		if (y>=happyYear[i] && m==happyMonth[i] && Math.floor((d-1)/7)+1==happyWeek[i]) {
			return happyTitle[i];
		}
	}
	return "";
}

function isShunbun(y, m, d) {
	//２０００年基準なので２０００年以降しか計算できません。
	//また１００年うるう年は考慮していないので、２１００年までしか計算できません。
	var shun;
	if (m==3) {
		shun = Math.floor(20.69115 + (y-2000)*0.242194 - Math.floor((y-2000)/4));
		if (shun==d) return "春分の日";
	}
	if (m==9) {
		shun = Math.floor(23.09 + (y-2000)*0.242194 - Math.floor((y-2000)/4));
		if (shun==d) return "秋分の日";
	}
	return "";
}

function setChgBgc(y, m, d, wd) {
    var tm, td, si, di;

        tm = eval(m) * 100 + eval(d);
	for (si = 0; si < Btbl.length; ++si) {
                if (tm == Btbl[si]) {
			return bgcChgB; //料金Ｂ
		}
	}
	for (si = 0; si < Atbl.length; ++si) {
                if (tm == Atbl[si]) {
			return bgcChgA; //料金Ａ
		}
	}
	for (si = 0; si < Stbl.length; ++si) {
                if (tm == Stbl[si]) {
			return bgcChgS; //特定日料金
		}
	}

        if (wd == 6) return bgcChgB; //休前日(料金Ｂ)

        si = (isHoliday(y, m, eval(d) + 1).length > 0 || 
              isShunbun(y, m, eval(d) + 1).length > 0 )  //翌日が祝日
        di = (isHoliday(y, m, eval(d) - 1).length > 0 || 
              isShunbun(y, m, eval(d) - 1).length > 0 )  //前日が祝日

　　　　if (si) {//翌日が祝日
                return bgcChgB; //休前日(料金Ｂ)
　　　　}

        //翌日が Happy Monday
　　　　if (isHappy(y, m, eval(d) + 1, wd + 1).length > 0) {
            return bgcChgB; //休前日(料金Ｂ)
        }
　　　　td = (isHoliday(y, m, eval(d)).length > 0 || 
              isShunbun(y, m, eval(d)).length > 0 )  //今日は祝日・春秋分
        //振替休日
        if (wd == 0 && td) { //今日は日曜日で且つ祝日・春秋分
            return bgcChgB; //明日は振替休日なので休前日(料金Ｂ)
        }
        //前日と翌日が祝日=国民の祝日
        if (si && di) {
            return bgcChgB; //休前日(料金Ｂ)
        }
        //国民の祝日の前日判定（かなり特殊）
        di = (isHoliday(y, m, eval(d) + 2).length > 0 || 
              isShunbun(y, m, eval(d) + 2).length > 0)  //2日後が祝日・春秋分
        td = td || (isHappy(y, m, eval(d), wd).length > 0)  //今日はさらにHM？
        if (td && di) { //今日は祝日・春秋分・HMで且つ2日後が祝日・春秋分
            return bgcChgB; //休前日扱い(料金Ｂ)
        }


	return "white";  //普通の日(料金Ｃ)
}



function makeCalTable(y, m) {
	var ttl, tbl;
	var furikae = false;
	var before = 0;
	var d = makeCalender(y, m);

	tbl = "<table border=1 cellspacing=0 cellpadding=0>";
	tbl += "<tr>";
	for (i=0;i<7;++i) {
		tbl += "<td align=center bgcolor=#d7d7ff width=" + cellWidth + " height=" + headerHeight + ">";
		tbl += "<font color=" + weekColor[i] + ">";
		tbl += weekTitle[i];
		tbl += "</font></td>";
	}
	tbl += "</tr>";
	for (j=0;j<d.length;j+=7) {
		tbl += "<tr>";
		for (i=0;i<7;++i) {
			if (d.length <= j+i) {
				tbl += "<td height=" + cellHeight + "> &nbsp; </td>";
			} else {
				tbl += "<td align=center height=" + cellHeight;
				if (y==todayYear && m==todayMonth && d[j+i]==todayDay) { // 本日の処理
					tbl += " bgcolor=" + todayBGColor;
				} else {
                                        tbl += " bgcolor=" + setChgBgc(y, m, d[j+i], i); // 料金設定表示処理
                                }
				tbl += ">";
				if ((ttl=isHoliday(y, m, d[j+i])).length>0) {
					//日付固定の祝日
					tbl += "<font color=" + holidayColor + ">" + d[j+i] + "</font>";
					tbl += "<br><font size=-2 color=" + holidayColor + ">" + ttl + "</font>";
					furikae = (i==0);
					before = d[j+i];
				} else if ((ttl=isHappy(y, m, d[j+i], i)).length>0) {
					//ハッピーマンデー
					tbl += "<font color=" + holidayColor + ">" + d[j+i] + "</font>";
					tbl += "<br><font size=-2 color=" + holidayColor + ">" + ttl + "</font>";
					before = d[j+i];
				} else if ((ttl=isShunbun(y, m, d[j+i])).length>0) {
					//春分・秋分の日
					tbl += "<font color=" + holidayColor + ">" + d[j+i] + "</font>";
					tbl += "<br><font size=-2 color=" + holidayColor + ">" + ttl + "</font>";
					furikae = (i==0);
					before = d[j+i];
				} else {
					ttl = "";
					if (before>0 && i!=0) {
						//前日が祝日
						if (isHoliday(y, m, d[j+i]*1+1).length>0 || isShunbun(y, m, d[j+i]*1+1).length>0) {
							ttl = "国民の休日";
						}
					}
					if (ttl.length>0) {
						tbl += "<font color=" + holidayColor + ">" + d[i+j] + "</font>";
						tbl += "<br><font size=-2 color=" + holidayColor + ">" + ttl + "</font>";
					} else if (furikae) {
						tbl += "<font color=" + holidayColor + ">" + d[i+j] + "</font>";
						tbl += "<br><font size=-2 color=" + holidayColor + ">" + "振替休日" + "</font>";
					} else {
						tbl += "<font color=" + weekColor[i] + ">" + d[i+j] + "</font>";
						tbl += "<br><font size=-2 color=" + weekColor[i] + "> &nbsp; </font>";
					}
					furikae = false;
					before = 0;
				}
				tbl += "</td>";
			}
		}
		tbl += "</tr>";
	}
	tbl += "</table>";
	return tbl;
}



function makeCalender(y, m) {
	var d = new Array();
	var dt1 = new Date(y, m-1, 1);
	var dt2 = new Date(y, m, 0);
	var ld = Math.floor((dt2.getTime() - dt1.getTime())/(24*60*60*1000));
	if (dt2.getMonth()==m) --ld;
	var i, j;
	for (i=0;i<dt1.getDay();++i) d[i]="";
	for (j=0;j<=ld;++j) d[i+j]=""+(j+1);
	return d;
}

function calClicked(msg) {
	alert(msg);
}

//-->
