
//---------------------------------------------------------------
//---------------------------------------------------------------
//---------------------------------------------------------------
function GetBaremePtz(IsShowBrm)
{
var b=new Object();

//---bareme au 15/01/2009----------------------------

b.PretPlafond  =65100;
b.QuotiteAncien=20;
b.QuotiteNeuf  =30;
b.QuotiteAddZFU=10;

b.RgiMaxA   =new Array(31250, 43750, 50000, 56875, 64875, 64875);
b.RgiMaxB   =new Array(23688, 31588, 36538, 40488, 44425, 44425);
b.RgiMaxC   =new Array(23688, 31588, 36538, 40488, 44425, 44425);

b.PretMaxNA =new Array(32100, 45000, 50100, 55050, 60150, 65100);
b.PretMaxNB =new Array(26400, 37950, 42900, 47700, 52650, 57450);
b.PretMaxNC =new Array(20700, 30900, 35700, 40350, 45000, 49650);

b.PretMaxAA =new Array(14400, 20250, 22500, 24750, 27000, 29250);
b.PretMaxAB =new Array( 8800, 13200, 15200, 17200, 19200, 21200);
b.PretMaxAC =new Array( 8250, 12375, 14250, 16125, 18000, 19875);

b.RembRgiA  =new Array(15800, 19750, 23688, 31588,  0);
b.RembD1A   =new Array(264  ,   252,   204,    96, 72);
b.RembD2A   =new Array(216  ,   216,   180,     0,  0);
b.RembPCA   =new Array(100  ,    75,    50,     0,  0);
b.RembDMA   =new Array(264  ,   252,   204,    96, 72);

b.RembRgiNBC=new Array(15800, 19750, 23688, 31588,  0);
b.RembD1NBC =new Array(312  ,   288,   228,   144,108);
b.RembD2NBC =new Array(216  ,   216,   180,     0,  0);
b.RembPCNBC =new Array(100  ,    75,    50,     0,  0);
b.RembDMNBC =new Array(360  ,   324,   252,   192,144);

b.RembRgiNA =new Array(23688, 43750,   0);
b.RembD1NA  =new Array(312  ,   228, 144);
b.RembD2NA  =new Array(216  ,   180,   0);
b.RembPCNA  =new Array(100  ,    50,   0);
b.RembDMNA  =new Array(360  ,   252, 192);

//---------------------------------------------------

//if(IsShowBrm)
    {
      b.sRgiMaxA    =GetStrBrm(b.RgiMaxA, 0);
      b.sRgiMaxB    =GetStrBrm(b.RgiMaxB, 0);
      b.sRgiMaxC    =GetStrBrm(b.RgiMaxC, 0);

      b.sPretMaxNA  =GetStrBrm(b.PretMaxNA, 0);
      b.sPretMaxNB  =GetStrBrm(b.PretMaxNB, 0);
      b.sPretMaxNC  =GetStrBrm(b.PretMaxNC, 0);

      b.sPretMaxAA  =GetStrBrm(b.PretMaxAA, 0);
      b.sPretMaxAB  =GetStrBrm(b.PretMaxAB, 0);
      b.sPretMaxAC  =GetStrBrm(b.PretMaxAC, 0);

      b.sRembRgiA   =GetStrBrm(b.RembRgiA, 1);
      b.sRembD1A    =GetStrBrm(b.RembD1A, 2);
      b.sRembD2A    =GetStrBrmRembours(b.RembD1A, b.RembD2A, b.RembPCA);

      b.sRembRgiNA  =GetStrBrm(b.RembRgiNA, 1);
      b.sRembD1NA   =GetStrBrm(b.RembD1NA, 2);
      b.sRembD2NA   =GetStrBrmRembours(b.RembD1NA, b.RembD2NA, b.RembPCNA);

      b.sRembRgiNBC =GetStrBrm(b.RembRgiNBC, 1);
      b.sRembD1NBC  =GetStrBrm(b.RembD1NBC, 2);
      b.sRembD2NBC  =GetStrBrmRembours(b.RembD1NBC, b.RembD2NBC, b.RembPCNBC);
    }

return(b);
}


//---------------------------------------------------------------
//---------------------------------------------------------------
//---------------------------------------------------------------
function GetStrBrm(tbl, mode)
{
var s="";

for(var i=0; i<tbl.length; i++)
    {
      if(s.length) s+="<br>";

      if(mode==2)
          { s+=FormateAnMois(FormateVal(tbl[i], 0));///+"&nbspmois";
          }
      else
      if(mode==1)
          {
            if(i+1<tbl.length)
                { s+="jusqu'à "+FormateVal(tbl[i], 0, 0x0001)+"&nbsp;";
                }
            else{ s+="au delà de "+FormateVal(tbl[i-1], 0, 0x0001)+"&nbsp;";
                }
          }
      else{ s+=FormateVal(tbl[i], 0, 0x0001)+"&nbsp;";
          }
    }

return(s);
}


