docs: function( el, isMoveToEnd ) {
  
  			function nextDFS( node, childOnly ) {
  				var next;
  
  				if ( node.type == CKEDITOR.NODE_ELEMENT && node.isEditable( false ) )
  					next = node[ isMoveToEnd ? 'getLast' : 'getFirst' ]( notIgnoredEval );
  
  				if ( !childOnly && !next )
  					next = node[ isMoveToEnd ? 'getPrevious' : 'getNext' ]( notIgnoredEval );
  
  				return next;
  			}
  
  			// Handle non-editable element e.g. HR.
  			if ( el.type == CKEDITOR.NODE_ELEMENT && !el.isEditable( false ) ) {
  				this.moveToPosition( el, isMoveToEnd ? CKEDITOR.POSITION_AFTER_END : CKEDITOR.POSITION_BEFORE_START );
  				return true;
  			}
  
  			var found = 0;
  
  			while ( el ) {
  				// Stop immediately if we've found a text node.
  				if ( el.type == CKEDITOR.NODE_TEXT ) {
  					// Put cursor before block filler.
  					if ( isMoveToEnd && this.endContainer && this.checkEndOfBlock() && nbspRegExp.test( el.getText() ) )
  						this.moveToPosition( el, CKEDITOR.POSITION_BEFORE_START );
  					else
  						this.moveToPosition( el, isMoveToEnd ? CKEDITOR.POSITION_AFTER_END : CKEDITOR.POSITION_BEFORE_START );
  					found = 1;
  					break;
  				}
  
  				// If an editable element is found, move inside it, but not stop the searching.
  				if ( el.type == CKEDITOR.NODE_ELEMENT ) {
  					if ( el.isEditable() ) {
  						this.moveToPosition( el, isMoveToEnd ? CKEDITOR.POSITION_BEFORE_END : CKEDITOR.POSITION_AFTER_START );
  						found = 1;
  					}
  					// Put cursor before padding block br.
  					else if ( isMoveToEnd && el.is( 'br' ) && this.endContainer && this.checkEndOfBlock() )
  						this.moveToPosition( el, CKEDITOR.POSITION_BEFORE_START );
  					// Special case - non-editable block. Select entire element, because it does not make sense
  					// to place collapsed selection next to it, because browsers can't handle that.
  					else if ( el.getAttribute( 'contenteditable' ) == 'false' && el.is( CKEDITOR.dtd.$block ) ) {
  						this.setStartBefore( el );
  						this.setEndAfter( el );
  						return true;
  					}
  				}
  
  				el = nextDFS( el, found );
  			}
  
  			return !!found;
  		}