function toggleDisplay(arg, option) {
	var x;
	if (document.getElementById) {
		x = document.getElementById(arg);
	} else if (document.all) {
		x = document.all(arg);
	}
	if (x) {
		x.style.display = option;
		setCookie();
	}
}

function setCookie() {
	var i;
	var s0 = '';
	var s1 = '';
	for (var i = 0; i < schedule.length; i++) {
		s0 += schedule[i][5];
		s1 += schedule[i][6];
	}
	var fh = '';
	for (i = 0; i < document.forms['home'].elements.length; i++) {
		fh += document.forms['home'].elements[i].checked? 1: 0;
	}
	var fv = '';
	for (i = 0; i < document.forms['visitor'].elements.length; i++) {
		fv += document.forms['visitor'].elements[i].checked? 1: 0;
	}
	var fl = '';
	for (i = 0; i < document.forms['location'].elements.length; i++) {
		fl += document.forms['location'].elements[i].checked? 1: 0;
	}
	var x;
	if (document.getElementById) {
		x = document.getElementById('form-home');
	} else if (document.all) {
		x = document.all('form-home');
	}
	var dh = (x.style.display == 'none')? 0: 1;
	if (document.getElementById) {
		x = document.getElementById('form-visitor');
	} else if (document.all) {
		x = document.all('form-visitor');
	}
	var dv = (x.style.display == 'none')? 0: 1;
	var c1 = cal1.getFormValue();
	var c2 = cal2.getFormValue();
	var d = new Date();
	d.setTime(d.getTime() + (cookieLife *86400000));
	document.cookie = 'fs='
		+ escape('s0=' + s0 + '&s1=' + s1 + '&fh=' + fh + '&fv=' + fv + '&fl=' + fl
			+ '&dh=' + dh + '&dv=' + dv + '&c1=' + c1 + '&c2=' + c2)
		+ ';expires=' + d.toGMTString();
}

function hover(arg) {
	var x = document.getElementsByTagName('tr');
	for (var i = 0; i < x.length; i++) {
		if (arg && x[i].className == arg.className) {
			x[i].style.backgroundColor = 'yellow';
		} else {
			x[i].style.backgroundColor = '';
		}
	}
}

function resetUnchecked() {
	if (confirm('現在表示されている日程のチェック解除を取り消します。\n'
		+ '表示されていない日程は変更されません。')) {
		for (var i = 0; i < schedule.length; i++) {
			if (schedule[i][5] == 1) {
				schedule[i][6] = 1;
			}
		}
		showData();
	}
}

