﻿// Set cookie expiration date to a year from now
var expDate = new Date();                                   
expDate.setTime(expDate.getTime() + (1000 * 60 * 60 * 24 * 365));

var numDigs;
numDigs=60;

var curQuantity;
var quantities = new Array("Area", "Bits", "Density", "Energy", "Force", "Length", 
  "Mass", "Power", "Pressure", "Speed", "Temperature", "Volume");
var initializing = true;

function initialize(quantity){
  curQuantity = quantity;
  if (!initializing) setCookie("curQuantity", curQuantity);
  Convert();
}

function Convert(){
  with(document.ConvertForm){
    ValueTo.value = formatFloat(parseFloat(ValueFrom.value) * 
      parseFloat(UnitFrom.options[UnitFrom.selectedIndex].value) /
      parseFloat(UnitTo.options[UnitTo.selectedIndex].value), numDigs);
  }
}

function ConvertBack(){
  with(document.ConvertForm){
    ValueFrom.value = formatFloat(parseFloat(ValueTo.value) /
      parseFloat(UnitFrom.options[UnitFrom.selectedIndex].value) *
      parseFloat(UnitTo.options[UnitTo.selectedIndex].value), numDigs);
  }
}

function formatFloat(number,X) {
// rounds number to X decimal places, default is 6
    X = (!X ? 6 : X);
    return Math.round(number*Math.pow(10,X))/Math.pow(10,X);
}

function ToSI(Temperature, TemperatureUnit)
{
  if      (TemperatureUnit == "Celsius")     return Temperature + 273.15;
  else if (TemperatureUnit == "Fahrenheit")  return 5/9 * (Temperature + 459.67);
  else if (TemperatureUnit == "Kelvin")      return Temperature;
  else if (TemperatureUnit == "Rankine")     return 5/9 * Temperature;
  else if (TemperatureUnit == "Réaumure")    return 5/4 * Temperature + 273.15;
  else {
    window.alert('Error: Unknown temperature unit: ' + TemperatureUnit);
    return 0;
  }
}

function ConvertTemperature()
{
  with (document.ConvertForm) {
    // Initialization
    TempIn       = parseFloat(ValueFrom.value);
    UnitFromName = UnitFrom.options[UnitFrom.selectedIndex].value;
    UnitToName   = UnitTo.options[UnitTo.selectedIndex].value;

    // Conversion
    TempSI        = ToSI(TempIn, UnitFromName);
    ValueTo.value = formatFloat(FromSI(TempSI, UnitToName), numDigs);
  }
}

function FromSI(Temperature, TemperatureUnit)
{
  if      (TemperatureUnit == "Celsius")    return Temperature - 273.15;
  else if (TemperatureUnit == "Fahrenheit") return 9/5 * Temperature - 459.67;
  else if (TemperatureUnit == "Kelvin")     return Temperature;
  else if (TemperatureUnit == "Rankine")    return 9/5 * Temperature;
  else if (TemperatureUnit == "Réaumure")   return 4/5 * (Temperature - 273.15);
  else {
    window.alert('Error: Unknown temperature unit: ' + TemperatureUnit);
    return 0;
  }
}

function ConvertTemperatureBack()
{
  with (document.ConvertForm) {
    // Initialization
    TempIn       = parseFloat(ValueTo.value);
    UnitFromName = UnitFrom.options[UnitFrom.selectedIndex].value;
    UnitToName   = UnitTo.options[UnitTo.selectedIndex].value;

    // Conversion
    TempSI          = ToSI(TempIn, UnitToName);
    ValueFrom.value = formatFloat(FromSI(TempSI, UnitFromName), numDigs);
  }
}

function initialize(){
  initialize('Temperature');
  ConvertTemperature();
}
