//
// Copyright 2008, squawkfox.com
// All rights reserved
//




/*
 * Initialize
 */
$(function() {
    initGasCalc();
});


/*
 * Bind all callbacks to controls.
 */
function initGasCalc() {
    $("#Calculate").click(calculate);
    $("#oldEfficiencyUnits").change(efficiencyChanged);

    if (validate(false)) {
        calculate();
    }
}


/*
 * Perform calculation and update UI.
 */
function calculate() {

    if (!validate()) {
        clearOutput();
        return;
    }

    var yearlyDistance = new Distance($("#distance").val() * 12, $("#distanceUnits").val());
    var unitFuelCost = new CostPerVolume($("#priceOfFuel").val(), $("#fuelPriceUnits").val());

    var oldVehicleEfficiency = new Efficiency($("#oldEfficiency").val(), $("#oldEfficiencyUnits").val());
    $("#oldFuelPerYear").text(oldVehicleEfficiency.totalFuelUsed(yearlyDistance).getString($("#fuelPriceUnits").val()));
    $("#oldCostPerYear").text(format.formatCurrency(unitFuelCost.getTotalCost(oldVehicleEfficiency.totalFuelUsed(yearlyDistance))));
    
    var newVehicleEfficiency = new Efficiency($("#newEfficiency").val(), $("#newEfficiencyUnits").val());

    $("#newFuelPerYear").text( newVehicleEfficiency.totalFuelUsed(yearlyDistance).getString($("#fuelPriceUnits").val()));


    $("#newCostPerYear").text(
        format.formatCurrency(unitFuelCost.getTotalCost(newVehicleEfficiency.totalFuelUsed(yearlyDistance))));

    var vehicleCostDifference = $("#newVehiclePrice").val() - $("#oldVehiclePrice").val();
    $("#netCostForNew").text(format.formatCurrency(vehicleCostDifference));

    var yearlyCostDifference = 
        (oldVehicleEfficiency.totalFuelUsed(yearlyDistance).getLitres() 
         - newVehicleEfficiency.totalFuelUsed(yearlyDistance).getLitres()) * unitFuelCost.getCostPerLitre();

    var years =vehicleCostDifference / yearlyCostDifference;

    if (yearlyCostDifference == 0 || years <= 0) {
        $("#yearsToBreakEven").text("0");
    }
    else {
        $("#yearsToBreakEven").text(format.round(years, 3));
    }
}


/*
 * Validate all input fields.
 */
function validate(setClasses) {
    var valid = true;
    $(".requiredField").removeClass("invalid").each(
        function() {
            if ($(this).val() == "") {
                if (setClasses == undefined || setClasses) {
                    $(this).addClass("invalid");
                }
                valid = false;
            }
        });

    return valid;
}


/*
 * Clear output fields
 */
function clearOutput() {
    $("#oldFuelPerYear").text("");
    $("#newFuelPerYear").text("");
    $("#oldCostPerYear").text("");
    $("#newCostPerYear").text("");
    $("#netCostForNew").text("");
    $("#yearsToBreakEven").text("");
}


/*
 * Callback for changes to the efficiency input
 */
function efficiencyChanged() {
    if ($("#newEfficiency").val() == "") {
        $("#newEfficiencyUnits").val($(this).val());
    }
}

 
