var debug = 0;

var report = new Object;

report.home = new Object;

report.home.electric = 0;
report.home.gas = 0;
report.home.oil = 0;
report.home.coal = 0;
report.home.wood = 0;
report.home.share = 0;
report.home.total = 0;

report.trans = new Object;
report.trans.car1 = 0;
report.trans.car2 = 0;
report.trans.bike1 = 0;
report.trans.taxi = 0;
report.trans.bus = 0;
report.trans.coach = 0;
report.trans.ferry = 0;
report.trans.nrail = 0;
report.trans.irail = 0;

report.trans.flight = new Object;

report.trans.flight.dom = 0;
report.trans.flight.short = 0;
report.trans.flight.long = 0;

report.trans.total = 0;

report.food = new Object;
report.food.diet = 0;
report.food.src = 0;
report.food.total = 0;

report.industry = new Object;
report.industry.national = 0;
report.industry.spending = 1;
report.industry.share = 0;
report.industry.total = 0;

report.leisure = new Object;
report.leisure.total = 0;

report.grand = new Object;
report.grand.total = 0;

var formname = "carbcalc";

function make_percent(decimal) {

    return Math.round(1000 * decimal) / 10;
}

function make_number(string) {

    return string.replace(/[^\d\.]/g,"") * 1;
}

function getval(element,tonum) {

    var theform = document.getElementById(formname);
    
    if (theform[element]) {

	if (tonum) {
	    return make_number(theform[element].value);
	} else {
	    return theform[element].value;
	}

    } else {

	if (debug) {
	    alert("unable to get " + element);
	}
	
	return 0;
    }
}

function getcheck(element) {

    var theform = document.getElementById(formname);

    if (theform[element]) {

	return theform[element].checked;

    } else {

	if (debug) {
	    alert("unable to get " + element);
	}

	return 0;
    }
}

function getradval(element)
{
    var theform =  document.getElementById(formname);

    if (theform[element]) {

	var e = theform[element];

	for (var i=0; i < e.length; i++) {

	    if (e[i].checked) {
		
		return e[i].value;
	    }
	}

    } else {

	if (debug) {
	    alert("unable to get " + element);
	}

	return 0;
    }
}

function setval(element,value) {

    if (document.getElementById(element)) {

	document.getElementById(element).innerHTML = value;   

    } else {
	if (debug) {
	    alert("unable to set innHTML for " + element);
	}
    }
}

function setinput(element,value) {

    if (document.getElementById(element)) {

	document.getElementById(element).value = value;   

    } else {
	if (debug) {
	    alert("unable to set value for " + element);
	}
    }
}

// ----------------

function grand_change() {

    setval("home_total",report.home.share);

    setval("trans_total",report.trans.total);
    setval("food_total",report.food.total);
    setval("leisure_total",report.leisure.total);
    setval("industry_total",report.industry.total);

    report.grand.total = report.home.share + report.trans.total + report.food.total + report.leisure.total + report.industry.share;

    var people = getval("numadult",true) + (getval("numchild",true)/2);

    if (report.grand.total > 0) {

	setval("home_percent", make_percent(report.home.share / report.grand.total));
	setval("trans_percent", make_percent(report.trans.total / report.grand.total));
	setval("food_percent", make_percent(report.food.total / report.grand.total));
	setval("leisure_percent", make_percent(report.leisure.total / report.grand.total));
	setval("industry_percent", make_percent(report.industry.share / report.grand.total));
    }

    setval("grand_total",report.grand.total + " kg");
    setval("grand_total_tn",Math.round(report.grand.total/100)/10 + " tonnes");

    if (report.home.total > 0) {

	setval("percent_electric", make_percent(report.home.electric / people / report.grand.total));
	setval("percent_gas", make_percent(report.home.gas / people / report.grand.total));
	setval("percent_oil", make_percent(report.home.oil / people / report.grand.total));
	setval("percent_coal", make_percent(report.home.coal / people / report.grand.total));
	setval("percent_wood", make_percent(report.home.wood / people / report.grand.total));
    }

    if (report.trans.total > 0) {
	setval("percent_car1", make_percent(report.trans.car1 / report.grand.total));
	setval("percent_car2", make_percent(report.trans.car2 / report.grand.total));
	setval("percent_bike", make_percent(report.trans.bike1 / report.grand.total));
	setval("percent_taxi", make_percent(report.trans.taxi / report.grand.total));
	setval("percent_bus", make_percent(report.trans.bus / report.grand.total));
	setval("percent_coach", make_percent(report.trans.coach / report.grand.total));
	setval("percent_ferry", make_percent(report.trans.ferry / report.grand.total));
	setval("percent_nrail", make_percent(report.trans.nrail / report.grand.total));
	setval("percent_irail", make_percent(report.trans.irail / report.grand.total));
	setval("percent_flight_dom", make_percent(report.trans.flight.dom / report.grand.total));
	setval("percent_flight_short", make_percent(report.trans.flight.short / report.grand.total));
	setval("percent_flight_long", make_percent(report.trans.flight.long / report.grand.total));
    }

    if (report.food.total > 0) {
	setval("percent_diet", make_percent(report.food.diet / report.grand.total));
	setval("percent_src", make_percent(report.food.src / report.grand.total));
    }

    if (report.industry.total > 0) {
	setval("percent_national", make_percent(report.industry.national / report.grand.total));
	setval("percent_spending", make_percent(report.industry.spending / people / report.grand.total));
    }

}

