/*****************************************************************************************
	@file
	hyp_date.js <br/>
	日付関連処理ファイル <br/>
	<br/>
	@breif date time process
	@author Hideki Ikeda
	@version 1.0.0.0
	@since 07/10/2009
	$Revision: $
******************************************************************************************/
//----------- Grobal variables -----------------------------------------------------------
var YEAR_CHAR_MAP  = {'ja':"年", 'en':"",  'zh':"年"};
var MONTH_CHAR_MAP = {'ja':"月", 'en':"/", 'zh':"月"};
var DAY_CHAR_MAP   = {'ja':"日", 'en':"",  'zh':"日"};

var HOUR_AM_CHAR_MAP = {'ja':"時", 'en':"am", 'zh':"\u65f6"};
var HOUR_PM_CHAR_MAP = {'ja':"時", 'en':"pm", 'zh':"\u65f6"};
var MINUTE_CHAR_MAP =  {'ja':"分", 'en':"",   'zh':"分"};

var YEAR_MONTH_ORDER = {'ja':'YM', 'en':'MY', 'zh':'YM'};
var USE_AMPM = {'ja':'n', 'en':'y', 'zh':'n'};

var EN_MONTH_CHAR = ['none','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
var MONTH_CHAR_CONVERTER = {
	'ja':function(v){return v;},
	'en':function(v){return EN_MONTH_CHAR[v];},
	'zh':function(v){return v;}
};

var HOUR_CHAR_CONVERTER = {
	'ja':function(v) {return v;},
	'en':function(v) {
		return ((v % 12) == 0) ? 12 : (v % 12);
	},
	'zh':function(v) {return v;}
};
//----------------------------------------------------------------------------------------
var HypLocale = Class.create();
HypLocale.prototype = {

	initialize : function(lc_lang) {
		this.lc_lang = lc_lang;

		this.yearChr = YEAR_CHAR_MAP[lc_lang];
		this.monthChr = MONTH_CHAR_MAP[lc_lang];
		this.dayChr = DAY_CHAR_MAP[lc_lang];
		this.amHourChr = HOUR_AM_CHAR_MAP[lc_lang];
		this.pmHourChr = HOUR_PM_CHAR_MAP[lc_lang];
		this.minuteChr = MINUTE_CHAR_MAP[lc_lang];
		
		this.ymOrder = YEAR_MONTH_ORDER[lc_lang];
		this.useAmPm = USE_AMPM[lc_lang];
		
		this.monthCharConverter = MONTH_CHAR_CONVERTER[lc_lang];
		this.hourCharConverter = HOUR_CHAR_CONVERTER[lc_lang];
	}
};

var HypDateCombo = Class.create();
HypDateCombo.prototype = {

	initialize : function(lc_lang, currentDateTime) {
		this.locale = new HypLocale(lc_lang);

		if (currentDateTime != null) {
			this.currentTime = new Date();//将来的にサーバから取得する時要変更。
		} else {
			this.currentTime = new Date();
		}
	},

	setCurrentDate : function( ymSel, daySel ) {
		var year = this.currentTime.getFullYear();
		var month = this.currentTime.getMonth() + 1;
		var day = this.currentTime.getDate();
		month = ( month < 10 ) ? "0" + month : "" + month;
		var yyyymm = year + month;
		if( parseInt( yyyymm, 10 ) < parseInt( ymSel.options[ 0 ].value, 10 ) ){
			// 有効期間前:最初の日
			ymSel.options[ 0 ].selected = true;
			daySel.options[ 0 ].selected = true;
		}else if( parseInt( yyyymm, 10 ) > parseInt( ymSel.options[ ymSel.options.length - 1 ].value, 10 ) ){
			// 有効期間後:最後の日
			ymSel.options[ ymSel.options.length - 1 ].selected = true;
			daySel.options[ daySel.options.length - 1 ].selected = true;
		}else{
			// 有効期間内:当日
			ymSel.value = yyyymm;
			daySel.options[ day - 1 ].selected = true;
		}
	},

	setCurrentTime : function( hourSel, minuteSel ) {
		var nowHour = this.currentTime.getHours();
		hourSel.options[ nowHour ].selected = true;
		var nowMinute = this.currentTime.getMinutes();
		minuteSel.options[ nowMinute ].selected = true;
	},

	adjustMaxDay : function ( yyyymm, selectDay ) {
		var year = parseInt( yyyymm.substr( 0, 4 ), 10 );
		var month = parseInt( yyyymm.substr( 4, 2 ), 10 );
		var max = this._getMaxDayOfMonth( year, month );

		var selectMax = selectDay.options.length;
		if( selectMax > max ){
			for( var d = selectMax ; d > max ; --d ){
				selectDay.options[ d - 1 ] = null;
			}
		}else if( selectMax < max ){
			for( var d = selectMax ; d < max ; ++d ){
				selectDay.options[ d ] = new Option( this._paddingZero(d+1)+this.locale.dayChr, this._paddingZero(d+1));
			}
		}
	},

	_concatYM : function(year, month) {
		switch(this.locale.ymOrder) {
		case 'YM':
			return year + this.locale.yearChr
							+ this._paddingZero(month) + this.locale.monthChr;
		case 'MY':
			return this._paddingZero(month) + this.locale.monthChr
							+ year + this.locale.yearChr;
		default:
			return "";
		}
	},
	
	_getMaxDayOfMonth : function(year, month) {
		switch(month) {
		case 2:
			if (((year%4) == 0 && (year % 100) != 0) || year % 400 == 0) {
				return 29;
			} else {
				return 28;
			}
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
		default:
			return 31;
		}
	},

	_paddingZero : function(value) {
		return (value < 10) ? "0" + value : "" + value;
	}
};

function init_hyp_date() {
	var lc_lang = $F('lc_lang');
	
	var hdc = new HypDateCombo( lc_lang );

	var ymSel = $('ymSel');
	var daySel = $('day');
	var hourSel = $('hour');
	var minuteSel = $('minute');
	// 現在日時設定、末日調整
	hdc.setCurrentDate( ymSel, daySel );
	hdc.adjustMaxDay( ymSel.value, daySel );
	hdc.setCurrentTime( hourSel, minuteSel );

	setYearMonthElm();
};

function changeDayOptions(yyyymm) {
	var lc_lang = $F('lc_lang');

	var daySel = $('day');
	var hdc = new HypDateCombo(lc_lang);
	
	hdc.adjustMaxDay( yyyymm, daySel );
};

function setYearMonthElm() {
	var ym = $F('ymSel');
	$('year').value = ym.substr(0, 4);
	$('month').value = ym.substr(4, 2);
};


/*--- m-okuda ADD↓--------------------------------------------------------------------------------------------------*/

function init_hyp_date_golf() {
	var lc_lang = $F('lc_lang');
	
	var hdc = new HypDateCombo( lc_lang );
	
	var golf_ymSel = $('golf_ymSel');
	var golf_daySel = $('golf_day');
	var golf_hourSel = $('golf_hour');
	var golf_minuteSel = $('golf_minute');
	// 現在日時設定、末日調整
	hdc.setCurrentDate( golf_ymSel, golf_daySel );
	hdc.adjustMaxDay( golf_ymSel.value, golf_daySel );
	hdc.setCurrentTime( golf_hourSel, golf_minuteSel );
	
	setYearMonthElmGolf();
};

function changeDayOptionsGolf(yyyymm) {
	var lc_lang = $F('lc_lang');

	var daySel = $('golf_day');
	var curDayVal = parseInt(daySel.value,10);
	var hdc = new HypDateCombo(lc_lang);

	hdc.adjustMaxDay( yyyymm, daySel );
};

function setYearMonthElmGolf() {
	var ym = $F('golf_ymSel');
	$('golf_year').value = ym.substr(0, 4);
	$('golf_month').value = ym.substr(4, 2);
};

/*--- m-okuda ADD↑--------------------------------------------------------------------------------------------------*/

