/* 

   Conservation International CO2 Calculator
   Copyright 2006 Conservation International
   Portions Copyright 2006, 2005, 2004 Sustainable By Design
   
   File: javascript/calculate.js

*/


	/* -------------------------------------------
	   FUNCTION:  Calculate
	   ------------------------------------------- */

	function Calculate () {
	
		switch (currentCalculator) { 
		
			case 'personal': CalculatePersonal (); break;
		
			case   'events': CalculateEvent    (); break;
		
			case    'quick': CalculateQuick    (); break;
		
			case     'gift': CalculateGift     (); break;
		
			case  'flights': CalculateFlights  (); break;
		}		
	}
	

	/* -------------------------------------------
	   FUNCTION:  CalculateFlights
	   ------------------------------------------- */

	function CalculateFlights () {
	
		f = document.theForm;
		
		flightDistance = GetRadioButtonValue (f.flight_distance);
		
		roundtripDistance = flightDistance * 2;
		
		numberOfPassengers = f.flight_passengers.options[f.flight_passengers.selectedIndex].value;
		
		flightEmissions = roundtripDistance * emissionsPerAirPassengerMile * numberOfPassengers;
		
		/* ***** */
		/* TOTAL */
		/* ***** */
		
			/* TOTAL EMISSIONS */
		
		UpdateTotal ('flight_total', flightEmissions, true);

			/* TOTAL NOTES */
		
		offsetCost = flightEmissions * offsetCostPerTon;
	
		UpdateTotalNotes ('flight_total_notes', offsetCost);
	}

		
	/* -------------------------------------------
	   FUNCTION:  CalculateQuick
	   ------------------------------------------- */

	function CalculateQuick () {
	
		quickOffsetEmissions = 0.0;
		
		f = document.theForm;
		
		for (i = 0; i < f.length; i ++) {
		
			element = f.elements[i];
			
			if ((element.type == 'checkbox') && (element.checked) && (element.name.substr(0,5) == 'quick')) {
			
				quickOffsetEmissions = quickOffsetEmissions + quickOffsetData[element.name];
			}
		}
		
		/* UPDATE TOTAL EMISSIONS */
		
		UpdateTotal ('quick_total', quickOffsetEmissions, true);

		/* UPDATE TOTAL NOTES */
		
		offsetCost = quickOffsetEmissions * offsetCostPerTon;
	
		UpdateTotalNotes ('quick_total_notes', offsetCost);
	}

		
	/* -------------------------------------------
	   FUNCTION:  CalculateGift
	   ------------------------------------------- */

	function CalculateGift () {
	
		giftOffsetEmissions = 0.0;
		
		f = document.theForm;
		
		for (i = 0; i < f.length; i ++) {
		
			element = f.elements[i];
		
			if ((element.type == 'checkbox') && (element.checked) && (element.name.substr(0,4) == 'gift')) {
			
				giftOffsetEmissions = giftOffsetEmissions + giftOffsetData[element.name];
			}
		}
		
		/* UPDATE TOTAL EMISSIONS */
		
		UpdateTotal ('gift_total', giftOffsetEmissions, true);

		/* UPDATE TOTAL NOTES */
		
		offsetCost = giftOffsetEmissions * offsetCostPerTon;
	
		UpdateTotalNotes ('gift_total_notes', offsetCost);
	}

		
	/* -------------------------------------------
	   FUNCTION:  CalculateEvent
	   ------------------------------------------- */

	function CalculateEvent () {
	
		f = document.theForm;
		
		/* FLIGHTS */
		
		numberOfGuestsFlying = f.event_num_guests_flying.options[f.event_num_guests_flying.selectedIndex].value;

		eventFlightDistance = GetRadioButtonValue (f.event_flight_distance);
		
		totalMilesFlown = numberOfGuestsFlying * eventFlightDistance * 2;
		
		eventFlightEmissions = totalMilesFlown * emissionsPerAirPassengerMile;
		
		/* DRIVING */
		
		numberOfGuestsDriving = f.event_num_guests_driving.options[f.event_num_guests_driving.selectedIndex].value;

		eventDrivingDistance = GetRadioButtonValue (f.event_driving_distance);
		
		totalMilesDriven = numberOfGuestsDriving * eventDrivingDistance * 2;
		
		eventDrivingGallonsOfGas = totalMilesDriven / averageMPG;
		
		eventDrivingEmissions = eventDrivingGallonsOfGas * emissionsPerGallonGasoline;

		/* HOTEL */

		numberOfGuestsinHotel = f.event_num_guests_hotel.options[f.event_num_guests_hotel.selectedIndex].value;

		numberOfHotelNights = f.event_hotel_days.options[f.event_hotel_days.selectedIndex].value;
		
		eventHotelEmissions = numberOfGuestsinHotel * numberOfHotelNights * emissionsPerHotelNightPerPerson;
		
		/* MEALS */
		
		eventMealType = f.event_meals.options[f.event_meals.selectedIndex].value;
	
		numberOfGuests = f.event_num_guests.options[f.event_num_guests.selectedIndex].value;

		eventDuration = f.event_duration.options[f.event_duration.selectedIndex].value;
		
		eventMealsEmissions = eventDuration * dietData[eventMealType] / 365 * numberOfGuests;
		
		/* TOTAL */
	
		eventEmissions = eventFlightEmissions + eventDrivingEmissions + eventHotelEmissions + eventMealsEmissions;
	
		/* ***** */
		/* TOTAL */
		/* ***** */
		
			/* TOTAL EMISSIONS */
		
		UpdateTotal ('event_total', eventEmissions, true);

			/* TOTAL NOTES */
		
		offsetCost = eventEmissions * offsetCostPerTon;
	
		UpdateTotalNotes ('event_total_notes', offsetCost);
	}

		
	/* -------------------------------------------
	   FUNCTION:  CalculatePersonal
	   ------------------------------------------- */

	function CalculatePersonal () {
	
		f = document.theForm;
		
		/* *********** */
		/* HOME ENERGY */
		/* *********** */
		
			/* SIMPLE MODE */

		if (homeEnergyMode == 'simple') {
		
			selectedResidenceType = f.personal_home_residence.options[f.personal_home_residence.selectedIndex].value;
	
			numberOfResidents = f.personal_home_simple_occupants.options[f.personal_home_simple_occupants.selectedIndex].value;
	
			numberOfBedrooms = f.personal_home_bedrooms.options[f.personal_home_bedrooms.selectedIndex].value;
			
			if ((selectedResidenceType == 'unselected') || (numberOfBedrooms == 'unselected') || (numberOfResidents == 'unselected')) {
		
				homeEmissions = 0;
			}
			
			else {
			
				residenceEmissions = residenceData[selectedResidenceType][numberOfBedrooms - 1] * emissionsPerMMBtu;
			
				homeEmissions = residenceEmissions / numberOfResidents;
			}
		}
	
			/* DETAILED MODE */

		else {

			selectdState = f.personal_home_detailed_state.options[f.personal_home_detailed_state.selectedIndex].value;
	
			numberOfResidents = f.personal_home_detailed_occupants.options[f.personal_home_detailed_occupants.selectedIndex].value;
			
			if ((selectdState == 'unselected') || (numberOfResidents == 'unselected')) {
		
				homeEmissions = 0;
			}
			
			else {
			
				/* ELECTRICITY */
			
				consumedKwh = f.personal_home_electricity.options[f.personal_home_electricity.selectedIndex].value;

				electricityEmissions = consumedKwh * stateEmissionsLbsPerKwh[selectdState] / 2000 * 12;
				
				/* NATURAL GAS */
			
				consumedTherms = f.personal_home_gas.options[f.personal_home_gas.selectedIndex].value;

				naturalGasEmissions = consumedTherms * emissionsPerThermNaturalGas * 12;
				
				/* HEATING OIL */
			
				consumedOil = f.personal_home_oil.options[f.personal_home_oil.selectedIndex].value;

				oilEmissions = consumedOil * emissionsPerGallonOil;
				
				/* PROPANE/LPG */
			
				consumedPropane = f.personal_home_propane.options[f.personal_home_propane.selectedIndex].value;

				propaneEmissions = consumedPropane * emissionsPerGallonPropane;
				
				/* WOOD */
			
				consumedCords = f.personal_home_wood.options[f.personal_home_wood.selectedIndex].value;

				woodEmissions = consumedCords * emissionsPerCordWood;
				
				/* TOTAL */
				
				totalHomeEnergyEmissions = electricityEmissions +
				                           naturalGasEmissions  +
				                           oilEmissions         +
				                           propaneEmissions     +
				                           woodEmissions        ;
			
				homeEmissions = totalHomeEnergyEmissions / numberOfResidents;
			}
		}

			/* UPDATE SUBTOTAL */
			
		UpdateSubtotal ('personal_home_subtotal', homeEmissions);
		
	
		/* ********** */
		/* AIR TRAVEL */
		/* ********** */
		
		selectedAirShort = f.personal_air_short.options[f.personal_air_short.selectedIndex].value;

		selectedAirLong = f.personal_air_long.options[f.personal_air_long.selectedIndex].value;

		if ((selectedAirShort == 'unselected') || (selectedAirLong == 'unselected')) {
	
			airEmissions = 0;
		}
		
		else {
		
			shortRoundtripEmissions = selectedAirShort * emissionsPerShortRoundtrip;
	
			 longRoundtripEmissions = selectedAirLong  *  emissionsPerLongRoundtrip;
	
			airEmissions = shortRoundtripEmissions + longRoundtripEmissions;
		}
			
		UpdateSubtotal ('personal_air_subtotal', airEmissions);
	

		/* ********** */
		/* CAR TRAVEL */
		/* ********** */
		
			/* SIMPLE MODE */

		if (carTravelMode == 'simple') {
		
			selectedClass = f.personal_car_class.options[f.personal_car_class.selectedIndex].value;
	
			selectedYear = f.personal_car_year.options[f.personal_car_year.selectedIndex].value;
	
			selectedMilesDriven = f.personal_car_miles_simple.options[f.personal_car_miles_simple.selectedIndex].value;
	
			if ((selectedClass == 'unselected') || (selectedYear == 'unselected') || (selectedMilesDriven == 'unselected')) {
		
				carEmissions = 0;
			}
			
			else {
			
				modelYear = selectedYear - firstCarClassDataYear;
			
				carEmissions = selectedMilesDriven / carClassMPGdata[selectedClass][modelYear] * emissionsPerGallonGasoline;
			}
		}
	
			/* DETAILED MODE */

		else {

			selectedMPG = f.personal_car_mpg.options[f.personal_car_mpg.selectedIndex].value;
	
			selectedMilesDriven = f.personal_car_miles_detailed.options[f.personal_car_miles_detailed.selectedIndex].value;
	
			if ((selectedMPG == 'unselected') || (selectedMilesDriven == 'unselected')) {
		
				carEmissions = 0;
			}
			
			else {
			
				carEmissions = selectedMilesDriven / selectedMPG * emissionsPerGallonGasoline;
			}
		}

			/* UPDATE SUBTOTAL */
			
		UpdateSubtotal ('personal_car_subtotal', carEmissions);
	
		/* ********** */
		/* AIR TRAVEL */
		/* ********** */
		
		selectedAirShort = f.personal_air_short.options[f.personal_air_short.selectedIndex].value;

		selectedAirLong = f.personal_air_long.options[f.personal_air_long.selectedIndex].value;

		if ((selectedAirShort == 'unselected') || (selectedAirLong == 'unselected')) {
	
			airEmissions = 0;
		}
		
		else {
		
			shortRoundtripEmissions = selectedAirShort * emissionsPerShortRoundtrip;
	
			 longRoundtripEmissions = selectedAirLong  *  emissionsPerLongRoundtrip;
	
			airEmissions = shortRoundtripEmissions + longRoundtripEmissions;
		}
			
		UpdateSubtotal ('personal_air_subtotal', airEmissions);
		
		/* **** */
		/* DIET */
		/* **** */

		selectedDiet = f.personal_diet.options[f.personal_diet.selectedIndex].value;
		
		if (selectedDiet == 'unselected') {
		
			dietEmissions = 0;
		}
		
		else {
		
			dietEmissions = dietData[selectedDiet];
		}
			
		UpdateSubtotal ('personal_diet_subtotal', dietEmissions);
	
		/* ***** */
		/* TOTAL */
		/* ***** */
		
			/* TOTAL EMISSIONS */
		
		totalEmissions = homeEmissions + carEmissions + airEmissions + dietEmissions;
	
		UpdateTotal ('personal_total', totalEmissions);

			/* TOTAL NOTES */
		
		offsetCost = totalEmissions * offsetCostPerTon;
	
		UpdateTotalNotes ('personal_total_notes', offsetCost);
	}



