// page calculations and button enablement
// written using jQuery, jquery.constrain
// author: Cliff Hayden

// this function is called when the page has been rendered.
// sets all event handlers on the page -- this is handy because it allows separation of 
// function from view.
var userDidSomething=0;

jQuery(document).ready(function() {
	// set all text inputs that are of class 'numeric' to use the numeric constraint
	// see jquery.constrain.js
	jQuery(':text.numeric').numeric();
	
	// add an click event handler to all checkbox controls that recalculates all dynamic attributes
	jQuery(':checkbox').click( function() {
			handleUserEvent();
		} );
	// add an click event handler to all radio controls that recalculates all dynamic attributes
	jQuery(':radio').click( function() {
			handleUserEvent();
		} );
	// add an onkeyup event handler to all text controls that recalculates all dynamic attributes
	jQuery(':text').keyup( function() {
			handleUserEvent();
		} );
/*
	// add enter key eater for form
	jQuery('#myplan').keypress( function(e) { 
				if (e.which==13) return false;
				else return true;
				});
*/		
	// start off by recalculating the page
	recalculate();
} );



// show a message on the first instance of the user doing something interesting.
function handleUserEvent() {
	showMessage();
	recalculate();
}


// show a message on the first instance of the user doing something interesting.
function showMessage() {
	if (userDidSomething != 1) {
		userDidSomething = 1;
		Boxy.alert("Just a reminder. As you make your plan, please check off only <b>new</b> actions you can commit to. If you are already an energy-saver, see if you can go a little further, even if it doesn't reach 10%. Feel free to use the comment box at the end of the checklist to tell us what you've already done to save energy.",
		           null, {title: 'Reminder'});
	}
}

