/**
 * @fileOverview モジュールの地域と空港ドロップダウンリストの作成と連動
 *
 * @author TCI
 * @version 1.0.0
 */

/*
 * 画面ロード時の初期化 ********************************************************
 */

/**
 * 画面ロード時の初期化
 *
 * @return {void}
 */
function loadInit() {

	/* フォーム要素のid */

	var IDDepArea = "DepArea";				// 出発地域
	var IDDepApo = "DepApo";					// 出発空港
	var IDDepApoCode = "DepApoCode";	// 出発空港コード

	var IDArrArea = "ArrArea";				// 到着地域
	var IDArrApo = "ArrApo";					// 到着空港
	var IDArrApoCode = "ArrApoCode";	// 到着空港コード


	/* 初期値の取得 */

	// 初期値変数の宣言
	var _depArea = "";	// 出発地域
	var _depApo = "";		// 出発空港
	var _arrArea = "";	// 到着地域
	var _arrApo = "";		// 到着空港

	// デフォルト初期値の設定
	// 出発地域
	if ((typeof defDepArea != "undefined") && (defDepArea != "")) {
		_depArea = defDepArea;
	}

	// 出発空港
	if ((typeof defDepApo != "undefined") && (defDepApo != "")) {
		_depApo = defDepApo;
	}

	// 到着地域
	if ((typeof defArrArea != "undefined") && (defArrArea != "")) {
		_arrArea = defArrArea;
	}

	// 到着空港
	if ((typeof defArrApo != "undefined") && (defArrApo != "")) {
		_arrApo = defArrApo;
	}

	/* ドロップダウンリストの作成と初期値のセット */

	// 出発地域
	createAPDropDown(IDDepArea, DepAreaList);
	if ((typeof depArea1 != "undefined") && (depArea1 != "") && (getAPDropDown(IDDepArea, depArea1) == true)) {
		setAPDropDown(IDDepArea, depArea1); //いつもの
	} else {
		setAPDropDown(IDDepArea, _depArea); //デフォルト
	}

	// 出発空港
	createDepApoDropDown(IDDepArea, IDDepApo, ApoKeyList, DepApoRelList);
	if ((typeof depApo1 != "undefined") && (depApo1 != "") && (getAPDropDown(IDDepApo, depApo1) == true)) {
		setAPDropDown(IDDepApo, depApo1); //いつもの
	} else {
		setAPDropDown(IDDepApo, _depApo); //デフォルト
	}
	setAPCode(IDDepApo, IDDepApoCode);

	// 到着地域
	createArrAreaDropDown(ArrAreaList, IDDepArea, DepAreaList, IDArrArea);
	if ((typeof arrArea1 != "undefined") && (arrArea1 != "") && (getAPDropDown(IDArrArea, arrArea1) == true)) {
		setAPDropDown(IDArrArea, arrArea1); //いつもの
	} else {
		setAPDropDown(IDArrArea, _arrArea); //デフォルト
	}

	// 到着空港
	createArrApoDropDown(IDDepArea, IDArrArea, IDArrApo, ApoKeyList, DepAreaList, ArrAreaList, ArrApoRelList);
	if ((typeof arrApo1 != "undefined") && (arrApo1 != "") && (getAPDropDown(IDArrApo, arrApo1) == true)) {
		setAPDropDown(IDArrApo, arrApo1); //いつもの
	} else {
		setAPDropDown(IDArrApo, _arrApo); //デフォルト
	}
	setAPCode(IDArrApo, IDArrApoCode);


	/* イベントの動的生成 */

	// 出発地域（onChange）========================================//
	addAPMultiEventListener(IDDepArea, 'change',
		function() {

			// 出発地域の変更------------------------//
			var setArea = document.getElementById(IDDepArea).value;
			setAPDropDown(IDDepArea, setArea);

			// 出発空港の変更------------------------//
			createDepApoDropDown(IDDepArea, IDDepApo, ApoKeyList, DepApoRelList);
			setAPCode(IDDepApo, IDDepApoCode);

			// 到着地域の変更------------------------//
			createArrAreaDropDown(ArrAreaList, IDDepArea, DepAreaList, IDArrArea);
			setAPDropDown(IDArrArea, "");

			// 到着空港の変更------------------------//
			createArrApoDropDown(IDDepArea, IDArrArea, IDArrApo, ApoKeyList, DepAreaList, ArrAreaList, ArrApoRelList);
			setAPDropDown(IDArrApo, "");
			setAPCode(IDArrApo, IDArrApoCode);

		}
	);

	// 出発空港（onChange）========================================//
	addAPMultiEventListener(IDDepApo, 'change',
		function() {

			// 出発空港の変更とコードのセット
			var setApo = document.getElementById(IDDepApo).value;
			setAPDropDown(IDDepApo, setApo);
			setAPCode(IDDepApo, IDDepApoCode);

		}
	);

	// 到着地域（onChange）========================================//
	addAPMultiEventListener(IDArrArea, 'change',
		function() {

			// 到着地域のチェック
			var setArea = document.getElementById(IDArrArea).value;
			setAPDropDown(IDArrArea, setArea);

			// 到着空港の変更とコードのセット
			createArrApoDropDown(IDDepArea, IDArrArea, IDArrApo, ApoKeyList, DepAreaList, ArrAreaList, ArrApoRelList);
			setAPDropDown(IDArrApo, "");
			setAPCode(IDArrApo, IDArrApoCode);

		}
	);

	// 到着空港（onChange）========================================//
	addAPMultiEventListener(IDArrApo, 'change',
		function() {

			// 到着空港の変更とコードのセット
			var setApo = document.getElementById(IDArrApo).value;
			setAPDropDown(IDArrApo, setApo);
			setAPCode(IDArrApo, IDArrApoCode);

		}
	);

	//一覧表示を閉じる（onClick）========================================//
	if (document.getElementById("popupShadow") != null) {
	addAPMultiEventListener("popupShadow", 'click',
		function(){
		  closePopup("popupAirportList");
	});
	}
}



/*
 * 共通関数 ********************************************************************
 */

/**
 * イベント関数のアタッチ
 *
 * @param {String} func	実際に実行する関数
 * @return {void}
 */
function APapplyFunc(func) {
	return function() {
		return func.apply(this, arguments);
	};
}

/**
 * イベントリスナのアタッチ
 *
 * @param {String} pulldown	ドロップダウンリストのid
 * @param {String} type			イベントの種類
 * @param {String} func			実際に実行する関数
 * @return {void}
 */
function addAPMultiEventListener(pulldown, type, func) {

	// ドロップダウンリストオブジェクトの取得
	var elem = document.getElementById(pulldown);

	// イベントリスナのアタッチ
	if (elem.addEventListener) {
		elem.addEventListener(type, APapplyFunc(func), false);
	} else if (elem.attachEvent && func.apply) {
		elem.attachEvent("on" + type, APapplyFunc(func));
	} else {
		elem["on" + type] = func;
	}
}


