<PUBLIC:EVENT NAME="onResultChange" ID="rcID" />
<PUBLIC:ATTACH EVENT="onclick" ONEVENT="doCalc()" />

<SCRIPT LANGUAGE="JScript">

var sResult = '0';
var num1 = 0;
var num2 = 0;
var bNewNumber=true;
var sOperation = '+';
var bEquals = false;



function sign(sVal)
{
   num2    = parseFloat(sResult);
   sResult = -1 * num2;
   bNewNumber=true;
}

function operation (sVal)
{

   num2    = parseFloat(sResult);
   if (sOperation == '+')
     sResult = num1+num2;
   else if (sOperation == '-')
     sResult = num1 - num2;
   else if (sOperation == '*')
     sResult = num1 * num2;
   else if (sOperation == '/')
   {
     if (num2 == 0)
        sResult = "Error";
     else
        sResult = num1 / num2;
   }

      if (sVal != '=')
      {
        sOperation = sVal;
        num1    = parseFloat (sResult);
      }
      else
      {
 //     bEquals = true;
        num1 = 0;
        sOperation = '+';
      }


     bNewNumber=true;
}

function digit (sVal)
{
   if (bNewNumber)
      sResult= sVal;
   else
      sResult= sResult + sVal;

   bNewNumber=false;
}

function clear()
{
  sResult= '0';
  num1   = 0;
  num2   = 0;
  sOperation = '+';
  bNewNumber=true;
}

function stripBlanks (sVal)
{
   var sTemp = "";
   var i;

   for (i=0; i < sVal.length; i++)
   {
     x = sVal.substr(i,1);
     if (x != ' ')
       sTemp = sTemp + x;
   }

  return sTemp;  
}

function KeyCodeToChar(iKeyCode)
{
   switch (iKeyCode)
   {
      case 48: return '0';
      case 49: return '1';
      case 50: return '2';
      case 51: return '3';
      case 52: return '4';
      case 53: return '5';
      case 54: return '6';
      case 55: return '7';
      case 56: return '8';
      case 57: return '9';
      case 27: return 'C';
      case 190:return '.';
      case 189:return '-';
      case 191:return '/';

// 189: '-';
// 187: '=';
// 187+shift : '+'
// 56+shift : '*'
// 191: '/'
   }
}

function doCalc()
{
   oElement = event.srcElement;
   window.status = oElement.value;

   if (event.type == "keydown")
      sVal = KeyCodeToChar (event.keyCode);
   else
   {
      if (event.srcElement.type != "button")
         return;
      sVal = stripBlanks(event.srcElement.value);
   }

   if ((sResult == "Error") && (sVal != 'C'))
      return;

   if ((sVal=='0') || (sVal == '1') || 
       (sVal=='2') || (sVal == '3') || 
       (sVal=='4') || (sVal == '5') || 
       (sVal=='6') || (sVal == '7') || 
       (sVal=='8') || (sVal == '9') || (sVal == '.'))
      digit (sVal);
   
   else if ((sVal == '+') || (sVal == '-') || 
            (sVal == '*') || (sVal == '/') ||
            (sVal == '='))
      operation (sVal);

   else if (sVal == '+/-')
      sign (sVal);

   else if (sVal == 'C')
      clear ();

   oEvent = createEventObject();
   oEvent.result = sResult;
   rcID.fire (oEvent);
}

</SCRIPT>
