/**
 *  fair_search.js
 */

/*
 *  calendar
 */
selected = new Array();

function getValidCalendarID(id) {
	var DEFAULT_CALENDAR_ID = "__calendar_id__";

	if(id) {
		return id;
	}
	else {
		return DEFAULT_CALENDAR_ID;
	}
}

function getSelectedKey(ymd) {
	return "_" + ymd;
}

function initCalendar(baseid, secondid) {
	var base = document.getElementById(baseid + secondid + "calendar_base");

//	var calendars = document.getElementsByClassName("calendar_base");
	
	if(selected[getValidCalendarID(baseid + secondid)] == undefined) {
		selected[getValidCalendarID(baseid + secondid)] = new Array();
	}

	var monthNumber = document.getElementsByClassName("calendar_month_"+secondid+"number", base);

	Event.observe(monthNumber[0], "click", monthClicked.bindAsEventListener(null, secondid, base.id), false);

/*
	var weekElements = document.getElementsByClassName("calendar_"+secondid+"week", base);

	for(i=0; i<weekElements.length; i++) {
		var weekNumbers = document.getElementsByClassName("calendar_week_"+secondid+"number", weekElements[i]);
		
		if (weekNumbers != null && weekNumbers != undefined) {
			if(weekNumbers.length) {
				Event.observe(weekNumbers[0], "click", weekClicked.bindAsEventListener(null, secondid, weekElements[i].id), false);
			}
		}
	}
*/

	var dowElements = document.getElementsByClassName("calendar_"+secondid+"dow", base);

	if(dowElements) {
		for(i=0; i<dowElements.length; i++) {
			Event.observe(dowElements[i], "click", dowClicked.bindAsEventListener(null, secondid, base, i), false);
		}
	}

	var dayElements = document.getElementsByClassName("calendar_day_"+secondid+"forward", base);

	for(i=0; i<dayElements.length; i++) {
		Event.observe(dayElements[i], "click", dayClicked.bindAsEventListener(null, dayElements[i].id), false);

		var ymdPos = dayElements[i].id.search(/[0-9]{8}$/);
		var ymd = dayElements[i].id.substring(ymdPos);

		if(getSelectedKey(ymd) in selected[getValidCalendarID(baseid + secondid)]) {
			Element.addClassName(dayElements[i], "calendar_day_selected");
		}
	}
}

function getSelectedDate(id) {
	id = getValidCalendarID(id);

	var dummyArray = Array();
	var dateList = Array();

	for(i in selected[id]) {
		if(!(i in dummyArray)) {
			dateList.push(i.substring(1));
		}
	}

	return dateList;
}

function clearSelectedDate(id) {
	id = getValidCalendarID(id);

	var dateList = getSelectedDate(id);

	for(i=0; i<dateList.length; i++) {
		dayElementID = id + "calendar_day_" + dateList[i];

		if($(dayElementID)) {
			Element.removeClassName($(dayElementID), "calendar_day_selected");
		}
	}

	selected[id] = new Array();
}

function monthClicked(event, classid, month) {
	var dayElements = document.getElementsByClassName("calendar_day_"+classid+"forward", $(month));

	var idLen = $(month).id.lastIndexOf("calendar_base");
	var id = getValidCalendarID($(month).id.substring(0, idLen));

	var next = 6;
	var nowIndex = 1;
	var startymd = "";
	for (i=0; i<dayElements.length; i++) {
		if(Element.hasClassName(dayElements[i], "calendar_day_"+classid+"forward")) {
			var ymdPos = dayElements[i].id.search(/[0-9]{8}$/);
			var ymd = dayElements[i].id.substring(ymdPos);
			startymd = ymd;
			break;
		}
		nowIndex++;
		if (i == next) {
			next = next + 7;
			nowIndex = 1;
		}
	}
	var starty = startymd.substr(0, 4);
	var startm = startymd.substr(4, 2);
	var startd = parseInt(startymd.substr(6, 2), 10);
	var endYmdPos = "";
	var tmpEndPos = "";
	var j = 1;
	while (endYmdPos == "") {
		tmpEndPos = dayElements[(dayElements.length-j)];
		j++;
		if (Element.hasClassName(tmpEndPos, "calendar_day_"+classid+"forward")) {
			endYmdPos = tmpEndPos.id.search(/[0-9]{8}$/);
		}
	}
	var endymd = tmpEndPos.id.substring(endYmdPos);
	var endy = endymd.substr(0, 4);
	var endm = endymd.substr(4, 2);
	var endd = parseInt(endymd.substr(6, 2), 10);
	var monthselected = true;
	while (startd <= endd) {
		var tmpymd = starty + startm + startd;
		if (startd < 10) {
			tmpymd = starty + startm + "0" + startd;
		}
		if(getSelectedKey(tmpymd) in selected[id]) {
			;
		}else {
			monthselected = false;
		}
		startd++;
	}

	for(i=0; i<dayElements.length; i++) {
		var ymdPos = dayElements[i].id.search(/[0-9]{8}$/);
		var ymd = dayElements[i].id.substring(ymdPos);

		if (monthselected == false) {
			selected[id][getSelectedKey(ymd)] = true;
			Element.addClassName(dayElements[i], "calendar_day_selected");
		}else {
			delete selected[id][getSelectedKey(ymd)];
			Element.removeClassName(dayElements[i], "calendar_day_selected");
		}
	}
	
	areaLinkAdd();
}