/**
 * ドロップダウンリストの作成
 *
 * @param {String} pulldown	ドロップダウンリストのid
 * @param {Array}  list			作成対象リストの配列
 * @return {void}
 */
function createAPDropDown(pulldown, list) {

	// ドロップダウンリストオブジェクトの取得
	var elem = document.getElementById(pulldown);

	// optionオブジェクトの宣言
	var newElem;
	var br = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;

	// ドロップダウンリストの項目を全て削除する
	for (var i = elem.options.length; i > 0; i--) {
		elem.remove(i - 1);
	}

	// 作成対象リストの配列からドロップダウンリストの項目を作成する
	for (var i = 0; i < list.length; i++) {
		if (typeof list[i].text != "undefined") {
			newElem = document.createElement("option");
			newElem.text = list[i].text;
			newElem.value = list[i].value;
			elem.add(newElem, br);
		}
	}
}

/**
 * 値の有効/無効を判定する。<br>
 * 無効な場合は有効化するまでドロップダウンリストを下にループして探す
 *
 * @param {String} pulldown	ドロップダウンリストのid
 * @param {String} val			セットする値
 * @return {void}
 */
function getAPDropDown(pulldown, val) {

	// ドロップダウンリストオブジェクトの取得
	var elem = document.getElementById(pulldown);

	// セットする値のインデックス
	// セットする値がドロップダウンリストにない場合false
	var returnIndex = false;

	// セットする値のインデックスの取得
	if (val != "") {
		// valと選択している項目が一致しない場合、セットする値のインデックスを探す
		for(var i = 0; i < elem.options.length; i++) {
			if (elem.options[i].value == val) {
				returnIndex = true;
				break;
			}
		}
	}

	// 値の取得
	return returnIndex;

}

/**
 * ドロップダウンリストに値をセットする<br>
 * 値の有効/無効も判定する。<br>
 * 無効な場合は有効化するまでドロップダウンリストを下にループして探す
 *
 * @param {String} pulldown	ドロップダウンリストのid
 * @param {String} val			セットする値
 * @return {void}
 */
function setAPDropDown(pulldown, val) {

	// ドロップダウンリストオブジェクトの取得
	var elem = document.getElementById(pulldown);

	// セットする値のインデックス
	// セットする値がドロップダウンリストにない場合はドロップダウンリストの一番上が有効
	var returnIndex = 0;

	// セットする値のインデックスの取得
	if (val != "") {
		if (elem.options[elem.options.selectedIndex].value != val) {
//	if (elem.options.selectedIndex == 0) {
			// valと選択している項目が一致しない場合、セットする値のインデックスを探す
			for(var i = 0; i < elem.options.length; i++) {
				if (elem.options[i].value == val) {
					returnIndex = i;
					break;
				}
			}
		} else {
			// valと選択している項目が一致する場合、インデックスを取得する
			returnIndex = elem.options.selectedIndex;
		}
	}

	// ループの開始（セットする値のインデックスからドロップダウンリストの一番下になるまで実行）
	for(var i = returnIndex; i < elem.options.length; i++) {

		// ドロップダウンリストi項目のvalueの最初の3文字を取得する。
		//（IDX、cidは cid-US、cid-JA 形式の為）
		var Value = elem.options[i].value.substr(0,3);

		// 選択インデックスがNOPかIDXかcidではない場合、
		// index を設定してループを抜ける。
		if ((Value != "NOP") && (Value != "IDX") && (Value != "cid")) {
			returnIndex = i;
			break;
		}
	}

	// 値のセット
	elem.options.selectedIndex = returnIndex;

}

/**
 * 出発地域リストのvalueから出発地域リストのareaを取得する
 *
 * @param {String} Dep_val	出発地域リストのvalue
 * @param {Array}  Dep_list	出発地域リストの配列
 * @return {String} 出発地域リストのarea
 */
function getTCArea(Dep_val, Dep_list) {

	if (Dep_val != "") {
		// 出発地域リストのvalueがある場合
		for (i = 0; Dep_list.length > i; i++) {
			if (Dep_list[i].value == Dep_val) {
				// TC地域を戻す
				return Dep_list[i].area;
			}
		}
		return "";
	} else {
		// 出発地域リストのvalueがない場合
		return "";
	}
}

/**
 * 出発空港ドロップダウンの作成
 *
 * @param {String} DepArea				出発地域ドロップダウンリストのid
 * @param {String} DepApo					出発空港ドロップダウンリストのid
 * @param {Array}  ApoKeyList				空港リストの配列
 * @param {Array}  DepApoRelList	出発空港リレーションリストの配列
 * @return {void}
 */
function createDepApoDropDown(DepArea, DepApo, ApoKeyList, DepApoRelList) {

	// 出発地域の選択された値
	var DepAreaValue = document.getElementById(DepArea).value;

	// 出発空港表示時の一時保存配列
	var DepList = new Array();	// 一時保存配列
	var DepList_cnt = 0;				// 配列の添え字

	if (DepAreaValue != "") {
		// 出発地域が選択されている場合
		if (typeof DepApoRelList[DepAreaValue] != "undefined") {
			// 出発空港リレーションリストに選択された出発地域が存在する場合
			// 出発空港リレーションリスト配列をループ
			for (i = 0; DepApoRelList[DepAreaValue].length > i; i++) {
				//空港コードを取得する
				var depApoList = DepApoRelList[DepAreaValue][i];
				// 空港リスト配列をループ
				for (j = 0; depApoList.airports.length > j; j++) {
					//空港情報を取得
					var depApoCode = depApoList.airports[j];
					// 出発空港リレーションリスト：i番目の空港コードと、
					// 空港の一時配列：j番目、が一致したデータを一時保存配列に追加する。
					DepList[DepList_cnt] = new Object();
					DepList[DepList_cnt].value = depApoCode;
					DepList[DepList_cnt].text = ApoKeyList[depApoCode].text;
					DepList_cnt ++;
				}
			}
			// 出発空港の作成
			createAPDropDown(DepApo, DepList);
			setAPDropDown(DepApo, "");
		} else {
			// 出発空港リレーションリストに選択された出発地域が存在しない場合
			// すべての空港で出発空港を作成
			createAPDropDown(DepApo, ApoKeyList);
			setAPDropDown(DepApo, "");
		}
	} else {
		// 出発地域が選択されていない場合
		// すべての空港で出発空港を作成
		createAPDropDown(DepApo, ApoKeyList);
		setAPDropDown(DepApo, "");
	}
}

