function Formatta_Num(val, dec, sep){
	//val = valore.value;
	val = replaceAll(val.toString(), '.', '');
	val = val.replace(',', '.');
	var segno = "";
	if (val.indexOf("-") > -1) {
		segno = "-";
	}
	if ((isNaN(val)) || (val.length == 0) || (val.substring(0, 1) == ",")) {
		val = 0;
	} else {
		s_val = new String(val);
		RE = /[^\d|\.,]/gi
		s_val = s_val.replace(RE,"");
		//RE = /\./gi;
		s_val = s_val.replace(RE,"");
		s_val = s_val.replace("\,","\.");
		a_val = s_val.split(".");
		intero=a_val[0];
		l_val = intero.length;
		var i = 3;
		while (l_val - 3 > 0){ 
			var l_val1 = intero.length; 
			var s1 = intero.slice( l_val1 - i , l_val1 ); 
			var s2 = intero.slice(0 , l_val1 - i ); 
			intero = s2+"."+s1; 
			i = i +4; 
			l_val = l_val - 3; 
		} 
		if(a_val.length>1) {
			s1 = String(a_val[1])
			while (s1.length<dec) {
				s1 = s1+"0";
			}
		} else { 
			s1 = "";
            while (s1.length<dec) {
				s1 = s1+"0";
			}
		}
		val = segno + intero + sep + s1.substr(0, dec);
	}
	return val;
} 

function replaceAll(entry, out, add) {
	while (entry.indexOf(out)>-1) {
		pos= entry.indexOf(out);
		entry = "" + (entry.substring(0, pos) + add + 
		entry.substring((pos + out.length), entry.length));
	}
	return entry;
}

function executeOp(valore1, valore2, op, ndec) {
	var valore;
	
	var inizio = valore1.toString().indexOf(',');
	var fine = valore1.toString().substring(inizio);

	if (inizio > -1) {
		valore1 = valore1.substring(0, inizio);
		valore1 = replaceAll(valore1, ".", "");
		valore1 = valore1 + fine;
		valore1 = replaceAll(valore1, ",", ".");
	}
	
	inizio = valore2.indexOf(',');
	var fine = valore2.substring(inizio);

	if (inizio > -1) {
		valore2 = valore2.substring(0, inizio);
		valore2 = replaceAll(valore2, ".", "");
		valore2 = valore2 + fine;
		valore2 = replaceAll(valore2, ",", ".");
	}
	
	if (valore1.length == 0) valore1 = "0";
	if (valore2.length == 0) valore2 = "0";

	switch(op){
			case '+':
				valore = (parseFloat(valore1) + parseFloat(valore2)).toFixed(ndec);
				break;
			case '-':
				valore = (parseFloat(valore1) - parseFloat(valore2)).toFixed(ndec);
				break;
			case '/':
				valore = (parseFloat(valore1) / parseFloat(valore2)).toFixed(ndec);
				break;
			case '*':
				valore = (parseFloat(valore1) * parseFloat(valore2)).toFixed(ndec);
				break;
		}
	
	valore = valore.toString().replace('.', ',');
	//valore = Formatta_Num(valore, 2, ",");
	
	return valore;
}

function invalidateLetters(campo){
    var campoValue = document.getElementById(campo).value;
    var campoObj = document.getElementById(campo);
    if(isNaN(campoValue)){
        document.getElementById(campo).value='';
    }
}

// controllo email

function checkEmail(addressField){
    if(addressField.value!=''){
        if(!checkValidation(addressField)){
            alert('Attenzione : indirizzo email non valido');
            document.getElementById(addressField.id).value = ''
            return false;
        }
        return true;
    }
    return false;
}

function checkValidation ( addressField ) {
    if ( stringEmpty ( addressField.value ) )
        return ( false );
    else if ( noAtSign ( addressField.value ) )
        return ( false );
    else if ( nothingBeforeAt ( addressField.value ) )
        return ( false );
    else if ( noLeftBracket ( addressField.value ) )
        return ( false );
    else if ( noRightBracket ( addressField.value ) )
        return ( false );
    else if ( noValidPeriod ( addressField.value ) )
        return ( false );
    else if ( noValidSuffix ( addressField.value ) )
        return ( false );
    else
        return (true);

    //return ( false );
}

function linkCheckValidation ( formField ) {
    if ( checkValidation ( formField ) == true ) {
        alert ( 'E-Mail Address Validates OK' );
    }

    return ( false );
}

function stringEmpty ( address ) {
    // CHECK THAT THE STRING IS NOT EMPTY
    if ( address.length < 1 ) {
        return ( true );
    } else {
        return ( false );
    }
}

function noAtSign ( address ) {
    // CHECK THAT THERE IS AN '@' CHARACTER IN THE STRING
    if ( address.indexOf ( '@', 0 ) == -1 ) {
        return ( true )
    } else {
        return ( false );
    }
}

function nothingBeforeAt ( address ) {
    // CHECK THERE IS AT LEAST ONE CHARACTER BEFORE THE '@' CHARACTER
    if ( address.indexOf ( '@', 0 ) < 1 ) {
        return ( true )
    } else {
        return ( false );
    }
}

function noLeftBracket ( address ) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN CHECK FOR LEFT BRACKET
    if ( address.indexOf ( '[', 0 ) == -1 && address.charAt ( address.length - 1 ) == ']' ) {
        return ( true )
    } else {
        return ( false );
    }
}

function noRightBracket ( address ) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN CHECK FOR RIGHT BRACKET
    if ( address.indexOf ( '[', 0 ) > -1 && address.charAt ( address.length - 1 ) != ']' ) {
        return ( true );
    } else {
        return ( false );
    }
}

function noValidPeriod ( address ) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
    if ( address.indexOf ( '@', 0 ) > 1 && address.charAt ( address.length - 1 ) == ']' )
        return ( false );

    // CHECK THAT THERE IS AT LEAST ONE PERIOD IN THE STRING
    if ( address.indexOf ( '.', 0 ) == -1 )
        return ( true );

    return ( false );
}

function noValidSuffix ( address ) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
    if ( address.indexOf ( '@', 0 ) > 1 && address.charAt ( address.length - 1 ) == ']' )
        return ( false );

    // CHECK THAT THERE IS A TWO OR THREE CHARACTER SUFFIX AFTER THE LAST PERIOD
    var len = address.length;
    var pos = address.lastIndexOf ( '.', len - 1 ) + 1;
    if ( ( len - pos ) < 2 || ( len - pos ) > 3 ) {
        return ( true );
    } else {
        return ( false );
    }
}

//campi obbligatori form
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.title; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
      } else if (test!='R') { num = parseFloat(val);
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+'\n'; }
  } if (errors) alert('I seguenti campi sono obbligatori:\n\n'+errors);
  document.MM_returnValue = (errors == '');
}