//---------------------------------------------------------------
//---------------------------------------------------------------
//---------------------------------------------------------------
function GetStrBrmRembours(RembD1, RembD2, RembPC)
{
var sRet="";

for(var i=0; i<RembD1.length; i++)
    {
      var s;
      var pcent=RembPC[i];
      var sAnMoisAmort=FormateAnMois(RembD1[i]-RembD2[i]);

      if(pcent>=100)
          { s="Différé total sur "
             +FormateAnMois(RembD2[i])
             +" maxi, puis amortissement sur "+sAnMoisAmort;
          }
      else
      if(pcent>=50)
          { s=""+pcent+"% du prêt amorti sur "
             +FormateAnMois(RembD2[i])
             +" maxi, solde amorti sur "+sAnMoisAmort;
          }
      else
      if(pcent>0)
          { s=""+pcent+"% du prêt amorti sur "
             +FormateAnMois(RembD2[i])
             +" maxi, solde ("+(100-pcent)
             +") amorti sur "+sAnMoisAmort;
          }
      else{ s="Prêt amorti sur "+sAnMoisAmort;
          }

      if(i>0) sRet+="<br>";
      sRet+=s;
    }

return(sRet);
}


//---------------------------------------------------------------
//---------------------------------------------------------------
//---------------------------------------------------------------
function FormateAnMois(nMois)
{
var s="";
var NbMois=(nMois%12);
var NbAn  =Math.floor(nMois/12);

if(NbAn>0)
    { s+=""+NbAn+" an";
      if(NbAn>1) s+="s";
    }
if(NbMois>0)
    { if(NbAn>0) s+=" et ";
      s+=""+NbMois+" mois";
    }

return(s);
}


