function isNum(str) {
        /*      
        ...  determines whether the string 'str' is a number (i.e. contains only digits and .)
        */
        for (var i = 0; i < str.length; i++) {
                var ch = str.substring(i, i + 1)
                if ((ch < "0" || "9" < ch) && ch != '.') {
                        return false
                }
        }
        if ((str.length==0)) {
                return false
        } else  {
                return true
        }
}


function FindPayment()  {
        var discount=0
        var tradein=0
        var deposit=0
        msg=''
        ppstring=document.calcPayment.amount.value
        if (!isNum(ppstring)) {
                msg+='Non-numeric or absent data in loan amount field\n'
                }
        aprstring=document.calcPayment.aprpcnt.value
        if (!isNum(aprstring)) {
                msg+='Non-numeric or absent data in APR field\n'
                }
        nstring=document.calcPayment.nmonths.value
        if (!isNum(nstring)) {
                msg+='Non-numeric or absent data in number of months field\n'
                }
        if (msg.length==0)  {
                var pp=parseFloat(ppstring)
                var p=pp-discount-tradein-deposit
                var n=parseFloat(nstring)
                var apr=parseFloat(aprstring)
                var r=Math.pow((1+apr/100),1/12)
                if (apr>0) {
                        rn=Math.pow(r,n)
                        a=p*(1-r)*rn/(1-rn)
                } else {
                        a=p/n
                }
                a=0.01*Math.round(a*100)
                totp=0.01*Math.round(a*n*100)
                interest=0.01*Math.round((totp-p)*100)
                interestpcnt=0.01*Math.round(interest/p*100*100)
                //alert("Monthly payment = "+a+"\nTotal payment = "+totp)
                document.calcPayment.mpayment.value=a
                document.calcPayment.trepaid.value=totp
                document.calcPayment.trepaidpcnt.value=interestpcnt
        } else {
                alert(msg)
        }
}

function FindAPR()  {
        var deposit=0
        var q=0
        msg=''
        pstring=document.calcAPR.amount.value
        if (!isNum(pstring)) {
                msg+='Non-numeric or absent data in loan amount field\n'
        }
        paystring=document.calcAPR.mpayment.value
        if (!isNum(paystring)) {
                msg+='Non-numeric or absent data in payment field\n'
        }
        nstring=document.calcAPR.nmonths.value
        if (!isNum(nstring)) {
                msg+='Non-numeric or absent data in number of months field\n'
        }
        if (msg.length==0)  {
                var p=parseFloat(pstring)
                var n=parseFloat(nstring)
                var a=parseFloat(paystring)
                r=1.01
                pp=p-deposit
                rnew=0
                while (Math.abs(r-rnew)>0.0000001)   {
                    var rn=Math.pow(r,n)
                    rnm1=rn/r
                    fac=(pp*rn-q)*(1-r)/(1-rn)-a
                    facdash=(n*pp*rnm1*(1-r)-(pp*rn-q))/(1-rn)+(pp*rn-q)*(1-r)*n*rnm1/((1-rn)*(1-rn))
                    rnew=r-fac/facdash
                    r=rnew
                }
                r12=Math.pow(r,12)
                apr=0.01*Math.round((r12-1)*100*100)
                document.calcAPR.aprpcnt.value=apr
        } else {
                alert(msg)
        }
}

