﻿//var getElement("serverControlName").value = "ctl00_mainContentArea1_rptSection2_ctl03_ctl00_";


//variables for calculating air, ground, and hotel emmissions.
//these were being declared in btnCalculateButtonClick()
//scope was increased for these so they can be reused in purchaseOffsetCredits()
//ddl.20081202
var air = 0;
var ground = 0;
var hotel = 0;


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 showOptional(dropDownValue)
{
    switch (dropDownValue)
    {
        case "-1":        
            getElement("FlightArrivalDIAInfo").style.display='none';
            getElement("optionalFlightInfo0").style.display='none';
            getElement("optionalFlightInfo1").style.display='none';
            getElement("optionalFlightInfo2").style.display='none';
            break;
        case "0":
            getElement("FlightArrivalDIAInfo").style.display='block';
            getElement("optionalFlightInfo0").style.display='block';
            getElement("optionalFlightInfo1").style.display='none';
            getElement("optionalFlightInfo2").style.display='none';
            break;
        case "1":
            getElement("FlightArrivalDIAInfo").style.display='block';
            getElement("optionalFlightInfo0").style.display='block';
            getElement("optionalFlightInfo1").style.display='block';
            getElement("optionalFlightInfo2").style.display='none';
            break;
        case "2":
            getElement("FlightArrivalDIAInfo").style.display='block';
            getElement("optionalFlightInfo0").style.display='block';        
            getElement("optionalFlightInfo1").style.display='block';
            getElement("optionalFlightInfo2").style.display='block';
            break;            
    }
}

function throwErrorAlert(elementName)
{
    var errorMsg = "An error was detected with your ";
    switch (elementName)
    {
        case "Flight":
            if (getElement(getElement("serverControlName").value + "flightLayovers").value != "-1")
            {
                errorMsg += "flight information submission. Please ensure that you have selected an airport for all lay-overs.";
                errorMsg += " If you are not flying, please select the '0 - Not Flying' for your number of flight-layovers."
                alert(errorMsg);
            }
            break;
    }
    return errorMsg;
}

function setGraph(elementName,graphValue,carbonEmission)
{
    if(isNaN(graphValue))
    {
        graphValue = 0;
        carbonEmission = 0;
        throwErrorAlert(elementName);
    }

    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;}
}

function getAirDistance(lat1, lon1, lat2, lon2)
{
    var distance = Math.acos(Math.sin(lat2) * Math.sin(lat1) + Math.cos(lat2) * Math.cos(lat1) * Math.cos(lon1 - lon2)) * (6371.2 / 1.609);
    return (distance.toFixed(2) * 2);
}

function btnCalculateButtonClick()
{
    var elementAirLayovers = getElement(getElement("serverControlName").value + "flightLayovers");

    if (getElement(getElement("serverControlName").value + "flightLayovers").value != "-1"){air = calculateAirEmission();}       
    ground = calculateGroundEmission();
    hotel = calculateHotelEmission();
    
    var totalEmissions = air + ground + hotel;
    getElement("totalNumeric").value = totalEmissions.toFixed(4);
    getElement("numericResult").innerHTML = totalEmissions.toFixed(4);    
    
    setGraph("Flight",Math.round((air / totalEmissions)*100),air.toFixed(4));
    setGraph("Ground",Math.round((ground / totalEmissions)*100),ground.toFixed(4));
    setGraph("Hotel",Math.round((hotel / totalEmissions)*100),hotel.toFixed(4));
    setGraph("Total",100,totalEmissions.toFixed(4));    
}