/*
function weekClicked(event, classid, week) {
	var dayElements = document.getElementsByClassName("calendar_day_"+classid+"forward", $(week));

	var idLen = $(week).id.lastIndexOf("calendar_week_base");
	var id = getValidCalendarID($(week).id.substring(0, idLen));

	for(i=0; i<dayElements.length; i++) {
		var ymdPos = dayElements[i].id.search(/[0-9]{8}$/);
		var ymd = dayElements[i].id.substring(ymdPos);

		if(!(getSelectedKey(ymd) in selected[id])) {
			selected[id][getSelectedKey(ymd)] = true;
			Element.addClassName(dayElements[i], "calendar_day_selected");
		}else {
			delete selected[id][getSelectedKey(ymd)];
			Element.removeClassName(dayElements[i], "calendar_day_selected");
		}
	}
	
	areaLinkAdd();
}
*/

function dowClicked(event, classid, month, index) {
	var dayElements = document.getElementsByClassName("calendar_"+classid+"day", $(month));

	var idLen = $(month).id.lastIndexOf("calendar_base");
	var id = getValidCalendarID($(month).id.substring(0, idLen));

	var next = 6;
	var nowIndex = 1;
	var startymd = "";
	for (i=0; i<dayElements.length; i++) {
		if (nowIndex%(index+1) == 0 && nowIndex < (index+2)) {
			if(Element.hasClassName(dayElements[i], "calendar_day_"+classid+"forward")) {
				var ymdPos = dayElements[i].id.search(/[0-9]{8}$/);
				var ymd = dayElements[i].id.substring(ymdPos);
				startymd = ymd;
				break;
			}
		}
		nowIndex++;
		if (i == next) {
			next = next + 7;
			nowIndex = 1;
		}
	}
	var starty = startymd.substr(0, 4);
	var startm = startymd.substr(4, 2);
	var startd = parseInt(startymd.substr(6, 2), 10);
	var endYmdPos = "";
	var tmpEndPos = "";
	var j = 1;
	while (endYmdPos == "") {
		tmpEndPos = dayElements[(dayElements.length-j)];
		j++;
		if (Element.hasClassName(tmpEndPos, "calendar_day_"+classid+"forward")) {
			endYmdPos = tmpEndPos.id.search(/[0-9]{8}$/);
		}
	}
	var endymd = tmpEndPos.id.substring(endYmdPos);
	var endy = endymd.substr(0, 4);
	var endm = endymd.substr(4, 2);
	var endd = parseInt(endymd.substr(6, 2), 10);
	var dowselected = true;
	while (startd <= endd) {
		var tmpymd = starty + startm + startd;
		if (startd < 10) {
			tmpymd = starty + startm + "0" + startd;
		}
		if(getSelectedKey(tmpymd) in selected[id]) {
			;
		}else {
			dowselected = false;
		}
		startd = startd + 7;
	}

	next = 6;
	nowIndex = 1;
	for (i=0; i<dayElements.length; i++) {
		if (nowIndex%(index+1) == 0 && nowIndex < (index+2)) {
			if(Element.hasClassName(dayElements[i], "calendar_day_"+classid+"forward")) {
				var ymdPos = dayElements[i].id.search(/[0-9]{8}$/);
				var ymd = dayElements[i].id.substring(ymdPos);

				if(dowselected == false) {
					selected[id][getSelectedKey(ymd)] = true;
					Element.addClassName(dayElements[i], "calendar_day_selected");
				}else {
					delete selected[id][getSelectedKey(ymd)];
					Element.removeClassName(dayElements[i], "calendar_day_selected");
				}
			}
		}
		nowIndex++;
		if (i == next) {
			next = next + 7;
			nowIndex = 1;
		}
	}
	
	areaLinkAdd();
}

