// mediatix.com rs 31/03/2008

// parametres

var montantmax=10000000;
var montantmin=0;
var dureemax=40;
var dureemin=10;
var txinteretmax=10;
var txinteretmin=0;
var txassurancemax=10;
var txassurancemin=0;
var mensualitemax=1000000;
var mensualitemin=0;
var	modeAssurance=2;


// simulation rapide

function rinconnuechange() {
	var f=document.rapide;
	var i=f.inconnue.selectedIndex;
	f.montant.className=(i==0)?"readonly":"";
	f.duree.className=(i==1)?"readonly":"";
	f.txinteret.className=(i==2)?"readonly":"";
	f.mensualite.className=(i==3)?"readonly":"";
}

function rmontantblur(src) {
	src.value=inttostr(Math.min(montantmax,Math.max(montantmin,strtoint(src.value))));
}

function rdureeblur(src) {
	src.value=inttostr(Math.min(dureemax,Math.max(dureemin,strtoint(src.value))));
}

function rtxinteretblur(src) {
	src.value=floattostr(Math.min(txinteretmax,Math.max(txinteretmin,strtofloat(src.value))));
}

function rmensualiteblur(src) {
	src.value=inttostr(Math.min(mensualitemax,Math.max(mensualitemin,strtoint(src.value))));
}

function rcalculer() {
	var f=document.rapide;
	var inconnue=f.inconnue.selectedIndex;
	var montant=strtoint(f.montant.value);
	var duree=strtoint(f.duree.value);
	var txinteret=strtofloat(f.txinteret.value);
	var mensualite=strtoint(f.mensualite.value);
	if (inconnue==0) { // montant
		if ((duree>0)&&(mensualite>0)) {
			f.montant.value=inttostr(montant=calcMontant(mensualite,duree,txinteret,0));
			f.cout.value=inttostr(mensualite*duree*12-montant);
		} else {
			f.montant.value="";
			f.cout.value="";
		}
	} else if (inconnue==1) { // duree
		if ((montant>0)&&(mensualite>0)) {
			if (calcMensualite(montant,dureemax,txinteret,0)>mensualite) {
				duree=dureemax;
				f.duree.value=duree;
				f.mensualite.value=inttostr(mensualite=calcMensualite(montant,duree,txinteret,0));
				f.cout.value=inttostr(mensualite*duree*12-montant);
			} else {
				if (calcMensualite(montant,dureemin,txinteret,0)<mensualite) {
					duree=dureemin;
					f.duree.value=duree;
					f.mensualite.value=inttostr(mensualite=calcMensualite(montant,duree,txinteret,0));
					f.cout.value=inttostr(mensualite*duree*12-montant);
				} else {
					for (duree=dureemin; duree<=dureemax; duree++) {
						var m=calcMensualite(montant,duree,txinteret,0);
						if (m<=mensualite) {
							f.duree.value=duree;
							mensualite=m;
							f.mensualite.value=inttostr(m);
							f.cout.value=inttostr(mensualite*duree*12-montant);
							break;
						}
					}
				}
			}
		} else {
			f.duree.value="";
			f.cout.value="";
		}
	} else if (inconnue==2) { // txinteret
		if ((montant>0)&&(duree>0)&&(mensualite>0)) {
			if (calcMensualite(montant,duree,txinteretmax,0)<mensualite) {
				f.txinteret.value=floattostr(txinteret=txinteretmax);
				f.mensualite.value=inttostr(mensualite=calcMensualite(montant,duree,txinteret,0));
				f.cout.value=inttostr(mensualite*duree*12-montant);
			} else {
				if (calcMensualite(montant,duree,txinteretmin,0)>mensualite) {
					f.txinteret.value=floattostr(txinteret=txinteretmin);
					f.mensualite.value=inttostr(mensualite=calcMensualite(montant,duree,txinteret,0));
					f.cout.value=inttostr(mensualite*duree*12-montant);
				} else {
					var tx1=txinteretmin;
					var tx2=txinteretmax;
					while ((tx2-tx1)>.005) {
						txinteret=(tx1+tx2)/2;
						if (calcMensualite(montant,duree,txinteret,0)>mensualite) tx2=txinteret; else tx1=txinteret;
					}
					f.txinteret.value=floattostr(txinteret);
					f.cout.value=inttostr(mensualite*duree*12-montant);
				}
			}
		} else {
			f.txinteret.value="";
			f.cout.value="";
		}
	} else { // mensualite
		if ((montant>0)&&(duree>0)) {
			f.mensualite.value=inttostr(mensualite=calcMensualite(montant,duree,txinteret,0));
			f.cout.value=inttostr(mensualite*duree*12-montant);
		} else {
			f.mensualite.value="";
			f.cout.value="";
		}
	}
}
function rnouveau() {
	var f=document.rapide;
	f.montant.value="";
	f.duree.value="";
	f.txinteret.value="";
	f.mensualite.value="";
	f.cout.value="";
}

