
var data = {
	"TR":{
		"nom_form":"travail",
		"max":["1003.00","1077.00","1188.00","1300.00","1300.01"],
		"min":[null,"1003.01","1077.01","1188.01","1188.01"]		
	}
	,"REMP":{
		"nom_form":"remplacement",
		"max":["1003.00","1077.00","1300.00","1300.01"],
		"min":[null,"1003.01","1077.01"]		
	}
	,"ACT":{
		"nom_form":"activites",
		"max":["1003.00","1077.00","1300.00","1300.01"],
		"min":[null,"1077.01","1300.01"]	
	},"AUTRE":{
		"nom_form":"revenu",
		"max":["1003.00","1077.00","1188.00","1300.00","1300.01"],
		"min":[null,"1003.01","1077.01","1188.01"]	
	},"CUMUL":{
		"nom_form":"revenu",
		"max":["1003.00","1077.00","1188.00","1300.00","1300.01"],
		"min":[null,"1003.01","1077.01","1188.01"]	
	}
}
var enfant_ponderation = 64;
/*
VALEURS AVANT MAJ 2011
var data = {
	"TR":{
		"nom_form":"travail",
		"max":["978.00","1050.00","1159.00","1268.00","1268.01"],
		"min":[null,"978.01","1050.01","1159.01","1059.01"]		
	}
	,"REMP":{
		"nom_form":"remplacement",
		"max":["978.00","1050.00","1268.00","1268.01"],
		"min":[null,"978.01","1050.01"]		
	}
	,"ACT":{
		"nom_form":"activites",
		"max":["978.00","1050.00","1268.00","1268.01"],
		"min":[null,"978.01","1050.01"]	
	},"AUTRE":{
		"nom_form":"revenu",
		"max":["978.00","1050.00","1159.00","1268.00","1268.01"],
		"min":[null,"978.01","1050.01","1159.01"]	
	},"CUMUL":{
		"nom_form":"revenu",
		"max":["978.00","1050.00","1159.00","1268.00","1268.01"],
		"min":[null,"978.01","1050.01","1159.01"]	
	}
}
var enfant_ponderation = 61;
*/


function init(){
	tab_sortie=document.getElementsByName("sortie");
	for(var i=0;i<tab_sortie.length;i++){
		tab_sortie[i].onfocus=function(){this.blur();}
		tab_sortie[i].style.background="#ed9";
		tab_sortie[i].style.border="1px solid black";		
	}
	
	
	//Interval de date
	c_d1=$("d1");
	c_d1.onchange=diff_date;
	c_d2=$("d2");
	c_d2.onchange=diff_date;
	
	//Exemple budget
	document.forms.budget.reset();
	budget_in=$("revenus");
	budget_out=$("depenses");
	budget_dif=$("difference");
	tab_sortie=document.getElementsByName("out_num_opt");
	for(var i=0;i<tab_sortie.length;i++){
		tab_sortie[i].onchange=budget;
	}
	tab_sortie=document.getElementsByName("in_num_opt");
	for( i=0;i<tab_sortie.length;i++){
		tab_sortie[i].onchange=budget;
	}
	//Calcul d'une quotite
		//Revenus de travail
		r_tab=new Array("TR","REMP","ACT","AUTRE","CUMUL");
		
		for (i=0;i<r_tab.length;i++){
		//TODO : appel de la fonctin remplichamp(formulaire, objet li� dans data)
			rempliChamp(document.forms["R_"+r_tab[i]+"_"+data[r_tab[i]].nom_form],data[r_tab[i]],"R_"+r_tab[i]);
			document.getElementsByName("R_"+r_tab[i]+"_revenus")[0].onchange=revenus_travail;
			document.getElementsByName("R_"+r_tab[i]+"_enfants")[0].onchange=revenus_travail;	
		}
		
		//Convertir un taux d'int�r�t
		
		document.getElementsByName("TI_duree_orig")[0].onchange=TI_calcul;
		document.getElementsByName("TI_duree_fin")[0].onchange=TI_calcul;
		document.getElementsByName("TI_taux")[0].onchange=TI_calcul;
		document.getElementsByName("TI_duree")[0].onchange=TI_calcul;		
		document.getElementsByName("TI_equiv")[0].onchange=TI_calcul;
		
		//Tableau d'amortissement-actuariel
		Name("TA_montant").onchange=TA_calcul;
		Name("TA_nbr").onchange=TA_calcul;
		Name("TA_mens_montant").onchange=TA_calcul;
		Name("TA_taeg").onchange=TA_calcul;
		Name("TA_date").onchange=TA_calcul;

		//Tableau d'amortissement-lin�aire
		Name("TAL_montant").onchange=TAL_calcul;
		Name("TAL_nbr").onchange=TAL_calcul;
		Name("TAL_mens_montant").onchange=TAL_calcul;
		Name("TAL_taeg").onchange=TAL_calcul;
		Name("TAL_date").onchange=TAL_calcul;
		
		//Montant d'int�r�t
		Name("MI_montant").onchange=MI_calcul;
		Name("MI_taux").onchange=MI_calcul;
		Name("MI_base_tmp").onchange=MI_calcul;
		Name("MI_date_deb").onchange=MI_calcul;
		Name("MI_date_fin").onchange=MI_calcul;
		
		//Montant d'une mensualit�
		Name("M_montant").onchange=M_calcul;
		Name("M_mensualites").onchange=M_calcul;
		Name("M_taux").onchange=M_calcul;
		
		//Taux d'int�r�t annuel
		Name("TIA_montant").onchange=TIA_calcul;
		Name("TIA_nb").onchange=TIA_calcul;
		Name("TIA_montant_mens").onchange=TIA_calcul;
		
}

