// extract numerical value from string
function MPParseNumString(input)
	{
	thisString = new String(input);
	thisString = thisString+"";
	var result = "";
	var regEx =  /^[0-9.]/;
	var l = thisString.length;
	for (var n=0; n<l; n++)
		{
		var thisChar = thisString.charAt(n);
		if (regEx.test(thisChar)) result += thisChar;
		}
	if (result == '.' || result == '') result = 0;
		else result = parseFloat(result);
	if (isNaN(result)) result = 0;
	return result;
	}

// get processing values
function MPGetFormResults(rtype)
	{
	var psig = MPParseNumString(document.steamCalc.psig.value);
	var temp = MPParseNumString(document.steamCalc.temp.value);
	var rtype = MPParseNumString(rtype);
	var url = 'resources/php/ajax.php?psig='+psig+'&temp='+temp;
	var ajax = new MPBasicAjax();
	ajax.forwardData.rtype = rtype;
	ajax.doGet(url, MPJSSubmitCallback, 'text');
	}

// function to temporarily highlight then fade element
function MPHighlightFade(thisID)
	{
	var bgOrig = '#DFDFDF';
	var hlDuration = 2000;
	thisDiv = document.getElementById(thisID);
	thisDiv.style.backgroundColor = '#ffff64';
	var hLight = new Spry.Effect.Highlight(thisID, {duration: hlDuration, to:bgOrig});
	hLight.start();
	}

// form results callback
var MPJSSubmitCallback = function(response, forwardData)
	{
	var rtype = forwardData.rtype;
	data = response.parseJSON();
	// handle validation request
	if (rtype == 2 || rtype == 1)
		{
		var output = '('+data.mintemp+'&deg;F to '+data.maxtemp+'&deg;F at '+data.psigused+' PSIG)';
		MPReplaceContents('sc_temp_span', output);
		if (data.psigentered != data.psigused)
			{
			MPHighlightFade('sc_pressure');
			document.steamCalc.psig.value = data.psigused;
			}
		if (data.tempentered != data.tempused)
			{
			MPHighlightFade('sc_temperature');
			document.steamCalc.temp.value = data.tempused;
			}
		}
	// handle submission request
	if (rtype == 1 || document.steamCalc.submitStatus.value == 1)
		{
		var output = '';
		output += '<div class="pair" id="sc_volume">\n';
		output += '	<span class="sc_left_column">\n';
		output += '		<label>Calculated Volume:</label>\n';
		output += '	</span>\n';
		output += '	<span class="sc_right_column">\n';
		output += '		<span id="sc_results"><strong>'+data.volume+'</strong> (ft<sup>3</sup>/lb.)</span>\n';
		output += '	</span>\n';
		output += '</div>\n';
		// output += '	<p>(calculated on '+data.psigused+' PSIG at '+data.tempused+'&deg;F)</p>\n';
		MPReplaceContents('result_container', output);
		output = '';
		output += '<a href="#" onclick="return MPResetForm();"><img src="resources/images/btn_reset_form.gif" alt="Reset Form" /></a>\n';
		output += '<input type="image" src="resources/images/btn_calculate_volume.gif" alt="Calculate Volume" id="calcSubmitBtn" />\n';
		output += '<input type="hidden" name="formStatus" value="submitted" />\n';
		output += '<input type="hidden" name="redirect" value="1" />\n';
		MPReplaceContents('sc_submit', output);
		MPHighlightFade('sc_volume');
		document.steamCalc.submitStatus.value = 1;
		}
	}

// function to reset form
function MPResetForm()
	{
	document.steamCalc.psig.value = 0;
	document.steamCalc.temp.value = 212;
	document.steamCalc.submitStatus.value = 0;
	MPReplaceContents('result_container', ' ');
	output = '';
	output += '<input type="image" src="resources/images/btn_calculate_volume.gif" alt="Calculate Volume" id="calcSubmitBtn" />\n';
	output += '<input type="hidden" name="formStatus" value="submitted" />\n';
	output += '<input type="hidden" name="redirect" value="1" />\n';
	MPReplaceContents('sc_submit', output);
	var output = '(212&deg;F to 600&deg;F at 0 PSIG)';
	MPReplaceContents('sc_temp_span', output);
	return false;
	}

// test form submission
var MPJSSubmit = function()
	{
	var result = MPGetFormResults(1);
	return false;
	}

// test form submission
var MPJSValidate = function()
	{
	var result = MPGetFormResults(2);
	return false;
	}

// handle event listeners
Spry.Utils.addLoadListener(
	function()
		{
		Spry.Utils.addEventListener("steamCalcForm", "submit", MPJSSubmit, false);
		Spry.Utils.addEventListener("sc_pressure_input", "blur", MPJSValidate, false);
		Spry.Utils.addEventListener("sc_temperature_input", "blur", MPJSValidate, false);
		}
	);

// function to replace element's contents
function MPReplaceContents(elementID, text)
	{
	if (document.layers)
		{
		if (typeof eval("document."+elementID+".document") != "undefined")
			{
			with (eval("document."+elementID+".document"))
				{
				open();
				write("<HTML><HEAD><\/HEAD><BODY>"+text+"<\/BODY><\/HTML>");
				close();
				}
			}
		} else if (document.all) {
		if (typeof document.all[elementID] != "undefined") document.all[elementID].innerHTML = text;
		} else if (document.getElementById && !document.all) {
		var thisElement = document.getElementById(elementID);
		if (thisElement && thisElement.innerHTML)
			thisElement.innerHTML = text;
		}
	}