var roundingFactorForCalculations = 50;
function toggleLoops(on, off) {
	document.getElementById(off + "-loops-container").style.display = 'none';
	document.getElementById(on + "-loops-container").style.display = 'block';
	document.getElementById("contact-options").style.display = 'none';
	calcAll();
}
function outputNumber(n) {
	var t = n + '';
	if (t.indexOf('.') > -1) {
		if (n == Math.floor(n)) {
			var decimals = 0;
		} else {					  
			var decimals = numDecimals;
		}
	} else {
		var decimals = 0;	
	}
	return roundNumber(n, decimals);	
}
function calcAll() {
	document.getElementById("c-submit").disabled = false;
	document.getElementById("contact-form-msg").innerHTML = '';
	
	var measurement = document.getElementById("unit_of_measurement").value;
	var values = getCalcValues();
	var n = validateInputValue('number_of_birds', values['number_of_birds'], 'int', 0, number_of_birds[measurement]['min'], number_of_birds[measurement]['max']);
	var hl = validateInputValue('house_length', values['house_length'], 'float', roundingFactorForCalculations, house_length[measurement]['min'], house_length[measurement]['max']);
	var w = validateInputValue('house_width', values['house_width'], 'float', roundingFactorForCalculations, house_width[measurement]['min'], house_width[measurement]['max']);
	if (n > 0) {
		var result = validateInputValue('densityResults', ((hl * w) / n), 'float');
	} else {
		var result = '';	
	}
	
	var show_outcomes = 0;
	
	var dr = outputNumber(result).toString();
	if (dr.indexOf('.') > -1) {
		dra = dr.split('.');
		if (dra[1].length == 1) dra[1] += '0';
		dr = dra[0] + '.' + dra[1];
	} else {
		dr += '.00';	
	}
	document.getElementById("densityResults").innerHTML = dr;
		
	var mn = two_endwall_offset_left[measurement]['min'];
	var mx = two_endwall_offset_left[measurement]['max'];
	var teol = validateInputValue('two_endwall_offset_left', values['two_endwall_offset_left'], 'float', roundingFactorForCalculations, mn, mx);
	
	mn = four_endwall_offset_left[measurement]['min'];
	mx = four_endwall_offset_left[measurement]['max'];
	var feol = validateInputValue('four_endwall_offset_left', values['four_endwall_offset_left'], 'float', roundingFactorForCalculations, mn, mx);
	
	mn = two_endwall_offset_right[measurement]['min'];
	mx = two_endwall_offset_right[measurement]['max'];
	var teor = validateInputValue('two_endwall_offset_right', values['two_endwall_offset_right'], 'float', roundingFactorForCalculations, mn, mx);
	
	mn = four_endwall_offset_right[measurement]['min'];
	mx = four_endwall_offset_right[measurement]['max'];
	var feor = validateInputValue('four_endwall_offset_right', values['four_endwall_offset_right'], 'float', roundingFactorForCalculations, mn, mx);
	
	mn = two_center_offset[measurement]['min'];
	mx = two_center_offset[measurement]['max'];
	var tco = validateInputValue('two_center_offset', values['two_center_offset'], 'float', roundingFactorForCalculations, mn, mx);
	
	mn = four_center_offset[measurement]['min'];
	mx = four_center_offset[measurement]['max'];
	var fco = validateInputValue('four_center_offset', values['four_center_offset'], 'float', roundingFactorForCalculations, mn, mx);
	 
	if (document.getElementById("two-loops").checked && document.getElementById("two_endwall_offset_left").value != '' && document.getElementById("two_endwall_offset_right").value != '') {
		show_outcomes = 1;
	} else if (document.getElementById("four-loops").checked && document.getElementById("four_endwall_offset_left").value != '' && document.getElementById("four_endwall_offset_right").value != '' && document.getElementById("four_center_offset").value != '') {
		show_outcomes = 1;	
	}
	
	var v;
	var x;
	var tresult;
	var fresult;
	var ttl;
	var ftl;
	var tfpt;
	var ffpt;
	
	var ttfpl;
	
	var constantFactor = 92.376;
	var varFive = 5;
	var varTen = 10;
	var spacePerBirdFactor = 1;
	if (measurement == 'metric') {
		constantFactor = conversion['us_to_metric'] * (constantFactor / 12);	
		varFive = conversion['us_to_metric'] * varFive;
		varTen = conversion['us_to_metric'] * varTen;
		spacePerBirdFactor = 100;
	}
//document.getElementById("values").innerHTML = 'cf = ' + constantFactor + '<br />vf = ' + varFive + '<br />vt = ' + varTen;	
	for(ix = 0; ix < numTubes; ix++) {
		
		ttl = document.getElementById("two_tube_length-" + ix).value;
		ftl = document.getElementById("four_tube_length-" + ix).value;
	
		/* two loop */
		v = (hl - (teol + teor) - varFive) / ttl;
		x = Math.abs(hl - varFive - (ttl * Math.ceil(v)) - (teol + teor));
		if (x < 0 || x > ((teol + teor) / 2)) {
			tresult = Math.floor(v);
		} else {
			tresult = Math.ceil(v);	
		}	
		
		/* four loop */
		v  = ((hl - (feol + fco + feor) - varTen) / 2) / ftl;
		x = Math.abs(hl - varTen - (2 * ftl * Math.ceil(v)) - (feol + fco + feor));
		if (x < 0 || x > ((feol + fco + feor) / 2)) {
			fresult = Math.floor(v);	
		} else {
			fresult = Math.ceil(v);
		}			
	
		tfpt = document.getElementById("two_feeders_per_tube-" + ix).value;
		ffpt = document.getElementById("four_feeders_per_tube-" + ix).value;
				
		tresult = tfpt * 4 * tresult;
		fresult = ffpt * 8 * fresult;
		
		/* two loop */
		document.getElementById("two_total_feeders_in_house-" + ix).innerHTML = outputNumber(tresult);
		document.getElementById("two_birds_per_pan-" + ix).innerHTML = outputNumber(values["number_of_birds"] / tresult);
		document.getElementById("two_feeder_space_per_bird-" + ix).innerHTML = outputNumber(spacePerBirdFactor * tresult * constantFactor / values["number_of_birds"]);
		ttfpl = tresult / 2;
		document.getElementById("two_total_feeders_per_loop-" + ix).innerHTML = outputNumber(ttfpl);
		document.getElementById("two_length_of_one_loop-" + ix).innerHTML = outputNumber(((ttfpl / tfpt) * (ttl / 2)) + varFive);
		
		/* four loop */
		document.getElementById("four_total_feeders_in_house-" + ix).innerHTML = outputNumber(fresult);
		document.getElementById("four_birds_per_pan-" + ix).innerHTML = outputNumber(values["number_of_birds"] / fresult);
		document.getElementById("four_feeder_space_per_bird-" + ix).innerHTML = outputNumber(spacePerBirdFactor * fresult * constantFactor / values["number_of_birds"]);
		ftfpl = fresult / 4;
		document.getElementById("four_total_feeders_per_loop-" + ix).innerHTML = outputNumber(ftfpl);
		document.getElementById("four_length_of_one_loop-" + ix).innerHTML = outputNumber(((ftfpl / tfpt) * (ttl / 2)) + varFive);	
	}

	var tselection = document.getElementById("two_preferred_tube").value;
	var fselection = document.getElementById("four_preferred_tube").value;
	
	var show_contact_options = 0;
	
	if (tselection > -1) {	
		ix = tselection;
		show_contact_options = 1;
		
		tresult = document.getElementById("two_total_feeders_in_house-" + ix).innerHTML;
		tfpt = document.getElementById("two_feeders_per_tube-" + ix).value;
		ttl = document.getElementById("two_tube_length-" + ix).value;
		
		var teola1 = teol / (teol + teor);
		var teola2 = tresult / 4 / tfpt * ttl + varFive;
		var teola3 = hl - teola2;
		var teola = teola1 * teola3;
		
		var teora1 = teor / (teol + teor);
		var teora2 = tresult / 4 / tfpt * ttl + varFive;
		var teora3 = hl - teora2;
		var teora = teora1 * teora3;
	
		document.getElementById("two_endwall_offset_left_actual").innerHTML = outputNumber(teola);
		document.getElementById("two_endwall_offset_right_actual").innerHTML = outputNumber(teora);
	} else {
		document.getElementById("two_endwall_offset_left_actual").innerHTML = '';
		document.getElementById("two_endwall_offset_right_actual").innerHTML = '';
	}
	
	if (fselection > -1) {
		ix = fselection;
		show_contact_options = 1;
		
		fresult = document.getElementById("four_total_feeders_in_house-" + ix).innerHTML;
		ffpt = document.getElementById("four_feeders_per_tube-" + ix).value;
		ftl = document.getElementById("four_tube_length-" + ix).value;
		
		var feola1 = feol / (feol + fco + feor);
		var feola2 = fresult / 4 / ffpt * ftl + varTen;
		var feola3 = hl - feola2;
		var feola = feola1 * feola3;
document.getElementById("values").innerHTML = feol + '/' + '(' + feol + '+' + fco + '+' + feor + ')' + '*' + '(' + hl + '-' + '(' + fresult + '/' + '4' + '/' + ffpt + '*' + ftl + '+' + varTen + '))';	

		var feora1 = feor / (feol + fco + feor);
		var feora2 = fresult / 4 / ffpt * ftl + varTen;
		var feora3 = hl - feora2;
		var feora = feora1 * feora3;
		
		var foca1 = fco / (feol + fco + feor);
		var foca2 = fresult / 4 / ffpt * ftl + varTen;
		var foca3 = hl - foca2;
		var foca = foca1 * foca3;
		
		document.getElementById("four_endwall_offset_left_actual").innerHTML = outputNumber(feola);
		document.getElementById("four_endwall_offset_right_actual").innerHTML = outputNumber(feora);
		document.getElementById("four_center_offset_actual").innerHTML = outputNumber(foca);
	} else {
		document.getElementById("four_endwall_offset_left_actual").innerHTML = '';
		document.getElementById("four_endwall_offset_right_actual").innerHTML = '';
		document.getElementById("four_center_offset_actual").innerHTML = '';
	}
	
	if (show_outcomes == 1) {
		var outcomes_color = 'aa0d36';	
	} else {
		var outcomes_color = 'fff';
	}
	
	var divs = document.getElementById("outcomes-container").getElementsByTagName("div");
	for(i = 0; i < divs.length; i++) {
		if (divs[i].className.indexOf("outcomes-results") > -1) {
			divs[i].style.color = '#' + outcomes_color;	
		}
	}
	
	if (show_contact_options == 1) {
		if (hl > 0 && n > 0 && w > 0) {
			document.getElementById("contact-options").style.display = 'block';	
		}
	}
	
	document.getElementById("unit_of_measurement-span").innerHTML = measurement;
	document.getElementById("two_preferred_tube-span").innerHTML = tselection;
	document.getElementById("four_preferred_tube-span").innerHTML = fselection;
}
function getCalcValues() {
	var inputs = document.getElementById("calculator-table").getElementsByTagName("input");
	var values = new Array();
	for(i = 0; i < inputs.length; i++) {
		values[inputs[i].id] = inputs[i].value;
	}
	return values;
}
function validateInputValue(i, v, validateAs, precision, minValue, maxValue) {
	if (v == '') return 0;
	if (precision == null) precision = roundingFactorForCalculations;
	v = v.toString().replace(/\,/g,'');
	switch(validateAs) {
		case 'int':
			v = parseInt(v);
			if (isNaN(v)) v = 0;
			break;
			
		case 'float':
			v = parseFloat(v);
			if (isNaN(v)) v = 0; else v = roundNumber(v, precision);
			break;
	}
	
	if (minValue == null) minValue = 0;

	v = Math.max(v, minValue);
	
	if (maxValue == null) {} else {
		if (v > maxValue) v = maxValue;	
	}
	
	document.getElementById(i).value = outputNumber(v);
	return v;
}
function roundNumber(rnum, rlength) {
	if (rlength == null) rlength = roundingFactorForCalculations;
	var v = Math.round(rnum * Math.pow(10, rlength)) / Math.pow(10, rlength);
	v = v.toString();
	if (v.indexOf('.') > -1) {
		var parts = v.split('.');
		v = parts[0] + '.' + parts[1];
		if (parts[1].length < rlength) {
			for(i = parts[1].length; i < rlength; i++) {
				v += '0';	
			}	
		}
	} else {
		v += '.';
		for(i = 0; i < rlength; i++) {
			v += '0';	
		}
	}
	return parseFloat(v);
}
function convertCalculator(u) { return;
	var values = getCalcValues();
	var x = (u == 'metric' ? conversion['us_to_metric'] : conversion['metric_to_us']);
	for(key in values) {
		if (values[key] != '') {
			if (key != 'number_of_birds') {
				document.getElementById(key).value = values[key] * x;	
			}
		}
	}
	calcDensity();
}
function submitContactOptions(q) {
	var e = (document.getElementById("c-email") ? document.getElementById("c-email").value : '');
	var c = (document.getElementById("c-city") ? document.getElementById("c-city").value : '');
	var s = (document.getElementById("c-state") ? document.getElementById("c-state").value : '');
	//var html = document.getElementById("calculator-stage").innerHTML;
	
	var x = 'House Length: ' + document.getElementById("house_length").value + ' ' + unitLabel + '|' +
		'House Width: ' + document.getElementById("house_width").value + ' ' + unitLabel + '|' + 
		'Number of Pullets or Hens: ' + document.getElementById("number_of_birds").value + '|' +
		'Pullet or Hen Density: ' + document.getElementById("densityResults").innerHTML + ' ' + unitLabel + '|' + 
		'Selected: ';
		
	if (document.getElementById("two-loops").checked) {
		x += 'Two Loops' + '|' +
		'Offset A: ' + document.getElementById("two_endwall_offset_left").value + ' ' + unitLabel + '|' +
		'Offset B: ' + document.getElementById("two_endwall_offset_right").value + ' ' + unitLabel + '|' +
		'Preferred Tube: ' + document.getElementById("two_preferred_tube").options[document.getElementById("two_preferred_tube").selectedIndex].text + '|' + 
		'Actual Offset A: ' + document.getElementById("two_endwall_offset_left_actual").innerHTML + ' ' + unitLabel + '|' +
		'Actual Offset B: ' + document.getElementById("two_endwall_offset_right_actual").innerHTML + ' ' + unitLabel + '|';
		
	} else {
		x += 'Four Loops' + '|' +
		'Offset A: ' + document.getElementById("four_endwall_offset_left").value + ' ' + unitLabel + '|' +
		'Offset C: ' + document.getElementById("four_center_offset").value + ' ' + unitLabel + '|' +
		'Offset B: ' + document.getElementById("four_endwall_offset_right").value + ' ' + unitLabel + '|' + 
		'Preferred Tube: ' + document.getElementById("four_preferred_tube").options[document.getElementById("four_preferred_tube").selectedIndex].text + '|' + 
		'Actual Offset A: ' + document.getElementById("four_endwall_offset_left_actual").innerHTML + ' ' + unitLabel + '|' +
		'Actual Offset C: ' + document.getElementById("four_center_offset_actual").innerHTML + ' ' + unitLabel + '|' +
		'Actual Offset B: ' + document.getElementById("four_endwall_offset_right_actual").innerHTML + ' ' + unitLabel + '|';
	}

	var chart = '';
	for(ix = 0; ix < numTubes; ix++) {
		if (document.getElementById("two-loops").checked) {
			var l = document.getElementById("label-two-" + ix).innerHTML;
			chart += l + ' Birds per pan: ' + document.getElementById("two_birds_per_pan-" + ix).innerHTML + '|';
			chart += l + ' Feeder space per bird (' + (unitLabel == 'feet' ? 'inches' : 'cm') + '): ' + document.getElementById("two_feeder_space_per_bird-" + ix).innerHTML + '|';
			chart += l + ' Total feeders in house: ' + document.getElementById("two_total_feeders_in_house-" + ix).innerHTML + '|';
			chart += l + ' Total feeders per loop: ' + document.getElementById("two_total_feeders_per_loop-" + ix).innerHTML + '|';
			chart += l + ' Length of one loop (' + unitLabel + '): ' + document.getElementById("two_length_of_one_loop-" + ix).innerHTML + '|';				
		} else {
			var l = document.getElementById("label-four-" + ix).innerHTML;
			chart += l + ' Birds per pan: ' + document.getElementById("four_birds_per_pan-" + ix).innerHTML + '|';
			chart += l + ' Feeder space per bird (' + (unitLabel == 'feet' ? 'inches' : 'cm') + '): ' + document.getElementById("four_feeder_space_per_bird-" + ix).innerHTML + '|';
			chart += l + ' Total feeders in house: ' + document.getElementById("four_total_feeders_in_house-" + ix).innerHTML + '|';
			chart += l + ' Total feeders per loop: ' + document.getElementById("four_total_feeders_per_loop-" + ix).innerHTML + '|';
			chart += l + ' Length of one loop (' + unitLabel + '): ' + document.getElementById("four_length_of_one_loop-" + ix).innerHTML + '|';				
		}
	}	
	
	if (q == 'print') {
		x_printCalcResults(x, chart, printCalcResults_cb);		
	} else {
		x_submitContactOptions(e, c, s, x, chart, submitContactOptions_cb);
	}
}
function submitContactOptions_cb(z) {
	var results = z.split("|");
	if (results[0] == 0) {
		document.getElementById("contact-form-msg").innerHTML = results[1];
	} else {
		document.getElementById("contact-form-msg").innerHTML = results[1];	
		document.getElementById("c-submit").disabled = true;
	}
}
function printCalcResults_cb(z) {
	var w = window.open("");
	w.document.write(z);
	w.print();
	w.close();	
}
function toggleContactForm(c) {
	var d = (c.checked && c.value == 1 ? 'block' : 'none');
	document.getElementById("contact-form").style.display = d;
}