// ----------------

function home_change() {

    var people = getval("numadult",true) + (getval("numchild",true)/2);

    setval("total_electric",report.home.electric);
    setval("electric_total",report.home.electric);
    setval("electric_persons",people);
    setval("electric_personal",Math.round(report.home.electric/people));

    setval("total_gas",report.home.gas);
    setval("gas_total",report.home.gas);
    setval("gas_persons",people);
    setval("gas_personal",Math.round(report.home.gas/people));

    setval("total_oil",report.home.oil);
    setval("oil_total",report.home.oil);
    setval("oil_persons",people);
    setval("oil_personal",Math.round(report.home.oil/people));

    setval("total_coal",report.home.coal);
    setval("coal_total",report.home.coal);
    setval("coal_persons",people);
    setval("coal_personal",Math.round(report.home.coal/people));

    setval("total_wood",report.home.wood);
    setval("wood_total",report.home.wood);
    setval("wood_persons",people);
    setval("wood_personal",Math.round(report.home.wood/people));

    report.home.total = report.home.electric 
	+ report.home.gas 
	+ report.home.oil
	+ report.home.coal
	+ report.home.wood;

    report.home.share = Math.round(report.home.total / people);

    setval("total_home",report.home.total);
    setval("share_home",report.home.share);

    grand_change();
}

function trans_change() {

    setval("total_car1",report.trans.car1);
    setval("car1_total",report.trans.car1);

    setval("total_car2",report.trans.car2);
    setval("car2_total",report.trans.car2);

    setval("cars_total",report.trans.car1 + report.trans.car2);

    setval("total_bike",report.trans.bike1);
    setval("bike_total",report.trans.bike1);

    setval("total_taxi",report.trans.taxi);
    setval("taxi_total",report.trans.taxi);

    setval("total_bus",report.trans.bus);
    setval("bus_total",report.trans.bus);

    setval("total_coach",report.trans.coach);
    setval("coach_total",report.trans.coach);

    setval("total_ferry",report.trans.ferry);
    setval("ferry_total",report.trans.ferry);

    setval("total_nrail",report.trans.nrail);
    setval("nrail_total",report.trans.nrail);

    setval("total_irail",report.trans.irail);
    setval("irail_total",report.trans.irail);

    setval("total_flight_dom",report.trans.flight.dom);
    setval("flight_dom_total",report.trans.flight.dom);

    setval("total_flight_short",report.trans.flight.short);
    setval("flight_short_total",report.trans.flight.short);

    setval("total_flight_long",report.trans.flight.long);
    setval("flight_long_total",report.trans.flight.long);

    report.trans.total = report.trans.car1
	+ report.trans.car2
	+ report.trans.bike1
	+ report.trans.taxi
	+ report.trans.bus
	+ report.trans.coach
	+ report.trans.ferry
	+ report.trans.nrail
	+ report.trans.irail
	+ report.trans.flight.dom
	+ report.trans.flight.short
	+ report.trans.flight.long;

    setval("total_trans",report.trans.total);

    grand_change();
}

function food_change() {

    report.food.diet = getradval("fdiet") * 1 || 0;
    report.food.src = getradval("fsrc") * 1 || 0;

    setval("total_diet",report.food.diet);
    setval("diet_total",report.food.diet);

    setval("total_src",report.food.src);
    setval("src_total",report.food.src);

    report.food.total = report.food.diet + report.food.src;

    setval("total_food",report.food.total);

    grand_change();
}

