// JavaScript Document

/*---------------Programmes et formulaires contenus dans cette page sont la
propriété d'ALTO Informatique, 5 rue Guilleminot, 75014 Paris.
Tous droits réservés.----------------------------------------*/

var gIsChange1=0;

function ffff_OC(sName)
{

gIsChange1=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";
          }
    }

}



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="Cout du terrain : saisie invalide" ; } else
if(t_logement<0) { ers="Cout du logement : saisie invalide"; } else
if(t_travaux <0) { ers="Cout 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 coût du terrain et/ou du logement !";
    }
else
if((TypeAchat==2 || TypeAchat==3) && logement<=0)
    { ers="Précisez le coût du logement !";
    }
else
if(TypeAchat==4 && (logement==0 && travaux==0))
    { ers="Précisez le coût du logement et/ou des travaux !";
    }
else
if(!gIsChange1)
    { ///ers="Résultats déjà calculés !";
    }
if(ers!="")
    { self.alert(ers);
    }

return((ers!="") ? false : true);
}


function OnBtnSubmit(f)
{
if(BeforeSubmit(f,1)==true)
    { ///f.submit();
      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.IsNegocie  =(f.IsNegocie.checked) ? 1:0;

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:        19.6,
  ProportMini:    65.60,
  EmolFixeAncien: 470.00,
  EmolFixeNeufT:  370.00,
  EmolFixePret:   180.00,
  EmolFixePpd:    130.00,
  DeboursAchat:   430.00,
  DeboursPret:    40.00,
  EnregFixe125:   125.00,
  EnregFixe25:    25.00,

  NegociePlafond: 45735.00,
  NegocieTaux1:   5,
  NegocieTaux2:   2.5,

  SalaireMini1:   15.00,
  SalaireMini2:   8.00,
  SalaireTaux1:   0.10,
  SalaireTaux2:   0.05,
  TauxTD:         3.60,
  TauxTC:         1.20,
  TauxPF:         0.60,
  TauxFA:         2.50,
  TauxTE20:       0.20,
  TauxTE10:       0.10,

  s1:[ { plafond:  6500.00, taux: 4.000 },
       { plafond: 17000.00, taux: 1.650 },
       { plafond: 30000.00, taux: 1.100 },
       { plafond:     0.00, taux: 0.825 }
     ],
  s2:[ { plafond:  6500.00, taux: 2.000 },
       { plafond: 17000.00, taux: 1.100 },
       { plafond: 30000.00, taux: 1.750 },
       { plafond:     0.00, taux: 0.550 }
     ]
};

return(brm);
}


function NotaireCalculFrais(brm, assiette, type, IsNegociation, NbHabitation)
{
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;

if(IsNegociation)
    {
      if(assiette<=brm.NegociePlafond)
          { tempd=assiette*(brm.NegocieTaux1/100);
          }
      else{ tempd=brm.NegociePlafond;
            tempd=(tempd*(brm.NegocieTaux1/100))
                 +((assiette-tempd)*(brm.NegocieTaux2/100));
          }
      emolument+=tempd;
    }

var debours=brm.DeboursAchat;

tempd=assiette*(brm.SalaireTaux1/100);
if(tempd<brm.SalaireMini1) tempd=brm.SalaireMini1;
debours+=tempd;

var tva1=emolument*(brm.TauxTva/100);
var enreg=0;

if(type==1 || type==4) // TERRAIN ou ANCIEN
    {
      var TauxTD=brm.TauxTD*(1+(brm.TauxFA/100));
      enreg=assiette*((TauxTD+brm.TauxTC+brm.TauxTE20)/100);
    }
else
if(type==2 || type==3)
    {
      var TauxPF=brm.TauxPF*(1+(brm.TauxFA/100));
      enreg=assiette*((TauxPF+brm.TauxTE10)/100);
    }

tempd=emolument+debours+enreg+tva1;

FraisNotaire=Math.floor(tempd/10)*10; // arrondi a 10 Euro

return(FraisNotaire);
}




function NotaireCalculHypo(brm, Pth, PcPel, PasPtz, PpdMax)
{
var tempd;
var FraisNotaire=0;
var TotalPret=Pth+PcPel+PasPtz;

if(TotalPret<=0)
    { return(FraisNotaire);
    }

if(PpdMax<=0) PpdMax=0;

var emolument;

emolument=NotaireEmolFromSerie(brm, TotalPret, 1, 1.0/3.0);

emolument+=(PcPel>0 || PasPtz>0 || Pth>PpdMax)
          ? brm.EmolFixePret
          : brm.EmolFixePpd;

var enreg=0;

if(Pth>PpdMax)
    {
      var TauxPF=brm.TauxPF*(1+(brm.TauxFA/100));
      enreg=(((Pth-PpdMax)*1.20)*((TauxPF+brm.TauxTE10)/100));
    }

if(PcPel>0 || PasPtz>0 || Pth>PpdMax)
    { enreg+=brm.EnregFixe125;
    }

var debours=brm.DeboursPret;

tempd=TotalPret;
if(tempd>0)
    { tempd*=1.20*(brm.SalaireTaux2/100);
      if(tempd<brm.SalaireMini2) tempd=brm.SalaireMini2;
      debours+=tempd;
    }

var tva1=emolument*(brm.TauxTva/100);

tempd=emolument+debours+enreg+tva1;

FraisNotaire=Math.floor(tempd/5)*5; // arrondi a 5 euro

return(FraisNotaire);
}


function NotaireEmolFromSerie(brm, assiette, NumSerie, coeff)
{
var emolument=0;


if(assiette>0)
    {
      var serie=(NumSerie==2) ? brm.s2 : brm.s1;

      for(var num=0; ; num++)
          {
            var plafond=serie[num].plafond;
            var tempd=(plafond!=0 && assiette>plafond) ? plafond : assiette;

            if(num>0) tempd-=serie[num-1].plafond;
            emolument+=tempd*(serie[num].taux/100);
            if(plafond==0 || assiette<=plafond) break;
          }

      emolument*=coeff;

      if(emolument<brm.ProportMini)
          { emolument=brm.ProportMini;
          }
    }

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.IsNegocie,
                                         fdata.NbLogement);

            r.S_FnTotal=FormateVal(r.FnTotal, 0)+"&nbsp;€";
          }

      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);
            r.S_FgTotal=FormateVal(r.FgTotal, 0)+"&nbsp;€";
          }
    }

return(r);
}


function BodyOnLoad(IsLoaded)
{
gIsChange1=0;

if(IsLoaded!=1)
    { ffff_OC(null);
      gIsChange1=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   ;
}
