// number of days to calculate for
var numDays = 365;

// number of occupants in house
var numOccupants = 0;

// postcode
var homePostcode = "";

// maximum number of tips to show
var maxTipCount = 3;

// save evap air con inner html (just in case?)
var evapHTML = "";
var evapTabHTML = "";

// rates and averages used for calcs
var showerRate = {"efficient":6.7, "non-efficient":10.5};		// per minute
var bathLitres = 123.0;
var toiletLitres = {"dual":27.6, "single":38.6};		// per flush
var bucketLitres = 9.0;
var washerLitres = {"front-loader":75.0, "top-loader":152.0, "unknown":143.0};	// per wash load
var dishLitres = {"dishwasher":23.9, "sink":20.0};		// per wash
var evapLitres = 271.0;		// litres per day
var gardenLitres = {"hand":12*60, "sprinkler":12*60, "sprinkler-efficient":5*60, "drip":5, "spray":7/3*60, "spray-efficient":0.83/1.5*60};		// per hour
var hoseLitres = 12.0;		// per minute
var leaksLitres = {"drip-tap":0.8, "toilet":6.0};		// per hour
var tapLitres = {"base":10.0, "daily":20.0};		// per day
var tankLitres = 90000;			// per year

// time periods
var weeksInQuarter = 365 / 4 / 7;		// approx 13 weeks in a quarter year
var daysInQuarter = 365 / 4;				// approx 91 days in a quarter year
var daysInMonth = 365 / 12;					// approx 30.4 days in a month
var daysInDry = 215;								// approx number of days in "dry" season
var daysInWet = 150;								// approx number of days in "wet" season

// postcodes that are inland or central
//  - inland and central both have "wet" and "dry" season
//  - central have evaporative air con
var inlandPC = ["0870", "0871", "0872"];
var centralPC = ["0852", "0854", "0860", "0861", "0862"];
var darwinPC = ["0800", "0801", "0804", "0810", "0811", "0812", "0813", "0814", "0815", "0820", "0821", "0822", "0828", "0829", "0830", "0831", "0832", "0835", "0836", "0837", "0838", "0840", "0845", "0846", "0847", "0850", "0851", "0853", "0880", "0881", "0885", "0886", "0909"];

var tabSteps = {'bathroom':2, 'laundry':3, 'kitchen':4, 'other-indoor':5, 'garden':6, 'other-outdoor':7, 'leaks':8};

function saveAnswers() {
	var f = document.forms["frmWaterAudit"];
	if (f) {
		var allowchk = (f.elements['allowdata'].checked) ? 1 : 0;
		$.ajax({
			type: "POST",
		  url: "/homeAudit.php",
		  data: {action:'saveanswers', answers:$("form[name='frmWaterAudit']").serialize(), allowdata:allowchk}
		});
	}
}

function convertToYearly(val, period, daysIn) {
	if (daysIn == undefined) daysIn = 365;
	if (period == 'weekly') {
		//return val * weeksInQuarter / daysInQuarter * daysIn;
		return val * 52 * (daysIn / 365);
	}
	else {	// assume daily
		return val * daysIn;
	}
}

// shower calculation - DAILY
var showerNum = showerLen = showerHeads = showerEffic = showerUsage = 0;
function calcShower(f) {
	if (f) {
		showerNum = fixNum($('input:text[name=shower-num]').val());
		showerLen = fixNum($('input:text[name=shower-length]').val());
		showerHeads = fixNum($('input:text[name=shower-showerheads]').val());
		showerEffic = fixNum($('input:text[name=shower-efficient]').val());
		showerUsage = ((showerEffic/showerHeads)*showerRate["efficient"] + ((showerHeads-showerEffic)/showerHeads)*showerRate["non-efficient"]) * showerNum * showerLen;
		
		$("#calc-shower-total").html(formatL(showerUsage));
		
		showerUsage = convertToYearly(showerUsage, 'daily');
		if (f.elements["shower-total"]) {
			f.elements["shower-total"].value = formatKL(showerUsage);
		}
		
		$("#calc-shower-total-yr").html(formatL(showerUsage));
		
	}
}

// bath calculation - WEEKLY
var bathNum = bathUsage = 0;
function calcBath(f) {
	if (f) {
		bathNum = ($('input:radio[name=bath-used]:checked').val() == "yes") ? fixNum($('input:text[name=bath-num]').val()) : 0;
		bathUsage = bathNum * bathLitres;
		
		if ($("#calc-bath-total")) {
			$("#calc-bath-total").html(formatL(bathUsage));
		}
		
		bathUsage = convertToYearly(bathUsage, 'weekly');
		if (f.elements["bath-total"]) {
			f.elements["bath-total"].value = formatKL(bathUsage);
		}
		
		if ($("#calc-bath-total-yr")) {
			$("#calc-bath-total-yr").html(formatL(bathUsage));
		}
		
	}
}

// toilet calculation - DAILY
var toiletNum = toiletDual = toiletUsage = 0;
function calcToilet(f) {
	if (f) {
		toiletNum = fixNum($('input:text[name=toilet-num]').val());
		toiletDual = fixNum($('input:text[name=toilet-dual]').val());
		numOccupants = fixNum($('input:text[name=occupants]').val());
		toiletUsage = (toiletDual/toiletNum*toiletLitres["dual"] + ((toiletNum-toiletDual)/toiletNum)*toiletLitres["single"]) * numOccupants;
		
		if ($("#calc-toilet-total")) {
			$("#calc-toilet-total").html(formatL(toiletUsage));
		}
		
		toiletUsage = convertToYearly(toiletUsage, 'daily');
		if (f.elements["toilet-total"]) {
			f.elements["toilet-total"].value = formatKL(toiletUsage);
		}
		
		if ($("#calc-toilet-total-yr")) {
			$("#calc-toilet-total-yr").html(formatL(toiletUsage));
		}
	}
}

