/*
----------------------------------------------------------------------------------------------
About Santander
repaymentCalculator.js
Authors: Mike Speight
Created: 8 December 2008
----------------------------------------------------------------------------------------------
*/

/* Some global variables to set currency symbols and results text */
var currencySymbol = "&pound;";
var repaymentResultText = "The monthly repayment will be ";
/*MN Change*/
/*var callBackButton = '<br /><input type="button" id="callBackButton" value=" Arrange a Call Back" class="redButton" target="_new" onClick="arrangeCallBack()" />';*/

var callBackButton = '<br /><h2 style="font-size:90%; margin:0;">Apply today, call 0800 587 5023<h2>';

var callBackURL = "http:\/\/www.abbey.com\/entry_aip.htm";
var amountToBorrowError = '<div class="errorText">Amount to borrow must be a numeric value.</div><div class="clear"> </div>';
var minimumLoanError = '<div class="errorText">Amount to borrow must be at least &pound;5,000.</div><div class="clear"> </div>';
var repaymentTermError = '<div class="errorText">Repayment term must be a numeric value between 2 and 35.</div><div class="clear"> </div>';

var interestRateError = '<div class="errorText">Interest rate must be a numeric value.</div><div class="clear"> </div>';
var interestRateError5 = '<div class="errorText">Amount to borrow must be at least &pound;5,000 for the selected interest rate</div><div class="clear"> </div>';
var interestRateError10 = '<div class="errorText">Amount to borrow must be at least &pound;10,000 for the selected interest rate</div><div class="clear"> </div>';
var interestRateError25 = '<div class="errorText">Amount to borrow must be at least &pound;25,000 for the selected interest rate</div><div class="clear"> </div>';
var interestRateError30 = '<div class="errorText">Amount to borrow must be at least &pound;30,000 for the selected interest rate</div><div class="clear"> </div>';

var minRepaymentTermError = '<div id="errorMessage" class="errorMessage"><div class="errorText">Repayment term must be a numeric value greater than or equal to 7.</div><div class="clear"> </div></div>';
var minRepaymentTermError2 = '<div id="errorMessage" class="errorMessage"><div class="errorText">Repayment term must be a numeric value greater than or equal to 2.</div><div class="clear"> </div></div>';
var minRepaymentTermError3 = '<div id="errorMessage" class="errorMessage"><div class="errorText">Repayment term must be a numeric value greater than or equal to 3.</div><div class="clear"> </div></div>';
var minRepaymentTermError4 = '<div id="errorMessage" class="errorMessage"><div class="errorText">Repayment term must be a numeric value greater than or equal to 4.</div><div class="clear"> </div></div>';
var loanLimit5 = '<div id="errorMessage" class="errorMessage"><div class="errorText">Amount must be 5k+.</div><div class="clear"> </div></div>';
/*MN Change*/
var loanLimit10 = '<div id="errorMessage" class="errorMessage"><div class="errorText">Amount must be 10k+.</div><div class="clear"> </div></div>';
/*MN Change*/
var loanLimit25 = '<div id="errorMessage" class="errorMessage"><div class="errorText">Amount must be 25k+.</div><div class="clear"> </div></div>';
/*MN Change*/
var loanLimit30 = '<div id="errorMessage" class="errorMessage"><div class="errorText">Amount must be 30k+.</div><div class="clear"> </div></div>';
/*MN Change*/

