w_oldvalue = "";
m_nCurrentRow = 0;

function GoBack() {
  var frm = document.getElementById("FrmMain");
  var step = Val(frm.step.value);
  if ( step == 4) {
    g = frm["tipinfpol"];
    if ( frm.tipopolizza.value == "INF" &&
       ( typeof(g) != 'undefined' && (g.value == "V" || g.value == "S" || g.value == "U"))) {
      step = step-2;
    } else {
      step = step-3;
    }
  } else {
    step = step-2;
  }
  if ( frm.Mode.value == "view" ) {
    frm.Mode.value = "new";
  }
  frm.step.value = step;
  frm.submit();
}  // GoBack

function ConfirmData() {
  var frm = document.getElementById("FrmMain");
  if(typeof(frm.idana) != "undefined"){
    var id = frm.idana.value;
  } else {
    var id = 0;
  }
  var nom = $('#nomana').val();      
  var cod = $('#codfis').val();      
  var piv = $('#pivaana').val();      
  var ind = $('#indana').val();      
  var num = $('#numana').val();      
  var cap = $('#capana').val();
  var loc = $('#locana').val();
  var pro = $('#provana').val();
  var tel = $('#telana').val();      
  var fax = $('#faxana').val();      
  var ema = $('#emailana').val();

  if ( getRadioValue(frm.privacy) == 1 && frm.notainformativa.checked) {
    $.ajax({
      type: 'GET',
      url: 's_check_anafields.php',
      contentType: "application/json; charset=utf-8",
      data: {'idana':id,'nomana':nom,'codfis':cod,'pivaana':piv,
             'indana':ind, 'numana':num,'capana':cap,'locana':loc,
             'provana':pro, 'telana':tel,'faxana':fax,'emailana':ema},
      success: function(data){
                 var result = $(data)[0].id;
                 if(result == 'ok_result_ana'){
                   frm.Mode.value = "save";
                   frm.submit();
                 } else {
                   if(typeof($(data)[1]) != "undefined"){
                     var form_html = $(data)[1].innerHTML;
		             confirm(form_html, function () {
                       frm.Mode.value = "save";
			           frm.submit();
		             });
                   }
                 }
               },
      error: function(){
               alert('Si è verificato un errore nel recupero dei dati anagrafici')
             }
    });
  } else {
    alert("Non è possibile elaborare la richiesta di preventivo \nsenza aver accettato l'Informativa sul trattamento dei dati personali e \nsenza aver preso visione della Nota informativa.");
  }
}

function confirm(html, callback) {
  var $dialog = $('<div></div>')
			      .html(html)
			      .dialog({
			      	modal: true,
			      	width: 'auto',
			      	height: 'auto',
				    title: '<div class="header"><span>Scegli i dati anagrafici corretti</span></div>',
			       });

  // if the user clicks "choose1"
  $('.choose1').click(function () {
	// update db
	UpdateDbData(html);
    // call the callback
	if ($.isFunction(callback)) {
	  callback.apply();
	}
	// close the dialog
	$dialog.dialog('close');
  });

  // if the user clicks "choose2"
  $('.choose2').click(function () {
	// sostituisco i dati compilati con quelli presenti nel db
	ReplaceFilledData(html); 
    // call the callback
	if ($.isFunction(callback)) {
	  callback.apply();
	}
	// close the dialog
	$dialog.dialog('close');
  });
}
	
function ReplaceFilledData(data){
  var tmp = $('<div></div>');
  tmp.html(data);
  /* valore dei campi presenti nel database */
  idana = GetFieldName(tmp, 'idana2');
  nomana = GetFieldName(tmp, 'nomana2');
  codfis = GetFieldName(tmp, 'codfis2');
  pivaana = GetFieldName(tmp, 'pivaana2');
  indana = GetFieldName(tmp, 'indana2');
  numana = GetFieldName(tmp, 'numana2');
  capana = GetFieldName(tmp, 'capana2');
  locana = GetFieldName(tmp, 'locana2');
  provana = GetFieldName(tmp, 'provana2');
  telana = GetFieldName(tmp, 'telana2');
  faxana = GetFieldName(tmp, 'faxana2');
  emailana = GetFieldName(tmp, 'emailana2');
  /* effettuo la sostituzione */
  $('#nomana').val(nomana);
  $('#codfis').val(codfis);
  $('#pivaana').val(pivaana);
  $('#indana').val(indana);
  $('#numana').val(numana);
  $('#capana').val(capana);
  $('#locana').val(locana);
  $('select[name="provana"]').val(provana);
  $('#telana').val(telana);
  $('#faxana').val(faxana);
  $('#emailana').val(emailana);
}

