<!--
	// ******* カレンダ関数ライブラリ (calenderlib.js) 2007.01.07 sakura *******

	var WeekDays   = new Array("日","月","火","水","木","金","土");
	var Mdays      = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	var tideName   = new Array('大','大','中','中','中','中','小','小','小','長','若','中',
		'中','大','大','大','大','中','中','中','中','小','小','小','長','若','中','中','大','大');

	var styear = new Array(1868,1912,1926,1989);
	var genName  = new Array("明治","大正","昭和","平成");
	var Kan = new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
	var Shi = new Array("子","丑","寅","卯","辰","巳","午","未","申",'酉',"戌","亥");
	var WaMonth = new Array("睦月","如月","弥生","卯月","皐月","水無月","文月","葉月"
		,"長月","神無月","霜月","師走");
	var sekkiName = new Array("春分","清明","穀雨","立夏","小満","芒種","夏至","小暑",
		"大暑","立秋","処暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至",
		"小寒","大寒","立春","雨水","啓蟄");
	var moonName = new Array("新月","二日月","三日月","黄昏月","五日月","六日月","七日月",
		"弓張月（上弦）","九日月","十日月","十日余の月","十二日月","十三夜","待宵月","十五夜",
		"満月","立待月","居待月","寝待月","更待月","二十日余の月","二十二日月","弓張月（下弦）",
		"真夜中の月","二十五日月","二十六夜","二十七日月","二十八日月","二十九日月","月隠");

	// ******* 曜日カラーコード（任意に変更のこと） *******
	var _weekday   = "#0055ff";
	var _holiday   = "#ff0000";
	var _saturday  = "#000080";
	var _closeday  = "#990000";

	// ******* 西暦年の元号を返す *******
	function getGengou(year) {
		var Gengou = "";
		for (i = styear.length ; i >= 0 ; i--) {
			if (year >= styear[i]) {
				Gengou = genName[i] + (year - styear[i] + 1) + '年'; break;
			}
		}
		return Gengou;
	}
	// ******* 西暦年の十干を返す *******
	function get10Kan(year) { return Kan[(year + 6)%10]; }

	// ******* 西暦年の十二支を返す *******
	function get12Shi(year) { return Shi[(year + 8)%12]; }

	// ******* 和月名を求める *******
	function getWamei(month) {
		if (month<1 || month>12) {return "";} else {return WaMonth[month-1];}
	}

	// ***** 月齢から潮汐を返す *****
	function gettide(moonAge) { return tideName[Math.floor(moonAge)%30]; }

	// ***** 月齢から月齢画像ファイル名を返す *****
	function getmimg(moonAge) {
		var age;
		age = Math.floor(moonAge);
		if (age < 10) age = '0' + age;
		gifname = 'bmoon' + age + '.gif';
		return gifname;
	}

	// ***** 二十四節気の計算 *****
	function get24Sekki(year,month,day) {
		var JD1,JD2,t,today,tomorrow;
		//今日の太陽の黄経
		JD = ymd2jd(year,month,day);	//ユリウス日の計算
		JD1 = Math.floor(JD);	//時刻引数を分解する
		JD2 = JD - JD1;
		JD2-= 9.0 / 24.0;
		t= (JD2 + 0.5) / 36525.0;
		t= t + (JD1 - 2451545.0) / 36525.0;
		today = LONGITUDE_SUN(t);
		//明日の太陽の黄経
		JD++;
		JD1 = Math.floor(JD);	//時刻引数を分解する
		JD2 = JD - JD1;
		JD2-= 9.0 / 24.0;
		t= (JD2 + 0.5) / 36525.0;
		t= t + (JD1 - 2451545.0) / 36525.0;
		tomorrow = LONGITUDE_SUN(t);

		today    = 15.0 * Math.floor(today/15.0);
		tomorrow = 15.0 * Math.floor(tomorrow/15.0);
		if(today != tomorrow){ return(sekkiName[tomorrow/15]); }
		else{ return(''); }
	}

	// ***** 月齢から月名を返す *****
	function getMname(moonAge) {return moonName[Math.floor(moonAge)]}

	// ***** グレゴリオ暦世界時からユリウス日(JD)を計算する *****
	// (1月または2月の場合は前年の13月、14月とみなして計算)
	function ymd2jd(year,month,day) {
		var jd;
		if( month < 3.0 ){ year -= 1.0; month += 12.0; }
		jd  = Math.floor( 365.25 * year );
		jd += Math.floor( year / 400.0 );	//うるう年補正
		jd -= Math.floor( year / 100.0 );
		jd += Math.floor( 30.59 * ( month - 2.0 ) );
		jd += day + 1721088;
		return( jd );
	}

	// ******* yy の2000年問題を解消する処置 *******
	function Y2K(year) {
		if (year < 1600) {
			if (year < 50) { year += 100; }
			year += 1900;
		} return year;
	}

	// ******* システムの UTC と LOCALTIME との差から 時差を取り出す *******
	function GetJisa() {
		var now = new Date();
		var d,h;
		d = now.getDate() - now.getUTCDate();
		if (d < -15) d = 1;
		else if (d > 15) d = -1;
		h = d * 24 + now.getHours() - now.getUTCHours();
		return h;
	}

	// ******* yy,mm の月の日数(月末日)を返す *******
	function GetMonthDays(yy,mm) {
		Mdays[1] = 28;	// 閏年の処理開始
		if ((yy % 4) == 0) Mdays[1] = 29;
		if ((yy % 100) == 0) Mdays[1] = 28;
		if ((yy % 400) == 0) Mdays[1] = 29;    // 閏年の処理終了
		return Mdays[mm - 1];
	}

	// ******* yy,mm,dd から年通日を計算する 1/1 は、1.0 とする *******
	function GetYearDays(yy,mm,dd) {
		var m,days;
		days = dd;
		m = GetMonthDays(yy,mm);	// 閏処理のためのダミー
		for (m = 0; m < (mm - 1); m++) days += Mdays[m];
		return days;
	}

	// ******* 1600/1/1 からの通日を計算する *******
	function Get1600Days(yy,mm,dd) {
		var days,tmp;
		tmp = yy - 1600;
		days = Math.floor((tmp - 1) * 365.25 + 1.01);
		days -= Math.floor((tmp - 1 + 0.01) / 100); 
		days += Math.floor((tmp - 1 + 0.01) / 400);
		days += GetYearDays(yy,mm,dd);
		return days;
	}

	// ******* 曜日のインデックス（0-6）を返す。 *******
	// 通日計算にはGet1600Days() を使用する。
	function GetWeekDays(yy,mm,dd) {
		var days;
		var TDate = new Date();
		days = Math.floor(Get1600Days(yy,mm,dd) + 6);
		days = days - Math.floor(days / 7) * 7;
		return days;
	}

	// ***** 曜日の文字を返す('日' .. '土') *****
	function GetWeekDayStr(yy,mm,dd) {
		var idx;
		idx = GetWeekDays(yy,mm,dd);
		return WeekDays[idx];
	}

	// ******* yy,mm の月の日数を返す *******
	function GetMonthDays(yy,mm) {
		if (yy % 4 == 0) {
			Mdays[1] = 29;
			if (yy > 1582) {
				if (yy % 100 == 0) Mdays[1] = 28;
				if (yy % 400 == 0) Mdays[1] = 29;
			}
		} else Mdays[1] = 28;
		return Mdays[mm - 1];
	}

	// ******* yy,mm,dd から年通日を計算する 1/1 は、1.0 とする *******
	function GetYearDays(yy,mm,dd) {
		var m,days;
		days = dd;
		m = GetMonthDays(yy,mm);    // 閏処理のためのダミー

		for (m = 0; m < (mm - 1); m++) days += Mdays[m];
		return days;
	}

	// ******* 年通日から月日を求める。 *******
	// ******* 月日は 1125 (11/25) のようにして返す。 *******
	function GetDays2MD(year,days) {
		var m,d;
		for (m = 12; m >= 1; m--) {
			d = GetYearDays(year,m,1);
			if (d <= days) break;
		}
		d = days - d + 1;
		if (m == 0)	m = 1;
		return m * 100 + d;
	}

	// ******* AD 1.1.0 からの通日（JD - 0.5 の値） *******
	function Ymd2Jd(yy,mm,dd) {
		var days,tmp,yym1;
		yym1 = yy - 1;
		days = 1721422;	//AD 1.1.0 の JD - 0.5
		Mdays[1] = 28;
		if (yy % 4 == 0) {
			Mdays[1] = 29;
			if (yy > 1582) {
				if (yy % 100 == 0) {
					Mdays[1] = 28;
					if (yy %400 == 0) {
						Mdays[1] = 29;
					}
				}
			}
		}
		days += Math.floor(365.25 * yym1 + 0.1);
		for (m = 0; m < (mm - 1) ; m++) {
			days += Mdays[m];
		}
		days += dd;
		if (days >= 2299160) days -= 10;	// 失われた十日の削除
		if (yym1 >= 1600) {
			days -= Math.floor((yym1 - 1600 + 0.1) / 100);
			days += Math.floor((yym1 - 1600 + 0.1) / 400);
		}
		return days;
	}

	// ******* ユリウス通日(-0.5d)から西暦年月日に変換する *******
	function Jd2Ymd(jd) {
		var yy,mm,dd,subjd;
		subjd = jd - Ymd2Jd(1,1,0.0);
		yy = Math.floor(subjd/365.0);
		while (jd < Ymd2Jd(yy,mm,1.0)) yy--;
		for (mm = 12; mm > 0; mm--) {
			if (jd >= Ymd2Jd(yy,mm,1.0)) break;
		}
		dd = jd - Ymd2Jd(yy,mm,0.0);
		return (yy * 10000+ mm * 100 + dd);
	}

	// ******* 2000/1/1.5 (J2000)からの通日を返す。Ymd2Jdを使用する。 *******
	function GetJ2000Days(yy,mm,dd) {
		var days;
		days = Ymd2Jd(yy,mm,dd);
		days -= Ymd2Jd(2000,1,1.5);
		return days;
	}

	// ******* ユリウス暦日からグレゴリウス暦日を差し引いた日数 *******
	// Gu - Ju = ANS   (Gu - ANS = Ju,  Ju + ANS = Gu)
	// 古い時代の日付を無理矢理グレゴリウス暦日にしたい場合などに用いる
	function Ym2GsubJ(yy,mm) {
		var ans;
		if (mm <= 2) yy--;
		ans = Math.floor((yy + 0.1) / 100) - 2;
		ans = ans - Math.floor((yy + 0.1) / 400);
		return ans;
	}

	// ******* year,month から、春分・秋分の日付を計算する。 *******
	// month : 3 or 9  
	var Syunbunpar1 = new Array(19.8277,20.8357,20.8431,21.8510);
	var Syunbunpar2 = new Array(22.2588,23.2588,23.2488,24.2488);
	// ******* 春分の日、秋分の日を計算して答えを返す。1980-2099 : month = 3 or 9 *******
	function Syunbun(year,month) {
		var ans,p1;
		if ((year >= 1851) && (year <= 1899)) p1 = 0;
		else if ((year >= 1900) && (year <= 1979)) p1 = 1;
		else if ((year >= 1980) && (year <= 2099)) p1 = 2;
		else if ((year >= 2100) && (year <= 2150)) p1 = 3;
		else return 0;  // エラー（範囲外）

		if (month == 3) {  // 春分の日
			ans = Math.floor(Syunbunpar1[p1] + 0.242194 * (year - 1980) - Math.floor((year - 1980 + 0.01)/4));
		} else if (month == 9) {// 秋分の日
			ans = Math.floor(Syunbunpar2[p1] + 0.242194 * (year - 1980) - Math.floor((year - 1980 + 0.01)/4));
		} else ans = 0;    // 春分でも秋分でもない
		return ans;
	}

	// ******* 時刻表示変換(hh.hhhh -> hh:mm) *******
	function hour2hm(hour) {
		var m,h;

		with (Math) {
			h = Math.floor(hour);
			m = Math.floor((hour - h) * 60 + 0.5);
			if (m >= 60) {
				m -= 60;
				h++;
			}
			if (h < 10) h = ' ' + h;
			if (m < 10) m = '0' + m;
			h = h + ':' + m;
		}
		return h;
	}

	// ******* １桁の数値の場合は、前'0'を付加して返す *******
	function addZero(n) {
		if (n < 10) return '0' + n;
		else return '' + n;
	}

	// ***** 休日チエック (祝祭日、振替休日対応) 定義済みカラーコードを返す *****
	// Parameter = yyyy,mm,dd,StartDay_Weekcode
	function _holiday_check(y, m, d, s) {
		var sat = (d + s) % 7 == 0 ? 1 : 0;
		var sun = (d + s) % 7 == 1 ? 1 : 0;
		var mon = (d + s) % 7 == 2 ? 1 : 0;
		// ***** 春分の日、秋分の日の計算 *****
		var spr = Math.floor(20.8431 + 0.242194 * (y - 1980)) - Math.floor((y - 1980) / 4); //1980-2099
		var aut = Math.floor(23.2488 + 0.242194 * (y - 1980)) - Math.floor((y - 1980) / 4); //1980-2099
		var week = Math.ceil(d / 7);

	// ***** 月を判定して休日を得る *****
	switch (m) {
		case 1:
			switch (true) {
				case (d == 1 || d == 1 + mon):
				case y >= 2000 && week == 2 && mon == 1:
				case y <= 1999 && (d == 15 || d == 15 + mon):
				return _holiday;
			}
			break;
		case 2:
			switch (true) {
				case (d == 11 || d == 11 + mon):
				return _holiday;
			}
			break;
		case 3:
			switch (true) {
				case (d == spr || d == spr + mon):
				return _holiday;
			}
			break;
		case 4:
			switch (true) {
				case (d == 29 || d == 29 + mon):
				return _holiday;
			}
			break;
		case 5:
			switch (true) {
				case (d == 3 || d == 3 + mon):
				case y >= 1986 && d == 4:
				case (d == 5 || d == 5 + mon):
				return _holiday;
			}
			break;
		case 6:
			break;
		case 7:
			switch (true) {
				case y >= 2003 && week == 3 && mon == 1:
				case y <= 2002 && y >= 1996 && (d == 20 || d == 20 + mon):
				return _holiday;
			}
			break;
		case 8:
			break;
		case 9:
			switch (true) {
				case y >= 2003 && week == 3 && mon == 1:
				case y <= 2002 && (d == 15 || d == 15 + mon):
				case y >= 2003 && d + 1 == aut && (d + s) % 7 == 3:
				case (d == aut || d == aut + mon):
				return _holiday;
			}
			break;
		case 10:
			switch (true) {
				case y >= 2000 && week == 2 && mon == 1:
				case y <= 1999 && (d == 10 || d == 10 + mon):
				return _holiday;
			}
			break;
		case 11:
			switch (true) {
				case (d == 3 || d == 3 + mon):
				case (d == 23 || d == 23 + mon):
				return _holiday;
			}
			break;
		case 12:
			switch (true) {
				case y >= 1989 && (d == 23 || d == 23 + mon):
				return _holiday;
			}
			break;
	}
	switch (y * 10000 + m * 100 + d) {
		case 19890107:
		case 19890224:
		case 19901112:
		case 19930609:
		return _holiday;
	}
	switch (true) {
		case sun == 1:
		return _holiday;
		case y <= 1988 && m == 12 && (d == 29 || d == 30):
		case m == 12 && d == 31:
		case m == 1 && (d == 2 || d == 3):
		return _closeday;
		case sat == 1 && y * 100 + m <= 198307:
		return week == 3 ? _saturday : _weekday;
		case sat == 1 && y * 100 + m <= 198607:
		return week == 2 ? _saturday : _weekday;
		case sat == 1 && y * 100 + m <= 198901:
		return (week == 2 || week == 3) ? _saturday : _weekday;
		case sat == 1:
		return _saturday;
	}
	return _weekday;
	}

	// ***** 数値の３桁毎のカンマ編集 *****
	function getCammaFmt(num) {
		var str = String(Math.ceil(num));
		var res = str.substr(0, 1);
		for(var i = 1; i < str.length; i++){
			if(!((str.length - i) % 3))
				res += ",";
			res += str.substr(i, 1);
		}
		return res;
	}

// -->