function calculateRate() {
    var errorCount = 0;
    var errorMessage = "";
    // Get values from the form
    var amountToBorrow = $("borrowAmount").value;
    var repaymentTerm = $("repaymentTerm").value;
    var interestRate = $("interestRate").value;
    var selObj = $("interestRate");
    var selObjIndex = -1;
    var opt10 = "2,3,4,5";
    var opt25 = "";
    var opt30 = "";
    var result = "";
    // Check that numeric values have been entered
    if (!isNumeric(amountToBorrow)) {
        errorCount++;
        errorMessage += amountToBorrowError;
    }
    if (!isNumeric(repaymentTerm) || (repaymentTerm > 35) || (repaymentTerm < 2)) {
        errorCount++;
        errorMessage += repaymentTermError;
    }
    // Check if there is a selected option valid according to the amountToBorrow
    for (i = 0; i < selObj.length; i++) {
        if (selObj.options[i].selected) {
            selObjIndex = i;
            break;
        }
    }

    if (amountToBorrow < 5000) {
        errorCount++;
        errorMessage += minimumLoanError;
    }

    /* Updated minimum loan amount from 10k to 5k - AE - 27/05/2009 
	 if (opt10.match(selObjIndex.toString()))
	 {
		
		if(amountToBorrow < 5000 ){
			errorCount++;
			errorMessage += minimumLoanError;
		}
	 }
	*/
    /*  Updated loan amount - JR - 31/03/2009
	 if (opt25.match(selObjIndex.toString()))
	 {
		if(amountToBorrow < 25000){
			errorCount++;
			errorMessage += interestRateError25;
		}
	 }
	 */
    /* Updated minimum loan amount from 10k to 5k - AE - 27/05/2009 
	 if (opt30.match(selObjIndex.toString()))
	 {
		if(amountToBorrow < 30000){
			errorCount++;
			errorMessage += interestRateError30;
		}
	 }
	*/
    if (!isNumeric(interestRate)) {
        errorCount++;
        errorMessage += interestRateError;
    }
    // Check to see if its repayment or interest only calculation that needs to be done
    calcType();

    // Check to see if there are any errors, if so display an error message otherwise the results
    if (errorCount > 0) {
        $("errorMessage").innerHTML = errorMessage;
        $("errorMessage").className = "errorMessage";
        $("calculatorResult").innerHTML = "";
        $("calcButton").value = "Calculate";
    } else {
        $("errorMessage").innerHTML = "";
        $("errorMessage").className = "";
        result = doCalculation(calcType(), amountToBorrow, repaymentTerm, interestRate, selObjIndex);
        $("calculatorResult").innerHTML = repaymentResultText + currencySymbol + result + callBackButton;
        $("calcButton").value = "Re-Calculate";
    }
}

