// 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.----------------------------------------*/



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

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

//---------------------------------------------------
b.CoeffZFU  =0.50;

///b.RgiMaxA=new Array(22110, 28420, 32390, 35540, 38690, 38690);
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(16000, 22500, 25000, 27500, 30000, 32500);
b.PretMaxNB =new Array(11000, 16500, 19000, 21500, 24000, 26500);
b.PretMaxNC =new Array(11000, 16500, 19000, 21500, 24000, 26500);

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.RembRgi   =new Array(15800, 19750, 23688, 31588, 36538, 40488,  0);
b.RembD1    =new Array(264  ,   252,   204,    96,    72,    72, 72);
b.RembD2    =new Array(216  ,	216,   180,	0,     0,     0,  0);
b.RembPC    =new Array(100  ,	 75,	50,	0,     0,     0,  0);

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

//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.sRembRgi  =GetStrBrm(b.RembRgi, 1);
      b.sRembD1   =GetStrBrm(b.RembD1, 2);

      b.sRembD2=GetStrBrmRembours(b.RembD1, b.RembD2, b.RembPC);
    }

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+=FormateVal(tbl[i], 0)+"&nbsp;mois";
	  }
      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)
	  {
	    if(fdata.TypeAN==1) //1=neuf
		{
		  r.PretMax=(fdata.ZoneABC==1) ? brm.PretMaxNA[indice1]
			   :(fdata.ZoneABC==2) ? brm.PretMaxNB[indice1]
					       : brm.PretMaxNC[indice1];
		}
	    else{ r.PretMax=(fdata.ZoneABC==1) ? brm.PretMaxAA[indice1]
			   :(fdata.ZoneABC==2) ? brm.PretMaxAB[indice1]
					       : brm.PretMaxAC[indice1];
		}

	    if(fdata.IsZoneFranche==1)
		{ r.PretMax*=(1+brm.CoeffZFU);
		}

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

		  if(tmp==0 || // derniere ligne du tableau
		     fdata.RevenuN1N2<=tmp)
		      {
			r.NbMoisPret=brm.RembD1[indice1];
			r.NbMoisDiff=brm.RembD2[indice1];
			r.PCentDiff =brm.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	  =""+r.NbMoisPret+" mois";
	    r.S_DureeAmort=""+(r.NbMoisPret-r.NbMoisDiff)+ " mois";
	    r.S_DureeDiff =""+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);
}



// ALTO Informatique (01.43.35.49.18) - 1998-2000 - Tous droits réservés

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("/franchises/design/simulations/ptz_abc.htm", "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_sRembRgi"   ).innerHTML=brm.sRembRgi;
document.getElementById("brm_sRembD1"    ).innerHTML=brm.sRembD1;
document.getElementById("brm_sRembD2"    ).innerHTML=brm.sRembD2;

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