///////////////////////////////////////////////////////////////////////////////
// 名前 : isos_time.js
// 機能 : 時刻関係共通関数
// 概要 : JAVA SCRIPT関数で作られた時刻に関する処理
// 検証済ブラウザ : IE6
///////////////////////////////////////////////////////////////////////////////

// 定数宣言部
var MaxYear = 3;
var MaxMonth = 12;
var MaxDay = 31;
var NmlTbl = new Array(12);
NmlTbl[0] = 31;
NmlTbl[1] = 28;
NmlTbl[2] = 31;
NmlTbl[3] = 30;
NmlTbl[4] = 31;
NmlTbl[5] = 30;
NmlTbl[6] = 31;
NmlTbl[7] = 31;
NmlTbl[8] = 30;
NmlTbl[9] = 31;
NmlTbl[10] = 30;
NmlTbl[11] = 31;
var LeapTbl = new Array(12);
LeapTbl[0] = 31;
LeapTbl[1] = 29;
LeapTbl[2] = 31;
LeapTbl[3] = 30;
LeapTbl[4] = 31;
LeapTbl[5] = 30;
LeapTbl[6] = 31;
LeapTbl[7] = 31;
LeapTbl[8] = 30;
LeapTbl[9] = 31;
LeapTbl[10] = 30;
LeapTbl[11] = 31;

// 年月日取得関数
// 引数：	nowYear：(年)
//			nowMonth：(月)
//			nowDay：(日)
function setDate()
{
	var arDate = new Array(3);
	// 日時を取得
	nowD=new Date();

	// 年を西暦に変換
	arDate[0]=(nowD.getYear()<2000)?1900+nowD.getYear() : nowD.getYear();

	// 日、月を変換
	arDate[1]="0" + (nowD.getMonth()+1);
	arDate[2] = "0" + nowD.getDate();
	arDate[1] = arDate[1].substring(arDate[1].length-2,arDate[1].length+1);
	arDate[2] = arDate[2].substring(arDate[2].length-2,arDate[2].length+1);
	
	return(arDate);
}

// 時分秒取得関数
// 引数：	nowYear：(年)
//			nowMonth：(月)
//			nowDay：(日)
function setTime()
{
	var arDate = new Array(3);
	// 日時を取得
	nowD=new Date();

	// 時分秒を変換
	arDate[0] = "0" + nowD.getHours();
	arDate[1] = "0" + nowD.getMinutes();
	arDate[2] = "0" + nowD.getSeconds();
	arDate[0] = arDate[0].substring(arDate[0].length-2,arDate[0].length+1);
	arDate[1] = arDate[1].substring(arDate[1].length-2,arDate[1].length+1);
	arDate[2] = arDate[2].substring(arDate[2].length-2,arDate[2].length+1);

	return(arDate);
}

// 年月日(YYYY/MM/DD）フォーマットから年、月、日を個別に取り出す
// 引数：	argDate：(年月日文字列（YYYY/MM/DD）)
function GetDateRes(argDate)
{
	var arDate = new Array(3);

	// 年、月、日を分解し、個々の配列に入れ込む
	arDate[0] = argDate.substring(0, 4);
	arDate[1] = argDate.substring(5, 7);
	arDate[2] = argDate.substring(8, 10);

	return(arDate);
}

// 年、月から月の最終日を求める
// 引数：	argYear（年）
//			argMonth（月）
function GetLastDay(argYear, argMonth)
{
	var ainRet;
	var abRet;

	// 閏年チェック
	abRet = (argYear % 4!=0) ? false : (argYear % 100!=0) ? true : (argYear % 400!=0) ? false : true;

	// 閏年チェックを元に、月の最終日を求める
	if (abRet == true) {

		// 閏年の場合
		ainRet = LeapTbl[eval(argMonth) - 1];
	} else {

		// 通常年の場合
		ainRet = NmlTbl[eval(argMonth) - 1];
	}

	return(ainRet);
}

