//script for the calculator
function noMod(obj) {
	//alt = document.getElementById("calcform").in_hours;

	obj.blur();
	//if( navigator.appName == "Microsoft Internet Explorer" )
		//alt.focus();
	//alert( "No modifications are allowed to this field." );
}

function isNum( obj ) {
	var digits='.0123456789';
	var dfmt='$,';
	var temp;
	var result =  "";

	for( var i=0; i<obj.value.length; i++) {
		temp = obj.value.substring(i, i + 1);
		// Strip out number formatting chars
		if( dfmt.indexOf(temp) != -1 )
			continue;
		if( digits.indexOf(temp) == -1 ) {
			alert( "Invalid characters found in numeric field. Please check your entry." );
			obj.value = "";
			obj.focus();
			return false;
		}
		result += temp;
	}
	// Reset new stripped value
	obj.value = result;
	return true;
}

function chkNum(obj, type) {
	var err = 0;

	if( obj.value == "" ) return false;
	if( ! isNum(obj) ) return false;

	// Is it a double?
	if( (p=obj.value.indexOf('.')) < 0 )
		isDouble = 0;
	else
		isDouble = 1;

	// How many decimal places?
	if( isDouble ) {
		s = obj.value.substring(p + 1);
		nplace = s.length;
	}

	// Set and check value range
	switch (type) {
		case 3:
		case 2:
			min = 0;
			max = 99999999999;
			break;
		case 4:
			min = 0;
			max = 12.0;
			break;
		case 5:
			min = 1;
			max = 999999;
			break;
		case 7:
			min = 1;
			max = 1440;
			break;
		case 8:
			min = 1;
			max = 365;
			break;
	}

	if( type == 3 && obj.value <= min  ) {
	  alert( "Value must be greater than " + min + ".");
        obj.value = "";
        obj.focus();
        return false;
	}
	else if( obj.value > max || obj.value < min )
        {
	  alert( "Value must be in the range " + min + " - " + max );
        obj.value = "";
        obj.focus();
        return false;
        }

	// valid range whole numbers
	switch (type) {
		case 5:
		case 7:
		case 8:
			if( isDouble )  {
				err = 1;
				msg = "Number must be a whole number.";
			}
			break;
		case 4:
			if( isDouble && nplace > 1)  {
				err = 1;
				msg = "Only up to 1 decimal place is allowed."
			}
			break;
		case 1:
			if( isDouble && nplace > 2 )  {
				err = 1;
				msg = "Only up to 2 decimal places are allowed."
			}
			break;

		case 2:
			if( isDouble && nplace > 3 )  {
				err = 1;
				msg = "Only up to 3 decimal places are allowed."
			}
			break;
	}

	if( err ) {
		alert( msg );
		obj.value = "";
		obj.focus();
		return false;
	} else
		return true;
}

function precalc() {
	frm = document.getElementById("calcform");
	if (frm.in_gal.value && (frm.in_sec.value || frm.in_min.value)) {
		if (frm.in_gal.value == "") frm.in_gal.value = 0;
		if (frm.in_sec.value == "") frm.in_sec.value = 0;
		if (frm.in_min.value == "") frm.in_min.value = 0;
		frm.in_gpm1.value = roundit(frm.in_gal.value / (+frm.in_min.value + +(frm.in_sec.value / 60)), 1);
		frm.in_flow.value = frm.in_gpm1.value;
	}
}

function calc() {
	frm = document.getElementById("calcform");

	SetEnergyDefaults();

// Water Use Only
	// Calculate Flow
	frm.perf_flow.value = frm.in_flow.value;

	frm.perf_baflow.value = 1.5;

	// Calculate Annual Water Use
	frm.perf_annualwateruse.value = calcAnnualWaterUse (frm.in_flow.value);
	frm.perf_baannualwateruse.value = calcAnnualWaterUse (frm.perf_baflow.value);

	// Calculate Annual Water Costs
	frm.perf_annualwatercost.value = calcAnnualWaterCost (frm.perf_annualwateruse.value);
	frm.perf_baannualwatercost.value = calcAnnualWaterCost (frm.perf_baannualwateruse.value);

	// Calculate Lifetime Water Costs
	frm.perf_lifewatercost.value = calcLifeWaterCost (frm.perf_annualwatercost.value);
	frm.perf_balifewatercost.value = calcLifeWaterCost (frm.perf_baannualwatercost.value);

// With Gas Water Heating
	// Calculate Annual Gas Use
	frm.perf_annualgasuse.value = calcAnnualGasUse (frm.perf_annualwateruse.value);
	frm.perf_baannualgasuse.value = calcAnnualGasUse (frm.perf_baannualwateruse.value);

	// Calculate Annual Gas Costs
	frm.perf_annualgascost.value = calcAnnualGasCost (frm.perf_annualgasuse.value);
	frm.perf_baannualgascost.value = calcAnnualGasCost (frm.perf_baannualgasuse.value);

	// Calculate Lifetime Gas Costs
	frm.perf_lifegascost.value = calcLifeGasCost (frm.perf_annualgascost.value);
	frm.perf_balifegascost.value = calcLifeGasCost (frm.perf_baannualgascost.value);

	// Calculate Lifetime Gas and Water Cost Savings
	frm.perf_bagaslifesave.value = calcGasLifeSave (frm.perf_balifegascost.value,frm.perf_balifewatercost.value);

	// Calculate Lifetime Energy and Gas Cost Saving for "n" showerheads
	frm.perf_gasquantity.value = commaFormat(frm.in_quantity.value);
	frm.perf_bagasn.value = commaFormat(calcN(frm.perf_bagaslifesave.value));

// With Electric Water Heating
	// Calculate Annual Electric Use
	frm.perf_annualelectricuse.value = calcAnnualElectricUse (frm.perf_annualwateruse.value);
	frm.perf_baannualelectricuse.value = calcAnnualElectricUse (frm.perf_baannualwateruse.value);

	// Calculate Annual Electric Costs
	frm.perf_annualelectriccost.value = calcAnnualElectricCost (frm.perf_annualelectricuse.value);
	frm.perf_baannualelectriccost.value = calcAnnualElectricCost (frm.perf_baannualelectricuse.value);

	// Calculate Lifetime Electric Costs
	frm.perf_lifeelectriccost.value = calcLifeElectricCost (frm.perf_annualelectricuse.value);
	frm.perf_balifeelectriccost.value = calcLifeElectricCost (frm.perf_baannualelectricuse.value);

	// Calculate Lifetime Electric and Water Cost Savings
	frm.perf_baelectriclifesave.value = calcElectricLifeSave (frm.perf_balifeelectriccost.value,frm.perf_balifewatercost.value);

	// Calculate Lifetime Energy and Water Cost Savings for "n" showerheads
	frm.perf_electricquantity.value = commaFormat(frm.in_quantity.value);
	frm.perf_baelectricn.value = commaFormat(calcN(frm.perf_baelectriclifesave.value));

	// Summary Information

	frm.summary_electriclifesave.value = frm.perf_baelectriclifesave.value;
	frm.summary_gaslifesave.value = frm.perf_bagaslifesave.value;

	// Jump to Output Section
	window.location = "#output";
}