/**
 * 到着地域ドロップダウンの作成
 *
 * @param {Array}  list				到着地域リストの配列
 * @param {String} DepArea		出発地域ドロップダウンリストのid
 * @param {Array}  Dep_list		出発地域リストの配列
 * @param {String} IDArrArea	到着地域地域ドロップダウンリストのid
 * @return {Array}
 */
function createArrAreaDropDown(list, DepArea, Dep_list, IDArrArea) {

	// TC地域（TC1、TC2、TC3、他）
	var Dep_area = "";

	// 出発地域の選択された値
	var DepAreaValue = document.getElementById(DepArea).value;

	// 全地域表示時の一時保存配列
	var ArrAllList = new Array();	// 一時保存配列
	var ArrAllList_cnt = 0;				// 配列の添え字
	var ArrAllList_chk = false;		// 配列追加フラグ（trueの場合追加）

	if (DepAreaValue != "") {
		// 出発地域ドロップダウンリストのvalueが選択されている場合
		// 出発地域リストのvalueから出発地域リストのareaを取得する
		Dep_area = getTCArea(DepAreaValue, Dep_list);
		// 一時配列リストを到着地域リストに変換
		ArrAllList = list[Dep_area];
	} else {
		// 出発地域ドロップダウンリストのvalueが選択されていない場合（全地域表示）
		// 出発地域リストの配列をループ
		for (i = 0; Dep_list.length > i; i++) {
			// 出発地域リスト：i番目のvalueをTC地域に変換する
			Dep_area = Dep_list[i].area;
			if (Dep_area != "") {
				// TC地域から到着地域リストの配列をループ
				for (j = 0; list[Dep_area].length > j; j++) {
					// 全地域表示時の一時配列をループ
					for (k = 0; ArrAllList.length > k; k++) {
						if (ArrAllList[k].value == list[Dep_area][j].value) {
							// 到着地域リストのj番目のvalueが一時保存配列に既に追加されている場合はtrue
							ArrAllList_chk = true;
						}
					}
					// 到着地域リストのj番目が一時保存配列に追加されていない場合は、一時保存配列に追加する
					if (ArrAllList_chk == false) {
						ArrAllList[ArrAllList_cnt] = new Object();
						ArrAllList[ArrAllList_cnt].text = list[Dep_area][j].text;
						ArrAllList[ArrAllList_cnt].value = list[Dep_area][j].value;
						ArrAllList_cnt ++;
					}
					ArrAllList_chk = false;
				}
			}
		}
	}
	// ドロップダウンリストの作成
	createAPDropDown(IDArrArea, ArrAllList);

}

/**
 * 到着空港リストの作成
 *
 * @param {Array} list		到着空港リレーションリストの配列
 * @param {Array} ApoList	空港リストの配列
 * @return {Array}
 */
function getArrApoList(list, ApoKeyList) {

	// 到着空港表示時の一時保存配列
	var ArrList = new Array();	// 一時保存配列
	var ArrList_cnt = 0;				// 配列の添え字
	// 到着空港リレーションリスト配列をループ
		// 空港リスト配列をループ
		for (i = 0; list.length > i; i++) {
			var arrCountry = list[i];
			for(j = 0; arrCountry.airports.length > j; j++){
				var arrApoCode = arrCountry.airports[j];
				// 到着空港リレーションリスト：i番目の空港コードと、
				// 空港の一時配列：j番目、が一致したデータを一時保存配列に追加する。
				ArrList[ArrList_cnt] = new Object();
				ArrList[ArrList_cnt].value = arrApoCode;
				ArrList[ArrList_cnt].text = ApoKeyList[arrApoCode].text;
				ArrList_cnt ++;
			}
		}
	return ArrList;
}

/**
 * 到着空港ドロップダウンの作成
 *
 * @param {String} DepArea				出発地域ドロップダウンリストのid
 * @param {String} ArrArea				到着地域ドロップダウンリストのid
 * @param {String} ArrApo					到着空港ドロップダウンリストのid
 * @param {Array}  ApoList				空港リストの配列
 * @param {Array}  DepAreaList		出発地域リストの配列
 * @param {Array}  ArrAreaList		到着地域リストの配列
 * @param {Array}  ArrApoRelList	到着空港リレーションリストの配列
 * @return {void}
 */
function createArrApoDropDown(DepArea, ArrArea, ArrApo, ApoKeyList, DepAreaList, ArrAreaList, ArrApoRelList){

	// 出発地域の選択された値
	var DepAreaValue = document.getElementById(DepArea).value;

	// 到着地域の選択された値
	var ArrAreaValue = document.getElementById(ArrArea).value;

	// 到着空港表示時の一時保存配列
	var ArrList = new Array();	// 一時保存配列
	var ArrList_cnt = 0;				// 配列の添え字

	if (DepAreaValue != "") {
		// 出発地域が選択されている場合
		// 出発地域リストのvalueから出発地域リストのareaを取得する
		Dep_area = getTCArea(DepAreaValue, DepAreaList);
		if (ArrAreaValue != "") {
			// 到着地域が選択されている場合
			// 到着空港リストの取得
			ArrList = getArrApoList(ArrApoRelList[Dep_area][ArrAreaValue], ApoKeyList);
		} else {
			// 到着地域が選択されていない場合
			// 到着地域リスト配列をループして、全ての地域を取得していく
			for (h = 0; ArrAreaList[Dep_area].length > h; h++) {
				// 選択してくださいは対象外
				if (ArrAreaList[Dep_area][h].value != "") {
					// ArrAreaValueに選択地域を設定
					ArrAreaValue = ArrAreaList[Dep_area][h].value;
					// 到着空港リストの取得
					ArrList = ArrList.concat(getArrApoList(ArrApoRelList[Dep_area][ArrAreaValue], ApoKeyList));
				}
			}
		}
		// 到着空港を作成
		createAPDropDown(ArrApo, ArrList);
		setAPDropDown(ArrApo, "");
	} else {
		// 出発地域が選択されていない場合
		// すべての空港で出発空港を作成
		createAPDropDown(ArrApo, ApoKeyList);
		setAPDropDown(ArrApo, "");
	}

}

/**
 * 空港ドロップダウンリストの選択された値を、空港コードテキストボックスに挿入
 *
 * @param {String} Apo	空港ドロップダウンリストのid
 * @param {String} Code	空港コードテキストフィールドのid
 * @return {void}
 */
function setAPCode(Apo, Code) {

	// 存在しない場合は何の処理も行わない（20110607 SYS修正）
	if (document.getElementById(Code) != null) {

		// 空港の選択された値
		var ApoValue = document.getElementById(Apo).value;

		// 空港コードテキストフィールド
		var Code = document.getElementById(Code);

		// 値の挿入
		if (ApoValue.search(/^[0-9][0-9][0-9]$/) != -1) {
			Code.value = "";
		} else {
			Code.value = ApoValue;
		}

	}

}


