Index: typo3/sysext/rtehtmlarea/class.tx_rtehtmlarea_base.php
===================================================================
--- typo3/sysext/rtehtmlarea/class.tx_rtehtmlarea_base.php	(revision 2968)
+++ typo3/sysext/rtehtmlarea/class.tx_rtehtmlarea_base.php	(working copy)
@@ -99,7 +99,6 @@
 		'bgcolor'		=> 'HiliteColor',
 		'orderedlist'		=> 'InsertOrderedList',
 		'unorderedlist'		=> 'InsertUnorderedList',
-		'emoticon'		=> 'InsertSmiley',
 		'line'			=> 'InsertHorizontalRule',
 		'table'			=> 'InsertTable',
 		'cut'			=> 'Cut',
@@ -112,9 +111,6 @@
 		'lefttoright'		=> 'LeftToRight',
 		'righttoleft'		=> 'RightToLeft',
 		'showhelp'		=> 'ShowHelp',
-		'findreplace'		=> 'FindReplace',
-		'spellcheck'		=> 'SpellCheck',
-		'removeformat'		=> 'RemoveFormat',
 		'inserttag'		=> 'InsertTag',
 		'splitblock'		=> 'SplitBlock',
 		'toggleborders'		=> 'TO-toggle-borders',
@@ -144,7 +140,6 @@
 		'undo'			=> 'Undo',
 		'redo'			=> 'Redo',
 		'textindicator'		=> 'TextIndicator',
-		'about'			=> 'About',
 		);
 	
 	var $defaultFontFaces = array(
@@ -179,13 +174,9 @@
 		'7'	=>	'xxx-large (48px)',
 		);
 	
-	var $pluginList = 'TableOperations, ContextMenu, SpellChecker, SelectColor, InsertSmiley, FindReplace, RemoveFormat, QuickTag, UserElements, TYPO3HtmlParser';
+	var $pluginList = 'TableOperations, ContextMenu, SelectColor, QuickTag, UserElements, TYPO3HtmlParser';
 	
 	var $pluginButton = array(
-		'SpellChecker'		=> 'spellcheck',
-		'InsertSmiley'		=> 'emoticon',
-		'FindReplace'		=> 'findreplace',
-		'RemoveFormat'		=> 'removeformat',
 		'QuickTag'		=> 'inserttag',
 		'TableOperations'	=> 'table, toggleborders, tableproperties, rowproperties, rowinsertabove, rowinsertunder, rowdelete, rowsplit,
 						columninsertbefore, columninsertafter, columndelete, columnsplit,
@@ -196,8 +187,6 @@
 
 	var $pluginLabel = array();
 
-	var $spellCheckerModes = array( 'ultra', 'fast', 'normal', 'bad-spellers');
-
 		// External:
 	var $RTEdivStyle;			// Alternative style for RTE <div> tag.
 	var $extHttpPath;			// full Path to this extension for http (so no Server path). It ends with "/"
@@ -227,12 +216,12 @@
 	var $thisConfig;
 	var $confValues;
 	var $language;
+	public $contentTypo3Language;
+	public $contentISOLanguage;
+	public $contentCharset;
 	var $BECharset;
 	var $OutputCharset;
 	var $editorCSS;
-	var $spellCheckerLanguage;
-	var $spellCheckerCharset;
-	var $spellCheckerMode;
 	var $quickTagHideTags;
 	var $specConf;
 	var $toolbar = array();					// Save the buttons for the toolbar
@@ -427,7 +416,6 @@
 			$this->pluginEnabledArray = t3lib_div::trimExplode(',', $this->pluginList, 1);
 			$this->enableRegisteredPlugins();
 			$hidePlugins = array();
-			if (!t3lib_extMgm::isLoaded('static_info_tables') || in_array($this->language, t3lib_div::trimExplode(',', $TYPO3_CONF_VARS['EXTCONF'][$this->ID]['noSpellCheckLanguages']))) $hidePlugins[] = 'SpellChecker';
 			if ($this->client['BROWSER'] == 'msie') {
 				$this->thisConfig['keepButtonGroupTogether'] = 0;
 			}
@@ -454,33 +442,6 @@
 			}
 			
 			/* =======================================
-			 * PLUGIN-SPECIFIC CONFIGURATION
-			 * =======================================
-			 */
-			
-			if ($this->isPluginEnabled('SpellChecker')) {
-					// Set the language of the content for the SpellChecker
-				$this->spellCheckerLanguage = $this->contentISOLanguage;
-				$this->spellCheckerTypo3Language = $this->contentTypo3Language;
-				
-					// Set the charset of the content for the SpellChecker
-				$this->spellCheckerCharset = $this->contentCharset;
-				$this->spellCheckerCharset = trim($TYPO3_CONF_VARS['BE']['forceCharset']) ? trim($TYPO3_CONF_VARS['BE']['forceCharset']) : $this->spellCheckerCharset;
-				
-					// Set the SpellChecker mode
-				$this->spellCheckerMode = isset($BE_USER->userTS['options.']['HTMLAreaPspellMode']) ? trim($BE_USER->userTS['options.']['HTMLAreaPspellMode']) : 'normal';
-				if( !in_array($this->spellCheckerMode, $this->spellCheckerModes)) {
-					$this->spellCheckerMode = 'normal';
-				}
-				
-					// Set the use of personal dictionary
-				$this->spellCheckerPersonalDicts = $this->thisConfig['enablePersonalDicts'] ? ((isset($BE_USER->userTS['options.']['enablePersonalDicts']) && $BE_USER->userTS['options.']['enablePersonalDicts']) ? true : false) : false;
-				if (ini_get('safe_mode')) {
-					$this->spellCheckerPersonalDicts = false;
-				}
-			}
-
-			/* =======================================
 			 * SET STYLES
 			 * =======================================
 			 */
@@ -791,7 +752,6 @@
 		if($this->thisConfig['disableContextMenu'] || $this->thisConfig['disableRightClick']) $hidePlugins[] = 'ContextMenu';
 		if($this->thisConfig['disableSelectColor']) $hidePlugins[] = 'SelectColor';
 		if(!$this->thisConfig['enableWordClean'] || !is_array($this->thisConfig['enableWordClean.'])) $hidePlugins[] = 'TYPO3HtmlParser';
-		if(!t3lib_extMgm::isLoaded('static_info_tables') || in_array($this->language, t3lib_div::trimExplode(',', $TYPO3_CONF_VARS['EXTCONF'][$this->ID]['noSpellCheckLanguages']))) $hidePlugins[] = 'SpellChecker';
 		$this->pluginEnabledArray = array_diff($this->pluginEnabledArray, $hidePlugins);
 		
 			// Hiding labels of disabled plugins
@@ -878,9 +838,6 @@
 			. (($this->client['BROWSER'] == 'gecko') ? ('
 			_editor_mozAllowClipboard_url = "' . ($TYPO3_CONF_VARS['EXTCONF'][$this->ID]['mozAllowClipboardURL'] ? $TYPO3_CONF_VARS['EXTCONF'][$this->ID]['mozAllowClipboardURL'] : '') . '";')
 			: '') . '
-			_spellChecker_lang = "' . $this->spellCheckerLanguage . '";
-			_spellChecker_charset = "' . $this->spellCheckerCharset . '";
-			_spellChecker_mode = "' . $this->spellCheckerMode . '";
 		/*]]>*/
 		</script>';
 		$loadJavascriptCode .= '
@@ -956,7 +913,6 @@
 			RTEarea['.$RTEcounter.']["sys_language_content"] = "' . $this->contentLanguageUid . '";
 			RTEarea['.$RTEcounter.']["typo3ContentLanguage"] = "' . $this->contentTypo3Language . '";
 			RTEarea['.$RTEcounter.']["typo3ContentCharset"] = "' . $this->contentCharset . '";
-			RTEarea['.$RTEcounter.']["enablePersonalDicts"] = ' . ($this->spellCheckerPersonalDicts ? 'true' : 'false') . ';
 			RTEarea['.$RTEcounter.']["userUid"] = "' . $this->userUid . '";';
 		}
 		
Index: typo3/sysext/rtehtmlarea/ext_localconf.php
===================================================================
--- typo3/sysext/rtehtmlarea/ext_localconf.php	(revision 2968)
+++ typo3/sysext/rtehtmlarea/ext_localconf.php	(working copy)
@@ -84,6 +84,26 @@
 $TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['TYPO3Link']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/TYPO3Link/class.tx_rtehtmlarea_typo3link.php:&tx_rtehtmlarea_typo3link';
 $TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['TYPO3Link']['addIconsToSkin'] = 0;
 $TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['TYPO3Link']['disableInFE'] = 1;
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['InsertSmiley'] = array();
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['InsertSmiley']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/InsertSmiley/class.tx_rtehtmlarea_insertsmiley.php:&tx_rtehtmlarea_insertsmiley';
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['InsertSmiley']['addIconsToSkin'] = 0;
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['InsertSmiley']['disableInFE'] = 0;
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['SpellChecker'] = array();
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['SpellChecker']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/SpellChecker/class.tx_rtehtmlarea_spellchecker.php:&tx_rtehtmlarea_spellchecker';
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['SpellChecker']['addIconsToSkin'] = 0;
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['SpellChecker']['disableInFE'] = 0;
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['FindReplace'] = array();
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['FindReplace']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/FindReplace/class.tx_rtehtmlarea_findreplace.php:&tx_rtehtmlarea_findreplace';
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['FindReplace']['addIconsToSkin'] = 0;
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['FindReplace']['disableInFE'] = 0;
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['RemoveFormat'] = array();
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['RemoveFormat']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/RemoveFormat/class.tx_rtehtmlarea_removeformat.php:&tx_rtehtmlarea_removeformat';
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['RemoveFormat']['addIconsToSkin'] = 0;
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['RemoveFormat']['disableInFE'] = 0;
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['AboutEditor'] = array();
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['AboutEditor']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/AboutEditor/class.tx_rtehtmlarea_abouteditor.php:&tx_rtehtmlarea_abouteditor';
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['AboutEditor']['addIconsToSkin'] = 0;
+$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['AboutEditor']['disableInFE'] = 0;
 
 $_EXTCONF = unserialize($_EXTCONF);    // unserializing the configuration so we can use it here:
 
Index: typo3/sysext/rtehtmlarea/extensions/AboutEditor/class.tx_rtehtmlarea_abouteditor.php
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/AboutEditor/class.tx_rtehtmlarea_abouteditor.php	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/AboutEditor/class.tx_rtehtmlarea_abouteditor.php	(revision 0)
@@ -0,0 +1,75 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  All rights reserved
+*
+*  This script is part of the Typo3 project. The Typo3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+/**
+ * About Editor plugin for htmlArea RTE
+ *
+ * @author Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+ *
+ * TYPO3 SVN ID: $Id: class.tx_rtehtmlarea_charactermap.php 2926 2008-01-20 08:58:13Z ingmars $
+ *
+ */
+
+require_once(t3lib_extMgm::extPath('rtehtmlarea').'class.tx_rtehtmlareaapi.php');
+
+class tx_rtehtmlarea_abouteditor extends tx_rtehtmlareaapi {
+
+	protected $extensionKey = 'rtehtmlarea';	// The key of the extension that is extending htmlArea RTE
+	protected $pluginName = 'AboutEditor';		// The name of the plugin registered by the extension
+	protected $relativePathToLocallangFile = '';	// Path to this main locallang file of the extension relative to the extension dir.
+	protected $relativePathToSkin = 'extensions/AboutEditor/skin/htmlarea.css';		// Path to the skin (css) file relative to the extension dir.
+	protected $htmlAreaRTE;				// Reference to the invoking object
+	protected $thisConfig;				// Reference to RTE PageTSConfig
+	protected $toolbar;				// Reference to RTE toolbar array
+	protected $LOCAL_LANG; 				// Frontend language array
+	
+	protected $pluginButtons = 'about';
+	protected $convertToolbarForHtmlAreaArray = array (
+		'about'	=> 'About',
+		);
+	
+	/**
+	 * Return JS configuration of the htmlArea plugins registered by the extension
+	 *
+	 * @param	integer		Relative id of the RTE editing area in the form
+	 *
+	 * @return string		JS configuration for registered plugins
+	 *
+	 * The returned string will be a set of JS instructions defining the configuration that will be provided to the plugin(s)
+	 * Each of the instructions should be of the form:
+	 * 	RTEarea['.$RTEcounter.']["buttons"]["button-id"]["property"] = "value";
+	 */
+	public function buildJavascriptConfiguration($RTEcounter) {
+		global $TSFE, $LANG;
+		
+		$registerRTEinJavascriptString = '';
+		return $registerRTEinJavascriptString;
+	}
+
+} // end of class
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/AboutEditor/class.tx_rtehtmlarea_abouteditor.php']) {
+	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/AboutEditor/class.tx_rtehtmlarea_abouteditor.php']);
+}
+
+?>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/extensions/AboutEditor/class.tx_rtehtmlarea_abouteditor.php
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/AboutEditor/class.tx_rtehtmlarea_abouteditor.php	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/AboutEditor/class.tx_rtehtmlarea_abouteditor.php	(revision 0)
@@ -0,0 +1,75 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  All rights reserved
+*
+*  This script is part of the Typo3 project. The Typo3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+/**
+ * About Editor plugin for htmlArea RTE
+ *
+ * @author Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+ *
+ * TYPO3 SVN ID: $Id: class.tx_rtehtmlarea_charactermap.php 2926 2008-01-20 08:58:13Z ingmars $
+ *
+ */
+
+require_once(t3lib_extMgm::extPath('rtehtmlarea').'class.tx_rtehtmlareaapi.php');
+
+class tx_rtehtmlarea_abouteditor extends tx_rtehtmlareaapi {
+
+	protected $extensionKey = 'rtehtmlarea';	// The key of the extension that is extending htmlArea RTE
+	protected $pluginName = 'AboutEditor';		// The name of the plugin registered by the extension
+	protected $relativePathToLocallangFile = '';	// Path to this main locallang file of the extension relative to the extension dir.
+	protected $relativePathToSkin = 'extensions/AboutEditor/skin/htmlarea.css';		// Path to the skin (css) file relative to the extension dir.
+	protected $htmlAreaRTE;				// Reference to the invoking object
+	protected $thisConfig;				// Reference to RTE PageTSConfig
+	protected $toolbar;				// Reference to RTE toolbar array
+	protected $LOCAL_LANG; 				// Frontend language array
+	
+	protected $pluginButtons = 'about';
+	protected $convertToolbarForHtmlAreaArray = array (
+		'about'	=> 'About',
+		);
+	
+	/**
+	 * Return JS configuration of the htmlArea plugins registered by the extension
+	 *
+	 * @param	integer		Relative id of the RTE editing area in the form
+	 *
+	 * @return string		JS configuration for registered plugins
+	 *
+	 * The returned string will be a set of JS instructions defining the configuration that will be provided to the plugin(s)
+	 * Each of the instructions should be of the form:
+	 * 	RTEarea['.$RTEcounter.']["buttons"]["button-id"]["property"] = "value";
+	 */
+	public function buildJavascriptConfiguration($RTEcounter) {
+		global $TSFE, $LANG;
+		
+		$registerRTEinJavascriptString = '';
+		return $registerRTEinJavascriptString;
+	}
+
+} // end of class
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/AboutEditor/class.tx_rtehtmlarea_abouteditor.php']) {
+	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/AboutEditor/class.tx_rtehtmlarea_abouteditor.php']);
+}
+
+?>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/extensions/AboutEditor/skin/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/AboutEditor/skin/htmlarea.css	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/AboutEditor/skin/htmlarea.css	(revision 0)
@@ -0,0 +1,4 @@
+/* Selectors for the AboutEditor plugin of htmlArea RTE */
+/* TYPO3 SVN ID: $Id $ */
+.htmlarea .toolbar .About {background-image:url("images/about.gif");}
+
Index: typo3/sysext/rtehtmlarea/extensions/AboutEditor/skin/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/AboutEditor/skin/htmlarea.css	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/AboutEditor/skin/htmlarea.css	(revision 0)
@@ -0,0 +1,4 @@
+/* Selectors for the AboutEditor plugin of htmlArea RTE */
+/* TYPO3 SVN ID: $Id $ */
+.htmlarea .toolbar .About {background-image:url("images/about.gif");}
+
Index: typo3/sysext/rtehtmlarea/extensions/AboutEditor/skin/images/about.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

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

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

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

Index: typo3/sysext/rtehtmlarea/extensions/CharacterMap/skin/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/CharacterMap/skin/htmlarea.css	(revision 2968)
+++ typo3/sysext/rtehtmlarea/extensions/CharacterMap/skin/htmlarea.css	(working copy)
@@ -1,4 +1,4 @@
 /* Selectors for the InsertCharacter plugin of htmlArea RTE */
-/* TYPO3 SVN ID: $Id$ */
+/* TYPO3 SVN ID: $Id: $ */
 .htmlarea .toolbar .InsertCharacter {background-image:url("images/insertCharacter.gif");}
 
