${item.inputs.annualMileage} mi • ${item.inputs.currentVehicle} MPG
EV: ${item.inputs.evEfficiency} kWh/100mi
`;
historyList.appendChild(historyItem);
});
}
// Export history as CSV
function exportHistoryToCSV() {
const history = JSON.parse(localStorage.getItem('evCarbonHistory')) || [];
if (history.length === 0) {
alert('No history to export');
return;
}
let csvContent = "Date,Annual Mileage,Current MPG,EV Efficiency,Electricity Source,Gasoline Type,Gas Emissions,EV Emissions,Carbon Savings,Tree Equivalent\n";
history.forEach(item => {
const date = new Date(item.timestamp);
const formattedDate = `${date.toLocaleDateString()} ${date.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'})}`;
csvContent += `"${formattedDate}",${item.inputs.annualMileage},${item.inputs.currentVehicle},${item.inputs.evEfficiency},${item.inputs.electricitySource},${item.inputs.gasolineType},${item.result.gasEmissions.toFixed(2)},${item.result.evEmissions.toFixed(2)},${item.result.savings.toFixed(2)},${item.result.treeEquivalent}\n`;
});
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.setAttribute('href', url);
link.setAttribute('download', 'ev_carbon_savings_history.csv');
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
// Form submission handler
evCarbonCalculatorForm.addEventListener('submit', function(e) {
e.preventDefault();
// Get form values
const formData = {
annualMileage: parseFloat(document.getElementById('annualMileage').value),
currentVehicle: parseFloat(document.getElementById('currentVehicle').value),
evEfficiency: parseFloat(document.getElementById('evEfficiency').value),
electricitySource: document.getElementById('electricitySource').value,
gasolineType: document.getElementById('gasolineType').value
};
// Calculate emissions and savings
const gasEmissionsValue = calculateGasEmissions(
formData.annualMileage,
formData.currentVehicle,
formData.gasolineType
);
const evEmissionsValue = calculateEvEmissions(
formData.annualMileage,
formData.evEfficiency,
formData.electricitySource
);
const savingsValue = calculateCarbonSavings(gasEmissionsValue, evEmissionsValue);
const treeEquivalentValue = calculateTreeEquivalent(savingsValue);
const industrialImpactValue = calculateIndustrialImpact(savingsValue);
const economicValue = calculateEconomicValue(savingsValue);
// Update UI with results
annualSavings.textContent = `${savingsValue.toFixed(0)} kg`;
treesEquivalent.textContent = treeEquivalentValue;
gasEmissions.textContent = `${gasEmissionsValue.toFixed(0)} kg`;
evEmissions.textContent = `${evEmissionsValue.toFixed(0)} kg`;
treesResult.textContent = treeEquivalentValue;
industrialResult.textContent = industrialImpactValue;
economicResult.textContent = economicValue;
// Generate and display suggestions
suggestions.innerHTML = generateSuggestions(savingsValue, treeEquivalentValue);
// Update all charts
updateCharts(gasEmissionsValue, evEmissionsValue, savingsValue, treeEquivalentValue);
// Show results section
resultsSection.classList.remove('hidden');
// Scroll to results
resultsSection.scrollIntoView({ behavior: 'smooth' });
// Save to history
saveToHistory(formData, {
gasEmissions: gasEmissionsValue,
evEmissions: evEmissionsValue,
savings: savingsValue,
treeEquivalent: treeEquivalentValue,
industrialImpact: industrialImpactValue,
economicValue: economicValue
});
});
// Export history button event listener
exportHistoryBtn.addEventListener('click', exportHistoryToCSV);
// Initialize history display
updateHistoryDisplay();