Index: typo3/sysext/rtehtmlarea/class.tx_rtehtmlarea_base.php
===================================================================
--- typo3/sysext/rtehtmlarea/class.tx_rtehtmlarea_base.php	(revision 3287)
+++ typo3/sysext/rtehtmlarea/class.tx_rtehtmlarea_base.php	(working copy)
@@ -539,8 +539,8 @@
 			bar, textcolor, bgcolor, textindicator,
 			bar, emoticon, insertcharacter, line, link, unlink, image, table,' . (($this->thisConfig['hideTableOperationsInToolbar'] && is_array($this->thisConfig['buttons.']) && is_array($this->thisConfig['buttons.']['toggleborders.']) && $this->thisConfig['buttons.']['toggleborders.']['keepInToolbar']) ? ' toggleborders,': '') . ' user, acronym, bar, findreplace, spellcheck,
 			bar, chMode, inserttag, removeformat, bar, copy, cut, paste, bar, undo, redo, bar, showhelp, about, linebreak, 
-			' . ($this->thisConfig['hideTableOperationsInToolbar'] ? '': 'bar, toggleborders,') . ' bar, tableproperties, bar, rowproperties, rowinsertabove, rowinsertunder, rowdelete, rowsplit, bar,
-			columninsertbefore, columninsertafter, columndelete, columnsplit, bar,
+			' . ($this->thisConfig['hideTableOperationsInToolbar'] ? '': 'bar, toggleborders,') . ' bar, tableproperties, tablerestyle, bar, rowproperties, rowinsertabove, rowinsertunder, rowdelete, rowsplit, bar,
+			columnproperties, columninsertbefore, columninsertafter, columndelete, columnsplit, bar,
 			cellproperties, cellinsertbefore, cellinsertafter, celldelete, cellsplit, cellmerge';
 		
 			// Special toolbar for Mozilla Wamcom on Mac OS 9
@@ -551,8 +551,8 @@
 				bar, orderedlist, unorderedlist, outdent, indent, bar, textcolor, bgcolor, textindicator, bar, emoticon,
 				insertcharacter, line, link, unlink, image, table, user, acronym, bar, findreplace, spellcheck, bar, chMode, inserttag,
 				removeformat, bar, copy, cut, paste, bar, undo, redo, bar, showhelp, about, linebreak,
-				bar, toggleborders, bar, tableproperties, bar, rowproperties, rowinsertabove, rowinsertunder, rowdelete, rowsplit, bar,
-				columninsertbefore, columninsertafter, columndelete, columnsplit, bar,
+				bar, toggleborders, bar, tableproperties, tablerestyle, bar, rowproperties, rowinsertabove, rowinsertunder, rowdelete, rowsplit, bar,
+				columnproperties, columninsertbefore, columninsertafter, columndelete, columnsplit, bar,
 				cellproperties, cellinsertbefore, cellinsertafter, celldelete, cellsplit, cellmerge'
 				: 'bar, blockstylelabel, blockstyle, space, textstylelabel, textstyle, linebreak,
 				bar, fontstyle, space, fontsize, space, formatblock, insertparagraphbefore, insertparagraphafter, blockquote, bar, bold, italic, underline, strikethrough,
@@ -560,8 +560,8 @@
 				orderedlist, unorderedlist, outdent, indent, bar, textcolor, bgcolor, textindicator, bar, emoticon,
 				insertcharacter, line, link, unlink, image, table, user, acronym, linebreak, bar, findreplace, spellcheck, bar, chMode, inserttag,
 				removeformat, bar, copy, cut, paste, bar, undo, redo, bar, showhelp, about, linebreak,
-				bar, toggleborders, bar, tableproperties, bar, rowproperties, rowinsertabove, rowinsertunder, rowdelete, rowsplit, bar,
-				columninsertbefore, columninsertafter, columndelete, columnsplit, bar,
+				bar, toggleborders, bar, tableproperties, tablerestyle, bar, rowproperties, rowinsertabove, rowinsertunder, rowdelete, rowsplit, bar,
+				columnproperties, columninsertbefore, columninsertafter, columndelete, columnsplit, bar,
 				cellproperties, cellinsertbefore, cellinsertafter, celldelete, cellsplit, cellmerge';
 		}
 		
@@ -737,8 +737,7 @@
 			};
 			RTEarea = new Array();
 			RTEarea[0] = new Object();