function calcAnnualWaterUse(flow) {
	frm = document.getElementById("calcform");
	return precision(flow * frm.in_minutes.value * frm.in_days.value);
}

function calcAnnualWaterCost(wateruse) {
	frm = document.getElementById("calcform");
	return precision(wateruse * frm.in_watercost.value / 1000);
}

function calcLifeWaterCost(cost) {
	frm = document.getElementById("calcform");
	return precision(cost * 8.40);
}

function calcAnnualElectricUse(wateruse) {
	frm = document.getElementById("calcform");
	return precision((wateruse * 46 * 8.29)/.86/3412);
}

function calcAnnualElectricCost(electricuse) {
	frm = document.getElementById("calcform");
	return precision(electricuse * frm.in_electriccost.value);
}

function calcLifeElectricCost(electricuse) {
	frm = document.getElementById("calcform");
	return precision(electricuse * frm.in_electriccost.value * 7.84);
}

function calcElectricLifeSave(electriccost,watercost) {
	frm = document.getElementById("calcform");
//	return precision(((frm.perf_bmlifeelectriccost.value - electriccost)+(frm.perf_bmlifewatercost.value - watercost)));
	return precision(((frm.perf_lifeelectriccost.value - electriccost)+(frm.perf_lifewatercost.value - watercost)));
}

function calcAnnualGasUse(wateruse) {
	frm = document.getElementById("calcform");
	return precision((wateruse * 46 * 8.29)/.53/100000);
}

function calcAnnualGasCost(gasuse) {
	frm = document.getElementById("calcform");
	return precision(gasuse * frm.in_gascost.value);
}

function calcLifeGasCost(gasuse) {
	frm = document.getElementById("calcform");
	return precision(gasuse * 8.30);
}

function calcGasLifeSave(gascost,watercost) {
	frm = document.getElementById("calcform");
//	return precision(((frm.perf_bmlifegascost.value - gascost)+(frm.perf_bmlifewatercost.value - watercost)));
	return precision(((frm.perf_lifegascost.value - gascost)+(frm.perf_lifewatercost.value - watercost)));
}

function calcN (cost) {
	frm = document.getElementById("calcform");
	return precision(cost * frm.in_quantity.value);
}

function precision(n) {
	var s = "" + Math.round(n);
	return s;
}

function SetEnergyDefaults() {

	if (frm.in_flow.value == "") frm.in_flow.value = 2.5;
	if (frm.in_minutes.value == "") frm.in_minutes.value = 10;
	if (frm.in_days.value == "") frm.in_days.value = 365;

	if (frm.in_watercost.value == "") frm.in_watercost.value = 4;
	if (frm.in_gascost.value == "") frm.in_gascost.value = 0.60;
	if (frm.in_electriccost.value == "") frm.in_electriccost.value = 0.06;
	if (frm.in_quantity.value == "") frm.in_quantity.value = 1;
}

function roundit(Num, Places) {
   if (Places > 0) {
      if ((Num.toString().length - Num.toString().lastIndexOf('.')) > (Places + 1)) {
         var Rounder = Math.pow(10, Places);
         return Math.round(Num * Rounder) / Rounder;
      }
      else return Num;
   }
   else return Math.round(Num);
}

function commaFormat(nStr) {
	var inD = '.';
	var outD = '.';
	var sep = ',';

	nStr += '';
	var dpos = nStr.indexOf(inD);
	var nStrEnd = '';
	if (dpos != -1) {
		nStrEnd = outD + nStr.substring(dpos + 1, nStr.length);
		nStr = nStr.substring(0, dpos);
	}
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(nStr)) {
		nStr = nStr.replace(rgx, '$1' + sep + '$2');
	}
	return nStr + nStrEnd;
}



