// JavaScript Document

//Declares variables

function rfp(){
	
	var eventDatesTb = $("input.event.date");
				   
	eventDatesTb.change(function(){
		var arrDate = new Date($("input#arr_date").val());
		var depDate = new Date($("input#dep_date").val());
		
		if(isValidDate(arrDate) && isValidDate(depDate) )
		{
			var numDays = calcDateRange(arrDate, depDate);
		}

		if(numDays > 0)
		{
			var eventDates = enumEventDates(arrDate, numDays);
			buildMeetingForm(eventDates, numDays);
			buildSleepingForm(eventDates, numDays);
			buildFoodForm(eventDates, numDays);
		}
		else{}		
		
		$("td.single input").change(function(){
			updateTotal(numDays, 'single');
		});
		$("td.double input").change(function(){
			updateTotal(numDays, 'double');
		});
		$("td.suite input").change(function(){
			updateTotal(numDays, 'suite');
		});
		$("td.breakfast input").change(function(){
			updateTotal(numDays, 'breakfast');
		});
		$("td.break_1 input").change(function(){
			updateTotal(numDays, 'break_1');
		});
		$("td.lunch input").change(function(){
			updateTotal(numDays, 'lunch');
		});
		$("td.break_2 input").change(function(){
			updateTotal(numDays, 'break_2');
		});
		$("td.brunch input").change(function(){
			updateTotal(numDays, 'brunch');
		});
		$("td.dinner input").change(function(){
			updateTotal(numDays, 'dinner');
		});
		$("td.reception input").change(function(){
			updateTotal(numDays, 'reception');
		});
	});
}

function updateTotal(numDays, columnName){
	var total = 0;
	for(var i = 0; i < numDays; i++)
	{
		total += parseInt($("td." + columnName + ".day_" + i + " input").val(),0);
	}
	$("td.totals." + columnName).empty().html(total);
}

function buildMeetingForm(eventDates, numDays)
{
	var headerRowText = '<th>Date</th><th>Main Room Setup</th><th>Breakout Rooms</th><th>People/Breakout Room</th><th>Start Time</th><th>End Time</th>';
	var numRoomsOptions = '<option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option>';
	var roomTypeOptions = '<option value="Banquet">Banquet</option><option value="Classroom">Classroom</option><option value="Conference">Conference</option><option value="Reception">Reception</option><option value="Theater">Theater</option><option value="U-shape">U-shape</option><option value="Other">Other</option>';
	var timeOptions = '<option value="12:00 AM">12:00 AM</option><option value="12:30 AM">12:30 AM</option><option value="1:00 AM">1:00 AM</option><option value="1:30 AM">1:30 AM</option><option value="2:00 AM">2:00 AM</option><option value="2:30 AM">2:30 AM</option><option value="3:00 AM">3:00 AM</option><option value="3:30 AM">3:30 AM</option><option value="4:00 AM">4:00 AM</option><option value="4:30 AM">4:30 AM</option><option value="5:00 AM">5:00 AM</option><option value="5:30 AM">5:30 AM</option><option value="6:00 AM">6:00 AM</option><option value="6:30 AM">6:30 AM</option><option value="7:00 AM">7:00 AM</option><option value="7:30 AM">7:30 AM</option><option value="8:00 AM">8:00 AM</option><option value="8:30 AM">8:30 AM</option><option value="9:00 AM">9:00 AM</option><option value="9:30 AM">9:30 AM</option><option value="10:00 AM">10:00 AM</option><option value="10:30 AM">10:30 AM</option><option value="11:00 AM">11:00 AM</option><option value="11:30 AM">11:30 AM</option><option value="12:00 PM">12:00 PM</option><option value="12:30 PM">12:30 PM</option><option value="1:00 PM">1:00 PM</option><option value="1:30 PM">1:30 PM</option><option value="2:00 PM">2:00 PM</option><option value="2:30 PM">2:30 PM</option><option value="3:00 PM">3:00 PM</option><option value="3:30 PM">3:30 PM</option><option value="4:00 PM">4:00 PM</option><option value="4:30 PM">4:30 PM</option><option value="5:00 PM">5:00 PM</option><option value="5:30 PM">5:30 PM</option><option value="6:00 PM">6:00 PM</option><option value="6:30 PM">6:30 PM</option><option value="7:00 PM">7:00 PM</option><option value="7:30 PM">7:30 PM</option><option value="8:00 PM">8:00 PM</option><option value="8:30 PM">8:30 PM</option><option value="9:00 PM">9:00 PM</option><option value="9:30 PM">9:30 PM</option><option value="10:00 PM">10:00 PM</option><option value="10:30 PM">10:30 PM</option><option value="11:00 PM">11:00 PM</option><option value="11:30 PM">11:30 PM</option>';
	
	var headerRow = $("#meeting thead tr");
	var mBlock = $("#meeting tbody");
	
	var rowString = '';
	for(i = 0; i < numDays; i++)
	{ 
		rowString += '<tr class="day_' + i + ' first_row"><input type="hidden" name="room_date_' + i + '" value="' + eventDates[i] + 
		'" /><th><span class="row_label day_' + i + '">' + eventDates[i] + '</span></th><td class="day_' + i + 
		' setup"><select name="room_main_setup_' + i + '" id="" class="room_type">' + roomTypeOptions + '</select></td><td class="day_' + i 
		+ '"><select name="room_num_' + i + '" id="">'
		 + numRoomsOptions + '</select></td><td class="day_' + i + ' people"><input type="text" name="room_people_' + i + '" value="0" /></td><td class="day_' 
		 + i + ' start_time"><select name="room_start_' + i + '" id="" class="time">' + timeOptions + '</select></td><td class="day_' + i + 
		 ' end_time"><select name="room_end_' + i + '" id="" class="time">' + timeOptions + '</select></td></tr>';
	}
	rowString += '';
	
	headerRow.empty();
	headerRow.html(headerRowText);

	mBlock.empty();						//Removes the noscript tr
	mBlock.html(rowString);			//Injects the new table body
}

