function days_in_month(month, year) {
	if (
		month==0 ||
		month==2 ||
		month==4 ||
		month==6 ||
		month==7 ||
		month==9 ||
		month==11
	) return 31;
	else if (
		month==3 ||
		month==5 ||
		month==8 ||
		month==10
	) return 30;
	else {
		if (year % 4 != 0) return 28;
		else if ((year % 100 != 0) && ((year % 400) == 0)) return 28;
		else return 29
	}
}

function open_calendar(input_view, input_true, nome_campo) {
	calendar_window=window.open("","calendar_window", 'scrollbars=no,status=no,width=240,height=160,left=0,top=0');
	show_calendar(calendar_window, input_true.value, nome_campo);
}

function show_calendar(calendar_window, data, nome_campo) {
	calendar_window.document.close();
	calendar_window.document.open();

	if (data == "" || data == "NULL") {
		date=new Date();
		arrayOfStrings1=new Array();
		arrayOfStrings1[0]=date.getFullYear();
		arrayOfStrings1[1]=date.getMonth();
		arrayOfStrings1[2]="01";
		date=new Date(arrayOfStrings1[0], arrayOfStrings1[1], 1);
	}
	else {
		aaa=data.split(" ");
		arrayOfStrings=aaa[0];
		arrayOfStrings1 = arrayOfStrings.split("/");
		arrayOfStrings1[1]--;
		arrayOfStrings1[0]--;
		arrayOfStrings1[0]++;
		date=new Date(arrayOfStrings1[0], arrayOfStrings1[1], 1);
	}

	var numero_giorni=days_in_month(arrayOfStrings1[1], arrayOfStrings1[0]);
	var wday=date.getDay();

	var start_col;

	if (calendar_window.opener.document.prenota.date_lang.value == "it") {
		if (wday) start_col=wday-1;
		else start_col=6;
		text=new Array("L", "M", "M", "G", "V", "S", "D");
		mesi=new Array("Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic");
		var titolo="Calendario";
	}
	else {
		start_col=wday;
		text=new Array("S", "M", "T", "W", "T", "F", "S");
		mesi=new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
		var titolo="Calendar";
	}

	calendar_window.document.writeln("<html><head><title>"+titolo+"</title>");
	
	calendar_window.document.writeln("<style>");
	calendar_window.document.writeln("body {font-size:70%;}");
	calendar_window.document.writeln("table {font-size:100%}");
	calendar_window.document.writeln("input {font-size:100%}");
	calendar_window.document.writeln("font-family:Tahoma,Arial,Helvetica,Sans-serif;");
  calendar_window.document.writeln("</style>");
	
	calendar_window.document.writeln("</head><body>");
	calendar_window.document.writeln("<script language=\"JavaScript\">");
	calendar_window.document.writeln("function calendar_exec(date_lang, input_view, input_true, anno, mese, giorno) {");
	calendar_window.document.writeln("	mese++;");
	calendar_window.document.writeln("	var data=input_true.value;");
	calendar_window.document.writeln("	aaa=data.split(\" \");");
	calendar_window.document.writeln("	if (aaa[1]) aaa[1]=(\" \" + aaa[1]);");
	calendar_window.document.writeln("	else aaa[1]=\"\";");
	calendar_window.document.writeln("	input_true.value=anno + \"/\" + mese + \"/\" + giorno + aaa[1];");
	calendar_window.document.writeln("");
	calendar_window.document.writeln("	if (mese < 10) mese_text=new String(\"0\" + mese);");
	calendar_window.document.writeln("	else mese_text=new String(mese);");
	calendar_window.document.writeln("	if (giorno < 10) giorno_text=new String(\"0\" + giorno);");
	calendar_window.document.writeln("	else giorno_text=new String(giorno);");
	calendar_window.document.writeln("");
	calendar_window.document.writeln("	if (date_lang.value == \"en\") {");
	calendar_window.document.writeln("		input_view.value=mese_text + \"/\" + giorno_text + \"/\" + anno;");
	calendar_window.document.writeln("	}");
	calendar_window.document.writeln("	else {");
	calendar_window.document.writeln("		input_view.value=giorno_text + \"/\" + mese_text + \"/\" + anno;");
	calendar_window.document.writeln("	}");
	calendar_window.document.writeln("	window.close()");
	calendar_window.document.writeln("}");
	calendar_window.document.writeln("</scr" + "ipt>");

	calendar_window.document.write("<table border=\"0\" width=\"100%\">");
	calendar_window.document.write("<tr>");

	calendar_window.document.write("<td align=center nowrap><a href=\"javascript:window.opener.show_calendar(self, '" + (arrayOfStrings1[0]-1) + "/" + (arrayOfStrings1[1]+1) + "/" + arrayOfStrings1[2] + "', '"+nome_campo+"');\">&lt;&lt;</a></td>");

	if (arrayOfStrings1[1]) calendar_window.document.write("<td align=center nowrap><a href=\"javascript:window.opener.show_calendar(self, '" + (arrayOfStrings1[0]) + "/" + (arrayOfStrings1[1]) + "/" + arrayOfStrings1[2] + "', '"+nome_campo+"');\">&lt;</a></td>");
	else calendar_window.document.write("<td align=center nowrap><a href=\"javascript:window.opener.show_calendar(self, '" + (arrayOfStrings1[0]-1) + "/" + "12" + "/" + arrayOfStrings1[2] + "', '"+nome_campo+"');\">&lt;</a></td>");

	calendar_window.document.write("<td align=center nowrap colspan=3>" + mesi[arrayOfStrings1[1]] + " " + arrayOfStrings1[0] + "</td>");

	if (arrayOfStrings1[1]<11) calendar_window.document.write("<td align=center nowrap><a href=\"javascript:window.opener.show_calendar(self, '" + (arrayOfStrings1[0]) + "/" + (arrayOfStrings1[1]+2) + "/" + arrayOfStrings1[2] + "', '"+nome_campo+"');\">&gt;</a></td>");
	else calendar_window.document.write("<td align=center nowrap><a href=\"javascript:window.opener.show_calendar(self, '" + (Number(arrayOfStrings1[0])+1) + "/" + "1" + "/" + arrayOfStrings1[2] + "', '"+nome_campo+"');\">&gt;</a></td>");

	calendar_window.document.write("<td align=center nowrap><a href=\"javascript:window.opener.show_calendar(self, '" + (arrayOfStrings1[0]+1) + "/" + (arrayOfStrings1[1]+1) + "/" + arrayOfStrings1[2] + "', '"+nome_campo+"');\">&gt;&gt;</a></td>");

	calendar_window.document.write("</tr>");
	calendar_window.document.write("<tr>");
	for (var i=0; i<7; i++) {
			if ((i==6 && calendar_window.opener.document.prenota.date_lang.value != "en") ||
				 (i==0 && calendar_window.opener.document.prenota.date_lang.value == "en") ) {
				 calendar_window.document.write("<td bgcolor='#FFEEEE' align=center nowrap>" + text[i] + "</td>");
			}
			else {calendar_window.document.write("<td bgcolor='#FFEEEE' align=center nowrap>" + text[i] + "</td>");}
	}
	calendar_window.document.write("</tr>");

	var giorno=0;
	var num_rows = 1 + Math.ceil((numero_giorni-(7-start_col))/7);
	
	var pos=nome_campo.indexOf("[");
	if (pos!=-1) {
		var real_name=nome_campo.substr(0,pos);
		var arr_num=nome_campo.substr(pos);
	}
	else {
		var real_name=nome_campo;
		var arr_num="";
	}

	var Pasquetta=calcolaPasquetta(arrayOfStrings1[0]);
	for (i=0; i<num_rows; i++) {
		calendar_window.document.write("<tr>");
		for (j=0; j<7; j++) {
			if ((i || j>=start_col) && giorno<numero_giorni) {
				giorno++;
				// CALCOLO SABATO/DOMENICA E FESTIVI //
				if ((j==6 && calendar_window.opener.document.prenota.date_lang.value != "en") ||
				 (j==0 && calendar_window.opener.document.prenota.date_lang.value == "en") ||
				 ( (arrayOfStrings1[1]=='0' && (giorno=='01' || giorno=='06')) ||
				 (arrayOfStrings1[1]=='3' && giorno=='25') ||
				 (arrayOfStrings1[1]=='4' && giorno=='01') ||
				 (arrayOfStrings1[1]=='5' && giorno=='02') ||
				 (arrayOfStrings1[1]=='7' && giorno=='15') ||
				 (arrayOfStrings1[1]=='10' && giorno=='01') ||
				 (arrayOfStrings1[1]=='11' && (giorno=='08' || giorno=='25' || giorno=='26') ||
				 (arrayOfStrings1[1]==Pasquetta[1] && giorno==Pasquetta[0]) )
				 && calendar_window.opener.document.prenota.date_lang.value == "it") ) {
					 calendar_window.document.write("\n<td bgcolor='#FF9999' align=center nowrap>");
				}
				else {calendar_window.document.write("\n<td bgcolor='#F0F0F0' align=center nowrap>");
				}
				calendar_window.document.write("<a href=\"javascript:calendar_exec(window.opener.document.prenota.date_lang, window.opener.document.prenota.elements('" + real_name + "" + arr_num +"'), window.opener.document.prenota.elements('" + real_name + "_hidden" + arr_num +"'), " + arrayOfStrings1[0] + "," + arrayOfStrings1[1] + "," + giorno + ");\">" + giorno + "</td>");
			}
			else {
				calendar_window.document.write("\n<td align=center nowrap>&nbsp;</td>");
			}
		}
		calendar_window.document.write("</tr>\n");
	}

	calendar_window.document.write("</table>");
	calendar_window.document.write("</body></html>");
	calendar_window.focus();
}