function UpdateDbData(data){
  var tmp = $('<div></div>');
  tmp.html(data);
  /* valore dei campi compilati dall'utente */
  idana = GetFieldName(tmp, 'idana1');
  nomana = GetFieldName(tmp, 'nomana1');
  codfis = GetFieldName(tmp, 'codfis1');
  pivaana = GetFieldName(tmp, 'pivaana1');
  indana = GetFieldName(tmp, 'indana1');
  numana = GetFieldName(tmp, 'numana1');
  capana = GetFieldName(tmp, 'capana1');
  locana = GetFieldName(tmp, 'locana1');
  provana = GetFieldName(tmp, 'provana1');
  telana = GetFieldName(tmp, 'telana1');
  faxana = GetFieldName(tmp, 'faxana1');
  emailana = GetFieldName(tmp, 'emailana1');
  /* aggiorno l'anagrafica nel db */
  $.ajax({
    type: 'GET',
    url: 's_updatedb.php',
    contentType: "application/json; charset=utf-8",
    data: {'idana':idana,'nomana':nomana,'codfis':codfis,'pivaana':pivaana,
           'indana':indana, 'numana':numana,'capana':capana,'locana':locana,
           'provana':provana, 'telana':telana,'faxana':faxana,'emailana':emailana},
  });
}

function GetFieldName(tmp, fieldname){
  var selector = '#'+fieldname;
  var fieldvalue = $(selector, tmp).text();
  return fieldvalue;
}

function Importo_OnFocus(evt) {
  var e = evt || window.event;
  if (e) {
    var field = e.target || e.srcElement;
    if (!field && typeof(evt.value) != "undefined")
      field = evt;
    if ( field ) {
      w_oldvalue = field.value;
      field.value = WtH(HtW(field.value, "N",10,2),'N',10,2,'999999999.99');
      field.select();
    }
  }
}

function Importo_Valid(evt) {
  var e = evt || window.event;
  if (e) {
    var field = e.target || e.srcElement;
    if (!field && typeof(evt.value) != "undefined")
      field = evt;
    if ( field ) {
      field.value = WtH(HtW(field.value, "N"),'N',10,2,'99,999,999.99');
    }
  }
}

function Importo4_OnFocus(evt) {
  var e = evt || window.event;
  if (e) {
    var field = e.target || e.srcElement;
    if (!field && typeof(evt.value) != "undefined")
      field = evt;
    if ( field ) {
      w_oldvalue = field.value;
      field.value = WtH(HtW(field.value, "N",10,4),'N',10,4,'999999999.9999');
      field.select();
    }
  }
}

function Importo4_Valid(evt) {
  var e = evt || window.event;
  if (e) {
    var field = e.target || e.srcElement;
    if (!field && typeof(evt.value) != "undefined")
      field = evt;
    if ( field ) {
      field.value = WtH(HtW(field.value, "N"),'N',10,4,'99,999,999.9999');
    }
  }
}

function Numero_OnFocus(evt) {
  var e = evt || window.event;
  if (e) {
    var field = e.target || e.srcElement;
    if (!field && typeof(evt.value) != "undefined")
      field = evt;
    if ( field ) {
      w_oldvalue = field.value;
      field.value = WtH(HtW(field.value, "N"),'N',6,0,'999999');
      //Questo controllo serve se sto utilizzando un combobox con chiavi numeriche
      if(typeof(field.select) != "undefined")
        field.select();
    }
  }
}

function Numero_Valid(evt) {
  var e = evt || window.event;
  if (e) {
    var field = e.target || e.srcElement;
    if (!field && typeof(evt.value) != "undefined")
      field = evt;
    if ( field ) {
      field.value = WtH(Val(field.value),'N',6,0,'999,999');
    }
  }
}

