//	!! 注意 !!
//
//	このファイルのソースはテストサーバ用
//
//	本番アップ時は、テストコマンドライン (/*テスト用*/〜) を本番用 (/*本番用*/〜) に切り替え、全ての一行コメント (//〜) と併せて削除する
//
//		1. 全行頭にタブを挿入
//		2. 正規表現で置換 [^\*/:]//.* → ""
//		3. 正規表現で置換 ^[\t]*[\r\n] → "" 
//


	//	[ HTMLソースに記述される関数 ]
	//
	//	ページ (フォーム) ロード時
	//		intFareInit
	//		citySetup
	//		dateSpecify
	//
	//	エリアプルダウン操作時
	//		citySetup
	//
	//	カレンダークリック時
	//		CalendarClick
	//
	//	運賃プルダウン操作時、フォーム送信時
	//		changePrm
	//
	//	citySetup, dateSpecify, citySetup, CalendarClick 実行時前に
	//		toggleForms
	//

var domain = document.domain;
/*テスト用*/var isJapanRegion = ( domain.match( /jal\.co\.jp/ ) || domain.match( /10\.32\.32\.106/ )) ? true : false;
/*本番用*///var isJapanRegion = domain.match( /jal\.co\.jp/ ) ? true : false;	//	日本地区かの判定
/*テスト用*/var isAustraliaRegion = domain.match( /renewal\.au\.jal\.com/ ) ? true : false;
/*本番用*///var isAustraliaRegion = domain.match( /au\.jal\.com/ ) ? true : false;	//	海外地区 (AU) かの判定
/*テスト用*/var isHongKongRegion = domain.match( /renewal\.hk\.jal\.com/ ) ? true : false;
/*本番用*///var isHongKongRegion = domain.match( /hk\.jal\.com/ ) ? true : false;	//	海外地区 (HK) かの判定
/*テスト用*/var isSingaporeRegion = domain.match( /renewal\.sg\.jal\.com/ ) ? true : false;
/*本番用*///var isSingaporeRegion = domain.match( /sg\.jal\.com/ ) ? true : false;	//	海外地区 (SG) かの判定
/*テスト用*/var isKoreaRegion = domain.match( /renewal\.kr\.jal\.com/ ) ? true : false;
/*本番用*///var isKoreaRegion = domain.match( /kr\.jal\.com/ ) ? true : false;	//	海外地区 (KR) かの判定

var pathname = document.location.pathname;
var isEn = (	//	英語サイトかの判定
	pathname.match( /^\/en\/.?/ ) ||
	pathname.match( /^\/world\/en\/.?/ ) ||
	pathname.match( /^\/sr\/en\/.?/ )
) ? true : false;


/* [ モジュールのパラメータと遷移先の切り分け機能 ] */


/* [ 初期設定: 検索プログラムのパス ] */
var oldFlowAction = isJapanRegion ?	//	旧フロー
	"http://www.5931.jal.co.jp/cgi-bin/vacantseat" :
	"http://www.5931.jal.co.jp/cgi-bin/db2www/dotcom.vacantseat.out.d2w/report";
var newFlowAction = isJapanRegion ?	//	新フロー
	"http://www.5931.jal.co.jp/cgi-bin/db2www/special.vacantseat.fare.d2w/report" :
	null;
var dspchAction = null;
var schedAction = ( isJapanRegion && !isEn ) ?	//	スケジュール案内
/*現行版*///	"http://www.5931.jal.co.jp/cgi-bin/db2www/skdl.out.d2w/report" :
/*リニュ版*/	"http://www.5931.jal.co.jp/rsvInter/ScheduleInfoResult.do" :
	"http://www.5931.jal.co.jp/rsvInter/ScheduleInfoResult.do";

var framesetAction =	isJapanRegion ?	//	フレーム表示CGI
	"/cgi-bin/jal/en/frameset/report.cgi" :
	"/cgi-bin/frameset/report.cgi";

/* /[ 初期設定: 検索プログラムのパス ] */


/* [ 初期設定: パラメータの定義リスト ] */
var prm = isJapanRegion ?
	{
	//	"入力用フォームで使用する要素名": [ "パラメータ名(旧フロー)", "パラメータ名(新フロー)" ]

		"depA": [ "PRM_DEPAREA", "" ],
		"dep": [ "PRM_DEPARTURE", "PRM_DEPT_CD" ],
		"arrA": [ "PRM_ARRAREA", "" ],
		"arr": [ "PRM_ARRIVAL", "PRM_ARVL_CD" ],
		"rtnDep": [ "PRM_OPEN_DEPARTURE", "" ],
		"rtnArr": ["PRM_OPEN_ARRIVAL", "" ],
		"depMon": [ "PRM_MEETINGMONTH", "PRM_OUTWARD_MON" ],
		"depDay": [ "PRM_MEETINGDATE", "PRM_OUTWARD_DAY" ],
		"rtnMon": [ "PRM_SENDINGMONTH", "PRM_HOMEWARD_MON" ],
		"rtnDay": [ "PRM_SENDINGDATE", "PRM_HOMEWARD_DAY" ],

		"send": [ "PRM_RADIO_SEND", "" ],

		"age1": [ "PRM_SEATADULT", "PRM_SEAT_ADULT" ],
		"age2": [ "PRM_SEATCHILD", "PRM_SEAT_CHILD" ],
		"age3": [ "PRM_SEATINFANT", "PRM_SEAT_INFANT" ],

		"clsSp": [ "PRM_SPECIAL", "" ],
		"clsSt": [ "PRM_STANDARD.x", "" ],
		"etc6": [ "", "PRM_SPECIAL_DISP" ],

		"rgn": [ "PRM_RGN_CD", "" ],
		"co": [ "PRM_COUNTRY_CD", "" ],
		"lang": [ "PRM_LANGUAGE", "" ],
		"site": [ "PRM_SITE", "" ],

		"root": [ "PRM_DCM_ROOT", "" ],	//海外地区用? スケジュールには不要
		"ndic": [ "PRM_DCM_INDICATOR", "" ],	//海外地区用? スケジュールには不要

		"fun": [ "flg_fun_no", "flg_fun_no" ],
		"etc1": [ "member_no", "" ],
		"etc2": [ "value", "" ],
		"etc3": [ "value2", "" ],
		"etc4": [ "function", "" ],
		"etc5": [ "COUNTRY", "" ]/*,*/
	} :
	{
		"depA": [ "PRM_DEPAREA", "" ],
		"dep": [ "PRM_DEPARTURE", "PRM_DEPT_CD" ],
		"arrA": [ "PRM_ARRAREA", "" ],
		"arr": [ "PRM_ARRIVAL", "PRM_ARVL_CD" ],
		"rtnDep": [ "PRM_OPEN_DEPARTURE", "" ],
		"rtnArr": ["PRM_OPEN_ARRIVAL", "" ],
		"depMon": [ "PRM_MEETINGMONTH", "PRM_OUTWARD_MON" ],
		"depDay": [ "PRM_MEETINGDATE", "PRM_OUTWARD_DAY" ],
		"rtnMon": [ "PRM_SENDINGMONTH", "PRM_HOMEWARD_MON" ],
		"rtnDay": [ "PRM_SENDINGDATE", "PRM_HOMEWARD_DAY" ],

		"send": [ "PRM_RADIO_SEND", "" ],

		"age1": [ "PRM_SEATADULT", "PRM_SEAT_ADULT" ],
		"age2": [ "PRM_SEATCHILD", "PRM_SEAT_CHILD" ],
		"age3": [ "PRM_SEATINFANT", "PRM_SEAT_INFANT" ],

		"cls": [ "PRM_ITEM_ID", "" ],
		"clsNo": [ "PRM_ITEM_NO", "" ],

		"rgn": [ "PRM_RGN_CD", "" ],
		"co": [ "PRM_COUNTRY_CD", "" ],
		"lang": [ "PRM_LANGUAGE", "" ],
		"site": [ "PRM_SITE", "" ],

		"root": [ "PRM_DCM_ROOT", "" ],	//海外地区用? スケジュールには不要
		"ndic": [ "PRM_DCM_INDICATOR", "" ]/*,*/	//海外地区用? スケジュールには不要
	};

