text: var gotoLabels= {};
  var whileLabels = {};
  
  // overload the original Selenium reset function
  Selenium.prototype.reset = function() {
      // reset the labels
      this.initialiseLabels();
      // proceed with original reset code
      this.defaultTimeout = Selenium.DEFAULT_TIMEOUT;
      this.browserbot.selectWindow("null");
      this.browserbot.resetPopups();
  }
  
  Selenium.prototype.initialiseLabels = function()
  {
      gotoLabels = {};
      whileLabels = { ends: {}, whiles: {} };
      var command_rows = [];
      var numCommands = testCase.commands.length;
      for (var i = 0; i < numCommands; ++i) {
          var x = testCase.commands[i];
          command_rows.push(x);
      }
      var cycles = [];
      for( var i = 0; i < command_rows.length; i++ ) {
          if (command_rows[i].type == 'command')
          switch( command_rows[i].command.toLowerCase() ) {
              case "label":
                  gotoLabels[ command_rows[i].target ] = i;
                  break;
              case "while":
              case "endwhile":
                  cycles.push( [command_rows[i].command.toLowerCase(), i] )
                  break;
          }
      }  
      var i = 0;
      while( cycles.length ) {
          if( i >= cycles.length ) {
              throw new Error( "non-matching while/endWhile found" );
          }
          switch( cycles[i][0] ) {
              case "while":
                  if( ( i+1 < cycles.length ) && ( "endwhile" ==
  cycles[i+1][0] ) ) {
                      // pair found
                      whileLabels.ends[ cycles[i+1][1] ] = cycles[i][1];
                      whileLabels.whiles[ cycles[i][1] ] = cycles[i+1][1];
                      cycles.splice( i, 2 );
                      i = 0;
                  } else ++i;
                  break;
              case "endwhile":
                  ++i;
                  break;
          }
      }
  }
  
  Selenium.prototype.continueFromRow = function( row_num )
  {
      if(row_num == undefined || row_num == null || row_num < 0) {
          throw new Error( "Invalid row_num specified." );
      }
      testCase.debugContext.debugIndex = row_num;
  }
  
  // do nothing. simple label
  Selenium.prototype.doLabel = function(){};
  
  Selenium.prototype.doGotolabel = function( label )
  {
      if( undefined == gotoLabels[label] ) {
          throw new Error( "Specified label '" + label + "' is not found." );
      }
      this.continueFromRow( gotoLabels[ label ] );
  };
  
  Selenium.prototype.doGoto = Selenium.prototype.doGotolabel;
  
  Selenium.prototype.doGotoIf = function( condition, label )
  {
      if( eval(condition) ) this.doGotolabel( label );
  }
  
  Selenium.prototype.doWhile = function( condition )
  {
      if( !eval(condition) ) {
          var last_row = testCase.debugContext.debugIndex;
          var end_while_row = whileLabels.whiles[ last_row ];
          if( undefined == end_while_row ) throw new Error( "Corresponding'endWhile' is not found." );
          this.continueFromRow( end_while_row );
      }
  }
  
  Selenium.prototype.doEndWhile = function()
  {
      var last_row = testCase.debugContext.debugIndex;
      var while_row = whileLabels.ends[ last_row ] - 1;
      if( undefined == while_row ) throw new Error( "Corresponding 'While' is not found." );
      this.continueFromRow( while_row );
  }
  
  
   
  
  