function Data_OnFocus(evt) {
  var e = evt || window.event;
  if (e) {
    var field = e.target || e.srcElement;
    if (!field && typeof(evt.value) != "undefined")
      field = evt;
    if ( field ) {
      enteredInDate = field;
      field.value = Strtran(field.value,"-","");
      field.select();
    }
  }
}

function Data_Valid(evt) {
  var e = evt || window.event;
  if (e) {
    var field = e.target || e.srcElement;
    if (!field && typeof(evt.value) != "undefined" && e.type == "text")
      field = evt;
    if ( field ) {
      if (Eq(enteredInDate,field)) {
        field.value = ApplyPictureToDate(field.value,'DD-MM-YYYY',field.name);
        enteredInDate = null;
      }
    }
  }
}

function Link_Data(fieldname, libdir) {
  var frm = document.getElementById("FrmMain");
  window.open(libdir + "../calendario.php?DateName=" + fieldname,'Seleziona','width=205,height=220,resizable=no,scrollbars=no,status=0');
}

function GenericOnLoad() {
  var frm = document.getElementById("FrmMain");
  SetFieldEvents(frm['mascon[]'], Risk_Changed, Importo_OnFocus);
  SetFieldEvents(frm['impcon[]'], Amount_Changed, Importo_OnFocus);
  SetFieldEvents(frm['tascon[]'], Calculate, Importo4_OnFocus);
  SetFieldEvents(frm.tottassuccon, TotaleLordo_Valid, Importo_OnFocus);
  SetFieldEvents(frm.totlorsuccon, TotaleLordo_Valid, Importo_OnFocus);
  if(typeof(frm['totlorinicon']) != 'undefined') {
    SetFieldEvents(frm.tottasinicon, TotaleLordo_Valid, Importo_OnFocus);
    SetFieldEvents(frm.totlorinicon, TotaleLordo_Valid, Importo_OnFocus);
  }
  SetFieldEvents(frm.mincon, null);
  SetFieldEvents(frm.mininicon, null);
}  // GenericOnLoad

function SetFieldEvents(obj, func_valid, func_onfocus) {
  if (typeof(obj) !='undefined') {
    if ( obj.length == 0 || typeof(obj.length) =='undefined' ) {
      obj.onkeypress = CheckNum;
      if ( func_valid == null) {
        obj.onblur = Importo_Valid;
      } else {
        obj.onblur = func_valid;
      }
      if ( func_onfocus == null) {
        obj.onfocus = Importo_OnFocus;
      } else {
        obj.onfocus = func_onfocus;
      }
    } else {
      for ( var i = 0; i<obj.length; i++ ) {
        obj[i].onkeypress = CheckNum;
        if ( func_valid == null) {
          obj[i].onblur = Importo_Valid;
        } else {
          obj[i].onblur = func_valid;
        }
        if ( func_onfocus == null) {
          obj[i].onfocus = Importo_OnFocus;
        } else {
          obj[i].onfocus = func_onfocus;
        }
      }
    }
  }
}  // SetFieldEvents

function Calculate(e) {
  Importo4_Valid(e);
  if ( IsChanged(e) ) {
    CalculateTotals();
  }
}  // Calculate

function IsChanged(evt) {
  var e = evt || window.event;
  if (e) {
    var field = e.target || e.srcElement;
    if (!field && typeof(evt.value) != "undefined")
      field = evt;
    if ( field ) {
      return field.value != w_oldvalue;
    }
  }
  return true;
}  // IsChanged

