run = false;
var mensualiteNouvOld = -1;
function maj()
{
	setValue('asmenmem',getValue('asmen'));
	setValue('menhamem',getValue('menha'));
	setValue('menaamem',getValue('menaa'));
	setValue('taacmem',getValue('taac'));
}
function montantInitialChange() 
{
	calcMensualite();
}

function tauxInteretChange() {
	tauxInteret=strtofloat(getValue('tain'));
	tauxAssurance=strtofloat(getValue('taas'));
	tauxTotal=tauxInteret+tauxAssurance;
	setValue('taac',floattostr(tauxTotal));
	if(getValue('tyas')==1)
	{
		setDisabled('asmen');
		setDisabled('menha');
	}
	else
	{
		setEnabled('asmen');
		setEnabled('menha');
	}
	/*crd=document.frm.typeAssurance[1].checked;
	document.frm.mensHorsAssur.disabled=crd;
	document.frm.assurMens.disabled=crd;
	document.frm.mensHorsAssur.className=crd?"fdclair":"";
	document.frm.assurMens.className=crd?"fdclair":"";*/

	calcMensualite();
}

function tauxTotalChange()
{
	maj();
	tauxTotal=strtofloat(getValue('taac'));
	tauxAssurance=strtofloat(getValue('taas'));
	tauxInteret=tauxTotal-tauxAssurance;
	setValue('tain',floattostr(tauxInteret));
	calcMensualite();
}

function calcMensualite() {
	montantInitial=strtoint(getValue('monpret'));
	duree=strtoint(getIndexValue('ducr'));
	tauxInteret=strtofloat(getValue('tain'));
	tauxAssurance=strtofloat(getValue('taas'));
	if (getIndex('tyas')==0)
	{
		modeAssurance=2;
		mensHorsAssur=calcMens(montantInitial,duree,tauxInteret,0);
		mensAvecAssur=calcMens(montantInitial,duree,tauxInteret,tauxAssurance);
		setValue('menha',inttostr(mensHorsAssur));
		setValue('asmen',inttostr(mensAvecAssur-mensHorsAssur));
	}
	else
	{
		modeAssurance=1;
		mensAvecAssur=calcMens(montantInitial,duree,tauxInteret,tauxAssurance);
	}
	setValue('menaa',inttostr(mensAvecAssur));
	moisRachatChange();
}

function mensHorsAssurChange() 
{
	maj();
	mensHorsAssur=strtoint(getValue('menha'));
	assurMens=strtoint(getValue('asmen'));
	mensAvecAssur=mensHorsAssur+assurMens;
	setValue('menaa',inttostr(mensAvecAssur));
	calcOng1();
}

function mensAvecAssurChange() 
{
	maj();
	mensAvecAssur=strtoint(getValue('menaa'));
	assurMens=strtoint(getValue('asmen'));
	mensHorsAssur=mensAvecAssur-assurMens;
	setValue('menha',inttostr(mensHorsAssur));
	calcOng1();
}

function moisRachatChange()
{
	montantInitial=strtoint(getValue('monpret'));
	duree=strtoint(getIndexValue('ducr'));
	moisMisePlace=strtomois(getValue('damipl'));
	tauxInteret=strtofloat(getValue('tain'));
	tauxAssurance=strtofloat(getValue('taas'));
	mensAvecAssur=strtoint(getValue('menaa'));
	moisRachat=strtomois(getValue('darac'));
	dureeEcouleeAn=parseInt(moisRachat/100)-parseInt(moisMisePlace/100);
	dureeEcouleeMois=moisRachat%100-moisMisePlace%100;
	dureeEcoulee=dureeEcouleeAn*nb_echeance+dureeEcouleeMois;
	setValue('duec',inttostr(dureeEcoulee));
	dureeRestante=duree*nb_echeance-dureeEcoulee;
	setValue('dures',inttostr(dureeRestante));

	modeAssurance=getIndex('tyas')?1:2;
	mensAvecAssur=calcMens(montantInitial,duree,tauxInteret,tauxAssurance);
	montantEncours=montantInitial;
	assuranceAn1=0;
	for (i=0;i<dureeEcoulee;i++) {
		interet=montantEncours*tauxInteret/100/nb_echeance;
		assurance=((modeAssurance==2)?montantInitial:montantEncours)*tauxAssurance/100/nb_echeance;
		principal=mensAvecAssur-interet-assurance;
		montantEncours-=principal;
		if (i<nb_echeance) assuranceAn1+=assurance;
	}
	assurMens=assuranceAn1/Math.min(dureeEcoulee,nb_echeance);
	mensHorsAssur=mensAvecAssur-assurMens;
	setValue('menha',inttostr(mensHorsAssur));
	setValue('asmen',inttostr(assurMens));
	setValue('monenc',inttostr(montantEncours));
	calcOng1();
}

