//javascript mortgage calculator

//  check for valid numeric strings
function IsNumeric(strString)		
{
   var strValidChars = "0123456789.-";
   var strChar;
   var blnResult = true;

   if (strString.length == 0) return false;

   //  test strString consists of valid characters listed above
   for (i = 0; i < strString.length && blnResult == true; i++)
   {
    strChar = strString.charAt(i);
    if (strValidChars.indexOf(strChar) == -1)
        {
        blnResult = false;
        }
   }
   return blnResult;
}//end of IsNumeric function

function calcButton_Click(form) 
{
	if (form.principal.value.length == 0 || IsNumeric(form.principal.value)== false) 
	{
		alert ("Please enter value for Principal field.");
		form.principal.focus(); 
	}
	else if (form.interest.value.length == 0 || IsNumeric(form.interest.value) == false) 
	{
		alert ("Please enter value for Interest Rate field.");
		form.interest.focus(); 
	}
	else if (form.noYear.value.length == 0 || IsNumeric(form.noYear.value) == false) 
	{
		alert ("Plase enter value for Number of Year field.");
		form.noYear.focus(); 
	}
	else
		calculatePayment(form);
}

function calculatePayment(form) 
{
	princ = form.principal.value;
	intRate = (form.interest.value/100) / 12;
	months = form.noYear.value * 12;
	document.getElementById('monthlyPayment').innerHTML = "$ " + (Math.floor((princ*intRate)/(1-Math.pow(1+intRate,(-1*months)))*100)/100 );
	document.getElementById('outPrincipal').innerHTML = "$ " + princ;
	document.getElementById('totalPayment').innerHTML = months;
	
}//end of calculatePayment

function hideRow()
{
	for(i=1; i<=10; i++)
	{
		document.getElementById('calcResult'+i).className="hideRow";
	}
}
function showRow()
{
	for(i=1; i<=10; i++)
	{
		document.getElementById('calcResult'+i).className="showRow";
	}
}