function CalculateTotals() {
  var frm = document.getElementById("FrmMain");
  var imp, tot, n_imp, n_tot, frazionamento = "A", minimo;
  if (typeof( frm['impcon[]']) != 'undefined' && typeof( frm['qtacon[]']) != 'undefined' && typeof( frm.totimpsuccon) != 'undefined' &&
      typeof( frm['tascon[]']) != 'undefined' && typeof( frm.tottassuccon) != 'undefined') {
    tot = n_tot = SumField(frm['impcon[]'], frm['qtacon[]']);
    imp = n_imp = SumField(frm['tascon[]'], frm['qtacon[]']);

    if (w_tipcon == "c" ) {
      frazionamento = getRadioValue(frm.fracon);
    }
    minimo = tot;
    switch (frazionamento) {
      case "U":
        imp = 0;
        tot = 0;
        //minimo = HtW(frm.totlorinicon.value, "N", 10, 2);
        break;
      case "A":
        break;
      case "S":
        imp = Round(imp / 2, 4);
        tot = Round(tot / 2, 4);
        break;
    }
    //Premio minimo
    if ( typeof(frm.mincon.type) != "hidden")  {
      frm.mincon.value = WtH(Max(minimo, w_premiominimo),'N',10,2,'99,999,999.99');
      if ( typeof(frm.mininicon.type) == "hidden")  {
        frm.mininicon.value = frm.mincon.value;
      }
    }
    // Rata successiva
    frm.totimpsuccon.value = WtH(Round(tot-imp, 2),'N',10,2,'99,999,999.99');
    frm.totlorsuccon.value = WtH(Round(tot, 2),'N',10,2,'99,999,999.99');
    frm.tottassuccon.value = WtH(Round(imp, 2),'N',10,2,'99,999,999.99');

    // Rata iniziale
    if ( typeof( frm['totlorinicon']) != 'undefined' ) {
      CalcolaRataIniziale(n_tot, n_imp);
    }
  }
  AdditionalCalculations();
}
function AdditionalCalculations() {
}

function SumField(objimp, objqta) {
  var tot = 0;
  if ( objimp.length == 0 || typeof(objimp.length) =='undefined' ) {
    tot = HtW(objimp.value, "N") *  HtW(objqta.value, "N");
  } else {
    tot = 0;
    for ( var i = 0; i < objimp.length; i++ ) {
      tot += HtW(objimp[i].value, "N") *  HtW(objqta[i].value, "N");
    }
  }
  return tot;
}  // SumField

function Amount_Changed(e) {
  Importo_Valid(e);
  if ( IsChanged(e) ) {
    // e' cambiato il premio: devo ricalcolare le tasse
    Calculate_Amount();
    CalculateTotals();
  }
}  // Amount_Changed

function GetTax(amount, pertax) {
  return Round(amount * pertax / (100 + pertax), 4);
}

function Risk_Changed(e) {
  Importo_Valid(e);
  if ( IsChanged(e) ) {
    Calculate_All();
  }
}  // Risk_Changed

function Calculate_All() {
  Calculate_Risk();
  Calculate_Amount();
  CalculateTotals();
}  // Calculate_All

function Calculate_Risk() {
  var frm = document.getElementById("FrmMain");
  // e' cambiato il premio: devo ricalcolare le tasse
  if (typeof( frm['impcon[]']) != 'undefined' && typeof( frm['tascon[]']) != 'undefined' && typeof( frm['pertascon[]']) != 'undefined') {
    var mas = frm['maspol[]'];
    var imp = frm['impcon[]'];
    var mascon = frm['mascon[]'];
    var p = 0
    if ( typeof(mascon.length)  == 'undefined' || mascon.lenght == 0 ) {
      p = CalcolaPremio(0, mas.value, HtW(mascon.value, "N",10,2), m_oMassimali[0].premmas, m_oMassimali[0].perpremmas)
      imp.value = WtH(RateoPremio(p),'N',10,2,'999,999,999.99');
    } else {
      var l = MasconLen();
      for ( var i = m_nCurrentRow*l; i < m_nCurrentRow*l+l; i++ ) {
        p = CalcolaPremio(i, mas[i].value, HtW(mascon[i].value, "N",10,2), m_oMassimali[i % l].premmas, m_oMassimali[i % l].perpremmas)
        imp[i].value = WtH(RateoPremio(p),'N',10,2,'99,9999,999.99');
      }
    }
  }
}  // CalculateRisks

