/*
**********************************************************************************
*                                                                                *
*                        FUNZIONI PER IL MINI CALENDARIO                         *
*                                                                                *
**********************************************************************************
*/

/* 
************************************
*                                  *
*          CONFIGURAZIONI          *
*                                  *
************************************
*/
var imgPath = '../layout/'; // Path immagini calendario
var calData = new Date();


/* 
************************************
*                                  *
*             FUNZIONI             *
*                                  *
************************************
*/
	
function chiudiCal(nomeDiv) {
	var cl = document.getElementById([nomeDiv]);
	cl.style.display='none';
}

function inserisciData(nomeCampo,gg,mm,aaaa) {

	var nomeDiv = "dv_" + nomeCampo;
	
	var campoPadre = document.getElementById(['txt_' + nomeCampo]);
	var cl = document.getElementById([nomeDiv]);
	
	if(gg < 10) gg = '0' + gg;
	if(mm < 10) mm = '0' + mm;

	campoPadre.value = gg + "/" + mm + "/" +aaaa;	
	cl.style.display='none';	
}

function formattaData(valGiorno, valMese, valAnno){

	//Scalo il mese di 1 perchè l'array dei mesi parte da 0
	//valMese = parseFloat(valMese)-1;

	if(valMese > 11) {
		valMese = 0;
		valAnno = parseFloat(valAnno)+1;
	}
	
	if(valMese < 0) {
		valMese = 11;
		valAnno = parseFloat(valAnno)-1;
	}
	
	if(valMese < 10) valMese = 0 + "" + valMese;

	if(valGiorno < 10) valGiorno = 0 + "" + valGiorno;

	return(valGiorno + "/" + valMese + "/" + valAnno);
}	


