THE CODE FOR: Loan Shark

                        
                            //get the loans from page
                            function getValues() {
                            
                                const loanData = {};
                                //clear out the table display
                                document.getElementById("paymentBody").innerHTML = "";
                            
                                loanData.amount = parseFloat(document.getElementById("loanAmount").value);
                                loanData.term = parseInt(document.getElementById("loanTerms").value);
                                loanData.rate = parseFloat(document.getElementById("loanRate").value);
                            
                            
                                if (isNaN(loanData.amount)) {
                                    alert("Enter a valid amount. Must be a number!");
                                    document.getElementById("loanAmount").focus();
                                } else if (isNaN(loanData.term)) {
                                    alert("Enter a valid term. Must be a number!");
                                    document.getElementById("loanTerms").focus();
                                } else if (isNaN(loanData.amount)) {
                                    alert("Enter a valid rate. Must be a number!");
                                    document.getElementById("loanRate").focus();
                                } else {
                                    //calls calculatedLoanTotal to calculate the schedule
                                    const calculatedLoan = calculateLoanTotal(loanData);
                                    //calls displayLoanData passing calculatedLoan values
                                    displayLoanData(calculatedLoan, loanData);
                                }
                            }
                            
                            //This function receives the parameter object of loanData which 
                            //to be calculated and passed as an array of object that has a 
                            //length equivalent to the terms of the loan so it can be looped through for output.
                            function calculateLoanTotal(loanData) {
                            
                                let totalMonthlyPayment = 0;
                                let interestPayment = 0;
                                let principalPayment = 0;
                                let remainingBalance = loanData.amount;
                                let totalInterest = 0;
                            
                                const loanDataArray = [];
                            
                                for (let index = 0; index < loanData.term; index++) {
                            
                                    totalMonthlyPayment = (loanData.amount * (loanData.rate / 1200)) / [(1 - (1 + loanData.rate / 1200) ** (-loanData.term))];
                            
                                    interestPayment = remainingBalance * loanData.rate / 1200;
                            
                                    principalPayment = totalMonthlyPayment - interestPayment;
                            
                                    remainingBalance -= principalPayment;
                            
                                    totalInterest += interestPayment;
                            
                                    loanDataArray.push({
                                        'totalMonthlyPayment': totalMonthlyPayment.toFixed(2),
                                        'interestPayment': interestPayment.toFixed(2),
                                        'principalPayment': principalPayment.toFixed(2),
                                        'totalInterest': totalInterest.toFixed(2),
                                        'remainingBalance': remainingBalance.toFixed(2),
                                    });
                                }
                                return loanDataArray;
                            }
                            
                            //displays ammortization schedule on the page through a table 
                            function displayLoanData(loanDataArray, loanData) {
                            
                                let totalCost = loanData.amount + parseFloat(loanDataArray[loanData.term - 1].totalInterest);
                            
                                document.getElementById("totalPrincipal").innerHTML = '$' + loanData.amount;
                                document.getElementById("totalInterest").innerHTML = '$' + loanDataArray[loanData.term - 1].totalInterest;
                                document.getElementById("totalCost").innerHTML = '$' + totalCost;
                                document.getElementById("totalMonthlyPayment").innerHTML = '$' + loanDataArray[0].totalMonthlyPayment;
                            
                                //loanTable is assigned the body of the table so the rows can be displayed
                                let loanTable = document.getElementById("paymentBody");
                            
                                //loops through the array to assign values to rows of the table
                                loanDataArray.forEach((element, index) => {
                            
                                    //insertRow method is called to prepare the row to be inserted with data
                                    let paymentDataRow = loanTable.insertRow(index);
                            
                                    //insertCell method is used to display values to the column of the index
                                    paymentDataRow.insertCell(0).innerHTML = index + 1;;
                                    paymentDataRow.insertCell(1).innerHTML = element.totalMonthlyPayment;
                                    paymentDataRow.insertCell(2).innerHTML = element.principalPayment;
                                    paymentDataRow.insertCell(3).innerHTML = element.interestPayment;
                                    paymentDataRow.insertCell(4).innerHTML = element.totalInterest;
                                    paymentDataRow.insertCell(5).innerHTML = element.remainingBalance;
                                });
                            }
                        
                    

The code is structured in three functions

getValues

Gets values from the user. variables amount, term and rate is assigned to loanData object.

calculateLoanTotal

The logic layer of the application which calculates every value necessary for ammortization.

displayLoanData

This displays the ammortization schedule that is displayed on the table.