+ return node;\r
+ }\r
+\r
+ function switchDir( element, dir, editor, database )\r
+ {\r
+ // Mark this element as processed by switchDir.\r
+ CKEDITOR.dom.element.setMarker( database, element, 'bidi_processed', 1 );\r
+\r
+ // Check whether one of the ancestors has already been styled.\r
+ var parent = element;\r
+ while ( ( parent = parent.getParent() ) && !parent.is( 'body' ) )\r
+ {\r
+ if ( parent.getCustomData( 'bidi_processed' ) )\r
+ {\r
+ // Ancestor style must dominate.\r
+ element.removeStyle( 'direction' );\r
+ element.removeAttribute( 'dir' );\r
+ return null;\r
+ }\r
+ }\r
+\r
+ var useComputedState = ( 'useComputedState' in editor.config ) ? editor.config.useComputedState : 1;\r
+\r
+ var elementDir = useComputedState ? element.getComputedStyle( 'direction' )\r
+ : element.getStyle( 'direction' ) || element.hasAttribute( 'dir' );\r
+\r
+ // Stop if direction is same as present.\r
+ if ( elementDir == dir )\r
+ return null;\r
+\r
+ // Reuse computedState if we already have it.\r
+ var dirBefore = useComputedState ? elementDir : element.getComputedStyle( 'direction' );\r
+\r
+ // Clear direction on this element.\r