var myPrint=false;
var myBack=false;
var myHelp=false;
var mhv_dbDec=2;
var mhv_dbPer=2;

function mh_Err(obj,msg) {

	if (msg==1) msg="Errore nella formattazione del campo <" + obj.nome + "> di tipo [" + obj.inputType + "]!"; 
	alert(msg);
	try {obj.focus()} catch(e) {}
	return false
}
	
function mh_StBlck(obj) {

	obj.value="";
	if (obj.hostValue) obj.hostValue="";
	return true;
}

function mh_lngh(obj) {

	if (!(obj.maxlength)) return true
	var v=parseInt(obj.maxlength,10)
	if (isNaN(v)) return true
	if (obj.hostValue) {
		if (obj.hostValue.length>v) return mh_Err(obj,"Campo <" + obj.nome + "> troppo lungo!") 
	} else {
		if (obj.value.length>v) return mh_Err(obj,"Campo <" + obj.nome + "> troppo lungo!") 
	}
	return true
}


function trim(s) {
	
	return s.replace(/^\s*|\s*$/g,"");
}

function mh_chkLgn() {

	var obj=event.srcElement;
	var v=trim(obj.value);
	if (v=="") return mh_StBlck(obj)
	if (v.match(/\W/g)) return mh_Err(obj,1);
	if (!(mh_lngh(obj))) return false;
	obj.value=v;
	return true
}

function mh_chkMail() {

	var obj=event.srcElement;
	var v=trim(obj.value);
	if (v=="") return mh_StBlck(obj)
	var vv=v.split("@")
	if (vv.length!=2) return mh_Err(obj,1);
	vv[0]=vv[0].split(".");
	for (i=0; i<vv[0].length; i++) {
		if (vv[0][i]=="") return mh_Err(obj,1);
		if (vv[0][i].match(/\s/g)) return mh_Err(obj,1);
	}
	vv[1]=vv[1].split(".");
	if (vv[1].length<2) return mh_Err(obj,1);
	for (i=0; i<vv[1].length; i++) {
		if (vv[1][i]=="") return mh_Err(obj,1);
		if (vv[1][i].match(/\s/g)) return mh_Err(obj,1);
	}
	if (!(mh_lngh(obj))) return false;
	return true
}

function mh_sepMil(s) {

	var n,v="";
	n=s.length%3;
	for (i=0;i<s.length;i++) {
		if (i%3==n && i!=0) v+=".";
		v+=s.substr(i,1);
	}
	return v
}
	
function mh_chkNumber() {
	
	var obj=event.srcElement;
	var v=obj.value;
	v=v.replace(/\s/g,"");
	if (v=="") return mh_StBlck(obj)
	if (!(v.match(/[0123456789.,+-]/g))) return mh_Err(obj,1);
	var fc,n,vv,s="",sv="",hv="",sd;
	fc=v.substr(0,1);
	if (fc=="+" || fc=="-") {
		if (!(obj.sgn)) return mh_Err(obj,"Segno non ammesso!")
		v=v.substr(1);
		if (fc=="-") s="-";
	}
	if (v.match(/[+-]/g)) return mh_Err(obj,1);
	vv=v.split(",");
	sd=parseInt(obj.DecDigit,10);
	if (isNaN(sd)) sd=0;
	n=vv.length;
	if (n>2) return mh_Err(obj,1);
	if (n==2) {
		n=vv[1].length;
		if (n<sd) sv=vv[1];
		else sv= vv[1].substr(0,sd);
		if (n<mhv_dbDec) hv=vv[1];
		else hv=vv[1].substr(0,mhv_dbDec);
		if (!(sv.match(/[0-9]/g))) return mh_Err(obj,1);
	}
	vv=vv[0].split(".")
	if (vv.length>1) {
		if (vv[0].length>3) return mh_Err(obj,1);
		for (i=1;i<vv.length;i++) {
			if (vv[i].length!=3) return mh_Err(obj,1);
		}
	}
	vv=vv.join("");
	if (parseFloat(vv).toString()!=vv) return mh_Err(obj,1)
	if (hv!="") obj.hostValue=s+vv+"."+hv;
	else obj.hostValue=s+vv
	if (sv=="") obj.value=s+mh_sepMil(vv)
	else obj.value=s+mh_sepMil(vv)+","+sv
}

