// FUNZIONI JAVASCRIOT PER IL CONTROLLO DELLE DATE

//--------------calcola il numero di giorni del mese passato----------------------
function FineMese(p_mese, p_anno)
	{
		var v_data;
		var v_gior
		p_mese-=1; //I mesi vanno da 0 a 11
		p_mese+=1; //Imposta il mese successivo
		if(p_mese>11)
			{
				p_mese=0;
				p_anno+=1;
			}
		v_data=new Date(p_anno, p_mese, 1);
		v_gior=1000*60*60*24; //valore numerico di un giorno
		v_data-=v_gior; //la data viene convertita automaticamente in millisecondi
		v_data=new Date(v_data); //riconverte il valore in formato data
		return v_data;
	}

//-------------vuole in input una stringa data--------------------
//-------------in output restituisce una stringa se la data è corretta altrimenti restituisce una stringa vuota------------
//--------Accetta i seguenti formati : 01012011 -----------------------------------
//--------------------------   	       010111 ---------------------------------
//--------------------------   	       01/01/2011 ---------------------------------
//---------------------------------	   1/1/2011   -----------------------------------
function is_date(a_data){

var valida=null;
var data=new Array();
var giorno,mese,anno;
if(isFinite(a_data) && (a_data.length==8 || a_data.length==6))
	 {	
		data[0]=a_data.substring(0,2);
		data[1]=a_data.substring(2,4);
		data[2]=a_data.substring(4);
		valida=true;
	 }
else {	
		if (a_data.indexOf("/")!=-1)
			data=a_data.split("/");
		else 
			data=a_data.split("-");
		if((data.length==3) &&
		  ( isFinite(data[0])) && 
		  ( isFinite(data[1])) && 
		  ( isFinite(data[2])))
			{
			valida=true;
			}
		else {
			valida=false;
			 }
	  }

if(valida)
	{
	giorno=parseInt(data[0],10);
	//il 10 vuol dire che voglio il risultato in base 10; di default è base 8
	mese=parseInt(data[1],10);
	anno=parseInt(data[2],10);
	if(data[0]< 10){ data[0]="0"+giorno;}
	if(data[1]< 10){ data[1]="0"+mese;}
	//se l'anno è stato digitato in due cifre aggiunge il secolo
	if(anno < 100)
		if(anno <= 35)
			anno+=2000;
		else
			anno+=1900;
	data[2]=anno;	
	if(mese<1 || mese>12 || anno<1900 || anno>2100) 
		valida=false;
	else {
		giorni_mese=FineMese(mese,anno);//calcolo il numero max di giorni del mese
		if (giorno<1 || giorno>giorni_mese.getDate())
				valida=false; 
		 }
	}
//ora formatto la data nel formato "gg/mm/aaaa" se è corretta
if(valida)
	aux=data[0]+"/"+data[1]+"/"+data[2];
else
	aux="";
return aux;
}


//-------------vuole in input una stringa ora--------------------
//-------------in output restituisce una stringa se l'ora è corretta altrimenti restituisce una stringa vuota------------
//--------Accetta i seguenti formati : 1230 -----------------------------------
//--------------------------   	       12:30 ---------------------------------
//--------------------------   	       12,30 ---------------------------------
//--------------------------   	       12 (1200) ---------------------------------
function is_time(a_time){

var valida=null;
var ora=new Array();
var ore,minuti;
if(isFinite(a_time) && (a_time.length==4 || a_time.length==2 || a_time.length==1))
	 {	
		ora[0]=a_time.substring(0,2);
		if(a_time.length<=2)
			ora[1]="00";
		else
		    ora[1]=a_time.substring(2);
		valida=true;
	 }
else {	
		if (a_time.indexOf(":")!=-1)
			ora=a_time.split(":");
		else 
			if (a_time.indexOf(",")!=-1)
				ora=a_time.split(",");
		if((ora.length==2) &&
		  ( isFinite(ora[0])) && 
		  ( isFinite(ora[1])))
			{
			valida=true;
			}
		else {
			valida=false;
			 }
	  }

if(valida)
	{
	ore=parseInt(ora[0],10);
	//il 10 vuol dire che voglio il risultato in base 10; di default è base 8
	minuti=parseInt(ora[1],10);
	if(ora[0]< 10){ ora[0]="0"+ore;}
	if(ora[1]< 10){ ora[1]="0"+minuti;}
	//se l'anno è stato digitato in due cifre aggiunge il secolo
	if(ore>23 || minuti>59) 
		valida=false;
	}
//ora formatto l'ora nel formato "hh:mm" se è corretta
if(valida)
	aux=ora[0]+":"+ora[1]
else 
	aux="";
return aux;
}



