function calcolaintervento() {
 ore = parseInt(document.richiesta.durata.value);
 s = document.richiesta.Data.value;
 i = s.indexOf('/');
 giorno = s.substring(0,i); 
 s = s.substring(i+1);
 i = s.indexOf('/');
 mese = s.substring(0,i); 
 anno = s.substring(i+1);
 s = document.richiesta.Ora.value;
 i = s.indexOf(':');
 if (i < 0) i = s.length;
 ora = s.substring(0,i); 
 s = s.substring(i+1);
 dataInizio = new Date(anno,mese-1,giorno,ora,s);
 dataFine = new Date(dataInizio.getTime() + ore * 3600000);
 startA = new Date(anno,mese-1,giorno,start1.getHours(),start1.getMinutes());
 endA = new Date(anno,mese-1,giorno,end1.getHours(),end1.getMinutes());
 startB = new Date(anno,mese-1,giorno,start2.getHours(),start2.getMinutes());
 endB = new Date(anno,mese-1,giorno,end2.getHours(),end2.getMinutes());
 orefuoriorario = 0;
 aperturachiusura = false;
 if (startA.getTime() > dataInizio.getTime()) {
  orefuoriorario = orefuoriorario + (startA.getTime() - dataInizio.getTime());
  aperturachiusura = true;
 }
 if (startA.getTime() > dataFine.getTime())
  orefuoriorario = orefuoriorario - (startA.getTime() - dataFine.getTime());
 if ((dataInizio.getTime() < endA.getTime()) && (dataFine.getTime() > endA.getTime()))
  orefuoriorario = orefuoriorario + (dataFine.getTime() - endA.getTime());
 if ((startB.getTime() < dataFine.getTime()) && (dataInizio.getTime() < startB.getTime()))
  orefuoriorario = orefuoriorario - (dataFine.getTime() - startB.getTime());
 if ((startB.getTime() > dataInizio.getTime()) && (dataInizio.getTime() > endA.getTime()))
  orefuoriorario = orefuoriorario + (dataFine.getTime() - dataInizio.getTime());
 if (endB.getTime() < dataFine.getTime()) {
  orefuoriorario = orefuoriorario + (dataFine.getTime() - endB.getTime());
  aperturachiusura = true;
 }
 if (dataInizio.getTime() > endB.getTime()) {
  orefuoriorario = orefuoriorario - (dataInizio.getTime() - endB.getTime());
  aperturachiusura = true;
 } 
 orefuoriorario = orefuoriorario / 3600000;
 festivo = (dataInizio.getDay() == 0) || ((aperturachiusura = true) && (orefuoriorario*100/ore > psupfestivo));
 if ((dataInizio.getDay() == giornochiusura) || (festivo == true))
  orefuoriorario = ore;
 fuoriorario = ((orefuoriorario > 0) || (festivo == true));
 document.richiesta.Festivo.checked = festivo;
 document.richiesta.FuoriOrario.checked = fuoriorario;
 if (document.richiesta.Tipo[0].checked == true) {
  costo = costoremoto;
 }
 else {
  costo = costoassistenza;
 }
// orefuoriorario = ore;
 if (document.richiesta.cliente.checked == true) {
  s = '&nbsp;(per Cliente)';
 }
 else {
  s = '';
  costo = costo + costo * pnoncliente / 100;
 }
 totalecosto = costo * ore;
 km = 0;
 if (document.richiesta.Tipo[2].checked == true) {
  km = parseInt(document.richiesta.chilometri.value);
 }
 if (km > 0) {
  km = km;
 }
 else {
  km = 0;
 }
 totalekm = arrotonda(costokm * km);
// if (document.richiesta.FuoriOrario.checked == true)
//  orefuoriorario = ore; 
// else orefuoriorario = 0;
 costofuoriorario = costo * orefuoriorario * pfuoriorario / 100;
 if (document.richiesta.Festivo.checked == true)
  costofestivo = totalecosto * pfestivo / 100; 
 else costofestivo = 0;
 imponibile = arrotonda(totalecosto + costofuoriorario + costofestivo + totalekm);
 imposta = arrotonda(imponibile * 20 / 100);
 totale = arrotonda(imponibile + imposta);
 document.richiesta.costoorarioh.value = costo;
 document.richiesta.tempofuoriorarioh.value = orefuoriorario;
 document.richiesta.totaleh.value = totale;
 if (document.all) {
  document.all.TipoCosto.innerHTML=s;
  document.all.CostoOrario.innerHTML=decimali(costo);
  document.all.NumOre.innerHTML=String(ore);
  document.all.TotaleOrario.innerHTML=decimali(totalecosto);
  document.all.TotaleFuoriOrario.innerHTML=decimali(costofuoriorario);
  document.all.TotaleFestivo.innerHTML=decimali(costofestivo);
  document.all.TotaleKm.innerHTML=decimali(totalekm);
  document.all.Imponibile.innerHTML=decimali(imponibile);
  document.all.Imposta.innerHTML=decimali(imposta);
  document.all.Totale.innerHTML=decimali(totale);
  document.all.Km.innerHTML=String(km);
  document.all.NumOreFuoriOrario.innerHTML=decimali(orefuoriorario);
  if (document.richiesta.cliente.checked == true) {
   document.all.CostoRemoto.innerHTML=decimali(costoremoto);
   document.all.CostoAssistenza.innerHTML=decimali(costoassistenza);
   document.all.CostoAssistenza2.innerHTML=decimali(costoassistenza);
  }
  else {
   document.all.CostoRemoto.innerHTML=decimali(costoremoto + costoremoto * pnoncliente / 100);
   document.all.CostoAssistenza.innerHTML=decimali(costoassistenza + costoassistenza * pnoncliente / 100);
   document.all.CostoAssistenza2.innerHTML=decimali(costoassistenza + costoassistenza * pnoncliente / 100);
  }
 }
 else if (document.getElementById) {
       document.getElementById("TipoCosto").innerHTML=s;
       document.getElementById("CostoOrario").innerHTML=decimali(costo);
       document.getElementById("NumOre").innerHTML=String(ore);
       document.getElementById("TotaleOrario").innerHTML=decimali(totalecosto);
       document.getElementById("TotaleFuoriOrario").innerHTML=decimali(costofuoriorario);
       document.getElementById("TotaleFestivo").innerHTML=decimali(costofestivo);
       document.getElementById("TotaleKm").innerHTML=decimali(totalekm);
       document.getElementById("Imponibile").innerHTML=decimali(imponibile);
       document.getElementById("Imposta").innerHTML=decimali(imposta);
       document.getElementById("Totale").innerHTML=decimali(totale);
       document.getElementById("Km").innerHTML=String(km);
       document.getElementById("NumOreFuoriOrario").innerHTML=decimali(orefuoriorario);
       if (document.richiesta.cliente.checked == true) {
        document.getElementById("CostoRemoto").innerHTML=decimali(costoremoto);
        document.all.CostoAssistenza.innerHTML=decimali(costoassistenza);
        document.all.CostoAssistenza2.innerHTML=decimali(costoassistenza);
       }
       else {
        document.getElementById("CostoRemoto").innerHTML=decimali(costoremoto + costoremoto * pnoncliente / 100);
        document.getElementById("CostoAssistenza").innerHTML=decimali(costoassistenza + costoassistenza * pnoncliente / 100);
        document.getElementById("CostoAssistenza2").innerHTML=decimali(costoassistenza + costoassistenza * pnoncliente / 100);
       }
      } 
 if ((document.richiesta.Tipo[2].checked == true) && (id.length < 4)) {
  alert("Non è possibile gestire l'intervento a domicilio, non vi siete autenticati.");
 }
}

var gdir;

function calcoladistanza() {
 if (GBrowserIsCompatible()) {      
  gdir = new GDirections();
  GEvent.addListener(gdir, "load", onGDirectionsLoad);
  gdir.load("from: 39.969226984896416 18.117506504058838 to: " + document.richiesta.Indirizzo.value, "it");
 }
}

function onGDirectionsLoad() { 
 document.richiesta.chilometri.value = String(Math.round(gdir.getDistance().meters/1000*2));
 calcolaintervento();
}
