$(document).ready(function(){
        
        $('#nuova-simulazione').hide();
        
        $('#result, #result2, #result3').hide();
        
        $('#submit').click(function(){
            $('form').hide();
            $('#result tbody, #result2 tbody, #result3 tbody').empty();
            $('#nuova-simulazione').show();
            $('#regionMaximized .desc').eq(1).show();
            $('#regionMaximized .desc').eq(0).hide();
            
            // Calcola il piano di investimento
            // inizio: data di inizio
            // per: periodicità
            // tasso: tasso di ammortamento
            // ratePre: numero di rate di Preammortamento
            // rate: numero di rate di Ammortamento
            // capitale: somma da ammortare
            // fineMese: flag per indicare che le rate vanno segnate alla fine del mese solare
            //function piano(inizio, per, tasso, ratePre, rate, capitale, fineMese) {
            var data = new Date();
            var numRateAnnuo = parseInt( $("#numRateAnnuo option:selected").val() );
            var tassobanca = parseFloat( $('#tassoBanca option:selected').val() );
            var durataMesi = parseInt( $("#durataMesi option:selected").val() );
            var provvistaBanca = parseInt( $("#provvistaBanca option:selected").val() );
            var importo = parseFloat( $('#importo').val() );
            
            table = piano( data, numRateAnnuo, tassobanca, 0, durataMesi/numRateAnnuo, importo, 'S');
            table2 = piano( data, numRateAnnuo, tassobanca, 0, durataMesi/numRateAnnuo, importo*(1 - (provvistaBanca/100)), 'S');
            table3 = piano( data, numRateAnnuo, 0, 0, durataMesi/numRateAnnuo, importo*(provvistaBanca/100), 'S');
            
            var totImportoOrd = 0;
            var totCapitaleOrd = 0;
            var totInteressiOrd = 0;
            var totImportoAge = 0;
            var totCapitaleAge = 0;
            var totInteressiAge = 0;
            
            for(i = 0; i < table.length; i++ ){
                
                $('#result tbody').append('<tr> <td>' + table[i][0] + '</td> <td>' + table[i][1].format('dd/mm/yyyy') + '</td> <td class="format">' + Math.round(table[i][2]*100)/100 + '</td> <td class="format">' + Math.round(table[i][3]*100)/100 + '</td> <td class="format">' + Math.round(table[i][4]*100)/100 + '</td> <td class="format">' + Math.round(table[i][5]*100)/100 + '</td> </tr>');
                totImportoOrd += parseFloat(table[i][2]);
                totCapitaleOrd += table[i][3];
                totInteressiOrd  += table[i][4];
                
                $('#result2 tbody').append('<tr> <td>' + table2[i][0] + '</td> <td>' + table2[i][1].format('dd/mm/yyyy') + '</td> <td class="format">' 
                +  Math.round( (table2[i][2] + table3[i][2] )*100)/100 + '</td> <td class="format">' 
                + Math.round( ( table2[i][3]  + table3[i][3] )*100)/100 + '</td> <td class="format">' 
                + Math.round( ( table2[i][4] + table3[i][4])*100)/100 + '</td> <td class="format">' 
                + Math.round( ( table2[i][5]  + table3[i][5])*100)/100 + '</td> </tr>');
                totImportoAge += table2[i][2] + table3[i][2];
                totCapitaleAge += table2[i][3] + table3[i][3];
                totInteressiAge  += table2[i][4] + table3[i][4];
                
            }
            
            $('#result tbody').append('<tr> <td colspan="2"><b>Totale</b></td>  <td><b class="format">' + Math.round(totImportoOrd*100)/100 + '</b></td> <td><b class="format">' + Math.round(totCapitaleOrd*100)/100 + '</b></td> <td style="background:#FCC"><b class="format">' + Math.round(totInteressiOrd*100)/100 + '</b></td> <td></td> </tr>');
            
            $('#result2 tbody').append('<tr> <td colspan="2" align="center"><b>Totale</b></td>  <td><b class="format">' + Math.round(totImportoAge*100)/100 + '</b></td> <td><b class="format">' + Math.round(totCapitaleAge*100)/100 + '</b></td> <td style="background:#b7e3ff"><b class="format">' + Math.round(totInteressiAge*100)/100 + '</b></td> <td></td> </tr>');
            
            $('#result3 tbody').append('<tr><td  style="background:#FCC"><b class="format">' + Math.round(totInteressiOrd*100)/100 + '</b></td> <td  style="background:#b7e3ff" ><b class="format">' + Math.round(totInteressiAge*100)/100 + '</b></td> <td style="background:#95ff96"><b class="format">' + Math.round( ( totInteressiOrd - totInteressiAge)*100)/100 + '</b></td> </tr>');
            
            $('#result, #result2, #result3').show();
            
            $('#result .format, #result2 .format, #result3 .format').formatCurrency({
                useHtml: true,
                symbol: '&euro; '
            })
            
        });
        
        $('#nuova-simulazione').click(function(){
            $('form').show();
            $('#result, #result2, #result3, #nuova-simulazione').hide();
            $('#regionMaximized .desc').eq(0).show();
            $('#regionMaximized .desc').eq(1).hide();
        
        });
        
   
   });
   
   function aggiungiMesi(data, mesi, fineMese) {
      var y = mesi % 12;
      var m = mesi - y * 12;
      var target = new Date();
      target.setHours(0, 0, 0, 0);
      target.setFullYear(data.getFullYear() + y, data.getMonth() + m, 1);
      if (giorniDelMese(target) < 30 | fineMese)
        target.setDate(giorniDelMese(target));
      else
        target.setDate(30);
      return target;
    }
     
    function inCentesimi(somma) {
      return Math.round(somma * 100.0);
    }
     
    // Calcola il piano di investimento
    // inizio: data di inizio
    // per: periodicità
    // tasso: tasso di ammortamento
    // ratePre: numero di rate di Preammortamento
    // rate: numero di rate di Ammortamento
    // capitale: somma da ammortare
    // fineMese: flag per indicare che le rate vanno segnate alla fine del mese solare
    function piano(inizio, per, tasso, ratePre, rate, capitale, fineMese) {
      
      //alert(inizio + ' | ' + per + ' | ' + tasso + ' | ' + ratePre + ' | ' + rate + ' | ' + capitale + ' | ' + fineMese)
      // per comodità, tutti gli importi sono trattati come interi in centesimi
      var res = [];
      var data = inizio;
      var t = tasso / 100.0; // per compensare i conti in centesimi
      // Tasso periodale di preammortamento
      var tp = t / (12.0 / per);
      // Tasso periodale di ammortamento
      var ta = Math.pow(1 + tasso, per / 12) - 1;
      var rt = inCentesimi(rata(ta, rate, capitale));
      // alert("Tasso"+tasso+" tp "+tp+" ta "+ta+" rt "+rt);
      var residuo = inCentesimi(capitale);
      // Preammortamento
      for ( var i = 0; i < ratePre; i++) {
        var rti = inCentesimi(residuo * tp);
        res.push( [ i + 1, aggiungiMesi(data, per * (i), fineMese), rti / 100.0, 0,
            rti / 100.0, residuo / 100.0, "C" ]);
      }
      // Ammortamento
      for ( var i = ratePre; i < (rate + ratePre); i++) {
        var rti = inCentesimi((residuo / 100.0) * ta);
        var rtc = rt - rti;
        residuo -= rtc;
        res.push( [ i + 1, aggiungiMesi(data, per * (i), fineMese), rt / 100.0,
            rtc / 100.0, rti / 100.0, residuo / 100.0, "A" ]);
      }
     
      // correggi il residuo sull'ultima rata
      if (Math.abs(res[res.length - 1][5]) > 0) {
        res[res.length - 1][2] += res[res.length - 1][5];
        res[res.length - 1][3] += res[res.length - 1][5];
        res[res.length - 1][5] -= res[res.length - 1][5];
      }
      return res;
    }
     
    // Calcola la rata secondo la funzione XL Rata()
    function rata(tasso, periodi, capitale) {
      var res = 0.0;
      var itimesp = Math.pow(1 + tasso, periodi);
      if (tasso > 0)
        res = (capitale * itimesp * tasso) / (itimesp - 1);
      else
        res = capitale / periodi;
      return res;
    }
    
    // Calcola i giorni del mese in cui cade la data indicata
    function giorniDelMese(dt) {
      var d= new Date();
      d.setHours(0,0,0,0);
      d.setFullYear(dt.getFullYear(), dt.getMonth()+1, 1);
      d.setTime(d.getTime()-1000);
      return d.getDate();
    }