function dayClicked(event, day) {
	var idLen = $(day).id.lastIndexOf("calendar_day");
	var id = getValidCalendarID($(day).id.substring(0, idLen));

	var ymdPos = $(day).id.search(/[0-9]{8}$/);
	var ymd = $(day).id.substring(ymdPos);

	if(getSelectedKey(ymd) in selected[id]) {
		delete selected[id][getSelectedKey(ymd)];
		Element.removeClassName($(day), "calendar_day_selected");
	}else {
		selected[id][getSelectedKey(ymd)] = true;
		Element.addClassName($(day), "calendar_day_selected");
	}
	
	areaLinkAdd();
}


/*
 *  outside calendar
 */
function showCalendar() {
	Element.hide($("range_search_area_div"));
	Element.show($("calendar_area_div"));
	Element.hide($("tab_image_kikan"));
	Element.show($("tab_image_calender"));
}

function showRangeSearch() {
	Element.hide($("calendar_area_div"));
	Element.show($("range_search_area_div"));
	Element.hide($("tab_image_calender"));
	Element.show($("tab_image_kikan"));
}

var areaDialog = null;

function openAreaDialog(id, contentId) {
	if(!areaDialog) {
		areaDialog = new Window(id, {
			"class" : "area_dialog",
			"resizable" : false,
			"closable" : false,
			"minimizable" : false,
			"maximizable" : false,
			"draggable" : false
		});

		areaDialog.setHTMLContent($(contentId).innerHTML);

		areaDialog.setDestroyOnClose();
		areaDialog.setZIndex(100);
		Element.setStyle($(areaDialog.getId()), { position : "absolute" });
		
		pos = getInitPosition();
		areaDialog.showCenter(false, pos[1], pos[0]);
	}
}

function closeAreaDialog() {
	if(areaDialog) {
		areaDialog.close();
		areaDialog = null;
	}
}

function selectArea(areaSectionId, areaSectionName) {
	if(areaSectionId) {
		$("area_hidden").value = areaSectionId;
		$("selected_area_name").innerHTML = areaSectionName;
		Element.show($("selected_area_name"));
	}
	else {
		$("area_hidden").value = null;
		$("selected_area_name").innerHTML = "";
		Element.hide($("selected_area_name"));
	}

	closeAreaDialog();
}

function submitFairSearch(calendarId) {
	if(Element.visible($("calendar_area_div"))) {
		var selectedDate = getSelectedDate(calendarId);

		for(i=0; i<selectedDate.length; i++) {
			dateElement = document.createElement("input");

			dateElement.type = "hidden";
			dateElement.name = "date_list[]";
			dateElement.value = selectedDate[i];

			$("fair_search_form").appendChild(dateElement);
		}

		document.forms["fair_search_form"].elements["start_year"].value = "";
		document.forms["fair_search_form"].elements["start_month"].value = "";
		document.forms["fair_search_form"].elements["start_day"].value = "";
		document.forms["fair_search_form"].elements["end_year"].value = "";
		document.forms["fair_search_form"].elements["end_month"].value = "";
		document.forms["fair_search_form"].elements["end_day"].value = "";
		document.forms["fair_search_form"].elements["weekend"].value = "";
	}

	$("fair_search_form").submit();
}

function getInitPosition() {

	var elem = $("search_area_div") || $("search_area_hall_category_div");
	var initPos = new Array(2);
	
	if($("search_area_div")) {
		initPos[0] = elem.clientWidth;
	}
	else {
		initPos[0] = - areaDialog.getSize().width * 1.5;
	}
	
	while(elem) {
		initPos[0] += elem.offsetLeft;
		elem = elem.offsetParent;
	}

	initPos[1] = areaDialog.getSize().height / 2;
	
	return initPos;
}