// bathroom calculation (shower + bath + toilet)
var bathroomTotal = 0;
function calcBathroom(f) {
	calcShower(f);
	calcBath(f);
	calcToilet(f);
	bathroomTotal = showerUsage + bathUsage + toiletUsage;
	if (f.elements["bathroom-total"]) {
		f.elements["bathroom-total"].value = formatKL(bathroomTotal);
	}
}

// washing machine calculation - WEEKLY
var washType = washLoads = washLitres = washBuckets = washUsage = 0;
function calcWasher(f) {
	if (f) {
		washType = $('input:radio[name=washer-type]:checked').val();
		if (washType != "no") {
			washLoads = fixNum($('input:text[name=washer-loads]').val());
			washLitres = washerLitres[washType];
		}
		washBuckets = fixNum($('input:text[name=washer-buckets]').val());
		washUsage = (bucketLitres*washBuckets) + (washLitres*washLoads);
		
		if ($("#calc-laundry-total")) {
			$("#calc-laundry-total").html(formatL(washUsage));
		}
		
		washUsage = convertToYearly(washUsage, 'weekly');
		if (f.elements["washer-total"]) {
			f.elements["washer-total"].value = formatKL(washUsage);
		}
		
		if ($("#calc-laundry-total-yr")) {
			$("#calc-laundry-total-yr").html(formatL(washUsage));
		}
		
	}
}

// laundry calculation (washing machine)
var laundryTotal = 0;
function calcLaundry(f) {
	calcWasher(f);
	laundryTotal = washUsage;
	if (f.elements["laundry-total"]) {
		f.elements["laundry-total"].value = formatKL(laundryTotal);
	}
}

// dish washing calculation - WEEKLY
var dishNum = dishSink = dishUsage = 0;
function calcDishes(f) {
	if (f) {
		dishNum = ($('input:radio[name=dishwasher-used]:checked').val() == "yes") ? fixNum($('input:text[name=dishwasher-loads]').val()) : 0;
		dishSink = fixNum($('input:text[name=sink-loads]').val());
		dishUsage = (dishNum * dishLitres["dishwasher"]) + (dishSink * dishLitres["sink"]);
		
		if ($("#calc-kitchen-total")) {
			$("#calc-kitchen-total").html(formatL(dishUsage));
		}
		
		dishUsage = convertToYearly(dishUsage, 'weekly');
		if (f.elements["dishes-total"]) {
			f.elements["dishes-total"].value = formatKL(dishUsage);
		}
		
		if ($("#calc-kitchen-total-yr")) {
			$("#calc-kitchen-total-yr").html(formatL(dishUsage));
		}
	}
}


// kitchen calculation (dish washing)
var kitchenTotal = 0;
function calcKitchen(f) {
	calcDishes(f);
	kitchenTotal = dishUsage;
	if (f.elements["kitchen-total"]) {
		f.elements["kitchen-total"].value = formatKL(kitchenTotal);
	}
}

// evaporative air-conditioner calculation - YEARLY
var evapMonths = evapHours = evapUsage = evapTotal = 0;
function calcEvap(f) {
	if (f) {
		evapMonths = ($('input:radio[name=evap-used]:checked').val() == "yes") ? fixNum($('input:text[name=evap-months]').val()) : 0;
		evapHours = fixNum($('input:text[name=evap-hours]').val());
		evapTotal = daysInMonth * evapMonths * (evapHours/24) * evapLitres;
		if (f.elements["evap-total"]) {
			f.elements["evap-total"].value = formatKL(evapUsage);
		}
		
		if ($("#calc-evap-total-yr")) {
			$("#calc-evap-total-yr").html(formatL(evapTotal));
		}
	}
}

// general tap calculation (no questions) - DAILY
var tapsUsage = tapTotal = 0;
function calcTaps(f) {
	if (f) {
		tapUsage = (tapLitres["base"] + (numOccupants * tapLitres["daily"]));
		
		if ($("#calc-tap-total")) {
			$("#calc-tap-total").html(formatL(tapUsage));
		}
		
		tapTotal = tapUsage = convertToYearly(tapUsage, 'daily');
		if (f.elements["tap-total"]) {
			f.elements["tap-total"].value = formatKL(tapUsage);
		}
		
		if ($("#calc-tap-total-yr")) {
			$("#calc-tap-total-yr").html(formatL(tapUsage));
		}
	}
}

