////////////////////////////////////////////////////////////////////////////////
// 月齢ガジェット
//   Copyright (C) 2008 - 2009 AAOh inc.
////////////////////////////////////////////////////////////////////////////////

/**
 * @fileOverview 月齢ガジェット
 * @author       $Author: fujishiro $
 */

(function () {
/**
 * Main。
 *
 * @constructor
 */
moonage.Main = aaoh.kaze.Gadget.extend(
	aaoh.sora.MainEx, function() {
	this.calYear  = null;
	this.calMonth = null;

	this.fg      = null;
	this.fgToday = '#ff0000';

	this.emptyImg  = 'lib/aaoh.sora.t.png';
	this.dispTimer = new aaoh.kaze.Timer(this);
});
	/**
	 * 空文字列の取得。
	 *
	 * @return {String} 空文字列
	 */
	moonage.Main.prototype.
	getEmpty = function() {
		var emptyValue = null;

		if (aaoh.kaze.Type.isGoogle() || aaoh.kaze.Type.isYahoo()) {
			emptyValue = '';

		} else {
			emptyValue = '&nbsp;';
		}

		return emptyValue;
	}

	/**
	 * 月の名前の取得。
	 *
	 * @param  {Number} age 月齢
	 * @return {String} 月の名前
	 */
	moonage.Main.prototype.
	getMoonName = function(age) {
		var moonName = null;

		if (age - 0.5 >= 0 && age - 0.5 < 1.0) {
			// 新月
			moonName = aaoh.sora.App.control.locale.getString('TTL_NEW');

		} else if (
			age - 0.5 <= aaoh.sora.App.control.MONNAGE_WAXING
			&& age + 0.5 > aaoh.sora.App.control.MONNAGE_WAXING
		) {
			// 上弦
			moonName = aaoh.sora.App.control.locale.getString('TTL_WAXING');

		} else if (
			age - 0.5 <= aaoh.sora.App.control.MONNAGE_FULL
			&& age + 0.5 > aaoh.sora.App.control.MONNAGE_FULL
		) {
			// 満月
			moonName = aaoh.sora.App.control.locale.getString('TTL_FULL');

		} else if (
			age - 0.5 <= aaoh.sora.App.control.MONNAGE_WANING
			&& age + 0.5 > aaoh.sora.App.control.MONNAGE_WANING
		) {
			// 下弦
			moonName = aaoh.sora.App.control.locale.getString('TTL_WANING');

		} else {
			moonName = this.getEmpty();

		} // if (age - 0.5 >= 0 && age - 0.5 < 1.0)

		return moonName;
	}

	/**
	 * 月のイメージ番号の取得。
	 *
	 * @param  {Number} age 月齢
	 * @return {Number}     イメージ番号
	 */
	moonage.Main.prototype.
	getMoonImageNumber = function(age) {
		var moonNum = 0;

		if (
			age - 0.5 <= 0 
			|| age + 0.5 > aaoh.sora.App.control.MONNAGE_NEW
		) {
			// 新月
			moonNum = 0;

		} else if (
			age - 0.5 <= aaoh.sora.App.control.MONNAGE_WAXING
			&& age + 0.5 > aaoh.sora.App.control.MONNAGE_WAXING
		) {
			// 上弦
			moonNum = 4;

		} else if (
			age - 0.5 <= aaoh.sora.App.control.MONNAGE_FULL
			&& age + 0.5 > aaoh.sora.App.control.MONNAGE_FULL
		) {
			// 満月
			moonNum = 8;

		} else if (
			age - 0.5 <= aaoh.sora.App.control.MONNAGE_WANING
			&& age + 0.5 > aaoh.sora.App.control.MONNAGE_WANING
		) {
			// 下弦
			moonNum = 13;

		} else {
			moonNum = parseInt(
				17 / aaoh.sora.App.control.MONNAGE_VALUE * age
			, 10);

		} // if (age - 0.5 <= 0 || ...)

		return moonNum;
	}

	/**
	 * 月齢表示。
	 */
	moonage.Main.prototype.
	showMoonage = function() {
		this.dispTimer.clearTimeout();

		this.showAge();

		// 次回更新設定
		this.dispTimer.setTimeout(function() {
			aaoh.sora.App.main.showMoonage();
		}, aaoh.sora.App.control.INTERVAL);
	}

	/**
	 * 月齢表示。
	 */
	moonage.Main.prototype.
	showAge = function() {
		// 月齢計算
		var now      = new Date();
		var age      = this.moonage(now);
		var moonAge  = parseInt(age * 10, 10) / 10;
		var moonName = this.getMoonName(moonAge);
		var moonNum  = this.getMoonImageNumber(moonAge);

		moonAge = String(moonAge);
		if (moonAge.indexOf('.') < 0) {
			moonAge = moonAge + '.0';
		}

		// 月齢表示
		var lblDate     = aaoh.kaze.Gadget.$('lblDate');
		var imgMoonage  = aaoh.kaze.Gadget.$('imgMoonage');
		var lblMoonName = aaoh.kaze.Gadget.$('lblMoonName');
		var lblMoonage  = aaoh.kaze.Gadget.$('lblMoonage');

		var numMonth = now.getMonth() + 1;
		var numDate  = now.getDate();
		var numDay   = now.getDay();

		var month = null;
		var date  = null;
		var day   = null;
		if (numMonth < 10) {
			month = '0' + numMonth;
		} else {
			month = String(numMonth);
		}
		if (numDate < 10) {
			date = '0' + numDate;
		} else {
			date = String(numDate);
		}
		switch (numDay) {
			case 0: // 日
			default:
				day = aaoh.sora.App.control.locale.getString('TTL_SUN');
				break;

			case 1: // 月
				day = aaoh.sora.App.control.locale.getString('TTL_MON');
				break;

			case 2: // 火
				day = aaoh.sora.App.control.locale.getString('TTL_TUE');
				break;

			case 3: // 水
				day = aaoh.sora.App.control.locale.getString('TTL_WED');
				break;

			case 4: // 木
				day = aaoh.sora.App.control.locale.getString('TTL_THU');
				break;

			case 5: // 金
				day = aaoh.sora.App.control.locale.getString('TTL_FRI');
				break;

			case 6: // 土
				day = aaoh.sora.App.control.locale.getString('TTL_SAT');
				break;
		}

		aaoh.kaze.Element.setValue(lblDate,     month + '/' + date + ' (' + day + ')');
		aaoh.kaze.Element.setValue(lblMoonName, moonName);
		aaoh.kaze.Element.setValue(lblMoonage,  '(' + moonAge + ')');

		var align = null;
		if (moonName == '' || moonName == '&nbsp;') {
			aaoh.kaze.Element.setDisplay(lblMoonName, false);

			align = 'center';
		} else {
			aaoh.kaze.Element.setDisplay(lblMoonName, true);
			align = 'right';
		}

		// google対応
		if (aaoh.kaze.Type.isGoogle()) {
			lblMoonage.align = align;

		// yahoo対応
		} else if (aaoh.kaze.Type.isYahoo()) {
			lblMoonage.style.textAlign = align;
		}

		var type = aaoh.sora.App.model.data.type;
		var src  = 'images/moonage' + type + '-' + moonNum + '.png';
		aaoh.kaze.Element.setImage(imgMoonage, src);
		aaoh.kaze.Element.setTooltip(imgMoonage, moonAge);
	}

	/**
	 * カレンダー表示。
	 */
	moonage.Main.prototype.
	showCalender = function() {
		this.dispTimer.clearTimeout();

		// 初期設定の設定
		var date = new Date();
		this.calYear  = date.getFullYear();
		this.calMonth = date.getMonth() + 1;

		this.showMonthAge(0);

		// 次回更新設定
		this.dispTimer.setTimeout(function() {
			aaoh.sora.App.main.showCalender();
		}, aaoh.sora.App.control.INTERVAL);
	}

	/**
	 * カレンダー表示。
	 *
	 * @param {Number} sub 今月からの差
	 */
	moonage.Main.prototype.
	showMonthAge = function(sub) {
		// 日付オブジェクトの生成
		var numYear  = this.calYear;
		var numMonth = this.calMonth;
		var cal      = new Date(numYear, numMonth - 1 + sub, 1);

		// 年月の表示
		numYear  = cal.getFullYear();
		numMonth = cal.getMonth() + 1;
		this.calYear  = numYear;
		this.calMonth = numMonth;

		var year  = String(numYear);
		var month = null;
		if (numMonth < 10) {
			month = '0' + numMonth;
		} else {
			month = String(numMonth);
		}

		var lblYearMonth = aaoh.kaze.Gadget.$('lblYearMonth');
		var lblSun       = aaoh.kaze.Gadget.$('lblSun');
		var lblMon       = aaoh.kaze.Gadget.$('lblMon');
		var lblTue       = aaoh.kaze.Gadget.$('lblTue');
		var lblWed       = aaoh.kaze.Gadget.$('lblWed');
		var lblThu       = aaoh.kaze.Gadget.$('lblThu');
		var lblFri       = aaoh.kaze.Gadget.$('lblFri');
		var lblSat       = aaoh.kaze.Gadget.$('lblSat');

		var ttlYear  = aaoh.sora.App.control.locale.getString('TTL_YEAR')
		var ttlMonth = aaoh.sora.App.control.locale.getString('TTL_MONTH')
		var ttlSun   = aaoh.sora.App.control.locale.getString('TTL_SUN')
		var ttlMon   = aaoh.sora.App.control.locale.getString('TTL_MON')
		var ttlTue   = aaoh.sora.App.control.locale.getString('TTL_TUE')
		var ttlWed   = aaoh.sora.App.control.locale.getString('TTL_WED')
		var ttlThu   = aaoh.sora.App.control.locale.getString('TTL_THU')
		var ttlFri   = aaoh.sora.App.control.locale.getString('TTL_FRI')
		var ttlSat   = aaoh.sora.App.control.locale.getString('TTL_SAT')

		// google対応
		if (aaoh.kaze.Type.isGoogle()) {
			var maxLen = 5;
			var len    = (maxLen - ttlSun.length) / 2;
			for (var cnt = 0; cnt < len; cnt++) {
				ttlSun = ' ' + ttlSun;
				ttlMon = ' ' + ttlMon;
				ttlTue = ' ' + ttlTue;
				ttlWed = ' ' + ttlWed;
				ttlThu = ' ' + ttlThu;
				ttlFri = ' ' + ttlFri;
				ttlSat = ' ' + ttlSat;
			}
		}

		aaoh.kaze.Element.setValue(
			lblYearMonth, year + ttlYear + month + ttlMonth
		);
		aaoh.kaze.Element.setValue(lblSun, ttlSun);
		aaoh.kaze.Element.setValue(lblMon, ttlMon);
		aaoh.kaze.Element.setValue(lblTue, ttlTue);
		aaoh.kaze.Element.setValue(lblWed, ttlWed);
		aaoh.kaze.Element.setValue(lblThu, ttlThu);
		aaoh.kaze.Element.setValue(lblFri, ttlFri);
		aaoh.kaze.Element.setValue(lblSat, ttlSat);

		var tmpDate = new Date(cal.getTime());
		tmpDate.setMonth(tmpDate.getMonth() + 1);
		tmpDate.setTime(tmpDate.getTime() - 86400000);

		var nowDate = new Date();

		var firstDay = cal.getDay() + 1;
		var lastDate = tmpDate.getDate();
		var dateCnt  = 1;
		for (var weekCnt = 1; weekCnt <= 6; weekCnt++) {
			for (var dayCnt = 1; dayCnt <= 7; dayCnt++) {
				var date     = null;
				var today    = null;
				var moonName = null;
				var moonNum  = null;
				var moonAge  = null;

				if (
					weekCnt == 1 && dayCnt < firstDay
					|| dateCnt > lastDate
				) {
					// 空表示
					date     = this.getEmpty();
					today    = this.fg;
					moonName = '';
					moonNum  = 99;
					moonAge  = 99;

				} else {
					// 月齢計算
					date = String(dateCnt);

					// 今日の判定
					if (
						cal.getFullYear() == nowDate.getFullYear()
						&& cal.getMonth() == nowDate.getMonth()
						&& dateCnt == nowDate.getDate()
						&& aaoh.sora.App.model.data.type != '3'
					) {
						today = this.fgToday;
					} else {
						today = this.fg;
					}

					cal.setDate(dateCnt);
					var age  = this.moonage(cal);
					moonAge  = parseInt(age * 10, 10) / 10;
					moonName = this.getMoonName(moonAge);
					moonNum  = this.getMoonImageNumber(moonAge);

					moonAge = String(moonAge);
					if (moonAge.indexOf('.') < 0) {
						moonAge = moonAge + '.0';
					}

					dateCnt++;
				}

				var lblDate
					= aaoh.kaze.Gadget.$('lblDate_' + weekCnt + '_' + dayCnt);
				var imgMoonage
					= aaoh.kaze.Gadget.$('imgMoonage_' + weekCnt + '_' + dayCnt);
				var lblMoonName
					= aaoh.kaze.Gadget.$('lblMoonName_' + weekCnt + '_' + dayCnt);
				var lblMoonage
					= aaoh.kaze.Gadget.$('lblMoonage_' + weekCnt + '_' + dayCnt);

				var type = aaoh.sora.App.model.data.type;
				var src  = 'images/moonage' + type + '-' + moonNum + '.png';
				if (moonNum == 99) {
					src = this.emptyImg;
				}

				aaoh.kaze.Element.setValue(lblDate, date);
				aaoh.kaze.Element.setForeground(lblDate, today);
				aaoh.kaze.Element.setImage(imgMoonage,  src);
				aaoh.kaze.Element.setValue(lblMoonName, moonName);

				var moonAge2 = null;
				if (moonAge < 99) {
					aaoh.kaze.Element.setTooltip(imgMoonage, moonAge);
					moonAge2 = '(' + moonAge + ')';

				} else {
					aaoh.kaze.Element.setTooltip(imgMoonage, '');
					moonAge2 = this.getEmpty();
				}
				aaoh.kaze.Element.setValue(lblMoonage, moonAge2);

			} // for (var dayCnt = 1; dayCnt <= 7; dayCnt++)
		} // for (var weekCnt = 1; weekCnt <= 5; weekCnt++)
	}

	/**
	 * 月齢計算。
	 *
	 * @param  {Date}   date 対象日
	 * @return {Number}      月齢
	 */
	moonage.Main.prototype.
	moonage = function(date) {
		var age = 0;

		// 月齢 = ユリウス日 - 直近の新月
		date.setHours(12);
		date.setMinutes(0);
		date.setSeconds(0);
		date.setMilliseconds(0);

		var julianDate = date.getTime() / 86400000.0 + 2440587.5;

		var k       = Math.floor(
			(julianDate - 2451550.09765) / aaoh.sora.App.control.MONNAGE_VALUE
		);
		var t       = k / 1236.85;
		var newDate = 2451550.09765
			+ aaoh.sora.App.control.MONNAGE_VALUE * k
			+ 0.0001337 * t * t
			- 0.40720   * Math.sin((201.5643 + 385.8169 * k) * 0.017453292519943)
			+ 0.17241   * Math.sin((  2.5534 +  29.1054 * k) * 0.017453292519943);

		age = julianDate - newDate;

		// 補正
		if (age > aaoh.sora.App.control.MONNAGE_VALUE) {
			age = aaoh.sora.App.control.MONNAGE_VALUE;

		} else if (age < 0) {
			age = aaoh.sora.App.control.MONNAGE_VALUE + age;
		}

		return age;
	}

	/**
	 * フォーカス設定。
	 */
	moonage.Main.prototype.
	setFocus = function() {
		// 特になし
	}

	/**
	 * 表示データの初期化。
	 */
	moonage.Main.prototype.
	initData = function() {
		// デフォルト値の更新
		var flgOnDock = aaoh.sora.App.control.flgOnDock;
		var type      = aaoh.sora.App.model.data.type;

		this.initToolbarData(type);

		if (flgOnDock) {
			var main    = aaoh.kaze.Gadget.$('onDock');
			var srcMain = null;
			if (aaoh.kaze.Type.isSidebar()) {
				srcMain = 'lib/aaoh.sora.t.png';

			} else {
				srcMain = 'images/moonage' + type + '-base.png';
			}
			// IE6では入れ子透過PNG対応しない
			aaoh.kaze.Element.setBackgroundImage(main, srcMain, false);

			// 透過PNG対応
			if (aaoh.kaze.Type.isSidebar()) {
				var sidebarImgBg    = aaoh.kaze.Gadget.$('sidebarImgBg');
				var srcSidebarImgBg = 'images/moonage' + type + '-base_sidebar.png';

				sidebarImgBg.style.width
					= aaoh.sora.App.control.WINDOW_ONDOCK_WIDTH + 'px';
				sidebarImgBg.style.height
					= aaoh.sora.App.control.WINDOW_ONDOCK_HEIGHT + 'px';
				aaoh.kaze.Element.setImage(sidebarImgBg, srcSidebarImgBg);
			}

			this.initMoonageData(type);

			this.showMoonage();

		} else {
			var main    = aaoh.kaze.Gadget.$('unDock');
			var srcMain = null;
			if (aaoh.kaze.Type.isSidebar()) {
				srcMain = 'lib/aaoh.sora.t.png';

			} else {
				srcMain = 'images/moonage' + type + '-undock.png';
			}
			// IE6では入れ子透過PNG対応しない
			aaoh.kaze.Element.setBackgroundImage(main, srcMain, false);

			// 透過PNG対応
			if (aaoh.kaze.Type.isSidebar()) {
				var sidebarImgBg    = aaoh.kaze.Gadget.$('sidebarImgBg');
				var srcSidebarImgBg = 'images/moonage' + type + '-undock_sidebar.png';

				sidebarImgBg.style.width
					= aaoh.sora.App.control.WINDOW_UNDOCK_WIDTH + 'px';
				sidebarImgBg.style.height
					= aaoh.sora.App.control.WINDOW_UNDOCK_HEIGHT + 'px';
				aaoh.kaze.Element.setImage(sidebarImgBg, srcSidebarImgBg);
			}

			this.initUnDockData(type);

			this.showCalender();
		}

		//this.dispTimer.setTimeout(function() {
		//	aaoh.sora.App.main.setFocus();
		//}, 200);
	}

	/**
	 * 表示データの初期化。
	 *
	 * @param {String} type 表示タイプ
	 */
	moonage.Main.prototype.
	initToolbarData = function(type) {
		var btnMax    = aaoh.kaze.Gadget.$('btnMax');
		var btnOption = aaoh.kaze.Gadget.$('btnOption');
		var btnClose  = aaoh.kaze.Gadget.$('btnClose');
		if (btnOption == null || btnClose == null) {
			return;
		}

		var srcBtnMaxUp      = null;
		var srcBtnMaxOver    = null;
		var srcBtnMaxDown    = null;
		var srcBtnOptionUp   = null;
		var srcBtnOptionOver = null;
		var srcBtnOptionDown = null;
		var srcBtnCloseUp    = null;
		var srcBtnCloseOver  = null;
		var srcBtnCloseDown  = null;
		if (!aaoh.kaze.Type.isGoogle() && !aaoh.kaze.Type.isIE()) {
			srcBtnMaxUp    = 'images/moonage' + type + '-max.png';
			srcBtnOptionUp = 'images/moonage' + type + '-option.png';
			srcBtnCloseUp  = 'images/moonage' + type + '-close.png';

		} else {
			srcBtnMaxUp    = 'sub-images/moonage' + type + '-max_up.png';
			srcBtnOptionUp = 'sub-images/moonage' + type + '-option_up.png';
			srcBtnCloseUp  = 'sub-images/moonage' + type + '-close_up.png';
		}
		srcBtnMaxOver    = 'sub-images/moonage' + type + '-max_over.png';
		srcBtnMaxDown    = 'sub-images/moonage' + type + '-max_down.png';
		srcBtnOptionOver = 'sub-images/moonage' + type + '-option_over.png';
		srcBtnOptionDown = 'sub-images/moonage' + type + '-option_down.png';
		srcBtnCloseOver  = 'sub-images/moonage' + type + '-close_over.png';
		srcBtnCloseDown  = 'sub-images/moonage' + type + '-close_down.png';

		aaoh.kaze.Element.setBackgroundImage(
			btnMax, srcBtnMaxUp, srcBtnMaxOver, srcBtnMaxDown
		);
		aaoh.kaze.Element.setBackgroundImage(
			btnOption, srcBtnOptionUp, srcBtnOptionOver, srcBtnOptionDown
		);
		aaoh.kaze.Element.setBackgroundImage(
			btnClose, srcBtnCloseUp, srcBtnCloseOver, srcBtnCloseDown
		);
	}

	/**
	 * 表示データの初期化。
	 *
	 * @param {String} type 表示タイプ
	 */
	moonage.Main.prototype.
	initMoonageData = function(type) {
		var lblDate     = aaoh.kaze.Gadget.$('lblDate');
		var lblMoonName = aaoh.kaze.Gadget.$('lblMoonName');
		var lblMoonage  = aaoh.kaze.Gadget.$('lblMoonage');

		var fgColor = null;
		//var bgColor = null;
		switch (type) {
			default:
			case '1':
				fgColor = '#7f7f7f';
				//bgColor = '#ffffff';
				break;

			case '2':
				fgColor = '#ffffff';
				//bgColor = '#000000';
				break;

			case '3':
				fgColor = '#ffffff';
				//bgColor = '#ff0000';
				break;
		}

		aaoh.kaze.Element.setForeground(lblDate,     fgColor);
		aaoh.kaze.Element.setForeground(lblMoonName, fgColor);
		aaoh.kaze.Element.setForeground(lblMoonage,  fgColor);
	}

	/**
	 * 表示データの初期化。
	 *
	 * @param {String} type 表示タイプ
	 */
	moonage.Main.prototype.
	initUnDockData = function(type) {
		var btnPre       = aaoh.kaze.Gadget.$('btnPre');
		var lblYearMonth = aaoh.kaze.Gadget.$('lblYearMonth');
		var btnNext      = aaoh.kaze.Gadget.$('btnNext');
		var tblCal       = aaoh.kaze.Gadget.$('tblCal');
		var lblSun       = aaoh.kaze.Gadget.$('lblSun');
		var lblMon       = aaoh.kaze.Gadget.$('lblMon');
		var lblTue       = aaoh.kaze.Gadget.$('lblTue');
		var lblWed       = aaoh.kaze.Gadget.$('lblWed');
		var lblThu       = aaoh.kaze.Gadget.$('lblThu');
		var lblFri       = aaoh.kaze.Gadget.$('lblFri');
		var lblSat       = aaoh.kaze.Gadget.$('lblSat');

		var lstCell        = new Array();
		//var lstLblDate     = new Array();
		var lstLblMoonName = new Array();
		var lstLblMoonage  = new Array();

		for (var weekCnt = 1; weekCnt <= 6; weekCnt++) {
			for (var dayCnt = 1; dayCnt <= 7; dayCnt++) {
				var cell
					= aaoh.kaze.Gadget.$('cell_' + weekCnt + '_' + dayCnt);
				//var lblDate
				//	= aaoh.kaze.Gadget.$('lblDate_' + weekCnt + '_' + dayCnt);
				var lblMoonName
					= aaoh.kaze.Gadget.$('lblMoonName_' + weekCnt + '_' + dayCnt);
				var lblMoonage
					= aaoh.kaze.Gadget.$('lblMoonage_' + weekCnt + '_' + dayCnt);

				lstCell.push(cell);
				//lstLblDate.push(lblDate);
				lstLblMoonName.push(lblMoonName);
				lstLblMoonage.push(lblMoonage);
			} // for (var dayCnt = 1; dayCnt <= 7; dayCnt++)
		} // for (var weekCnt = 1; weekCnt <= 5; weekCnt++)

		var fgColor     = null;
		var bgDayColor1 = null;
		var bgDayColor2 = null;
		var bgDayColor3 = null;
		var borderColor = null;
		var borderImg   = null;
		switch (type) {
			default:
			case '1':
				fgColor     = '#7f7f7f';
				bgDayColor1 = '#f5e3e3';
				bgDayColor2 = '#ececec';
				bgDayColor3 = '#dfdff3';
				borderColor = '#b4b4b4';
				borderImg   = 'sub-images/line-bottom.png';
				break;

			case '2':
				fgColor     = '#ffffff';
				bgDayColor1 = '#7e7e7e';
				bgDayColor2 = '#333333';
				bgDayColor3 = '#24364c';
				borderColor = '#464646';
				borderImg   = 'sub-images/line-top.png';
				break;

			case '3':
				fgColor     = '#ffffff';
				bgDayColor1 = '#ba0000';
				bgDayColor2 = '#d21313';
				bgDayColor3 = '#ba0000';
				borderColor = '#464646';
				borderImg   = 'sub-images/line-top.png';
				break;
		}

		aaoh.kaze.Element.setForeground(lblYearMonth, fgColor);
		aaoh.kaze.Element.setForeground(lblSun,       fgColor);
		aaoh.kaze.Element.setForeground(lblMon,       fgColor);
		aaoh.kaze.Element.setForeground(lblTue,       fgColor);
		aaoh.kaze.Element.setForeground(lblWed,       fgColor);
		aaoh.kaze.Element.setForeground(lblThu,       fgColor);
		aaoh.kaze.Element.setForeground(lblFri,       fgColor);
		aaoh.kaze.Element.setForeground(lblSat,       fgColor);
		aaoh.kaze.Element.setBackground(lblSun,       bgDayColor1);
		aaoh.kaze.Element.setBackground(lblMon,       bgDayColor2);
		aaoh.kaze.Element.setBackground(lblTue,       bgDayColor2);
		aaoh.kaze.Element.setBackground(lblWed,       bgDayColor2);
		aaoh.kaze.Element.setBackground(lblThu,       bgDayColor2);
		aaoh.kaze.Element.setBackground(lblFri,       bgDayColor2);
		aaoh.kaze.Element.setBackground(lblSat,       bgDayColor3);
		//for (var cnt = 0; cnt < lstLblDate.length; cnt++) {
		//	var lblDate = lstLblDate[cnt];
		//	aaoh.kaze.Element.setForeground(lblDate, fgColor);
		//}
		for (var cnt = 0; cnt < lstLblMoonName.length; cnt++) {
			var lblMoonName = lstLblMoonName[cnt];
			aaoh.kaze.Element.setForeground(lblMoonName, fgColor);
		}
		for (var cnt = 0; cnt < lstLblMoonage.length; cnt++) {
			var lblMoonage = lstLblMoonage[cnt];
			aaoh.kaze.Element.setForeground(lblMoonage, fgColor);
		}

		if (aaoh.kaze.Type.isGoogle() || aaoh.kaze.Type.isYahoo()) {
			var lnRow1 = aaoh.kaze.Gadget.$('lnRow1');
			var lnRow2 = aaoh.kaze.Gadget.$('lnRow2');
			var lnRow3 = aaoh.kaze.Gadget.$('lnRow3');
			var lnRow4 = aaoh.kaze.Gadget.$('lnRow4');
			var lnRow5 = aaoh.kaze.Gadget.$('lnRow5');
			var lnRow6 = aaoh.kaze.Gadget.$('lnRow6');
			var lnRow7 = aaoh.kaze.Gadget.$('lnRow7');
			var lnRow8 = aaoh.kaze.Gadget.$('lnRow8');
			var lnCol1 = aaoh.kaze.Gadget.$('lnCol1');
			var lnCol2 = aaoh.kaze.Gadget.$('lnCol2');
			var lnCol3 = aaoh.kaze.Gadget.$('lnCol3');
			var lnCol4 = aaoh.kaze.Gadget.$('lnCol4');
			var lnCol5 = aaoh.kaze.Gadget.$('lnCol5');
			var lnCol6 = aaoh.kaze.Gadget.$('lnCol6');
			var lnCol7 = aaoh.kaze.Gadget.$('lnCol7');
			var lnCol8 = aaoh.kaze.Gadget.$('lnCol8');

			aaoh.kaze.Element.setImage(lnRow1, borderImg);
			aaoh.kaze.Element.setImage(lnRow2, borderImg);
			aaoh.kaze.Element.setImage(lnRow3, borderImg);
			aaoh.kaze.Element.setImage(lnRow4, borderImg);
			aaoh.kaze.Element.setImage(lnRow5, borderImg);
			aaoh.kaze.Element.setImage(lnRow6, borderImg);
			aaoh.kaze.Element.setImage(lnRow7, borderImg);
			aaoh.kaze.Element.setImage(lnRow8, borderImg);
			aaoh.kaze.Element.setImage(lnCol1, borderImg);
			aaoh.kaze.Element.setImage(lnCol2, borderImg);
			aaoh.kaze.Element.setImage(lnCol3, borderImg);
			aaoh.kaze.Element.setImage(lnCol4, borderImg);
			aaoh.kaze.Element.setImage(lnCol5, borderImg);
			aaoh.kaze.Element.setImage(lnCol6, borderImg);
			aaoh.kaze.Element.setImage(lnCol7, borderImg);
			aaoh.kaze.Element.setImage(lnCol8, borderImg);

		} else {
			aaoh.kaze.Element.setBorderColor(tblCal,       borderColor);
			aaoh.kaze.Element.setBorderColor(lblYearMonth, borderColor);
			aaoh.kaze.Element.setBorderColor(lblSun,       borderColor);
			aaoh.kaze.Element.setBorderColor(lblMon,       borderColor);
			aaoh.kaze.Element.setBorderColor(lblTue,       borderColor);
			aaoh.kaze.Element.setBorderColor(lblWed,       borderColor);
			aaoh.kaze.Element.setBorderColor(lblThu,       borderColor);
			aaoh.kaze.Element.setBorderColor(lblFri,       borderColor);
			aaoh.kaze.Element.setBorderColor(lblSat,       borderColor);
			for (var cnt = 0; cnt < lstCell.length; cnt++) {
				var cell = lstCell[cnt];
				aaoh.kaze.Element.setBorderColor(cell, borderColor);
			}
		}

		var srcBtnPreUp    = null;
		var srcBtnPreOver  = null;
		var srcBtnPreDown  = null;
		var srcBtnNextUp   = null;
		var srcBtnNextOver = null;
		var srcBtnNextDown = null;
		var srcCell        = 'images/moonage' + type + '-cell.png';;
		if (!aaoh.kaze.Type.isGoogle() && !aaoh.kaze.Type.isIE()) {
			srcBtnPreUp  = 'images/moonage' + type + '-allow-left.png';
			srcBtnNextUp = 'images/moonage' + type + '-allow-right.png';

		} else {
			srcBtnPreUp  = 'sub-images/moonage' + type + '-allow-left_up.png';
			srcBtnNextUp = 'sub-images/moonage' + type + '-allow-right_up.png';
		}
		srcBtnPreOver  = 'sub-images/moonage' + type + '-allow-left_over.png';
		srcBtnPreDown  = 'sub-images/moonage' + type + '-allow-left_down.png';
		srcBtnNextOver = 'sub-images/moonage' + type + '-allow-right_over.png';
		srcBtnNextDown = 'sub-images/moonage' + type + '-allow-right_down.png';

		aaoh.kaze.Element.setBackgroundImage(
			btnPre, srcBtnPreUp, srcBtnPreOver, srcBtnPreDown
		);
		aaoh.kaze.Element.setBackgroundImage(
			btnNext, srcBtnNextUp, srcBtnNextOver, srcBtnNextDown
		);
		for (var cnt = 0; cnt < lstCell.length; cnt++) {
			var cell = lstCell[cnt];
			aaoh.kaze.Element.setBackgroundImage(
				cell, srcCell
			);
		}

		this.fg = fgColor;
	}

	/**
	 * イベントの設定。
	 */
	moonage.Main.prototype.
	setEventListener = function() {
		this.setMoonageEventListener();
	}

	/**
	 * イベントの設定。
	 */
	moonage.Main.prototype.
	setMoonageEventListener = function() {
		var btnPre = aaoh.kaze.Gadget.$('btnPre');
		if (btnPre != null) {
			aaoh.kaze.Element.setOnClick(btnPre, function() {
				aaoh.sora.App.main.showMonthAge(-1);
				aaoh.sora.App.main.setFocus();
			});
		}

		var lblYearMonth = aaoh.kaze.Gadget.$('lblYearMonth');
		if (lblYearMonth != null) {
			aaoh.kaze.Element.setOnClick(lblYearMonth, function() {
				aaoh.sora.App.main.showCalender();
				aaoh.sora.App.main.setFocus();
			});
		}

		var btnNext = aaoh.kaze.Gadget.$('btnNext');
		if (btnNext != null) {
			aaoh.kaze.Element.setOnClick(btnNext, function() {
				aaoh.sora.App.main.showMonthAge(1);
				aaoh.sora.App.main.setFocus();
			});
		}
	}

	/**
	 * 初期化処理。
	 */
	moonage.Main.prototype.
	init = function() {
		this.setEventListener();
	}
})();
