// !!! 注意 !!!  HTMLと文字コードを揃えないとエラーになる

var calIE    = 0.0;
var calNN    = 0.0;
var calOpera = 0.0;
var calUseA  = false;

var calTodayDate;
//var calInitDate;
var calStartDate;
var calEndDate;


// 月、日付、半角
var calMonthDisp = new Array(
	'1月', '2月', '3月', '4月', '5月', '6月',
	 '7月', '8月', '9月', '10月', '11月', '12月'
);
var calDateDisp  = new Array(
	'1日', '2日', '3日', '4日', '5日',
	'6日', '7日', '8日', '9日', '10日',
	'11日', '12日', '13日', '14日', '15日',
	'16日', '17日', '18日', '19日', '20日',
	'21日', '22日', '23日', '24日', '25日',
	'26日', '27日', '28日', '29日', '30日',
	'31日'
);

// ---------------------------------------------------------------------------
//  基本ルーチン
// ---------------------------------------------------------------------------

function calBrowserCheck()
{
	calIE    = 0.0;
	calNN    = 0.0;
	calOpera = 0.0;

	var agent = navigator.userAgent;

	if (agent.indexOf("Opera") >= 0){
		calOpera = 1.0;
	} else if (agent.indexOf("MSIE 6.") >= 0){
		calIE = 6.0;
	} else if (agent.indexOf("MSIE 5.") >= 0){
		calIE = 5.0;
	} else if (agent.indexOf("MSIE 4.") >= 0){
		calIE = 4.0;
	} else if (agent.indexOf("Netscape/7.") >= 0){
		calNN = 7.0;
	} else if (agent.indexOf("Netscape6/6.") >= 0){
		calNN = 6.0;
	} else if (agent.indexOf("Mozilla/4.") >= 0){
		calNN = 4.0;
	} else if (agent.indexOf("MSIE 3.") >= 0){
		calIE = 3.0;
	} else if (agent.indexOf("Mozilla/3.") >= 0){
		calIE = 3.0;
	}

	if (((calIE > 0.0) && (calIE < 3.0)) ||
	    ((calNN > 0.0) && (calNN < 6.0))) {
		calUseA = true;
	} else {
		calUseA = false;
	}
}

function calGetDaysOfMonth(year, month)
{
        var days = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
        if (month < 1 || month > 12) {
		return 0;
	}

        if (month == 2) {
	        if ((year % 4) == 0) {
			if ((year % 100) == 0) {
			        if ((year % 400) == 0) {
					return 29;
				}
				return 28;
			}
			return 29;
		}
		return 28;
	}

	return days[month - 1];
}

function calGetMonthRange()
{
	var ret   = new Object();
	ret.start = calStartDate.getMonth() + 1;
	ret.end   = calEndDate.getMonth() + 1;
	if (ret.start > ret.end) {
		ret.end += 12;
	}

	return ret;
}

function calGetDateRange(month)
{
	var ret   = new Object();
	ret.start = 1;
	ret.end   = 0;

	if (month < 1 || month > 12) {
		return ret;
	}

	var mrange = calGetMonthRange();
	var mmonth = month - 0;
	if (mmonth < mrange.start) {
		mmonth += 12;
	}
	if (mmonth < mrange.start || mmonth > mrange.end) {
		return ret;
	}

	ret.start = calStartDate.getDate();
	ret.end   = calEndDate.getDate();
	if (mmonth != mrange.start) {
		ret.start = 1;
	}
	if (mmonth != mrange.end) {
		var year = calStartDate.getYear();
		if (year < 2000) {
			year += 1900;
		}
		if (mmonth > 12) {
			ret.end = calGetDaysOfMonth(year + 1, mmonth - 12);
		} else {
			ret.end = calGetDaysOfMonth(year, mmonth);
		}
	}

	return ret;
}

