function INTERESSI(utilizzo, tasso_annuo, mesi_durata) {
  return utilizzo * (Math.pow(1 + (tasso_annuo/100), mesi_durata / 12) - 1);
}
function ONERI(oneri_annui, spese_annue, mesi_durata) {
  return (oneri_annui + spese_annue) * (mesi_durata / 12);
}
function ISC(utilizzo, interessi, oneri, periodo) {
  return Math.pow(1 + ((interessi + oneri) / utilizzo), 12/periodo) - 1;
}
function FMT(importo) {
	if (importo == 0) return "0";
  return migliaia(importo.toFixed(2).replace(".", ","));
}
function FMT_PERC(numero, decimali) {
	if (numero == 0) return "0";
	var perc = numero * 100;
  return perc.toFixed(decimali).replace(".", ",") + "%";
}
function parsePeriod(valore) {
	while(/[%\.\s]+/.test(valore)) valore = valore.replace(/[%\.\s]+/, "");
  patt=/^[0-9]+\,[0-9]+$/;
  if (patt.test(valore)) {
    return valore.replace(",", ".");
  } else {
    return valore;
  }
}
function calcolaISC() {
	verifica_spese();
  var num;
  var utilizzo = document.getElementById('isc_utilizzo').value;
  utilizzo = parsePeriod(utilizzo);
  num = new Number(utilizzo);
  if (isNaN(num) || num <= 0) {
    alert("Il campo 'Accordato' deve essere un importo maggiore di zero.");
    pulisci();
    return;
  }
  utilizzo = num;
  
  var tasso = document.getElementById('isc_interessi').value;
  tasso = parsePeriod(tasso);
  num = new Number(tasso);
  if (isNaN(num) || (tasso == "")) {
    alert("Il campo 'Tasso debitore' deve essere valorizzato con un numero.");
    pulisci();
    return;
  }
  tasso = num;
    
  var durata_mesi = document.getElementById('isc_periodo').value;
  num = new Number(durata_mesi);
  if (isNaN(num) || (num == 0)) {
    alert("Devi selezionare la durata del finanziamento dal menu di scelta.");
    pulisci();
    return;
  }
  if (durata_mesi == -1) durata_mesi = 3;
  
  var oneri_annui = new Number(document.getElementById('isc_oneri').value);
  var spese_annue = new Number(document.getElementById('isc_spese').value);
  
  var tot_importo_interessi = INTERESSI(utilizzo, tasso, durata_mesi);
  var tot_oneri = ONERI(oneri_annui, spese_annue, durata_mesi);
  document.getElementById('isc_interessi_result').innerHTML = "&euro; " + FMT(tot_importo_interessi);
  document.getElementById('isc_oneri_result').innerHTML = "&euro; " + FMT(tot_oneri);
  document.getElementById('isc_result').innerHTML = FMT_PERC(ISC(utilizzo, tot_importo_interessi, tot_oneri, durata_mesi), 2);
  
  return false;
}

function pulisci() {
  document.getElementById('isc_interessi_result').innerHTML = "&nbsp;";
  document.getElementById('isc_oneri_result').innerHTML = "&nbsp;";
  document.getElementById('isc_result').innerHTML = "&nbsp;";	
}

function verifica_spese() {
	pulisci();
	var accordato = new Number(parsePeriod(document.getElementById('isc_utilizzo').value));
	var utilizzato = (!isNaN(accordato) && accordato > 0)? accordato : 0.0;
	var a_revoca = (document.getElementById('isc_periodo').value == -1);
	var mostra_cms = false;
	
	var spese_annue = 0.0;
	if (a_revoca) {
	  if (!isNaN(accordato) && accordato > 0) {
	  	spese_annue = accordato * REV_perc;
	  	if (spese_annue < REV_min) spese_annue = REV_min;
	  	else if (spese_annue > REV_max) spese_annue = REV_max;
		}
		mostra_cms = (document.getElementById('tipo_comm').value == "cms");
	}
	
	var oneri_annui = utilizzato * (mostra_cms? CMS_annua : CMDS_annua);
	var cell_oneri = mostra_cms? "val_cms" : "val_cmds";
	
	document.getElementById('isc_utilizzo').value = FMT(utilizzato);
	document.getElementById('isc_interessi').value = FMT_PERC(parsePeriod(document.getElementById('isc_interessi').value)/100, 2);
	document.getElementById('isc_spese').value = spese_annue;
	document.getElementById('isc_oneri').value = oneri_annui;
	document.getElementById('val_speserev').innerHTML = "&euro; " + FMT(spese_annue) + " annui";
	document.getElementById(cell_oneri).innerHTML = "&euro; " + FMT(oneri_annui) + " annui";
	document.getElementById('spese_rev').style.display = a_revoca? "block" : "none";
	document.getElementById('tipo_commmissioni').style.display = a_revoca? "block" : "none";
	document.getElementById('spese_cms').style.display = mostra_cms? "block" : "none";
	document.getElementById('spese_cmds').style.display = mostra_cms? "none" : "block";
	document.getElementById('tipo_int').innerHTML = a_revoca? "trimestrale" : "totale";
	document.getElementById('tipo_oneri').innerHTML = a_revoca? "trimestrali" : "totali";
}

function migliaia(strnum) {
	strnum += '';
	x = strnum.split(',');
	x1 = x[0];
	x2 = x.length > 1 ? ',' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + '.' + '$2');
	}
	return x1 + x2;
}