//javascript for mortgage payment calculator, calc_mortgage.html page

var M,I,T;

//calculate repayment amount
function calcRepaymentAmount(period) 
{
		var mi    = I / (100 * period);
		var base  = 1;                 
		var mbase = 1 + mi;            

		for (i = 0; i < T * period; i++) 
		{
			base = base * mbase;
		}
        
        return rnd( (M * mi / ( 1 - (1/base))), 2 );
}


//calculate interest total
function calcInterest(payment,period)
{
	return rnd((payment * (period * T) - M), 2);
}


 //round value based on passed in precision value
 function rnd(value, precision)
 {
	value = "" + value;  // convert value to string
	precision = parseInt(precision); 					
	var whole = "" + Math.round(value * Math.pow(10, precision));
	var dPoint = whole.length - precision;
	
	if(dPoint != 0) 
	{
		result  = whole.substring(0, dPoint);
		result += ".";                         
		result += whole.substring(dPoint, whole.length);
	}                                                     
	else 
	{
		result = whole;
	}

	return result;      
}

				
function checkInput(str) 
{
	//  take out characters not [0-9] or fullstop
	var digits = "0123456789.";
	var s  = "";
	
	for (i = 0;i < str.length;i++)
	{
		var c = str.charAt(i);

		if (digits.indexOf(c) > -1)						 
			s = s + c;
		else
			errorMsg = str + " is not a number.";
    }

	return parseFloat(s);
}


//validate fields and do calculations
function calculate()
{
	var loanAmount;
	var loanInterestRate;
	var loanTerm;
	var repaymentFreq;					
	var errorMsg = "";
						
					
	if (document.getElementById('loanAmount'))
		loanAmount = document.getElementById('loanAmount').value;
	else
		errorMsg = "Loan amount could not be found.\n";
						
	if (document.getElementById('loanInterestRate'))
		loanInterestRate = document.getElementById('loanInterestRate').value;
	else
		errorMsg += "Loan interest rate could not be found.\n";
							
	if (document.getElementById('loanTerm'))
		loanTerm = document.getElementById('loanTerm').value;
	else
		errorMsg += "Loan term could not be found.\n";
	
	/*if (document.getElementById('repaymentFreq'))
		repaymentFreq = document.getElementById('repaymentFreq').value;
	else
		errorMsg += "Repayment frequency could not be found.\n";*/
	
	
	//if not errors do calculations					
	if (errorMsg == "")					
	{				
		M = checkInput(loanAmount);
		I = checkInput(loanInterestRate);
		T = checkInput(loanTerm);
	
		var pmtAmountLabel = document.getElementById('pmtAmountLabel');
		var pmtAmountValue = document.getElementById('pmtAmountValue');
		//var intAmount = document.getElementById('pmtInterestAmount'); 
		//var pmtPandI = document.getElementById('pmtPandI');						
		
		if (M && I && T) 
		{
			/*if (repaymentFreq == 'Fortnightly')
			{
				pmtAmountValue.innerText  = calcRepaymentAmount(26) + "";
				intAmount.innerText = calcInterest(pmtAmountValue.innerText,26) + "";
			}
			else if (repaymentFreq == 'Weekly')
			{
				pmtAmountValue.innerText =	calcRepaymentAmount(52) + "";
				intAmount.innerText = calcInterest(pmtAmountValue.innerText,52)  + "";
			}
			else
			{*/
				pmtAmountValue.innerText = calcRepaymentAmount(12)  + "";
				//intAmount.innerText = calcInterest(pmtAmountValue.innerText,12)  + "";
				//pmtPandI.innerText = parseFloat(intAmount.innerText) + parseFloat(rnd(M,2));
			//}												
		}
        
        pmtAmountLabel.innerText = repaymentFreq + ' Payment Amount:';
        
        //format values
        pmtAmountValue.innerText = formatCurrency(pmtAmountValue.innerText);
        //intAmount.innerText = formatCurrency(intAmount.innerText);
        //pmtPandI.innerText = formatCurrency(pmtPandI.innerText);
        
        loanAmount.value = rnd(M,2) + "";
		loanTerm.value	 = rnd(T,2) + "";
		
		return false;					
	}
	else
	{
		alert(errorMsg);
	}
}


function formatCurrency(inputNum) 
{
	inputNum = inputNum.toString().replace(/\$|\,/g,'');
	
	//check if a number or not
	if(isNaN(inputNum))
		num = "0";
		
	sign = (inputNum == (inputNum = Math.abs(inputNum)));
	inputNum = Math.floor(inputNum*100+0.50000000001);
	cents = inputNum%100;
	inputNum = Math.floor(inputNum/100).toString();
	
	if(cents < 10)
		cents = "0" + cents;
		
	for (var i = 0; i < Math.floor((inputNum.length-(1+i))/3); i++)
		inputNum = inputNum.substring(0,inputNum.length-(4*i+3))+','+ inputNum.substring(inputNum.length-(4*i+3));
		
	return (((sign)?'':'-') + '$' + inputNum + '.' + cents);
}