/****************************************************************************************************************/
/*	Controlli in JavaScript V.2.0.2                      							*/
/*	Autore: Filippo Di Blasi                               							*/
/*	E-mail: filippo.diblasi@puntoinformatico.it     							*/
/*	Sito web: http://www.puntoinformatico.it      			 					*/
/*	Data: 27-Dic-2000		                     					 		*/
/*				                    			  					*/
/*	Controlli abilitati: Stringa, Numerico, Data, Telefono, CAP, E-mail, Web 				*/
/*	Ultima aggiunta: cambiata il metodo di richiamo delle funzioni						*/
/****************************************************************************************************************/
	

// controllo alfanumerico **********************************************************************************************************
function IsTesto(campo_value, campo_nome, obbligatorio, lunghezza_min, lunghezza_max) {
	
	ok = true;
	messaggio = null;
	
	// se l'immissione è obbligatoria la lunghezza del valore immesso deve essere > 0
	if (obbligatorio==1) {
		if (campo_value.length<1) {
			ok = false;
			messaggio = "\nLa compilazione del campo " + campo_nome + " e\' obbligatoria!";
		}
	}
	
   if (((obbligatorio==1)&&(ok)) || (campo_value.length>0)) {

	// se la lunghezza minima è uguale a 0 allora non c'è lunghezza minima
	if (ok) {
		if (lunghezza_min!=0) {
			if (campo_value.length<lunghezza_min) {
				ok = false;
				messaggio = "\nLa lunghezza del campo " + campo_nome + " deve essere almeno di " + lunghezza_min + " lettere!";
			}
		}
	}
	
	// se la lunghezza massima è uguale a 0 allora non c'è lunghezza massima
	if (ok) {
		if (lunghezza_max!=0) {
			if (campo_value.length>lunghezza_max) {
				ok = false;
				messaggio = "\nLa lunghezza del campo " + campo_nome + " deve essere massimo di " + lunghezza_max + " lettere!";
			}
		}	
	}

   }

	return messaggio;

}


// controllo numerico **********************************************************************************************************
function IsNumero(campo_value, campo_nome, obbligatorio, valore_min, valore_max) {
	
	ok = true;
	messaggio = null;
	
	// se l'immissione è obbligatoria la lunghezza del valore immesso deve essere > 0
	if (obbligatorio==1) {
		if (campo_value.length<1) {
			ok = false;
			messaggio = "\nLa compilazione del campo " + campo_nome + " e\' obbligatoria!";
		}
	}
	
   if (((obbligatorio==1)&&(ok)) || (campo_value.length>0)) {

	// se il valore immesso è composto da soli numeri o da , allora OK!
	if (ok) {
	     	for (var i=0; i<campo_value.length; i++) {
			if ((campo_value.charAt(i) <"0") || (campo_value.charAt(i) >"9")) {
				if (!(campo_value.charAt(i) ==",")) {
					ok = false;
					messaggio = "\nNel campo " + campo_nome + " si possono inserire solo numeri!";
				}
    			}
		}
	
	}

	// se il valore minimo è uguale a 0 allora non c'è valore minimo
	if (ok) {
		if (valore_min!=0) {
			if (parseInt(campo_value)<valore_min) {
				ok = false;
				messaggio = "\nIl valore del campo " + campo_nome + " deve essere almeno uguale a " + valore_min + "!";
			}
		}
	}
	
	// se il valore massimo è uguale a 0 allora non c'è valore massimo
	if (ok) {
		if (valore_max!=0) {
			if (parseInt(campo_value)>valore_max) {
				ok = false;
				messaggio = "\nIl valore del campo " + campo_nome + " deve essere uguale al massimo a " + valore_max + "!";
			}
		}	
	}
	
   }

	return messaggio;

}