function apriCal(element, nomeCampo, dataInput, cord_x, cord_y) {

	var calStr = '' ;


	var nomeDiv = "dv_" + nomeCampo;
	var campoPadre = document.getElementById(['txt_' + nomeCampo]);
	var cl = document.getElementById([nomeDiv]);

	// ********* posizione calendario *********
	if(cord_x == '' || cord_y == '') {
		var coords = {x: 0, y: 0};
		while (element) {
			coords.x += element.offsetLeft;
			coords.y += element.offsetTop;
			element = element.offsetParent;
		}
		posX = coords.x;
		posY = coords.y+12;	
	}
	else {
		posX = eval(cord_x);
		posY = eval(cord_y);	
	}
	// ****************************************


	//Creo un array che contiene i 42 giorni (7 colonne * 6 righe) possibili di un mese
	var ArrCalendario = new Array(42);

	var ArrSettimana, NumRighe, NumColonne, PrimoGiorno, NumGiorniMese;
	var ContaColonne;

	var ArrMesi = ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'];
	var giorniMese = [31,28,31,30,31,30,31,31,30,31,30,31];
	var giorniSettimana = ['Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'];

	var Giorno, Mese, Anno, dataPrec, dataProx, dataAtt;
	var strGiorno, strMese, strAnno;	
	var strData = "";

	if(dataInput == "") {
		dataInput = campoPadre.value;
	}
	
	strData = dataInput;
	
	if(strData == "") {
		strAnno = calData.getYear();
		strMese = calData.getMonth();
		strGiorno = calData.getDate();
		
		dataAtt = formattaData(strGiorno, (strMese), strAnno);
		dataPrec = formattaData(strGiorno, (strMese-1), strAnno);
		dataProx = formattaData(strGiorno, (strMese+1), strAnno);
	}
	else {
		strAnno = parseFloat(strData.substr(6,4));
		strMese = parseFloat(strData.substr(3,2));
		strGiorno = parseFloat(strData.substr(0,2));

		if(!strData == "") {
			dataAtt = formattaData(strGiorno, (strMese-1), strAnno);
			dataPrec = formattaData(strGiorno, (strMese-1), strAnno);
			dataProx = formattaData(strGiorno, (strMese+1), strAnno);
		}
		else {
			dataAtt = formattaData(strGiorno, (strMese), strAnno);
			dataPrec = formattaData(strGiorno, (strMese-1), strAnno);
			dataProx = formattaData(strGiorno, (strMese+1), strAnno);
		}
	}
	
	Anno = parseFloat(dataAtt.substr(6,4));
	Mese = parseFloat(dataAtt.substr(3,2));
	Giorno = parseFloat(dataAtt.substr(0,2));
	
	//Primo giorno del mese. 
	//Trovo qual'è il 1° giorno della settimana del mese "NumMese" dell'anno "NumAnno"
	PrimoGiorno = new Date(Anno,Mese,1);
	PrimoGiorno = PrimoGiorno.getDay()

	//Numero di giorni del mese corrente. 
	NumGiorniMese = giorniMese[Mese];

	//Numero di righe necessarie alla tabella per il mese corrente (al max sono 6)
	NumRighe = (6 - Math.floor((42-(PrimoGiorno + NumGiorniMese))/7));

	//Numero di Colonne della tabella. Questo numero è fisso
	NumColonne = 7

	/*
	var stringa = "";
	stringa = stringa + Giorno + "." + Mese + "." + Anno + "\n\n";
	stringa = stringa + "Nome campo imput: " + campoPadre + "\nId immagine: " + nomeCampo + "\nNome div: " + nomeDiv + "\n";
	stringa = stringa + "Oggi è il " + Giorno + " del mese di " + ArrMesi[Mese] + " (n° " + Mese + ") dell'anno " + Anno + "\n";
	stringa = stringa + "Il primo giorno del mese viene di " + giorniSettimana[PrimoGiorno] + " (n° " + PrimoGiorno + ")\n";
	stringa = stringa + "Questo mese ha " + NumGiorniMese + " giorni, pertanto necessita di " + NumRighe + " righe\n";
	//alert(stringa);
	*/
	
	//Un calendario dispone al massimo di 42 celle (7 colonne x 6 righe)
	//Creo il numero di celle necessarie al mese da visualizzare
	
	var strClasse = "";
	
	for(var iLoop = 1; iLoop < NumGiorniMese+1; iLoop++) {
		ArrCalendario[iLoop + parseFloat(PrimoGiorno)] = iLoop
	}
	
	calStr = calStr + '<div>'
	calStr = calStr + '<div onclick=chiudiCal("' + nomeDiv + '") style="cursor:hand">chiudi&nbsp;<img src="' + imgPath + 'mini_cal_02.gif" width="18" height="11" alt="chiudi" onclick=chiudiCal("' + nomeDiv + '") style="cursor:hand"></div>'
	calStr = calStr + '<table class="minical">'
	
	calStr = calStr + '<caption class="minicalcaption">'
	calStr = calStr + '<img src="' + imgPath + 'icons/2arrow_l.gif" onclick=apriCal(this,"' + nomeCampo + '","' + dataPrec + '","' + posX + '","' + posY + '") border="0" class="imgMid">'
	calStr = calStr + '&nbsp; &nbsp;' + ArrMesi[parseFloat(Mese)] + ' ' + Anno + '&nbsp; &nbsp;'
	calStr = calStr + '<img src="' + imgPath + 'icons/2arrow_r.gif" onclick=apriCal(this,"' + nomeCampo + '","' + dataProx + '","' + posX + '","' + posY + '") border="0" class="imgMid">'
	calStr = calStr + '</caption>'
	
	calStr = calStr + '<tr>'

	for(i=0; i<giorniSettimana.length; i++) {
		calStr = calStr + '<th class="minicalth" scope="col" abbr="' + giorniSettimana[i] + '" title="' + giorniSettimana[i] + '">' + giorniSettimana[i].substr(0,2) + '</th>'
	}
	calStr = calStr + '</tr>'


	for(var ContaRighe = 1; ContaRighe <NumRighe+1; ContaRighe++){ //Creo il numero di righe necessarie al mese corrente
		calStr = calStr + '<tr>'
		for(var ContaColonne = 1; ContaColonne < NumColonne+1; ContaColonne ++) { //Creo le 7 colonne
			if(ArrCalendario[(ContaRighe-1)*7 + ContaColonne] > 0) { //Scrivo la data 
				if (parseInt(ArrCalendario[(ContaRighe-1)*7 + ContaColonne]) == parseFloat(Giorno)) { //Evidenzio il giorno attuale
					ContaColonne == 1 ? strClasse = "todayRosso" : strClasse = "today"; //Se è domenica la scrivo in rosso
					calStr = calStr + '<td class="' + strClasse + '"><div onclick=inserisciData("' + nomeCampo + '",' + ArrCalendario[(ContaRighe-1)*7 + ContaColonne] + ',' + parseInt(Mese+1) + ',' + Anno + ') style="cursor:hand">' + ArrCalendario[(ContaRighe-1)*7 + ContaColonne] + '</div></td>'
				}
				else { // Non è il giorno attuale
					ContaColonne == 1 ? strClasse = "dataRossa" : strClasse = ""; //Se è domenica la scrivo in rosso
					calStr = calStr + '<td class="' + strClasse + '"><div onclick=inserisciData("' + nomeCampo + '",' + ArrCalendario[(ContaRighe-1)*7 + ContaColonne] + ',' + parseInt(Mese+1) + ',' + Anno + ') style="cursor:hand">' + ArrCalendario[(ContaRighe-1)*7 + ContaColonne] + '</div></td>'
				}
			}
			else{ //Cella vuota
				calStr = calStr + '<td>&nbsp;</td>'
			}
		}
		calStr = calStr + '</tr>'			
	}

	calStr = calStr + '</table>'
	calStr = calStr + '</div>'	

	cl.style.display='';
	
	//posizione del calendario
	cl.style.left=posX;
	cl.style.top=posY; 
	cl.innerHTML=calStr;
}