//	クッキーに保存するパラメータ
var cookieKeyList = [ /*"depA", */"dep", "rtnDep", /*"arrA", */"arr", "rtnArr", "depMon", "depDay", "rtnMon", "rtnDay" ];	//	ブラウザが保持できる1サイトあたりのクッキー数には制限があるので、必要なパラメータだけとする

//	スケジュール案内で不要なパラメータ
var schedDisabledList = isJapanRegion ?
	[ "age1", "age2", "age3", "clsSp", "clsSt", "fun", "etc1", "etc2", "etc3", "etc4", "etc5", "etc6" ] :
	[ "age1", "age2", "age3", "cls", "clsNo", "root", "ndic" ];

//	オープンジョーでのみ必要なパラメータ
var nonOJDisabledList = [ "rtnDep", "rtnArr" ];

//	新旧両フローで共通のパラメータ
var commonList = [ "fun" ];

//	送信しないパラメータ
var disabledList = [ "isOJ" ];	//編集不可


/* /[ 初期設定: パラメータの定義リスト ] */


/* [ 初期設定: カレンダーのパス ] */
var calendarPath = isJapanRegion ? "/inter/cal.htm" : "/world/common/cal.htm";
/* /[ 初期設定: カレンダーのパス ] */


var inputForm = "fareFormInput";	//	入力用フォーム
var formPtn = /^fareFormInput\d*$/gi;
var submitForm = "fareFormSubmit";	//	送信用フォーム
var submitFormId = "fareFormSubmitPrm";	//	送信用フォームを書き出す箇所
var inFrm, sbFrm, inElm, sbElm;
var formSffxs = [];
var formSffx;


/* [ 送信用フォームの書き出し、入力用、送信用フォームのオブジェクトを変数にセット ] */
function createSubmitForm() {
	var nodes = document.getElementsByTagName( "form" );
	var firstFormSffx;
	var flg = 0;
	for( var i = 0; i < nodes.length; i ++ ) {
		var node = nodes[i];
		if( node.name ) var ret = node.name.match( formPtn );
		if( ret ) {
			var str = ret.toString();
			var start = inputForm.length;
			var end = str.length;
			var sffx = str.substring( start, end );
			formSffxs[formSffxs.length] = sffx;
			if( !flg ) firstFormSffx = sffx;
			flg ++;
		}
	}

	for( var i = 0; i < formSffxs.length; i ++ ) {
		formSffx = formSffxs[i];
/*テスト用*/		var str = '<form method="get" action="" name="' + submitForm + formSffx + '" target="_self">';
/*本番用*///		var str = '<form method="post" action="" name="' + submitForm + formSffx + '" target="_self">';
		for( var key in prm )
			for( var j = 0; j <= 1; j ++ )
				if( prm[key][j] ) {
					if( j > 0 && prm[key][0] == prm[key][1] ) true;	//	continue を使いたい
/*テスト用*///					else str += prm[key][j] + '&nbsp;<input type="text" name="' + prm[key][j] + '" value=""><br>';
/*本番用*/					else str += '<input type="hidden" name="' + prm[key][j] + '" value="">';
				}
/*テスト用*///			str += '<input type="text" name="isOJ" value="">';
/*本番用*/			str += '<input type="hidden" name="isOJ" value="">';
				str += '<input type="hidden" name="programPath" value="">';//	検索プログラムのパスを保持するパラメータ
		str += "</form>";
		var id = submitFormId + formSffx;
		document.getElementById( id ).innerHTML = str;
	}

	inFrm = document.forms[ inputForm + firstFormSffx ];
	sbFrm = document.forms[ submitForm + firstFormSffx ];
	inElm = inFrm.elements;
	sbElm = sbFrm.elements;
	formSffx = firstFormSffx;
}
/* /[ 送信用フォームの書き出し、入力用、送信用フォームのオブジェクトを変数にセット ] */



