/**
 * On the EventFormView, toggle the time inputs depending on the value of the checkbox
 * @param boolean checked
 */
function allDayHandler (checked) {
	var to_time   = document.getElementById('to_time');
	var from_time = document.getElementById('from_time');

	display = (checked) ? 'none' : 'block';
	to_time.style.display = display;
	from_time.style.display = display;
}

/**
 * On the CalendarMonthView and CalendarWeekView, toggles the various event types on and off based on which checkboxes are checked
 */
function updateCalendarDisplay (url, handler) {
	inputs = document.getElementsByTagName("input");
	events = ((location.search == '') ? '?' : '&' ) + "events=";
	for (i = 0; i < inputs.length; i++) {
		if (inputs[i].type == 'checkbox' && inputs[i].checked) {
			events = events + inputs[i].value + "_";
		}
	}
	url = url + events;
	dao.requestData(url, handler);
}


var differenceMinute;
var differenceHour;
var differenceDay;
var differenceMonth;
var differenceYear;
var hourFilled;
var minuteFilled;
var oldFromMeridian;

function setEndTime(check) {
	if (check == 'read') {
		var hourFrom = parseInt(document.getElementById("event_from_time_hour").value);
		if (isNaN(hourFrom)) {
			hourFrom = 0; hourFilled = 0;
		}
		var minuteFrom = parseInt(document.getElementById("event_from_time_minute").value);
		if (isNaN(minuteFrom)){
			minuteFrom = 0; minuteFilled = 0;
		}
		var hourTo = parseInt(document.getElementById("event_to_time_hour").value);
		if (isNaN(hourTo)){
			hourTo = 0;
		}
		var minuteTo = parseInt(document.getElementById("event_to_time_minute").value);
		if (isNaN(minuteTo)){
			minuteTo = 0;
		}
		var dayFrom = parseInt(document.getElementById("event_from_date_day").value);
		if (isNaN(dayFrom)){
			dayFrom = 0;
		}
		var dayTo = parseInt(document.getElementById("event_to_date_day").value);
		if (isNaN(dayTo)){
			dayTo = dayFrom;
		}
		var monthFrom = parseInt(document.getElementById("event_from_date_month").value);
		if (isNaN(monthFrom)){
			monthFrom = 0;
		}
		var monthTo = parseInt(document.getElementById("event_to_date_month").value);
		if (isNaN(monthTo)){
			monthTo = monthFrom;
		}
		var yearFrom = parseInt(document.getElementById("event_from_date_year").value);
		if (isNaN(yearFrom)){
			yearFrom = 0;
		}
		var yearTo = parseInt(document.getElementById("event_to_date_year").value);
		if (isNaN(yearTo)){
			yearTo = yearFrom;
		}
		oldFromMeridian = document.getElementById("event[from_time_meridian]").value;
		differenceHour = hourTo - hourFrom;
		differenceMinute = minuteTo - minuteFrom;
		differenceDay = dayTo - dayFrom;
		differenceMonth = monthTo - monthFrom;
		differenceYear = yearTo - yearFrom
	}

	if (check == 'write') {
		var newMinuteFrom = parseInt(document.getElementById("event_from_time_minute").value);
		var newHourFrom = parseInt(document.getElementById("event_from_time_hour").value);
		var newDayFrom = parseInt(document.getElementById("event_from_date_day").value);
		var newMonthFrom = parseInt(document.getElementById("event_from_date_month").value);
		var newYearFrom = parseInt(document.getElementById("event_from_date_year").value);
		var newMinuteTo = newMinuteFrom + differenceMinute;
		var newHourTo = newHourFrom + differenceHour;
		var newDayTo = newDayFrom + differenceDay;
		var newMonthTo = newMonthFrom + differenceMonth;
		var newYearTo = newYearFrom + differenceYear;

		if (document.getElementById("event_to_time_minute").value !=="" && minuteFilled !== 0) {
			if (newMinuteTo > 59) {
				newMinuteTo = newMinuteTo - 60;
				newHourTo++;
			}
			if (newMinuteTo < 0) {
				newMinuteTo = newMinuteTo + 60;
				newHourTo--;
			}
			document.getElementById("event_to_time_minute").value = newMinuteTo;
			if (newMinuteTo < 10) {
				document.getElementById("event_to_time_minute").value = "0" + newMinuteTo;
			}
		}

		/* There are six cases: Moving forward past 12, moving forward to 12, moving forward from 12,
		 * Moving backwards past 12, moving backwards to 12, and moving backwards from 12.
		 * 12:00 screws it all up because if being moved up to 12 or being pulled back from 12,
		 * You need to change between AM and PM; you need to move up a day if being pushed up from 12am, etc.
		 * Midnight is the earliest part of the day - so 11pm on the 22nd plus an hour is midnight on the 23rd!
		 */
		if (document.getElementById("event_to_time_hour").value !=="" && hourFilled !== 0) {
			if (newHourTo > 12 && parseInt(document.getElementById("event_to_time_hour").value) !== 12) {
				newHourTo = newHourTo - 12; //If end time goes from 11am to 1pm
				switch (document.getElementById("event[to_time_meridian]").value) {
					case "am":
						document.getElementById("event[to_time_meridian]").value = "pm";
						break;
					case "pm":
						document.getElementById("event[to_time_meridian]").value = "am";
						newDayTo = newDayTo + 1;
					break;
				}
			}

			//If end time goes from 1pm to 11am
			if (newHourTo < 0 && parseInt(document.getElementById("event_to_time_hour").value) !== 12) {
				newHourTo = newHourTo + 12;
					switch (document.getElementById("event[to_time_meridian]").value) {
						case "pm":
							document.getElementById("event[to_time_meridian]").value = "am";
							break;
						case "am":
							document.getElementById("event[to_time_meridian]").value = "pm";
							newDayTo = newDayTo - 1;
						break;
					}
				}

			//If end time is being pushed further TO 12 noon / midnight
			if (newHourTo == 12 && parseInt(document.getElementById("event_to_time_hour").value) !== 12) {
				switch (document.getElementById("event[to_time_meridian]").value) {
					case "am":
						document.getElementById("event[to_time_meridian]").value = "pm";
						break;
					case "pm":
						document.getElementById("event[to_time_meridian]").value = "am";
						newDayTo = newDayTo + 1;
					break;
				}
			}

			//If end time is being moved backwards TO 12, it'll be marked as 0 and so needs to be changed
			if (newHourTo == 0 && parseInt(document.getElementById("event_to_time_hour").value) !== 12) {
				newHourTo = 12;
			}

			//If end time is being changed FROM 12 noon / midnight TO something else
			if (parseInt(document.getElementById("event_to_time_hour").value) == 12 && newHourTo !== 12) {
				//if end time is being decreased - Have to switch between AM, PM and subtract a day if midnight
				if (newHourTo < 12) {
					switch (document.getElementById("event[to_time_meridian]").value) {
						case "am":
							document.getElementById("event[to_time_meridian]").value = "pm";
							newDayTo = newDayTo - 1;
						break;
						case "pm":
							document.getElementById("event[to_time_meridian]").value = "am";
						break;
					}
				}
				//If end time is being increased - behaves normally, but need to subtract 12 from hour
				if (newHourTo > 12) {
					newHourTo = newHourTo - 12;
				}
			}
		document.getElementById("event_to_time_hour").value = newHourTo;
		}
		//Switching from working with hours to meridians: check how they were set, how they are set now, and act accordingly.
		var newFromMeridian = document.getElementById("event[from_time_meridian]").value;
		var ToMeridian = document.getElementById("event[to_time_meridian]").value;
		if(oldFromMeridian == "am" && newFromMeridian == "pm") {
			if(ToMeridian == "pm") {
				document.getElementById("event[to_time_meridian]").value = "am";
				newDayTo = newDayTo + 1;
			}
			if(ToMeridian == "am") {
				document.getElementById("event[to_time_meridian]").value = "pm";
			}
		}

		if(oldFromMeridian == "pm" && newFromMeridian == "am") {
			if(ToMeridian == "am") {
				document.getElementById("event[to_time_meridian]").value = "pm";
				newDayTo = newDayTo - 1;
			}
			if(ToMeridian == "pm") {
				document.getElementById("event[to_time_meridian]").value = "am";
			}
		}
		if(document.getElementById("event_from_date_day").value !=="") {
			document.getElementById("event_to_date_day").value = newDayTo;
		}
		if(document.getElementById("event_from_date_month").value !=="") {
			document.getElementById("event_to_date_month").value = newMonthTo;
		}
		if(document.getElementById("event_from_date_year").value !=="") {
			document.getElementById("event_to_date_year").value = newYearTo;
		}
		hourFilled = 1;
		minuteFilled = 1;
	}
}
