var xwidth = 200; //220
var xheight = 180;
var browser = document.layers ? 0 : document.all ? 1 : 2;

// colori
var backtable = '#EEEEEE'; //sfondo tabella
var calendback = '#CCCCCC'; //sfondo celle giorni
var lines = '#233344'; //colore testo giorni
var bright = '#CC3333';  //giorno in cui siamo
var festa = '#999999'; //sfondo celle giorni festivi

// ------ Non cambiare ----------
var mesi = new Array('Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre');

var days = new Array('Lu', 'Ma', 'Me', 'Gi', 'Ve', 'Sa', 'Do');
var dd = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

var today = new Date();
var anno = today.getFullYear();
var mese = today.getMonth();
var currday = today.getDate();
var cellwidth = Math.floor(xwidth / 7);
xwidth = cellwidth * 7;
var isOn = false;
var source;
var last="";

function action(g, m , a)
{
	getId().showIt(false);

	
	if (""+source.length!="undefined")
	{
		if(""+source[0].tagName=="SELECT")
		{
			for(var i=0; i<source[0].length; i++)
				if(source[0][i].value==g)
					source[0][i].selected=true;
		}
		else
			source[0].value = format(g);
		if(""+source[1].tagName=="SELECT")
		{
			for(var i=0; i<source[1].length; i++)
				if(source[1][i].value==(m + 1))
					source[1][i].selected=true;
		}
		else
			source[1].value = format(m + 1);
		if(""+source[2].tagName=="SELECT")
		{
			for(var i=0; i<source[2].length; i++)
				if(source[2][i].value==a)
					source[2][i].selected=true;
		}
		else
			source[2].value = a;
	}
	else
		source.value = format(g) + '/' + format(m + 1) + '/' + a;
}

function format(x)
{
	return x > 9 ? x : "0" + x;
}

document.write('<style type="text/css">\n<!--');
document.write('.cal {font-family: Arial, Helvetica, sans-serif; font-size: 8pt; font-weight: bold; color: #233344 text-align: center}'); // colore testo mese
document.write('.num {font-family: Arial, Helvetica, sans-serif; font-size: 8pt; text-decoration:none; text-align: right}'); // colore numeri date
document.write('.mese {font-family: Arial, Helvetica, sans-serif; font-size: 8pt; font-weight: bold; color: #233344; text-align: center; padding: 0 0 0 0;}'); // colore testo nomi giorni
document.write('.butt {font-family: Arial, Helvetica, sans-serif; font-size: 9pt; font-weight: bold; color: #666666; text-align: center; vertical-align: middle; margin: 0px; padding: 0px;}'); // testo sotto il calendario
document.write('-->\n</style>');


function comparedate(d1, d2)
{
	if (d1.getFullYear() == d2.getFullYear() && d1.getMonth() == d2.getMonth() && d1.getDate() == d2.getDate()) 
		return true;
	return false;
}

function pasqua(aa)
{
	var xx = new Array(22, 22, 23, 23, 24, 24);
	var yy = new Array(2, 2, 3, 4, 5, 5);
	var a = aa % 19;
	var b = aa % 4;
	var c = aa % 7;

	var i = Math.floor(aa / 100) - 15;
	var x = xx[i], y = yy[i];
	var d = (19*a + x) % 30;
	var e = (2*b + 4*c + 6 * d + y) % 7;

	var p = 22 + d + e;

	var m = 300;
	if (p > 31) {
		m = 400;
		p = p - 31;
	}
	return m + p;
}


function isfesta(d)
{
	var feste = new Array(0, 101, 106, 425, 501, 602, 815, 1101, 1208, 1225, 1226);

	if (d.getDay() == 0)
		return true;

	var pp = pasqua(d.getFullYear()) + 1;     // Pasquetta
	if (pp % 100 > 31)
		pp = 401;

	feste[0] = pp;
	for (var i = 0; i < feste.length; i++)
	{
		if (Math.floor(feste[i] / 100) == d.getMonth() + 1)
		{
			var gg = feste[i] % 100;
			if (gg == d.getDate())
			return true;
		}
	}

	return false;
}


function calendar(currday, mese, anno)
{
	var dx = 2 - (new Date(anno, mese, 1)).getDay();
	if (dx == 2)
		dx = -5;
	var daysInMonth = dd[mese];

	if (mese == 1)
	{
		if (anno % 4 == 0 && anno % 100 != 0  || anno % 400 == 0)
			daysInMonth++
	}

	var tx = '<div class="mese">' + mesi[mese] + ' ' + anno +'</div>\n';
	tx += '<table class="mese" border="1" width="' + xwidth + '" cellspacing="0" cellpadding="0">\n';
	tx += '<tr align="center">\n';

	for (var i = 0; i < 7; i++)
		tx += '<td class="mese" width="' + cellwidth+ '" >' + days[i] + '</td>\n';

	tx += '</tr>\n';
	for (var j = 0; j < 6; j++)
	{
		tx += '<tr bgcolor="' + calendback + '" align="right">\n';
		for (var i = 0; i < 7; i++)
		{
			var bgstring = "";
			var fgcol = lines;
			var fgstring = '&nbsp;';

			if (dx > 0 && dx <= daysInMonth)
			{
				fgstring = dx;
				var ddx = new Date(anno, mese, dx);
				if (isfesta(ddx))
				{
					bgstring = ' bgcolor="' + festa 
					+ '"';
				}
				if (comparedate(ddx, today))
				{
					fgcol = bright;
					fgstring = '<b><u>' + dx + '</u></b>\n';
				}
				var tempdate = ddx.getDate() + ", " + ddx.getMonth() + ", " + ddx.getFullYear();
				fgstring = '<a href="javascript:action(' + tempdate + ')" class = "num"><font color="' + fgcol + '">' + fgstring + '</font></a>\n';
			}
			 tx += '<td width="' + cellwidth + '" class="num"' + bgstring + '>\n';
			 tx += fgstring;
			 tx += '</td>\n';
			 dx++;
		}
		tx += '</tr>\n';
	}
	tx += '</table>\n';

	return tx;
}


