function calculateMortgage(houseInc, monthPays, down, useCMHC) {
	var mortgage;
	if(useCMHC) {

		mortgage = calcHighRatio(houseInc, monthPays);
		if(mortgage + down > 250000) mortgage = 250000 - down;
	}
	else mortgage = down * 9;
	return mortgage;
}

function calcHighRatio(houseInc, monthPays) {
	var grossMort1 = 0;
	var grossMort2 = 0;
	var x;
	var y;
	var m;
	var z1;
	var z2;

	var interest = threeYear;
	x = Math.pow(1 + interest/200, .1666666666667) - 1;
	m = monthPays * 12;
	z1 = ((houseInc * .32) - 2100) / 12;
	z2 = ((( houseInc * .4) - 2100) - m) / 12;
	y = x / (1 -  Math.pow((1+x), -300));
	grossMort1 = z1/y;
	grossMort2 = z2/y;

	var m1 = returnSmaller(grossMort1, grossMort2);
	return moneyFormat(m1);
}

function moneyFormat(input) {
	var dolls = Math.floor(input);
	var output = dolls.toString() + "." + "00";
	return output;
}

function returnSmaller(first, second) {
	if (first < second) return first;
	else return second;
}

function returnLarger(first, second) {
	if (first < second) return second;
	else return first;
}

function checkValue(value) {
	var num = parseFloat(value);
	return !(num == NaN);
}

function calculatePayments(mortAmt, intrateSelected, selectedFreq) { 
	//convert the interest rate selection to a String
	var intRate = new String(intrateSelected);
	//get the position of the '@' char
	var startIndex = intRate.indexOf("@") + 1;
	//get the position of the '%' char
	var endIndex = intRate.indexOf("%");
	//initialize i to interest rate
	var i = (new String(intrateSelected)).substring(startIndex, endIndex);
 
	var x;        
	if(selectedFreq == "weekly") x = 52;
	else if(selectedFreq == "bi-weekly") x = 26;
	else if(selectedFreq == "semi-monthly") x = 24;
	else if(selectedFreq == "monthly") x = 12;  

	var n = 25;
	var P = mortAmt;
		
	var leftSide = Math.pow(1 + i/200, (1/(x/2)))-1;
	var rightSide = 1- Math.pow(1+ leftSide, (-n*x));
	var payment =   (leftSide / rightSide) * P;
	return "$" + moneyFormat(payment);
}

function calculatePayments2(mortAmt, intrateSelected) { 
	var m = mortAmt;
	var i = intrateSelected;

//	var payment = Math.floor(100*(PMT((1+(i)/200)^(1/6)-1,300,-m,0,0)))/100
	var payment = Math.floor( 100*( PMT( Math.pow( (1+(i)/200), (1/6) )-1, 300, -m, 0 ) ) ) / 100;
		
//	return "$" + moneyFormat(payment);
	return "$" + payment;
}

function calcpayment(pv, ir, np){
// Supplied:       =TRUNC(100*(PMT((1+(D9)/200)^(1/6)-1,300,-E4,0,0)))/100

   //return Math.floor(100*(PMT2(Math.pow(1+ir/200, 1/6)-1, np, pv)))/100;
	var leftSide = Math.pow(1 + ir/200, (1/6))-1;
	var rightSide = 1- Math.pow(1+ leftSide, (-np*12));
	var payment =   (leftSide / rightSide) * pv;
        return payment;
}

function PMT(ir, np, pv, fv) {
//	return -(ir*(fv+(1+ir)^np*pv))/(-1+(1+ir)^np)
	return -( ir*( fv+Math.pow( (1+ir), np) *pv ) ) / (-1+Math.pow( (1+ir), np) );
}

function PMT2( ir, np, pv ) {
// Supplied:	PMT=((1+i/2)^(1/6)-1)/(1-(1+i/2)^(-n*2))*PV

   var x = ir/100;
   var i = EQUIV(x);

   return (Math.pow(1+i/2, 1/6)-1) / (1-Math.pow(1+i/2, -np*2)) * pv; 
}

function FV( pv, ir, np, pmt ) {
// Supplied:    FV=(PV*(1+i)^n)-(((1+i)^n-1)/i*pyt

   var i = EQUIV(ir)/100;

   return (pv*(Math.pow((1+i),np)) - Math.pow((1+i),(np)-1)) / (i*pmt);
}

function EQUIV( ir ) {
// Supplied:    EQUIV=(1+j/2)^(1/6)-1

   return Math.pow(1+ir/2, 1/6)-1;
}
