function validazione(objForm, lingua, test) { 		
	/* ----------------------------
	Validazione campi nei forms
	TWS snc - Vicenza [Italy]
	by Marino T
		V1.0  #16/05/2002
		V1.1  #13/08/2002 - Inserito controllo validita' date
		V1.11 #26/08/2002 - Inserito controllo validita' non vuoti
		V1.12 #04/12/2002 - Migliorato il controllo email: ora si puo' inserire anche un campo vuoto
		V1.13 #12/03/2003 - Aggiunto controllo sui campi password
		V1.2  #09/05/2003 - Aggiunti parametri in input per lingua e test, sistemate variabili senza la dichiarazione esplicita
		V1.21 #18/06/2003 - Aggiunto controllo sui campi file
		V1.3  #27/02/2004 - Aggiunto controllo float
		V1.31 #28/07/2004 - Migliorato/sistemato controllo textarea
		V1.32 #29/10/2004 - Aggiunto controllo select-one obbligatorio (selectedIndex non = 0)
		V1.33 #31/01/2005 - Modificato il pattern data (anno a 4 cifre) e migliorato l'avviso in inglese
	------------------------------- */

	var msg="";
	var lin, campo, nome, blocca, xini, x, email, j, data, non_vuoto, flag_no_vuoti;

	// opzione per la fase di sviluppo: presenta tutti i campi del form
	if (test) {
		msg  =  "N.\tNome\tTipo\tValue\t\tChecked\tArray\n";
		msg += "--\t------\t-------\t--------\t\t--------\t-------\n";
		for (j = 0; j < objForm.length; j++)
			msg += j + "\t[" + objForm[j].name + "]\t(" + objForm[j].type + ")\t[" + objForm[j].value + "]\t\t[" + objForm[j].checked + "]\t[" + objForm[j].length + "]\n";

		alert (msg);
		return (false);
	}

	// decide l'indice nell'array msg
	if (lingua.toUpperCase()=="IT")
		lin=0;
	else if (lingua.toUpperCase()=="UK")
		lin=1;
	else
		lin=2;

	var i18n = new Array(
		["Campo obbligatorio", "Obligatory field!"],
		["Campo email non conforme.\nInserire un indirizzo email valido", "Not consistent field.\nTo write a valid email"],
		//["Data non valida.\nScrivere la data nella forma GG MM AAAA\nseparando i campi con . (punto) - (meno) oppure / (barra)", "Not a valid date field.\nTo write the date using pattern GG MM AAAA\nand separating the fields with . (point) - (less) or / (bar)"],
		["Data non valida.\nScrivere la data nella forma GG MM AAAA\n con o senza separatore", "Not a valid date field.\nTo write the date using pattern DD MM YYYY\nwith or without separator"],
		["Tutti i campi significativi sono vuoti.\nI dati non possono essere inseriti.", "All important fields are empty.\nThe record cannot be inserted."],
		["Campo numerico non conforme", "Non consistent field!\nTo write a numeric field"],
		["Il prodotto non puņ essere su listino ricambi e vendita", "Il prodotto non puņ essere su listino ricambi e vendita"],
		["Orario non valido.\nScrivere l'ora nella forma HH MM SS\nseparando i campi con : (due punti)", "Not a valid hour field.\nTo write the hour using pattern HH MM SS\nand separating the fields with : (colon)"]
	);

	// ---- patterns espressioni regolari
	// tutte le parole (eliminando gli spazi prima e dopo) separate da una virgola
	var pattern_campi = /\s*,\s*/;
	// pattern per email
	var pattern_email = /^([A-z0-9_]|\-|\.)+@(([A-z0-9_]|\-)+\.)+[A-z]{2,4}$/;
	// pattern per date nella forma gg-/.mm-/.aaaa OPPURE niente (|^$)
	//var pattern_data = /^([0-9]{1,2}[-\/\.]+[0-9]{1,2}[-\/\.]+[0-9]{4})$|^$/;
	var pattern_data = /^([0-9]{2}[-\/\.]*[0-9]{2}[-\/\.]*[0-9]{4})$|^$/;
    // pattern per orario nella forma hh:mm:ss OPPURE niente (|^$)
	var pattern_ora = /^([0-9]{2}[:]+[0-9]{2}[:]+[0-9]{2})$|^$/;
	// pattern per float oppure nullo (|^$)
	var pattern_float = /^(-*[0-9]+[\.|\,]{0,1}[0-9]*)$|^$/;
	// pattern per integer oppure nullo (|^$)
	var pattern_int = /^(-*[0-9]+)$|^$/;

	// inizio controllo array -- obbligatori -- 
	if (objForm._valid_obbligatori && objForm._valid_obbligatori.value.length>0) {
		var obbligatori = objForm._valid_obbligatori.value.split(pattern_campi);

		for (j = 0; j < obbligatori.length; j++) {
			// verifica il tipo di campo e pone la condizione necessaria
			campo = objForm[obbligatori[j]];
			nome = obbligatori[j]; 			
			if (!campo.length || campo.type=='select-one') { // se non e' un array...
				switch (campo.type) {
					case "text":
						blocca = (campo.value == "");
						break;
					case "hidden":
						blocca = (campo.value == "");
						break;
					case "password":
						blocca = (campo.value == "");
						break;
					case "textarea":
						blocca = (campo.value.replace(/\n/g,"") == "");
						break;
					case "checkbox":
						blocca = !campo.checked;
						break;
					case "radio":
						blocca = !campo.checked;
						break;
					case "select-one": 
						blocca = (campo.selectedIndex == 0);
						break;										
					/*
					case "select-multiple":
						blocca = (campo.value == "");
						break;
					*/
					case "file":
						blocca = (campo.value == "");
						break;
					default:
						blocca = false;
				}
			} else { // se e' un array di campi (proprieta' .name uguale)
				xini = 0; 
				blocca = false;
				for (x = 0; x < campo.length; x++) { 
					switch (campo[x].type) {
						case "text":
							if (campo[x].value != "") xini++;
							break;
						case "textarea":
							if (campo[x].value.replace(/\n/g,"") != "") xini++;
							break;
						case "checkbox":
							if (campo[x].checked) xini++;
							break;
						case "radio":
							if (campo[x].checked) xini++;
							break;
						/*
						case "select-one":
							if (campo.selectedIndex == 0) xini=0;
							break;
						case "select-multiple":
							if (campo[x].value != "") xini++;
							break;
						*/
					}
				}
				if (xini==0) blocca=true;
			}

			// controlla la condizione per questo campo
			if (blocca) {
				avviso(nome, i18n[0][lin]);
				if (!campo.length && campo.type!='hidden') campo.focus();
				return (false);
			}
		}
	}
	// fine controllo array -- obbligatori --

	// inizio controllo array -- email --
	if (objForm._valid_email) {
		email = objForm._valid_email.value.split(pattern_campi);
		for (j = 0; j < email.length; j++) {
			if ((objForm[email[j]].value) && !pattern_email.test(objForm[email[j]].value)) {
				avviso(objForm[email[j]].name, i18n[1][lin]);
				objForm[email[j]].focus();
				return (false);
			}
		}
	}
	// fine controllo array -- email --

	// inizio controllo array -- data --
	if (objForm._valid_data) { 
		data = objForm._valid_data.value.split(pattern_campi);
		for (j = 0; j < data.length; j++) {
			if (!pattern_data.test(objForm[data[j]].value)) {
				avviso(objForm[data[j]].name, i18n[2][lin]);
				objForm[data[j]].focus();
				return (false);
			}
		}
	}
	// fine controllo array -- data --

	// inizio controllo array -- ora --
	if (objForm._valid_ora) {
		ora = objForm._valid_ora.value.split(pattern_campi);
		for (j = 0; j < ora.length; j++) {
			if (!pattern_ora.test(objForm[ora[j]].value)) {
				avviso(objForm[ora[j]].name, i18n[6][lin]);
				objForm[ora[j]].focus();
				return (false);
			}
		}
	}
	// fine controllo array -- ora --
	
	// inizio controllo array -- non vuoti --
	if (objForm._valid_no_vuoti) {
		non_vuoto = objForm._valid_no_vuoti.value.split(pattern_campi);
		flag_no_vuoti = true;
		for (j = 0; j < non_vuoto.length; j++) {
		 if (objForm[non_vuoto[j]].type == 'checkbox') { // se sono checkbox
		  if (objForm[non_vuoto[j]].checked) {
				flag_no_vuoti = false;
			}
		 }
		 else {
			if (objForm[non_vuoto[j]].value != "") { // altri campi
				flag_no_vuoti = false;
			}
		 }
		}
		if (flag_no_vuoti) {
			avviso("-", i18n[3][lin]);
			return (false);
		}
	}
	// fine controllo array -- non vuoti --
	
	// inizio controllo array -- checkbox esclusivi --
	if (objForm._valid_esclusivi) {
		non_si = objForm._valid_esclusivi.value.split(pattern_campi);
		flag_no_si = 0;
		for (j = 0; j < non_si.length; j++) {
			if (objForm[non_si[j]][0].checked) {
				flag_no_si += 1;
			}
		}
		if (flag_no_si==non_si.length) {
			avviso("-", i18n[5][lin]);
			return (false);
		}
	}
	// fine controllo array -- esclusivi --

	// controllo numeri float
	if (objForm._valid_float) {
	numero = objForm._valid_float.value.split(pattern_campi);
		for (j = 0; j < numero.length; j++) {
			if (objForm[numero[j]].value.length>0 && !pattern_float.test(objForm[numero[j]].value)) {
				avviso(objForm[numero[j]].name, i18n[4][lin]);
				objForm[numero[j]].focus();
				return (false);
			}
		}
	}
	// fine controllo numeri float
	
	// controllo numeri interi
	if (objForm._valid_intero) { 
	intero = objForm._valid_intero.value.split(pattern_campi);
		for (j = 0; j < intero.length; j++) {
			if ((objForm[intero[j]].value) && !pattern_int.test(objForm[intero[j]].value)) {
				avviso(objForm[intero[j]].name, i18n[4][lin]);
				objForm[intero[j]].focus();
				return (false);
			}
		}
	}
	// fine controllo numeri interi

return (true);
}

function avviso(nome_campo, errore) {
	var msg;
	msg  = "[" + nome_campo + "] : " + errore;
	alert(msg);
	return true;
}

function puntoavirgola(valore)
{
 return valore.toString().replace(/\./g,",");
}

function virgolaapunto(valore)
{
 return parseFloat(valore.toString().replace(/,/g,"."));
}