var fuelfact = new Object;

fuelfact.petrol = 2.32;
fuelfact.diesel = 2.63;
fuelfact.kerosene = 2.52;
fuelfact.biodiesel = 1.32;

function leisure_fuel_change() {
    
    var totalcarbon = 0;

    var preprefix = "ac";

    for (var i = 1; i <= 6; i++) {

	var prefix = preprefix + i;

	var fuel = getval(prefix + "fuel");

	var tltr = getval(prefix + "ltr",true) * getval(prefix + "num",true);

	setval(prefix + "tltr", tltr)
	setval(prefix + "factor",fuelfact[fuel])

	carbon = tltr * fuelfact[fuel];
	totalcarbon += carbon;

	setval(prefix + "co2", carbon)
    }

    report.leisure.total = Math.round(totalcarbon);

    setval("leisure_total",report.leisure.total);

    setval("leisure_fuel_total",report.leisure.total);
    //    setval("total_leisure",report.leisure.total);

    grand_change();
}

function industry_change() {

    var people = getval("numadult",true) + (getval("numchild",true)/2);

    report.industry.national = 1000;

    report.industry.spending = Math.round(getval("itonnes",true) * 1000 * getradval("iaware"));

    setval("total_national",report.industry.national);
    setval("total_spending",report.industry.spending);
    setval("spending_total",report.industry.spending);
    setval("spending_persons",people);
    setval("spending_personal",Math.round(report.industry.spending/people));

    report.industry.total = report.industry.national + report.industry.spending; 
    report.industry.share = Math.round(report.industry.spending/people) + report.industry.national;

    setval("total_industry",report.industry.total);
    setval("share_industry",report.industry.share);

    grand_change();
}

function people_change() {
    
    home_change();
    industry_change();
}

// ----------------

function electric_change() {

    var ecpu = 0.14; // electricity cost per unit

    setval("electricmeter_cpu",ecpu);

    var efact = getradval("etype");

    setval("electricbill_factor",efact);
    setval("electricmeter_factor",efact);

    var ebillunits =  getval("ebq1",true) + getval("ebq2",true) + getval("ebq3",true) + getval("ebq4",true);

    setval("electricbill_total_units",ebillunits);

    var ebill =  Math.round( ebillunits * efact );

    setval("electricbill_co2",ebill);

    var emeter_cpy = getval("emeter",true) * 52;

    setval("electricmeter_cpy",emeter_cpy);

    var emeter_upy = emeter_cpy / ecpu;

    setval("electricmeter_upy",Math.round(emeter_upy));

    var emeter = Math.round(emeter_upy * efact);

    setval("electricmeter_co2",emeter);

    report.home.electric = emeter + ebill;

    home_change();
}

function gas_change() {

    var gconv = 0.206; 
    
    var gfact = new Object;

    gfact.lpg =	1.50;
    gfact.kwh =	0.21;
    gfact.the =	6.02;
    gfact.cum =	2.198;

    var gb = 0;

    var gunits = new Object;

    gunits.lpg = 0;
    gunits.kwh = 0;
    gunits.the = 0;
    gunits.cum = 0;

    var gco2 = new Object;

    gco2.lpg = 0;
    gco2.kwh = 0;
    gco2.the = 0;
    gco2.cum = 0;

    for (var t in gfact) {
    
	setval("gb"+t+"_factor",gfact[t]);

	for (var b = 1; b <= 6; b++) {
	
	    gunits[t] += getval("gb"+b+t,true);

	}

	setval("gb"+t+"_total",gunits[t]);

	setval("gb"+t+"_factor",gfact[t]);

	gco2[t] += gunits[t] * gfact[t];

	setval("gb"+t+"_co2",Math.round(gco2[t]));

	gb += gco2[t];
    }

    gb = Math.round(gb);

    var gasm_cpy = getval("gasm_cpm",true) * 12;
    var gasm_cpu = getval("gasm_cpu",true);

    var gasm_upy = gasm_cpy / gasm_cpu;

    setval("gasm_upy",Math.round(gasm_upy));

    setval("gasm_factor",gconv);

    var pg = Math.round(gasm_upy * gconv);

    setval("gasm_co2",pg);

    var buweight = getval("buw",true) * getval("bun",true);
    var prweight = getval("prw",true) * getval("prn",true);

    setval("bu_weight",Math.round(buweight));
    setval("pr_weight",Math.round(prweight));
    
    var bultr = buweight * 1.74;
    var prltr = prweight * 1.95;

    setval("bu_litres",Math.round(bultr));
    setval("pr_litres",Math.round(prltr));

    setval("bu_fact",gfact.lpg);
    setval("pr_fact",gfact.lpg);

    var bg = bultr * gfact.lpg;
    var rg = prltr * gfact.lpg;

    setval("bu_co2",Math.round(bg));
    setval("pr_co2",Math.round(rg));

    report.home.gas = Math.round(pg + gb + bg + rg);

    home_change();
}