Index: typo3/sysext/rtehtmlarea/extensions/FindReplace/class.tx_rtehtmlarea_findreplace.php
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/FindReplace/class.tx_rtehtmlarea_findreplace.php	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/FindReplace/class.tx_rtehtmlarea_findreplace.php	(revision 0)
@@ -0,0 +1,75 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  All rights reserved
+*
+*  This script is part of the Typo3 project. The Typo3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+/**
+ * Find Replace plugin for htmlArea RTE
+ *
+ * @author Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+ *
+ * TYPO3 SVN ID: $Id: class.tx_rtehtmlarea_charactermap.php 2926 2008-01-20 08:58:13Z ingmars $
+ *
+ */
+
+require_once(t3lib_extMgm::extPath('rtehtmlarea').'class.tx_rtehtmlareaapi.php');
+
+class tx_rtehtmlarea_findreplace extends tx_rtehtmlareaapi {
+
+	protected $extensionKey = 'rtehtmlarea';	// The key of the extension that is extending htmlArea RTE
+	protected $pluginName = 'FindReplace';		// The name of the plugin registered by the extension
+	protected $relativePathToLocallangFile = '';	// Path to this main locallang file of the extension relative to the extension dir.
+	protected $relativePathToSkin = 'extensions/FindReplace/skin/htmlarea.css';		// Path to the skin (css) file relative to the extension dir.
+	protected $htmlAreaRTE;				// Reference to the invoking object
+	protected $thisConfig;				// Reference to RTE PageTSConfig
+	protected $toolbar;				// Reference to RTE toolbar array
+	protected $LOCAL_LANG; 				// Frontend language array
+	
+	protected $pluginButtons = 'findreplace';
+	protected $convertToolbarForHtmlAreaArray = array (
+		'findreplace'	=> 'FindReplace',
+		);
+	
+	/**
+	 * Return JS configuration of the htmlArea plugins registered by the extension
+	 *
+	 * @param	integer		Relative id of the RTE editing area in the form
+	 *
+	 * @return string		JS configuration for registered plugins
+	 *
+	 * The returned string will be a set of JS instructions defining the configuration that will be provided to the plugin(s)
+	 * Each of the instructions should be of the form:
+	 * 	RTEarea['.$RTEcounter.']["buttons"]["button-id"]["property"] = "value";
+	 */
+	public function buildJavascriptConfiguration($RTEcounter) {
+		global $TSFE, $LANG;
+		
+		$registerRTEinJavascriptString = '';
+		return $registerRTEinJavascriptString;
+	}
+
+} // end of class
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/FindReplace/class.tx_rtehtmlarea_findreplace.php']) {
+	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/FindReplace/class.tx_rtehtmlarea_findreplace.php']);
+}
+
+?>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/extensions/FindReplace/class.tx_rtehtmlarea_findreplace.php
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/FindReplace/class.tx_rtehtmlarea_findreplace.php	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/FindReplace/class.tx_rtehtmlarea_findreplace.php	(revision 0)
@@ -0,0 +1,75 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  All rights reserved
+*
+*  This script is part of the Typo3 project. The Typo3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+/**
+ * Find Replace plugin for htmlArea RTE
+ *
+ * @author Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+ *
+ * TYPO3 SVN ID: $Id: class.tx_rtehtmlarea_charactermap.php 2926 2008-01-20 08:58:13Z ingmars $
+ *
+ */
+
+require_once(t3lib_extMgm::extPath('rtehtmlarea').'class.tx_rtehtmlareaapi.php');
+
+class tx_rtehtmlarea_findreplace extends tx_rtehtmlareaapi {
+
+	protected $extensionKey = 'rtehtmlarea';	// The key of the extension that is extending htmlArea RTE
+	protected $pluginName = 'FindReplace';		// The name of the plugin registered by the extension
+	protected $relativePathToLocallangFile = '';	// Path to this main locallang file of the extension relative to the extension dir.
+	protected $relativePathToSkin = 'extensions/FindReplace/skin/htmlarea.css';		// Path to the skin (css) file relative to the extension dir.
+	protected $htmlAreaRTE;				// Reference to the invoking object
+	protected $thisConfig;				// Reference to RTE PageTSConfig
+	protected $toolbar;				// Reference to RTE toolbar array
+	protected $LOCAL_LANG; 				// Frontend language array
+	
+	protected $pluginButtons = 'findreplace';
+	protected $convertToolbarForHtmlAreaArray = array (
+		'findreplace'	=> 'FindReplace',
+		);
+	
+	/**
+	 * Return JS configuration of the htmlArea plugins registered by the extension
+	 *
+	 * @param	integer		Relative id of the RTE editing area in the form
+	 *
+	 * @return string		JS configuration for registered plugins
+	 *
+	 * The returned string will be a set of JS instructions defining the configuration that will be provided to the plugin(s)
+	 * Each of the instructions should be of the form:
+	 * 	RTEarea['.$RTEcounter.']["buttons"]["button-id"]["property"] = "value";
+	 */
+	public function buildJavascriptConfiguration($RTEcounter) {
+		global $TSFE, $LANG;
+		
+		$registerRTEinJavascriptString = '';
+		return $registerRTEinJavascriptString;
+	}
+
+} // end of class
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/FindReplace/class.tx_rtehtmlarea_findreplace.php']) {
+	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/FindReplace/class.tx_rtehtmlarea_findreplace.php']);
+}
+
+?>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/extensions/FindReplace/skin/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/FindReplace/skin/htmlarea.css	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/FindReplace/skin/htmlarea.css	(revision 0)
@@ -0,0 +1,3 @@
+/* Selectors for the FindReplace plugin of htmlArea RTE */
+/* TYPO3 SVN ID: $Id $ */
+.htmlarea .toolbar .FindReplace {background-image:url("images/find.gif");}
Index: typo3/sysext/rtehtmlarea/extensions/FindReplace/skin/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/FindReplace/skin/htmlarea.css	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/FindReplace/skin/htmlarea.css	(revision 0)
@@ -0,0 +1,3 @@
+/* Selectors for the FindReplace plugin of htmlArea RTE */
+/* TYPO3 SVN ID: $Id $ */
+.htmlarea .toolbar .FindReplace {background-image:url("images/find.gif");}
Index: typo3/sysext/rtehtmlarea/extensions/FindReplace/skin/images/find.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

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

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

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

Index: typo3/sysext/rtehtmlarea/extensions/InsertSmiley/class.tx_rtehtmlarea_insertsmiley.php
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/InsertSmiley/class.tx_rtehtmlarea_insertsmiley.php	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/InsertSmiley/class.tx_rtehtmlarea_insertsmiley.php	(revision 0)
@@ -0,0 +1,75 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  All rights reserved
+*
+*  This script is part of the Typo3 project. The Typo3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+/**
+ * Insert Smiley plugin for htmlArea RTE
+ *
+ * @author Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+ *
+ * TYPO3 SVN ID: $Id: class.tx_rtehtmlarea_charactermap.php 2926 2008-01-20 08:58:13Z ingmars $
+ *
+ */
+
+require_once(t3lib_extMgm::extPath('rtehtmlarea').'class.tx_rtehtmlareaapi.php');
+
+class tx_rtehtmlarea_insertsmiley extends tx_rtehtmlareaapi {
+
+	protected $extensionKey = 'rtehtmlarea';	// The key of the extension that is extending htmlArea RTE
+	protected $pluginName = 'InsertSmiley';		// The name of the plugin registered by the extension
+	protected $relativePathToLocallangFile = '';	// Path to this main locallang file of the extension relative to the extension dir.
+	protected $relativePathToSkin = 'extensions/InsertSmiley/skin/htmlarea.css';		// Path to the skin (css) file relative to the extension dir.
+	protected $htmlAreaRTE;				// Reference to the invoking object
+	protected $thisConfig;				// Reference to RTE PageTSConfig
+	protected $toolbar;				// Reference to RTE toolbar array
+	protected $LOCAL_LANG; 				// Frontend language array
+	
+	protected $pluginButtons = 'emoticon';
+	protected $convertToolbarForHtmlAreaArray = array (
+		'emoticon'	=> 'InsertSmiley',
+		);
+	
+	/**
+	 * Return JS configuration of the htmlArea plugins registered by the extension
+	 *
+	 * @param	integer		Relative id of the RTE editing area in the form
+	 *
+	 * @return string		JS configuration for registered plugins
+	 *
+	 * The returned string will be a set of JS instructions defining the configuration that will be provided to the plugin(s)
+	 * Each of the instructions should be of the form:
+	 * 	RTEarea['.$RTEcounter.']["buttons"]["button-id"]["property"] = "value";
+	 */
+	public function buildJavascriptConfiguration($RTEcounter) {
+		global $TSFE, $LANG;
+		
+		$registerRTEinJavascriptString = '';
+		return $registerRTEinJavascriptString;
+	}
+
+} // end of class
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/InsertSmiley/class.tx_rtehtmlarea_insertsmiley.php']) {
+	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/InsertSmiley/class.tx_rtehtmlarea_insertsmiley.php']);
+}
+
+?>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/extensions/InsertSmiley/class.tx_rtehtmlarea_insertsmiley.php
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/InsertSmiley/class.tx_rtehtmlarea_insertsmiley.php	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/InsertSmiley/class.tx_rtehtmlarea_insertsmiley.php	(revision 0)
@@ -0,0 +1,75 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  All rights reserved
+*
+*  This script is part of the Typo3 project. The Typo3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+/**
+ * Insert Smiley plugin for htmlArea RTE
+ *
+ * @author Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+ *
+ * TYPO3 SVN ID: $Id: class.tx_rtehtmlarea_charactermap.php 2926 2008-01-20 08:58:13Z ingmars $
+ *
+ */
+
+require_once(t3lib_extMgm::extPath('rtehtmlarea').'class.tx_rtehtmlareaapi.php');
+
+class tx_rtehtmlarea_insertsmiley extends tx_rtehtmlareaapi {
+
+	protected $extensionKey = 'rtehtmlarea';	// The key of the extension that is extending htmlArea RTE
+	protected $pluginName = 'InsertSmiley';		// The name of the plugin registered by the extension
+	protected $relativePathToLocallangFile = '';	// Path to this main locallang file of the extension relative to the extension dir.
+	protected $relativePathToSkin = 'extensions/InsertSmiley/skin/htmlarea.css';		// Path to the skin (css) file relative to the extension dir.
+	protected $htmlAreaRTE;				// Reference to the invoking object
+	protected $thisConfig;				// Reference to RTE PageTSConfig
+	protected $toolbar;				// Reference to RTE toolbar array
+	protected $LOCAL_LANG; 				// Frontend language array
+	
+	protected $pluginButtons = 'emoticon';
+	protected $convertToolbarForHtmlAreaArray = array (
+		'emoticon'	=> 'InsertSmiley',
+		);
+	
+	/**
+	 * Return JS configuration of the htmlArea plugins registered by the extension
+	 *
+	 * @param	integer		Relative id of the RTE editing area in the form
+	 *
+	 * @return string		JS configuration for registered plugins
+	 *
+	 * The returned string will be a set of JS instructions defining the configuration that will be provided to the plugin(s)
+	 * Each of the instructions should be of the form:
+	 * 	RTEarea['.$RTEcounter.']["buttons"]["button-id"]["property"] = "value";
+	 */
+	public function buildJavascriptConfiguration($RTEcounter) {
+		global $TSFE, $LANG;
+		
+		$registerRTEinJavascriptString = '';
+		return $registerRTEinJavascriptString;
+	}
+
+} // end of class
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/InsertSmiley/class.tx_rtehtmlarea_insertsmiley.php']) {
+	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/InsertSmiley/class.tx_rtehtmlarea_insertsmiley.php']);
+}
+
+?>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/extensions/InsertSmiley/skin/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/InsertSmiley/skin/htmlarea.css	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/InsertSmiley/skin/htmlarea.css	(revision 0)
@@ -0,0 +1,3 @@
+/* Selectors for the Insert Smiley plugin of htmlArea RTE */
+/* TYPO3 SVN ID: $Id $ */
+.htmlarea .toolbar .InsertSmiley {background-image:url("images/smiley.gif");}
Index: typo3/sysext/rtehtmlarea/extensions/InsertSmiley/skin/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/InsertSmiley/skin/htmlarea.css	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/InsertSmiley/skin/htmlarea.css	(revision 0)
@@ -0,0 +1,3 @@
+/* Selectors for the Insert Smiley plugin of htmlArea RTE */
+/* TYPO3 SVN ID: $Id $ */
+.htmlarea .toolbar .InsertSmiley {background-image:url("images/smiley.gif");}
Index: typo3/sysext/rtehtmlarea/extensions/InsertSmiley/skin/images/smiley.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

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

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

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

Index: typo3/sysext/rtehtmlarea/extensions/RemoveFormat/class.tx_rtehtmlarea_removeformat.php
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/RemoveFormat/class.tx_rtehtmlarea_removeformat.php	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/RemoveFormat/class.tx_rtehtmlarea_removeformat.php	(revision 0)
@@ -0,0 +1,75 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  All rights reserved
+*
+*  This script is part of the Typo3 project. The Typo3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+/**
+ * Remove Format plugin for htmlArea RTE
+ *
+ * @author Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+ *
+ * TYPO3 SVN ID: $Id: class.tx_rtehtmlarea_charactermap.php 2926 2008-01-20 08:58:13Z ingmars $
+ *
+ */
+
+require_once(t3lib_extMgm::extPath('rtehtmlarea').'class.tx_rtehtmlareaapi.php');
+
+class tx_rtehtmlarea_removeformat extends tx_rtehtmlareaapi {
+
+	protected $extensionKey = 'rtehtmlarea';	// The key of the extension that is extending htmlArea RTE
+	protected $pluginName = 'RemoveFormat';		// The name of the plugin registered by the extension
+	protected $relativePathToLocallangFile = '';	// Path to this main locallang file of the extension relative to the extension dir.
+	protected $relativePathToSkin = 'extensions/RemoveFormat/skin/htmlarea.css';		// Path to the skin (css) file relative to the extension dir.
+	protected $htmlAreaRTE;				// Reference to the invoking object
+	protected $thisConfig;				// Reference to RTE PageTSConfig
+	protected $toolbar;				// Reference to RTE toolbar array
+	protected $LOCAL_LANG; 				// Frontend language array
+	
+	protected $pluginButtons = 'removeformat';
+	protected $convertToolbarForHtmlAreaArray = array (
+		'removeformat'	=> 'RemoveFormat',
+		);
+	
+	/**
+	 * Return JS configuration of the htmlArea plugins registered by the extension
+	 *
+	 * @param	integer		Relative id of the RTE editing area in the form
+	 *
+	 * @return string		JS configuration for registered plugins
+	 *
+	 * The returned string will be a set of JS instructions defining the configuration that will be provided to the plugin(s)
+	 * Each of the instructions should be of the form:
+	 * 	RTEarea['.$RTEcounter.']["buttons"]["button-id"]["property"] = "value";
+	 */
+	public function buildJavascriptConfiguration($RTEcounter) {
+		global $TSFE, $LANG;
+		
+		$registerRTEinJavascriptString = '';
+		return $registerRTEinJavascriptString;
+	}
+
+} // end of class
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/RemoveFormat/class.tx_rtehtmlarea_removeformat.php']) {
+	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/RemoveFormat/class.tx_rtehtmlarea_removeformat.php']);
+}
+
+?>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/extensions/RemoveFormat/class.tx_rtehtmlarea_removeformat.php
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/RemoveFormat/class.tx_rtehtmlarea_removeformat.php	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/RemoveFormat/class.tx_rtehtmlarea_removeformat.php	(revision 0)
@@ -0,0 +1,75 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  All rights reserved
+*
+*  This script is part of the Typo3 project. The Typo3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+/**
+ * Remove Format plugin for htmlArea RTE
+ *
+ * @author Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+ *
+ * TYPO3 SVN ID: $Id: class.tx_rtehtmlarea_charactermap.php 2926 2008-01-20 08:58:13Z ingmars $
+ *
+ */
+
+require_once(t3lib_extMgm::extPath('rtehtmlarea').'class.tx_rtehtmlareaapi.php');
+
+class tx_rtehtmlarea_removeformat extends tx_rtehtmlareaapi {
+
+	protected $extensionKey = 'rtehtmlarea';	// The key of the extension that is extending htmlArea RTE
+	protected $pluginName = 'RemoveFormat';		// The name of the plugin registered by the extension
+	protected $relativePathToLocallangFile = '';	// Path to this main locallang file of the extension relative to the extension dir.
+	protected $relativePathToSkin = 'extensions/RemoveFormat/skin/htmlarea.css';		// Path to the skin (css) file relative to the extension dir.
+	protected $htmlAreaRTE;				// Reference to the invoking object
+	protected $thisConfig;				// Reference to RTE PageTSConfig
+	protected $toolbar;				// Reference to RTE toolbar array
+	protected $LOCAL_LANG; 				// Frontend language array
+	
+	protected $pluginButtons = 'removeformat';
+	protected $convertToolbarForHtmlAreaArray = array (
+		'removeformat'	=> 'RemoveFormat',
+		);
+	
+	/**
+	 * Return JS configuration of the htmlArea plugins registered by the extension
+	 *
+	 * @param	integer		Relative id of the RTE editing area in the form
+	 *
+	 * @return string		JS configuration for registered plugins
+	 *
+	 * The returned string will be a set of JS instructions defining the configuration that will be provided to the plugin(s)
+	 * Each of the instructions should be of the form:
+	 * 	RTEarea['.$RTEcounter.']["buttons"]["button-id"]["property"] = "value";
+	 */
+	public function buildJavascriptConfiguration($RTEcounter) {
+		global $TSFE, $LANG;
+		
+		$registerRTEinJavascriptString = '';
+		return $registerRTEinJavascriptString;
+	}
+
+} // end of class
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/RemoveFormat/class.tx_rtehtmlarea_removeformat.php']) {
+	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/RemoveFormat/class.tx_rtehtmlarea_removeformat.php']);
+}
+
+?>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/extensions/RemoveFormat/skin/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/RemoveFormat/skin/htmlarea.css	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/RemoveFormat/skin/htmlarea.css	(revision 0)
@@ -0,0 +1,4 @@
+/* Selectors for the RemoveFormat plugin of htmlArea RTE */
+/* TYPO3 SVN ID: $Id $ */
+.htmlarea .toolbar .RemoveFormat {background-image:url("images/clean.gif");}
+
Index: typo3/sysext/rtehtmlarea/extensions/RemoveFormat/skin/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/RemoveFormat/skin/htmlarea.css	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/RemoveFormat/skin/htmlarea.css	(revision 0)
@@ -0,0 +1,4 @@
+/* Selectors for the RemoveFormat plugin of htmlArea RTE */
+/* TYPO3 SVN ID: $Id $ */
+.htmlarea .toolbar .RemoveFormat {background-image:url("images/clean.gif");}
+
Index: typo3/sysext/rtehtmlarea/extensions/RemoveFormat/skin/images/clean.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

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

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

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

