// JavaScript Document
function range(from,to){
var temp=[];
for(var i=from;i<=to;i++){
temp.push(i);
}
return temp;
}

function populateMenuFromArray(men,arr,header){
var start=header?+1:+0,a=arr.length;
for(var i=start,j=0;j<a;i++){
men.options[i]=new Option(arr[j++]);
}
}

function toCurrency(val,currency){
val=(val+"").replace(/\,/g,"");
return  ((currency? currency:"") + 
		  (Math.round(val*100)+(val<0?-0.1:+0.1))/ 100).replace(/(.*\.\d\d)\d*/,'$1');
}

onload=function(){
populateMenuFromArray(document.forms["mort"].years,range(1990,new Date().getFullYear()+1).reverse(),true);
document.forms["mort"].Calc.onclick=function(){
if(checkInputs()){
with(this.form){
monthlyPayment.value=
toCurrency(getMonthlyPayment(prin.value,apr.value,12,yrs.value),"$");
}
}
}
}

function numsOnly(v){
return v.replace(/[^\d.]/g,"")
}

function checkInputs(){var msg="";
with(document.forms["mort"]){
prin.value=numsOnly(prin.value);apr.value=numsOnly(apr.value);
if(isNaN(prin.value) || prin.value<1) msg+="Principal out of range\n";
if(isNaN(apr.value) || apr.value<.1 || apr.value >100) msg+="Interest out of range\n";
if(isNaN(yrs.value) || yrs.value<1 || yrs.value >100 || yrs.value%1!=0) msg+="Years out of range";
if(msg){
alert(msg);
return false;
}
}
return true;
}

function getMonthlyPayment(principal,apr,ppy,years){
var a=Math.pow(1+apr/100/ppy,ppy*years);
return principal*a*(apr/100/ppy)/(a-1);
}
