

function calcCoefPret(i,duree) {
	return Math.pow(1+i,duree);
}
function maj_champ()
{
	for(i=1;i<=nb_palier;i++)
	{
		mens[i] = strtoint(getValue(eval('"mensAFF' + i + '"')));
		duree[i] = strtoint(getValue(eval('"duree' + i + '"')));
	}
}
function calcul_total()
{
	var totalDur=0;
	var totalMens=0;
	var totalInteret=0;
	var totalAssurance=0;
	for(i=1;i<=nb_palier;i++)
	{
		totalDur += strtoint(getValue(eval('"duree'+i+'"')));
		totalMens += strtoint(getValue(eval('"totalmens'+i+'"')));
		totalInteret += strtoint(getValue(eval('"interet'+i+'"')));
		totalAssurance += strtoint(getValue(eval('"assu'+i+'"')));
	}
	setValue("totald", inttostr(totalDur));
	setValue("totalm", inttostr(totalMens));
	setValue("totali", inttostr(totalInteret));
	setValue("totala", inttostr(totalAssurance));

}
function calcMens(mnt,dur,txi,txa) {
	mis=dur*nb_eche_annuelle;
	if(modeAssurance==1) {
		txm=(txi+txa)/nb_eche_annuelle/100;
		prw=calcCoefPret(txm,mis);
		result=mnt*prw*txm/(prw-1);
	} else {
		txm=txi/nb_eche_annuelle/100;
		prw=calcCoefPret(txm,mis);
		result=mnt*(prw*txm/(prw-1)+txa/nb_eche_annuelle/100);
	}
	return result;
}
function calcul_mensualite(capital,mon_pret,modeAssurance,tauxInteret,tauxAssurance,duree)
{
	if (modeAssurance==1) {
		txm=(tauxInteret+tauxAssurance)/1200;
		prw=calcCoefPret(txm,duree);
		mensualite=mon_pret*prw*txm/(prw-1);
	} else {
		txm=tauxInteret/1200;
		prw=calcCoefPret(txm,duree);
		mensualite=mon_pret*prw*txm/(prw-1)+mon_pret*tauxAssurance/1200;
	//	mensualite=mon_pret*(prw*txm/(prw-1)+tauxAssurance/1200);
	}
	return mensualite;
}
function calcul_duree(capital,mon_pret,mensualite,tauxInteret,tauxAssurance,modeAssurance)
{
	dur=0;
	reste2=mon_pret;
	while ((reste2>0))
	{
		dur++;
		var interet=reste2*tauxInteret/1200;
		var assurance=tauxAssurance/1200*((modeAssurance==1)?reste2:mon_pret);
		var principal=mensualite-interet-assurance;
		if(principal<0)	return -1;
		reste2-=principal;
	}
	return dur;
}
function calcul_pret(capital,mon_pret,mensualite,duree,tauxInteret,tauxAssurance,modeAssurance)
{
	reste=mon_pret;
	interetPalier=0;
	assurancePalier=0;
	for (j=0; j<duree; j++)
	{
		var interet=reste*tauxInteret/1200;
		var assurance=tauxAssurance/1200*((modeAssurance==1)?reste:mon_pret);
		var principal=mensualite-interet-assurance;
		reste-=principal;
		interetPalier+=interet;
		assurancePalier+=assurance;
	}
	return Array(reste,interetPalier,assurancePalier);
}
function raz()
{
	for(i=1;i<=nb_palier;i++)
	{
		setValue(eval('"mensAFF'+i+'"'),0);
		setValue(eval('"mens'+i+'"'),0);
		setValue(eval('"duree'+i+'"'),0);
		setValue(eval('"totalmens'+i+'"'),0);
		setValue(eval('"interet'+i+'"'),0);
		setValue(eval('"assu'+i+'"'),0);
		setValue(eval('"capital'+i+'"'),0);
		mens_mem[i] = 0;
		mens[i] = 0;
		duree[i] = 0;
	}
	setValue("totald", 0);
	setValue("totalm", 0);
	setValue("totali", 0);
	setValue("totala", 0);
}
function check_val()
{
	for(i=1; i<=nb_palier;i++)
	{
		mens = getValue(eval('"mensAFF'+i+'"'));
		dur = getValue(eval('"duree'+i+'"'));
		cain = getValue('cain');
		tain = getValue('tain');
		taas = getValue('taas');
		
		if(	!check_champ('mensAFF'+i,'La mensualite',mens,false,'*',0,false,true,false) ||
			!check_champ('duree'+i,'La duree',dur,true,'*',0,false,true,false) ||
			!check_champ('cain','Le capital initial',cain,true,'*',0,false,false,false) ||
			!check_champ('tain','Le taux d\'interet',tain,false,20,0,false,false,false) ||
			!check_champ('taas','Le taux d\'assurance',taas,false,10,0,false,true,false))
			return false;
	}
	return true;
}
function calculer() 
{ 
	var capital=strtoint(getValue('cain'));
	var tauxInteret=strtofloat(getValue('tain'));
	var tauxAssurance=strtofloat(getValue('taas'));
	var modeAssurance=strtofloat(getValue('moas'))+1;

	var interetPalier;
	var assurancePalier;
	var reste=capital;
	var capital_c = capital;
	if(check_val())
	{
		for (i=1; i<=nb_palier; i++) 
		{
			if(mens_mem[i] != strtofloat(getValue(eval('"mensAFF'+i+'"'))))
				setValue(eval('"mens'+i+'"'), strtofloat(getValue(eval('"mensAFF'+i+'"'))));
			var mensualite=strtofloat(getValue(eval('"mens'+i+'"')));
			var dur=strtoint(getValue(eval('"duree'+i+'"')));
			if(i!=1) capital_c = getValue(eval('"capital'+i+'"'));

			if (i==nb_palier) 
			{
				if(duree[i] != dur && dur>0) // on cherche la mensualite
				{
					if(dur>500)
					{
						alert("Le nb. d'echeances maximum par palier est fixe a 500.");
						setValue(eval('"duree'+i+'"'), duree[i]);
						calculer();
						break;
					}
					mensualite = calcul_mensualite(capital,reste,modeAssurance,tauxInteret,tauxAssurance,dur);
					setValue(eval('"mens'+i+'"'), mensualite);
					setValue(eval('"mensAFF'+i+'"'), inttostr(mensualite));
				}
				else if(mensualite>0)	// on cherche la duree
				{
					
					var interet=reste*tauxInteret/1200;
					var assurance=tauxAssurance/1200*((modeAssurance==1)?reste:capital_c);
					if (mensualite<interet+assurance) 
					{
						alert("La mensualite saisie ne peut-etre inferieur au cout du credit, a savoir le cout de l'assurance + le cout des interets.\nLe montant a ete corrige dans ce sens.");
						mensualite=interet+assurance+5; // +5 pour eviter les erreurs d'arrondi
						setValue(eval('"mens'+i+'"'), mensualite);
						setValue(eval('"mensAFF'+i+'"'), inttostr(mensualite));
						calculer();
						break;
					}
					tmp = calcul_duree(capital,reste,mensualite,tauxInteret,tauxAssurance,modeAssurance);
					if(tmp != -1) dur = tmp;
					if(dur<500)
						setValue(eval('"duree'+i+'"'), inttostr(dur));
					else
					{
						setValue(eval('"duree'+i+'"'), duree[i]);
						dur = duree[i];
						setValue(eval('"mens'+i+'"'), mensualite+500); // cas ou le mini en mensualite entraine une duree > 500 : on relance le calcul en ajoutant 500
						setValue(eval('"mensAFF'+i+'"'), inttostr(mensualite+500));
						calculer();
						break;
					}
					
					mensualite = calcul_mensualite(capital,reste,modeAssurance,tauxInteret,tauxAssurance,dur);
					setValue(eval('"mens'+i+'"'), mensualite);
					setValue(eval('"mensAFF'+i+'"'), inttostr(mensualite));
				}
			}
			if (mensualite>0) // calcul des totaux par palier
			{
					if(dur>500)
					{
						alert("Le nb. d'echeances maximum par palier est fixe a 500.");
						setValue(eval('"duree'+i+'"'), duree[i]);
						calculer();
						break;
					}
					var interet=reste*tauxInteret/1200;
					var assurance=tauxAssurance/1200*((modeAssurance==1)?reste:capital_c);
					if (mensualite<interet+assurance) 
					{
						alert("La mensualite saisie ne peut-etre inferieur au cout du credit, a savoir le cout de l'assurance + le cout des interets.\nLe montant a ete corrige dans ce sens.");
						mensualite=interet+assurance+5; // +5 pour eviter les erreurs d'arrondi
						setValue(eval('"mens'+i+'"'), mensualite);
						setValue(eval('"mensAFF'+i+'"'), inttostr(mensualite));
						calculer();
						break;
					}
				resultat = calcul_pret(capital,reste,mensualite,dur,tauxInteret,tauxAssurance,modeAssurance);
				reste = resultat[0];
				if(reste<-0.5)
				{
					alert("Les valeurs entrees aboutissent a un capital restant negatif. Veuillez modifier votre saisie.");
					setValue(eval('"mens'+i+'"'),0);
					setValue(eval('"mensAFF'+i+'"'),0);
					setValue(eval('"duree'+i+'"'),0);
					setValue(eval('"totalmens'+i+'"'),0);
					setValue(eval('"interet'+i+'"'),0);
					setValue(eval('"assu'+i+'"'),0);
					setValue(eval('"capital'+i+'"'),0);
					mens_mem[i] = 0;
					mens[i] = 0;
					duree[i] = 0;
					calculer();
					break;
				}
				if(reste>=-0.5)
				{
					setValue(eval('"totalmens'+i+'"'), inttostr(mensualite*dur));
					setValue(eval('"interet'+i+'"'), inttostr(resultat[1]));
					setValue(eval('"assu'+i+'"'), inttostr(resultat[2]));
					setValue(eval('"capital'+i+'"'), inttostr(reste));
				}
			}
			else 
			{
				setValue(eval('"mens'+i+'"'),0);
				setValue(eval('"mensAFF'+i+'"'),0);
				setValue(eval('"duree'+i+'"'),0);
				setValue(eval('"totalmens'+i+'"'),0);
				setValue(eval('"interet'+i+'"'),0);
				setValue(eval('"assu'+i+'"'),0);
				setValue(eval('"capital'+i+'"'),inttostr(reste));
				mens_mem[i] = 0;
				mens[i] = 0;
				duree[i] = 0;
			}
			mens_mem[i] = mensualite;
		}
		calcul_total();
		maj_champ();
	}
}