function rempliChamp(form,d,nom){
/* 
 * fonction qui recoit un formulaire et un objet de data et rempli les champs
 * correspondants avec les valeurs initiales
 * Utile pour la mises � jour des quotit�s saisissables
 * TODO : la fonction et son appel
 */
	for(var j=0;j<d.max.length;j++){
		if(form[nom+"_max_"+j]){
			form[nom+"_max_"+j].value=d.max[j];
			form[nom+"_max_"+j].previousSibling.nodeValue=String(d.max[j]).replace(/\./,",");
		}
		if(form[nom+"_min_"+j] && d.min.j!==null){
			form[nom+"_min_"+j].value=d.min[j];
			form[nom+"_min_"+j].previousSibling.nodeValue=String(d.min[j]).replace(/\./,",");
		}
	}
}
function TIA_calcul(){
	var montant=Number(r_correct(Name("TIA_montant").value));
	var nb=Number(r_correct(Name("TIA_nb").value));
	var montant_mens=Number(r_correct(Name("TIA_montant_mens").value));
	
	if(isFinite(montant)&&isFinite(montant_mens)&&isFinite(nb)){
		var taux_mens = (((montant_mens*nb)-montant)*100)/(montant*nb);
		
		var taux_final = (taux_mens*nb*24)/(nb+1);
		//		=(((E18*E19)-E20)*100)/(E20*E19)
		//=(E22*E19*24)/(E19+1)
		if(taux_final>0){
			$("TIA_resultat").value=affiche_chiffre(String(Math.round(taux_final*100)/100));
		}else{
			$("TIA_resultat").value="";
		}
	}else{
			$("TIA_resultat").value="";	
	}
}

function M_calcul(){
	var montant=Number(r_correct(Name("M_montant").value));
	var nb=Number(r_correct(Name("M_mensualites").value));
	var taux=Number(r_correct(Name("M_taux").value));
	
	if(isFinite(montant)&&isFinite(taux)&&isFinite(nb)){
		var deno=1+(taux/100);
		var expo=1/12;
		var taux_final=Math.pow(deno,expo)-1;
//		=D6*(E8/(1-((1/(1+E8))^D7)))
		var rep = montant*(taux_final/(1-Math.pow((1/(1+taux_final)),nb)));
		if(rep>0){
			$("M_resultat").value=affiche_chiffre(String(Math.round(rep*100)/100));
		}else{
			$("M_resultat").value="";
		}
	}else{
			$("M_resultat").value="";	
	}
}


