// Definitions 

var ans = 0 
var sign = "" 
var num = "" 
var calcsw = "N"
var calculation = ""
var pos = 0
var ok = ""
var n1 = 0
var n2 = 0
var sn = ""
var r = 0
var ans3 = new Array(10)
var sign3 = new Array(10)
var num3 = "" 
var stack = 0
for (i = 0; i <= 10; i++) { 
  ans3 [i] = 0
  sign3 [i] = ""
}
var inlit=""
var places=""

// Push button (first calculator)

function but(val) {

  if (calcsw == "N") {
    document.getElementById('dispcalc').innerHTML=""
    document.getElementById('congrat').innerHTML=""
  }

  if (val=="c") {
    clear()
    return
  }
  
   if (calcsw == "Y") {
    if (calculation.substring(pos,pos+1)!=val) {alert ("You've made a mistake");return}
    pos++  
  } 

  if (val>="0" && val<="9") {
    if (num.length > 7) {alert ("Number too long to input"); return}
    num = num + val
    if (num.length > 7 && parseFloat(num)==0) {alert ("Number too small - treated as zero"); num="0"}
    show(num)
  }
  else if (val==".") {
    if (num.indexOf(".",0) != -1) {alert ("Already got decimal point"); return}
    if (num.length > 6) {alert ("Number too long to input"); return}
    num = num + val; show(num)
  }
  else if (val=="=") {
    sum(); sign = ""
    if (calcsw == "Y") {
      document.getElementById('congrat').innerHTML = "Finished!"
      calcsw = "N"
    } 
  }
  else if (val=="+" || val=="-" || val=="x" || val=="/")  {
    if (val=="-" && num=="") {
      if (sign!="" || ans == 0) {num = val; show(num); return}
    }
    sum(); sign = val
  }

}

// Show result

function show(x) {

  if (x >= 100000000) {alert ("Number too long to display"); return}
  if (x <= -10000000) {alert ("Number too long to display"); return}
  if (x >0 && x < 0.000001) {x=0}
  if (x <0 && x > -0.000001) {x=0}
  xstr = x + ""
  if (xstr.length > 7) {xstr = xstr.substring(0,8); x = parseFloat(xstr,10)}

  document.calc.answer.value = x

}

// Clear

function clear() {

    ans = 0; sign = ""; num = ""; 
    show(ans)
    calcsw = "N"
    document.getElementById('dispcalc').innerHTML=""
    document.getElementById('congrat').innerHTML=""

}

// Do sum

function sum() {

  if (num=="") {return} 

  x = parseFloat(num,10)

  if (sign=="/" && x==0) {alert ("Divide by zero"); return}

  if (sign=="+") {ans = ans + x}
  else if (sign=="-") {ans = ans - x}
  else if (sign=="x") {ans = ans * x}
  else if (sign=="/") {ans = ans / x}
  else {ans = x}

  show(ans)
  num = ""
}

// Get calculation (for calculator)

function getcalc() {

  clear()
  calcsw = "Y"
  pos = 0

  randcalc()

  calculation = n1 + sn + n2 + "="

  document.getElementById('dispcalc').innerHTML=n1 + " " + sn + " " + n2 + " " + "="

}

// Random calculation 

function randcalc() {

  r = rnd(4)
  if (r==1) {n1 = rnd(999)}
  else if (r==2) {n1 = rnd(99)}
  else if (r==3) {n1 = 1 + rnd(8)}
  else if (r==4) {n1=parseFloat(rnd(9)+"."+rnd(99))}

  r = rnd(4)
  if (r==1) {n2 = rnd(999)}
  else if (r==2) {n2 = rnd(99)}
  else if (r==3) {n2 = 1 + rnd(8)}
  else if (r==4) {n2=parseFloat(rnd(9)+"."+rnd(99))}

  r = rnd(4)
  if (r==1) {sn="+"} 
  else if (r==2) {sn="-"} 
  else if (r==3) {sn="x"} 
  else if (r==4) {sn="/"} 

}

// Random number generator 

function rnd(max) { 
  var rndnum = max * Math.random() 
  rndnum = Math.ceil (rndnum) 
  return rndnum 
} 

// Get calculation (for estimation)

function getcalc2() {

  document.getElementById('congrat2').innerHTML=""

  randcalc()

  ans1 = evaluate(n1,n2,sn)

  r3 = rnd(6)
  if (r3 == 1) {
    r2=r; while (r2==r) {r2 = rnd(4)}
    if (r2==1) {snb="+"} 
    else if (r2==2) {snb="-"} 
    else if (r2==3) {snb="x"} 
    else if (r2==4) {snb="/"} 
    ans2 = evaluate(n1,n2,snb)
  }
  else if (r3 == 2) {
    x = n1+""
    n1b = x.substring(0,1) + x
    ans2 = evaluate(n1b,n2,sn)
  }
  else if (r3 == 3) {
    x = n2+""
    n2b = x.substring(1,x.length)
    ans2 = evaluate(n1,n2b,sn)
  }
  else if (r3 > 3) {
    ans2 = ans1
  }

  if (ans2 == ans1) {ok = "Y"} else {ok = "N"}
   
  lit = n1 + ' ' + sn + ' ' + n2 + ' = ' + ans2 + '<BR><BR>' 
  lit = lit + '<INPUT TYPE=BUTTON VALUE="Right" ONCLICK=chkcalc2("Y")>&nbsp;&nbsp;&nbsp;&nbsp;'
  lit = lit + '<INPUT TYPE=BUTTON VALUE="Wrong" ONCLICK=chkcalc2("N")>'

  document.getElementById('dispcalc2').innerHTML = lit

}