function calcOng1() {

	montantEncours=strtoint(getValue('monenc'));
	penalites=montantEncours*penalite/100;
	typeGarantie=getIndex('tygro');
	if(typeGarantie==0)
	{
		j=0;
		while((taux=taux_garantie_ippd_defaut[j]) != null)
		{
			if(montantEncours < taux[0])	
			{
				garantie = montantEncours*taux[1]/100;
				break;
			}
			j++;
		}
	}
	else
	{
		j=0;
		while((taux=taux_garantie_caution_defaut[j]) != null)
		{
			if(montantEncours < taux[0])	
			{
				garantie = montantEncours*taux[1]/100;
				break;
			}
			j++;
		}
	}
	j=0;
	while((frais=frais_dossier_defaut[j]) != null)
	{
		if(montantEncours < frais[0])	
		{
			fraisDossier = frais[1];
			break;
		}
		j++;
	}

	fraisRachat=penalites+garantie+fraisDossier;
	montantNouveau=montantEncours+fraisRachat;
	setValue('penra',inttostr(penalites));
	setValue('frnogr',inttostr(garantie));
	setValue('frdoes',inttostr(fraisDossier));
	setValue('totfrra',inttostr(fraisRachat));
	setValue('monnopr',inttostr(montantNouveau));

	if (run) 
	{
		setValue('mntnp',inttostr(montantNouveau));
		calcOng2();
	}
}
function dureeNouvChange() {
	var dureeNouv=strtoint(getValue('newdnp'));
	dureeNouv=Math.max(dureeNouv,duree_min*nb_echeance);
	dureeNouv=Math.min(dureeNouv,duree_max*nb_echeance);
	setValue('newdnp',inttostr(dureeNouv));
	if(dureeNouv<duree_min_2*nb_echeance) ii = duree_min_2;
	else ii = Math.round(dureeNouv/nb_echeance);
	setValue('newtain',floattostr(tab_taux_int[ii]));
	calcOng2();
}
function mensualiteNouvChange() {
	mensualiteNouv=strtoint(getValue('newmens'));
	modeAssurance=getIndex('tyas')?1:2;
	if (mensualiteNouv!=mensualiteNouvOld) {
		montant=strtoint(getValue('mntnp'));
		dureeOld=-1;
		mensualiteOld=-1;
		if (montant>=0) {
			duree=strtoint(getValue('newdnp'));
			tauxInteret=strtofloat(getValue('newtain'));
			tauxAssurance=strtofloat(getValue('newtaas'));
			mensualite=calcMensMois(montant,duree,tauxInteret,tauxAssurance);
			stop=false;
			if (mensualite>mensualiteNouv) {
				do {
					dureeOld=duree;
					mensualiteOld=mensualite;
					if (++duree>duree_max*nb_echeance) {
						duree=duree_max*nb_echeance;
						stop=true;
						alert('Mensualité trop faible - Durée maximum atteinte');
					}
					mensualite=calcMensMois(montant,duree,tauxInteret,tauxAssurance);
				} while ((mensualite>mensualiteNouv)&&!stop);
			} else if (mensualite<mensualiteNouv) {
				do {
					dureeOld=duree;
					mensualiteOld=mensualite;
					if (--duree<duree_min*nb_echeance) {
						duree=duree_min*nb_echeance;
						stop=true;
						alert('Mensualité trop grande - Durée minimum atteinte');
					}
					mensualite=calcMensMois(montant,duree,tauxInteret,tauxAssurance);
				} while ((mensualite<mensualiteNouv)&&!stop);
			}
			if (Math.abs(mensualiteOld-mensualiteNouv)<Math.abs(mensualite-mensualiteNouv))
				duree=dureeOld;
			setValue('newdnp',inttostr(duree));
			calcOng2();
		}
	}
}

function calcOng2() {
	montantNouv=strtoint(getValue('mntnp'));
	if (montantNouv>0) 
	{
		modeAssurance=getIndex('tyas')?1:2;

		dureeNouv=strtoint(getValue('newdnp'));
		tauxInteretNouv=strtofloat(getValue('newtain'));
		tauxAssuranceNouv=strtofloat(getValue('newtaas'));
		mensualiteHorsAssurNouv=calcMensMois(montantNouv,dureeNouv,tauxInteretNouv,0);
		mensualiteAvecAssurNouv=calcMensMois(montantNouv,dureeNouv,tauxInteretNouv,tauxAssuranceNouv);

		setValue('newmens',inttostr(mensualiteAvecAssurNouv));

		setValue('nb_mens_np',inttostr(dureeNouv));
		setValue('nb_mens_di',inttostr(strtoint(getValue('nb_mens_ap'))-dureeNouv));
		setValue('mens_ha_np',inttostr(mensualiteHorsAssurNouv));
		setValue('mens_ha_di',inttostr(strtoint(getValue('mens_ha_ap'))-mensualiteHorsAssurNouv));
		setValue('mens_aa_np',inttostr(mensualiteAvecAssurNouv));
		setValue('mens_aa_di',inttostr(strtoint(getValue('mens_aa_ap'))-mensualiteAvecAssurNouv));
		setValue('tot_ha_np',inttostr(mensualiteHorsAssurNouv*dureeNouv));
		setValue('tot_ha_di',inttostr(strtoint(getValue('tot_ha_ap'))-mensualiteHorsAssurNouv*dureeNouv));
		setValue('tot_aa_np',inttostr(mensualiteAvecAssurNouv*dureeNouv));
		setValue('tot_aa_di',inttostr(strtoint(getValue('tot_aa_ap'))-mensualiteAvecAssurNouv*dureeNouv));
	}
}