function mh_chkPerc() {
	
	var obj=event.srcElement;
	var v=obj.value;
	v=v.replace(/\s/g,"");
	if (v=="") return mh_StBlck(obj)
	if (!(v.match(/[0123456789,+-]/g))) return mh_Err(obj,1);
	var fc,n,vv,s="",sv="",hv="",sd;
	fc=v.substr(0,1);
	if (fc=="+" || fc=="-"){
		if (!(obj.sgn)) return mh_Err(obj,"Segno non ammesso!")
		v=v.substr(1);
		if (fc=="-") s="-";
	}
	if (v.match(/[+-]/g)) return mh_Err(obj,1);
	sd=parseInt(obj.DecDigit,10)
	if (isNaN(sd)) sd=0;
	vv=v.split(",");
	n=vv.length;
	if (n>2) return mh_Err(obj,1);
	if (n==1) {
		for (i=0;i<sd;i++) sv+="0";
		for (i=0;i<mhv_dbPer;i++) hv+="0";
	}else{
		n=vv[1].length;
		if (n<sd) {
			sv=vv[1]
			for (i=n;i<sd;i++) sv+="0"
		} else sv=vv[1].substr(0,sd);
		if (n<mhv_dbDec) {
			hv=vv[1];
			for (i=n;i<mhv_dbPer;i++) hv+="0";
		} else hv=vv[1].substr(0,mhv_dbPer);
		if (!(sv.match(/[0-9]/g))) return mh_Err(obj,1);
	}
	obj.hostValue=s+vv+"."+hv;
	if (sv=="") obj.value=s+vv
	else obj.value=s+vv+","+sv
	if (!(mh_lngh(obj))) return false;
	return true
}
	
function mh_chkMoney() {
	
	var obj=event.srcElement;
	var v=obj.value;
	v=v.replace(/\s/g,"");
	if (v=="") return mh_StBlck(obj)
	if (!(v.match(/[0123456789.,+-]/g))) return mh_Err(obj,1);
	var fc,n,vv,s="",sv="",hv="",sd;
	fc=v.substr(0,1);
	if (fc=="+" || fc=="-") {
		if (!(obj.sgn)) return mh_Err(obj,"Segno non ammesso!")
		v=v.substr(1);
		if (fc=="-") s="-";
	}
	if (v.match(/[+-]/g)) return mh_Err(obj,1);
	vv=v.split(",");
	sd=parseInt(obj.DecDigit,10);
	if (isNaN(sd)) sd=0;
	n=vv.length;
	if (n>2) return mh_Err(obj,1);
	if (n==1) {
		for (i=0;i<sd;i++) sv+="0";
		for (i=0;i<mhv_dbDec;i++) hv+="0";
	} else {
		n=vv[1].length;
		if (n<sd) {
			sv=vv[1];
			for (i=n;i<sd;i++) sv+="0";
		} else sv= vv[1].substr(0,sd);
		if (n<mhv_dbDec) {
			hv=vv[1];
			for (i=n;i<mhv_dbDec;i++) hv+="0";
		} else hv=vv[1].substr(0,mhv_dbDec);
		if (sv.match(/[^0-9]/g)) return mh_Err(obj,1);
	}
	vv=vv[0].split(".")
	if (vv.length>1) {
		if (vv[0].length>3) return mh_Err(obj,1);
		for (i=1;i<vv.length;i++) {
			if (vv[i].length!=3) return mh_Err(obj,1);
		}
	}
	vv=vv.join("");
	if (parseFloat(vv).toString()!=vv) return mh_Err(obj,1)
	obj.hostValue=s+vv+"."+hv;
	if (sv=="") obj.value=s+mh_sepMil(vv)
	else obj.value=s+mh_sepMil(vv)+","+sv
	return true
}
	
