// JavaScript Document

function drawSearchResultCalendars() {
	if(!pageLoaded || !dsPlanSearch.dataWasLoaded)	return;

	drawSearchResultCalendar("calendarAllPlans");
}

function drawVacancyCalendars(dsPlanSearchPlan, startDay) {
	if(!pageLoaded || !dsPlanSearch.dataWasLoaded)	return;

	drawVacancyCalendar(dsPlanSearchPlan, "calendarAllPlans", startDay);
}

function getGuestsQueryStringFromGuestArray(arGuests) {
	var query = "";
	var glue = "";
	for(var roomNumber in arGuests) {
		for(var personTypeId in arGuests[roomNumber]) {
			query += glue + "g_" + (parseInt(roomNumber) + 1) + "_" + (parseInt(personTypeId) + 1) + "=" + arGuests[roomNumber][personTypeId];
			glue = "&";
		}
	}
	return query;
}

function parseCookie()
{
	year = parseInt(readCookie("year"));
	month = parseInt(readCookie("month"));
	day = parseInt(readCookie("day"));
	staynights = parseInt(readCookie("staynights"));
	
	for(var roomNumber = 1 ; roomNumber <= 3 ; roomNumber++)
	{
		var arOneRoom = new Array();
		var personCountInRoom = 0;
		for(var personTypeId = 1 ; personTypeId <= 7 ; personTypeId++)
		{
			var count = parseInt(readCookie("guests_" + roomNumber + "_" + personTypeId));
			if(isNaN(count))
			{
				count = 0;
			}
			arOneRoom.push(count);
			personCountInRoom += count;
		}
		
		if(personCountInRoom > 0)
		{
			arGuests.push(arOneRoom);
		}
	}
}

function getLengthByPlanTypeId(ds, planTypeId) {
	var count = 0;
	for(var index in ds.getData()) {
		if(ds.getData()[index]['planTypeId'] == planTypeId) {
			count++;
		}
	}
	return count;
}

function drawSearchResultCalendar(calendarSection) {
	var ddToday = new Date();
	var section = document.getElementById(calendarSection);
	var table = "";
	if(section != null) {
		if(dsPlanSearchPlan.getData().length == 0) {
			section.innerHTML = "No plan is available.";
			return;
		}
		
		table += '<tr>';
		table += '<td width="20%" class="CalendarPlanName">Plan Title</td>';
		
		for(var day = -7 ; day < 8 ; day++) {
			var dd = new Date(startDay.getTime() + day * 24 * 60 * 60 * 1000);
			table += '<td class="';
			switch(dd.getDay()) {
				case 0: table += "CalendarSunday"; break;
				case 6: table += "CalendarSaturday";	break;
				default: table += "CalendarWeekday";	break;
			}
			if(day == 0) {
				table += "2";
			}
			
			table += '">';
			table += '<div align="center">';
			if(day == -7 || dd.getDate() == 1) {
				table += (dd.getMonth() + 1) + "/";
			}
			table += dd.getDate() + "<br/>" + arWeek[dd.getDay()] + '</td>';
			table += '</div>';
		}
		table += '</tr>';
		
		for(index in dsPlanSearchPlan.getData()) {
			//if(dsPlanSearchPlan.getData()[index]['planTypeId'] != planTypeId) continue;
																							 
			table += '<tr>';
			table += '<td width="20%" class="CalendarPlanName">' + dsPlanSearchPlan.getData()[index]['planNameEnglish'] + '<br /><span class="PlanType">' + (dsPlanSearchPlan.getData()[index]['planTypeId'] == 1 ? "Room Dinner" : (dsPlanSearchPlan.getData()[index]['planTypeId'] == 2 ? "Restaurant Dinner" : (dsPlanSearchPlan.getData()[index]['planTypeId'] == 3 ? "Buffet Dinner" : "Other"))) + '</span></td>';
			var planTypeId = dsPlanSearchPlan.getData()[index]['planTypeId'];
			for(var day = -7 ; day < 8 ; day++) {
				var dd = new Date(startDay.getTime() + day * 24 * 60 * 60 * 1000);
				var roomCount = getRoomCountByPlanTypeOnDay(planTypeId, dd);
				if(roomCount == null || roomCount == 0) {
					roomCount = "-";
				}
				table += '<td class="'
				var canStay = canStayOnDay(planTypeId, dd, staynights, arGuests.length) && dd > ddToday - 24 * 60 * 60 * 1000;
				table += canStay ? "CalendarResOk" : "CalendarResNg";
				if(day == 0) {
					table += "2";
				}
				table += '"><div align="center">';
				if(canStay) {
					var clickHtml = 'onclick="onDayClicked(' + dd.getFullYear() + "," + (dd.getMonth() + 1) + "," + dd.getDate() + ')"';
					table += '<a href="/reserve/planOnly_e.html?planId=' + dsPlanSearchPlan.getData()[index]['@planId'] + ' " ' + clickHtml + '>';
				}
				table += roomCount;
				if(canStay) {
					table += '</a>';
				}
				table += '</div></td>';
			}
	
			table += '</tr>';
		}
	}
	
	section.innerHTML = '<table>' + table + '</table>';
}

