<!--
// JavaScript Document
// copyright par Dominique Peladeau
// www.calcul-de-pret.com
// info@1stop-info.com
function montremess(quel){
	if(quel == 'help') { 
		var message    = 
		"Entrer le Principal, le Taux d'intérêt, l'Amortissement (en mois) et \n" +
		"le type de paiement (annuel, semi annuel, mensuel, aux 2 semaines,\n" +
		"à la semaine, accéléré aux 2 semaines ou accéléré à la semaine), et\n" +
		"cliquer sur « Calculer le paiement » pour trouver le paiement périodique.\n\n"+
		"Ou indiquer le paiement que vous désirez effectuer et cliquer sur \n" +
		"« Calculer le principal » pour calculer le montant que vous pouvez emprunter.\n" +
		"Vous devez spécifier le taux d'intérêt et l'amortissement voulus.\n" +
		"     Exemple : \n" + 
		"     Avec un paiement de 600 $ par mois et un taux d'intérêt de 6 % -- quel est le Principal ?\n" +
		"     Taper 600 dans « Ou entrer paiement », taper 6 dans « Taux d'intérêt »,\n" +
		"     taper 300 dans « Amortissement » et cliquer sur « Calculer le Principal ».\n" +
		" \nMerci.";
	}
	if(quel == 'about') { 
		var message    = 
				"Calculateur d'emprunt hypothécaire.\n\n" + 
				"Les taux sont composés semi-annuellement (norme canadienne).\n\n" +
				"Ce calculateur d'hypothèque utilise le JavaScript pour effectuer\n" +
				"ses calculs. Il est possible que vos paiements soient \n" +
				"différents de ceux affichés ici.\n\n" +
				"Merci.\n" ;
	}
	alert (message);
}

function Decimales (entree,decim) {
        entree += "";                         // S'assurer que entree est une chaine texte:
        var original_entree = entree;          // Garder l'original de la chaine entree:
        var montant = parseFloat(entree);      // Prendre la valeur flottante:
		var valpos = "";
		var valdec = "";
        if (isNaN (montant))                  // Retourner chaine entree si non convertible:
                return original_entree;
		if (decim == 2) {
	        montant = Math.round (100 * montant);  // Mettre montant en sous, arrondi au sou:
	        var chaine;
	        if (montant < 10) {
	                chaine = "00" + montant;  // Mettre montant en chaine et mettre des zeros si necessaire:
	        } else if (montant < 100) {
	                chaine = "0" + montant;
			} else {
	                chaine = "" + montant;
			}
			valpos = chaine.substring(0,chaine.length - 2);
			valdec = chaine.substring(chaine.length - 2,chaine.length);
    	} else {
			valpos  = "" + Math.round (montant);  // Exprime le montant
		}
		var chiffresavant = "";
		var chiffresmilieu   = "";
		if (valpos.length > 6) {
			chiffresavant = valpos.substring(0,(valpos.length - (parseInt(valpos.length / 3) * 3) ))+" ";
		}
		if (valpos.length > 3){
			chiffresmilieu   = valpos.substring(valpos.length - 6,valpos.length - 3)+" ";
		}
		chiffresfin   = valpos.substring(valpos.length - 3, valpos.length);
		nouvalpos = chiffresavant+chiffresmilieu+chiffresfin;
		if (decim == 2) {nouvalpos = nouvalpos+","+valdec;
		nouvalpos = nouvalpos+" $";
		}
		nouvalpos = nouvalpos;
        return nouvalpos;  // Retourne la chaine en format monetaire:
}