function MI_calcul(){
	var montant=Number(r_correct(Name("MI_montant").value));
	var taux=Number(r_correct(Name("MI_taux").value));
	var base_tmp=Number(r_correct(Name("MI_base_tmp").value));
	var date_deb=Name("MI_date_deb").value;
	var date_fin=Name("MI_date_fin").value;
	var er_date=/((^0?[1-9])|([1-2][0-9])|(3[12]))\/((0?[1-9])|1[012])\/[1-2][0-9][0-9][0-9]$/
	if(isFinite(montant) && isFinite(taux) && er_date.test(date_deb) && er_date.test(date_fin)){
		date_deb = new Date(Number(date_deb.split("/")[2]),Number(date_deb.split("/")[1])-1,Number(date_deb.split("/")[0]));
		date_fin = new Date(Number(date_fin.split("/")[2]),Number(date_fin.split("/")[1])-1,Number(date_fin.split("/")[0]));	
		if(date_deb<date_fin){
			var jour = (date_fin.getTime()-date_deb.getTime())/(1000*60*60*24);
			var deno=1+(taux/100);
			switch(base_tmp){
				case 1:
					var exp=jour/365;
				break;
				case 2:
					var exp=jour/30.41666;
				break;	
				
				case 3:
					var exp=jour;
				break;	
			}
			var taux_final=(Math.pow(deno,exp)-1)*100;
			
			var montant_final=affiche_chiffre(String(Math.round((montant*(taux_final/100))*100)/100));
			taux_final=Math.round(taux_final*100)/100;

			$("MI_duree_jour").value=jour;
			$("MI_taux_jour").value=taux_final;
			$("MI_somme").value=montant;
			$("MI_montant_interet").value=montant_final;			
		}else{
			$("MI_duree_jour").value="";
			$("MI_taux_jour").value="";
			$("MI_somme").value="";
			$("MI_montant_interet").value="";			
		}
	}else{
			$("MI_duree_jour").value="";
			$("MI_taux_jour").value="";
			$("MI_somme").value="";
			$("MI_montant_interet").value="";			
		}
	
}
function TA_calcul(){
	var montant=Number(r_correct(Name("TA_montant").value));
	var nbr=Number(r_correct(Name("TA_nbr").value));
	var montant_mens=Number(r_correct(Name("TA_mens_montant").value));
	var taeg=Number(r_correct(Name("TA_taeg").value));
	var date=Name("TA_date").value;
	var er_date=/((^0?[1-9])|([1-2][0-9])|(3[12]))\/((0?[1-9])|1[012])\/[1-2][0-9][0-9][0-9]$/
	
	if(isFinite(montant)&&isFinite(nbr)&&isFinite(montant_mens)&&isFinite(taeg)&&er_date.test(date)){
		var taux=Math.pow((1+(taeg/100)),(1/12))-1;
		var date=new Date(Number(date.split("/")[2]),Number(date.split("/")[1])-1,Number(date.split("/")[0]));
		var part_interet=montant*taux;
		part_capital=montant_mens-part_interet;
		montant=montant-part_capital;
		
		var cpt=1;
		$("TA_sortie").innerHTML="";
		var s_sortie='<table class="TI_amorti" width="100%" border="1"><tr><td>Num�ro de la mensualit�</td><td>Ech�ance</td><td>Montant</td><td >Part en int�r�ts</td><td>Part en capital</td><td style="white-space:pre">Solde en capital</td></tr>';
				
		for(var i=1;i<=nbr;i++){
			s_sortie+="<tr>";
			s_sortie+="<td>"+i+"</td>";
			s_sortie+="<td>"+date.getDate()+"/"+(date.getMonth()+1)+"/"+date.getFullYear()+"</td>";
			s_sortie+="<td>"+Math.round(montant_mens*100)/100+"&nbsp;&euro;</td>";
			s_sortie+="<td>"+Math.round(part_interet*100)/100+"&nbsp;&euro;</td>";
			s_sortie+="<td>"+Math.round(part_capital*100)/100+"&nbsp;&euro;</td>";
			s_sortie+="<td>"+affiche_chiffre(String(Math.round(montant*100)/100))+"&nbsp;&euro;</td>";
			s_sortie+="</tr>";
			date.setMonth(date.getMonth()+1);
			part_interet=montant*taux;
			part_capital=montant_mens-part_interet;
			montant=montant-part_capital;
			
		}
		s_sortie+='</table>';
		$("TA_sortie").innerHTML=s_sortie;
	}
}

