// JavaScript Document
/*
LINK srl: 25/05/2005 - util.js - procedure e funzioni di utilità 
elenco stringhe: formatta, trimLeadingBlanksCrLf, cambiaCar, blanksToblank, LtrimBlanks, replaceCar
elenco campi form per data: getDateDiff, checkdate, chkdate, LeapYear
elenco: verifica_richiesta
*/
/* funzione che formatta un campo di testo togliendo gli spazi bianchi e CrLf all'inizio e alla fine
e sostituendo più spazi bianchi con un solo spazio bianco */
function formatta (f,flag) {
     trimLeadingBlanksCrLf(f);
     blanksToblank(f);
	 cambiaCar(f);
	 if (flag && (f.value.length > 0)) f.value=f.value.charAt(0).toUpperCase()+f.value.slice(1)
}
   
//funzione che toglie gli spazi bianchi e gli CrLf all'inizio e alla fine di un campo di testo
function trimLeadingBlanksCrLf(f) {
//toglie i blank e i CrLf all'inizio
    var i, carat;
    if (f.value.length > 0) {
	   for (i=0; i < f.value.length; i++) {
		   carat=f.value.charAt(i);
		   if ((carat != ' ') && (carat != '\r') && (carat != '\n') && (carat != '\t')) {
			   f.value=f.value.slice(i);
		       break
		   }
	   }
	   if (i==f.value.length) f.value='';
	}
//toglie i blank e CrLf alla fine
    if (f.value.length > 0) {
	   for (i=f.value.length-1; i > -1; i--) {
		   carat=f.value.charAt(i);
		   if ((carat != ' ') && (carat != '\r') && (carat != '\n') && (carat != '\t')) {
			   f.value=f.value.slice(0,i+1);
		       break
		   }
	   }
	}
}

//funzione che sostituisce gli spazi bianchi e CrLf con uno spazio bianco
function cambiaCar(f)
  {
    if (f.value.length > 0) {
       f.value=replaceCar(f.value,'‘','\'');
	   f.value=replaceCar(f.value,'’','\'');
       f.value=replaceCar(f.value,'“','"');
	   f.value=replaceCar(f.value,'”','"');
    }
}

//funzione che sostituisci più spazi bianchi con uno spazio bianco
function blanksToblank(f){
	var firstBlank, lastBlank, newstr, tmpstr, iBlank;
    if (f.value.length > 0) {
       firstBlank = f.value.indexOf(' ');
       lastBlank = f.value.lastIndexOf(' ');
       if (firstBlank < lastBlank) {
          newstr = '';
     	  tmpstr = f.value;
          iBlank = firstBlank;
     	  while (iBlank > 0) { 
     	        newstr = newstr + tmpstr.substring(0,iBlank);
     	        tmpstr = LtrimBlanks(tmpstr.substring(iBlank,tmpstr.length));
     	        newstr = newstr + ' ';
     	        iBlank = tmpstr.indexOf(' ');
     	  }
          newstr = newstr + tmpstr;
          f.value = newstr
       }
    }
  }

//funzione che toglie gli spazi bianchi all'inizio di una stringa
function LtrimBlanks(str) {
//toglie i blank
    var carat;
    if (str.length > 0) {
       carat=str.charAt(0);	
       while (carat == ' ' ) {

             str = str.substring(1,str.length);	
             carat = str.charAt(0)
       }
    }
   return str
}
    
function replaceCar(str,oldCar,newCar) {
   var iCar, firstCar, lastCar, tmpnewstr, tmpstr, carat;
   firstCar = str.indexOf(oldCar);
   lastCar = str.lastIndexOf(oldCar);
   if (firstCar <= lastCar)
   {
      tmpnewstr = '';
      tmpstr = str;
      iCar = firstCar;
      while (iCar >= 0)
      { 
     	 tmpnewstr = tmpnewstr + tmpstr.substring(0,iCar) + newCar;
     	 if (tmpstr.charAt(iCar+1) == '\n')
     	 {
     	    tmpstr = tmpstr.substring(iCar+2,tmpstr.length)
     	 }
     	 else
     	 {
     	    tmpstr = tmpstr.substring(iCar+1,tmpstr.length)
         }
     	 iCar = tmpstr.indexOf(oldCar);
      }
      return tmpnewstr + tmpstr
    }
    return str
}

// FINE FUNZIONI che operano su stringhe


// INIZIO - funzioni per gestire le date

// funzione che calcola e riporta la differenza fra due date
function GetDateDiff(date1,date2) {
    var v_data1=date1.split('/');
    var v_data2=date2.split('/');
    date1_ms=new Date(Date.UTC(v_data1[2],v_data1[1]-1,v_data1[0]));
    date2_ms=new Date(Date.UTC(v_data2[2],v_data2[1]-1,v_data2[0]));
    var result=parseInt(date1_ms.getTime() - date2_ms.getTime());
    result=(result/1000)/60/60/24;
    return result
}