/* [ モジュールが複数ある場合の、操作対象モジュールの切り替え ] */
function toggleForms( n ) {
	if( n || eval( n ) == 0 ) var sffx = n.toString();
	else var sffx = "";

	if( document.forms[ inputForm + sffx ] ) {
		inFrm = document.forms[ inputForm + sffx ];
		sbFrm = document.forms[ submitForm + sffx ];
		inElm = inFrm.elements;
		sbElm = sbFrm.elements;
		formSffx = sffx;
	}
}
/* /[ モジュールが複数ある場合の、操作対象モジュールの切り替え ] */


	//	[ 以下で使用される式の例 ]
	//
	//	[0] と [1] の違い (旧フロー or 新フロー)
	//		sbElm[prm["dep"][0]]	送信用フォーム中にある要素 "PRM_DEPARTURE" を指す
	//		sbElm[prm["dep"][1]]	送信用フォーム中にある要素 "PRM_DEPT_CD" を指す
	//
	//	inElm と sbElm の違い (入力用フォーム or 送信用フォーム)
	//		inElm[prm["etc1"][0]]	入力用フォーム中にある要素 "member_no" を指す
	//		sbElm[prm["age1"][0]]	送信用フォーム中にある要素 "PRM_SEATADULT" を指す
	//


/* [ 送信用フォームに入力用フォームの値をセット、クッキー送信 ] */
function copyPrm( newFlg ) {
	//	送信用フォームに、入力用フォームの値をセット
	//	新or旧フローに不要なパラメータは送らないようにする
	//	旧フローの clsSp, clsSt の切り分けは changePrm 内で処理している

	var x, y;
	if( newFlg ) { x = false; y = true; }	//	新フローなら...
	else { x = true; y = false; }	//	旧フローなら...

	var inNode, sbNode;
	for( var i = 0; i <= 1; i ++ ) {	//	i = 0 は旧フローパラメータの、i = 1 は新フローパラメータの処理
		var disableFlg = i ? x : y;	//	i = 0 なら flag = x、i = 1 なら flag = y
		for( var key in prm ) {
			var value = "";
			if( prm[key][i] && ( sbNode = sbElm[prm[key][i]] )) {
				if( inNode = inElm[key] ) {
					var type;
					if( inNode.type ) type = inNode.type;
					else if( inNode[0].type ) type = inNode[0].type;
					switch( type ) {
						case "text": value = inNode.value; break;
						case "hidden": value = inNode.value; break;
						case "checkbox": value = inNode.value; break;
						case "select-one": value = inNode.options[inNode.selectedIndex].value; break;
						case "radio":
							for( var j = 0; j < inNode.length; j ++ )
								if ( inNode[j].checked ) value = inNode[j].value;
							break;
					}
					sbNode.value = value;	//	送信用のフォームに値をコピー
				}
				sbNode.disabled = disableFlg;	//	フローに必要なパラメータは有効にし、不要なものは無効に
			}
		}

		if( isJapanRegion ) {
			for( var j = 0; j < commonList.length; j ++ ) {
				var key = commonList[j];
				if( prm[key][i] && ( sbNode = sbElm[prm[key][i]] )) sbNode.disabled = false;	//	両フローに共通なパラメータは有効に
			}
		}

		/* [ クッキーの送信 ] */
		var domain = document.domain;
//		var domain = "jal.co.jp";
		var path = "/";
//		var expires = "";
		for( var j = 0; j < cookieKeyList.length; j ++ ) {
			var key = cookieKeyList[j];
			if( prm[key][i] && ( sbNode = sbElm[prm[key][i]] ))
				if( i > 0 && prm[key][0] == prm[key][1] ) true;	//	continue
				else {
					var value = key + formSffx + "=" + escape( sbNode.value ) + ";";
					value += "domain=" + domain + ";";
					value += "path=" + path + ";";
//						value += "expires=" + expires + ";";
					document.cookie = value;
				}
		}
		/* /[ クッキーの送信 ] */

	}
	return false;
}
/* /[ 送信用フォームに入力用フォームの値をセット、クッキー送信 ] */


