var gr = new Graph(400,200,1,0);
var graphRef="";
var skipingraph=1;
var ggg=0;
var a=0;
var b=1;
var zz="\r";
var d="";
var e="--------------------------------------------------------------------------------------";
var f=[0.0000000000000001,0.000000000000001,0.00000000000001,0.0000000000001,0.000000000001,0.00000000001,0.0000000001,0.000000001,0.00000001,0.0000001,0.000001,0.00001,0.0001,0.001,0.01,0.1,1.,10.,100.,1000.,10000.,100000.,1000000.,10000000.,100000000.,1000000000.,10000000000.];function Power(n){return f[n+16];};var gg=59;var h=[5,10,10,10,10,12];var i=["","Mensualité","dont","dont","dont","Capital"];var j=["","","Assurance","Intérêts","Amort.","restant dû"];var k,l,m;function Execute(n,g){var o=0;var p="";var q="";if(b){p=e.substring(0,gg)+zz+CenterString("Tableau d'Amortissement",gg)+zz+e.substring(0,gg)+zz;};var r=parseFloat(n.amt.value.replace(/,/gi,"."));var s=parseFloat(n.per.value.replace(/,/gi,"."));var t=parseFloat(s)/1200;var u=(isNaN(parseFloat(n.years.value))?0:Math.round(parseFloat(n.years.value)*12))+(isNaN(parseFloat(n.months.value))?0:Math.round(parseFloat(n.months.value)));var v=parseFloat(n.payment.value.replace(/,/gi,"."));
var w=(isNaN(parseFloat(n.insKE.value.replace(/,/gi,".")))?0:parseFloat(n.insKE.value.replace(/,/gi,".")));
var x=parseFloat(w)/1200;
var y=(isNaN(parseFloat(n.insKRD.value.replace(/,/gi,".")))?0:parseFloat(n.insKRD.value.replace(/,/gi,".")));
var z=parseFloat(y)/1200;if(r<0||t<0||u<0||v<0||x<0||z<0){o=100;q+="Erreur: Aucune valeur ne peut être négative.";}var A=(r?1:0)+(t?1:0)+(u?1:0)+(v?1:0);if(A<3){o=110;q+="Erreur: Parmis les champs Montant, Durée, Taux et Mensualité, seul celui que vous souhaitez calculer peut être laissé vide.";}if(t){t=t+z;s=s+y;}var nX,nY,A=25;if(!o){if(!u){if(t*r>=v){o=200;q+="Erreur: La mensualité est trop faible "+"pour pouvoir rembourser le prêt.";}
else{u=Math.floor(Math.log(1-t*r/v)/Math.log(1-t))-1;if(u<1)u=1;while(A-->0&&(nX=PresentValueWithInsKE(v,t,u,x))<r){if(a)p+="iMonths, nX: "+u+", "+nX+z;++u;}}}if(!t){var nX=1;if(PresentValueWithInsKE(v,0,u,x)<r){o=210;q+=" Erreur: La mensualité est trop faible "+"pour pouvoir rembourser le prêt."+z;}else{while(A-->0&&Math.abs(r-(B=PresentValueWithInsKE(v,nX,u,x)))>.005){if(a)p+="nX, nPv: "+nX+", "+B+zz;nX*=1+(B-r)/r;};if(a)p+="Exit: nX, nPv: "+nX+", "+B+zz;s=Round(1200*nX-.00005,4);t=s/1200;}}if(!r){r=PresentValueWithInsKE(v,t,u,x);r=Round(r,2);}if(!v){v=r/PresentValueWithInsKE(1,t,u,x);v=Round(v+.005,2);}};if(!o&&u>600){o=250;q+="Erreur: Prêt de plus de 50 ans ! "+""+zz;};if(!o){n.amt.value=Format(r,0,0);n.per.value=Format(s-y,0,3);n.years.value=Math.floor(u/12);n.months.value=Math.floor(u%12);n.payment.value=Format(v,0,2);if(b){p+=" Emprunt de "+CurrencyFormat(r,0,0)+" euros à "+Format(s-y,0,3)+"% d'intérêt annuel "+zz;if(x){p+=" avec une assurance décès/invalidité"+zz+" de "+Format(w,0,3)+"% annuel du capital emprunté"+zz;}if(z){p+=" avec une assurance décès/invalidité"+zz+" de "+Format(y,0,3)+"% annuel du capital restant dû"+zz;}p+=" sur "+u+" mois pour "+CurrencyFormat(v,0,2)+" euros par mois "+zz;p+=e.substring(0,gg)+zz;for(var Z=1;Z<=2;++Z){for(var D=0;D<6;++D)p+=PrepadString(Z==1?i[D]:j[D],h[D]);p+=zz;}p+=e.substring(0,gg)+zz;var E,F,G,H=r;var I=0,J=0;var K=0,L=0,M=0;skipingraph=Math.round(u/60);if (skipingraph<1) skipingraph=1; k=new Array(Math.round(u/skipingraph));l=new Array(Math.round(u/skipingraph));m=new Array(Math.round(u/skipingraph));for(var iK=1;iK<=u;++iK){E=H*z+r*x+J;F=H*(t-z)+I;J=E-Round(E,2);I=F-Round(F,2);E=Round(E,2);F=Round(F,2);if(v>H+F+E)v=H+F+E;G=v-F-E;H-=G;K+=E;L+=F;M+=v;p+=Format(iK,h[0],0)+CurrencyFormat(v,h[1],2);p+=CurrencyFormat(E,h[2],2);p+=CurrencyFormat(F,h[3],2);p+=CurrencyFormat(G,h[4],2);p+=CurrencyFormat(H,h[5],2)+zz;k[Math.round(iK/skipingraph)]=E;l[Math.round(iK/skipingraph)]=F;m[Math.round(iK/skipingraph)]=Math.round(100*G)/100;}p+=zz+"Coût Total du Crédit : "+CurrencyFormat(K+L,0,2)+" euros";p+=zz+"   dont Assurance : "+CurrencyFormat(K,0,2)+" euros";p+=zz+"et dont Intérêts : "+CurrencyFormat(L,0,2)+" euros";g.addRowArray(k);g.addRowArray(l);g.addRowArray(m);g.setLegend("Assurance","Intérêts","Amortissement");g.xLabel="Mois";g.yLabel="Mensualité";g.scale=100;g.setXScale(0,4,skipingraph);/*oForm.sched.rows=iError?20:(iMonths<500)?(iMonths+20):500;*/n.sched.value=p;}}else{alert(q);}return true;}function PresentValueWithInsKE(v,t,N,x){var O=0;var P=(1-Math.pow(1+t,-N))/t;if(Math.abs(t)>1e-20){O=v*P/(1+x*P);}else{O=v*N/(1+x*N);};return O;};function Round(Q,iD){var R=1;if(Q<0){Q=-Q;R=-1;};var S=Math.round(Q);if(iD>0)S=Math.floor(Q);var T=Q-S;if(iD>0)T=Math.round(T*Power(iD))/Power(iD);Q=R*(S+T);return Q;}function CurrencyFormat(Q,iW,iD){return GenFmt(Q,iW,iD,1);}function Format(Q,iW,iD){return GenFmt(Q,iW,iD,0);}function GenFmt(Q,iW,iD,U){var p="";var R=0;if(Q<0){Q=-Q;R=1;}var S=Math.round(Q);if(iD>0)S=Math.floor(Q);var T=Q-S;var V=1;if(S>9)V=Math.floor(Math.log(S+.1)/Math.log(10))+1;var W=iW-R-(U?1:0);if(iD>0)W-=iD+1;if(W>V)p+=d.substring(0,W-V);if(R)p+='-';p+=S;if(iD>0){T=Math.round((1+T)*Power(iD));p+=','+String(T).substring(1);};if(U)p+=' ';return p;};function PrepadString(X,iW){if(X.length<iW)X=d.substring(0,iW-X.length)+X;return X;};function CenterString(X,iW){var Y=iW-X.length;if(Y>0)X=d.substring(0,Math.floor(Y/2))+X+d.substring(0,Y-Math.floor(Y/2));return X;};function popGraph(gra){graphRef=window.open('','mygraph','width=580,height=280,menubar=0,toolbar=0,status=0,scrollbars=1');graphRef.document.writeln('<html><head><title>Amortissement</title></head><body bgcolor=white onLoad="self.focus()">');gra.build(graphRef.document);graphRef.document.writeln('</body></html>');graphRef.document.close();};function calculateAmt(n){gr = new Graph(400,200,1,0);n.amt.value=0;Execute(n,gr);if (ggg && n.amt.value!=0) popGraph(gr);};function calculatePer(n){gr = new Graph(400,200,1,0);n.per.value=0;Execute(n,gr);if (ggg && n.per.value!=0) popGraph(gr);};function calculateYears(n){gr = new Graph(400,200,1,0);n.years.value=0;n.months.value=0;Execute(n,gr);if (ggg && n.years.value!=0) popGraph(gr);};function calculatePayment(n){gr = new Graph(400,200,1,0);n.payment.value=0;Execute(n,gr);if (ggg && n.payment.value!=0) popGraph(gr);}