// garden calculation - WEEKLY
var gardenWatered = gardenTimer = false;
var gardenHand = gardenSprinkler = gardenSprinklerRate = gardenNumSprinkler = gardenDrip = gardenDripMetres = gardenSpray = gardenSprayRate = gardenSprayMetres = gardenUsage = gardenTotal = 0;
function calcGarden(f) {
	if (f) {
		gardenWatered = ($('input:radio[name=garden-used]:checked').val() == "yes") ? true : false;
		if (gardenWatered) {
			gardenHand = fixNum($('input:text[name=handwater-hours]').val());
			gardenSprinkler = fixNum($('input:text[name=sprinkler-hours]').val());
			gardenSprinklerRate = ($('input:radio[name=sprinkler-efficient]:checked').val() == "yes") ? gardenLitres["sprinkler-efficient"] : gardenLitres["sprinkler"];
			gardenNumSprinkler = fixNum($('input:text[name=sprinkler-num]').val());
			gardenTimer = ($('input:radio[name=timer-used]:checked').val() == "yes") ? true : false;
			gardenDrip = fixNum($('input:text[name=drip-hours]').val());
			gardenDripMetres = fixNum($('input:text[name=drip-metres]').val());
			gardenSpray = fixNum($('input:text[name=spray-hours]').val());
			gardenSprayRate = ($('input:radio[name=spray-efficient]:checked').val() == "yes") ? gardenLitres["spray-efficient"] : gardenLitres["spray"];
			gardenSprayMetres = fixNum($('input:text[name=spray-metres]').val());
		}
		var daysIn = (hasWetSeason(f.elements["postcode"].value)) ? daysInDry : 365;
		gardenUsage = (gardenHand * gardenLitres["hand"]) + (gardenSprinkler * gardenSprinklerRate * gardenNumSprinkler) + (gardenDrip * gardenLitres["drip"] * gardenDripMetres) + (gardenSpray * gardenSprayRate * gardenSprayMetres);
		
		if ($("#calc-handwater-total")) {
			$("#calc-handwater-total").html(formatL(gardenHand * gardenLitres["hand"]));
			$("#calc-handwater-total-yr").html(formatL(convertToYearly(gardenHand * gardenLitres["hand"], 'weekly', daysIn)));
			$("#calc-handwater-hours").html(gardenHand);
		}
		if ($("#calc-sprinkler-total")) {
			$("#calc-sprinkler-total").html(formatL(gardenSprinkler * gardenSprinklerRate * gardenNumSprinkler));
			$("#calc-sprinkler-total-yr").html(formatL(convertToYearly(gardenSprinkler * gardenSprinklerRate * gardenNumSprinkler, 'weekly', daysIn)));
			$("#calc-sprinkler-hours").html(gardenSprinkler);
			$("#calc-sprinkler-rate").html(gardenSprinklerRate);
			$("#calc-sprinkler-num").html(gardenNumSprinkler);
		}
		if ($("#calc-drip-total")) {
			$("#calc-drip-total").html(formatL(gardenDrip * gardenLitres["drip"] * gardenDripMetres));
			$("#calc-drip-total-yr").html(formatL(convertToYearly(gardenDrip * gardenLitres["drip"] * gardenDripMetres, 'weekly', daysIn)));
			$("#calc-drip-hours").html(gardenDrip);
			$("#calc-drip-metres").html(gardenDripMetres);
		}
		if ($("#calc-spray-total")) {
			$("#calc-spray-total").html(formatL(gardenSpray * gardenSprayRate * gardenSprayMetres));
			$("#calc-spray-total-yr").html(formatL(convertToYearly(gardenSpray * gardenSprayRate * gardenSprayMetres, 'weekly', daysIn)));
			$("#calc-spray-hours").html(gardenSpray);
			$("#calc-spray-rate").html(gardenSprayRate);
			$("#calc-spray-metres").html(gardenSprayMetres);
		}
		
		gardenTotal = gardenUsage = convertToYearly(gardenUsage, 'weekly', daysIn);
		
		if (f.elements["garden-total"]) {
			f.elements["garden-total"].value = formatKL(gardenUsage);
		}
	}
}

// outdoor hose running calculation - WEEKLY
var tankUsed = greywaterUsed = false;
var hoseMinutes = hoseUsage = hoseTotal = 0;
function calcHose(f) {
	if (f) {
		hoseMinutes = fixNum($('input:text[name=hose-minutes]').val());
		tankUsed = ($('input:radio[name=tank-used]:checked').val() == "yes") ? true : false;
		greywaterUsed = ($('input:radio[name=greywater-used]:checked').val() == "yes") ? true : false;
		var daysIn = (hasWetSeason(f.elements["postcode"].value)) ? daysInDry : 365;
		hoseUsage = hoseMinutes * hoseLitres;
		
		if ($("#calc-hose-total")) {
			$("#calc-hose-total").html(formatL(hoseUsage));
			$("#calc-hose-minutes").html(hoseMinutes);
		}
		
		hoseTotal = hoseUsage = convertToYearly(hoseUsage, 'weekly', daysIn);
		if (f.elements["hose-total"]) {
			f.elements["hose-total"].value = formatKL(hoseUsage);
		}
		
		if ($("#calc-hose-total-yr")) {
			$("#calc-hose-total-yr").html(formatL(hoseUsage));
		}
	}
}

// swimming pool calculation - WEEKLY
var poolUsed = poolCovered = false;
var poolMinutes = poolUsage = poolTotal = 0;
function calcPool(f) {
	if (f) {
		poolUsed = ($('input:radio[name=pool-used]:checked').val() == "yes") ? true : false;
		if (poolUsed) {
			poolCovered = ($('input:radio[name=pool-cover]:checked').val() == "yes") ? true : false;
			poolMinutes = fixNum($('input:text[name=pool-minutes]').val());
		}
		var daysIn = (hasWetSeason(f.elements["postcode"].value)) ? daysInDry : 365;
		poolUsage = poolMinutes * hoseLitres;
		if (poolUsed && !poolCovered) {
			poolUsage += 1000;
		}
		
		if ($("#calc-pool-total")) {
			$("#calc-pool-total").html(formatL(poolUsage));
		}
		
		poolTotal = poolUsage = convertToYearly(poolUsage, 'weekly', daysIn);
		if (f.elements["pool-total"]) {
			f.elements["pool-total"].value = formatKL(poolUsage);
		}
		
		if ($("#calc-pool-total-yr")) {
			$("#calc-pool-total-yr").html(formatL(poolUsage));
		}
	}
}

// drips and leaks calculation - DAILY
var leaksDrips = leaksToilets = leaksUsage = leaksTotal = 0;
function calcLeaks(f) {
	if (f) {
		leaksDrips = fixNum($('input:text[name=drip-num]').val());
		leaksToilets = fixNum($('input:text[name=leak-num]').val());
		leaksUsage = (leaksDrips * leaksLitres["drip-tap"] * 24) + (leaksToilets * leaksLitres["toilet"] * 24);
		
		if ($("#calc-leaks-total")) {
			$("#calc-leaks-total").html(formatL(leaksUsage));
		}
		
		leaksTotal = leaksUsage = convertToYearly(leaksUsage, 'daily');
		if (f.elements["leaks-total"]) {
			f.elements["leaks-total"].value = formatKL(leaksUsage);
		}
		
		if ($("#calc-leaks-total-yr")) {
			$("#calc-leaks-total-yr").html(formatL(leaksUsage));
		}
	}
}