// -------------------------------------------------------------- //
// Funzione di validazione delle date
// Uso: isvalid_date(id del campo di input, 
//                   tag contenente la descrizione del campo)
// -------------------------------------------------------------- //
function isvalid_date(id,id_tag)
{
	a_data = this.document.getElementById(id).value;
	if(a_data=="") return;
	data = is_date(a_data);
	if (data!="") 
		 {	 
			this.document.getElementById(id).value=data;
		 }
	else {
			this.document.getElementById(id).value="";
			this.document.getElementById(id).focus();
			alert("Errore! Immettere la data nel formato (gg/mm/aaaa)");		
		 }
}
// -------------------------------------------------------------- //
// Funzione di validazione delle date
// Uso: isvalid_date(id del campo di input, 
//                   tag contenente la descrizione del campo)
// -------------------------------------------------------------- //
function isvalid_time(id,id_tag)
{
	a_time = this.document.getElementById(id).value;
	if(a_time=="") return;
	ora = is_time(a_time);
	if (ora!="") 
		 {	 
			this.document.getElementById(id).value=ora;
		 }
	else {
			this.document.getElementById(id).value="";
			this.document.getElementById(id).focus();
			alert("Errore! Immettere l'ora nel formato (hh:mm)");		
		 }
}

// -------------------------------------------------------------- //
// Funzione di validazione delle date per le form di ricerca
// -------------------------------------------------------------- //
function isvalid_query_date(id,id_tag)
{
	var s_data = this.document.getElementById(id).value;
	
	if(s_data=="") return;
	// ---------------------------------------------- //
	var togli="";
	for (i=0; i<s_data.length; i++){
		if (s_data.substring(i,i+1)==">" || 
		 	 s_data.substring(i,i+1)=="<" || 
		 	 s_data.substring(i,i+1)=="=")
		togli+=s_data.substring(i,i+1);
		}
	a_data=s_data.replace(togli,"");
	// ---------------------------------------------- //
	if (a_data.indexOf(":")!=-1){
		v_data=a_data.split(":",2);
		data1=is_date(v_data[0]);
		data2=is_date(v_data[1]);
		}
	else {
		data1=is_date(a_data);
		data2=" ";
		}
	// ---------------------------------------------- //
	if (data1=="" || data2=="") {	 
		this.document.getElementById(id).value=a_data;
		alert("Errore! Immettere la/le data/e nel formato (gg/mm/aaaa)");
		this.document.getElementById(id).focus();		
		 }
	else {
		this.document.getElementById(id).value=s_data;
		}
	
}

function to_ymd(s_date)
{
	
	var dd=s_date.substr(0,2);
	var mm=s_date.substr(3,2);
	var yy=s_date.substr(6,4);
	return yy+"-"+mm+"-"+dd;
}

function date_max(id_iniz,id_fine,anno){
	anno_corr=parseInt(anno);
	data_iniz=this.document.getElementById(id_iniz).value;
	data_fine=this.document.getElementById(id_fine).value;
	if(data_iniz=="" || data_fine=="")
			return true;
	data_iniz=new Date(parseInt(data_iniz.substr(6,4)),
								parseInt(data_iniz.substr(3,2)), 
								parseInt(data_iniz.substr(0,2)));
	data_fine=new Date(parseInt(data_fine.substr(6,4)),
								parseInt(data_fine.substr(3,2)), 
								parseInt(data_fine.substr(0,2)));
	data_i = new Date(anno_corr,12,31);
	data_f = new Date(anno,1,1);
	anno_min=parseInt(data_iniz.getFullYear());
	if( data_iniz.getTime() > data_i.getTime() || 
		 data_fine.getTime() < data_f.getTime() || 
		 data_iniz.getTime() > data_fine.getTime() ){
				alert("Attenzione, il valore della DATA INIZIO e/o della DATA FINE non sono corretti.");
				this.document.getElementById(id_iniz).value="";
				this.document.getElementById(id_fine).value="";
				this.document.getElementById(id_iniz).focus();
				return false;
	}
	return true;
}



