if(document.querySelector('.carbon-calculator')){
const translations={
en: {
lifeExtension: "Life extension (years)",
servers: "Servers",
storage: "Storage",
network: "Network"
},
fr: {
lifeExtension: "Prolongation de la durée de vie (années)",
servers: "Serveurs",
storage: "Stockage",
network: "Réseau"
},
es: {
lifeExtension: "Extensión de vida útil (años)",
servers: "Servidores",
storage: "Almacenamiento",
network: "Red"
},
de: {
lifeExtension: "Lebensdauerverlängerung (Jahre)",
servers: "Server",
storage: "Speicher",
network: "Netzwerk"
}};
function detectLanguage(){
const htmlLang=document.documentElement.lang?.toLowerCase();
const urlLang=window.location.pathname.split('/').find(seg=> translations[seg]);
return translations[htmlLang] ? htmlLang:(urlLang||'en');
}
const currentLang=detectLanguage();
const t=translations[currentLang];
function calculateCarbon(){
const extension=parseFloat(document.getElementById('extension')?.value)||0;
const servers=parseFloat(document.getElementById('server')?.value)||0;
const storage=parseFloat(document.getElementById('storage')?.value)||0;
const network=parseFloat(document.getElementById('network')?.value)||0;
const serverFactor=carbonCalculatorData.serverEmission;
const storageFactor=carbonCalculatorData.storageEmissionPerTb;
const averageStorageSize=carbonCalculatorData.averageStorageSizeTb;
const networkFactor=carbonCalculatorData.networkEmission;
const co2Servers=servers * serverFactor * extension;
const co2Storage=storage * averageStorageSize * storageFactor * extension;
const co2Network=network * networkFactor * extension;
const totalCO2=Math.ceil(co2Servers + co2Storage + co2Network);
const coal=(totalCO2 * 1.1).toFixed(2);
const electricity=(totalCO2 * 0.2).toFixed(2);
const smartphones=totalCO2 * (carbonCalculatorData.smartphonesPerKg||0);
const carTours=totalCO2 * (carbonCalculatorData.carToursPerKg||0);
if(document.getElementById('co2')){
document.getElementById('co2').innerText=totalCO2;
}
if(document.getElementById('smartphones')){
document.getElementById('smartphones').innerText=smartphones.toFixed(2);
}
if(document.getElementById('carTours')){
document.getElementById('carTours').innerText=carTours.toFixed(2);
}
const params=new URLSearchParams(window.location.search);
params.set('0-1/result___co2_simulator', totalCO2);
const summary=`${t.lifeExtension}: ${extension}, ${t.servers}: ${servers}, ${t.storage}: ${storage}, ${t.network}: ${network}`;
params.set('0-1/data_collection___co2_simulator', summary);
params.set('0-1/data_collection___co2_simulator', summary);
const newUrl=`${window.location.pathname}?${params.toString()}`;
window.history.replaceState({}, '', newUrl);
console.log("Updated URL");
}
document.addEventListener('DOMContentLoaded', ()=> {
['extension', 'server', 'storage', 'network'].forEach(id=> {
const el=document.getElementById(id);
if(el) el.addEventListener('input', calculateCarbon);
});
calculateCarbon();
});
document.addEventListener('DOMContentLoaded', function (){
function initSlider(sliderId, labelId){
const slider=document.getElementById(sliderId);
const label=document.getElementById(labelId);
if(!slider||!label) return;
function updateSliderBackground(){
const min=parseFloat(slider.min);
const max=parseFloat(slider.max);
const val=parseFloat(slider.value);
const percent=((val - min) / (max - min)) * 100;
const filledColor='#0D2A36';
const emptyColor='#fff';
slider.style.background=`linear-gradient(to right, ${filledColor} 0%, ${filledColor} ${percent}%, ${emptyColor} ${percent}%, ${emptyColor} 100%)`;
}
function updateLabelPosition(){
const sliderWidth=slider.offsetWidth;
const labelWidth=label.offsetWidth;
const min=parseFloat(slider.min);
const max=parseFloat(slider.max);
const val=parseFloat(slider.value);
const percent=(val - min) / (max - min);
const marginFix=(1 - percent) * 10;
const left=percent * sliderWidth - labelWidth + marginFix + (marginFix / 2);
label.innerText=val;
label.style.left=`${left}px`;
}
function updateAll(){
updateLabelPosition();
updateSliderBackground();
}
slider.addEventListener('input', updateAll);
window.addEventListener('resize', updateAll);
updateAll();
}
initSlider('extension', 'extensionValue');
initSlider('warranty', 'warrantyValue');
});
};