// КалькулЯтор. (автор Е.П.Лилитко, модификациЯ А.А.Дуванова)

var go_input    = false;
var znak        = "";
var mznak       = false;
var x           = 0;
var point       = false;

function calc (a,b,z)
{
  if (z=="+") return a+b;
  if (z=="-") return a-b;
  if (z=="*") return a*b;
  if (b) return a/b;
  return parseFloat("a");
}

function set_x()
{
  if(isNaN(x))
  {
    document.calculator.display.value = "0 - Error";
    x = 0;
  }
  else document.calculator.display.value = x;
}

function back()
{
  var l  = document.calculator.display.value.length;
  var l0 = (document.calculator.display.value.charAt(0)=="-") ? 2:1;
   document.calculator.display.value = (l>l0) ?
    document.calculator.display.value.substring(0,l-1) : "0";
}


function ent(c)
{
  // Если нажали на цифру или точку
  if("01234567890.".indexOf(c) >= 0)
  {
    if(c==".")
    {
      if(point) return;
      point = true;
    }
    mznak = false;
    if(go_input)
      document.calculator.display.value =
        document.calculator.display.value+c;
    else
    {
      document.calculator.display.value = c;
      go_input = true;
    }
  }
  else if (c=="P")
  {
   document.calculator.display.value = Math.PI;
   mznak = false;
   go_input = true;
  }
  else if (c=="Z") document.calculator.display.value =
                    -document.calculator.display.value
  else if (c=="B") back();
  else if (c!="C")
  {
    if (mznak) return;
    point=false;
    go_input = false;
    if (c!="=") mznak = true;
    if ("+-*/".indexOf(c) >= 0)
    {
      if (znak != "")
      {
        x = calc(x,parseFloat(document.calculator.display.value),znak);
        set_x();
        znak = c;
      }
      else
      {
        x = parseFloat(document.calculator.display.value);
        znak = c;
      }
    }
    else if (znak != "")
    {
      x = calc(x,parseFloat(document.calculator.display.value),znak);
      set_x();
      znak = "";
    }
  }
  else
  {
     x = document.calculator.display.value = 0;
     go_input = false;
     znak     = "";
     mznak    = false;
     point    = false;
  }
}