function time_change(data, hours, minutes, seconds) {
	aaa=data.value.split(" ");
	if (aaa[0]) aaa[0]=(aaa[0] + " ");
	else aaa[0]="";

	if (hours < 10) hours_text=new String("0" + hours);
	else hours_text=new String(hours);
	if (minutes < 10) minutes_text=new String("0" + minutes);
	else minutes_text=new String(minutes);
	if (seconds < 10) seconds_text=new String("0" + seconds);
	else seconds_text=new String(seconds);

	data.value=aaa[0] + hours_text + ":" + minutes_text + ":" + seconds_text;
}

function IntDiv (num, dvsr) {
   var negate = false;
   var result = 0;

   if (dvsr == 0)
      return null;
   else
	{
    if (num * dvsr < 0 )
       negate = true;
    if (num < 0)
       num = -num;
    if (dvsr < 0)
       dvsr = -dvsr;
    result = ((num - (num % dvsr)) / dvsr);
    if (negate)
       return -result;
    else
       return result;
   }
}

function calcolaPasqua(year, ortodossa) {
	// IL FILE calcolaPasqua INCLUDE ANCHE IL CALCOLO PER GLI ANNI DAL 326 //

	year = parseInt(year, 10);
	if (isNaN(year))
	year = 0;
	 
	if ((year < 1583) || (year > 4099))	{
		alert("scegli un anno fra il 1583 e il 4099");
	}
	
	if ((year >= 1583) && (year <= 4099))	{      
		
		var wDay;
		var oDay;
		
		wDay = parseInt(wDay, 10);
		if (isNaN(wDay))
			wDay = 0;
		
		oDay = parseInt(oDay, 10);
		if (isNaN(oDay))
			oDay = 0;

		var g;
		var i;
		var j;
		var p;
		
		   g = year % 19;
		   i = (19 * g + 15) % 30;
		   j = (year + IntDiv(year, 4) + i) % 7;
		   p = i - j + 28;
		
		var a;
		var c;
		var h;
		var b;
		var d;
		var q;
		
	   a = year % 19;
	   c = IntDiv(year, 100);
	   h = (c - IntDiv(c, 4) - IntDiv(8 * c + 13, 25) + 19 * a + 15) % 30;
	   b = h - IntDiv(h, 28) * (1 - IntDiv(h, 28)
	      * IntDiv(29, h + 1) * IntDiv(21 - a, 11));
	   d = (year + IntDiv(year, 4) + b + 2 - c + IntDiv(c, 4)) % 7;
	   q = b - d + 28;
		
		var extra;
		
		if ((year > 1582) && (year <= 1600))	{
			extra = 10;
		}
		
		var tmp;
		
		if (year > 1600) {
			tmp = IntDiv(year, 100) - 16;
			extra = 10 + tmp - IntDiv(tmp, 4);
		}
		
		oDay = p + extra;
		
		if (q <= 31)	{
			wDay = q;
			if (!ortodossa)
				return(new Array(wDay,2));
		}
		if (q > 31)		{
			wDay = q - 31;
			if (!ortodossa)
				return(new Array(wDay,3));
		}
		
		if (oDay <= 31)		{
			if (ortodossa)
				return(new Array(oDay,2));
		}
		
		var r;
		r = oDay - 31;
		
		if ((oDay > 31) && (oDay <= 61)) 		{
			if (ortodossa)
				return(new Array(r,3));
		}
		
		var s;
		s = oDay - 61;
		
		if (oDay > 61)		{
			if (!ortodossa)
				return(new Array(s,4));
		}
		
	}
}

function calcolaPasquetta(year) {
	Pasqua=calcolaPasqua(year,0);
	if (Pasqua[0]==31 && Pasqua[1]==2)
		return new Array("01",3);
	else
		return new Array(Pasqua[0]+1,Pasqua[1]);
}