// funzione che riporta messaggio d'errore se la data immessa non è rappresentata in un formato valido
function checkdate(objName) {
  if (objName.value.length > 0) {
     if (!chkdate(objName)) {
         alert('please insert the birth date as DD/MM/YYYY');
         objName.focus();
         return false
     }
  }
  return true
}

// funzione che verifica la validità della data immessa
function chkdate(objName) {
    var strDate;
    var strDateArray;
    var strDay = '';
    var strMonth = '';
    var strYear = '';
    var intday;
    var intMonth;
    var intYear;
    var booFound = false;
    var strSeparatorArray = new Array("-","/",".");
    var intElementNr;
    var err = 0;
    strDate = objName.value;
    if (strDate.length < 1) {
        return true
    }
    for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
       if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
           strDateArray = strDate.split(strSeparatorArray[intElementNr]);
           if (strDateArray.length != 3) {
               err = 1;
               return false
           }
           else {
               strDay = strDateArray[0];
               strMonth = strDateArray[1];
               strYear = strDateArray[2];
           }
           booFound = true
       }
    }
    if (booFound == false) {
        if (strDate.length>5) {
            strDay = strDate.substr(0, 2);
            strMonth = strDate.substr(2, 2);
            strYear = strDate.substr(4);
        }
    }
    if (strYear.length == 2) {
        strYear = '20' + strYear;
    }
	if (strYear.length != 4) {
        return false
    }

	
    intday = parseInt(strDay, 10);
    if (isNaN(intday)) {
        err = 2;
        return false;
    }
    intMonth = parseInt(strMonth, 10);
    if (isNaN(intMonth)) {
        err = 3;
        return false;
    }
    intYear = parseInt(strYear, 10);
    if (isNaN(intYear)) {
        err = 4;
        return false;
    }
    if (intMonth>12 || intMonth<1) {
        err = 5;
        return false;
    }
    if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
         err = 6;
         return false;
    }
    if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
        err = 7;
        return false;
    }
    if (intMonth == 2) {
        if (intday < 1) {
            err = 8;
            return false;
        }
        if (LeapYear(intYear) == true) {
            if (intday > 29) {
                err = 9;
                return false;
            }
        }
        else {
            if (intday > 28) {
                err = 10;
                return false;
            }
        }
    }
    objName.value = intday + "/" + intMonth + "/" + intYear;
    return true;
  }

function LeapYear(intYear) {
  if (intYear % 100 == 0) {
      if (intYear % 400 == 0) { return true; }
  }
  else {
      if ((intYear % 4) == 0) { return true; }
  }
  return false;
}

function validaEmail(f)
{
  if (f.value.length > 0)
  {     
   var checkOK = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒšœŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ0123456789-@_.';
   var checkStr = f.value;
   var allValid = false;
   for (i = 0;  i < checkStr.length;  i++)
  {
      allValid = false;
      ch = checkStr.charAt(i);
      for (j = 0; j < checkOK.length; j++)
      {
          if (ch == checkOK.charAt(j))
          {
             allValid=true;
             break
          }   
      }      
      if (!allValid)
      {
         alert('please insert a valid e-mail address');
         f.focus();    
         return false
      }
  }
  
  var badValue = 1;
  var posI = checkStr.indexOf('\@');
  var posF = checkStr.lastIndexOf('\@');
  if (posI > -1)
  {
     if (posI > 0)
     {
         if (posF < checkStr.length - 1)
	 {
	     if (posI >= posF)
	         badValue = 0
	     else
		 alert('please insert a valid e-mail address')
	 }
	 else
	    alert('please insert a valid e-mail address')
     }
     else
	alert('please insert a valid e-mail address')
  }
  else
     alert('please insert a valid e-mail address')
  
  if (badValue)
  {
     f.focus(); 
     return false
  }
    
  var badValue = 1;
  var pospI = checkStr.indexOf('\.');
  var pospF = checkStr.lastIndexOf('\.');
  if (pospI > -1)
  {
      if (pospI < posI & pospF < posI)
          alert('please insert a valid e-mail address')
      else
      {
	  if (pospF == checkStr.length-1)
              alert ('please insert a valid e-mail address')    	
          else
	      badValue = 0
	  }
  }
  else
     alert('please insert a valid e-mail address')
  if (badValue)
  {
      f.focus();
      return false
  }
}
return true
}

// FINE - funzioni per gestire le date