function printCSV() {
	if (confirm('チェックが解除されている日程は表示されません。')) {
		var x = '';
		for (var i = 0; i < schedule.length; i++) {
			var d = new Date(schedule[i][0]);
			if (d >= from && d <= to
				&& schedule[i][5] == 1 && schedule[i][6] == 1) {
				x += schedule[i][0]
					+ ',' + schedule[i][1]
					+ ',' + schedule[i][2]
					+ ',' + schedule[i][3]
					+ ',' + schedule[i][4]
					+ '<br>';
			}
		}
		document.open();
		document.writeln('<!DOCTYPE html'
			+ ' PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"');
		document.writeln('"http://www.w3.org/TR/html4/loose.dtd">');
		document.writeln('<html lang="ja">');
		document.writeln('<head>');
		document.writeln('<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
		document.writeln('</head>');
		document.writeln('<body>');
		document.writeln(x);
		document.writeln('</body>');
		document.writeln('</html>');
		document.close();
	}
}

function showData(arg) {
	var days = new Array('日','月','火','水','木','金','土');
	var x = '';
	for (var i = 0; i < schedule.length; i++) {
		var d = new Date(schedule[i][0]);
		if (d >= from && d <= to
			&& schedule[i][5] == 1
			&& (!arg || (arg == 1 && schedule[i][6] == 1))) {
			var mm = d.getMonth() +1; if (mm < 10) mm = "0" + mm;
			var dd = d.getDate(); if (dd < 10) dd = "0" + dd;
			var dateString = mm + '/' + dd;
			var isHoliday = false;
			for (var ii = 0; ii < holidays.length; ii++) {
				if (dateString == holidays[ii]) {
					isHoliday = true;
					break;
				}
			}
			var dy = d.getDay();
			var dayString = days[dy];
			var hh = d.getHours(); if (hh < 10) hh = "0" + hh;
			var mn = d.getMinutes(); if (mn < 10) mn = "0" + mn;
			var timeString = hh + ':' + mn;
			if (isHoliday == true) {
				dayString = '<span class="holiday">' + dayString + '祝</span>';
			} else if (dy == 0) {
				dayString = '<span class="holiday">' + dayString + '</span>';
			} else if (dy == 6) {
				dayString = '<span class="saturday">' + dayString + '</span>';
			}
			x += '<tr'
				+ ((schedule[i][6] == 0)? ' style="color:gray"': '')
				+ ' class="' + dateString + '"'
				+ ' onmouseover="hover(this)"'
				+ ' onmouseout="hover()">'
				+ '<td><input type="checkbox" name="' + i + '" value=""'
				+ ((schedule[i][6] == 1)? ' checked': '')
				+ ' onclick="toggleCheck(this)" onkeypress="toggleCheck(this)">'
				+ '</td><td>'+ dateString
				+ '</td><td>'+ dayString
				+ '</td><td>'+ timeString
				+ '</td><td>' + schedule[i][1]
				+ '</td><td>' + schedule[i][2]
				+ '</td><td>' + schedule[i][3]
				+ '</td><td>' + schedule[i][4]
				+ '</td></tr>';
		}
	}
	if (x != '') {
		x = '<form><table summary="観戦日程"><thead>'
			+ '<th>&nbsp;</th><th>日</th><th>曜</th><th>時</th><th>種</th><th>H</th><th>A</th><th>場</th>'
			+ '</thead><tbody>'
			+ x
			+ '</tbody></table></form>'
			+ '<div class="menu"><p><a href="javascript:showData(1)">解除を非表示</a>'
			+ '&nbsp;|&nbsp;<a href="javascript:showData(0)">解除も表示</a>'
			+ '&nbsp;|&nbsp;<a href="javascript:resetUnchecked()">解除をリセット</a>'
			+ '&nbsp;|&nbsp;<a href="javascript:printCSV()">CSV形式で表示</a></p></div>';
	} else {
		x = '<p>まだなにも選択されていないか、選択されたクラブ、スタジアム、日程に合致するものがありません。</p>';
	}
	if (document.getElementById) {
		document.getElementById('fstable').innerHTML = x;
		setCookie();
	} else if (document.all) {
		document.all.fstable.innerHTML = x;
		setCookie();
	}
}

function check(arg, option) {
	var i;
	switch(arg.form.name) {
		case 'home':
			for (i = 0; i < schedule.length; i++) {
				if (schedule[i][2] == arg.name) {
					schedule[i][5] = arg.checked ? 1: 0;
				}
			}
			break;
		case 'visitor':
			for (i = 0; i < schedule.length; i++) {
				if (schedule[i][3] == arg.name) {
					if (arg.checked) {
						if (document.forms['location'].elements[schedule[i][4]]
							&& document.forms['location'].elements[schedule[i][4]].checked) {
							schedule[i][5] = 1;
						}
					} else {
						if (document.forms['home'].elements[schedule[i][2]]
							&& !document.forms['home'].elements[schedule[i][2]].checked) {
							schedule[i][5] = 0;
						}
					}
				}
			}
			break;
		case 'location':
			for (i = 0; i < schedule.length; i++) {
				if (schedule[i][4] == arg.name) {
					if (arg.checked) {
						if (document.forms['visitor'].elements[schedule[i][3]]
							&& document.forms['visitor'].elements[schedule[i][3]].checked) {
							schedule[i][5] = 1;
						}
					} else {
						if (document.forms['home'].elements[schedule[i][2]]
							&& !document.forms['home'].elements[schedule[i][2]].checked) {
							schedule[i][5] = 0;
						}
					}
				}
			}
			break;
	}
	if (!option) {
		showData();
	}
}

function checkSim(arg) {
	for (var i = 0; i < arg.form.length; i++) {
		if (arg.form.elements[i].className == arg.className) {
			arg.form.elements[i].checked = arg.checked? true: false;
			check(arg.form.elements[i]);
		}
	}
}

function checkAll(arg,option) {
	for (var i = 0; i < document.forms[arg].length; i++) {
		document.forms[arg].elements[i].checked = (option == 1)? true: false;
		check(document.forms[arg].elements[i],1);
	}
	showData();
}

function toggleCheck(arg) {
	schedule[arg.name][6] = arg.checked? 1: 0;
	showData();
}

function setDateRange() {
	cal1.hide();
	cal2.hide();
	if (!cal1.getFormValue()) {
		cal1.date = new Date();
		cal1.setFormValue();
	}
	from = new Date(cal1.getFormValue());
	if (!cal2.getFormValue()) {
		cal2.setFormValue(from.getFullYear() + '/12/31');
	}
	to = new Date(cal2.getFormValue() + ' 23:59:59');
	if (from > to) {
		alert('終了日が開始日以前なので終了日をリセットします。');
		cal2.setFormValue(from.getFullYear() + '/12/31');
		to = new Date(cal2.getFormValue() + ' 23:59:59');
	}
	showData();
}

function init() {
	if (document.getElementById || document.all) {
		cal1 = new JKL.Calender('cal1div', 'cal', 'from');
		cal2 = new JKL.Calender('cal2div', 'cal', 'to');
		with (cal1) {
			setStyle('frame_color', '#999999');
			setStyle('day_bgcolor', '#ffffff');
			setStyle('month_hover_color', '#ffffff');
			setStyle('month_hover_bgcolor', '#ffcccc');
			setStyle('weekday_color', '#666666');
			setStyle('saturday_color', '#0000cc');
			setStyle('sunday_color', '#cc0000');
			setStyle('others_color', '#cccccc');
		}
		with (cal2) {
			setStyle('frame_color', '#999999');
			setStyle('day_bgcolor', '#ffffff');
			setStyle('month_hover_color', '#ffffff');
			setStyle('month_hover_bgcolor', '#ffcccc');
			setStyle('weekday_color', '#666666');
			setStyle('saturday_color', '#0000cc');
			setStyle('sunday_color', '#cc0000');
			setStyle('others_color', '#cccccc');
		}
		var i;
		var x = '';
		for (i = 0; i < schedule.length; i++) {
			schedule[i][5] = 0;
			schedule[i][6] = 1;
		}
		if (document.cookie){
			var rex = new RegExp(".*fs=([^;]*).*");
			if (unescape(document.cookie).match(rex)) {
				var cookie = unescape(document.cookie).replace(rex,"$1");
				rex = new RegExp(".*s0=([^&]*).*");
				if (cookie.match(rex)) {
					x = cookie.replace(rex,"$1");
					if (x.length == schedule.length) {
						for (i = 0; i < x.length; i++) {
							schedule[i][5] = x.substring(i, i +1);
						}
					}
				}
				rex = new RegExp(".*s1=([^&]*).*");
				if (cookie.match(rex)) {
					var x = cookie.replace(rex,"$1");
					if (x.length == schedule.length) {
						for (i = 0; i < x.length; i++) {
							schedule[i][6] = x.substring(i, i +1);
						}
					}
				}
				rex = new RegExp(".*fh=([^&]*).*");
				if (cookie.match(rex)) {
					var x = cookie.replace(rex,"$1");
					if (x.length == document.forms['home'].elements.length) {
						for (i = 0; i < x.length; i++) {
							document.forms['home'].elements[i].checked =
								(x.substring(i, i +1) == 1)? true: false;
						}
					}
				}
				rex = new RegExp(".*fv=([^&]*).*");
				if (cookie.match(rex)) {
					var x = cookie.replace(rex,"$1");
					if (x.length == document.forms['visitor'].elements.length) {
						for (i = 0; i < x.length; i++) {
							document.forms['visitor'].elements[i].checked =
								(x.substring(i, i +1) == 1)? true: false;
						}
					}
				}
				rex = new RegExp(".*fl=([^&]*).*");
				if (cookie.match(rex)) {
					var x = cookie.replace(rex,"$1");
					if (x.length == document.forms['location'].elements.length) {
						for (i = 0; i < x.length; i++) {
							document.forms['location'].elements[i].checked =
								(x.substring(i, i +1) == 1)? true: false;
						}
					}
				}
				rex = new RegExp(".*dh=([^&]*).*");
				if (cookie.match(rex)) {
					var x = cookie.replace(rex,"$1");
					toggleDisplay('form-home', ((x == 0)? 'none': 'block'));
				}
				rex = new RegExp(".*dv=([^&]*).*");
				if (cookie.match(rex)) {
					var x = cookie.replace(rex,"$1");
					toggleDisplay('form-visitor', ((x == 0)? 'none': 'block'));
				}
				rex = new RegExp(".*c1=([^&]*).*");
				if (cookie.match(rex)) {
					var x = cookie.replace(rex,"$1");
					cal1.setFormValue(x);
				}
				rex = new RegExp(".*c2=([^&]*).*");
				if (cookie.match(rex)) {
					var x = cookie.replace(rex,"$1");
					cal2.setFormValue(x);
				}
			}
		} else {
			toggleDisplay('form-home', 'block');
			toggleDisplay('form-visitor', 'block');
		}
		if (!cal1.getFormValue()) {
			cal1.setFormValue();
		}
		from = new Date(cal1.getFormValue());
		if (!cal2.getFormValue()) {
			cal2.setFormValue(from.getFullYear() + '/12/31');
		}
		to = new Date(cal2.getFormValue() + ' 23:59:59');
		showData();
	}
}
