r = new Array(2)
function setStartState()
{
 state="start"
 r[0] = "0"
 r[1] = "0"
 operand=""
 ix=0
}
function addDigit(n)
{
 if(state=="gettingInteger" || state=="gettingFloat")
  r[ix]=appendDigit(r[ix],n)
 else{
  r[ix]=""+n
  state="gettingInteger"
 }
 display(r[ix])
}
function appendDigit(n1,n2)
{
 if(n1=="0") return ""+n2
 var s=""
 s+=n1
 s+=n2
 return s
}
function display(s){
 document.calculator.total.value=s
}
function addDecimalPoint()
{
 if(state!="gettingFloat")
  { 
    decimal=true
    r[ix]+="."
    if(state=="haveOperand" || state=="getOperand2") r[ix]="0."
    state="gettingFloat"
    display(r[ix])
  }
}
function clearDisplay()
{
 setStartState()
 display(r[0])
}
function changeSign(){
 if(r[ix].charAt(0)=="-") r[ix]=r[ix].substring(1,r[ix].length)
 else if(parseFloat(r[ix])!=0) r[ix]="-"+r[ix]
 display(r[ix])
}
function setTo(n)
{
 r[ix]=""+n
 state="haveOperand"
 decimal=false
 display(r[ix])
}
function calc()
{
 if(state=="gettingInteger" || state=="gettingFloat" ||
  state=="haveOperand"){
  if(ix==1){
   r[0]=calculateOperation(operand,r[0],r[1])
   ix=0
  }
 }else if(state=="getOperand2"){
  r[0]=calculateOperation(operand,r[0],r[0])
  ix=0
 }
 state="haveOperand"
 decimal=false
 display(r[ix])
}
function calculateOperation(op,x,y)
{
 var result=""
 if(op=="+"){
  result=""+(parseFloat(x)+parseFloat(y))
 }else if(op=="-"){
  result=""+(parseFloat(x)-parseFloat(y))
 }else if(op=="*"){
  result=""+(parseFloat(x)*parseFloat(y))
 }else if(op=="/"){
  if(parseFloat(y)==0){
   alert("Division by 0 not allowed.")
   result=0
  }else result=""+(parseFloat(x)/parseFloat(y))
 }
 return result
}
function performOp(op)
{
 if(state=="start"){
  ++ix
  operand=op
 }else if(state=="gettingInteger" || state=="gettingFloat" ||
  state=="haveOperand"){
  if(ix==0){
   ++ix
   operand=op
  }else{
   r[0]=calculateOperation(operand,r[0],r[1])
   display(r[0])
   operator=op
  }
 }
 state="getOperand2"
 decimal=false
}
function applyFunction()
{
 var selectionList=document.calculator.functions
 var selIX=selectionList.selectedIndex
 var sel=selectionList.options[selIX].value
 if(sel=="abs") r[ix]=Math.abs(r[ix])
 else if(sel=="acos") r[ix]=Math.acos(r[ix])
 else if(sel=="asin") r[ix]=Math.asin(r[ix])
 else if(sel=="atan") r[ix]=Math.atan(r[ix])
 else if(sel=="ceil") r[ix]=Math.ceil(r[ix])
 else if(sel=="cos") r[ix]=Math.cos(r[ix])
 else if(sel=="exp") r[ix]=Math.exp(r[ix])
 else if(sel=="floor") r[ix]=Math.floor(r[ix])
 else if(sel=="log") r[ix]=Math.log(r[ix])
 else if(sel=="sin") r[ix]=Math.sin(r[ix])
 else if(sel=="sqrt") r[ix]=Math.sqrt(r[ix])
 else r[ix]=Math.tan(r[ix])
 decimal=false
 display(r[ix])
}