/*
 doCalculation
 Actually performs the calculation
*/
function doCalculation(calculationType, amountToBorrow, repaymentTerm, interestRate, optionIndex) {
    /* MN additional changes*/
    /* Further changes made 31/03/2009 - JR.  For new loan amounts and interest rates */
    /* Further changes made 30/04/2009 - JR.  For new loan amounts and interest rates */
    /* Updated minimum loan amount from 10k to 5k - AE - 27/05/2009 */
    /* Further changes made 23/03/2010 - PS.  For new loan amounts and interest rates */
    switch (interestRate) {
			
    case "5.44":
		amountToBorrow = parseInt(amountToBorrow) + 499;
		if (repaymentTerm < 3) {
			$("errorMessage").innerHTML = minRepaymentTermError3;
			$("calculatorResult").style.display = "none";
			return;
		}
    break;
		
    case "5.59":
        amountToBorrow = parseInt(amountToBorrow);
        if (amountToBorrow < 5000) {
            $("errorMessage").innerHTML = minimumLoanError;
            $("calculatorResult").style.display = "none";
            return;
        }
        amountToBorrow += 499;
		if (repaymentTerm < 3) {
			$("errorMessage").innerHTML = minRepaymentTermError3;
			$("calculatorResult").style.display = "none";
			return;
		}
    break;
		
    case "5.79":
        amountToBorrow = parseInt(amountToBorrow);
        if (amountToBorrow < 5000) {
            $("errorMessage").innerHTML = minimumLoanError;
            $("calculatorResult").style.display = "none";
            return;
        }
				if (repaymentTerm < 3) {
					$("errorMessage").innerHTML = minRepaymentTermError3;
					$("calculatorResult").style.display = "none";
					return;
				}
				if (optionIndex == 3) 
				{
            amountToBorrow += 499; 
				}
    break;
				
    case "5.69":
        amountToBorrow = parseInt(amountToBorrow);
        if (amountToBorrow < 5000) {
            $("errorMessage").innerHTML = minimumLoanError;
            $("calculatorResult").style.display = "none";
            return;
        }
        amountToBorrow += 299;
		if (repaymentTerm < 3) {
			$("errorMessage").innerHTML = minRepaymentTermError3;
			$("calculatorResult").style.display = "none";
			return;
		}
    break;
		
    case "5.89":
        amountToBorrow = parseInt(amountToBorrow);
        if (amountToBorrow < 5000) {
            $("errorMessage").innerHTML = minimumLoanError;
            $("calculatorResult").style.display = "none";
            return;
        }
        if (optionIndex == 3) {
            if (repaymentTerm < 2) {
                $("errorMessage").innerHTML = minRepaymentTermError2;
                $("calculatorResult").style.display = "none";
                return;
            }
        }
        break;
	
    case "4.69":
        if (amountToBorrow < 5000) {
            $("errorMessage").innerHTML = minimumLoanError;
            $("calculatorResult").style.display = "none";
            return;
        }
        if (repaymentTerm < 3) {
            $("errorMessage").innerHTML = minRepaymentTermError3;
            $("calculatorResult").style.display = "none";
            return;
        }
        amountToBorrow = parseInt(amountToBorrow) + 499;
        break;
		
    case "6.34":
        if (amountToBorrow < 5000) {
            $("errorMessage").innerHTML = minimumLoanError;
            $("calculatorResult").style.display = "none";
            return;
        }
        if (repaymentTerm < 4) {
            $("errorMessage").innerHTML = minRepaymentTermError4;
            $("calculatorResult").style.display = "none";
            return;
        }
	    	amountToBorrow = parseInt(amountToBorrow)+499;
        break;
	
		/*case "5.79":
        amountToBorrow = parseInt(amountToBorrow);

        if (amountToBorrow < 5000) {
            $("errorMessage").innerHTML = minimumLoanError;
            $("calculatorResult").style.display = "none";
            return;
        }
        if (repaymentTerm < 3) {
            $("errorMessage").innerHTML = minRepaymentTermError3;
            $("calculatorResult").style.display = "none";
            return;
        }
    break;*/
		
    case "5.99":
        amountToBorrow = parseInt(amountToBorrow);

        if (amountToBorrow < 5000) {
            $("errorMessage").innerHTML = minimumLoanError;
            $("calculatorResult").style.display = "none";
            return;
        }
        if (repaymentTerm < 3) {
            $("errorMessage").innerHTML = minRepaymentTermError3;
            $("calculatorResult").style.display = "none";
            return;
        }
        break;
 
    }
    $("calculatorResult").style.display = "block";
    /*end additional */
    /*var rate=interestRate; mn change*/
    var repaymentValue = 0;
    interestRate = (interestRate / 12) / 100;
    repaymentTerm *= 12;
    if (calculationType == "repayment") {
        var compoundInterestFactor = 0;
        var tempProduct = Math.pow((1 + interestRate), repaymentTerm);
        compoundInterestFactor = interestRate * (tempProduct / (tempProduct - 1));
        repaymentValue = amountToBorrow * compoundInterestFactor;
    } else {
        repaymentValue = amountToBorrow * interestRate;
    }

    repaymentValue = formatAsMoney(repaymentValue);
    return repaymentValue;
}

/*
 formatAsMoney
 Formats a number to always be in money format
*/
function formatAsMoney(mnt) {
    mnt -= 0;
    mnt = (Math.round(mnt * 100)) / 100;
    return (mnt == Math.floor(mnt)) ? mnt + '.00': ((mnt * 10 == Math.floor(mnt * 10)) ? mnt + '0': mnt);
}

/*
 calcType()
 Checks to see if the calcuation should be repayment or interest only
*/

function calcType() {
    var returnValue = "";
    for (var i = 0; i < document.rateCalc.repaymentMethod.length; i++) {
        if (document.rateCalc.repaymentMethod[i].checked) {
            returnValue = document.rateCalc.repaymentMethod[i].value;
        }
    }
    return returnValue;
}