// 年リストボックス作成処理
// 引数：	NowYear（今年の年）
//			Year（年）
//			myObj（年リストボックスオブジェクト）
//			monObj（月リストボックスオブジェクト）
//			dayObj（日リストボックスオブジェクト）
function makeLB_year(NowYear, Year, myObj, monObj, dayObj, OldYear)
{
	var Years = NowYear - OldYear + 1;
	var setYear = new Array(Years);			// リストボックスに設定する年の数
	var str = "";

	for (i = 0; i < Years; i++) {
		setYear[i] = eval(OldYear) + i;
	}
	
	// リストボックス宣言部
	str = '<select name="' + myObj + '" onchange="makeLB_month(' + myObj + '.value, ' + monObj + '.value, \'' + monObj + '\', \'' + dayObj + '\')">';

	// 各OPTIONタグ部作成
	for (i = 0; i < Years; i++)
	{
		// OPTIONタグ（前半）設定
		str += '<option value=' + setYear[i];

		// 設定しようとしている年であれば･･･
		if (Year == setYear[i]) {

			// 初期設定をそのリストに合わす
			str += ' selected'
		}

		// OPTIONタグ（後半）設定
		str += '>' + setYear[i] + '</option>';

	}

	// リストボックス終端部
	str += '</select>';

	// HTMLに書込む
	document_write(str, myObj);
}

// 月リストボックス作成処理
// 引数：	Year（年）
//			Month（月）
//			myObj（月オブジェクト）
//			dayObj（日オブジェクト）
function makeLB_month(Year, Month, myObj, dayObj)
{
	var arDate = new Array(3);
	var dspMonth;
	var setMth;								// リストボックスに設定する月の数
	var defMonth;							// selected指定月
	var str = "";

	// 現在日時を取得する
	arDate = setDate();

	// 年が現在年と同じ場合は現在月を最終月とする
	if (Year == arDate[0]) {

		dspMonth = eval(arDate[1]);

		if (Month > eval(arDate[1])) {
			defMonth = arDate[1];
		} else {
			defMonth = Month;
		}
	} else {

		// その他の場合は12月を設定する
		dspMonth = MaxMonth;

		defMonth = Month;
	}

	setMth = new Array(dspMonth);

	// リストボックスに月を設定する
	for (i = 0; i < dspMonth; i++) {
		setMth[i] = i + 1;
	}

	// リストボックス宣言部
	str = '<select name="' + myObj + '" onchange="makeLB_day(' + Year + ', ' + myObj + '.value, document.all[\'' + dayObj + '\'].value, \'' + dayObj + '\')">';

	// 各OPTIONタグ部作成
	for (i = 0; i < dspMonth; i++)
	{
		// OPTIONタグ（前半）設定
		str += '<option value=' + setMth[i];

		// 設定しようとしている年が現在年であれば･･･
		if (defMonth == setMth[i]) {

			// 初期設定をそのリストに合わす
			str += ' selected'
		}

		// OPTIONタグ（後半）設定
		str += '>' + setMth[i] + '</option>';

	}

	// リストボックス終端部
	str += '</select>';

	// HTMLに書込む
	document_write(str, myObj);
	
	// 月が変わるので併せて日も変える
	makeLB_day(Year, defMonth, document.all[dayObj].value, dayObj);
}