function dataframe(x) {
   var s = '<table  class="mese" border="1" width="' + xwidth + '" cellspacing="0" cellpadding="0" bgcolor="'  + backtable + '">';
   s += '<tr>\n<td class="mese">';

   s += x; // calendar(currday, mese, anno);
   
   s += '</td></tr><tr>';
s += '<td><form class="butt"><table width="100%" border="0" cellspacing="0" cellpadding="2">';
   s += '<tr>';
   s += '<td class="butt"><input type="image" name="prev" src="../Immagini/freccia_ind.gif" value="  " class="butt" onclick="altro_mese(-1); return false;">M';
   s += '<input type="image" name="next" src="../Immagini/freccia_av.gif" value="" class="butt" onclick="altro_mese(1); return false;"></td>';
   s += '<td class="butt" ><input type="image" name="prev" src="../Immagini/freccia_ind.gif" value="  " class="butt" onclick="altro_anno(-1); return false;">A';
   s += '<input type="image" name="next" src="../Immagini/freccia_av.gif" value="" class="butt" onclick="altro_anno(1); return false;"></td>';
s += '</tr></form></table>';

   s += '</td>\n</tr>\n</table>';
   return s;
}


function altro_mese(x)
{
	mese = mese + x;

	if(mese<0)
	{
		mese = 11;
		anno = anno-1;
	}

	if(mese>11)
	{
		mese = 0;
		anno = anno+1;
	}

	var s = dataframe(calendar(currday, mese, anno));

	//var s = dataframe(calendar(xday, mm, aa + aa + Math.floor((anno + xanno) / 1)));
	writeLayer(s);
}

function altro_anno(y)
{
	anno += y;
	var s = dataframe(calendar(currday, mese, anno));
	writeLayer(s);
}

function getId()
{
	switch (browser)
	{
		case 0:
			return document.layers.calframe;
		case 1:
			return eval('calframe');
		case 2:
			return document.getElementById("calframe");
	}
}

function moveLayer(xPos, yPos)
{
	switch(browser)
	{
		case 0:
			this.left = xPos;
			this.top = yPos;
			break;
		case 1:
			this.style.pixelLeft = xPos;
			this.style.pixelTop = yPos;
			break;
		case 2:
			this.style.left = xPos+"px";
			this.style.top = yPos+"px";
	}
}

function createlayer()
{
	var s;
	if (document.layers)
		s = '<layer id="calframe" visibility="hide" z-index="1"></layer>';
	else
		s = '<div id="calframe" style="position: absolute; width:220px; height:115px; visibility: hide; top:-200px;"></div>'; 
	document.writeln(s);
}

function showIt(on)
{
	isOn = on;
	if (browser)
		this.style.visibility = (on) ? "visible" : "hidden";  
	else
		this.visibility = (on) ? "show" : "hidden";
	if(isOn)
	{
		if (""+source.length!="undefined")
			last=""+source[0].name;
		else
			last=""+source.name;
	}
	else
		last="";
}

function writeLayer(s)
{
	var id = getId();
	if (browser)
		id.innerHTML = s;
	else
	{
		id.document.open();
		id.document.write(s);
		id.document.close();
	}
}

function init()
{
	var id = getId();
	id.moveLayer = moveLayer;
	id.showIt = showIt;
	id.showIt(false);
}

function ChooseDate(val, xPos, yPos)	//chiama la funzione principale
{
	var dt = new Array();
	source = val;
	if (""+source.length!="undefined")
	{
		if(""+val[0].tagName=="SELECT")
			dt[0] = val[0][val[0].selectedIndex].value;
		else
			dt[0] = val[0].value;
		if(""+val[1].tagName=="SELECT")
			dt[1] = val[1][val[1].selectedIndex].value;
		else
			dt[1] = val[1].value;
		if(""+val[2].tagName=="SELECT")
			dt[2] = val[2][val[2].selectedIndex].value;
		else
			dt[2] = val[2].value;
	}
	else
		dt = val.value.split('/');

	showCalendar(((""+dt[2]!="" && ""+dt[1]!="" && ""+dt[0]!="")?new Date(dt[2],dt[1]-1,dt[0]):today), xPos, yPos);
}

function showCalendar(d, xpos, ypos) // è la funzione principale. Devono essere passati: la data corrente, la coordinata x e quella y dove deve apparire la finestra
{
	if(!isOn || ((""+source.length!="undefined" && last!=source[0].name) || (""+source.length=="undefined" && last!=source.name)))
	{
		if (d)
		{
			anno = d.getFullYear();
			mese = d.getMonth();
			currday = d.getDate();
		}
		if (arguments.length > 2)
		{
			var id = getId();
			id.moveLayer(xpos, ypos);
		}
		else
			getId().moveLayer(100, 100);

		writeLayer(dataframe(calendar(currday, mese, anno)));
		
		getId().showIt(true);
	}
	else
		getId().showIt(false);
}

createlayer(1);
onload = init;

/*var el = document.getElementsByTagName('img');
for (var i=0; i<el.length; i++) {
  if (el[i].name == 'btcal')
	el[i].className = "calendaron";
}*/
