/////////////////////////////////////////////////////////////////////////////////
//Check delle date nel formato  GG/MM/AAAA ** OK spostata sopra
function checkDateGGMMAAAA( dte )
{
    var giorniPerMese = [31,28,31,30,31,30,31,31,30,31,30,31];
    if (dte.length != 10) return false;
    giorno = dte.slice(0, 2);
    c = dte.slice(2, 3);
    mese = dte.slice(3, 5);
    e = dte.slice(5, 6);
    anno = dte.slice(6, 10);
    if (mese <1 || mese>12 || c != '/' || e != '/') return false;
    if (isNaN(giorno) || isNaN(mese) || isNaN(anno)) return false;
    if (giorno < 1 || giorno > (( mese==2 && isBisestile(anno))?29:giorniPerMese[mese - 1])) return false;
    return true;
}
/////////////////////////////////////////////////////////////////////////////////
//Check delle date nel formato  MM/GG/AAAA ** OK spostata sopra
function checkDateMMGGAAAA( dte )
{
    var giorniPerMese = [31,28,31,30,31,30,31,31,30,31,30,31];
    if (dte.length != 10) return false;
    giorno = dte.slice(3, 5);
    c = dte.slice(2, 3);
    mese = dte.slice(0, 2);
    e = dte.slice(5, 6);
    anno = dte.slice(6, 10);
    if (mese <1 || mese>12 || c != '/' || e != '/') return false;
    if (isNaN(giorno) || isNaN(mese) || isNaN(anno)) return false;
    if (giorno < 1 || giorno > (( mese==2 && isBisestile(anno))?29:giorniPerMese[mese - 1])) return false;
    return true;
}
/////////////////////////////////////////////////////////////////////////////////
//Check delle date nel formato  MM/AA ** OK spostata sopra
function checkDateMMAA( dte ) 
{
    if (dte.length != 5) return false;
    mese = dte.slice(0, 2);
    c = dte.slice(2, 3);
    anno = eval(dte.slice(3, 5)) + 2000;
    if (mese <1 || mese>12 || c != '/' ) return false;
    return true;
}
/////////////////////////////////////////////////////////////////////////////////
//Check delle date nel formato  MM/AAAA ** OK spostata sopra
function checkDateMMAAAA( dte )
{
    if (dte.charAt(0) == '/') return false;
	if (dte.charAt(1) == '/') return false;
	if (dte.charAt(3) == '/') return false;
	if (dte.charAt(4) == '/') return false;
	if (dte.charAt(5) == '/') return false;
	if (dte.charAt(6) == '/') return false;
	
	if (dte.charAt(2) != '/') return false;
	
	if (dte.length != 7) return false;
    mese = dte.slice(0, 2);
    c = dte.slice(2, 3);
    anno = eval(dte.slice(3, 5)) + 2000;
    if (mese <1 || mese>12 || c != '/' ) return false;
	
    return true;
}
////////////////////////////////////////////////////////////////////////////
// Controlla che i caratteri siano solo numerici
function checkCharachters(d)
{
	var valore;
//	if(state.toUpperCase()==codIng)
//		valore = /^(0[1-9]|1[012])\/(3[01]|0[1-9]|[12]\d)\/\d{4}/;	
//	else
		valore = /^(3[01]|0[1-9]|[12]\d)\/(0[1-9]|1[012])\/\d{4}/;
    	if (d.value != '')
	    	return (valore.test(d.value) == true);
	    else 
	    	return true;	      
}
/////////////////////////////////////////////////////////////////////////////////
//fa il check della data a fronte del formato che viene passato  ** OK spostata sopra
function checkDate( d, formato)
{
	
	if(!checkCharachters(d))
	{
		alert("Attenzione la data deve essere nel formato "+formato);
	        d.value="";
		d.focus();
	}
	else if (d.value != '')
	{
		if (formato=="gg/mm/aaaa")
		{
		    if (checkDateGGMMAAAA( d.value ) != true)
		  	{
		        alert("Attenzione la data deve essere nel formato "+formato);
		        d.value="";
			d.focus();
		    }
		}    
		else if (formato=="mm/gg/aaaa")
		{
		    if (checkDateMMGGAAAA( d.value ) != true)
		  	{
		        alert("Attenzione la data deve essere nel formato "+formato);
		        d.value=dataD;
			d.focus();
		    }	
		   
		}  
		else if (formato=="MM/AAAA")
		{
		    if (checkDateMMAAAA( d.value ) == true)
		    	return true
		    else
		    {
			    alert("Attenzione la data deve essere nel formato "+formato);
			    d.value='';
			    d.focus();
		    }
		    
		    
		    
		}
		else if (formato=="GG/MM/AA")
		{
		    return checkDateGGMMAA( d )?(true):(alert(alertFormato+" \n\n"+alertGGMMAAAA));    
		}
		else if (formato=="MM/AA")
		{
		    return checkDateMMAA( d )?(true):(alert(alertFormato+" \n\nMM/AA"));    
		}
		else 
		{
		    alert(alertNonValida);
		} 
	}	  
}