// evaluate all checkboxes, radios, and numeric text fields to determine results.
// evaluate all required fields to determine submit button enablement
function recalculate() {
	// get footprint value
	var footprint = jQuery('#carbonFootprintInput').attr('value');
	if (footprint.length == 0) footprint = 0;
	
	// evaluate all questions
	// var k1=evaluateRadios(new Array('#q1Input_a','#q1Input_b','#q1Input_c'),'#q1Answer','#calc1');
	var k1a=evaluateCheckBox('#q1aInput','#q1aAnswer','#calc1a',200);
	var k1b=evaluateCheckBox('#q1bInput','#q1bAnswer','#calc1b',200);

	if ( k1a == 200 || k1b == 200 ) {
     	jQuery("#q1Answer").html('200');
		jQuery("#calc1").attr('value',200);
	     } else
	{ 	jQuery("#q1Answer").html('');
	    jQuery("#calc1").attr('value',0);
	     }	

	var k2a=evaluateCheckBox('#q2aInput','#q2aAnswer','#calc2a',1200);
	var k2b=evaluateText('#q2bInput','#q2bAnswer','#calc2b',300);
	var k3=evaluateText('#q3Input','#q3Answer','#calc3',1000);
	var k4=evaluateText('#q4Input','#q4Answer','#calc4',1);
	var k5a=evaluateText('#q5aInput','#q5aAnswer','#calc5a',1);
	var k5b=evaluateText('#q5bInput','#q5bAnswer','#calc5b',1);
	var k6=evaluateText('#q6Input','#q6Answer','#calc6',150);
	var k7=evaluateRadios(new Array('#q7Input_a','#q7Input_b','#q7Input_c'),'#q7Answer','#calc7');
	var k8=evaluateCheckBox('#q8Input','#q8Answer','#calc8',600);
	var k9=evaluateCheckBox('#q9Input','#q9Answer','#calc9',500);
	var k10a=evaluateText('#q10aInput','#q10aAnswer','#calc10a',300);
	var k10b=evaluateCheckBox('#q10bInput','#q10bAnswer','#calc10b',125);
	var k10c=evaluateCheckBox('#q10cInput','#q10cAnswer','#calc10c',125);
	var k11=evaluateText('#q11Input','#q11Answer','#calc11',300);
	var k12=evaluateText('#q12Input','#q12Answer','#calc12',700);
	var k13=evaluateCheckBox('#q13Input','#q13Answer','#calc13',200);
	var k14=evaluateCheckBox('#q14Input','#q14Answer','#calc14',800);
	var k15=evaluateCheckBox('#q15Input','#q15Answer','#calc15',800);
	var k16=evaluateCheckBox('#q16Input','#q16Answer','#calc16',2400);
	var k17=evaluateText('#q17Input','#q17Answer','#calc17',1);
	var k18=evaluateText('#q18Input','#q18Answer','#calc18',400);
	var k19=evaluateText('#q19Input','#q19Answer','#calc19',1);
	var k20=evaluateText('#q20Input','#q20Answer','#calc20',1);
	
	// calculate resulting savings and percentages
	var ktotal = parseInt(k1a) + parseInt(k1b) + parseInt(k2a) + parseInt(k2b) + parseInt(k3) + parseInt(k4) + 
				parseInt(k5a) + parseInt(k5b) + parseInt(k6) + parseInt(k7) + parseInt(k8) + parseInt(k9) + 
				parseInt(k10a) + parseInt(k10b) + parseInt(k10c) + parseInt(k11) + parseInt(k12) + 
				parseInt(k13) + parseInt(k14) + parseInt(k15) + parseInt(k16) + parseInt(k17) + 
				parseInt(k18) + parseInt(k19) + parseInt(k20);

	if (ktotal == 0) ktotal = '';	
	var percentage;
	if ( footprint == 0 || ktotal == 0 ) {
		percentage = "";
	} else {
		var kpercentage = Math.round((ktotal/footprint)*1000)/10;
		percentage = kpercentage+'%';
	}

	// set footprint, calculated totals and percentages in page	
	jQuery("#estimatedCarbonFootprint").html(footprint);
	jQuery("#calculatorMyGoal").html(footprint);
	jQuery("#totalCO2Savings").html(ktotal);
	jQuery("#calcTotalReduction").attr('value',ktotal);
	jQuery("#calculatorCurrentSavings").html(ktotal);
	jQuery("#calculatorNeeded").html(percentage);
	jQuery("#percentageReduction").html(percentage);
	jQuery("#calcPercentage").attr('value',kpercentage);

	// manage didIt button enablement
 jQuery("#q1DidIt").attr('disabled',jQuery('#q1aInput').attr('checked') || jQuery('#q1bInput').attr('checked') );
 jQuery("#q1aInput").attr('disabled',jQuery('#q1bInput').attr('checked') || jQuery('#q1DidIt').attr('checked') );
 jQuery("#q1bInput").attr('disabled',jQuery('#q1aInput').attr('checked') || jQuery('#q1DidIt').attr('checked') );
		
	jQuery("#q2aDidIt").attr('disabled',jQuery('#q2aInput').attr('checked'));
	jQuery("#q2aInput").attr('disabled',jQuery('#q2aDidIt').attr('checked'));

	jQuery("#q2bDidIt").attr('disabled',jQuery('#q2bInput').attr('value').length>0);
	jQuery("#q2bInput").attr('disabled', jQuery('#q2bDidIt').attr('checked') );

	jQuery("#q3DidIt").attr('disabled',jQuery('#q3Input').attr('value').length>0);
	jQuery("#q3Input").attr('disabled', jQuery('#q3DidIt').attr('checked') );

	jQuery("#q6DidIt").attr('disabled',jQuery('#q6Input').attr('value').length>0);
	jQuery("#q6Input").attr('disabled', jQuery('#q6DidIt').attr('checked') );

	jQuery("#q8DidIt").attr('disabled',jQuery('#q8Input').attr('checked'));
	jQuery("#q8Input").attr('disabled',jQuery('#q8DidIt').attr('checked'));

	jQuery("#q9DidIt").attr('disabled',jQuery('#q9Input').attr('checked'));
	jQuery("#q9Input").attr('disabled',jQuery('#q9DidIt').attr('checked'));

	jQuery("#q10aDidIt").attr('disabled',jQuery('#q10aInput').attr('value').length>0);
	jQuery("#q10aInput").attr('disabled',jQuery('#q10aDidIt').attr('checked'));

	jQuery("#q10bDidIt").attr('disabled',jQuery('#q10bInput').attr('checked'));
	jQuery("#q10bInput").attr('disabled',jQuery('#q10bDidIt').attr('checked'));

	jQuery("#q10cDidIt").attr('disabled',jQuery('#q10cInput').attr('checked'));
	jQuery("#q10cInput").attr('disabled',jQuery('#q10cDidIt').attr('checked'));

	jQuery("#q11DidIt").attr('disabled',jQuery('#q11Input').attr('value').length>0);
	jQuery("#q11Input").attr('disabled',jQuery('#q11DidIt').attr('checked'));

	jQuery("#q12DidIt").attr('disabled',jQuery('#q12Input').attr('value').length>0);
	jQuery("#q12Input").attr('disabled',jQuery('#q12DidIt').attr('checked'));

	jQuery("#q13DidIt").attr('disabled',jQuery('#q13Input').attr('checked'));
	jQuery("#q13Input").attr('disabled',jQuery('#q13DidIt').attr('checked'));
		
	jQuery("#q14DidIt").attr('disabled',jQuery('#q14Input').attr('checked'));
	jQuery("#q14Input").attr('disabled',jQuery('#q14DidIt').attr('checked'));
		
	jQuery("#q15DidIt").attr('disabled',jQuery('#q15Input').attr('checked'));
	jQuery("#q15Input").attr('disabled',jQuery('#q15DidIt').attr('checked'));
		
	jQuery("#q16DidIt").attr('disabled',jQuery('#q16Input').attr('checked'));
	jQuery("#q16Input").attr('disabled',jQuery('#q16DidIt').attr('checked'));
		
	jQuery("#q17DidIt").attr('disabled',jQuery('#q17Input').attr('value').length>0);
	jQuery("#q17Input").attr('disabled',jQuery('#q17DidIt').attr('checked'));

	jQuery("#q18DidIt").attr('disabled',jQuery('#q18Input').attr('value').length>0);
	jQuery("#q18Input").attr('disabled',jQuery('#q18DidIt').attr('checked'));

	// manage submit button enablement
	if (footprint == 0) {
		jQuery('#submit').attr('disabled',true);
	} else {
		// start by enabling submit
		jQuery('#submit').attr('disabled',false);
		// cycle through all required inputs - if any one is empty, disable submit again
		jQuery(':input.required').each( function() {
			if (jQuery(this).attr('value').length == 0) {
				jQuery('#submit').attr('disabled',true);
			}
		});
	}	
}