function buildSleepingForm(eventDates, numDays)
{
	var totalsRow = '<tr class="totals"><th><span class="row_label totals">Totals</span></th><td class="totals single"><span>0</span></td><td class="totals double"><span>0</span></td><td class="totals suite"><span>0</span></td></tr>';
	var sBlock = $("#sleeping tbody");
	var headerRow = $("#sleeping thead tr");
	
	var rowString = '';
	for(i = 0; i < numDays; i++)
	{
		rowString += '<tr class="day day_' + i + '"><input type="hidden" name="sleep_date_' + i + '" value="' + eventDates[i] + 
		'" /><th><span class="row_label day_' + i + '">' + eventDates[i] + '</span></th><td class="day_' + i + 
		' single"><input name="sleep_single_' + i + '" type="text" value="0" /></td><td class="day_' + i + 
		' double"><input name="sleep_double_' + i + '"  type="text" value="0" /></td><td class="day_' + i + 
		' suite"><input name="sleep_suite_' + i + '"  type="text" value="0" /></td></tr>';
	}
	rowString += totalsRow;
	
	$("#sleeping thead tr th:first-child").remove();
	headerRow.prepend('<th>Date</th>');	//Adds the date column not present when there's noscript
	sBlock.empty();						//Removes the noscript tr
	sBlock.html(rowString);			//Injects the new table body
}

function buildFoodForm(eventDates, numDays)
{
	var headerRowText = '<th>Date</th><th>Breakfast</th><th>Brunch</th><th>Break 1</th><th>Lunch</th><th>Break 2</th><th>Dinner</th><th>Reception</th>';
	var totalsRowText = '<tr class="totals"><th><span class="row_label totals">Totals</span></th><td class="totals breakfast"><span>0</span></td><td class="totals brunch"><span>0</span></td><td class="totals break_1"><span>0</span></td><td class="totals lunch"><span>0</span></td><td class="totals break_2"><span>0</span></td><td class="totals dinner"><span>0</span></td><td class="totals reception"><span>0</span></td></tr>';
	
	var fBlock = $("#food tbody");
	var headerRow = $("#food thead tr");
	
	var rowString = '';
	for(i = 0; i < numDays; i++)
	{
		rowString += '<tr class="day day_' + i + '"><input type="hidden" name="food_date_' + i + '" value="' + eventDates[i] + 
		'" /><th><span class="row_label day_' + i + '">' + eventDates[i] + '</span></th><td class="day_' + i + 
		' breakfast"><input name="food_breakfast_' + i + '" type="text" value="0" /></td><td class="day_' + i + 
		' brunch"><input type="text" name="food_brunch_' + i + '" value="0" /></td><td class="day_' + i + 
		' break_1"><input type="text" name="food_break1_' + i + '" value="0" /></td><td class="day_' + i + 
		' lunch"><input name="food_lunch_' + i + '" type="text" value="0" /></td><td class="day_' + i + 
		' break_2"><input type="text" name="food_break2_' + i + '" value="0" /></td><td class="day_' + i + 
		' dinner"><input type="text" name="food_dinner_' + i + '" value="0" /></td><td class="day_' + i + 
		' reception"><input type="text" name="food_reception_' + i + '" value="0" /></td></tr>';
	}
	rowString += totalsRowText;
	
	headerRow.empty();
	headerRow.html(headerRowText);	//Adds the date column not present when there's noscript
	fBlock.empty();						//Removes the noscript tr
	fBlock.html(rowString);			//Injects the new table body
}

function calcDateRange(arr, dep){
	if(arr != "" && dep != "")
	{
		var arrDate = new Date(arr);
		var depDate = new Date(dep);
		
		numDays = Math.ceil(depDate.getTime() - arrDate.getTime())/ (1000 * 60 * 60 * 24) + 1;
		return numDays;
	}
	else
	{
		return 0;
	}
}

function isValidDate(date)
{
	return true;
}

function enumEventDates(firstDate, numDays)
{
	var msecs = 1000 * 60 * 60 * 24;
	var datesArray = new Array(numDays);
	
	for( i = 0; i < numDays; i++)
	{
		var tempDate = new Date(firstDate.getTime() + i * msecs);
		var day = formatDayOfWeek(tempDate.getDay());
		var dateString = day + ', ' + (tempDate.getMonth()+1) + '/' + tempDate.getDate() + '/' + tempDate.getFullYear();
		
		datesArray[i] = dateString;
	}
	return datesArray;
}

//takes a number 0-6 and returns the day of the week
function formatDayOfWeek(day)
{
	var theDay = '';
	
	day += 1; //So the range is now 1-7 instead of 0-6
	
	switch(day)
	{
		case 1:
			theDay = 'Sunday';
			break;
		case 2:
			theDay = 'Monday';
			break;
		case 3:
			theDay = 'Tuesday';
			break;
		case 4:
			theDay = 'Wednesday';
			break;
		case 5:
			theDay = 'Thursday';
			break;
		case 6:
			theDay = 'Friday';
			break;
		case 7:
			theDay = 'Saturday';
			break;
	}
	return theDay;
}