function TAL_calcul(){
	var montant=Number(r_correct(Name("TAL_montant").value));
	var nbr=Number(r_correct(Name("TAL_nbr").value));
	var montant_mens=Number(r_correct(Name("TAL_mens_montant").value));
	var taeg=Number(r_correct(Name("TAL_taeg").value));
	var date=Name("TAL_date").value;
	var er_date=/((^0?[1-9])|([1-2][0-9])|(3[12]))\/((0?[1-9])|1[012])\/[1-2][0-9][0-9][0-9]$/
	
	if(isFinite(montant)&&isFinite(nbr)&&isFinite(montant_mens)&&isFinite(taeg)&&er_date.test(date)){
		var taux=Math.pow((1+(taeg/100)),(1/12))-1;
		var date=new Date(Number(date.split("/")[2]),Number(date.split("/")[1])-1,Number(date.split("/")[0]));
		var part_interet = montant*(taeg/100)/12;
		part_capital=montant_mens-part_interet;
		montant=montant-part_capital;
		
		var cpt=1;
		$("TAL_sortie").innerHTML="";
		var s_sortie='<table class="TI_amorti" width="100%" border="1"><tr><td>Num�ro de la mensualit�</td><td>Ech�ance</td><td>Montant</td><td >Part en int�r�ts</td><td>Part en capital</td><td style="white-space:pre">Solde en capital</td></tr>';
				
		for(var i=1;i<=nbr;i++){
			s_sortie+="<tr>";
			s_sortie+="<td>"+i+"</td>";
			s_sortie+="<td>"+date.getDate()+"/"+(date.getMonth()+1)+"/"+date.getFullYear()+"</td>";
			s_sortie+="<td>"+Math.round(montant_mens*100)/100+"&nbsp;&euro;</td>";
			s_sortie+="<td>"+Math.round(part_interet*100)/100+"&nbsp;&euro;</td>";
			s_sortie+="<td>"+Math.round(part_capital*100)/100+"&nbsp;&euro;</td>";
			s_sortie+="<td>"+affiche_chiffre(String(Math.round(montant*100)/100))+"&nbsp;&euro;</td>";
			s_sortie+="</tr>";
			date.setMonth(date.getMonth()+1);
			part_interet = montant*(taeg/100)/12;
			part_capital=montant_mens-part_interet;
			montant=montant-part_capital;
			
		}
		s_sortie+='</table>';
		$("TAL_sortie").innerHTML=s_sortie;
	}
}

function TI_calcul(){

	var deb=Name("TI_duree_orig").value;
	var fin=Name("TI_duree_fin").value;
	var duree=Number(r_correct(Name("TI_duree").value));
	var taux=Number(r_correct(Name("TI_taux").value));
	var equiv=Number(r_correct(Name("TI_equiv").value));
	var moy_jour=365/12;
	var res="";
	if (isFinite(duree) && isFinite(taux) && isFinite(equiv) && duree!=0 && taux!=0 && equiv!=0 ){
		var denom=(1+taux/100)	;
		var exp;
		if (deb==fin){
			exp=equiv/duree;

		}else{
			switch(deb){
				case "annee":
					if (fin=="mois"){
						exp=equiv/(duree*12);
					}else{
						exp=equiv/(duree*365);						
					}
				break;
				case "mois":
					if (fin=="annee"){
						
						exp=(equiv*12)/duree;					
						
					}else{
						exp=equiv/(duree*moy_jour);					
					}
					break;
				case "jour":
					if (fin=="mois"){
						exp=(equiv*moy_jour)/duree;	
					}else{
						exp=(equiv*365)/duree;							
					}
				break;						
			}
		}
			res = Math.round((Math.pow(denom,exp)-1)*10000)/100;
			if(isFinite(res)){
				$("TI_periode").value=Name("TI_equiv").value;
				$("TI_duree").value=Name("TI_duree_fin").options[Name("TI_duree_fin").selectedIndex].text;
				$("TI_taux_fin").value=res;			
			}else{
				$("TI_periode").value="";
				$("TI_duree").value="";
				$("TI_taux_fin").value="";				
			}
		}else{
				$("TI_periode").value="";
				$("TI_duree").value="";
				$("TI_taux_fin").value="";				
		}
	}	


function r_quotite(){
	var infos=this.name.split("_");
	var cat=infos[1];
	var min_max=infos[2];
	var indice=Number(infos[3]);
	this.value=r_correct(this.value);
	$(this.name).value=Number(this.value)+(57*Number(document.getElementsByName("R_"+cat+"_enfants")[0].value));
	revenus_travail(this.form);
}

function r_quotite_all(){
	var f=this.form;
	var cat=f.id.split("_")[1];
	if(isFinite(Number(this.value)) && Number(this.value)%1==0){
		var i=0;
		while($("R_"+cat+"_resultat_"+i)){
			if(f["R_"+cat+"_min_"+i]){
				try{
				f["R_"+cat+"_min_"+i][0].r_quotite();
				}catch(e){
					throw new Error (i+"="+"R_"+cat+"_min_"+i+"-"+f["R_"+cat+"_min_"+i][0])
				}
			}
			
			if(f["R_"+cat+"_max_"+i]){
				f["R_"+cat+"_max_"+i][0].r_quotite();
			}
			i++;
		}
		
	}
}