function oil_change() {

    var oconv = 2.518;

    var oltr = 0;

    for (var b = 1; b <= 6; b++) {
	
	oltr += getval("ob"+b,true);
    }

    setval("oil_litres",oltr);
    setval("oil_factor",oconv);
    
    report.home.oil = Math.round(oltr * oconv);

    setval("oil_co2",report.home.oil);
    
    home_change();
}

function coal_change() {

    var cconv = 2.523;

    var cweight = 0;

    for (var b = 1; b <= 6; b++) {
	
	var billweight = getval("cn"+b,true) * getval("cw"+b,true);

	setval("ct"+b,billweight);

	cweight += billweight;
    }

    setval("coal_weight",cweight);
    setval("coal_factor",cconv);
    
    report.home.coal = Math.round(cweight * cconv);

    setval("coal_co2",report.home.coal);

    home_change();
}

function coal_calc() {

    setinput("c20kg",
	     getval("cWi20",true) * 13 
	     + getval("cSp20",true) * 13 
	     + getval("cSu20",true) * 13 
	     + getval("cAu20",true) * 13);

    setinput("c25kg",
	     getval("cWi25",true) * 13 
	     + getval("cSp25",true) * 13 
	     + getval("cSu25",true) * 13 
	     + getval("cAu25",true) * 13);

    setinput("c50kg",
	     getval("cWi50",true) * 13 
	     + getval("cSp50",true) * 13 
	     + getval("cSu50",true) * 13 
	     + getval("cAu50",true) * 13);

    coal_change();
}

function wood_change() {

    var wconv = 1.779;

    var wweight = getval("woodweight",true) * getval("wooddays",true);

    setval("wood_weight",wweight);
    setval("wood_factor",wconv);
    
    var wco2 = wweight * wconv;

    setval("wood_co2",Math.round(wco2));

    report.home.wood = Math.round(wco2 / 2);

    setval("wood_half",report.home.wood);

    home_change();
}

// ----------------

var carfact = new Object;


carfact.petrolmediumhybrid = new Object;
carfact.petrolmediumhybrid.conv = 0.20;
carfact.petrolmediumhybrid.manu = 2800;
carfact.petrolmediumhybrid.isdiesel = 0;

carfact.petrolmini = new Object;
carfact.petrolmini.conv = 0.26;
carfact.petrolmini.manu = 3640;
carfact.petrolmini.isdiesel = 0;

carfact.petrolsupermini = new Object;
carfact.petrolsupermini.conv = 0.28;
carfact.petrolsupermini.manu = 3920;
carfact.petrolsupermini.isdiesel = 0;

carfact.petrollowermedium = new Object;
carfact.petrollowermedium.conv = 0.32;
carfact.petrollowermedium.manu = 4480;
carfact.petrollowermedium.isdiesel = 0;

carfact.petroluppermedium = new Object;
carfact.petroluppermedium.conv = 0.35;
carfact.petroluppermedium.manu = 4900;
carfact.petroluppermedium.isdiesel = 0;

carfact.petrollargehybrid = new Object;
carfact.petrollargehybrid.conv = 0.36;
carfact.petrollargehybrid.manu = 5040;
carfact.petrollargehybrid.isdiesel = 0;

carfact.petrolvanto13tonne = new Object;
carfact.petrolvanto13tonne.conv = 0.36;
carfact.petrolvanto13tonne.manu = 5040;
carfact.petrolvanto13tonne.isdiesel = 0;

carfact.petrolmpv = new Object;
carfact.petrolmpv.conv = 0.38;
carfact.petrolmpv.manu = 5320;
carfact.petrolmpv.isdiesel = 0;

carfact.petrolexecutive = new Object;
carfact.petrolexecutive.conv = 0.43;
carfact.petrolexecutive.manu = 6020;
carfact.petrolexecutive.isdiesel = 0;