/*
 isNumeric function
 Checks that values entered are numbers
*/
function isNumeric(valueToCheck) {
    var check = true;
    var noOfDecimalPoints = 0;
    if (valueToCheck.length > 0) {
        for (var i = 0; i < valueToCheck.length; ++i) {
            var new_key = valueToCheck.charAt(i); //cycle through characters
            if ((((new_key < "0") || (new_key > "9")) && !(new_key == "")) && !(new_key == ".")) {
                check = false;
            }
            if (new_key == ".") {
                noOfDecimalPoints += 1;
            }
            if (noOfDecimalPoints > 1) {
                check = false;
            }
        }
    } else {
        check = false;
    }
    return check;
}

function checkAmount(thsField) {
    var selObj;
    if (thsField.value != "" || thsField.value > 0) {
        selObj = thsField.form.interestRate;
        /*  Updated loan amount - JR - 31/03/2009
		if (thsField.value >= 25000)
		{
			selObj.options["option2"].disabled = false;
			selObj.options["option2"].style.color = "black";
			selObj.options["option3"].disabled = false;
			selObj.options["option3"].style.color = "black";
			selObj.options["option5"].disabled = false;
			selObj.options["option5"].style.color = "black";
		}
		if (thsField.value >= 30000)
		{
			selObj.options["option2"].disabled = false;
			selObj.options["option2"].style.color = "black";
			selObj.options["option3"].disabled = false;
			selObj.options["option3"].style.color = "black";
			selObj.options["option4"].disabled = false;
			selObj.options["option4"].style.color = "black";
			selObj.options["option5"].disabled = false;
			selObj.options["option5"].style.color = "black";
		}
		else 
		*/
        if (thsField.value >= 10000) {
            selObj.options["option3"].disabled = false;
            selObj.options["option3"].style.color = "black";
            selObj.options["option4"].disabled = false;
            selObj.options["option4"].style.color = "black";
            selObj.options["option5"].disabled = false;
            selObj.options["option5"].style.color = "black";
            selObj.options["option2"].disabled = false;
            selObj.options["option2"].style.color = "black";
        } else {
            selObj.options["option2"].disabled = true;
            selObj.options["option2"].style.color = "grey";
            selObj.options["option3"].disabled = true;
            selObj.options["option3"].style.color = "grey";
            selObj.options["option4"].disabled = true;
            selObj.options["option4"].style.color = "grey";
            selObj.options["option5"].disabled = true;
            selObj.options["option5"].style.color = "grey";
        }
    }
}

function makeInteger(thsField) {
    var val = parseInt(thsField.value);
    if (isNaN(val) || val < 0) {
        return 0;
    }
    return val;
}

/*
 arrangeCallBack()
 This function is used to open a link to the Abbey Call Back Page
*/

function arrangeCallBack() {
    window.open(callBackURL);
}

/*
Customised Dollar function
This function is used to find page elements within the page using their page ID
*/

function $() {
    var elements = new Array();
    for (var i = 0, len = arguments.length; i < len; i++) {
        var element = arguments[i];
        if (typeof element == 'string') {
            var matched = document.getElementById(element);
            if (matched) {
                elements.push(matched);
            } else {
                var allels = (document.all) ? document.all: document.getElementsByTagName('*');
                var regexp = new RegExp('(^| )' + element + '( |$)');
                for (var i = 0, len = allels.length; i < len; i++) if (regexp.test(allels[i].className)) elements.push(allels[i]);
            }
            if (!elements.length) elements = document.getElementsByTagName(element);
            if (!elements.length) {
                elements = new Array();
                var allels = (document.all) ? document.all: document.getElementsByTagName('*');
                for (var i = 0, len = allels.length; i < len; i++) if (allels[i].getAttribute(element)) elements.push(allels[i]);
            }
            if (!elements.length) {
                var allels = (document.all) ? document.all: document.getElementsByTagName('*');
                for (var i = 0, len = allels.length; i < len; i++) if (allels[i].attributes) for (var j = 0, lenn = allels[i].attributes.length; j < lenn; j++) if (allels[i].attributes[j].specified) if (allels[i].attributes[j].nodeValue == element) elements.push(allels[i]);
            }
        } else {
            elements.push(element);
        }
    }
    if (elements.length == 1) {
        return elements[0];
    } else {
        return elements;
    }
}