docs: function indentElement( element, classes, dir ) {
  		if ( element.getCustomData( 'indent_processed' ) )
  			return;
  
  		var editor = this.editor,
  			isIndent = this.isIndent;
  
  		if ( classes ) {
  			// Transform current class f to indent step index.
  			var indentClass = element.$.className.match( this.classNameRegex ),
  				indentStep = 0;
  
  			if ( indentClass ) {
  				indentClass = indentClass[ 1 ];
  				indentStep = CKEDITOR.tools.indexOf( classes, indentClass ) + 1;
  			}
  
  			// Operate on indent step index, transform indent step index
  			// back to class name.
  			if ( ( indentStep += isIndent ? 1 : -1 ) < 0 )
  				return;
  
  			indentStep = Math.min( indentStep, classes.length );
  			indentStep = Math.max( indentStep, 0 );
  			element.$.className = CKEDITOR.tools.ltrim( element.$.className.replace( this.classNameRegex, '' ) );
  
  			if ( indentStep > 0 )
  				element.addClass( classes[ indentStep - 1 ] );
  		} else {
  			var indentCssProperty = getIndentCss( element, dir ),
  				currentOffset = parseInt( element.getStyle( indentCssProperty ), 10 ),
  				indentOffset = editor.config.indentOffset || 40;
  
  			if ( isNaN( currentOffset ) )
  				currentOffset = 0;
  
  			currentOffset += ( isIndent ? 1 : -1 ) * indentOffset;
  
  			if ( currentOffset < 0 )
  				return;
  
  			currentOffset = Math.max( currentOffset, 0 );
  			currentOffset = Math.ceil( currentOffset / indentOffset ) * indentOffset;
  
  			element.setStyle( indentCssProperty, currentOffset ?
  					currentOffset + ( editor.config.indentUnit || 'px' )
  				:
  					'' );
  
  			if ( element.getAttribute( 'style' ) === '' )
  				element.removeAttribute( 'style' );
  		}
  
  		CKEDITOR.dom.element.setMarker( this.database, element, 'indent_processed', 1 );
  
  		return;
  	}