function supCalcButton_Click(form)
{	
	if (form.propValue.value.length == 0)
		form.propValue.value = 0;
	if (form.downPayment.value.length == 0)
		form.downPayment.value = 0;
	if (form.interestRate.value.length == 0)
		form.interestRate.value = 0;
	if (form.loanTerm.value.length == 0)
		form.interestRate.value = 0;
	if (form.loanAmount2.value.length == 0)
		form.loanAmount2.value = 0;
	if (form.interestRate2.value.length == 0)
		form.interestRate2.value = 0;
	if (form.loanTerm2.value.length == 0)
		form.loanTerm2.value = 0;

	if (form.propValue.value.length == 0 || IsNumeric(parseFloat(deleteComma(form.propValue.value))) == false)
	{
		alert("Please enter value for Property Value field.");
		form.propValue.focus();
	}
	else if(form.downPayment.value.length == 0 || IsNumeric(parseFloat(deleteComma(form.downPayment.value))) == false)
	{
		alert("Please enter value for Down Payment field.");
		form.downPayment.focus();
	}
	else if(form.interestRate.value.length == 0 || IsNumeric(form.interestRate.value) == false)
	{
		alert("Please enter value for Interest Rate field.");
		form.interestRate.focus();
	}
	else if(form.loanTerm.value.length == 0 || IsNumeric(form.loanTerm.value) == false)
	{
		alert("Please enter value for Loan Term field.");
		form.loanTerm.focus();
	}
	else if(IsNumeric(parseFloat(deleteComma(form.loanAmount2.value))) == false)
	{
		alert("Please enter value for 2nd Loan Amount.");
		form.loanAmount2.focus();
	}
	else if(IsNumeric(form.interestRate2.value) == false)
	{
		alert("Pleae enter value for Interest Rate.");
		form.interestRate2.focus();
	}
	else if(IsNumeric(form.loanTerm2.value) == false)
	{
		alert("Plase enter value for Loan Term 2.");
		form.loanTerm2.focus();
	}
	else
		supCalcPayment(form)
}//end of supCalcButton_Click function
function supCalcPayment(form)
{
	var loanAmount1;
	var loanToValue;
	var payment1;
	var payment2;
	var propertyInsurance;
	var propertyTaxes;
	var mortgageInsurance;
	var totalMonthly;
	var propValue = parseFloat(deleteComma(form.propValue.value));
	var downPayment = parseFloat(deleteComma(form.downPayment.value));
	var interestRate1 = (form.interestRate.value/100) / 12;
	var loanTerm = (form.loanTerm.value) * 1;
	var loanAmount2 = parseFloat(deleteComma(form.loanAmount2.value));
	var interestRate2 = (form.interestRate2.value/100) / 12;
	var loanTerm2 = form.loanTerm2.value;
	
	//performing the calculation for 1st payment
	loanAmount1 = propValue - downPayment;
	loanToValue = 100 *(loanAmount1/propValue);
	if (isNaN(loanToValue))
		loanToValue = 0;
		
	payment1 = (Math.floor((loanAmount1*interestRate1)/(1-Math.pow(1+interestRate1, (-1 * (loanTerm * 12)))) * 100)/100 );
	
	if (isNaN(payment1))
		payment1 = 0;

	//performing the calculation for 2nd payment
	payment2 = (Math.floor((loanAmount2*interestRate2)/(1-Math.pow(1+interestRate2, (-1 * (loanTerm2 * 12)))) * 100)/100);
	
	if (isNaN(payment2))
		payment2 = 0;
	propertyInsurance = ((loanAmount1 + loanAmount2) * 0.00325)/12;
	
	propertyTaxes = (propValue * 0.0095) / 12;
	
	//calculating the mortgage insurance
	if (loanToValue > 90)
	{
		mortgageInsurance = (loanAmount1 * 0.0078)/12;
	}
	else if (loanToValue > 85)
	{
		mortgageInsurance = (loanAmount1 * 0.0052)/12;
	}
	else if (loanToValue > 80)
	{
		mortgageInsurance = (loanAmount1 * 0.0032)/12;
	}
	else
		mortgageInsurance = 0;
	
	//calculate the total monthly payment
	totalMonthly = payment1 + payment2 + propertyInsurance + propertyTaxes + mortgageInsurance;
	
	//do the format currency and add in comma(s) if need
	loanAmount1 = addCommas(formatCurrency(loanAmount1));
	payment1 = addCommas(formatCurrency(payment1));
	payment2 = addCommas(formatCurrency(payment2));
	propertyInsurance = addCommas(formatCurrency(propertyInsurance));
	propertyTaxes = addCommas(formatCurrency(propertyTaxes));
	mortgageInsurance = addCommas(formatCurrency(mortgageInsurance));
	totalMonthly = addCommas(formatCurrency(totalMonthly));
	
	document.getElementById('loanAmount1').innerHTML = "$ " + loanAmount1;
	document.getElementById('loanToValue').innerHTML = loanToValue.toFixed(2) + "%";
	document.getElementById('payment1').innerHTML = "$ " + payment1;
	document.getElementById('payment2').innerHTML = "$ " + payment2;
	document.getElementById('propertyInsurance').innerHTML = "$ " + propertyInsurance;
	document.getElementById('propertyTaxes').innerHTML = "$ " + propertyTaxes;
	document.getElementById('mortgageInsurance').innerHTML = "$ " + mortgageInsurance;
	document.getElementById('totalMonthly').innerHTML = "$ " + totalMonthly;
	
	//call the showRow function to show results
	showRow();

}//end of supCalcPayment function
function formatCurrency(amount) {

		var i = parseFloat(amount);
		if(isNaN(i)) { i = 0.00; }
		var minus = '';
		if(i < 0) { minus = '-'; }
		i = Math.abs(i);
		i = parseInt((i + .005) * 100);
		i = i / 100;
		s = new String(i);
		if(s.indexOf('.') < 0) { s += '.00'; }
		if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
		s = minus + s;
		return s;
	}

	function addCommas(amount) {

		var delimiter = ","; // replace comma if desired
		var a = amount.split('.',2)
		var d = a[1];
		var i = parseInt(a[0]);
		if(isNaN(i)) { return ''; }
		var minus = '';
		if(i < 0) { minus = '-'; }
		i = Math.abs(i);
		var n = new String(i);
		var a = [];

		while(n.length > 3) {
			var nn = n.substr(n.length-3);
			a.unshift(nn);
			n = n.substr(0,n.length-3);
		}

		if(n.length > 0) { a.unshift(n); }
		n = a.join(delimiter);
		if(d.length < 1) { amount = n; }
		else { amount = n + '.' + d; }
		amount = minus + amount;
		return amount;
	}
	
	function deleteComma(strString)
	{
		var array_str;
		if (strString.search(","))
		{
			array_str = strString.split(",");
			strString = array_str.join("");
			return strString;
		}
		else
			return strString;
	}

//This function will handle the randomize of the picture
function randomImage()
{
	var photo;
	var pictureName;
	var rand = (Math.round(Math.random()*10));
	var imgArray = new Array("1","2","3","4","5","6","7","8","9","10","11");
	photo=imgArray[rand];
	pictureName = "cmsimages/" +"random" + photo + ".jpg";
	return pictureName;
	
}//end of function