//============空港一覧表示処理=======================================↓↓

function selectArea(area) {
	//選択した地域
	var activeArea = document.getElementById(area);
	if (!activeArea) return;
	activeArea.className = "selected";

	//選択されていない地域
	var areas = document.getElementById("popupAreaList").getElementsByTagName("a");
	for (var i = 0; i < areas.length; i++) {
		if (areas[i].id != area) areas[i].className = "";
	}

	//都市の表示処理
	var activeApoSpace = document.getElementById(area + '_apos');
	activeApoSpace.style.display = 'block';

	//都市の非表示処理
	var apoSpaces = document.getElementById("popupCityList").getElementsByTagName("div");
	for (var i = 0; i < apoSpaces.length; i++) {
		if (apoSpaces[i].className != "beColumn" && apoSpaces[i].className != "index" && apoSpaces[i].className != "cityOfCountry")
			if (apoSpaces[i].id != area + '_apos') apoSpaces[i].style.display = 'none';
	}

	//indexの表示/非表示
	var indexList = document.getElementById("popupIndexList");
	//アメリカを選択した場合、indexを表示させる
	if (area == "2" | area == "US"){
		indexList.style.visibility = "visible";
		
		//インデックスリストの初期表示
		indexDefaultSet(area);
	} else {
		//それ以外の場合は、非表示にする
		indexList.style.visibility = "hidden";
	}
}

//インデックス選択時
function selectIndex(selectedArea, selectedIndex) {
	var airportDiv = document.getElementById(selectedArea + "_apos").getElementsByTagName("div");
	var indexList = document.getElementById("popupIndexList").getElementsByTagName("a");

	//選択済み識別
	for (var i = 0; i < indexList.length; i++) {
		//選択したインデックス
		if (selectedIndex == indexList[i].id){
			indexList[i].className = "selected";
		} else {
			indexList[i].className = "indexLine";
		}
	}

	for (var d = 0; d < airportDiv.length; d++) {
		//選択したインデックス
		if (selectedIndex == "US"){
			airportDiv[d].style.display = "block";
		} else if(airportDiv[d].id == selectedIndex + "_index") {
			airportDiv[d].style.display = "block";
		} else {
			airportDiv[d].style.display = "none";
		}
	}
}

//空港一覧から空港を選択した時の処理
function selectApo(airportCode, depOrArr, areaValue) {
	
	//空港コードの共通変数
	var apoCodeField;
	//地域プルダウンの共通変数
	var pulldownAreaField;
	//空港プルダウンの共通変数
	var pulldownApoField;
	
	//出発地コード
	var depCode = 0;
	//到着地コード
	var arrCode = 1;
	
	//出発地域プルダウンのid
	var pulldownDepAreaId = "DepArea";
	//到着地域プルダウンのid
	var pulldownArrAreaId = "ArrArea";

	//出発空港プルダウンのid
	var pulldownDepApoId = "DepApo";
	//到着空港プルダウンのid
	var pulldownArrApoId = "ArrApo";
	
	//出発空港コードのid
	var depApoCodeId = "DepApoCode";
	//到着空港コードのid
	var arrApoCodeId = "ArrApoCode";
	
	//出発か到着かによる、idの変更
	if ( depOrArr == arrCode){
		apoCodeField = arrApoCodeId;
		pulldownAreaField = pulldownArrAreaId;
		pulldownApoField = pulldownArrApoId;
	} else {
		apoCodeField = depApoCodeId;
		pulldownAreaField = pulldownDepAreaId;
		pulldownApoField = pulldownDepApoId;
	}

	//地域プルダウンのセット
	setAreaPulldown(pulldownDepAreaId, pulldownArrAreaId, pulldownAreaField, pulldownApoField, pulldownArrApoId, pulldownArrApoId, arrApoCodeId, areaValue, depOrArr);
	//空港プルダウンのセット
	setAirPortPulldown(pulldownDepAreaId, pulldownAreaField, pulldownApoField, apoCodeField, areaValue, depOrArr, airportCode);
	
	closePopup("popupAirportList");
}

//都市の選択中表示
function targetApo(airportCode, depOrArr, selectedArea, areas) {
	//出発地コード
	var depCode = 0;
	//到着地コード
	var arrCode = 1;

	if (airportCode == null || airportCode == undefined) airportCode = "";

	var area =  getDefaultArea(depOrArr, selectedArea, areas).value;
	selectArea(area);

	//選択中設定
	if (airportCode != "") {
		var apos = document.getElementById("popupCityList").getElementsByTagName("a");
		for (var i = 0; i < apos.length; i++) {
			apos[i].className = "";
		}
		var apoLink = document.getElementById("apo_" + airportCode);
		apoLink.className = "selected";
	}
}

//空港一覧を隠す処理
function closePopup(elm) {
	if (typeof (elm) == "string") {
		elm = document.getElementById(elm);
	}
	if (elm) {
		elm.style.display = "none";
	}

	//マスクを解除
	closeShadow();
}

//マスクを解除する処理
function closeShadow() {
	var shadow = document.getElementById("popupShadow");
	shadow.style.display = "none";
	closeShim();
}

//マスクの設定
function createShadow() {
	var shadow = document.getElementById("popupShadow");

	shadow.style.width = getFullWidth();
	shadow.style.height = getFullHeight();

	shadow.style.display = "block";

	setShim(shadow);

}

//ブラウザの横幅を取得する
function getFullWidth(){
	var windowWidth = "0px";
	//標準モード
	var standardMode = document.documentElement.scrollWidth;
	//互換モード
	var compatibilityMode = document.body.scrollWidth;
	//画面最大サイズ
	var fullScreenWidth = screen.availWidth;
	//標準モードと互換モード,画面最大サイズで画面サイズが大きい方を横幅にセット
	windowWidth = Math.max(standardMode, compatibilityMode, fullScreenWidth);
	return windowWidth;
}

//ブラウザの縦幅を取得する
function getFullHeight(){
	var windowHeight = "0px";
	//標準モード
	var standardMode = document.documentElement.scrollHeight;
	//互換モード
	var compatibilityMode = document.body.scrollHeight;
	//画面最大サイズ
	var fullScreenHeight = screen.availHeight;
	//標準モードと互換モード,画面最大サイズで画面サイズが大きい方を縦幅にセット
	windowHeight = Math.max(standardMode, compatibilityMode, fullScreenHeight);
	return windowHeight;
}

//windowの横幅を取得する
function getBrouserWidth(){
	var windowWidth = "0px";

	var windowWidth = window.innerWidth;
	//IEの場合
	if(navigator.userAgent.indexOf("MSIE") != -1){
		windowWidth = document.body.clientWidth;
	}

	return windowWidth;
}

