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";
	 

	 //alert(form.form_id_regione_agenti.value);
	

//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]];

	
	

	//se i campi esistono
		
		if (campo) {

		
			if (array_obb[i] == "1") {


			//alert(campo);


	//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") {

		//alert(array_campi[i] + " --> " + array_tipo[i]);


				array_data_12 = new Array();		
				array_data_12[0] = "_gg";		
				array_data_12[1] = "_mm";		
				array_data_12[2] = "_aa";		
		
				for (j=0; j<array_data_12.length; j++) {
					suffix = array_data_12[j];
					campo_data = modulo[array_campi[i] + suffix];
		
					//alert(campo_data.value);
					if (campo_vuoto(campo_data,num)){
			
					message += "In data campo " + (j+1) + " mancante\n";															
						} else if (solo_numeri(campo_data.value)){
			
						message += "In data " + (j+1) + " deve contenere solo numeri\n";			
					}
				}

			}  				
								
		//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 data con tre campi
		else if ((array_tipo[i] == "data_xx_xx_xxxx")) {
			
			
			if (campo_vuoto(campo,num)){
			message += nome_reale + textRequired;					
			} 
			else if (!checkValidDate(campo.value)) {
				
				 message+= nome_reale + textDateWrong;						
			}
	
		} 
						
							
		//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 (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;

			//alert('questo è radio => ' + campo.length);

				for (z=0; z<campo.length; z++) {
				
				//alert(campo[z].name);
					if (campo[z].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 (z=0; z<campo.length; z++) {
				
					if (campo[z].checked == true) {

					ceccato++;

					}
				
				}


			if (ceccato < 1) {
			
			message += nome_reale + notSelected;
			
			}
			
		}
		
		//controllo campi di solo numeri
		else if (array_tipo[i] == "numero") {

			if (campo_vuoto(campo,num)){
			message += nome_reale + textRequired; 
						
			} else if (isNaN(campo.value) || parseInt(campo.value)<0){
						message+= nome_reale + " deve contenere solo numeri\n";						
					}
		}
		
		//controllo campi di solo numeri
		else if (array_tipo[i] == "img") {
			
	
			if (!imgCheck(campo.value)) {
				message+= nome_reale + " non è una immagine\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_spec")) {
								
				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


		else if ((array_tipo[i]== "euro")) {
								
				if (campo_vuoto(campo,num)){
						
						message += nome_reale + " mancante\n";
						
					} else if (!isEuro(campo)) {
										
						message += nome_reale + " errato\n";
													
					}
									
		} 
	
								
		//validazione del numero di partita iva


		else if ((array_tipo[i]== "piva")) {
								
				if (campo_vuoto(campo,num)){
						
						message += nome_reale + " mancante\n";
						
					} else if (checkVATNumber(campo.value)) {
										
						message += nome_reale + " errato\n";
													
					}
									
		} 
								
		//verifica se il campo è vuoto						
										
		else {
			if (campo_vuoto(campo,num)){
			message += nome_reale + textRequired;	
				}
			}
		}
		
		
				
//finisce il for per scorrere gli array
	}
	
	
	
	
}
		

		//messaggio Finale di errore se ci sono errori
		if (message != "") {		 
		alert(headerErr +  message);
		return false;
		} else {
		return true;
		}
											
						
}
