var cookiePret = 0, Ph, Pv, T, T2, Ttype, Te, Tf, A, N, Ass, Fr, P, Tt, Teg, D, Nf, Ftype, Fv, Pf, v, erreur = true

var datePv = leJour +"/"+ leMois +"/"+ lAnnee, jour, mois, annee

function changeErreur() { 
	erreur = true 
} 
 
function pretVariable(form) {
	Pv = (form.Pv.value == "") ? 0 : parseFloat(eval(form.Pv.value))
	T = (form.T.value == "") ? 0 : parseFloat(eval(form.T.value))
	A = form.A.options[form.A.selectedIndex].value
	N = (form.N.value == "") ? 0 : parseInt(eval(form.N.value))
	Ass2 = form.Ass2.options[form.Ass2.selectedIndex].value
	Ass = (form.Ass.value == "") ? 0 : arrondi(parseFloat(eval(form.Ass.value)),2)
	Fr = (form.Fr.value == "") ? 0 : parseFloat(eval(form.Fr.value))
	V = (form.V.value == "") ? 0 : parseFloat(eval(form.V.value))
	Teg = "" ; Tt = ""
	Ttype = 0 ; Te = 0 ; Nf = 0 ; Ftype = 0 ; Fv = 0 ; Pf = 0
	datePv = form.datePv.value; datePv = verifDate(datePv)
	return
}

function calculEcheance(form) {
	form.V.value = ""
	pretVariable(form)
	if (Pv==0 || T==0 || N==0) { alert("\nvaleur incorrecte !") ; return }
	if (Ass2 == "Pcapital") {
		V = centimes(- calculV(Pv,T/(100*A),A,N,-Fv,Te) + (Pv*Ass/100/A))
	} else {
		V = centimes(- calculV(Pv,T/(100*A),A,N,-Fv,Te) + Ass)
	}
	Teg = calculT(Pv-Fr,A,N,V,Fv,Te)
	Tt = V*N-Pv+Fv+Fr
	changePret(form)
}

function calculCapital(form) {
	form.Pv.value = ""
	pretVariable(form)
	if (T==0 || N==0 || V==0) { alert("\nvaleur incorrecte !") ; return }
	Pv = centimes(calculPv(-(V-Ass),T/(100*A),A,N,-Fv,Te)
)
	Teg = calculT(Pv-Fr,A,N,V,Fv,Te)
	Tt = centimes(V*N-Pv+Fv+Fr)
	changePret(form)
}

function calculTaux(form) {
	form.T.value = ""
	pretVariable(form)
	if (Pv==0 || N==0 || V==0) { alert("\nvaleur incorrecte !") ; return }
	T = arrondi(calculT(Pv,A,N,V - Ass,Fv,Te),3)
	Teg = calculT(Pv - Fr,A,N,V,Fv,Te)
	Tt = V*N-Pv+Fv+Fr; Pf = 0;
	changePret(form)
}

function calculDuree(form) {
	form.N.value = ""
	pretVariable(form)
	if (Pv==0 || T==0 || V==0) { alert("\nvaleur incorrecte !") ; return }
	N = arrondi(calculDu(Pv,-(V-Ass),T/(100*A),-Fv,Te),0)
	V = - calculV(Pv,T/(100*A),A,N,-Fv,Te) + Ass
	Teg = calculT(Pv - Fr,A,N,V,Fv,Te)
	Tt = V*N-Pv+Fv+Fr; Pf = 0
	changePret(form)
}

function changePret(form) {
	form.Pv.value = centimes(Pv)
	form.T.value = arrondi(T,5)
	form.Fr.value = centimes(Fr)
	form.V.value = centimes(V)
	form.N.value = parseInt(N)
	form.Ass.value = Ass
	form.Teg.value = arrondi(Teg,5)
	form.Tt.value = centimes(Tt)
	erreur = false
}

function pretReset(form) {
	form = document.forms[0]
	form.Pv.value = ""
	form.T.value = ""
	form.A.options[0].selected = true
	form.N.value = ""
	form.Ass2.options[1].selected = true
	form.Ass.value = ""
	form.Fr.value = ""
	form.V.value = ""
	form.Tt.value = ""
	form.Teg.value = ""
	form.datePv.value = leJour +"/"+ leMois +"/"+ lAnnee
	form.Pv.focus()
}

