$(document).ready(function() {
	fillCalendar();
	
	$('.prev', '#calendar').click(function() {
		d.addMonths(-1);
		fillCalendar();
		return false;
	});
	$('.next', '#calendar').click(function() {
		d.addMonths(1);
		fillCalendar();
		return false;
	});
	$('.prev', '#calendar').parent().click(function() {
		$('.prev').trigger('click');
	});
	$('.next', '#calendar').parent().click(function() {
		$('.next').trigger('click');
	});
});

/**
 * Popola la tabella inserendo i giorni del mese corrente
 */
function fillCalendar() {
	$('.week td', '#calendar').html('&nbsp;').addClass('empty').removeAttr('title');
	$('tr', '#calendar').show();
	
	var w = 1;
	var j = d.getDay();
	
	if (d.getDaysInMonth() == 28) {
		if (!j) $('#w5').hide();
		$('#w6').hide();
	}
	if ((d.getDaysInMonth() == 30) && (j < 6)) $('#w6').hide();
	if ((d.getDaysInMonth() == 31) && (j < 5)) $('#w6').hide();
	
	for (var i = 1; i <= d.getDaysInMonth(); i++) {
		$('#d' + w + (j + 1)).html('<span class="day-number">' + i + '</span>').removeClass('empty');
		j = (j + 1) % 7;
		if (!j) w++;
	}
	$('#monthName').text(d.getMonthName() + ' ' + d.getFullYear());
	fillEvents();
	
	$('.selected', '#calendar').hover(function() {
		window.defaultLabel = $('#calendar-label').html();
		if (this.title) {
			$('#calendar-label').html(this.title);
		}
	}, function() {
		$('#calendar-label').html(window.defaultLabel);
	});
}

/**
 * Inserisce gli eventi all'interno del calendario
 */
function fillEvents() {
	$('.selected', '#calendar').removeClass('selected');
	
	for (var i = 0; i < events.length; i++) {
		var dal = events[i]['dal'].split('-');
		var al = events[i]['al'].split('-');
		var id = events[i]['id'];
		
		dal[1] = parseInt(dal[1] - 1, 10);
		dal[2] = parseInt(dal[2], 10);
		
		al[1] = parseInt(al[1] - 1, 10);
		al[2] = parseInt(al[2], 10);
		
		var ora_inizio = events[i]['ora_inizio'];
		var ora_fine = events[i]['ora_fine'];
		if ((ora_inizio != '') && (ora_fine == '')) {
			ora_fine = ora_inizio;
		}
		
		var current_year = d.getFullYear();
		var current_month = d.getMonth();
		
		if (dal.toString() == al.toString()) {
			if ((dal[0] == current_year) && (dal[1] == current_month)) {
				$('#calendar .week td').each(function() {
					if (!$(this).hasClass('empty')) {
						if ($(this).children('.day-number').text() == dal[2]) {
							selectDay(this, ora_inizio, ora_fine, id);
						}
					}
				});
			}
		} else {
			$('#calendar .week td').each(function() {
				var current_day = $(this).children('.day-number').text();
				
				if (!$(this).hasClass('empty')) {
					if ((dal[0] == current_year) && (al[0] == current_year) && (dal[1] == current_month) && (al[1] == current_month) && (dal[2] <= current_day) && (al[2] >= current_day)) {
						// l'evento inizia e finisce nel mese corrente
						selectDay(this, ora_inizio, ora_fine, id);
					} else if ((dal[0] == current_year) && (dal[1] == current_month) && (dal[2] <= current_day) && ((al[0] != current_year) || (al[1] != current_month))) {
						// l'evento inizia nel mese corrente
						selectDay(this, ora_inizio, ora_fine, id);
					} else if ((al[0] == current_year) && (al[1] == current_month) && (al[2] >= current_day) && ((dal[0] != current_year) || (dal[1] != current_month))) {
						// l'evento finisce nel mese corrente
						selectDay(this, ora_inizio, ora_fine, id);
					} else if ((dal[0] < current_year) && (al[0] > current_year)) {
						// l'evento dura per tutto l'anno corrente
						selectDay(this, ora_inizio, ora_fine, id);
					} else if ((dal[0] == current_year) && (al[0] == current_year) && (dal[1] < current_month) && (al[1] > current_month)) {
						// l'evento dura per tutto il mese corrente
						selectDay(this, ora_inizio, ora_fine, id);
					} else if ((dal[0] != al[0]) && (((dal[0] == current_year) && (dal[1] < current_month)) || ((al[0] == current_year) && (al[1] > current_month)))) {
						// l'evento dura per tutto il mese corrente
						selectDay(this, ora_inizio, ora_fine, id);
					}
				}
			});
		}
	}
}

/*
 * Setta il giorno come selezionato
 * @param object el
 * @param string from
 * @param string to
 * @param string id
 */
function selectDay(el, from, to, id) {
	$(el).addClass('selected');
	$(el).attr('title', from + ((to != from) ? (' - ' + to) : ''));
	
	if (id) {
		$(el).append('<span style="display:none" class="event-id">' + id + '</span>')
	}
}