function calendar(div_id) {
	this.div_id = div_id;
	this.table_id = div_id+"_cal_table";
	this.loading_id = div_id+"_loadingBlock";
	this.selected_days = new Array();
	this.notDips_days = new Array();
	this.isOnLoading = false;
	this.admin = false;
	this.user = false;
	this.g = new ajax('GET');
	this.g.obj = this;
	
	this.g.err_response = function() {
		alert("Errore di sistema, riprovare");
		this.obj.loadingBlock(false);
	}
	
	this.g.ok_response = function(text) {
		document.getElementById(this.obj.div_id).innerHTML = text;
		this.obj.loadingBlock(false);
		if(this.obj.admin) {
			this.obj.loadSelectedDays();
		} else if(this.obj.user) {
			this.obj.loadNotDispDays();
		}
	}
	
	this.setCurrentMonth = function(m) {
		this.current_month = m;
	}
	
	this.getMonth = function (m, y) {
		this.saveDays();
		this.setCurrentMonth(y+'-'+m);
		this.g.requestPage('calendar.inc.php?cal_name='+this.div_id+'&d=1&m='+m+'&y='+y+((this.close)?"&close=1":""));
		this.loadingBlock(true);
	}
	
	this.saveDays = function () {
		//'cal_table'
		var table = document.getElementById(this.table_id);
		var cells = table.getElementsByTagName('td');
		
		var days = new Array();
		for (var c in cells) {
			if(cells[c].className == 'selected_day') {
				var d = cells[c].id.split('_');
				var yy = d.pop();
				var mm = d.pop();
				var dd = d.pop();
				var day = yy+"-"+((mm.length < 2)?"0"+mm:mm)+"-"+((dd.length < 2)?"0"+dd:dd);
				days.push(day);
			}
		}
		
		var ym = this.current_month.split('-');
		if(!this.selected_days[ym[0]]) this.selected_days[ym[0]] = new Array();
		this.selected_days[ym[0]][ym[1]] = days;
	}
	
	this.loadSelectedDays = function () {
		var ym = this.current_month.split('-');
		if(!this.selected_days[ym[0]]) return;
		var s_days = this.selected_days[ym[0]][ym[1]];
		for (var d in s_days) {
			var day = s_days[d].split("-");
			if(day[2].charAt(0) == '0') day[2] = day[2].charAt(1);
			if(day[1].charAt(0) == '0') day[1] = day[1].charAt(1); 
			day = this.div_id+"_day_"+day[2]+"_"+day[1]+"_"+day[0];
			if(!document.getElementById(day)) {
				continue;
			}
			document.getElementById(day).className = "selected_day";
			document.getElementById(day).selected = true;
		}
	}
	
	this.loadNotDispDays = function () {
		var s_days = this.notDisp_days;
		for (var d in s_days) {
			var day = s_days[d].split("-");
			if(day[2].charAt(0) == '0') day[2] = day[2].charAt(1);
			if(day[1].charAt(0) == '0') day[1] = day[1].charAt(1); 
			day = this.div_id+"_day_"+day[2]+"_"+day[1]+"_"+day[0];
			if(!document.getElementById(day)) {
				continue;
			}
			
			var ndday = document.getElementById(day);
			
			ndday.className = "old_day";
			ndday.onclick = function () { void(0); };
			ndday.onmouseover = function () { void(0); };
			ndday.onmouseout = function () { void(0); };
		}
	}
	
	this.loadingBlock = function (val) {
		var lb = document.getElementById(this.loading_id);
		if(val) {
			var c = document.getElementById(this.div_id);
			var w = c.clientWidth;
			var h = c.clientHeight;
			var left = 0;
			var top = 0;
			var el = c;
			
			while(el != null && el.style.position != 'absolute') {
				left += el.offsetLeft;
				top += el.offsetTop;
				el = el.offsetParent;
			}
			
			//lb.style.left = left+"px";
			//lb.style.top = (top)+"px";
			lb.style.width = w+"px";
			lb.style.height = h+"px";
			lb.style.zIndex = "10001"
			lb.style.display = "block";
		} else {
			setTimeout('document.getElementById(\''+this.loading_id+'\').style.display = "none";', 100);
		}
	}
	
	/**
	 * rif_id: riferimento all'elemento su cui comparire
	 * input_id: riferimento all'elemento da riempire
	 */
	
	this.showCalendar = function (rif_id, input_id) {
		this.input_id = input_id;
		var lb = document.getElementById(this.div_id);
		var c = document.getElementById(rif_id);
		var el = c;
		if(navigator.userAgent.indexOf('MSIE') >= 0) {
			var left = -5;
			var top = el.offsetHeight+3;
		} else {
			var left = 0;
			var top = el.offsetHeight;
		}
		
		while(el != null && el.style.position != 'absolute') {
			left += el.offsetLeft;
			top += el.offsetTop;
			el = el.offsetParent;
		}

		lb.style.margin = '0';
		lb.style.left = left+"px";
		lb.style.top = (top)+"px";
		lb.style.display = "block";
	}
	
	this.hideCalendar = function() {
		var lb = document.getElementById(this.div_id).style.display = "none";
	}
	
	this.selectDisp = function (d, m, y) {
		var td = document.getElementById(this.div_id+'_day_'+d+'_'+m+'_'+y);
		if(td.selected) {
			td.className = "new_day";
			td.oldCN = "new_day";
			td.selected = false;
		} else {
			td.className = "selected_day";
			td.oldCN = "selected_day";
			td.selected = true;
		}
	}
	
	this.phpSerialize = function (disp_id) {
		this.saveDays();
		var days = this.selected_days;
		var str = "";
		for(var d1 in days) {
			var d = days[d1];
			for(var d2 in d) {
				var dd = d[d2];
				for(var d3 in dd) {
					str += dd[d3]+"#";
				}
			}
		}
		document.getElementById(disp_id).value = str;
	}
}