// comparateur
function cmontantblur(src) {
	src.value=inttostr(Math.min(montantmax,Math.max(montantmin,strtoint(src.value))));
}

function cdureeblur(src) {
	src.value=inttostr(Math.min(dureemax,Math.max(dureemin,strtoint(src.value))));
}

function ctxinteretblur(src) {
	src.value=floattostr(Math.min(txinteretmax,Math.max(txinteretmin,strtofloat(src.value))));
}

function ctxassuranceblur(src) {
	src.value=floattostr(Math.min(txassurancemax,Math.max(txassurancemin,strtofloat(src.value))));
}

function ccalculer() {
	var f=document.comparateur;
	var montant=strtoint(f.montant.value);
	var duree1=strtoint(f.duree1.value);
	var duree2=strtoint(f.duree2.value);
	var txinteret1=strtofloat(f.txinteret1.value);
	var txinteret2=strtofloat(f.txinteret2.value);
	var txassurance1=strtofloat(f.txassurance1.value);
	var txassurance2=strtofloat(f.txassurance2.value);

	if (col1=(montant>0)&&(duree1>0)) {
		f.mensualite1.value=inttostr(mensualite1=calcMensualite(montant,duree1,txinteret1,txassurance1));
		f.cout1.value=inttostr(cout1=mensualite1*duree1*12-montant);
	} else {
		f.mensualite1.value="";
		f.cout1.value="";
	}

	if (col2=(montant>0)&&(duree2>0)) {
		f.mensualite2.value=inttostr(mensualite2=calcMensualite(montant,duree2,txinteret2,txassurance2));
		f.cout2.value=inttostr(cout2=mensualite2*duree2*12-montant);
	} else {
		f.mensualite2.value="";
		f.cout2.value="";
	}

	if (col1 && col2) {
		f.txinteret3.value=floattostr(txinteret1+txassurance1-txinteret2-txassurance2);
		f.mensualite3.value=inttostr(mensualite1-mensualite2);
		f.cout3.value=inttostr(cout1-cout2);
	} else {
		f.txinteret3.value="";
		f.mensualite3.value="";
		f.cout3.value="";
	}
}
function cnouveau() {
	var f=document.comparateur;
	f.montant.value="";
	f.duree1.value="";
	f.duree2.value="";
	f.txinteret1.value="";
	f.txinteret2.value="";
	f.txinteret3.value="";
	f.txassurance1.value="";
	f.txassurance2.value="";
	f.mensualite1.value="";
	f.mensualite2.value="";
	f.mensualite3.value="";
	f.cout1.value="";
	f.cout2.value="";
	f.cout3.value="";
}

// lecture & conversion