// calculate usage
function calcUsage() {
	var f = document.forms["frmWaterAudit"];
	var indoorTotal = outdoorTotal = miscTotal = total = 0;
	numOccupants = fixNum($('input:text[name=occupants]').val());
	// indoor
	calcBathroom(f);
	calcLaundry(f);
	calcKitchen(f);
	calcEvap(f);
	calcTaps(f);
	indoorTotal = bathroomTotal + laundryTotal + kitchenTotal + evapTotal + tapTotal + leaksTotal;
	total += indoorTotal;
	if (f.elements["indoor-usage"]) {
		f.elements["indoor-usage"].value = formatKL(indoorTotal);
	}
	// outdoor
	calcGarden(f);
	calcHose(f);
	calcPool(f);
	outdoorTotal = gardenTotal + hoseTotal + poolTotal;
	total += outdoorTotal
	if (f.elements["outdoor-usage"]) {
		f.elements["outdoor-usage"].value = formatKL(outdoorTotal);
	}
	// misc
	calcLeaks(f);
	miscTotal = leaksTotal;
	total += miscTotal;
	// other indoor areas
	otherIndoorTotal = evapTotal + tapTotal + leaksTotal;
	
	// household total for num days
	if (f.elements["total-usage"]) {
		f.elements["total-usage"].value = formatKL(total);
	}
	// usage per person per day
	if ($("#per-person")) {
		var l = formatL(total / numDays / numOccupants);
		$("#per-person").html(l);
	}
	if ($("#per-person-buckets")) {
		var b = formatL(total / numDays / numOccupants / bucketLitres);
		$("#per-person-buckets").html(b);
	}
	// bill cost
	if ($("#per-person-dollars")) {
		var d = formatDollars(0.899 * total / 1000 + 0.3755 * 365);
		$("#per-person-dollars").html(d);
	}
	updateTips(f);
}

// update the tips to be displayed based on data entered
function updateTips(f) {
	var tip;
	var tipCount = 0;
	$(".tip").hide();
	// rainwater tanks
	if (tankUsed) {
		$(".water-tank").show();
		$(".no-water-tank").hide();
	}
	else {
		$(".water-tank").hide();
		$(".no-water-tank").show();
	}
	// greywater
	
	if (tipCount >= maxTipCount) return;
	// efficient showerheads
	tip = $("#tip-shower-efficient");
	if (tip) {
		if (showerHeads > 0 && showerEffic < showerHeads) {
			$("#tip-shower-efficient").show();
			tipCount ++;
			if (tipCount >= maxTipCount) return;
		}
	}
	// top loading washing machine
	tip = $("#tip-front-loader");
	if (tip) {
		if (washType != "front-loader") {
			$("#tip-front-loader").show();
			tipCount ++;
			if (tipCount >= maxTipCount) return;
		}
	}
	// large lawn
	tip = $("#tip-large-lawn");
	if (tip) {
		if (gardenWatered) {
			$("#tip-large-lawn").show();
			tipCount ++;
			if (tipCount >= maxTipCount) return;
		}
	}
	// dripping taps
	tip = $("#tip-drip-num");
	if (tip) {
		if (leaksDrips > 0) {
			$("#tip-drip-num").show();
			tipCount ++;
			if (tipCount >= maxTipCount) return;
		}
	}
	// leaking toilets
	tip = $("#tip-leak-num");
	if (tip) {
		if (leaksToilets > 0) {
			$("#tip-leak-num").show();
			tipCount ++;
			if (tipCount >= maxTipCount) return;
		}
	}
	// pool cover
	tip = $("#tip-pool-cover");
	if (tip) {
		if (poolUsed && !poolCovered) {
			$("#tip-pool-cover").show();
			tipCount ++;
			if (tipCount >= maxTipCount) return;
		}
	}
	// tap timer
	tip = $("#tip-tap-timer");
	if (tip) {
		if (!gardenTimer) {
			$("#tip-tap-timer").show();
			tipCount ++;
			if (tipCount >= maxTipCount) return;
		}
	}
}

// set the "average" number of wash loads bases on number of occupants
function setWashLoads(chk) {
	var f = document.forms["frmWaterAudit"];
	var el = f.elements["washer-loads"];
	if (chk) {
		numOccupants = fixNum(f.elements["occupants"].value);
		if (f && el) {
			if (numOccupants > 0) {
				switch (numOccupants) {
					case 1:
						el.value = 3;
						break;
					case 2:
						el.value = 4.2;
						break;
					case 3:
						el.value = 6.6;
						break;
					case 4:
						el.value = 6.7;
						break;
					default:
						el.value = 10.7;
				}
			}
			else {
				// no occupants, can't estimate the average washes
			}
		}
	}
	else {
		if (el) {
			el.value = 0;
		}
	}
}

function hasWetSeason(postcode) {
	if (postcode != "") {
		if (jQuery.inArray(postcode, darwinPC) != -1) {
			return true;
		}
	}
	return false;
}

function hasEvapAir(postcode) {
	if (postcode != "") {
		if (jQuery.inArray(postcode, centralPC) != -1) {
			return true;
		}
	}
	return false;
}

function askHowMany(chkname, id, multi) {
	if (multi != undefined && multi == true) {
		if ($('input:radio[name='+chkname+']:checked').val() != "no") {
			$('#'+id).show();
			$('#next-'+id).show();
			$('#next-'+id+'-skip').hide();
			$('#back-'+id).show();
			$('#back-'+id+'-skip').hide();
		}
		else {
			$('#'+id).hide();
			$('#next-'+id).hide();
			$('#next-'+id+'-skip').show();
			$('#back-'+id).hide();
			$('#back-'+id+'-skip').show();
		}
	}
	else if ($('input:radio[name='+chkname+']:checked').val() == "yes") {
		$('#'+id).show();
		$('#next-'+id).show();
		$('#next-'+id+'-skip').hide();
		$('#back-'+id).show();
		$('#back-'+id+'-skip').hide();
	}
	else if ($('input:radio[name='+chkname+']:checked').val() != "no" && fixNum($('input:text[name='+chkname+']').val()) > 0) {
		$('#'+id).show();
		$('#next-'+id).show();
		$('#next-'+id+'-skip').hide();
		$('#back-'+id).show();
		$('#back-'+id+'-skip').hide();
	}
	else {
		$('#'+id).hide();
		$('#next-'+id).hide();
		$('#next-'+id+'-skip').show();
		$('#back-'+id).hide();
		$('#back-'+id+'-skip').show();
	}
}

