function CalendarManager(events) {
	
	this.EVENTS = events; // array di oggetti contenente i dati del calendario (date, text, title, type)
	var instance = this; // fuck the closures!
	
	// Trova la posizione della cella data del calendario
	this.getElementPosition = function(obj) {
		
		var curleft = curtop = 0;
		
		if (obj.offsetParent) {
			do {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			} while (obj = obj.offsetParent);
		}
		
		return [curleft,curtop];
		
	};
	
	// Rimuove un eventuale box di evento
	this.clearEvent = function() {
		
		var page = document.getElementsByTagName("body")[0];
		
		if (document.getElementById("calendar_event_message_box")) {
			page.removeChild(document.getElementById("calendar_event_message_box"));
		}
		
	};
	
	// Rimuove l'eventuale legenda
	this.clearLegend = function() {
		
		var page = document.getElementsByTagName("body")[0];
		
		if (document.getElementById("calendar_event_legend")) {
			page.removeChild(document.getElementById("calendar_event_legend"));
		}
		
	};
	
	this.showLegend = function(obj, pasePath) {
		
		var pos = this.getElementPosition(obj);
		var box = document.createElement("div");
		var page = document.getElementsByTagName("body")[0];
		var html = [];
		
		this.clearLegend();
			
		box.id = "calendar_event_legend";
		box.style.opacity = 0.9;
		box.style.filter = "alpha(opacity=90)";
		box.style.width = "250px";
		box.style.background = "#EFEFEF";
		box.style.border = "1px solid #CBCBCB";
		box.style.position = "absolute";
		box.style.padding = "5px";
		box.style.zIndex = 10000;
		box.style.fontSize = "10px";
		box.style.top = (pos[1] + 15) + "px";
		box.style.left = (pos[0] - 139) + "px";
		box.style.height = "200px";
		html.push("<h2>Legenda<h2><br />");
		html.push('<p><img src="');
		html.push(pasePath);
		html.push('/css/ag/calendar_event_1.gif" /> = Eventi Assogestioni</p>');
		html.push('<p><img src="');
		html.push(pasePath);
		html.push('/css/ag/calendar_event_2.gif" /> = Eventi a cui partecipa Assogestioni</p>');
		html.push('<p><img src="');
		html.push(pasePath);
		html.push('/css/ag/calendar_event_3.gif" /> = Eventi di terzi</p>');
		html.push('<p><img src="');
		html.push(pasePath);
		html.push('/css/ag/calendar_event_4.gif" /> = Corsi</p>');		
		html.push('<p><img src="');
		html.push(pasePath);
		html.push('/css/ag/calendar_event_5.gif" /> = Comunicati Stampa</p><br />');		
		html.push('<p align="center"><a style="color: #CC6600" href="javascript:;" onclick="cManager.clearLegend()"> - chiudi - </a></p>');
		box.innerHTML = html.join("");
		page.appendChild(box);
		
	};
	
	// Associa gli eventi alle date del calendario basandosi sull'array EVENTS
	this.addCalendarEvents = function(date) {
		
		var r = [false, ""]; // array da ritornare
		var d = []; // data dell'evento da splittare: giorno [0], mese [1], anno [2]
		
	    for (var i=0, end=instance.EVENTS.length; i<end; i++) { 
	    	
	    	d = instance.EVENTS[i].date.split("/");
	    	
	        if (date.getMonth() == d[1] - 1 && date.getDate() == d[0] && date.getFullYear() == d[2]) { 
	            r = [true, "is_calendar_event is_calendar_event_for_" + instance.EVENTS[i].type];
	        } 
	        
	    } 
	    
	  return r;
		
	};
	
	// Mostra il box con i dati dell'evento
	this.showCalendarEvent = function(el, dayEvents) {
	
		var elPos = this.getElementPosition(el); // ricavo la posizione della cella data del calendario
		var page = document.getElementsByTagName("body")[0];
		var box, boxHeader, boxBody, html, currentEvent;
			
		box = document.createElement("div"); // box di contenimento 
		boxHeader = document.createElement("div"); // intestazione del box (include: titolo e data)
		boxBody = document.createElement("div"); // testo dell'evento
		
		// container
		box.id = "calendar_event_message_box";
		box.style.opacity = 0.9;
		box.style.filter = "alpha(opacity=90)";
		box.style.width = "300px";
		box.style.background = "#EFEFEF";
		box.style.border = "1px solid #CBCBCB";
		box.style.position = "absolute";
		box.style.zIndex = 10000;
		box.style.top = (elPos[1]) + "px";
		box.style.left = (elPos[0] - 301) + "px";
		box.style.height = "120px";
		box.onclick = function() { // rimuove il box all'onclick
			document.getElementsByTagName("body")[0].removeChild(this);
		}
		
		// header
		boxHeader.style.padding = "5px 10px";
		boxHeader.style.position = "relative";
		boxHeader.style.fontWeight = "bold";
		boxHeader.style.color = "#3F638C";
		
		// body
		boxBody.style.width = "270px";
		boxBody.style.overflow = "auto";
		boxBody.style.padding = "0 10px";
		
		if (dayEvents.length == 1) {
			
			currentEvent = dayEvents[0];
			html = [];
			html.push('<img src="../../img/css/ag/event_corner.gif" style="float:right;margin:-6px -11px 0 0;" />');
			html.push(currentEvent.date);
			html.push('<br /><a title="Visualizza l\'evento" style="color:#CC6600" href="');
			html.push(currentEvent.link);
			html.push('" onmouseover="this.style.textDecoration=\'none\'" ');
			html.push('onmouseout="this.style.textDecoration=\'underline\'"> ');
			html.push(currentEvent.title.substring(0,1).toUpperCase());
			html.push(currentEvent.title.substring(1,47).toLowerCase());
			if (currentEvent.title.length > 48) {
				html.push("...");
			}
			html.push("</a>");
			boxHeader.innerHTML = html.join("");
			boxBody.style.height = "60px";
			boxBody.innerHTML = currentEvent.text;
							
		} else {
			
			html = [];
			html.push('<img src="../../img/css/ag/event_corner.gif" style="float:right;margin:-6px -11px 0 0;" />');
			html.push(dayEvents[0].date);
			html.push(" (");
			html.push(dayEvents.length);
			html.push(" eventi)");
			boxHeader.innerHTML = html.join("");
			boxBody.style.height = "85px";
			html = [];
			
			for (var i=0; i<dayEvents.length; i++) {
				
				currentEvent = dayEvents[i];
				html.push(i+1);
				html.push('. <a title="Visualizza l\'evento" style="color:#CC6600" href="');
				html.push(currentEvent.link);
				html.push('" onmouseover="this.style.textDecoration=\'none\'" ');
				html.push('onmouseout="this.style.textDecoration=\'underline\'"> ');
				html.push(currentEvent.title.substring(0,1).toUpperCase());
				html.push(currentEvent.title.substring(1,47).toLowerCase());
				if (currentEvent.title.length > 48) {
					html.push("...");
				}
				html.push("</a><br />");
				html.push(currentEvent.text);
				html.push("<br /><br />");
			
			}
			
			boxBody.innerHTML = html.join("");
			
		}
		
		// inserimento nel DOM
		box.appendChild(boxHeader);
		box.appendChild(boxBody);
		page.appendChild(box);
		
	};
	
	// Recupera i dati di un evento dall'array EVENTS
	this.checkForCalendarEvent = function(element, date) {
		
		var dayEvents = [];
		var e = instance.EVENTS;
	
		for (var i=0, end=e.length; i<end; i++) {
		
			if (e[i].date == date) { // se lo trovo, mostro l'evento
				dayEvents.push(e[i]);
			}
		
		}
		
		this.showCalendarEvent(element, dayEvents);
	
	};
	
}



