﻿function getElement(id)
{
    if(document.getElementById)
    {
        getElement = function(id){ return document.getElementById(id); };
    }
    else if(document.all)
    {
        getElement = function(id){ return document.all[id]; };
    }
    else if(document.layers)
    {
        getElement = function(id){ return document.layers[id]; };
    }
    else
    {
        getElement = function() { return null; }
    }
    return getElement(id);
}

function setGraph(elementName,graphValue,carbonEmission)
{
    if(isNaN(graphValue))
    {
        graphValue = 0;
        carbonEmission = 0;
    }

    var graphName = "graph" + elementName;
    var numName = "num" + elementName;

    if (graphValue < 1){stringGraphValue = "1%";}
    else{stringGraphValue = graphValue + "%";}
    
    
    
    getElement(graphName).style.width = stringGraphValue;
    
    if(elementName == "Total"){getElement(numName).innerHTML = "<b>" + carbonEmission + "</b>";}
    else{getElement(numName).innerHTML = carbonEmission;}
}
var totalEmissions = 0;
function calculateTotal()
{
    var energyEmission = Number(getElement("numEnergy").innerHTML); 
    var attendeeEmission = Number(getElement("numAttendee").innerHTML); 
    var organizerEmission = Number(getElement("numOrganizer").innerHTML);   
    var supplierEmission = Number(getElement("numSupplier").innerHTML);   
    var wasteEmission = Number(getElement("numWaste").innerHTML);   

    totalEmissions = energyEmission + attendeeEmission;
    totalEmissions += organizerEmission + supplierEmission + wasteEmission;
    
    getElement("totalNumeric").value = totalEmissions.toFixed(4);

    getElement("numericResult").innerHTML = "<b>" + totalEmissions.toFixed(4) + "</b>";

    setGraph("Energy",Math.round((energyEmission / totalEmissions) * 100),energyEmission.toFixed(4));
     
    setGraph("Attendee",Math.round((attendeeEmission / totalEmissions) * 100),attendeeEmission.toFixed(4));
    
    setGraph("Organizer",Math.round((organizerEmission / totalEmissions) * 100),organizerEmission.toFixed(4));
    
    setGraph("Supplier",Math.round((supplierEmission / totalEmissions) * 100),supplierEmission.toFixed(4));
    
    setGraph("Waste",Math.round((wasteEmission / totalEmissions) * 100),wasteEmission.toFixed(4));    
    
    setGraph("Total", 100, totalEmissions.toFixed(4));
}



