//*************************************************************************
// 今日のこよみ by「菊池さん」 <http://kikuchisan.net/>
//
// 機能　(1)西暦年の元号/十干/十二支、和月名
//       (2)祝祭日、２４節気
//       (3)月齢(qreki.jsに機能追加)から潮汐/月名/月齢画像
// を計算し表示します
//
// このスクリプトは、長野 隆氏作 旧暦計算スクリプトqreki.js(旧暦、六曜)の
// 関数 LONGITUDE_SUN(t)を利用しています。
//     ( http://www.ai.wakwak.com/~y-nagano/ )
// 利用にあたってはqreki.jsの使用条件もご覧ください
//
//*************************************************************************
//=========================================================================
// 西暦年の元号/十干/十二支
// 引数　 .... 計算対象となる年　year
// 戻り値 .... 元号/十干/十二支の名称
//=========================================================================
var styear = new Array(1868,1912,1926,1989);
var genName  = new Array("明治","大正","昭和","平成");
var Kan = new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
var Shi = new Array("子","丑","寅","卯","辰","巳","午","未","申",'酉',"戌","亥");
// 西暦年の元号を返す
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]; }

//=========================================================================
// 和月名をもとめる
// 引数　 .... 計算対象となる月　month
// 戻り値 .... 和月名の名称
//=========================================================================
var WaMonth = new Array("睦月","如月","弥生","卯月","皐月","水無月","文月","葉月","長月","神無月","霜月","師走");
function getWamei(month) {
	if (month<1 || month>12) {return "";} else {return WaMonth[month-1];}
}
//=========================================================================
// 今日が24節気かどうか調べる
// 引数　 .... 計算対象となる年月日　year month day
// 戻り値 .... 24節気の名称
//=========================================================================
var sekkiName = new Array("春分","清明","穀雨","立夏","小満","芒種","夏至","小暑","大暑","立秋","処暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至","小寒","大寒","立春","雨水","啓蟄");	// 24節気の定義
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(''); }
}
//=========================================================================
// 月齢から潮汐、月名/月齢画像ファイル名をもとめる
// 引数　 .... 計算対象となる月齢　moonAge
// 戻り値 .... 潮汐、月名/月齢画像ファイルの名称
//=========================================================================
var tideName = new Array('大','大','中','中','中','中','小','小','小','長','若','中','中','大','大','大','大','中','中','中','中','小','小','小','長','若','中','中','大','大');
var moonName = new Array("新月","二日月","三日月","黄昏月","五日月","六日月","七日月","弓張月（上弦）","九日月","十日夜","十日余の月","十二日月","十三夜","待宵月","十五夜（満月）","十六夜","立待月","居待月","寝待月","更待月","二十日余の月","二十二日月","下弓張（下弦）","真夜中の月","二十五日月","二十六夜","下弦後三日月","二十八日月","二十九日月","月隠");

// 月齢から潮汐を返す
function getTide(moonAge) { return tideName[Math.floor(moonAge)%30] + '潮'; }

// 月齢から月名を返す
function getMname(moonAge) {return moonName[Math.floor(moonAge)]}

// 月齢から月齢画像ファイル名を返す
function getMimg(moonAge) {
	var age;
	age = Math.floor(moonAge);
	if (age < 10) age = '0' + age;
	gifname = 'moon' + age + '.gif';
	return gifname;
}
//=========================================================================
// グレゴリオ暦世界時からユリウス日(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 );
}
