function checkform(form,array_campi,array_nomi,array_obb,array_tipo) {

	//array_permit= new Array("ç","à","ì","è","é","[","]","ò","{","}","â","ä","ê","ï","É","å","ë","î","Ä","Å","Ö","Ü","á","í","ó","ú","ñ");	
	
	modulo=form;

	
	var headerErr = "Sono stati rilevati i seguenti errori:\n";
	var textRequired = " mancante\n";
	var emailWrong = " non è una email valida\n";
	var notSelected =" non selezionato\n";
	var textDateWrong = " : data non nel formato corretto\n";
	 
	

//scorro tutti gli elementi dell'array guardando quali sono obbligatori e quali no
	
	var message = "";
	var num=1;
	for (i=0; i<array_campi.length; i++) {
	
	var nome_reale = array_nomi[i];
	var campo = modulo[array_campi[i]];
	
	//validazione della data
		
		if ((array_tipo[i]== "data") && (array_obb[i]== "0")) {
		
		
	
		
		
		} 
		//altri campi che esistono
		else if (campo) {
	
		
			if (array_obb[i] == "1") {


	//validazione del numero di telefono +xx xxx xxxxxxxx
		
					if (array_tipo[i] == "telefono") {
						
						if (campo_vuoto(campo,num)){
						message += nome_reale + " mancante\n";						
						} else if (!(campo.value.indexOf(" ") != -1)) {
							message+= nome_reale + " Il telefono deve essere nel formato +xx xxx xxxxxx\n";							
						} else if ((campo.value.indexOf(" ") != -1)) {
							telefono_split = campo.value.split(" ");
							if ((!telefono_split[2])||(telefono_split[0].charAt(0) != "+")) {
							message+= nome_reale + " Il telefono deve essere nel formato +xx xxx xxxxxx\n";							
							} 										
						} 
					}  						
						
					//validazione della data nel caso di due elementi
					
					else if (array_tipo[i] == "data_xx") {
						
						if (campo_vuoto(campo,num)){
						message += nome_reale + textRequired;						
						} else if (!campo.value.length > 2) {
							
							 message+= nome_reale + " 2 \n";							
						} else {
							if (!solo_numeri(campo)) {
							message+= nome_reale + " deve contenere solo numeri\n";						
							}
						}

					}  
								
								
				//validazione della data nel caso di quattro elementi
		
				else if (array_tipo[i] == "data_xxxx") {

					
					if (campo_vuoto(campo,num)){
					message += nome_reale + textRequired;					
					} 
					else if (!campo.value.length > 4) {
						
						 message+= nome_reale + " 4 \n";						
					} else {
						if (!solo_numeri(campo)) {
						message+= nome_reale + " deve contenere solo numeri\n";						
						}
					}

				}  
				
		//validazione della data nel caso di quattro elementi
		
				else if (array_tipo[i] == "data") {

					
					if (campo_vuoto(campo,num)){
					message += nome_reale + textRequired;					
					} 
					else if (!checkValidDate(campo.value)) {
						
						 message+= nome_reale + textDateWrong;						
					}

				}  
										
								
								
		//validazione dell'email
		
		
		
		
		else if (array_tipo[i]  == "email") {
			
			if (campo_vuoto(campo,num)){
			message += nome_reale + textRequired;			
			} 
			else {
				
				if (!isEmail(campo.value)) {
				message+= nome_reale + emailWrong;			
				}
			}
			
		} 
								
								
		//validazione delle select
		
		
		else if ((array_tipo[i] == "select")) {
			
			if (select_vuoto(campo)){
			message += nome_reale + notSelected;			
			} 
		
			
		} 
						
							
		//validazione di partita iva e codice fiscale
		
		else if ((array_tipo[i] == "cf")) {
			//name="form_Oseltype" value="association"
			if (campo_vuoto(campo,num)){
			message += nome_reale + textRequired;			}  
			else if ((campo.value.indexOf(" ") != -1)) {
				
				 message+= nome_reale + " non deve contenere spazi\n";				
			} else {
				if ((!(modulo.form_Oseltype.value == "association"))&&(!(modulo.form_Oseltype.value == "public"))) {
				if (ControllaCF(campo.value)) {
				message+= nome_reale + " non valido\n";					}
				}
			}
			
		} 
		
		//controllo le radio button (almeno una selezionata)
		else if (array_tipo[i] == "radio") {
			
			
			var ceccato = 0;

				for (i=0; i<campo.length; i++) {
				
					if (campo[i].checked == true) {

					ceccato++;

					}
				
				}


			if (ceccato < 1) {
			
			message += nome_reale + notSelected;
			
			}
			
		}
		
		//verifica se ci sono caratteri speciali


		//controllo le check box (almeno una selezionata)
		else if (array_tipo[i] == "checkbox") {
			
			
			var ceccato = 0;

				for (i=0; i<campo.length; i++) {
				
					if (campo[i].checked == true) {

					ceccato++;

					}
				
				}


			if (ceccato < 1) {
			
			message += nome_reale + notSelected;
			
			}
			
		}
		
		//controllo campi di solo numeri
		else if (array_tipo[i] == "numero") {
			
			if (!solo_numeri(campo)) {
						message+= nome_reale + " deve contenere solo numeri\n";						
						}

		}

		//controllo campi di solo numeri
		else if (array_tipo[i].search(/^radio::/) != -1) {
			
			//message += nome_reale + " radio più qualcosa\n";

			var collegamento = array_tipo[i].split('::');
			//message += collegamento[1] + "\n";

			var collegata = collegamento[1].split('=');
			var campi_collegati = collegata[1].split('|');

			var ceccato = 0;

				for (i=0; i<campo.length; i++) {
				
				var campoJoin = modulo[campi_collegati[i]];

					if (collegata[0] == "sel")
					{
						campo_empty = select_vuoto(campoJoin);

					} else if (collegata[0] == "text")
					{
						campo_empty = campo_vuoto(campoJoin,num);
					}

					if ((campo[i].checked == true) && (!campo_empty)) {

					ceccato++;

					}
				
				}


			if (ceccato < 1) {
			
			message += nome_reale + " non selezionato o campo collegato non riempito\n";
			
			}



		}
			
		/*else if ((array_tipo[i]== "testo")) {
								
				if (campo_vuoto(campo,num)){
						
						message += nome_reale + " mancante\n";
						
					} else {
										
										
						for( i=0 ; i<array_permit.length ; i++) {
						special = campo.value.indexOf(array_permit[i]) != -1;
						lettera_spec=array_permit[i];
							if (special) {
							message+= nome_reale + " contiene almeno un carattere non consentito. Il carattere trovato è: " + lettera_spec +"\n";
							continue;
								}
						} 		
													
					}
									
		} */
	
								
		//validazione del numero di partita iva
								
		//verifica se il campo è vuoto						
										
		else {
			if (campo_vuoto(campo,num)){
			message += nome_reale + textRequired;	
				}
			}
		}
		
		
				
//finisce il for per scorrere gli array
	}
	
	
	
	
}
		
		if (message != "") { 
		alert(headerErr + message);
		return false;
		}
											
						
}