function onDayClicked(year, month, day)
{
	writeCookie("year", year);
	writeCookie("month", month);
	writeCookie("day", day);
	//window.open("input.html", "_self");
}

function drawVacancyCalendar(dsPlanSearchPlan, calendarSection, startDay) {
	var ddToday = new Date();
	var section = document.getElementById(calendarSection);
	var table = "";
	if(section != null) {
		table += '<tr>';
		table += '<td width="20%" class="CalendarPlanName">Plan Title</td>';
		
		for(var day = 0 ; day < 14 ; day++) {
			var dd = new Date(startDay.getTime() + day * 24 * 60 * 60 * 1000);
			table += '<td class="';
			switch(dd.getDay()) {
				case 0: table += "CalendarSunday"; break;
				case 6: table += "CalendarSaturday";	break;
				default: table += "CalendarWeekday";	break;
			}
			
			table += '">';
			table += '<div align="center">';
			if(day == 0 || dd.getDate() == 1) {
				table += (dd.getMonth() + 1) + "/";
			}
			table += dd.getDate() + "<br/>" + arWeek[dd.getDay()] + '</td>';
			table += '</div>';
		}
		table += '</tr>';

		for(index in dsPlanSearchPlan.getData()) {
			//if(dsPlanSearchPlan.getData()[index]['planTypeId'] != planTypeId) continue;

			table += '<tr>';
			table += '<td width="20%" class="CalendarPlanName">' + dsPlanSearchPlan.getData()[index]['planNameEnglish'] + '<br /><span class="PlanType">' + (dsPlanSearchPlan.getData()[index]['planTypeId'] == 1 ? "Room Dinner" : (dsPlanSearchPlan.getData()[index]['planTypeId'] == 2 ? "Restaurant Dinner" : (dsPlanSearchPlan.getData()[index]['planTypeId'] == 3 ? "Buffet Dinner" : "Other"))) + '</span></td>';
			var planTypeId = dsPlanSearchPlan.getData()[index]['planTypeId'];
			for(var day = 0 ; day < 14 ; day++) {
				var dd = new Date(startDay.getTime() + day * 24 * 60 * 60 * 1000);
				var roomCount = getRoomCountByPlanTypeOnDay(planTypeId, dd);
				if(roomCount == null || roomCount == 0) {
					roomCount = "-";
				}
				table += '<td class="'
				var canStay = canStayOnDay(planTypeId, dd, 1, 1) && dd > ddToday - 24 * 60 * 60 * 1000;
				table += canStay ? "CalendarResOk" : "CalendarResNg";
				table += '"><div align="center">';
				if(canStay) {
					table += '<a href="/reserve/plan_e.html?planId=' + dsPlanSearchPlan.getData()[index]['@planId'] + '&year=' + dd.getFullYear() + '&month=' + (dd.getMonth() + 1) + '">';
				}
				table += roomCount;
				if(canStay) {
					table += '</a>';
				}
				table += '</div></td>';
			}
	
			table += '</tr>';
		}
	}
	
	section.innerHTML = '<table>' + table + '</table>';
}

function getRoomCountByPlanTypeOnDay(planTypeId, date) {
	for(var index in dsPlanSearchRoom.getData()) {
		if(dsPlanSearchRoom.getData()[index]['@planTypeId'] == planTypeId && dsPlanSearchRoom.getData()[index]['@date'] == getDateStringFromDate(date)) {
			return dsPlanSearchRoom.getData()[index]['roomCount'];
		}
	}
	
	return null;
}

function getDateStringFromDate(date) {
	return date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + date.getDate();
}

function canStayOnDay(planTypeId, date, staynights, requiredRoomCount) {
	if(staynights <= 1) {
		return requiredRoomCount <= getRoomCountByPlanTypeOnDay(planTypeId, date);
	}
	
	return canStayOnDay(planTypeId, new Date(date.getTime() + 24 * 60 * 60 * 1000), staynights - 1, requiredRoomCount);
}
