Index: _source/lang/en.js
===================================================================
--- _source/lang/en.js	(revision 4774)
+++ _source/lang/en.js	Tue Dec 22 02:54:52 CST 2009
@@ -414,14 +414,7 @@
 		accessNever	: 'Never',
 		align		: 'Align',
 		alignLeft	: 'Left',
-		alignAbsBottom: 'Abs Bottom',
-		alignAbsMiddle: 'Abs Middle',
-		alignBaseline	: 'Baseline',
-		alignBottom	: 'Bottom',
-		alignMiddle	: 'Middle',
 		alignRight	: 'Right',
-		alignTextTop	: 'Text Top',
-		alignTop	: 'Top',
 		quality		: 'Quality',
 		qualityBest		 : 'Best',
 		qualityHigh		 : 'High',
Index: _source/plugins/flash/dialogs/flash.js
===================================================================
--- _source/plugins/flash/dialogs/flash.js	(revision 4774)
+++ _source/plugins/flash/dialogs/flash.js	Tue Dec 22 02:53:34 CST 2009
@@ -30,7 +30,7 @@
 		pluginspage : [ { type : ATTRTYPE_EMBED, name : 'pluginspage' } ],
 		src : [ { type : ATTRTYPE_PARAM, name : 'movie' }, { type : ATTRTYPE_EMBED, name : 'src' } ],
 		name : [ { type : ATTRTYPE_EMBED, name : 'name' } ],
-		align : [ { type : ATTRTYPE_OBJECT, name : 'align' } ],
+//		align : [ { type : ATTRTYPE_OBJECT, name : 'align' } ],
 		title : [ { type : ATTRTYPE_OBJECT, name : 'title' }, { type : ATTRTYPE_EMBED, name : 'title' } ],
 		'class' : [ { type : ATTRTYPE_OBJECT, name : 'class' }, { type : ATTRTYPE_EMBED, name : 'class'} ],
 		width : [ { type : ATTRTYPE_OBJECT, name : 'width' }, { type : ATTRTYPE_EMBED, name : 'width' } ],
@@ -168,6 +168,39 @@
 		}
 	}
 
