function controlla_float(oggetto){
	var value=oggetto.value;
	if(value=="")return true;
	var pattern_float=new RegExp("^(-*[0-9]+[\.|\,]{0,1}[0-9]*)$|^$");
	if(!pattern_float.test(value)){
		oggetto.focus();
		oggetto.select();
		alert("Numero non valido");
		return false;
	}
	value=roundTo(value,2);
	oggetto.value=value;
}

function controlla_importo(oggetto){
	if(oggetto.value=="" || oggetto.value=="0,00" || parseFloat(oggetto.value)==0)return true;
	if(oggetto.value.indexOf(",")>0 && oggetto.value.indexOf(".")>0){
		value=oggetto.value.replace(/\./g,"");
	}else value=oggetto.value;
	var pattern_float=new RegExp("^(-*[0-9]+[\.|\,]{0,1}[0-9]*)$|^$");
	if(!pattern_float.test(value)){
		alert("Importo nn valido");
	//	return false;
	}
//	return true;
}

function controlla_form(form, lng){
	if (!lng) lng='it';
	
	//copio i tipi dal db!!!!!
	var tipo_stringa=1;
	var tipo_intero=2;
	var tipo_intero_null=3;
	var tipo_reale=4;
	var tipo_reale_null=5;
	var tipo_email=6;
	var tipo_url=7;
	var tipo_piva=8;
	var tipo_codfisc=9;
	var tipo_data=10;
	var tipo_ora=11;
	var tipo_dataora=12;
	var tipo_booleano=13;
	var tipo_booleano_null=14;
	var tipo_ip=15;
	var tipo_importo=18;
	//variabili
	var oggetto;
	var inizio=" _t";//deve iniziare cosi!
	var parti;
	var parser;
	var separatore="_";
	var pezzi;
	var pezzo;
	var tipo;
	var obbligatorio=false;
	var minimo=0;
	var massimo=0; 
	var valido=true;
	//controlle effettivo
	if(form.elements==null || form.elements.length<1)return;
	for(var i=0;i<form.elements.length;i++){
		tipo=0;
		obbligatorio=0;
		massimo=0;
		minimo=0;
		oggetto=form.elements[i];
		if(oggetto==null)continue;
		if(oggetto.className!=null && oggetto.className!='' && oggetto.className.indexOf(inizio)>=0){
			parti=oggetto.className.indexOf(inizio);
			if(oggetto.className.indexOf(" ",parti+inizio.length)>0)
				parser=oggetto.className.substring(parti+1,oggetto.className.indexOf(" ",parti+inizio.length));//mi prendo la stringa che mi serve
			else parser=oggetto.className.substring(parti+1);
			pezzi=parser.split(separatore);
			for(var j=0;j<pezzi.length;j++){
				pezzo=pezzi[j];
				switch(pezzo.substring(0,1)){
					case 't':
						tipo=pezzo.substring(1);
						continue;
					case 'o':
						obbligatorio=true;
						continue;
					case 'm':
						massimo=pezzo.substring(1);
						continue;					
					case 'v':
						minimo=pezzo.substring(1);
						continue;
					}
			}
			if(obbligatorio && oggetto.value==''){
				errore_form('obbligatorio',oggetto,lng);//posso fare quello che voglio con l'oggetto!!!!!
				return false;//blocco al primo!!
			}
			switch(parseInt(tipo)){//deve essere un intero!
				case tipo_stringa:
					valido=check_stringa(oggetto,lng,massimo,minimo);
					break;
				case tipo_intero:
				case tipo_intero_null:
					valido=check_intero(oggetto,lng,massimo,minimo);
					break;
				case tipo_importo:
					valido=check_importo(oggetto,lng,massimo,minimo);
					break;
				case tipo_reale:
				case tipo_reale_null:
					valido=check_reale(oggetto,lng,massimo,minimo);
					break;
				case tipo_email:
					valido=check_email(oggetto,lng,massimo,minimo);
					break;
				case tipo_data:
					valido=check_data(oggetto,lng,massimo,minimo);
					break;
				case tipo_ora:
					valido=check_ora(oggetto,lng,massimo,minimo);
					break;
				case tipo_dataora:
					valido=check_dataora(oggetto,lng,massimo,minimo);
					break;
			}
			if(!valido)
				return false;
		}
	}
	return true;
}
//tutte funzione che si possono riutilizzare in futuro!!!!!!!

//controllo solo la lunghezza
function check_stringa(oggetto,lng,massimo,minimo){
	if(minimo==0 && massimo==0)return true;
	if((""+oggetto.value).length>=minimo && (massimo>0 && (""+oggetto.value).length<=massimo)){
		return true;
	}else{
		if((""+oggetto.value).length<minimo)
			errore_form('corto',oggetto,lng);
		else errore_form("lungo",oggetto,lng);
	}
}

function check_intero(oggetto,lng,massimo,minimo){
	if(oggetto.value=="" || oggetto.value==0)return true;
	var patt=new RegExp('^[-+]?[0-9]*$');
	if(!patt.test(oggetto.value)){
		errore_form("no_intero",oggetto,lng);	
		return false;
	}
	if(parseInt(oggetto.value)<minimo){
		errore_form("corto",oggetto,lng);
		return false;
	}
	if(massimo>0 && parseInt(oggetto.value)>massimo){
		errore_form("lungo",oggetto,lng);
		return false;
	}
	return true;
}