function StripLe(LeTexte) { // Enlever les virgules, les espaces et les $
	LeTexte += "";
	var original_LeTexte = LeTexte;
	var LeMontant = parseFloat(LeTexte);
	while (LeTexte.indexOf("$") == 0 || LeTexte.indexOf(" ") == 0) {
		LeTexte = LeTexte.substring(1, LeTexte.length);
	}
	while (LeTexte.indexOf(",") != -1) {
		var LeTexte = ""+LeTexte.substring(0, LeTexte.indexOf(","))+LeTexte.substring(LeTexte.indexOf(",")+1, LeTexte.length);
	}
	while (LeTexte.indexOf(" ") != -1) {
		var LeTexte = ""+LeTexte.substring(0, LeTexte.indexOf(" "))+LeTexte.substring(LeTexte.indexOf(" ")+1, LeTexte.length);
	}
	while (LeTexte.indexOf("$") != -1) {
		var LeTexte = ""+LeTexte.substring(0, LeTexte.indexOf("$"))+LeTexte.substring(LeTexte.indexOf("$")+1, LeTexte.length);
	}
	if (isNaN(LeTexte)) {
		return original_LeTexte;
	}
	return LeTexte;
}

var _ONE=1;                       // changer un caractère par un autre
function Switch(item,VieuxCar,NouvCar)
{
  var _ret="";
  var _flag=0;
  var _item=item.split("");
  for(var i=0;i<_item.length;i++)
  {
    if(!_flag&&_item[i]==VieuxCar)
	{
	  _item[i]=NouvCar;
      _flag=_ONE;
	}
	_ret+=_item[i];
  }
  return(_ret);
}

function getFieldValue (strFieldName) { // aller chercher les variables du get
var strFieldValue;
var objRegExp = new RegExp(strFieldName + "=([^&]+)","gi");
if (objRegExp.test(location.search))
strFieldValue = unescape(RegExp.$1);
else strFieldValue="";
return strFieldValue;
}