function graphique(form) {
	if (erreur == true) {
		alert("Effectuez préalablement un calcul")
		return
	}
	pretVariable(form)
	if (A==12) { var periode=" mensualités" }
	if (A== 6) { var periode=" bi-mensualités" }
	if (A== 4) { var periode=" trimestres" }
	if (A== 2) { var periode=" semestres" }
	if (A== 1) { var periode=" années" }
	Ass = (form.Ass2.options[form.Ass2.selectedIndex].value == 0) ? Ass*N : Pv*Ass/100/A*(N/A)
	var barBleu  = Pv
	var barVert  = Ass
	var barRouge = (V-Ass)*N-Pv+Fv
	var barJaune = Fr
	var Nbleu = centimes(barBleu), Nrouge = centimes(barRouge), Nvert = centimes(barVert), Njaune = centimes(barJaune)
	var barMax   = Math.max(barBleu,barRouge,barVert,barJaune)
	barBleu  = (barBleu == 0)  ? "" : "<img src=bar_bleu.gif width="+ (barBleu * 350 / barMax) +" height=15 border=0>"
	barRouge = (barRouge == 0) ? "" : "<img src=bar_rouge.gif width="+ (barRouge * 350 / barMax) +" height=15 border=0>"
	barVert  = (barVert == 0)  ? "" : "<img src=bar_vert.gif width="+ (barVert * 350 / barMax) +" height=15 border=0>"
	barJaune = (barJaune == 0) ? "" : "<img src=bar_jaune.gif width="+ (barJaune * 350 / barMax) +" height=15 border=0>"
	var newWindow = window.open("","Graphique_du_pret","toolbar,scrollbars,status,resizable,width=550,height=220")
	var newContent =
	"<HTML>\n"+
	body +
	"<center>\n<form>\n"+
	"<table border=0 bgcolor=#727238 cellspacing=1 cellpadding=0>\n"+
	" <tr>\n"+
	"  <td align=center bgcolor=#D8D8B1>\n"+
	"	<font size=+1 face=arial color=black><b>Graphique du prêt</b></font><br>\n"+
		copyright +
	"  </td>\n"+
	" </tr>\n"+
 	" <tr>\n"+
	"  <td bgcolor=#F7F7EE>\n"+
	"<table width=100% border=0>\n"+
	" <tr><td><font face=arial>Capital</td><td align=right>"+ Nbleu +"</td><td>"+ barBleu +"</td></tr>\n"+
	" <tr><td><font face=arial>Intérêts</td><td align=right>"+ Nrouge +"</td><td>"+ barRouge +"</td></tr>\n"+
	" <tr><td><font face=arial>Assurance</td><td align=right>"+ Nvert +"</td><td>"+ barVert +"</td></tr>\n"+
	" <tr><td><font face=arial>Frais</td><td align=right>"+ Njaune +"</td><td>"+ barJaune +"</td></tr>\n"+
 	"</table>\n"+
	"  </td>\n"+
	" </tr>\n"+
	"</table>\n<br>\n<input type=button value=\"Fermer\" onClick=\"self.close()\">\n</form>\n</BODY>\n</HTML>\n";
	newWindow.document.write(newContent)
	newWindow.document.close()
}

