// include /js/common.js
var CLS_ADD = 'add';
var CLS_FILTER_ITEM = 'filter_item';
var CLS_CAT_HEADER = 'cal_cat_header';
var CLS_TO_PLAN_TOP = 'to_plan_top';
var CLS_PLAN_ROW = 'plan_row';
var CLS_WEEK_DAYS_ROW = 'weeks_days_row';
var CLS_WEEKS_ROW = 'weeks_row';
var CLS_A = 'a';
var CLS_B = 'b';
var CLS_C = 'c';

function filter(chk) {
	var d = document;
	var chkCaddie = d.getElementById('CHK_CADDIE');
	var chkSelf = d.getElementById('CHK_SELF');
	var chkWeekday = d.getElementById('CHK_WEEKDAY');
	var chkHoliday = d.getElementById('CHK_HOLIDAY');

	if (chk == chkCaddie && chk.checked && chkSelf.checked) {
		chkSelf.checked = false;
	}

	if (chk == chkSelf && chk.checked && chkCaddie.checked) {
		chkCaddie.checked = false;
	}

	if (chk == chkWeekday && chk.checked && chkHoliday.checked) {
		chkHoliday.checked = false;
	}

	if (chk == chkHoliday && chk.checked && chkWeekday.checked) {
		chkWeekday.checked = false;
	}

	var rows = getElementsByClassName(d, CLS_ADD);
	for (var i = 0; i < rows.length; i ++) {
		var row = rows[i];
		row.parentNode.removeChild(row);
	}

	doFilter();
}

function doFilter2() {
	var change = false;
	var d = document;
	var chkCaddie = d.getElementById('CHK_CADDIE');
	var chkSelf = d.getElementById('CHK_SELF');
	var chkWeekday = d.getElementById('CHK_WEEKDAY');
	var chkHoliday = d.getElementById('CHK_HOLIDAY');

	var rows = getElementsByClassName(d, CLS_FILTER_ITEM);
	for (var i = 0; i < rows.length; i ++) {
		var row = rows[i];
		if ("none" == row.style.display) {
			row.style.display = "";
		}
	}

	if (chkCaddie.checked) {
		hideSelf(rows);
		change = true;
	}

	if (chkSelf.checked) {
		hideCaddie(rows);
		change = true;
	}

	if (chkWeekday.checked) {
		hideByDay(rows, CLS_C);
		change = true;
	}

	if (chkHoliday.checked) {
		hideByDay(rows, CLS_A);
		hideByDay(rows, CLS_B);
		change = true;
	}

	if (change) {
		insert(chkCaddie.checked, chkSelf.checked, chkWeekday.checked, chkHoliday.checked);
	}
	d.getElementById("calendars").style.display = "";
	d.getElementById("filter_message").style.display = "none";
}

function doFilter() {
	var d = document;
	var cldrs = d.getElementById("calendars");
	var msg = d.getElementById("filter_message");
	msg.style.height = cldrs.offsetHeight+"px";
	msg.style.display = "";
	cldrs.style.display = "none";
	setTimeout(doFilter2, 1);
}

function hide(rows, check) {
	var header = null;
	var hasPlan = false;
	for (var i = 0; i < rows.length; i ++) {
		var row = rows[i];
		if (-1 != row.className.indexOf(CLS_CAT_HEADER)) {
			hasPlan = false;
			header = row;
		} else if (-1 != row.className.indexOf(CLS_TO_PLAN_TOP)) {
			if (!hasPlan && header != null) {
				header.style.display = "none";
				row.style.display = "none";
			}
		} else if (-1 != row.className.indexOf(CLS_PLAN_ROW)) {
			if (check(row)) {
				row.style.display = "none";
			} else if ("none" != row.style.display) {
				hasPlan = true;
			}
		} else if (-1 != row.className.indexOf(CLS_WEEK_DAYS_ROW)) {
			row.style.display = "none";
		}
	}
}

function insert(chkCaddie, chkSelf, chkWeekday, chkHoliday) {
	var d = document;
	var wdr = null;
	var rows = getElementsByClassName(d, CLS_FILTER_ITEM);
	var cnt = 0;
	for (var i = 0; i < rows.length; i ++) {
		var row = rows[i];
		if (-1 != row.className.indexOf(CLS_CAT_HEADER)) {
			if ("none" != row.style.display) {
				cnt = PLAN_COUNT;
			} else {
				cnt = 0;
			}
		} else if (-1 != row.className.indexOf(CLS_PLAN_ROW)) {
			if ("none" != row.style.display) {
				cnt++;
			}
			if (cnt > PLAN_COUNT) {
				if (null == wdr) {
					wdr = getElementsByClassName(d, CLS_WEEK_DAYS_ROW)[0].cloneNode(true);
					var weeks = getElementsByClassName(wdr, CLS_WEEKS_ROW)[0];
					var txt = "";
					if (chkCaddie) {
						txt += "キャディ付き";
					} else if (chkSelf) {
						txt += "セルフ";
					}
					if (chkWeekday) {
						if ("" != txt) {
							txt += "、";
						}
						txt += "平日";
					} else if (chkHoliday) {
						if ("" != txt) {
							txt += "、";
						}
						txt += "土日祝";
					}
					if ("" != txt) {
						txt += "のみ";
					}
					weeks.getElementsByTagName("td")[0].innerHTML="プラン名<br><span style='color:red'>"+txt+"</span>";
				}
				var newElem = wdr.cloneNode(true);
				row.parentNode.insertBefore(newElem, row);
				newElem.className += " "+CLS_ADD;
				newElem.style.display = "";
				cnt = 1;
			}
		}
	}
}

function hideSelf(rows) {
	hide(rows, function(row) {
		return (-1 == row.innerHTML.indexOf("キャディ付"));
	});
}

function hideCaddie(rows) {
	hide(rows, function(row) {
		return (-1 != row.innerHTML.indexOf("キャディ付"));
	});
}

function hideByDay(rows, className) {
	hide(rows, function(row) {
		var days = getElementsByClassName(row, className);
		var exists = false;
		for (var x = 0; x < days.length; x++) {
			if (-1 != days[x].innerHTML.indexOf("○") || -1 != days[x].innerHTML.indexOf("□")) {
				exists = true;
				break;
			}
		}
		return (!exists);
	});
}

function init() {
	var d = document;
	if (location.hash) {
		try {
			var id = location.hash.substr(1);
//alert("["+id+"]");
			if (!d.getElementById(id)) {
				d.getElementById("reserve_info").scrollIntoView();
				if (categoryNames[id]) {
					alert(viewMonth+""+categoryNames[id]+"はありません。");
				}
			}
		} catch(e) {}
	}
}