// Check calculation (estimation)

function chkcalc2(inp) {
  
  document.getElementById('congrat2').innerHTML=""
  if (inp=="Y" && ok=="N") {alert ("No, the answer is wrong");return}
  if (inp=="N" && ok=="Y") {alert ("No, the answer is correct");return}
  document.getElementById('congrat2').innerHTML="  Well done!"
  
}

// Evaluate calculation 

function evaluate(nn1,nn2,s) {
 
  if (s=="+") {a = nn1 + nn2}
  else if (s=="-") {a = nn1 - nn2}
  else if (s=="x") {a = nn1 * nn2}
  else if (s=="/") {a = nn1 / nn2}
  x = a + ""; x = x.substring(0,8); a = parseFloat(x,10)
  return a
 
}

// Push button (second calculator)

function but3(val) {

  if (val=="c") {clear3(); return}
  
  inlit = inlit + val
  document.calc3.inpt.value = inlit
  document.calc3.inpt.focus()

  if (val>="0" && val<="9") {
    if (num3.length > 7) {alert ("Number too long to input"); return}
    num3 = num3 + val
    if (num3.length > 7 && parseFloat(num3)==0) {alert ("Number too small - treated as zero"); num3="0"}
    show3(num3)
    return
  }

  if (val==".") {
    if (num3.indexOf(".",0) != -1) {alert ("Already got decimal point"); return}
    if (num3.length > 6) {alert ("Number too long to input"); return}
    num3 = num3 + val; show3(num3)
    return
  }

  if (val=="-" && num3=="") {
    if (sign3[stack]!="" || ans3[stack] == 0) {num3 = val; show(num3); return}
  }

  if (val=="±") {
    if (num3!="") {x = parseFloat(num3,10); x=-x; num3=x+""; show3(num3); return}
    ans3[stack]=-ans3[stack]; show3(ans3[stack]); return
  }

  if (val=="n") {
    if (num3!="") {
      x = parseFloat(num3,10)
      if (x==0) {alert ("Divide by zero"); return}
      x=1/x; num3=x+""; show3(num3); return
    }
    if (ans3[stack]==0) {alert ("Divide by zero"); return}
    ans3[stack]=1/ans3[stack]; show3(ans3[stack]); return
  }

  if (val=="%") {
    if (num3=="") {alert ("You must enter a number before %"); return}
    if (sign3[stack] != "-" && sign3[stack] != "+") {alert ("You can only add or subtract a %"); return}
    x = parseFloat(num3,10)
    x = ans3[stack] * x / 100
    sum3(x); num3=""; sign3[stack] = ""
    return
  }

  if (val=="x" || val=="/") {
    if (sign3[stack] != "x" && sign3[stack] != "/") {stack++}
    sum3(num3); num3=""; sign3[stack] = val
    return
  }

  if (val=="+" || val=="-" || val=="=") {
    if (sign3[stack] == "x" || sign3[stack] == "/") {
      sum3(num3); num3=""
      stack--; sum3(ans3[stack+1]); ans3[stack+1] = ""; sign3[stack] = val
      return
    }
    sum3(num3); num3=""
    if (val=="=") {sign3[stack] = ""} else {sign3[stack] = val}
    return
  }

  if (val==" ") {return}

  alert ("Incorrect symbol - "+val)

}

// Show result (second calculator)

function show3(x) {

  if (x >= 100000000) {alert ("Number too long to display"); return}
  if (x <= -10000000) {alert ("Number too long to display"); return}
  if (x >0 && x < 0.000001) {x=0}
  if (x <0 && x > -0.000001) {x=0}

  xstr = x + ""
  if (xstr.length > 7) {xstr = xstr.substring(0,8); x = parseFloat(xstr,10)}

  if (places=="0") {x = Math.round(x)}
  if (places=="2") {
    x = (Math.round(x * 100))/100 + "" 
    dot = x.indexOf(".",0) 
    if (dot == -1) {x = x + ".00"} 
    else if (dot == x.length - 2) {x = x + "0"}   
  }

  document.calc3.answer3.value = x

}


// Clear (second calculator)

function clear3() {

  stack = 0
  for (i = 0; i <= 10; i++) { 
    ans3 [i] = 0
    sign3 [i] = ""
  }
  num3 = "" 
  show3(0)
  inlit=""
  document.calc3.inpt.value = inlit
  document.calc3.pl.item(0).checked=true
}

// Do sum

function sum3(n) {

  if (n=="") {return} 

  x = parseFloat(n,10)

  if (sign3[stack]=="/" && x==0) {alert ("Divide by zero"); return}

  if (sign3[stack]=="+") {ans3[stack] = ans3[stack] + x}
  else if (sign3[stack]=="-") {ans3[stack] = ans3[stack] - x}
  else if (sign3[stack]=="x") {ans3[stack] = ans3[stack] * x}
  else if (sign3[stack]=="/") {ans3[stack] = ans3[stack] / x}
  else {ans3[stack] = x}

  sign3[stack] = ""

  show3(ans3[stack])

}

// Set places

function setpl(x) {

  places=x

  if (num3!="") {show3(num3); return}
  show3(ans3[stack]); return

}

// Redo calculation

function redo() {

  lit = document.calc3.inpt.value
  clear3()

  for (i = 0; i < lit.length; i++) { 
    y = lit.substring(i,i+1) 
    but3(y)
  }

}