function calGetDateObject(month, day, hours, minutes, seconds)
{
	var year = calStartDate.getYear();
	if (year < 2000) {
		year += 1900;
	}
	if (month - 1 < calStartDate.getMonth()) {
		year += 1;
	}
	var obj = new Date(year, month - 1, day, hours, minutes, seconds);

	return obj;
}

// ---------------------------------------------------------------------------
//  SELECT ボックス操作
// ---------------------------------------------------------------------------

function calChangeMonthOption(monthobj)
{
	var range = calGetMonthRange();
	monthobj.selectedIndex  = 0;
	monthobj.options.length = (range.end - range.start) + 2;
	for (i = 0; i <= range.end - range.start; i++) {
		month = ((range.start + i - 1) % 12) + 1;
		monthobj.options[i + 1].value = month;
		monthobj.options[i + 1].text  = calMonthDisp[month - 1];
	}
}

function calChangeDateOption(dateobj, monthobj)
{
	var month = monthobj.options[monthobj.selectedIndex].value - 0;
	if (monthobj.options[monthobj.selectedIndex].value == "noselect") {
		month = 0;
	}
	var range = calGetDateRange(month);
	dateobj.selectedIndex  = 0;
	dateobj.options.length = (range.end - range.start) + 2;
	for (i = 0; i <= range.end - range.start; i++) {
		date = range.start + i;
		dateobj.options[i + 1].value = date;
		dateobj.options[i + 1].text  = calDateDisp[date - 1];
	}
}

function calSelectMonthOption(monthobj, month)
{
	for (i = 0; i < monthobj.options.length; i++) {
		if (monthobj.options[i].value == month) {
			monthobj.selectedIndex = i;
			break;
		}
	}
}

function calSelectDateOption(dateobj, date)
{
	for (i = 0; i < dateobj.options.length; i++) {
		if (dateobj.options[i].value == date) {
			dateobj.selectedIndex = i;
			break;
		}
	}
}

function calSelectTimeOption(timeobj, time)
{
	for (i = 0; i < timeobj.options.length; i++) {
		if (timeobj.options[i].value == time) {
			timeobj.selectedIndex = i;
			break;
		}
	}
}

function calSelectInitialDate(monthobj, dateobj, initdateobj)
{
	calChangeMonthOption(monthobj);
	calSelectMonthOption(monthobj, initdateobj.getMonth() + 1);
	calChangeDateOption(dateobj, monthobj);
	calSelectDateOption(dateobj, initdateobj.getDate());
}

function calSelectDate(monthobj, dateobj, month, date)
{
	calSelectMonthOption(monthobj, month);
	calChangeDateOption(dateobj, monthobj);
	calSelectDateOption(dateobj, date);
}

function calCopyDate(monthobj2, dateobj2, monthobj1, dateobj1)
{
	calSelectMonthOption(monthobj2, monthobj1.options[monthobj1.selectedIndex].value);
	calChangeDateOption(dateobj2, monthobj2);
	calSelectDateOption(dateobj2, dateobj1.options[dateobj1.selectedIndex].value);
}

function calCopyDateToText(yearobj2, monthobj2, dateobj2, timeobj2,
			   yearobj1, monthobj1, dateobj1, timeobj1)
{
	var month   = monthobj1.options[monthobj1.selectedIndex].value - 0;
	var day     = dateobj1.options[dateobj1.selectedIndex].value - 0;
	var time    = timeobj1.options[timeobj1.selectedIndex].value;
	var hours   = time.substring(0, 2) - 0;
	var minutes = time.substring(2, 4) - 0;
	var date    = calGetDateObject(month, day, hours, minutes, 0);
	var year    = date.getYear();
	if (year < 2000) {
		year += 1900;
	}
	yearobj2.value  = year;
	monthobj2.value = month;
	dateobj2.value  = day;
	timeobj2.value  = time;
}

// ---------------------------------------------------------------------------
//  カレンダー表示
// ---------------------------------------------------------------------------