//---------------------------------------------------
//---------------------------------------------------
//---------------------------------------------------
function GetResultPtz(fdata, brm)
{
var r=new Object();

r.NbMoisPret=0;
r.NbMoisDiff=0;
r.PCentDiff =0;
r.PretMax   =0;
r.EchDiff   =0;
r.EchAmort  =0;

r.RevSup    =0;
r.TypeDiff  =0;

r.S_NbMois    ="";
r.S_DureeAmort="";
r.S_DureeDiff ="";
r.S_Pcent1    ="";
r.S_Pcent2    ="";
r.S_Pret      ="";
r.S_EchDiff   ="";
r.S_EchAmort  ="";

if((fdata.ZoneABC!=1 && fdata.ZoneABC!=2 && fdata.ZoneABC!=3) ||
   (fdata.TypeAN!=1 && fdata.TypeAN!=2) ||
   fdata.NbPersonne<=0 ||
   fdata.RevenuN1N2<0)
    {
      // erreur;
    }
else{
      var indice1;
      var indice2;
      var s;
      var tmp;

      indice1=fdata.NbPersonne-1;
      if(indice1>5) indice1=5;

      tmp=(fdata.ZoneABC==1) ? brm.RgiMaxA[indice1]
         :(fdata.ZoneABC==2) ? brm.RgiMaxB[indice1]
                             : brm.RgiMaxC[indice1];

      if(fdata.RevenuN1N2<=tmp)
          {
            var RembRgi, RembD1, RembD2, RembPC, RembDM;


            if(fdata.TypeAN==1) //1=neuf
                {
                  r.PretMax=(fdata.ZoneABC==1) ? brm.PretMaxNA[indice1]
                           :(fdata.ZoneABC==2) ? brm.PretMaxNB[indice1]
                                               : brm.PretMaxNC[indice1];

                  if(fdata.ZoneABC==1)
                      {
                        RembRgi = brm.RembRgiNA;
                        RembD1  = brm.RembD1NA;
                        RembD2  = brm.RembD2NA;
                        RembPC  = brm.RembPCNA;
                        RembDM  = brm.RembDMNA;
                      }
                  else{ RembRgi = brm.RembRgiNBC;
                        RembD1  = brm.RembD1NBC;
                        RembD2  = brm.RembD2NBC;
                        RembPC  = brm.RembPCNBC;
                        RembDM  = brm.RembDMNBC;
                      }
                }
            else{ r.PretMax=(fdata.ZoneABC==1) ? brm.PretMaxAA[indice1]
                           :(fdata.ZoneABC==2) ? brm.PretMaxAB[indice1]
                                               : brm.PretMaxAC[indice1];

                  RembRgi = brm.RembRgiA;
                  RembD1  = brm.RembD1A;
                  RembD2  = brm.RembD2A;
                  RembPC  = brm.RembPCA;
                  RembDM  = brm.RembDMA;
                }

            if(fdata.IsZoneFranche==1)
                {
                  var PretPlafond=brm.PretPlafond*1.5;
                  var quotite=(fdata.TypeAN==1) // 1=neuf
                             ? brm.QuotiteNeuf
                             : brm.QuotiteAncien;

                  r.PretMax*=(quotite+brm.QuotiteAddZFU)/quotite;

                  if(r.PretMax>PretPlafond)
                      { r.PretMax=PretPlafond;
                      }
                }

            for(indice1=0; ; indice1++)
                {
                  tmp=RembRgi[indice1];

                  if(tmp==0 || // derniere ligne du tableau
                     fdata.RevenuN1N2<=tmp)
                      {
                        r.NbMoisPret=(fdata.IsZoneFranche==1)
                                    ? RembDM[indice1]
                                    : RembD1[indice1];

                        r.NbMoisDiff=RembD2[indice1];
                        r.PCentDiff =RembPC[indice1];
                        break;
                      }
                }

            if(r.NbMoisDiff && r.PCentDiff<100)
                {
                  var capital=r.PretMax*((100.0-r.PCentDiff)/100);
                  r.EchDiff  =capital/r.NbMoisDiff;
                  r.EchAmort =(r.PretMax-capital)
                             /(r.NbMoisPret-r.NbMoisDiff);
                }
            else{ r.EchDiff =0;
                  r.EchAmort=r.PretMax/(r.NbMoisPret-r.NbMoisDiff);
                }

            r.TypeDiff=(r.NbMoisDiff==0) ? 0
                      :(r.PCentDiff<100) ? 1 : 2;

            r.S_NbMois    =""+FormateAnMois(r.NbMoisPret);///+" mois";
            r.S_DureeAmort=""+FormateAnMois(r.NbMoisPret-r.NbMoisDiff);///+ " mois";
            r.S_DureeDiff =""+FormateAnMois(r.NbMoisDiff);///+" mois";
            r.S_Pcent1    =""+(100-r.PCentDiff)+"%";
            r.S_Pcent2    =""+(r.PCentDiff)+"%";

            r.S_Pret    =FormateVal(r.PretMax , 0)+" ";
            r.S_EchDiff =FormateVal(r.EchDiff , 2)+" ";
            r.S_EchAmort=FormateVal(r.EchAmort, 2)+" ";
          }
      else{ r.RevSup=1;
          }
    }

return(r);
}


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="&nbsp;"; else
            if(flag & 0x0002) separe="."; else
            if(flag & 0x0004) separe="";
          }

      if(NbDeci==2) { val=val*100.0; } else
      if(NbDeci>0) { for(i=0; i<NbDeci; i++) { val=val*10; } }
      else{ NbDeci=0; }

      val=Math.round(val);

      if(val<0) { val=-val; signe=1; } else{ signe=0; }
      s=val.toString();

      l=s.length;
      for(i=NbDeci+1-l; i>0; 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);
}


function SetSelect(s, v)
{
var i;
for(i=0; i<s.options.length; i++)
    { if(s.options[i].value==v) { s.selectedIndex=i; break; }
    }
}

function GetSelect(s)
{
if(!(s.selectedIndex>=0)) return(null);
var v=s.options[s.selectedIndex].value;
if(v==null || v=="") return(null);
var v2=parseInt(v,10);
return((isNaN(v2)) ? v : v2);
}

function SetRadio(s, v)
{
var i;
for(i=0; i<s.length; i++)
    { if(s[i].value==v) { s[i].checked=1; break; }
    }
}

function GetRadio(s)
{
var i;
for(i=0; i<s.length; i++)
    { if(s[i].checked==1) return(s[i].value);
    }
return(0);
}

//desuet
function GetSelectedInt(s)
{ return(parseInt(s.options[s.selectedIndex].value,10));
}

//desuet
function SetIndex(s, v)
{ SetSelect(s, v);
}


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(; i1<i2; i1++) { c=s.charAt(i1); if(c!=' ' && c!='\t') { break; } }
//for(; i2>i1; i2--) { c=s.charAt(i2-1); if(c!=' ' && c!='\t') { break; } }

