// Set the name of the person
function SetName()
{
  var strTempName;

  strTempName = prompt( "Please enter your name: ", "" );
  if( ( null != strTempName ) && ( "" != strTempName ) )
      g_strName = strTempName;
}

////////////////////////////////
// Public methods

// Get the name of the person
function GetName()
{
  return g_strName;
}

// Get the elapsed time
function GetElapsedTime()
{
  return g_nElapsedTime;
}

// Get the number of errors
function GetErrors()
{
  return g_strErrors;
}

// Get the image to display
function GetImage()
{
  return g_strImage;
}

// Get table
function GetTable()
{
  return g_strTable;
}

// Get the award title
function GetAward()
{
  return g_strAward;
}

////////////////////////////////

// randomizes integers in array pointed to by aNumbers
// that is nSize numbers long
function RandArray( aNumbers )
{
  var i, nTemp;

  for( i = 0; i < ( aNumbers.length - 1 ); i++ )
  {
    nPlace = i + Math.floor( Math.random() * ( aNumbers.length - i ) );
    nTemp = aNumbers[i];
    aNumbers[i] = aNumbers[nPlace];
    aNumbers[nPlace] = nTemp;
  }
}

// runs through the flash cards
function Ready()
{
  var aDeck = new Array();
  var nSize = 12;
  var nDone;
  var nPlace;
  var strAnswer;
  var strRightAnswer;
  var nAnswer;
  var nTemp;
  var strOp;
  var nNum1;
  var nNum2;
  var i;
  var nStartTime = new Date();
  var nEndTime;
  var nErrors = 0;
  var wndAward;

  // Get person's name if not already entered
  if( "" == g_strName )
    SetName();

  // initialize deck
  for( i = 0; i < nSize; i++ )
    aDeck[i] = i + 1;
  RandArray( aDeck );

  // read form
  with( document.flash_form.flash_op )
  {
    strOp = options[selectedIndex].value;
  }
  with( document.flash_form.flash_num )
  {
    nNum2 = Math.floor( options[selectedIndex].text );
  }

  // deal cards
  for( nDone = nSize, nPlace = 0; nDone > 0; )
  {
    // Calculate
    if( '+' == strOp )
    {
      nNum1 = aDeck[nPlace];
      nRightAnswer = nNum1 + nNum2;
      g_strTable = g_astrTableNum[nNum2-1] + " addition tables";
    }
    else if( '-' == strOp )
    {
      nNum1 = aDeck[nPlace] + nNum2;
      nRightAnswer = nNum1 - nNum2;
      g_strTable = g_astrTableNum[nNum2-1] + " subtraction tables";
    }
    else if( '*' == strOp )
    {
      nNum1 = aDeck[nPlace];
      nRightAnswer = nNum1 * nNum2;
      g_strTable = g_astrTableNum[nNum2-1] + " multiplication tables";
    }
    else if( '/' == strOp )
    {
      nNum1 = aDeck[nPlace] * nNum2;
      nRightAnswer = nNum1 / nNum2;
      g_strTable = g_astrTableNum[nNum2-1] + " division tables";
    }
    strPrompt = nNum1 + ' ' + strOp + ' ' + nNum2 + ' = ';

    // Display next card
    for( strAnswer = ""; "" == strAnswer; )
    {
      strAnswer = prompt( strPrompt, "" );
      if( null == strAnswer )
        return;
    }
    nAnswer = Math.floor( strAnswer );

    // Check answer
    if( nAnswer != nRightAnswer )
    {
      // show right answer
      alert( "Sorry, " + strPrompt + nRightAnswer );
      // place three ahead in deck
      nTemp = aDeck[( nPlace + 3 ) % nDone];
      aDeck[( nPlace + 3 ) % nDone] = aDeck[nPlace];
      aDeck[nPlace] = nTemp;
      nErrors++;
    }
    else
    {
      // remove card from deck
      aDeck[nPlace] = aDeck[nDone - 1];
      nDone--;
    }
    // Get ready for next card
    if( nDone > 0 )
        nPlace = ( nPlace + 1 ) % nDone;
  }

  // Present award
  nEndTime = new Date();
  g_nElapsedTime = Math.round( ( nEndTime.getTime() - nStartTime.getTime() ) / 1000.0 );
  if( nErrors == 0 )
    g_strErrors = "no errors!";
  else if( nErrors == 1 )
    g_strErrors = "only one error.";
  else
    g_strErrors = nErrors + " errors.";

  // image to show on award page
  g_strImage = '<img src="images/';
  if( ( g_nElapsedTime < 20 ) && ( nErrors == 0 ) )
  {
    g_strImage += 'gold';
    g_strAward = 'Gold Medal Award';
  }
  else if( ( ( g_nElapsedTime < 30 ) && ( nErrors == 0 ) ) ||
           ( ( g_nElapsedTime < 20 ) && ( nErrors == 1 ) ) )
  {
    g_strImage += 'silver';
    g_strAward = 'Silver Medal Award';
  }
  else if( ( ( g_nElapsedTime < 40 ) && ( nErrors == 0 ) ) ||
           ( ( g_nElapsedTime < 30 ) && ( nErrors == 1 ) ) ||
           ( ( g_nElapsedTime < 20 ) && ( nErrors == 2 ) ) )
  {
    g_strImage += 'bronze';
    g_strAward = 'Bronze Medal Award';
  }
  else
  {
    g_strImage += 'mention';
    g_strAward = 'Honorable Mention Award';
  }
  g_strImage += '.gif" width="200" height="200">';

  // new window
  wndAward = window.open("award.htm", "award", "width=640,height=480,scrollbars=yes,resizable=yes,menubar=yes,toolbar=yes", true );
}
