// Classe che rappresenta uno scaglione per il calcolo delle spese di revisione
var Scaglione = function(importo, impomin, impomax)
{
    this.importo = importo;
    this.impomin = impomin;
    this.impomax = impomax;
	
    this.isScaglione = function(importoFido)
    {
        return (importoFido > this.impomin && importoFido <= this.impomax);
    }

}

function addSeparatorsNF(nStr, inD, outD, sep)
{
	nStr += '';
	var dpos = nStr.indexOf(inD);
	var nStrEnd = '';
	if (dpos != -1) {
		nStrEnd = outD + nStr.substring(dpos + 1, nStr.length);
		nStr = nStr.substring(0, dpos);
	}
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(nStr)) {
		nStr = nStr.replace(rgx, '$1' + sep + '$2');
	}
	return nStr + nStrEnd;
}


function resettainput()
{
	document.getElementById('cmdoneri').value = '';
	document.getElementById('cmdisc').value = '';
}


// Controlla i dati inseriti dall'utente
function controllainput()
{
	var importofido = document.getElementById('importofido').value;
	//var importomassimo = document.getElementById('importomassimo').value;
	var giorniutil = document.getElementById('giorniutil').value;
	//var giorniutilcont = document.getElementById('giorniutilcont').value;
	var impomedtrimestre = document.getElementById('impomedtrimestre').value;
	
	// Rimuovo gli eventuali separatori delle migliaia e sostituisco la , con il . come separatore dei decimali
	// perché in javascript il separatore dei decimali è il .
	importofido = importofido.replace(/\./gi, "").replace(/,/gi, '.');
	//importomassimo = importomassimo.replace(/\./gi, "").replace(/,/gi, '.');
	impomedtrimestre = parseFloat(impomedtrimestre.replace(/\./gi, "").replace(/,/gi, '.'));
	
	if (importofido == "" || isNaN(importofido))
	{
		alert("Inserire un valore numerico per l'importo del fido");
		document.getElementById('importofido').focus();
		document.getElementById('importofido').select();;
		return false;
	}
	/*
	if (importomassimo == "" || isNaN(importomassimo))
	{
		alert("Inserire un valore numerico per il valore di importo massimo");
		document.getElementById('importomassimo').focus();
		document.getElementById('importomassimo').select();
		return false;
	}*/
	if (giorniutil == "" || isNaN(giorniutil))
	{
		alert("Inserire un valore numerico per i giorni di utilizzo");
		document.getElementById('giorniutil').focus();
		document.getElementById('giorniutil').select();
		return false;
	}
	/*
	if (giorniutilcont == "" || isNaN(giorniutilcont))
	{
		alert("Inserire un valore numerico per i giorni di utilizzo continuativo");
		document.getElementById('giorniutilcont').focus();
		document.getElementById('giorniutilcont').select();
		return false;
	}*/
	if (impomedtrimestre == "" || isNaN(impomedtrimestre))
	{
		alert("Inserire un valore numerico per l'importo medio di utilizzo");
		document.getElementById('impomedtrimestre').focus();
		document.getElementById('impomedtrimestre').select();
		return false;
	}
	
	//Casting dei valori a float
	importofido = parseFloat(importofido);
	//importomassimo = parseFloat(importomassimo);
	giorniutil = parseInt(giorniutil);
	//giorniutilcont = parseInt(giorniutilcont);
	impomedtrimestre = parseFloat(impomedtrimestre);
	
	// 
	/*
	if (importomassimo > importofido)
	{
		alert("L'importo massimo deve essere minore o uguale all'importo del fido");
		document.getElementById('importomassimo').focus();
		document.getElementById('importomassimo').select();
		return false;
	}*/
	if (giorniutil > 91)
	{
		alert("Il numero di giorni di utilizzo deve essere minore o uguale a 91 (giorni di un trimestre)");
		document.getElementById('giorniutil').focus();
		document.getElementById('giorniutil').select();
		return false;
	}
	/*
	giorniutilcont = parseFloat(giorniutilcont);
	if (giorniutilcont > giorniutil)
	{
		alert("Il numero di giorni continuativi di utilizzo del fido deve essere minore o uguale al numero di giorni di utilizzo del fido");
		document.getElementById('giorniutilcont').focus();
		document.getElementById('giorniutilcont').select();
		return false;
	}*/
	/*
	if (impomedtrimestre > importomassimo)
	{
		alert("L'importo medio deve essere minore o uguale all'importo massimo del fido");
		document.getElementById('impomedtrimestre').focus();
		document.getElementById('impomedtrimestre').select();
		return false;
	}*/
	
	return true;
}