function amortissement(form) {
	if (erreur == true) {
		alert("Effectuez préalablement un calcul")
		return 
	}
	pretVariable(form) ; capital = Pv
	var interetsC=0, assuranceC=0, amortissementC=0, echeanceC=0, anneeC = annee
	if (A==12) { var periode=" mensualités" }
	if (A== 6) { var periode=" bimestres" }
	if (A== 4) { var periode=" trimestres" }
	if (A== 2) { var periode=" semestres" }
	if (A== 1) { var periode=" ann&eacute;es" }
	if (Ass2 == "Pcapital") Ass = Pv*Ass/100/A
	V = - calculV(Pv,T/(100*A),A,N,-Fv,Te) + Ass
	var newWindow = window.open("","Tableau_d_amortissement","toolbar,scrollbars,status,resizable,width=580,height=300")
	var newContent =
	"<html>\n"+ body +"<center>\n"+
	"<table border=0 bgcolor=#727238 cellspacing=1 cellpadding=0>\n"+
	" <tr>\n"+
	"  <td align=center bgcolor=#D8D8B1>\n"+
	"	<font size=+1 color=black>Tableau d'amortissement</b></font><br>\n"+
	"	<br><font color=black face=verdana size=1>simulation remise à titre indicatif (sans valeur contractuelle)\n"+
	"  </td>\n"+
	" </tr>\n"+
	" <tr align=center>\n"+
	"  <td bgcolor=#F7F7EE>\n"+
	"	<font color=black face=verdana size=1><b><u>Avertissement</u></b><br>les banques calculent leur tableau d'amortissement par journée et non par période \n"+
	"	égale dans l'année. Les chiffres suivants sont donc à quelques centimes près.</font><p>\n"+
	"	<font size=2 face=arial><b>Prêt de "+ Pv +" sur "+ N + periode +" à "+ T +" %\n"+
	"	</b></font><br>\n"+
	"  </td>\n"+
	" </tr>\n"+ 
	" <tr align=center>\n"+
	"  <td bgcolor=#F7F7EE>\n"+
	"	<table border=1 bordercolor=#D8D8B1 width=100%>\n"+
	"	<tr align=center>\n"+
	"	 <th>Période</th>\n"+
	"	 <th>Date</th>\n"+
	"	 <th>Intérêts</th>\n"+
	"	 <th>Assurance</th>\n"+
	"	 <th>Amortissement</th>\n"+
	"	 <th>Echéance</th>\n"+
	"	 <th>Restant dû</th>\n"+
	"	</tr>\n"+
	"	<tr align=right>\n"+
	"	 <td align=center>0</td>\n"+
	"	 <td align=center>"+ datePv +"</td>\n"+
	"	 <td>0.00</td>\n"+
	"	 <td>0.00</td>\n"+
	"	 <td>0.00</td>\n"+
	"	 <td>0.00</td>\n"+
	"	 <td>"+ centimes(capital) +"</td>\n"+
	"	</tr>\n"
	var interets = 0, amortissement = 0, echeance = 0, capital = Pv
	for (var i=1 ; i<=N ; i++) { 
		interets = capital * T / (A*100)
		amortissement = V - Ass - interets
		capital -= amortissement
		mois = parseInt(mois) + (12/A)
		if (mois > 12) {
			mois = 1
			annee = parseInt(annee) + 1
		}
		var j = (jour > jourMois[mois]) ? jourMois[mois] : jour
		newContent += 
		" <tr align=right>\n"+
		"  <td align=center>"+ i +"</td>\n"+
		"  <td align=center>"+ j +"/"+ (((""+mois).length == 1) ? "0"+mois : mois)  +"/"+ annee +"</td>\n"+
		"  <td>"+ centimes(interets) +"</td>\n"+
		"  <td>"+ centimes(Ass) +"</td>\n"+
		"  <td>"+ centimes(amortissement) +"</td>\n"+
		"  <td>"+ centimes(V) +"</td>\n"+
		"  <td>"+ centimes(capital) +"</td>\n"+
		" </tr>\n"; 
	}
	newContent +=
	" <tr align=right>\n"+
	"  <td align=center colspan=2><b>Total</td>\n"+
	"  <td><b>"+ centimes((V-Ass)*N-Pv) +"</td>\n"+
	"  <td><b>"+ centimes(Ass*N) +"</td>\n"+
	"  <td><b>"+ centimes(Pv) +"</td>\n"+
	"  <td><b>"+ centimes(V*N) +"</td>\n"+
	"  <td><b>0.00</td>\n"+ 
	" </tr>\n"+
	"</table>\n"+
	"  </td>\n"+
	" </tr>\n"+
	"</table>\n"+
	"<form><input type=button value=\"Fermer\" onClick=\"self.close()\"></form>\n"+
	"</BODY>\n</HTML>\n"
	newWindow.document.write(newContent)
	newWindow.document.close()
}

function pretCookie(form) {
	var choix = form.cookie.options[form.cookie.selectedIndex].value 
	form.cookie.selectedIndex = 0
	if (choix == "pretLecture") pretLecture(form)
	if (choix == "pretEnregistrement") pretEnregistrement(form)
	if (choix == "pretSuppression") { deleteCookie("pret") ; alert("suppression OK") }
}

function pretLecture(form) {
	valeur = getCookie("pret") ; if (valeur == "") return
	form.Pv.value = detailCookie("Pv=")
	form.T.value = detailCookie("T=")
	form.A.options[detailCookie("A=")].selected = true
	form.N.value = detailCookie("N=")
	form.Ass.value = detailCookie("Ass=")
	form.Ass2.options[detailCookie("Ass2=")].selected = true 
	form.Fr.value = detailCookie("Fr=")
	form.V.value = detailCookie("V=")
	form.Tt.value = detailCookie("Tt=")
	form.Teg.value = detailCookie("Teg=")
	alert("lecture OK")
}

function pretEnregistrement(form) {
	Ttype = 0 ; Te = 0 ; Nf = 0 ; Ftype = 0 ; Fv = 0 ; Pf = 0 ; datePv = "" ; dateC = "31/12"
	valeur =",Pv="+ form.Pv.value +
		",T="+ form.T.value +
		",A="+ form.A.selectedIndex +
		",N="+ form.N.value +
		",datePv="+ datePv +
		",Ass="+ form.Ass.value +
		",Ass2="+ form.Ass2.value + 
		",Fr="+ form.Fr.value +
		",V="+ form.V.value +
		",Tt="+ form.Tt.value + 
		",Teg="+ form.Teg.value
	var expdate = new Date()
	expdate.setTime (expdate.getTime() + (30*24*60*60*1000))
	setCookie("pret",valeur +",", expdate)
	alert("enregistrement OK")
}

