﻿/**
 * Performs the calculations as specified in the supplied Excel file on the
 * values given in the input boxes. The appropriate read-only boxes are updated
 * with the calculated values.
 *
 * If validation fails (non-numeric or outside-range) then the read-only boxes
 * are blanked out.
 */
function quickCalculation() {
	var weekly = document.getElementById("WeeklyPaid").value;
	var fortnightly = document.getElementById("FortnightlyPaid").value;
	var monthly = document.getElementById("MonthlyPaid").value;
	
	// Get appropriate raw data
	if(document.getElementById("BacsYes").checked) {
		var rawData = withBACS;
		var step = 4;
		var adjustor = 1;
	} else {
		var rawData = withoutBACS;
		var step = 3;
		var adjustor = 0;
	}
	
	var maxNo = (rawData.length / adjustor) - 1;
	
	// Display error if non-numeric entered
	if (isNaN(weekly) | isNaN(fortnightly) | isNaN(monthly)) {
		blankAllFields();
		return;
	}
	
	// Display error if number outside range entered
	if (weekly < 0 | weekly > maxNo | fortnightly < 0 | fortnightly > maxNo | monthly < 0 | monthly > maxNo) {
		blankAllFields();
		return;
	}
	
	// Make calculations
	var weeklyPaidTotal = rawData[(weekly * step) + adjustor];
	var fortnightlyPaidTotal = rawData[(fortnightly * step) + adjustor + 1];
	var monthlyPaidTotal = rawData[(monthly * step) + adjustor + 2];
	
	var annualCost = (weeklyPaidTotal * 52) 
				   + (fortnightlyPaidTotal * 26)
				   + (monthlyPaidTotal *12)
						  
	var discount = annualCost * 0.05;
	var annualQuarterlyCost = annualCost - discount;
	
	// Output final values
	document.getElementById("AnnualCost").value = convertToCurrency(annualCost);
	document.getElementById("Discount").value = convertToCurrency(discount);
	document.getElementById("AnnualQuarterlyCost").value = convertToCurrency(annualQuarterlyCost);
}

/**
 * Converts the given value into GBP currency, to two decimal places.
 */
function convertToCurrency(value)
{
	return "£" + value.toFixed(2);
}

/**
 * All read-only fields are blanked, to prevent inaccurate values being displayed
 * when an error occurs.
 */
function blankAllFields() {
	document.getElementById("AnnualCost").value = "";
	document.getElementById("Discount").value = "";
	document.getElementById("AnnualQuarterlyCost").value = "";
}