function calcola()
{
	if(!controllainput())
	{
		resettainput();
		return;
	}
	
	// Dati fissi, modificare qui i valori usati nei calcoli
	var tasso = 13.75/100;
	var cms = 1.5/100;
	var cmd = 0.5/100;
	var istru = 0.20/100;
	var fisseagg = 0/100;

	// Scaglioni usati per determinare le spese di revisione
	// uno scaglione e' composto da importo, importo minimo, importo massimo
	var scaglioni = new Array();
	scaglioni[0] = new Scaglione(0, 0, 2000);
	scaglioni[1] = new Scaglione(36, 2000, 16000);
	scaglioni[2] = new Scaglione(72, 16000, 250000);
	scaglioni[3] = new Scaglione(100, 250000, 500000);
	scaglioni[4] = new Scaglione(150, 500000, 1500000);
	scaglioni[5] = new Scaglione(200, 1500000, 999999999);

	// Fine dati fissi
	
	var speserev = 0;
	
	
	//Dati in input recuperati dai campi della pagina
	var importofido = document.getElementById('importofido').value;
	//var importomassimo = document.getElementById('importomassimo').value;
	var giorniutil = document.getElementById('giorniutil').value;
	//var giorniutilcont = document.getElementById('giorniutilcont').value;
	var impomedtrimestre = document.getElementById('impomedtrimestre').value;
	
	// Rimuovo gli eventuali separatori delle migliaia e sostituisco la , con il . come separatore dei decimali
	importofido = importofido.replace(/\./gi, "").replace(/,/gi, '.');
	//importomassimo = importomassimo.replace(/\./gi, "").replace(/,/gi, '.');
	impomedtrimestre = parseFloat(impomedtrimestre.replace(/\./gi, "").replace(/,/gi, '.'));
	
	//Forzo il tipo di dato a float
	importofido = parseFloat(importofido);
	//importomassimo = parseFloat(importomassimo);
	giorniutil = parseFloat(giorniutil);
	//giorniutilcont = parseFloat(giorniutilcont);
	
	for(i=0; i<scaglioni.length; i++)
	{
		if (scaglioni[i].isScaglione(importofido))
		{
			speserev = scaglioni[i].importo;
			//window.alert(speserev);
		}
	}
	
	// 05/09/2011 modificata formula del calcolo interessi
	//var interessi = ((Math.pow((1 + tasso), (giorniutil/365)) - 1) * impomedtrimestre);
	var interessi = ((tasso * (giorniutil/365)) * impomedtrimestre);
	
	var oneri1 = 0;
	
	var oneri2 = (cmd) * importofido;
	
	// Le spese di istruttoria vengono calcolate solo per un fido di importo >= 2000 euro
	var oneri3 = 0; 
	if (importofido >= 2000)
	{
		oneri3 = (istru) * importofido;
		//if (oneri3 > 500)
		//	oneri3 = 500;
		//else 
		if (oneri3 < 80)
			oneri3 = 80;
	}
	
	var oneri4 = speserev;
	
	var oneri5 = fisseagg;
				
	// Calcolo commissione messa a disposizione
	var cmdoneri = oneri2 + oneri3 / 4  + oneri5 / 4;
	var cmdisc1 = (Math.pow((impomedtrimestre + interessi + cmdoneri) / impomedtrimestre, 4) - 1) * 100;
	var cmdtot = interessi + oneri2 + 0;
		
	var txt_cmdoneri = document.getElementById('cmdoneri');
	//var txt_cmdisc = document.getElementById('cmdisc');
	
	// Costi commissione messa a disposizione fondi
	document.getElementById('txtint2').value = addSeparatorsNF(interessi.toFixed(2), '.', ',', '.');
	document.getElementById('txtcmd').value = addSeparatorsNF(oneri2.toFixed(2), '.', ',', '.');
	
	document.getElementById('cmdoneri').value = addSeparatorsNF(cmdtot.toFixed(2), '.', ',', '.');
	
	//Spese di istruttoria
	document.getElementById('txtistr').value = addSeparatorsNF(oneri3.toFixed(2), '.', ',', '.');
	
}
