//*************************************************************************
// 今日のこよみ 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節気の名称 (新）１５度単位の位置
//=========================================================================
function get24Sekki(year,month,day) {
	var JD,JD1,JD2,t,today,tomorrow;
	var sekkiNo = new Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24);
//今日の太陽の黄経
    JD = ymd2jd(year,month,day); //ユリウス日の計算
	JD1 = Math.floor(JD); //時刻引数を分解する
	JD2 = JD - JD1;
	JD2-= 9.0 / 24.0;
	t= (JD2 + .5) / 36525.0;
	t= t + (JD1 - 2451545) / 36525.0;
	today = LONGITUDE_SUN(t);
//明日の太陽の黄経
	JD++;
	JD1 = Math.floor(JD);	//時刻引数を分解する
	JD2 = JD - JD1;
	JD2-= 9.0 / 24.0;
	t= (JD2 + .5) / 36525.0;
	t= t + (JD1 - 2451545) / 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( sekkiNo[tomorrow/15] ); }
	else{ return(''); }
}
// 今日最後の太陽の位置を1度単位で求める
function getKoukei(year,month,day) {
	var JD,JD1,JD2,t,today,tomorrow;
//今日の太陽の黄経
    JD = ymd2jd(year,month,day); //ユリウス日の計算
	JD1 = Math.floor(JD); //時刻引数を分解する
	JD2 = JD - JD1;
	JD2-= 9.0 / 24.0;
	t= (JD2 + .5) / 36525.0;
	t= t + (JD1 - 2451545) / 36525.0;
	today = LONGITUDE_SUN(t);
//明日の太陽の黄経
	JD++;
	JD1 = Math.floor(JD);	//時刻引数を分解する
	JD2 = JD - JD1;
	JD2-= 9.0 / 24.0;
	t= (JD2 + .5) / 36525.0;
	t= t + (JD1 - 2451545) / 36525.0;
	tomorrow = LONGITUDE_SUN(t);

	today    = Math.floor(today);
	tomorrow = Math.floor(tomorrow);
	if ( today != tomorrow ) {
		return( tomorrow ); }
	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 );
}
// 日の干支を求める
function dayKansi(kyear,kmonth,kday) {
	var daykansiname = new Array("甲子","乙丑","丙寅","丁卯","戊辰","己巳","庚午","辛未","壬申","癸酉","甲戌","乙亥","丙子","丁丑","戊寅","己卯","庚辰","辛巳","壬午","癸未","甲申","乙酉","丙戌","丁亥","戊子","己丑","庚寅","辛卯","壬辰","癸巳","甲午","乙未","丙申","丁酉","戊戌","己亥","庚子","辛丑","壬寅","癸卯","甲辰","乙巳","丙午","丁未","戊申","己酉","庚戌","辛亥","壬子","癸丑","甲寅","乙卯","丙辰","丁巳","戊午","己未","庚申","辛酉","壬戌","癸亥");
	var newkijun = new Date(2008,0,25,0,0,0,0);
	var kijun = new Date(newkijun);
		kijun.setDate(kijun.getDate()-75900);
	var today = new Date(kyear,kmonth-1,kday);
		if ( today - kijun >= 0 ) {
			kansi = daykansiname[(Math.floor((today.getTime() - kijun.getTime()) / 86400000 )) % 60]; }
		else {
			kansi = daykansiname[(Math.floor((kijun.getTime() - today.getTime()) / 86400000 )) % 60]; }
		return (kansi);
}