function activatePanel(panelName)
{
    getElement("numEnergy").innerHTML = calculateEnergyEmissions();
    getElement("numAttendee").innerHTML = calculateTravelEmissions("1");
    getElement("numOrganizer").innerHTML = calculateTravelEmissions("2");
    getElement("numSupplier").innerHTML = calculateTravelEmissions("3");
    getElement("numWaste").innerHTML = getWasteEmission();
    calculateTotal();
    
    getElement("generalContent").style.display = "none";
    getElement("generalContent").style.visibility = "hidden";
    getElement("attendeeContent").style.display = "none";   
    getElement("attendeeContent").style.visibility = "hidden";  
    getElement("organizerContent").style.display = "none";
    getElement("organizerContent").style.visibility = "hidden";  
    getElement("supplierContent").style.display = "none";       
    getElement("supplierContent").style.visibility = "hidden";     
    getElement("wasteContent").style.display = "none";
    getElement("wasteContent").style.visibility = "hidden";    
    getElement("summaryContent").style.display = "none";  
    getElement("summaryContent").style.visibility = "hidden"; 
    
    getElement(panelName).style.display = "inline";   
    getElement(panelName).style.visibility = "visible";   
    window.location.href = "#eventCalcTop";   
    
    getElement("navGeneral").style.backgroundImage = "url('/images/carbon_calculator/nav_01.gif')";  
    getElement("navAttendee").style.backgroundImage = "url('/images/carbon_calculator/nav_02.gif')";  
    getElement("navOrganizer").style.backgroundImage = "url('/images/carbon_calculator/nav_03.gif')";  
    getElement("navSupplier").style.backgroundImage = "url('/images/carbon_calculator/nav_04.gif')";  
    getElement("navWaste").style.backgroundImage = "url('/images/carbon_calculator/nav_05.gif')";  
    getElement("navSummary").style.backgroundImage = "url('/images/carbon_calculator/nav_06.gif')";  
    
    switch (panelName)
    {
        case "generalContent":
            getElement("navGeneral").style.backgroundImage = "url('/images/carbon_calculator/nav_active_01.gif')"; 
            break;
        case "attendeeContent":
            getElement("navAttendee").style.backgroundImage = "url('/images/carbon_calculator/nav_active_02.gif')"; 
            break;
        case "organizerContent":
            getElement("navOrganizer").style.backgroundImage = "url('/images/carbon_calculator/nav_active_03.gif')"; 
            break;
        case "supplierContent":
            getElement("navSupplier").style.backgroundImage = "url('/images/carbon_calculator/nav_active_04.gif')"; 
            break;
        case "wasteContent":
            getElement("navWaste").style.backgroundImage = "url('/images/carbon_calculator/nav_active_05.gif')"; 
            break;
        case "summaryContent":
            getElement("navSummary").style.backgroundImage = "url('/images/carbon_calculator/nav_active_06.gif')"; 
            break;
    }
                    
}


function calculatePanelGeneral()
{
    activatePanel("attendeeContent");
}

function calculatePanelAttendeeNext()
{
    activatePanel("organizerContent");      
}

function panelAttendeePrevious()
{
    activatePanel("generalContent");
}

function calculatePanelOrganizerNext()
{   
    activatePanel("supplierContent");   
}

function panelOrganizerPrevious()
{   
    activatePanel("attendeeContent");
}

function calculatePanelSupplierNext()
{
    activatePanel("wasteContent");     
}

function panelSupplierPrevious()
{
    activatePanel("organizerContent");        
}

function calculatePanelWasteNext()
{
    activatePanel("summaryContent");        
}

function panelWastePrevious()
{
    activatePanel("supplierContent");      
}

function panelSummaryPrevious()
{
    activatePanel("wasteContent");       
}

function calculateTravelEmissions(panelNumber)
{
    var emission = 0;
    var attendeeAccomadation;
    switch (panelNumber)
    {
        case "1":
            attendeeAccomadation = true;
            break;
        case "2":
            attendeeAccomadation = false;
            break;
        case "3":
            attendeeAccomadation = false;
            break;                                
    }
    
    var eventAutoTwenty = getElement("eventAutoTwenty" + panelNumber);
    var eventPublicTwenty = getElement("eventPublicTwenty" + panelNumber);
    emission += getGroundEmission(eventAutoTwenty.value, 1, false);
    emission += getGroundEmission(eventPublicTwenty.value, 1, true);

    var eventAutoHundred = getElement("eventAutoHundred" + panelNumber);
    var eventPublicHundred = getElement("eventPublicHundred" + panelNumber);
    emission += getGroundEmission(eventAutoHundred.value, 2, false);
    emission += getGroundEmission(eventPublicHundred.value, 2, true);
    
    var eventAutoOver = getElement("eventAutoOver" + panelNumber);
    var eventPublicOver = getElement("eventPublicOver" + panelNumber);
    emission += getGroundEmission(eventAutoOver.value, 3, false);
    emission += getGroundEmission(eventPublicOver.value, 3, true);    

    var eventFlightUSA = getElement("eventFlightUSA" + panelNumber);
    emission += getFlightEmission(eventFlightUSA.value, "USA");

    var eventFlightCanada = getElement("eventFlightCanada" + panelNumber);
    emission += getFlightEmission(eventFlightCanada.value, "Canada");

    var eventFlightSouthAmerica = getElement("eventFlightSouthAmerica" + panelNumber);
    emission += getFlightEmission(eventFlightSouthAmerica.value, "SouthAmerica");

    var eventFlightEurope = getElement("eventFlightEurope" + panelNumber);
    emission += getFlightEmission(eventFlightEurope.value, "Europe");
    
    var eventFlightMiddleEast = getElement("eventFlightMiddleEast" + panelNumber);
    emission += getFlightEmission(eventFlightMiddleEast.value, "MiddleEast");

    var eventFlightNorthAfrica = getElement("eventFlightNorthAfrica" + panelNumber);
    emission += getFlightEmission(eventFlightNorthAfrica.value, "NorthAfrica");

    var eventFlightSouthAfrica = getElement("eventFlightSouthAfrica" + panelNumber);
    emission += getFlightEmission(eventFlightSouthAfrica.value, "SouthAfrica");

    var eventFlightAsia = getElement("eventFlightAsia" + panelNumber);
    emission += getFlightEmission(eventFlightAsia.value, "Asia");    

    var eventFlightAustralasia = getElement("eventFlightAustralasia" + panelNumber);
    emission += getFlightEmission(eventFlightAustralasia.value, "Australasia"); 
    
    var eventHotel = getElement("eventHotel" + panelNumber);
    emission += getHotelEmission(eventHotel.value, attendeeAccomadation); 
    
    return emission;
}