function fixNum(str) {
	if (str != "") {
		try {
			var num = parseFloat(str);
			if (num != undefined && !isNaN(num)) {
				return num;
			}
		}
		catch (err) { alert(err); }
	}
	return 0;
}

function formatKL(l, prec) {
	if (l > 0) {
		var num = new Number(l / 1000.0);
		return (prec != undefined && prec >= 0) ? num.toFixed(prec) : num.toFixed(2);
	}
	return 0;
}

function formatL(l) {
	if (l > 0) {
		var num = new Number(l);
		return num.toFixed(2);
	}
	return 0;
}

function formatPercent(i) {
	if (i > 0) {
		var num = new Number(i);
		return num.toFixed(1) + "%";
	}
	return "0%";
}

function formatDollars(val) {
	if (val > 0) {
		var num = new Number(val);
		return num.toFixed(0);
	}
	return "0";
}

// validate each step as we go
function validateForm(step, next, skip) {
	var f = document.forms["frmWaterAudit"];
	var ok = true;
	if (f) {
		if (step == "intro") {
			if (fixNum(f.elements["occupants"].value) < 1) {
				alert("Please enter how many people are living in your home");
				f.elements["occupants"].focus();
				ok = false;
			}
			if (f.elements["postcode"].value == "") {
				alert("Please provide your postcode");
				f.elements["postcode"].focus();
				ok = false;
			}
			homePostcode = f.elements["postcode"].value;
			updatePostcode();
		}
		else if (step == "shower") {
			var ne = {"shower-num":"Please enter how many showers are taken in the house each day", "shower-length":"Please enter the average length of the shower in minutes", "shower-showerheads":"Please enter how many showerheads are in the house", "shower-efficient":"Please enter how many showerheads are efficient i.e. AAA or 3-Stars"};
			for (var n in ne) {
				if (f.elements[n].value == "" || fixNum(f.elements[n].value) < 0) {
					alert(ne[n]);
					f.elements[n].focus();
					ok = false;
				}
			}
			if (fixNum(f.elements["shower-efficient"].value) > fixNum(f.elements["shower-showerheads"].value)) {
				alert("You have entered more efficient showerheads than you have in total in your house - please check the numbers you have entered.");
				f.elements["shower-efficient"].focus();
				ok = false;
			}
		}
		else if (step == "bath") {
			if ($('input:radio[name=bath-used]:checked').val() == "yes" && fixNum(f.elements["bath-num"].value) < 0) {
				alert("Please enter how many times a week the bath is used");
				f.elements["bath-num"].focus();
				ok = false;
			}
		}
		else if (step == "toilet") {
			var ne = {"toilet-num":"Please enter how toilets are in your house", "toilet-dual":"Please enter how many of the toilets are dual flush"};
			for (var n in ne) {
				if (f.elements[n].value == "" || fixNum(f.elements[n].value) < 0) {
					alert(ne[n]);
					f.elements[n].focus();
					ok = false;
				}
			}
			if (fixNum(f.elements["toilet-dual"].value) > fixNum(f.elements["toilet-num"].value)) {
				alert("You have entered more dual flush toilets than you have in total in your house - please check the numbers you have entered.");
				f.elements["shower-efficient"].focus();
				ok = false;
			}
		}
		else if (step == "laundry") {
			if ($('input:radio[name=washer-type]:checked').val() != "no" && fixNum(f.elements["washer-loads"].value) < 1) {
				alert("Please enter the number of loads you put in the washing machine per week");
				f.elements["washer-loads"].focus();
				ok = false;
			}
		}
		else if (step == "kitchen") {
			if ($('input:radio[name=dishwasher-used]:checked').val() == "yes" && fixNum(f.elements["dishwasher-loads"].value) < 1) {
				alert("Please enter how many loads you wash in the dishwasher per week");
				f.elements["dishwasher-loads"].focus();
				ok = false;
			}
			if (fixNum(f.elements["sink-loads"].value) < 0) {
				alert("Please enter how many times you wash using the sink per week");
				f.elements["sink-loads"].focus();
				ok = false;
			}
		}
		else if (step == "evap") {
			if ($('input:radio[name=evap-used]:checked').val() == "yes") {
				if (fixNum(f.elements["evap-months"].value) < 0) {
					alert("Please enter how many months of the year you would you use your evaporative air conditioner");
					f.elements["evap-months"].focus();
					ok = false;
				}
				if (fixNum(f.elements["evap-hours"].value) < 0) {
					alert("Please enter how many hours each day your evaporative air conditioner would be on");
					f.elements["evap-hours"].focus();
					ok = false;
				}
			}
		}
		else if (step == "watering") {
			if ($('input:radio[name=garden-used]:checked').val() == "yes") {
				if (fixNum(f.elements["handwater-hours"].value) < 0) {
					alert("Please enter how many hours each day you would hand water your garden each week");
					f.elements["handwater-hours"].focus();
					ok = false;
				}
			}
		}
		else if (step == "sprinklers") {
			if ($('input:radio[name=garden-used]:checked').val() == "yes") {
				if (fixNum(f.elements["sprinkler-hours"].value) < 0) {
					alert("Please enter how many hours each day you would use a sprinkler on your garden each week");
					f.elements["sprinkler-hours"].focus();
					ok = false;
				}
				else if (fixNum(f.elements["sprinkler-hours"].value) > 0 && fixNum(f.elements["sprinkler-num"].value) < 1) {
					alert("Please enter how many sprinklers you use on your garden");
					f.elements["sprinkler-num"].focus();
					ok = false;
				}
			}
		}
		else if (step == "drip-irrigation") {
			if ($('input:radio[name=drip-used]:checked').val() == "yes") {
				if (fixNum(f.elements["drip-hours"].value) < 0) {
					alert("Please enter how many hours each week your drip irrigation is switched on");
					f.elements["drip-hours"].focus();
					ok = false;
				}
				if (fixNum(f.elements["drip-metres"].value) < 0) {
					alert("Please enter how many metres of irrigation hose your drip system has");
					f.elements["drip-metres"].focus();
					ok = false;
				}
			}
		}
		else if (step == "spray-irrigation") {
			if ($('input:radio[name=spray-used]:checked').val() == "yes") {
				if (fixNum(f.elements["spray-hours"].value) < 0) {
					alert("Please enter how many hours each week your spray irrigation is switched on");
					f.elements["spray-hours"].focus();
					ok = false;
				}
				if (fixNum(f.elements["spray-metres"].value) < 0) {
					alert("Please enter how many metres of irrigation hose your spray system has");
					f.elements["spray-metres"].focus();
					ok = false;
				}
			}
		}
		else if (step == "hose") {
			if (fixNum(f.elements["hose-minutes"].value) < 0) {
				alert("Please enter how many minutes each week the hose would be running");
				f.elements["hose-minutes"].focus();
				ok = false;
			}
		}
		else if (step == "pool") {
			if ($('input:radio[name=pool-used]:checked').val() == "yes") {
				if (fixNum(f.elements["pool-minutes"].value) < 0) {
					alert("Please enter how many minutes each week you would use a hose to top up your pool");
					f.elements["pool-minutes"].focus();
					ok = false;
				}
			}
		}
		else if (step == "leaks") {
			if (fixNum(f.elements["drip-num"].value) < 0) {
				alert("Please enter how many, if any, dripping taps there are in your home");
				f.elements["drip-num"].focus();
				ok = false;
			}
			else if (fixNum(f.elements["leak-num"].value) < 0) {
				alert("Please enter how many, if any, leaking toilets there are in your home");
				f.elements["leak-num"].focus();
				ok = false;
			}
			else {
				$('.step').addClass('done');
				$('.step').unbind('click');
				finaliseResults();
				saveAnswers();
				return;
			}
		}
		
		// if current step completed, go to next
		if (ok) {
			if (next != undefined && next != "") {
				var currDiv = $("#panel-part-"+step);
				var nextDiv = $("#panel-part-"+next);
				if (currDiv && nextDiv) {
					currDiv.fadeOut(500, function() { 
						nextDiv.fadeIn(500);
					});
				}
			}
			else if (skip != undefined && skip > 0) {
				$(".stripNav ul li.tab"+(skip)+" a").trigger('click');
				markProgress(skip-1);
			}
			else {
				var pClass = $(".stripNav a.current").parent().attr("class");
				if (pClass != undefined && pClass != "") {
					var pid = fixNum(pClass.replace(/tab/, ""));
					if (pid > 0) {
						$(".stripNav ul li.tab"+(pid+1)+" a").trigger('click');
						markProgress(pid);
					}
				}
			}
		}
	}
}