carfact.petrolsports = new Object;
carfact.petrolsports.conv = 0.44;
carfact.petrolsports.manu = 6160;
carfact.petrolsports.isdiesel = 0;

carfact.petrolduelpurpose4x4 = new Object;
carfact.petrolduelpurpose4x4.conv = 0.49;
carfact.petrolduelpurpose4x4.manu = 6860;
carfact.petrolduelpurpose4x4.isdiesel = 0;

carfact.petrolluxury = new Object;
carfact.petrolluxury.conv = 0.58;
carfact.petrolluxury.manu = 8120;
carfact.petrolluxury.isdiesel = 0;

carfact.dieselmini = new Object;
carfact.dieselmini.conv = 0.22;
carfact.dieselmini.manu = 3080;
carfact.dieselmini.isdiesel = 1;

carfact.dieselsupermini = new Object;
carfact.dieselsupermini.conv = 0.24;
carfact.dieselsupermini.manu = 3360;
carfact.dieselsupermini.isdiesel = 1;

carfact.diesellowermedium = new Object;
carfact.diesellowermedium.conv = 0.28;
carfact.diesellowermedium.manu = 3920;
carfact.diesellowermedium.isdiesel = 1;

carfact.dieseluppermedium = new Object;
carfact.dieseluppermedium.conv = 0.31;
carfact.dieseluppermedium.manu = 4340;
carfact.dieseluppermedium.isdiesel = 1;

carfact.dieselmpv = new Object;
carfact.dieselmpv.conv = 0.34;
carfact.dieselmpv.manu = 4760;
carfact.dieselmpv.isdiesel = 1;

carfact.dieselexecutive = new Object;
carfact.dieselexecutive.conv = 0.37;
carfact.dieselexecutive.manu = 5180;
carfact.dieselexecutive.isdiesel = 1;

carfact.dieselsports = new Object;
carfact.dieselsports.conv = 0.39;
carfact.dieselsports.manu = 5460;
carfact.dieselsports.isdiesel = 1;

carfact.dieselduelpurpose4x4 = new Object;
carfact.dieselduelpurpose4x4.conv = 0.43;
carfact.dieselduelpurpose4x4.manu = 6020;
carfact.dieselduelpurpose4x4.isdiesel = 1;

carfact.dieselvanto35tonne = new Object;
carfact.dieselvanto35tonne.conv = 0.44;
carfact.dieselvanto35tonne.manu = 6160;
carfact.dieselvanto35tonne.isdiesel = 1;

carfact.dieselluxury = new Object;
carfact.dieselluxury.conv = 0.51;
carfact.dieselluxury.manu = 7140;
carfact.dieselluxury.isdiesel = 1;

carfact.lpgcngmedium = new Object;
carfact.lpgcngmedium.conv = 0.30;
carfact.lpgcngmedium.manu = 4200;
carfact.lpgcngmedium.isdiesel = 0;

carfact.lpgcnglarge = new Object;
carfact.lpgcnglarge.conv = 0.42;
carfact.lpgcnglarge.manu = 5880;
carfact.lpgcnglarge.isdiesel = 0;

carfact.electricsmall = new Object;
carfact.electricsmall.conv = 0.06;
carfact.electricsmall.manu = 3640;
carfact.electricsmall.isdiesel = 0;

carfact.electricmedium = new Object;
carfact.electricmedium.conv = 0.08;
carfact.electricmedium.manu = 4900;
carfact.electricmedium.isdiesel = 0;

carfact.electriclarge = new Object;
carfact.electriclarge.conv = 0.10;
carfact.electriclarge.manu = 6020;
carfact.electriclarge.isdiesel = 0;


function car_change(n) {

    var prefix = "c" + n;

    var ctype = getval(prefix + "type");

    var car = carfact[ctype];

    var cmiles = getval(prefix + "newmiles",true) - getval(prefix + "oldmiles",true);

    setval(prefix+"_mileage",cmiles);

    var factor = car.conv;

    if (car.isdiesel) {
	factor *= 1 - getval(prefix + "bio")/200;
    }   

    setval(prefix+"_factor",factor);

    var carbon = cmiles * factor;

    setval(prefix+"_mco2",Math.round(carbon));

    if (getcheck(prefix + "new")) {

	setval(prefix+"_manuf",car.manu);
	setval(prefix+"_myear",Math.round(car.manu / 14));

	carbon += car.manu / 14;
    }

    setval(prefix+"_co2ps",Math.round(carbon));

    var cshare = getval(prefix + "_share",true);

    if (cshare > 1) {

	alert("Car share is greater than one. Setting to one");
	cshare = 1;
	setinput(prefix + "_share","1.0");
    }

    report.trans["car" + n] = Math.round(carbon * cshare);

    setval(prefix+"_co2s",report.trans["car" + n]);

    trans_change();
}
    