function calculateEnergyEmissions()
{
    var emission = 0;
    emission = calculateByEnergyConsumption();
    if ((emission == 0)||(isNaN(emission)))
    {
        emission = calculatateByArea();
    }

    return emission;
}



function calculateByEnergyConsumption()
{
    var emissions = 0;

    //Electricity emissions - Colorado:			0.794	kg CO2/kWh (derived from EPA 2006)	
    var electricityEmissions = 0;
    electricityEmissions = (getElement("eventElectricity").value * 0.794) / 1000;

    //Natural gas emission factor:			54.7	kgCO2/1,000ft3 (WBCSD 2005)	
    var gasEmissions = 0;
    gasEmissions = (getElement("eventNaturalGas").value / 1000) * 54.7 / 1000;

    //Heating oil emissions:			10.15	kg CO2/gallon (WBCSD 2005)	
    var oilEmissions = 0;
    oilEmissions = getElement("eventHeatingOil").value * 10.15 / 1000;
    
    //Diesel emissions:			10.150	kg CO2/gallon (WBCSD 2005)	
    var dieselEmissions = 0;
    dieselEmissions = getElement("eventDiesel").value * 10.150 / 1000;    

    //LPG emissions:			5.810	kg CO2/gallon (WBCSD 2005)	
    var lpgEmissions = 0;
    lpgEmissions = getElement("eventLPG").value * 5.810 / 1000;
    
    //Propane emissions:			5.74	kg CO2/gallon (WBCSD 2005)	
    var propaneEmissions = 0;
    propaneEmissions = getElement("eventPropane").value * 5.74 / 1000;
    
    
    emissions = electricityEmissions + gasEmissions + oilEmissions + dieselEmissions + lpgEmissions + propaneEmissions;
    return emissions;
}


function calculatateByArea()
{
    var emissions = 0;
    var energyEmissions = 0;
    var gasEmissions = 0;
    
    var floorArea = getElement("eventFloorArea").value;

    var numDays = getElement("eventDays").value;
    
    if (getElement("eventLengthUnits").value == "Hours")
    {
        numDays = numDays / 24;
    }

    var energyConsumed = ((floorArea*9.1)/365) * numDays;
    energyEmissions = ((energyConsumed*0.794)/1000);

    var gasConsumed = (floorArea*49.7/365)*numDays;
    gasEmissions = ((gasConsumed/1000)*54.7/1000);   
    emissions = energyEmissions + gasEmissions;
    
    //Change to Tons
    return emissions;
}