/* [ 入力用フォームの値の操作、送信用フォームの遷移先の切り分け ] */
function changePrm( sbmtFlg, sched ) {
	//	主に clsSp の値による入力用フォームの操作に関する処理
	//	一部、それに伴う送信用フォームの操作も含む

//	var sbmtFlg = arguments.length ? arguments[0] : 0;	//	引数指定しなくても length が 1 になる??

	var openJawFlg = eval( sbElm["isOJ"].value ) ? true : false;

	/* [ スケジュール案内の場合 ] */
	if( sched == "s" ) {
		if( sbmtFlg ) {
			if( isJapanRegion && !isEn ) {
				sbFrm.action = schedAction;
				sbElm["programPath"].disabled = "true";
			}
			else {
				sbFrm.action = framesetAction;
				sbFrm.method = "get";
				sbElm["programPath"].value = schedAction;
			}
			copyPrm( 0 );
		}

		for( var i = 0; i < schedDisabledList.length; i ++ ) {
			var key = schedDisabledList[i];
			if( prm[key][0] && ( sbNode = sbElm[prm[key][0]] )) sbNode.disabled = true;	//	スケジュール案内に不要なパラメータは無効に
		}

	}
	/* /[ スケジュール案内の場合 ] */


	/* [ チケット検索の場合 ] */
	else {
		if( sbmtFlg ) sbElm["programPath"].disabled = "true";

		/* [ 日本地区日本語サイトの場合 ] */
		if( isJapanRegion && !isEn ) {
			var inNode, inNode2, sbNode;
			var loginFlg = ( typeof Hantei != "function" ) ? false : Hantei();

			/* [ clsSp の値による処理の振り分け ] */
			if( inNode = inElm["clsSp"] ) {

				/* [ 初期化 ] */
				if( inNode2 = inElm["clsSt"] ) inNode2.value = "";
				if( sbNode = sbElm[prm["clsSp"][0]] ) sbNode.disabled = false;	//	送信用フォーム"割引運賃"を有効に
				if( sbNode = sbElm[prm["clsSt"][0]] ) sbNode.disabled = false;	//	送信用フォーム"普通運賃"を有効に
				/* /[ 初期化 ] */

				var value, type;
				if( inNode.type ) type = inNode.type;
				else if( inNode[0].type ) type = inNode[0].type;
				switch( type ) {
					case "text": value = inNode.value; break;
					case "hidden": value = inNode.value; break;
					case "checkbox": value = inNode.value; break;
					case "select-one": value = inNode.options[inNode.selectedIndex].value; break;
					case "radio":
						for( var j = 0; j < inNode.length; j ++ )
							if ( inNode[j].checked ) value = inNode[j].value;
						break;
				}
				switch( value ) {
					case "エコノミー":	//	新フロー
						sbFrm.action = loginFlg ? dspchAction : newFlowAction;
						if( inNode2 = inElm["fun"] ) inNode2.value = "5";
						if( inNode2 = inElm["send"] ) {
							var type;
							if( inNode2.type ) type = inNode2.type;
							else if( inNode2[0].type ) type = inNode2[0].type;
							if( type == "radio" ) {
								inNode2[0].checked = true;	//	入力用フォーム"往復・片道"の、往復をチェック
								inNode2[0].disabled = inNode2[1].disabled = true;	//	入力用フォーム"往復・片道"を無効に
							}
						}
						if( sbmtFlg ) copyPrm( 1 );	//	新フローとしてcopyPrmを実行	ここでパラメータが、一括で新・旧で有効・無効に振り分けられる
						break;

					case "割引運賃で探す":	//	旧フロー
						sbFrm.action = loginFlg ? dspchAction : oldFlowAction;
						if( inNode2 = inElm["fun"] ) inNode2.value = !openJawFlg ? "3" : "34";
						if( inNode2 = inElm["send"] ) {
							var type;
							if( inNode2.type ) type = inNode2.type;
							else if( inNode2[0].type ) type = inNode2[0].type;
							if( type == "radio" ) {
								inNode2[0].checked = true;	//	入力用フォーム"往復・片道"の、往復をチェック
								inNode2[0].disabled = inNode2[1].disabled = true;	//	入力用フォーム"往復・片道"を無効に
							}
						}
						if( sbmtFlg ) copyPrm( 0 );	//	旧フローとしてcopyPrmを実行	ここでパラメータが、一括で新・旧で有効・無効に振り分けられる

						//	copyPrm 実行後の送信用フォームに関する追加処理(旧フロー内の例外)
						if( sbNode = sbElm[prm["clsSp"][0]] ) sbNode.disabled = false;	//	送信用フォーム"割引運賃"を有効に
						if( sbNode = sbElm[prm["clsSt"][0]] ) sbNode.disabled = true;	//	送信用フォーム"普通運賃"を無効に
						break;

					case "普通運賃で探す":	//	旧フロー
						sbFrm.action = loginFlg ? dspchAction : oldFlowAction;
						if( inNode2 = inElm["fun"] ) inNode2.value = !openJawFlg ? "3" : "33";
						if( inNode2 = inElm["clsSt"] ) inNode2.value = inNode.value;	//	入力用フォーム"普通運賃"に"割引運賃"の値をコピー
						if(( inNode2 = inElm["send"] ) && !openJawFlg ) {
							var type;
							if( inNode2.type ) type = inNode2.type;
							else if( inNode2[0].type ) type = inNode2[0].type;
							if( type == "radio" ) inNode2[0].disabled = inNode2[1].disabled = false;	//	入力用フォーム"往復・片道"を有効に
						}
						if( sbmtFlg ) copyPrm( 0 );	//	旧フローとしてcopyPrmを実行	ここでパラメータが、一括で新・旧で有効・無効に振り分けられる

						//	copyPrm 実行後の送信用フォームに関する追加処理(旧フロー内の例外)
						if( sbNode = sbElm[prm["clsSp"][0]] ) sbNode.disabled = true;	//	送信用フォーム"割引運賃"を無効に
						if( sbNode = sbElm[prm["clsSt"][0]] ) sbNode.disabled = false;	//	送信用フォーム"普通運賃"を有効に
						break;

					default:
						break;
				}
			}
			/* /[ clsSp の値による処理の振り分け ] */
		}
		/* /[ 日本地区日本語サイトの場合 ] */

		/* [ 海外地区の場合 ] */
		else {
			sbFrm.action = oldFlowAction;
			if( sbmtFlg ) sbFrm.target = "otherwindow";

			var inNode, inNode2, sbNode;
			/* [ cls の値による処理の振り分け ] */
			if( inNode = inElm["cls"] ) {
				var value, type;
				if( inNode.type ) type = inNode.type;
				else if( inNode[0].type ) type = inNode[0].type;
				switch( type ) {
					case "text": value = inNode.value; break;
					case "hidden": value = inNode.value; break;
					case "checkbox": value = inNode.value; break;
					case "select-one": value = inNode.options[inNode.selectedIndex].value; break;
					case "radio":
						for( var j = 0; j < inNode.length; j ++ )
							if ( inNode[j].checked ) value = inNode[j].value;
						break;
				}
				if( value == "S10001" || value == "S10002" || value == "S10003" ) {
					if( inNode2 = inElm["send"] ) {
						var type;
						if( inNode2.type ) type = inNode2.type;
						else if( inNode2[0].type ) type = inNode2[0].type;
						if( type == "radio" ) inNode2[0].disabled = inNode2[1].disabled = false;
					}
					if( sbmtFlg ) copyPrm( 0 );
				}
				else {
					if( inNode2 = inElm["send"] ) {
						var type;
						if( inNode2.type ) type = inNode2.type;
						else if( inNode2[0].type ) type = inNode2[0].type;
						if( type == "radio" ) {
							inNode2[0].checked = true;
							inNode2[0].disabled = inNode2[1].disabled = true;
						}
					}
					if( sbmtFlg ) copyPrm( 0 );
				}
			}
			/* /[ cls の値による処理の振り分け ] */
		}
		/* /[ 海外地区の場合 ] */
	}
	/* /[ チケット検索の場合 ] */

	if( !openJawFlg ) {
		for( var i = 0; i < nonOJDisabledList.length; i ++ ) {
			var key = nonOJDisabledList[i];
			if( prm[key][0] && ( sbNode = sbElm[prm[key][0]] )) sbNode.disabled = true;	//	オープンジョーでなければ不要なパラメータは無効に
		}
	}

	for( var i = 0; i < disabledList.length; i ++ ) {
		var key = disabledList[i];
		if( sbNode = sbElm[key] ) sbNode.disabled = true;	//	送信しないパラメータは無効に
	}

	if( sbmtFlg ) sbFrm.submit();
	return false;
}
/* /[ 入力用フォームの値の操作、送信用フォームの遷移先の切り分け ] */
/* /[ モジュールのパラメータと遷移先の切り分け機能 ] */