var bikefact = new Object;

bikefact.small = 0.12;
bikefact.medium = 0.15;
bikefact.large = 0.21;

function bike_change(n) {

    var prefix = "b" + n;

    var bsize = getval(prefix + "size");

    var factor = bikefact[bsize];

    var bmiles = getval(prefix + "newmiles",true) - getval(prefix + "oldmiles",true);

    setval(prefix+"_mileage",bmiles);

    setval(prefix+"_factor",factor);

    var carbon = bmiles * factor;

    setval(prefix+"_mco2",Math.round(carbon));

    if (getcheck(prefix + "new")) {

	var byearmanu = factor * 150;

	setval(prefix+"_manuf",Math.round(byearmanu * 14));
	setval(prefix+"_myear",Math.round(byearmanu));

	carbon += byearmanu;
    }

    setval(prefix+"_co2ps",Math.round(carbon));

    var bshare = getval(prefix + "_share",true);

    report.trans["bike" + n] = Math.round(carbon * bshare);

    setval(prefix+"_co2s",report.trans["bike" + n]);

    trans_change();

}

function taxi_change() {

    var miles = 0;
    var conv = 0.36; // 0.22 * 8/5?

    var preprefix = "tt";

    for (var n = 1; n <= 5; n++) {

	var prefix = preprefix + n;

	var dist = getval(prefix + "dist",true);
	var num = getval(prefix + "num",true);
	
	if (dist > 0 && num > 0) {

	    var journey = dist * num * getval(prefix + "ret") * getval(prefix + "freq") / getval(prefix + "person");

	    
	    setval(prefix+"miles",Math.round(journey));

	    miles += journey;
	} else {
	    setval(prefix+"miles",'');
	}
    }


    setval(preprefix+"_miles",miles);
    setval(preprefix+"_factor",conv);

    report.trans.taxi = Math.round(miles * conv);

    setval(preprefix+"_co2",report.trans.taxi);

    trans_change();
}

function bus_change() {

    var miles = 0;
    var conv = 0.11 * 8/5;

    var preprefix = "tb";

    for (var n = 1; n <= 5; n++) {

	var prefix = preprefix + n;

	var dist = getval(prefix + "dist",true);
	var num = getval(prefix + "num",true);
	
	if (dist > 0 && num > 0) {

	    var journey = dist * num * getval(prefix + "ret") * getval(prefix + "freq");
	    setval(prefix+"miles",Math.round(journey));

	    miles += journey;
	} else {
	    setval(prefix+"miles",'');
	}
    }

    setval(preprefix+"_miles",miles);
    setval(preprefix+"_factor",conv);

    report.trans.bus = Math.round(miles * conv);

    setval(preprefix+"_co2",report.trans.bus);

    trans_change();
}

function coach_change() {

    var miles = 0;
    var conv = 0.03 * 8/5;

    var preprefix = "tc";

    for (var n = 1; n <= 5; n++) {

	var prefix = preprefix + n;

	var dist = getval(prefix + "dist",true);
	var num = getval(prefix + "num",true);
	
	if (dist > 0 && num > 0) {

	    var journey = dist * num * getval(prefix + "ret") * getval(prefix + "freq");
	    setval(prefix+"miles",Math.round(journey));

	    miles += journey;
	} else {
	    setval(prefix+"miles",'');
	}
    }

    setval(preprefix+"_miles",miles);
    setval(preprefix+"_factor",conv);

    report.trans.coach = Math.round(miles * conv);

    setval(preprefix+"_co2",report.trans.coach);

    trans_change();
}

function ferry_change() {

    var miles = 0;
    var conv = 0.12 * 8/5;

    var preprefix = "tf";

    for (var n = 1; n <= 5; n++) {

	var prefix = preprefix + n;

	var dist = getval(prefix + "dist",true);
	var num = getval(prefix + "num",true);
	
	if (dist > 0 && num > 0) {

	    var journey = dist * num * getval(prefix + "ret") * getval(prefix + "freq");
	    setval(prefix+"miles",Math.round(journey));

	    miles += journey;
	} else {
	    setval(prefix+"miles",'');
	}
    }

    setval(preprefix+"_miles",miles);
    setval(preprefix+"_factor",conv);

    report.trans.ferry = Math.round(miles * conv);

    setval(preprefix+"_co2",report.trans.ferry);

    trans_change();
}