function travailForm(quel) {                      // au travail!
      
	var nombrepaym = ""+document.CalcMensuAmort.periodepaym.options[document.CalcMensuAmort.periodepaym.selectedIndex].value;
	var termeans  = 0;
	var periodesterme   = 0;
	var anneesamort    = parseFloat((document.CalcMensuAmort.amortiss.value)/12);
	var periodestotales    = anneesamort*parseInt(nombrepaym);
	var valeurprina   = document.CalcMensuAmort.principal.value;
	var calculepaym    = document.CalcMensuAmort.paymperiodique.value;
	
	var temp3 = document.CalcMensuAmort.interest.value;
	temp3 = Switch(temp3,",",".");
	tauxi = parseFloat(temp3);

	// se debarrasser des signes de $ de l'entree

var temp1 = valeurprina;
valeurprina = StripLe(temp1);

var temp2 = calculepaym;
temp2 = Switch(temp2,",",".");
calculepaym = StripLe(temp2);


	var calcmontant   = parseFloat(calculepaym);
	if (calcmontant  != calculepaym && calculepaym > 0 ) {
		document.CalcMensuAmort.paymperiodique.value = " ERREUR ";
		return;
	}
	if ( ( (document.CalcMensuAmort.interest.value == null || document.CalcMensuAmort.interest.value.length == 0) && quel != 'i') ||
        ( (document.CalcMensuAmort.principal.value == null || document.CalcMensuAmort.principal.value.length == 0) && quel != 'p') ) {
        return;
    }
	diffcalc = 99999;
	nouvpaym = 0;
	tauxcalc = 0.09;
	if (quel == "i" && calculepaym > 0 ) {
		while (Math.abs(diffcalc) > 0.1 ) {
			nouvpaym = (parseFloat(valeurprina) * tauxcalc) / ( 1 - ( 1/ Math.pow((1+tauxcalc),periodestotales)));
			diffcalc = (calculepaym - nouvpaym);
			var signe = (diffcalc) / Math.abs(diffcalc)
			tauxcalc =  (0.01 * signe) * ( Math.abs(diffcalc) > 500 ) + (0.0001 * signe) * ( Math.abs(diffcalc) > 20 ) +  (0.00001 * signe) * ( Math.abs(diffcalc) > 10 ) + (0.000001 * signe) * ( Math.abs(diffcalc) > 1 ) +(0.0000001 * signe)  + tauxcalc;
		}
		tauxi =  2 * ( Math.pow((1+tauxcalc),parseInt(nombrepaym)/2) - 1);  
		tauxi = parseInt(tauxi * 1000000)/10000;
	}

    if (isNaN (tauxi))  {                // Retourner chaine entree si non convertible:
		alert("Le taux d'intérêt ("+temp3+") cause une erreur !  \n" +
		"Entrer les données à nouveau s.v.p. ...");
	
		// document.CalcMensuAmort.termebalcan.value = 0;
		// document.CalcMensuAmort.termeintcan.value = 0;
		// document.CalcMensuAmort.paymentcan.value = 0; 
		// document.CalcMensuAmort.intemprunttotcan.value  = 0;
		return;
	}
    if (tauxi < 0.3) {
        tauxi = tauxi * 100.0;   
	}

	temp2 = ""+tauxi;
	temp2 = Switch(temp2,".",",");
    document.CalcMensuAmort.interest.value = temp2;	
	
    tauxi = tauxi / 100.0;   

	var intcan = Math.pow((1+tauxi/2),(2/parseInt(nombrepaym))) - 1;  
	var intcandebase = Math.pow((1+tauxi/2),(2/12)) - 1;  
	var intus  = tauxi / parseInt(nombrepaym);
	var intusdebase  = tauxi / 12;
 
	if (quel == "p" && intcan != 0 ) {
		calcpaymdebase = calculepaym;
		calcperiodes = parseInt(nombrepaym);
		if ((nombrepaym == '52a' ||nombrepaym == '26a') && intcan != 0 ) {
			var calcpaymdebase = calculepaym * (parseInt(nombrepaym)/13) ;
			var valeurprina  = (calcpaymdebase/intcandebase) * ( 1 - (1/(Math.pow((1+intcandebase),(anneesamort*12))) ) ) ;
			// pour US var valeurprina  = (calcpaymdebase/intusdebase) * ( 1 - (1/(Math.pow((1+intusdebase),(anneesamort*12))) ) ) ;
		} else {
			var valeurprina  = (calculepaym/intcan) * ( 1 - (1/(Math.pow((1+intcan),(periodestotales))) ) ) ;
			// pour US var valeurprina  = (calculepaym/intus) * ( 1 - (1/(Math.pow((1+intus),(periodestotales))) ) ) ;
		}
		document.CalcMensuAmort.principal.value = Decimales(valeurprina,0);
	} 
	
	if (quel == "p" && intcan == 0 ) {
		var valeurprina  = (calculepaym*periodestotales) ;
		document.CalcMensuAmort.principal.value = Decimales(valeurprina,0);
		} 

	var montantprin   = parseFloat(valeurprina);
	if (montantprin  != valeurprina) {
		document.CalcMensuAmort.principal.value = " ERREUR ";
		document.CalcMensuAmort.paymperiodique.value = " ERREUR ";
		return;
	}

	if (anneesamort < termeans ) {
		alert("L'amortissement ("+anneesamort+") doit être plus grand que le terme ("+termeans+") !\n" +
		"Entrer les données à nouveau s.v.p. ...");
		document.CalcMensuAmort.termebalcan.value = 0;
		document.CalcMensuAmort.termeintcan.value = 0;
		document.CalcMensuAmort.paymentcan.value = 0; 
		document.CalcMensuAmort.intemprunttotcan.value  = 0;
		return;
		}

	if ( intcan == 0 ) {
		var paymbasecana  = montantprin/ (anneesamort * 12) ;
		var paymbaseusa   = paymbasecana;
	} else {
		var paymbasecana  = (montantprin * intcandebase) / ( 1 - ( 1/ Math.pow((1+intcandebase),(anneesamort*12))));
		var paymbaseusa   = (montantprin * intusdebase ) / ( 1 - ( 1/ Math.pow((1+ intusdebase),(anneesamort*12))));
	}		

	var paymcana = paymbasecana;
	var paymusa  = paymbaseusa;
	

	if ((nombrepaym == '52a' ||nombrepaym == '26a') && intcan != 0 ) {
		var paymcana = paymbasecana / (parseInt(nombrepaym)/13) ;
		var paymusa  = paymbaseusa /  (parseInt(nombrepaym)/13) ;
	} 

	if ((nombrepaym == '52' || nombrepaym == '26'|| nombrepaym == '2'|| nombrepaym == '1' ) && intcan != 0 ) {
		var paymcana = (montantprin * intcan) / ( 1 - ( 1/ Math.pow((1+intcan),periodestotales)));
		var paymusa  = (montantprin * intus ) / ( 1 - ( 1/ Math.pow((1+ intus),periodestotales)));
	} 

	document.CalcMensuAmort.paymperiodique.value = Decimales(paymcana,2);
	// pour US document.CalcMensuAmort.paymperiodique.value = Decimales(paymusa,2);
	// document.CalcMensuAmort.paymentcan.value = Decimales(paymcana,2); 
	// pour US document.CalcMensuAmort.paymentusa.value  = Decimales(paymusa,2); 

	var balcana = valeurprina;
	var balusa  = balcana;
	var intcana = 0;
	var intusa = 0;
	var inttotcana = 0;
	var inttotusa = 0;

    for (var jj = 0; jj < periodesterme ; jj++) {
	 	intcana    = intcan * balcana;
		inttotcana = inttotcana + intcana;
		balcana    = balcana - (paymcana - intcana); 

	 	intusa    = intus * balusa
		inttotusa = inttotusa + intusa
		balusa    = balusa - (paymusa - intusa); 
		if (balusa < 0  ) { 
			balusa = 0;
			break;
		}
		if (balcana < 0 ) { 
			balcana = 0 
			break;
		}
	}
	
	if (balusa < 0  ) { balusa = 0 };
	if (balcana < 0 ) { balcana = 0 };

	// pour US document.CalcMensuAmort.termebalusa.value   = Decimales(parseInt(balusa),0);
	// pour US document.CalcMensuAmort.termeintusa.value   = Decimales(parseInt(inttotusa),0);
	// pour US document.CalcMensuAmort.TermePayUsa.value   = Decimales(montantprin-(parseInt(balusa)),0);

	// document.CalcMensuAmort.termebalcan.value  = Decimales(parseInt(balcana),0);
	// document.CalcMensuAmort.termeintcan.value  = Decimales(parseInt(inttotcana),0);
	// document.CalcMensuAmort.TermePayCan.value   = Decimales(montantprin-(parseInt(balcana)),0);	

	var kk = jj;
    for (var jj = periodesterme; jj < periodestotales; jj++) {
	 	intcana    = intcan * balcana;
		inttotcana = inttotcana + intcana;
		balcana    = balcana - (paymcana - intcana); 

	 	intusa    = intus * balusa
		inttotusa = inttotusa + intusa
		balusa    = balusa - (paymusa - intusa); 
		kk = jj;	
		if (balusa < 0  ) { 
			balusa = 0;
			break;
		}
		if (balcana < 0 ) { 
			balcana = 0 
			break;
		}
	}
	vraiterme = Decimales((kk+1)/parseInt(nombrepaym),2);
	if (intcan == 0 ) {
		vraiterme = anneesamort ;
	} else {
		vraiterme = vraiterme.substring(0,vraiterme.length-1);
	}
	
	// document.CalcMensuAmort.amortactuellecan.value  = ""+vraiterme+" ans";
	// document.CalcMensuAmort.intemprunttotcan.value = Decimales(parseInt(inttotcana),0);
	// pour US document.CalcMensuAmort.intemprunttotusa.value  = Decimales(parseInt(inttotusa),0);
	TotalInt = Decimales(inttotcana,2);
	document.CalcMensuAmort.principal.value = Decimales(montantprin,0);
}