function check_importo(oggetto,lng,massimo,minimo){
	if(oggetto.value=="" || oggetto.value=="0,00" || parseFloat(oggetto.value)==0)return true;
	if(oggetto.value.indexOf(",")>0 && oggetto.value.indexOf(".")>0){
		value=oggetto.value.replace(/\./g,"");
	}else value=oggetto.value;
	var pattern_float=new RegExp("^(-*[0-9]+[\.|\,]{0,1}[0-9]*)$|^$");
	if(!pattern_float.test(value)){
		errore_form("no_importo",oggetto,lng);
		return false;
	}
	if(parseInt(value)<minimo){
		errore_form("corto",oggetto,lng);
		return false;
	}
	if(massimo>0 && parseInt(value)>massimo){
		errore_form("lungo",oggetto,lng);
		return false;
	}
	return true;
}


function check_reale(oggetto,lng,massimo,minimo){
	if(oggetto.value=="" || parseFloat(oggetto.value)==0)return true;
	var pattern_float=new RegExp("^(-*[0-9]+[\.|\,]{0,1}[0-9]*)$|^$");
	if(!pattern_float.test(oggetto.value)){
		errore_form("no_reale",oggetto,lng);
		return false;
	}
	if(parseInt(oggetto.value)<minimo){
		errore_form("corto",oggetto,lng);
		return false;
	}
	if(massimo>0 && parseInt(oggetto.value)>massimo){
		errore_form("lungo",oggetto,lng);
		return false;
	}
	return true;
}

function check_data(oggetto,lng,massimo,minimo){
	if(oggetto.value=="")return true;
	if(oggetto.value.length<10){
		errore_form("no_data",oggetto,lng);//DEVO METTERLA
		return false;
		}
	var pattern=new RegExp("^([0-9]{1,2})[ \/\.\-]([0-9]{1,2})[ \/\.\-]([0-9]{2,4})$");
	if(!pattern.test(oggetto.value)){
		errore_form("no_data",oggetto,lng);
		return false;
	}
/*
	if(parseFloat(oggetto.value)<minimo){
		errore_form("corto",oggetto);
		return false;
	}
	if(massimo>0 && parseFloat(oggetto.value)>massimo){
		errore_form("lungo",oggetto);
		return false;
	}*/
	//controlli della lunghezza saranno futuri!!!
	return true;

}

function check_email(oggetto,lng,massimo,minimo){
	// pattern per email
	//var pattern = new RegExp("^([a-z0-9_]|\-|\.)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,4}$");
	var pattern = /^([a-z0-9_]|\-|\.)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,4}$/;
	if (oggetto.value && !pattern.test(oggetto.value.toLowerCase())) {
		errore_form("email",oggetto,lng);
		return false;
	}
	return true;
}

//controllo x i checkbox in cui deve essere spuntato almeno tot elementi della lista
//da fare
function check_selezionati(oggetto,lng,massimo,minimo){
	return true;
}


function check_ora(oggetto,lng,massimo,minimo){
	return true;
}

function check_dataora(oggetto,lng,massimo,minimo){
	return true;
}

function errore_form(stringa,oggetto,lng){
	var lngID=0;
	switch (lng) {
		case 'it': lngID=0; break;
		case 'en': lngID=1; break;
	}
	
	var err_msg = new Array();
	err_msg[0]=new Array("Errore generico", "Generic error");
	err_msg[1]=new Array("Campo obbligatorio", "Obligatory field!");
	err_msg[2]=new Array("Campo email non conforme.\nInserire un indirizzo email valido", "Not consistent field.\nTo write a valid email");
	err_msg[3]=new Array("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)");
	err_msg[4]=new Array("Tutti i campi significativi sono vuoti.\nI dati non possono essere inseriti.", "All important fields are empty.\nThe record cannot be inserted.");
	err_msg[5]=new Array("Campo numerico non conforme", "Non consistent field!\nTo write a numeric field");
	err_msg[6]=new Array("Campo troppo lungo", "Too long field");
	err_msg[7]=new Array("Campo troppo corto", "Too short field");
	err_msg[8]=new Array("Numero intero non valido", "Invalid integer number");
	err_msg[9]=new Array("Importo non valido", "Invalid price");
	
	var err_code=0;
	switch(stringa){
		case 'obbligatorio': 	err_code=1; break;
		case 'no_data': 			err_code=3; break;
		case 'no_intero':			err_code=8; break;
		case 'no_reale':				err_code=5; break;
		case 'no_importo':		err_code=9; break;
		case 'corto':						err_code=7; break;
		case 'lungo':						err_code=6; break;
		case 'email':						err_code=2; break;
	}
	oggetto.style.backgroundColor="#FFEF90";
	alert('['+oggetto.alt+']: '+err_msg[err_code][lngID]);
	oggetto.focus();
	oggetto.select();
}

/*
Funzione che "fixa" un problema di firefox che se ha sia evento blur che evento change, nel caso il blur cambia il valore del change,l'evento change nun va!!!!
Lo faccio a OGNI onfocus dell'oggetto cosi,le variabili sono solo dell'oggetto corrente (in teoria)
*/
function fix_change_blur(oggetto){
	var vecchio_valore;
	var vecchio_change;
	var vecchio_blur;

	vecchio_blur=oggetto.onblur;
	vecchio_change=oggetto.onchange;
	oggetto.onblur=nuovo_blur;
	//oggetto.onchange=null;//non lo faccio partir!
	oggetto.onchange=nuovo_onchange;
	vecchio_valore=oggetto.value;
	function nuovo_onchange(){
		oggetto.onblur=vecchio_blur;
		oggetto.onchange=vecchio_change;
		oggetto.onchange();
	}
	function nuovo_blur(){//praticamente il blur esegue il change!!!!
		oggetto.onblur=vecchio_blur;
		oggetto.onblur();
		var nuovo_valore=oggetto.value;
		if(nuovo_valore!=vecchio_valore){
			oggetto.onchange=vecchio_change;
			oggetto.onchange();	
		}
	}
}





