var headertext = 'How to use the Mortgage Calculator';
var helptext = '<p><strong>Amort. (Yrs.)</strong> is the amortization period of the loan. <strong>Term (Yrs.)</strong> is the length of the loan contract. <strong>Term (Yrs.)</strong> can also be used to calculate the amortization after <em>x</em> number of years. You can then know how much was paid in interest after <em>x</em> years (<strong>Term Interest</strong>), how much principal was paid after <em>x</em> years (<strong>Term Principal Paid</strong>), and how much principal you still have to pay after <em>x</em> years (<strong>Term Balance</strong>). </p>'
+ '<ol>'
+ '  <li>Input <strong>Principal</strong>, <strong>Interest Rate</strong>, <strong>Amort. (Yrs.)</strong>, <strong>Term (Yrs.)</strong>, and <strong>Payment Type</strong></li>'
+ '  <li>Click on "<strong>Calculate Payment</strong>" to calculate the periodic payment</li>'
+ '</ol>'
+ '<em>or...</em>'
+ '<ol>'
+ '  <li>Input <strong>Payment</strong> (bottom of form), <strong>Interest Rate</strong>, <strong>Amort. (Yrs.)</strong>, <strong>Term (Yrs.)</strong> and <strong>Payment Type</strong></li>'
+ '  <li>Click on "<strong>Calculate Principal</strong>" to calculate the value for the FIXED periodic payment you enter. </li>'
+ '</ol>'
+ '<blockquote>'
+ '  <p>Example: What is the principal for a $700 periodic payment, 6% interest and 30-year amortization? </p>'
+ '  <ol>'
+ '  <li>Enter 700 in "Or input payment" (bottom of form)</li>'
+ '  <li>Enter 6 in Interest Rate</li>'
+ '  <li>Enter 30 in Amort. (Yrs.)</li>'
+ '  <li>Click on "Calculate Principal"</li>'
+ '  </ol>'
+ '</blockquote>';

(function() {
	var loader = new YAHOO.util.YUILoader({
		base: "",
		require: ["button","container"],
		loadOptional: false,
		combine: true,
		filter: "MIN",
		allowRollup: true,
		onSuccess: function() {
			initHelp();
		}
	});

	// Load the files using the insert() method.
	loader.insert();
})();

var initHelp = function(){
	YAHOO.namespace("example.container");

	// Define various event handlers for Dialog
	var handleYes = function() {
		alert("You clicked yes!");
		this.hide();
	};
	var handleNo = function() {
		this.hide();
	};

	// Instantiate the Dialog
	YAHOO.example.container.simpledialog1 = new YAHOO.widget.SimpleDialog("simpledialog1",{
		width: "600px",
		fixedcenter: true,
		visible: false,
		draggable: true,
		close: true,
		text: helptext,
		icon: YAHOO.widget.SimpleDialog.ICON_HELP,
		constraintoviewport: true
	} );
	YAHOO.example.container.simpledialog1.setHeader(headertext);

	// Render the Dialog
	YAHOO.example.container.simpledialog1.render("help");

	YAHOO.util.Event.addListener("dialog-help", "click", YAHOO.example.container.simpledialog1.show, YAHOO.example.container.simpledialog1, true);
	YAHOO.util.Event.addListener("hide", "click", YAHOO.example.container.simpledialog1.hide, YAHOO.example.container.simpledialog1, true);

}



// JavaScript Document
// copyright and written by Dominique Peladeau
// www.1stop-mortgagecalculator.com
// dom@1stop-mortgagecalculator.com

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 travailFormUS(quel) {                      // au travail!

	var nombrepaym 		= parseInt(jQuery('#periodepaym').val());
	var termeans  		= parseInt(jQuery('#terme').val());
	var periodesterme  	= termeans * nombrepaym;
	var anneesamort		= parseInt(jQuery('#amortiss').val());
	var periodestotales	= anneesamort * parseInt(nombrepaym);
	var valeurprina   	= jQuery('#principal').val();
	var calculepaym   	= jQuery('#paymperiodique').val();
	var tauxi		   	= parseFloat(jQuery('#interest').val());

	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 ) {
		jQuery('#paymperiodique').val('ERROR');
		return;
	}


	if ( ( (jQuery('#interest').val() == null || jQuery('#interest').val().length == 0) && quel != 'i') ||
	( (jQuery('#principal').val() == null || jQuery('#principal').val().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 ...');
		jQuery('#termebalusa').val(0);
		jQuery('#termeintusa').val(0);
		jQuery('#paymentusa').val(0);
		jQuery('#intemprunttotusa').val(0);
		return;
	}
	if (tauxi < 0.3) {
		tauxi = tauxi * 100.0;
	}

	jQuery('#interest').val(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))) ) ) ;
		}
		jQuery('#principal').val(Decimales(valeurprina,0));

	}

	if (quel == "p" && intcan == 0 ) {
		var valeurprina  = (calculepaym*periodestotales) ;
		jQuery('#principal').val(Decimales(valeurprina,0));
	}

	var montantprin   = parseFloat(valeurprina);
	if (montantprin  != valeurprina) {
		jQuery('#principal').val('ERROR');
		jQuery('#paymperiodique').val('ERROR');
		return;
	}

	if (anneesamort < termeans ) {
		alert('The Amortization ('+anneesamort+')  must be greater than the term ('+termeans+') !  Please re-enter values ...');
		jQuery('#termebalusa').val(0);
		jQuery('#termeintusa').val(0);
		jQuery('#paymentusa').val(0);
		jQuery('#intemprunttotusa').val(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... jQuery('#paymperiodique').val(Decimales(paymcana,2));
	jQuery('#paymperiodique').val(Decimales(paymusa,2));
	// for Canada jQuery('#paymentcan').val(Decimales(paymcana,2));
	jQuery('#paymentusa').val(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 };

	jQuery('#termebalusa').val(Decimales(parseInt(balusa),0));
	jQuery('#termeintusa').val(Decimales(parseInt(inttotusa),0));
	jQuery('#TermePayUsa').val(Decimales(montantprin-(parseInt(balusa)),0));

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