// ###################################################################
//
//    FORM CONTROL
//    by 79 ;-)
//
// ###################################################################




// ###################### FUNZIONI GENERICHE DI CONTROLLO PER TIPOLOGIA
// --------------------------------------------------------------------

// controllo di un campo vuoto ifvuoto (campoDellaForm, messaggioDiErrore)
function ifvuoto (campoDellaForm, messaggioDiErrore) {
	var error="";
	if (campoDellaForm == "") {
		error = "\n" + messaggioDiErrore;
	}
	return error;    
}

// controllo di una email ifemail (campoDellaForm, messaggioDiErroreVuoto, messaggioDiErroreSbagliato)
// uso di espressione rergolare per il controllo della formattazione dell'email
function ifemail (campoDellaForm, messaggioDiErroreVuoto, messaggioDiErroreSbagliato) {
	var error="";
	
	if (campoDellaForm == "") {
		error = "\n" + messaggioDiErroreVuoto;
		return error;  
	}
	
	
	var emailFilter=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
	
	if (!(campoDellaForm.match(emailFilter))) {
		error = "\n" + messaggioDiErroreSbagliato;
		return error;  
	}
	
	return error;    
}

// controllo di un campo numerico ifnumerico (campoDellaForm, messaggioDiErroreVuoto, messaggioDiErroreSbagliato, messaggioDiErroreZero)
// uso di espressione regolare per il controllo della formattazione dell'email
// il parametro messaggioDiErroreZero  opzionale  controlla che il totale del campo sia maggiore di zero.
function ifnumerico (campoDellaForm, messaggioDiErroreVuoto, messaggioDiErroreSbagliato, messaggioDiErroreZero) {
	var error="";
	
	// controllo che non sia vuoto
	if (campoDellaForm == "") {
		error = "\n" + messaggioDiErroreVuoto;
		return error;  
	}
	
	// controllo che siano numeri
	var numericFilter=/(^-?\d\d*$)/;
	if (!(campoDellaForm.match(numericFilter))) {
		error = "\n" + messaggioDiErroreSbagliato;
		return error;  
	}
	
	// controllo che siano > 1 se c'č il messaggio relativo
	if (messaggioDiErroreZero) {
		valoriSingoli = campoDellaForm.split("");
		valoreTotale = 1;
		for (i=0; i<valoriSingoli.lenght; i++) {
			valoreTotale +=	valoriSingoli[i];
		}
		
		if (valoreTotale<=0) {
			error = "\n" + messaggioDiErroreZero;
			return error; 
		}
	}
	
	return error;    
}

// controllo di un menu a tendina (sceltaDellaTendina, messaggioDiErrore)
function ifnonScelto (sceltaDellaTendina, messaggioDiErrore) {
	var error = "";
    if (sceltaDellaTendina == 0) {
		error = "\n" + messaggioDiErrore;
    }    
	return error;
}   

// controllo di un checkbox (checkbox, messaggioDiErrore)
function ifnonCheck (checkbox, messaggioDiErrore) {
	var error = "";
    if (!checkbox.checked) {
		error = "\n" + messaggioDiErrore;
    }    
	return error;
}  





// ###################### FUNZIONE DI CONTROLLO DELLA DATA
// --------------------------------------------------------------------

// controllo della data ad hoc da menu a tendina
// il valore della scelta viene passato gg_mm_aaaa ad esempio cosė:
// [option label="domenica 26 novembre 2006" value="26_11_2006"]domenica 26 novembre 2006 [/option]
function controlloData (giornoScelto, distanzaTemporale) {

	// trasformazione della data fornita in un oggetto DATA	
	giornoScelto = giornoScelto.toString();
	array_apertura = giornoScelto.split("_");
	giorno = array_apertura[1];
	mese = array_apertura[1]-1; // Gennaio = 0
	anno = array_apertura[2];
	prenotazione = new Date(anno, mese, giorno);

	// trasformazione della distanzaTemporale in millisecondi
	distanzaTemporale = distanzaTemporale * 24 * 60 * 60 * 1000;
	
	// creazione del riferimento temporale odierno, futuro e della prenotazione.
	oggi = new Date();
	tempoOggi = oggi.getTime();
	tempoMinimo = tempoOggi + distanzaTemporale;
	tempoPrenotazione = prenotazione.getTime();
	
	// ritorno variabile: se giusta restituisce "false", se sbagliata restituisce la data minima.
	// permette controllo: if (true) {}
	// se usi [>] non comprendi il giorno di riferimento. in alternativa usi [>=]
	// se la distanza temporale č inferiore a quanto stabilito viene eseguita la funzione
	// trasformaData(millisecondi) e viene restituira una stringa tipo "gg mese aaaa"
	if (tempoPrenotazione > tempoMinimo) {
		return false;
	} else {
		dataMinima = trasformaData (tempoMinimo);
		return dataMinima;
	}
}  





// ###################### FUNZIONE DI TRASFORMAZIONE DELLA DATA
// --------------------------------------------------------------------
// viene restituira una stringa tipo "gg mese aaaa"
function trasformaData (millisecondi) {

	nuovaData = new Date(millisecondi);

// array scorretto??????
// elencoMesi = new Array ("","Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Agosto","Settembre","Ottobre","Novembre","Dicembre");

// questo funziona :-)
	elencoMesi = new Array ("Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Agosto","Settembre","Ottobre","Novembre","Dicembre");

	gg = nuovaData.getDate();
	mm = nuovaData.getMonth();
	mm = elencoMesi[mm];
	aaaa = nuovaData.getFullYear();
	
	strng = gg + " " + mm + " " + aaaa;
	return strng;
}  





// ###################### FUNZIONE CONTROLLLO CAMPO IN FUNZIONE DI CHECKBOX
// --------------------------------------------------------------------
// controlla un campo di testo in funzione di un checbnox
// se il checkbox č selezionato controlla il campo
function controllaCkboxCampo (box, campo, messaggioDiErroreVuoto, messaggioDiErroreSbagliato, messaggioDiErroreZero) {
	error = "";
	if (box.checked) {
	
	// usa la funzione ifvuoto per il controllo dei campi
	error =	ifnumerico(campo, messaggioDiErroreVuoto, messaggioDiErroreSbagliato, messaggioDiErroreZero);
	
	}
	return error;
}