var low_flow = 4;
var handGallons = 4; // OBSOLETE (now uses hand_low_flow)
var bathGallons = 36;
var sinkGallons = 4; // OBSOLETE (now uses sink_low_flow)
var people = 1;
var calcDebug = false;
var calcCategories = ['bath','toilet','sink','hand','dishwasher','laundry','lawn','outside'];
var divider = '\n-----------------------------------';
var calcData = new Object();
$(function(){
//$('#results_wrapper').height($('#box_wrapper').outerHeight()+'px');
// BROWSER INFO
calcData.browser = new Object();
calcData.browser.app_name = navigator.appName;
calcData.browser.app_version = navigator.appVersion;
calcData.browser.app_code_name = navigator.appCodeName;
calcData.browser.user_agent = navigator.userAgent;
calcData.browser.color_depth = window.screen.colorDepth;
calcData.browser.colors = Math.pow(2, window.screen.colorDepth);
calcData.browser.current_resolution = window.screen.width + ' x ' + window.screen.height;
calcData.browser.max_resolution = window.screen.availWidth + ' x ' + window.screen.availHeight;
if(navigator.appName.indexOf('Microsoft') != -1){
calcData.browser.window_dimensions = document.body.offsetWidth + ' x ' + document.body.offsetHeight;
}else{
calcData.browser.window_dimensions = window.innerWidth + ' x ' + window.innerHeight;
}
calcData.browser.platform = navigator.platform;
calcData.browser.referrer = document.referrer;
// DEBUG
if(document.location.href.toLowerCase().indexOf('http://localhost/') != -1
|| document.location.href.toLowerCase().indexOf('http://www/') != -1){
if(document.location.href.toLowerCase().indexOf('?debug') != -1
|| document.location.href.toLowerCase().indexOf('&debug') != -1){
calcDebug = true;
}
}
$('.hidden').hide();
$('.numeric').numeric();
// PEOPLE
$('#number_of_people').change(function(){
people = $('#number_of_people').val();
calculate('all');
});
// BATHROOM
$('#showers').change(function(){
if($('#showers').val() != 0){
$('#showers_options').slideDown();
}else{
$('#showers_options').slideUp();
}
calculate('bath');
});
$('#baths').change(function(){ calculate('bath'); });
$('#shower_low_flow').change(function(){ calculate('bath'); });
$('#shower_minutes').keyup(function(){ calculate('bath'); });
// TOILET
$('#toilet_flushes').change(function(){
if($('#toilet_flushes').val() != 0){
$('#toilet_options').slideDown();
}else{
$('#toilet_options').slideUp();
}
calculate('toilet');
});
$('#toilet_low_flow').change(function(){ calculate('toilet'); });
// SINKS
$('#sink_minutes').keyup(function(){
if($('#sink_minutes').val() != 0){
$('#sink_options').slideDown();
}else{
$('#sink_options').slideUp();
}
calculate('sink');
});
$('#sink_low_flow').change(function(){ calculate('sink'); });
// HAND DISH WASHING
$('#hand_minutes').keyup(function(){
if($('#hand_minutes').val() != 0){
$('#hand_options').slideDown();
}else{
$('#hand_options').slideUp();
}
calculate('hand');
});
$('#hand_low_flow').change(function(){ calculate('hand'); });
// DISHWASHER
$('#dishwasher').change(function(){
if($('#dishwasher').val() != 0){
$('#dishwasher_options').slideDown();
}else{
$('#dishwasher_options').slideUp();
}
calculate('dishwasher');
});
$('#dishwasher_gallons').keyup(function(){ calculate('dishwasher'); });
$('#dishwasher_energy_star').change(function(){
if($('#dishwasher_energy_star').val() != 0){
$('#dishwasher_gallons').val('4');
}else{
$('#dishwasher_gallons').val('12');
}
calculate('dishwasher');
});
// LAUNDRY
$('#laundry').change(function(){
if($('#laundry').val() != 0){
$('#laundry_options').slideDown();
}else{
$('#laundry_options').slideUp();
}
calculate('laundry');
});
$('#laundry_gallons').keyup(function(){ calculate('laundry'); });
$('#laundry_energy_star').change(function(){
if($('#laundry_energy_star').val() != 0){
$('#laundry_gallons').val('27');
}else{
$('#laundry_gallons').val('43');
}
calculate('laundry');
});
// LAWN
$('#lawn').change(function(){
if($('#lawn').val() != 0){
$('#lawn_options').slideDown();
}else{
$('#lawn_options').slideUp();
}
calculate('lawn');
});
$('#lawn_sensors').change(function(){ calculate('lawn'); });
$('#lawn_minutes').keyup(function(){ calculate('lawn'); });
// OUTSIDE
$('#outside_minutes').keyup(function(){ calculate('outside'); });
// POOL
$('#pool_minutes').keyup(function(){ calculate('outside'); });
// BUTTONS & SUBMIT
// 2017-06-20 -- remove references to php pages
//$('#calcSubmit').click(calcSubmit);
$('#individual_button').click(function(){
$('#household_button').attr('src', 'img/household2.png');
$(this).attr('src', 'img/personal-off.png');
$('#household_totals').hide();
$('#individual_totals').show();
});
$('#household_button').click(function(){
$('#individual_button').attr('src', 'img/personal.png');
$(this).attr('src', 'img/household1.png');
$('#household_totals').show();
$('#individual_totals').hide();
});
// DEFAULTS (Resolves Back Button Issue)
$('#number_of_people').trigger('change');
});
// 2017-06-20 -- remove references to php pages
/* function calcSubmit(){
if(calcData.total_household_day){
parseParams($('#calcForm').formSerialize());
for(var i=0; i<paramKeys.length; i++){
var key = paramKeys[i];
var value = paramValues[i];
calcData[key] = value;
}
var jsonData = $.toJSON(calcData);
$('#calcData').val(jsonData);
$('#calcDataForm').submit();
}else{
alert('Please complete the calculator to submit a pledge.');
}
return(false);
} */
function calcReset(form) {
document.location.href = document.location.href;
}
function calcUsage(type, total){
calcData[type] = total;
$('#'+type).html(total+' gallons');
var jugs = '';
for(var i=0; i<total; i++){
jugs += '<img src="jug.png" />';
}
$('#'+type+'_jugs').html(jugs);
calcTotals();
}
function calcTotals(){
// HOUSEHOLD
calcData.total_household_day = 0;
jQuery.each(calcCategories, function(){
total = this+'_household_total';
if(calcData[total]){
calcData.total_household_day += Number(calcData[total]);
if(calcDebug) console.log(total+': '+calcData[total]);
}
});
calcData.total_household_week = (calcData.total_household_day * 7);
calcData.total_household_month = (calcData.total_household_week * 4);
calcData.total_household_year = (calcData.total_household_week * 52);
//$('#total_household_percent').html(addCommas(Math.round(calcData.total_household_day * .10))+' gallons');
$('.total_household_day').html(addCommas(calcData.total_household_day)+' gallons');
$('.total_household_week').html(addCommas(calcData.total_household_week)+' gallons');
$('.total_household_month').html(addCommas(calcData.total_household_month)+' gallons');
$('.total_household_year').html(addCommas(calcData.total_household_year)+' gallons');
// INDIVIDUAL
calcData.total_individual_day = 0;
jQuery.each(calcCategories, function(){
total = this+'_individual_total';
if(calcData[total]){
calcData.total_individual_day += Number(calcData[total]);
if(calcDebug) console.log(total+': '+calcData[total]);
}
});
calcData.total_individual_week = (calcData.total_individual_day * 7);
calcData.total_individual_month = (calcData.total_individual_week * 4);
calcData.total_individual_year = (calcData.total_individual_week * 52);
calcData.total_individual_percent = Math.round(calcData.total_individual_day * .10);
$('.total_individual_percent').html(addCommas(calcData.total_individual_percent)+' gallons');
$('.total_individual_day').html(addCommas(calcData.total_individual_day)+' gallons');
$('.total_individual_week').html(addCommas(calcData.total_individual_week)+' gallons');
$('.total_individual_month').html(addCommas(calcData.total_individual_month)+' gallons');
$('.total_individual_year').html(addCommas(calcData.total_individual_year)+' gallons');
}
function addCommas(nStr) {
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
function calculate(type){
var output = '';
// ALL
if(type=='all'){
jQuery.each(calcCategories, function(){
calculate(this);
});
}
// BATHROOM
else if(type=='bath'){
// SETUP
var showers = Number($('#showers').val());
var shower_minutes = Number($('#shower_minutes').val());
var shower_low_flow = low_flow;
if($('#shower_low_flow').val() != 0){
shower_low_flow = 2;
}
calcData.shower_low_flow = shower_low_flow;
var baths = Number($('#baths').val());
// TOTALS
var bath_household_total = Math.round(((showers * shower_minutes * shower_low_flow) + (baths / 7 * bathGallons)));
var bath_individual_total = Math.round(((showers * shower_minutes * shower_low_flow) + (baths / 7 * bathGallons)) / people);
calcUsage('bath_household_total',bath_household_total);
calcUsage('bath_individual_total',bath_individual_total);
// DEBUG
output += '[Bathroom]';
output += '\n- Showers per Day: '+showers;
output += '\n- Shower Minutes: '+shower_minutes;
output += '\n- Shower Flow Rate: '+shower_low_flow;
output += '\n- Baths per Week: '+baths;
output += '\n- Bath Gallons: '+bathGallons;
output += '\n- People: '+people;
output += divider;
output += '\nHousehold Total: (('+showers+' x '+shower_minutes+' x '+shower_low_flow+') + ('+baths+' / 7 x '+bathGallons+')) = '+bath_household_total;
output += '\nIndividual Total: (('+showers+' x '+shower_minutes+' x '+shower_low_flow+') + ('+baths+' / 7 x '+bathGallons+')) / '+people+' = '+bath_individual_total;
}
// TOILET
else if(type == 'toilet'){
// SETUP
var toilet_flushes = Number($('#toilet_flushes').val());
var toilet_low_flow = 4;
if($('#toilet_low_flow').val() != 0){
toilet_low_flow = 1.6;
}
calcData.toilet_low_flow = toilet_low_flow;
// TOTALS
var toilet_household_total = Math.round(toilet_low_flow * toilet_flushes);
var toilet_individual_total = Math.round((toilet_low_flow * toilet_flushes) / people);
calcUsage('toilet_household_total',toilet_household_total);
calcUsage('toilet_individual_total',toilet_individual_total);
// DEBUG
output += '[Toilet]';
output += '\n- Flushes per Day: '+toilet_flushes;
output += '\n- Flow Rate: '+toilet_low_flow;
output += '\n- People: '+people;
output += divider;
output += '\nHousehold Total: ('+toilet_flushes+' x '+toilet_low_flow+') = '+toilet_household_total;
output += '\nIndividual Total: ('+toilet_flushes+' x '+toilet_low_flow+') / '+people+' = '+toilet_individual_total;
}
// SINKS
else if(type == 'sink'){
// SETUP
var sink = 1;
var sink_minutes = Number($('#sink_minutes').val());
var sink_low_flow = low_flow;
if($('#sink_low_flow').val() != 0){
sink_low_flow = 1.5;
}
calcData.sink_low_flow = sink_low_flow;
// TOTALS
var sink_household_total = Math.round(((sink * sink_minutes) * sink_low_flow));
var sink_individual_total = Math.round(((sink * sink_minutes) * sink_low_flow) / people);
calcUsage('sink_household_total',sink_household_total);
calcUsage('sink_individual_total',sink_individual_total);
// DEBUG
output += '[Sinks]';
output += '\n- Sink Use per Day: '+sink;
output += '\n- Minutes: '+sink_minutes;
output += '\n- Flow Rate: '+sink_low_flow;
output += '\n- People: '+people;
output += divider;
output += '\nHousehold Total: (('+sink+' x '+sink_minutes+') x '+sink_low_flow+') = '+sink_household_total;
output += '\nIndividual Total: (('+sink+' x '+sink_minutes+') x '+sink_low_flow+') / '+people+' = '+sink_individual_total;
}
// HAND
else if(type == 'hand'){
// SETUP
var hand = 1;
var hand_minutes = Number($('#hand_minutes').val());
var hand_low_flow = low_flow;
if($('#hand_low_flow').val() != 0){
hand_low_flow = 1.5;
}
calcData.hand_low_flow = hand_low_flow;
// TOTALS
var hand_household_total = Math.round((hand * hand_minutes * hand_low_flow));
var hand_individual_total = Math.round((hand * hand_minutes * hand_low_flow) / people);
calcUsage('hand_household_total',hand_household_total);
calcUsage('hand_individual_total',hand_individual_total);
// DEBUG
output += '[Hand Washing Dishes]';
output += '\n- Washes per Day: '+hand;
output += '\n- Minutes: '+hand_minutes;
output += '\n- Flow Rate: '+hand_low_flow;
output += '\n- People: '+people;
output += divider;
output += '\nHousehold Total: (('+hand+' x '+hand_minutes+') x '+hand_low_flow+') = '+hand_household_total;
output += '\nIndividual Total: (('+hand+' x '+hand_minutes+') x '+hand_low_flow+') / '+people+' = '+hand_individual_total;
}
// DISHWASHER
else if(type == 'dishwasher'){
// SETUP
var dishwasher = Number($('#dishwasher').val());
var dishwasher_gallons = Number($('#dishwasher_gallons').val());
// TOTALS
var dishwasher_household_total = Math.round((dishwasher * dishwasher_gallons) / 7);
var dishwasher_individual_total = Math.round(((dishwasher * dishwasher_gallons) / 7) / people);
calcUsage('dishwasher_household_total',dishwasher_household_total);
calcUsage('dishwasher_individual_total',dishwasher_individual_total);
// DEBUG
output += '[Dishwasher]';
output += '\n- Loads per Week: '+dishwasher;
output += '\n- Gallons per Load: '+dishwasher_gallons;
output += '\n- People: '+people;
output += divider;
output += '\nHousehold Total: (('+dishwasher+' x '+dishwasher_gallons+') / 7) = '+dishwasher_household_total;
output += '\nIndividual Total: ((('+dishwasher+' x '+dishwasher_gallons+') / 7) / '+people+' = '+dishwasher_individual_total;
}
// LAUNDRY
else if(type == 'laundry'){
// SETUP
var laundry = Number($('#laundry').val());
var laundry_gallons = Number($('#laundry_gallons').val());
// TOTALS
var laundry_household_total = Math.round((laundry * laundry_gallons) / 7);
var laundry_individual_total = Math.round(((laundry * laundry_gallons) / 7) / people);
calcUsage('laundry_household_total',laundry_household_total);
calcUsage('laundry_individual_total',laundry_individual_total);
output += '[Laundry]';
output += '\n- Loads per Week: '+laundry;
output += '\n- Gallons per Load: '+laundry_gallons;
output += '\n- People: '+people;
output += divider;
output += '\nHousehold Total: (('+laundry+' x '+laundry_gallons+') / 7) = '+laundry_household_total;
output += '\nIndividual Total: ((('+laundry+' x '+laundry_gallons+') / 7) / '+people+') = '+laundry_individual_total;
}
// LAWN
// need to kill lawn_sensors if lawn == 0
else if(type == 'lawn'){
// SETUP
var lawn = Number($('#lawn').val());
var lawn_minutes = Number($('#lawn_minutes').val());
var lawn_sensors = (Number($('#lawn_sensors').val()) == 0 && lawn_minutes > 0 && lawn > 0) ? .76 : 1;
//var lawn_gallons = 11.67;
var lawn_gallons = 2.26;
calcData.lawn_gallons = lawn_gallons;
// TOTALS
var lawn_household_total = Math.round(((lawn * lawn_minutes * lawn_gallons) / lawn_sensors) / 7);
var lawn_individual_total = Math.round((((lawn * lawn_minutes * lawn_gallons) / people) / lawn_sensors) / 7);
calcUsage('lawn_household_total',lawn_household_total);
calcUsage('lawn_individual_total',lawn_individual_total);
// DEBUG
output += '[Lawn]';
output += '\n- Lawn per Week: '+lawn;
output += '\n- Minutes: '+lawn_minutes;
output += '\n- Gallons per Minute: '+lawn_gallons;
output += '\n- People: '+people;
if(lawn_sensors == '100'){
output += '\n- Sensors: NO (+100 gpd)';
}else{
output += '\n- Sensors: YES';
}
output += divider;
output += '\nHousehold Total: (('+lawn+' x '+lawn_minutes+' x '+lawn_gallons+' ) / '+lawn_sensors+') / 7 = '+lawn_household_total;
output += '\nIndividual Total: ((('+lawn+' x '+lawn_minutes+' x '+lawn_gallons+' ) / '+people+') / '+lawn_sensors+') / 7 = '+lawn_individual_total;
}
// OUTSIDE
else if(type == 'outside'){
// SETUP
var outside_minutes = Number($('#outside_minutes').val());
var pool_minutes = Number($('#pool_minutes').val());
var outside_gallons = 9;
calcData.outside_gallons = outside_gallons;
calcData.outside_minutes = outside_minutes;
calcData.pool_minutes = pool_minutes;
// TOTALS
var outside_household_total = Math.round(((outside_minutes * outside_gallons) + (pool_minutes * outside_gallons)) / 7);
var outside_individual_total = Math.round((((outside_minutes * outside_gallons) + (pool_minutes * outside_gallons)) / 7) / people);
calcUsage('outside_household_total',outside_household_total);
calcUsage('outside_individual_total',outside_individual_total);
// DEBUG
output += '[Outside]';
output += '\n- Outside Minutes: '+outside_minutes;
output += '\n- Gallons per Minute: '+outside_gallons;
output += '\n- People: '+people;
output += divider;
output += '\nHousehold Total: (((('+outside_minutes+' x '+outside_gallons+') + ('+pool_minutes+' x '+outside_gallons+')) / 7) = '+outside_household_total;
output += '\nIndividual Total: ((((('+outside_minutes+' x '+outside_gallons+') + ('+pool_minutes+' x '+outside_gallons+')) / 7) / '+people+') = '+outside_individual_total;
}
$('#testing').text(output);
if(calcDebug) console.clear();
if(calcDebug) console.log(output+'\n\n');
}