function validateForm() {
	var sValidationMessage = '';
	var sJibsPerWeek = document.getElementById('txtJibsPerWeek').value; 
	var sYearsUsingJibs = document.getElementById('txtYearsUsingJibs').value; 
	var sPricePerJib = document.getElementById('txtPricePerJib').value;
	
		document.getElementById('tdValidationJibsPerWeek').style.display = 'none';
		document.getElementById('tdValidationYearsUsingJibs').style.display = 'none';
		document.getElementById('tdValidationPricePerJib').style.display = 'none';
		document.getElementById('divValidationMessage').style.display = 'none';

	
	if (sJibsPerWeek.length == 0 || isNaN(sJibsPerWeek)) {
		sValidationMessage += '-JIBs per Week must be a whole number<br>';
		document.getElementById('tdValidationJibsPerWeek').style.display = 'block';
	}
	if (sYearsUsingJibs.length == 0 || isNaN(sYearsUsingJibs)) {
		sValidationMessage += '-Years Using JIBs must be a whole number<br>';
		document.getElementById('tdValidationYearsUsingJibs').style.display = 'block';
	}
	if (sPricePerJib.length == 0 || isNaN(sPricePerJib)) {
		sValidationMessage += '-Years Using JIBs must be a whole number<br>';
		document.getElementById('tdValidationPricePerJib').style.display = 'block';
	}

	if (sValidationMessage.length == 0) {
		return true;
	} else {
		document.getElementById('divValidationMessage').style.display = 'block';
		document.getElementById('divValidationMessage').innerHTML = sValidationMessage;
		return false;
	}

}

function calculate() {
	var 
		nJibsPerWeek,
		nYearsUsingJibs,
		nPricePerJib,
		nJibsFromLandfills,
		nAmountOilPurchased,
		nOilLostInJibs,
		nActualAmountUsed,
		nMoneyLostToWaste,
		nPackagingWaste,
		nCardboardWaste,
		nPlasticsWaste,
		nOilCardboardPastics,
		nLandfillCostsLow,
		nLandfillCostsHigh
	;

	// constants
	var
		nWeeksPerYear = 52,
		nOilPoundsPerJib = 35,
		nPoundsOilLostPerJib = 1.4,
		nPackagingPoundsPerJib = 1.46,
		nCardboardPackagingPercent = 0.75,
		nPlasticPackagingPercent = 0.25,
		nPoundsPerTon = 2000,
		nLandfillCostPerTonLow = 15,
		nLandfillCostPerTonHigh = 150
	;

	document.getElementById('divResults').style.display = 'none';
	
	if (validateForm()) {

		// base values
		nJibsPerWeek = document.getElementById('txtJibsPerWeek').value;
		nYearsUsingJibs = document.getElementById('txtYearsUsingJibs').value;
		nPricePerJib = document.getElementById('txtPricePerJib').value;

		// calculated values
		nJibsFromLandfills = nJibsPerWeek * nWeeksPerYear * nYearsUsingJibs;
		nAmountOilPurchased = nOilPoundsPerJib * nJibsPerWeek * nWeeksPerYear * nYearsUsingJibs;
		nOilLostInJibs = nJibsFromLandfills * nPoundsOilLostPerJib;
		nActualAmountUsed = nAmountOilPurchased - nOilLostInJibs;
		nMoneyLostToWaste = nOilLostInJibs / nOilPoundsPerJib * nPricePerJib;
		nPackagingWaste = nJibsFromLandfills * nPackagingPoundsPerJib;
		nCardboardWaste = nPackagingWaste * nCardboardPackagingPercent;
		nPlasticWaste = nPackagingWaste * nPlasticPackagingPercent;
		nOilCardboardPlastics = nOilLostInJibs + nCardboardWaste + nPlasticWaste;
		nLandfillCostsLow = nLandfillCostPerTonLow * nOilCardboardPlastics / nPoundsPerTon;
		nLandfillCostsHigh = nLandfillCostPerTonHigh * nOilCardboardPlastics / nPoundsPerTon;

		document.getElementById('spnJibsFromLandfillsValue').innerHTML = addCommas(round_decimals(nJibsFromLandfills, 0));
		document.getElementById('spnPlasticWasteValue').innerHTML = addCommas(round_decimals(nPlasticWaste, 0));
		document.getElementById('spnCardboardWasteValue').innerHTML = addCommas(round_decimals(nCardboardWaste, 0));
		document.getElementById('spnOilLostInJibsValue').innerHTML = addCommas(round_decimals(nOilLostInJibs, 0));
		document.getElementById('spnMoneyLostToWasteValue').innerHTML = '$' + addCommas(round_decimals(nMoneyLostToWaste, 0));
		document.getElementById('spnLandfillCostsLowValue').innerHTML = '$' + addCommas(round_decimals(nLandfillCostsLow, 0));
		document.getElementById('spnLandfillCostsHighValue').innerHTML = '$' + addCommas(round_decimals(nLandfillCostsHigh, 0));
		document.getElementById('spnTitleYearsUsingJibs').innerHTML = nYearsUsingJibs + ' year' + (nYearsUsingJibs == 1 ? ' ' : 's ');

/*
		document.getElementById('spnJibsPerWeekValue').innerHTML = nJibsPerWeek;
		document.getElementById('spnYearsUsingJibsValue').innerHTML = nYearsUsingJibs;
		document.getElementById('spnPricePerJibValue').innerHTML = '$' + round_decimals(nPricePerJib, 2);
		document.getElementById('spnAmountOilPurchasedValue').innerHTML = round_decimals(nAmountOilPurchased, 2);
		document.getElementById('spnActualAmountUsedValue').innerHTML = round_decimals(nActualAmountUsed, 2);
		document.getElementById('spnPackagingWasteValue').innerHTML = round_decimals(nPackagingWaste, 2);
		document.getElementById('spnOilCardboardPlasticsValue').innerHTML = round_decimals(nOilCardboardPlastics, 2);
*/
		document.getElementById('divResults').style.display = 'block';
	}
}
function onLoad() {
	document.getElementById('txtJibsPerWeek').focus();
}


function round_decimals(original_number, decimals) {
    var result1 = original_number * Math.pow(10, decimals)
    var result2 = Math.round(result1)
    var result3 = result2 / Math.pow(10, decimals)
    return pad_with_zeros(result3, decimals)
}

function pad_with_zeros(rounded_value, decimal_places) {

    // Convert the number to a string
    var value_string = rounded_value.toString()
    
    // Locate the decimal point
    var decimal_location = value_string.indexOf(".")

    // Is there a decimal point?
    if (decimal_location == -1) {
        
        // If no, then all decimal places will be padded with 0s
        decimal_part_length = 0
        
        // If decimal_places is greater than zero, tack on a decimal point
        value_string += decimal_places > 0 ? "." : ""
    }
    else {

        // If yes, then only the extra decimal places will be padded with 0s
        decimal_part_length = value_string.length - decimal_location - 1
    }
    
    // Calculate the number of decimal places that need to be padded with 0s
    var pad_total = decimal_places - decimal_part_length
    
    if (pad_total > 0) {
        
        // Pad the string with 0s
        for (var counter = 1; counter <= pad_total; counter++) 
            value_string += "0"
        }
    return value_string
}

function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}