function calOpenCalendar(){
	calWritePage(1);
}
function calWritePage(monthplus){
	if(monthplus < 5){
		var docobj = parent.window.document;
		
		calWriteScript(docobj);
		var startyear  = calTodayDate.getYear();
		var startmonth = calTodayDate.getMonth() + monthplus /**/;
		if (startyear < 2000) {
			startyear += 1900;
		}
			for (i = 0; i < 1; i++) {
				var month = startmonth + i;
				if (month > 12) {
					calWriteMonth(docobj, startyear + 1, month - 12, (i == 3));
				}else if (month < 1) {
					calWriteMonth(docobj, startyear - 1, month + 12, (i == 3));
				}
				else {
					calWriteMonth(docobj, startyear, month, (i == 3));
				}
		}
	}
}

function calWriteMonth(docobj, year, month, last)
{
	$("#calendarSpace").empty();
	var text = "";
	
	var baseMonth = calTodayDate.getMonth() + 1;
	
	var backMonth = month - 1;
	var nextMonth = month + 1;
	
	if(backMonth < 1){
		backMonth = backMonth + 12;
	}
	if(nextMonth > 12){
		nextMonth = nextMonth - 12;
	}
	
	var calSvnM1 = month - baseMonth;
	var calSvnM2 = 2 + month - baseMonth;
	
	if(calSvnM1 < 0){
		calSvnM1 = calSvnM1 + 12;
	}
	if(calSvnM2 < 0){
		calSvnM2 = calSvnM2 + 12;
	}

	text += '<div class="searchCalendarMonth clearfix">';
	if(calSvnM1 != 0){
	text += '<p class="searchCalendarPrevMonth"><a href="javascript:calWritePage('+calSvnM1+');">&lt;&lt;' + backMonth + '月</a></p>';
	}
	else{
	text += '<p class="searchCalendarPrevMonth">&nbsp;</p>';
	}
	text += '<p class="searchCalendarThisMonth">' + year + '年' + month + '月</p>';
	
	if(calSvnM2 < 5){
	text += '<p class="searchCalendarNextMonth"><a href="javascript:calWritePage('+calSvnM2+');">' + nextMonth + '月&gt;&gt;</a></p>';
	}
	else{
	text += '<p class="searchCalendarNextMonth">&nbsp;</p>';
	}
	text += '</div>';


	
	text += '<table class="searchCalendarTable"';
	text += '<tr>\n';
	text += '<th class="holiday">日</td>\n';
	text += '<th>月</th>\n';
	text += '<th>火</th>\n';
	text += '<th>水</th>\n';
	text += '<th>木</th>\n';
	text += '<th>金</th>\n';
	text += '<th class="saturday">土</th>\n';
	text += '</tr>\n';

	var range = calGetDateRange(month);
	var days  = calGetDaysOfMonth(year, month);

	// 5/1 処理
	var nextmonth = (month % 12) + 1;
	if (last) {
		var nextrange = calGetDateRange(nextmonth);
		range.end += nextrange.end;
	}

	var today   = calTodayDate.getDate();
	var tomonth = calTodayDate.getMonth() + 1;
	var first   = new Date(year, month - 1, 1, 0, 0, 0);
	var current = - first.getDay() + 1;
	for (r = 0; r < 6; r++) {
		text += '<tr>\n';
		for (c = 0; c < 7; c++) {
			if (current > days && current <= range.end) {
				text += '<td';
				switch(c){
				case 0:text += ' class="holiday"';break;	
				case 6:text += ' class="saturday"';break;
				}
				text += '><a href="javascript:calSelect(';
				text += nextmonth + ',' + (current - days) + ');">';
				text += nextmonth + '/' + (current - days) + '</a>';
			} else if (current < 1 || current > days) {
					text += '<td>&nbsp;';
			} else if (current < range.start || current > range.end) {
					text += '<td';
					if (tomonth == month && today == current) {
						text += ' class="today"';
					}
					text += '>' + current;
			} else if (calUseA) {
				text += '<td';
				if (tomonth == month && today == current) {
					text += ' class="today"';
				} else{
						switch(c){
						case 0:text += ' class="holiday"';break;	
						case 6:text += ' class="saturday"';break;
						}
				}
				text += '><a href="javascript:calSelect(' + month + ',' + current + ');">' + current + '</a>';
			} else {
				text += '<td';
				if (tomonth == month && today == current) {
					text += ' class="today"';
				}else{
					switch(c){
					case 0:text += ' class="holiday"';break;	
					case 6:text += ' class="saturday"';break;
					}
				}
				text += '><a href="javascript:calSelect('+ month + ',' + current + ');">' + current;
			}
			text += '</a></td>\n';
			current ++;
		}
		text += '</tr>\n';
	}
	text += '</table>';
	$("#calendarSpace").append(text);
}

