////////////////////////////////////////////////////////////////////////////////////////////
///////////////    FUNZIONI GENERICHE PER IL CONTROLLO DI UN FORM.   ///////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
/*
-CONTROLLA SE IL CAMPO DI UNA FORM É VUOTO-
-parametri-
nomeform	il nome della form
nomecampo	il nome del campo da controllare

restituisce true se il campo é vuoto false se contiene qualcosa

esempio onclick= isnull('form1','campo1')
*/
function isNull(nomeForm,nomeCampo){
  return (eval(nomeForm+'.'+nomeCampo).value=='');
}

/*
CONTROLLA CHE UNA SELECT ABBIA UN VALORE

parametri:
nomeForm	il nome della form
nomeSel		il nome della select da controllare

restituisce true se la select NON ha un valore false se ha un valore

esempio onClick="isNullSel('form1','sel1')"
*/
function isNullSel(nomeForm,nomeSel){
	return (eval("document."+nomeForm+"."+nomeSel).options[eval("document."+nomeForm+"."+nomeSel).selectedIndex].value=='');
}
/*
CONTROLLA CHE UNA CHECKBOX SIA STATA SELEZIONATA

parametri:
nomeForm	il nome del form
nomeCheckBox	il nome della checkbox da controllare

restituisce true se la checkbox NON è selezionata false se é selezionata

esempio onClick="isNullCheck('form1','check1')"
*/
function isNullCheck(nomeForm,nomeCheckBox){
  return (!eval(nomeForm+'.'+nomeCheckBox).checked);
}
/*
CONTROLLA CHE LA LUNGHEZZA DI UN CAMPO DI UNA FORM SIA COMPRESA TRA UN VALORE MINIMO ED UN VALORE MASSIMO

parametri:
nomeform	il nome della form in cui il campo si trova
nomecampo	il nome del campo della form da controllare
minval		il valore minimo della lunghezza richiesta
maxval		il valore massimo della lunghezza accettata

restituisce true se la lunghezza é nel range  false se piú corta o piú lunga

esempio:    onclick="checklength('form1','campo1',5,10)"
*/
function checkLength(nomeForm,nomeCampo, minVal, maxVal){
  len=eval(nomeForm+'.'+nomeCampo).value.toString().length;
  return ((len>=minVal) && (len<=maxVal));
}
/*
CONTROLLA CHE IL VALORE DI 2 CAMPI DI UNA FORM SIA LO STESSO

parametri
nomeform	il nome della form in cui il campo si trova
field1		il nome del primo campo 
field2		il nome del secondo campo 

restituisce true se i campi hanno lo stesso valore false in caso contrario;

esempio		:	samevalue('form1','campo1','campo2');
*/
function sameValue(nomeForm,field1,field2){
	return (eval(nomeForm+'.'+field1).value==eval(nomeForm+'.'+field2).value);
}

/*
CONTROLLO CHE UNA MAIL INSERITA IN UN CAMPO FORM SIA CORRETTA
parametri
nomeform	il nome della form in cui il campo si trova
field		il nome del primo campo 

esempio		:	isEmail('form1','E-MAIL');
*/
function isEmail(form,field) {
  myForm= eval("document."+form)
  Ctrl = myForm.elements[field].value;
  p=Ctrl.indexOf('@');
  // l'email deve contenere il carattere @, ma non come primo o come ultimo
  if ( (p <= 1) || (p==Ctrl.length)) return (false);
  //dato che dopo il carattere @ ci possono essere n livelli di dominio analizziamo il tld da destra
  p1=Ctrl.lastIndexOf('.');
  // il punto non puo' trovarsi dopo @, o negli ultimi 2 caratteri (il TLD deve essere di almeno 2 chars)
  if ( (p1 <= p+1) || (p1>=Ctrl.length-2)) return (false);
  // il second level domain deve essere di almeno 2 caratteri
  // nota: se e' un dominio di terzo livello questo controllo non funziona
  if (Ctrl.substring(p,p1).length<3) return (false);
  return (true);
}



////////////////////////////////////////////////////////////////////////////////////////////
///////////////    				FUNZIONI GENERICHE 					 ///////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
/*
APRE UN POPUP IN UNA PAGINA CON CERTE CARATTERISTICHE

parametri
theurl		indirizzo della pagina da aprire (stringa)
winname		nome che si intende dare alla finestra (stringa)
features	scrollbars=yes,resizable=yes,status=no(stringa)
mywidth		larghezza del popup (nemurico)
myheight	altezza del popup  (nemurico)
iscenter	se lo voglio centrato oppure no (booleano 0 o 1)

esempio:
onclick="popup('add_destinazione.cfm','nomefinestra','scrollbars=yes,resizable=yes', '500', '250', 1)"			
*/
function popup(theURL,winName,features, myWidth, myHeight, isCenter) { 
if(window.screen)if(isCenter)if(isCenter==1){
    var myLeft = (screen.width-myWidth)/2;
    var myTop = (screen.height-myHeight)/2;
    features+=(features!='')?',':'';
    features+=',left='+myLeft+',top='+myTop;
  }
window.open(theURL,winName,features+((features!='')?',':'')+'width='+myWidth+',height='+myHeight);
}