Index: typo3/sysext/rtehtmlarea/extensions/SpellChecker/class.tx_rtehtmlarea_spellchecker.php
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/SpellChecker/class.tx_rtehtmlarea_spellchecker.php	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/SpellChecker/class.tx_rtehtmlarea_spellchecker.php	(revision 0)
@@ -0,0 +1,106 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  All rights reserved
+*
+*  This script is part of the Typo3 project. The Typo3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+/**
+ * Spell Checker plugin for htmlArea RTE
+ *
+ * @author Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+ *
+ * TYPO3 SVN ID: $Id: class.tx_rtehtmlarea_charactermap.php 2926 2008-01-20 08:58:13Z ingmars $
+ *
+ */
+
+require_once(t3lib_extMgm::extPath('rtehtmlarea').'class.tx_rtehtmlareaapi.php');
+
+class tx_rtehtmlarea_spellchecker extends tx_rtehtmlareaapi {
+
+	protected $extensionKey = 'rtehtmlarea';	// The key of the extension that is extending htmlArea RTE
+	protected $pluginName = 'SpellChecker';		// The name of the plugin registered by the extension
+	protected $relativePathToLocallangFile = '';	// Path to this main locallang file of the extension relative to the extension dir.
+	protected $relativePathToSkin = 'extensions/SpellChecker/skin/htmlarea.css';		// Path to the skin (css) file relative to the extension dir.
+	protected $htmlAreaRTE;				// Reference to the invoking object
+	protected $thisConfig;				// Reference to RTE PageTSConfig
+	protected $toolbar;				// Reference to RTE toolbar array
+	protected $LOCAL_LANG; 				// Frontend language array
+	
+	protected $pluginButtons = 'spellcheck';
+	protected $convertToolbarForHtmlAreaArray = array (
+		'spellcheck'	=> 'SpellCheck',
+		);
+	private $spellCheckerModes = array( 'ultra', 'fast', 'normal', 'bad-spellers');
+	
+	public function main($parentObject) {
+		global $TYPO3_CONF_VARS;
+		
+		return parent::main($parentObject) && t3lib_extMgm::isLoaded('static_info_tables') && !in_array($this->htmlAreaRTE->language, t3lib_div::trimExplode(',', $TYPO3_CONF_VARS['EXTCONF'][$this->htmlAreaRTE->ID]['noSpellCheckLanguages']));
+	}
+	
+	/**
+	 * Return JS configuration of the htmlArea plugins registered by the extension
+	 *
+	 * @param	integer		Relative id of the RTE editing area in the form
+	 *
+	 * @return string		JS configuration for registered plugins
+	 *
+	 * The returned string will be a set of JS instructions defining the configuration that will be provided to the plugin(s)
+	 * Each of the instructions should be of the form:
+	 * 	RTEarea['.$RTEcounter.']["buttons"]["button-id"]["property"] = "value";
+	 */
+	public function buildJavascriptConfiguration($RTEcounter) {
+		global $TSFE, $LANG, $TYPO3_CONF_VARS, $BE_USER;
+		
+			// Set the SpellChecker mode
+		$spellCheckerMode = isset($BE_USER->userTS['options.']['HTMLAreaPspellMode']) ? trim($BE_USER->userTS['options.']['HTMLAreaPspellMode']) : 'normal';
+		if (!in_array($spellCheckerMode, $this->spellCheckerModes)) {
+			$spellCheckerMode = 'normal';
+		}
+			// Set the use of personal dictionary
+		$enablePersonalDicts = $this->thisConfig['enablePersonalDicts'] ? ((isset($BE_USER->userTS['options.']['enablePersonalDicts']) && $BE_USER->userTS['options.']['enablePersonalDicts']) ? true : false) : false;
+		if (ini_get('safe_mode') || $this->htmlAreaRTE->is_FE()) {
+			$enablePersonalDicts = false;
+		}
+		
+		$registerRTEinJavascriptString = '';
+		$button = 'spellcheck';
+		if (in_array($button, $this->toolbar)) {
+			if (!is_array( $this->thisConfig['buttons.']) || !is_array( $this->thisConfig['buttons.'][$button.'.'])) {
+					$registerRTEinJavascriptString .= '
+			RTEarea['.$RTEcounter.'].buttons.'. $button .' = new Object();';
+			}
+			$registerRTEinJavascriptString .= '
+			RTEarea['.$RTEcounter.'].buttons.'. $button .'.contentTypo3Language = "' . $this->htmlAreaRTE->contentTypo3Language .'";
+			RTEarea['.$RTEcounter.'].buttons.'. $button .'.contentISOLanguage = "' . $this->htmlAreaRTE->contentISOLanguage .'";
+			RTEarea['.$RTEcounter.'].buttons.'. $button .'.contentCharset = "' . $this->htmlAreaRTE->contentCharset .'";
+			RTEarea['.$RTEcounter.'].buttons.'. $button .'.spellCheckerMode = "' . $spellCheckerMode .'";
+			RTEarea['.$RTEcounter.'].buttons.'. $button .'.enablePersonalDicts = ' . ($enablePersonalDicts ? 'true' : 'false') .';';
+		}
+		return $registerRTEinJavascriptString;
+	}
+
+} // end of class
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/SpellChecker/class.tx_rtehtmlarea_spellchecker.php']) {
+	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/SpellChecker/class.tx_rtehtmlarea_spellchecker.php']);
+}
+
+?>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/extensions/SpellChecker/class.tx_rtehtmlarea_spellchecker.php
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/SpellChecker/class.tx_rtehtmlarea_spellchecker.php	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/SpellChecker/class.tx_rtehtmlarea_spellchecker.php	(revision 0)
@@ -0,0 +1,106 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  All rights reserved
+*
+*  This script is part of the Typo3 project. The Typo3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+/**
+ * Spell Checker plugin for htmlArea RTE
+ *
+ * @author Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+ *
+ * TYPO3 SVN ID: $Id: class.tx_rtehtmlarea_charactermap.php 2926 2008-01-20 08:58:13Z ingmars $
+ *
+ */
+
+require_once(t3lib_extMgm::extPath('rtehtmlarea').'class.tx_rtehtmlareaapi.php');
+
+class tx_rtehtmlarea_spellchecker extends tx_rtehtmlareaapi {
+
+	protected $extensionKey = 'rtehtmlarea';	// The key of the extension that is extending htmlArea RTE
+	protected $pluginName = 'SpellChecker';		// The name of the plugin registered by the extension
+	protected $relativePathToLocallangFile = '';	// Path to this main locallang file of the extension relative to the extension dir.
+	protected $relativePathToSkin = 'extensions/SpellChecker/skin/htmlarea.css';		// Path to the skin (css) file relative to the extension dir.
+	protected $htmlAreaRTE;				// Reference to the invoking object
+	protected $thisConfig;				// Reference to RTE PageTSConfig
+	protected $toolbar;				// Reference to RTE toolbar array
+	protected $LOCAL_LANG; 				// Frontend language array
+	
+	protected $pluginButtons = 'spellcheck';
+	protected $convertToolbarForHtmlAreaArray = array (
+		'spellcheck'	=> 'SpellCheck',
+		);
+	private $spellCheckerModes = array( 'ultra', 'fast', 'normal', 'bad-spellers');
+	
+	public function main($parentObject) {
+		global $TYPO3_CONF_VARS;
+		
+		return parent::main($parentObject) && t3lib_extMgm::isLoaded('static_info_tables') && !in_array($this->htmlAreaRTE->language, t3lib_div::trimExplode(',', $TYPO3_CONF_VARS['EXTCONF'][$this->htmlAreaRTE->ID]['noSpellCheckLanguages']));
+	}
+	
+	/**
+	 * Return JS configuration of the htmlArea plugins registered by the extension
+	 *
+	 * @param	integer		Relative id of the RTE editing area in the form
+	 *
+	 * @return string		JS configuration for registered plugins
+	 *
+	 * The returned string will be a set of JS instructions defining the configuration that will be provided to the plugin(s)
+	 * Each of the instructions should be of the form:
+	 * 	RTEarea['.$RTEcounter.']["buttons"]["button-id"]["property"] = "value";
+	 */
+	public function buildJavascriptConfiguration($RTEcounter) {
+		global $TSFE, $LANG, $TYPO3_CONF_VARS, $BE_USER;
+		
+			// Set the SpellChecker mode
+		$spellCheckerMode = isset($BE_USER->userTS['options.']['HTMLAreaPspellMode']) ? trim($BE_USER->userTS['options.']['HTMLAreaPspellMode']) : 'normal';
+		if (!in_array($spellCheckerMode, $this->spellCheckerModes)) {
+			$spellCheckerMode = 'normal';
+		}
+			// Set the use of personal dictionary
+		$enablePersonalDicts = $this->thisConfig['enablePersonalDicts'] ? ((isset($BE_USER->userTS['options.']['enablePersonalDicts']) && $BE_USER->userTS['options.']['enablePersonalDicts']) ? true : false) : false;
+		if (ini_get('safe_mode') || $this->htmlAreaRTE->is_FE()) {
+			$enablePersonalDicts = false;
+		}
+		
+		$registerRTEinJavascriptString = '';
+		$button = 'spellcheck';
+		if (in_array($button, $this->toolbar)) {
+			if (!is_array( $this->thisConfig['buttons.']) || !is_array( $this->thisConfig['buttons.'][$button.'.'])) {
+					$registerRTEinJavascriptString .= '
+			RTEarea['.$RTEcounter.'].buttons.'. $button .' = new Object();';
+			}
+			$registerRTEinJavascriptString .= '
+			RTEarea['.$RTEcounter.'].buttons.'. $button .'.contentTypo3Language = "' . $this->htmlAreaRTE->contentTypo3Language .'";
+			RTEarea['.$RTEcounter.'].buttons.'. $button .'.contentISOLanguage = "' . $this->htmlAreaRTE->contentISOLanguage .'";
+			RTEarea['.$RTEcounter.'].buttons.'. $button .'.contentCharset = "' . $this->htmlAreaRTE->contentCharset .'";
+			RTEarea['.$RTEcounter.'].buttons.'. $button .'.spellCheckerMode = "' . $spellCheckerMode .'";
+			RTEarea['.$RTEcounter.'].buttons.'. $button .'.enablePersonalDicts = ' . ($enablePersonalDicts ? 'true' : 'false') .';';
+		}
+		return $registerRTEinJavascriptString;
+	}
+
+} // end of class
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/SpellChecker/class.tx_rtehtmlarea_spellchecker.php']) {
+	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/SpellChecker/class.tx_rtehtmlarea_spellchecker.php']);
+}
+
+?>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/extensions/SpellChecker/skin/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/SpellChecker/skin/htmlarea.css	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/SpellChecker/skin/htmlarea.css	(revision 0)
@@ -0,0 +1,3 @@
+/* Selectors for the Spell Checker plugin of htmlArea RTE */
+/* TYPO3 SVN ID: $Id $ */
+.htmlarea .toolbar .SpellCheck {background-image:url("images/spell-check.gif");}
Index: typo3/sysext/rtehtmlarea/extensions/SpellChecker/skin/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/SpellChecker/skin/htmlarea.css	(revision 0)
+++ typo3/sysext/rtehtmlarea/extensions/SpellChecker/skin/htmlarea.css	(revision 0)
@@ -0,0 +1,3 @@
+/* Selectors for the Spell Checker plugin of htmlArea RTE */
+/* TYPO3 SVN ID: $Id $ */
+.htmlarea .toolbar .SpellCheck {background-image:url("images/spell-check.gif");}
Index: typo3/sysext/rtehtmlarea/extensions/SpellChecker/skin/images/spell-check.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

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

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

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

Index: typo3/sysext/rtehtmlarea/htmlarea/htmlarea.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/htmlarea.js	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/htmlarea.js	(working copy)
@@ -304,7 +304,6 @@
 		HtmlMode:		["Toggle HTML Source", "ed_html.gif", true, function(editor) {editor.execCommand("HtmlMode");}],
 		SelectAll:		["SelectAll", "", true, function(editor) {editor.execCommand("SelectAll");}, null, true, false],
 		SplitBlock:		["Toggle Container Block", "ed_splitblock.gif", false, function(editor) {editor.execCommand("SplitBlock");}],
-		About:			["About this editor", "ed_about.gif", true, function(editor) {editor.execCommand("About");}],
 		Undo:			["Undo the last action", "ed_undo.gif", false, function(editor) {editor.execCommand("Undo");}],
 		Redo:			["Redo the last action", "ed_redo.gif", false, function(editor) {editor.execCommand("Redo");}],
 		Cut:			["Cut selection", "ed_cut.gif", false, function(editor) {editor.execCommand("Cut");}],
@@ -2055,7 +2054,6 @@
 			else this._doc.execCommand(cmdID,UI,param);
 		break;
 	    case "InsertTable"	: this._insertTable(); break;