+	// There's only one committing process allowed each time to avoid cycling.
+	var internalCommit;
+
+	// Synchronous field values to other impacted fields when necessary,
+	// e.g. alignment change should alter inline-style text as well.
+	function commitInternally( targetFields )
+	{
+		if( internalCommit )
+			return;
+
+		var dialog = this.getDialog(),
+			object = dialog.objectNode,
+			embeded = dialog.embedNode;
+
+		if( object || embeded )
+		{
+			internalCommit = 1;
+			// Commit this field and broadcast to target fields.
+			this.commit( object, embeded );
+
+			targetFields = [].concat( targetFields );
+			var length = targetFields.length,
+				field;
+			for ( var i = 0; i < length; i++ )
+			{
+				field = dialog.getContentElement.apply( dialog, targetFields[ i ].split( ':' ) );
+				field && field.setup( object, embeded );
+			}
+			internalCommit = 0;
+		}
+	}
+
+
 	CKEDITOR.dialog.add( 'flash', function( editor )
 	{
 		var makeObjectTag = !editor.config.flashEmbedTagOnly,
@@ -182,20 +215,40 @@
 			title : editor.lang.flash.title,
 			minWidth : 420,
 			minHeight : 310,
+			onLoad : function()
+			{
+				// Custom commit dialog logic, where we're intended to give inline style
+				// field (txtdlgGenStyle) higher priority to avoid overwriting styles contribute
+				// by other fields.
+				this.commitContent = function()
+				{
+					var args = arguments;
+					var inlineStyleField = this.getContentElement( 'advanced', 'style' );
+					inlineStyleField && inlineStyleField.commit.apply( inlineStyleField, args );
+
+					this.foreach( function( widget )
+					{
+						if ( widget.commit &&  widget.id != 'style' )
+							widget.commit.apply( widget, args );
+					});
+				}
+			},
 			onShow : function()
 			{
-				// Clear previously saved elements.
-				this.fakeImage = this.objectNode = this.embedNode = null;
 				previewPreloader = new CKEDITOR.dom.element( 'embeded', editor.document );
 
+
+				var objectNode, embedNode, paramMap = {},
+					fakeImage = this.getSelectedElement();
+
 				// Try to detect any embed or object tag that has Flash parameters.
-				var fakeImage = this.getSelectedElement();
+				// If there's no selected object or embed, create one. Otherwise, reuse the
+				// selected object and embed nodes.
 				if ( fakeImage && fakeImage.getAttribute( '_cke_real_element_type' ) && fakeImage.getAttribute( '_cke_real_element_type' ) == 'flash' )
 				{
 					this.fakeImage = fakeImage;
 
-					var realElement = editor.restoreRealElement( fakeImage ),
-						objectNode = null, embedNode = null, paramMap = {};
+					var realElement = editor.restoreRealElement( fakeImage );
 					if ( realElement.getName() == 'cke:object' )
 					{
 						objectNode = realElement;
@@ -214,21 +267,9 @@
 					else if ( realElement.getName() == 'cke:embed' )
 						embedNode = realElement;
 
-					this.objectNode = objectNode;
-					this.embedNode = embedNode;
-
-					this.setupContent( objectNode, embedNode, paramMap, fakeImage );
 				}
-			},
-			onOk : function()
+				else
-			{
+				{
-				// If there's no selected object or embed, create one. Otherwise, reuse the
-				// selected object and embed nodes.
-				var objectNode = null,
-					embedNode = null,
-					paramMap = null;
-				if ( !this.fakeImage )
-				{
 					if ( makeObjectTag )
 					{
 						objectNode = CKEDITOR.dom.element.createFromHtml( '<cke:object></cke:object>', editor.document );
@@ -242,19 +283,25 @@
 					{
 						embedNode = CKEDITOR.dom.element.createFromHtml( '<cke:embed></cke:embed>', editor.document );
 						embedNode.setAttributes(
-							{
-								type : 'application/x-shockwave-flash',
-								pluginspage : 'http://www.macromedia.com/go/getflashplayer'
-							} );
+						{
+							type : 'application/x-shockwave-flash',
+							pluginspage : 'http://www.macromedia.com/go/getflashplayer'
+						} );
 						if ( objectNode )
 							embedNode.appendTo( objectNode );
 					}
 				}
-				else
+
+				this.objectNode = objectNode;
+				this.embedNode = embedNode;
+				
+				this.setupContent( this.objectNode, this.embedNode, paramMap, fakeImage );
+			},
+			onOk : function()
-				{
+			{
-					objectNode = this.objectNode;
-					embedNode = this.embedNode;
-				}
+				var objectNode = this.objectNode,
+					embedNode = this.embedNode,
+					paramMap = null;
 
 				// Produce the paramMap if there's an object tag.
 				if ( objectNode )
@@ -280,9 +327,11 @@
 				else
 					editor.insertElement( newFakeImage );
 			},
-
 			onHide : function()
 			{
+				// Clear previously saved elements.
+				this.fakeImage = this.objectNode = this.embedNode = null;
+
 				if ( this.preview )
 					this.preview.setHtml('');
 			},
@@ -561,21 +610,57 @@
 									style : 'width : 100%;',
 									items :
 									[
-										[ editor.lang.common.notSet , ''],
+										[ editor.lang.common.notSet , '' ],
-										[ editor.lang.image.alignLeft , 'left'],
-										[ editor.lang.image.alignAbsBottom , 'absBottom'],
-										[ editor.lang.image.alignAbsMiddle , 'absMiddle'],
-										[ editor.lang.image.alignBaseline , 'baseline'],
-										[ editor.lang.image.alignBottom , 'bottom'],
-										[ editor.lang.image.alignMiddle , 'middle'],
-										[ editor.lang.image.alignRight , 'right'],
-										[ editor.lang.image.alignTextTop , 'textTop'],
-										[ editor.lang.image.alignTop , 'top']
+										[ editor.lang.flash.alignLeft , 'left' ],
+										[ editor.lang.flash.alignRight , 'right' ]
 									],
-									setup : loadValue,
-									commit : commitValue
+									onChange : function()
+									{
+										commitInternally.call( this, 'advanced:style' );
-								},
+									},
+									setup : function( objectElement, embedElement )
-								{
+									{
+										var element = objectElement || embedElement;
+										
+										if ( element )
+										{
+											var value = element.getStyle( 'float' );
+											switch ( value )
+											{
+												// Ignore those unrelated values.
+												case 'inherit':
+												case 'none':
+													value = '';
+											}
+											!value && ( value = ( element.getAttribute( 'align' ) || '' ).toLowerCase() );
+											this.setValue( value );
+										}
+									},
+									commit : function( objectElement, embedElement )
+									{
+										var element = objectElement || embedElement;
+										if ( element )
+										{
+											var value = this.getValue();
+											value ? element.setStyle( 'float', value )
+													: element.removeStyle( 'float' ); 
+
+											if ( !internalCommit )
+											{
+												value = ( element.getAttribute( 'align' ) || '' ).toLowerCase();
+												switch ( value )
+												{
+													// we should remove it only if it matches "left" or "right",
+													// otherwise leave it intact.
+													case 'left':
+													case 'right':
+														element.removeAttribute( 'align' );
+												}
+											}
+										}
+									}
+								},
+								{
 									type : 'html',
 									html : '<div></div>'
 								}
@@ -677,9 +762,28 @@
 							type : 'text',
 							id : 'style',
 							label : editor.lang.common.cssStyle,
-							setup : loadValue,
-							commit : commitValue
+							onChange : function ()
+							{
+								commitInternally.call( this,
+									[ 'properties:align' ] );
+							},
+							setup : function( objectElement, embedElement )
+							{
+								var element = objectElement || embedElement;
+								if ( element )
+								{
+									var genStyle = element.getAttribute( 'style' )
+											|| element.$.style.cssText;
+
+									this.setValue( genStyle );
-						}
+								}
+							},
+							commit : function( objectElement, embedElement )
+							{
+								var element = objectElement || embedElement;
+								element && element.setAttribute( 'style', this.getValue() );
+							}
+						}
 					]
 				}
 			]
