// This script is intended to work in conjunction with labcalculator.js which creates the LabCalc global object

LabCalc.calculate = function () {
	// Get input 
	var availableConcentration = parseFloat(document.calculator.input1.value);
	var unitsAvailable = document.calculator.units1.value;
	var desiredConcentration = parseFloat(document.calculator.input2.value);
	var unitsDesired = document.calculator.units2.value;
	var desiredVolume = parseFloat(document.calculator.input3.value);
	
	// apply unit selections to modify values
	availableConcentration = LabCalc.applyUnits(availableConcentration, unitsAvailable);
	desiredConcentration = LabCalc.applyUnits(desiredConcentration, unitsDesired);
	
	// Calculate result
	var dilutionFactor = availableConcentration/desiredConcentration;
	
	// if invalid result, output an error message and abort further calculations
	if (isNaN(dilutionFactor)) {
		document.calculator.output1.value="Error";
		return;
	}
	// display the dilution factor result in field 'output1'
	document.calculator.output1.value=dilutionFactor.toPrecision(3);
	
	// if a 'Desired Volume' value was supplied, then calculate the required input volume and put its value into field 'output2'
	if (isNaN(desiredVolume)) {
		document.calculator.output2.value="";
	} else {
		var v = desiredConcentration/availableConcentration*desiredVolume;
		document.calculator.output2.value = v.toPrecision(3);
	}
	
	// Update ticker
	
	// if need to concentrate the solution
	if (dilutionFactor<1) {
		// and desired volume not supplied
		if (isNaN(desiredVolume)) {
			LabCalc.updateTicker("Concentrate original solution (" + availableConcentration + ") to " + dilutionFactor.toPrecision(3) + " times its original volume to make " + desiredConcentration + " units of concentration.");
		} else {
			LabCalc.updateTicker("Concentrate " + v + " volumes down to " + desiredVolume + " volumes.");
		}
	} else {
	// in this case we need to dilute the solution
		if (isNaN(desiredVolume)) {
			LabCalc.updateTicker("Dilute original solution (" + availableConcentration + ") to " + dilutionFactor.toPrecision(3) + " times its original volume to make " + desiredConcentration);
		} else {
			LabCalc.updateTicker("Use " + v + " volumes, and dilute to total volume " + desiredVolume + ". ");
		}
	}
}