/******************************************************************************
 Function   :    		                                          			  
 Description:    funzioni per il controllo delle date						  
 Arguments  :    e                                   					      
 Returns    :                                                               
 Commenti   :    esempio di richiamo:  									  
 				   onBlur="checkDate(this, 'GG/MM/AAAA');" 					  
 				   onKeyPress="maskDate(this.value, event);"		          
 ******************************************************************************/
/////////////////////////////////////////////////////////////////////////////////
//Check se anno bisestile  MM/AAAA ** OK spostata sopra
function isBisestile(anno)
{      
      return ((anno%100==0)?(anno%400==0):(anno%4 ==0));
}
//////////////////////////////////////////////////////////////////////////////////
//Check delle date nel formato  GG/MM/AA ** OK spostata sopra
function checkDateGGMMAA( dte ) 
{
    var giorniPerMese = [31,28,31,30,31,30,31,31,30,31,30,31];
    if (dte.length != 8) return false;
    giorno = dte.slice(0, 2);
    c = dte.slice(2, 3);
    mese = dte.slice(3, 5);
    e = dte.slice(5, 6);
    anno = eval(dte.slice(6, 8)) + 2000;        
    if (mese <1 || mese>12 || c != '/' || e != '/') return false;
    if (giorno < 1 || giorno > (( mese==2 && isBisestile(anno))?29:giorniPerMese[mese - 1])) return false;
    return true;
}