// controllo data **********************************************************************************************************
function IsData(campo_value, campo_nome, obbligatorio, data_min_str, data_max_str, attuale_inf_str, attuale_sup_str) {
	
	ok = true;
	messaggio = null;

	var data_campo = new Date();
		
	// se l'immissione è obbligatoria la lunghezza del valore immesso deve essere > 0
	if (obbligatorio==1) {
		if (campo_value.length<1) {
			ok = false;
			messaggio = "\nLa compilazione del campo " + campo_nome + " e\' obbligatoria!";
		}
	}
	
   if (((obbligatorio==1)&&(ok)) || (campo_value.length>0)) {

	// se il valore immesso è lungo 10 caratteri potrebbe essere nel formato gg/mm/aaaa!
	if (ok) {
		if (campo_value.length!=10) {
			ok = false;
			messaggio = "\nIl campo " + campo_nome + " accetta esclusivamente date nel formato gg/mm/aaaa!";
		}
	}

	// se il valore immesso è nel formato gg/mm/aaaa OK!
	if (ok) {
	     	for (var i=0; i<campo_value.length; i++) {
			if ((i==2)||(i==5)) {
				if (campo_value.charAt(i)!="/") {
					ok = false;
					messaggio = "\nIl campo " + campo_nome + " accetta esclusivamente date nel formato gg/mm/aaaa!";
    				}	
			}
			else {
				if ((campo_value.charAt(i) <"0") || (campo_value.charAt(i) >"9")) {
					ok = false;
					messaggio = "\nIl campo " + campo_nome + " accetta esclusivamente date nel formato gg/mm/aaaa!";
    				}	
			}
		}
	}
	
	// controlla se la data è valida!
	if (ok) {
	     	gg = campo_value.charAt(0) + campo_value.charAt(1);
	     	mm = campo_value.charAt(3) + campo_value.charAt(4);
	     	aaaa = campo_value.charAt(6) + campo_value.charAt(7) + campo_value.charAt(8) + campo_value.charAt(9);
		if ((gg>31)||(gg<1)) {
			ok = false;
			alert(gg);
			messaggio = "\nCampo " + campo_nome + ": un giorno non può essere uguale a " + gg + "!";
		}
		if ((mm>12)||(mm<1)) {
			ok = false;
			messaggio = "\nCampo " + campo_nome + ": un mese non può essere uguale a " + mm + "!";
		}
		if (aaaa<1) {
			ok = false;
			messaggio = "\nCampo " + campo_nome + ": un anno non può essere uguale a " + aaaa + "!";
		}
		// controllo sulla data
		if (ok) {
			// se il mese è febbraio
			if (mm==2) {
				// il giorno non può essere > 29
				if (gg>29) {
					ok = false;
					messaggio = "\nCampo " + campo_nome + ": febbraio non può avere più di 29 giorni!";
				}
			}
			else {
				// ma, se il mese è aprile, giugno, settembre o novembre
				if ((mm==4)||(mm==6)||(mm==9)||(mm==11)) {
					// il giorno non può essere > 30
					if (gg>30) {
						ok = false;
						messaggio = "\nCampo " + campo_nome + ": ";
						if (mm==4) messaggio = messaggio + "aprile ";
						if (mm==6) messaggio = messaggio + "giugno ";
						if (mm==9) messaggio = messaggio + "settembre ";
						if (mm==11) messaggio = messaggio + "novembre ";
						messaggio = messaggio + "non può avere più di 30 giorni!";
					}
				}
			}
		}
	}

	// se la data minima è uguale a 0 allora non c'è data minima
	if (ok) {
		if (data_min_str!=0) {
			var data_min = new Date();
			
			data_campo.setYear(aaaa);
			data_campo.setMonth(mm-1);
			data_campo.setDate(gg);
			data_min.setYear(data_min_str.charAt(6) + data_min_str.charAt(7) + data_min_str.charAt(8) + data_min_str.charAt(9));
			data_min.setMonth(data_min_str.charAt(3) + data_min_str.charAt(4) - 1);
			data_min.setDate(data_min_str.charAt(0) + data_min_str.charAt(1));
			
			if (data_min>data_campo) {
				ok = false;
				messaggio = "\nCampo " + campo_nome + ": la data deve essere almeno uguale a " + data_min_str + "!";
			}
		}
	}

	// se la data massima è uguale a 0 allora non c'è data massima
	if (ok) {
		if (data_max_str!=0) {
			var data_max = new Date();
			
			data_campo.setYear(aaaa);
			data_campo.setMonth(mm-1);
			data_campo.setDate(gg);
			data_max.setYear(data_max_str.charAt(6) + data_max_str.charAt(7) + data_max_str.charAt(8) + data_max_str.charAt(9));
			data_max.setMonth(data_max_str.charAt(3) + data_max_str.charAt(4) - 1);
			data_max.setDate(data_max_str.charAt(0) + data_max_str.charAt(1));
			
			if (data_max<data_campo) {
				ok = false;
				messaggio = "\nCampo " + campo_nome + ": la data deve essere almeno uguale a " + data_max_str + "!";
			}
		}
	}

	// se attuale_inf_str è uguale a 0 allora non c'è controllo minimo sulla data odierna
	if (ok) {
		if (attuale_inf_str!=0) {
			var attuale_inf = new Date();
			
			data_campo.setYear(aaaa);
			data_campo.setMonth(mm-1);
			data_campo.setDate(gg);
			
			
			if (attuale_inf>data_campo) {
				ok = false;
				messaggio = "\nCampo " + campo_nome + ": la data deve essere almeno uguale a " + attuale_inf.getDate() + "/" + (attuale_inf.getMonth()+1) + "/" + attuale_inf.getYear() + "!";
			}
		}
	}

	// se attuale_sup_str è uguale a 0 allora non c'è controllo massimo sulla data odierna
	if (ok) {
		if (attuale_sup_str!=0) {
			var attuale_sup = new Date();
			
			data_campo.setYear(aaaa);
			data_campo.setMonth(mm-1);
			data_campo.setDate(gg);
			
			
			if (attuale_sup<data_campo) {
				ok = false;
				messaggio = "\nCampo " + campo_nome + ": la data deve essere al massimo uguale a " + attuale_sup.getDate() + "/" + (attuale_sup.getMonth()+1) + "/" + attuale_sup.getYear() + "!";
			}
		}
	}
	
   }
		
	return messaggio;

}