function stepBack(step, back, tab) {
	if (step != "" && back != "") {
		if (tab != undefined && tab > 1) {
			var prevTab = tab - 1;
			$("#panel-"+prevTab+" .first").hide();
			$("#panel-part-"+back).show();
			$(".stripNav ul li.tab"+prevTab+" a").trigger('click');
			markProgress(prevTab);
		}
		else {
			var currDiv = $("#panel-part-"+step);
			var backDiv = $("#panel-part-"+back);
			if (currDiv && backDiv) {
				currDiv.fadeOut(500, function() { 
					backDiv.fadeIn(500);
				});
			}
		}
	}
}

function finaliseResults() {
	$("#questionContainer").hide();
	$("#resultsContainer").show();
	
	markProgress(0);
	calcUsage();
	drawUsageGraph();
}

function markProgress(pin) {
	$('.step').removeClass('done');
	$('.step').removeClass('active');
	$('.step').unbind('click');
	for (var s in tabSteps) {
		if (tabSteps[s] > pin) {
			if (pin > 0) $('#step-'+s).addClass('active');
			break;
		}
		else {
			$('#step-'+s).addClass('done');
			$('#step-'+s).bind('click', function() {
				try {
					var stepId = (this.id).replace(/step-/, "");
					gotoPanel(tabSteps[stepId]);
				}
				catch (err) { }
			});
		}
	}
}

function resetFadedSteps() {
	$(".panel-part").hide();
	$(".panel-part.first").show();
}

var showerWithTank = toiletWithTank = bathroomWithTank = laundryWithTank = litresFromTank = 0;
function displaySaving(what) {
	if (what == 'tank') {
		// reduce bathroom and laundry by % of 90kL per year
		var t = bathroomTotal + laundryTotal;
		if (t >= tankLitres) {
			showerWithTank = (showerUsage+bathUsage) - ((showerUsage+bathUsage) / t * tankLitres);
			toiletWithTank = toiletUsage - (toiletUsage / t * tankLitres);
			bathroomWithTank = bathroomTotal - (bathroomTotal / t * tankLitres);
			laundryWithTank = laundryTotal - (laundryTotal / t * tankLitres);
			litresFromTank = tankLitres;
		}
		else {
			litresFromTank = t;
		}
		drawUsageGraph();
	}
	else if (what == 'greywater') {
		
	}
}

function toggleSaving(what) {
	var ischeck = ($('input:checkbox[name=toggle-'+what+']:checked').val() == what) ? true : false;
	if (ischeck) {
		displaySaving(what);
	}
	else {
		litresFromTank = 0;
		drawUsageGraph();
	}
}

