// Performs operations to calculate and display mortgage premium based on form values.
// always returns false, so it can be used in the form's 'onsubmit' value

function mortgageCalc(formOrId) {
    // Config variables
    //-----------------
    var inflationValue      = 2.5;
    // Input field names
    var borrowAmountName   = 'amount'; // Name of field containing the amount they wish to borrow
    var timeToRepayName    = 'time'; // Name of the field containing the time period over which they wish to repay, in years
    var interestRateName   = 'interest'; // Name of the field containing the interest rate
    // Output element ids
    var errorMessageDivId       = 'error_message'; // Div holding the error message for missing fields
    var errorMessageIncorrectDivId       = 'error_message_incorrect'; // Div holding the error message for wrong data
    var resultsContainerId      = 'results_container'; // Container to show results
    var repaymentMortgageId     = 'repayment_mortgage'; // To hold the value for the monthly
    var interestMortgageId      = 'interest_mortgage'; // To hold the value for the monthly
    
    // find the form
    var form;
    if(formOrId.nodeType && formOrId.nodeType == 1) form = formOrId; // If it is an element, use it as such
    else if(document.getElementById(formOrId)) form = document.getElementById(formOrId); // Otherwise try to use it as an element id
    else return false; // or return false
    
    // Get values
    var borrowAmount    = form[borrowAmountName].value;
    var timeToRepay     = form[timeToRepayName].value;
    var interestRate    = form[interestRateName].value;
    
    // Set up error elements
    var errorMessageDiv     = document.getElementById(errorMessageDivId);
    var errorMessageIncorrectDiv     = document.getElementById(errorMessageIncorrectDivId);
    var borrowAmountError   = document.getElementById(borrowAmountName + '_error');
    var timeToRepayError    = document.getElementById(timeToRepayName + '_error');
    var interestRateError   = document.getElementById(interestRateName + '_error');
    var borrowAmountErrorIncorrect   = document.getElementById(borrowAmountName + '_incorrect');
    var timeToRepayErrorIncorrect    = document.getElementById(timeToRepayName + '_incorrect');
    var interestRateErrorIncorrect   = document.getElementById(interestRateName + '_incorrect');
    
    // Hide all error messages
    addClass(errorMessageDiv,'hidden');
    addClass(errorMessageIncorrectDiv,'hidden');
    addClass(borrowAmountError,'hidden');
    addClass(timeToRepayError,'hidden');
    addClass(interestRateError,'hidden');
    addClass(borrowAmountErrorIncorrect,'hidden');
    addClass(timeToRepayErrorIncorrect,'hidden');
    addClass(interestRateErrorIncorrect,'hidden');




    // Check for missing fields
    if (!borrowAmount || !timeToRepay || !interestRate) {
        
        // Show error message
        removeClass(errorMessageDiv,'hidden');
        
        // Show images depending on what's missing
        if(!borrowAmount) removeClass(borrowAmountError,'hidden');
        if(!timeToRepay) removeClass(timeToRepayError,'hidden');
        if(!interestRate) removeClass(interestRateError,'hidden');
        
        return false;
    } else if (!checkNumber(borrowAmount) || !checkNumber(timeToRepay) || !checkNumber(interestRate)) {
        removeClass(errorMessageIncorrectDiv,'hidden');

	if (!checkNumber(borrowAmount)) {
	    removeClass(borrowAmountErrorIncorrect,'hidden');
	} 

        if (!checkNumber(timeToRepay)) {
	    removeClass(timeToRepayErrorIncorrect,'hidden');
	}
 
        if (!checkNumber(interestRate)) {
	    removeClass(interestRateErrorIncorrect,'hidden');
	}

	return false;
    } else {

        borrowAmount = Number(borrowAmount.replace(/(,|\%|\-)/g, ""));
        timeToRepay = Number(timeToRepay.replace(/(,|\%|\-)/g, ""));
        interestRate = Number(interestRate.replace(/(,|\%|\-)/g, ""));

        // Convert all values to numbers
        var borrowNum       = parseFloat(borrowAmount);
        var repayNum        = parseFloat(timeToRepay);
        var interestNum     = parseFloat(interestRate);
        
	//( ( ADV AMOUNT * GROSS INT RATE )/ ( 1 - ( 1 / ( ( ( GROSS INT RATE / 12 ) + 1 ) ^ TERM IN MONTHS ) ) ) ) / 12

        // Calculate monthly repayments 
        var rate = interestNum / 100;
        var months = timeToRepay * 12;
	var step1 = (rate/12) + 1; 
        var divider = Math.pow(step1, months);
	var step2 = 1 / divider;
	var step3 = 1 - step2;

	var monthly_payments =  ( ( borrowNum * rate ) / step3 ) / 12;
	var interest_payments = (borrowNum * rate)/12; 
        
        if (monthly_payments < 1) {
            
        } 
        
        if (document.getElementById){
            // Get the elements
            var resultsContainer        = document.getElementById(resultsContainerId);
            var repaymentMortgage       = document.getElementById(repaymentMortgageId);
	    var interestMortgage        = document.getElementById(interestMortgageId);
           
            
            // Create values
            var repaymentValue  = document.createTextNode(unescape("%A3") + monthly_payments.toFixed(2));
            var interestValue   = document.createTextNode(unescape("%A3") + interest_payments.toFixed(2));
           
            
            // Remove all items from elements
            clearElem(repaymentMortgage);
            clearElem(interestMortgage);
            
            
            // Insert the values
            repaymentMortgage.appendChild(repaymentValue);
            interestMortgage.appendChild(interestValue);
           
            
            // Show the results div
            removeClass(resultsContainer,'hidden');
        }
    }
    
    return false;
}


function checkNumber(oStringToCheck){
    var myNumber = Number(oStringToCheck.replace(/(,|\.|\%)/g, ""));
    if (isNaN(myNumber)) return false;
    return true;
}