// 日リストボックス作成処理
// 引数：	Year（年）
//			Month（月）
//			Day（日）
//			myObj（日オブジェクト）
function makeLB_day(Year, Month, Day, myObj)
{
	var arDate = new Array(3);
	var dspDay;
	var setDay;								// リストボックスに設定する月の数
	var defDay;							// selected指定月
	var str = "";

	// 現在日時を取得する
	arDate = setDate();

	// 年が現在年と同じ場合は現在日を最終日とする
	if ((Year == arDate[0]) && (Month == eval(arDate[1]))) {
		dspDay = eval(arDate[2]);

		if (Day > GetLastDay(Year, Month)) {
			defDay = GetLastDay(Year, Month);
		} else {
			if (Day > eval(arDate[2])) {
				defDay = arDate[2];
			} else {
				defDay = Day;
			}
		}
	} else {

		// その他の場合は年、月より該当月の最終日を求め、設定する
		dspDay = GetLastDay(Year, Month);

		if (Day > GetLastDay(Year, Month)) {
			defDay = GetLastDay(Year, Month);
		} else {
			defDay = Day;
		}
	}

	setDay = new Array(dspDay);

	// リストボックスに月を設定する
	for (i = 0; i < dspDay; i++) {
		setDay[i] = i + 1;
	}

	// リストボックス宣言部
	str = '<select name="' + myObj + '">';

	// 各OPTIONタグ部作成
	for (i = 0; i < dspDay; i++)
	{
		// OPTIONタグ（前半）設定
		str += '<option value=' + setDay[i];

		// 設定しようとしている年が現在年であれば･･･
		if (defDay == setDay[i]) {

			// 初期設定をそのリストに合わす
			str += ' selected'
		}

		// OPTIONタグ（後半）設定
		str += '>' + setDay[i] + '</option>';

	}

	// リストボックス終端部
	str += '</select>';

	// HTMLに書込む
	document_write(str, myObj);
}

// 曜日を取得する。0：日曜〜6：土曜
function Get_Week(argYear, argMonth, argDay)
{
	var Week;
	var inYear = eval(argYear);
	var inMonth = eval(argMonth);
	var inDay = eval(argDay);

	Week = (inYear+Math.ceil(inYear/4)-Math.ceil(inYear/100)+Math.ceil(inYear/400)+
		Math.ceil(2.6*inMonth+1.6)+inDay)  % 7 - 2;

	return(Week);
}

// 先週月曜〜日曜までの日を取得する
function Get_OldWeeklyDay()
{
	var arDate = new Array(3);
	var arRetDate = new Array(6);
	// 日時を取得
	EndD = new Date();
	StartD = new Date();

	arDate = setDate();
	// 曜日を算出する
	ainRet = Get_Week(arDate[0], arDate[1], arDate[2]);
	if (ainRet == 0) {
		ainRet = 7;
	} else if (ainRet == -2) {
		ainRet = 5;
	} else if (ainRet == -1) {
		ainRet = 6;
	}

	EndD.setDate(EndD.getDate() - ainRet);
	StartD.setDate(StartD.getDate() - (ainRet + 6));

	// 年を西暦に変換
	arRetDate[0]=(EndD.getYear()<2000)?1900+EndD.getYear() : EndD.getYear();

	// 日、月を変換
	arRetDate[1]="0" + (EndD.getMonth()+1);
	arRetDate[2] = "0" + EndD.getDate();
	arRetDate[1] = arRetDate[1].substring(arRetDate[1].length-2,arRetDate[1].length+1);
	arRetDate[2] = arRetDate[2].substring(arRetDate[2].length-2,arRetDate[2].length+1);

	// 年を西暦に変換
	arRetDate[3]=(StartD.getYear()<2000)?1900+StartD.getYear() : StartD.getYear();

	// 日、月を変換
	arRetDate[4]="0" + (StartD.getMonth()+1);
	arRetDate[5] = "0" + StartD.getDate();
	arRetDate[4] = arRetDate[4].substring(arRetDate[4].length-2,arRetDate[4].length+1);
	arRetDate[5] = arRetDate[5].substring(arRetDate[5].length-2,arRetDate[5].length+1);

	return(arRetDate);
}

// 現在日に指定された日数を加算する
function Get_AddDay(argDays)
{
	var arDate = new Array(3);
	// 日時を取得
	StartD = new Date();

	StartD.setDate(StartD.getDate() + argDays);

	// 年を西暦に変換
	arDate[0]=(StartD.getYear()<2000)?1900+StartD.getYear() : StartD.getYear();

	// 日、月を変換
	arDate[1]="0" + (StartD.getMonth()+1);
	arDate[2] = "0" + StartD.getDate();
	arDate[1] = arDate[1].substring(arDate[1].length-2,arDate[1].length+1);
	arDate[2] = arDate[2].substring(arDate[2].length-2,arDate[2].length+1);

	return(arDate);
}
