/*******************************************************************************
 * 汎用関数
 * 
 *******************************************************************************/

// 会員かどうか
function _isMember() {
	return (mstat.match(/^(m1e0|m1e1|m1e0t0|m1e0t1|m1e1t0|m1e1t1)$/) ) ? true : false;
}

// 他頻度会員かどうか
function _isOftenMember() {
	return (mstat.match(/^(m1e1|m1e1t0|m1e1t1)$/) ) ? true : false;
}

//旅達会員かどうか
function _isTabidachiMember() {
	return (mstat.match(/^(m1e0t1|m1e1t1)$/) ) ? true : false;
}

//上級会員も含めた会員かどうか
function isLogin() {

	if (_isMember() || _isOftenMember() || _isTabidachiMember()) {
		return true;
	} else {
		return false;
	}

}

//ユーザーエージェントからMSIE6以下をtrueで返す
function underMSIE6() {
	if (navigator.userAgent.indexOf("MSIE") != -1) {
		var msie_length = navigator.userAgent.indexOf("MSIE") + 5;
		var msie_version = parseInt(navigator.userAgent.substr(msie_length, 1));
		if (msie_version < 6) {
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}

//ユーザーエージェントからSafari3以下をtrueで返す
//Safariは1系及び2系にはVersion表記がない
function underSafari3() {
	if (navigator.userAgent.indexOf("Safari") != -1) {
		if ((navigator.userAgent.indexOf("Chrome") == -1) && (navigator.userAgent.indexOf("Shiira") == -1)) {
			if (navigator.userAgent.indexOf("Version/") == -1) {
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	} else {
		return false;
	}
}

//何日後を取得
function getDays(afterDay, year, month, day) {

	var afterTime = afterDay * 86400000;

	var NowFstDate = new Date(year, (month - 1), day);
	var PlusTwoDate = new Date(year, (month - 1), day);
	PlusTwoDate.setTime(NowFstDate.getTime() + afterTime);
	var PlusTwoYear = PlusTwoDate.getFullYear();
	var PlusTwoDay = PlusTwoDate.getDate();
	var PlusTwoMonth = PlusTwoDate.getMonth() + 1;

	if (String(PlusTwoMonth).length == 1) {
		PlusTwoMonth = '0' + String(PlusTwoMonth);
	} else {
		PlusTwoMonth = String(PlusTwoMonth);
	}
	if (String(PlusTwoDay).length == 1) {
		PlusTwoDay = '0' + String(PlusTwoDay);
	} else {
		PlusTwoDay = String(PlusTwoDay);
	}

	var Dates = new Array();
	Dates["year"] = PlusTwoYear;
	Dates["month"] = PlusTwoMonth;
	Dates["day"] = PlusTwoDay;

	return Dates;

}

// YYMMDD形式で返す
function getyymmdd(m, d){

	var nowDate = new Date();
	var tgtDate = new Date();
	var year = nowDate.getFullYear();
	
	tgtDate.setYear(year);
	tgtDate.setMonth(m);
	tgtDate.setDate(d);

	var y = (nowDate > tgtDate) ? year + 1 : year;
	
	return y + m + d;
}

//年月から日の配列を返す
function createDayList(year, month, ZeroDay) {

	var nowTime = new Date();
	if ((nowTime.getMonth() + 1) > parseInt(month, 10)) {
		var YearPlus = 1;
	} else {
		var YearPlus = 0;
	}
	if (year != "") {
		var Year = parseInt(year, 10) + YearPlus;
	} else {
		var Year = nowTime.getFullYear() + YearPlus;
	}
	var Month = month;
	var Day = new Date(Year, Month, 0);
	var endDay = Day.getDate();
	var dayList = new Array();
	if (ZeroDay == true) {
		endDay++;
	}
	for (var i = 0; i < endDay; i++) {
		currDay = i + 1;
		if (String(currDay).length == 1) {
			currDayValue = '0' + String(currDay);
		} else {
			currDayValue = String(currDay);
		}
		if (ZeroDay == true) {
			currDay = i;
			if (i == 0) {
				currDayValue = "0";
				currDay = "--";
			} else {
				if (String(currDay).length == 1) {
					currDayValue = '0' + String(currDay);
				} else {
					currDayValue = String(currDay);
				}
			}
		}
		dayList[i] = new Object();
		dayList[i].value = currDayValue;
		dayList[i].text = String(currDay);
	}

	return dayList;

}

//日ドロップダウンの作成
function makeDayDropDown(dayId, year, month, ZeroDay, defaultValue) {

	var dayList = new Array();
	dayList = createDayList(year, month, ZeroDay);
	createDropDown(dayId, dayList, false);
	setDropDown(dayId, defaultValue);
	//addWeekDropDown(month, dayId);

}

//うるう年判定
function Uruu(year) {
	if ((year != "") && (typeof year != "undefined")) {
		if((year % 4==0 && year % 100 !=0) || year % 400 ==0){
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}

//ドメイン振り分け処理
function DominSelect(){

	blnflg=false;
	if (document.getElementById("Search0_ticket").checked == true) {
		nowDate = new Date();
		nowYear = nowDate.getFullYear();
		nowMonth = nowDate.getMonth() + 1;
		nowday = nowDate.getDate();

		//現在日付より2ヶ月先の日程を取得 ただし、月は通常の月を入れるため＋１している
		AddTime = computeMonth(nowYear,nowMonth,nowday,2);
		//日付を時間に変更
		AddSec=AddTime.getTime();

		selectday=document.getElementsByName("segConditionForm.selectedEmbDay")[0].value;
		selectMonth=document.getElementsByName("segConditionForm.selectedEmbMonth")[0].value ;

		//年度取得処理開始
		//初期値
		selectYear=nowYear + 0;
		switch  (nowMonth){
			//８月の場合
			case 8:
				if (selectMonth==1){
					selectYear=nowYear + 1;
				}
				break;
			//９月の場合
			case 9:
				if (selectMonth==1 || selectMonth==2){
					selectYear=nowYear + 1;
				}
				break;
			//１０月の場合
			case 10:
				if (selectMonth==1 || selectMonth==2 || selectMonth==3){
					selectYear=nowYear + 1;
				}
				break;
			//１１月の場合
			case 11:
				if (selectMonth==1 || selectMonth==2 || selectMonth==3 || selectMonth==4){
					selectYear=nowYear + 1;
				}
				break;
			//１２月の場合
			case 12:
				if (selectMonth!=12){
					selectYear=nowYear + 1;
				}
				break;
		}
		
		//月の表示がjsの場合は−１されるため
		selectMonth=selectMonth -1 ;
		
		inputTime=new Date(selectYear, selectMonth, selectday);
		inputSec=inputTime.getTime();

		if(inputSec > AddSec){
			blnflg=true;
		}
	}else{
		blnflg=true;
	}

	//移動先の置換処理
	if (blnflg == true){
		urlEngine = log_url["dom_tic_aswbe_2"] + randQueryString;
		document.segConditionForm.action = urlEngine;
	}else{
		urlEngine = log_url["dom_tic_aswbe_1"] + randQueryString;
		document.segConditionForm.action = urlEngine;	
	}

}

//年月の月度の加算・減産処理
function computeMonth(year, month, day, addMonths) {

	month += addMonths;
	if (month > 12){
		year += 1;
		month = month - 12;
	}
	var TimeZero = new Date(year, month, 0);
	var endDay = TimeZero.getDate();
	if(day > endDay){
		day = endDay;
	}
	var dt = new Date(year, month-1 , day);
	return dt;
}

//2つの配列を比較し、共通のものを新しい配列で返す
function getMatchListValue(arr1, arr2) {

	var temp = new Array();
	for (var i = 0; i < arr1.length; i++) {
		for (var j = 0; j < arr2.length; j++) {
			if(arr1[i] == arr2[j].value) temp.push(arr2[j]);
		}
	}
	return temp;
}

//履歴Cookieの読み込み
function readHistoryCookie() {

	var strs_obj = new Object();
	var hen = new Object();
	if (document.cookie != '') {
		//Cookie読み込み
		var s_cookie = document.cookie.split(';');
		//機能ごとに分解して配列化
		for (i = 0; s_cookie.length > i; i++) {
			//スペースの削除
			var hd_strs = s_cookie[i].replace(' ', '');
			//=で分割
			var strs = hd_strs.split('=');
			strs_obj[strs[0]] = unescape(strs[1]);
		}
		if ((strs_obj["wa"] != '') && (typeof strs_obj["wa"] != 'undefined')) {
			//strs_obj[wa]をさらに分解
			var values = strs_obj["wa"].split(';');
			//変数ごとに分解して配列化してデコード
			for (i = 0; values.length > i; i++) {
				var strs_m = values[i].split('=');
				hen[strs_m[0]] = unescape(strs_m[1]);
			}
		}
		if ((strs_obj["hist"] != '') && (typeof strs_obj["hist"] != 'undefined')) {
			//strs_obj[hist]をさらに分解
			var values = strs_obj["hist"].split(';');
			//変数ごとに分解して配列化してデコード
			for (i = 0; values.length > i; i++) {
				var strs_m = values[i].split('=');
				hen[strs_m[0]] = unescape(strs_m[1]);
			}
		}
	}
	return hen;

}

//Cookieの作成
function writeHistoryCookie(writeStrs, Name, Time) {

	var i;
	var key;
	var tmp_hen = new Object();

	//エンコード
	var enc_compStrs = escape(writeStrs);

	//alert(enc_compStrs);

	//↓（Cookie書き込み
	if (Time == "0") {
		document.cookie = Name + '=' + enc_compStrs + '; path=/';
	} else {
		t = new Date;
		t.setTime(t.getTime() + Time * 24 * 60 * 60 * 1000);
		document.cookie = Name + '=' + enc_compStrs + '; path=/; expires=' + t.toGMTString();
	}
}

//関数のアタッチ
function applyFunc(bind, func) {
	return function() {
		return func.apply(bind, arguments);
	};
}

//イベントリスナのアタッチ
function addMultiEventListener(target, self, type, func) {
	if (target.addEventListener) {
		target.addEventListener(type, applyFunc(self, func), false);
	} else if (target.attachEvent && func.apply) {
		target.attachEvent("on" + type, applyFunc(self, func));
	} else {
		target["on" + type] = func;
	}
}

// ドロップダウンリストの作成
function createDropDown(pulldown, list, oneValue) {

	var elem = document.getElementById(pulldown);

	var newElem;
	var br = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;

	if (oneValue == true) {
		iValue = 1;
	} else {
		iValue = 0;
	}
	for (var i = elem.options.length; i > iValue; 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);
		}
	}
}

// ドロップダウンリストの作成（空リスト）
function createNODropDown(pulldown) {

	var elem = document.getElementById(pulldown);

	var newElem;
	var br = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;

	for (var i = elem.options.length; i > 1; i--) {
		elem.remove(i - 1);
	}

}

// ドロップダウンリストに曜日を付加する
function addWeekDropDown(monthValue, pulldown) {
	
	var elem = document.getElementById(pulldown);
	var elemlength = elem.options.length;

	var cdate  = new Date();
	var week_list = new Array("日","月","火","水","木","金","土");
	if ((cdate.getMonth() + 1) > parseInt(monthValue, 10)) {
//	if ((cdate.getMonth() + 1) >= parseInt(monthValue, 10)) {
		targetYear  = cdate.getFullYear() + 1;
	} else {
		targetYear  = cdate.getFullYear();
	}
	w = (new Date(targetYear, parseInt(monthValue, 10)-1, 1)).getDay();

	for(var i = 0; i < elemlength; i++) {
		if(elem.options[i].value == "") continue;
		if(elem.options[i].value == "0") continue;
			if((elem.options[i].text.match(/\(\S+\)/g)) == null){
				elem.options[i].text = elem.options[i].text + "(" + week_list[w] + ")";
			} else {
				elem.options[i].text = elem.options[i].text.replace(/\(\S+\)/g, "(" + week_list[w] + ")");
			}
			w = (w == 6) ? 0 : w+=1;
	}
}

// ドロップダウンリストに値をセットする
function setDropDown(pulldown, val) {

	var elem = document.getElementById(pulldown);

	for(var i = 0; i < elem.options.length; i++) {

		if(elem.options[i].value == val) {
			elem.options.selectedIndex = i;
			return true;
		}
	}
	return false;
}

// フォーム要素の活性、非活性を切り替える
function ChangeDisplay(id, Flag) {
	if (Flag == false) {
		Flag = true;
	} else {
		Flag = false;
	}
	document.getElementById(id).disabled = Flag;
}


/*******************************************************************************
 * 要素クラス
 * textTag
 *******************************************************************************/
textTag = function(id) {

	this.id = id;

	addMultiEventListener(document.getElementById(this.id), this, 'click',
		function() {
			this.onClick();
		}
	);

}

/* イベント <クリック> *************************************/
textTag.prototype.onClick = function() {

	// override function
	if (typeof(this.onClickOverride) == "function") {
		this.onClickOverride();
	}

}


/*******************************************************************************
 * 要素クラス
 * listTag
 *******************************************************************************/
listTag = function(id, list, defaultValue, oneValue) {

	this.id = id;
	this.list = list;
	this.defaultValue = defaultValue;
	this.oneValue = oneValue;

	addMultiEventListener(document.getElementById(this.id), this, 'change',
		function() {
			this.onChange();
		}
	);

	this.onLoad();
}

/* イベント <画面ロード> ***********************************/
listTag.prototype.onLoad = function() {

	createDropDown(this.id, this.list, this.oneValue);
	setDropDown(this.id, this.defaultValue);
	
	// override function
	if (typeof(this.onLoadOverride) == "function") {
		this.onLoadOverride();
	}

}

/* イベント <変更> *****************************************/
listTag.prototype.onChange = function() {

	// override function
	if (typeof(this.onChangeOverride) == "function") {
		this.onChangeOverride();
	}

}


/*******************************************************************************
 * 要素クラス
 * airportTag
 *******************************************************************************/
airportTag = function(id, list, defaultListUse, displayFlag, oneValue, defaultValue, connectATag, connectTTag) {

	this.id = id;                          // タグのid
	this.list = list;                      // 空港（地区・地域）リスト
	this.defaultListUse = defaultListUse;  // デフォルト時にlistを作成する（true）、作成しない（false）
	this.displayFlag = displayFlag;        // デフォルト時に活性（true）、非活性（false）
	this.oneValue = oneValue;              // リストの0番目はHTMLの<option>を使用する（true）、使用しない（false）
	this.defaultValue = defaultValue;      // デフォルト値（defaultListUse == trueの時のみ有効）
	this.connectATag = connectATag;        // 子のairportTag
	this.connectTTag = connectTTag;        // 子のtextTag

	addMultiEventListener(document.getElementById(this.id), this, 'change',
		function() {
			this.onChange();
		}
	);

	this.onLoad();
}

airportTag.prototype.connectMakeList = function() {

	var Value = document.getElementById(this.id).value;

	if (this.connectATag != "") {

		if (Value != "") {
			createDropDown(this.connectATag.id, this.connectATag.list[Value], this.connectATag.oneValue);
			ChangeDisplay(this.connectATag.id, true);
			this.connectATag.onChange();
		} else {
			if (this.connectATag.displayFlag == true) {
				if (this.connectATag.defaultListUse == true) {
					var tempList = new Array();
					for (key in this.connectATag.list) {
						tempList = tempList.concat(this.connectATag.list[key], this.connectATag.oneValue);
					}
					createDropDown(this.connectATag.id, tempList, this.connectATag.oneValue);
					setDropDown(this.connectATag.id, this.connectATag.defaultValue);
				} else {
					createNODropDown(this.connectATag.id);
				}
			}
			ChangeDisplay(this.connectATag.id, this.connectATag.displayFlag);
			this.connectATag.onChange();
		}
	}
	if (this.connectTTag != "") {
		document.getElementById(this.connectTTag.id).value = Value;
	}

}


/* イベント <画面ロード> ***********************************/
airportTag.prototype.onLoad = function() {

	if (this.defaultListUse == true) {
		createDropDown(this.id, this.list, this.oneValue);
		setDropDown(this.id, this.defaultValue);
	} else {
		createNODropDown(this.id);
	}
	ChangeDisplay(this.id, this.displayFlag);

	this.connectMakeList();

	// override function
	if (typeof(this.onLoadOverride) == "function") {
		this.onLoadOverride();
	}

}

/* イベント <変更> *****************************************/
airportTag.prototype.onChange = function() {

	var Value = document.getElementById(this.id).value;

	if (Value == "IDX") {
		document.getElementById(this.id).options.selectedIndex = document.getElementById(this.id).options.selectedIndex + 1;
	}

	this.connectMakeList();

	// override function
	if (typeof(this.onChangeOverride) == "function") {
		this.onChangeOverride();
	}

}

/*******************************************************************************
 * 要素クラス
 * monthTag
 *******************************************************************************/
monthTag = function(id, lang, zeroValue, afterMonth, year, defaultValue, connectDTag) {

	this.id = id;
	this.lang = lang;
	this.zeroValue = zeroValue;
	this.afterMonth = afterMonth;
	this.year = year;
	this.defaultValue = defaultValue;
	this.connectDTag = connectDTag;

	addMultiEventListener(document.getElementById(this.id), this, 'change',
		function() {
			this.onChange();
		}
	);

	this.onLoad();
}

/* イベント <画面ロード> ***********************************/
monthTag.prototype.onLoad = function() {

	if (this.afterMonth == "-") {
		var startMonth = 1;
		var endMonth = 12;
	} else {
		var nowTime = new Date();
		var startMonth = nowTime.getMonth() + 1;
		var endMonth = this.afterMonth;
	}
	var currYear = "";
	currYear = this.year;
	if (currYear != "") {
		var nowDate = new Date();
		var nowMonth = nowDate.getMonth() + 1;
		var nowDay = nowDate.getDate();
		var Days10 = new Array();
		if ((Uruu(currYear)) && (nowMonth >= 2) && (nowDay >= 10)) {
			Days10 = getDays(-9, currYear, nowMonth, nowDay);
		} else {
			Days10 = getDays(-10, currYear, nowMonth, nowDay);
		}
	}
	var monthList = new Array();
	for (var i = 0; i < endMonth; i++) {
		currMonth = startMonth + i;
		if (currMonth > 12) {
			if (this.year != "") {
				currYear = this.year + 1;
			}
			currMonth = currMonth - 12;
			var i2 = i;
		} else {
			if (currYear != "") {
				if (Days10["month"] >= currMonth) {
					if ((Days10["month"] == 12) && (nowMonth == 1)) {
						currYear = this.year;
					} else {
						currYear = parseInt(this.year) + 1;
					}
					var i2 = i;
				} else {
					currYear = this.year;
					if (nowMonth == Days10["month"]) {
						var i2 = i + 1;
					} else {
						var i2 = i;
					}
				}
			} else {
				var i2 = i;
			}
		}
		if ((String(currMonth).length == 1) && (this.zeroValue == true)) {
			currMonthValue = '0' + String(currMonth);
		} else {
			currMonthValue = String(currMonth);
		}
		monthList[i2] = new Object();

		// 英語版表記に変更
		for (var m = 0; month_list.length > m; m++) {
			if (month_list[m].value == String(currMonthValue)) {
				currMonth = month_list[m].text;
			}
		}

		if (currYear != "") {
			monthList[i2].value = currYear + currMonthValue;
			monthList[i2].text = String(currYear) + "年" + String(currMonth) + "月";
			if ((Days10["month"] == currMonth) && (nowMonth == currMonth)) {
				i2 = i + 1;
				monthList[i2] = new Object();
				monthList[i2].value = String(currYear - 1) + String(currMonthValue);
				monthList[i2].text = String(currYear - 1) + "年" + String(currMonth) + "月";
			}
		} else {
			monthList[i2].value = currMonthValue;
			monthList[i2].text = String(currMonth);
		}
	}
	createDropDown(this.id, monthList, false);
	if (currYear != "") {
		setDropDown(this.id, currYear + this.defaultValue);
	} else {
		setDropDown(this.id, this.defaultValue);
	}
	
	// override function
	if (typeof(this.onLoadOverride) == "function") {
		this.onLoadOverride();
	}

}

/* イベント <変更> *****************************************/
monthTag.prototype.onChange = function() {

	if (this.connectDTag != "") {
		if (this.year != "") {
			this.connectDTag.year = document.getElementById(this.id).value.substring(0,4);
			this.connectDTag.month = document.getElementById(this.id).value.substring(4,6);
		} else {
			this.connectDTag.month = document.getElementById(this.id).value;
		}
		this.connectDTag.defaultValue = document.getElementById(this.connectDTag.id).value;
		this.connectDTag.onLoad();
	}

	// override function
	if (typeof(this.onChangeOverride) == "function") {
		this.onChangeOverride();
	}

}


/*******************************************************************************
 * 要素クラス
 * dayTag
 *******************************************************************************/
dayTag = function(id, lang, defaultValue, month) {

	this.id = id;
	this.lang = lang;
	this.year = "";
	this.month = month;
	this.defaultValue = defaultValue;
	this.ZeroDay = false;

	addMultiEventListener(document.getElementById(this.id), this, 'change',
		function() {
			this.onChange();
		}
	);

	this.onLoad();
}

/* イベント <画面ロード> ***********************************/
dayTag.prototype.onLoad = function() {

	makeDayDropDown(this.id, this.year, this.month, this.ZeroDay, this.defaultValue);

	// override function
	if (typeof(this.onLoadOverride) == "function") {
		this.onLoadOverride();
	}

}

/* イベント <変更> *****************************************/
dayTag.prototype.onChange = function() {

	// override function
	if (typeof(this.onChangeOverride) == "function") {
		this.onChangeOverride();
	}

}