//windowの縦幅を取得する
function getBrouserHeight(){
	var windowHeight = "0px";

	var windowHeight = window.innerHeight;
	//IEの場合
	if(navigator.userAgent.indexOf("MSIE") != -1){
		windowHeight = document.body.clientHeight;
	}

	return windowHeight;
}

//windowのスクロールされた縦幅を取得する
function getHeightScroll(){
	var topScroll = "0";
	topScroll = document.documentElement.scrollTop || document.body.scrollTop;
	return topScroll;
}

 //IE6での、Selectタグがdivタグのz-indexを無視してしまう対応
 //shadowの上に<inflame>で、1枚透明のシートを被せます
function setShim(obj){
	var shim = document.getElementById("popupShim");
	shim.style.width = obj.style.width;
	shim.style.height = obj.style.height;
	shim.style.left = obj.style.left;
	shim.style.top = obj.style.top;
	shim.style.display = "block";
}

//shimの解除
function closeShim(){
	var shim = document.getElementById("popupShim");
	shim.style.display = "none";
}

function popupList(id, depOrArr) {

	createShadow();

	//ポップアップの横幅の半分の値
	var widthHalfSize = 375;
	//ポップアップの縦幅の半分の値
	var heightHalfSize = 302;
	
	//popupLeftが0以下だった場合の補正値
	var leftMinSize = 50;
	//popupNonScrollTopが0以下だった場合の補正値
	var topMinSize = 10;
	
	//ポップアップの表示位置
	var popup = document.getElementById(id);
	
	//ポップアップの開始位置
	var popupLeft = (getBrouserWidth() / 2) - widthHalfSize;
	
	var popupNonScrollTop = (getBrouserHeight() / 2) - heightHalfSize;
	
	//ポップアップのサイズの方がwindowよりも大きかった場合
	if (popupLeft <= 0){
		popupLeft = leftMinSize;
	}
	//ポップアップのサイズの方がwindowよりも大きかった場合
	if (popupNonScrollTop <= 0){
		popupNonScrollTop = topMinSize;
	}
	
	//スクロールされた値を加算
	//ポップアップの開始位置
	var popupTop = popupNonScrollTop + getHeightScroll();
	
	popup.style.left = popupLeft;
	popup.style.top = popupTop;
	popup.style.display = "block";

	//出発プルダウンで選択されている地域を取得
	var depSelectedArea = document.getElementById('DepArea').value;


	//出発地域リストを取得
	var depAreaList = getDepAreaList();

	//一覧表示用地域リスト
	var areas;

	//選択中地域
	var selectedArea;
	//デフォルト選択地域
	var defaultArea;

	//出発地コード
	var depCode = 0;
	//到着地コード
	var arrCode = 1;

	//出発空港一覧か、到着空港一覧かの条件分岐
	//到着空港一覧表示の場合の処理
	if (depOrArr == arrCode){
		//出発地域に対応する、選択可能到着地域コードの取得
		var toTCArea = getTCArea(depSelectedArea, depAreaList);

		//一覧表示用地域リストの取得
		areas = getAreas();

		//到着地域リストから選択可能到着地域を取得
		areas = areas[toTCArea];

		//到着プルダウンで選択されている地域を取得
		var arrSelectedArea = document.getElementById('ArrArea').value;

		selectedArea = arrSelectedArea;
	} else {
		//出発地域リストを一覧表示用地域リストにそのまま設定
		areas = depAreaList;
		selectedArea = depSelectedArea;
	}

	createPopup(depOrArr, selectedArea, areas, toTCArea);

	var airportCode = "";

	targetApo(airportCode, depOrArr, selectedArea, areas);

}

/**
 * @param depOrArr 出発空港'0'に対してか、到着空港'1'に対してか
 * @param selectedArea 現在プルダウンで選択されている地域
 * @param areas 選択可能地域
 * @param toTCArea 出発地域に対応する、選択可能到着地域コード
 * @return
 */