// draw graph of water usage
function drawUsageGraph() {
	var pieData = pieLegend = "";
	pieLegend += drawLegend("Garden", formatPercent((gardenTotal+hoseTotal)/total*100), '#43949c');
	pieLegend += drawLegend("Laundry", formatPercent(((litresFromTank > 0) ? laundryWithTank : laundryTotal)/total*100), '#a3c8c9');
	pieLegend += drawLegend("Kitchen", formatPercent(kitchenTotal/total*100), '#7988b2');
	pieLegend += drawLegend("Bathroom", formatPercent(((litresFromTank > 0) ? bathroomWithTank : bathroomTotal)/total*100), '#193f75');
	pieLegend += drawLegend("Other indoor", formatPercent(otherIndoorTotal/total*100), '#ccc');
	pieLegend += drawLegend("Pool", formatPercent(poolTotal/total*100), '#ca90bc');
	if (litresFromTank > 0) {
		pieLegend += drawLegend("Water tank", formatPercent(litresFromTank/total*100), '#ffcc00');
		//pieData = (gardenTotal+hoseTotal)+','+laundryWithTank+','+kitchenTotal+','+bathroomWithTank+','+poolTotal+','+otherIndoorTotal+','+litresFromTank;
		pieData = [(gardenTotal+hoseTotal), laundryWithTank, kitchenTotal, bathroomWithTank, poolTotal, otherIndoorTotal, litresFromTank];
	}
	else {
		//pieData = (gardenTotal+hoseTotal)+','+laundryTotal+','+kitchenTotal+','+bathroomTotal+','+otherIndoorTotal+','+poolTotal;
		pieData = [(gardenTotal+hoseTotal), laundryTotal, kitchenTotal, bathroomTotal, otherIndoorTotal, poolTotal];
	}
	pieLegend += '<br class="clear" />';
	
	var avgData = [65,7,7,17,4];
	var avgLegend = "";
	avgLegend += drawLegend("Garden", formatPercent(65), '#43949c');
	avgLegend += drawLegend("Laundry", formatPercent(7), '#a3c8c9');
	avgLegend += drawLegend("Kitchen", formatPercent(7), '#7988b2');
	avgLegend += drawLegend("Bathroom", formatPercent(17), '#193f75');
	avgLegend += drawLegend("Pool", formatPercent(4), '#ca90bc');
	avgLegend += '<br class="clear" />';
	
	var barData = "";
	if (litresFromTank > 0) {
		barData = [(gardenTotal+hoseTotal),laundryWithTank,kitchenTotal,showerWithTank,toiletWithTank,otherIndoorTotal,poolTotal];
	}
	else {
		barData = [(gardenTotal+hoseTotal),laundryTotal,kitchenTotal,(showerUsage+bathUsage),toiletUsage,otherIndoorTotal,poolTotal];
	}
	var barYAxis = getAxisVals(barData, 3, 1000);
	var barLegend = "";
	var barWidth = 70;
	var barSpacing = 10;
	barLegend += drawBarLabel("Garden<br />("+formatKL((gardenTotal+hoseTotal), 0)+" kL)", barWidth, barSpacing);
	var l = (litresFromTank > 0) ? laundryWithTank : laundryTotal;
	barLegend += drawBarLabel("Laundry<br />("+formatKL(l, 0)+" kL)", barWidth, barSpacing);
	barLegend += drawBarLabel("Kitchen<br />("+formatKL(kitchenTotal, 0)+" kL)", barWidth, barSpacing);
	var sb = (litresFromTank > 0) ? showerWithTank : (showerUsage+bathUsage);
	barLegend += drawBarLabel("Shower &amp; bath<br />("+formatKL(sb, 0)+" kL)", barWidth, barSpacing);
	var t  = (litresFromTank > 0) ? toiletWithTank : toiletUsage;
	barLegend += drawBarLabel("Toilet<br />("+formatKL(t , 0)+" kL)", barWidth, barSpacing);
	barLegend += drawBarLabel("Other indoor<br />("+formatKL((otherIndoorTotal), 0)+" kL)", barWidth, barSpacing);
	barLegend += drawBarLabel("Pool<br />("+formatKL((poolTotal), 0)+" kL)", barWidth, barSpacing);
	if (litresFromTank > 0) {
		barLegend += drawBarLabel("Water tank<br />("+formatKL(litresFromTank, 0)+")", barWidth, barSpacing);
		barData.push(litresFromTank);
	}
	barLegend += '<br class="clear" />';
	
	var region = "NT";
	
	$("#percent-usage").html('<div class="graph-heading">Your usage</div><span id="your-usage" class="usage-pie" style="display:block;width:150px;height:150px;"></span><span id="your-usage-legend" class="pie-legend">'+pieLegend+'</span><br class="clear" />');
	$("#average-usage").html('<div class="graph-heading">Average '+region+' usage</div><span id="avg-usage" class="usage-pie" style="display:block;width:150px;height:150px;"></span><span id="average-usage-legend" class="pie-legend">'+avgLegend+'</span><br class="clear" />');
	$("#litres-usage").html('<div class="graph-heading">Your yearly usage in kilolitres (kL)</div><span id="your-usage-litres-yaxis" class="y-axis" style="width:20px;height:150px;">'+barYAxis+'</span><span class="the-graph"><span id="your-usage-litres" class="usage-bar" style="width:500px;height:150px;"></span><span id="your-usage-litres-labels" class="bar-labels">'+barLegend+'</span></span>');
	
	$("#your-usage").sparkline(pieData, {composite:false, type:"pie", height:"150px", offset:-90, sliceColors:['#43949c', '#a3c8c9', '#7988b2', '#193f75', '#ccc', '#ca90bc', '#ffcc00']});
	$("#avg-usage").sparkline(avgData, {composite:false, type:"pie", height:"150px", offset:-90, sliceColors:['#43949c', '#a3c8c9', '#7988b2', '#193f75', '#ca90bc']});
	$("#your-usage-litres").sparkline(barData, {type:"bar", height:"150px", chartRangeMin:0, barColor:'#396fa0', barWidth:70, barSpacing:10, barColorCustom:['#43949c', '#a3c8c9', '#7988b2', '#193f75', '#193f75', '#ccc', '#ca90bc', '#ffcc00']});
	
	$("#footercontainer").hide();
	
	$.sparkline_display_visible();
	
	$("#footercontainer").show();
}

function drawLegend(title, val, bgcolor) {
	return '<span class="pie-legend-item"><span class="pie-legend-key" style="width:1px;height:1px;background-color:'+bgcolor+';"><img src="/interface/images/blank.gif" width="10" height="10" /></span>'+title+' '+val+'</span>';
}