// function that evaluates a checkbox state, calculates pounds saved, and sets related text area
function evaluateCheckBox(inputName, answerName, calcName, factor) {
	var inp = jQuery(inputName);
	var result = 0;
	if ( inp.attr('checked') == false ) {
		jQuery(answerName).html('');
	} else {
		result = inp.attr('value')*factor;
		jQuery(answerName).html(result);
	}
	jQuery(calcName).attr('value',result);
	return result;		
}

// function that evaluates a text state, calculates pounds saved, and sets related text area
function evaluateText(inputName, answerName, calcName, factor) {
	var inp = jQuery(inputName);
	var result = 0;
	if (inp.attr('value').length > 0) {
		var result = inp.attr('value') * factor;
		jQuery(answerName).html(result);
	} else {
		jQuery(answerName).html('');
	}		
	jQuery(calcName).attr('value',result);
	return result;
}

// function that evaluates the state of a group of radio buttons, calculates pounds saved, and sets related text area
function evaluateRadios(inputNames, answerName, calcName) {
	for ( var i=0; i<inputNames.length; i++ ) {
		var inp = jQuery(inputNames[i]);
		if (inp.attr('checked') == true) {
			var result = inp.attr('value');
			if (result == 0) {
				jQuery(answerName).html('');
			} else {
				jQuery(answerName).html(result);
			}
			jQuery(calcName).attr('value',result);
			return result;
		}
	}
	jQuery(calcName).attr('value','0');
	return 0;
}