/* [ クッキーの値の取得 ] */
function getValueFromCookie( cookieKey ) {
	var data = ( document.cookie ) ? document.cookie.split( ';' ) : [];
	var value;
	for( var i in data )
		if( data[i].split( '=' )[0].replace( /\s/g, '' ) == cookieKey )
			if( value = data[i].split( '=' )[1] )
				return unescape( value ).replace( /\s/g, '' );
}
/* /[ クッキーの値の取得 ] */




/* [ エリアと都市の連動機能 ] */

/* [ 英語サイトの <head> 内で citySetup の代わりに利用する関数 ] */
var englishFlg = 0;

function citySetupEn( listNum, DepArrFlg, cityCode, areaCode, areaDispFlg, returnCityCode ) {
	englishFlg = 1;
	citySetup( listNum, DepArrFlg, cityCode, areaCode, areaDispFlg, returnCityCode );
	englishFlg = 0;
}
/* /[ 英語サイトの <head> 内で citySetup の代わりに利用する関数 ] */


function citySetup( listNum, DepArrFlg, cityCode, areaCode, areaDispFlg, returnCityCode ) {

	//	[ 引数の説明 ]
	//		listNum
	//			参照する空港リストを 0〜6 で指定
	//		DepArrFlg
	//			出発 "d" or 到着 "a"
	//		cityCode
	//			都市プルダウン内で、selected にする都市
	//			selected の都市を特定しない場合は 0
	//		areaCode
	//			都市プルダウンを表示するエリア
	//			エリアプルダウンに onChange で設置する場合は this.options[this.selectedIndex].value と記述する
	//			0 あるいは "" と指定するとエリアを絞らず、参照する空港リスト中の全都市を表示する
	//		areaDispFlg
	//			1: onLoadでcitySetup実行時にエリアプルダウンを表示
	//			0: 非表示、-1: onChangeでcitySetup実行時
	//		returnCityCode
	//			都市プルダウン内で、selected にする都市 (cityCode のオープンジョーの復路版)
	//			selected の都市を特定しない場合は 0
	//

	var openJawFlg = ( typeof returnCityCode != "undefined" ) ? true : false;
	sbElm["isOJ"].value = openJawFlg ? "1": "0";

	var areaTitle, cityTitle, areaName, cityName, returnCityName, cityBlockId, returnCityBlockId;
	switch( DepArrFlg ) {
		case "d":
			areaTitle = englishFlg ?	//	エリアプルダウンの最初の選択肢に表示するテキスト
				'Departure Area' :
				'\u51FA\u767A\u30A8\u30EA\u30A2';	//	出発エリア
			if( englishFlg )
				cityTitle = openJawFlg ?	//	都市プルダウンの最初の選択肢に表示するテキスト
					'Select Area' :
					'Departure City';
			else
				cityTitle = openJawFlg ?
					'\u30A8\u30EA\u30A2\u3092\u6307\u5B9A\u3057\u3066\u4E0B\u3055\u3044' :	//	エリアを指定して下さい
					'\u51FA\u767A\u90FD\u5E02';	//	出発都市
			if( englishFlg )
				returnCityTitle = openJawFlg ?	//	cityTitle のオープンジョーの復路版
					'Select Area' :
					'Arrival City';
			else
				returnCityTitle = openJawFlg ?
					'\u30A8\u30EA\u30A2\u3092\u6307\u5B9A\u3057\u3066\u4E0B\u3055\u3044' :	//	エリアを指定して下さい
					'\u5230\u7740\u90FD\u5E02';	//	到着都市
			areaName = "depA";	//	エリア(hidden)の name 属性	プルダウンの name 属性は後ろに "0" を付けたもの
			cityName = "dep";	//	都市(hidden)の name 属性	プルダウンの name 属性は後ろに "0" を付けたもの
			returnCityName = "rtnArr";	//	cityName のオープンジョーの復路版
			areaBlockId = "depAreaBlock";	//	エリアプルダウンを表示する箇所の id (innerHTML プロパティを使用)
			cityBlockId = "depCityBlock";	//	都市プルダウンを表示する箇所の id (innerHTML プロパティを使用)
			returnCityBlockId = "rtnArrCityBlock";	//	cityBlockId のオープンジョーの復路版
			break;
		case "a":
			areaTitle = englishFlg ?
				'Arrival Area' :
				'\u5230\u7740\u30A8\u30EA\u30A2';	//	到着エリア
			if( englishFlg )
				cityTitle = openJawFlg ?
					'Select Area' :
					'Arrival City';
			else
				cityTitle = openJawFlg ?
					'\u30A8\u30EA\u30A2\u3092\u6307\u5B9A\u3057\u3066\u4E0B\u3055\u3044' :	//	エリアを指定して下さい
					'\u5230\u7740\u90FD\u5E02';	//	到着都市
			if( englishFlg )
				returnCityTitle = openJawFlg ?
					'Select Area' :
					'Departure City';
			else
				returnCityTitle = openJawFlg ?
					'\u30A8\u30EA\u30A2\u3092\u6307\u5B9A\u3057\u3066\u4E0B\u3055\u3044' :	//	エリアを指定して下さい
					'\u51FA\u767A\u90FD\u5E02';	//	出発都市
			areaName = "arrA";
			cityName = "arr";
			returnCityName = "rtnDep";
			areaBlockId = "arrAreaBlock";
			cityBlockId = "arrCityBlock";
			returnCityBlockId = "rtnDepCityBlock";
			break;
	}

	var list;
	switch( listNum ) {	//	参照する空港リストの切り分け
		case 0: list = airportList; break;	//	国際線トップ、index05、スケジュール案内用
		case 1: list = airportListLtd; break;	//	HOME、index03用 (新フロー)
		case 2: list = airportList_goku; break;	//	JAL悟空運賃ページ用 (新フロー)
		case 3: list = airportList_eco; break;	//	エコノミーセイバー運賃ページ用 (新フロー)
		case 4: list = airportList_ecoplus; break;	//	エコノミーセイバープラス運賃ページ用 (新フロー)
		case 5: list = airportList_biz; break;	//	ビジネスセイバー運賃ページ用 (旧フロー割引運賃)
		case 6: list = airportList_normal; break;	//	大人普通運賃運賃ページ用 (旧フロー普通運賃)
		case 7: list = airportList_AU; break;	//	海外地区サイト (AU) 運賃用 (旧フロー)
		case 8: list = airportList_HK; break;	//	海外地区サイト (HK) 運賃用 (旧フロー)
		case 9: list = airportList_SG_dep; break;	//	海外地区サイト (SG) 運賃用 (出発地) (旧フロー)
		case 10: list = airportList_SG_arr; break;	//	海外地区サイト (SG) 運賃用 (到着地) (旧フロー)
	}

	var inNode, inNode2, elm;
	var areaSelIndex = 0;	//	エリアプルダウンの selectedIndex
	var citySelIndex = 0;	//	都市プルダウンの selectedIndex


	/* [ 都市プルダウンに関する処理 ] */
	var strCity = '<select name="' + cityName + "0" + '" onChange=\'toggleForms( ' + formSffx + ' ); if( inNode = inElm["' + cityName + '"] ) inNode.value = this.options[this.selectedIndex].value;\'>';

	/* [ cityCode の値から areaCode の値を特定 ] */
	if( !areaCode ) {
		label01:
		for( var i = 0; i < list.length; i ++ ) {
			for( var j = 0; j < list[i][3].length; j ++ ) {
				if( list[i][3][j][0] == cityCode ) {
					areaCode = list[i][0];
					break label01;
				}
			}
		}
	}
	/* /[ cityCode の値から areaCode の値を特定 ] */

	if( !areaCode ) {
		strCity += '<option value="" selected>' + cityTitle + "</option>";
		for( var i = 0; i < list.length; i ++ ) {
			for( var j = 0; j < list[i][3].length; j ++ ) {
				strCity += !englishFlg ?	//	全エリアの都市を表示
					'<option value="' + list[i][3][j][0] + '">' + list[i][3][j][1] + "</option>" :
					'<option value="' + list[i][3][j][0] + '">' + list[i][3][j][2] + "</option>";
			}
		}
	}
	else {
		if( JLJS.env.isMac && JLJS.env.isIE || JLJS.env.isSafari )	//	書き出したoptionsを参照できない(Mac IE)、違う要素から<select>が操作された時onChangeとみなされない(Mac IE, Safari)
			strCity += '<option value="" selected>' + cityTitle + "</option>";
		for( var i = 0; i < list.length; i ++ ) {
			if( areaCode == list[i][0] ) {
				for( var j = 0; j < list[i][3].length; j ++ ) {
					strCity += !englishFlg ?	//	選択エリアの都市を表示
						'<option value="' + list[i][3][j][0] + '">' + list[i][3][j][1] + "</option>" :
						'<option value="' + list[i][3][j][0] + '">' + list[i][3][j][2] + "</option>";
					if( cityCode && list[i][3][j][0] == cityCode ) citySelIndex = j;
				}
			}
		}
	}

	strCity += '</select>';
	if( elm = document.getElementById( cityBlockId + formSffx )) elm.innerHTML = strCity;	//	都市プルダウンを innerHTML プロパティで表示
	if( inNode = inElm[cityName + "0"] ) {
		if( JLJS.env.isMac && JLJS.env.isIE || JLJS.env.isSafari ) true;	//	書き出したoptionsを参照できない(Mac IE)、違う要素から<select>が操作された時onChangeとみなされない(Mac IE, Safari)
		else {
			inNode.selectedIndex = citySelIndex;	//	都市プルダウンの selected の項目を設定
			if( inNode2 = inElm[cityName] ) inNode2.value = inNode.options[citySelIndex].value;
		}
	}

	/* [ オープンジョーの場合 ] */
	if( openJawFlg ) {
		var strCity = '<select name="' + returnCityName + "0" + '" onChange=\'toggleForms( ' + formSffx + ' ); if( inNode = inElm["' + returnCityName + '"] ) inNode.value = this.options[this.selectedIndex].value;\'>';

		if( !areaCode ) {
			strCity += '<option value="" selected>' + returnCityTitle + "</option>";
			for( var i = 0; i < list.length; i ++ ) {
				for( var j = 0; j < list[i][3].length; j ++ ) {
					strCity += !englishFlg ?	//	全エリアの都市を表示
						'<option value="' + list[i][3][j][0] + '">' + list[i][3][j][1] + "</option>" :
						'<option value="' + list[i][3][j][0] + '">' + list[i][3][j][2] + "</option>";
				}
			}
		}
		else {
			if( JLJS.env.isMac && JLJS.env.isIE || JLJS.env.isSafari )	//	書き出したoptionsを参照できない(Mac IE)、違う要素から<select>が操作された時onChangeとみなされない(Mac IE, Safari)
				strCity += '<option value="" selected>' + returnCityTitle + "</option>";
			for( var i = 0; i < list.length; i ++ ) {
				if( areaCode == list[i][0] ) {
					for( var j = 0; j < list[i][3].length; j ++ ) {
						strCity += !englishFlg ?	//	選択エリアの都市を表示
							'<option value="' + list[i][3][j][0] + '">' + list[i][3][j][1] + "</option>" :
							'<option value="' + list[i][3][j][0] + '">' + list[i][3][j][2] + "</option>";
						if( cityCode && list[i][3][j][0] == returnCityCode ) citySelIndex = j;
					}
				}
			}
		}

		strCity += '</select>';
		if( elm = document.getElementById( returnCityBlockId + formSffx )) elm.innerHTML = strCity;	//	都市プルダウンを innerHTML プロパティで表示
		if( inNode = inElm[returnCityName + "0"] ) {
			if( JLJS.env.isMac && JLJS.env.isIE || JLJS.env.isSafari ) true;	//	書き出したoptionsを参照できない(Mac IE)、違う要素から<select>が操作された時onChangeとみなされない(Mac IE, Safari)
			else {
				inNode.selectedIndex = citySelIndex;	//	都市プルダウンの selected の項目を設定
				if( inNode2 = inElm[returnCityName] ) inNode2.value = inNode.options[citySelIndex].value;
			}
		}
	}
	/* /[ オープンジョーの場合 ] */
	/* /[ 都市プルダウンに関する処理 ] */


	/* [ エリアプルダウンに関する処理 ] */
	var strArea = "";
	switch( areaDispFlg ) {
		/* [ エリアプルダウンは操作しない場合 ] *///	エリアプルダウンの onChange 時
		case -1:
			break;
		/* /[ エリアプルダウンは操作しない場合 ] */


		/* [ エリアプルダウンを表示せず hidden で値を記述する場合 ] */
		case 0:
			if( inNode = inElm[areaName] ) inNode.value = areaCode;
//			strArea += '<input type="hidden" name="' + areaName + '" value="' + areaCode + '">';
//			if( elm = document.getElementById( areaBlockId )) elm.innerHTML = strArea;	//	エリア項目を innerHTML プロパティで表示
			break;
		/* /[ エリアプルダウンを表示せず hidden で値を記述する場合 ] */


		/* [ エリアプルダウンを表示する場合 ] *///	フォームロード時
		case 1:
			strArea += '<select name="' + areaName + "0" + '" onChange=\'';
			strArea += 'toggleForms( ' + formSffx + ' ); ';

			if( JLJS.env.isMac && JLJS.env.isIE || JLJS.env.isSafari ) {	//	書き出したoptionsを参照できない(Mac IE)、違う要素から<select>が操作された時onChangeとみなされない(Mac IE, Safari)
				strArea += 'if( inNode = inElm["' + cityName + '"] ) inNode.value = ""; ';
				if( openJawFlg ) strArea += 'if( inNode = inElm["' + returnCityName + '"] ) inNode.value = ""; ';
			}

			strArea += 'if( inNode = inElm["' + areaName + '"] ) inNode.value = this.options[this.selectedIndex].value; ';
			strArea += !englishFlg ?
				'citySetup( ' + listNum + ', "' + DepArrFlg + '", 0, this.options[this.selectedIndex].value, -1' :
				'citySetupEn( ' + listNum + ', "' + DepArrFlg + '", 0, this.options[this.selectedIndex].value, -1';
			if( openJawFlg ) strArea += ', "' + returnCityCode + '"';
			strArea += ' );\'>';
			strArea += '<option value="" selected>' + areaTitle + "</option>";
			for( var i = 0; i < list.length; i ++ )
				strArea += !englishFlg ?	//	全エリアを表示
					'<option value="' + list[i][0] + '">' + list[i][1] + "</option>" :
					'<option value="' + list[i][0] + '">' + list[i][2] + "</option>";
			strArea += '</select>';

			if( elm = document.getElementById( areaBlockId + formSffx )) elm.innerHTML = strArea;	//	エリアプルダウンを innerHTML プロパティで表示

			if( inNode = inElm[areaName + "0"] ) {
				for( var i = 0; i < inNode.options.length; i ++ )
					if( areaCode && inNode.options[i].value == areaCode ) areaSelIndex = i;	
				inNode.selectedIndex = areaSelIndex;	//	エリアプルダウンの selected の項目を設定
				if( inNode2 = inElm[areaName] ) inNode2.value = inNode.options[areaSelIndex].value;
			}
			break;
		/* /[ エリアプルダウンを表示する場合 ] */
	}
	/* /[ エリアプルダウンに関する処理 ] */
	changePrm( 0 );
}
/* /[ エリアと都市の連動機能 ] */



