function trim(str)
{ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }

function checkField(fld)
{
// funz.ausiliaria per notNull
var ret=0;
if (!fld.type && fld.length) 
	{
	for (var i=0; i<fld.length; i++) ret+=checkField(fld[i]); 
	return ret;
	}
if (fld.type.indexOf('text')>-1 || fld.type=='password' || fld.type=='hidden' || fld.type=='file')
	{ return (fld.value!='')? 1 : 0;  }
if (fld.type.indexOf('select')>-1)
	{
    var n=(fld.type=='select-multiple')? 0 : 1;
	return (fld.selectedIndex>=n)? 1: 0; 
	}
if (fld.type=='checkbox')
    { return (fld.checked)? 1: 0; }	
}

function notNull()
{
// vrs. 5.5 15-6-07 con tre varianti;
// 1: nessun argomento, vengono presi tutti i nomi dei campi del form;
// 2: sequenza di argomenti stringa, vengono presi solo i campi indicati col loro ID;
// 3: un solo oggetto {name:'testo', name:'testo'...}: coppie di proprietà con NAME del campo e testo descrittivo
//if (nome) nome=nome.replace(/\[|\]/gi,"");
errors=new Array();  n=0; 
switch (arguments.length)
	{
	case 0:		
    for (var i in document.forms[0].elements)
        { 
		fld=document.forms[0].elements[i]; 
		if (!checkField(fld)) errors[n++]=fld.name; 
		}
	break;
	
	case 1:
	if (typeof arguments[0]=='object')
		{
		for (var i in arguments[0])
    	    { 
			fld=document.forms[0].elements[i]; 
			if (!checkField(fld)) errors[n++]=arguments[0][i]; 
			}
		}
	else 		
		{
		fld=document.getElementById(arguments[0]); 
		if (!checkField(fld)) errors[n++]=arguments[0];
		}
	break;
	
	default:
    for (var i=0; i<arguments.length; i++)
		{ 
		fld=document.getElementById(arguments[i]); 
		if (!checkField(fld)) errors[n++]=arguments[i];
		}
	}

if (errors.length)
	{
	if (!window.reqAlert) reqAlert="Campi richiesti: ";
	alert (reqAlert+errors.join(', '));
	return false;
	}
else return true;	
}

function MaxLen(c,n)
{
if (c.value.length>n)
	{ 
	if (!window.maxlenAlert) maxlenAlert="Max. num. di caratteri: ";
	alert(maxlenAlert+n);
	c.value=c.value.substring(0,n);
	return false;
	}
else return true;	
}

function MinLen(c,n)
{
if (c.value.length<n)
	{ 
	if (!window.minlenAlert) minlenAlert="Campo incompleto: ";
	alert(minlenAlert+c.id);
	return false;
	}
else return true;	
}

function IsNum(v)
{ 
if (v.value && isNaN(v.value))
	{
	if (!window.numAlert) numAlert="Inserire solo numeri";
	alert(numAlert);
	v.value="";
	return false;
	}
else return true;
}

function IsTime(c)
{
if (c.value=="") return;     
c.value=c.value.replace("\.",":");
re = /^(\d{1,2}):(\d{1,2})$/;
tokens=c.value.match(re);
if (!tokens || tokens.length<3)
	{
	if (!window.timeAlert) timeAlert="Ora errata o incompleta.\nInserire orari in un formato standard.";
	alert(timeAlert);
	c.value=""; return false;
	}
else return true;	
}

function IsDate(c,n)
{
valore=c.value;
if (n==4) re = /(\d{1,2})[-\.\/](\d{1,2})[-\.\/](\d{4})/;
else re = /(\d{1,2})[-\.\/](\d{1,2})[-\.\/](\d{2,4})/;
tokens=valore.match(re);
if (!tokens || tokens.length<4)
	{
	if (!window.dateAlert) dateAlert="Data errata o incompleta.\nInserire date in un formato standard";
	if (n==4) dateAlert+=" (gg/mm/aaaa)";
	alert(dateAlert); c.value=""; return false;
	}
else return true;
}

function IsDateTime(c)
{
valore=c.value;
elems=valore.split(/\s+/);
c.value=elems[0];
if (!IsDate(c)) elems[0]="";
c.value=elems[1];
if (!IsTime(c)) elems[1]="";
c.value=elems.join(' ');
}

function Comma2Dot(c)
{
re=/,/;
c.value=c.value.replace(re,".");
return IsNum(c);
}

function IsInt(c)
{
if (IsNum(c)) { c.value=parseInt(c.value*1); return true; }
else return false;
}