function verifDate(date) {
	jourMois = new makeArray(12)
	jourMois[1] = 31; jourMois[2] = 28; jourMois[3] = 31; jourMois[4] = 30; jourMois[5] = 31; jourMois[6] = 30;
	jourMois[7] = 31; jourMois[8] = 31; jourMois[9] = 30; jourMois[10] = 31; jourMois[11] = 30; jourMois[12] = 31;
	if (date.length != 10) {
		alert("longueur date invalide")
		return false
	}
	if (date.substring(2, 3) != "/") {
		alert("/ en 3eme caractere manquant")
		return false
	}
	if (date.substring(5, 6) != "/") {
		alert("/ en 7eme caractere manquant")
		return false
	}
	jour = eval(date.substring(0, 2))
	mois = eval(date.substring(3, 5))
	annee = eval(date.substring(6, 10))
	if (jour < 1 || jour > jourMois[mois]) {
		alert("jour invalide")
		return false
	}
	if (mois < 1 || mois > 12) {
		alert("mois invalide")
		return false
	}
	if (parseInt(jour) < 10) jour = "0"+ jour
	if (parseInt(mois) < 10) mois = "0"+ mois
	//return ""+ annee +"/"+ mois +"/"+ jour
	return ""+ jour +"/"+ mois +"/"+ annee
}

function makeArray(n) { 
	this.length = n 
	for (var i=0 ; i<=n ; i++) { this[i]="" } 
	return this 
} 

// =======================================================
//
// formules de calcul
//
// =======================================================

function calculPretV(Pv,A,N,T) {
	if (Pv==0 || A==0 || N==0 || T<0) return ""
	if (T==0) return Pv/N
	return Math.pow(T/(A*100)+1,N)/(Math.pow(T/(A*100)+1,N)-1)*(T/(A*100))*Pv
}

function calculPretPv(A,N,T,E) {
	if (A==0 || N==0 || T==0 || E==0) return ""
	var v = Math.pow(T/(A*100)+1,N)
	return E/((v/(v-1))*(T/(A*100)))
}

function calculT(Pv,A,N,P,Fv,Te) {
	P = arrondi(P,2)
	if(Pv==0 || A==00 || N==0 || P==0) return ""
	var T = 100 ; i = T / 2 ; Echeance = 0 ; var boucle = 0
	while ( Echeance != P && boucle != 1000) { boucle += 1
		Echeance = arrondi(-calculV(Pv,T/(100*A),A,N,-Fv,Te),2)
		T = ( Echeance < P ) ? T + i : T - i ; i /= 2
	} ; if (boucle >= 1000) alert("\ncalcul impossible !\nboucle = "+ boucle)
	return T
}

function calculPretN(Pv,T,A,E) {
	if (Pv==0 || T==0 || A==0 || E==0) return ""
	var A1 = T / (A * 100) + 1
	return (1 / Math.log(A1)) * Math.log(1 / (1 - (A1 - 1) * (Pv / E)))
}

function calculPv(V,T,A,Du,Fv,Mode) {
	var Temp,Pv
	Temp = Math.pow(1 + T, -Du)
	Pv = V * (Temp - 1) * (Mode + 1 / T) - Fv * Temp
	return Pv
}

function calculV(Pv,T,A,Du,Fv,Mode) {
	var Temp,V
	Temp = Math.pow(1 + T, Du)
	V = -T * (Pv * Temp + Fv) / ((Temp - 1) * (1 + T * Mode))
	return V
}

function calculDu(Pv,V,T,Fv,Mode) {
	var Temp,Du
	Temp = V * (1 + T * Mode)
	Du = Math.log((Temp - T * Fv) / (Temp + T * Pv)) / Math.log(1 + T)
	return Du
}

function calculFv(Pv,V,T,A,Du,Mode) {
	var Temp,Fv
	Temp = Math.pow(1 + T, Du)
	Fv = -Pv * Temp + V * (1 - Temp) * (Mode + 1 / T)
	return Fv
}

function calculJour(mois) {
	if (mois==1 || mois==3 || mois==5 || mois==7 || mois==8 || mois==10 || mois==12) return 31
	if (mois==4 || mois==6 || mois==9 || mois==11) return 30
	if (mois == 2) return 28
}

function centimes(v) { 
	if (v == "" || v == 0) return "0.00" 
	v = ''+ Math.round(v*100)/100 
	var x = v.indexOf('.') 
	if (x == -1) { v += '.' } 
	if (x == 0) { v = '0' + v } 
	v += '00' 
	return v.substring(0,v.indexOf('.')+3) 
} 
 
function arrondi(r,d) { 
	d = parseInt(d) 
	var pwr = Math.pow(10,d) 
	var delta = (r < 0.5) ? -0.5 : 0 
	var res = (r * pwr + delta) / pwr 
	return Math.round(res * pwr) / pwr 
} 

// -->

