Files
isdieselcheaper/fuel-calc.js
Vasily Davydov ec8c8f2a81 working state
2026-09-21 14:58:02 +03:00

101 lines
4.4 KiB
JavaScript

let currentLang = 'ru';
function updateLanguage() {
const language = langData[currentLang];
document.getElementById("header").textContent = language.header;
document.getElementById("description").textContent = language.description;
document.getElementById("dTaxLabel").textContent = language.dTaxLabel;
document.getElementById("dPriceLabel").textContent = language.dPriceLabel;
document.getElementById("dConsLabel").textContent = language.dConsLabel;
document.getElementById("pTaxLabel").textContent = language.pTaxLabel;
document.getElementById("pPriceLabel").textContent = language.pPriceLabel;
document.getElementById("pConsLabel").textContent = language.pConsLabel;
document.getElementById("annualKmLabel").textContent = language.annualKmLabel;
document.getElementById("resultText1").textContent = language.resultText1;
document.getElementById("resultText2").textContent = language.resultText2;
document.getElementById("resultText3").textContent = language.resultText3;
document.getElementById("resultText4").textContent = language.resultText4;
document.getElementById("tableDistance").textContent = language.tableDistance;
document.getElementById("tableDieselTotal").textContent = language.tableDieselTotal;
document.getElementById("tablePetrolTotal").textContent = language.tablePetrolTotal;
document.getElementById("tableDifference").textContent = language.tableDifference;
calculate();
}
document.querySelector('#language-toggle').addEventListener('click', () => {
currentLang = (currentLang === 'en') ? 'ru' : 'en';
updateLanguage();
});
document.querySelector('#dark-mode-toggle').addEventListener('click', () => {
document.body.classList.toggle('dark-mode');
});
function calculate() {
const dTax = parseFloat(document.getElementById("dTax").value);
const dPrice = parseFloat(document.getElementById("dPrice").value);
const dCons = parseFloat(document.getElementById("dCons").value);
const pTax = parseFloat(document.getElementById("pTax").value);
const pPrice = parseFloat(document.getElementById("pPrice").value);
const pCons = parseFloat(document.getElementById("pCons").value);
const annualKm = parseFloat(document.getElementById("annualKm").value);
// 1. Calculate Break-Even Petrol Consumption
// Formula: P_Cons = (100 * (dTax - pTax) / (annualKm * pPrice)) + (dCons * dPrice / pPrice)
const taxDiff = dTax - pTax;
const breakEven = (100 * taxDiff / (annualKm * pPrice)) + (dCons * dPrice / pPrice);
// 2. Generate Table
// 2. Calculate Minimum Diesel Price where user's pCons equals break-even consumption
// We want to solve for dPrice such that: pCons = (100 * taxDiff / (annualKm * pPrice)) + (dCons * dPrice / pPrice)
// Rearranging for dPrice:
// pCons - (100 * taxDiff / (annualKm * pPrice)) = (dCons * dPrice / pPrice)
// dPrice = (pCons - (100 * taxDiff / (annualKm * pPrice))) * pPrice / dCons
let minDieselPrice = 0;
if (dCons > 0 && annualKm > 0 && pPrice > 0) {
const firstTerm = 100 * taxDiff / (annualKm * pPrice);
const secondTerm = pCons - firstTerm;
minDieselPrice = secondTerm * pPrice / dCons;
}
document.getElementById("displayKm").textContent = annualKm.toLocaleString();
document.getElementById("breakEvenCons").textContent = breakEven.toFixed(2);
document.getElementById("minDieselPrice").textContent = minDieselPrice.toFixed(2);
const tbody = document.getElementById("comparisonTable").getElementsByTagName('tbody')[0];
tbody.innerHTML = '';
for (let i = 5000; i <= 50000; i += 5000) {
const row = tbody.insertRow();
const cell1 = row.insertCell(0);
const cell2 = row.insertCell(1);
const cell3 = row.insertCell(2);
const cell4 = row.insertCell(3);
const dCost = (dTax + ((dPrice * dCons) / 100 * i)).toFixed(2);
const pCost = (pTax + ((pPrice * pCons) / 100 * i)).toFixed(2);
const diffCost = (parseFloat(pCost) - parseFloat(dCost)).toFixed(2);
cell1.innerHTML = "<strong>" + i.toLocaleString() + "</strong>";
cell2.innerHTML = dCost + " €";
cell3.innerHTML = pCost + " €";
cell4.innerHTML = diffCost + " €";
if (diffCost > 0) {
cell4.className = "saving";
} else {
cell4.className = "loss";
}
}
}
calculate();
updateLanguage();