/* [ 日付部分の操作 ] */
var depMonNode = null;
var depDayNode = null;
var rtnMonNode = null;
var rtnDayNode = null;

function dateVariableInit() {
	depMonNode = inElm["depMon"];
	depDayNode = inElm["depDay"];
	rtnMonNode = inElm["rtnMon"];
	rtnDayNode = inElm["rtnDay"];
}

function dateSpecify() {
	dateVariableInit();

	var departureMon = arguments[0];
	var departureDay = arguments[1];
	var returnMon = arguments[2];
	var returnDay = arguments[3];

	var S, inNode, inNode2, m, d;
	if( depMonNode && depDayNode ) {
		inNode = depMonNode;
		inNode2 = depDayNode;
		S = new JLJS_DateSelector( inNode, inNode2 );
		S.adjustToToday();

		if(
			( typeof departureMon == "string" && departureMon.match( "today" )) ||
			( typeof departureDay == "string" && departureDay.match( "today" ))
		) {
			if( departureMon.match( "today" )) {
				var offset = departureMon.replace( "today", "" );
				S.applyOffset( offset + "m" );
			}
			if( departureDay.match( "today" )) {
				var offset = departureDay.replace( "today", "" );
				S.applyOffset( offset + "d" );
			}
		}
		else {
			if( isJapanRegion )
//				S.applyOffset( '+1m' );	//	1ヶ月後
				S.applyOffset( '+30d' );	//	30日後
			else if( isAustraliaRegion )
				S.applyOffset( '+14d' );
			else if( isHongKongRegion )
				S.applyOffset( '+4d' );
			else if( isSingaporeRegion )
				S.applyOffset( '+5d' );
		}

		d = inNode2.selectedIndex + 1;
		if( departureMon ) S.adjustToDate( departureMon + "-" + d );	//	デフォルト月を表示
		m = inNode.selectedIndex + 1;
		if( departureDay ) S.adjustToDate( m + "-" + departureDay );	//	デフォルト日を表示
	}

	if( rtnMonNode && rtnDayNode ) {
		inNode = rtnMonNode;
		inNode2 = rtnDayNode;
		S = new JLJS_DateSelector( inNode, inNode2 );
		S.adjustToToday();

		if(
			( typeof returnMon == "string" && returnMon.match( "today" )) ||
			( typeof returnDay == "string" && returnDay.match( "today" ))
		) {
			if( returnMon.match( "today" )) {
				var offset = returnMon.replace( "today", "" );
				S.applyOffset( offset + "m" );
			}
			if( returnDay.match( "today" )) {
				var offset = returnDay.replace( "today", "" );
				S.applyOffset( offset + "d" );
			}
		}
		else {
			if( isJapanRegion )
//				S.applyOffset( "+1m", "+4d" );	//	1ヶ月 + 4日後
				S.applyOffset( "+34d" );	//	34日後
			else if( isAustraliaRegion )
				S.applyOffset( "+19d" );
			else if( isHongKongRegion )
				S.applyOffset( '+8d' );
			else if( isSingaporeRegion )
				S.applyOffset( '+10d' );
		}

		d = inNode2.selectedIndex + 1;
		if( returnMon ) S.adjustToDate( returnMon + "-" + d );	//	デフォルト月を表示
		m = inNode.selectedIndex + 1;
		if( returnDay ) S.adjustToDate( m + "-" + returnDay );	//	デフォルト日を表示
	}
}