function createPopup(depOrArr, selectedArea, areas, toTCArea) {
	var areaList = document.getElementById("popupAreaList");
	var indexList = document.getElementById("popupIndexList");
	var cityList = document.getElementById("popupCityList");

	var div, li, textNode, area, country, airport, airportsDiv;
	var tabIndex = 1;
	//最大カラム数
	var maxCols = 3;
	//最少行数
	var minRows = 18;
	//出発地コード
	var depCode = 0;
	//到着地コード
	var arrCode = 1;

	//デフォルト選択地域の設定
	defaultArea = getDefaultArea(depOrArr, selectedArea, areas);

	cityList.innerHTML = "";
	indexList.innerHTML = "";
	areaList.innerHTML = "";

	//出発地域リストにNOPがある場合は、その次の項目から処理開始
	var areaCount = 0;
	var nopCheck;

	for (var i = 0; i < areas.length; i++) {
		nopCheck =areas[i].value;
		if (nopCheck == "NOP"){
			areaCount = i + 1;
			break;
		}
	}

	/*
	 * インデックスリストの生成処理
	 */
	var idxObj = createIndexList(depOrArr, indexList);
	//インデックス名の配列を取得
	var indexArr = idxObj["indexArr"];
	//空港を持っていないインデックスの配列
	var nonIdxCheck = idxObj["nonIdxCheck"];

	//地域を順番に取得
	for (areaCount; areaCount < areas.length; areaCount++) {

		area = areas[areaCount];

		//「地域を選択してください」は飛ばして表示
		if (area.value == "0"){
			areaCount++;
			area = areas[areaCount];
		}

		airportsDiv = document.createElement("div");
		airportsDiv.id = area.value + "_apos";

		//***リレーションリストの配列の持ち方変更の対応及び並び順対応
		var areaHaveAirports = 0;
		var apoRelListOfTCArea;
		var apoRelListOfArea;

		//出発と到着で使用するリレーションリストの切り替え
		if (depOrArr == arrCode){
			apoRelListOfTCArea = ArrApoRelList[toTCArea];//出発地域ごと
			apoRelListOfArea = apoRelListOfTCArea[area.value];//到着地域ごと空港配列
		} else {
			apoRelListOfArea = DepApoRelList[area.value];
		}
		for (var n = 0; n < apoRelListOfArea.length; n++){
			//配列にある空港数を文字列から数値に変換
			areaHaveAirports += parseInt(apoRelListOfArea[n]["airportCount"]);
		}

		//最大行数（表示空港数）
		var maxRows = areaHaveAirports;

		//1カラムあたりの行数計算
		var maxColumnRows = Math.ceil(maxRows / maxCols);
		//空港の行数が18以上の場合は最大値上書き
		maxColumnRows = maxColumnRows > minRows ? maxColumnRows : minRows;

		// 空港がひとつ以上あるとき
		if (areaHaveAirports > 0) {

			/*
			 * 地域リストの生成処理
			 */
			createAreaList(areaList, area, tabIndex);

			var airportOfArrArea;
			if (depOrArr == arrCode){
				var airportOfDepArea = ArrApoRelList[toTCArea];//出発地域ごと
				airportOfArrArea = airportOfDepArea[area.value];//到着地域ごと空港配列
			} else {
				airportOfArrArea = DepApoRelList[area.value];
			}

			//表示するインデックス区分けのカウント数
			//地域がアメリカの場合のみ使用
			var idxDisplayCount = 0;

			//***リレーションリストの配列の持ち方変更の対応及び並び順対応
			//到着地域が持っている国数分の繰り返し処理
			for (var countryArr = 0; countryArr < apoRelListOfArea.length; countryArr++){

				//表示した空港数
				var airportCount = 0;
				//空港の行数
				var airportRowsCount = 0;
				//"cid"の値
				var cidValue = apoRelListOfArea[countryArr]["cid"];
				var checkValue = cidValue.substr(0,3);

				//空港配列参照の開始インデックス
				var arrNo = 0;
				//国名無しフラグ
				var notCountryName = 0;
				var notCidFlg = 1;
				var notCidFlg_off = 0;

				//2重表示対応
				if (checkValue == "IDX"){
					var idxAirports = apoRelListOfArea[countryArr]["airports"];
					var nopIdx = 0;
					//2重表示の配列が"IDX-○○"しか持っていない場合は、処理を無視する
					if (idxAirports.length == 1){
						continue;
					}

					//NOPがある配列を算出
					for (var idx = 0; idx < idxAirports.length; idx++){
						if (idxAirports[idx] == "NOP"){
							nopIdx = idx;
							//空港表示処理の開始インデックスに設定
							arrNo = idx + 1;
						}
						if (idxAirports[idx].substr(0,3) == "IDX"){
							//国名無しフラグon
							notCountryName = notCidFlg;
						}
					}
					//NOPが配列の最後であった場合は処理を無視する
					if (nopIdx == idxAirports.length - 1){
						continue;
					}
				}

				//空港数
				var airports = 0;

				//国ごとの空港行数を計算
				var maxApoRows;
				var apoRowsPlus = 0;

				//アメリカの空港数
				var usAirport = 0;
				//アメリカの空港数(配列）
				var usAirportArr = 0;
				//インデックス数
				var usIndex = 0;
				//インデックス毎の空港数
				var airportOfIndex = 0;
				//一つも空港を持っていないインデックスの配列
				var nonIndex = new Array();

				//出発地域がアメリカ/メキシコの場合で、
				//言語が日本語、英語、韓国語の場合
				if ((area.value == "US" || area.value == "2") && (locale == "ja" || locale == "en" || locale == "ko")){
					//インデックス毎の空港数を配列で取得する
					usAirportArr = apoRelListOfArea[countryArr]["airportCount"].split(",");

					/*
					 * 地域がアメリカの場合の、インデックスの制御
					 */
					//アメリカの空港トータル数を取得
					airports = usAirortsIndex(airports, usAirportArr, nonIndex, nonIdxCheck);
				} else {
					//その他地域の場合
					//空港数を取得
					airports = parseInt(apoRelListOfArea[countryArr]["airportCount"]);
					//空港数を3で割った値を切り上げて、最大行数とする
					maxApoRows =Math.ceil(airports / maxCols);
					//上記計算の余り
					apoRowsPlus = airports % maxCols;
				}

				//初期化
				var column_ul = document.createElement("ul");
				var column_div = document.createElement("div");
				column_div.className = "beColumn";

				//国ごとのcityスペースの初期化
				var apoblock_div = document.createElement("div");
				apoblock_div.className = "cityOfCountry";
				//国が持っている空港数分の繰り返し処理
				for (arrNo; arrNo < apoRelListOfArea[countryArr]["airports"].length; arrNo++){
					//配列にある空港名
					var apoName = apoRelListOfArea[countryArr]["airports"][arrNo];
					var cidCheck = apoName.substr(0,3);
					//空港コード
					var apoCode = apoName.substr(4,2);

					//現在のindexがcid-○○○の場合の処理（国であった場合）（または国名無しフラグがonのときかつ最初の処理の時）
					if (cidCheck == "cid" || notCountryName == notCidFlg){
						//国コードを国名に置換
						var country_textNode = document.createTextNode(ApoKeyList[apoName]["text"]);
						if (notCountryName == notCidFlg){
							//地域名を国名の代わりに表示させる
							//国コードを国名に置換
							country_textNode = document.createTextNode(ApoKeyList[cidValue]["text"]);
							//国名無しフラグをoffにする
							notCountryName = notCidFlg_off;
							//再度空港名表示処理の開始
							arrNo--;
						}

						/*
						 * 国名の生成処理
						 */
						//airportsDivを引き継ぎ
						airportsDiv = createCountryName(airportsDiv, area, apoCode, country_textNode);

						//空港名のとき
					} else {

						var airportCode = apoName;
						var airportInfo = ApoKeyList[airportCode];
						var apoIndex = ApoKeyList[airportCode]["apoIndex"];
						//NH就航便かどうかのフラグ取得
						var nhApo = ApoKeyList[airportCode]["nhApo"];
						//メキシコの場合のみ、インデックスを"MX_index"として取得
						if (cidValue == "cid-MX"){
							apoIndex = "MX";
						}

						//アメリカのインデックス対応
						if (area.value == "US" || area.value == "2"){
							//言語が中国語の場合はインデックスの処理を行わない
							if (locale == "ja" || locale == "en" || locale == "ko"){
								//インデックスの振り分けのスタート時にインデックスのタグを作る
								if (airportOfIndex <= 0){
									//インデックスの情報
									usAirport = usAirportArr[usIndex];
									if (usAirport == "0"){
										usIndex++;
										idxDisplayCount++;
										//インデックスに該当する空港がなかったので、やり直し
										arrNo--;
										continue;
									}

									//インデックスの空港数が0でない場合
									if (usAirport != "0"){
										//空港数を3で割った値を切り上げて、最大行数とする
										maxApoRows =Math.ceil(usAirport / maxCols);
										//上記計算の余り
										apoRowsPlus = usAirport % maxCols;
									}
									/*
									 * 空港一覧内のインデックス名の生成処理。
									 */
									//生成したあとのapoblock_divを引き継ぐ
									apoblock_div = createApoListIndexName(apoblock_div, usAirport, indexArr, idxDisplayCount, apoIndex);
								}
							}
						}

						airportCount++;
						airportRowsCount++;

						/*
						 * 空港一覧内の空港追加処理。
						 */
						//column_ulを引き継ぎ
						column_ul = createAirport(column_ul, area, indexArr, depOrArr, airportCode, tabIndex, nhApo, apoIndex);

						tabIndex++;

						//アメリカのインデックス対応
						if (area.value == "US" || area.value == "2"){
							if (locale == "ja" || locale == "en" || locale == "ko"){
								//表示するたびに追加
								airportOfIndex++;
								column_div.id = apoIndex + "_index";
								//一つのインデックス分が埋まったら、次のインデックス処理に移行
								if (airportOfIndex >= usAirport){
									//次のインデックスに移行
									usIndex++;
									idxDisplayCount++;
									airportOfIndex = 0;
									airportsDiv.appendChild(apoblock_div);
								}
							}
						}

					}//空港の場合の処理終了

					//最大行数を超えた場合、次の列に追加する
					if (airportRowsCount >= maxApoRows) {
						//今まで追加してきた要素
						column_div.appendChild(column_ul);
						apoblock_div.appendChild(column_div);

						//次のDIV分
						var column_ul = document.createElement("ul");
						var column_div = document.createElement("div");
						column_div.className = "beColumn";
						//空港行数の初期化
						airportRowsCount = 0;

						//最大行数の調整処理
						//剰余分が残っている場合
						if (apoRowsPlus > 0){
							//剰余分を1減らす
							apoRowsPlus--;

							if (apoRowsPlus <= 0){
								//剰余分がなくなってしまった場合、最大行数を1減らす
								maxApoRows--;
							}
						}
					}

					/*
					 * 最後の空港の場合の処理
					 */
					if (airportCount >= airports) {
						//airportsDivに引き継ぎ
						airportsDiv = lastAirport(column_ul, column_div, apoblock_div, airportsDiv);
					}
				}
			}cityList.appendChild(airportsDiv);
		}

	} //地域ループ


}

