var _tn=0; var _ttn=0; function GetNum(champ, fmt, flag) { _ttn=TestNum(champ,fmt, flag); return(_tn); } function TestNum(champ, fmt, flag) { var ret=0; var s=""+champ; var i1,i2,c; _tn=0; i1=0; i2=s.length; //for(; i1i1; i2--) { c=s.charAt(i2-1); if(c!=' ' && c!='\t') { break; } } if(i1='0' && c<='9') { if(iVirg) { NbDeci++; if(NbDeci>MaxDeci) { ret=-3; break; } } else { NbEntier++; if(NbEntier>MaxEntier) { ret=-2; break; } } } else if(c=='.' || c==',') { if(iVirg) { ret=-1; break; } iVirg=i+1; c='.'; } else if(c=='-') { if(!NegOK || i>i1) { ret=-4; break; } } else{ ret=-1; break; } s2+=c; } if(!ret) { _tn=(iVirg) ? parseFloat(s2) : parseInt(s2,10); ret=1; } } return(ret); } function FormateVal(val, NbDeci, flag) { var s=""; if(val!=null && !isNaN(val)) { var l,i,tmp,signe; var separe=" "; if(flag!=null) { if(flag & 0x0001) separe=" "; else if(flag & 0x0002) separe="."; else if(flag & 0x0004) separe=""; } if(NbDeci==2) { val=val*100.0; } else if(NbDeci>0) { for(i=0; i0; i--) s="0"+s; tmp=l-NbDeci; if(tmp>3 && separe.length>0) { for(i=0; i<5; i++) { if (tmp<4) break; tmp-=3; s=s.substring(0, tmp)+separe+s.substring(tmp, l); l+=separe.length; } } if(NbDeci>0) { l=s.length; s=s.substring(0, l-NbDeci)+","+s.substring(l-NbDeci, l); } if(signe) s="-"+s; } return(s); } var g_IsChange1=0; function ffff_OC(sName) { g_IsChange1=1; var f=document.ffff; if(sName==null || sName=="TypeAchat") { var TypeAchat=parseInt(f.TypeAchat.options[f.TypeAchat.selectedIndex].value); var c=f.terrain; if(TypeAchat==1) // 1=terrain+construct { c.disabled=false; c.style.backgroundColor="#FFFFFF"; } else{ c.value=""; c.disabled=true; c.style.backgroundColor="#CCCCCC"; } var c=f.logement; if(TypeAchat>=1 && TypeAchat!=5) // sauf travaux seuls { c.disabled=false; c.style.backgroundColor="#FFFFFF"; } else{ c.value=""; c.disabled=true; c.style.backgroundColor="#CCCCCC"; } var c=f.travaux; if(TypeAchat==4 || TypeAchat==5) // ancien et/ou travaux { c.disabled=false; c.style.backgroundColor="#FFFFFF"; } else{ c.value=""; c.disabled=true; c.style.backgroundColor="#CCCCCC"; } var c=f.NbLogement; if(TypeAchat==2 || TypeAchat==3) // NEUF { c.disabled=false; c.style.backgroundColor="#FFFFFF"; if(c.selectedIndex<0) { c.selectedIndex=0; } } else{ c.value=""; c.disabled=true; c.style.backgroundColor="#CCCCCC"; } var c=f.PretPth; if(TypeAchat>0) { c.disabled=false; c.style.backgroundColor="#FFFFFF"; } else{ c.value=""; c.disabled=true; c.style.backgroundColor="#CCCCCC"; } } fn_BodyOnLoad(1); // recalcul immédiat } function BeforeSubmit(f,IsAlert) { var ers=""; var TypeAchat=parseInt(f.TypeAchat.options[f.TypeAchat.selectedIndex].value); var terrain =GetNum(f.terrain.value ,80); var t_terrain =_ttn; var logement =GetNum(f.logement.value,80); var t_logement=_ttn; var travaux =GetNum(f.travaux.value ,80); var t_travaux =_ttn; var PretPth =GetNum(f.PretPth.value ,80); var t_PretPth =_ttn; if(TypeAchat<1 || TypeAchat>5) { ers="Précisez le type d'acquisition !"; } else if(t_terrain <0) { ers="Prix du terrain : saisie invalide" ; } else if(t_logement<0) { ers="Prix du logement : saisie invalide"; } else if(t_travaux <0) { ers="Prix des travaux : saisie invalide"; } else if(t_PretPth <0) { ers="Montant du prêt : saisie invalide" ; } else if(TypeAchat==1 && (terrain==0 && logement==0)) { ers="Précisez le prix du terrain et/ou du logement !"; } else if((TypeAchat==2 || TypeAchat==3) && logement<=0) { ers="Précisez le prix du logement !"; } else if(TypeAchat==4 && (logement==0 && travaux==0)) { ers="Précisez le prix du logement et/ou des travaux !"; } else if(!g_IsChange1) { ///ers="Résultats déjà calculés !"; } if(ers!="" && IsAlert) { self.alert(ers); } return((ers!="") ? false : true); } function OnBtnSubmit(f) { if(BeforeSubmit(f,1)==true) { ///f.submit(); fn_BodyOnLoad(1); } } function MainGetForm() { var fd=new Object(); var f=document.ffff; fd.TypeAchat =parseInt(f.TypeAchat.options[f.TypeAchat.selectedIndex].value); fd.terrain =GetNum(f.terrain.value , 80); fd.logement =GetNum(f.logement.value, 80); fd.travaux =GetNum(f.travaux.value , 80); fd.PretPth =GetNum(f.PretPth.value , 80); fd.NumDept =parseInt(f.NumDept.options[f.NumDept.selectedIndex].value); // modif 06/03/2014 fd.IsDOM =(fd.NumDept==97 || (fd.NumDept>=971 && fd.NumDept<=976)) ? 1:0; // modif 06/03/2014 fd.NbLogement=1; if(f.NbLogement.selectedIndex>=0) { fd.NbLogement=parseInt(f.NbLogement.options[f.NbLogement.selectedIndex].value); } return(fd); } function MainGetBareme() { var brm= { ModeCalculHypo: 2, TauxTva: 20.0, // depuis 1/1/2014 TauxTvaDOM: 8.5, EmolFixeAncien: 570.00, EmolFixeNeufT: 370.00, EmolFixePret: 150.00, EmolFixePpd: 150.00, DeboursAchat: 780.00, DeboursPret: 40.00, EnregFixe125: 125.00, EnregFixe25: 25.00, SalaireMini1: 15.00, SalaireMini2: 8.00, SalaireTaux1: 0.10, SalaireTaux2: 0.05, TauxTD: 4.50, // depuis 1/1/2014 TauxTC: 1.20, TauxPF: 0.70, TauxFA_TD: 2.37, TauxFA_PF: 2.14, s1:[ { plafond: 6500.00, taux: 3.870 }, { plafond: 17000.00, taux: 1.596 }, { plafond: 60000.00, taux: 1.064 }, { plafond: 0.00, taux: 0.799 } ], sMainlevee: [ { plafond: 77090.00, forfait: 78.00 }, { plafond: 0.00, forfait: 150.00 } ], TblDept: // pour deriver TauxTD specifique sur departement. au 1/12/2017 [ { NumDept:36, TauxTD:3.80 }, // indre { NumDept:38, TauxTD:3.80 }, // isere { NumDept:56, TauxTD:3.80 }, // morbihan { NumDept:976,TauxTD:3.80 } // mayotte ] }; return(brm); } function NotaireCalculFrais(brm, assiette, type, NbHabitation, IsDOM, NumDept) { var CoeffSerie; // appliqué à s1,s2 : 1/3, 2/3 ... var tempd; var FraisNotaire=0; if(type!=1 && type!=2 && type!=3 && type!=4) { return(FraisNotaire); } if(assiette<=0) { return(FraisNotaire); } if(type==2 || type==3) // NEUF { if(NbHabitation<=10) CoeffSerie=1.0; else if(NbHabitation<25 ) CoeffSerie=4.0/5.0; else if(NbHabitation<100) CoeffSerie=2.0/3.0; else if(NbHabitation<250) CoeffSerie=1.0/2.0; else if(NbHabitation<500) CoeffSerie=2.0/5.0; else CoeffSerie=1.0/3.0; } else{ CoeffSerie=1.0; } var emolument=NotaireEmolFromSerie(brm, assiette, 1, CoeffSerie); emolument+=(type==1 || type==2 || type==3) ? brm.EmolFixeNeufT : brm.EmolFixeAncien; //---art R. 444-9 (decret du 26/02/2016)------------ if(emolument>(assiette/10)) { emolument=assiette/10; // emol plafonne a 10% du prix du bien immo } if(emolument<90) { emolument=90; // avec un plancher de 90 EUR } // en DOM (Guadeloupe, Guyane, Martinique) : emolument major‚s +25%, mayotte= +40% if(NumDept==97 || (NumDept>=971 && NumDept<=976)) { IsDOM=1; // force IsDOM } else if(NumDept>0) { IsDOM=0; // force IsDOM } var debours=brm.DeboursAchat; tempd=assiette*(brm.SalaireTaux1/100); if(tempd=1) { var i; for(i=0; i0 || PasPtz>0 || PpdMax==0) ? brm.EmolFixePret : brm.EmolFixePpd; // en DOM (Guadeloupe, Guyane, Martinique) : emolument major‚s +25%, mayotte= +40% if(NumDept==97 || (NumDept>=971 && NumDept<=976)) { IsDOM=1; // force IsDOM } else if(NumDept>0) { IsDOM=0; // force IsDOM } var enreg=0; if(Pth>PpdMax) { var TauxPF=brm.TauxPF*(1+(brm.TauxFA_PF/100)); // modif 22/06/2011 enreg=(((Pth-PpdMax)*1.20)*(TauxPF/100)); // modif 22/06/2011 } ///if(PcPel>0 || PasPtz>0) enreg+=brm.EnregFixe25; var debours=brm.DeboursPret; tempd=TotalPret; if(tempd>0) { tempd*=1.20*(brm.SalaireTaux2/100); if(tempd0) { // Frais de mainlevée if (NumSerie == 2) { var serie = brm.sMainlevee; for (var num = 0; num < serie.length; num++) { var plafond = serie[num].plafond; if (!plafond || (plafond && assiette <= plafond)) { emolument += serie[num].forfait; break; } } } else { var serie = brm.s1; for (var num=0; ; num++) { var plafond = serie[num].plafond; // 0 si dernière tranche var tempd = (plafond != 0 && assiette > plafond) ? plafond : assiette; var taux = serie[num].taux; // depuis decret 26/02/2016, coeff a ete remplace // par des taux precalcules arrondi a 3eme decimale la +proche taux = Math.floor(taux * coeff * 1000 + .5) / 1000; if (num > 0) tempd -= serie[num - 1].plafond; emolument += tempd * (taux / 100); if (plafond == 0 || assiette <= plafond) break; } } } return(emolument); } function GetResultFnfg(fdata) { var brm=MainGetBareme(); var r=new Object(); r.FnTotal =0; r.FgTotal =0; r.S_FnTotal=""; r.S_FgTotal=""; if(fdata.TypeAchat>0) { var CoutAchat=(fdata.TypeAchat==1) ? fdata.terrain : fdata.logement; if(CoutAchat>0) { r.FnTotal=NotaireCalculFrais(brm, CoutAchat, fdata.TypeAchat, fdata.NbLogement, fdata.IsDOM, fdata.NumDept); // modif 06/03/2014 r.S_FnTotal=FormateVal(r.FnTotal, 0)+" €"; } if(fdata.PretPth>0) { var PpdMax=0; if(fdata.TypeAchat==1) { PpdMax=fdata.terrain; } else if(fdata.TypeAchat==3 || // neuf cle en main fdata.TypeAchat==4) // ancien { PpdMax=fdata.logement; } r.FgTotal=NotaireCalculHypo(brm, fdata.PretPth, 0, 0, PpdMax, fdata.IsDOM, fdata.NumDept); // modif 06/03/2014 r.S_FgTotal=FormateVal(r.FgTotal, 0)+" €"; } } return(r); } function fn_BodyOnLoad(IsLoaded) { g_IsChange1=0; if(IsLoaded!=1) { ffff_OC(null); g_IsChange1=0; } var f=document.ffff; var fdata=MainGetForm(); var result=GetResultFnfg(fdata); document.getElementById("result_FnTotal").innerHTML=result.S_FnTotal; document.getElementById("result_FgTotal").innerHTML=result.S_FgTotal; }