-	    case "About"	: this._popupDialog("about.html", null, this, 475, 350); break;
 	    case "CleanWord"	: HTMLArea._wordClean(this, this._doc.body); break;
 	    case "Cut"		:
 	    case "Copy"		:
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/about-editor.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/about-editor.js	(revision 0)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/about-editor.js	(revision 0)
@@ -0,0 +1,93 @@
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*  A copy is found in the textfile GPL.txt and important notices to the license
+*  from the author is found in LICENSE.txt distributed with these scripts.
+*
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This script is a modified version of a script published under the htmlArea License.
+*  A copy of the htmlArea License may be found in the textfile HTMLAREA_LICENSE.txt.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+/*
+ * Character Map Plugin for TYPO3 htmlArea RTE
+ *
+ * TYPO3 CVS ID: $Id: $
+ */
+AboutEditor = HTMLArea.Plugin.extend({
+		
+	constructor : function(editor, pluginName) {
+		this.base(editor, pluginName);
+	},
+	
+	/*
+	 * This function gets called by the class constructor
+	 */
+	configurePlugin : function(editor) {
+		
+		/*
+		 * Registering plugin "About" information
+		 */
+		var pluginInformation = {
+			version		: "1.0",
+			developer	: "Stanislas Rolland",
+			developerUrl	: "http://www.fructifor.ca/",
+			copyrightOwner	: "Stanislas Rolland",
+			sponsor		: "Fructifor Inc.",
+			sponsorUrl	: "http://www.fructifor.ca/",
+			license		: "GPL"
+		};
+		this.registerPluginInformation(pluginInformation);
+		
+		/*
+		 * Registering the button
+		 */
+		var buttonId = "About";
+		var buttonConfiguration = {
+			id		: buttonId,
+			tooltip		: this.localize(buttonId.toLowerCase()),
+			action		: "onButtonPress",
+			textMode	: true,
+			dialog		: true
+		};
+		this.registerButton(buttonConfiguration);
+		
+		return true;
+	 },
+	 
+	/*
+	 * This function gets called when the button was pressed.
+	 *
+	 * @param	object		editor: the editor instance
+	 * @param	string		id: the button id or the key
+	 *
+	 * @return	boolean		false if action is completed
+	 */
+	onButtonPress : function(editor, id) {
+		
+					// Could be a button or its hotkey
+		var buttonId = this.translateHotKey(id);
+		buttonId = buttonId ? buttonId : id;
+		
+		this.dialog = this.openDialog("About", this.makeUrlFromPopupName("about"), null, null, {width:475, height:350});
+		return false;
+	}
+});
+
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/locallang.xml
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/locallang.xml	(revision 0)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/locallang.xml	(revision 0)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<T3locallang>
+	<meta type="array">
+		<description>Labels for About Editor plugin of htmlArea RTE</description>
+		<type>module</type>
+	</meta>
+	<data type="array">
+		<languageKey index="default" type="array">
+		</languageKey>
+	</data>
+	<orig_hash type="array">
+		<languageKey index="default" type="array">
+		</languageKey>
+	</orig_hash>
+	<orig_text type="array">
+		<languageKey index="default" type="array">
+		</languageKey>
+	</orig_text>
+</T3locallang>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/about-editor.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/about-editor.js	(revision 0)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/about-editor.js	(revision 0)
@@ -0,0 +1,93 @@
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*  A copy is found in the textfile GPL.txt and important notices to the license
+*  from the author is found in LICENSE.txt distributed with these scripts.
+*
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This script is a modified version of a script published under the htmlArea License.
+*  A copy of the htmlArea License may be found in the textfile HTMLAREA_LICENSE.txt.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+/*
+ * Character Map Plugin for TYPO3 htmlArea RTE
+ *
+ * TYPO3 CVS ID: $Id: $
+ */
+AboutEditor = HTMLArea.Plugin.extend({
+		
+	constructor : function(editor, pluginName) {
+		this.base(editor, pluginName);
+	},
+	
+	/*
+	 * This function gets called by the class constructor
+	 */
+	configurePlugin : function(editor) {
+		
+		/*
+		 * Registering plugin "About" information
+		 */
+		var pluginInformation = {
+			version		: "1.0",
+			developer	: "Stanislas Rolland",
+			developerUrl	: "http://www.fructifor.ca/",
+			copyrightOwner	: "Stanislas Rolland",
+			sponsor		: "Fructifor Inc.",
+			sponsorUrl	: "http://www.fructifor.ca/",
+			license		: "GPL"
+		};
+		this.registerPluginInformation(pluginInformation);
+		
+		/*
+		 * Registering the button
+		 */
+		var buttonId = "About";
+		var buttonConfiguration = {
+			id		: buttonId,
+			tooltip		: this.localize(buttonId.toLowerCase()),
+			action		: "onButtonPress",
+			textMode	: true,
+			dialog		: true
+		};
+		this.registerButton(buttonConfiguration);
+		
+		return true;
+	 },
+	 
+	/*
+	 * This function gets called when the button was pressed.
+	 *
+	 * @param	object		editor: the editor instance
+	 * @param	string		id: the button id or the key
+	 *
+	 * @return	boolean		false if action is completed
+	 */
+	onButtonPress : function(editor, id) {
+		
+					// Could be a button or its hotkey
+		var buttonId = this.translateHotKey(id);
+		buttonId = buttonId ? buttonId : id;
+		
+		this.dialog = this.openDialog("About", this.makeUrlFromPopupName("about"), null, null, {width:475, height:350});
+		return false;
+	}
+});
+
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/locallang.xml
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/locallang.xml	(revision 0)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/locallang.xml	(revision 0)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<T3locallang>
+	<meta type="array">
+		<description>Labels for About Editor plugin of htmlArea RTE</description>
+		<type>module</type>
+	</meta>
+	<data type="array">
+		<languageKey index="default" type="array">
+		</languageKey>
+	</data>
+	<orig_hash type="array">
+		<languageKey index="default" type="array">
+		</languageKey>
+	</orig_hash>
+	<orig_text type="array">
+		<languageKey index="default" type="array">
+		</languageKey>
+	</orig_text>
+</T3locallang>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/popups/about.html
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/popups/about.html	(revision 0)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/popups/about.html	(revision 0)
@@ -0,0 +1,186 @@
+<html class="popupwin">
+<!--
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2002-2004, interactivetools.com, inc.
+*  (c) 2003-2004 dynarch.com
+*  (c) 2004-2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*  A copy is found in the textfile GPL.txt and important notices to the license
+*  from the author is found in LICENSE.txt distributed with these scripts.
+*
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This script is a modified version of a script published under the htmlArea License.
+*  A copy of the htmlArea License may be found in the textfile HTMLAREA_LICENSE.txt.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+/*
+ * About window for TYPO3 htmlArea RTE
+ *
+ * TYPO3 CVS ID: $Id: about.html 2663 2007-11-05 09:22:23Z ingmars $
+ */
+ -->
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta http-equiv="Content-Style-Type" content="text/css" />
+	<title>About HTMLArea</title>
+	<script type="text/javascript">
+		/*<![CDATA[*/
+		<!--
+		var HTMLArea = window.opener.HTMLArea;
+		var dialog = HTMLArea.Dialog.AboutEditor;
+		
+		function Init() {
+			initDocument();
+			dialog.initialize();
+		}
+		
+		var TABS = [];
+		var CURRENT_TAB = 0;
+		var CONTENT_HEIGHT_DIFF = 0;
+		var CONTENT_WIDTH_DIFF = 0;
+		
+		function selectTab(idx) {
+			var ct = TABS[CURRENT_TAB];
+			HTMLArea._removeClass(ct, "tab-current");
+			ct = TABS[CURRENT_TAB = idx];
+			HTMLArea._addClass(ct, "tab-current");
+			for (var i = TABS.length; --i >= 0;) {
+				var area = document.getElementById("tab-area-" + i);
+				if (CURRENT_TAB == i) area.style.display = "block";
+					else area.style.display = "none";
+			}
+			document.body.style.visibility = "hidden";
+			document.body.style.visibility = "visible";
+			document.cookie = "HTMLAREA-ABOUT-TAB=" + idx;
+		}
+		
+		function initDocument() {
+			var editor = dialog.plugin.editor;
+			var version = document.getElementById("version");
+			version.innerHTML = "htmlArea RTE v " +  window.opener.RTEarea[0]["version"];
+			var plugins = document.getElementById("plugins");
+			var j = 0, i, info;
+			var html = "<table width='99%' cellpadding='0' style='border-collapse: collapse; border: 1px solid #8b8;'>" +
+				"<thead><tr>" +
+				"<td>Name</td>" +
+				"<td>Developer</td>" +
+				"<td>Sponsored by</td>" +
+				"</tr></thead><tbody>";
+			for (i in editor.plugins) {
+				info = editor.plugins[i];
+				html += "<tr><td>" + info.name + " v" + info.version + "</td>" + 
+					"<td><a href='" + info.developer_url + "' target='_blank' >" +
+					info.developer + "</a></td>" +
+					"<td><a href='" + info.sponsor_url + "' target='_blank' >" +
+					info.sponsor + "</a></td>" +
+					"</tr>";
+				++j;
+			}
+			
+			if (j) {
+				html += "</tbody></table>";
+				plugins.innerHTML = "<p><span>The following plugins have been loaded.</span></p>" + html;
+			} else {
+				plugins.innerHTML = "<p><span>No plugins have been loaded.</span></p>";
+			}
+			
+			plugins.innerHTML += "<p><span>User agent reports:</span><br/>" + navigator.userAgent + "</p>";
+			
+			var content = document.getElementById("tab-areas-content");
+			if (window.innerHeight) {
+				CONTENT_HEIGHT_DIFF = window.innerHeight - 250;
+				CONTENT_WIDTH_DIFF = window.innerWidth - content.offsetWidth;
+			} else {
+				CONTENT_HEIGHT_DIFF = document.body.offsetHeight - 250;
+				CONTENT_WIDTH_DIFF = document.body.offsetWidth - 400;
+			}
+			window.onresize();
+			
+			var bar = document.getElementById("tabbar");
+			j = 0;
+			for (i = bar.firstChild; i; i = i.nextSibling) {
+				if(i.nodeType == 1) {
+					TABS.push(i);
+					i.__msh_tab = j;
+					i.onmousedown = function(ev) { selectTab(this.__msh_tab); HTMLArea._stopEvent(ev || window.event); };
+					var area = document.getElementById("tab-area-" + j);
+					if (/tab-current/.test(i.className)) {
+						CURRENT_TAB = j;
+						area.style.display = "block";
+					} else {
+						area.style.display = "none";
+					}
+					++j;
+				}
+			}
+			if (document.cookie.match(/HTMLAREA-ABOUT-TAB=([0-1]+)/)) selectTab(RegExp.$1);
+		}
+		function onCancel() {
+			dialog.close();
+			return false;
+		}
+		
+		window.onresize = function() {
+			var content = document.getElementById("tab-areas-content");
+			if (window.innerHeight) {
+				content.style.height = (window.innerHeight - CONTENT_HEIGHT_DIFF) + "px";
+				content.style.width = (window.innerWidth - CONTENT_WIDTH_DIFF) + "px";
+			} else {
+				content.style.height = (document.body.offsetHeight - CONTENT_HEIGHT_DIFF) + "px";
+				//content.style.width = (document.body.offsetWidth - CONTENT_WIDTH_DIFF) + "px";
+			}
+		};
+		// -->
+		/*]]>*/
+	</script>
+</head>
+<body class="popupwin" onload="Init();">
+<div id="content">
+	<div class="title" style="cursor: pointer;" onclick="window.open('http://typo3.org/extensions/repository/search/rtehtmlarea/');">About HTMLArea</div>
+	<div style="overflow: auto; height: 250px;" id="tab-areas-content">
+		<div id="tab-areas">
+			<div id="tab-area-0">
+				<h1 id="version">htmlArea RTE v 1.1.3</h1>
+				<p><span>free_editor</span></p>
+				<p><span>Mozilla_or_IE</span></p>
+				<p><span>product_documentation</span>&nbsp;<a href="http://typo3.org/extensions/repository/search/rtehtmlarea/" target="_blank">typo3.org</a></p>
+				<p style="text-align: center;">
+					<br />
+					&copy; 2002-2004 <a href="http://interactivetools.com" target="_blank">interactivetools.com, inc.</a><br />
+					&copy; 2003-2004 <a href="http://dynarch.com" target="_blank">dynarch.com LLC.</a><br />
+					&copy; 2004-2008 <a href="http://www.fructifor.ca" target="_blank">Stanislas Rolland</a><br />
+					<span>All rights reserved.</span>
+				</p>
+			</div>
+			<div id="tab-area-1">
+				<h1>Plugins</h1>
+				<div id="plugins"></div>
+			</div>
+		</div>
+	</div>
+	<div class="buttons">
+		<div id="tabbar">
+			<div class="tab tab-current">About</div>
+			<div class="tab">Plugins</div>
+		</div>
+		<button type="button" onclick="onCancel();">Close</button>
+	</div>
+</div>
+</body></html>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/popups/about.html
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/popups/about.html	(revision 0)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/AboutEditor/popups/about.html	(revision 0)
@@ -0,0 +1,186 @@
+<html class="popupwin">
+<!--
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2002-2004, interactivetools.com, inc.
+*  (c) 2003-2004 dynarch.com
+*  (c) 2004-2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*  A copy is found in the textfile GPL.txt and important notices to the license
+*  from the author is found in LICENSE.txt distributed with these scripts.
+*
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This script is a modified version of a script published under the htmlArea License.
+*  A copy of the htmlArea License may be found in the textfile HTMLAREA_LICENSE.txt.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+/*
+ * About window for TYPO3 htmlArea RTE
+ *
+ * TYPO3 CVS ID: $Id: about.html 2663 2007-11-05 09:22:23Z ingmars $
+ */
+ -->
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta http-equiv="Content-Style-Type" content="text/css" />
+	<title>About HTMLArea</title>
+	<script type="text/javascript">
+		/*<![CDATA[*/
+		<!--
+		var HTMLArea = window.opener.HTMLArea;
+		var dialog = HTMLArea.Dialog.AboutEditor;
+		
+		function Init() {
+			initDocument();
+			dialog.initialize();
+		}
+		
+		var TABS = [];
+		var CURRENT_TAB = 0;
+		var CONTENT_HEIGHT_DIFF = 0;
+		var CONTENT_WIDTH_DIFF = 0;
+		
+		function selectTab(idx) {
+			var ct = TABS[CURRENT_TAB];
+			HTMLArea._removeClass(ct, "tab-current");
+			ct = TABS[CURRENT_TAB = idx];
+			HTMLArea._addClass(ct, "tab-current");
+			for (var i = TABS.length; --i >= 0;) {
+				var area = document.getElementById("tab-area-" + i);
+				if (CURRENT_TAB == i) area.style.display = "block";
+					else area.style.display = "none";
+			}
+			document.body.style.visibility = "hidden";
+			document.body.style.visibility = "visible";
+			document.cookie = "HTMLAREA-ABOUT-TAB=" + idx;
+		}
+		
+		function initDocument() {
+			var editor = dialog.plugin.editor;
+			var version = document.getElementById("version");
+			version.innerHTML = "htmlArea RTE v " +  window.opener.RTEarea[0]["version"];
+			var plugins = document.getElementById("plugins");
+			var j = 0, i, info;
+			var html = "<table width='99%' cellpadding='0' style='border-collapse: collapse; border: 1px solid #8b8;'>" +
+				"<thead><tr>" +
+				"<td>Name</td>" +
+				"<td>Developer</td>" +
+				"<td>Sponsored by</td>" +
+				"</tr></thead><tbody>";
+			for (i in editor.plugins) {
+				info = editor.plugins[i];
+				html += "<tr><td>" + info.name + " v" + info.version + "</td>" + 
+					"<td><a href='" + info.developer_url + "' target='_blank' >" +
+					info.developer + "</a></td>" +
+					"<td><a href='" + info.sponsor_url + "' target='_blank' >" +
+					info.sponsor + "</a></td>" +
+					"</tr>";
+				++j;
+			}
+			
+			if (j) {
+				html += "</tbody></table>";
+				plugins.innerHTML = "<p><span>The following plugins have been loaded.</span></p>" + html;
+			} else {
+				plugins.innerHTML = "<p><span>No plugins have been loaded.</span></p>";
+			}
+			
+			plugins.innerHTML += "<p><span>User agent reports:</span><br/>" + navigator.userAgent + "</p>";
+			
+			var content = document.getElementById("tab-areas-content");
+			if (window.innerHeight) {
+				CONTENT_HEIGHT_DIFF = window.innerHeight - 250;
+				CONTENT_WIDTH_DIFF = window.innerWidth - content.offsetWidth;
+			} else {
+				CONTENT_HEIGHT_DIFF = document.body.offsetHeight - 250;
+				CONTENT_WIDTH_DIFF = document.body.offsetWidth - 400;
+			}
+			window.onresize();
+			
+			var bar = document.getElementById("tabbar");
+			j = 0;
+			for (i = bar.firstChild; i; i = i.nextSibling) {
+				if(i.nodeType == 1) {
+					TABS.push(i);
+					i.__msh_tab = j;
+					i.onmousedown = function(ev) { selectTab(this.__msh_tab); HTMLArea._stopEvent(ev || window.event); };
+					var area = document.getElementById("tab-area-" + j);
+					if (/tab-current/.test(i.className)) {
+						CURRENT_TAB = j;
+						area.style.display = "block";
+					} else {
+						area.style.display = "none";
+					}
+					++j;
+				}
+			}
+			if (document.cookie.match(/HTMLAREA-ABOUT-TAB=([0-1]+)/)) selectTab(RegExp.$1);
+		}
+		function onCancel() {
+			dialog.close();
+			return false;
+		}
+		
+		window.onresize = function() {
+			var content = document.getElementById("tab-areas-content");
+			if (window.innerHeight) {
+				content.style.height = (window.innerHeight - CONTENT_HEIGHT_DIFF) + "px";
+				content.style.width = (window.innerWidth - CONTENT_WIDTH_DIFF) + "px";
+			} else {
+				content.style.height = (document.body.offsetHeight - CONTENT_HEIGHT_DIFF) + "px";
+				//content.style.width = (document.body.offsetWidth - CONTENT_WIDTH_DIFF) + "px";
+			}
+		};
+		// -->
+		/*]]>*/
+	</script>
+</head>
+<body class="popupwin" onload="Init();">
+<div id="content">
+	<div class="title" style="cursor: pointer;" onclick="window.open('http://typo3.org/extensions/repository/search/rtehtmlarea/');">About HTMLArea</div>
+	<div style="overflow: auto; height: 250px;" id="tab-areas-content">
+		<div id="tab-areas">
+			<div id="tab-area-0">
+				<h1 id="version">htmlArea RTE v 1.1.3</h1>
+				<p><span>free_editor</span></p>
+				<p><span>Mozilla_or_IE</span></p>
+				<p><span>product_documentation</span>&nbsp;<a href="http://typo3.org/extensions/repository/search/rtehtmlarea/" target="_blank">typo3.org</a></p>
+				<p style="text-align: center;">
+					<br />
+					&copy; 2002-2004 <a href="http://interactivetools.com" target="_blank">interactivetools.com, inc.</a><br />
+					&copy; 2003-2004 <a href="http://dynarch.com" target="_blank">dynarch.com LLC.</a><br />
+					&copy; 2004-2008 <a href="http://www.fructifor.ca" target="_blank">Stanislas Rolland</a><br />
+					<span>All rights reserved.</span>
+				</p>
+			</div>
+			<div id="tab-area-1">
+				<h1>Plugins</h1>
+				<div id="plugins"></div>
+			</div>
+		</div>
+	</div>
+	<div class="buttons">
+		<div id="tabbar">
+			<div class="tab tab-current">About</div>
+			<div class="tab">Plugins</div>
+		</div>
+		<button type="button" onclick="onCancel();">Close</button>
+	</div>
+</div>
+</body></html>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/Acronym/locallang.xml
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/Acronym/locallang.xml	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/Acronym/locallang.xml	(working copy)
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- TYPO3 SVN ID: $Id:$ -->
 <T3locallang>
 	<meta type="array">
 		<description>Labels for Acronym plugin of htmlArea RTE</description>
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/CharacterMap/popups/select_character.html
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/CharacterMap/popups/select_character.html	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/CharacterMap/popups/select_character.html	(working copy)
@@ -1,3 +1,4 @@
+<html class="popupwin">
 <!--
 /***************************************************************
 *  Copyright notice
@@ -4,7 +5,7 @@
 *
 *  (c) 2004 Bernhard Pfeifer novocaine@gmx.net
 *  (c) 2004 systemconcept.de. Authored by Holger Hees based on HTMLArea XTD 1.5 (http://mosforge.net/projects/htmlarea3xtd/).
-*  (c) 2005-2007 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  (c) 2005-2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -35,14 +36,13 @@
  * TYPO3 CVS ID: $Id$
  */
 -->
-<html class="popupwin">
 <head>
 	<title>Insert special character</title>
 	<meta http-equiv="Content-Style-Type" content="text/css" />
 	<script type="text/javascript">
 		/*<![CDATA[*/
 		<!--