function calculateAirEmission()
{
    var airLayovers = getElement(getElement("serverControlName").value + "flightLayovers").value;
    var testFlightDistance = 0;
    var airDistance = 0;
    var flightEmission = 0;
    switch (airLayovers)
    {
        case "-1":
            return 0;
            break;
        case "0":
            var lat1 = getElement(getElement("serverControlName").value + "departureAirport1").value.split("|||")[0];
            var lon1 = getElement(getElement("serverControlName").value + "departureAirport1").value.split("|||")[1];
            var lat2 = getElement("diaLatLon").value.split("|||")[0];
            var lon2 = getElement("diaLatLon").value.split("|||")[1];
            testFlightDistance = getAirDistance(lat1, lon1, lat2, lon2);
            flightEmission = checkFlightCoefficient(testFlightDistance);
            airDistance = testFlightDistance;
            break;
        case "1":
            var lat1 = getElement(getElement("serverControlName").value + "departureAirport1").value.split("|||")[0];
            var lon1 = getElement(getElement("serverControlName").value + "departureAirport1").value.split("|||")[1];
            var lat2 = getElement(getElement("serverControlName").value + "arrivalAirport1").value.split("|||")[0];
            var lon2 = getElement(getElement("serverControlName").value + "arrivalAirport1").value.split("|||")[1];
            var lat3 = getElement("diaLatLon").value.split("|||")[0];
            var lon3 = getElement("diaLatLon").value.split("|||")[1];                        
            testFlightDistance = getAirDistance(lat1, lon1, lat2, lon2);
            flightEmission = checkFlightCoefficient(testFlightDistance);
            airDistance = testFlightDistance;
            testFlightDistance = getAirDistance(lat2, lon2, lat3, lon3);
            flightEmission += checkFlightCoefficient(testFlightDistance);              
            airDistance += testFlightDistance;
            break;
        case "2":
            var lat1 = getElement(getElement("serverControlName").value + "departureAirport1").value.split("|||")[0];
            var lon1 = getElement(getElement("serverControlName").value + "departureAirport1").value.split("|||")[1];
            var lat2 = getElement(getElement("serverControlName").value + "arrivalAirport1").value.split("|||")[0];
            var lon2 = getElement(getElement("serverControlName").value + "arrivalAirport1").value.split("|||")[1];
            var lat3 = getElement(getElement("serverControlName").value + "arrivalAirport2").value.split("|||")[0];
            var lon3 = getElement(getElement("serverControlName").value + "arrivalAirport2").value.split("|||")[1];            
            var lat4 = getElement("diaLatLon").value.split("|||")[0];
            var lon4 = getElement("diaLatLon").value.split("|||")[1];                        
            testFlightDistance = getAirDistance(lat1, lon1, lat2, lon2);
            flightEmission = checkFlightCoefficient(testFlightDistance);
            airDistance = testFlightDistance;
            testFlightDistance = getAirDistance(lat2, lon2, lat3, lon3);
            flightEmission += checkFlightCoefficient(testFlightDistance);              
            airDistance += testFlightDistance;
            testFlightDistance = getAirDistance(lat3, lon3, lat4, lon4);    
            flightEmission += checkFlightCoefficient(testFlightDistance);              
            airDistance += testFlightDistance;                             
            break;
    }
    getElement(getElement("serverControlName").value + "totalAirMiles").value = airDistance; 
    return flightEmission;
}

function checkFlightCoefficient(airDistance)
{
    var emission = 0;
    //Altered from original travel spreadsheet to account for newest emission standards from event calc spreadsheet    
    if (airDistance < 1988)
    {
        emission = airDistance * 0.000230647519346129;
    }
    else
    {
        emission = airDistance * 0.000187450937837512;
    }
    return emission;
}

function calculateGroundEmission()
{
    var groundEmission = 0;    
    var autoMiles = getElement(getElement("serverControlName").value + "autoMiles").value;
    var busMiles = getElement(getElement("serverControlName").value + "busMiles").value;
    var trainMiles = getElement(getElement("serverControlName").value + "trainMiles").value;
    
    //* 2? Spreadsheet assumes 1-way distance was entered
    
    groundEmission = (autoMiles * 0.000396497825);
    groundEmission += (busMiles * 0.000080052577);
    groundEmission += (trainMiles * 0.0001908274);
    return groundEmission;
}

function calculateHotelEmission()
{
    var hotelEmission = 0;  
    var hotelNights = getElement(getElement("serverControlName").value + "hotelNights").value;
    hotelEmission = hotelNights * 0.04216;
    return hotelEmission;
}

function purchaseOffsetCredits()
{
  
    
    var subtotal = Number(getElement("totalNumeric").value);
    if (!isNaN(subtotal))
    {
        var urlString = "https://ssl.charityweb.net/ccf?DNCFlag=1&Custom8=" + hotel + "&Custom9=" + air + "&Custom10=" + ground + "&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);
    }
}