function mh_chkCode() {

	var obj=event.srcElement;
	var v=obj.value;
	v=v.replace(/\s/g,"");
	if (v=="") return mh_StBlck(obj)
	if (!(v.match(/[0123456789]/g))) return mh_Err(obj,1);
	var n=parseInt(obj.nDigit,10);
	if (isNaN(n)) return mh_Err(obj,1);
	if (n==0) return mh_Err(obj,1);
	if (v.length>n) return mh_Err(obj,1);
	if (v.length==n) {obj.value=v;obj.hostValue=v;}
	else {
		var a="";
		for (i=v.length;i<n;i++) a+="0"
		obj.value=a+v;obj.hostValue=a+v;
	}
	return true
}

function mh_chkDate() {

	var obj=event.srcElement;
	var v=obj.value;
	v=v.replace(/\s/g,"");
	if (v=="") return mh_StBlck(obj)
	if (!(v.match(/[0123456789/-]/g))) return mh_Err(obj,1);
	v=v.replace(/-/g,"/");
	var vv=v.split("/");
	if (vv.length>3) return mh_Err(obj,1);
	var d=0,m=0,y=0,t="",a;
	if (vv.length==3) {d=vv[0];m=vv[1];y=vv[2];}
	else {
		if (vv.length==2) return mh_Err(obj,1);
		switch (v.length)  {
			case 3:
				d=v.substr(0,1);m=v.substr(1,1);y=v.substr(2,1);
				break;
			case 4:
				d=v.substr(0,1);m=v.substr(1,1);y=v.substr(2,2);
				break;
			case 5:
				if (parseInt(v.substr(1,2),10)<13) {d=v.substr(0,1);m=v.substr(1,2);}
				else {d=v.substr(0,2);m=v.substr(2,1);}
				y=v.substr(2,2);
				break;
			case 6:
				d=v.substr(0,2);m=v.substr(2,2);y=v.substr(4,2);
				
				break;
			case 7:
				d=v.substr(0,2);m=v.substr(2,2);y=v.substr(4,3);
				break;
			case 8:
				d=v.substr(0,2);m=v.substr(2,2);y=v.substr(4,4);
				break;
			default:
				return mh_Err(obj,1);
		}
	}
	d=parseInt(d,10);m=parseInt(m,10);y=parseInt(y,10);
	if (y<1000) y=2000+ y;
	if ((isNaN(d))||(isNaN(m))||(isNaN(y))) return mh_Err(obj,1);
	if ((m>12)||(m==0)) return mh_Err(obj,1);
	if ((d>31)||(d==0)||((d==31)&&((m==11)||(m==4)||(m==6)||(m==9)))) return mh_Err(obj,1);
	if (d<10) t="0";
	t+=d+"/";
	if (m<10) t+="0";
	t+=m+"/"+y;
	obj.value=t;
	obj.hostValue=t.substr(6,4)+t.substr(3,2)+t.substr(0,2);
	return true
}

function mh_chkTime() {

	var obj=event.srcElement;
	var v=obj.value;
	v=v.replace(/\s/g,"");
	if (v=="") return mh_StBlck(obj)
	if (!(v.match(/[0123456789:.]/g))) return mh_Err(obj,1);
	v=v.replace(/\./g,":");
	var vv=v.split(":");
	if (vv.length>3) return mh_Err(obj,1);
	var h=0,m=0,s=0,t="",a;
	if (vv.length==3) {h=vv[0];m=vv[1];s=vv[2];}
	else {
		if (vv.length==2) {h=vv[0];m=vv[1];}
		else {
			switch (v.length)  {
				case 1:
					h=v;
					break;
				case 2:
					a=parseInt(v,10);
					if (a>23) {
						if (a>59) {m=v.substr(1,1);h=v.substr(0,1);}
						else m=v
					} else h=v
					break;
				case 3:
					h=v.substr(0,1);m=v.substr(1,2);
					break;
				case 4:
					h=v.substr(0,2);m=v.substr(2,2);
					break;
				case 5:
					h=v.substr(0,1);m=v.substr(1,2);s=v.substr(3,2);
					break;
				case 6:
					h=v.substr(0,2);m=v.substr(2,2);s=v.substr(5,2);
					break;
				default:
					return mh_Err(obj,1);
			}
		}
	}
	h=parseInt(h,10);m=parseInt(m,10);s=parseInt(s,10);
	if ((isNaN(h))||(isNaN(m))||(isNaN(s))) return mh_Err(obj,1);
	if ((h>23)||(m>59)||(s)>59) return mh_Err(obj,1);
	if (h<10) t="0";
	t+=h+":";
	if (m<10) t+="0";
	t+=m+".";
	if (s<10) t+="0";
	t+=s;
	obj.value=t;
	obj.hostValue=t.replace(/[.:]/g,"");
	return true
}
	