function revenus_travail(f){

	if(f==null || !f.id)var f=this.form;
	var cat=f.id.split("_")[1];

	var e =Number(f["R_"+cat+"_enfants"].value);
	
	var r =Number(f["R_"+cat+"_revenus"].value);
	var i=1;
	var max,min,somme;
	somme=0;
	while($("R_"+cat+"_resultat_"+i)){
			max=null;
			min=null;
			if($("R_"+cat+"_min_"+i)){
				min =  Number($("R_"+cat+"_min_"+i).value)-.01;
			}
			if($("R_"+cat+"_max_"+i)){
				max =  Number($("R_"+cat+"_max_"+i).value);
			}
			var facteur =  Number(f["R_"+cat+"_quot_"+i].value);
			var valeur=0;
				if(min){
					if(r < max && r >min){
						valeur=Math.round(((r-min)/100*facteur)*100)/100;
						$("R_"+cat+"_resultat_"+i).value =valeur
						somme+=valeur;
					}else if (r > min){
						valeur=Math.round(((max-min)/100*facteur)*100)/100;
						$("R_"+cat+"_resultat_"+i).value = valeur
						somme+=valeur;
					}else{
						$("R_"+cat+"_resultat_"+i).value =0
					}
				}else if(max && r>=max){
					valeur=Math.round(((r-(max-.01))/100*facteur)*100)/100;
					$("R_"+cat+"_resultat_"+i).value = valeur
						somme+=valeur;
				}else{
					$("R_"+cat+"_resultat_"+i).value =0;					
				}
			i++;
	}
	var resultat=(Math.round(somme*100)/100)-(e*enfant_ponderation);
	$("R_"+cat+"_total").value =(resultat>0)?resultat:0;
}

function r_correct(s){
		var reg=/\,/g;
		var retour="";
		 s=s.replace(reg,".");
	 if(isFinite(Number(s))){
			retour=s;
	 }
	 return retour;
}

function budget(){
	if(isFinite(this.value)){
		if(this.name.indexOf("in_")==0){
			budget_in.value=Number(budget_in.value)+Number(this.value);
		}else{
			budget_out.value=Number(budget_out.value)+Number(this.value);
		}
			budget_dif.value=budget_in.value-budget_out.value;	
	}else{
		this.value="";
	}
}

function diff_date(){
	var er_date=/((^0?[1-9])|([1-2][0-9])|(3[12]))\/((0?[1-9])|1[012])\/[1-2][0-9][0-9][0-9]$/
	if(c_d1.value!=""&&c_d2.value!="" && er_date.test(c_d1.value) && er_date.test(c_d2.value) ){
			var det1=c_d1.value.split("/");
			var date1=new Date(Number(det1[2]),Number(det1[1])-1,Number(det1[0]));
			c_d1.value = date1.getDate()+"/"+(date1.getMonth()+1)+"/"+date1.getFullYear();
			var det2=c_d2.value.split("/");
			var date2=new Date(Number(det2[2]),Number(det2[1])-1,Number(det2[0]));
			c_d2.value = date2.getDate()+"/"+(date2.getMonth()+1)+"/"+date2.getFullYear();			
			var dif=(date2-date1)/(1000*60*60*24);
			this.form.sortie.value = Math.round(dif);
	}else{
		this.form.sortie.value ="";
	}
}

function $(id){
	var elm=document.getElementById(id);
	
	if(elm && elm.id != id){
		var trouve=false
		var i=0
		while(i<document.all[id].length && !trouve){
			if(document.all[id][i].id == id){
				elm=document.all[id][i];
			}
			i++;
		}
	}
	return elm
}

function Name(nom){
	return 	document.getElementsByName(nom)[0];
}

function affiche_chiffre(n){
	var r=/^(\d{1,2})?(\d{3})*\.?\d*$/;
	n=n.split(".");
	var i=n[0].length-3;
	var cpt=n[0].length;
	var retour=(n.length==2)?","+n[1]:"";
	while(i>=0){
		retour=" "+n[0].slice(i,cpt)+retour;
		cpt=i;
		i-=3;

	}
	if(i!=0){
		retour=" "+n[0].slice(0,cpt)+retour;
	}
	return retour;
}

function deploit(id){
	if($(id).style.display!="block"){
		$(id).style.display="block";
	}else{
		$(id).style.display="none"
	}
}

window.onload=init;