function Calculate_Amount() {
  var frm = document.getElementById("FrmMain");
  if (typeof( frm['impcon[]']) != 'undefined' && typeof( frm['tascon[]']) != 'undefined' && typeof( frm['pertascon[]']) != 'undefined') {
    var imp = frm['impcon[]'];
    var tax = frm['tascon[]'];
    var pertas = frm['pertascon[]'];
    var t = 0
    if ( typeof(imp.length) == 'undefined' || imp.lenght == 0 ) {
      t = GetTax(HtW(imp.value, "N",10,4), HtW(pertas.value, "N",10,4));
      tax.value = WtH(t,'N',10,4,'999,999,999.9999');
    } else {
      var l = MasconLen();
       for ( var i = m_nCurrentRow*l; i < m_nCurrentRow*l+l; i++ ) {
        t = GetTax(HtW(imp[i].value, "N",10,4), HtW(pertas[i].value, "N",10,4));
        tax[i].value = WtH(t,'N',10,4,'999,999,999.9999');
      }
    }
  }
}  // Calculate_Amount

function CalcolaPremio(idx, codmas, massimale, premio, percpremio) {
  if ( percpremio > 0 ) {
    premio = Round(massimale * percpremio / 100, 2);
  }
  /*
  // Il premio o è uguale a 0 (non viene inserita la riga) o deve essere >= al premio minimo contrattuale
  if ( $premio > 0 && $premio < $mincon) {
    $premio = $mincon;
  } */
  return premio;
}

function CalcolaRataIniziale(tot, imp) {
  var frm = document.getElementById("FrmMain");
  var y = 0, frazionamento = "", perc = 0, impsuc, minini = 0, gg = 0;
  impsuc = imp;
  minini = HtW(frm.mincon.value, "N",10,2);
  if ( !Eq(w_inizio,NullDate()) && !Eq(w_termine,NullDate())) {
    gg = GiorniDurata();
    if ( w_anni >= 1 ) {
      var tmp = new Date();
      var ti = w_inizio.getTime()
      var ts = w_scadenza.getTime()
      tmp.setTime(ti);
      tmp.setYear(w_inizio.getYear()+1);
      if ( tmp.getTime() == ts ) {
        // Durata di un anno del contratto
      } else {
        tmp.setTime(ti);
        tmp.setMonth(w_inizio.getMonth()+6);
        if ( tmp.getTime() == ts ) {
          // 6 mesi
          // Semestrale: l'importo è uguale a metà della rata annuale
          imp = imp / 2;
          tot = tot / 2;
          //minini = minini / 2;
        } else {
          var c = Int(gg / 360) + (gg % 360) / 360;
          imp = Round(imp * c, 2);
          tot = Round(tot * c, 2);
          minini = Round(minini * c, 2);
          /*
          frazionamento = getRadioValue(frm.fracon);
          if ( frazionamento == "U" ) {
            y = w_anni;
          }
          tmp.setTime(ti);
          tmp.setYear(tmp.getYear()+y);
          imp = imp * (y) + Round(imp * gg / 360, 2);
          tot = tot * (y) +  Round(tot * gg / 360, 2);
          minini = minini * (y) +  Round(minini * gg / 360, 2);
          */
        }
      }
    } else {
      minini = Round(minini * gg / 360, 2);
    }
  }
  frm.totimpinicon.value = WtH(Round(tot-imp, 2),'N',10,2,'99,999,999.99');
  frm.totlorinicon.value = WtH(Round(tot, 2),'N',10,2,'99,999,999.99');
  frm.tottasinicon.value = WtH(Round(imp, 2),'N',10,2,'99,999,999.99');
  if ( typeof(frm.mininicon.type) != "hidden")  {
    frm.mininicon.value = WtH(minini,'N',10,2,'99,999,999.99');
  }
}

