rem:  node = node.parentNode.nextSibling; depth--; 
add:  while ( node && depth > 0 ) { node = node.parentNode; depth--; if ( node.nextSibling ) { node = node.nextSibling; break; } } 
context: function gatherTextUnder ( root ) {  var text = "";  var node = root.firstChild;  var depth = 1;  while ( node && depth > 0 ) {    // See if this node is text.    if ( node.nodeType == Node.TEXT_NODE ) {      // Add this text to our collection.      text += " " + node.data;    } else if ( node instanceof HTMLImageElement ) {      // If it has an alt= attribute, use that.      var altText = node.getAttribute( "alt" );      if ( altText && altText != "" ) {        text = altText;        break;      }    }    // Find next node to test.    // First, see if this node has children.    if ( node.hasChildNodes() ) {      // Go to first child.      node = node.firstChild;      depth++;    } else {      // No children, try next sibling.      if ( node.nextSibling ) {        node = node.nextSibling;      } else {        // Last resort is our next oldest uncle/aunt.        node = node.parentNode.nextSibling;        depth--;      }    }  }  // Strip leading whitespace.  text = text.replace( /^\s+/, "" );  // Strip trailing whitespace.  text = text.replace( /\s+$/, "" );  // Compress remaining whitespace.  text = text.replace( /\s+/g, " " );  return text;}
meta: 9421	/local1/tlutelli/issta_data/temp/all_js/javascript/2007_temp/2007/9421/9ebc143a45b522e2f81d6737ee7308f8057a9ea7/utilityOverlay.js/buggy/xpfe/communicator/resources/content/utilityOverlay.js