var dNow = new Date();
var iType;

function GetYear( AiMonth, AiDate ) {
	if( AiMonth < parseInt( dNow.getMonth()) + 1 )
		return parseInt( dNow.getFullYear()) + 1;
	if(
		( AiMonth < parseInt( dNow.getMonth()) + 1 ) &&
		( AiDate < parseInt( dNow.getDate()))
	)
		return parseInt( dNow.getFullYear()) + 1;
	else return parseInt( dNow.getFullYear());
}

function AddDate( AiMonth, AiDate,AiAddDate ) {
	var dDate = new Date( GetYear( AiMonth, AiDate ), parseInt( AiMonth ) - 1 ,AiDate );
	dDate.setDate( AiDate + AiAddDate );
	dateRet = dDate;
	return dDate;
}

function ChangeDate() {
	dateVariableInit();

	rtnMonNode.selectedIndex = isJapanRegion ?
		AddDate( parseInt( depMonNode.selectedIndex ) + 1, parseInt( depDayNode.selectedIndex + 1 ), 4 ).getMonth() :
		AddDate( parseInt( depMonNode.selectedIndex ) + 1, parseInt( depDayNode.selectedIndex + 1 ), 5 ).getMonth();
	rtnDayNode.selectedIndex = isJapanRegion ?
		AddDate( parseInt( depMonNode.selectedIndex ) + 1, parseInt( depDayNode.selectedIndex + 1 ), 4 ).getDate() - 1:
		AddDate( parseInt( depMonNode.selectedIndex ) + 1, parseInt( depDayNode.selectedIndex + 1 ), 5 ).getDate() - 1;
	return;
}