function calcMens(mnt,dur,txi,txa) {
	mis=dur*nb_echeance;
	if(modeAssurance==1) {
		txm=(txi+txa)/100/nb_echeance;
		prw=calcCoefPret(txm,mis);
		result=mnt*prw*txm/(prw-1);
	} else {
		txm=txi/100/nb_echeance;
		prw=calcCoefPret(txm,mis);
		result=mnt*(prw*txm/(prw-1)+txa/100/nb_echeance);
	}
	return result;
}
function calcMensMois(mnt,dur,txi,txa) {
	mis=dur;
	if(modeAssurance==1) {
		txm=(txi+txa)/100/nb_echeance;
		prw=calcCoefPret(txm,mis);
		result=mnt*prw*txm/(prw-1);
	} else {
		txm=txi/100/nb_echeance;
		prw=calcCoefPret(txm,mis);
		result=mnt*(prw*txm/(prw-1)+txa/100/nb_echeance);
	}
	return result;
}
function calcCoefPret(i,duree) {
	var p=1;
	for (var j=0; j<duree; j++) p*=(1+i);
	return p;
}

function strtodate(s) {
    var sJour="",sMois="",sAn="";
    var p=1;
    for (var i=0;i<s.length;i++) {
      var c=s.charAt(i);
      if (c>='0' && c<='9') {
        if (p==1) sJour+=c
        else if (p==2) sMois+=c
        else sAn+=c;
      } else {
        if (c=='-' || c=='/') p++;
      }
    }

    if (sJour.length==1) sJour='0'+sJour
    else if (sJour.length!=2) sJour="01";
    if (sMois.length==1) sMois='0'+sMois
    else if (sMois.length!=2) sMois="01";
    if (sAn=="") sAn="2005";

    var iAn=parseInt(sAn);
    if (iAn<20) iAn+=2000
    else if (iAn<100) iAn+=1900;
    else if (iAn<1900 || iAn>2050) iAn=2000;

    var iMois=parseInt(sMois);
    if (iMois>12) sMois="12";
    var iJour=parseInt(sJour);
    if (iMois==1 || iMois==3 || iMois==5 || iMois==7 || iMois==8 || iMois==10 || iMois==12) {
      if (iJour>31) sJour="31";
    } else if (iMois==2) {
      if ((IsAnBissextile(iAn)==true) && (iJour>29)) sJour="29";
      else if ((IsAnBissextile(iAn)==false) && (iJour>28)) sJour="28" ;
    } else if (iMois==4 || iMois==6 || iMois==9 || iMois==11) {
      if(iJour>30) sJour="30";
    } else sJour="31";
    return ""+iAn+sMois+sJour;
}
function IsAnBissextile(an) {
	return (((an%4==0) && (an%100!=0)) || (an%400==0));
}
function datetostr(d) {
    var s = ""+d;
    s = s.substring(6,8)+"/"+s.substring(4,6)+"/"+s.substring(0,4);
    return s;
}

function strtomois(s) {
    var sMois="",sAn="";
    var p=2;
    for (var i=s.length-1;i>=0;i--) {
      var c=s.charAt(i);
      if (c>='0' && c<='9') {
        if (p==2) sAn=c+sAn;
        else if (p==1) sMois=c+sMois;
      } else {
        if (c=='-' || c=='/') p--;
      }
    }

    if (sMois.length==1) sMois='0'+sMois
    else if (sMois.length!=2) sMois="01";
    if (sAn=="") sAn="2005";

    var iAn=parseInt(sAn);
    if (iAn<20) iAn+=2000
    else if (iAn<100) iAn+=1900;
    else if (iAn<1900 || iAn>2050) iAn=2005;

    var iMois=parseInt(sMois);
    if (iMois>12) sMois="12";
    return ""+iAn+sMois;
}
function moistostr(d) {
    var s = ""+d;
    s = s.substring(4,6)+"/"+s.substring(0,4);
    return s;
}