-			RTEarea[0]["version"] = "' . $TYPO3_CONF_VARS['EXTCONF'][$this->ID]['version'] . '";
-			RTEarea[0]["popupwin"] = "' . $this->writeTemporaryFile('EXT:' . $this->ID . '/htmlarea/popupwin.js', "popupwin") . '";'
+			RTEarea[0]["version"] = "' . $TYPO3_CONF_VARS['EXTCONF'][$this->ID]['version'] . '";'
 			. (($this->client['BROWSER'] == 'msie') ? ('
 			RTEarea[0]["htmlarea-ie"] = "' . $this->writeTemporaryFile('EXT:' . $this->ID . '/htmlarea/htmlarea-ie.js', "htmlarea-ie") . '";')
 			: ('
@@ -810,7 +809,8 @@
 			RTEarea['.$RTEcounter.'].id = "RTEarea'.$RTEcounter.'";
 			RTEarea['.$RTEcounter.'].enableWordClean = ' . (trim($this->thisConfig['enableWordClean'])?'true':'false') . ';
 			RTEarea['.$RTEcounter.']["htmlRemoveComments"] = ' . (trim($this->thisConfig['removeComments'])?'true':'false') . ';
-			RTEarea['.$RTEcounter.']["disableEnterParagraphs"] = ' . (trim($this->thisConfig['disableEnterParagraphs'])?'true':'false') . ';
+			RTEarea['.$RTEcounter.'].disableEnterParagraphs = ' . (trim($this->thisConfig['disableEnterParagraphs'])?'true':'false') . ';
+			RTEarea['.$RTEcounter.'].disableObjectResizing = ' . (trim($this->thisConfig['disableObjectResizing'])?'true':'false') . ';
 			RTEarea['.$RTEcounter.']["removeTrailingBR"] = ' . (trim($this->thisConfig['removeTrailingBR'])?'true':'false') . ';
 			RTEarea['.$RTEcounter.']["useCSS"] = ' . (trim($this->thisConfig['useCSS'])?'true':'false') . ';
 			RTEarea['.$RTEcounter.']["keepButtonGroupTogether"] = ' . (trim($this->thisConfig['keepButtonGroupTogether'])?'true':'false') . ';
@@ -845,67 +845,8 @@
 			foreach ($this->thisConfig['buttons.'] as $buttonIndex => $conf) {
 				$button = substr($buttonIndex, 0, -1);
 				if (in_array($button,$this->toolbar)) {
-					$indexButton = 0;
 					$configureRTEInJavascriptString .= '
-			RTEarea['.$RTEcounter.'].buttons.'.$button.' = {';
-					if (is_array($conf)) {
-						foreach ($conf as $propertyName => $conf1) {
-							$property = $propertyName;
-							if ($indexButton) {
-								$configureRTEInJavascriptString .= ', ';
-							}
-							if (is_array($conf1)) {
-								$property = substr($property, 0, -1);
-								$indexProperty = 0;
-								$configureRTEInJavascriptString .= '"'.$property.'" : {';
-								foreach ($conf1 as $property1Name => $conf2) {
-									$property1 = $property1Name;
-									if ($indexProperty) {
-										$configureRTEInJavascriptString .= ', ';
-									}
-									if (is_array($conf2)) {
-										$property1 = substr($property1, 0, -1);
-										$indexProperty1 = 0;
-										$configureRTEInJavascriptString .= '"'.$property1.'" : {';
-										foreach ($conf2 as $property2Name => $conf3) {
-											$property2 = $property2Name;
-											if ($indexProperty1) {
-												$configureRTEInJavascriptString .= ', ';
-											}
-											if (is_array($conf3)) {
-												$property2 = substr($property2, 0, -1);
-												$indexProperty2 = 0;
-												$configureRTEInJavascriptString .= '"'.$property2.'" : {';
-												foreach($conf3 as $property3Name => $conf4) {
-													$property3 = $property3Name;
-													if ($indexProperty2) {
-														$configureRTEInJavascriptString .= ', ';
-													}
-													if (!is_array($conf4)) {
-														$configureRTEInJavascriptString .= '"'.$property3.'" : '.($conf4?'"'.$conf4.'"':'false');
-													}
-													$indexProperty2++;
-												}
-												$configureRTEInJavascriptString .= '}';
-											} else {
-												$configureRTEInJavascriptString .= '"'.$property2.'" : '.($conf3?'"'.$conf3.'"':'false');												
-											}
-											$indexProperty1++;
-										}
-										$configureRTEInJavascriptString .= '}';
-									} else {
-										$configureRTEInJavascriptString .= '"'.$property1.'" : '.($conf2?'"'.$conf2.'"':'false');
-									}
-									$indexProperty++;
-								}
-								$configureRTEInJavascriptString .= '}';
-							} else {
-								$configureRTEInJavascriptString .= '"'.$property.'" : '.($conf1?'"'.$conf1.'"':'false');
-							}
-							$indexButton++;
-						}
-					}
-					$configureRTEInJavascriptString .= '};';
+			RTEarea['.$RTEcounter.'].buttons.'.$button.' = ' . $this->buildNestedJSArray($conf) . ';';
 				}
 			}
 		}
@@ -1058,9 +999,12 @@
 		
 		$linebreak = $TYPO3_CONF_VARS['EXTCONF'][$this->ID]['enableCompressedScripts'] ? '' : chr(10);
 		$index = 0;
+		$indexNoShow = 0;
+		$indexAlternating = 0;
 		$JSClassesLabelsArray = 'HTMLArea.classesLabels = { ' . $linebreak;
 		$JSClassesValuesArray = 'HTMLArea.classesValues = { ' . $linebreak;
 		$JSClassesNoShowArray = 'HTMLArea.classesNoShow = { ' . $linebreak;
+		$JSClassesAlternatingArray = 'HTMLArea.classesAlternating = { ' . $linebreak;
 		$JSClassesXORArray = 'HTMLArea.classesXOR = { ' . $linebreak;
 		
 			// Scanning the list of classes if specified in the RTE config
@@ -1069,13 +1013,20 @@
 			foreach ($RTEProperties['classes.'] as $className => $conf) {
 				$className = substr($className,0,-1);
 				$classLabel = $this->getPageConfigLabel($conf['name']);
-				$JSClassesLabelsArray .= (($index)?',':'') . '"' . $className . '": ' . $classLabel . $linebreak;
-				$JSClassesValuesArray .= (($index)?',':'') . '"' . $className . '":"' . str_replace('"', '\"', str_replace('\\\'', '\'', $conf['value'])) . '"' . $linebreak;
-				$JSClassesNoShowArray .= (($index)?',':'') . '"' . $className . '":' . ($conf['noShow']?'true':'false') . $linebreak;
+				$JSClassesLabelsArray .= ($index?',':'') . '"' . $className . '": ' . $classLabel . $linebreak;
+				$JSClassesValuesArray .= ($index?',':'') . '"' . $className . '":"' . str_replace('"', '\"', str_replace('\\\'', '\'', $conf['value'])) . '"' . $linebreak;
+				if ($conf['noShow']) {
+					$JSClassesNoShowArray .= ($indexNoShow?',':'') . '"' . $className . '":' . ($conf['noShow']?'true':'false') . $linebreak;
+					$indexNoShow++;
+				}
+				if (is_array($conf['alternating.'])) {
+					$JSClassesAlternatingArray .= ($indexAlternating?',':'') . '"' . $className . '":' . (is_array($conf['alternating.']) ? $this->buildNestedJSArray($conf['alternating.']) : ' "false"') . $linebreak;
+					$indexAlternating++;
+				}
 				if (is_array($RTEProperties['mutuallyExclusiveClasses.']))  {
 					foreach ($RTEProperties['mutuallyExclusiveClasses.'] as $listName => $conf) {
 						if (t3lib_div::inList($conf, $className)) {
-							$JSClassesXORArray .= (($index)?',':'') . '"' . $className . '": /^(' . implode('|', t3lib_div::trimExplode(',', t3lib_div::rmFromList($className, $conf), 1)) . ')$/i' . $linebreak;
+							$JSClassesXORArray .= ($index?',':'') . '"' . $className . '": /^(' . implode('|', t3lib_div::trimExplode(',', t3lib_div::rmFromList($className, $conf), 1)) . ')$/i' . $linebreak;
 							break;
 						}
 					}
@@ -1086,12 +1037,84 @@
 		$JSClassesLabelsArray .= '};' . $linebreak;
 		$JSClassesValuesArray .= '};' . $linebreak;
 		$JSClassesNoShowArray .= '};' . $linebreak;
+		$JSClassesAlternatingArray .= '};' . $linebreak;
 		$JSClassesXORArray .= '};' . $linebreak;
 		
-		return $JSClassesLabelsArray . $JSClassesValuesArray . $JSClassesNoShowArray . $JSClassesXORArray;
+		return $JSClassesLabelsArray . $JSClassesValuesArray . $JSClassesNoShowArray . $JSClassesAlternatingArray . $JSClassesXORArray;
 	}
 	
 	/**
+	 * Translate Page TS Config array in JS nested array definition
+	 *
+	 * @param	array		$conf: Page TSConfig configuration array
+	 *
+	 * @return 	string		nested JS array definition
+	 */
+	function buildNestedJSArray($conf) {
+		$configureRTEInJavascriptString = '{';
+		$index = 0;
+		if (is_array($conf)) {
+			foreach ($conf as $propertyName => $conf1) {
+				$property = $propertyName;
+				if ($index) {
+					$configureRTEInJavascriptString .= ', ';
+				}
+				if (is_array($conf1)) {
+					$property = substr($property, 0, -1);
+					$indexProperty = 0;
+					$configureRTEInJavascriptString .= '"'.$property.'" : {';
+					foreach ($conf1 as $property1Name => $conf2) {
+						$property1 = $property1Name;
+						if ($indexProperty) {
+							$configureRTEInJavascriptString .= ', ';
+						}
+						if (is_array($conf2)) {
+							$property1 = substr($property1, 0, -1);
+							$indexProperty1 = 0;
+							$configureRTEInJavascriptString .= '"'.$property1.'" : {';
+							foreach ($conf2 as $property2Name => $conf3) {
+								$property2 = $property2Name;
+								if ($indexProperty1) {
+									$configureRTEInJavascriptString .= ', ';
+								}
+								if (is_array($conf3)) {
+									$property2 = substr($property2, 0, -1);
+									$indexProperty2 = 0;
+									$configureRTEInJavascriptString .= '"'.$property2.'" : {';
+									foreach($conf3 as $property3Name => $conf4) {
+										$property3 = $property3Name;
+										if ($indexProperty2) {
+											$configureRTEInJavascriptString .= ', ';
+										}
+										if (!is_array($conf4)) {
+											$configureRTEInJavascriptString .= '"'.$property3.'" : '.($conf4?'"'.$conf4.'"':'false');
+										}
+										$indexProperty2++;
+									}
+									$configureRTEInJavascriptString .= '}';
+								} else {
+									$configureRTEInJavascriptString .= '"'.$property2.'" : '.($conf3?'"'.$conf3.'"':'false');												
+								}
+								$indexProperty1++;
+							}
+							$configureRTEInJavascriptString .= '}';
+						} else {
+							$configureRTEInJavascriptString .= '"'.$property1.'" : '.($conf2?'"'.$conf2.'"':'false');
+						}
+						$indexProperty++;
+					}
+					$configureRTEInJavascriptString .= '}';
+				} else {
+					$configureRTEInJavascriptString .= '"'.$property.'" : '.($conf1?'"'.$conf1.'"':'false');
+				}
+				$index++;
+			}
+		}
+		$configureRTEInJavascriptString .= '}';
+		return $configureRTEInJavascriptString;
+	}
+	
+	/**
 	 * Return a Javascript localization array for htmlArea RTE
 	 *
 	 * @return	string		Javascript localization array
Index: typo3/sysext/rtehtmlarea/ext_emconf.php
===================================================================
--- typo3/sysext/rtehtmlarea/ext_emconf.php	(revision 3287)
+++ typo3/sysext/rtehtmlarea/ext_emconf.php	(working copy)
@@ -3,7 +3,7 @@
 ########################################################################
 # Extension Manager/Repository config file for ext: "rtehtmlarea"
 #
-# Auto generated 19-02-2008 22:51
+# Auto generated 25-02-2008 22:22
 #
 # Manual updates:
 # Only the data in the array - anything else is removed by next write.
@@ -32,12 +32,12 @@
 	'author_company' => 'Fructifor Inc.',
 	'CGLcompliance' => '',
 	'CGLcompliance_note' => '',
-	'version' => '1.7.1',
-	'_md5_values_when_last_written' => 'a:414:{s:9:"ChangeLog";s:4:"4dd9";s:29:"class.tx_rtehtmlarea_base.php";s:4:"00c6";s:27:"class.tx_rtehtmlareaapi.php";s:4:"4476";s:21:"ext_conf_template.txt";s:4:"c214";s:12:"ext_icon.gif";s:4:"2f41";s:17:"ext_localconf.php";s:4:"e28b";s:14:"ext_tables.php";s:4:"4f9c";s:14:"ext_tables.sql";s:4:"2d74";s:13:"locallang.xml";s:4:"3cca";s:16:"locallang_db.xml";s:4:"a2a2";s:7:"tca.php";s:4:"3756";s:32:"pi1/class.tx_rtehtmlarea_pi1.php";s:4:"c05e";s:17:"pi1/locallang.xml";s:4:"2e58";s:16:"mod2/acronym.php";s:4:"7e21";s:37:"mod2/class.tx_rtehtmlarea_acronym.php";s:4:"a955";s:41:"mod2/class.tx_rtehtmlarea_acronym_mod.php";s:4:"1e3f";s:14:"mod2/clear.gif";s:4:"cc11";s:13:"mod2/conf.php";s:4:"f442";s:18:"mod2/locallang.xml";s:4:"7dee";s:29:"htmlarea/HTMLAREA_LICENSE.txt";s:4:"a10f";s:26:"htmlarea/htmlarea-gecko.js";s:4:"b61d";s:23:"htmlarea/htmlarea-ie.js";s:4:"ca96";s:20:"htmlarea/htmlarea.js";s:4:"6c9d";s:30:"htmlarea/locallang_dialogs.xml";s:4:"eba4";s:26:"htmlarea/locallang_msg.xml";s:4:"7b6f";s:31:"htmlarea/locallang_tooltips.xml";s:4:"ce8c";s:20:"htmlarea/popupwin.js";s:4:"d0c9";s:50:"htmlarea/skins/default/htmlarea-edited-content.css";s:4:"1cd4";s:35:"htmlarea/skins/default/htmlarea.css";s:4:"7cea";s:42:"htmlarea/skins/default/images/ed_about.gif";s:4:"2763";s:42:"htmlarea/skins/default/images/ed_blank.gif";s:4:"0208";s:45:"htmlarea/skins/default/images/ed_color_bg.gif";s:4:"c6e2";s:45:"htmlarea/skins/default/images/ed_color_fg.gif";s:4:"5d7f";s:41:"htmlarea/skins/default/images/ed_copy.gif";s:4:"4f55";s:43:"htmlarea/skins/default/images/ed_custom.gif";s:4:"e7b2";s:40:"htmlarea/skins/default/images/ed_cut.gif";s:4:"1b00";s:43:"htmlarea/skins/default/images/ed_delete.gif";s:4:"926b";s:41:"htmlarea/skins/default/images/ed_help.gif";s:4:"e7fc";s:39:"htmlarea/skins/default/images/ed_hr.gif";s:4:"f384";s:41:"htmlarea/skins/default/images/ed_html.gif";s:4:"fa6e";s:42:"htmlarea/skins/default/images/ed_image.gif";s:4:"c0f0";s:50:"htmlarea/skins/default/images/ed_left_to_right.gif";s:4:"1a1f";s:41:"htmlarea/skins/default/images/ed_link.gif";s:4:"db9a";s:48:"htmlarea/skins/default/images/ed_list_bullet.gif";s:4:"5620";s:45:"htmlarea/skins/default/images/ed_list_num.gif";s:4:"eb1c";s:42:"htmlarea/skins/default/images/ed_paste.gif";s:4:"fbd2";s:41:"htmlarea/skins/default/images/ed_redo.gif";s:4:"e9e8";s:50:"htmlarea/skins/default/images/ed_right_to_left.gif";s:4:"2a38";s:41:"htmlarea/skins/default/images/ed_save.gif";s:4:"07ad";s:47:"htmlarea/skins/default/images/ed_splitblock.gif";s:4:"503e";s:45:"htmlarea/skins/default/images/ed_splitcel.gif";s:4:"2c04";s:41:"htmlarea/skins/default/images/ed_undo.gif";s:4:"b9ba";s:43:"htmlarea/skins/default/images/ed_unlink.gif";s:4:"86c4";s:53:"htmlarea/skins/default/images/fullscreen_maximize.gif";s:4:"2118";s:53:"htmlarea/skins/default/images/fullscreen_minimize.gif";s:4:"91d6";s:46:"htmlarea/skins/default/images/insert_table.gif";s:4:"c01b";s:58:"htmlarea/skins/default/images/BlockElements/blockquote.gif";s:4:"34dc";s:54:"htmlarea/skins/default/images/BlockElements/indent.gif";s:4:"57df";s:68:"htmlarea/skins/default/images/BlockElements/insertParagraphAfter.gif";s:4:"e335";s:69:"htmlarea/skins/default/images/BlockElements/insertParagraphBefore.gif";s:4:"9c42";s:61:"htmlarea/skins/default/images/BlockElements/justifyCenter.gif";s:4:"420d";s:59:"htmlarea/skins/default/images/BlockElements/justifyFull.gif";s:4:"b129";s:59:"htmlarea/skins/default/images/BlockElements/justifyLeft.gif";s:4:"3799";s:60:"htmlarea/skins/default/images/BlockElements/justifyRight.gif";s:4:"0662";s:55:"htmlarea/skins/default/images/BlockElements/outdent.gif";s:4:"4786";s:52:"htmlarea/skins/default/images/Acronym/ed_acronym.gif";s:4:"1eaa";s:57:"htmlarea/skins/default/images/CharacterMap/ed_charmap.gif";s:4:"af19";s:54:"htmlarea/skins/default/images/UserElements/ed_user.gif";s:4:"bbb4";s:54:"htmlarea/skins/default/images/QuickTag/ed_quicktag.gif";s:4:"a463";s:58:"htmlarea/skins/default/images/SelectColor/CO-forecolor.gif";s:4:"dbc8";s:60:"htmlarea/skins/default/images/SelectColor/CO-hilitecolor.gif";s:4:"d97c";s:55:"htmlarea/skins/default/images/RemoveFormat/ed_clean.gif";s:4:"2a0f";s:53:"htmlarea/skins/default/images/FindReplace/ed_find.gif";s:4:"827f";s:61:"htmlarea/skins/default/images/TableOperations/cell-delete.gif";s:4:"f371";s:67:"htmlarea/skins/default/images/TableOperations/cell-insert-after.gif";s:4:"2dd2";s:60:"htmlarea/skins/default/images/TableOperations/cell-merge.gif";s:4:"a2d2";s:59:"htmlarea/skins/default/images/TableOperations/cell-prop.gif";s:4:"ca41";s:60:"htmlarea/skins/default/images/TableOperations/cell-split.gif";s:4:"d87c";s:60:"htmlarea/skins/default/images/TableOperations/col-delete.gif";s:4:"da78";s:66:"htmlarea/skins/default/images/TableOperations/col-insert-after.gif";s:4:"80d8";s:67:"htmlarea/skins/default/images/TableOperations/col-insert-before.gif";s:4:"d47d";s:59:"htmlarea/skins/default/images/TableOperations/col-split.gif";s:4:"eacc";s:62:"htmlarea/skins/default/images/TableOperations/insert_table.gif";s:4:"c1db";s:60:"htmlarea/skins/default/images/TableOperations/row-delete.gif";s:4:"a289";s:66:"htmlarea/skins/default/images/TableOperations/row-insert-above.gif";s:4:"1ef1";s:66:"htmlarea/skins/default/images/TableOperations/row-insert-after.gif";s:4:"5e98";s:66:"htmlarea/skins/default/images/TableOperations/row-insert-under.gif";s:4:"9ad6";s:58:"htmlarea/skins/default/images/TableOperations/row-prop.gif";s:4:"5344";s:59:"htmlarea/skins/default/images/TableOperations/row-split.gif";s:4:"a712";s:60:"htmlarea/skins/default/images/TableOperations/table-prop.gif";s:4:"0a5c";s:64:"htmlarea/skins/default/images/TableOperations/toggle-borders.gif";s:4:"50cb";s:59:"htmlarea/skins/default/images/TYPO3ViewHelp/module_help.gif";s:4:"a500";s:56:"htmlarea/skins/default/images/InsertSmiley/ed_smiley.gif";s:4:"c331";s:56:"htmlarea/skins/default/images/TYPO3Browsers/ed_image.gif";s:4:"c0f0";s:55:"htmlarea/skins/default/images/TYPO3Browsers/ed_link.gif";s:4:"db9a";s:57:"htmlarea/skins/default/images/TYPO3Browsers/ed_unlink.gif";s:4:"86c4";s:58:"htmlarea/skins/default/images/SpellChecker/spell-check.gif";s:4:"6e0a";s:61:"htmlarea/skins/default/images/InlineElements/bidioverride.gif";s:4:"f38b";s:52:"htmlarea/skins/default/images/InlineElements/big.gif";s:4:"779b";s:53:"htmlarea/skins/default/images/InlineElements/bold.gif";s:4:"06ac";s:57:"htmlarea/skins/default/images/InlineElements/citation.gif";s:4:"b6eb";s:53:"htmlarea/skins/default/images/InlineElements/code.gif";s:4:"6057";s:59:"htmlarea/skins/default/images/InlineElements/definition.gif";s:4:"692d";s:60:"htmlarea/skins/default/images/InlineElements/deletedtext.gif";s:4:"4eec";s:57:"htmlarea/skins/default/images/InlineElements/emphasis.gif";s:4:"04c9";s:61:"htmlarea/skins/default/images/InlineElements/insertedtext.gif";s:4:"a624";s:55:"htmlarea/skins/default/images/InlineElements/italic.gif";s:4:"be83";s:57:"htmlarea/skins/default/images/InlineElements/keyboard.gif";s:4:"53ac";s:59:"htmlarea/skins/default/images/InlineElements/monospaced.gif";s:4:"78c0";s:58:"htmlarea/skins/default/images/InlineElements/quotation.gif";s:4:"7c62";s:55:"htmlarea/skins/default/images/InlineElements/sample.gif";s:4:"667c";s:54:"htmlarea/skins/default/images/InlineElements/small.gif";s:4:"e013";s:53:"htmlarea/skins/default/images/InlineElements/span.gif";s:4:"0dfa";s:62:"htmlarea/skins/default/images/InlineElements/strikethrough.gif";s:4:"73b1";s:55:"htmlarea/skins/default/images/InlineElements/strong.gif";s:4:"7f50";s:58:"htmlarea/skins/default/images/InlineElements/subscript.gif";s:4:"36c0";s:60:"htmlarea/skins/default/images/InlineElements/superscript.gif";s:4:"40c4";s:58:"htmlarea/skins/default/images/InlineElements/underline.gif";s:4:"dfac";s:57:"htmlarea/skins/default/images/InlineElements/variable.gif";s:4:"da61";s:48:"htmlarea/plugins/BlockElements/block-elements.js";s:4:"e016";s:44:"htmlarea/plugins/BlockElements/locallang.xml";s:4:"2f2c";s:35:"htmlarea/plugins/Acronym/acronym.js";s:4:"9895";s:38:"htmlarea/plugins/Acronym/locallang.xml";s:4:"fead";s:46:"htmlarea/plugins/CharacterMap/character-map.js";s:4:"c653";s:43:"htmlarea/plugins/CharacterMap/locallang.xml";s:4:"1feb";s:58:"htmlarea/plugins/CharacterMap/popups/select_character.html";s:4:"a909";s:44:"htmlarea/plugins/DefaultFont/default-font.js";s:4:"8f2d";s:42:"htmlarea/plugins/DefaultFont/locallang.xml";s:4:"a7f8";s:43:"htmlarea/plugins/UserElements/locallang.xml";s:4:"33f9";s:46:"htmlarea/plugins/UserElements/user-elements.js";s:4:"91ca";s:39:"htmlarea/plugins/QuickTag/locallang.xml";s:4:"2f53";s:38:"htmlarea/plugins/QuickTag/quick-tag.js";s:4:"f93b";s:36:"htmlarea/plugins/QuickTag/tag-lib.js";s:4:"ba71";s:46:"htmlarea/plugins/QuickTag/popups/quicktag.html";s:4:"34c7";s:39:"htmlarea/plugins/InlineCSS/inlinecss.js";s:4:"460b";s:40:"htmlarea/plugins/InlineCSS/locallang.xml";s:4:"5dec";s:46:"htmlarea/plugins/TYPO3HtmlParser/locallang.xml";s:4:"8010";s:52:"htmlarea/plugins/TYPO3HtmlParser/typo3html-parser.js";s:4:"af6a";s:42:"htmlarea/plugins/SelectColor/locallang.xml";s:4:"9f9e";s:44:"htmlarea/plugins/SelectColor/select-color.js";s:4:"749b";s:48:"htmlarea/plugins/DefaultInline/default-inline.js";s:4:"9875";s:44:"htmlarea/plugins/DefaultInline/locallang.xml";s:4:"7b16";s:46:"htmlarea/plugins/DefaultImage/default-image.js";s:4:"4f07";s:43:"htmlarea/plugins/DefaultImage/locallang.xml";s:4:"1fdd";s:54:"htmlarea/plugins/DefaultImage/popups/insert_image.html";s:4:"7b8b";s:40:"htmlarea/plugins/TextStyle/locallang.xml";s:4:"ff67";s:40:"htmlarea/plugins/TextStyle/text-style.js";s:4:"2f3f";s:43:"htmlarea/plugins/RemoveFormat/locallang.xml";s:4:"aa85";s:46:"htmlarea/plugins/RemoveFormat/remove-format.js";s:4:"0c90";s:54:"htmlarea/plugins/RemoveFormat/popups/removeformat.html";s:4:"a3b1";s:44:"htmlarea/plugins/FindReplace/find-replace.js";s:4:"ab77";s:41:"htmlarea/plugins/FindReplace/fr_engine.js";s:4:"095f";s:42:"htmlarea/plugins/FindReplace/locallang.xml";s:4:"f836";s:53:"htmlarea/plugins/FindReplace/popups/find_replace.html";s:4:"8d1e";s:41:"htmlarea/plugins/TYPO3Image/locallang.xml";s:4:"ab27";s:41:"htmlarea/plugins/TYPO3Image/typo3image.js";s:4:"3bf5";s:46:"htmlarea/plugins/TableOperations/locallang.xml";s:4:"8377";s:52:"htmlarea/plugins/TableOperations/table-operations.js";s:4:"f6ed";s:57:"htmlarea/plugins/TableOperations/popups/insert_table.html";s:4:"9c35";s:42:"htmlarea/plugins/BlockStyle/block-style.js";s:4:"93c1";s:41:"htmlarea/plugins/BlockStyle/locallang.xml";s:4:"32ed";s:40:"htmlarea/plugins/TYPO3Link/locallang.xml";s:4:"c39b";s:39:"htmlarea/plugins/TYPO3Link/typo3link.js";s:4:"f1ac";s:46:"htmlarea/plugins/InsertSmiley/insert-smiley.js";s:4:"abba";s:43:"htmlarea/plugins/InsertSmiley/locallang.xml";s:4:"ed64";s:46:"htmlarea/plugins/InsertSmiley/smileys/0001.gif";s:4:"4aff";s:46:"htmlarea/plugins/InsertSmiley/smileys/0002.gif";s:4:"02c4";s:46:"htmlarea/plugins/InsertSmiley/smileys/0003.gif";s:4:"834f";s:46:"htmlarea/plugins/InsertSmiley/smileys/0004.gif";s:4:"fb6a";s:46:"htmlarea/plugins/InsertSmiley/smileys/0005.gif";s:4:"2a48";s:46:"htmlarea/plugins/InsertSmiley/smileys/0006.gif";s:4:"f970";s:46:"htmlarea/plugins/InsertSmiley/smileys/0007.gif";s:4:"97ee";s:46:"htmlarea/plugins/InsertSmiley/smileys/0008.gif";s:4:"10a6";s:46:"htmlarea/plugins/InsertSmiley/smileys/0009.gif";s:4:"1907";s:46:"htmlarea/plugins/InsertSmiley/smileys/0010.gif";s:4:"9ee6";s:46:"htmlarea/plugins/InsertSmiley/smileys/0011.gif";s:4:"ae73";s:46:"htmlarea/plugins/InsertSmiley/smileys/0012.gif";s:4:"f058";s:46:"htmlarea/plugins/InsertSmiley/smileys/0013.gif";s:4:"3ed8";s:46:"htmlarea/plugins/InsertSmiley/smileys/0014.gif";s:4:"a948";s:46:"htmlarea/plugins/InsertSmiley/smileys/0015.gif";s:4:"218d";s:46:"htmlarea/plugins/InsertSmiley/smileys/0016.gif";s:4:"3539";s:46:"htmlarea/plugins/InsertSmiley/smileys/0017.gif";s:4:"ee2e";s:46:"htmlarea/plugins/InsertSmiley/smileys/0018.gif";s:4:"8c66";s:46:"htmlarea/plugins/InsertSmiley/smileys/0019.gif";s:4:"ac36";s:46:"htmlarea/plugins/InsertSmiley/smileys/0020.gif";s:4:"71ef";s:54:"htmlarea/plugins/InsertSmiley/popups/insertsmiley.html";s:4:"27dd";s:46:"htmlarea/plugins/DefaultClean/default-clean.js";s:4:"a2d4";s:43:"htmlarea/plugins/DefaultClean/locallang.xml";s:4:"9e62";s:44:"htmlarea/plugins/TYPO3Browsers/locallang.xml";s:4:"89b8";s:47:"htmlarea/plugins/TYPO3Browsers/typo3browsers.js";s:4:"3afe";s:47:"htmlarea/plugins/TYPO3Browsers/img/download.gif";s:4:"f6d9";s:52:"htmlarea/plugins/TYPO3Browsers/img/external_link.gif";s:4:"9e48";s:63:"htmlarea/plugins/TYPO3Browsers/img/external_link_new_window.gif";s:4:"6e8d";s:52:"htmlarea/plugins/TYPO3Browsers/img/internal_link.gif";s:4:"12b9";s:63:"htmlarea/plugins/TYPO3Browsers/img/internal_link_new_window.gif";s:4:"402a";s:43:"htmlarea/plugins/TYPO3Browsers/img/mail.gif";s:4:"d5a2";s:44:"htmlarea/plugins/AboutEditor/about-editor.js";s:4:"34be";s:42:"htmlarea/plugins/AboutEditor/locallang.xml";s:4:"6dab";s:46:"htmlarea/plugins/AboutEditor/popups/about.html";s:4:"0800";s:43:"htmlarea/plugins/SpellChecker/locallang.xml";s:4:"20d8";s:51:"htmlarea/plugins/SpellChecker/spell-check-logic.php";s:4:"b9ad";s:51:"htmlarea/plugins/SpellChecker/spell-check-style.css";s:4:"82bd";s:47:"htmlarea/plugins/SpellChecker/spell-check-ui.js";s:4:"8b56";s:46:"htmlarea/plugins/SpellChecker/spell-checker.js";s:4:"f0c8";s:67:"htmlarea/plugins/SpellChecker/popups/spell-check-ui-iso-8859-1.html";s:4:"8f86";s:56:"htmlarea/plugins/SpellChecker/popups/spell-check-ui.html";s:4:"96d3";s:37:"htmlarea/plugins/Language/language.js";s:4:"d2ac";s:39:"htmlarea/plugins/Language/locallang.xml";s:4:"9ca8";s:50:"htmlarea/plugins/InlineElements/inline-elements.js";s:4:"f48b";s:45:"htmlarea/plugins/InlineElements/locallang.xml";s:4:"6f8c";s:42:"htmlarea/plugins/DynamicCSS/dynamiccss.css";s:4:"8e7b";s:41:"htmlarea/plugins/DynamicCSS/dynamiccss.js";s:4:"1861";s:41:"htmlarea/plugins/DynamicCSS/locallang.xml";s:4:"b6bf";s:52:"htmlarea/plugins/DynamicCSS/img/red_arrow_bullet.gif";s:4:"82d6";s:44:"htmlarea/plugins/DefaultLink/default-link.js";s:4:"09c2";s:42:"htmlarea/plugins/DefaultLink/locallang.xml";s:4:"e233";s:45:"htmlarea/plugins/DefaultLink/popups/link.html";s:4:"21eb";s:44:"htmlarea/plugins/ContextMenu/context-menu.js";s:4:"afce";s:42:"htmlarea/plugins/ContextMenu/locallang.xml";s:4:"59f5";s:46:"htmlarea/plugins/DefaultColor/default-color.js";s:4:"8621";s:43:"htmlarea/plugins/DefaultColor/locallang.xml";s:4:"c8d1";s:54:"htmlarea/plugins/DefaultColor/popups/select_color.html";s:4:"6c3c";s:41:"htmlarea/plugins/TYPO3Color/locallang.xml";s:4:"3d3c";s:41:"htmlarea/plugins/TYPO3Color/typo3color.js";s:4:"43ee";s:26:"htmlarea/popups/about.html";s:4:"48fe";s:26:"htmlarea/popups/blank.html";s:4:"e697";s:32:"htmlarea/popups/editor_help.html";s:4:"398a";s:33:"htmlarea/popups/insert_image.html";s:4:"bfc1";s:33:"htmlarea/popups/insert_table.html";s:4:"983d";s:25:"htmlarea/popups/link.html";s:4:"c122";s:24:"htmlarea/popups/popup.js";s:4:"4861";s:33:"htmlarea/popups/select_color.html";s:4:"ceba";s:46:"mod4/class.tx_rtehtmlarea_dam_browse_media.php";s:4:"6e41";s:42:"mod4/class.tx_rtehtmlarea_select_image.php";s:4:"80dc";s:14:"mod4/clear.gif";s:4:"cc11";s:13:"mod4/conf.php";s:4:"0c60";s:18:"mod4/locallang.xml";s:4:"8995";s:21:"mod4/select_image.php";s:4:"a36c";s:32:"pi2/class.tx_rtehtmlarea_pi2.php";s:4:"c650";s:17:"pi2/locallang.xml";s:4:"a0a7";s:63:"extensions/BlockElements/class.tx_rtehtmlarea_blockelements.php";s:4:"c85a";s:38:"extensions/BlockElements/locallang.xml";s:4:"45f6";s:42:"extensions/BlockElements/skin/htmlarea.css";s:4:"83ce";s:51:"extensions/BlockElements/skin/images/blockquote.gif";s:4:"34dc";s:47:"extensions/BlockElements/skin/images/indent.gif";s:4:"57df";s:58:"extensions/BlockElements/skin/images/insertOrderedList.gif";s:4:"eb1c";s:61:"extensions/BlockElements/skin/images/insertParagraphAfter.gif";s:4:"e335";s:62:"extensions/BlockElements/skin/images/insertParagraphBefore.gif";s:4:"9c42";s:60:"extensions/BlockElements/skin/images/insertUnorderedList.gif";s:4:"5620";s:54:"extensions/BlockElements/skin/images/justifyCenter.gif";s:4:"420d";s:52:"extensions/BlockElements/skin/images/justifyFull.gif";s:4:"b129";s:52:"extensions/BlockElements/skin/images/justifyLeft.gif";s:4:"3799";s:53:"extensions/BlockElements/skin/images/justifyRight.gif";s:4:"0662";s:48:"extensions/BlockElements/skin/images/outdent.gif";s:4:"4786";s:51:"extensions/Acronym/class.tx_rtehtmlarea_acronym.php";s:4:"8021";s:36:"extensions/Acronym/skin/htmlarea.css";s:4:"6cf9";s:42:"extensions/Acronym/skin/images/acronym.gif";s:4:"1eaa";s:61:"extensions/CharacterMap/class.tx_rtehtmlarea_charactermap.php";s:4:"d2a0";s:37:"extensions/CharacterMap/locallang.xml";s:4:"c9d1";s:41:"extensions/CharacterMap/skin/htmlarea.css";s:4:"04d1";s:55:"extensions/CharacterMap/skin/images/insertCharacter.gif";s:4:"af19";s:59:"extensions/DefaultFont/class.tx_rtehtmlarea_defaultfont.php";s:4:"a026";s:36:"extensions/DefaultFont/locallang.xml";s:4:"8c90";s:61:"extensions/UserElements/class.tx_rtehtmlarea_userelements.php";s:4:"82ed";s:41:"extensions/UserElements/skin/htmlarea.css";s:4:"d015";s:44:"extensions/UserElements/skin/images/user.gif";s:4:"bbb4";s:53:"extensions/QuickTag/class.tx_rtehtmlarea_quicktag.php";s:4:"b5f7";s:37:"extensions/QuickTag/skin/htmlarea.css";s:4:"fc28";s:45:"extensions/QuickTag/skin/images/inserttag.gif";s:4:"a463";s:55:"extensions/InlineCSS/class.tx_rtehtmlarea_inlinecss.php";s:4:"710a";s:34:"extensions/InlineCSS/locallang.xml";s:4:"82ed";s:67:"extensions/TYPO3HtmlParser/class.tx_rtehtmlarea_typo3htmlparser.php";s:4:"fe15";s:63:"extensions/DefaultInline/class.tx_rtehtmlarea_defaultinline.php";s:4:"f271";s:38:"extensions/DefaultInline/locallang.xml";s:4:"e592";s:42:"extensions/DefaultInline/skin/htmlarea.css";s:4:"5b38";s:45:"extensions/DefaultInline/skin/images/bold.gif";s:4:"94f2";s:47:"extensions/DefaultInline/skin/images/italic.gif";s:4:"f60c";s:54:"extensions/DefaultInline/skin/images/strikethrough.gif";s:4:"3fd0";s:50:"extensions/DefaultInline/skin/images/subscript.gif";s:4:"cedd";s:52:"extensions/DefaultInline/skin/images/superscript.gif";s:4:"8aea";s:50:"extensions/DefaultInline/skin/images/underline.gif";s:4:"81e6";s:61:"extensions/DefaultImage/class.tx_rtehtmlarea_defaultimage.php";s:4:"32d8";s:41:"extensions/DefaultImage/skin/htmlarea.css";s:4:"eb4c";s:45:"extensions/DefaultImage/skin/images/image.gif";s:4:"c0f0";s:55:"extensions/TextStyle/class.tx_rtehtmlarea_textstyle.php";s:4:"cc5d";s:34:"extensions/TextStyle/locallang.xml";s:4:"23dd";s:61:"extensions/RemoveFormat/class.tx_rtehtmlarea_removeformat.php";s:4:"497d";s:41:"extensions/RemoveFormat/skin/htmlarea.css";s:4:"be33";s:45:"extensions/RemoveFormat/skin/images/clean.gif";s:4:"2a0f";s:59:"extensions/FindReplace/class.tx_rtehtmlarea_findreplace.php";s:4:"8d67";s:40:"extensions/FindReplace/skin/htmlarea.css";s:4:"43cc";s:43:"extensions/FindReplace/skin/images/find.gif";s:4:"827f";s:57:"extensions/TYPO3Image/class.tx_rtehtmlarea_typo3image.php";s:4:"711d";s:39:"extensions/TYPO3Image/skin/htmlarea.css";s:4:"fa33";s:43:"extensions/TYPO3Image/skin/images/image.gif";s:4:"c0f0";s:67:"extensions/TableOperations/class.tx_rtehtmlarea_tableoperations.php";s:4:"8b5c";s:44:"extensions/TableOperations/skin/htmlarea.css";s:4:"9e65";s:54:"extensions/TableOperations/skin/images/cell-delete.gif";s:4:"f371";s:60:"extensions/TableOperations/skin/images/cell-insert-after.gif";s:4:"2dd2";s:61:"extensions/TableOperations/skin/images/cell-insert-before.gif";s:4:"5d13";s:53:"extensions/TableOperations/skin/images/cell-merge.gif";s:4:"cb52";s:52:"extensions/TableOperations/skin/images/cell-prop.gif";s:4:"ca41";s:53:"extensions/TableOperations/skin/images/cell-split.gif";s:4:"0095";s:53:"extensions/TableOperations/skin/images/col-delete.gif";s:4:"da78";s:59:"extensions/TableOperations/skin/images/col-insert-after.gif";s:4:"80d8";s:60:"extensions/TableOperations/skin/images/col-insert-before.gif";s:4:"d47d";s:51:"extensions/TableOperations/skin/images/col-prop.gif";s:4:"5344";s:52:"extensions/TableOperations/skin/images/col-split.gif";s:4:"c168";s:55:"extensions/TableOperations/skin/images/insert_table.gif";s:4:"c01b";s:53:"extensions/TableOperations/skin/images/row-delete.gif";s:4:"a289";s:59:"extensions/TableOperations/skin/images/row-insert-above.gif";s:4:"1ef1";s:59:"extensions/TableOperations/skin/images/row-insert-under.gif";s:4:"9ad6";s:51:"extensions/TableOperations/skin/images/row-prop.gif";s:4:"5344";s:52:"extensions/TableOperations/skin/images/row-split.gif";s:4:"ebfd";s:53:"extensions/TableOperations/skin/images/table-prop.gif";s:4:"0a5c";s:57:"extensions/TableOperations/skin/images/toggle-borders.gif";s:4:"50cb";s:57:"extensions/BlockStyle/class.tx_rtehtmlarea_blockstyle.php";s:4:"a516";s:35:"extensions/BlockStyle/locallang.xml";s:4:"26b8";s:55:"extensions/TYPO3Link/class.tx_rtehtmlarea_typo3link.php";s:4:"6c51";s:38:"extensions/TYPO3Link/skin/htmlarea.css";s:4:"2a46";s:41:"extensions/TYPO3Link/skin/images/link.gif";s:4:"db9a";s:43:"extensions/TYPO3Link/skin/images/unlink.gif";s:4:"86c4";s:61:"extensions/InsertSmiley/class.tx_rtehtmlarea_insertsmiley.php";s:4:"5ad3";s:41:"extensions/InsertSmiley/skin/htmlarea.css";s:4:"fb52";s:46:"extensions/InsertSmiley/skin/images/smiley.gif";s:4:"c331";s:61:"extensions/DefaultClean/class.tx_rtehtmlarea_defaultclean.php";s:4:"59a6";s:59:"extensions/AboutEditor/class.tx_rtehtmlarea_abouteditor.php";s:4:"ec48";s:40:"extensions/AboutEditor/skin/htmlarea.css";s:4:"eb62";s:44:"extensions/AboutEditor/skin/images/about.gif";s:4:"1690";s:61:"extensions/SpellChecker/class.tx_rtehtmlarea_spellchecker.php";s:4:"c300";s:41:"extensions/SpellChecker/skin/htmlarea.css";s:4:"cedf";s:51:"extensions/SpellChecker/skin/images/spell-check.gif";s:4:"6e0a";s:53:"extensions/Language/class.tx_rtehtmlarea_language.php";s:4:"7325";s:37:"extensions/Language/skin/htmlarea.css";s:4:"f6b2";s:49:"extensions/Language/skin/images/left_to_right.gif";s:4:"1a1f";s:49:"extensions/Language/skin/images/right_to_left.gif";s:4:"2a38";s:65:"extensions/InlineElements/class.tx_rtehtmlarea_inlineelements.php";s:4:"4d23";s:39:"extensions/InlineElements/locallang.xml";s:4:"07c6";s:43:"extensions/InlineElements/skin/htmlarea.css";s:4:"978b";s:54:"extensions/InlineElements/skin/images/bidioverride.gif";s:4:"f38b";s:45:"extensions/InlineElements/skin/images/big.gif";s:4:"779b";s:46:"extensions/InlineElements/skin/images/bold.gif";s:4:"06ac";s:50:"extensions/InlineElements/skin/images/citation.gif";s:4:"b6eb";s:46:"extensions/InlineElements/skin/images/code.gif";s:4:"6057";s:52:"extensions/InlineElements/skin/images/definition.gif";s:4:"692d";s:53:"extensions/InlineElements/skin/images/deletedtext.gif";s:4:"4eec";s:50:"extensions/InlineElements/skin/images/emphasis.gif";s:4:"04c9";s:54:"extensions/InlineElements/skin/images/insertedtext.gif";s:4:"a624";s:48:"extensions/InlineElements/skin/images/italic.gif";s:4:"be83";s:50:"extensions/InlineElements/skin/images/keyboard.gif";s:4:"53ac";s:52:"extensions/InlineElements/skin/images/monospaced.gif";s:4:"78c0";s:51:"extensions/InlineElements/skin/images/quotation.gif";s:4:"7c62";s:48:"extensions/InlineElements/skin/images/sample.gif";s:4:"667c";s:47:"extensions/InlineElements/skin/images/small.gif";s:4:"e013";s:46:"extensions/InlineElements/skin/images/span.gif";s:4:"0dfa";s:55:"extensions/InlineElements/skin/images/strikethrough.gif";s:4:"73b1";s:48:"extensions/InlineElements/skin/images/strong.gif";s:4:"7f50";s:51:"extensions/InlineElements/skin/images/subscript.gif";s:4:"36c0";s:53:"extensions/InlineElements/skin/images/superscript.gif";s:4:"40c4";s:51:"extensions/InlineElements/skin/images/underline.gif";s:4:"dfac";s:50:"extensions/InlineElements/skin/images/variable.gif";s:4:"da61";s:57:"extensions/DynamicCSS/class.tx_rtehtmlarea_dynamiccss.php";s:4:"6226";s:35:"extensions/DynamicCSS/locallang.xml";s:4:"26b8";s:59:"extensions/DefaultLink/class.tx_rtehtmlarea_defaultlink.php";s:4:"1c36";s:40:"extensions/DefaultLink/skin/htmlarea.css";s:4:"883b";s:43:"extensions/DefaultLink/skin/images/link.gif";s:4:"db9a";s:45:"extensions/DefaultLink/skin/images/unlink.gif";s:4:"86c4";s:61:"extensions/DefaultColor/class.tx_rtehtmlarea_defaultcolor.php";s:4:"b4ef";s:37:"extensions/DefaultColor/locallang.xml";s:4:"3fb4";s:41:"extensions/DefaultColor/skin/htmlarea.css";s:4:"4759";s:49:"extensions/DefaultColor/skin/images/forecolor.gif";s:4:"dbc8";s:51:"extensions/DefaultColor/skin/images/hilitecolor.gif";s:4:"d97c";s:57:"extensions/TYPO3Color/class.tx_rtehtmlarea_typo3color.php";s:4:"149e";s:35:"extensions/TYPO3Color/locallang.xml";s:4:"377f";s:39:"extensions/TYPO3Color/skin/htmlarea.css";s:4:"fec1";s:47:"extensions/TYPO3Color/skin/images/forecolor.gif";s:4:"dbc8";s:49:"extensions/TYPO3Color/skin/images/hilitecolor.gif";s:4:"d97c";s:21:"mod3/browse_links.php";s:4:"5a04";s:42:"mod3/class.tx_rtehtmlarea_browse_links.php";s:4:"10d0";s:46:"mod3/class.tx_rtehtmlarea_dam_browse_links.php";s:4:"ee35";s:14:"mod3/clear.gif";s:4:"cc11";s:13:"mod3/conf.php";s:4:"2f07";s:18:"mod3/locallang.xml";s:4:"040a";s:34:"mod5/class.tx_rtehtmlarea_user.php";s:4:"7629";s:14:"mod5/clear.gif";s:4:"cc11";s:13:"mod5/conf.php";s:4:"b639";s:18:"mod5/locallang.xml";s:4:"7a78";s:13:"mod5/user.php";s:4:"f39d";s:32:"pi3/class.tx_rtehtmlarea_pi3.php";s:4:"8662";s:14:"doc/manual.sxw";s:4:"4e64";s:40:"mod6/class.tx_rtehtmlarea_parse_html.php";s:4:"4af1";s:13:"mod6/conf.php";s:4:"2b05";s:19:"mod6/parse_html.php";s:4:"1fd0";s:29:"static/clickenlarge/setup.txt";s:4:"5681";s:26:"res/contentcss/default.css";s:4:"7446";s:28:"res/contentcss/locallang.xml";s:4:"ec0e";s:39:"res/contentcss/img/red_arrow_bullet.gif";s:4:"82d6";s:25:"res/demo/pageTSConfig.txt";s:4:"9fc9";s:25:"res/demo/userTSConfig.txt";s:4:"cfd5";s:33:"res/clickenlarge/pageTSConfig.txt";s:4:"90c2";s:28:"res/typical/pageTSConfig.txt";s:4:"5d6c";s:28:"res/typical/userTSConfig.txt";s:4:"1ce2";s:26:"res/image/pageTSConfig.txt";s:4:"ca94";s:25:"res/proc/pageTSConfig.txt";s:4:"44eb";s:29:"res/advanced/pageTSConfig.txt";s:4:"1ab3";s:29:"res/advanced/userTSConfig.txt";s:4:"36b6";s:36:"res/accessibilityicons/locallang.xml";s:4:"8211";s:39:"res/accessibilityicons/pageTSConfig.txt";s:4:"9bcb";s:39:"res/accessibilityicons/img/download.gif";s:4:"f6d9";s:44:"res/accessibilityicons/img/external_link.gif";s:4:"9e48";s:55:"res/accessibilityicons/img/external_link_new_window.gif";s:4:"6e8d";s:44:"res/accessibilityicons/img/internal_link.gif";s:4:"12b9";s:55:"res/accessibilityicons/img/internal_link_new_window.gif";s:4:"402a";s:35:"res/accessibilityicons/img/mail.gif";s:4:"d5a2";}',
+	'version' => '1.7.2',
+	'_md5_values_when_last_written' => 'a:420:{s:9:"ChangeLog";s:4:"1a70";s:29:"class.tx_rtehtmlarea_base.php";s:4:"bf6d";s:27:"class.tx_rtehtmlareaapi.php";s:4:"4476";s:21:"ext_conf_template.txt";s:4:"1a57";s:12:"ext_icon.gif";s:4:"2f41";s:17:"ext_localconf.php";s:4:"da9b";s:14:"ext_tables.php";s:4:"4f9c";s:14:"ext_tables.sql";s:4:"2d74";s:13:"locallang.xml";s:4:"3cca";s:16:"locallang_db.xml";s:4:"a2a2";s:7:"tca.php";s:4:"3756";s:32:"pi2/class.tx_rtehtmlarea_pi2.php";s:4:"c650";s:17:"pi2/locallang.xml";s:4:"a0a7";s:14:"doc/manual.sxw";s:4:"3cee";s:21:"mod3/browse_links.php";s:4:"5a04";s:42:"mod3/class.tx_rtehtmlarea_browse_links.php";s:4:"10d0";s:46:"mod3/class.tx_rtehtmlarea_dam_browse_links.php";s:4:"ee35";s:14:"mod3/clear.gif";s:4:"cc11";s:13:"mod3/conf.php";s:4:"9f3d";s:18:"mod3/locallang.xml";s:4:"040a";s:29:"htmlarea/HTMLAREA_LICENSE.txt";s:4:"a10f";s:26:"htmlarea/htmlarea-gecko.js";s:4:"b665";s:23:"htmlarea/htmlarea-ie.js";s:4:"2703";s:20:"htmlarea/htmlarea.js";s:4:"a9d2";s:30:"htmlarea/locallang_dialogs.xml";s:4:"eba4";s:26:"htmlarea/locallang_msg.xml";s:4:"7b6f";s:31:"htmlarea/locallang_tooltips.xml";s:4:"8b17";s:20:"htmlarea/popupwin.js";s:4:"d0c9";s:50:"htmlarea/skins/default/htmlarea-edited-content.css";s:4:"8f6d";s:35:"htmlarea/skins/default/htmlarea.css";s:4:"f53c";s:42:"htmlarea/skins/default/images/ed_about.gif";s:4:"2763";s:42:"htmlarea/skins/default/images/ed_blank.gif";s:4:"0208";s:45:"htmlarea/skins/default/images/ed_color_bg.gif";s:4:"c6e2";s:45:"htmlarea/skins/default/images/ed_color_fg.gif";s:4:"5d7f";s:41:"htmlarea/skins/default/images/ed_copy.gif";s:4:"4f55";s:43:"htmlarea/skins/default/images/ed_custom.gif";s:4:"e7b2";s:40:"htmlarea/skins/default/images/ed_cut.gif";s:4:"1b00";s:43:"htmlarea/skins/default/images/ed_delete.gif";s:4:"926b";s:41:"htmlarea/skins/default/images/ed_help.gif";s:4:"e7fc";s:39:"htmlarea/skins/default/images/ed_hr.gif";s:4:"f384";s:41:"htmlarea/skins/default/images/ed_html.gif";s:4:"fa6e";s:42:"htmlarea/skins/default/images/ed_image.gif";s:4:"c0f0";s:50:"htmlarea/skins/default/images/ed_left_to_right.gif";s:4:"1a1f";s:41:"htmlarea/skins/default/images/ed_link.gif";s:4:"db9a";s:48:"htmlarea/skins/default/images/ed_list_bullet.gif";s:4:"5620";s:45:"htmlarea/skins/default/images/ed_list_num.gif";s:4:"eb1c";s:42:"htmlarea/skins/default/images/ed_paste.gif";s:4:"fbd2";s:41:"htmlarea/skins/default/images/ed_redo.gif";s:4:"e9e8";s:50:"htmlarea/skins/default/images/ed_right_to_left.gif";s:4:"2a38";s:41:"htmlarea/skins/default/images/ed_save.gif";s:4:"07ad";s:47:"htmlarea/skins/default/images/ed_splitblock.gif";s:4:"503e";s:45:"htmlarea/skins/default/images/ed_splitcel.gif";s:4:"2c04";s:41:"htmlarea/skins/default/images/ed_undo.gif";s:4:"b9ba";s:43:"htmlarea/skins/default/images/ed_unlink.gif";s:4:"86c4";s:53:"htmlarea/skins/default/images/fullscreen_maximize.gif";s:4:"2118";s:53:"htmlarea/skins/default/images/fullscreen_minimize.gif";s:4:"91d6";s:46:"htmlarea/skins/default/images/insert_table.gif";s:4:"c01b";s:59:"htmlarea/skins/default/images/TYPO3ViewHelp/module_help.gif";s:4:"a500";s:61:"htmlarea/skins/default/images/InlineElements/bidioverride.gif";s:4:"f38b";s:52:"htmlarea/skins/default/images/InlineElements/big.gif";s:4:"779b";s:53:"htmlarea/skins/default/images/InlineElements/bold.gif";s:4:"06ac";s:57:"htmlarea/skins/default/images/InlineElements/citation.gif";s:4:"b6eb";s:53:"htmlarea/skins/default/images/InlineElements/code.gif";s:4:"6057";s:59:"htmlarea/skins/default/images/InlineElements/definition.gif";s:4:"692d";s:60:"htmlarea/skins/default/images/InlineElements/deletedtext.gif";s:4:"4eec";s:57:"htmlarea/skins/default/images/InlineElements/emphasis.gif";s:4:"04c9";s:61:"htmlarea/skins/default/images/InlineElements/insertedtext.gif";s:4:"a624";s:55:"htmlarea/skins/default/images/InlineElements/italic.gif";s:4:"be83";s:57:"htmlarea/skins/default/images/InlineElements/keyboard.gif";s:4:"53ac";s:59:"htmlarea/skins/default/images/InlineElements/monospaced.gif";s:4:"78c0";s:58:"htmlarea/skins/default/images/InlineElements/quotation.gif";s:4:"7c62";s:55:"htmlarea/skins/default/images/InlineElements/sample.gif";s:4:"667c";s:54:"htmlarea/skins/default/images/InlineElements/small.gif";s:4:"e013";s:53:"htmlarea/skins/default/images/InlineElements/span.gif";s:4:"0dfa";s:62:"htmlarea/skins/default/images/InlineElements/strikethrough.gif";s:4:"73b1";s:55:"htmlarea/skins/default/images/InlineElements/strong.gif";s:4:"7f50";s:58:"htmlarea/skins/default/images/InlineElements/subscript.gif";s:4:"36c0";s:60:"htmlarea/skins/default/images/InlineElements/superscript.gif";s:4:"40c4";s:58:"htmlarea/skins/default/images/InlineElements/underline.gif";s:4:"dfac";s:57:"htmlarea/skins/default/images/InlineElements/variable.gif";s:4:"da61";s:54:"htmlarea/skins/default/images/QuickTag/ed_quicktag.gif";s:4:"a463";s:58:"htmlarea/skins/default/images/SpellChecker/spell-check.gif";s:4:"6e0a";s:58:"htmlarea/skins/default/images/BlockElements/blockquote.gif";s:4:"34dc";s:54:"htmlarea/skins/default/images/BlockElements/indent.gif";s:4:"57df";s:68:"htmlarea/skins/default/images/BlockElements/insertParagraphAfter.gif";s:4:"e335";s:69:"htmlarea/skins/default/images/BlockElements/insertParagraphBefore.gif";s:4:"9c42";s:61:"htmlarea/skins/default/images/BlockElements/justifyCenter.gif";s:4:"420d";s:59:"htmlarea/skins/default/images/BlockElements/justifyFull.gif";s:4:"b129";s:59:"htmlarea/skins/default/images/BlockElements/justifyLeft.gif";s:4:"3799";s:60:"htmlarea/skins/default/images/BlockElements/justifyRight.gif";s:4:"0662";s:55:"htmlarea/skins/default/images/BlockElements/outdent.gif";s:4:"4786";s:56:"htmlarea/skins/default/images/TYPO3Browsers/ed_image.gif";s:4:"c0f0";s:55:"htmlarea/skins/default/images/TYPO3Browsers/ed_link.gif";s:4:"db9a";s:57:"htmlarea/skins/default/images/TYPO3Browsers/ed_unlink.gif";s:4:"86c4";s:54:"htmlarea/skins/default/images/UserElements/ed_user.gif";s:4:"bbb4";s:58:"htmlarea/skins/default/images/SelectColor/CO-forecolor.gif";s:4:"dbc8";s:60:"htmlarea/skins/default/images/SelectColor/CO-hilitecolor.gif";s:4:"d97c";s:56:"htmlarea/skins/default/images/InsertSmiley/ed_smiley.gif";s:4:"c331";s:52:"htmlarea/skins/default/images/Acronym/ed_acronym.gif";s:4:"1eaa";s:55:"htmlarea/skins/default/images/RemoveFormat/ed_clean.gif";s:4:"2a0f";s:53:"htmlarea/skins/default/images/FindReplace/ed_find.gif";s:4:"827f";s:61:"htmlarea/skins/default/images/TableOperations/cell-delete.gif";s:4:"f371";s:67:"htmlarea/skins/default/images/TableOperations/cell-insert-after.gif";s:4:"2dd2";s:68:"htmlarea/skins/default/images/TableOperations/cell-insert-before.gif";s:4:"5d13";s:60:"htmlarea/skins/default/images/TableOperations/cell-merge.gif";s:4:"a2d2";s:59:"htmlarea/skins/default/images/TableOperations/cell-prop.gif";s:4:"ca41";s:60:"htmlarea/skins/default/images/TableOperations/cell-split.gif";s:4:"d87c";s:60:"htmlarea/skins/default/images/TableOperations/col-delete.gif";s:4:"da78";s:66:"htmlarea/skins/default/images/TableOperations/col-insert-after.gif";s:4:"80d8";s:67:"htmlarea/skins/default/images/TableOperations/col-insert-before.gif";s:4:"d47d";s:58:"htmlarea/skins/default/images/TableOperations/col-prop.gif";s:4:"b178";s:59:"htmlarea/skins/default/images/TableOperations/col-split.gif";s:4:"eacc";s:62:"htmlarea/skins/default/images/TableOperations/insert_table.gif";s:4:"c1db";s:60:"htmlarea/skins/default/images/TableOperations/row-delete.gif";s:4:"a289";s:66:"htmlarea/skins/default/images/TableOperations/row-insert-above.gif";s:4:"1ef1";s:66:"htmlarea/skins/default/images/TableOperations/row-insert-after.gif";s:4:"5e98";s:66:"htmlarea/skins/default/images/TableOperations/row-insert-under.gif";s:4:"9ad6";s:58:"htmlarea/skins/default/images/TableOperations/row-prop.gif";s:4:"5344";s:59:"htmlarea/skins/default/images/TableOperations/row-split.gif";s:4:"a712";s:60:"htmlarea/skins/default/images/TableOperations/table-prop.gif";s:4:"0a5c";s:63:"htmlarea/skins/default/images/TableOperations/table-restyle.gif";s:4:"9284";s:64:"htmlarea/skins/default/images/TableOperations/toggle-borders.gif";s:4:"50cb";s:57:"htmlarea/skins/default/images/CharacterMap/ed_charmap.gif";s:4:"af19";s:50:"htmlarea/plugins/InlineElements/inline-elements.js";s:4:"f48b";s:45:"htmlarea/plugins/InlineElements/locallang.xml";s:4:"6f8c";s:39:"htmlarea/plugins/QuickTag/locallang.xml";s:4:"2f53";s:38:"htmlarea/plugins/QuickTag/quick-tag.js";s:4:"f93b";s:36:"htmlarea/plugins/QuickTag/tag-lib.js";s:4:"ba71";s:46:"htmlarea/plugins/QuickTag/popups/quicktag.html";s:4:"34c7";s:43:"htmlarea/plugins/SpellChecker/locallang.xml";s:4:"20d8";s:51:"htmlarea/plugins/SpellChecker/spell-check-logic.php";s:4:"b9ad";s:51:"htmlarea/plugins/SpellChecker/spell-check-style.css";s:4:"82bd";s:47:"htmlarea/plugins/SpellChecker/spell-check-ui.js";s:4:"8b56";s:46:"htmlarea/plugins/SpellChecker/spell-checker.js";s:4:"f0c8";s:67:"htmlarea/plugins/SpellChecker/popups/spell-check-ui-iso-8859-1.html";s:4:"8f86";s:56:"htmlarea/plugins/SpellChecker/popups/spell-check-ui.html";s:4:"96d3";s:41:"htmlarea/plugins/TYPO3Color/locallang.xml";s:4:"3d3c";s:41:"htmlarea/plugins/TYPO3Color/typo3color.js";s:4:"43ee";s:44:"htmlarea/plugins/AboutEditor/about-editor.js";s:4:"34be";s:42:"htmlarea/plugins/AboutEditor/locallang.xml";s:4:"6dab";s:46:"htmlarea/plugins/AboutEditor/popups/about.html";s:4:"0800";s:46:"htmlarea/plugins/DefaultImage/default-image.js";s:4:"4f07";s:43:"htmlarea/plugins/DefaultImage/locallang.xml";s:4:"1fdd";s:54:"htmlarea/plugins/DefaultImage/popups/insert_image.html";s:4:"7b8b";s:40:"htmlarea/plugins/TextStyle/locallang.xml";s:4:"ff67";s:40:"htmlarea/plugins/TextStyle/text-style.js";s:4:"2f3f";s:46:"htmlarea/plugins/TYPO3HtmlParser/locallang.xml";s:4:"8010";s:52:"htmlarea/plugins/TYPO3HtmlParser/typo3html-parser.js";s:4:"2ac1";s:39:"htmlarea/plugins/InlineCSS/inlinecss.js";s:4:"460b";s:40:"htmlarea/plugins/InlineCSS/locallang.xml";s:4:"5dec";s:48:"htmlarea/plugins/BlockElements/block-elements.js";s:4:"06ca";s:44:"htmlarea/plugins/BlockElements/locallang.xml";s:4:"2f2c";s:42:"htmlarea/plugins/BlockStyle/block-style.js";s:4:"8ce4";s:41:"htmlarea/plugins/BlockStyle/locallang.xml";s:4:"32ed";s:44:"htmlarea/plugins/TYPO3Browsers/locallang.xml";s:4:"89b8";s:47:"htmlarea/plugins/TYPO3Browsers/typo3browsers.js";s:4:"3afe";s:47:"htmlarea/plugins/TYPO3Browsers/img/download.gif";s:4:"f6d9";s:52:"htmlarea/plugins/TYPO3Browsers/img/external_link.gif";s:4:"9e48";s:63:"htmlarea/plugins/TYPO3Browsers/img/external_link_new_window.gif";s:4:"6e8d";s:52:"htmlarea/plugins/TYPO3Browsers/img/internal_link.gif";s:4:"12b9";s:63:"htmlarea/plugins/TYPO3Browsers/img/internal_link_new_window.gif";s:4:"402a";s:43:"htmlarea/plugins/TYPO3Browsers/img/mail.gif";s:4:"d5a2";s:43:"htmlarea/plugins/UserElements/locallang.xml";s:4:"33f9";s:46:"htmlarea/plugins/UserElements/user-elements.js";s:4:"91ca";s:42:"htmlarea/plugins/DynamicCSS/dynamiccss.css";s:4:"8e7b";s:41:"htmlarea/plugins/DynamicCSS/dynamiccss.js";s:4:"1861";s:41:"htmlarea/plugins/DynamicCSS/locallang.xml";s:4:"b6bf";s:52:"htmlarea/plugins/DynamicCSS/img/red_arrow_bullet.gif";s:4:"82d6";s:42:"htmlarea/plugins/SelectColor/locallang.xml";s:4:"9f9e";s:44:"htmlarea/plugins/SelectColor/select-color.js";s:4:"749b";s:44:"htmlarea/plugins/DefaultFont/default-font.js";s:4:"8f2d";s:42:"htmlarea/plugins/DefaultFont/locallang.xml";s:4:"a7f8";s:46:"htmlarea/plugins/InsertSmiley/insert-smiley.js";s:4:"abba";s:43:"htmlarea/plugins/InsertSmiley/locallang.xml";s:4:"ed64";s:54:"htmlarea/plugins/InsertSmiley/popups/insertsmiley.html";s:4:"27dd";s:46:"htmlarea/plugins/InsertSmiley/smileys/0001.gif";s:4:"4aff";s:46:"htmlarea/plugins/InsertSmiley/smileys/0002.gif";s:4:"02c4";s:46:"htmlarea/plugins/InsertSmiley/smileys/0003.gif";s:4:"834f";s:46:"htmlarea/plugins/InsertSmiley/smileys/0004.gif";s:4:"fb6a";s:46:"htmlarea/plugins/InsertSmiley/smileys/0005.gif";s:4:"2a48";s:46:"htmlarea/plugins/InsertSmiley/smileys/0006.gif";s:4:"f970";s:46:"htmlarea/plugins/InsertSmiley/smileys/0007.gif";s:4:"97ee";s:46:"htmlarea/plugins/InsertSmiley/smileys/0008.gif";s:4:"10a6";s:46:"htmlarea/plugins/InsertSmiley/smileys/0009.gif";s:4:"1907";s:46:"htmlarea/plugins/InsertSmiley/smileys/0010.gif";s:4:"9ee6";s:46:"htmlarea/plugins/InsertSmiley/smileys/0011.gif";s:4:"ae73";s:46:"htmlarea/plugins/InsertSmiley/smileys/0012.gif";s:4:"f058";s:46:"htmlarea/plugins/InsertSmiley/smileys/0013.gif";s:4:"3ed8";s:46:"htmlarea/plugins/InsertSmiley/smileys/0014.gif";s:4:"a948";s:46:"htmlarea/plugins/InsertSmiley/smileys/0015.gif";s:4:"218d";s:46:"htmlarea/plugins/InsertSmiley/smileys/0016.gif";s:4:"3539";s:46:"htmlarea/plugins/InsertSmiley/smileys/0017.gif";s:4:"ee2e";s:46:"htmlarea/plugins/InsertSmiley/smileys/0018.gif";s:4:"8c66";s:46:"htmlarea/plugins/InsertSmiley/smileys/0019.gif";s:4:"ac36";s:46:"htmlarea/plugins/InsertSmiley/smileys/0020.gif";s:4:"71ef";s:44:"htmlarea/plugins/ContextMenu/context-menu.js";s:4:"77ce";s:42:"htmlarea/plugins/ContextMenu/locallang.xml";s:4:"3ead";s:41:"htmlarea/plugins/TYPO3Image/locallang.xml";s:4:"ab27";s:41:"htmlarea/plugins/TYPO3Image/typo3image.js";s:4:"3bf5";s:46:"htmlarea/plugins/DefaultColor/default-color.js";s:4:"8621";s:43:"htmlarea/plugins/DefaultColor/locallang.xml";s:4:"c8d1";s:54:"htmlarea/plugins/DefaultColor/popups/select_color.html";s:4:"6c3c";s:35:"htmlarea/plugins/Acronym/acronym.js";s:4:"9895";s:38:"htmlarea/plugins/Acronym/locallang.xml";s:4:"fead";s:46:"htmlarea/plugins/DefaultClean/default-clean.js";s:4:"a2d4";s:43:"htmlarea/plugins/DefaultClean/locallang.xml";s:4:"9e62";s:43:"htmlarea/plugins/RemoveFormat/locallang.xml";s:4:"aa85";s:46:"htmlarea/plugins/RemoveFormat/remove-format.js";s:4:"0c90";s:54:"htmlarea/plugins/RemoveFormat/popups/removeformat.html";s:4:"a3b1";s:44:"htmlarea/plugins/DefaultLink/default-link.js";s:4:"09c2";s:42:"htmlarea/plugins/DefaultLink/locallang.xml";s:4:"e233";s:45:"htmlarea/plugins/DefaultLink/popups/link.html";s:4:"21eb";s:37:"htmlarea/plugins/Language/language.js";s:4:"d2ac";s:39:"htmlarea/plugins/Language/locallang.xml";s:4:"9ca8";s:44:"htmlarea/plugins/FindReplace/find-replace.js";s:4:"ab77";s:41:"htmlarea/plugins/FindReplace/fr_engine.js";s:4:"095f";s:42:"htmlarea/plugins/FindReplace/locallang.xml";s:4:"f836";s:53:"htmlarea/plugins/FindReplace/popups/find_replace.html";s:4:"8d1e";s:48:"htmlarea/plugins/DefaultInline/default-inline.js";s:4:"9875";s:44:"htmlarea/plugins/DefaultInline/locallang.xml";s:4:"7b16";s:40:"htmlarea/plugins/TYPO3Link/locallang.xml";s:4:"c39b";s:39:"htmlarea/plugins/TYPO3Link/typo3link.js";s:4:"f1ac";s:46:"htmlarea/plugins/TableOperations/locallang.xml";s:4:"e7ed";s:52:"htmlarea/plugins/TableOperations/table-operations.js";s:4:"0e5f";s:57:"htmlarea/plugins/TableOperations/popups/insert_table.html";s:4:"9c35";s:46:"htmlarea/plugins/CharacterMap/character-map.js";s:4:"c653";s:43:"htmlarea/plugins/CharacterMap/locallang.xml";s:4:"1feb";s:58:"htmlarea/plugins/CharacterMap/popups/select_character.html";s:4:"a909";s:26:"htmlarea/popups/about.html";s:4:"48fe";s:26:"htmlarea/popups/blank.html";s:4:"e697";s:32:"htmlarea/popups/editor_help.html";s:4:"398a";s:33:"htmlarea/popups/insert_image.html";s:4:"bfc1";s:33:"htmlarea/popups/insert_table.html";s:4:"983d";s:25:"htmlarea/popups/link.html";s:4:"c122";s:24:"htmlarea/popups/popup.js";s:4:"4861";s:33:"htmlarea/popups/select_color.html";s:4:"ceba";s:34:"mod5/class.tx_rtehtmlarea_user.php";s:4:"7629";s:14:"mod5/clear.gif";s:4:"cc11";s:13:"mod5/conf.php";s:4:"9162";s:18:"mod5/locallang.xml";s:4:"7a78";s:13:"mod5/user.php";s:4:"f39d";s:32:"pi1/class.tx_rtehtmlarea_pi1.php";s:4:"c05e";s:17:"pi1/locallang.xml";s:4:"2e58";s:46:"mod4/class.tx_rtehtmlarea_dam_browse_media.php";s:4:"6e41";s:42:"mod4/class.tx_rtehtmlarea_select_image.php";s:4:"80dc";s:14:"mod4/clear.gif";s:4:"cc11";s:13:"mod4/conf.php";s:4:"3903";s:18:"mod4/locallang.xml";s:4:"8995";s:21:"mod4/select_image.php";s:4:"a36c";s:32:"pi3/class.tx_rtehtmlarea_pi3.php";s:4:"8662";s:16:"mod2/acronym.php";s:4:"7e21";s:37:"mod2/class.tx_rtehtmlarea_acronym.php";s:4:"a955";s:41:"mod2/class.tx_rtehtmlarea_acronym_mod.php";s:4:"1e3f";s:14:"mod2/clear.gif";s:4:"cc11";s:13:"mod2/conf.php";s:4:"0231";s:18:"mod2/locallang.xml";s:4:"7dee";s:33:"res/clickenlarge/pageTSConfig.txt";s:4:"90c2";s:26:"res/image/pageTSConfig.txt";s:4:"ca94";s:25:"res/demo/pageTSConfig.txt";s:4:"9fc9";s:25:"res/demo/userTSConfig.txt";s:4:"cfd5";s:26:"res/contentcss/default.css";s:4:"7446";s:28:"res/contentcss/locallang.xml";s:4:"ec0e";s:39:"res/contentcss/img/red_arrow_bullet.gif";s:4:"82d6";s:29:"res/advanced/pageTSConfig.txt";s:4:"1ab3";s:29:"res/advanced/userTSConfig.txt";s:4:"36b6";s:32:"res/indentalign/pageTSConfig.txt";s:4:"14d5";s:25:"res/proc/pageTSConfig.txt";s:4:"0693";s:36:"res/accessibilityicons/locallang.xml";s:4:"8211";s:39:"res/accessibilityicons/pageTSConfig.txt";s:4:"9bcb";s:39:"res/accessibilityicons/img/download.gif";s:4:"f6d9";s:44:"res/accessibilityicons/img/external_link.gif";s:4:"9e48";s:55:"res/accessibilityicons/img/external_link_new_window.gif";s:4:"6e8d";s:44:"res/accessibilityicons/img/internal_link.gif";s:4:"12b9";s:55:"res/accessibilityicons/img/internal_link_new_window.gif";s:4:"402a";s:35:"res/accessibilityicons/img/mail.gif";s:4:"d5a2";s:28:"res/typical/pageTSConfig.txt";s:4:"5d6c";s:28:"res/typical/userTSConfig.txt";s:4:"1ce2";s:40:"mod6/class.tx_rtehtmlarea_parse_html.php";s:4:"4af1";s:13:"mod6/conf.php";s:4:"e430";s:19:"mod6/parse_html.php";s:4:"1fd0";s:29:"static/clickenlarge/setup.txt";s:4:"5681";s:65:"extensions/InlineElements/class.tx_rtehtmlarea_inlineelements.php";s:4:"4d23";s:39:"extensions/InlineElements/locallang.xml";s:4:"07c6";s:43:"extensions/InlineElements/skin/htmlarea.css";s:4:"978b";s:54:"extensions/InlineElements/skin/images/bidioverride.gif";s:4:"f38b";s:45:"extensions/InlineElements/skin/images/big.gif";s:4:"779b";s:46:"extensions/InlineElements/skin/images/bold.gif";s:4:"06ac";s:50:"extensions/InlineElements/skin/images/citation.gif";s:4:"b6eb";s:46:"extensions/InlineElements/skin/images/code.gif";s:4:"6057";s:52:"extensions/InlineElements/skin/images/definition.gif";s:4:"692d";s:53:"extensions/InlineElements/skin/images/deletedtext.gif";s:4:"4eec";s:50:"extensions/InlineElements/skin/images/emphasis.gif";s:4:"04c9";s:54:"extensions/InlineElements/skin/images/insertedtext.gif";s:4:"a624";s:48:"extensions/InlineElements/skin/images/italic.gif";s:4:"be83";s:50:"extensions/InlineElements/skin/images/keyboard.gif";s:4:"53ac";s:52:"extensions/InlineElements/skin/images/monospaced.gif";s:4:"78c0";s:51:"extensions/InlineElements/skin/images/quotation.gif";s:4:"7c62";s:48:"extensions/InlineElements/skin/images/sample.gif";s:4:"667c";s:47:"extensions/InlineElements/skin/images/small.gif";s:4:"e013";s:46:"extensions/InlineElements/skin/images/span.gif";s:4:"0dfa";s:55:"extensions/InlineElements/skin/images/strikethrough.gif";s:4:"73b1";s:48:"extensions/InlineElements/skin/images/strong.gif";s:4:"7f50";s:51:"extensions/InlineElements/skin/images/subscript.gif";s:4:"36c0";s:53:"extensions/InlineElements/skin/images/superscript.gif";s:4:"40c4";s:51:"extensions/InlineElements/skin/images/underline.gif";s:4:"dfac";s:50:"extensions/InlineElements/skin/images/variable.gif";s:4:"da61";s:46:"extensions/InlineElements/res/pageTSConfig.txt";s:4:"8267";s:53:"extensions/QuickTag/class.tx_rtehtmlarea_quicktag.php";s:4:"b5f7";s:37:"extensions/QuickTag/skin/htmlarea.css";s:4:"fc28";s:45:"extensions/QuickTag/skin/images/inserttag.gif";s:4:"a463";s:61:"extensions/SpellChecker/class.tx_rtehtmlarea_spellchecker.php";s:4:"c300";s:41:"extensions/SpellChecker/skin/htmlarea.css";s:4:"cedf";s:51:"extensions/SpellChecker/skin/images/spell-check.gif";s:4:"6e0a";s:57:"extensions/TYPO3Color/class.tx_rtehtmlarea_typo3color.php";s:4:"3388";s:35:"extensions/TYPO3Color/locallang.xml";s:4:"377f";s:39:"extensions/TYPO3Color/skin/htmlarea.css";s:4:"fec1";s:47:"extensions/TYPO3Color/skin/images/forecolor.gif";s:4:"dbc8";s:49:"extensions/TYPO3Color/skin/images/hilitecolor.gif";s:4:"d97c";s:59:"extensions/AboutEditor/class.tx_rtehtmlarea_abouteditor.php";s:4:"ec48";s:40:"extensions/AboutEditor/skin/htmlarea.css";s:4:"eb62";s:44:"extensions/AboutEditor/skin/images/about.gif";s:4:"1690";s:61:"extensions/DefaultImage/class.tx_rtehtmlarea_defaultimage.php";s:4:"32d8";s:41:"extensions/DefaultImage/skin/htmlarea.css";s:4:"eb4c";s:45:"extensions/DefaultImage/skin/images/image.gif";s:4:"c0f0";s:55:"extensions/TextStyle/class.tx_rtehtmlarea_textstyle.php";s:4:"cc5d";s:34:"extensions/TextStyle/locallang.xml";s:4:"23dd";s:67:"extensions/TYPO3HtmlParser/class.tx_rtehtmlarea_typo3htmlparser.php";s:4:"7958";s:55:"extensions/InlineCSS/class.tx_rtehtmlarea_inlinecss.php";s:4:"710a";s:34:"extensions/InlineCSS/locallang.xml";s:4:"82ed";s:63:"extensions/BlockElements/class.tx_rtehtmlarea_blockelements.php";s:4:"eca9";s:38:"extensions/BlockElements/locallang.xml";s:4:"8a29";s:42:"extensions/BlockElements/skin/htmlarea.css";s:4:"83ce";s:51:"extensions/BlockElements/skin/images/blockquote.gif";s:4:"34dc";s:47:"extensions/BlockElements/skin/images/indent.gif";s:4:"57df";s:58:"extensions/BlockElements/skin/images/insertOrderedList.gif";s:4:"eb1c";s:61:"extensions/BlockElements/skin/images/insertParagraphAfter.gif";s:4:"e335";s:62:"extensions/BlockElements/skin/images/insertParagraphBefore.gif";s:4:"9c42";s:60:"extensions/BlockElements/skin/images/insertUnorderedList.gif";s:4:"5620";s:54:"extensions/BlockElements/skin/images/justifyCenter.gif";s:4:"420d";s:52:"extensions/BlockElements/skin/images/justifyFull.gif";s:4:"b129";s:52:"extensions/BlockElements/skin/images/justifyLeft.gif";s:4:"3799";s:53:"extensions/BlockElements/skin/images/justifyRight.gif";s:4:"0662";s:48:"extensions/BlockElements/skin/images/outdent.gif";s:4:"4786";s:57:"extensions/BlockStyle/class.tx_rtehtmlarea_blockstyle.php";s:4:"a516";s:35:"extensions/BlockStyle/locallang.xml";s:4:"26b8";s:61:"extensions/UserElements/class.tx_rtehtmlarea_userelements.php";s:4:"82ed";s:41:"extensions/UserElements/skin/htmlarea.css";s:4:"d015";s:44:"extensions/UserElements/skin/images/user.gif";s:4:"bbb4";s:57:"extensions/DynamicCSS/class.tx_rtehtmlarea_dynamiccss.php";s:4:"6226";s:35:"extensions/DynamicCSS/locallang.xml";s:4:"26b8";s:59:"extensions/DefaultFont/class.tx_rtehtmlarea_defaultfont.php";s:4:"a026";s:36:"extensions/DefaultFont/locallang.xml";s:4:"8c90";s:61:"extensions/InsertSmiley/class.tx_rtehtmlarea_insertsmiley.php";s:4:"5ad3";s:41:"extensions/InsertSmiley/skin/htmlarea.css";s:4:"fb52";s:46:"extensions/InsertSmiley/skin/images/smiley.gif";s:4:"c331";s:57:"extensions/TYPO3Image/class.tx_rtehtmlarea_typo3image.php";s:4:"711d";s:39:"extensions/TYPO3Image/skin/htmlarea.css";s:4:"fa33";s:43:"extensions/TYPO3Image/skin/images/image.gif";s:4:"c0f0";s:61:"extensions/DefaultColor/class.tx_rtehtmlarea_defaultcolor.php";s:4:"b4ef";s:37:"extensions/DefaultColor/locallang.xml";s:4:"3fb4";s:41:"extensions/DefaultColor/skin/htmlarea.css";s:4:"4759";s:49:"extensions/DefaultColor/skin/images/forecolor.gif";s:4:"dbc8";s:51:"extensions/DefaultColor/skin/images/hilitecolor.gif";s:4:"d97c";s:51:"extensions/Acronym/class.tx_rtehtmlarea_acronym.php";s:4:"8021";s:36:"extensions/Acronym/skin/htmlarea.css";s:4:"6cf9";s:42:"extensions/Acronym/skin/images/acronym.gif";s:4:"1eaa";s:61:"extensions/DefaultClean/class.tx_rtehtmlarea_defaultclean.php";s:4:"59a6";s:61:"extensions/RemoveFormat/class.tx_rtehtmlarea_removeformat.php";s:4:"497d";s:41:"extensions/RemoveFormat/skin/htmlarea.css";s:4:"be33";s:45:"extensions/RemoveFormat/skin/images/clean.gif";s:4:"2a0f";s:59:"extensions/DefaultLink/class.tx_rtehtmlarea_defaultlink.php";s:4:"1c36";s:40:"extensions/DefaultLink/skin/htmlarea.css";s:4:"883b";s:43:"extensions/DefaultLink/skin/images/link.gif";s:4:"db9a";s:45:"extensions/DefaultLink/skin/images/unlink.gif";s:4:"86c4";s:53:"extensions/Language/class.tx_rtehtmlarea_language.php";s:4:"7325";s:37:"extensions/Language/skin/htmlarea.css";s:4:"f6b2";s:49:"extensions/Language/skin/images/left_to_right.gif";s:4:"1a1f";s:49:"extensions/Language/skin/images/right_to_left.gif";s:4:"2a38";s:59:"extensions/FindReplace/class.tx_rtehtmlarea_findreplace.php";s:4:"8d67";s:40:"extensions/FindReplace/skin/htmlarea.css";s:4:"43cc";s:43:"extensions/FindReplace/skin/images/find.gif";s:4:"827f";s:63:"extensions/DefaultInline/class.tx_rtehtmlarea_defaultinline.php";s:4:"f271";s:38:"extensions/DefaultInline/locallang.xml";s:4:"e592";s:42:"extensions/DefaultInline/skin/htmlarea.css";s:4:"5b38";s:45:"extensions/DefaultInline/skin/images/bold.gif";s:4:"94f2";s:47:"extensions/DefaultInline/skin/images/italic.gif";s:4:"f60c";s:54:"extensions/DefaultInline/skin/images/strikethrough.gif";s:4:"3fd0";s:50:"extensions/DefaultInline/skin/images/subscript.gif";s:4:"cedd";s:52:"extensions/DefaultInline/skin/images/superscript.gif";s:4:"8aea";s:50:"extensions/DefaultInline/skin/images/underline.gif";s:4:"81e6";s:55:"extensions/TYPO3Link/class.tx_rtehtmlarea_typo3link.php";s:4:"6c51";s:38:"extensions/TYPO3Link/skin/htmlarea.css";s:4:"2a46";s:41:"extensions/TYPO3Link/skin/images/link.gif";s:4:"db9a";s:43:"extensions/TYPO3Link/skin/images/unlink.gif";s:4:"86c4";s:67:"extensions/TableOperations/class.tx_rtehtmlarea_tableoperations.php";s:4:"d724";s:44:"extensions/TableOperations/skin/htmlarea.css";s:4:"7022";s:54:"extensions/TableOperations/skin/images/cell-delete.gif";s:4:"f371";s:60:"extensions/TableOperations/skin/images/cell-insert-after.gif";s:4:"2dd2";s:61:"extensions/TableOperations/skin/images/cell-insert-before.gif";s:4:"5d13";s:53:"extensions/TableOperations/skin/images/cell-merge.gif";s:4:"cb52";s:52:"extensions/TableOperations/skin/images/cell-prop.gif";s:4:"ca41";s:53:"extensions/TableOperations/skin/images/cell-split.gif";s:4:"0095";s:53:"extensions/TableOperations/skin/images/col-delete.gif";s:4:"da78";s:59:"extensions/TableOperations/skin/images/col-insert-after.gif";s:4:"80d8";s:60:"extensions/TableOperations/skin/images/col-insert-before.gif";s:4:"d47d";s:51:"extensions/TableOperations/skin/images/col-prop.gif";s:4:"b178";s:52:"extensions/TableOperations/skin/images/col-split.gif";s:4:"c168";s:55:"extensions/TableOperations/skin/images/insert_table.gif";s:4:"c01b";s:53:"extensions/TableOperations/skin/images/row-delete.gif";s:4:"a289";s:59:"extensions/TableOperations/skin/images/row-insert-above.gif";s:4:"1ef1";s:59:"extensions/TableOperations/skin/images/row-insert-under.gif";s:4:"9ad6";s:51:"extensions/TableOperations/skin/images/row-prop.gif";s:4:"5344";s:52:"extensions/TableOperations/skin/images/row-split.gif";s:4:"ebfd";s:53:"extensions/TableOperations/skin/images/table-prop.gif";s:4:"0a5c";s:56:"extensions/TableOperations/skin/images/table-restyle.gif";s:4:"9284";s:57:"extensions/TableOperations/skin/images/toggle-borders.gif";s:4:"50cb";s:61:"extensions/CharacterMap/class.tx_rtehtmlarea_charactermap.php";s:4:"d2a0";s:37:"extensions/CharacterMap/locallang.xml";s:4:"c9d1";s:41:"extensions/CharacterMap/skin/htmlarea.css";s:4:"04d1";s:55:"extensions/CharacterMap/skin/images/insertCharacter.gif";s:4:"af19";}',
 	'constraints' => array(
 		'depends' => array(
 			'cms' => '',
-			'php' => '5.2.0-0.0.0',
+			'php' => '5.2-0.0.0',
 			'typo3' => '4.2-0.0.0',
 		),
 		'conflicts' => array(
Index: typo3/sysext/rtehtmlarea/extensions/TableOperations/class.tx_rtehtmlarea_tableoperations.php
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/TableOperations/class.tx_rtehtmlarea_tableoperations.php	(revision 3287)
+++ typo3/sysext/rtehtmlarea/extensions/TableOperations/class.tx_rtehtmlarea_tableoperations.php	(working copy)
@@ -42,19 +42,22 @@
 	protected $thisConfig;					// Reference to RTE PageTSConfig
 	protected $toolbar;					// Reference to RTE toolbar array
 	protected $LOCAL_LANG; 					// Frontend language array
+	protected $requiresClassesConfiguration = true;		// True if the registered plugin requires the PageTSConfig Classes configuration
 	
-	protected $pluginButtons = 'table, toggleborders, tableproperties, rowproperties, rowinsertabove, rowinsertunder, rowdelete, rowsplit,
-						columninsertbefore, columninsertafter, columndelete, columnsplit,
+	protected $pluginButtons = 'table, toggleborders, tableproperties, tablerestyle, rowproperties, rowinsertabove, rowinsertunder, rowdelete, rowsplit,
+						columnproperties, columninsertbefore, columninsertafter, columndelete, columnsplit,
 						cellproperties, cellinsertbefore, cellinsertafter, celldelete, cellsplit, cellmerge';
 	protected $convertToolbarForHtmlAreaArray = array (
 		'table'			=> 'InsertTable',
 		'toggleborders'		=> 'TO-toggle-borders',
 		'tableproperties'	=> 'TO-table-prop',
+		'tablerestyle'		=> 'TO-table-restyle',
 		'rowproperties'		=> 'TO-row-prop',
 		'rowinsertabove'	=> 'TO-row-insert-above',
 		'rowinsertunder'	=> 'TO-row-insert-under',
 		'rowdelete'		=> 'TO-row-delete',
 		'rowsplit'		=> 'TO-row-split',
+		'columnproperties'	=> 'TO-col-prop',
 		'columninsertbefore'	=> 'TO-col-insert-before',
 		'columninsertafter'	=> 'TO-col-insert-after',
 		'columndelete'		=> 'TO-col-delete',
@@ -96,13 +99,33 @@
 		$registerRTEinJavascriptString = '';
 		if (in_array('table', $this->toolbar)) {
 			
+				// Combining fieldset disablers as a list
+			$disabledFieldsets = array('Alignment', 'Borders', 'Color', 'Description', 'Layout', 'RowGroup', 'Spacing', 'Style');
+			foreach ($disabledFieldsets as $index => $fieldset) {
+				if (!trim($this->thisConfig['disable'.$fieldset.'FieldsetInTableOperations'])) {
+					unset($disabledFieldsets[$index]);
+				}
+			}
+			$disabledFieldsets = strtolower(implode(',', $disabledFieldsets));
+			
+				// Dialogue fieldsets removal configuration
+			$dialogues = array('table', 'tableproperties', 'rowproperties', 'columnproperties', 'cellproperties');
+			foreach ($dialogues as $dialogue) {
+				if (!is_array( $this->thisConfig['buttons.']) || !is_array( $this->thisConfig['buttons.'][$dialogue.'.'])) {
+					$registerRTEinJavascriptString .= '
+			RTEarea['.$RTEcounter.'].buttons.'.$dialogue.' = new Object();
+			RTEarea['.$RTEcounter.'].buttons.'.$dialogue.'.removeFieldsets = "' . $disabledFieldsets . '";';
+				} else if ($this->thisConfig['buttons.'][$dialogue.'.']['removeFieldsets']) {
+					$registerRTEinJavascriptString .= '
+			RTEarea['.$RTEcounter.'].buttons.'.$dialogue.'.removeFieldsets += ",' . $disabledFieldsets . '";';
+				} else {
+					$registerRTEinJavascriptString .= '
+			RTEarea['.$RTEcounter.'].buttons.'.$dialogue.'.removeFieldsets = ",' . $disabledFieldsets . '";';
+				}
+			}
+			
 			$registerRTEinJavascriptString .= '
-			RTEarea['.$RTEcounter.'].hideTableOperationsInToolbar = ' . (trim($this->thisConfig['hideTableOperationsInToolbar']) ? 'true' : 'false') . ';
-			RTEarea['.$RTEcounter.'].disableLayoutFieldsetInTableOperations = ' . (trim($this->thisConfig['disableLayoutFieldsetInTableOperations'])?'true':'false') . ';
-			RTEarea['.$RTEcounter.'].disableAlignmentFieldsetInTableOperations = ' . (trim($this->thisConfig['disableAlignmentFieldsetInTableOperations'])?'true':'false') . ';
-			RTEarea['.$RTEcounter.'].disableSpacingFieldsetInTableOperations = ' . (trim($this->thisConfig['disableSpacingFieldsetInTableOperations'])?'true':'false') . ';
-			RTEarea['.$RTEcounter.'].disableBordersFieldsetInTableOperations = ' . (trim($this->thisConfig['disableBordersFieldsetInTableOperations'])?'true':'false') . ';
-			RTEarea['.$RTEcounter.'].disableColorFieldsetInTableOperations = ' . (trim($this->thisConfig['disableColorFieldsetInTableOperations'])?'true':'false') . ';';
+			RTEarea['.$RTEcounter.'].hideTableOperationsInToolbar = ' . (trim($this->thisConfig['hideTableOperationsInToolbar']) ? 'true' : 'false') . ';';
 			
 				// Deprecated toggleborders button configuration
 			if (in_array('toggleborders',$this->toolbar) && $this->thisConfig['keepToggleBordersInToolbar']) {
Index: typo3/sysext/rtehtmlarea/extensions/TableOperations/skin/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/TableOperations/skin/htmlarea.css	(revision 3287)
+++ typo3/sysext/rtehtmlarea/extensions/TableOperations/skin/htmlarea.css	(working copy)
@@ -1,20 +1,22 @@
 /* Selectors for the Table Operations extension of htmlArea RTE */
-/* TYPO3 SVN ID: $Id $ */
+/* TYPO3 SVN ID: $Id: htmlarea.css $ */
 .htmlarea .toolbar .InsertTable {background-image:url("images/insert_table.gif");}
-.htmlarea .toolbar .TO-toggle-borders, .htmlarea-context-menu .TO-toggle-borders {background-image:url("images/TableOperations/toggle-borders.gif");}
-.htmlarea .toolbar .TO-table-prop, .htmlarea-context-menu .TO-table-prop  {background-image:url("images/TableOperations/table-prop.gif");}
-.htmlarea .toolbar .TO-row-prop, .htmlarea-context-menu .TO-row-prop {background-image:url("images/TableOperations/row-prop.gif");}
-.htmlarea .toolbar .TO-row-insert-above, .htmlarea-context-menu .TO-row-insert-above {background-image:url("images/TableOperations/row-insert-above.gif");}
-.htmlarea .toolbar .TO-row-insert-under, .htmlarea-context-menu .TO-row-insert-under {background-image:url("images/TableOperations/row-insert-under.gif");}
-.htmlarea .toolbar .TO-row-delete, .htmlarea-context-menu .TO-row-delete {background-image:url("images/TableOperations/row-delete.gif");}
-.htmlarea .toolbar .TO-row-split, .htmlarea-context-menu .TO-row-split {background-image:url("images/TableOperations/row-split.gif");}
-.htmlarea .toolbar .TO-col-insert-before, .htmlarea-context-menu .TO-col-insert-before {background-image:url("images/TableOperations/col-insert-before.gif");}
-.htmlarea .toolbar .TO-col-insert-after, .htmlarea-context-menu .TO-col-insert-after {background-image:url("images/TableOperations/col-insert-after.gif");}
-.htmlarea .toolbar .TO-col-delete, .htmlarea-context-menu .TO-col-delete {background-image:url("images/TableOperations/col-delete.gif");}
-.htmlarea .toolbar .TO-col-split, .htmlarea-context-menu .TO-col-split {background-image:url("images/TableOperations/col-split.gif");}
-.htmlarea .toolbar .TO-cell-prop, .htmlarea-context-menu .TO-cell-prop {background-image:url("images/TableOperations/cell-prop.gif");}
-.htmlarea .toolbar .TO-cell-insert-before, .htmlarea-context-menu .TO-cell-insert-before {background-image:url("images/TableOperations/cell-insert-before.gif");}
-.htmlarea .toolbar .TO-cell-insert-after, .htmlarea-context-menu .TO-cell-insert-after {background-image:url("images/TableOperations/cell-insert-after.gif");}
-.htmlarea .toolbar .TO-cell-delete, .htmlarea-context-menu .TO-cell-delete {background-image:url("images/TableOperations/cell-delete.gif");}
-.htmlarea .toolbar .TO-cell-split, .htmlarea-context-menu .TO-cell-split {background-image:url("images/TableOperations/cell-split.gif");}
-.htmlarea .toolbar .TO-cell-merge, .htmlarea-context-menu .TO-cell-merge {background-image:url("images/TableOperations/cell-merge.gif");}
+.htmlarea .toolbar .TO-toggle-borders, .htmlarea-context-menu .TO-toggle-borders {background-image:url("images/toggle-borders.gif");}
+.htmlarea .toolbar .TO-table-prop, .htmlarea-context-menu .TO-table-prop {background-image:url("images/table-prop.gif");}
+.htmlarea .toolbar .TO-table-restyle, .htmlarea-context-menu .TO-table-restyle {background-image:url("images/table-restyle.gif");}
+.htmlarea .toolbar .TO-row-prop, .htmlarea-context-menu .TO-row-prop {background-image:url("images/row-prop.gif");}
+.htmlarea .toolbar .TO-row-insert-above, .htmlarea-context-menu .TO-row-insert-above {background-image:url("images/row-insert-above.gif");}
+.htmlarea .toolbar .TO-row-insert-under, .htmlarea-context-menu .TO-row-insert-under {background-image:url("images/row-insert-under.gif");}
+.htmlarea .toolbar .TO-row-delete, .htmlarea-context-menu .TO-row-delete {background-image:url("images/row-delete.gif");}
+.htmlarea .toolbar .TO-row-split, .htmlarea-context-menu .TO-row-split {background-image:url("images/row-split.gif");}
+.htmlarea .toolbar .TO-col-prop, .htmlarea-context-menu .TO-col-prop {background-image:url("images/col-prop.gif");}
+.htmlarea .toolbar .TO-col-insert-before, .htmlarea-context-menu .TO-col-insert-before {background-image:url("images/col-insert-before.gif");}
+.htmlarea .toolbar .TO-col-insert-after, .htmlarea-context-menu .TO-col-insert-after {background-image:url("images/col-insert-after.gif");}
+.htmlarea .toolbar .TO-col-delete, .htmlarea-context-menu .TO-col-delete {background-image:url("images/col-delete.gif");}
+.htmlarea .toolbar .TO-col-split, .htmlarea-context-menu .TO-col-split {background-image:url("images/col-split.gif");}
+.htmlarea .toolbar .TO-cell-prop, .htmlarea-context-menu .TO-cell-prop {background-image:url("images/cell-prop.gif");}
+.htmlarea .toolbar .TO-cell-insert-before, .htmlarea-context-menu .TO-cell-insert-before {background-image:url("images/cell-insert-before.gif");}
+.htmlarea .toolbar .TO-cell-insert-after, .htmlarea-context-menu .TO-cell-insert-after {background-image:url("images/cell-insert-after.gif");}
+.htmlarea .toolbar .TO-cell-delete, .htmlarea-context-menu .TO-cell-delete {background-image:url("images/cell-delete.gif");}
+.htmlarea .toolbar .TO-cell-split, .htmlarea-context-menu .TO-cell-split {background-image:url("images/cell-split.gif");}
+.htmlarea .toolbar .TO-cell-merge, .htmlarea-context-menu .TO-cell-merge {background-image:url("images/cell-merge.gif");}
Index: typo3/sysext/rtehtmlarea/extensions/TableOperations/skin/images/col-prop.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: typo3\sysext\rtehtmlarea\extensions\TableOperations\skin\images\col-prop.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Index: typo3/sysext/rtehtmlarea/extensions/TableOperations/skin/images/table-restyle.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: typo3\sysext\rtehtmlarea\extensions\TableOperations\skin\images\table-restyle.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Index: typo3/sysext/rtehtmlarea/extensions/TYPO3Color/class.tx_rtehtmlarea_typo3color.php
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/TYPO3Color/class.tx_rtehtmlarea_typo3color.php	(revision 3287)
+++ typo3/sysext/rtehtmlarea/extensions/TYPO3Color/class.tx_rtehtmlarea_typo3color.php	(working copy)
@@ -50,7 +50,7 @@
 		);
 	
 	public function main($parentObject) {
-		return parent::main($parentObject) && !$this->thisConfig['disableSelectColor'];
+		return parent::main($parentObject) && (!$this->thisConfig['disableSelectColor'] || $this->htmlAreaRTE->client['BROWSER'] == 'gecko');
 	}
 	
 	/**
Index: typo3/sysext/rtehtmlarea/htmlarea/htmlarea-gecko.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/htmlarea-gecko.js	(revision 3287)
+++ typo3/sysext/rtehtmlarea/htmlarea/htmlarea-gecko.js	(working copy)
@@ -57,6 +57,7 @@
 		try {
 			this._doc.designMode = "on";
 			if (this._doc.queryCommandEnabled("insertbronreturn")) this._doc.execCommand("insertbronreturn", false, this.config.disableEnterParagraphs);
+			if (this._doc.queryCommandEnabled("enableObjectResizing")) this._doc.execCommand("enableObjectResizing", false, !this.config.disableObjectResizing);
 			if (this._doc.queryCommandEnabled("enableInlineTableEditing")) this._doc.execCommand("enableInlineTableEditing", false, (this.config.buttons.table && this.config.buttons.table.enableHandles) ? true : false);
 			if (this._doc.queryCommandEnabled("styleWithCSS")) this._doc.execCommand("styleWithCSS", false, this.config.useCSS);
 				else if (this._doc.queryCommandEnabled("useCSS")) this._doc.execCommand("useCSS", false, !this.config.useCSS);
@@ -464,6 +465,7 @@
 							editor.sizeIframe(-2);
 						}
 						if (editor._doc.queryCommandEnabled("insertbronreturn")) editor._doc.execCommand("insertbronreturn", false, editor.config.disableEnterParagraphs);
+						if (editor._doc.queryCommandEnabled("enableObjectResizing")) editor._doc.execCommand("enableObjectResizing", false, !editor.config.disableObjectResizing);
 						if (editor._doc.queryCommandEnabled("enableInlineTableEditing")) editor._doc.execCommand("enableInlineTableEditing", false, (editor.config.buttons.table && editor.config.buttons.table.enableHandles) ? true : false);
 						if (editor._doc.queryCommandEnabled("styleWithCSS")) editor._doc.execCommand("styleWithCSS", false, editor.config.useCSS);
 							else if (editor._doc.queryCommandEnabled("useCSS")) editor._doc.execCommand("useCSS", false, !editor.config.useCSS);
Index: typo3/sysext/rtehtmlarea/htmlarea/htmlarea.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/htmlarea.js	(revision 3287)
+++ typo3/sysext/rtehtmlarea/htmlarea/htmlarea.js	(working copy)
@@ -132,7 +132,6 @@
 	if (HTMLArea._compressedScripts && url.indexOf("compressed") == -1) url = url.replace(/\.js$/gi, "_compressed.js");
 	HTMLArea._scripts.push(url);
 };
-HTMLArea.loadScript(RTEarea[0]["popupwin"] ? RTEarea[0]["popupwin"] : _editor_url + "popupwin.js");
 if(HTMLArea.is_gecko) HTMLArea.loadScript(RTEarea[0]["htmlarea-gecko"] ? RTEarea[0]["htmlarea-gecko"] : _editor_url + "htmlarea-gecko.js");
 if(HTMLArea.is_ie) HTMLArea.loadScript(RTEarea[0]["htmlarea-ie"] ? RTEarea[0]["htmlarea-ie"] : _editor_url + "htmlarea-ie.js");
 
@@ -271,6 +270,7 @@
 	this.useCSS = false;
 	this.enableMozillaExtension = true;
 	this.disableEnterParagraphs = false;
+	this.disableObjectResizing = false;
 	this.removeTrailingBR = false;
 		// style included in the iframe document
 	this.editedContentStyle = _editor_edited_content_CSS;
@@ -1163,6 +1163,7 @@
 		editor.onGenerate = null;
 	}
 	HTMLArea._appendToLog("[HTMLArea::initIframe]: All plugins successfully generated.");
+	editor.focusEditor();
 	editor.updateToolbar();
 };
 
@@ -1246,6 +1247,7 @@
 			if (HTMLArea.is_gecko) {
 				try {
 					if (this._doc.queryCommandEnabled("insertbronreturn")) this._doc.execCommand("insertbronreturn", false, this.config.disableEnterParagraphs);
+					if (this._doc.queryCommandEnabled("enableObjectResizing")) this._doc.execCommand("enableObjectResizing", false, !this.config.disableObjectResizing);
 					if (this._doc.queryCommandEnabled("enableInlineTableEditing")) this._doc.execCommand("enableInlineTableEditing", false, (this.config.buttons.table && this.config.buttons.table.enableHandles) ? true : false);
 					if (this._doc.queryCommandEnabled("styleWithCSS")) this._doc.execCommand("styleWithCSS", false, this.config.useCSS);
 						else if (this._doc.queryCommandEnabled("useCSS")) this._doc.execCommand("useCSS", false, !this.config.useCSS);
@@ -2210,7 +2212,7 @@
 
 HTMLArea.RE_blockTags = /^(body|p|h1|h2|h3|h4|h5|h6|ul|ol|pre|dl|dt|dd|div|noscript|blockquote|form|hr|table|caption|fieldset|address|td|tr|th|li|tbody|thead|tfoot|iframe)$/;
 HTMLArea.isBlockElement = function(el) { return el && el.nodeType == 1 && HTMLArea.RE_blockTags.test(el.nodeName.toLowerCase()); };
-HTMLArea.RE_closingTags = /^(p|blockquote|a|li|ol|ul|dl|dt|td|th|tr|tbody|thead|tfoot|caption|colgroup|table|div|b|bdo|big|cite|code|del|dfn|em|i|ins|kbd|label|q|samp|small|span|strike|strong|sub|sup|tt|u|var|abbr|acronym|font|center|object|embed|style|script|title|head|clickenlarge)$/;
+HTMLArea.RE_closingTags = /^(p|blockquote|a|li|ol|ul|dl|dt|td|th|tr|tbody|thead|tfoot|caption|colgroup|table|div|b|bdo|big|cite|code|del|dfn|em|i|ins|kbd|label|q|samp|small|span|strike|strong|sub|sup|tt|u|var|abbr|acronym|font|center|object|embed|style|script|title|head)$/;
 HTMLArea.RE_noClosingTag = /^(img|br|hr|col|input|area|base|link|meta|param)$/;
 HTMLArea.needsClosingTag = function(el) { return el && el.nodeType == 1 && !HTMLArea.RE_noClosingTag.test(el.tagName.toLowerCase()); };
 
@@ -2266,8 +2268,7 @@
 		}
 		if (config.htmlRemoveTagsAndContents && config.htmlRemoveTagsAndContents.test(root_tag)) break;
 		var custom_tag = (config.customTags && config.customTags.test(root_tag));
-		var empty_root = (root_tag == "clickenlarge" && !(root.firstChild && root.firstChild.nodeName.toLowerCase() == "img"));
-		if (outputRoot) outputRoot = !(config.htmlRemoveTags && config.htmlRemoveTags.test(root_tag)) && !empty_root;
+		if (outputRoot) outputRoot = !(config.htmlRemoveTags && config.htmlRemoveTags.test(root_tag));
 		if ((HTMLArea.is_ie || HTMLArea.is_safari) && root_tag == "head") {
 			if(outputRoot) html += "<head>";
 			var save_multiline = RegExp.multiline;
@@ -2982,7 +2983,7 @@
 	 * @return	boolean
 	 */
 	onMode : function(mode) {
-		if (this.dialog && mode === "textmode" && !(this.dialog.buttonId && this.editorConfiguration.btnList[this.dialog.buttonId] && this.editorConfiguration.btnList[this.dialog.buttonId].textMode)) {
+		if (mode === "textmode" && this.dialog && HTMLArea.Dialog[this.name] == this.dialog && !(this.dialog.buttonId && this.editorConfiguration.btnList[this.dialog.buttonId] && this.editorConfiguration.btnList[this.dialog.buttonId].textMode)) {
 			this.dialog.close();
 		}
 	},
@@ -3017,7 +3018,7 @@
 	 * @return	string		the localization of the label
 	 */
 	localize : function (label) {
-		return HTMLArea.I18N.dialogs[label] || HTMLArea.I18N.tooltips[label] || this.I18N[label];
+		return this.I18N[label] || HTMLArea.I18N.dialogs[label] || HTMLArea.I18N.tooltips[label];
 	},
 	
 	/**
@@ -3068,10 +3069,11 @@
 	 * @param	object		arguments: object of variable type to be passed to the dialog
 	 * @param	object		dimensions: object giving the width and height of the dialog window
 	 * @param	string		showScrollbars: specifies by "yes" or "no" whether or not the dialog window should have scrollbars
+	 * @param	object		dialogOpener: reference to the opener window
 	 *
-	 * @return	object		the dialog window
+	 * @return	object		the dialogue object
 	 */
-	openDialog : function (buttonId, url, action, arguments, dimensions, showScrollbars) {
+	openDialog : function (buttonId, url, action, arguments, dimensions, showScrollbars, dialogOpener) {
 		if (this.dialog && this.dialog.hasOpenedWindow() && this.dialog.buttonId === buttonId) {
 			this.dialog.focus();
 			return this.dialog;
@@ -3091,7 +3093,8 @@
 					actionFunctionReference,
 					arguments,
 					{width: ((dimensions && dimensions.width)?dimensions.width:100), height: ((dimensions && dimensions.height)?dimensions.height:100)},
-					(showScrollbars?showScrollbars:"no")
+					(showScrollbars?showScrollbars:"no"),
+					dialogOpener
 				);
 		}
 	},
@@ -3150,10 +3153,11 @@
 	 * @param	object		arguments: object of variable type to be passed to the dialog
 	 * @param	object		dimensions: object giving the width and height of the dialog window
 	 * @param	string		showScrollbars: specifies by "yes" or "no" whether or not the dialog window should have scrollbars
+	 * @param	object		dialogOpener: reference to the opener window
 	 *
 	 * @return	boolean		true if the dialog window was opened
 	 */
-	constructor : function (plugin, buttonId, url, action, arguments, dimensions, showScrollbars) {
+	constructor : function (plugin, buttonId, url, action, arguments, dimensions, showScrollbars, dialogOpener) {
 		this.window = window.window ? window.window : window.self;
 		this.plugin = plugin;
 		this.buttonId = buttonId;
@@ -3167,18 +3171,151 @@
 			HTMLArea.Dialog[this.plugin.name].close();
 		}
 		HTMLArea.Dialog[this.plugin.name] = this;
+		this.dialogWindow = window.open(url, this.plugin.name + "Dialog", "toolbar=no,location=no,directories=no,menubar=no,resizable=yes,top=100,left=100,dependent=yes,dialog=yes,chrome=no,width=" + dimensions.width + ",height=" + dimensions.height + ",scrollbars=" + showScrollbars);
 		
-		this.dialogWindow = window.open(url, this.plugin.name + "Dialog", "toolbar=no,location=no,directories=no,menubar=no,resizable=yes,top=100,left=100,dependent=yes,dialog=yes,chrome=no,width=" + dimensions.width + ",height=" + dimensions.height + ",scrollbars=" + showScrollbars);
 		if (!this.dialogWindow) {
 			this.plugin.appendToLog("openDialog", "Dialog window could not be opened with url " + url);
 			return false;
 		}
+		
+		if (typeof(dialogOpener) !== "undefined") {
+			this.dialogWindow.opener = dialogOpener;
+			this.dialogWindow.opener.openedDialog = this;
+		}
 		if (!this.dialogWindow.opener) {
 			this.dialogWindow.opener = this.window;
 		}
+		
+		if (!url) this.createForm();
 		return true;
 	},
 	
+	/**
+	 * Creates the document and the dialogue form of the dialogue window
+	 *
+	 * @return	void
+	 */
+	createForm : function () {
+		
+		this.document = this.dialogWindow.document;
+		this.editor = this.plugin.editor;
+		
+		if (HTMLArea.is_ie) {
+			this.document.open();
+			var html = "<html><head></head><body></body></html>\n";
+			this.document.write(html);
+			this.document.close();
+			this.loadStyle();
+		}
+		var html = this.document.documentElement;
+		html.className = "popupwin";
+		var head = this.document.getElementsByTagName("head")[0];
+		if (!head) {
+			var head = this.document.createElement("head");
+			html.appendChild(head);
+		}
+		var title = this.document.getElementsByTagName("title")[0];
+		if (!title) {
+			var title = this.document.createElement("title");
+			head.appendChild(title);
+		}
+		this.document.title = this.arguments.title;
+		var body = this.document.body;
+		if (!body) {
+			var body = this.document.createElement("body");
+		}
+		body.className = "popupwin dialog";
+		body.id = "--HA-body";
+		var content = this.document.createElement("div");
+		content.className = "content";
+		content.id = "content";
+		this.content = content;
+		body.appendChild(content);
+		if (HTMLArea.is_gecko) {
+			html.appendChild(body);
+		}
+			// Create the form
+			// Localize, resize and initiate capture of events
+			// Catch errors for IE loosing control in case the window is closed while being initialized
+		if (HTMLArea.is_ie) {
+			try {
+				this.arguments.initialize(this);
+				this.initialize(false, false, HTMLArea.is_ie);
+				this.focus();
+			} catch(e) { }
+		} else {
+			this.arguments.initialize(this);
+			this.initialize(false, false, HTMLArea.is_ie);
+			this.focus();
+		}
+	},
+	
+	/**
+	 * Adds OK and Cancel buttons to the dialogue window
+	 *
+	 * @return	void
+	 */
+	addButtons : function() {
+		var self = this;
+		var div = this.document.createElement("div");
+		this.content.appendChild(div);
+		div.className = "buttons";
+		for (var i = 0; i < arguments.length; ++i) {
+			var btn = arguments[i];
+			var button = this.document.createElement("button");
+			div.appendChild(button);
+			switch (btn) {
+				case "ok":
+					button.innerHTML = this.plugin.localize("OK");
+					button.onclick = function() {
+						try {
+							self.callFormInputHandler();
+						} catch(e) { };
+						return false;
+					};
+					break;
+				case "cancel":
+					button.innerHTML = this.plugin.localize("Cancel");
+					button.onclick = function() {
+						self.close();
+						return false;
+					};
+					break;
+			}
+		}
+	},
+	
+	/**
+	 * Call the form input handler
+	 *
+	 * @return	boolean		false
+	 */
+	callFormInputHandler : function() {
+		var tags = ["input", "textarea", "select"];
+		var params = new Object();
+		for (var ti = tags.length; --ti >= 0;) {
+			var tag = tags[ti];
+			var els = this.content.getElementsByTagName(tag);
+			for (var j = 0; j < els.length; ++j) {
+				var el = els[j];
+				var val = el.value;
+				if (el.nodeName.toLowerCase() == "input") {
+					if (el.type == "checkbox") {
+						val = el.checked;
+					}
+				}
+				params[el.name] = val;
+			}
+		}
+		this.action(this, params);
+		return false;
+	},
+	
+	/**
+	 * Cheks if the dialogue has an open dialogue window
+	 *
+	 * @return	boolean		true if the dialogue has an open window
+	 */
 	hasOpenedWindow : function () {
 		return this.dialogWindow && !this.dialogWindow.closed;
 	},
@@ -3191,17 +3328,17 @@
 	 *
 	 * @return	void
 	 */
-	initialize : function (noLocalize, noResize) {
+	initialize : function (noLocalize, noResize, noStyle) {
 		this.dialogWindow.HTMLArea = HTMLArea;
 		this.dialogWindow.dialog = this;
+			// Capture unload and escape events
+		this.captureEvents();
 			// Get stylesheets for the dialog window
-		this.loadStyle();
+		if (!noStyle) this.loadStyle();
 			// Localize the labels of the popup window
 		if (!noLocalize) this.localize();
 			// Resize the dialog window to its contents
 		if (!noResize) this.resize(noResize);
-			// Capture unload and escape events
-		this.captureEvents();
 	},
 	
 	/**
@@ -3215,6 +3352,7 @@
 		link.rel = "stylesheet";
 		link.type = "text/css";
 		link.href = HTMLArea.editorCSS;
+		if (link.href.indexOf("http") == -1 && HTMLArea.is_gecko) link.href = _typo3_host_url + link.href;
 		head.appendChild(link);
 	},
 	
@@ -3235,7 +3373,8 @@
 					if (label) element.firstChild.data = label;
 				}
 				if (element.title) {
-					element.title = this.plugin.localize(element.title);
+					label = this.plugin.localize(element.title);
+					if (label) element.title = label;
 				}
 					// resetting the selected option for Mozilla
 				if (types[type] == "option" && element.selected ) {
@@ -3244,7 +3383,8 @@
 				}
 			}
 		}
-		this.dialogWindow.document.title = this.plugin.localize(this.dialogWindow.document.title);
+		label = this.plugin.localize(this.dialogWindow.document.title);
+		if (label) this.dialogWindow.document.title = label;
 	},
 	
 	/**
@@ -3257,7 +3397,8 @@
 	resize : function (noResize) {
 			// resize if allowed
 		var dialogWindow = this.dialogWindow;
-		var content = dialogWindow.document.getElementById("content");
+		var doc = dialogWindow.document;
+		var content = doc.getElementById("content");
 		if ((HTMLArea.is_gecko && !HTMLArea.is_opera && !HTMLArea.is_safari) || (HTMLArea.is_opera && content)) {
 			var self = this;
 			setTimeout( function() {
@@ -3276,39 +3417,32 @@
 				} catch(e) { }
 			}, 25);
 		} else {
+			var body = doc.body;
 			var innerX, innerY;
 			if (dialogWindow.innerHeight) {
 					// all except Explorer
 				innerX = dialogWindow.innerWidth;
 				innerY = dialogWindow.innerHeight;
-			} else if (dialogWindow.document.documentElement && dialogWindow.document.documentElement.clientHeight) {
+			} else if (doc.documentElement && doc.documentElement.clientHeight) {
 					// Explorer 6 Strict Mode
-				innerX = dialogWindow.document.documentElement.clientWidth;
-				innerY = dialogWindow.document.documentElement.clientHeight;
-			} else if (document.body) {
+				innerX = doc.documentElement.clientWidth;
+				innerY = doc.documentElement.clientHeight;
+			} else {
 					// other Explorers
-				innerX = dialogWindow.document.body.clientWidth;
-				innerY = dialogWindow.document.body.clientHeight;
+				innerX = body.clientWidth;
+				innerY = body.clientHeight;
 			}
 			
-			var pageX, pageY;
-			var test1 = dialogWindow.document.body.scrollHeight;
-			var test2 = dialogWindow.document.body.offsetHeight
-			if (test1 > test2) {
-					// all but Explorer Mac
-				pageX = dialogWindow.document.body.scrollWidth;
-				pageY = dialogWindow.document.body.scrollHeight;
+			var pageY = Math.max(body.scrollHeight, body.offsetHeight);
+			if (innerY == pageY) {
+				dialogWindow.resizeTo(body.scrollWidth, body.scrollHeight+75);
 			} else {
-					// Explorer Mac;
-					//would also work in Explorer 6 Strict, Mozilla and Safari
-				pageX = dialogWindow.document.body.offsetWidth;
-				pageY = dialogWindow.document.body.offsetHeight;
+				dialogWindow.resizeBy(Math.max(body.scrollWidth, body.offsetWidth) - innerX, pageY - innerY);
 			}
-			dialogWindow.resizeBy(pageX - innerX, pageY - innerY);
 			
 				// center on parent if allowed
-			var W = dialogWindow.document.body.offsetWidth;
-			var H = dialogWindow.document.body.offsetHeight;
+			var W = body.offsetWidth;
+			var H = body.offsetHeight;
 			var x = (screen.availWidth - W) / 2;
 			var y = (screen.availHeight - H) / 2;
 			dialogWindow.moveTo(x, y);
@@ -3367,22 +3501,38 @@
 	},
 	
 	/**
+	 * Recover focus from the parent window
+	 *
+	 * @return	void
+	 */
+	recoverFocus : function(ev) {
+		if (this.dialogWindow && !this.dialogWindow.closed) {
+			if (!ev) var ev = window.event;
+			HTMLArea._stopEvent(ev);
+			this.focus();
+		}
+		return false;
+	},
+	
+	/**
 	 * Close the dialog window
 	 *
 	 * @return	void
 	 */
 	close : function () {
-		if (this.hasOpenedWindow()) {
-			if (this.dialogWindow.opener && !this.dialogWindow.opener.closed) {
-				this.releaseEvents();
+		if (this.dialogWindow) {
+			if (this.dialogWindow.openedDialog) {
+				this.dialogWindow.openedDialog.close();
 			}
-			this.releaseEvents(this.dialogWindow);
+			this.releaseEvents();
 			HTMLArea.Dialog[this.plugin.name] = null;
-			if (HTMLArea.is_safari) {
-				this.dialogWindow.blur();
+			if (!this.dialogWindow.closed) {
+				this.dialogWindow.dialog = null;
+				if (HTMLArea.is_safari || HTMLArea.is_ie) {
+					this.dialogWindow.blur();
+				}
+				this.dialogWindow.close();
 			}
-			this.dialogWindow.close();
-			this.dialogWindow.dialog = null;
 			this.plugin.editor.updateToolbar();
 		}
 		return false;
@@ -3425,37 +3575,77 @@
 	},
 	
 	/**
-	 *Capture unload and escape events
+	 * Capture unload, escape and focus events
 	 *
 	 * @return	void
-	 */	
+	 */
 	captureEvents : function (skipUnload) {
+			// Capture unload events on the dialogue window, the opener window and the editor frame
 		this.unloadFunctionReference = this.makeFunctionReference("close");
 		HTMLArea._addEvent(this.dialogWindow.opener, "unload", this.unloadFunctionReference);
 		if (HTMLArea.is_gecko && this.plugin.editor._iframe.contentWindow) {
 			HTMLArea._addEvent(this.plugin.editor._iframe.contentWindow, "unload", this.unloadFunctionReference);
 		}
 		if (!skipUnload) HTMLArea._addEvent(this.dialogWindow, "unload", this.unloadFunctionReference);
+			// Capture escape key on the dialogue window
 		this.escapeFunctionReference = this.makeFunctionReference("closeOnEscape");
 		HTMLArea._addEvent(this.dialogWindow.document, "keypress", this.escapeFunctionReference);
+			// Capture focus events on the opener window and its frames
+		if (HTMLArea.is_gecko) {
+			this.recoverFocusFunctionReference = this.makeFunctionReference("recoverFocus");
+			this.captureFocus(this.dialogWindow.opener);
+		}
 	 },
+	 
+	/**
+	 * Capture focus events
+	 *
+	 * @return	void
+	 */
+	captureFocus : function (w) {
+		if (HTMLArea.is_gecko) {
+			w.addEventListener("focus", this.recoverFocusFunctionReference, true);
+		} else {
+			HTMLArea._addEvent(w, "focus", this.recoverFocusFunctionReference);
+		}
+		for (var i = w.frames.length; --i >= 0;) {
+			this.captureFocus(w.frames[i]);
+		}
+	},
 	
 	/**
-	 * Release all event handlers that were set when the dialog window was opened
+	 * Release all event handlers that were set when the dialogue window was opened
 	 *
 	 * @return	void
 	 */
 	releaseEvents : function() {
-		var opener = this.dialogWindow.opener;
-		if (opener && !opener.closed) {
-				// release the capturing of events
-			HTMLArea._removeEvent(opener, "unload", this.unloadFunctionReference);
+		if (this.dialogWindow) {
 			HTMLArea._removeEvent(this.dialogWindow, "unload", this.unloadFunctionReference);
-			if (HTMLArea.is_gecko && this.plugin.editor._iframe.contentWindow) {
-				HTMLArea._removeEvent(this.plugin.editor._iframe.contentWindow, "unload", this.unloadFunctionReference);
+			if (this.dialogWindow.document) {
+				HTMLArea._removeEvent(this.dialogWindow.document, "keypress", this.escapeFunctionReference);
 			}
-			HTMLArea._removeEvent(this.dialogWindow.document, "keypress", this.escapeFunctionReference);
+			if (this.dialogWindow.opener && !this.dialogWindow.opener.closed) {
+				HTMLArea._removeEvent(this.dialogWindow.opener, "unload", this.unloadFunctionReference);
+				if (HTMLArea.is_gecko) {
+					this.releaseFocus(this.dialogWindow.opener);
+				}
+			}
 		}
+		if (HTMLArea.is_gecko && this.plugin.editor._iframe.contentWindow) {
+			HTMLArea._removeEvent(this.plugin.editor._iframe.contentWindow, "unload", this.unloadFunctionReference);
+		}
+	},
+	
+	/**
+	 * Release focus capturing events that were set when the dialogue window was opened
+	 *
+	 * @return	void
+	 */
+	releaseFocus : function(w) {
+		HTMLArea._removeEvent(w, "focus", this.recoverFocusFunctionReference);
+		for (var i = w.frames.length; --i >= 0;) {
+			this.releaseFocus(w.frames[i]);
+		}
 	}
 });
 
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/BlockElements/block-elements.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/BlockElements/block-elements.js	(revision 3287)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/BlockElements/block-elements.js	(working copy)
@@ -268,12 +268,28 @@
 						this.indentSelectedListElements(parentElement, range);
 					}
 				} else if (tableCell) {
-					var nextCell = tableCell.nextSibling ? tableCell.nextSibling : (tableCell.parentNode.nextSibling ? tableCell.parentNode.nextSibling.firstChild : null);
+					var tablePart = tableCell.parentNode.parentNode;
+						// Get next cell in same table part
+					var nextCell = tableCell.nextSibling ? tableCell.nextSibling : (tableCell.parentNode.nextSibling ? tableCell.parentNode.nextSibling.cells[0] : null);
+						// Next cell is in other table part
 					if (!nextCell) {
+						switch (tablePart.nodeName.toLowerCase()) {
+						    case "thead":
+							nextCell = tablePart.parentNode.tBodies[0].rows[0].cells[0];
+							break;
+						    case "tbody":
+							nextCell = tablePart.nextSibling ? tablePart.nextSibling.rows[0].cells[0] : null;
+							break;
+						    case "tfoot":
+							this.editor.selectNodeContents(tablePart.parentNode.lastChild.lastChild.lastChild, true);
+						}
+	
+					}
+					if (!nextCell) {
 						if (this.editor.plugins.TableOperations) {
 							this.editor.plugins.TableOperations.instance.onButtonPress(this.editor, "TO-row-insert-under");
 						} else {
-							nextCell = tableCell.parentNode.parentNode.firstChild.firstChild;
+							nextCell = tablePart.parentNode.rows[0].cells[0];
 						}
 					}
 					if (nextCell) {
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/BlockStyle/block-style.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/BlockStyle/block-style.js	(revision 3287)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/BlockStyle/block-style.js	(working copy)
@@ -82,9 +82,11 @@
 		this.prefixLabelWithClassName = this.pageTSconfiguration.prefixLabelWithClassName;
 		this.postfixLabelWithClassName = this.pageTSconfiguration.postfixLabelWithClassName;
 		
-			/* Registering plugin "About" information */
+		/*
+		 * Registering plugin "About" information
+		 */
 		var pluginInformation = {
-			version		: "1.1",
+			version		: "1.2",
 			developer	: "Stanislas Rolland",
 			developerUrl	: "http://www.fructifor.ca/",
 			copyrightOwner	: "Stanislas Rolland",
@@ -94,7 +96,9 @@
 		};
 		this.registerPluginInformation(pluginInformation);
 		
-			/* Registering the dropdown list */
+		/*
+		 * Registeringthe drop-down list
+		 */
 		var dropDownId = "BlockStyle";
 		var dropDownConfiguration = {
 			id		: dropDownId,
@@ -142,11 +146,30 @@
 			for (var i = classNames.length; --i >= 0;) {
 				if (!HTMLArea.reservedClassNames.test(classNames[i])) {
 					HTMLArea._removeClass(node, classNames[i]);
+					if (node.nodeName.toLowerCase() === "table" && this.editor.plugins.TableOperations) {
+						this.editor.plugins.TableOperations.instance.removeAlternatingClasses(node, classNames[i]);
+					}
 					break;
 				}
 			}
 		} else {
-			HTMLArea._addClass(node, className);
+			var nodeName = node.nodeName.toLowerCase();
+			if (this.tags && this.tags[nodeName]) {
+				var allowedClasses = this.tags[nodeName].allowedClasses;
+				if (allowedClasses && allowedClasses.indexOf(className) !== -1) {
+					HTMLArea._addClass(node, className);
+				}
+			} else if (this.tags && this.tags.all) {
+				var allowedClasses = this.tags.all.allowedClasses;
+				if (allowedClasses && allowedClasses.indexOf(className) !== -1) {
+					HTMLArea._addClass(node, className);
+				}
+			} else {
+				HTMLArea._addClass(node, className);
+			}
+			if (nodeName === "table" && this.editor.plugins.TableOperations) {
+				this.editor.plugins.TableOperations.instance.reStyleTable(node);
+			}
 		}
 	},
 	
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/ContextMenu/context-menu.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/ContextMenu/context-menu.js	(revision 3287)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/ContextMenu/context-menu.js	(working copy)
@@ -290,7 +290,8 @@
 		    case "table":
 			table = target;
 			if(!tbo) break;
-			this.pushOperations(["TO-toggle-borders", "TO-table-prop", "TO-col-split", "TO-col-delete", "TO-col-insert-after", "TO-col-insert-before"], menu, tbo);
+			this.pushOperations(["TO-col-split", "TO-col-delete", "TO-col-insert-after", "TO-col-insert-before", "TO-col-prop"], menu, tbo);
+			this.pushOperations(["TO-toggle-borders", "TO-table-restyle", "TO-table-prop"], menu, tbo);
 			break;
 		    case "ol":
 		    case "ul":
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/ContextMenu/locallang.xml
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/ContextMenu/locallang.xml	(revision 3287)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/ContextMenu/locallang.xml	(working copy)
@@ -9,23 +9,25 @@
 			<label index="Cut">Cut</label>
 			<label index="Copy">Copy</label>
 			<label index="Paste">Paste</label>
-			<label index="Image Properties">_Image Properties...</label>
-			<label index="Modify Link">_Modify Link...</label>
-			<label index="Check Link">Chec_k Link...</label>
-			<label index="Remove Link">_Remove Link...</label>
+			<label index="Image Properties">_Image Properties</label>
+			<label index="Modify Link">_Modify Link</label>
+			<label index="Check Link">Chec_k Link</label>
+			<label index="Remove Link">_Remove Link</label>
 			<label index="TO-toggle-borders-title">Toggle borders</label>
-			<label index="TO-cell-prop-title">C_ell Properties...</label>
+			<label index="TO-cell-prop-title">C_ell Properties</label>
 			<label index="TO-cell-insert-before-title">Insert cell before</label>
 			<label index="TO-cell-insert-after-title">Insert cell after</label>
 			<label index="TO-cell-delete-title">Delete Cell</label>
 			<label index="TO-cell-split-title">Split Cell</label>
 			<label index="TO-cell-merge-title">Merge Cells</label>
-			<label index="TO-row-prop-title">Ro_w Properties...</label>
+			<label index="TO-row-prop-title">Ro_w Properties</label>
 			<label index="TO-row-insert-above-title">I_nsert Row Before</label>
 			<label index="TO-row-insert-under-title">In_sert Row After</label>
 			<label index="TO-row-delete-title">_Delete Row</label>
 			<label index="TO-row-split-title">Split Row</label>
-			<label index="TO-table-prop-title">_Table Properties...</label>
+			<label index="TO-table-prop-title">_Table Properties</label>
+			<label index="TO-table-restyle-title">Re-apply table styles</label>
+			<label index="TO-col-prop-title">Column Cells Properties</label>
 			<label index="TO-col-insert-before-title">Insert _Column Before</label>
 			<label index="TO-col-insert-after-title">Insert C_olumn After</label>
 			<label index="TO-col-delete-title">De_lete Column</label>
@@ -38,9 +40,9 @@
 			<label index="JustifyCenter-tooltip">Centers the text</label>
 			<label index="JustifyRight-tooltip">Aligns text to the right</label>
 			<label index="JustifyFull-tooltip">Aligns text both to the left and the right</label>
-			<label index="Make link">Make lin_k...</label>
+			<label index="Make link">Make lin_k</label>
 			<label index="Remove the">Remove the</label>
-			<label index="Element">Element...</label>
+			<label index="Element">Element</label>
 			<label index="Please confirm remove">Please confirm that you want to remove this element:</label>
 			<label index="Remove this node from the document">Remove this node from the document</label>
 			<label index="How did you get here? (Please report!)">How did you get here? (Please report!)</label>
@@ -52,18 +54,20 @@
 			<label index="Link points to:">Link points to:</label>
 			<label index="Unlink the current element">Unlink the current element</label>
 			<label index="TO-toggle-borders-tooltip">Toggle borders</label>
-			<label index="TO-cell-prop-tooltip">Shows the Table Cell Properties dialog</label>
+			<label index="TO-cell-prop-tooltip">Shows the Table Cell Properties dialogue</label>
 			<label index="TO-cell-insert-before-tooltip">Inserts a new cell before the current one</label>
 			<label index="TO-cell-insert-after-tooltip">Inserts a new cell after the current one</label>
 			<label index="TO-cell-delete-tooltip">Deletes the current cell</label>
 			<label index="TO-cell-split-tooltip">Splits the current cell</label>
 			<label index="TO-cell-merge-tooltip">Merges the selected cells</label>
-			<label index="TO-row-prop-tooltip">Shows the Table Row Properties dialog</label>
+			<label index="TO-row-prop-tooltip">Shows the Table Row Properties dialogue</label>
 			<label index="TO-row-insert-above-tooltip">Inserts a new row before the current one</label>
 			<label index="TO-row-insert-under-tooltip">Inserts a new row after the current one</label>
 			<label index="TO-row-delete-tooltip">Deletes the current row</label>
 			<label index="TO-row-split-tooltip">Splits the current row</label>
-			<label index="TO-table-prop-tooltip">Shows the Table Properties dialog</label>
+			<label index="TO-table-prop-tooltip">Shows the Table Properties dialogue</label>
+			<label index="TO-table-restyle-tooltip">Re-applies the odd-even styles on the table</label>
+			<label index="TO-col-prop-tooltip">Shows the Column Cells Properties dialogue</label>
 			<label index="TO-col-insert-before-tooltip">Inserts a new column before the current one</label>
 			<label index="TO-col-insert-after-tooltip">Inserts a new column after the current one</label>
 			<label index="TO-col-delete-tooltip">Deletes the current column</label>
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/TableOperations/locallang.xml
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/TableOperations/locallang.xml	(revision 3287)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/TableOperations/locallang.xml	(working copy)
@@ -8,17 +8,19 @@
 		<languageKey index="default" type="array">
 			<label index="Not set">Not set</label>
 			<label index="None">None</label>
-			<label index="CSS Style">CSS Style</label>
-			<label index="Class:">Class:</label>
-			<label index="Class selector">CSS class selector</label>
-			<label index="Table class:">Table:</label>
-			<label index="Table class selector">Class of the table</label>
+			<label index="Size and Headers">Size and Headers</label>
+			<label index="Headers">Headers</label>
+			<label index="CSS Style">Style</label>
+			<label index="Class:">Classes:</label>
+			<label index="Class selector">Classes</label>
+			<label index="Table class:">Table classes:</label>
+			<label index="Table class selector">Classes of the table</label>
 			<label index="Table body class:">Body:</label>
-			<label index="Table body class selector">Class of the table body</label>
+			<label index="Table body class selector">Classes of the table body</label>
 			<label index="Table header class:">Header:</label>
-			<label index="Table header class selector">Class of the table header</label>
+			<label index="Table header class selector">Classes of the table header</label>
 			<label index="Table footer class:">Footer:</label>
-			<label index="Table footer class selector">Class of the table footer</label>
+			<label index="Table footer class selector">Classes of the table footer</label>
 			<label index="Default">Default</label>
 			<label index="Undefined">Undefined</label>
 			<label index="Alignment">Alignment</label>
@@ -53,7 +55,7 @@
 			<label index="Cell Properties">Cell Properties</label>
 			<label index="Cell Type and Scope">Cell Type and Scope</label>
 			<label index="Type of cell">Type of cell:</label>
-			<label index="Normal">Normal cell</label>
+			<label index="Normal">Data cell</label>
 			<label index="Header">Header cell</label>
 			<label index="Specifies the type of cell">Specifies the type of cell</label>
 			<label index="Scope">Scope:</label>
@@ -105,12 +107,16 @@
 			<label index="Space between adjacent cells">Space between adjacent cells</label>
 			<label index="Summary:">Summary:</label>
 			<label index="Summary of the table purpose and structure">Summary of the table's purpose and structure</label>
+			<label index="captionOrSummary-required">Please enter at least one of caption or summary</label>
+			<label index="caption-required">Please enter a caption</label>
+			<label index="summary-required">Please enter a summary</label>
 			<label index="TO-cell-delete">Delete cell</label>
 			<label index="TO-cell-insert-after">Insert cell after</label>
 			<label index="TO-cell-insert-before">Insert cell before</label>
 			<label index="TO-cell-merge">Merge cells</label>
 			<label index="TO-cell-prop">Cell properties</label>
 			<label index="TO-cell-split">Split cell</label>
+			<label index="TO-col-prop">Column properties</label>
 			<label index="TO-col-delete">Delete column</label>
 			<label index="TO-col-insert-after">Insert column after</label>
 			<label index="TO-col-insert-before">Insert column before</label>
@@ -121,6 +127,7 @@
 			<label index="TO-row-prop">Row properties</label>
 			<label index="TO-row-split">Split row</label>
 			<label index="TO-table-prop">Table properties</label>
+			<label index="TO-table-restyle">Re-apply table styles</label>
 			<label index="TO-toggle-borders">Toggle borders</label>
 			<label index="Table Properties">Table Properties</label>
 			<label index="Text alignment:">Text alignment:</label>
@@ -146,6 +153,25 @@
 			<label index="percent">percent</label>
 			<label index="pixels">pixels</label>
 			<label index="em">em</label>
+			<label index="Headers:">Headers:</label>
+			<label index="Table headers">Table headers</label>
+			<label index="No header cells">No header cells</label>
+			<label index="Header cells on top">Header cells on top</label>
+			<label index="Header cells on left">Header cells on left</label>
+			<label index="Header cells on top and left">Header cells on top and left</label>
+			<label index="Make cells header cells">Make all row cells header cells</label>
+			<label index="Make cells data cells">Make all row cells data cells</label>
+			<label index="Header for column">Header cell for column</label>
+			<label index="Header for row">Header cell for row</label>
+			<label index="Header for row group">Header cell for row group</label>
+			<label index="Column Properties">Column Cells Properties</label>
+			<label index="Type of cells">Type of cells</label>
+			<label index="Type of cells of the column">Type of cells of the column:</label>
+			<label index="Specifies the type of cells">Specifies the type of cells of the column</label>
+			<label index="Data cells">Data cells</label>
+			<label index="Headers for rows">Headers for rows</label>
+			<label index="Headers for row groups">Headers for row groups</label>
+			<label index="Technische Universitat Ilmenau">Technische Universität Ilmenau</label>
 		</languageKey>
 	</data>
 	<orig_hash type="array">
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/TableOperations/table-operations.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/TableOperations/table-operations.js	(revision 3287)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/TableOperations/table-operations.js	(working copy)
@@ -44,18 +44,42 @@
 	 */
 	configurePlugin : function (editor) {
 		
+		this.classesUrl = this.editorConfiguration.classesUrl;
 		this.buttonsConfiguration = this.editorConfiguration.buttons;
+		this.floatLeft = "float-left";
+		this.floatRight = "float-right";
+		this.floatDefault = "not set";
+		this.useHeaderClass = "thead";
+		if (this.buttonsConfiguration.table && this.buttonsConfiguration.table.properties) {
+			if (this.buttonsConfiguration.table.properties.float) {
+				var floatConfiguration = this.buttonsConfiguration.table.properties.float;
+				this.floatLeft = (floatConfiguration.left && floatConfiguration.left.useClass) ? floatConfiguration.left.useClass : "float-left";
+				this.floatRight = (floatConfiguration.right && floatConfiguration.right.useClass) ? floatConfiguration.right.useClass : "float-right";
+				this.floatDefault = (floatConfiguration.defaultValue) ?  floatConfiguration.defaultValue : "not set";
+			}
+			if (this.buttonsConfiguration.table.properties.headers && this.buttonsConfiguration.table.properties.headers.both 
+					&& this.buttonsConfiguration.table.properties.headers.both.useHeaderClass) {
+				this.useHeaderClass = this.buttonsConfiguration.table.properties.headers.both.useHeaderClass;
+			}
+		}
 		
+		if (this.buttonsConfiguration.blockstyle) {
+			this.tags = this.editorConfiguration.buttons.blockstyle.tags;
+		}
+		
+		this.tableParts = ["tfoot", "thead", "tbody"];
+		this.convertAlignment = { "not set" : "none", "left" : "JustifyLeft", "center" : "JustifyCenter", "right" : "JustifyRight", "justify" : "JustifyFull" };
+		
 		/*
 		 * Registering plugin "About" information
 		 */
 		var pluginInformation = {
-			version		: "3.7",
+			version		: "4.0",
 			developer	: "Mihai Bazon & Stanislas Rolland",
 			developerUrl	: "http://www.fructifor.ca/",
 			copyrightOwner	: "Mihai Bazon & Stanislas Rolland",
-			sponsor		: "Zapatec Inc. & Fructifor Inc.",
-			sponsorUrl	: "http://www.fructifor.ca/",
+			sponsor		: this.localize("Technische Universitat Ilmenau") + " & Zapatec Inc.",
+			sponsorUrl	: "http://www.tu-ilmenau.de/",
 			license		: "GPL"
 		};
 		this.registerPluginInformation(pluginInformation);
@@ -89,11 +113,13 @@
 		["InsertTable",		null,				"table"],
 		["toggle-borders",	null, 				"toggleborders"],
 		["table-prop",		"table",			"tableproperties"],
+		["table-restyle",	"table",			"tablerestyle"],
 		["row-prop",		"tr",				"rowproperties"],
 		["row-insert-above",	"tr",				"rowinsertabove"],
 		["row-insert-under",	"tr",				"rowinsertunder"],
 		["row-delete",		"tr",				"rowdelete"],
 		["row-split",		"td,th[rowSpan!=1]",		"rowsplit"],
+		["col-prop",		"td,th",			"columnproperties"],
 		["col-insert-before",	"td,th",			"columninsertbefore"],
 		["col-insert-after",	"td,th",			"columninsertafter"],
 		["col-delete",		"td,th",			"columndelete"],
@@ -106,21 +132,18 @@
 		["cell-split",		"td,th[colSpan!=1,rowSpan!=1]",	"cellsplit"]
 	],
 	
-	/************************
-	 * UTILITIES
-	 ************************/
 	/*
-	 * Retrieve the closest element having the specified tagName in the list of
+	 * Retrieve the closest element having the specified nodeName in the list of
 	 * ancestors of the current selection/caret.
 	 */
-	getClosest : function (tagName) {
+	getClosest : function (nodeName) {
 		var editor = this.editor;
 		var ancestors = editor.getAllAncestors();
 		var ret = null;
-		tagName = ("" + tagName).toLowerCase();
+		nodeName = ("" + nodeName).toLowerCase();
 		for (var i=0; i < ancestors.length; ++i) {
 			var el = ancestors[i];
-			if (el.tagName.toLowerCase() == tagName) {
+			if (el.nodeName.toLowerCase() == nodeName) {
 				ret = el;
 				break;
 			}
@@ -129,21 +152,209 @@
 	},
 	
 	/*
-	 * Open the table properties dialog.
+	 * Open the table properties dialogue
 	 */
-	dialogTableProperties : function () {
-			// retrieve existing values
-		var table = this.getClosest("table");
-		var tablePropertiesInitFunctRef = TableOperations.tablePropertiesInit(table);
-		var tablePropertiesUpdateFunctRef = TableOperations.tablePropertiesUpdate(table);
-		var dialog = new PopupWin(this.editor, this.localize("Table Properties"), tablePropertiesUpdateFunctRef, tablePropertiesInitFunctRef, 570, 600);
+	dialogTableProperties : function (buttonId) {
+		var tablePropertiesInitFunctRef = this.makeFunctionReference("tablePropertiesInit");
+		var insert = (buttonId === "InsertTable");
+		var arguments = {
+			title 		: (insert ? "Insert Table" : "Table Properties"),
+			initialize	: tablePropertiesInitFunctRef,
+			element		: (insert ? null : this.getClosest("table"))
+		};
+		var dimensions = {
+			width	: 820,
+			height	: insert ? 600 : 630
+		};
+		this.dialog = this.openDialog((insert ? "InsertTable" : "table-prop"), "", "tablePropertiesUpdate", arguments, dimensions);
 	},
 	
 	/*
-	 * Open the row/cell properties dialog.
-	 * This function requires the file PopupWin to be loaded.
+	 * Initialize the table insertion or table properties dialog
 	 */
-	dialogRowCellProperties : function (cell) {
+	tablePropertiesInit : function(dialog) {
+		var doc = dialog.document;
+		var content = dialog.content;
+		var table = dialog.arguments.element;
+		this.removedFieldsets = this.buttonsConfiguration[table?"tableproperties":"table"].removeFieldsets ? this.buttonsConfiguration[table?"tableproperties":"table"].removeFieldsets : "";
+		this.properties = this.buttonsConfiguration.table.properties;
+		this.removedProperties = (this.properties && this.properties.removed) ? this.properties.removed : "";
+		TableOperations.buildTitle(doc, content, dialog.arguments.title);
+		TableOperations.insertSpace(doc, content);
+		if (this.removedFieldsets.indexOf("description") == -1) {
+			TableOperations.buildDescriptionFieldset(doc, table, content, "floating");
+		}
+		if (this.removedFieldsets.indexOf("spacing") == -1) TableOperations.buildSpacingFieldset(doc, table, content);
+		TableOperations.insertSpace(doc, content);
+		this.buildSizeAndHeadersFieldset(doc, table, content, "floating");
+		if (this.removedFieldsets.indexOf("style") == -1 && dialog.editor.config.customSelects.BlockStyle) {
+			var blockStyle = dialog.editor.plugins.BlockStyle.instance;
+			if (blockStyle && blockStyle.cssLoaded) {
+				TableOperations.buildStylingFieldset(doc, this.editor, table, content);
+				TableOperations.insertSpace(doc, content);
+			}
+		}
+		if (this.removedFieldsets.indexOf("layout") == -1) this.buildLayoutFieldset(doc, table, content, "floating");
+		if (this.removedFieldsets.indexOf("alignment") == -1) this.buildAlignmentFieldset(doc, table, content);
+		TableOperations.insertSpace(doc, content);
+		if (this.removedFieldsets.indexOf("borders") == -1) this.buildBordersFieldset(dialog.dialogWindow, doc, dialog.editor, table, content);
+		if (this.removedFieldsets.indexOf("color") == -1) TableOperations.buildColorsFieldset(dialog.dialogWindow, doc, dialog.editor, table, content);
+		dialog.addButtons("ok", "cancel");
+	},
+	
+	/*
+	 * Insert the table or update the table properties and close the dialogue
+	 */
+	tablePropertiesUpdate : function(dialog, params) {
+		if (this.buttonsConfiguration.table.properties && this.buttonsConfiguration.table.properties.required) {
+			if (this.buttonsConfiguration.table.properties.required.indexOf("captionOrSummary") != -1) {
+				if (!/\S/.test(params.f_caption) && !/\S/.test(params.f_summary)) {
+					dialog.dialogWindow.alert(this.localize("captionOrSummary" + "-required"));
+					var el = dialog.document.getElementById("f_caption");
+					el.focus();
+					return false;
+				}
+			} else {
+				var required = { "f_caption": "caption", "f_summary": "summary" };
+				for (var i in required) {
+					if (required.hasOwnProperty(i)) {
+						var el = dialog.document.getElementById(i);
+						if (!el.value && this.buttonsConfiguration.table.properties.required.indexOf(required[i]) != -1) {
+							dialog.dialogWindow.alert(this.localize(required[i] + "-required"));
+							el.focus();
+							return false;
+						}
+					}
+				}
+			}
+		}
+		var doc = dialog.editor._doc;
+		if (dialog.buttonId === "InsertTable") {
+			var required = { "f_rows": "You must enter a number of rows", "f_cols": "You must enter a number of columns" };
+			for (var i in required) {
+				if (required.hasOwnProperty(i)) {
+					var el = dialog.document.getElementById(i);
+					if (!el.value) {
+						dialog.dialogWindow.alert(this.localize(required[i]));
+						el.focus();
+						return false;
+					}
+				}
+			}
+			var table = doc.createElement("table");
+			var tbody = doc.createElement("tbody");
+			table.appendChild(tbody);
+			for (var i = params.f_rows; --i >= 0;) {
+				var tr = doc.createElement("tr");
+				tbody.appendChild(tr);
+				for (var j = params.f_cols; --j >= 0;) {
+					var td = doc.createElement("td");
+					tr.appendChild(td);
+				}
+			}
+		} else {
+			var table = dialog.arguments.element;
+		}
+		table = this.setHeaders(table, params);
+		table = this.processStyle(table, params);
+		table.removeAttribute("border");
+		for (var i in params) {
+			if (params.hasOwnProperty(i)) {
+				var val = params[i];
+				switch (i) {
+				    case "f_caption":
+					if (/\S/.test(val)) {
+						// contains non white-space characters
+						var caption = table.getElementsByTagName("caption");
+						if (caption) {
+							caption = caption[0];
+						}
+						if (!caption) {
+							var caption = doc.createElement("caption");
+							table.appendChild(caption);
+						}
+						caption.innerHTML = val;
+					} else {
+						// delete the caption if found
+						if (table.caption) table.deleteCaption();
+					}
+					break;
+				    case "f_summary":
+					table.summary = val;
+					break;
+				    case "f_width":
+					table.style.width = ("" + val) + params.f_unit;
+					break;
+				    case "f_align":
+					table.align = val;
+					break;
+				    case "f_spacing":
+					table.cellSpacing = val;
+					break;
+				    case "f_padding":
+					table.cellPadding = val;
+					break;
+				    case "f_frames":
+					table.frame = (val != "not set") ? val : "";
+					break;
+				    case "f_rules":
+					if (val != "not set") table.rules = val;
+						else table.removeAttribute("rules");
+					break;
+				    case "f_st_float":
+					switch (val) {
+					    case "not set":
+						HTMLArea._removeClass(table, this.floatRight);
+						HTMLArea._removeClass(table, this.floatLeft);
+						break;
+					    case "right":
+						HTMLArea._removeClass(table, this.floatLeft);
+						HTMLArea._addClass(table, this.floatRight);
+						break;
+					    case "left":
+						HTMLArea._removeClass(table, this.floatRight);
+						HTMLArea._addClass(table, this.floatLeft);
+						break;
+					}
+					break;
+				    case "f_st_textAlign":
+					if (this.editor.plugins.BlockElements) {
+						this.editor.plugins.BlockElements.instance.toggleAlignmentClass(table, this.convertAlignment[val]);
+						table.style.textAlign = "";
+					}
+					break;
+				    case "f_class":
+				    case "f_class_tbody":
+				    case "f_class_thead":
+				    case "f_class_tfoot":
+					var tpart = table;
+					if (i.length > 7) tpart = table.getElementsByTagName(i.substring(8,13))[0];
+					if (tpart) {
+						this.editor.plugins.BlockStyle.instance.applyClassChange(tpart, val);
+					}
+					break;
+				}
+			}
+		}
+		if (dialog.buttonId === "InsertTable") {
+			this.editor.insertNodeAtSelection(table);
+			if (HTMLArea.is_gecko) {
+				this.editor.selectNodeContents(table.rows[0].cells[0], true);
+			}
+			if (this.buttonsConfiguration.toggleborders && this.buttonsConfiguration.toggleborders.setOnTableCreation) {
+				this.toggleBorders(true);
+			} else if (HTMLArea.is_gecko && !HTMLArea.is_safari && !HTMLArea.is_opera) {
+					// otherwise the cells are 2 pixels high..
+				this.editor.setMode("wysiwyg");
+			}
+		}
+		dialog.close();
+	},
+	
+	/*
+	 * Open the row/column/cell properties dialogue
+	 */
+	dialogRowCellProperties : function (cell, column) {
 			// retrieve existing values
 		if (cell) {
 			var element = this.getClosest("td");
@@ -151,14 +362,122 @@
 		} else {
 			var element = this.getClosest("tr");
 		}
-		if(element) {
-			var rowCellPropertiesInitFunctRef = TableOperations.rowCellPropertiesInit(element, cell);
-			var rowCellPropertiesUpdateFunctRef = TableOperations.rowCellPropertiesUpdate(element);
-			var dialog = new PopupWin(this.editor, this.localize(cell ? "Cell Properties" : "Row Properties"), rowCellPropertiesUpdateFunctRef, rowCellPropertiesInitFunctRef, 700, 425);
+		if (element) {
+			var rowCellPropertiesInitFunctRef = this.makeFunctionReference("rowCellPropertiesInit");
+			var arguments = {
+				title 		: (cell ? (column ? "Column Properties" : "Cell Properties") : "Row Properties"),
+				initialize	: rowCellPropertiesInitFunctRef,
+				element		: element,
+				cell		: cell,
+				column		: column
+			};
+			this.dialog = this.openDialog(cell ? (column ? "col-prop" : "cell-prop") :"row-prop", "", "rowCellPropertiesUpdate", arguments, { width : 830, height : 425 });
 		}
 	},
 	
 	/*
+	 * Initialize the row/column/cell properties dialogue
+	 */
+	rowCellPropertiesInit : function(dialog) {
+		var doc = dialog.document;
+		var content = dialog.content;
+		var element = dialog.arguments.element;
+		var cell = dialog.arguments.cell;
+		var column = dialog.arguments.column;
+		this.removedFieldsets = this.buttonsConfiguration[cell?(column?"columnproperties":"cellproperties"):"rowproperties"].removeFieldsets ? this.buttonsConfiguration[cell?(column?"columnproperties":"cellproperties"):"rowproperties"].removeFieldsets : "";
+		this.properties = this.buttonsConfiguration[(cell ||column)?"cellproperties":"rowproperties"].properties;
+		this.removedProperties = (this.properties && this.properties.removed) ? this.properties.removed : "";
+		TableOperations.buildTitle(doc, content, (cell ? (column ? "Column Properties" : "Cell Properties") : "Row Properties"));
+		TableOperations.insertSpace(doc, content);
+		if (column) {
+			if (this.removedFieldsets.indexOf("columntype") == -1) TableOperations.buildCellTypeFieldset(doc, dialog.editor, element, content, true);
+		} else if (cell) {
+			if (this.removedFieldsets.indexOf("celltype") == -1) TableOperations.buildCellTypeFieldset(doc, dialog.editor, element, content, false);
+		} else {
+			if (this.removedFieldsets.indexOf("rowgroup") == -1) TableOperations.buildRowGroupFieldset(dialog.dialogWindow, doc, dialog.editor, element, content);
+		}
+		if (this.removedFieldsets.indexOf("style") == -1 && this.editor.config.customSelects.BlockStyle) {
+			var blockStyle = this.editor.plugins.BlockStyle.instance;
+			if (blockStyle && blockStyle.cssLoaded) {
+				TableOperations.buildStylingFieldset(doc, this.editor, element, content);
+				TableOperations.insertSpace(doc, content);
+			} else {
+				TableOperations.insertSpace(doc, content);
+			}
+		} else {
+			TableOperations.insertSpace(doc, content);
+		}
+		if (this.removedFieldsets.indexOf("layout") == -1) this.buildLayoutFieldset(doc, element, content, "floating");
+		if (this.removedFieldsets.indexOf("alignment") == -1) this.buildAlignmentFieldset(doc, element, content);
+		if (this.removedFieldsets.indexOf("borders") == -1) this.buildBordersFieldset(dialog.dialogWindow, doc, dialog.editor, element, content);
+		if (this.removedFieldsets.indexOf("color") == -1) TableOperations.buildColorsFieldset(dialog.dialogWindow, doc, dialog.editor, element, content);
+		dialog.addButtons("ok", "cancel");
+	},
+	
+	/*
+	 * Update the row/column/cell properties
+	 */
+	rowCellPropertiesUpdate : function(dialog, params) {
+		var element = dialog.arguments.element;
+		var cell = dialog.arguments.cell;
+		var column = dialog.arguments.column;
+		var section = (cell || column) ? element.parentNode.parentNode : element.parentNode;
+		var table = section.parentNode;
+		var elements = new Array();
+		if (column) {
+			elements = this.getColumnCells(dialog.arguments.element);
+		} else {
+			elements.push(dialog.arguments.element);
+		}
+		for (var k = elements.length; --k >= 0;) {
+			var element = elements[k];
+			element = this.processStyle(element, params);
+			for (var i in params) {
+				var val = params[i];
+				switch (i) {
+				    case "f_cell_type":
+					if (val.substring(0,2) != element.nodeName.toLowerCase()) {
+						element = this.remapCell(element, val.substring(0,2));
+						this.editor.selectNodeContents(element, true);
+					}
+					if (val.substring(2,10) != element.scope) {
+						element.scope = val.substring(2,10);
+					}
+					break;
+				    case "f_rowgroup":
+					var nodeName = section.nodeName.toLowerCase();
+					if (val != nodeName) {
+						var newSection = table.getElementsByTagName(val)[0];
+						if (!newSection) var newSection = table.insertBefore(dialog.editor._doc.createElement(val), table.getElementsByTagName("tbody")[0]);
+						if (nodeName == "thead" && val == "tbody") var newElement = newSection.insertBefore(element, newSection.firstChild);
+							else var newElement = newSection.appendChild(element);
+						if (!section.hasChildNodes()) table.removeChild(section);
+					}
+					if (params.f_convertCells) {
+						if (val == "thead") {
+							this.remapRowCells(element, "th");
+						} else {
+							this.remapRowCells(element, "td");
+						}
+					}
+					break;
+				    case "f_st_textAlign":
+					if (this.editor.plugins.BlockElements) {
+						this.editor.plugins.BlockElements.instance.toggleAlignmentClass(element, this.convertAlignment[val]);
+						element.style.textAlign = "";
+					}
+					break;
+				    case "f_class":
+					this.editor.plugins.BlockStyle.instance.applyClassChange(element, val);
+					break;
+				}
+			}
+		}
+		this.reStyleTable(table);
+		dialog.close();
+	},
+	
+	/*
 	 * This function gets called when a Table Operations button was pressed.
 	 *
 	 * @param	object		editor: the editor instance
@@ -194,7 +513,7 @@
 		function splitRow(td) {
 			var n = parseInt("" + td.rowSpan);
 			var colSpan = td.colSpan;
-			var tagName = td.tagName.toLowerCase();
+			var nodeName = td.nodeName.toLowerCase();
 			td.rowSpan = 1;
 			var tr = td.parentNode;
 			var sectionRowIndex = tr.sectionRowIndex;
@@ -204,7 +523,7 @@
 				tr = rows[++sectionRowIndex];
 					// Last row
 				if (!tr) tr = td.parentNode.parentNode.appendChild(editor._doc.createElement("tr"));
-				var otd = editor._doc.createElement(tagName);
+				var otd = editor._doc.createElement(nodeName);
 				otd.colSpan = colSpan;
 				otd.innerHTML = mozbr;
 				tr.insertBefore(otd, tr.cells[index]);
@@ -213,12 +532,12 @@
 	
 		function splitCol(td) {
 			var nc = parseInt("" + td.colSpan);
-			var tagName = td.tagName.toLowerCase();
+			var nodeName = td.nodeName.toLowerCase();
 			td.colSpan = 1;
 			var tr = td.parentNode;
 			var ref = td.nextSibling;
 			while (--nc > 0) {
-				var otd = editor._doc.createElement(tagName);
+				var otd = editor._doc.createElement(nodeName);
 				otd.rowSpan = td.rowSpan;
 				otd.innerHTML = mozbr;
 				tr.insertBefore(otd, ref);
@@ -255,8 +574,8 @@
 			try {
 				while (range = sel.getRangeAt(i++)) {
 					cell = range.startContainer.childNodes[range.startOffset];
-					while (!/^(td|th|body)$/.test(cell.tagName.toLowerCase())) cell = cell.parentNode;
-					if (/^(td|th)$/.test(cell.tagName.toLowerCase())) cells.push(cell);
+					while (!/^(td|th|body)$/.test(cell.nodeName.toLowerCase())) cell = cell.parentNode;
+					if (/^(td|th)$/.test(cell.nodeName.toLowerCase())) cells.push(cell);
 				}
 			} catch(e) {
 			/* finished walking through selection */
@@ -329,6 +648,7 @@
 			clearRow(otr);
 			otr = tr.parentNode.insertBefore(otr, (/under/.test(buttonId) ? tr.nextSibling : tr));
 			this.editor.selectNodeContents(otr.firstChild, true);
+			this.reStyleTable(tr.parentNode.parentNode);
 			break;
 		    case "TO-row-delete":
 			var tr = this.getClosest("tr");
@@ -344,9 +664,7 @@
 				selectNextNode(tr);
 				part.removeChild(tr);
 			}
-			editor.forceRedraw();
-			editor.focusEditor();
-			editor.updateToolbar();
+			this.reStyleTable(table);
 			break;
 		    case "TO-row-split":
 			var cell = this.getClosest("td");
@@ -359,8 +677,6 @@
 			} else {
 				splitRow(cell);
 			}
-			editor.forceRedraw();
-			editor.updateToolbar();
 			break;
 	
 			// COLUMNS
@@ -379,18 +695,18 @@
 						var tr = rows[i];
 						var ref = tr.cells[index + (/after/.test(buttonId) ? 1 : 0)];
 						if (!ref) {
-							var otd = editor._doc.createElement(tr.lastChild.tagName.toLowerCase());
+							var otd = editor._doc.createElement(tr.lastChild.nodeName.toLowerCase());
 							otd.innerHTML = mozbr;
 							tr.appendChild(otd);
 						} else {
-							var otd = editor._doc.createElement(ref.tagName.toLowerCase());
+							var otd = editor._doc.createElement(ref.nodeName.toLowerCase());
 							otd.innerHTML = mozbr;
 							tr.insertBefore(otd, ref);
 						}
 					}
 				}
 			}
-			editor.focusEditor();
+			this.reStyleTable(table);
 			break;
 		    case "TO-col-split":
 			var cell = this.getClosest("td");
@@ -403,8 +719,7 @@
 			} else {
 				splitCol(cell);
 			}
-			editor.forceRedraw();
-			editor.updateToolbar();
+			this.reStyleTable(table);
 			break;
 		    case "TO-col-delete":
 			var cell = this.getClosest("td");
@@ -443,9 +758,7 @@
 				selectNextNode(table);
 				table.parentNode.removeChild(table);
 			}
-			editor.forceRedraw();
-			editor.focusEditor();
-			editor.updateToolbar();
+			this.reStyleTable(table);
 			break;
 	
 			// CELLS
@@ -460,8 +773,7 @@
 			} else {
 				splitCell(cell);
 			}
-			editor.forceRedraw();
-			editor.updateToolbar();
+			this.reStyleTable(table);
 			break;
 		    case "TO-cell-insert-before":
 		    case "TO-cell-insert-after":
@@ -469,11 +781,10 @@
 			if (!cell) var cell = this.getClosest("th");
 			if (!cell) break;
 			var tr = cell.parentNode;
-			var otd = editor._doc.createElement(cell.tagName.toLowerCase());
+			var otd = editor._doc.createElement(cell.nodeName.toLowerCase());
 			otd.innerHTML = mozbr;
 			tr.insertBefore(otd, (/after/.test(buttonId) ? cell.nextSibling : cell));
-			editor.forceRedraw();
-			editor.focusEditor();
+			this.reStyleTable(tr.parentNode.parentNode);
 			break;
 		    case "TO-cell-delete":
 			var cell = this.getClosest("td");
@@ -496,9 +807,7 @@
 				selectNextNode(cell);
 				row.removeChild(cell);
 			}
-			editor.forceRedraw();
-			editor.focusEditor();
-			editor.updateToolbar();
+			this.reStyleTable(table);
 			break;
 		    case "TO-cell-merge":
 			var sel = editor._getSelection();
@@ -521,7 +830,7 @@
 				} catch(e) {
 					/* finished walking through selection */
 				}
-				rows[tablePartsIndex[row.parentNode.nodeName.toLowerCase()]].push(cells);
+				try { rows[tablePartsIndex[row.parentNode.nodeName.toLowerCase()]].push(cells); } catch(e) { }
 			} else {
 				// Internet Explorer, Safari and Opera
 				var cell = this.getClosest("td");
@@ -599,318 +908,633 @@
 					editor.selectNodeContents(td);
 				}
 			}
+			this.reStyleTable(table);
 			break;
-				// CREATION AND PROPERTIES
-			case "InsertTable":
-				this.dialogInsertTable();
-				break;
-			case "TO-table-prop":
-				this.dialogTableProperties();
-				break;
-			case "TO-row-prop":
-				this.dialogRowCellProperties(false);
-				break;
-			case "TO-cell-prop":
-				this.dialogRowCellProperties(true);
-				break;
-			case "TO-toggle-borders":
-				this.toggleBorders();
-				break;
-			default:
-				alert("Button [" + buttonId + "] not yet implemented");
+			
+			// CREATION AND PROPERTIES
+		    case "InsertTable":
+		    case "TO-table-prop":
+			this.dialogTableProperties(buttonId);
+			break;
+		    case "TO-table-restyle":
+			this.reStyleTable(this.getClosest("table"));
+			break;
+		    case "TO-row-prop":
+			this.dialogRowCellProperties(false, false);
+			break;
+		    case "TO-col-prop":
+			this.dialogRowCellProperties(true, true);
+			break;
+		    case "TO-cell-prop":
+			this.dialogRowCellProperties(true, false);
+			break;
+		    case "TO-toggle-borders":
+			this.toggleBorders();
+			break;
+		    default:
+			alert("Button [" + buttonId + "] not yet implemented");
 		}
 	},
 	
 	/*
-	 * Open insert table request
+	 * Returns an array of all cells in the column containing the given cell
+	 *
+	 * @param	object		cell: the cell serving as reference point for the column
+	 *
+	 * @return	array		the array of cells of the column
 	 */