//到着地域リストを取得
function getAreas() {
	//ANAの地域リストを返却
	return ArrAreaList;
}

//出発地域リストを取得
function getDepAreaList() {
	return DepAreaList;
}

//地域のデフォルト選択設定
function getDefaultArea(depOrArr, selectedArea, areas) {

	var defaultArea;

	if (selectedArea != "") {

		// 地域リストのvalueがある場合
		for (i = 0; areas.length > i; i++) {
			if (areas[i].value == selectedArea) {
				if (areas[i].value == "0"){
					i++;
					return areas[i];
				}
				//選択中の地域を返す
				return areas[i];
			}
		}

	} else {
		//何も選択されていなかった場合
		if (areas[0].value == "0"){
			return areas[1];
		} else {
			return areas[0];
		}
	}
}

/**
 * 空港一覧から選択された空港を、プルダウンに反映
 *
 * @param {String} Apo
 * @return {void}
 */
function setAirPortPulldown(pulldownDepAreaId, pulldownAreaField, pulldownApoField, apoCodeField, areaValue, depOrArr, airportCode){
	
	//出発地コード
	var depCode = 0;
	//到着地コード
	var arrCode = 1;
	
	//出発と到着のプルダウンidの場合分け
	if (depOrArr == depCode){
		createDepApoDropDown(pulldownAreaField, pulldownApoField, ApoKeyList, DepApoRelList);
	} else {
		createArrApoDropDown(pulldownDepAreaId, pulldownAreaField, pulldownApoField, ApoKeyList, DepAreaList, ArrAreaList, ArrApoRelList);
	}

	//空港プルダウンのセット
	setAPDropDown(pulldownApoField, airportCode);
	
	//空港コードのセット
	setAPCode(pulldownApoField, apoCodeField);
}

/**
 * 空港一覧から選択された地域を、プルダウンに反映
 *
 * @param {String} areaValue 地域
 * @param {String} pulldownAreaField	プルダウンフィールドのid
 * @return {void}
 */
function setAreaPulldown(pulldownDepAreaId, pulldownArrAreaId, pulldownAreaField, pulldownApoField, pulldownArrApoId, pulldownArrApoId, apoCodeField, areaValue, depOrArr) {

	//出発地コード
	var depCode = 0;
	//到着地コード
	var arrCode = 1;

	//入力される前の出発地域プルダウン
	var prevDepArea = document.getElementById('DepArea').value;
	
	//プルダウンのセット
	setAPDropDown(pulldownAreaField, areaValue);
	//出発地域のプルダウンを変更した場合
	if (depOrArr == depCode){
		//選択する前後で、地域が変更になった場合に到着地域/空港プルダウンを再生成する
		if (prevDepArea != areaValue){
			//到着地域のプルダウンを再生成する
			createArrAreaDropDown(ArrAreaList,  pulldownDepAreaId, DepAreaList, pulldownArrAreaId);
			//到着空港のプルダウンを再生成する
			createArrApoDropDown(pulldownDepAreaId, pulldownArrAreaId, pulldownArrApoId, ApoKeyList, DepAreaList, ArrAreaList, ArrApoRelList);
			//空港コードの再セット
			setAPCode(pulldownArrApoId, apoCodeField);
		}
	}
}

/**
 * インデックスリストを作成する。
 * @param {int} depOrArr 出発地か到着地のフラグ（0:出発地、1:到着地）
 * @param 		indexList インデックスリストの要素
 * @return		idxObj インデックス名の配列と、非表示用のインデックスの配列
 */
function createIndexList(depOrArr, indexList) {

	//出発地コード
	var depCode = 0;
	//到着地コード
	var arrCode = 1;

	//出発地選択の場合は"US"を、到着地選択の場合は"2"を地域の値として設定
	var usValue;
	if (depOrArr == depCode){
		usValue = "US";
	} else {
		usValue = "2";
	}

	//インデックス表示をfor文で回すための処理
	var idxStr = new String();
	var indexArr = new Array();
	var nonIdxCheck = new Array();
	var usTitle;
	var mxTitle;
	if (locale == "ja"){
		usTitle = ApoKeyList["cid-US"]["text"].slice(1,ApoKeyList["cid-US"]["text"].length);
		mxTitle = ApoKeyList["cid-MX"]["text"].slice(1,ApoKeyList["cid-MX"]["text"].length);
	} else if (locale == "en" || locale == "ko"){
		usTitle = ApoKeyList["cid-US"]["text"].slice(1,-1);
		mxTitle = ApoKeyList["cid-MX"]["text"].slice(1,-1);
	}
	if (locale =="ja" || locale == "en" || locale == "ko"){
		idxStr += "<a class=\"indexline\" id=\"US\"  href=\"javascript:void(0)\" onclick=\"selectIndex(\'" + usValue + "\',\'US\')\">" + usTitle + "</a>";

		for (index in IndexInfo){
			idxStr += "<a class=\"indexline\" id=" + index + "  href=\"javascript:void(0)\" onclick=\"selectIndex(\'" + usValue + "\',\'" + index + "\')\">" + IndexInfo[index]["text"] + "</a>";
			//インデックス名を配列に格納
			indexArr.push(IndexInfo[index]["text"]);
			nonIdxCheck.push(index);
		}

		//出発地選択の場合、メキシコの追加
		if (depOrArr == depCode){
			idxStr += "<a class=\"indexline\" id=\"MX\"  href=\"javascript:void(0)\" onclick=\"selectIndex(\'" + usValue + "\',\'MX\')\">" + mxTitle + "</a>";
			if (locale == "ja"){
				indexArr.push(mxTitle);
			} else if (locale == "en" || locale == "ko"){
				indexArr.unshift(mxTitle);
			}
		}

	}
	//到着地であった場合はメキシコインデックスを追加する

	indexList.innerHTML = idxStr;

	//indexを非表示にする
	indexList.style.visibility = "hidden";

	//2つの配列を格納
	var idxObj = {indexArr: indexArr, nonIdxCheck: nonIdxCheck};
	//インデックス名の配列と、チェック用の配列を返す
	return idxObj;
}