function Between(v,min,max)
{
if (v.value=="") return;        
if (IsNum(v) && (parseInt(v.value)<min || parseInt(v.value)>max))
	{
	if (!window.limitAlert) limitAlert="Dato errato. Deve essere compreso tra i seguenti valori: ";
	alert(limitAlert+min+" - "+max);
	v.value=min;
	return false;
	}
else return true;
}

function IsEmail(c)
{
if (c.value=="") return;  
c.value=trim(c.value.toLowerCase());
mails=c.value.split(/, +/);
err=0;
for (i=mails.length-1; i>=0; i--)
  {
  var rex=new RegExp("^[\\w\\.=-]+@[\\w\\.-]+\\.[a-z]{2,4}$");
  if (!rex.test(mails[i]))
    { err=1; for (j=i; j<mails.length; j++) mails[j]=mails[j+1]; mails.length--; }
  }
if (err)
  {
  if (!window.emailAlert) emailAlert='Indirizzo e-mail non valido';
  alert(emailAlert);
  c.value=mails.join(", ");
  }
}

function IsWeb(c)
{
if (c.value=="") return;    
var rex=new RegExp("^https?://[\\w.]+$","i");
if (!rex.test(c.value))
	{
	if (!window.webAlert) webAlert='Indirizzo web non valido';
	alert(webAlert);
	c.value="";
	}
}

function IsCF(c)
{
if (c.value=="") return;    
c.value=c.value.toUpperCase();
var rex=new RegExp("^[A-Z]{6}\\d{2}[A-Z]\\d{2}[A-Z]\\d{3}[A-Z]$");
if (!rex.test(c.value))
	{
	if (!window.cfAlert) cfAlert='Codice fiscale non valido';
	alert(cfAlert);
	c.value="";
	}
}

function SetDate(id)
{
items=new Array("A","M","G");
f=document.forms[0];
data=f.elements["Data"+id]
data.value="";
ok=true;
for (var i in items)
	{
	x=f.elements[items[i]+id].value;
	if (x) data.value+=x+"-"
	else ok=false;
	}
if (!ok) data.value="";
else data.value=data.value.substring(0,data.value.length-1);
}

function SetUsrPwd(f)
{
var re=new RegExp("/s| ","g");
if (f.Cognome) { nome=f.Nome.value; cog=f.Cognome.value; }
else { val=f.Nome.value.split(' '); nome=val[0]; cog=val[1]; }
if (f.user.value=="")  {
    f.user.value=(cog.substring(0,6)).toLowerCase();
    f.user.value=f.user.value.replace(re, "");
    }
if (f.pwd.value=="")  {
    f.pwd.value=(nome.toLowerCase()).substring(0,3)+Math.round(Math.random()*999);
    f.pwd.value=f.pwd.value.replace(re, "");
	}
}

function Capitalize(fld,each)
{ 
if (fld.type.indexOf('text')==0) { isfld=1; x=fld.value; }
else isfld=0;	
if (each)
	{
	var parts=new Array("il","lo","la","gli","le","al","allo","alla","ai","agli","alle",
		"di","del","dello","della","dei","degli","delle","da","dal","dallo","dalla","dai",
		"dagli","dalle","in","nel","nello","nella","nei","negli","nelle","con","col","coi","cogli",
		"sul","sullo","sulla","sui","sugli","sulle","per","tra","fra","e","ed","qui","qua","là", "lì",
		"o","anche","né", "ma","ii","iii","iv","vi","vii","viii","ix","xi","xii");
	str="";
	var elems=(x.toLowerCase()).split(/\s/);
	for (j=0; j<elems.length; j++) 
		{
		var items=elems[j].split(/'/);	
		for (i=0; i<items.length; i++)
			{
			ok=1;	
			str+=(i>0)? "'" : " ";
			if (i==0 && items.length==2) ok=0;
			else if (items[i].length==1) ok=0;
			else 
				{
				for (k=0; k<parts.length; k++) { if (parts[k]==items[i]) ok=0; }
				}
			if (ok) str += items[i].substring(0,1).toUpperCase() + 
				items[i].substring(1,items[i].length).toLowerCase();
			else str+=items[i];
			}
		}
	if (isfld) fld.value=str.substr(1);
	else return str.substr(1);
	}
else 
	{
	ret=x.substring(0,1).toUpperCase()+x.substring(1,x.length).toLowerCase(); 
	if (isfld) fld.value=ret;
	else return ret;
	}
}

function digitOnly(c)
{ c.value=c.value.replace(/\D/g,''); }

function noApex(c,ap)
{ 
if (ap) c.value=c.value.replace(/"/g,"'"); 
else c.value=c.value.replace(/'|"/g,''); 
}

