// javascript

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;}
        return nouvalpos;                      // Retourne la chaine en format monetaire:
}

function travailForm(quel) {                      // au travail!
	var nombrepaym = ""+document.frm.periodepaym.options[document.frm.periodepaym.selectedIndex].value;
	var termeans  = parseFloat((document.frm.terme.value)/12);
	var periodesterme   = termeans * parseInt(nombrepaym);
	var anneesamort    = parseFloat((document.frm.amortiss.value)/12);
	var periodestotales    = anneesamort*parseInt(nombrepaym);
	var valeurprina   = document.frm.principal.value;
	var calculepaym    = document.frm.paymperiodique.value;
	var tauxi        = parseFloat(document.frm.interest.value);

    while (calculepaym.indexOf("$") ==0 || calculepaym.indexOf(" ") ==0) {calculepaym = calculepaym.substring(1,calculepaym.length);}

	while (calculepaym.indexOf(",") != -1)  {
		var calculepaym = ""+calculepaym.substring(0,calculepaym.indexOf(","))+calculepaym.substring(calculepaym.indexOf(",")+1,calculepaym.length)
	}

	// se debarrasser des signes de $ de l'entree 

    while (valeurprina.indexOf("$") ==0 || valeurprina.indexOf(" ") ==0) {valeurprina = valeurprina.substring(1,valeurprina.length);}
	while (valeurprina.indexOf(",") != -1)  {
		var valeurprina = ""+valeurprina.substring(0,valeurprina.indexOf(","))+valeurprina.substring(valeurprina.indexOf(",")+1,valeurprina.length)
	}

	var calcmontant   = parseFloat(calculepaym);
	if (calcmontant  != calculepaym && calculepaym > 0 ) {
		document.frm.paymperiodique.value = " ERROR ";
		return;
	}


	if ( ( (document.frm.interest.value == null || document.frm.interest.value.length == 0) && quel != 'i') ||
        ( (document.frm.principal.value == null || document.frm.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('The Interest rate ('+tauxi+') is causing an error!  Please re-enter values ...');
		document.frm.termebalusa.value  =  0;
		document.frm.termeintusa.value  =  0;
		document.frm.paymentusa.value  = 0; 
		document.frm.intemprunttotusa.value   = 0;
		return;
	}
    if (tauxi < 0.3) {
        tauxi = tauxi * 100.0;   
	}

    document.frm.interest.value = tauxi+"";
    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) ;
// for Canada... var valeurprina  = (calcpaymdebase/intcandebase) * ( 1 - (1/(Math.pow((1+intcandebase),(anneesamort*12))) ) ) ;
			var valeurprina  = (calcpaymdebase/intusdebase) * ( 1 - (1/(Math.pow((1+intusdebase),(anneesamort*12))) ) ) ;
		} else {
// for Canada...  var valeurprina  = (calculepaym/intcan) * ( 1 - (1/(Math.pow((1+intcan),(periodestotales))) ) ) ;
			var valeurprina  = (calculepaym/intus) * ( 1 - (1/(Math.pow((1+intus),(periodestotales))) ) ) ;
		}
		document.frm.principal.value = valeurprina;

	} 
	
	if (quel == "p" && intcan == 0 ) {
		var valeurprina  = (calculepaym*periodestotales) ;
		document.frm.principal.value = valeurprina;
	} 

	var montantprin   = parseFloat(valeurprina);
	if (montantprin  != valeurprina) {
		document.frm.principal.value = " ERROR ";
		document.frm.paymperiodique.value = " ERROR ";
		return;
	}

	if (anneesamort < termeans ) {
		alert('The Amortization ('+anneesamort+')  must be greater than the term ('+termeans+') !  Please re-enter values ...');
		document.frm.termebalusa.value  =  0;
		document.frm.termeintusa.value  =  0;
		document.frm.paymentusa.value  = 0; 
		document.frm.intemprunttotusa.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)));
	} 

		// for Canada... document.frm.paymperiodique.value = Decimales(paymcana,2);
	document.frm.paymperiodique.value = Decimales(paymusa,2);
	   // for Canada document.frm.paymentcan.value = Decimales(paymcana,2); 
	document.frm.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 };

	document.frm.termebalusa.value   = Decimales(parseInt(balusa),0);
	document.frm.termeintusa.value   = Decimales(parseInt(inttotusa),0);
	document.frm.TermePayUsa.value   = Decimales(montantprin-(parseInt(balusa)),0);

	// For Canada document.frm.termebalcan.value  = Decimales(parseInt(balcana),0);
	// For Canada document.frm.termeintcan.value  = Decimales(parseInt(inttotcana),0);
	// For Canada document.frm.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(1,vraiterme.length);
	}
	// For Canada document.frm.amortactuellecan.value  = ""+vraiterme+" yrs";
	// For Canada document.frm.intemprunttotcan.value = Decimales(parseInt(inttotcana),0);
	document.frm.intemprunttotusa.value  = Decimales(parseInt(inttotusa),0);
	document.frm.totalyoupay.value  = Decimales(parseInt(inttotusa+montantprin),0);
	document.frm.principal.value = montantprin;
	// pour canada pas besoin des lignes 247 a 259
	var vraitermeusa = (inttotusa + montantprin)/(paymusa);
	if (nombrepaym == '52a')  {
	vraitermeusa = Decimales(vraitermeusa/52,2);
	vraitermeusa = vraitermeusa.substring(1,vraitermeusa.length);
	document.frm.amortactuelleusa.value = ""+vraitermeusa+" yrs";
	}
	if (nombrepaym == '26a')  {
	vraitermeusa = Decimales(vraitermeusa/26,2);
	vraitermeusa = vraitermeusa.substring(1,vraitermeusa.length);
	document.frm.amortactuelleusa.value = ""+vraitermeusa+" yrs";
	} else {
		document.frm.amortactuelleusa.value = ""+vraiterme+" yrs";
	}
}