/* Calcola l'imponibile a partire dai totali premi lordi */
function TotaleLordo_Valid(e) {
  Importo_Valid(e);
  if ( IsChanged(e) ) {
    var frm = document.getElementById("FrmMain");
    var tot = 0;
    var imp = 0;

    // Rata iniziale
    if(typeof( frm['totlorinicon']) != 'undefined') {
      tot = HtW(frm.totlorinicon.value, "N", 10, 2);
      imp = HtW(frm.tottasinicon.value, "N", 10, 2);
      frm.totimpinicon.value = WtH(Round(tot-imp, 2),'N',10,2,'99,999,999.99');
    }
    // Rata premio successivo
    tot = HtW(frm.totlorsuccon.value, "N", 10, 2);
    imp = HtW(frm.tottassuccon.value, "N", 10, 2);
    frm.totimpsuccon.value = WtH(Round(tot-imp, 2),'N',10,2,'99,999,999.99');
  }
}  // RicalcoloImponibile

function GiorniDurata() {
  var yy = w_scadenza.getFullYear() - w_inizio.getFullYear();
  var mm = w_scadenza.getMonth() - w_inizio.getMonth();
  var i_g = Get30Day(w_inizio.getDate(), w_inizio.getMonth()+1, w_inizio.getFullYear());
  var s_g = Get30Day(w_scadenza.getDate(), w_scadenza.getMonth()+1, w_scadenza.getFullYear());
  if ( mm < 0 ) {
    yy--;
    mm = mm + 12;
  }
  mm--;
  var gg = (30 - i_g) + s_g;
  gg = yy*360 + mm*30 + gg;
  return gg;
}

function Get30Day(d, m, y) {
  var dom = DaysOfMonth(m, y);
  if ( d == dom ) {
    d = 30;
  }
  return d;
}  // Get30Day

function DaysOfMonth(m, y) {
  switch (m) {
    case 2:
      if ( isLeapYear(y) )
        return 29;
      else
        return 28;
      break;
    case 11:
    case 4:
    case 6:
    case 9:
      return 30;
    default:
      return 31;
  }
}  // DaysOfMonth

function RateoPremio(p) {
  return p;
}  // RateoPremio

function Help(deshelp) {
  window.open('help.php?des='+deshelp,'','width=380,height=250,resizable=yes,menubar=no,scrollbars=yes');
}

function MasconLen() {
  var frm = document.getElementById("FrmMain");
  var mascon = frm['mascon[]'];
  return (typeof(mascon.length)  == 'undefined' || mascon.length == 0) ?  0 : mascon.length;
}  // MasconLen

function Validate_CF_PIVA(cf) {
  if( cf.length == 11 ) {
    errorMsg = Validate_piva(cf);
    errorMsg = Strtran(Strtran(errorMsg, "La partita IVA", "Il codice fiscale"), "valida", "valido");
  } else {
    errorMsg = Validate_cf(cf);
  }
  return errorMsg;
}

/* Funzioni utilizzate in tutte le polizze con caricamento dinamico dei dati (Collettive, Multirischi bottega, Multirischi danni ai beni, ecc.) */
function Row_Importo_OnFocus(e, idx) {
  if (ChangeRow(idx)) {
    Importo_OnFocus(e);
  }
}

function Row_Importo4_OnFocus(e, idx) {
  if (ChangeRow(idx)) {
    Importo4_OnFocus(e);
  }
}

function Row_Numero_OnFocus(e, idx) {
  if (ChangeRow(idx)) {
    Numero_OnFocus(e);
  }
}

function Row_Char_OnFocus(evt, idx) {
  if (ChangeRow(idx)) {
    var e = evt || window.event;
    if (e) {
      var field = e.target || e.srcElement;
      if (!field && typeof(evt.value) != "undefined")
        field = evt;
        //alert(field);
      if ( field ) {
        if ( field.type == "text" || field.type == "textarea" ) {
          field.select();
        }
      }
    }
  }
}

function Row_Data_OnFocus(evt, idx) {
  if (ChangeRow(idx)) {
    var e = evt || window.event;
    if (e) {
      var field = e.target || e.srcElement;
      if (!field && typeof(evt.value) != "undefined")
        field = evt;
      if ( field ) {
        enteredInDate = field;
        field.value = Strtran(field.value,"-","");
        field.select();
      }
    }
  }
}

/* Funzione che passato un array ed un valore ritorna true se il valore è presente nell'array, false altrimenti */
function InArray(array, value) {
  for(var i=0; i<array.length; i++) {
    if(array[i] == value)
      return true;
  }
  return false;
} // Fine function InArray()