/**
 * 地域リストを作成する。
 * @param
 * @param
 * @return
 */
function createAreaList(areaList, area, tabIndex){
	//地域スペース追加
	//地域スペースのAタグ
	var area_a;

	area_a = document.createElement("a");
	area_a.id = area.value;
	area_a.tabIndex = tabIndex;
	area_a.href = "javascript:void(0)";
	area_a.onfocus = new Function("selectArea('" + area.value + "');");
	textNode = document.createTextNode(area.text);
	span = document.createElement("span");
	span.appendChild(textNode);
	area_a.appendChild(span);
	tabIndex++;

	//地域リストの作成
	areaList.appendChild(area_a);
}

/**
 * 空港一覧の中の国名追加処理。
 * @param {int} nonCountryName 国名の有無フラグ（0:国名表示あり、1:国名表示なし）
 * @param
 * @return
 */
function createCountryName(airportsDiv, area, apoCode, country_textNode){

	var country_li = document.createElement("li");
	var country_div = document.createElement("div");
	var country_ul = document.createElement("ul");

	country_li.className = "country";
	country_li.appendChild(country_textNode);
	country_li.id = apoCode;
	country_ul.appendChild(country_li);
	country_div.className = "index";
	country_div.id = area.value + "_apos";
	country_div.appendChild(country_ul);

	//国名だけはcitiesDivに直接貼り付け
	airportsDiv.appendChild(country_div);

	return airportsDiv;
}

/**
 * 空港一覧内のインデックス名生成処理。
 * @param
 * @param
 * @return
 */
function createApoListIndexName(apoblock_div, usAirport, indexArr, idxDisplayCount, apoIndex){

	//国ごとのapoスペースの初期化
	apoblock_div = document.createElement("div");
	apoblock_div.className = "cityOfCountry";

	var index_li = document.createElement("li");
	var index_ul = document.createElement("ul");

	index_li.className = "index";
	index_li.id = apoIndex + "_index";
	//インデックス名の配列から出力するインデックスを取得
	var index_textNode = document.createTextNode(indexArr[idxDisplayCount]);
	index_li.appendChild(index_textNode);
	index_ul.appendChild(index_li);
	apoblock_div.id = apoIndex + "_index";

	apoblock_div.appendChild(index_ul);

	return apoblock_div;
}

/**
 * 空港一覧内の空港追加処理。
 * @param
 * @param
 * @return
 */
function createAirport(column_ul, area, indexArr, depOrArr, airportCode, tabIndex, nhApo, apoIndex){

	var apo_a = document.createElement("a");
	apo_a.id = "apo_" + airportCode;
	apo_a.tabIndex = tabIndex;
	apo_a.href = "javascript:selectApo('" + airportCode + "', '" + depOrArr + "' , '" + area.value + "')";
	apo_a.onfocus = null;

	//空港リストから空港名称を取得
	var apo_textNode = document.createTextNode(ApoKeyList[airportCode]["text"]);
	var apoCode_textNode;

	apo_a.appendChild(apo_textNode);

	var apo_li = document.createElement("li");

	//NH就航都市
	var nhFlight = 1;
	//非就航都市
	var otherFlight = 0;

	//NH便就航地かどうかの判定
	if (nhApo != ""){
		//NH就航都市の場合
		if (nhApo == nhFlight){
			apo_li.className = "nhFilght";
		} else if (nhApo == otherFlight){	//非就航都市の場合
			apo_li.className = "otherFilght";
		}
	}

	//インデックス情報の追加
	if (apoIndex != "") {
		apo_li.id = apoIndex + "_index";
	} else {
		apo_li.id = "K_index";//K固定
	}

	apo_li.appendChild(apo_a);
	column_ul.appendChild(apo_li);

	return column_ul;
}

/**
 * 最後の空港の場合の処理。
 * @param
 * @param
 * @return
 */
function lastAirport(column_ul, column_div, apoblock_div, airportsDiv){
	//最後の空港のときcolumnのdivにULを追加する
	column_div.appendChild(column_ul);
	//国ごとのcityスペースに追加
	apoblock_div.appendChild(column_div);

	airportsDiv.appendChild(apoblock_div);

	return airportsDiv;
}

/**
 * 地域がアメリカの場合の、インデックスの制御
 * @param
 * @param
 * @return
 */
function usAirortsIndex(airports, usAirportArr, nonIndex, nonIdxCheck){
	for (var v = 0; v < usAirportArr.length; v++){
		//空港数が0だった場合は、表示しないインデックスリストとしてまとめる
		if (usAirportArr[v] == 0){
			//インデックスリストとの参照
			nonIndex.push(nonIdxCheck[v]);
		}
		//アメリカの空港トータル数
		airports += parseInt(usAirportArr[v]);
	}
	if (nonIndex.length != 0){
		//表示しないインデックスリストに入っているインデックスを非表示にする
		for (var x = 0; x < nonIndex.length; x++){
			document.getElementById(nonIndex[x]).style.display = "none";
		}
	}
	return airports;
}

/**
 * インデックスリストの初期表示制御
 * @param
 * @param
 * @return
 */
function indexDefaultSet(area){
	//アメリカを選択した場合、一旦インデックスの初期表示を行う
	var indexListArr = document.getElementById("popupIndexList").getElementsByTagName("a");
	for (var i = 0; i < indexListArr.length; i++){
		if (indexListArr[i].className == "selected"){
			indexListArr[i].className = "indexline";
			selectIndex(area, indexListArr[0].id);
			break;
		}
	}
}

