/*
Funzione SimulaISEE: calcola i valori ISE, Scala di equivalenza e ISEE
							a partire dalle informazioni di riepilogo della dichiarazione

Parametri di input:
	SommaRedditi
	SommaPatrimonioMobiliare
	RendimentoMedioTitoli
	CanoneLocazione
	SogliaMaxCanone
	ImmobiliNonAb
	ImmobiliAb
	ResiduoMutuoAb
	SogliaMinAbitazione
	SogliaMaxDetrazione
	MoltiplicatoreISP
	NumComponenti
	NumHnd 
	FlagUnicoGenitore 
	FlagLavoroAmboGenitori
	
Parametri di output:
	ISEE
	ScalaEquivalenza
	ISE
	
Ritorna:

*/
function SimulaISEE( SommaRedditi, SommaPatrimonioMobiliare, RendimentoMedioTitoli, CanoneLocazione, SogliaMaxCanone,
							ImmobiliNonAb, ImmobiliAb, ResiduoMutuoAb, SogliaMinAbitazione, SogliaMaxDetrazione, MoltiplicatoreISP,
							NumComponenti, NumHnd, FlagUnicoGenitore, FlagLavoroAmboGenitori,
							fieldISEE, fieldScalaEquivalenza, fieldISE ) {

	var DetrazioneCanone;
	var RendimentoPatrimonioMobiliare;
	var ISR;
	var DetrazioneImmobili;
	var ImmobiliTotale;
	var ISP;
	var DetrazioneBeniMobili;
	var ISEE = 0;
	var ScalaEquivalenza = 0.0;
	var ISE = 0;
	
	// determina detrazione su canone locazione
	DetrazioneCanone = Math.min(parseFloat(CanoneLocazione), SogliaMaxCanone); 
	
	// calcola rendimento patrimonio mobiliare
	RendimentoPatrimonioMobiliare = Math.round(parseFloat(SommaPatrimonioMobiliare) * RendimentoMedioTitoli) / 100;

	// verifica se la detrazione canone supera il reddito sommato al rendimento patrimonio mobiliare
	DetrazioneCanone = Math.min(DetrazioneCanone, parseFloat(SommaRedditi) + RendimentoPatrimonioMobiliare);
	
	// calcolo ISR
	ISR = parseFloat(SommaRedditi) + RendimentoPatrimonioMobiliare - DetrazioneCanone;
	
	// determina la detrazione sugli immobili
	if ( parseFloat(ResiduoMutuoAb) > SogliaMinAbitazione )
		DetrazioneImmobili = Math.min(parseFloat(ResiduoMutuoAb),parseFloat(ImmobiliAb));
	else
		DetrazioneImmobili = Math.min(SogliaMinAbitazione,parseFloat(ImmobiliAb));
		
	ImmobiliTotale = parseFloat(ImmobiliNonAb) + parseFloat(ImmobiliAb);

	// calcola ISP e determina detrazione sui beni mobiliari
	if ( SommaPatrimonioMobiliare > SogliaMaxDetrazione ) {
		ISP = ImmobiliTotale - DetrazioneImmobili + parseFloat(SommaPatrimonioMobiliare) - SogliaMaxDetrazione;
		DetrazioneBeniMobili = SogliaMaxDetrazione;
	}
	else {
		ISP = ImmobiliTotale - DetrazioneImmobili;
		DetrazioneBeniMobili = parseFloat(SommaPatrimonioMobiliare);
	}

	// calcola ISE
	ISE = ISR + Math.round(ISP * MoltiplicatoreISP * 100) / 100;
	
	// determina il valore della scala di equivalenza
	switch ( parseInt(NumComponenti,10) ) {
		case 1:	ScalaEquivalenza = 1;break;
		case 2: 	ScalaEquivalenza = 1.57;break;
		case 3: 	ScalaEquivalenza = 2.04;break;
		case 4: 	ScalaEquivalenza = 2.46;break;
		case 5: 	ScalaEquivalenza = 2.85;break;
		//default: ScalaEquivalenza = 2.85 + 0.35 * (NumComponenti - 5);break;
	}
	
	if ( parseInt(NumComponenti,10) > 5 ) ScalaEquivalenza = Math.round((2.85 + 0.35 * (parseInt(NumComponenti,10) - 5))*100)/100;
	
	if ( parseInt(NumComponenti,10) > 0 ) {
		if ( FlagUnicoGenitore == true )
			ScalaEquivalenza = Math.round((ScalaEquivalenza + 0.2)*100)/100;
		
		//alert(ScalaEquivalenza);
		//alert(parseInt(NumHnd));
		ScalaEquivalenza = Math.round((ScalaEquivalenza + 0.5 * parseInt(NumHnd,10))*100)/100;
		//alert(ScalaEquivalenza);
		
	
		if ( FlagLavoroAmboGenitori == true )
			ScalaEquivalenza = Math.round((ScalaEquivalenza + 0.2)*100)/100;
	
		// calcola ISEE
		ISEE = Math.round((ISE / ScalaEquivalenza) * 100) / 100;
	
		// assegna i valori ai campi della form
		fieldISEE.value = ISEE;
		fieldScalaEquivalenza.value = ScalaEquivalenza;
		fieldISE.value = ISE;
	}
	
} // end function SimulaISEE


function checkSimulaISEE(NomeForm) {
	// Controllo Numero Persone componenti il nucleo familiare
	if (CheckPositiveNumber(NomeForm.txtCompNucleo,"Il numero persone componenti il nucleo familiare ")==false)
		return false; 
	// Controllo numero persone con handicap
	if (NomeForm.txtNumSoggHand.value != "" && NomeForm.txtNumSoggHand.value != "0") {
		if (CheckPositiveNumber(NomeForm.txtNumSoggHand,"Il numero soggetti con handicap ")==false)
			return false; 
		if (parseInt(NomeForm.txtNumSoggHand.value,10)>parseInt(NomeForm.txtCompNucleo.value,10)) {
			alert("Il numero soggetti con handicap non può essere superiore al numero persone componenti il nucleo familiare");
			SetFocus(NomeForm.txtNumSoggHand);
			return false;
		}
	}
	// Controllo canone di locazione
	if (CheckDecimalNumber(NomeForm.txtImportoLocaz, "Il canone annuale di locazione",12,2)==false)
		return false;
	// Controllo redditi quadro F4
	if (CheckDecimalNumber(NomeForm.txtRedditiF4, "La somma dei redditi (IRPEF e IRAP)",12,0)==false)
		return false;
	// Controllo patrimonio mobiliare quadro F5
	if (CheckDecimalNumber(NomeForm.txtRedditiF5, "La somma dei patrimoni mobiliari",12,0)==false)
		return false;
	// Controllo valore ICI
	if (CheckDecimalNumber(NomeForm.txtIciAbitaz, "Il valore ICI della casa di abitazione",12,0)==false)
		return false;
	// Controllo valore mutuo residuo
	if (CheckDecimalNumber(NomeForm.txtMutuoAbitaz, "La somma dei valori dei mutui residui",12,0)==false)
		return false;
	// Controllo valore ICI altri immobili non di abitazione
	if (CheckDecimalNumber(NomeForm.txtIciNoAbitaz, "La somma dei valori ICI di immobili non di abitazione",12,0)==false)
		return false;

	// Controllo sulla scelta abitazione di proprietà o in locazione
	if (NomeForm.rbProprieta.checked==false && NomeForm.rbLocazione.checked==false) {
		alert("Specificare se l'abitazione del nucleo è di proprietà o in locazione!");
		SetFocus(NomeForm.rbProprieta);
		return false;
	}

	return true;

} // end function checkSimulaISEE