
	function calcul()
		{
		//Déclaration des variables (nécessaire pour Netscape, pas pour Explorer)
		var p
		var s
		var l
		var option
		var t
		var a
		var i
		var de
		var ds
		var d
		var c
		var L=[]
		var C=[]
		var A=[]
		var I=[]
		var DF=[]
		var AM=[]
		var RFR=[]
		var RF=[]
		var E=[]
		var F=[]
		
		var gain=0
		var TRI=0
		
		var an=1
		var e=0
		var val=0
		var im=0
		var imc=0
		var mois=0
		var R=0
		var S=0
		var PC=0
		var m=0.001
		var verif=0
		var satur=0
		var decal=0
			
		//récupération des valeurs client. Attention, sous Netscape, pour les listes déroulantes (définies dans le formulaire par l'objet 'select'), la syntaxe "document.valeurs.loyer.value" ne permet pas de reconnaître la valeur. Il faut au préalable déterminer le numéro de l'option sélectionnée (grâce à la variable "option") pour utiliser la syntaxe "document.valeurs.loyer.options[option].value"
		p=eval(document.valeurs.prix.value)
		s=eval(document.valeurs.surface.value)
		option=document.valeurs.loyer.options.selectedIndex
		l=eval(document.valeurs.loyer.options[option].value)
		t=eval(document.valeurs.tmi.value/100)
		a=eval(document.valeurs.apport.value)
		i=eval(document.valeurs.taux.value/100)
		de=Math.round(document.valeurs.duree_emprunt.value)
		option=document.valeurs.duree_simu.options.selectedIndex
		ds=Math.round(document.valeurs.duree_simu.options[option].value)
		if (document.valeurs.cession[0].checked)
			{c=1}
		if (document.valeurs.cession[1].checked)
			{c=0}
						
		//initialisation des variables à 0
		I[0]=0
		RFR[0]=0
		E[1]=""
		F[1]=-a
		
		//vérification des valeurs client
		//Correction automatique si l'apport est supérieur au prix
		if (a>p)
			{
			a=p
			}
		e=p-a
			
		//calcul de l'annuité
		if (i==0)
			{A[1]=e/de}
		else
			{A[1]=Math.round(e*i/(1-Math.pow((1+i/12),(-12*de))))}
			
		for (j=2;j<=de;j++)
			{A[j]=A[j-1]}
		for (j=(de+1);j<=ds;j++)
			{A[j]=0}
		
		//Boucle de calcul des variables qui évoluent
		for (j=1;j<=ds;j++)
			{
			//Calcul des variables dont le mode de calcul est différent à l'année 1
			if(an==1)
				{
				L[1]=12*s*l
				C[1]=L[1]*0.25
				val=p
				}
			else
				{
				L[an]=L[an-1]*1.01
				C[an]=C[an-1]*1.015
				val=val*1.01
				E[an]=-RFR[an-1]*t
				F[an]=L[an-1]+E[an-1]-C[an-1]-A[an-1]
				gain=gain+F[an]
				}
			
			//Calcul des intérêts
			if (an<=de)
				{
				while (mois<=(12*an-1))
					{
					im=(e-mois*A[an]/12+imc)*i/12
					imc=im+imc
					mois++
					}
				S=S+I[an-1]
				I[an]=imc-S
				}
			else 
				{I[an]=0}
			
			//Calcul de la déduction forfaitaire: après 15 ans on passe au régime Besson "ancien"
			if (j<=15) {DF[an]=L[an]*0.06}
			else {DF[an]=L[an]*0.25}
			
			//Calcul de l'amortissement 
			if (j<=5) {AM[an]=p*0.08}
			else 
				{
				if (j<=15) {AM[an]=p*0.025}
				else
					{AM[an]=0}
				}
			
			//Calcul du revenu foncier reportable; si les intérêts sont supérieurs au loyer, ce déficit est 			reportable sur les revenus fonciers des 10 années suivantes; seules les autres charges sont reportables sur le revenu global.
			if (I[an]<L[an])
				{
				RF[an]=L[an]-C[an]-I[an]-DF[an]-AM[an]
				if ((RF[an]+R)>=-10671) 
					{
					RFR[an]=RF[an]+R
					R=0
					}
				else
					{
					R=R+RF[an]+10671
					RFR[an]=-10671
					}
				}
			else
				{
				RF[an]=-C[an]-DF[an]-AM[an]
				if ((RF[an]+R)>=-10671) 
					{
					RFR[an]=RF[an]+R
					R=0
					}
				else
					{
					R=R+RF[an]+10671
					RFR[an]=-10671
					}
				R=R+L[an]-I[an]
				verif=verif+1
				}
							
			//Incrémentation
			an=an+1
			}
			
		//Message pour prévenir que les intérêts sont supérieurs aux loyers
		if (verif>0.5)
			{
			alert ("Attention: intérêts d'emprunt supérieurs au loyer; \rdéficit est reportable sur les revenus fonciers des 10 années suivantes\ret non sur le revenu global de l'année en cours. \r\rSeules les autres charges sont reportables sur le revenu global.")
			}		
		
		//année 16: on s'intéresse à l'économie d'impôt et la cession du bien
		L[an]=""
		C[an]=""
		A[an]=""
		I[an]=""
		DF[an]=""
		AM[an]=""
		RFR[an]=""
		RF[an]=""
		E[an]=-RFR[an-1]*t
		
		if (c==1)
			{
			PC=val*1.01
			F[an]=L[an-1]+E[an-1]+PC-C[an-1]-A[an-1]
			}
		else
			{
			PC="pas de cession"
			F[an]=L[an-1]+E[an-1]-C[an-1]-A[an-1]
			}
		
		gain=gain+E[an]+F[an]-a
		if (de>ds)
			{
			for (k=ds+1;k<=de;k++)
			gain=gain+A[k]
			}
		
		//Calcul du TRI
		terme=[]
		SF=10
		m=0
		//calcul approché
		while (SF>0)
			{
			m=m+0.01
			SF=0
			for(k=1;k<=(ds+1);k++)
				{
				terme[k]=Math.pow((1+m),(k))
				terme[k]=F[k]/terme[k]
				SF=SF+terme[k]
				}
			
			if (m>=11)
				{
				SF=-10
				alert("Votre simulation sera effectuée sans calcul de taux de rentabilité interne.")
				satur=1
				}
			}
					
		//affinage de la précision
		m=m-0.01
		SF=10
		if (satur!=1)
			{ 
			while (SF>0)
				{
				m=m+0.001
				SF=0
				for(k=1;k<=(ds+1);k++)
					{
					terme[k]=Math.pow((1+m),(k))
					terme[k]=F[k]/terme[k]
					SF=SF+terme[k]
					}
				}
			}
		TRI=100*(m-0.001)
		TRI=(Math.round(TRI*10))
		TRI=TRI/10
				
		//Pas de calcul de TRI si fin de simu avnt le remboursement
		if (ds<de)
			{
			alert ("Dans votre cas, la simulation est effectuée sur une période plus courte que la période de remboursement.\rVotre simulation sera effectuée sans calcul de taux de rentabilité interne.")
			decal=1
			}
		
		//Présentation des résultats
		//Rappel des valeurs client et écriture des résultats principaux: TRI, gain, prix de cession
		document.write("<body bgcolor='#fffad9' font-size='9 pt'>")

		document.write("<table align='center' bgcolor='#fffad9' width='700px' border='0' cellspacing='0' cellpadding='0'>")
		
		document.write("<tr><td>")

		document.write("<table bgcolor='#FFFFFF' width='700px' border='0' cellspacing='0' cellpadding='0'>")
		document.write("<tr><td align='center'></td></tr>")
		document.write("</table>")
		
		document.write("</td></tr>")
		
		document.write("</table>")
		
		document.write("<table border='0' bgcolor='#fffad9' width='700px' align='center' cellspacing='0'>")
		
		document.write("<tr><td>")

		document.write("<table bgcolor='#fffad9' width='700px' align='center' cellspacing='0'>")
		document.write("<tr bgcolor='#fffad9'><th colspan='2' align='left'>Rappel de vos données</th>")
		document.write("<th colspan='1' align='left' bgcolor='#fffad9'>Voici les résultats de votre investissement Besson - De Robien</th></tr>")
		document.write("<tr><td width='26%'><font size='-1'>Prix d'achat (tous frais inclus):</td>")
    	document.write("<td width='20%'><font size='-1'>",p," euro</td>")
		document.write("<td width='30%'></td><td width='17%'></td></tr>")
		document.write("<tr><td><font size='-1'>Surface Besson - De Robien:</td>")
		document.write("<td><font size='-1'>",s," m²</td>")
		document.write("<td><B>Taux de Rentabilité Interne:</td>")
		if ((TRI>=1000)||(decal>=0.5)||(TRI==0))
			{document.write("<td></td></tr>")}
		else
			{document.write("<td><B>",TRI," % </font></td></tr>")}
		document.write("<tr><td><font size='-1'>Loyer mensuel au m²:</td>")
		document.write("<td><font size='-1'>",l," euro/m²</td>")
		document.write("<td><B>Montant de vos gains:</font></td>")
		document.write("<td><B>",Math.round(gain)," euro</td></tr>")
		document.write("<tr><td><font size='-1'>Taux marginal d'imposition: </td>")
		document.write("<td><font size='-1'>",(Math.round(t*100*100))/100," %</td>")
		document.write("<td><B>Prix de cession du bien:</font></td>")
		if (c==1)
			{document.write("<td><B>",Math.round(PC)," euro</td></tr>")}
		else
			{document.write("<td><B>",PC,"</td></tr>")}
		document.write("<tr><td><font size='-1'>Apport personnel:</td>")
		document.write("<td><font size='-1'>",Math.round(a)," euro</td>")
		document.write("<td></td><td></td></tr>")
		document.write("<tr><td><font size='-1'>Taux de prêt (assurance incluse):</td>")
		document.write("<td><font size='-1'>",(Math.round(i*100*100))/100," %</td>")
		document.write("<td></td><td></td></tr>")
		document.write("<tr><td><font size='-1'>Durée de l'emprunt:</td>")
		document.write("<td><font size='-1'>",Math.round(de)," ans</td>")
		document.write("<td colspan='2'align='center'><a href='javascript:history.back(1)'>Retour simulation</a></td>")
		document.write("<td></td></tr>")
		document.write("<tr><td><font size='-1'>Cession du bien:</td>")
		if (c==1)
			{document.write("<td><font size='-1'>OUI</td>")}
		else
			{document.write("<td><font size='-1'>NON</td>")}
		document.write("<td></td><td></td></tr></table><br>")
		
	
		//Ecriture du détail des résultats dans un tableau
		//Ligne de titres
		
		document.write("<center><font size='+1'>Détails sur l'évolution de votre investissement</center><br>")
		
		document.write("<table bgcolor='#d7cdba' border='2'align=center width='700px'>")
		document.write("<tr align='center' valign='middle'>")
		document.write("<th>Année</th>")
		document.write("<th>Loyer<br>annuel</th>")
		document.write("<th>Charges<br>annuelles</th>")
		document.write("<th>Annuité<br>de crédit</th>")
		document.write("<th>Intérêts<br>versés</th>")
		document.write("<th>Déduction<br>forfaitaire</th>")
		document.write("<th>Amortis-<br>sement<br>DeRobien</th>")
		document.write("<th>Revenu<br>foncier<br>reportable</th>")
		document.write("<th>Economie<br>d'impôt</th><th>Flux<br>annuel</th></tr>")
		
		//Boucle pour l'écriture des valeurs dans le tableau (boucle = une année)
		for(j=1;j<=ds+1;j++)
			{		
			document.write("<tr align='right'>")
			document.write("<td align='center'>",j,"</td>")
			document.write("<td>",Math.round(L[j]),"</td>")
			document.write("<td>",Math.round(C[j]),"</td>")
			document.write("<td>",Math.round(A[j]),"</td>")
			document.write("<td>",Math.round(I[j]),"</td>")
			document.write("<td>",Math.round(DF[j]),"</td>")
			document.write("<td>",Math.round(AM[j]),"</td>")
			document.write("<td>",Math.round(RFR[j]),"</td>")
			document.write("<td>",Math.round(E[j]),"</td>")
			document.write("<td>",Math.round(F[j]),"</td></tr>")
			}
		document.write("</table>")
		
		document.write("<br>")		
		
		document.write("<p><font face='Arial, Helvetica, sans-serif' size='2'><b>Quelques explications sur les calculs&nbsp;:</b></font></p><ul><li><font size='2' face='Arial, Helvetica, sans-serif'>Revenus fonciers = loyers bruts d&eacute;duction faite des charges, int&eacute;r&ecirc;ts, d&eacute;duction forfaitaire, amortissement.</font></li><li><font size='2' face='Arial, Helvetica, sans-serif'>Flux annuels = (loyers + &eacute;conomies d'imp&ocirc;ts) d&eacute;duction faite des annuit&eacute;s de cr&eacute;dit et des charges de l'ann&eacute;e pr&eacute;c&eacute;dente.</font></li><li><font size='2' face='Arial, Helvetica, sans-serif'>Gains = somme des flux annuels de toutes les ann&eacute;es + &eacute;conomie d’imp&ocirc;t de la derni&egrave;re ann&eacute;e déduction faite des éventuelles annuités restant à payer*<br>* (si la durée de simulation est inférieure à la durée de l'emprunt)</font></li><li><font size='2' face='Arial, Helvetica, sans-serif'> Les d&eacute;ficits fonciers s’imputeront sur le revenu global imposable, dans la limite           de 10671 euro par an. Si cette limite est d&eacute;pass&eacute;e, les reliquats s’ajoutent aux d&eacute;ficits fonciers des 10 ann&eacute;es suivantes.</font></li><li><font size='2' face='Arial, Helvetica, sans-serif'> Il existe un d&eacute;calage d’un an entre les recettes et l’imp&ocirc;t leur correspondant.</font></li><li><font size='2' face='Arial, Helvetica, sans-serif'> En cas de non-cession du bien en dernière année, le taux de rentabilité interne n'est pas calculé.</font></li></ul>")

		document.write("</td></tr>")		
		document.write("</table>")
		
		}