function getGroundEmission(attendees,distanceLevel,publicTransport)
{
    //Auto Coefficient - Kilometers
    var AUTO_CO2_FACTOR = 0.244;
    //Train Coefficient - Kilometers
    var TRAIN_CO2_FACTOR = 0.119;

    var travel_C02_Factor;
    if (publicTransport) { travel_C02_Factor = TRAIN_CO2_FACTOR; } 
    else { travel_C02_Factor = AUTO_CO2_FACTOR; }

    var travelResult;
    var miles;
    switch (distanceLevel) 
    { 
        case 1:
            miles = 20;
            break;
        case 2:
            miles = 100;
            break;
        case 3:
            miles = 250;
            break;
    }
    travelResult = (attendees * miles * 1.609 * travel_C02_Factor / 1000);
    return travelResult;
}

function getHotelEmission(nights,attendeeAccomadation) 
{
    //Hotel Coefficient Travel - #nights
    var T_HOTEL_CO2_FACTOR = 42.16;
    //Hotel Coefficient Other - #nights
    var O_HOTEL_CO2_FACTOR = 42.16;

    var hotel_C02_Factor;
    if (attendeeAccomadation) { hotel_C02_Factor = T_HOTEL_CO2_FACTOR; }
    else { hotel_C02_Factor = O_HOTEL_CO2_FACTOR; }

    var hotelResult = (nights * hotel_C02_Factor / 1000);
    return hotelResult;
}

function getFlightEmission(attendees, travelOrigin)
{
    var emission = 0;
    var flightMiles = 0;
    var emissionFactor = 0;
    switch (travelOrigin)
    {
        case "USA":
            flightMiles = 1399.508 * 2;
            emissionFactor =  0.0983;
            break;
        case "Canada":
            flightMiles = 1949 * 2;
            emissionFactor =  0.1106;
            break;
        case "SouthAmerica":
            flightMiles = 8371 * 2;
            emissionFactor =  0.1106;
            break;
        case "Europe":
            flightMiles = 8208 * 2;
            emissionFactor =  0.1106;
            break;
        case "MiddleEast":
            flightMiles = 12378 * 2;
            emissionFactor =  0.1106;
            break;
        case "NorthAfrica":
            flightMiles = 10715 * 2;
            emissionFactor =  0.1106;
            break;
        case "SouthAfrica":
            flightMiles = 15270 * 2;
            emissionFactor =  0.1106;
            break;
        case "Asia":
            flightMiles = 13740 * 2;
            emissionFactor =  0.1106;
            break;
        case "Australasia":
            flightMiles = 13141 * 2;
            emissionFactor =  0.1106;
            break;            
    }
    flightMiles = flightMiles * attendees;
    emission = flightMiles * emissionFactor * 1.09 / 1000;
    return emission;
}

function getWasteEmission()
{
    var pounds = getElement("eventWaste").value;

    pounds = pounds * 0.4536;
    pounds = (pounds - (pounds * (getElement("eventWasteRecycled").value/100))) / 1000;
    var emissions = 23 * 0.0162 * pounds;
    
    var waterEmission = 0;
    waterEmission = (getElement("eventWater").value * 0.003785) * 0.24 / 1000;
    
    emissions += waterEmission;
    
    return emissions;
}

function purchaseOffsetCredits()
{
    
    
    var subtotal = Number(getElement("totalNumeric").value);
    if (!isNaN(subtotal))
    {
        var urlString = "https://ssl.charityweb.net/ccf?DNCFlag=1&Custom8=" + totalEmissions + "Custom9=0&Custom10=0&subtotal=" + subtotal;
        window.open(urlString);        
    }
    else
    {
        var errorString = "An error was detected with your submission. Please review your inputs for any possible non-numeric entries.";
        errorString += "\n\nIf you continue having difficulty, please send an email to admin@denver.org";
        alert(errorString);
    }
}