101 lines
4.4 KiB
JavaScript
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();
|