function drawBarLabel(title, width, spaceR) {
	return '<span class="bar-label-item" style="width:'+width+'px; margin-right:'+spaceR+'px">'+title+'</span>';
}

function getAxisVals(vals, steps, ratio) {
	if (vals && vals.length > 0) {
		var max = 0;
		for (var i=0; i<vals.length; i++) {
			if (vals[i] > max) max = vals[i];
		}
		var maxInt = Math.ceil(max);
		var incr = max / steps;
		var axis = '<span class="axis-val">0 kL</span>';
		for (var i=1; i<=steps; i++) {
			axis = '<span class="axis-val">'+Math.round(incr*i/ratio)+' kL</span>' + axis;
		}
		return axis;
	}
	return "";
}

// update for postcode entered
function updatePostcode() {
	$(".stripNav ul li.tab5").addClass("central");
	var isWetSeason = (hasWetSeason(homePostcode)) ? true : false;
	if (isWetSeason) {
		$(".wet-season").show();
		$(".no-wet-season").hide();
	}
	else {
		$(".wet-season").hide();
		$(".no-wet-season").show();
	}
}

function gotoPanel(id) {
	if (id != "") {
		resetFadedSteps();
		$(".stripNav ul li.tab"+id+" a").trigger('click');
		markProgress(id-1);
	}
}

function fillDefault(hi) {
	var f = document.forms["frmWaterAudit"];
	if (f) {
		f.elements["occupants"].value = (hi) ? "4" : "2";
		f.elements["postcode"].value = (hi) ? "0800" : "0860";
		f.elements["shower-num"].value = (hi) ? "4" : "2";
		f.elements["shower-length"].value = (hi) ? "6" : "4";
		f.elements["shower-showerheads"].value = (hi) ? "2" : "1";
		f.elements["shower-efficient"].value = (hi) ? "0" : "1";
		if (hi) {
			f.elements["bath-used"][0].checked = true;	
			f.elements["bath-used"][1].checked = false;
		} else {
			f.elements["bath-used"][0].checked = false;	
			f.elements["bath-used"][1].checked = true;
		}
		f.elements["bath-num"].value = (hi) ? "1" : "0";
		f.elements["toilet-num"].value = (hi) ? "2" : "1";
		f.elements["toilet-dual"].value = (hi) ? "1" : "1";
		if (hi) {
			f.elements["washer-type"][0].checked = true;	
			f.elements["washer-type"][1].checked = false;
		} else {
			f.elements["washer-type"][0].checked = false;	
			f.elements["washer-type"][1].checked = true;
		}
		f.elements["washer-loads"].value = (hi) ? "8" : "4";
		f.elements["washer-buckets"].value = (hi) ? "5" : "2";
		f.elements["dishwasher-loads"].value = (hi) ? "7" : "3";
		f.elements["sink-loads"].value = (hi) ? "2" : "5";
		var pcode = f.elements["postcode"].value;
		if (jQuery.inArray(pcode, centralPC)) {
			f.elements["evap-used"][0].checked = true;	
			f.elements["evap-used"][1].checked = false;
			f.elements["evap-months"].value = "2";
			f.elements["evap-hours"].value = "4";
		} else {
			f.elements["evap-used"][0].checked = false;	
			f.elements["evap-used"][1].checked = true;
		}
		if (hi) {
			f.elements["garden-used"][0].checked = true;	
			f.elements["garden-used"][1].checked = false;
			f.elements["drip-used"][0].checked = true;	
			f.elements["drip-used"][1].checked = false;
			f.elements["spray-used"][0].checked = true;	
			f.elements["spray-used"][1].checked = false;
		} else {
			f.elements["garden-used"][0].checked = true;	
			f.elements["garden-used"][1].checked = true;
			f.elements["drip-used"][0].checked = false;	
			f.elements["drip-used"][1].checked = true;
			f.elements["spray-used"][0].checked = false;	
			f.elements["spray-used"][1].checked = true;
		}
		askHowMany('garden-used', 'row-garden-hours');
		f.elements["handwater-hours"].value = (hi) ? "8" : "1";
		f.elements["sprinkler-hours"].value = (hi) ? "2" : "0";
		f.elements["sprinkler-num"].value = (hi) ? "2" : "0";
		askHowMany('sprinkler-num', 'row-sprinkler-more');
		f.elements["drip-hours"].value = (hi) ? "6" : "0";
		f.elements["drip-metres"].value = (hi) ? "10" : "0";
		f.elements["spray-hours"].value = (hi) ? "1" : "0";
		f.elements["spray-metres"].value = (hi) ? "15" : "0";
		askHowMany('drip-used', 'row-drip-hours');
		askHowMany('spray-used', 'row-spray-hours');
		f.elements["hose-minutes"].value = (hi) ? "90" : "15";
		if (hi) {
			f.elements["tank-used"][0].checked = false;	
			f.elements["tank-used"][1].checked = true;
			f.elements["pool-used"][0].checked = true;	
			f.elements["pool-used"][1].checked = false;
			f.elements["pool-cover"][0].checked = false;
			f.elements["pool-cover"][1].checked = true;
			f.elements["pool-filter"][0].checked = false;	
			f.elements["pool-filter"][1].checked = true;
		} else {
			f.elements["tank-used"][0].checked = true;	
			f.elements["tank-used"][1].checked = false;
			f.elements["pool-used"][0].checked = false;	
			f.elements["pool-used"][1].checked = true;
			f.elements["pool-cover"][0].checked = true;	
			f.elements["pool-cover"][1].checked = false;
			f.elements["pool-filter"][0].checked = true;	
			f.elements["pool-filter"][1].checked = false;
		}
		askHowMany('pool-used', 'row-pool-minutes');
		f.elements["pool-minutes"].value = (hi) ? "60" : "0";
		f.elements["drip-num"].value = (hi) ? "2" : "0";
		f.elements["leak-num"].value = (hi) ? "1" : "0";
	}
}
