function JLJS_DomFareModule() {
	this.CK_NM = "domFMFormValue";
	this.CK_NM_AREA_AIRPORT = "areaAirport";
	this.CK_NM_AREA_AIRPORT_EN = "areaAirport_en";
	this.CK_NM_SESSION_AIRPORT = "sessionAirport";
	this.CK_NM_AUTO_SEL_AIRPORT = "autoSelAirport";
	this.FRM_NM = "domFMFrm";
	this.ACTION_JA = "https://www.5971.jal.co.jp/rsv/FareList.do";
	this.ACTION_EN = "https://www.5971.jal.co.jp/eng/FareList.do";
	this.frm;
	this.isEN;
	this.dayOfWeekFlg = false;
	this.yearRange = 3;
}

JLJS_DomFareModule.prototype = {
	setup : function(params) {
		this.frm = document.forms[this.FRM_NM];
		if(!this.frm || !params) {
			return;	
		}
		
		this.isEN = window.location.pathname.match(/^\/en\//) ? true : false;
		if(this.isEN) {
			this.frm.action = this.ACTION_EN;
			this.dayOfWeekFlg = false;
		} else {
			this.frm.action = this.ACTION_JA;	
			if(typeof params.dayOfWeek != "undefined") {
				this.dayOfWeekFlg = params.dayOfWeek;
			}
		}
		this.frm.fareCode.value = params.fareCode;
		if(params.yearRange) {
			this.yearRange	= params.yearRange;
		}
		
		this.setInitValue(params);
		this.setEvent();
		this.afterSetup();
	},

	setElementValue : function(frm, name, value) {
		if(frm && frm[name]) {
			var type = frm[name].type;
			if(!type && frm[name].length) {
				type = frm[name][0].type;
			}
			if(type == "text" || type == "hidden") {
				frm[name].value = value;
			} else if(type == "select-one") {
				for(var i=0; i<frm[name].options.length; i++) {
					if(frm[name].options[i].value == value) {
						frm[name].options[i].selected = true;
						break;
					}
				}
			} else if(type == "radio") {
				if(frm[name].length) {
					for(var i=0; i<frm[name].length; i++) {
						if(frm[name][i].value == value) {
							frm[name][i].checked = true;
							break;
						}
					}
				} else if(frm[name].value == value) {
					frm[name].checked = true;
				}
			} else if(type == "checkbox") {
				if(frm[name].value == value) {
					frm[name].checked = true;
				}
			}
		}
	},

	setEvent : function() {
		this.frm._instance_ = this;
		JLJS.addEvent(this.frm, 
					  "submit", 
					  function(e){e.currentTarget._instance_.formSubmit()});
		if(this.dayOfWeekFlg) {
			this.frm.boardYear._instance_ = this;
			JLJS.addEvent(this.frm.boardYear, 
				"change", 
				function(e){
					e.currentTarget._instance_.dateSpecify({});
			});
			this.frm.boardMonth._instance_ = this;
			JLJS.addEvent(this.frm.boardMonth, 
				"change", 
				function(e){
					e.currentTarget._instance_.dateSpecify({});
			});
		}
		
		var calIcons = JLJS.getElementsByClassName(JLJS_CalNav.ICON_CLASS, "a", this.frm);
		if(calIcons && calIcons.length != 0) {
			if(JLJS_CalNav.used) {
				calIcons[0]._instance_ = this;
				JLJS.addEvent(calIcons[0],
								"click",
								function(e) {
									var instance = e.currentTarget._instance_;
									var frm = instance.frm;
									var today = new Date();
									var startDate = new Date(today.getFullYear() - (parseInt(instance.yearRange/2)), 0, 1);
									var endDate = new Date(today.getFullYear() + (parseInt(instance.yearRange/2)), 11, 31);
									var endDays = parseInt(endDate.getTime() / (24 * 60 * 60 * 1000)) - parseInt(startDate.getTime() / (24 * 60 * 60 * 1000));
									var opt = {
										baseDate:startDate.getFullYear() + "/" + (startDate.getMonth()+1) + "/" + startDate.getDate(),
										end:endDays,
										successionDate:true
									};
									opt.dayOfWeekFlag = instance.dayOfWeekFlg;
									if(instance.isEN) {
										opt.isEN = true;	
									}
									JLJS_CalNav.calDisplay(
											{target: e.currentTarget,
											option: opt,
											frm : {
												board : {year: frm.boardYear, month: frm.boardMonth, day: frm.boardDay}	
											}
											});
									e.preventDefault();
								});
			} else {
				JLJS.classAttr.add(calIcons[0], "hidden");	
			}
		}		
	},
	
	formSubmit : function() {
		if(!this.isEN) {
			var cnValue = {
				ba:this.frm.boardAirport.options[this.frm.boardAirport.selectedIndex].value,
				aa:this.frm.arrivalAirport.options[this.frm.arrivalAirport.selectedIndex].value,
				by:this.frm.boardYear.options[this.frm.boardYear.selectedIndex].value,
				bm:this.frm.boardMonth.options[this.frm.boardMonth.selectedIndex].value,
				bd:this.frm.boardDay.options[this.frm.boardDay.selectedIndex].value
			};
			JLJS_CookieMgr.setMultiCookie(this.CK_NM, cnValue);
		}
	},
	
	dateSpecify : function(dateInfo) {
		var dateSelector = new JLJS_DateSelector(this.frm.boardYear, this.frm.boardMonth, this.frm.boardDay);
		dateSelector.dayOfWeekFlag = this.dayOfWeekFlg;
		if(dateInfo.initFlg) {
			dateSelector.adjustToToday();
		} else if(dateInfo.adjustToDate){
			dateSelector.applyOffset(dateInfo.adjustToDate);
		} else {
			dateSelector.setDateBySelecter();	
		}
		if(this.dayOfWeekFlg) {
			dateSelector.setDay();
		}
	},
	
	setInitValue : function(params) {
		
		var cookie = JLJS_CookieMgr.getMultiCookie(this.CK_NM);
		
		if(cookie && (cookie.ba || cookie.aa)) {
			if(cookie.ba) {
				this.setElementValue(this.frm, "boardAirport", cookie.ba);
			}
			if(cookie.aa) {
				this.setElementValue(this.frm, "arrivalAirport", cookie.aa);
			}
		} else if(params.boardAirport || params.arrivalAirport) {
			if(params.boardAirport) {
				this.setElementValue(this.frm, "boardAirport", params.boardAirport);
			}
			if(params.arrivalAirport) {
				this.setElementValue(this.frm, "arrivalAirport", params.arrivalAirport);
			}
		} else {
			var airport = "";
			
			if(this.isEN) {
				var area = JLJS_CookieMgr.get(this.CK_NM_AREA_AIRPORT_EN);
				if(area) {
					airport = area;
				}
			} else {
				var area = JLJS_CookieMgr.get(this.CK_NM_AREA_AIRPORT);
				if(area) {
					airport = area;
				} else {
					var session = JLJS_CookieMgr.getMulti(this.CK_NM_SESSION_AIRPORT);
					if(session) {
						airport = session[this.CK_NM_AUTO_SEL_AIRPORT];
					}
				}
			}
			if(airport) {
				if(JLJS_RltnlLst.airToAir_domFare[airport]) {
					airport = JLJS_RltnlLst.airToAir_domFare[airport];
				}
				this.setElementValue(this.frm, "boardAirport", airport);
				this.setElementValue(this.frm, "arrivalAirport", airport);
			}
		}
		
		var today = new Date();
		var startYear = today.getFullYear() - (parseInt(this.yearRange/2));
		var endYear = today.getFullYear() + (parseInt(this.yearRange/2));
		for(var i=startYear; i<=endYear; i++) {
			this.frm.boardYear.options[i-startYear].value = i;
			this.frm.boardYear.options[i-startYear].text = i + (this.isEN ? "" : "\u5e74");
		}
		
		var dateInfo = {};
		if(cookie && cookie.by && cookie.bm && cookie.bd) {
			this.setElementValue(this.frm, "boardYear", cookie.by);
			this.setElementValue(this.frm, "boardMonth", cookie.bm);
			this.setElementValue(this.frm, "boardDay", cookie.bd);
		} else if(params.adjustToDate) {
			dateInfo.adjustToDate = params.adjustToDate;
		} else {
			dateInfo.initFlg = true;	
		}
		this.dateSpecify(dateInfo);
		
		
	},
	
	afterSetup : function() {
	},
	
	getAdjustToDate : function(endDate, constDate, adjustToDate) {
		var eArray = endDate.split("/");
		var cArray = constDate.split("/");
		if(eArray.length == 3 && cArray.length == 3) {
			var eDate = new Date(parseInt(eArray[0], 10), parseInt(eArray[1]-1, 10), parseInt(eArray[2], 10));
			var cDate = new Date(parseInt(cArray[0], 10), parseInt(cArray[1]-1, 10), parseInt(cArray[2], 10));
			var tDate = new Date();
			tDate.setHours(0);
			tDate.setMinutes(0);
			tDate.setSeconds(0);
			tDate.setMilliseconds(0);
			
			if(tDate.getTime() <= eDate.getTime()) {
				var longTime = 0;
				if(cDate.getTime() >= tDate.getTime()) {
					longTime = cDate.getTime() - tDate.getTime();
					adjustToDate = "+";
				} else {
					longTime = tDate.getTime() - cDate.getTime();
					adjustToDate = "-";
				}
					
				adjustToDate = adjustToDate + (parseInt(longTime / 24 / 3600 / 1000, 10)) + "d";
			}
		}
		return adjustToDate;
	}
}

var JLJS_DomFare = new JLJS_DomFareModule();

function JLJS_DomFareSetup(fareCode, params) {
	if(!params) {
		params = {};
	}
	params.fareCode = fareCode;
	JLJS.addOnload(function(){JLJS_DomFare.setup(params);});
}