function mh_chk() {

	var oggetto=event.srcElement
	switch (oggetto.inputType) {
		case "Data":
			return mh_chkDate()
			break;
		case "Ora":
			return mh_chkTime()
			break;
		case "Importo":
			return mh_chkMoney()
			break;
		case "Codice":
			return mh_chkCode()
			break;
		case "Numero":
			return mh_chkNumber()
			break;
		case "Perc":
			return mh_chkPerc()
			break;
		case "Lgn":
			return mh_chkLgn()
			break;
		case "Mail":
			return mh_chkMail()
			break;
		default:
			event.srcElement.value=trim(event.srcElement.value)
			break
	}
}

function mh_fcs() {

	try {
		event.srcElement.select()
	} catch(e) {}
	return
}

function mh_slct() {
	
	event.returnValue=true;
	event.cancelBubble=true;
}

function mh_dbl() {

	return true
}

		function mh_testObj(src) {
			
			var objs=src.elements;
			var n_objs=objs.length;
			for (i=0;i<n_objs;i++) {
				obj=objs(i);
				if (obj.Obl) {
					if (obj.Obl=="1") {
					v="";
					switch (obj.tagName) {
						case "INPUT":
							switch (obj.type) {
								case "text":
									if (obj.hostValue) v = obj.hostValue;
									else v = obj.value;
									break;
								case "checkbox":
									if (obj.checked) v=obj.yesValue;
									else v=obj.yesValue;
									break;
								case "radio":
									if (obj.checked) v=obj.value;
									break;
								case "file":
									v=obj.value;
									break;
							}
							break;
						case "SELECT":
							v = obj.value;
							break;
						case "TEXTAREA":
							v = obj.value;
							break;
					}
					if (v=="") return mh_Err(obj, "Il campo <" + obj.nome + "> è obbligtorio!")
				}}
			}
			return true
		}
		
		function mh_sendForm(src,dst,del) {
		
			if (!del) dst.innerHTML="";
			var objs=src.elements;
			var n_objs=objs.length;
			var k,obj,n,v;
			for (i=0;i<n_objs;i++) {
				obj = objs(i);
				n=obj.id;
				v="";
				switch (obj.tagName) {
					case "INPUT":
						switch (obj.type) {
							case "text":
								if (obj.hostValue) v = obj.hostValue;
								else v = obj.value;
								break;
							case "checkbox":
								if (obj.checked) v=obj.yesValue;
								else v=obj.noValue;
								break;
							case "radio":
								if (obj.checked) v=obj.value;
								else n="";
								break;
							case "hidden":
								v=obj.value;
								break;
							case "password":
								v=obj.value;
								break;
							case "file":
								break;
							default:
								n="";
								break;
						}
						break;
					case "SELECT":
						v = obj.value;
						break;
					case "TEXTAREA":
						v = obj.innerHTML;
						break;
				}
				if (n!="") {
					if (obj.style.fontVariant=="small-caps" || obj.className=="InpSC" || 								obj.className=="InpOblSC") v=v.toUpperCase()
					if (obj.tagName=="TEXTAREA") {
						k=dst.document.createElement("TEXTAREA")
						k.cols="70"
					} else k=dst.document.createElement("INPUT")
					k.name=n;
					k.value=v.replace(/['"]/g,"''");
					dst.insertAdjacentElement("beforeEnd",k)
				}
			}
			dst.submit();
		}