// controllo telefono/fax **********************************************************************************************************
function IsTelefono(campo_value, campo_nome, obbligatorio) {
	
	ok = true;
	messaggio = null;

	// se l'immissione è obbligatoria la lunghezza del valore immesso deve essere > 0
	if (obbligatorio==1) {
		if (campo_value.length<1) {
			ok = false;
			messaggio = "\nLa compilazione del campo " + campo_nome + " e\' obbligatoria!";
		}
	}
	
   if (((obbligatorio==1)&&(ok)) || (campo_value.length>0)) {

	// se il valore immesso è lungo deve essere lungo almeno 8 caratteri!
	if (ok) {
		if (campo_value.length<8) {
			ok = false;
			messaggio = "\nIl campo " + campo_nome + " accetta esclusivamente numeri telefonici nel formato prefisso/numero!";
		}
	}

	// se il valore immesso è nel formato prefisso/numero OK!
	if (ok) {
		pos = 0;
	     	for (var i=0; i<campo_value.length; i++) {
			if (campo_value.charAt(i)=="/") pos = i;
		}
		// se compare il carattere / tra la posizione 2 e 4 allora potrebbe andar bene...
		if ((pos<2)||(pos>4)) {
			ok = false;
			messaggio = "\nIl campo " + campo_nome + " accetta esclusivamente numeri telefonici nel formato prefisso/numero!";
		}
		else {
	     		for (var i=0; i<campo_value.length; i++) {
				if ((i!=pos)&&((campo_value.charAt(i) <"0") || (campo_value.charAt(i) >"9"))) {
					ok = false;
					messaggio = "\nIl campo " + campo_nome + " accetta esclusivamente numeri telefonici nel formato prefisso/numero!";
    				}
			}
		}
	}
	
   }
	
	return messaggio;

}


// controllo cap **********************************************************************************************************
function IsCap(campo_value, campo_nome, obbligatorio) {
	
	ok = true;
	messaggio = null;
	
	// se l'immissione è obbligatoria la lunghezza del valore immesso deve essere > 0
	if (obbligatorio==1) {
		if (campo_value.length<1) {
			ok = false;
			messaggio = "\nLa compilazione del campo " + campo_nome + " e\' obbligatoria!";
		}
	}
	
   if (((obbligatorio==1)&&(ok)) || (campo_value.length>0)) {

	// se il valore immesso è composto da soli numeri allora OK!
	if (ok) {
	     	for (var i=0; i<campo_value.length; i++) {
			if ((campo_value.charAt(i) <"0") || (campo_value.charAt(i) >"9")) {
				ok = false;
				messaggio = "\nNel campo " + campo_nome + " si possono inserire solo numeri!";
    			}
		}
		
		//se la lunghezza del numero immesso è uguale a 5 allora OK!
		if (campo_value.length!=5) {
			ok = false;
			messaggio = "\nIl campo " + campo_nome + " deve essere lungo cinque cifre!";
		}
		if (campo_value=='00000') {
			ok = false;
			messaggio = "\nIl campo " + campo_nome + " non può essere uguale a 00000!";
		}
	}
	
   }
	
	return messaggio;

}