/* [ カレンダーに関する操作 ] */
var calDepArr = null;

function calSet() {
	var findFlag;

	switch( calDepArr ) {
		case 1:
		var monNode = depMonNode;
		var dayNode = depDayNode;
		break;

		case 2:
		var monNode = rtnMonNode;
		var dayNode = rtnDayNode;
		break;
	}

	if( month < 0 ) month = month + 12;

	findFlag = false;
	for( i = 0; i < monNode.length; i ++ ) {
		if( monNode[i].value == month + 1 ) {
			findFlag = true;
			break;
		}
	}
	if( !findFlag ) i = 0;
	monNode.selectedIndex = i;

	findFlag = false;
	for( i = 0; i < dayNode.length; i ++ ) {
		if( dayNode[i].value == day ) {
			findFlag = true;
			break;
		}
	}
	if( !findFlag ) i = 0;
	dayNode.selectedIndex = i;

	if( calDepArr == 1 ) ChangeDate();
	mywindow.close();
}

function calWin( n ) {
	calDepArr = n;
	todayymd = new Date();
	year = todayymd.getFullYear();
	month = todayymd.getMonth();
	day = todayymd.getDate();
	var properties = "titlebar=0,resizable=no,width=600,height=320";
	mywindow = open( '', 'newcalwin', properties );
	mywindow.focus();
	mywindow.location.href = '/dom/cal3m.html';
	if( !mywindow.opener ) mywindow.opener = self;
}







function Cal( AWhnd ) {
	this.mstrBrowser = window.navigator.appName;
	this.hwnd = null;
	this.ParentWHnd = AWhnd;
	this.mdDate = null;
	this.OpenCalWindow = OpenCalWindow;
	this.CloseCallBack = CloseCallBack;
	this.CloseCalWindow = CloseCalWindow;
}

function OpenCalWindow( ADate ) {
	var iLeft;
	var iTop;
	var iWidth;
	var iHeight;
	var strParam;
	this.mdDate = ADate;
	if( this.mstrBrowser == "Microsoft Internet Explorer" ) {
		this.mdDate = window.showModalDialog( calendarPath, ADate, "dialogWidth:17em; dialogHeight:17em; center:yes" );
		this.CloseCallBack( this.mdDate );
	}
}

function CloseCalWindow() {
	if( !this.hwnd ) return;
	if( !this.hwnd.closed ) this.hwnd.close();
}

function CloseCallBack( ADate ) {
	this.mdDate = ADate;
	this.ParentWHnd.CallBackSetDate( this.mdDate );
	if( this.mstrBrowser != "Microsoft Internet Explorer" ) this.CloseCalWindow();
}

function CallBackSetDate( ADate ) {
	dateVariableInit();
	if( !ADate || !typeof( ADate )) return;
	switch( iType ) {
		case 1:
			depMonNode.selectedIndex = ADate.getMonth();
			depDayNode.selectedIndex = ADate.getDate() - 1;
			ChangeDate();
			break;
		case 2:
			rtnMonNode.selectedIndex = ADate.getMonth();
			rtnDayNode.selectedIndex = ADate.getDate() - 1;
			break;
	}
}

function CalendarClick( AiType ) {
	iType =AiType;
	obCal.OpenCalWindow( dNow );
}

var obCal = new Cal( this );
/* /[ カレンダーに関する操作 ] */
/* /[ 日付部分の操作 ] */



/* [ 初期化 ] */
function intFareInit() {
	if( document.intFareInitCount ) return;
	createSubmitForm();
	for( var i = 0; i < formSffxs.length; i ++ ) {
		toggleForms( formSffxs[i] );
		changePrm( 0 );
	}
	document.intFareInitCount = 1;
}
/* /[ 初期化 ] */