-		var dialog = window.opener.HTMLArea.Dialog["CharacterMap"];
+		var dialog = window.opener.HTMLArea.Dialog.CharacterMap;
 		function Init() {
 			dialog.initialize();
 			var character = '';
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/FindReplace/find-replace.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/FindReplace/find-replace.js	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/FindReplace/find-replace.js	(working copy)
@@ -2,7 +2,7 @@
 *  Copyright notice
 *
 *  (c) 2004 Cau guanabara <caugb@ibest.com.br>
-*  (c) 2005, 2006 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  (c) 2005-2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -32,49 +32,72 @@
  *
  * TYPO3 CVS ID: $Id$
  */
-
-FindReplace = function(editor) {
-	this.editor = editor;
-	var cfg = editor.config;
-	var actionHandlerFunctRef = FindReplace.actionHandler(this);
-
-	cfg.registerButton("FindReplace",
-		FindReplace_langArray["Find and Replace"],
-		editor.imgURL("ed_find.gif", "FindReplace"),
-		false,
-		actionHandlerFunctRef
-	);
+FindReplace = HTMLArea.Plugin.extend({
+		
+	constructor : function(editor, pluginName) {
+		this.base(editor, pluginName);
+	},
 	
-	this.popupWidth = 455;
-	this.popupHeight = 235;
-};
-
-FindReplace.I18N = FindReplace_langArray;
-
-FindReplace.actionHandler = function(instance) {
-	return (function(editor) {
-		instance.buttonPress(editor);
-	});
-};
-
-FindReplace.prototype.buttonPress = function(editor) { 
-	FindReplace.editor = editor;
-	var sel = editor.getSelectedHTML(), param = null;
-	if (/\w/.test(sel)) {
-		sel = sel.replace(/<[^>]*>/g,"");
-		sel = sel.replace(/&nbsp;/g,"");
+	/*
+	 * This function gets called by the class constructor
+	 */
+	configurePlugin : function(editor) {
+		
+		/*
+		 * Registering plugin "About" information
+		 */
+		var pluginInformation = {
+			version		: "1.2",
+			developer	: "Cau Guanabara & Stanislas Rolland",
+			developerUrl	: "mailto:caugb@ibest.com.br",
+			copyrightOwner	: "Cau Guanabara & Stanislas Rolland",
+			sponsor		: "Independent production & Fructifor Inc.",
+			sponsorUrl	: "http://www.netflash.com.br/gb/HA3-rc1/examples/find-replace.html",
+			license		: "GPL"
+		};
+		this.registerPluginInformation(pluginInformation);
+		
+		/*
+		 * Registering the button
+		 */
+		var buttonId = "FindReplace";
+		var buttonConfiguration = {
+			id		: buttonId,
+			tooltip		: this.localize("Find and Replace"),
+			action		: "onButtonPress",
+			dialog		: true
+		};
+		this.registerButton(buttonConfiguration);
+		
+		this.popupWidth = 300;
+		this.popupHeight = 400;
+		
+		return true;
+	},
+	
+	/*
+	 * This function gets called when the button was pressed.
+	 *
+	 * @param	object		editor: the editor instance
+	 * @param	string		id: the button id or the key
+	 *
+	 * @return	boolean		false if action is completed
+	 */
+	onButtonPress : function (editor, id, target) {
+			// Could be a button or its hotkey
+		var buttonId = this.translateHotKey(id);
+		buttonId = buttonId ? buttonId : id;
+		
+		var sel = this.editor.getSelectedHTML(), param = null;
+		if (/\w/.test(sel)) {
+			sel = sel.replace(/<[^>]*>/g,"");
+			sel = sel.replace(/&nbsp;/g,"");
+		}
+		if (/\w/.test(sel)) {
+			param = { fr_pattern: sel };
+		}
+		
+		this.dialog = this.openDialog("FindReplace", this.makeUrlFromPopupName("find_replace"), null, param, {width:this.popupWidth, height:this.popupHeight});
+		return false;
 	}
-	if (/\w/.test(sel)) param = { fr_pattern: sel };
-	editor._popupDialog("plugin://FindReplace/find_replace", null, param, this.popupWidth, this.popupHeight);
-};
-
-FindReplace._pluginInfo = {
-  name          : "FindReplace",
-  version       : "1.1",
-  developer     : "Cau Guanabara & Stanislas Rolland",
-  developer_url : "mailto:caugb@ibest.com.br",
-  c_owner       : "Cau Guanabara & Stanislas Rolland",
-  sponsor       : "Independent production & Fructifor Inc.",
-  sponsor_url   : "http://www.netflash.com.br/gb/HA3-rc1/examples/find-replace.html",
-  license       : "GPL"
-};
+});
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/FindReplace/fr_engine.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/FindReplace/fr_engine.js	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/FindReplace/fr_engine.js	(working copy)
@@ -5,144 +5,150 @@
  e-mail: caugb@ibest.com.br
 \*---------------------------------------*/
 
-var FindReplace = window.opener.FindReplace;
-var i18n = FindReplace.I18N;
-var editor = FindReplace.editor;
-var is_mo = window.opener.HTMLArea.is_gecko;
-var tosearch = '';
-var pater = null;
-var buffer = null;
-var matches = 0;
-var replaces = 0;
-var fr_spans = new Array();
-
-function execSearch(params) {
-var ihtml = editor._doc.body.innerHTML;
-  if(buffer == null) 
-    buffer = ihtml;
-    
-  if(params['fr_pattern'] != tosearch) {
-    if(tosearch != '')
-      clearDoc();
-  tosearch = params['fr_pattern'];
-  }
-  
-  if(matches == 0) {
-  er = params['fr_words'] ? "/(?!<[^>]*)(\\b"+params['fr_pattern']+"\\b)(?![^<]*>)/g" :
-                            "/(?!<[^>]*)("+params['fr_pattern']+")(?![^<]*>)/g";
-    if(!params['fr_matchcase'])
-      er += "i"; 
-
-  pater = eval(er);
-  
-  var tago = '<span id=frmark>';
-  var tagc = '</span>';
-  var newHtml = ihtml.replace(pater,tago+"$1"+tagc);
-  
-  editor.setHTML(newHtml);
-  
-  var getallspans = editor._doc.body.getElementsByTagName("span"); 
-    for (var i = 0; i < getallspans.length; i++) 
-      if(/^frmark/.test(getallspans[i].id))
-        fr_spans.push(getallspans[i]);
-  }
-
-spanWalker(params['fr_pattern'],params['fr_replacement'],params['fr_replaceall']);
-};
-
-function spanWalker(pattern,replacement,replaceall) {
-var foundtrue = false;
-clearMarks();
-
-  for (var i = matches; i < fr_spans.length; i++) {
-  var elm = fr_spans[i];
-  foundtrue = true;
-    if(!(/[0-9]$/.test(elm.id))) { 
-    matches++;
-    disab('fr_clear',false);
-    elm.id = 'frmark_'+matches;
-    elm.style.color = 'white';
-    elm.style.backgroundColor = 'highlight';
-    elm.style.fontWeight = 'bold';
-    elm.scrollIntoView(false);
-      //if(  /\w/.test(replacement)  ) {
-        if(replaceall || confirm(i18n["Substitute this occurrence?"])) {
-        elm.firstChild.replaceData(0,elm.firstChild.data.length,replacement);
-        replaces++;
-        disab('fr_undo',false);
-        }
-        if(replaceall) {
-        clearMarks();
-        continue;
-        }
-      //}
-    break;
-    }
-  }
-  var last = (i >= fr_spans.length - 1);
-  if(last || !foundtrue) { // EOF
-  var message = i18n["Done"]+':\n\n';
-    if(matches > 0) {
-      if(matches == 1) message += matches+' '+i18n["found item"];
-      else             message += matches+' '+i18n["found items"];
-      if(replaces > 0) {
-        if(replaces == 1) message += ',\n'+replaces+' '+i18n["replaced item"];
-        else              message += ',\n'+replaces+' '+i18n["replaced items"];
-      }
-    hiliteAll();
-    disab('fr_hiliteall',false);
-    } else { message += '"'+pattern+'" '+i18n["not found"]; }
-  alert(message+'.');
-  }
-};
-
-function clearDoc() {
-var doc = editor._doc.body.innerHTML; 
-var er = /(<span\s+[^>]*id=.?frmark[^>]*>)([^<>]*)(<\/span>)/gi;
-editor._doc.body.innerHTML = doc.replace(er,"$2");
-pater = null;
-tosearch = '';
-fr_spans = new Array();
-matches = 0;
-replaces = 0;
-disab("fr_hiliteall,fr_clear",true);
-};
-
-function clearMarks() { 
-var getall = editor._doc.body.getElementsByTagName("span"); 
-  for (var i = 0; i < getall.length; i++) {
-  var elm = getall[i];
-    if(/^frmark/.test(elm.id)) {
-    var objStyle = editor._doc.getElementById(elm.id).style;
-    objStyle.backgroundColor = "";
-    objStyle.color = "";
-    objStyle.fontWeight = "";
-    }
-  }
-};
-
-function hiliteAll() { 
-var getall = editor._doc.body.getElementsByTagName("span"); 
-  for (var i = 0; i < getall.length; i++) {
-  var elm = getall[i];
-    if(/^frmark/.test(elm.id)) { 
-    var objStyle = editor._doc.getElementById(elm.id).style;
-    objStyle.backgroundColor = "highlight";
-    objStyle.color = "white";
-    objStyle.fontWeight = "bold";
-    }
-  }
-};
-
-function resetContents() { 
-  if(buffer == null) return;
-var transp = editor._doc.body.innerHTML;
-editor._doc.body.innerHTML = buffer;
-buffer = transp;
-};
-
-function disab(elms,toset) { 
-var names = elms.split(/[,; ]+/);
-  for(var i = 0; i < names.length; i++) 
-    document.getElementById(names[i]).disabled = toset;
-};
+	var tosearch = '';
+	var pater = null;
+	var buffer = null;
+	var matches = 0;
+	var replaces = 0;
+	var fr_spans = new Array();
+		
+	function execSearch (params) {
+		var ihtml = editor._doc.body.innerHTML;
+		if (buffer == null) {
+			buffer = ihtml;
+		}
+		
+		if (params.fr_pattern != tosearch) {
+			if (tosearch != "") {
+				clearDoc();
+			}
+			tosearch = params.fr_pattern;
+		}
+		
+		if (matches == 0) {
+			er = params.fr_words ? "/(?!<[^>]*)(\\b"+params.fr_pattern+"\\b)(?![^<]*>)/g" : "/(?!<[^>]*)("+params.fr_pattern+")(?![^<]*>)/g";
+			if (!params.fr_matchcase) {
+				er += "i";
+			}
+			
+			pater = eval(er);
+			
+			var tago = '<span id=frmark>';
+			var tagc = '</span>';
+			var newHtml = ihtml.replace(pater,tago+"$1"+tagc);
+			editor.setHTML(newHtml);
+			
+			var getallspans = editor._doc.body.getElementsByTagName("span"); 
+			for (var i = 0; i < getallspans.length; i++) {
+				if (/^frmark/.test(getallspans[i].id)) {
+					fr_spans.push(getallspans[i]);
+				}
+			}
+		}
+		spanWalker(params['fr_pattern'],params['fr_replacement'],params['fr_replaceall']);
+	};
+	
+	function spanWalker (pattern,replacement,replaceall) {
+		var foundtrue = false;
+		clearMarks();
+		
+		for (var i = matches; i < fr_spans.length; i++) {
+			var elm = fr_spans[i];
+			foundtrue = true;
+			if (!(/[0-9]$/.test(elm.id))) { 
+				matches++;
+				disable('fr_clear', false);
+				elm.id = 'frmark_'+ matches;
+				elm.style.color = 'white';
+				elm.style.backgroundColor = 'highlight';
+				elm.style.fontWeight = 'bold';
+				elm.scrollIntoView(false);
+				if (replaceall || confirm(dialog.plugin.localize("Substitute this occurrence?"))) {
+					elm.firstChild.replaceData(0,elm.firstChild.data.length,replacement);
+					replaces++;
+					disable('fr_undo', false);
+				}
+				if (replaceall) {
+					clearMarks();
+					continue;
+				}
+				break;
+			}
+		}
+		var last = (i >= fr_spans.length - 1);
+		if (last || !foundtrue) { // EOF
+			var message = dialog.plugin.localize("Done")+":\n\n";
+			if (matches > 0) {
+				if (matches == 1) {
+					message += matches+' ' + dialog.plugin.localize("found item");
+				} else {
+					message += matches+' ' + dialog.plugin.localize("found items");
+				}
+				if (replaces > 0) {
+					if (replaces == 1) {
+						message += ',\n'+replaces+' ' + dialog.plugin.localize("replaced item");
+					} else {
+						message += ',\n'+replaces+' ' + dialog.plugin.localize("replaced items");
+					}
+				}
+				hiliteAll();
+				disable('fr_hiliteall', false);
+			} else {
+				message += '"' + pattern + '" ' + dialog.plugin.localize("not found");
+			}
+			alert(message+'.');
+		}
+	};
+	
+	function clearDoc () {
+		var doc = editor._doc.body.innerHTML; 
+		var er = /(<span\s+[^>]*id=.?frmark[^>]*>)([^<>]*)(<\/span>)/gi;
+		editor._doc.body.innerHTML = doc.replace(er,"$2");
+		pater = null;
+		tosearch = '';
+		fr_spans = new Array();
+		matches = 0;
+		replaces = 0;
+		disable("fr_hiliteall,fr_clear", true);
+	};
+	
+	function clearMarks () {
+		var getall = editor._doc.body.getElementsByTagName("span"); 
+		for (var i = 0; i < getall.length; i++) {
+			var elm = getall[i];
+			if (/^frmark/.test(elm.id)) {
+				var objStyle = editor._doc.getElementById(elm.id).style;
+				objStyle.backgroundColor = "";
+				objStyle.color = "";
+				objStyle.fontWeight = "";
+			}
+		}
+	};
+	
+	function hiliteAll () {
+		var getall = editor._doc.body.getElementsByTagName("span"); 
+		for (var i = 0; i < getall.length; i++) {
+			var elm = getall[i];
+			if (/^frmark/.test(elm.id)) {
+				var objStyle = editor._doc.getElementById(elm.id).style;
+				objStyle.backgroundColor = "highlight";
+				objStyle.color = "white";
+				objStyle.fontWeight = "bold";
+			}
+		}
+	};
+	
+	function resetContents () {
+		if (buffer == null) return;
+		var transp = editor._doc.body.innerHTML;
+		editor._doc.body.innerHTML = buffer;
+		buffer = transp;
+	};
+	
+	function disable (elms, toset) {
+		var names = elms.split(/[,; ]+/);
+		for (var i = 0; i < names.length; i++) {
+			document.getElementById(names[i]).disabled = toset;
+		}
+	};
+	
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/FindReplace/popups/find_replace.html
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/FindReplace/popups/find_replace.html	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/FindReplace/popups/find_replace.html	(working copy)
@@ -4,7 +4,7 @@
 *  Copyright notice
 *
 *  (c) 2004 Cau guanabara <caugb@ibest.com.br>
-*  (c) 2005, 2006 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  (c) 2005-2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -39,43 +39,46 @@
 	<title>Find and Replace</title>
 	<meta http-equiv="Content-Style-Type" content="text/css" />
 	<script type="text/javascript" src="../fr_engine.js"></script>
-	<script type="text/javascript" src="../../../popups/popup.js"></script>
 	<script type="text/javascript">
-		HTMLArea = window.opener.HTMLArea;
-		_editor_CSS = window.opener._editor_CSS;
-		__dlg_loadStyle(_editor_CSS);
+		/*<![CDATA[*/
+		<!--
+		var dialog = window.opener.HTMLArea.Dialog.FindReplace;
+		var editor;
 		var accepted = {
-                'fr_pattern'       : true,
-                'fr_replacement'   : true,
-                'fr_words'         : true,
-                'fr_matchcase'     : true,
-                'fr_replaceall'    : true
-               };
-
+			'fr_pattern'       : true,
+			'fr_replacement'   : true,
+			'fr_words'         : true,
+			'fr_matchcase'     : true,
+			'fr_replaceall'    : true
+		};
+		
 		function Init() {
-			__dlg_translate(i18n);
-			__dlg_init();
-
-			disab("fr_undo,fr_clear,fr_hiliteall",true);
-
-			var params = window.dialogArguments;
-			if(params) {
-				document.getElementById('fr_pattern').value = params["fr_pattern"];
+			editor = dialog.plugin.editor;
+			disable("fr_undo,fr_clear,fr_hiliteall", true);
+			
+			var params = dialog.arguments;
+			if (params) {
+				document.getElementById('fr_pattern').value = params.fr_pattern;
 				document.getElementById('fr_replacement').focus();
 			} else {
 				document.getElementById('fr_pattern').focus();
 			}
-			document.body.onkeypress = __dlg_key_press;
+			dialog.initialize();
+			document.body.onkeypress = onKeyPress;
 		};
-
+		function requestReplacement() {
+			if (!document.getElementById("fr_replacement").value && document.getElementById("fr_replaceall").checked) {
+				return confirm(dialog.plugin.localize("Inform a replacement word"));
+			}
+			clearDoc();
+		}
 		function onCancel() {
 			clearDoc();
-			__dlg_close(null);
+			dialog.close();
 			return false;
 		};
-
 		function onOK() {
-			var required = {'fr_pattern' : i18n["Enter the text you want to find"]}; 
+			var required = {'fr_pattern' : dialog.plugin.localize("Enter the text you want to find")};
 			for (var i in required) {
 				var el = document.getElementById(i);
 				if (!el.value) {
@@ -84,28 +87,23 @@
 					return false;
 				}
 			}
-
+			
 			var param = {};
 			for (var i in accepted) {
 				var el = document.getElementById(i);
-				param[i] = el.type == 'checkbox' ? el.checked : el.value;
+				param[i] = (el.type == "checkbox") ? el.checked : el.value;
 			}
 			execSearch(param);
 			return false;
 		};
-
-		function __dlg_close_on_esc(ev) {
+		function onEscape(ev) {
 			ev || (ev = window.event);
 			if (ev.keyCode == 27) {
-				clearDoc();
-				if(window.opener && window.opener.Dialog) window.opener.Dialog._return(null);
-				window.close();
-				return false;
+				return onCancel();
 			}
 			return true;
 		};
-
-		function __dlg_key_press(ev) {
+		function onKeyPress (ev) {
 			ev || (ev = window.event);
 			switch(ev.keyCode) {
 				case 13:
@@ -113,13 +111,16 @@
 					document.getElementById('fr_pattern').focus();
 					break;
 				case 27:
-					return __dlg_close_on_esc(ev);
+					return onCancel();
 			}
 			return true;
 		};
-</script>
+		// -->
+		/*]]>*/
+	</script>
 </head>
 <body class="popupwin" onload="Init();">
+<div id="content">
 <div class="title">Find and Replace</div>
 <form action="" method="get">
 	<dl>
@@ -136,7 +137,7 @@
 			<input id="fr_replacement" type="text" size="35" onFocus="this.select();">
 		</dd>
 	</dl>
-	<fieldset class="floating">
+	<fieldset>
 		<legend>Options</legend>
 		<ul>
 			<li>
@@ -148,11 +149,7 @@
 				<label for="fr_matchcase" class="long-label">Case sensitive search</label>
 			</li>
 			<li>
-				<input id="fr_replaceall" type="checkbox" onClick="
-					if(!document.getElementById('fr_replacement').value && document.getElementById('fr_replaceall').checked) {
-						return confirm(i18n['Inform a replacement word']);
-					}
-					clearDoc();">
+				<input id="fr_replaceall" type="checkbox" onClick="requestReplacement();">
 				<label for="fr_replaceall" class="long-label">Substitute all occurrences</label>
 			</li>
 		</ul>	
@@ -177,5 +174,6 @@
 		<button type="button" name="cancel" onclick="return onCancel();">Done</button>
 	</div>
 </form>
+</div>
 </body>
 </html>
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/InsertSmiley/insert-smiley.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/InsertSmiley/insert-smiley.js	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/InsertSmiley/insert-smiley.js	(working copy)
@@ -2,7 +2,7 @@
 *  Copyright notice
 *
 *  (c) 2004  Ki Master George <kimastergeorge@gmail.com>
-*  (c) 2005, 2006 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  (c) 2005-2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -33,52 +33,79 @@
  * TYPO3 CVS ID: $Id$
  */
 
-var HTMLAreaeditor;
-
-InsertSmiley = function(editor) {
-	this.editor = editor;
-	var cfg = editor.config;
-	var actionHandlerFunctRef = InsertSmiley.actionHandler(this);
-	cfg.registerButton("InsertSmiley", InsertSmiley_langArray["Insert Smiley"],  editor.imgURL("ed_smiley.gif", "InsertSmiley"), false, actionHandlerFunctRef);
-};
-
-InsertSmiley.I18N = InsertSmiley_langArray;
-
-InsertSmiley.actionHandler = function(instance) {
-	return (function(editor) {
-		instance.buttonPress(editor);
-	});
-};
-
-InsertSmiley.prototype.buttonPress = function(editor) { 
-	var sel = editor.getSelectedHTML().replace(/(<[^>]*>|&nbsp;|\n|\r)/g,""); 
-	var param = new Object();
-	param.editor = editor;
-	param.editor_url = _typo3_host_url + _editor_url;
-	if(param.editor_url == "../") {
-		param.editor_url = document.URL;
-		param.editor_url = param.editor_url.replace(/^(.*\/).*\/.*$/g, "$1");
+InsertSmiley = HTMLArea.Plugin.extend({
+		
+	constructor : function(editor, pluginName) {
+		this.base(editor, pluginName);
+	},
+	
+	/*
+	 * This function gets called by the class constructor
+	 */
+	configurePlugin : function(editor) {
+		
+		/*
+		 * Registering plugin "About" information
+		 */
+		var pluginInformation = {
+			version		: "1.2",
+			developer	: "Ki Master George & Stanislas Rolland",
+			developerUrl	: "http://www.fructifor.ca/",
+			copyrightOwner	: "Ki Master George & Stanislas Rolland",
+			sponsor		: "Ki Master George & Fructifor Inc.",
+			sponsorUrl	: "http://www.fructifor.ca/",
+			license		: "GPL"
+		};
+		this.registerPluginInformation(pluginInformation);
+		
+		/*
+		 * Registering the button
+		 */
+		var buttonId = "InsertSmiley";
+		var buttonConfiguration = {
+			id		: buttonId,
+			tooltip		: this.localize("Insert Smiley"),
+			action		: "onButtonPress",
+			dialog		: true
+		};
+		this.registerButton(buttonConfiguration);
+		
+		return true;
+	},
+	
+	/*
+	 * This function gets called when the button was pressed.
+	 *
+	 * @param	object		editor: the editor instance
+	 * @param	string		id: the button id or the key
+	 *
+	 * @return	boolean		false if action is completed
+	 */
+	onButtonPress : function (editor, id) {
+		
+		var sel = this.editor.getSelectedHTML().replace(/(<[^>]*>|&nbsp;|\n|\r)/g,"");
+		var param = new Object();
+		param.editor_url = _typo3_host_url + _editor_url;
+		if (param.editor_url == "../") {
+			param.editor_url = document.URL;
+			param.editor_url = param.editor_url.replace(/^(.*\/).*\/.*$/g, "$1");
+		}
+		this.dialog = this.openDialog("InsertSmiley", this.makeUrlFromPopupName("insertsmiley"), "insertImageTag", param, {width:250, height:220});
+	},
+	
+	/*
+	 * Insert the selected smiley
+	 *
+	 * @param	object		param: the selected smiley
+	 *
+	 * @return	boolean		false
+	 */
+	insertImageTag : function (param) {
+		if (param && typeof(param.imgURL) != "undefined") {
+			this.editor.focusEditor();
+			this.editor.insertHTML('<img src="' + param.imgURL + '" alt="Smiley" />');
+		}
+		return false;
 	}
-	var setTagHandlerFunctRef = InsertSmiley.setTagHandler(this);
-  	editor._popupDialog("plugin://InsertSmiley/insertsmiley", setTagHandlerFunctRef, param, 250, 220);
-};
+});
 
-InsertSmiley.setTagHandler = function(instance) {
-	return (function(param) {
-		if(param && typeof(param.imgURL) != "undefined") {
-			instance.editor.focusEditor();
-			instance.editor.insertHTML("<img src=\"" + param.imgURL + "\" alt=\"Smiley\" />");
-		}
-	});
-};
-
-InsertSmiley._pluginInfo = {
-	name          : "InsertSmiley",
-	version       : "1.1",
-	developer     : "Ki Master George & Stanislas Rolland",
-	developer_url : "http://www.fructifor.ca/",
-	c_owner       : "Ki Master George & Stanislas Rolland",
-	sponsor       : "Ki Master George & Fructifor Inc.",
-	sponsor_url   : "http://www.fructifor.ca/",
-	license       : "GPL"
-};
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/InsertSmiley/popups/insertsmiley.html
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/InsertSmiley/popups/insertsmiley.html	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/InsertSmiley/popups/insertsmiley.html	(working copy)
@@ -1,3 +1,4 @@
+<html class="popupwin">
 <!-- 
 /***************************************************************
 *  Copyright notice
@@ -3,5 +4,5 @@
 *
 *  (c) 2004  Ki Master George <kimastergeorge@gmail.com>
-*  (c) 2005, 2006 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  (c) 2005-2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
 *  All rights reserved
 *
@@ -34,27 +35,20 @@
  * TYPO3 CVS ID: $Id$
  */
 -->
-<html class="popupwin">
 <head>
 	<title>Insert Smiley</title>
 	<meta http-equiv="Content-Style-Type" content="text/css" />
-	<!--<link rel="stylesheet" href="../../../htmlarea.css" />-->
-	<script type="text/javascript" src="../../../popups/popup.js"></script>
 	<script type="text/javascript">
-		HTMLArea = window.opener.HTMLArea;
-		_editor_CSS = window.opener._editor_CSS;
-		__dlg_loadStyle(_editor_CSS);
-		var InsertSmiley = window.opener.InsertSmiley;
-		var i18n = InsertSmiley.I18N;
-		var editor = null;
+		/*<![CDATA[*/
+		<!--
+		var dialog = window.opener.HTMLArea.Dialog.InsertSmiley;
 		var param;
-
+		
 		function Init() {
 			var totalsmileys = 20;
-			__dlg_translate(i18n);
-			__dlg_init();
-			param = window.dialogArguments;
-			editor = param['editor'];
+			dialog.initialize();
+			
+			param = dialog.arguments;
 			var tbody = document.getElementById("smileytable");
 			var inum;
 			var trow;
@@ -79,39 +73,29 @@
 				}
 				trow.insertCell((i - 1) % 4).innerHTML = "<a href=\"javascript:onOK('" + inum + "')\"><img style=\"border: 0px;\" alt=\"Smiley " + + i + "\" src=\""+ param.editor_url +"plugins/InsertSmiley/smileys/" + inum + ".gif\" />";
 			}
-			document.body.onkeypress = __dlg_key_press;
 		};
-
-		function onCancel() {
-			__dlg_close(null);
-			return false;
-		};
-
+		
 		function onOK(smileynum) {
 			var params = {};
 			params.imgURL = param.editor_url +"plugins/InsertSmiley/smileys/" + smileynum + ".gif";
-			__dlg_close(params);
+			dialog.performAction(params);
+			dialog.close();
 			return false;
 		};
-
-		function __dlg_key_press(ev) {
-			ev || (ev = window.event);
-			switch(ev.keyCode) {
-				case 13: 
-					document.getElementById('bt_ok').click();
-					break;
-				case 27:
-					__dlg_close(null);
-					return false;
-			}
-			return true;
+		
+		function onCancel() {
+			dialog.close();
+			return false;
 		};
+		// -->
+		/*]]>*/
 	</script>
 </head>
 <body class="popupwin" onload="Init();">
+<div id="content">
 <div class="title">Insert Smiley</div>
 <form action="" method="get">
-	<div class="smileytable" align="center">
+	<div class="smileytable" style="text-align: center;">
 		<table id="smileytable" name="smileytable"></table>
 	</div>
 	<div class="space"></div>
@@ -119,5 +103,6 @@
 		<button type="button" onclick="return onCancel();">Cancel</button>
 	</div>
 </form>
+</div>
 </body>
 </html>
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/popups/removeformat.html
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/popups/removeformat.html	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/popups/removeformat.html	(working copy)
@@ -1,3 +1,4 @@
+<html class="popupwin">
 <!--
 /***************************************************************
 *  Copyright notice
@@ -2,3 +3,3 @@
 *
-*  (c) 2005, 2006 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  (c) 2005-2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
 *  All rights reserved
@@ -30,26 +31,21 @@
  *
  * TYPO3 CVS ID: $Id$
  */
---> 
-<html class="popupwin">
+-->
 <head>
 	<title>Remove formatting</title>
 	<meta http-equiv="Content-Style-Type" content="text/css" />
-	<script type="text/javascript" src="../../../popups/popup.js"></script>
 	<script type="text/javascript">
-		HTMLArea = window.opener.HTMLArea;
-		_editor_CSS = window.opener._editor_CSS;
-		__dlg_loadStyle(_editor_CSS);
-		var RemoveFormat = window.opener.RemoveFormat;
-		var i18n = RemoveFormat.I18N;
-
+		/*<![CDATA[*/
+		<!--
+		var dialog = window.opener.HTMLArea.Dialog.RemoveFormat;
+		
 		function Init() {
-			__dlg_translate(i18n);
-			__dlg_init();
-			var editor = window.dialogArguments;
+			dialog.initialize();
+			var editor = dialog.plugin.editor;
 			if (!editor._selectionEmpty(editor._getSelection())) document.getElementById('clean_selection').checked = true;
-		};
-
+		}
+		
 		function onOK() {
 			var param = {};
 			if (document.getElementById('clean_selection').checked) {
@@ -57,7 +53,7 @@
 			} else {
 				param["cleaning_area"] = "all";
 			}
-
+			
 			var fields = ["formatting", "ms_formatting", "images", "html_all"];
 			oneChecked = false;
 			for (var i=0; i<fields.length; i++) {
@@ -68,8 +64,9 @@
 					oneChecked = true;
 				}
 			}
-			if(oneChecked) {
-				__dlg_close(param);
+			if (oneChecked) {
+				dialog.performAction(param);
+				dialog.close();
 			} else {
 				alert(i18n["Select the type of formatting you wish to remove."]);
 			}
@@ -77,12 +74,15 @@
 		};
 
 		function onCancel() {
-			__dlg_close(null);
+			dialog.close();
 			return false;
-		};
-</script>
+		}
+		// -->
+		/*]]>*/
+	</script>
 </head>
 <body class="popupwin" onload="Init();">
+<div id="content">
 <div class="title">Remove formatting</div>
 <form action="" method="get">
 	<fieldset>
@@ -111,5 +111,6 @@
 		<button type="button" name="cancel" onclick="return onCancel();">Cancel</button>
 	</div>
 </form>
+</div>
 </body>
 </html>
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/remove-format.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/remove-format.js	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/remove-format.js	(working copy)
@@ -1,7 +1,7 @@
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 2005, 2006 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  (c) 2005-2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -29,64 +29,89 @@
  *
  * TYPO3 CVS ID: $Id$
  */
-
-RemoveFormat = function(editor) {
-	this.editor = editor;
-	var cfg = editor.config;
-	var actionHandlerFunctRef = RemoveFormat.actionHandler(this);
-	cfg.registerButton({
-		id		: "RemoveFormat",
-		tooltip		: RemoveFormat_langArray["RemoveFormatTooltip"],
-		image		: editor.imgURL("ed_clean.gif", "RemoveFormat"),
-		textMode	: false,
-		action		: actionHandlerFunctRef
-	});
+RemoveFormat = HTMLArea.Plugin.extend({
+		
+	constructor : function(editor, pluginName) {
+		this.base(editor, pluginName);
+	},
 	
-	this.popupWidth = 285;
-	this.popupHeight = 255;
-};
-
-RemoveFormat.I18N = RemoveFormat_langArray;
-
-RemoveFormat._pluginInfo = {
-	name          : "RemoveFormat",
-	version       : "1.5",
-	developer     : "Stanislas Rolland",
-	developer_url : "http://www.fructifor.ca/",
-	sponsor       : "Fructifor Inc.",
-	sponsor_url   : "http://www.fructifor.ca/",
-	license       : "GPL"
-};
-
-RemoveFormat.actionHandler = function(instance) {
-	return (function(editor) {
-		instance.buttonPress(editor);
-	});
-};
-
-RemoveFormat.prototype.buttonPress = function(editor){
-	var applyRequestFunctRef = RemoveFormat.applyRequest(this, editor);
-	editor._popupDialog("plugin://RemoveFormat/removeformat", applyRequestFunctRef, editor, this.popupWidth, this.popupHeight);
-};
-
-RemoveFormat.applyRequest = function(instance,editor){
-	return(function(param) {
+	/*
+	 * This function gets called by the class constructor
+	 */
+	configurePlugin : function(editor) {
+		
+		/*
+		 * Registering plugin "About" information
+		 */
+		var pluginInformation = {
+			version		: "1.6",
+			developer	: "Stanislas Rolland",
+			developerUrl	: "http://www.fructifor.ca/",
+			copyrightOwner	: "Stanislas Rolland",
+			sponsor		: "Fructifor Inc.",
+			sponsorUrl	: "http://www.fructifor.ca/",
+			license		: "GPL"
+		};
+		this.registerPluginInformation(pluginInformation);
+		
+		/*
+		 * Registering the button
+		 */
+		var buttonId = "RemoveFormat";
+		var buttonConfiguration = {
+			id		: buttonId,
+			tooltip		: this.localize(buttonId+"Tooltip"),
+			action		: "onButtonPress",
+			dialog		: true
+		};
+		this.registerButton(buttonConfiguration);
+		
+		this.popupWidth = 300;
+		this.popupHeight = 280;
+		
+		return true;
+	},
+	
+	/*
+	 * This function gets called when the button was pressed.
+	 *
+	 * @param	object		editor: the editor instance
+	 * @param	string		id: the button id or the key
+	 *
+	 * @return	boolean		false if action is completed
+	 */
+	onButtonPress : function (editor, id, target) {
+			// Could be a button or its hotkey
+		var buttonId = this.translateHotKey(id);
+		buttonId = buttonId ? buttonId : id;
+		
+		this.dialog = this.openDialog("RemoveFormat", this.makeUrlFromPopupName("removeformat"), "applyRequest", null, {width:this.popupWidth, height:this.popupHeight});
+		return false;
+	},
+	
+	/*
+	 * Perform the cleaning request
+	 * .
+	 */
+	applyRequest : function(param) {
+		
+		var editor = this.editor;
 		editor.focusEditor();
-
+		
 		if (param) {
-
+			
 			if (param["cleaning_area"] == "all") {
 				var html = editor._doc.body.innerHTML;
 			} else {
 				var html = editor.getSelectedHTML();
  			}
-
-			if(html) {
-
+			
+			if (html) {
+				
 				if (param["html_all"]== true) {
 					html = html.replace(/<[\!]*?[^<>]*?>/g, "");
 				}
- 
+				
 				if (param["formatting"] == true) {
 						// remove font, b, strong, i, em, u, strike, span and other tags
 					var regF1 = new RegExp("<\/?(abbr|acronym|b[^a-zA-Z]|big|cite|code|em[^a-zA-Z]|font|i[^a-zA-Z]|q|s[^a-zA-Z]|samp|small|span|strike|strong|sub|sup|u[^a-zA-Z]|var)[^>]*>", "gi"); 
@@ -96,12 +121,12 @@
 					var regF3 = new RegExp(" (class|align|cellpadding|cellspacing|frame|bgcolor)=(([^>\s\"]+)|(\"[^>\"]*\"))", "gi");
 					html = html.replace(regF2, "").replace(regF3, "");
 				}
-
+				
 				if (param["images"] == true) {
 						// remove any IMG tag
 					html = html.replace(/<\/?img[^>]*>/gi, ""); //remove img tags								
 				}
-
+				
 				if (param["ms_formatting"] == true) {
 						// make one line
 					var regMS1 = new RegExp("(\r\n|\n|\r)", "g"); 
@@ -140,7 +165,7 @@
 						html = html.replace(reg10, " ");
 					}
 				}
-
+				
 				if (param["cleaning_area"] == "all") { 				 		
 					editor._doc.body.innerHTML = html;
 				} else { 
@@ -150,5 +175,6 @@
 		} else {
 			return false;
 		}
-	});
-};
+	}
+});
+
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/popups/spell-check-ui-iso-8859-1.html
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/popups/spell-check-ui-iso-8859-1.html	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/popups/spell-check-ui-iso-8859-1.html	(working copy)
@@ -5,7 +5,7 @@
 *  Copyright notice
 *
 *  (c) 2003 dynarch.com. Authored by Mihai Bazon, sponsored by www.americanbible.org.
-*  (c) 2004, 2005, 2006 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  (c) 2004-2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -40,13 +40,10 @@
 	<title>Spell Checker</title>
 	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 	<script type="text/javascript" src="../spell-check-ui.js"></script>
-	<script type="text/javascript" src="../../../popups/popup.js"></script>
 	<script type="text/javascript">
 		/*<![CDATA[*/
 		<!--
-		HTMLArea = window.opener.HTMLArea;
-		_editor_CSS = window.opener._editor_CSS;
-		__dlg_loadStyle(_editor_CSS);
+		var dialog = window.opener.HTMLArea.Dialog.SpellChecker;
 		// -->
 		/*]]>*/
 	</script>
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/popups/spell-check-ui.html
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/popups/spell-check-ui.html	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/popups/spell-check-ui.html	(working copy)
@@ -5,7 +5,7 @@
 *  Copyright notice
 *
 *  (c) 2003 dynarch.com. Authored by Mihai Bazon, sponsored by www.americanbible.org.
-*  (c) 2004, 2005, 2006 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  (c) 2004-2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -40,13 +40,10 @@
 	<title>Spell Checker</title>
 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 	<script type="text/javascript" src="../spell-check-ui.js"></script>
-	<script type="text/javascript" src="../../../popups/popup.js"></script>
 	<script type="text/javascript">
 		/*<![CDATA[*/
 		<!--
-		HTMLArea = window.opener.HTMLArea;
-		_editor_CSS = window.opener._editor_CSS;
-		__dlg_loadStyle(_editor_CSS);
+		var dialog = window.opener.HTMLArea.Dialog.SpellChecker;
 		// -->
 		/*]]>*/
 	</script>
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/spell-check-ui.html
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/spell-check-ui.html	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/spell-check-ui.html	(working copy)
@@ -1,142 +0,0 @@
-<!--
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2003 dynarch.com. Authored by Mihai Bazon, sponsored by www.americanbible.org.
-*  (c) 2004, 2005, 2006 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*  A copy is found in the textfile GPL.txt and important notices to the license
-*  from the author is found in LICENSE.txt distributed with these scripts.
-*
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This script is a modified version of a script published under the htmlArea License.
-*  A copy of the htmlArea License may be found in the textfile HTMLAREA_LICENSE.txt.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-/*
- * Spell Checker Plugin for TYPO3 htmlArea RTE
- *
- * TYPO3 CVS ID: $Id$
- */
--->
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-  <head>
-    <title>Spell Checker</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <script type="text/javascript" src="spell-check-ui.js"></script>
-
-    <style type="text/css">
-      html, body { height: 100%; margin: 0px; padding: 0px; background-color: #fff;
-      color: #000; }
-      a:link, a:visited { color: #00f; text-decoration: none; }
-      a:hover { color: #f00; text-decoration: underline; }
-
-      table { background-color: ButtonFace; color: ButtonText;
-      font-family: tahoma,verdana,sans-serif; font-size: 11px; }
-
-      iframe { background-color: #fff; color: #000; height: 100%; width: 100%; }
-
-      .controls { width: 14em; }
-      .controls .sectitle { /* background-color: #736c6c; color: #fff;
-      border-top: 1px solid #000; border-bottom: 1px solid #fff; */
-      text-align: center;
-      font-weight: bold; padding: 2px 4px; }
-      .controls .secbody { margin-bottom: 10px; }
-
-      button, select { font-family: tahoma,verdana,sans-serif; font-size: 11px; }
-      button { width: 9em; padding: 0px; }
-
-      input, select { font-family: fixed,"andale mono",monospace; }
-
-      #v_currentWord { color: #f00; font-weight: bold; }
-      #statusbar { padding: 7px 0px 0px 5px; }
-      #status { font-weight: bold; }
-    </style>
-
-  </head>
-
-  <body onload="initDocument()">
-
-    <form style="display: none;" action="spell-check-logic.php"
-          method="post" target="framecontent"
-          accept-charset="UTF-8"
-          ><input type="hidden" name="content" id="f_content"
-          /><input type="hidden" name="dictionary" id="f_dictionary"
-          /><input type="hidden" name="pspell_charset" id="f_charset"
-          /><input type="hidden" name="pspell_mode" id="f_pspell_mode"
-          /><input type="hidden" name="init" id="f_init" value="1"
-    /></form>
-
-    <table style="height: 100%; width: 100%; border-collapse: collapse;" cellspacing="0" cellpadding="0">
-      <tr>
-        <td colspan="2" style="height: 1em; padding: 2px;">
-          <div style="float: right; padding: 2px;"><span>Dictionary</span>
-            <select id="v_dictionaries" style="width: 10em"></select>
-            <button id="b_recheck">Re-check</button>
-          </div>
-          <span id="status">Please wait. Calling spell checker.</span>
-        </td>
-      </tr>
-      <tr>
-        <td valign="top" class="controls">
-          <div class="secbody" style="text-align: center">
-            <button id="b_info">Info</button>
-          </div>
-          <div class="sectitle">Original word</div>
-          <div class="secbody" id="v_currentWord" style="text-align:
-          center; margin-bottom: 2px;">pliz weit ;-)</div>
-          <div class="secbody" style="text-align: center">
-            <button id="b_revert">Revert</button>
-          </div>
-          <div class="sectitle">Replace with</div>
-          <div class="secbody">
-            <input type="text" id="v_replacement" style="width: 94%; margin-left: 3%;" /><br />
-            <div style="text-align: center; margin-top: 2px;">
-              <button id="b_replace">Replace</button><button
-                id="b_replall">Replace all</button><br /><button
-                id="b_ignore">Ignore</button><button
-                id="b_ignall">Ignore all</button>
-            </div>
-          </div>
-          <div class="sectitle">Suggestions</div>
-          <div class="secbody">
-            <select size="11" style="width: 94%; margin-left: 3%;" id="v_suggestions"></select>
-          </div>
-        </td>
-
-        <td>
-          <iframe src="about:blank" width="100%" height="100%"
-            id="i_framecontent" name="framecontent"></iframe>
-        </td>
-      </tr>
-      <tr>
-        <td style="height: 1em;" colspan="2">
-          <div style="padding: 4px 2px 2px 2px; float: right;">
-            <button id="b_ok">OK</button>
-            <button id="b_cancel">Cancel</button>
-          </div>
-          <div id="statusbar"></div>
-        </td>
-      </tr>
-    </table>
-
-  </body>
-
-</html>
-
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/spell-check-ui.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/spell-check-ui.js	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/spell-check-ui.js	(working copy)
@@ -2,7 +2,7 @@
 *  Copyright notice
 *
 *  (c) 2003 dynarch.com. Authored by Mihai Bazon, sponsored by www.americanbible.org.
-*  (c) 2004, 2005, 2006 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  (c) 2004-2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -32,17 +32,6 @@
  *
  * TYPO3 CVS ID: $Id$
  */
-
-// internationalization file was already loaded in parent ;-)
-var SpellChecker = window.opener.SpellChecker;
-var i18n = SpellChecker.I18N;
-
-// initial_dictonary, charset and pspell_mode added by Stanislas Rolland 2004-09-16
-var initial_dictionary = SpellChecker.f_dictionary;
-var pspell_charset = SpellChecker.f_charset;
-var pspell_mode = SpellChecker.f_pspell_mode;
-
-var editor = SpellChecker.editor;
 var frame = null;
 var currentElement = null;
 var wrongWords = null;
@@ -65,11 +54,11 @@
 		} else
 			el.className = "HA-spellcheck-fixed";
 	}
-	return window.opener.HTMLArea.getHTML(frame.contentWindow.document.body, false, editor);
+	return window.opener.HTMLArea.getHTML(frame.contentWindow.document.body, false, dialog.plugin.editor);
 };
 
 function recheckClicked() {
-	document.getElementById("status").innerHTML = i18n["Please wait: changing dictionary to"] + ': "' + document.getElementById("f_dictionary").value + '".';
+	document.getElementById("status").innerHTML = dialog.plugin.localize("Please wait: changing dictionary to") + ': "' + document.getElementById("f_dictionary").value + '".';
 	var field = document.getElementById("f_content");
 	field.value = makeCleanDoc(true);
 	field.form.submit();
@@ -77,9 +66,9 @@
 
 function saveClicked() {
 	if (modified) {
-		editor.setHTML(makeCleanDoc(false));
+		dialog.plugin.editor.setHTML(makeCleanDoc(false));
 	}
-	if ((to_p_dict.length || to_r_list.length) && SpellChecker.enablePersonalDicts) {
+	if ((to_p_dict.length || to_r_list.length) && dialog.plugin.enablePersonalDicts) {
 		var data = {};
 		for (var i = 0;i < to_p_dict.length;i++) {
 			data['to_p_dict[' + i + ']'] = to_p_dict[i];
@@ -89,11 +78,11 @@
 			data['to_r_list[' + i + '][1]'] = to_r_list[i][1];
 		}
 		data['cmd'] = 'learn';
-		data['enablePersonalDicts'] = SpellChecker.enablePersonalDicts;
-		data['userUid'] = SpellChecker.userUid;
-		data['dictionary'] = SpellChecker.f_dictionary;
-		data['pspell_charset'] = SpellChecker.f_charset;
-		data['pspell_mode'] = SpellChecker.f_pspell_mode;
+		data['enablePersonalDicts'] = dialog.plugin.enablePersonalDicts;
+		data['userUid'] = dialog.plugin.userUid;
+		data['dictionary'] = dialog.plugin.contentISOLanguage;
+		data['pspell_charset'] = dialog.plugin.contentCharset;
+		data['pspell_mode'] = dialog.plugin.spellCheckerMode;
 		window.opener.HTMLArea._postback('plugins/SpellChecker/spell-check-logic.php', data);
 	}
 	window.close();
@@ -103,10 +92,10 @@
 function cancelClicked() {
 	var ok = true;
 	if (modified) {
-		ok = confirm(i18n["QUIT_CONFIRMATION"]);
+		ok = confirm(dialog.plugin.localize("QUIT_CONFIRMATION"));
 	}
 	if (ok) {
-		window.close();
+		dialog.close();
 	}
 	return false;
 };
@@ -135,10 +124,10 @@
 	do { 
 		++index;
 		if (index == wrongWords.length) index = 0;
-	}while((index != start) && wrongWords[index].__msh_fixed);
+	} while((index != start) && wrongWords[index].__msh_fixed);
 	if (index == start) {
 		index = 0;
-		alert(i18n["Finished list of mispelled words"]);
+		alert(dialog.plugin.localize("Finished list of mispelled words"));
 	}
 	wrongWords[index].__msh_wordClicked(true);
 	return false;
@@ -199,33 +188,31 @@
 };
 
 function initDocument() {
-	__dlg_translate(i18n);
-	__dlg_init();
-	var param = window.dialogArguments;
-	editor = param['editor'];
-	HTMLArea = param['HTMLArea'];
+	dialog.initialize();
+	var plugin = dialog.plugin;
+	var editor = plugin.editor;
+	
 	modified = false;
-	document.title = i18n["Spell Checker"];
+	document.title = dialog.plugin.localize("Spell Checker");
 	frame = document.getElementById("i_framecontent");
 	var field = document.getElementById("f_content");
 	field.value = HTMLArea.getHTML(editor._doc.body, false, editor);
 	document.getElementById("f_init").value = "0";
-	document.getElementById("f_dictionary").value = initial_dictionary;
-	document.getElementById("f_charset").value = pspell_charset;
-	document.getElementById("f_pspell_mode").value = pspell_mode;
-	document.getElementById("f_user_uid").value = SpellChecker.userUid;
-	document.getElementById("f_personal_dicts").value = SpellChecker.enablePersonalDicts;
+	document.getElementById("f_dictionary").value = plugin.contentISOLanguage;
+	document.getElementById("f_charset").value = plugin.contentCharset;
+	document.getElementById("f_pspell_mode").value = plugin.spellCheckerMode;
+	document.getElementById("f_user_uid").value = plugin.userUid;
+	document.getElementById("f_personal_dicts").value = plugin.enablePersonalDicts;
 	field.form.submit();
-
 		// assign some global event handlers
 	var select = document.getElementById("v_suggestions");
 	select.onchange = function() {
 		document.getElementById("v_replacement").value = this.value;
 	};
 	HTMLArea._addEvent(select, "dblclick", replaceClicked);
-
+	
 	document.getElementById("b_replace").onclick = replaceClicked;
-	if (SpellChecker.enablePersonalDicts) document.getElementById("b_learn").onclick = learnClicked;
+	if (plugin.enablePersonalDicts) document.getElementById("b_learn").onclick = learnClicked;
 		else document.getElementById("b_learn").style.display = 'none';
 	document.getElementById("b_replall").onclick = replaceAllClicked;
 	document.getElementById("b_ignore").onclick = ignoreClicked;
@@ -233,10 +220,10 @@
 	document.getElementById("b_recheck").onclick = recheckClicked;
 	document.getElementById("b_revert").onclick = revertClicked;
 	document.getElementById("b_info").onclick = displayInfo;
-
+	
 	document.getElementById("b_ok").onclick = saveClicked;
 	document.getElementById("b_cancel").onclick = cancelClicked;
-
+	
 	select = document.getElementById("v_dictionaries");
 	select.onchange = function() {
 		document.getElementById("f_dictionary").value = this.value;
@@ -291,20 +278,20 @@
 	var txt;
 	var txt2;
 	if (a.length == 1) {
-		txt = i18n["One occurrence"];
-		txt2 = i18n["was found."];
+		txt = dialog.plugin.localize("One occurrence");
+		txt2 = dialog.plugin.localize("was found.");
 	} else if (a.length == 2) {
-		txt = i18n["Two occurrences"];
-		txt2 = i18n["were found."];
+		txt = dialog.plugin.localize("Two occurrences");
+		txt2 = dialog.plugin.localize("were found.");
 	} else {
-		txt = a.length + " " + i18n["occurrences"];
-		txt2 = i18n["were found."];
+		txt = a.length + " " + dialog.plugin.localize("occurrences");
+		txt2 = dialog.plugin.localize("were found.");
 	}
 	var suggestions = suggested_words[this.__msh_origWord];
 	if (suggestions) suggestions = suggestions.split(/,/);
 		else suggestions = [];
 	var select = document.getElementById("v_suggestions");
-	document.getElementById("statusbar").innerHTML = txt + " " + i18n["of the word"] +
+	document.getElementById("statusbar").innerHTML = txt + " " + dialog.plugin.localize("of the word") +
 		' "<b>' + currentElement.__msh_origWord + '</b>"' + " " + txt2;
 	for (var i = select.length; --i >= 0;) {
 		select.remove(i);
@@ -339,13 +326,13 @@
 function displayInfo() {
 	var info = frame.contentWindow.spellcheck_info;
 	if (!info)
-		alert(i18n["No information available"]);
+		alert(dialog.plugin.localize("No information available"));
 	else {
-		var txt = i18n["Document information"] + "\n" ;
+		var txt = dialog.plugin.localize("Document information") + "\n" ;
 		for (var i in info) {
-			txt += "\n" + i18n[i] + " : " + info[i];
+			txt += "\n" + dialog.plugin.localize(i) + " : " + info[i];
 		}
-		txt += " " + i18n["seconds"];
+		txt += " " + dialog.plugin.localize("seconds");
 		alert(txt);
 	}
 	return false;
@@ -359,7 +346,7 @@
 	fixedWords = [];
 	suggested_words = frame.contentWindow.suggested_words;
 
-	document.getElementById("status").innerHTML = i18n["HTMLArea Spell Checker"]; 
+	document.getElementById("status").innerHTML = dialog.plugin.localize("HTMLArea Spell Checker");
 	var doc = frame.contentWindow.document;
 	var spans = doc.getElementsByTagName("span");
 	var sps = [];
@@ -391,10 +378,10 @@
 	wrongWords = sps;
 	if (sps.length == 0) {
 		if (!modified) {
-			alert(i18n["NO_ERRORS_CLOSING"]);
+			alert(dialog.plugin.localize("NO_ERRORS_CLOSING"));
 			window.close();
 		} else {
-			alert(i18n["NO_ERRORS"]);
+			alert(dialog.plugin.localize("NO_ERRORS"));
 		}
 		return false;
 	}
@@ -403,8 +390,8 @@
 	for (var i = as.length; --i >= 0;) {
 		var a = as[i];
 		a.onclick = function() {
-			if (confirm(i18n["CONFIRM_LINK_CLICK"] + ":\n" +
-				    this.href + "\n" + i18n["I will open it in a new page."])) {
+			if (confirm(dialog.plugin.localize("CONFIRM_LINK_CLICK") + ":\n" +
+				    this.href + "\n" + dialog.plugin.localize("I will open it in a new page."))) {
 				window.open(this.href);
 			}
 			return false;
@@ -435,3 +422,4 @@
 		select.selectedIndex = selectedOptionIndex;
 	}
 };
+
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/spell-checker.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/spell-checker.js	(revision 2968)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/spell-checker.js	(working copy)
@@ -2,7 +2,7 @@
 *  Copyright notice
 *
 *  (c) 2003 dynarch.com. Authored by Mihai Bazon, sponsored by www.americanbible.org.
-*  (c) 2004, 2005, 2006 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  (c) 2004-2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -32,58 +32,72 @@
  *
  * TYPO3 CVS ID: $Id$
  */
-
-SpellChecker = function(editor) {
-	this.editor = editor;
-	var cfg = editor.config;
-	var actionHandlerFunctRef = SpellChecker.actionHandler(this);
-
-	cfg.registerButton("SpellCheck", 
-		SpellChecker_langArray["SC-spell-check"],
-		editor.imgURL("spell-check.gif", "SpellChecker"),
-		false,
-		actionHandlerFunctRef
-	);
-};
-
-SpellChecker.I18N = SpellChecker_langArray;
-
-SpellChecker._pluginInfo = {
-	name 		: "SpellChecker",
-	version 	: "2.1",
-	developer 	: "Mihai Bazon & Stanislas Rolland",
-	developer_url 	: "http://dynarch.com/mishoo/",
-	c_owner 	: "Mihai Bazon & Stanislas Rolland",
-	sponsor 	: "American Bible Society & Fructifor Inc.",
-	sponsor_url 	: "http://www.fructifor.ca/",
-	license 	: "GPL"
-};
-
-SpellChecker.actionHandler = function(instance) {
-	return (function(editor,id) {
-		instance.buttonPress(editor, id);
-	});
-};
-
-SpellChecker.prototype.buttonPress = function(editor, id) {
-	var editorNumber = editor._editorNumber;
-	switch (id) {
-	    case "SpellCheck":
-		SpellChecker.editor = editor;
-		SpellChecker.init = true;
-		SpellChecker.f_dictionary = _spellChecker_lang;
-		SpellChecker.f_charset = _spellChecker_charset;
-		SpellChecker.f_pspell_mode = _spellChecker_mode;
-		SpellChecker.enablePersonalDicts = RTEarea[editorNumber]["enablePersonalDicts"];
-		SpellChecker.userUid = RTEarea[editorNumber]["userUid"];
-		var param = new Object();
-		param.editor = editor;
-		param.HTMLArea = HTMLArea;
-		if (SpellChecker.f_charset.toLowerCase() == 'iso-8859-1') editor._popupDialog("plugin://SpellChecker/spell-check-ui-iso-8859-1", null, param, 670, 515);
-    			else editor._popupDialog("plugin://SpellChecker/spell-check-ui", null, param, 670, 515);
-		break;
+SpellChecker = HTMLArea.Plugin.extend({
+		
+	constructor : function(editor, pluginName) {
+		this.base(editor, pluginName);
+	},
+	
+	/*
+	 * This function gets called by the class constructor
+	 */
+	configurePlugin : function(editor) {
+		
+		this.pageTSconfiguration = this.editorConfiguration.buttons.spellcheck;
+		this.contentISOLanguage = this.pageTSconfiguration.contentISOLanguage;
+		this.contentCharset = this.pageTSconfiguration.contentCharset;
+		this.spellCheckerMode = this.pageTSconfiguration.spellCheckerMode;
+		this.enablePersonalDicts = this.pageTSconfiguration.enablePersonalDicts;
+		this.userUid = this.editorConfiguration.userUid;
+		
+		/*
+		 * Registering plugin "About" information
+		 */
+		var pluginInformation = {
+			version		: "2.2",
+			developer	: "Mihai Bazon & Stanislas Rolland",
+			developerUrl	: "http://dynarch.com/mishoo/",
+			copyrightOwner	: "Mihai Bazon & Stanislas Rolland",
+			sponsor		: "American Bible Society & Fructifor Inc.",
+			sponsorUrl	: "http://www.fructifor.ca/",
+			license		: "GPL"
+		};
+		this.registerPluginInformation(pluginInformation);
+		
+		/*
+		 * Registering the button
+		 */
+		var buttonId = "SpellCheck";
+		var buttonConfiguration = {
+			id		: buttonId,
+			tooltip		: this.localize("SC-spell-check"),
+			action		: "onButtonPress",
+			dialog		: true
+		};
+		this.registerButton(buttonConfiguration);
+	},
+	
+	/*
+	 * This function gets called when the button was pressed.
+	 *
+	 * @param	object		editor: the editor instance
+	 * @param	string		id: the button id or the key
+	 *
+	 * @return	boolean		false if action is completed
+	 */
+	onButtonPress : function (editor, id, target) {
+			// Could be a button or its hotkey
+		var buttonId = this.translateHotKey(id);
+		buttonId = buttonId ? buttonId : id;
+		
+		var editorNumber = editor._editorNumber;
+		switch (buttonId) {
+			case "SpellCheck":
+				var charset = (this.contentCharset.toLowerCase() == 'iso-8859-1') ? "-iso-8859-1" : "";
+				this.dialog = this.openDialog(buttonId, this.makeUrlFromPopupName("spell-check-ui" + charset), null, null, {width:670, height:515});
+				break;
+		}
+		return false;
 	}
-};
+});
 
-// this needs to be global, it's accessed from spell-check-ui.html
-SpellChecker.editor = null;
Index: typo3/sysext/rtehtmlarea/mod2/class.tx_rtehtmlarea_acronym_mod.php
===================================================================
--- typo3/sysext/rtehtmlarea/mod2/class.tx_rtehtmlarea_acronym_mod.php	(revision 2968)
+++ typo3/sysext/rtehtmlarea/mod2/class.tx_rtehtmlarea_acronym_mod.php	(working copy)
@@ -52,16 +52,12 @@
 		$this->doc = t3lib_div::makeInstance('template');
 		$this->doc->docType = 'xhtml_trans';
 		$this->doc->backPath = $BACK_PATH;
-		if ($this->doc->styleSheetFile_post) {
-			$styleDir = dirname(dirname($this->doc->styleSheetFile_post));
-			$this->doc->styleSheetFile_post = $styleDir.'/rtehtmlarea/htmlarea.css';
-		} else {
-			$this->doc->styleSheetFile_post = $BACK_PATH . t3lib_extMgm::extRelPath('rtehtmlarea') . 'htmlarea/skins/default/htmlarea.css';
-		}
+		$this->doc->styleSheetFile = "";
+		$this->doc->styleSheetFile_post = "";
 		$this->doc->bodyTagAdditions = 'class="popupwin" onload="init();"';
 		$this->doc->form = '<form action="" id="acronymForm" name="acronymForm" method="POST">';
 		$JScode='
-			var dialog = window.opener.HTMLArea.Dialog["Acronym"];
+			var dialog = window.opener.HTMLArea.Dialog.Acronym;
 			var editor = dialog.plugin.editor;
 			var param = null;
 			var html = editor.getSelectedHTML();
@@ -95,7 +91,7 @@
 				}
 				document.getElementById("title").value = param["title"];
 				fillSelect(param["text"]);
-				dialog.resize();
+				if (!HTMLArea.is_ie) dialog.resize();
 			}
 			
 			function init() {
Index: typo3/sysext/rtehtmlarea/pi1/class.tx_rtehtmlarea_pi1.php
===================================================================
--- typo3/sysext/rtehtmlarea/pi1/class.tx_rtehtmlarea_pi1.php	(revision 2968)
+++ typo3/sysext/rtehtmlarea/pi1/class.tx_rtehtmlarea_pi1.php	(working copy)
@@ -46,6 +46,8 @@
 	var $siteUrl;
 	var $charset = 'utf-8';
 	var $parserCharset = 'utf-8';
+	var $defaultAspellEncoding = 'utf-8';
+	var $aspellEncoding;
 	var $result;
 	var $text;
 	var $misspelled = array();
@@ -63,7 +65,8 @@
 	var $uploadFolder = 'uploads/tx_rtehtmlarea/';
 	var $userUid;
 	var $personalDictsArg = '';
-
+	var $xmlCharacterData = '';
+	
 	/**
 	 * Main class of Spell Checker plugin for Typo3 CMS
 	 *
@@ -91,8 +94,9 @@
 			$AspellVersionString = explode('Aspell', shell_exec( $this->AspellDirectory.' -v'));
 			$AspellVersion = substr( $AspellVersionString[1], 0, 4);
 			if( doubleval($AspellVersion) < doubleval('0.5') && (!$this->pspell_is_available || $this->forceCommandMode)) echo('Configuration problem: Aspell version ' . $AspellVersion . ' too old. Spell checking cannot be performed in command mode');
+			$this->defaultAspellEncoding = trim(shell_exec($this->AspellDirectory.' config encoding'));
 		}
-
+		
 			// Setting the list of dictionaries
 		if(!$safe_mode_is_enabled && (!$this->pspell_is_available || $this->forceCommandMode)) {
 			$dictionaryList = shell_exec( $this->AspellDirectory.' dump dicts');
@@ -143,9 +147,7 @@
 			$this->dictionary = $defaultDictionary;
 		}
 		$dictionaries = substr_replace($dictionaryList, '@'.$this->dictionary, strpos($dictionaryList, $this->dictionary), strlen($this->dictionary));
-
-		//$locale = setlocale(LC_ALL, $this->dictionary);
-
+		
 			// Setting the pspell suggestion mode
 		$this->pspellMode = t3lib_div::_POST('pspell_mode')?t3lib_div::_POST('pspell_mode'): $this->pspellMode;
 			// Now sanitize $this->pspellMode
@@ -163,12 +165,23 @@
 				$pspellModeFlag = PSPELL_NORMAL;
 				break;
 		}
-
+		
 			// Setting the charset
-		if( t3lib_div::_POST('pspell_charset') ) $this->charset = trim(t3lib_div::_POST('pspell_charset'));
-		if(strtolower($this->charset) == 'iso-8859-1') $this->parserCharset = strtolower($this->charset);
+		if (t3lib_div::_POST('pspell_charset')) {
+			$this->charset = trim(t3lib_div::_POST('pspell_charset'));
+		}
+		if (strtolower($this->charset) == 'iso-8859-1') {
+			$this->parserCharset = strtolower($this->charset);
+		}
 		$internal_encoding = mb_internal_encoding(strtoupper($this->parserCharset));
-		//$regex_encoding = mb_regex_encoding (strtoupper($this->parserCharset));
+		//$regex_encoding = mb_regex_encoding(strtoupper($this->parserCharset));
+		
+			// In some configurations, Aspell uses 'iso8859-1' instead of 'iso-8859-1'
+		$this->aspellEncoding = $this->parserCharset;
+		if ($this->parserCharset == 'iso-8859-1' && strstr($this->defaultAspellEncoding, '8859-1')) {
+			$this->aspellEncoding = $this->defaultAspellEncoding;
+		}
+		
 			// However, we are going to work only in the parser charset
 		if($this->pspell_is_available && !$this->forceCommandMode) {
 			$this->pspell_link = pspell_new($this->dictionary, '', '', $this->parserCharset, $pspellModeFlag);
@@ -217,7 +230,7 @@
 					fwrite($filehandle, $cmd, strlen($cmd));
 					fclose($filehandle);
 						// $this->personalDictsArg has already been escapeshellarg()'ed above, it is an optional paramter and might be empty here
-					$AspellCommand = 'cat ' . escapeshellarg($tmpFileName) . ' | ' . $this->AspellDirectory . ' -a --mode=none' . $this->personalDictsArg . ' --lang=' . escapeshellarg($this->dictionary) . ' --encoding=' . escapeshellarg($this->parserCharset) . ' 2>&1';
+					$AspellCommand = 'cat ' . escapeshellarg($tmpFileName) . ' | ' . $this->AspellDirectory . ' -a --mode=none' . $this->personalDictsArg . ' --lang=' . escapeshellarg($this->dictionary) . ' --encoding=' . escapeshellarg($this->aspellEncoding) . ' 2>&1';
 					print $AspellCommand . "\n";
 					print shell_exec($AspellCommand);
 					t3lib_div::unlink_tempfile($tmpFileName);
@@ -254,15 +267,15 @@
 			$parser = xml_parser_create(strtoupper($this->parserCharset));
 			xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
 			xml_set_object($parser, &$this);
-			if( !xml_set_element_handler( $parser, 'startHandler', 'endHandler')) echo('Bad xml handler setting');
-			if( !xml_set_character_data_handler ( $parser, 'spellCheckHandler')) echo('Bad xml handler setting');
-			if( !xml_set_default_handler( $parser, 'defaultHandler')) echo('Bad xml handler setting');
-			if(! xml_parse($parser,'<?xml version="1.0" encoding="' . $this->parserCharset . '"?><spellchecker> ' . mb_ereg_replace('&nbsp;', ' ', $content) . ' </spellchecker>')) echo('Bad parsing');
-			if( xml_get_error_code($parser)) {
+			if (!xml_set_element_handler($parser, 'startHandler', 'endHandler')) echo('Bad xml handler setting');
+			if (!xml_set_character_data_handler($parser, 'collectDataHandler')) echo('Bad xml handler setting');
+			if (!xml_set_default_handler($parser, 'defaultHandler')) echo('Bad xml handler setting');
+			if (!xml_parse($parser,'<?xml version="1.0" encoding="' . $this->parserCharset . '"?><spellchecker> ' . mb_ereg_replace('&nbsp;', ' ', $content) . ' </spellchecker>')) echo('Bad parsing');
+			if (xml_get_error_code($parser)) {
 				die('Line '.xml_get_current_line_number($parser).': '.xml_error_string(xml_get_error_code($parser)));
 			}
 			xml_parser_free($parser);
-			if($this->pspell_is_available && !$this->forceCommandMode) {
+			if ($this->pspell_is_available && !$this->forceCommandMode) {
 				pspell_clear_session ($this->pspell_link);
 			}
 			$this->result .= 'var suggested_words = {' . $this->suggestedWords . '};
@@ -287,12 +300,18 @@
 </body></html>';
 
 				// Outputting
+			header('Content-Type: text/html; charset=' . strtoupper($this->parserCharset));
 			echo $this->result;
 		}
 
 	}  // end of function main
 
 	function startHandler($xml_parser, $tag, $attributes) {
+		if (strlen($this->xmlCharacterData)) {
+			$this->spellCheckHandler($xml_parser, $this->xmlCharacterData);
+			$this->xmlCharacterData = '';
+		}
+		
 		switch($tag) {
 			case 'spellchecker':
 				break;
@@ -322,6 +341,11 @@
 	}
 
 	function endHandler($xml_parser, $tag) {
+		if (strlen($this->xmlCharacterData)) {
+			$this->spellCheckHandler($xml_parser, $this->xmlCharacterData);
+			$this->xmlCharacterData = '';
+		}
+
 		switch($tag) {
 			case 'spellchecker':
 				break;
@@ -376,7 +400,7 @@
 					if(!$filehandle = fopen($tmpFileName,'wb')) echo('SpellChecker tempfile open error');
 					if(!fwrite($filehandle, $word)) echo('SpellChecker tempfile write error');
 					if(!fclose($filehandle)) echo('SpellChecker tempfile close error');
-					$AspellCommand = 'cat ' . escapeshellarg($tmpFileName) . ' | ' . $this->AspellDirectory . ' -a check --mode=none --sug-mode=' . escapeshellarg($this->pspellMode) . $this->personalDictsArg . ' --lang=' . escapeshellarg($this->dictionary) . ' --encoding=' . escapeshellarg($this->parserCharset) . ' 2>&1';
+					$AspellCommand = 'cat ' . escapeshellarg($tmpFileName) . ' | ' . $this->AspellDirectory . ' -a check --mode=none --sug-mode=' . escapeshellarg($this->pspellMode) . $this->personalDictsArg . ' --lang=' . escapeshellarg($this->dictionary) . ' --encoding=' . escapeshellarg($this->aspellEncoding) . ' 2>&1';
 					$AspellAnswer = shell_exec($AspellCommand);
 					$AspellResultLines = array();
 					$AspellResultLines = t3lib_div::trimExplode(chr(10), $AspellAnswer, 1);
@@ -416,6 +440,10 @@
 		unset($incurrent);
 		return;
 	}
+	
+	function collectDataHandler($xml_parser, $string) {
+		$this->xmlCharacterData .= $string;
+	}
 
 	function defaultHandler($xml_parser, $string) {
 		$this->text .= $string;
Index: typo3/sysext/rtehtmlarea/pi2/class.tx_rtehtmlarea_pi2.php
===================================================================
--- typo3/sysext/rtehtmlarea/pi2/class.tx_rtehtmlarea_pi2.php	(revision 2968)
+++ typo3/sysext/rtehtmlarea/pi2/class.tx_rtehtmlarea_pi2.php	(working copy)
@@ -53,9 +53,6 @@
 	var $thisConfig;
 	var $confValues;
 	var $language;
-	var $spellCheckerLanguage;
-	var $spellCheckerCharset;
-	var $spellCheckerMode;
 	var $specConf;
 	var $LOCAL_LANG;
 
@@ -125,17 +122,62 @@
 			$this->hostURL = preg_replace('/^(http|https)/', 'https', $this->hostURL);
 		}
 		
+		/* =======================================
+		 * LANGUAGES & CHARACTER SETS
+		 * =======================================
+		 */
 			// Language
 		$TSFE->initLLvars();
 		$this->language = $TSFE->lang;
 		$this->LOCAL_LANG = t3lib_div::readLLfile('EXT:' . $this->ID . '/locallang.xml', $this->language);
-		if ($this->language=='default' || !$this->language)	{
-			$this->language='en';
+		if ($this->language == 'default' || !$this->language)	{
+			$this->language = 'en';
 		}
+		
+		$this->contentISOLanguage = $TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['defaultDictionary'];
+		$this->contentLanguageUid = ($row['sys_language_uid'] > 0) ? $row['sys_language_uid'] : 0;
+		if (t3lib_extMgm::isLoaded('static_info_tables')) {
+			if ($this->contentLanguageUid) {
+				$tableA = 'sys_language';
+				$tableB = 'static_languages';
+				$languagesUidsList = $this->contentLanguageUid;
+				$selectFields = $tableA . '.uid,' . $tableB . '.lg_iso_2,' . $tableB . '.lg_country_iso_2,' . $tableB . '.lg_typo3';
+				$tableAB = $tableA . ' LEFT JOIN ' . $tableB . ' ON ' . $tableA . '.static_lang_isocode=' . $tableB . '.uid';
+				$whereClause = $tableA . '.uid IN (' . $languagesUidsList . ') ';
+				$whereClause .= t3lib_BEfunc::BEenableFields($tableA);
+				$whereClause .= t3lib_BEfunc::deleteClause($tableA);
+				$res = $TYPO3_DB->exec_SELECTquery($selectFields, $tableAB, $whereClause);
+				while($languageRow = $TYPO3_DB->sql_fetch_assoc($res)) {
+					$this->contentISOLanguage = strtolower(trim($languageRow['lg_iso_2']).(trim($languageRow['lg_country_iso_2'])?'_'.trim($languageRow['lg_country_iso_2']):''));
+					$this->contentTypo3Language = strtolower(trim($languageRow['lg_typo3']));
+				}
+			} else {
+				$this->contentISOLanguage = trim($TYPO3_CONF_VARS['EXTCONF'][$this->ID]['defaultDictionary']) ? trim($TYPO3_CONF_VARS['EXTCONF'][$this->ID]['defaultDictionary']) : 'en';
+				$selectFields = 'lg_iso_2, lg_typo3';
+				$tableAB = 'static_languages';
+				$whereClause = 'lg_iso_2 = ' . $TYPO3_DB->fullQuoteStr(strtoupper($this->contentISOLanguage), $tableAB);
+				$res = $TYPO3_DB->exec_SELECTquery($selectFields, $tableAB, $whereClause);
+				while($languageRow = $TYPO3_DB->sql_fetch_assoc($res)) {
+					$this->contentTypo3Language = strtolower(trim($languageRow['lg_typo3']));
+				}
+			}
+		}
+		
+		$this->contentISOLanguage = $this->contentISOLanguage?$this->contentISOLanguage:$this->language;
+		$this->contentTypo3Language = $this->contentTypo3Language?$this->contentTypo3Language:$TSFE->lang;
+		if ($this->contentTypo3Language == 'default') {
+			$this->contentTypo3Language = 'en';
+		}
+		
 			// Character set
 		$this->charset = $TSFE->labelsCharset;
 		$this->OutputCharset  = $TSFE->metaCharset ? $TSFE->metaCharset : $TSFE->renderCharset;
 		
+			// Set the charset of the content
+		$this->contentCharset = $TSFE->csConvObj->charSetArray[$this->contentTypo3Language];
+		$this->contentCharset = $this->contentCharset ? $this->contentCharset : 'iso-8859-1';
+		$this->contentCharset = trim($TSFE->config['config']['metaCharset']) ? trim($TSFE->config['config']['metaCharset']) : $this->contentCharset;
+		
 		/* =======================================
 		 * TOOLBAR CONFIGURATION
 		 * =======================================
@@ -150,7 +192,6 @@
 			$this->thisConfig['hideTableOperationsInToolbar'] = 0;
 			$this->thisConfig['disableEnterParagraphs'] = 1;
 		}
-		if(!t3lib_extMgm::isLoaded('static_info_tables') || in_array($this->language, t3lib_div::trimExplode(',', $TYPO3_CONF_VARS['EXTCONF'][$this->ID]['noSpellCheckLanguages']))) $hidePlugins[] = 'SpellChecker';
 		$this->pluginEnabledArray = array_diff($this->pluginEnabledArray, $hidePlugins);
 		
 			// Toolbar
@@ -170,41 +211,6 @@
 		 * =======================================
 		 */
 		 
-		if( $this->isPluginEnabled('SpellChecker') ) {
-				// Set the language of the content for the SpellChecker
-			$this->spellCheckerLanguage = $TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['defaultDictionary'];
-			if($row['sys_language_uid']) {
-				$tableA = 'sys_language';
-				$tableB = 'static_languages';
-				$languagesUidsList = $row['sys_language_uid'];
-				$selectFields = $tableA . '.uid,' . $tableB . '.lg_iso_2,' . $tableB . '.lg_country_iso_2,' . $tableB . '.lg_typo3';
-				$table = $tableA . ' LEFT JOIN ' . $tableB . ' ON ' . $tableA . '.static_lang_isocode=' . $tableB . '.uid';
-				$whereClause = $tableA . '.uid IN (' . $languagesUidsList . ') ';
-				$whereClause .= $TSFE->cObj->enableFields($tableA);
-				$res = $TYPO3_DB->exec_SELECTquery($selectFields, $table, $whereClause);
-				while ( $languageRow = $TYPO3_DB->sql_fetch_assoc($res) ) {
-					$this->spellCheckerLanguage = strtolower(trim($languageRow['lg_iso_2']).(trim($languageRow['lg_country_iso_2'])?'_'.trim($languageRow['lg_country_iso_2']):''));
-					$this->spellCheckerTypo3Language = strtolower(trim($languageRow['lg_typo3']));
-				}
-			}
-			$this->spellCheckerLanguage = $this->spellCheckerLanguage?$this->spellCheckerLanguage:$this->language;
-			$this->spellCheckerTypo3Language = $this->spellCheckerTypo3Language?$this->spellCheckerTypo3Language:$TSFE->lang;
-			if ($this->spellCheckerTypo3Language=='default') {
-				$this->spellCheckerTypo3Language='en';
-			}
-
-				// Set the charset of the content for the SpellChecker
-			$this->spellCheckerCharset = $TSFE->csConvObj->charSetArray[$this->spellCheckerTypo3Language];
-			$this->spellCheckerCharset = $this->spellCheckerCharset ? $this->spellCheckerCharset : 'iso-8859-1';
-			$this->spellCheckerCharset = trim($TSFE->config['config']['metaCharset']) ? trim($TSFE->config['config']['metaCharset']) : $this->spellCheckerCharset;
-
-				// Set the SpellChecker mode
-			$this->spellCheckerMode = isset($this->thisConfig['HTMLAreaPspellMode']) ? trim($this->thisConfig['HTMLAreaPspellMode']) : 'normal';
-			if( !in_array($this->spellCheckerMode, $this->spellCheckerModes)) {
-				$this->spellCheckerMode = 'normal';
-			}
-		}
-
 		if( $this->isPluginEnabled('QuickTag') && trim($this->thisConfig['hideTags'])) {
 			$this->quickTagHideTags = implode(',', t3lib_div::trimExplode(',', $this->thisConfig['hideTags'], 1));
 		}
Index: typo3/sysext/t3skin/rtehtmlarea/htmlarea.css
===================================================================
--- typo3/sysext/t3skin/rtehtmlarea/htmlarea.css	(revision 2968)
+++ typo3/sysext/t3skin/rtehtmlarea/htmlarea.css	(working copy)
@@ -250,7 +250,8 @@
 	background-color:#fff;color:#f00;cursor:pointer;
 }
 .popupwin {
-	background-color:#EFEFF4;;color:ButtonText;
+	color: #212424;background-color:#EFEFF4;
+	font-size:11px;font-family:Verdana, Helvetica, Geneva, Arial, sans-serif;
 }
 .popupwin body {
 	color: #212424;