////////////////////////////////////////////////////////////////////////////////////////////
///////////////    			  FUNZIONI SULLE DATE 					 ///////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
/*
CONVERTE UNA DATA IN FORMATO AMERICANO (MM/GG/YYYY) IN UNA DATA IN FORMATO EUROPEO (DD/MM/YYYY) O VICEVERSA

parametri:
date=la data da convertire
sep=il separatore della data
dateFormat=il formato della data inserita (A (americana)o E(europea))
dateTrasf=il formato che si vuole (A (americana)o E(europea))

esempio onblur="trasformDate(this.value,'/','A','E')"
*/
function trasformDate(date,sep,dateFormat,dateTrasf){
var s=date.indexOf(sep);//posizione del primo separatore
var s2=date.lastIndexOf(sep);//posizione del secondo separatore
var day=(dateFormat=="A")?date.substring(s+1,s2):date.substring(0,s);//giorni
var month=(dateFormat=="A")?date.substring(0,s):date.substring(s+1,s2);//mesi
var year=date.substring(s2+1);//anni
var newDate=(dateTrasf=="A")?month+sep+day+sep+year:day+sep+month+sep+year;//costruzione della data
return newDate;
}

/*
CONFRONTA 2 DATE E RITORNA:	 1 SE DATA1 È MAGGIORE DI DATA2 ; 
							-1 SE DATA1 È MINORE DI DATA2; 
							 0 SE LE DATE SONO UGUALI
LE DATE DEVONO ESSERE PASSATE IN FORMATO EUROPEO (GG/MM/YYYY)
RICHIEDE LA PRESENZA DELLA FUNZIONE TRASFORMDATE();
parametri:
date1	la prima data
date2	la seconda data

esempio onClick="dateCompare('22/10/1971','22/10/1972');"
*/
function dateCompare(date1,date2){
var val;
var startDate=Date.parse(trasformDate(date1,'/','E','A'));
var endDate=Date.parse(trasformDate(date2,'/','E','A'));
var num=startDate-endDate;
iOut = parseInt(num / 86400000);
if (iOut < 0)val=-1;
if (iOut > 0)val=1;
if (iOut == 0)val=0;
return val;
}


/*
EVITA CHE IN UN CAMPO FORM VENGA INSERITO UN VALORE TIPO 4.699999999999994 INVECE CHE 4.70
parametri:
nomeForm	il nome del form
nomeCampo	il nome del campo

esempio onClick="arrotonda('showProdotti','nc_speseTrasporto');"
*/
function arrotonda(nomeForm,nomeCampo){
	eval(nomeForm+'.'+nomeCampo).value=eval(Math.round(eval(nomeForm+'.'+nomeCampo).value*100)/100);
}

/*
RESTITUISCE UNA SPECIFICO TOKEN DI UNA STRINGA
SE NON VIENE TROVATO NESSUN VALORE VIENE RESTITUITO UN VALORE 'undefined'
Parametri:
stringa		la stringa in cui cercare la parte
separatore	il separatore
part		la parte di stringa che si vuole ricevere

esempio		onClick="getToken('pincopallino,marco',',',1);"
NB. in js gli indici cominciano da 0 quindi se si ricerca il primo 'token' di una stringa part=0
*/
function getToken(stringa,separatore,part){
var value;
if(!separatore)sep=",";
var m=stringa.split(separatore);
value=(!m[part])?'undefined':m[part];
return value;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////FUNZIONI INTERNE///////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////


function checkDay(checkYear, checkMonth, checkDay) {
  // controlla se il numero di giorni nella data e' valido
	maxDay = 31;
	if (checkMonth == 4 || checkMonth == 6 || checkMonth == 9 || checkMonth == 11)	maxDay = 30;
	else 
    if (checkMonth == 2) {
		  if (checkYear % 4 > 0)	maxDay =28;
		  else 
        if (checkYear % 100 == 0 && checkYear % 400 > 0) maxDay = 28;
		    else maxDay = 29;
	  }
	return checkRange(checkDay, 1, maxDay); 
}

function checkInteger(object_value) {
  // true se e'un intero
  if (object_value.length == 0) return true;
  //   il numero puo' avere un + o un - iniziali poi solo i caratteri 0-9.
  var decimal_format = ".";
  var check_char;
  //il primo carattere puo' essere + -  blank o una cifra.
  check_char = object_value.indexOf(decimal_format)
  //era un decimale?
  if (check_char < 1) return checkNumber(object_value);
  else return false;
}

function numberRange(object_value, min_value, max_value)  {
  // usata internamente vedi checkRange
  // check minimo
  if (min_value != null){
      if (object_value < min_value)
      return false;
  }

  // check massimo
  if (max_value != null){
    if (object_value > max_value)
    return false;
  }

  //tutto ok
  return true;
}


function checkNumber(object_value) {
  //true se e' un float

  if (object_value.length == 0) return true;

  //Returns true if value is a number defined as
  //   having an optional leading + or -.
  //   having at most 1 decimal point.
  //   otherwise containing only the characters 0-9.
	var start_format = " .+-0123456789";
	var number_format = " .0123456789";
	var check_char;
	var decimal = false;
	var trailing_blank = false;
	var digits = false;

  //The first character can be + - .  blank or a digit.
	check_char = start_format.indexOf(object_value.charAt(0))
  //Was it a decimal?
	if (check_char == 1) decimal = true;
	else if (check_char < 1) return false;
        
	//Remaining characters can be only . or a digit, but only one decimal.
	for (var i = 1; i < object_value.length; i++)	{
		check_char = number_format.indexOf(object_value.charAt(i))
		if (check_char < 0) return false;
		else if (check_char == 1)	{
      // Second decimal.
			if (decimal) return false;
			else decimal = true;
		}
		else if (check_char == 0)	{
			if (decimal || digits)	
				trailing_blank = true;
        // ignore leading blanks
		}
    else if (trailing_blank) return false;
		else digits = true;
	}	
    //tutto OK
    return true
}



function checkRange(object_value, min_value, max_value)  {
  //true se il valore e' nel range indicato
  if (object_value.length == 0) return true;

  if (!checkNumber(object_value))	{ return false; }
  else	{	return (numberRange((eval(object_value)), min_value, max_value));}
  //tutto OK
  return true;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////FINE FUNZIONI INTERNE//////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////