//
// A collection of functions used for converting a unit measurement
// to another unit measurement, based on the selections made on the form.
//

function stopError() {
	return true;
}
//window.onerror = stopError;

var nPrecise = 18;
GetPrecise();

function GetPrecise()
{
	// Try to get the saved setup values.
	if (nPrecise == null)
		nPrecise = getCookie("NumPrecise");
	return nPrecise;
}

function SetPrecise(nDigits)
{
	nPrecise = nDigits;
	if (nPrecise == null)
		nPrecise = 6;
	// Save the setup values and let them expire a year from now.
	var expDate = new Date();
	expDate.setTime(expDate.getTime() + (1000 * 60 * 60 * 24 * 365));
	setCookie("NumPrecise",nPrecise);
}

function Convert(uForm)
{
	var lFrom     = parseFloat(uForm.ValueFrom.value);
	var lUnitFrom = parseFloat(uForm.UnitFrom.options[uForm.UnitFrom.selectedIndex].value);
	var lUnitTo   = parseFloat(uForm.UnitTo.options[uForm.UnitTo.selectedIndex].value);
	var lTo = lFrom;
	if (lUnitFrom != lUnitTo)
		lTo = lFrom * (lUnitTo / lUnitFrom);
//		lTo = formatFloat(lFrom * (lUnitTo / lUnitFrom), nPrecise);
	uForm.ValueTo.value = lTo;
}

function ConvertBack(uForm)
{
	var lTo       = parseFloat(uForm.ValueTo.value);
	var lUnitFrom = parseFloat(uForm.UnitFrom.options[uForm.UnitFrom.selectedIndex].value);
	var lUnitTo   = parseFloat(uForm.UnitTo.options[uForm.UnitTo.selectedIndex].value);
	var lFrom = lTo;
	if (lUnitFrom != lUnitTo)
		lFrom = lTo * (lUnitFrom / lUnitTo);
//		lFrom = formatFloat(lTo * (lUnitFrom / lUnitTo), nPrecise);
	uForm.ValueFrom.value = lFrom;
}

function ConvertTemperature(uForm, reverse)
{
	var lFrom;
	var lUnitFrom;
	var lUnitTo;
	var lTo = NaN;
	if (reverse)
	{
		lFrom     = parseFloat(uForm.ValueTo.value);
		lUnitFrom = uForm.UnitTo.options[uForm.UnitTo.selectedIndex].value;
		lUnitTo   = uForm.UnitFrom.options[uForm.UnitFrom.selectedIndex].value;
	}
	else
	{
		lFrom     = parseFloat(uForm.ValueFrom.value);
		lUnitFrom = uForm.UnitFrom.options[uForm.UnitFrom.selectedIndex].value;
		lUnitTo   = uForm.UnitTo.options[uForm.UnitTo.selectedIndex].value;
	}
	if (lUnitFrom==lUnitTo)
		lTo = lFrom;
	else if (lUnitFrom=="F" && lUnitTo=="C")
		lTo = 5/9 * (lFrom - 32);
	else if (lUnitFrom=="K" && lUnitTo=="C")
		lTo = lFrom - 273.15;
	else if (lUnitFrom=="Ra" && lUnitTo=="C")
		lTo = 5/9 * lFrom - 273.15;
	else if (lUnitFrom=="C" && lUnitTo=="F")
		lTo = 1.8 * lFrom + 32;
	else if (lUnitFrom=="K" && lUnitTo=="F")
		lTo = 1.8 * lFrom - 459.67;
	else if (lUnitFrom=="Ra" && lUnitTo=="F")
		lTo = lFrom - 459.67;
	else if (lUnitFrom=="C" && lUnitTo=="K")
		lTo = lFrom + 273.15;
	else if (lUnitFrom=="F" && lUnitTo=="K")
		lTo = 5/9 * (lFrom + 459.67);
	else if (lUnitFrom=="Ra" && lUnitTo=="K")
		lTo = 5/9 * lFrom;
	else if (lUnitFrom=="C" && lUnitTo=="Ra")
		lTo = 1.8 * lFrom + 491.67;
	else if (lUnitFrom=="F" && lUnitTo=="Ra")
		lTo = lFrom + 459.67;
	else if (lUnitFrom=="K" && lUnitTo=="Ra")
		lTo = 1.8 * lFrom;
	if (reverse)
		uForm.ValueFrom.value = lTo;
	else
		uForm.ValueTo.value = lTo;
}

function formatFloat(number, X) {
	// rounds number to X decimal places, default is 6
	X = (!X ? 6 : X);
	var exponVal = Math.pow(10,X);
	return Math.round(number * exponVal) / exponVal;
}

// Retrieve a cookie
function getCookie(name){
  var cname = name + "=";
  var dc = document.cookie;
  if (dc.length > 0) {
    begin = dc.indexOf(cname);
    if (begin != -1) {
      begin += cname.length;
      end = dc.indexOf(";", begin);
      if (end == -1) end = dc.length;
      return unescape(dc.substring(begin, end));
    }
  }
  return null;
}

// Save a cookie
function setCookie(name, value) {
  document.cookie = name + "=" + escape(value) + "; path=/" +
    ((expDate == null) ? "" : "; expires=" + expDate.toGMTString());
}