-	dialogInsertTable : function () {
-		this.dialog = this.openDialog("InsertTable", this.makeUrlFromPopupName("insert_table"), "insertTable", null, {width:520, height:230});
-		return false;
+	getColumnCells : function (cell) {
+		var cells = new Array();
+		var index = cell.cellIndex;
+		var table = cell.parentNode.parentNode.parentNode;
+		for (var j = this.tableParts.length; --j >= 0;) {
+			var tablePart = table.getElementsByTagName(this.tableParts[j])[0];
+			if (tablePart) {
+				var rows = tablePart.rows;
+				for (var i = rows.length; --i >= 0;) {
+					if(rows[i].cells.length > index) {
+						cells.push(rows[i].cells[index]);
+					}
+				}
+			}
+		}
+		return cells;
 	},
 	
 	/*
-	* Get the insert table action function
-	*/
-	insertTable : function(param) {
-		var editor = this.editor;
-		if (!param) return false;
-		var doc = editor._doc;
-		var table = doc.createElement("table");
-		for (var field in param) {
-			if (param.hasOwnProperty(field)) {
-				var value = param[field];
-				if (value) {
-					switch (field) {
-						case "f_width"   : 
-							if(value != "") {
-								table.style.width = parseInt(value) + param["f_unit"];
-								break;
-							}
-						case "f_align"   :
-							table.style.textAlign = value;
-							break;
-						case "f_border"  :
-							if(value != "") {
-								table.style.borderWidth	 = parseInt(value)+"px";
-								table.style.borderStyle = "solid";
-							}
-							break;
-						case "f_spacing" :
-							if(value != "") {
-								table.cellSpacing = parseInt(value);
-								break;
-							}
-						case "f_padding" :
-							if(value != "") {
-								table.cellPadding = parseInt(value);
-								break;
-							}
-						case "f_float"   :
-							if (HTMLArea.is_ie) {
-								table.style.styleFloat = ((value != "not set") ? value : "");
-							} else {
-								table.style.cssFloat = ((value != "not set") ? value : "");
-							}
-							break;
+	 * Toggles the display of borders on tables and table cells
+	 *
+	 * @param	boolean		forceBorders: if set, borders are displayed whatever the current state
+	 *
+	 * @return	void
+	 */
+	toggleBorders : function (forceBorders) {
+		var body = this.editor._doc.body;
+		if (!HTMLArea._hasClass(body, 'htmlarea-showtableborders')) {
+			HTMLArea._addClass(body,'htmlarea-showtableborders');
+		} else if (!forceBorders) {
+			HTMLArea._removeClass(body,'htmlarea-showtableborders');
+		}
+			// The only way to get Firefox to show these borders...
+		if (HTMLArea.is_gecko && !HTMLArea.is_safari && !HTMLArea.is_opera) this.editor.setMode("wysiwyg");
+	},
+	
+	/*
+	 * Applies to rows/cells the alternating classes of an alternating style scheme
+	 *
+	 * @param	object		table: the table to be re-styled
+	 *
+	 * @return	void
+	 */
+	reStyleTable : function (table) {
+		if (table) {
+			if (this.classesUrl && typeof(HTMLArea.classesAlternating) === "undefined") {
+				this.getJavascriptFile(this.classesUrl);
+			}
+			var classNames = table.className.trim().split(" ");
+			for (var i = classNames.length; --i >= 0;) {
+				var classConfiguration = HTMLArea.classesAlternating[classNames[i]];
+				if (classConfiguration && classConfiguration.rows) {
+					if (classConfiguration.rows.oddClass && classConfiguration.rows.evenClass) {
+						this.alternateRows(table, classConfiguration);
 					}
 				}
+				if (classConfiguration && classConfiguration.columns) {
+					if (classConfiguration.columns.oddClass && classConfiguration.columns.evenClass) {
+						this.alternateColumns(table, classConfiguration);
+					}
+				}
 			}
 		}
-		var cellwidth = 0;
-		if(param.f_fixed) cellwidth = Math.floor(100 / parseInt(param.f_cols));
-		var tbody = doc.createElement("tbody");
-		table.appendChild(tbody);
-		for (var i = param["f_rows"]; i > 0; i--) {
-			var tr = doc.createElement("tr");
-			tbody.appendChild(tr);
-			for (var j = param["f_cols"]; j > 0; j--) {
-				var td = doc.createElement("td");
-				if (cellwidth) td.style.width = cellwidth + "%";
-				if (HTMLArea.is_opera) { td.innerHTML = '&nbsp;'; }
-				tr.appendChild(td);
+	},
+	
+	/*
+	 * Removes from rows/cells the alternating classes of an alternating style scheme
+	 *
+	 * @param	object		table: the table to be re-styled
+	 * @param	string		removeClass: the name of the class that identifies the alternating style scheme
+	 *
+	 * @return	void
+	 */
+	removeAlternatingClasses : function (table, removeClass) {
+		if (table) {
+			if (this.classesUrl && typeof(HTMLArea.classesAlternating) === "undefined") {
+				this.getJavascriptFile(this.classesUrl);
 			}
+			var classConfiguration = HTMLArea.classesAlternating[removeClass];
+			if (classConfiguration) {
+				if (classConfiguration.rows && classConfiguration.rows.oddClass && classConfiguration.rows.evenClass) {
+					this.alternateRows(table, classConfiguration, true);
+				}
+				if (classConfiguration.columns && classConfiguration.columns.oddClass && classConfiguration.columns.evenClass) {
+					this.alternateColumns(table, classConfiguration, true);
+				}
+			}
 		}
-		editor.focusEditor();
-		editor.insertNodeAtSelection(table);
-		if (this.buttonsConfiguration.toggleborders && this.buttonsConfiguration.toggleborders.setOnTableCreation) {
-			this.toggleBorders();
+	},
+	
+	/*
+	 * Applies/removes the alternating classes of an alternating rows style scheme
+	 *
+	 * @param	object		table: the table to be re-styled
+	 * @param	object		classConfifuration: the alternating sub-array of the configuration of the class
+	 * @param	boolean		remove: if true, the classes are removed
+	 *
+	 * @return	void
+	 */
+	alternateRows : function (table, classConfiguration, remove) {
+		var oddClass = { tbody : classConfiguration.rows.oddClass, thead : classConfiguration.rows.oddHeaderClass };
+		var evenClass = { tbody : classConfiguration.rows.evenClass, thead : classConfiguration.rows.evenHeaderClass };
+		var startAt = classConfiguration.rows.startAt ? parseInt(classConfiguration.rows.startAt) : 0;
+		startAt = remove ? 0 : startAt;
+		var rows = table.rows, type, odd, even;
+			// Loop through the rows
+		for (var i = startAt, n = rows.length; i < n; i++) {
+			var row = rows[i];
+			type = (row.parentNode.nodeName.toLowerCase() == "thead") ? "thead" : "tbody";
+			odd = oddClass[type];
+			even = evenClass[type];
+			if (remove) {
+				HTMLArea._removeClass(row, odd);
+				HTMLArea._removeClass(row, even);
+				// Check if i is even, and apply classes for both possible results
+			} else if (odd && even) {
+				if ((i % 2) == 0) {
+					if (HTMLArea._hasClass(row, odd)) {
+						HTMLArea._removeClass(row, odd);
+					}
+					HTMLArea._addClass(row, even);
+				} else {
+					if (HTMLArea._hasClass(row, even)) {
+						HTMLArea._removeClass(row, even);
+					}
+					HTMLArea._addClass(row, odd);
+				}
+			}
 		}
-		return true;
 	},
 	
-	toggleBorders : function () {
-		var tables = this.editor._doc.getElementsByTagName("table");
-		if (tables.length != 0) {
-			this.editor.borders = true;
-			for (var ix=0; ix < tables.length; ix++) this.editor.borders = this.editor.borders && /htmlarea-showtableborders/.test(tables[ix].className);
-			for (ix=0; ix < tables.length; ix++) {
-				if (!this.editor.borders) HTMLArea._addClass(tables[ix],'htmlarea-showtableborders');
-					else HTMLArea._removeClass(tables[ix],'htmlarea-showtableborders');
+	/*
+	 * Applies/removes the alternating classes of an alternating columns style scheme
+	 *
+	 * @param	object		table: the table to be re-styled
+	 * @param	object		classConfifuration: the alternating sub-array of the configuration of the class
+	 * @param	boolean		remove: if true, the classes are removed
+	 *
+	 * @return	void
+	 */
+	alternateColumns : function (table, classConfiguration, remove) {
+		var oddClass = { td : classConfiguration.columns.oddClass, th : classConfiguration.columns.oddHeaderClass };
+		var evenClass = { td : classConfiguration.columns.evenClass, th : classConfiguration.columns.evenHeaderClass };
+		var startAt = classConfiguration.columns.startAt ? parseInt(classConfiguration.columns.startAt) : 0;
+		startAt = remove ? 0 : startAt;
+		var rows = table.rows, type, odd, even;
+			// Loop through the rows of the table
+		for (var i = rows.length; --i >= 0;) {
+				// Loop through the cells
+			var cells = rows[i].cells;
+			for (var j = startAt, n = cells.length; j < n; j++) {
+				var cell = cells[j];
+				type = cell.nodeName.toLowerCase();
+				odd = oddClass[type];
+				even = evenClass[type];
+				if (remove) {
+					if (odd) HTMLArea._removeClass(cell, odd);
+					if (even) HTMLArea._removeClass(cell, even);
+				} else if (odd && even) {
+						// Check if j+startAt is even, and apply classes for both possible results
+					if ((j % 2) == 0) {
+						if (HTMLArea._hasClass(cell, odd)) {
+							HTMLArea._removeClass(cell, odd);
+						}
+						HTMLArea._addClass(cell, even);
+					} else{
+						if (HTMLArea._hasClass(cell, even)) {
+							HTMLArea._removeClass(cell, even);
+						}
+						HTMLArea._addClass(cell, odd);
+					}
+				}
 			}
 		}
-			// The only way to get Firefox to show these borders...
-		if (HTMLArea.is_gecko && !HTMLArea.is_safari && !HTMLArea.is_opera) this.editor.setMode("wysiwyg");
-	}
-});
-
-/*
- * Set the language file for the plugin
- */
-TableOperations.I18N = TableOperations_langArray;
-
-/*
- * Initialize the table properties dialog
- */
-TableOperations.tablePropertiesInit = function(table) {
-	return (function (dialog) {
-		var doc = dialog.doc;
-		var content = dialog.content;
-		var i18n = TableOperations.I18N;
-		TableOperations.buildTitle(doc, i18n, content, "Table Properties");
-		TableOperations.buildDescriptionFieldset(doc, table, i18n, content);
-		var obj = dialog.editor.config.customSelects.BlockStyle ? dialog.editor.plugins.BlockStyle.instance : dialog.editor.config.customSelects["DynamicCSS-class"];
-		if (obj && (obj.loaded || obj.cssLoaded)) TableOperations.buildStylingFieldset(doc, table, i18n, content, obj.cssArray);
-		if (!dialog.editor.config.disableLayoutFieldsetInTableOperations) TableOperations.buildLayoutFieldset(doc, table, i18n, content);
-		if (!dialog.editor.config.disableAlignmentFieldsetInTableOperations) TableOperations.buildAlignmentFieldset(doc, table, i18n, content, "floating");
-		if (!dialog.editor.config.disableSpacingFieldsetInTableOperations) TableOperations.buildSpacingFieldset(doc, table, i18n, content);
-		if (!dialog.editor.config.disableBordersFieldsetInTableOperations) TableOperations.buildBordersFieldset(dialog.dialogWindow, doc, dialog.editor, table, i18n, content);
-		if (!dialog.editor.config.disableColorFieldsetInTableOperations) TableOperations.buildColorsFieldset(dialog.dialogWindow, doc, dialog.editor, table, i18n, content);
-		dialog.modal = true;
-		dialog.addButtons("ok", "cancel");
-		dialog.showAtElement();
-	});
-};
-
-/*
- * Update the table properties and close the dialog
- */
-TableOperations.tablePropertiesUpdate = function(table) {
-	return (function (dialog,params) {
-		dialog.editor.focusEditor();
-		TableOperations.processStyle(params, table);
-		table.removeAttribute("border");
-		for (var i in params) {
-			var val = params[i];
-			switch (i) {
-			    case "f_caption":
-				if (/\S/.test(val)) {
-					// contains non white-space characters
-					var caption = table.getElementsByTagName("caption")[0];
-					if (!caption) {
-						caption = dialog.editor._doc.createElement("caption");
-						table.insertBefore(caption, table.firstChild);
+	},
+	
+	/*
+	 * This function sets the headers cells on the table (top, left, both or none)
+	 *
+	 * @param	object		table: the table being edited
+	 * @param	object		params: the field values entered in the form
+	 *
+	 * @return	object		the modified table
+	 */
+	setHeaders : function (table, params) {
+		var headers = params.f_headers;
+		var doc = this.editor._doc;
+		var tbody = table.tBodies[0];
+		var thead = table.tHead;
+		if (thead && !thead.rows.length && !tbody.rows.length) {
+			 // Table is degenerate
+			return table;
+		}
+		if (headers == "top") {
+			if (!thead) {
+				var thead = doc.createElement("thead");
+				thead = table.insertBefore(thead, tbody);
+			}
+			if (!thead.rows.length) {
+				var firstRow = thead.appendChild(tbody.rows[0]);
+			} else {
+				var firstRow = thead.rows[0];
+			}
+			HTMLArea._removeClass(firstRow, this.useHeaderClass);
+		} else {
+			if (thead) {
+				var rows = thead.rows;
+				if (rows.length) {
+					for (var i = rows.length; --i >= 0 ;) {
+						this.remapRowCells(rows[i], "td");
+						if (tbody.rows.length) {
+							tbody.insertBefore(rows[i], tbody.rows[0]);
+						} else {
+							tbody.appendChild(rows[i]);
+						}
 					}
-					caption.innerHTML = val;
-				} else {
-					// search for caption and delete it if found
-					var caption = table.getElementsByTagName("caption")[0];
-					if (caption) caption.parentNode.removeChild(caption);
 				}
-				break;
-			    case "f_summary":
-				table.summary = val;
-				break;
-			    case "f_width":
-				table.style.width = ("" + val) + params.f_unit;
-				break;
-			    case "f_align":
-				table.align = val;
-				break;
-			    case "f_spacing":
-				table.cellSpacing = val;
-				break;
-			    case "f_padding":
-				table.cellPadding = val;
-				break;
-			    case "f_frames":
-				table.frame = (val != "not set") ? val : "";
-				break;
-			    case "f_rules":
-				if (val != "not set") table.rules = val;
-			    		else table.removeAttribute("rules");
-				break;
-			    case "f_class":
-			    case "f_class_tbody":
-			    case "f_class_thead":
-			    case "f_class_tfoot":
-			    	var tpart = table;
-			    	if (i.length > 7) tpart = table.getElementsByTagName(i.substring(8,13))[0];
-				var cls = tpart.className.trim().split(" ");
-				for (var j = cls.length;j > 0;) {
-					if (!HTMLArea.reservedClassNames.test(cls[--j])) HTMLArea._removeClass(tpart,cls[j]);
+				table.removeChild(thead);
+			}
+		}
+		if (headers == "both") {
+			var firstRow = tbody.rows[0];
+			HTMLArea._addClass(firstRow, this.useHeaderClass);
+		} else if (headers != "top") {
+			var firstRow = tbody.rows[0];
+			HTMLArea._removeClass(firstRow, this.useHeaderClass);
+			this.remapRowCells(firstRow, "td");
+		}
+		if (headers == "top" || headers == "both") {
+			this.remapRowCells(firstRow, "th");
+		}
+		if (headers == "left") {
+			var firstRow = tbody.rows[0];
+		}
+		if (headers == "left" || headers == "both") {
+			var rows = tbody.rows;
+			for (var i = rows.length; --i >= 0 ;) {
+				if (i || rows[i] == firstRow) {
+					if (rows[i].cells[0].nodeName.toLowerCase() != "th") {
+						var th = this.remapCell(rows[i].cells[0], "th");
+						th.scope = "row";
+					}
 				}
-				if (val != 'none') HTMLArea._addClass(tpart,val);
-				break;
 			}
+		} else {
+			var rows = tbody.rows;
+			for (var i = rows.length; --i >= 0 ;) {
+				if (rows[i].cells[0].nodeName.toLowerCase() != "td") {
+					rows[i].cells[0].scope = "";
+					var td = this.remapCell(rows[i].cells[0], "td");
+				}
+			}
 		}
-		dialog.editor.focusEditor();
-		dialog.editor.updateToolbar();
-	});
-};
-
-/*
- * Initialize the row/cell properties dialog
- */
-TableOperations.rowCellPropertiesInit = function(element,cell) {
-	return (function (dialog) {
-		var doc = dialog.doc;
-		var content = dialog.content;
-		var i18n = TableOperations.I18N;
-		TableOperations.buildTitle(doc, i18n, content, (cell ? "Cell Properties" : "Row Properties"));
-		if (cell) TableOperations.buildCellTypeFieldset(dialog.dialogWindow, doc, dialog.editor, element, i18n, content);
-			else TableOperations.buildRowGroupFieldset(dialog.dialogWindow, doc, dialog.editor, element, i18n, content);
-		var obj = dialog.editor.config.customSelects.BlockStyle ? dialog.editor.plugins.BlockStyle.instance : dialog.editor.config.customSelects["DynamicCSS-class"];
-		if (obj && (obj.loaded || obj.cssLoaded))  TableOperations.buildStylingFieldset(doc, element, i18n, content, obj.cssArray);
-			else TableOperations.insertSpace(doc, content);
-		if (!dialog.editor.config.disableLayoutFieldsetInTableOperations) TableOperations.buildLayoutFieldset(doc, element, i18n, content, "floating");
-		if (!dialog.editor.config.disableAlignmentFieldsetInTableOperations) TableOperations.buildAlignmentFieldset(doc, element, i18n, content);
-		if (!dialog.editor.config.disableBordersFieldsetInTableOperations) TableOperations.buildBordersFieldset(dialog.dialogWindow, doc, dialog.editor, element, i18n, content);
-		if (!dialog.editor.config.disableColorFieldsetInTableOperations) TableOperations.buildColorsFieldset(dialog.dialogWindow, doc, dialog.editor, element, i18n, content);
-		dialog.modal = true;
-		dialog.addButtons("ok", "cancel");
-		dialog.showAtElement();
-	});
-};
-
-/*
- * Update the row/cell properties and close the dialog
- */
-TableOperations.rowCellPropertiesUpdate = function(element) {
-	return (function (dialog,params) {
-		dialog.editor.focusEditor();
-		TableOperations.processStyle(params, element);
-		var convertCellType = false;
+		this.reStyleTable(table);
+		return table;
+	},
+	
+	/*
+	 * This function remaps the given cell to the specified node name
+	 */
+	remapCell : function(element, nodeName) {
+		var newCell = this.editor.convertNode(element, nodeName);
+		var attributes = element.attributes, attributeName, attributeValue;
+		for (var i = attributes.length; --i >= 0;) {
+			attributeName = attributes.item(i).nodeName;
+			attributeValue = element.getAttribute(attributeName);
+			if (attributeValue) newCell.setAttribute(attributeName, attributeValue);
+		}
+			// In IE, the above fails to update the classname and style attributes.
+		if (HTMLArea.is_ie) {
+			if (element.style.cssText) {
+				newCell.style.cssText = element.style.cssText;
+			}
+			if (element.className) {
+				newCell.setAttribute("className", element.className);
+			} else {
+				newCell.removeAttribute("className");
+			}
+		}
+		
+		if (this.tags && this.tags[nodeName] && this.tags[nodeName].allowedClasses) {
+			if (newCell.className && /\S/.test(newCell.className)) {
+				var allowedClasses = new RegExp( "^(" + this.tags[nodeName].allowedClasses.trim().split(",").join("|") + ")$");
+				var classNames = newCell.className.trim().split(" ");
+				for (var i = classNames.length; --i >= 0;) {
+					if (!allowedClasses.test(classNames[i])) {
+						HTMLArea._removeClass(newCell, classNames[i]);
+					}
+				}
+			}
+		}
+		return newCell;
+	},
+	
+	remapRowCells : function (row, toType) {
+		var cells = row.cells;
+		if (toType === "th") {
+			for (var i = cells.length; --i >= 0 ;) {
+				if (cells[i].nodeName.toLowerCase() != "th") {
+					var th = this.remapCell(cells[i], "th");
+					th.scope = "col";
+				}
+			}
+		} else {
+			for (var i = cells.length; --i >= 0 ;) {
+				if (cells[i].nodeName.toLowerCase() != "td") {
+					var td = this.remapCell(cells[i], "td");
+					td.scope = "";
+				}
+			}
+		}
+	},
+	
+	/*
+	 * This function applies the style properties found in params to the given element
+	 *
+	 * @param	object		element: the element
+	 * @param	object		params: the properties
+	 *
+	 * @return	object		the modified element
+	 */
+	processStyle : function (element, params) {
+		var style = element.style;
+		if (HTMLArea.is_ie) {
+			style.styleFloat = "";
+		} else {
+			style.cssFloat = "";
+		}
+		style.textAlign = "";
 		for (var i in params) {
-			var val = params[i];
-			switch (i) {
-			    case "f_scope":
-			    	if (val != "not set") element.scope = val;
-			    		else element.removeAttribute('scope');
-				break;
-			    case "f_cell_type":
-			    		// Set all cell attributes before cloning it with a new tag
-			    	if (val != element.tagName.toLowerCase()) {
-					var newCellType = val;
-					convertCellType = true;
+			if (params.hasOwnProperty(i)) {
+				var val = params[i];
+				switch (i) {
+				    case "f_st_backgroundColor":
+					style.backgroundColor = val;
+					break;
+				    case "f_st_color":
+					style.color = val;
+					break;
+				    case "f_st_backgroundImage":
+					if (/\S/.test(val)) {
+						style.backgroundImage = "url(" + val + ")";
+					} else {
+						style.backgroundImage = "";
+					}
+					break;
+				    case "f_st_borderWidth":
+					if (/\S/.test(val)) {
+						style.borderWidth = val + "px";
+					} else {
+						style.borderWidth = "";
+					}
+					if (params.f_st_borderStyle == "none") style.borderWidth = "0px";
+					if (params.f_st_borderStyle == "not set") style.borderWidth = "";
+					break;
+				    case "f_st_borderStyle":
+					style.borderStyle = (val != "not set") ? val : "";
+					break;
+				    case "f_st_borderColor":
+					style.borderColor = val;
+					break;
+				    case "f_st_borderCollapse":
+					style.borderCollapse = val ? "collapse" : "";
+					break;
+				    case "f_st_width":
+					if (/\S/.test(val)) {
+						style.width = val + params.f_st_widthUnit;
+					} else {
+						style.width = "";
+					}
+					break;
+				    case "f_st_height":
+					if (/\S/.test(val)) {
+						style.height = val + params.f_st_heightUnit;
+					} else {
+						style.height = "";
+					}
+					break;
+				    case "f_st_textAlign":
+					style.textAlign = (val != "not set") ? val : "";
+					break;
+				    case "f_st_vertAlign":
+					style.verticalAlign = (val != "not set") ? val : "";
+					break;
 				}
-				break;
-			    case "f_rowgroup":
-			   	var section = element.parentNode;
-				var tagName = section.tagName.toLowerCase();
-				if (val != tagName) {
-					var table = section.parentNode;
-					var newSection = table.getElementsByTagName(val)[0];
-					if (!newSection) var newSection = table.insertBefore(dialog.editor._doc.createElement(val), table.getElementsByTagName("tbody")[0]);
-					if (tagName == "thead" && val == "tbody") var newElement = newSection.insertBefore(element, newSection.firstChild);
-						else var newElement = newSection.appendChild(element);
-					if (!section.hasChildNodes()) table.removeChild(section);
+			}
+		}
+		return element;
+	},
+	
+	/*
+	 * This function creates a Size and Headers fieldset to be added to the form
+	 *
+	 * @param	object		doc: the dialog document
+	 * @param	object		table: the table being edited
+	 * @param	object		content: the content div of the dialog window
+	 *
+	 * @return	void
+	 */
+	buildSizeAndHeadersFieldset : function (doc, table, content, fieldsetClass) {
+		var fieldset = doc.createElement("fieldset");
+		if (fieldsetClass) fieldset.className = fieldsetClass;
+		if (!table) {
+			TableOperations.insertLegend(doc, fieldset, "Size and Headers");
+			TableOperations.buildInput(doc, fieldset, "f_rows", "Rows:", "Number of rows", "", "5", ((this.properties && this.properties.numberOfRows && this.properties.numberOfRows.defaultValue) ? this.properties.numberOfRows.defaultValue : "2"), "fr");
+			TableOperations.buildInput(doc, fieldset, "f_cols", "Cols:", "Number of columns", "", "5", ((this.properties && this.properties.numberOfColumns && this.properties.numberOfColumns.defaultValue) ? this.properties.numberOfColumns.defaultValue : "4"));
+		} else {
+			TableOperations.insertLegend(doc, fieldset, "Headers");
+		}
+		if (this.removedProperties.indexOf("headers") == -1) {
+			var ul = doc.createElement("ul");
+			fieldset.appendChild(ul);
+			var li = doc.createElement("li");
+			ul.appendChild(li);
+			if (!table) {
+				var selected = (this.properties && this.properties.headers && this.properties.headers.defaultValue) ? this.properties.headers.defaultValue : "top";
+			} else {
+				var selected = "none";
+				var thead = table.getElementsByTagName("thead");
+				var tbody = table.getElementsByTagName("tbody");
+				if (thead.length && thead[0].rows.length) {
+					selected = "top";
+				} else if (tbody.length && tbody[0].rows.length) {
+					if (HTMLArea._hasClass(tbody[0].rows[0], this.useHeaderClass)) {
+						selected = "both";
+					} else if (tbody[0].rows[0].cells.length && tbody[0].rows[0].cells[0].nodeName.toLowerCase() == "th") {
+						selected = "left";
+					}
 				}
+			}
+			var selectHeaders = TableOperations.buildSelectField(doc, li, "f_headers", "Headers:", "fr", "floating", "Table headers", ["No header cells", "Header cells on top", "Header cells on left", "Header cells on top and left"], ["none", "top", "left", "both"],  new RegExp((selected ? selected : "top"), "i"));
+			this.removeOptions(selectHeaders, "headers");
+		}
+		TableOperations.insertSpace(doc, fieldset);
+		content.appendChild(fieldset);
+	},
+	
+	buildLayoutFieldset : function(doc, el, content, fieldsetClass) {
+		var select, selected;
+		var fieldset = doc.createElement("fieldset");
+		if (fieldsetClass) fieldset.className = fieldsetClass;
+		TableOperations.insertLegend(doc, fieldset, "Layout");
+		var f_st_width = el ? TableOperations.getLength(el.style.width) : ((this.properties && this.properties.width && this.properties.width.defaultValue) ? this.properties.width.defaultValue : "");
+		var f_st_height = el ? TableOperations.getLength(el.style.height) : ((this.properties && this.properties.height && this.properties.height.defaultValue) ? this.properties.height.defaultValue : "");
+		var selectedWidthUnit = el ? (/%/.test(el.style.width) ? '%' : (/px/.test(el.style.width) ? 'px' : 'em')) : ((this.properties && this.properties.widthUnit &&this.properties.widthUnit.defaultValue) ? this.properties.widthUnit.defaultValue : "%");
+		var selectedHeightUnit = el ? (/%/.test(el.style.height) ? '%' : (/px/.test(el.style.height) ? 'px' : 'em')) : ((this.properties && this.properties.heightUnit &&this.properties.heightUnit.defaultValue) ? this.properties.heightUnit.defaultValue : "%");
+		var nodeName = el ? el.nodeName.toLowerCase() : "table";
+		var ul = doc.createElement("ul");
+		fieldset.appendChild(ul);
+		switch(nodeName) {
+			case "table" :
+				var widthTitle = "Table width";
+				var heightTitle = "Table height";
 				break;
-			    case "f_char":
-				element.ch = val;
+			case "tr" :
+				var widthTitle = "Row width";
+				var heightTitle = "Row height";
 				break;
-			    case "f_class":
-				var cls = element.className.trim().split(" ");
-				for (var j = cls.length;j > 0;) {
-					if (!HTMLArea.reservedClassNames.test(cls[--j])) HTMLArea._removeClass(element,cls[j]);
+			case "td" :
+			case "th" :
+				var widthTitle = "Cell width";
+				var heightTitle = "Cell height";
+		}
+		if (this.removedProperties.indexOf("width") == -1) {
+			var li = doc.createElement("li");
+			ul.appendChild(li);
+			TableOperations.buildInput(doc, li, "f_st_width", "Width:", widthTitle, "", "5", f_st_width, "fr");
+			select = TableOperations.buildSelectField(doc, li, "f_st_widthUnit", "", "", "", "Width unit", ["percent", "pixels", "em"], ["%", "px", "em"], new RegExp((f_st_width ? selectedWidthUnit : "%"), "i"));
+			this.removeOptions(select, "widthUnit");
+		}
+		if (this.removedProperties.indexOf("height") == -1) {
+			var li = doc.createElement("li");
+			ul.appendChild(li);
+			TableOperations.buildInput(doc, li, "f_st_height", "Height:", heightTitle, "", "5", f_st_height, "fr");
+			select = TableOperations.buildSelectField(doc, li, "f_st_heightUnit", "", "", "", "Height unit", ["percent", "pixels", "em"], ["%", "px", "em"], new RegExp((f_st_height ? selectedHeightUnit : "%"), "i"));
+			this.removeOptions(select, "heightUnit");
+		}
+		if (nodeName == "table" && this.removedProperties.indexOf("float") == -1) {
+			selected = el ? (HTMLArea._hasClass(el, this.floatLeft) ? "left" : (HTMLArea._hasClass(el, this.floatRight) ? "right" : "not set")) : this.floatDefault;
+			select = TableOperations.buildSelectField(doc, li, "f_st_float", "Float:", "", "", "Specifies where the table should float", ["Not set", "Left", "Right"], ["not set", "left", "right"], new RegExp((selected ? selected : "not set"), "i"));
+			this.removeOptions(select, "float");
+		}
+		content.appendChild(fieldset);
+	},
+	
+	buildAlignmentFieldset : function (doc, el, content, fieldsetClass) {
+		var select;
+		var nodeName = el ? el.nodeName.toLowerCase() : "table";
+		var fieldset = doc.createElement("fieldset");
+		if (fieldsetClass) fieldset.className = fieldsetClass;
+		TableOperations.insertLegend(doc, fieldset, "Alignment");
+		var options = ["Not set", "Left", "Center", "Right", "Justify"];
+		var values = ["not set", "left", "center", "right", "justify"];
+		var selected = "";
+		if (el && this.editor.plugins.BlockElements) {
+			var blockElements = this.editor.plugins.BlockElements.instance;
+			for (var value in this.convertAlignment) {
+				if (this.convertAlignment.hasOwnProperty(value) && HTMLArea._hasClass(el, blockElements.useClass[this.convertAlignment[value]])) {
+					selected = value;
+					break;
 				}
-				if (val != 'none') HTMLArea._addClass(element,val);
-				break;
 			}
+		} else {
+			selected = el ? el.style.verticalAlign : "";
 		}
-		if (convertCellType) {
-			var newCell = dialog.editor._doc.createElement(newCellType), p = element.parentNode, a, attrName, name;
-			var attrs = element.attributes;
-			for (var i = attrs.length; --i >= 0 ;) {
-				a = attrs.item(i);
-				attrName = a.nodeName;
-				name = attrName.toLowerCase();
-					// IE5.5 reports wrong values. For this reason we extract the values directly from the root node.
-				if (typeof(element[attrName]) != "undefined" && name != "style" && !/^on/.test(name)) {
-					if (element[attrName]) newCell.setAttribute(attrName, element[attrName]);
-				} else {
-					if (a.nodeValue) newCell.setAttribute(attrName, a.nodeValue);
+		(selected.match(/([^\s]*)\s/)) && (selected = RegExp.$1);
+		var ul = doc.createElement("ul");
+		fieldset.appendChild(ul);
+		var li = doc.createElement("li");
+		ul.appendChild(li);
+		select = TableOperations.buildSelectField(doc, li, "f_st_textAlign", "Text alignment:", "fr", "", "Horizontal alignment of text within cell", options, values, new RegExp((selected ? selected : "not set"), "i"));
+		
+		var li = doc.createElement("li");
+		ul.appendChild(li);
+		selected = el ? el.style.verticalAlign : "";
+		(selected.match(/([^\s]*)\s/)) && (selected = RegExp.$1);
+		select = TableOperations.buildSelectField(doc, li, "f_st_vertAlign", "Vertical alignment:", "fr", "", "Vertical alignment of content within cell", ["Not set", "Top", "Middle", "Bottom", "Baseline"], ["not set", "top", "middle", "bottom", "baseline"], new RegExp((selected ? selected : "not set"), "i"));
+		content.appendChild(fieldset);
+	},
+	
+	buildBordersFieldset : function (w, doc, editor, el, content, fieldsetClass) {
+		var nodeName = el ? el.nodeName.toLowerCase() : "table";
+		var select;
+		var selected;
+		var borderFields = [];
+		function setBorderFieldsVisibility(value) {
+			for (var i = 0; i < borderFields.length; ++i) {
+				var borderFieldElement = borderFields[i];
+				borderFieldElement.style.visibility = value ? "hidden" : "visible";
+				if (!value && (borderFieldElement.nodeName.toLowerCase() == "input")) {
+					borderFieldElement.focus();
+					borderFieldElement.select();
 				}
 			}
-				// In IE, the above fails to update the classname and style attributes.
-			if (HTMLArea.is_ie) {
-				if (element.style.cssText) newCell.style.cssText = element.style.cssText;
-				if (element.className) {
-					newCell.setAttribute("className", element.className);
-				} else { 
-					newCell.className = element.className;
-					newCell.removeAttribute("className");
+		};
+		var fieldset = doc.createElement("fieldset");
+		fieldset.className = fieldsetClass;
+		TableOperations.insertLegend(doc, fieldset, "Frame and borders");
+		TableOperations.insertSpace(doc, fieldset);
+			// Gecko reports "solid solid solid solid" for "border-style: solid".
+			// That is, "top right bottom left" -- we only consider the first value.
+		var f_st_borderWidth = el ? TableOperations.getLength(el.style.borderWidth) : ((this.properties && this.properties.borderWidth && this.properties.borderWidth.defaultValue) ? this.properties.borderWidth.defaultValue : "");
+		selected = el ? el.style.borderStyle : ((this.properties && this.properties.borderWidth) ? ((this.properties.borderStyle && this.properties.borderStyle.defaultValue) ? this.properties.borderStyle.defaultValue : "solid") : "");
+		(selected.match(/([^\s]*)\s/)) && (selected = RegExp.$1);
+		selectBorderStyle = TableOperations.buildSelectField(doc, fieldset, "f_st_borderStyle", "Border style:", "fr", "floating", "Border style", ["Not set", "No border", "Dotted", "Dashed", "Solid", "Double", "Groove", "Ridge", "Inset", "Outset"], ["not set", "none", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"], new RegExp((selected ? selected : "not set"), "i"));
+		selectBorderStyle.onchange = function() { setBorderFieldsVisibility(this.value == "none"); };
+		this.removeOptions(selectBorderStyle, "f_st_borderStyle");
+		TableOperations.buildInput(doc, fieldset, "f_st_borderWidth", "Border width:", "Border width", "pixels", "5", f_st_borderWidth, "fr", "floating", "postlabel", borderFields);
+		TableOperations.insertSpace(doc, fieldset, borderFields);
+		
+		if (nodeName == "table") {
+			TableOperations.buildColorField(w, doc, editor, fieldset, "", "Color:", "fr", "colorButton", (el ? el.style.borderColor : ""), "borderColor", borderFields);
+			var label = doc.createElement("label");
+			label.className = "fl-borderCollapse";
+			label.htmlFor = "f_st_borderCollapse";
+			label.innerHTML = "Collapsed borders";
+			fieldset.appendChild(label);
+			borderFields.push(label);
+			var input = doc.createElement("input");
+			input.className = "checkbox";
+			input.type = "checkbox";
+			input.name = "f_st_borderCollapse";
+			input.id = "f_st_borderCollapse";
+			input.defaultChecked = el ? /collapse/i.test(el.style.borderCollapse) : false;
+			input.checked = input.defaultChecked;
+			fieldset.appendChild(input);
+			borderFields.push(input);
+			TableOperations.insertSpace(doc, fieldset, borderFields);
+			select = TableOperations.buildSelectField(doc, fieldset, "f_frames", "Frames:", "fr", "floating", "Specifies which sides should have a border", ["Not set", "No sides", "The top side only", "The bottom side only", "The top and bottom sides only", "The right and left sides only", "The left-hand side only", "The right-hand side only", "All four sides"], ["not set", "void", "above", "below", "hsides", "vsides", "lhs", "rhs", "box"], new RegExp(((el && el.frame) ? el.frame : "not set"), "i"), borderFields);
+			TableOperations.insertSpace(doc, fieldset, borderFields);
+			select = TableOperations.buildSelectField(doc, fieldset, "f_rules", "Rules:", "fr", "floating", "Specifies where rules should be displayed", ["Not set", "No rules", "Rules will appear between rows only", "Rules will appear between columns only", "Rules will appear between all rows and columns"], ["not set", "none", "rows", "cols", "all"], new RegExp(((el && el.rules) ? el.rules : "not set"), "i"), borderFields);
+		} else {
+			TableOperations.insertSpace(doc, fieldset, borderFields);
+			TableOperations.buildColorField(w, doc, editor, fieldset, "", "Color:", "fr", "colorButton", (el ? el.style.borderColor : ""), "borderColor", borderFields);
+		}
+		setBorderFieldsVisibility(selectBorderStyle.value == "none");
+		TableOperations.insertSpace(doc, fieldset);
+		content.appendChild(fieldset);
+	},
+	
+	removeOptions : function(select, property) {
+		if (this.properties && this.properties[property] && this.properties[property].removeItems) {
+			for (var i = select.options.length; --i >= 0;) {
+				if (this.properties[property].removeItems.indexOf(select.options[i].value) != -1) {
+					if (select.options[i].value != select.value) {
+						select.options[i] = null;
+					}
 				}
 			}
-			while (element.firstChild) newCell.appendChild(element.firstChild);
-			p.insertBefore(newCell, element);
-			p.removeChild(element);
-			dialog.editor.selectNodeContents(newCell, false);
 		}
-		dialog.editor.updateToolbar();
-	});
-};
+	}
+});
 
 TableOperations.getLength = function(value) {
 	var len = parseInt(value);
@@ -918,88 +1542,6 @@
 	return len;
 };
 
-// Applies the style found in "params" to the given element.
-TableOperations.processStyle = function(params,element) {
-	var style = element.style;
-	for (var i in params) {
-		var val = params[i];
-		switch (i) {
-		    case "f_st_backgroundColor":
-			style.backgroundColor = val;
-			break;
-		    case "f_st_color":
-			style.color = val;
-			break;
-		    case "f_st_backgroundImage":
-			if (/\S/.test(val)) {
-				style.backgroundImage = "url(" + val + ")";
-			} else {
-				style.backgroundImage = "";
-			}
-			break;
-		    case "f_st_borderWidth":
-		    	if (/\S/.test(val)) {
-				style.borderWidth = val + "px";
-			} else {
-				style.borderWidth = "";
-			}
-			if (params["f_st_borderStyle"] == "none") style.borderWidth = "0px";
-			if (params["f_st_borderStyle"] == "not set") style.borderWidth = "";
-			break;
-		    case "f_st_borderStyle":
-			style.borderStyle = (val != "not set") ? val : "";
-			break;
-		    case "f_st_borderColor":
-			style.borderColor = val;
-			break;
-		    case "f_st_borderCollapse":
-			style.borderCollapse = val ? "collapse" : "";
-			break;
-		    case "f_st_width":
-			if (/\S/.test(val)) {
-				style.width = val + params["f_st_widthUnit"];
-			} else {
-				style.width = "";
-			}
-			break;
-		    case "f_st_height":
-			if (/\S/.test(val)) {
-				style.height = val + params["f_st_heightUnit"];
-			} else {
-				style.height = "";
-			}
-			break;
-		    case "f_st_textAlign":
-			if (val == "character") {
-				var ch = params["f_st_textAlignChar"];
-				if (ch == '"') {
-					ch = '\\"';
-				}
-				style.textAlign = '"' + ch + '"';
-			} else {
-				style.textAlign = (val != "not set") ? val : "";
-			}
-			break;
-		    case "f_st_vertAlign":
-			style.verticalAlign = (val != "not set") ? val : "";
-			break;
-		    case "f_st_float":
-			if (HTMLArea.is_ie) { 
-				style.styleFloat = (val != "not set") ? val : "";
-			} else { 
-				style.cssFloat = (val != "not set") ? val : "";
-			}
-			break;
-// 		    case "f_st_margin":
-// 			style.margin = val + "px";
-// 			break;
-// 		    case "f_st_padding":
-// 			style.padding = val + "px";
-// 			break;
-		}
-	}
-};
-
 // Returns an HTML element for a widget that allows color selection.  That is,
 // a button that contains the given color, if any, and when pressed will popup
 // the sooner-or-later-to-be-rewritten select_color.html dialog allowing user
@@ -1025,27 +1567,33 @@
 	var span = doc.createElement("span");
 	span.className = "chooser";
 	span.style.backgroundColor = color;
+	var space = doc.createTextNode("\xA0");
+	span.appendChild(space);
 	button.appendChild(span);
 	button.onmouseover = function() { if (!this.disabled) this.className += " buttonColor-hilite"; };
 	button.onmouseout = function() { if (!this.disabled) this.className = "buttonColor"; };
 	span.onclick = function() {
 		if (this.parentNode.disabled) return false;
-		var typo3ColorPlugin = editor.plugins.TYPO3Color;
-		if (typo3ColorPlugin) {
-			typo3ColorPlugin.instance.dialogSelectColor("color", span, field, w);
-		} else { 
-			editor._popupDialog("select_color.html", function(color) {
-				if (color) {
-					span.style.backgroundColor = "#" + color;
-					field.value = "#" + color;
-				}
-			}, color, 200, 182, w);
+		var colorPlugin = editor.plugins.TYPO3Color;
+		if (colorPlugin) {
+			colorPlugin.instance.dialogSelectColor("color", span, field, w);
+		} else {
+			colorPlugin = editor.plugins.DefaultColor;
+			if (colorPlugin) {
+				w.insertColor = function (color) {
+					if (color) {
+						span.style.backgroundColor = color;
+						field.value = color;
+					}
+				};
+				colorPlugin.instance.onButtonPress(editor, "TableOperations");
+			}
 		}
 	};
 	var span2 = doc.createElement("span");
 	span2.innerHTML = "&#x00d7;";
 	span2.className = "nocolor";
-	span2.title = TableOperations.I18N["Unset color"];
+	span2.title = "Unset color";
 	button.appendChild(span2);
 	span2.onmouseover = function() { if (!this.parentNode.disabled) this.className += " nocolor-hilite"; };
 	span2.onmouseout = function() { if (!this.parentNode.disabled) this.className = "nocolor"; };
@@ -1055,365 +1603,179 @@
 	};
 	return df;
 };
-TableOperations.buildTitle = function(doc,i18n,content,title) {
+TableOperations.buildTitle = function(doc, content, title) {
 	var div = doc.createElement("div");
 	div.className = "title";
-	div.innerHTML = i18n[title];
+	div.innerHTML = title;
 	content.appendChild(div);
-	doc.title = i18n[title];
+	doc.title = title;
 };
-TableOperations.buildDescriptionFieldset = function(doc,el,i18n,content) {
+TableOperations.buildDescriptionFieldset = function(doc, el, content, fieldsetClass) {
 	var fieldset = doc.createElement("fieldset");
-	TableOperations.insertLegend(doc, i18n, fieldset, "Description");
+	if (fieldsetClass) fieldset.className = fieldsetClass;
+	TableOperations.insertLegend(doc, fieldset, "Description");
 	TableOperations.insertSpace(doc, fieldset);
 	var f_caption = "";
-	var capel = el.getElementsByTagName("caption")[0];
-	if (capel) f_caption = capel.innerHTML;
-	TableOperations.buildInput(doc, el, i18n, fieldset, "f_caption", "Caption:", "Description of the nature of the table", "", "", f_caption, "fr", "value", "");
+	if (el) {
+		var capel = el.getElementsByTagName("caption")[0];
+		if (capel) f_caption = capel.innerHTML;
+	}
+	TableOperations.buildInput(doc, fieldset, "f_caption", "Caption:", "Description of the nature of the table", "", "", f_caption, "fr", "value", "");
 	TableOperations.insertSpace(doc, fieldset);
-	TableOperations.buildInput(doc, el, i18n, fieldset, "f_summary", "Summary:", "Summary of the table purpose and structure", "", "", el.summary, "fr", "value", "");
+	TableOperations.buildInput(doc, fieldset, "f_summary", "Summary:", "Summary of the table purpose and structure", "", "", (el ? el.summary : ""), "fr", "value", "");
 	TableOperations.insertSpace(doc, fieldset);
 	content.appendChild(fieldset);
 };
-TableOperations.buildRowGroupFieldset = function(w,doc,editor,el,i18n,content) {
+TableOperations.buildRowGroupFieldset = function(w, doc, editor, el, content, fieldsetClass) {
 	var fieldset = doc.createElement("fieldset");
-	TableOperations.insertLegend(doc, i18n, fieldset, "Row group");
+	if (fieldsetClass) fieldset.className = fieldsetClass;
+	TableOperations.insertLegend(doc, fieldset, "Row group");
 	TableOperations.insertSpace(doc, fieldset);
-	selected = el.parentNode.tagName.toLowerCase();
-	var selectScope = TableOperations.buildSelectField(doc, el, i18n, fieldset, "f_rowgroup", "Row group:", "fr", "", "Table section", ["Table body", "Table header", "Table footer"], ["tbody", "thead", "tfoot"], new RegExp((selected ? selected : "tbody"), "i"));
 	TableOperations.insertSpace(doc, fieldset);
+	selected = el.parentNode.nodeName.toLowerCase();
+	var selectScope = TableOperations.buildSelectField(doc, fieldset, "f_rowgroup", "Row group:", "fr", "floating", "Table section", ["Table body", "Table header", "Table footer"], ["tbody", "thead", "tfoot"], new RegExp((selected ? selected : "tbody"), "i"));
+	function displayCheckbox(current, value) {
+		if (current !== "thead" && value === "thead") {
+			label1.style.display = "inline";
+			label2.style.display = "none";
+			input.style.display = "inline";
+			input.checked = true;
+		} else if (current === "thead" && value !== "thead") {
+			label1.style.display = "none";
+			label2.style.display = "inline";
+			input.style.display = "inline";
+			input.checked = true;
+		} else {
+			label1.style.display = "none";
+			label2.style.display = "none";
+			input.style.display = "none";
+			input.checked = false;
+		}
+	}
+	selectScope.onchange = function() { displayCheckbox(selected, this.value); };
+	var label1 = doc.createElement("label");
+	label1.className = "fl";
+	label1.htmlFor = "f_convertCells";
+	label1.innerHTML = "Make cells header cells";
+	label1.style.display = "none";
+	fieldset.appendChild(label1);
+	var label2 = doc.createElement("label");
+	label2.className = "fl";
+	label2.htmlFor = "f_convertCells";
+	label2.innerHTML = "Make cells data cells";
+	label2.style.display = "none";
+	fieldset.appendChild(label2);
+	var input = doc.createElement("input");
+	input.className = "checkbox";
+	input.type = "checkbox";
+	input.name = "f_convertCells";
+	input.id = "f_convertCells";
+	input.checked = false;
+	input.style.display = "none";
+	fieldset.appendChild(input);
+	TableOperations.insertSpace(doc, fieldset);
 	content.appendChild(fieldset);
 };
-TableOperations.buildCellTypeFieldset = function(w,doc,editor,el,i18n,content) {
+TableOperations.buildCellTypeFieldset = function(doc, editor, el, content, column, fieldsetClass) {
 	var fieldset = doc.createElement("fieldset");
-	TableOperations.insertLegend(doc, i18n, fieldset, "Cell Type and Scope");
+	if (fieldsetClass) fieldset.className = fieldsetClass;
+	TableOperations.insertLegend(doc, fieldset, column ? "Type of cells" : "Cell Type and Scope");
 	TableOperations.insertSpace(doc, fieldset);
 	var ul = doc.createElement("ul");
 	fieldset.appendChild(ul);
 	var li = doc.createElement("li");
 	ul.appendChild(li);
-	var selectType = TableOperations.buildSelectField(doc, el, i18n, li, "f_cell_type", "Type of cell", "fr", "", "Specifies the type of cell", ["Normal", "Header"], ["td", "th"], new RegExp(el.tagName.toLowerCase(), "i"));
-	selectType.onchange = function() { TableOperations.setStyleOptions(doc, editor, el, i18n, this); };
-	var li = doc.createElement("li");
-	ul.appendChild(li);
-	selected = el.scope.toLowerCase();
-	(selected.match(/([^\s]*)\s/)) && (selected = RegExp.$1);
-	var selectScope = TableOperations.buildSelectField(doc, el, i18n, li, "f_scope", "Scope", "fr", "", "Scope of header cell", ["Not set", "scope_row", "scope_column", "scope_rowgroup"], ["not set", "row", "col", "rowgroup"], new RegExp((selected ? selected : "not set"), "i"));
+	if (column) {
+		var selectType = TableOperations.buildSelectField(doc, li, "f_cell_type", "Type of cells of the column", "fl", "", "Specifies the type of cells", ["Data cells", "Headers for rows", "Headers for row groups"], ["td", "throw", "throwgroup"], new RegExp(el.nodeName.toLowerCase()+el.scope.toLowerCase()+"$", "i"));
+	} else {
+		var selectType = TableOperations.buildSelectField(doc, li, "f_cell_type", "Type of cell", "fr", "", "Specifies the type of cell", ["Normal", "Header for column", "Header for row", "Header for row group"], ["td", "thcol", "throw", "throwgroup"], new RegExp(el.nodeName.toLowerCase()+el.scope.toLowerCase()+"$", "i"));
+	}
+	selectType.onchange = function() { TableOperations.setStyleOptions(doc, doc.getElementById("f_class"), editor, el, this.value.substring(0,2)); };
 	TableOperations.insertSpace(doc, fieldset);
 	content.appendChild(fieldset);
 };
-TableOperations.getCssLabelsClasses = function(cssArray,i18n,tagName,selectedIn) {
-	var cssLabels = new Array();
-	var cssClasses = new Array();
-	cssLabels[0] = i18n["Default"];
-	cssClasses[0] = "none";
-	var selected = selectedIn;
-	var cls = selected.split(" ");
-	var nonReservedClassName = false;
-	for (var ia = cls.length; ia > 0;) {
-		if(!HTMLArea.reservedClassNames.test(cls[--ia])) {
-			selected = cls[ia];
-			nonReservedClassName = true;
-			break;
-		}
+TableOperations.setStyleOptions = function(doc, dropDown, editor, el, nodeName) {
+	if (!dropDown) return false;
+	if (editor.config.customSelects.BlockStyle) {
+		var blockStyle = editor.plugins.BlockStyle.instance;
+		if (!blockStyle || !blockStyle.cssLoaded) return false;
+		var classNames = blockStyle.getClassNames(el);
+		blockStyle.buildDropDownOptions(dropDown, nodeName);
+		blockStyle.setSelectedOption(dropDown, classNames, "noUnknown");
 	}
-	var found = false, i = 1, cssClass;
-	if(cssArray[tagName]) {
-		for(cssClass in cssArray[tagName]){
-			if(cssClass != "none") {
-				cssLabels[i] = cssArray[tagName][cssClass];
-				cssClasses[i] = cssClass;
-				if(cssClass == selected) found = true;
-				i++;
-			} else {
-				cssLabels[0] = cssArray[tagName][cssClass];
-			}
-		}
-	}
-	if(cssArray['all']){
-		for(cssClass in cssArray['all']){
-			cssLabels[i] = cssArray['all'][cssClass];
-			cssClasses[i] = cssClass;
-			if(cssClass == selected) found = true;
-			i++;
-		}
-	}
-	if(selected && nonReservedClassName && !found) {
-		cssLabels[i] = i18n["Undefined"];
-		cssClasses[i] = selected;
-	}
-	return [cssLabels, cssClasses, selected];
 };
-TableOperations.setStyleOptions = function(doc,editor,el,i18n,typeSelect) {
-	var tagName = typeSelect.value;
-	var select = doc.getElementById("f_class");
-	if (!select) return false;
-	var obj = dialog.editor.config.customSelects.BlockStyle ? dialog.editor.plugins.BlockStyle.instance : dialog.editor.config.customSelects["DynamicCSS-class"];
-	if (obj && (obj.loaded || obj.cssLoaded)) var cssArray = obj.cssArray;
-		else return false;
-	var cssLabelsClasses = TableOperations.getCssLabelsClasses(cssArray,i18n,tagName,el.className);
-	var options = cssLabelsClasses[0];
-	var values = cssLabelsClasses[1];
-	var selected = cssLabelsClasses[2];
-	var selectedReg = new RegExp((selected ? selected : "none"), "i");
-	while(select.options.length>0) select.options[select.length-1] = null;
-	select.selectedIndex = 0;
-	var option;
-	for (var i = 0; i < options.length; ++i) {
-		option = doc.createElement("option");
-		select.appendChild(option);
-		option.value = values[i];
-		option.appendChild(doc.createTextNode(options[i]));
-		option.selected = selectedReg.test(values[i]);
-	}
-	if(select.options.length>1) select.disabled = false;
-		else select.disabled = true;
-};
-TableOperations.buildStylingFieldset = function(doc,el,i18n,content,cssArray) {
-	var tagName = el.tagName.toLowerCase();
-	var table = (tagName == "table");
-	var cssLabelsClasses = TableOperations.getCssLabelsClasses(cssArray,i18n,tagName,el.className);
-	var cssLabels = cssLabelsClasses[0];
-	var cssClasses = cssLabelsClasses[1];
-	var selected = cssLabelsClasses[2];
+TableOperations.buildStylingFieldset = function(doc, editor, el, content, fieldsetClass) {
+	var nodeName = el ? el.nodeName.toLowerCase() : "table";
+	var table = (nodeName == "table");
 	var fieldset = doc.createElement("fieldset");
-	TableOperations.insertLegend(doc, i18n, fieldset, "CSS Style");
+	if (fieldsetClass) fieldset.className = fieldsetClass;
+	TableOperations.insertLegend(doc, fieldset, "CSS Style");
 	TableOperations.insertSpace(doc, fieldset);
 	var ul = doc.createElement("ul");
 	ul.className = "floating";
 	fieldset.appendChild(ul);
 	var li = doc.createElement("li");
 	ul.appendChild(li);
-	TableOperations.buildSelectField(doc, el, i18n, li, "f_class", (table ? "Table class:" : "Class:"), "fr", "", (table ? "Table class selector" : "Class selector"), cssLabels, cssClasses, new RegExp((selected ? selected : "none"), "i"), "", false);
-	if (table) {
+	var select = TableOperations.buildSelectField(doc, li, "f_class", (table ? "Table class:" : "Class:"), "fr", "", (table ? "Table class selector" : "Class selector"), new Array("undefined"), new Array("none"), new RegExp("none", "i"), "", false);
+	TableOperations.setStyleOptions(doc, select, editor, el, nodeName);
+	if (el && table) {
 		var tbody = el.getElementsByTagName("tbody")[0];
 		if (tbody) {
 			var li = doc.createElement("li");
 			ul.appendChild(li);
-			cssLabelsClasses = TableOperations.getCssLabelsClasses(cssArray, i18n, "tbody", tbody.className);
-			cssLabels = cssLabelsClasses[0];
-			cssClasses = cssLabelsClasses[1];
-			selected = cssLabelsClasses[2];
-			TableOperations.buildSelectField(doc, el, i18n, li, "f_class_tbody", "Table body class:", "fr", "", "Table body class selector", cssLabels, cssClasses, new RegExp((selected ? selected : "none"), "i"), "", false);
+			var select = TableOperations.buildSelectField(doc, li, "f_class_tbody", "Table body class:", "fr", "", "Table body class selector", new Array("undefined"), new Array("none"), new RegExp("none", "i"), "", false);
+			TableOperations.setStyleOptions(doc, select, editor, tbody, "tbody");
 		}
-		ul = null;
 		var thead = el.getElementsByTagName("thead")[0];
 		if (thead) {
-			var ul = doc.createElement("ul");
-			fieldset.appendChild(ul);
 			var li = doc.createElement("li");
 			ul.appendChild(li);
-			cssLabelsClasses = TableOperations.getCssLabelsClasses(cssArray, i18n, "thead", thead.className);
-			cssLabels = cssLabelsClasses[0];
-			cssClasses = cssLabelsClasses[1];
-			selected = cssLabelsClasses[2];
-			TableOperations.buildSelectField(doc, el, i18n, li, "f_class_thead", "Table header class:", "fr", "", "Table header class selector", cssLabels, cssClasses, new RegExp((selected ? selected : "none"), "i"), "", false);
+			var select = TableOperations.buildSelectField(doc, li, "f_class_thead", "Table header class:", "fr", "", "Table header class selector", new Array("undefined"), new Array("none"), new RegExp("none", "i"), "", false);
+			TableOperations.setStyleOptions(doc, select, editor, thead, "thead");
 		}
 		var tfoot = el.getElementsByTagName("tfoot")[0];
 		if (tfoot) {
-			if (!ul) {
-				var ul = doc.createElement("ul");
-				fieldset.appendChild(ul);
-			}
 			var li = doc.createElement("li");
 			ul.appendChild(li);
-			cssLabelsClasses = TableOperations.getCssLabelsClasses(cssArray, i18n, "tfoot", tfoot.className);
-			cssLabels = cssLabelsClasses[0];
-			cssClasses = cssLabelsClasses[1];
-			selected = cssLabelsClasses[2];
-			TableOperations.buildSelectField(doc, el, i18n, li, "f_class_tfoot", "Table footer class:", "fr", "", "Table footer class selector", cssLabels, cssClasses, new RegExp((selected ? selected : "none"), "i"), "", false);
+			var select = TableOperations.buildSelectField(doc, li, "f_class_tfoot", "Table footer class:", "fr", "", "Table footer class selector", new Array("undefined"), new Array("none"), new RegExp("none", "i"), "", false);
+			TableOperations.setStyleOptions(doc, select, editor, tfoot, "tfoot");
 		}
 	}
 	TableOperations.insertSpace(doc, fieldset);
 	content.appendChild(fieldset);
 };
-TableOperations.buildLayoutFieldset = function(doc,el,i18n,content,fieldsetClass) {
-	var select, selected;
+TableOperations.buildSpacingFieldset = function(doc, el, content) {
 	var fieldset = doc.createElement("fieldset");
-	if(fieldsetClass) fieldset.className = fieldsetClass;
-	TableOperations.insertLegend(doc, i18n, fieldset, "Layout");
-	var f_st_width = TableOperations.getLength(el.style.width);
-	var f_st_height = TableOperations.getLength(el.style.height);
-	var selectedWidthUnit = /%/.test(el.style.width) ? '%' : (/px/.test(el.style.width) ? 'px' : 'em');	
-	var selectedHeightUnit = /%/.test(el.style.height) ? '%' : (/px/.test(el.style.height) ? 'px' : 'em');
-	var tag = el.tagName.toLowerCase();
+	TableOperations.insertLegend(doc, fieldset, "Spacing and padding");
 	var ul = doc.createElement("ul");
 	fieldset.appendChild(ul);
-	switch(tag) {
-		case "table" :
-			var li = doc.createElement("li");
-			ul.appendChild(li);
-			TableOperations.buildInput(doc, el, i18n, li, "f_st_width", "Width:", "Table width", "", "5", f_st_width, "fr");
-			select = TableOperations.buildSelectField(doc, el, i18n, li, "f_st_widthUnit", "", "", "", "Width unit", ["percent", "pixels", "em"], ["%", "px", "em"], new RegExp((f_st_width ? selectedWidthUnit : "%"), "i"));
-			var li = doc.createElement("li");
-			ul.appendChild(li);
-			TableOperations.buildInput(doc, el, i18n, li, "f_st_height", "Height:", "Table height", "", "5", f_st_height, "fr");
-			select = TableOperations.buildSelectField(doc, el, i18n, li, "f_st_heightUnit", "", "", "", "Height unit", ["percent", "pixels", "em"], ["%", "px", "em"], new RegExp((f_st_height ? selectedHeightUnit : "%"), "i"));
-			selected = (HTMLArea._is_ie) ? el.style.styleFloat : el.style.cssFloat;
-			select = TableOperations.buildSelectField(doc, el, i18n, li, "f_st_float", "Float:", "", "", "Specifies where the table should float", ["Not set", "Non-floating", "Left", "Right"], ["not set", "none", "left", "right"], new RegExp((selected ? selected : "not set"), "i"));
-			break;
-		case "tr" :
-			var li = doc.createElement("li");
-			ul.appendChild(li);
-			TableOperations.buildInput(doc, el, i18n, li, "f_st_width", "Width:", "Row width", "", "5", f_st_width, "fr");
-			select = TableOperations.buildSelectField(doc, el, i18n, li, "f_st_widthUnit", "", "", "", "Width unit", ["percent", "pixels", "em"], ["%", "px", "em"], new RegExp((f_st_width ? selectedWidthUnit : "%"), "i"));
-			var li = doc.createElement("li");
-			ul.appendChild(li);
-			TableOperations.buildInput(doc, el, i18n, li, "f_st_height", "Height:", "Row height", "", "5", f_st_height, "fr");
-			select = TableOperations.buildSelectField(doc, el, i18n, li, "f_st_heightUnit", "", "", "", "Height unit", ["percent", "pixels", "em"], ["%", "px", "em"], new RegExp((f_st_height ? selectedHeightUnit : "%"), "i"));
-			break;
-		case "td" :
-		case "th" :
-			var li = doc.createElement("li");
-			ul.appendChild(li);
-			TableOperations.buildInput(doc, el, i18n, li, "f_st_width", "Width:", "Cell width", "", "5", f_st_width, "fr");
-			select = TableOperations.buildSelectField(doc, el, i18n, li, "f_st_widthUnit", "", "", "", "Width unit", ["percent", "pixels", "em"], ["%", "px", "em"], new RegExp((f_st_width ? selectedWidthUnit : "%"), "i"));
-			var li = doc.createElement("li");
-			ul.appendChild(li);
-			TableOperations.buildInput(doc, el, i18n, li, "f_st_height", "Height:", "Cell height", "", "5", f_st_height, "fr");
-			select = TableOperations.buildSelectField(doc, el, i18n, li, "f_st_heightUnit", "", "", "", "Height unit", ["percent", "pixels", "em"], ["%", "px", "em"], new RegExp((f_st_height ? selectedHeightUnit : "%"), "i"));		
-	}
-	content.appendChild(fieldset);
-};
-TableOperations.buildAlignmentFieldset = function(doc,el,i18n,content,fieldsetClass) {
-	var select;
-	var tag = el.tagName.toLowerCase();
-	var fieldset = doc.createElement("fieldset");
-	if(fieldsetClass) fieldset.className = fieldsetClass;
-	TableOperations.insertLegend(doc, i18n, fieldset, "Alignment");
-	var options = ["Not set", "Left", "Center", "Right", "Justify"];
-	var values = ["not set", "left", "center", "right", "justify"];
-	var selected = el.style.textAlign;
-	(selected.match(/([^\s]*)\s/)) && (selected = RegExp.$1);
-/*
-	if (tag == "td") {
-		options.push("Character");
-		values.push("character");
-		if(f_st_textAlign.charAt(0) == '"') {
-			var splitArray = f_st_textAlign.split('"');
-			var f_st_textAlignChar = splitArray[0];
-			f_st_textAlign = "character";
-		}
-	}
-*/
-	var ul = doc.createElement("ul");
-	fieldset.appendChild(ul);
 	var li = doc.createElement("li");
 	ul.appendChild(li);
-	select = TableOperations.buildSelectField(doc, el, i18n, li, "f_st_textAlign", "Text alignment:", "fl", "", "Horizontal alignment of text within cell", options, values, new RegExp((selected ? selected : "not set"), "i"));
-/*
-	if (tag == "td") {
-		var characterFields = [];
-		TableOperations.buildInput(doc, el, i18n, fieldset, "f_st_textAlignChar", "", "Align on this character", "", "1", f_st_textAlignChar, "", "floating", "", characterFields);
-		function setCharVisibility(value) {
-			for (var i = 0; i < characterFields.length; ++i) {
-				var characterFieldElement = characterFields[i];
-				characterFieldElement.style.visibility = value ? "visible" : "hidden";
-				if (value && (characterFieldElement.tagName.toLowerCase() == "input" )) {
-					characterFieldElement.focus();
-					characterFieldElement.select();
-				}
-			}
-		};
-		select.onchange = function() { setCharVisibility(this.value == "character"); };
-		setCharVisibility(select.value == "character");
-	}
-*/
+	TableOperations.buildInput(doc, li, "f_spacing", "Cell spacing:", "Space between adjacent cells", "pixels", "5", (el ? el.cellSpacing : ""), "fr", "", "postlabel");
 	var li = doc.createElement("li");
 	ul.appendChild(li);
-	selected = el.style.verticalAlign;
-	(selected.match(/([^\s]*)\s/)) && (selected = RegExp.$1);
-	select = TableOperations.buildSelectField(doc, el, i18n, li, "f_st_vertAlign", "Vertical alignment:", "fl", "", "Vertical alignment of content within cell", ["Not set", "Top", "Middle", "Bottom", "Baseline"], ["not set", "top", "middle", "bottom", "baseline"], new RegExp((selected ? selected : "not set"), "i"));
+	TableOperations.buildInput(doc, li, "f_padding", "Cell padding:", "Space between content and border in cell", "pixels", "5", (el ? el.cellPadding : ""), "fr", "", "postlabel");
 	content.appendChild(fieldset);
 };
-TableOperations.buildSpacingFieldset = function(doc,el,i18n,content) {
+TableOperations.buildColorsFieldset = function(w, doc, editor, el, content) {
 	var fieldset = doc.createElement("fieldset");
-	TableOperations.insertLegend(doc, i18n, fieldset, "Spacing and padding");
+	TableOperations.insertLegend(doc, fieldset, "Background and colors");
 	var ul = doc.createElement("ul");
 	fieldset.appendChild(ul);
 	var li = doc.createElement("li");
 	ul.appendChild(li);
-	TableOperations.buildInput(doc, el, i18n, li, "f_spacing", "Cell spacing:", "Space between adjacent cells", "pixels", "5", el.cellSpacing, "fr", "", "postlabel");
+	TableOperations.buildColorField(w, doc, editor, li, "", "FG Color:", "fr", "colorButtonNoFloat", (el ? el.style.color : ""), "color");
 	var li = doc.createElement("li");
 	ul.appendChild(li);
-	TableOperations.buildInput(doc, el, i18n, li, "f_padding", "Cell padding:", "Space between content and border in cell", "pixels", "5", el.cellPadding, "fr", "", "postlabel");
-	content.appendChild(fieldset);
-};
-TableOperations.buildBordersFieldset = function(w,doc,editor,el,i18n,content,fieldsetClass) {
-	var select;
-	var selected;
-	var borderFields = [];
-	function setBorderFieldsVisibility(value) {
-		for (var i = 0; i < borderFields.length; ++i) {
-			var borderFieldElement = borderFields[i];
-			borderFieldElement.style.visibility = value ? "hidden" : "visible";
-			if (!value && (borderFieldElement.tagName.toLowerCase() == "input")) {
-				borderFieldElement.focus();
-				borderFieldElement.select();
-			}
-		}
-	};
-	var fieldset = doc.createElement("fieldset");
-	fieldset.className = fieldsetClass;
-	TableOperations.insertLegend(doc, i18n, fieldset, "Frame and borders");
-	TableOperations.insertSpace(doc, fieldset);
-		// Gecko reports "solid solid solid solid" for "border-style: solid".
-		// That is, "top right bottom left" -- we only consider the first value.
-	selected = el.style.borderStyle;
-	(selected.match(/([^\s]*)\s/)) && (selected = RegExp.$1);
-	selectBorderStyle = TableOperations.buildSelectField(doc, el, i18n, fieldset, "f_st_borderStyle", "Border style:", "fr", "floating", "Border style", ["Not set", "No border", "Dotted", "Dashed", "Solid", "Double", "Groove", "Ridge", "Inset", "Outset"], ["not set", "none", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"], new RegExp((selected ? selected : "not set"), "i"));
-	selectBorderStyle.onchange = function() { setBorderFieldsVisibility(this.value == "none"); };
-	TableOperations.buildInput(doc, el, i18n, fieldset, "f_st_borderWidth", "Border width:", "Border width", "pixels", "5", TableOperations.getLength(el.style.borderWidth), "fr", "floating", "postlabel", borderFields);
-	TableOperations.insertSpace(doc, fieldset, borderFields);
-
-	if (el.tagName.toLowerCase() == "table") {
-		TableOperations.buildColorField(w, doc, editor, el, i18n, fieldset, "", "Color:", "fr", "colorButton", el.style.borderColor, "borderColor", borderFields);
-		var label = doc.createElement("label");
-		label.className = "fl-borderCollapse";
-		label.htmlFor = "f_st_borderCollapse";
-		label.innerHTML = i18n["Collapsed borders"];
-		fieldset.appendChild(label);
-		borderFields.push(label);
-		var input = doc.createElement("input");
-		input.className = "checkbox";
-		input.type = "checkbox";
-		input.name = "f_st_borderCollapse";
-		input.id = "f_st_borderCollapse";
-		input.defaultChecked = /collapse/i.test(el.style.borderCollapse);
-		input.checked = input.defaultChecked;
-		fieldset.appendChild(input);
-		borderFields.push(input);
-		TableOperations.insertSpace(doc, fieldset, borderFields);
-		select = TableOperations.buildSelectField(doc, el, i18n, fieldset, "f_frames", "Frames:", "fr", "floating", "Specifies which sides should have a border", ["Not set", "No sides", "The top side only", "The bottom side only", "The top and bottom sides only", "The right and left sides only", "The left-hand side only", "The right-hand side only", "All four sides"], ["not set", "void", "above", "below", "hsides", "vsides", "lhs", "rhs", "box"], new RegExp((el.frame ? el.frame : "not set"), "i"), borderFields);
-		TableOperations.insertSpace(doc, fieldset, borderFields);
-		select = TableOperations.buildSelectField(doc, el, i18n, fieldset, "f_rules", "Rules:", "fr", "floating", "Specifies where rules should be displayed", ["Not set", "No rules", "Rules will appear between rows only", "Rules will appear between columns only", "Rules will appear between all rows and columns"], ["not set", "none", "rows", "cols", "all"], new RegExp((el.rules ? el.rules : "not set"), "i"), borderFields);
-	} else {
-		TableOperations.insertSpace(doc, fieldset, borderFields);
-		TableOperations.buildColorField(w, doc, editor, el, i18n, fieldset, "", "Color:", "fr", "colorButton", el.style.borderColor, "borderColor", borderFields);
-	}
-	setBorderFieldsVisibility(selectBorderStyle.value == "none");
-	TableOperations.insertSpace(doc, fieldset);
-	content.appendChild(fieldset);
-};
-TableOperations.buildColorsFieldset = function(w,doc,editor,el,i18n,content) {
-	var fieldset = doc.createElement("fieldset");
-	TableOperations.insertLegend(doc, i18n, fieldset, "Background and colors");
-	var ul = doc.createElement("ul");
-	fieldset.appendChild(ul);
-	var li = doc.createElement("li");
-	ul.appendChild(li);
-	TableOperations.buildColorField(w, doc, editor, el, i18n, li, "", "FG Color:", "fr", "colorButtonNoFloat", el.style.color, "color");
-	var li = doc.createElement("li");
-	ul.appendChild(li);
-	TableOperations.buildColorField(w, doc, editor, el, i18n, li, "", "Background:", "fr", "colorButtonNoFloat", el.style.backgroundColor, "backgroundColor");
+	TableOperations.buildColorField(w, doc, editor, li, "", "Background:", "fr", "colorButtonNoFloat", (el ? el.style.backgroundColor : ""), "backgroundColor");
 	var url;
-	if (el.style.backgroundImage.match(/url\(\s*(.*?)\s*\)/)) url = RegExp.$1;
-	TableOperations.buildInput(doc, el, i18n, li, "f_st_backgroundImage", "Image URL:", "URL of the background image", "", "", url, "", "shorter-value");
+	if (el && el.style.backgroundImage.match(/url\(\s*(.*?)\s*\)/)) url = RegExp.$1;
+	TableOperations.buildInput(doc, li, "f_st_backgroundImage", "Image URL:", "URL of the background image", "", "", url, "", "shorter-value");
 	content.appendChild(fieldset);
 };
-TableOperations.insertLegend = function(doc,i18n, fieldset,legend) {
+TableOperations.insertLegend = function(doc, fieldset, legend) {
 	var legendNode = doc.createElement("legend");
-	legendNode.innerHTML = i18n[legend];
+	legendNode.innerHTML = legend;
 	fieldset.appendChild(legendNode);
 };
 TableOperations.insertSpace =	function(doc,fieldset,fields) {
@@ -1422,13 +1784,13 @@
 	fieldset.appendChild(space);
 	if(fields) fields.push(space);
 };
-TableOperations.buildInput = function(doc,el,i18n,fieldset,fieldName,fieldLabel,fieldTitle,postLabel,fieldSize,fieldValue,labelClass,inputClass,postClass,fields) {
+TableOperations.buildInput = function(doc, fieldset,fieldName,fieldLabel,fieldTitle,postLabel,fieldSize,fieldValue,labelClass,inputClass,postClass,fields) {
 	var label;
 		// Field label
 	if(fieldLabel) {
 		label = doc.createElement("label");
 		if(labelClass) label.className = labelClass;
-		label.innerHTML = i18n[fieldLabel];
+		label.innerHTML = fieldLabel;
 		label.htmlFor = fieldName;
 		fieldset.appendChild(label);
 		if(fields) fields.push(label);
@@ -1439,7 +1801,7 @@
 	input.id = fieldName;
 	input.name =  fieldName;
 	if(inputClass) input.className = inputClass;
-	if(fieldTitle) input.title = i18n[fieldTitle];
+	if(fieldTitle) input.title = fieldTitle;
 	if(fieldSize) input.size = fieldSize;
 	if(fieldValue) input.value = fieldValue;
 	fieldset.appendChild(input);
@@ -1448,18 +1810,19 @@
 	if(postLabel) {
 		label = doc.createElement("span");
 		if(postClass) label.className = postClass;
-		label.innerHTML = i18n[postLabel];
+		label.innerHTML = postLabel;
 		fieldset.appendChild(label);
 		if(fields) fields.push(label);
 	}
+	return input;
 };
-TableOperations.buildSelectField = function(doc,el,i18n,fieldset,fieldName,fieldLabel,labelClass,selectClass,fieldTitle,options,values,selected,fields,translateOptions) {
+TableOperations.buildSelectField = function(doc, fieldset,fieldName,fieldLabel,labelClass,selectClass,fieldTitle,options,values,selected,fields,translateOptions) {
 	if(typeof(translateOptions) == "undefined") var translateOptions = true;
 		// Field Label
 	if(fieldLabel) {
 		var label = doc.createElement("label");
 		if(labelClass) label.className = labelClass;
-		label.innerHTML = i18n[fieldLabel];
+		label.innerHTML = fieldLabel;
 		label.htmlFor = fieldName;
 		fieldset.appendChild(label);
 		if(fields) fields.push(label);
@@ -1469,15 +1832,14 @@
 	if (selectClass) select.className = selectClass;
 	select.id = fieldName;
 	select.name =  fieldName;
-	select.title= i18n[fieldTitle];
+	select.title= fieldTitle;
 	select.selectedIndex = 0;
 	var option;
 	for (var i = 0; i < options.length; ++i) {
 		option = doc.createElement("option");
 		select.appendChild(option);
 		option.value = values[i];
-		if(translateOptions) option.appendChild(doc.createTextNode(i18n[options[i]]));
-			else option.appendChild(doc.createTextNode(options[i]));
+		option.innerHTML = options[i];
 		option.selected = selected.test(option.value);
 	}
 	if (select.options.length>1) select.disabled = false;
@@ -1486,12 +1848,12 @@
 	if(fields) fields.push(select);
 	return select;
 };
-TableOperations.buildColorField = function(w,doc,editor,el,i18n,fieldset,fieldName,fieldLabel,labelClass, buttonClass, fieldValue,fieldType,fields) {
+TableOperations.buildColorField = function(w, doc, editor, fieldset,fieldName,fieldLabel,labelClass, buttonClass, fieldValue,fieldType,fields) {
 		// Field Label
 	if(fieldLabel) {
 		var label = doc.createElement("label");
 		if(labelClass) label.className = labelClass;
-		label.innerHTML = i18n[fieldLabel];
+		label.innerHTML = fieldLabel;
 		fieldset.appendChild(label);
 		if(fields) fields.push(label);
 	}
@@ -1499,4 +1861,4 @@
 	colorButton.className = buttonClass;
 	fieldset.appendChild(colorButton);
 	if(fields) fields.push(colorButton);
-};
\ No newline at end of file
+};
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/TYPO3Color/typo3color.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/TYPO3Color/typo3color.js	(revision 3287)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/TYPO3Color/typo3color.js	(working copy)
@@ -27,7 +27,7 @@
 /*
  * TYPO3 Color Plugin for TYPO3 htmlArea RTE
  *
- * TYPO3 SVN ID: $Id: $
+ * TYPO3 SVN ID: $Id: typo3color.js $
  */
 TYPO3Color = HTMLArea.Plugin.extend({
 	
@@ -48,7 +48,7 @@
 		 * Registering plugin "About" information
 		 */
 		var pluginInformation = {
-			version		: "1.7",
+			version		: "2.0",
 			developer	: "Stanislas Rolland",
 			developerUrl	: "http://www.fructifor.ca/",
 			copyrightOwner	: "Stanislas Rolland",
@@ -110,33 +110,128 @@
 		}
 	},
 	
-	// this function requires the file PopupWin
-	dialogSelectColor : function (buttonId, element, field, opener) {
-		var editor = this.editor;
-		var windowWidth = 470;
-		var windowHeight = 245;
-		
+	dialogSelectColor : function (buttonId, element, field, dialogOpener) {
+		var dimensions = {
+			width	: 480,
+			height	: 245
+		};
+		var arguments = {
+			title 		: buttonId + "_title",
+			buttonId	: buttonId,
+			element		: element,
+			field		: field
+		};
 			// buttonId's  "color" and "tag" are not registered but used to interface with the Table Operations and QuickTag plugins
 		switch (buttonId) {
 			case "ForeColor"	:
 			case "HiliteColor"	:
-				var selectColorInitFunctRef = TYPO3Color.selectColorCOInit(this, buttonId);
-				var setColorFunctRef = TYPO3Color.setColorCO(this);
-				this.dialog = new PopupWin(this.editor, this.localize(buttonId + "_title"), setColorFunctRef, selectColorInitFunctRef, windowWidth, windowHeight, editor._iframe.contentWindow);
+				var selectColorWithButtonInitFunctRef = this.makeFunctionReference("selectColorWithButtonInit");
+				arguments.initialize = selectColorWithButtonInitFunctRef;
+				this.dialog = this.openDialog(buttonId, "", "setColor", arguments, dimensions);
 				break;
 			case "color"		:
-				var selectColorInitFunctRef = TYPO3Color.selectColorColorInit(this, buttonId, field);
-				var setColorFunctRef = TYPO3Color.setColorColor(this, element, field);
-				this.dialog = new PopupWin(this.editor, this.localize(buttonId + "_title"), setColorFunctRef, selectColorInitFunctRef, windowWidth, windowHeight, opener);
+				var selectColorCodeInitFunctRef = this.makeFunctionReference("selectColorCodeInit");
+				arguments.initialize = selectColorCodeInitFunctRef;
+				this.dialog = this.openDialog(buttonId, "", "setColor", arguments, dimensions, null, dialogOpener);
 				break;
 			case "tag"		:
-				var selectColorInitFunctRef = TYPO3Color.selectColorTagInit(this, buttonId);
-				var setColorFunctRef = TYPO3Color.setColorTag(this, field);
-				this.dialog = new PopupWin(this.editor, this.localize("color_title"), setColorFunctRef, selectColorInitFunctRef, windowWidth, windowHeight, opener);
+				var selectColorCodeInitFunctRef = this.makeFunctionReference("selectColorCodeInit");
+				arguments.initialize = selectColorCodeInitFunctRef;
+				arguments.title = "color_title";
+				this.dialog = this.openDialog(buttonId, "", "setColorInTag", arguments, dimensions, null, dialogOpener);
 		}
 	},
 	
-	// Applies the style found in "params" to the given element.
+	/*
+	 * Initialize the forecolor and the hilitecolor select color dialogues
+	 */
+	selectColorWithButtonInit : function(dialog) {
+		var editor = dialog.editor;
+		var doc = editor._doc;
+		var buttonId = dialog.arguments.buttonId;
+		dialog.content.innerHTML = this.renderPopupSelectColor(buttonId, dialog, dialog.arguments.title);
+		var colorTable = dialog.document.getElementById("colorTable");
+		colorTable.onclick = function(e) {
+			if(!e) var e = dialog.dialogWindow.event;
+			var target = e.target ? e.target : e.srcElement;
+			if (target.nodeType == 3) target = target.parentNode;
+			dialog.document.getElementById(buttonId).value = target.bgColor ? target.bgColor : "";
+			dialog.callFormInputHandler();
+			return false;
+		};
+		var colorUnset = dialog.document.getElementById("colorUnset");
+		colorUnset.onclick = function(e) {
+			dialog.document.getElementById(buttonId).value="";
+			dialog.callFormInputHandler();
+			return false;
+		};
+		try {
+			with (dialog.document.getElementById(buttonId+"Current").style) {
+				switch (buttonId) {
+					case "ForeColor":
+						backgroundColor = HTMLArea._makeColor(doc.queryCommandValue("ForeColor"));
+						break;
+					case "HiliteColor":
+						backgroundColor = HTMLArea._makeColor(doc.queryCommandValue(((HTMLArea.is_ie || HTMLArea.is_safari) ? "BackColor" : "HiliteColor")));
+						if (/transparent/i.test(backgroundColor)) {
+								// Mozilla
+							backgroundColor = HTMLArea._makeColor(doc.queryCommandValue("BackColor"));
+						}
+						break;
+				}
+			}
+		} catch (e) { }
+	},
+	
+	/*
+	 * Set the color and close the ForeColor and the HiliteColor select color dialogues
+	 */
+	setColor : function(dialog, params) {
+		this.processStyle(dialog, params, dialog.arguments.element, dialog.arguments.field);
+		dialog.close();
+	},
+	
+	/*
+	 * Initialize the case=color select color dialogue
+	 * This case is used by the Table Operations and QuickTag plugins
+	 */
+	selectColorCodeInit : function(dialog) {
+		var buttonId = dialog.arguments.buttonId;
+		var field = dialog.arguments.field;
+		dialog.content.innerHTML = this.renderPopupSelectColor(buttonId, dialog, this.localize(dialog.arguments.title));
+		var colorTable = dialog.document.getElementById("colorTable");
+		colorTable.onclick = function(e) {
+			if(!e) var e = dialog.dialogWindow.event;
+			var target = e.target ? e.target : e.srcElement;
+			if (target.nodeType == 3) target = target.parentNode;
+			dialog.document.getElementById(buttonId).value = target.bgColor;
+			dialog.callFormInputHandler();
+			return false;
+		};
+		var colorUnset = dialog.document.getElementById("colorUnset");
+		colorUnset.onclick = function(e) {
+			dialog.document.getElementById(buttonId).value = "";
+			dialog.callFormInputHandler();
+			return false;
+		};
+		if (buttonId === "color") {
+			dialog.document.getElementById(buttonId+"Current").style.backgroundColor = field.value;
+		} else if (buttonId === "tag"){
+			dialog.document.getElementById(buttonId+"Current").style.backgroundColor = "";
+		}
+	},
+	
+	/*
+	* Sets the color
+	*/
+	setColorInTag : function(dialog, params) {
+		dialog.arguments.field.insertColor(params.tag);
+		dialog.close();
+	},
+	
+	/*
+	* Applies the style found in "params" to the given element
+	*/
 	processStyle : function (dialog, params, element, field) {
 		var editor = this.editor;
 		for (var i in params) {
@@ -186,9 +281,9 @@
 		sz += '<input type="hidden" name="' + sID + '" id="' + sID + '" value="" />';
 		sz += '<table style="width:100%;"><tr><td style="vertical-align: middle;"><span style="margin-left: 5px; height: 1em;" class="dialog buttonColor" ';
 		sz += '		onMouseover="className += \' buttonColor-hilite\';" ';
-		sz += '		onMouseout="className = \'buttonColor\';"> ';
-		sz += '	<span id="' + szID + '" class="chooser"></span> ';
-		sz += '	<span id="colorUnset" class="nocolor" title="' + this.localize("no_color") + '" ';
+		sz += '		onMouseout="className = \'buttonColor\';">';
+		sz += '	<span id="' + szID + '" class="chooser">&nbsp;</span>';
+		sz += '	<span id="colorUnset" class="nocolor" title="' + "no_color" + '" ';
 		sz += '		onMouseover="className += \' nocolor-hilite\';" ';
 		sz += '		onMouseout="className = \'nocolor\';"';
 		sz += '	>&#x00d7;</span></span></td><td>';
@@ -233,138 +328,3 @@
 	}
 });
 
-/*
- * Initialize the forecolor and the hilitecolor select color dialogs
- */
-TYPO3Color.selectColorCOInit = function(instance, buttonId) {
-	return (function(dialog) {
-		var editor = dialog.editor;
-		var doc = editor._doc;
-		dialog.content.innerHTML = instance.renderPopupSelectColor(buttonId, dialog, instance.localize(buttonId + "_title"));
-		var colorTable = dialog.doc.getElementById("colorTable");
-		colorTable.onclick = function(e) {
-			if(!e) var e = dialog.dialogWindow.event;
-			var targ = e.target ? e.target : e.srcElement;
-			if (targ.nodeType == 3) targ = targ.parentNode;
-			dialog.doc.getElementById(buttonId).value = targ.bgColor ? targ.bgColor : "";
-			dialog.callHandler();
-			return false;
-		};
-		var colorUnset = dialog.doc.getElementById("colorUnset");
-		colorUnset.onclick = function(e) {
-			dialog.doc.getElementById(buttonId).value="";
-			dialog.callHandler();
-			return false;
-		};
-		try {
-			with (dialog.doc.getElementById(buttonId+"Current").style) {
-				switch (buttonId) {
-					case "ForeColor":
-						backgroundColor = HTMLArea._makeColor(doc.queryCommandValue("ForeColor"));
-						break;
-					case "HiliteColor":
-						backgroundColor = HTMLArea._makeColor(doc.queryCommandValue(((HTMLArea.is_ie || HTMLArea.is_safari) ? "BackColor" : "HiliteColor")));
-						if (/transparent/i.test(backgroundColor)) {
-								// Mozilla
-							backgroundColor = HTMLArea._makeColor(doc.queryCommandValue("BackColor"));
-						}
-						break;
-				}
-			}
-		} catch (e) { }
-		dialog.showAtElement();
-	});
-};
-
-/*
- * Set the color and close the ForeColor and the HiliteColor select color dialogs
- */
-TYPO3Color.setColorCO = function(instance) {
-	return (function(dialog,params) {
-		var editor = dialog.editor;
-		instance.processStyle(dialog, params, "", "");
-		dialog.releaseEvents();
-		editor.focusEditor();
-		editor.updateToolbar();
-		dialog.close();
-	});
-};
-
-/*
- * Initialize the case=color select color dialog
- * This case is used by the Table Operations plugin
- */
-TYPO3Color.selectColorColorInit = function(instance,buttonId,field) {
-	return (function(dialog) {
-		dialog.content.innerHTML = instance.renderPopupSelectColor(buttonId, dialog, instance.localize(buttonId + "_title"));
-		var colorTable = dialog.doc.getElementById("colorTable");
-		colorTable.onclick = function(e) {
-			if(!e) var e = dialog.dialogWindow.event;
-			var targ = e.target ? e.target : e.srcElement;
-			if (targ.nodeType == 3) targ = targ.parentNode;
-			dialog.doc.getElementById(buttonId).value = targ.bgColor;
-			dialog.callHandler();
-			return false;
-		};
-		var colorUnset = dialog.doc.getElementById("colorUnset");
-		colorUnset.onclick = function(e) {
-			dialog.doc.getElementById(buttonId).value = "";
-			dialog.callHandler();
-			return false;
-		};
-		dialog.doc.getElementById(buttonId+"Current").style.backgroundColor = field.value;
-		dialog.showAtElement();
-
-	});
-};
-
-/*
- * Set the color and close the case=color select color dialog
- */
-TYPO3Color.setColorColor = function(instance,element,field) {
-	return (function(dialog,params) {
-		instance.processStyle(dialog, params, element, field);
-		dialog.releaseEvents();
-		dialog.close();
-	});
-};
-
-/*
- * Initialize the case=tag select color dialog
- * This is used by the QuickTag plugin
- */
-TYPO3Color.selectColorTagInit = function(instance, buttonId) {
-	return (function(dialog) {
-		instance.dialog = dialog;
-		dialog.content.innerHTML = instance.renderPopupSelectColor(buttonId, dialog, instance.localize("color_title"));
-		var colorTable = dialog.doc.getElementById("colorTable");
-		colorTable.onclick = function(e) {
-			if(!e) var e = dialog.dialogWindow.event;
-			var targ = e.target ? e.target : e.srcElement;
-			if (targ.nodeType == 3) targ = targ.parentNode;
-			dialog.doc.getElementById(buttonId).value = targ.bgColor;
-			dialog.callHandler();
-			return false;
-		};
-		var colorUnset = dialog.doc.getElementById("colorUnset");
-		colorUnset.onclick = function(e) {
-			dialog.doc.getElementById(buttonId).value = "";
-			dialog.callHandler();
-			return false;
-		};
-		dialog.doc.getElementById(buttonId+"Current").style.backgroundColor = "";
-		dialog.showAtElement();
-	});
-};
-
-/*
- * Set the color and close the case=color select color dialog
- */
-TYPO3Color.setColorTag = function(instance,field) {
-	return (function(dialog,params) {
-		dialog.releaseEvents();
-		field.insertColor(params["tag"]);
-		dialog.close();
-	});
-};
-
Index: typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea-edited-content.css
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea-edited-content.css	(revision 3287)
+++ typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea-edited-content.css	(working copy)
@@ -10,7 +10,7 @@
 /* Selectors for the Table Operations plugin */
 /* Make borders visible */
 /* Make sure we can click in empty cells without too much difficulty */
-body.htmlarea-content-body .htmlarea-showtableborders, body.htmlarea-content-body .htmlarea-showtableborders td, body.htmlarea-content-body .htmlarea-showtableborders th {
+body.htmlarea-showtableborders table, body.htmlarea-showtableborders td, body.htmlarea-showtableborders th {
 	padding: 3px; border:1px dashed #316ac5 ! important;
 }
 
Index: typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea.css	(revision 3287)
+++ typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea.css	(working copy)
@@ -122,11 +122,13 @@
 .htmlarea .toolbar .ShowHelp { background-image:url("images/TYPO3ViewHelp/module_help.gif");}
 .htmlarea .toolbar .TO-toggle-borders, .htmlarea-context-menu .TO-toggle-borders {background-image:url("images/TableOperations/toggle-borders.gif");}
 .htmlarea .toolbar .TO-table-prop, .htmlarea-context-menu .TO-table-prop {background-image:url("images/TableOperations/table-prop.gif");}
+.htmlarea .toolbar .TO-table-restyle, .htmlarea-context-menu .TO-table-restyle {background-image:url("images/TableOperations/table-restyle.gif");}
 .htmlarea .toolbar .TO-row-prop, .htmlarea-context-menu .TO-row-prop {background-image:url("images/TableOperations/row-prop.gif");}
 .htmlarea .toolbar .TO-row-insert-above, .htmlarea-context-menu .TO-row-insert-above {background-image:url("images/TableOperations/row-insert-above.gif");}
 .htmlarea .toolbar .TO-row-insert-under, .htmlarea-context-menu .TO-row-insert-under {background-image:url("images/TableOperations/row-insert-under.gif");}
 .htmlarea .toolbar .TO-row-delete, .htmlarea-context-menu .TO-row-delete {background-image:url("images/TableOperations/row-delete.gif");}
 .htmlarea .toolbar .TO-row-split, .htmlarea-context-menu .TO-row-split {background-image:url("images/TableOperations/row-split.gif");}
+.htmlarea .toolbar .TO-col-prop, .htmlarea-context-menu .TO-col-prop {background-image:url("images/TableOperations/col-prop.gif");}
 .htmlarea .toolbar .TO-col-insert-before, .htmlarea-context-menu .TO-col-insert-before {background-image:url("images/TableOperations/col-insert-before.gif");}
 .htmlarea .toolbar .TO-col-insert-after, .htmlarea-context-menu .TO-col-insert-after {background-image:url("images/TableOperations/col-insert-after.gif");}
 .htmlarea .toolbar .TO-col-delete, .htmlarea-context-menu .TO-col-delete {background-image:url("images/TableOperations/col-delete.gif");}
@@ -361,7 +363,7 @@
 }
 .popupwin .fl {
 	float:left;text-align:right;
-	width:13em;
+	width:15em;
 	padding:2px 5px;
 }
 .popupwin .fl-borderCollapse {
Index: typo3/sysext/rtehtmlarea/htmlarea/skins/default/images/TableOperations/col-prop.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: typo3\sysext\rtehtmlarea\htmlarea\skins\default\images\TableOperations\col-prop.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Index: typo3/sysext/rtehtmlarea/htmlarea/skins/default/images/TableOperations/table-restyle.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: typo3\sysext\rtehtmlarea\htmlarea\skins\default\images\TableOperations\table-restyle.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Index: typo3/sysext/t3skin/rtehtmlarea/htmlarea-edited-content.css
===================================================================
--- typo3/sysext/t3skin/rtehtmlarea/htmlarea-edited-content.css	(revision 3287)
+++ typo3/sysext/t3skin/rtehtmlarea/htmlarea-edited-content.css	(working copy)
@@ -10,7 +10,7 @@
 /* Selectors for the Table Operations plugin */
 /* Make borders visible */
 /* Make sure we can click in empty cells without too much difficulty */
-body.htmlarea-content-body .htmlarea-showtableborders, body.htmlarea-content-body .htmlarea-showtableborders td, body.htmlarea-content-body .htmlarea-showtableborders th {
+body.htmlarea-showtableborders table, body.htmlarea-showtableborders td, body.htmlarea-showtableborders th {
 	padding: 3px; border:1px dashed #316ac5 ! important;
 }
 
Index: typo3/sysext/t3skin/rtehtmlarea/htmlarea.css
===================================================================
--- typo3/sysext/t3skin/rtehtmlarea/htmlarea.css	(revision 3287)
+++ typo3/sysext/t3skin/rtehtmlarea/htmlarea.css	(working copy)
@@ -132,11 +132,13 @@
 .htmlarea .toolbar .ShowHelp { background-image:url("images/TYPO3ViewHelp/module_help.gif");}
 .htmlarea .toolbar .TO-toggle-borders, .htmlarea-context-menu .TO-toggle-borders {background-image:url("images/TableOperations/toggle-borders.gif");}
 .htmlarea .toolbar .TO-table-prop, .htmlarea-context-menu .TO-table-prop  {background-image:url("images/TableOperations/table-prop.gif");}
+.htmlarea .toolbar .TO-table-restyle, .htmlarea-context-menu .TO-table-restyle {background-image:url("images/TableOperations/table-restyle.gif");}
 .htmlarea .toolbar .TO-row-prop, .htmlarea-context-menu .TO-row-prop {background-image:url("images/TableOperations/row-prop.gif");}
 .htmlarea .toolbar .TO-row-insert-above, .htmlarea-context-menu .TO-row-insert-above {background-image:url("images/TableOperations/row-insert-above.gif");}
 .htmlarea .toolbar .TO-row-insert-under, .htmlarea-context-menu .TO-row-insert-under {background-image:url("images/TableOperations/row-insert-under.gif");}
 .htmlarea .toolbar .TO-row-delete, .htmlarea-context-menu .TO-row-delete {background-image:url("images/TableOperations/row-delete.gif");}
 .htmlarea .toolbar .TO-row-split, .htmlarea-context-menu .TO-row-split {background-image:url("images/TableOperations/row-split.gif");}
+.htmlarea .toolbar .TO-col-prop, .htmlarea-context-menu .TO-col-prop {background-image:url("images/TableOperations/col-prop.gif");}
 .htmlarea .toolbar .TO-col-insert-before, .htmlarea-context-menu .TO-col-insert-before {background-image:url("images/TableOperations/col-insert-before.gif");}
 .htmlarea .toolbar .TO-col-insert-after, .htmlarea-context-menu .TO-col-insert-after {background-image:url("images/TableOperations/col-insert-after.gif");}
 .htmlarea .toolbar .TO-col-delete, .htmlarea-context-menu .TO-col-delete {background-image:url("images/TableOperations/col-delete.gif");}
@@ -371,7 +373,7 @@
 }
 .popupwin .fl {
 	float:left;text-align:right;
-	width:13em;
+	width:15em;
 	padding:2px 5px;
 }
 .popupwin .fl-borderCollapse {
Index: typo3/sysext/t3skin/rtehtmlarea/images/TableOperations/col-prop.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: typo3\sysext\t3skin\rtehtmlarea\images\TableOperations\col-prop.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Index: typo3/sysext/t3skin/rtehtmlarea/images/TableOperations/table-restyle.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: typo3\sysext\t3skin\rtehtmlarea\images\TableOperations\table-restyle.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