function formatDate(data,formatoIniziale,formatoFinale){
	/*	FORMATI GESTITI
		"gg/mm/aaaa";"ggmmaaaa";"mm/gg/aaaa";"mmggaaaa";
		"aaaammgg";"aaaa/mm/gg";"gg/mm/aaaa";
	*/
	var gg;
	var mm;
	var aaaa;
	//alert(data)
	//splitto la data
	switch(formatoIniziale){
		case "gg/mm/aaaa":
			gg = data.substr(0, 2);		
			mm = data.substr(3, 2);		
			aaaa=data.substr(6, 4);		
			break;
		case "ggmmaaaa":
			gg = data.substr(0, 2);		
			mm = data.substr(2, 2);		
			aaaa=data.substr(4, 4);		
			break;
		case "mm/gg/aaaa":
			mm = data.substr(0, 2);		
			gg = data.substr(3, 2);		
			aaaa=data.substr(6, 4);		
			break;
		case "mmggaaaa":
			mm = data.substr(0, 2);		
			gg = data.substr(2, 2);		
			aaaa=data.substr(4, 4);		
			break;
		case "aaaa/mm/gg":
			aaaa=data.substr(0, 4);		
			mm = data.substr(5, 2);		
			gg = data.substr(8, 2);		
			break;
		case "aaaammgg":
			aaaa=data.substr(0, 4);		
			mm = data.substr(4, 2);		
			gg = data.substr(6, 2);		
			break;
	}
	
	// concateno la stringa in base al formato
	switch(formatoFinale){
		case "gg/mm/aaaa":
			return gg+"/"+mm+"/"+aaaa;
		case "ggmmaaaa":
			return gg+mm+aaaa;
		case "mm/gg/aaaa":
			return mm+"/"+gg+"/"+aaaa;
		case "mmggaaaa":
			return mm+gg+aaaa;
		case "aaaa/mm/gg":
			return aaaa+"/"+mm+"/"+gg;
		case "aaaammgg":
			return aaaa+mm+gg;
	}
}
function dateDif(DataA, DataB)
{
/*******************************************************************************************
Funzione:      fDataDiff(DataA, DataB)
Descrizione:   Restituisce la differenza (in giorni) tra le due date inserite
Parametri:     str_DataA		= data A nel formato aaaammgg
			   str_DataB		= data B nel formato aaaammgg
Ritorno:       numero giorni di differenza (str_DataA - str_DataB)
Modificata:    06/07/2001
********************************************************************************************/
	str_DataA = formatDate(DataA,"gg/mm/aaaa", "aaaammgg");
	str_DataB = formatDate(DataB,"gg/mm/aaaa", "aaaammgg")
	var int_MsGiorno=86400000;	// millisecondi in un giorno
	var int_AnnoA, int_MeseA, int_GiornoA;
	var int_AnnoB, int_MeseB, int_GiornoB;
	var int_Return;
	
	int_AnnoA = str_DataA.substr(0, 4);
	int_MeseA = str_DataA.substr(4, 2)-1;
	int_GiornoA = str_DataA.substr(6, 2);
	
	int_AnnoB = str_DataB.substr(0, 4);
	int_MeseB = str_DataB.substr(4, 2)-1;
	int_GiornoB = str_DataB.substr(6, 2);

	int_Return = Date.UTC(int_AnnoB, int_MeseB, int_GiornoB)-
		     Date.UTC(int_AnnoA, int_MeseA, int_GiornoA);
		
	int_Return /= int_MsGiorno;
	//days.value = int_Return;
	return int_Return;
}
function dateAdd(dataAAAAMMGG,intervallo,numero)
{
/* 
funzione che accetta date in formato AAAAMMGG e puņ sommare mesi giorni o anni
rispettivamente gli intervalli sono M,G,A
ritorna una data formato AAAAMMGG
*/
	var anno,mese,giorno;
	mesi=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	sommaMesi=0;
	
	anno = dataAAAAMMGG.substr(0, 4);
	//mese = eval(dataAAAAMMGG.substr(4, 2))-1;
	mese = eval(dataAAAAMMGG.substr(4, 2))-1;
	giorno = dataAAAAMMGG.substr(6, 2);
	
	if ((anno%100==0)?(anno%400==0):(anno%4==0))
	{
		mesi[1]=29;
	}
	
	switch (intervallo.toUpperCase()){
		case "G":
			intervallo=86400000*numero;
			var millDate = Date.UTC(anno,mese,giorno);
			var objDate = new Date(millDate+intervallo);
			anno=objDate.getUTCFullYear().toString();
			mese=eval(eval(objDate.getUTCMonth())+1).toString();
			giorno=objDate.getUTCDate().toString();
			break;
		case "M":
			sommaMesi = mese+numero+1;
			while (sommaMesi>12)
			{
				anno++;
				sommaMesi-=12;
			}
			//alert(mesi[mese]);
			//alert(mesi[sommaMesi-1]);
			//alert(eval(giorno));
			if((mesi[mese]>mesi[sommaMesi-1]) && (eval(giorno)>mesi[sommaMesi-1]))
			{
				giorno = mesi[sommaMesi-1];
			}
			
			if (((anno%100==0)?(anno%400==0):(anno%4==0))||mese==1||giorno==29)
			{
				giorno=28;
			}
			mese=sommaMesi;
			break;
		case "A":
			anno = eval(anno) + eval(numero);
			if (((anno%100==0)?(anno%400==0):(anno%4==0))||mese==1||giorno==29)
			{
				giorno=28;
			}
			mese++;
			break;
		default: 
			alert("inserito intervallo sconosciuto");
	}

	mese=mese.toString();
	mese=(mese.length==1)?"0"+mese.toString():mese.toString();
	giorno=(giorno.length==1)?"0"+giorno:giorno;
	return anno.toString()+mese.toString()+giorno.toString()
		
}
//Gli passo mese/anno e mi ritorna ultimo giorno di quel mese/mese/anno
function getDays(dataMMAAAA)
{
	var anno,mese,dataRitornata;
	var mesi = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	var inserted = new Array ("01","02","03","04","05","06","07","08","09","10","11","12");
	anno = dataMMAAAA.substr(4);
	mese = dataMMAAAA.substr(0, 2);
	if ((anno%100==0)?(anno%400==0):(anno%4==0))
	{
		mesi[1]=29;
	}
	
	for (i=0; i<mesi.length; i++)
	{
		if (mese == inserted[i])
		{
			dataRitornata = mesi[i]+"/"+dataMMAAAA;
			//alert(dataRitornata)
			break;
		}
	}
	return dataRitornata;
}	


function getGiorno(data)
{
	var gg;
	var mm;
	var aaaa;
	gg = data.substr(0, 2);		
	mm = eval(data.substr(3, 2)-1);		
	aaaa=data.substr(6, 4);
	dateVar = new Date(aaaa, mm, gg)
	//alert(dateVar)
	return dateVar.getDay();

}