if(i1<i2)
  {
    var MaxEntier,MaxDeci,NegOK=0,NbEntier=0,NbDeci=0,iVirg=0,i,s2="";

    if(fmt<0)
        { NegOK=1;
          fmt=-fmt;
        }
    MaxEntier=fmt/10;
    MaxDeci  =fmt%10;

    for(i=i1; i<i2; i++)
        { c=s.charAt(i);
          if(c==' ' && flag!=null && (flag & 0x0001))
              { continue;
              }
          if(c>='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);
}


var gIsChange1=0;

function ffff_OC(r) {

if(r=="IsShowBrm")
    {
      var v=(document.ffff.IsShowBrm.checked) ? 1:0;
      document.getElementById("IsShowBrm1").style.display=(v) ? "" : "none";
    }

if(r=="IsShowRgl")
    {
      var v=(document.ffff.IsShowRgl.checked) ? 1:0;
      document.getElementById("IsShowRgl1").style.display=(v) ? "" : "none";
    }

gIsChange1=1;
}

function BeforeSubmit(f, IsAlert)
{
var s="";
var t  =parseInt(f.TypeAN.options[f.TypeAN.selectedIndex].value);
var z  =parseInt(f.ZoneABC.options[f.ZoneABC.selectedIndex].value);
var rn2=GetNum(f.RevenuN1N2.value,80);
var nbp=TestNum(f.NbPersonne.value,20);

if(t!=1 && t!=2)
    { s="Précisez le type d'acquisition (neuf/construction ou ancien) !";
    }
else
if(z!=1 && z!=2 && z!=3)
    { s="Précisez la localisation du logement (zone A, B ou C) !";
    }
else
if(rn2<=0)
    { s="Indiquez votre revenu fiscal de référence !";
    }
else
if(nbp<=0)
    { s="Indiquez le nombre de personnes qui habiteront le logement !"
    }
else{ if(!gIsChange1) s="Résultats déjà calculés !";
    }

if(s!="")
    { self.alert(s);
    }

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


function OnBtnZonier()
{
// brancher ici une popup sur la carte des zones A,B,C
window.open("ptz-carte", "ptz_abc", "width=615px,height=600px");
}


function OnBtnSubmit(f)
{
if(BeforeSubmit(f,1)==true)
    { ///f.submit();
      BodyOnLoad();
    }
}

function MainGetForm()
{
var fd=new Object();

///var c;
///c=Request.Form("NbPersonne" ); fd.NbPersonne =(c.count>0) ? GetNum(c, 20) : 0;
///c=Request.Form("ZoneABC"    ); fd.ZoneABC    =(c.count>0) ? GetNum(c, 10) : 0;
///c=Request.Form("TypeAN"     ); fd.TypeAN     =(c.count>0) ? GetNum(c, 10) : 0;
///c=Request.Form("RevenuN1N2" ); fd.RevenuN1N2 =(c.count>0) ? GetNum(c, 80) : 0;
///c=Request.Form("IsShowBrm"  ); fd.IsShowBrm  =(c.count>0) ? GetNum(c, 10) : 0;
///c=Request.Form("IsShowRgl"  ); fd.IsShowRgl  =(c.count>0) ? GetNum(c, 10) : 0;

var f=document.ffff;
fd.NbPersonne =GetNum(f.NbPersonne.value, 20);
fd.ZoneABC    =parseInt(f.ZoneABC.options[f.ZoneABC.selectedIndex].value);
fd.TypeAN     =parseInt(f.TypeAN.options[f.TypeAN.selectedIndex].value);
fd.RevenuN1N2 =GetNum(f.RevenuN1N2.value, 80);
fd.IsShowBrm  =(f.IsShowBrm.checked) ? 1:0;
fd.IsShowRgl  =(f.IsShowRgl.checked) ? 1:0;

fd.IsZoneFranche=0;

return(fd);
}



function BodyOnLoad()
{
var f=document.ffff;
gIsChange1=0;


///var c;
///c=Request.Form("RevenuN1N2" ); if(c.count>0) Response.Write("f.RevenuN1N2.value=\"" + c +"\";\r\n");
///c=Request.Form("NbPersonne" ); if(c.count>0) Response.Write("f.NbPersonne.value=\"" + c +"\";\r\n");
///c=Request.Form("ZoneABC"    ); if(c.count>0) Response.Write("SetIndex(f.ZoneABC,\"" + c  +"\");\r\n");
///c=Request.Form("TypeAN"     ); if(c.count>0) Response.Write("SetIndex(f.TypeAN,\"" + c  +"\");\r\n");
///c=Request.Form("IsShowBrm"  ); if(c.count>0) Response.Write("f.IsShowBrm.checked=\"" + c +"\";\r\n");
///c=Request.Form("IsShowRgl"  ); if(c.count>0) Response.Write("f.IsShowRgl.checked=\"" + c +"\";\r\n");


var fdata =MainGetForm();
var brm   =GetBaremePtz(fdata.IsShowBrm);
var result=GetResultPtz(fdata, brm);

if(result.RevSup!=0)
    { document.getElementById("IfRevSup0" ).style.display="none";
      document.getElementById("IfQuestion").style.display="none";
      document.getElementById("IfRevSup1" ).style.display="";
    }
else{ document.getElementById("IfRevSup1").style.display="none";

      if(result.S_Pret=="")
          { document.getElementById("IfRevSup0" ).style.display="none";
            document.getElementById("IfQuestion").style.display="";
          }
      else{ document.getElementById("IfQuestion").style.display="none";
            document.getElementById("IfRevSup0" ).style.display="";
          }
    }

document.getElementById("IsShowBrm1").style.display=(fdata.IsShowBrm==1) ? "":"none";
document.getElementById("IsShowRgl1").style.display=(fdata.IsShowRgl==1) ? "":"none";

document.getElementById("brm_sRgiMaxA"   ).innerHTML=brm.sRgiMaxA;
document.getElementById("brm_sRgiMaxB"   ).innerHTML=brm.sRgiMaxB;
document.getElementById("brm_sRgiMaxC"   ).innerHTML=brm.sRgiMaxC;

document.getElementById("brm_sPretMaxNA" ).innerHTML=brm.sPretMaxNA;
document.getElementById("brm_sPretMaxNB" ).innerHTML=brm.sPretMaxNB;
document.getElementById("brm_sPretMaxNC" ).innerHTML=brm.sPretMaxNC;

document.getElementById("brm_sPretMaxAA" ).innerHTML=brm.sPretMaxAA;
document.getElementById("brm_sPretMaxAB" ).innerHTML=brm.sPretMaxAB;
document.getElementById("brm_sPretMaxAC" ).innerHTML=brm.sPretMaxAC;

document.getElementById("brm_sRembRgiA"   ).innerHTML=brm.sRembRgiA;
document.getElementById("brm_sRembD1A"    ).innerHTML=brm.sRembD1A;
document.getElementById("brm_sRembD2A"    ).innerHTML=brm.sRembD2A;

document.getElementById("brm_sRembRgiNA"   ).innerHTML=brm.sRembRgiNA;
document.getElementById("brm_sRembD1NA"    ).innerHTML=brm.sRembD1NA;
document.getElementById("brm_sRembD2NA"    ).innerHTML=brm.sRembD2NA;

document.getElementById("brm_sRembRgiNBC"   ).innerHTML=brm.sRembRgiNBC;
document.getElementById("brm_sRembD1NBC"    ).innerHTML=brm.sRembD1NBC;
document.getElementById("brm_sRembD2NBC"    ).innerHTML=brm.sRembD2NBC;

document.getElementById("result_S_Pret"      ).innerHTML=result.S_Pret      ;
document.getElementById("result_S_NbMois"    ).innerHTML=result.S_NbMois    ;
document.getElementById("result_S_DureeDiff" ).innerHTML=result.S_DureeDiff ;
document.getElementById("result_S_DureeAmort").innerHTML=result.S_DureeAmort;
document.getElementById("result_S_EchDiff"   ).innerHTML=result.S_EchDiff   ;
document.getElementById("result_S_EchAmort1" ).innerHTML=result.S_EchAmort  ;
document.getElementById("result_S_EchAmort2" ).innerHTML=result.S_EchAmort  ;

document.getElementById("result_diff_partiel").innerHTML=
  (result.TypeDiff==1)
  ? "Période de différé partiel"+
    ((result.S_Pcent2!="") ? " ("+result.S_Pcent2+")" : "")+" :"
  : "Période de différé total.........:";

document.getElementById("result_amort_partiel").innerHTML=
  (result.TypeDiff==1)
  ? "Période d'amortissement......:"
  : "Période d'amortissement......:";

if(result.TypeDiff>0)
    { document.getElementById("IfTypeDiff1_duree").style.display="";
    }
else{ document.getElementById("IfTypeDiff1_duree").style.display="none";
    }

if(result.TypeDiff>0)
    { document.getElementById("IfTypeDiff0_ech").style.display="none";
      document.getElementById("IfTypeDiff1_ech").style.display="";
    }
else{ document.getElementById("IfTypeDiff1_ech").style.display="none";
      document.getElementById("IfTypeDiff0_ech").style.display="";
    }
}

jQuery(document).ready(function() {
    BodyOnLoad();
});