function nrail_change() {

    var miles = 0;
    var conv = 0.06 * 8/5;

    var preprefix = "tnr";

    for (var n = 1; n <= 5; n++) {

	var prefix = preprefix + n;

	var dist = getval(prefix + "dist",true);
	var num = getval(prefix + "num",true);
	
	if (dist > 0 && num > 0) {

	    var journey = dist * num * getval(prefix + "ret") * getval(prefix + "freq");
	    setval(prefix+"miles",Math.round(journey));

	    miles += journey;
	} else {
	    setval(prefix+"miles",'');
	}
    }

    setval(preprefix+"_miles",miles);
    setval(preprefix+"_factor",conv);

    report.trans.nrail = Math.round(miles * conv);

    setval(preprefix+"_co2",report.trans.nrail);

    trans_change();
}

function irail_change() {

    var miles = 0;
    
    var mph = 120;
    var conv = 0.02 * 8/5;

    var preprefix = "tir";

    for (var n = 1; n <= 5; n++) {

	var prefix = preprefix + n;

	var jtime = getval(prefix + "time",true);
	var num = getval(prefix + "num",true);
	
	if (jtime > 0 && num > 0) {

	    var journey = jtime * mph * num * getval(prefix + "ret");
	    
	    setval(prefix+"miles",Math.round(journey));

	    miles += journey;
	} else {
	    setval(prefix+"miles",'');
	}
    }

    setval(preprefix+"_miles",miles);
    setval(preprefix+"_factor",conv);

    report.trans.irail = Math.round(miles * conv);

    setval(preprefix+"_co2",report.trans.irail);

    trans_change();
}

var flightfact = new Object;

flightfact.long = new Object;

flightfact.long.mph = 500;
flightfact.long.rfi = 3;
flightfact.long.eco = 0.08*8/5;
flightfact.long.pre = 0.13*8/5;
flightfact.long.bus = 0.23*8/5;
flightfact.long.fir = 0.32*8/5;

flightfact.short = new Object;

flightfact.short.mph = 400;
flightfact.short.rfi = 3;
flightfact.short.eco = 0.09*8/5;
flightfact.short.pre = 0.14*8/5;

flightfact.dom = new Object;

flightfact.dom.mph = 250;
flightfact.dom.rfi = 2;
flightfact.dom.all = 0.175*8/5;

function flight_change(ftype) {

    var carbon = 0;
    
    var fact = flightfact[ftype];
    
    var preprefix = "fl_" + ftype;

    var mph = fact.mph;
    var rfi = fact.rfi;

    var totalmiles = 0;
    var totalcarbon = 0;
	    
    for (var n = 1; n <= 5; n++) {

	var prefix =  preprefix + n;

	var jtime = getval(prefix + "time",true);

	var num = getval(prefix + "num",true);

	var dist;

	if (jtime > 0) {

	    dist = jtime * mph;

	    setval(prefix + "dist", dist);
	}

	if (jtime > 0 && num > 0) {

	    var fclass = getval(prefix + "class");

	    var miles = dist * num * getval(prefix + "ret");

	    setval(prefix + "miles", miles);

	    totalmiles += miles;
	    
	    var factor = fact[fclass] * rfi;

	    setval(prefix + "factor", Math.round(factor*100)/100);

	    var carbon = miles * factor;
	    totalcarbon += carbon;

	    setval(prefix + "carbon", Math.round(carbon));
	}

    }
    
    setval(preprefix + "miles", totalmiles);

    report.trans.flight[ftype] = Math.round(totalcarbon);
    
    setval(preprefix + "co2", report.trans.flight[ftype]);

    trans_change();
}



// -----------------

function all_change() {
    
    food_change();
    industry_change();
    electric_change();
    gas_change();
    oil_change();
    coal_change();
    wood_change();
    car_change(1);
    car_change(2);
    bike_change(1);
    taxi_change();
    bus_change();
    coach_change();
    ferry_change();
    nrail_change();
    irail_change();
    flight_change("dom");
    flight_change("short");
    flight_change("long");
    leisure_fuel_change();
}


