function getDoubleValue(id, defaultValue)
{
  try
  {
    var elem;
    elem = document.getElementById(id);
    if (elem == null)
      return defaultValue;
    var value;
    value = parseFloat(elem.value);
    if (isNaN(value)) return defaultValue;
      return  value;

  }
  catch(error)
  {
  }
}

function setCellContent(id, value)
{
  try
  {
    var elem;
    elem = document.getElementById(id);
    if (elem != null)
    {
      elem.innerHTML = value;
    }

  }
  catch(error)
  {
  }
}

function RoundValue(value, digits)
{
  return (Math.round(value * Math.pow(10, digits)) / Math.pow(10, digits))
}

function updateOEEValues()
{
  try
  {
  var ShiftLength;
  var ShortBreakCount;
  var ShortBreakDuration;
  var MealBreakCount;
  var MealBreakDuration;
  var Downtime;
  var PlannedProduction;

  var BadParts;
  var TotalParts;
  var PartPerMinute;
  var PartPrice;

  var Availability;
  var Performance;
  var Quality;
  var OEE;

  var AvailabilityMoney;
  var PerformanceMoney;
  var QualityMoney;
  var OEEMoney;
  var IdealProductionValue;

  ShiftLength = getDoubleValue('ShiftLength', 0);
  ShortBreakCount = getDoubleValue('ShortBreakCount', 0);
  ShortBreakDuration = getDoubleValue('ShortBreakDuration', 0);
  MealBreakCount = getDoubleValue('MealBreakCount', 0);
  MealBreakDuration = getDoubleValue('MealBreakDuration', 0);

  PartPerMinute = getDoubleValue('PartPerMinute', 0);
  PartPrice = getDoubleValue('PartPrice', 0);

  Downtime = getDoubleValue('Downtime', 0);
  BadParts = getDoubleValue('BadParts', 0);
  TotalParts = getDoubleValue('TotalParts', 0);

  PlannedProductionTime = ShiftLength - ShortBreakCount * ShortBreakDuration - MealBreakCount * MealBreakDuration;
  ActualProductionTime = PlannedProductionTime - Downtime;
  Availability = ActualProductionTime / PlannedProductionTime;
  AvailabilityMoney = (ActualProductionTime - PlannedProductionTime) * PartPerMinute * PartPrice;



  PlannedProduction = PartPerMinute * ActualProductionTime;
  Performance = TotalParts / PlannedProduction;
  PerformanceMoney = (TotalParts - PlannedProduction) * PartPrice;

  PlannedProduction = PartPerMinute * ActualProductionTime;
  Performance = TotalParts / PlannedProduction;

  Quality = (TotalParts - BadParts) / TotalParts;
  QualityMoney = -1 * BadParts * PartPrice;

  OEEMoney = AvailabilityMoney + PerformanceMoney + QualityMoney;

  setCellContent('PlannedProductionTimeValue', PlannedProductionTime);
  setCellContent('ActualProductionTimeValue', ActualProductionTime);
  setCellContent('PlannedProductionValue', PlannedProduction);
  setCellContent('IdealProductionValue', RoundValue(Math.abs(PlannedProductionTime * PartPerMinute * PartPrice), 0));

  setCellContent('AvailabilityValue', RoundValue(Availability * 100, 1));
  setCellContent('PerformanceValue', RoundValue(Performance * 100, 1));
  setCellContent('QualityValue', RoundValue(Quality * 100, 1));
  setCellContent('OEEValue', RoundValue(Availability * Performance * Quality * 100, 1));

  setCellContent('AvailabilityMoney', '' + RoundValue(Math.abs(AvailabilityMoney), 0) + (AvailabilityMoney<0?' Loss':' Gain'));
  setCellContent('PerformanceMoney', RoundValue(Math.abs(PerformanceMoney), 0) + (PerformanceMoney<0?' Loss':' Gain'));
  setCellContent('QualityMoney', RoundValue(Math.abs(QualityMoney), 0) + (QualityMoney<0?' Loss':' Gain'));
  setCellContent('OEEMoney', RoundValue(Math.abs(OEEMoney), 0) + (OEEMoney<0?' Loss':' Gain'));

  }
  catch(error)
  {
    alert(error.message);
  }
}