function verifica_richiesta(f,ff,flag) {
   var msg,posMouse;
   if (flag) {
      if (f.DATA_NASCITA.value.length > 0) {
         if (!chkdate(f.DATA_NASCITA)) {
            alert('please insert the birth date as dd/mm/yyyy');
            f.DATA_NASCITA.focus();
            return false
	      }
      }
   }
   if (!validaEmail(f.EMAIL)) return false
   msg='';
   posMouse=-1;
   for(var i=0; i < ff.length; i++) {
	   if (f.elements[ff[i][0]].type != 'text') {
		   if (isNaN(f.elements[ff[i][0]].length)) {
			   if (!f.elements[ff[i][0]].checked) {
				   msg=msg + ff[i][1] +' required\r\n';
		           if (posMouse < 0) posMouse=i
			   }
		   }
		   else {
			   var check=false;
			   for (var j=0; j < f.elements[ff[i][0]].length; j++) {
				   if (f.elements[ff[i][0]][j].checked) {
					   check=true;
					   break
				   }
			   }
			   if (!check) {
				   msg=msg + ff[i][1] +' required\r\n';
		           if (posMouse < 0) posMouse=i
			   }
		   }
	   }
	   else {
          if (f.elements[ff[i][0]].value.length == 0) {
             msg=msg + ff[i][1] +' required\r\n';
		     if (posMouse < 0) posMouse=i
          }
	   }
   }
  if (posMouse > -1) {
	   alert(msg);
	   if (f.elements[ff[posMouse][0]].type == 'text') f.elements[ff[posMouse][0]].focus();
	   return false
   }
   return true 
}

//funzione che assegna ad una variabile globale l'indice del radio button selezionato nell'ambito di un insieme
function as_gg(f) {
   if (isNaN(f.length)) {
      if (f.checked) {
	      return 0
	  }
   }
   else {
	  for (var j=0; j<f.length; j++) {
	      if (f[j].checked) {
	         return j
		  }
	  }
  }
  return -1
}

function disabilita(f,t) {	
	if (isNaN(f.length)) {
		if ((f.checked) && (t==radio_index)) f.checked=!f.checked
	}
    else {
	   for (var j=0; j<f.length; j++) {
		    if ((f[j].checked) && (t==radio_index)) {
			       f[j].checked=!f[j].checked;
			       break
		    }
	   }
	}
}

function attiva(v) {
  var a, d, i, l, j;
  document.modulo.reset();
  document.modulo.T[v].checked=!document.modulo.T[v].checked;
  if (v==0) {
      a='M';
	  d='NM'
  }
  else {
      a='NM';
	  d='M'
  }
  for (i=0; i < n_e; i++) {
    l=document.modulo.elements[a+i].length;
	if (isNaN(l)) l=1
    for (j=0; j < l; j++) {
         document.getElementById(a+i+j).disabled=''; 
		 document.getElementById(d+i+j).disabled='disabled'; 
         document.getElementById(a+i+j).style.display='inline'; 
		 document.getElementById(d+i+j).style.display='none'
     }
   }
   document.modulo.elements[d].value=''
}

function calcola() {
  var calcolo, i, a, e, re, ok;
  ok=0;
  
  if (calcola.arguments.length == 1) {
	  calcolo=calcola.arguments[0];
      ok = 1;
  }
  else {
	  calcolo=0.00;
	  ok = 0;
  }
  if (document.modulo.T[0].checked) a='M'
  else a='NM'

  for (i=0; i<n_e; i++) {
       l=document.modulo.elements[a+i].length;
	   if (isNaN(l)) {
		   e=document.modulo.elements[a+i].value.split('|');
	       if (document.modulo.elements[a+i].checked) {
			   ok++;
			   calcolo+=parseFloat(e[2])
		   }
       }
	   else {
	     for (j=0; j < l; j++) {	 
	       if (document.modulo.elements[a+i][j].checked) {
			  ok++;
			  e=document.modulo.elements[a+i][j].value.split('|');
		      calcolo+=parseFloat(e[2])
		   }
	     }
	  }
  } 
  e=parseFloat(parseInt( (calcolo)*1000+0.5)/1000)
  /*if (parseInt(e) == 0)  document.modulo.elements[a].value='';
	  for (x=0; x<force.length; x++) {
         
		  
	  }  
  }
  else {*/
     e=String(e)
     if (e.indexOf('.') == -1) e+=',00'
     else {
        e=e.replace('.',',')
	    if ((e.length-e.indexOf(',')-1) == 1) e+='0'
     }
	 if (ok == 0) e=''
	 document.modulo.elements[a].value=e
  //}
 
}

function verifica_evento(f) {
	if ((f.M.value.length == 0) && (f.NM.value.length == 0)) {
		alert('please select at least one item!');
		return false
	}
	return true
}

var radio_index=-1;