function calWriteScript(docobj){
	var text = '';
	text += '<SCRIPT LANGUAGE="JavaScript">\n';
	text += '<!--\n';
	text += 'function calSelect(month, date){';
	text +=         calScriptOnCalSelect();
	text += '}';
	text += '//-->\n';
	text += '</SCRIPT>';
	$("#calendarSpace").append(text);
}

// ---------------------------------------------------------------------------
//  入力チェック
// ---------------------------------------------------------------------------

function calCheckInputSub(yearobj1, monthobj1, dayobj1, timeobj1,
			  yearobj2, monthobj2, dayobj2, timeobj2)
{
	if ((monthobj1.value == "noselect") ||
	    (dayobj1.value == "noselect")) {
		alert("出発日を指定してください");
		return false;
	}
	if ((timeobj1.value == "noselect")) {
		alert("出発時間を指定してください");
		return false;
	}
	if ((monthobj2.value == "noselect") ||
	    (dayobj2.value == "noselect")) {
		alert("返却日を指定してください");
		return false;
	}
	if ((timeobj2.value == "noselect")) {
		alert("返却時間を指定してください");
		return false;
	}

	var month, day, hours, minutes;
	var month1  = monthobj1.options[monthobj1.selectedIndex].value;
	var day1    = dayobj1.options[dayobj1.selectedIndex].value;
	var time1   = timeobj1.options[timeobj1.selectedIndex].value;
	month       = month1 - 0;
	day         = day1 - 0;
	hours       = time1.substring(0, 2) - 0;
	minutes     = time1.substring(2, 4) - 0;
	var date1   = calGetDateObject(month, day, hours, minutes, 0);
	var year1   = date1.getYear();
	if (year1 < 2000) {
		year1 += 1900;
	}

	var month2  = monthobj2.options[monthobj2.selectedIndex].value;
	var day2    = dayobj2.options[dayobj2.selectedIndex].value;
	var time2   = timeobj2.options[timeobj2.selectedIndex].value;
	month       = month2 - 0;
	day         = day2 - 0;
	hours       = time2.substring(0, 2) - 0;
	minutes     = time2.substring(2, 4) - 0;
	var date2   = calGetDateObject(month, day, hours, minutes, 0);
	var year2   = date2.getYear();
	if (year2 < 2000) {
		year2 += 1900;
	}

	if (date2.getTime() <= date1.getTime()) {
		alert("返却日時は出発日時より後に設定してください");
		return false;
	}

	// ３時間１０分後→１時間００分後
	var start = new Date(calTodayDate.getTime() +
			     (1 * 60 * 60 * 1000) +
			     (     0 * 60 * 1000));
	if (date1.getTime() < calTodayDate.getTime()) {
		alert("ご入力いただいた出発時刻は" +
		      "インターネット予約の締切時間を" +
		      "過ぎております。\n" +
		      "現在時刻以降をご指定ください。");
		return false;
	} else if (date1.getTime() < start.getTime()) {
		alert("ご入力いただいた出発時刻は" +
		      "インターネット予約の締切時間を" +
		      "過ぎております。\n" +
		      "ご面倒ながらご利用予定の営業所に" +
		      "お電話にてご予約をお願い申し上げます。");
		return false;
	}

	yearobj1.value = year1;
	yearobj2.value = year2;

	return true;
}