// controllo e-mail **********************************************************************************************************
function IsEmail(campo_value, campo_nome, obbligatorio) {
	
	ok = true;
	messaggio = null;

	// se l'immissione è obbligatoria la lunghezza del valore immesso deve essere > 0
	if (obbligatorio==1) {
		if (campo_value.length<1) {
			ok = false;
			messaggio = "\nLa compilazione del campo " + campo_nome + " e\' obbligatoria!";
		}
	}
	
   if (((obbligatorio==1)&&(ok)) || (campo_value.length>0)) {

	// se il valore immesso è nel formato nome@nome_dominio.dominio OK!
	if (ok) {
		email_str = campo_value;
		pos_c = null;
		pos_p = null;
	     	// alla fine del ciclo vengono assegnati a pos_c e pos_p, rispettivamente la posizione di @ e .
	     	for (var i=0; i<campo_value.length; i++) {
			digit = campo_value.charAt(i);
			if (digit=="@") pos_c=i;
			if (digit==".") pos_p=i;
		}
		if ((pos_c!=null)&&(pos_p!=null)) {
			if (!((pos_c>=3)&&(pos_p>=(pos_c+3))&&(email_str.length>=(pos_p+3))&&(email_str.length<=(pos_p+5)))) {
				ok = false;
				messaggio = "\nCampo " + campo_nome + ": l'indirizzo e-mail non e\' corretto!";
			}
		}
		else {
			ok = false;
			messaggio = "\nCampo " + campo_nome + ": l'indirizzo e-mail non e\' corretto!";
		}
	}
	
   }
	
	return messaggio;

}


// controllo indirizzo web **********************************************************************************************************
function IsWeb(campo_value, campo_nome, obbligatorio) {
	
	ok = true;
	messaggio = null;

	// se l'immissione è obbligatoria la lunghezza del valore immesso deve essere > 0
	if (obbligatorio==1) {
		if (campo_value.length<1) {
			ok = false;
			messaggio = "\nLa compilazione del campo " + campo_nome + " e\' obbligatoria!";
		}
	}
	
   if (((obbligatorio==1)&&(ok)) || (campo_value.length>0)) {
   
	// se il valore immesso è nel formato prefisso.nome_dominio.dominio OK!
	if (ok) {
		web_str = campo_value;
		pos_1p = null; // penultimo punto
		pos_2p = null; // ultimo punto
		pos_1c = null; // primo carattere dopo l'ultimo punto
		pos_s = null;  // slash o backslash
	     	// alla fine del ciclo viene assegnato a pos_1p e pos2p rispettivamente la posizione del penultimo e ultimo punto
	     	for (var i=0; i<campo_value.length; i++) {
			digit = campo_value.charAt(i);
			if (digit==".") {
				if (pos_1p==null) {
					pos_1p = i;
				}
				else {
					if (pos_2p==null) {
						pos_2p = i;
					}
					else {
						pos_1p = pos_2p;
						pos_2p = i;	
					}
				}
			}
		}
		// se pos_2p è l'ultimo carattere di conseguenza lo sarà anche pos_1c, altrimenti quest'ultimo sarà uguale al primo carattere dopo pos_2p
		if (pos_2p<campo_value.length) {
			pos_1c = pos_2p + 1;	
		}
		else {
			pos_1c = pos_2p;	
		}


		if ((pos_1p!=null)&&(pos_2p!=null)) {
		 	// controlla se i punti sono nella posizione giusta
			if ((pos_2p>(pos_1p+2))&&(pos_1p>2)&&(pos_2p<campo_value.length-2)) {
	     			for (var i=pos_1c; i<campo_value.length; i++) {
					digit = campo_value.charAt(i);
					if ((digit=="/")||(digit=="\\")) {
						if (pos_s==null) {
							pos_s = i;
						}
					}
				}
				if (pos_s==null) {
					// se non compare ne / ne \ allora il dominio non può essere > 4 lettere!
					if (!(campo_value.length<(pos_1c+5))) {
						ok = false;
						messaggio = "\nCampo " + campo_nome + ": l'indirizzo Internet non e\' corretto!";
					}
				}
				else {
					// se compare / o \ deve essere distanziato min 1 lettera e max 3 lettere da pos_1c
					if (!((pos_s<pos_1c+5)&&(pos_s>pos_1c+1))) {
						ok = false;
						messaggio = "\nCampo " + campo_nome + ": l'indirizzo Internet non e\' corretto!";
					}						
				}
			}
			else {
				ok = false;
				messaggio = "\nCampo " + campo_nome + ": l'indirizzo Internet non e\' corretto!";
			}
		}
		else {
			ok = false;
			messaggio = "\nCampo " + campo_nome + ": l'indirizzo Internet non e\' corretto!";
		}
	}

   // se il valore immesso inizia con http:// OK!
   if (ok) {
   		if (campo_value.search("http://")!=0) {
			ok = false;
			messaggio = "\nCampo " + campo_nome + ": l'indirizzo Internet deve cominciare con http://!";
   		}
   }

   }
	
	return messaggio;

}