function lectnb(snbre,signe) {
	var s=snbre.toString();
	var sign="";
	var nbre="";
	var virg=0;
  for (var p=0; p<s.length; p++) {
		var c=s.charAt(p);
		if ((c>="1" && c<="9") || ((c=="0")&&(nbre!=""))) nbre+=c;
		if (((c==",")||(c==".")) && (virg==0)) {
			nbre+=".";
			virg++;
		}
		if ((c=="-")&&(nbre=="")&&(signe==1)) sign="-";
	}
	return (nbre=="")?"0":(sign+nbre);
}

function strtoint(snbre,signe) {
	if (strtoint.arguments.length<2) signe=0;
	return Math.round(parseFloat(lectnb(snbre,signe)));
}

function strtofloat(snbre,signe) {
	if (strtofloat.arguments.length<2) signe=0;
	return Math.round(parseFloat(lectnb(snbre,signe))*1000)/1000;
}

function inttostr(inbre,afficherZero) {
	if (inttostr.arguments.length<2) afficherZero=1;
	inbre=Math.round(parseFloat(inbre));
	var sign="";
	if (inbre<0) {
		sign="-";
		inbre=-inbre;
	}
	var s=inbre.toString();
	var snbre="";
	for (var p=0; p<s.length; p++) {
		var c=s.charAt(s.length-p-1);
		if ((p!=0)&&(p%3==0)) {
			snbre=c+" "+snbre;
		} else {
			snbre=c+snbre;
		}
	}
	if ((snbre=="0")&&(afficherZero==0)) snbre=""; else snbre=sign+snbre;
	return snbre;
}

function floattostr(fnbre,afficherZero,decimals) {
	if (floattostr.arguments.length<2) afficherZero=1;
	if (floattostr.arguments.length<3) decimals=2;
	var sign="";
	if (fnbre<0) {
		sign="-";
		fnbre=-fnbre;
	}
  var m=Math.pow(10,decimals);
	fnbre=Math.round(fnbre*m)/m;
	var ent=Math.floor(fnbre);
	var dec=Math.round((fnbre-ent)*m);
	var sdec=dec.toString();
  while (sdec.length<decimals) sdec="0"+sdec;
  return ((ent==0)&&(dec==0)&&(afficherZero==0))?"":(sign+inttostr(ent)+','+sdec);
}

function editblur(src,afficherZero) {
	if (editblur.arguments.length<2) afficherZero=1;
	src.value=inttostr(strtoint(src.value),afficherZero);
}

function editblurf(src,afficherZero,decimals) {
	if (editblurf.arguments.length<2) afficherZero=1;
	if (editblurf.arguments.length<3) decimals=2;
	src.value=floattostr(strtofloat(src.value),afficherZero,decimals);
}


// calcul financier

function calcCoefPret(i,duree) {
	return Math.pow(1+i,duree);
}

function calcMensualite(mnt,dur,txi,txa) {
	mis=dur*12;
	if(modeAssurance==1) {
		txm=(txi+txa)/1200;
		if (txm>0) {
			prw=calcCoefPret(txm,mis);
			result=mnt*prw*txm/(prw-1);
		} else {
			result=mnt/mis;
		}
	} else {
		txm=txi/1200;
		if (txm>0) {
			prw=calcCoefPret(txm,mis);
			result=mnt*(prw*txm/(prw-1)+txa/1200);
		} else {
			result=mnt*(1/mis+txa/1200);
		}
	}
	return result;
}

function calcMontant(mns,dur,txi,txa) {
	mis=dur*12;
	if(modeAssurance==1) {
		txm=(txi+txa)/1200;
		if (txm>0) {
			prw=calcCoefPret(txm,mis);
			result=mns*(prw-1)/(prw*txm);
		} else {
			result=mns*mis;
		}
	} else {
		txm=txi/1200;
		if (txm>0) {
			prw=calcCoefPret(txm,mis);
			result=mns*(prw-1)/(prw*txm+txa/1200*(prw-1));
		} else {
			result=mns/(1/mis+txa/1200);
		}
	}
	return result;
}

