Index: /FCKeditor/trunk/editor/_source/classes/fckeditingarea.js
===================================================================
--- /FCKeditor/trunk/editor/_source/classes/fckeditingarea.js	(revision 778)
+++ /FCKeditor/trunk/editor/_source/classes/fckeditingarea.js	(revision 779)
@@ -153,5 +153,5 @@
 function FCKEditingArea_CompleteStart()
 {
-	// Of Firefox, the DOM takes a little to become available. So we must wait for it in a loop.
+	// On Firefox, the DOM takes a little to become available. So we must wait for it in a loop.
 	if ( !this.document.body )
 	{
@@ -161,4 +161,5 @@
 
 	var oEditorArea = this._FCKEditingArea ;
+	
 	oEditorArea.MakeEditable() ;
 
Index: /FCKeditor/trunk/editor/_source/classes/fckimagepreloader.js
===================================================================
--- /FCKeditor/trunk/editor/_source/classes/fckimagepreloader.js	(revision 778)
+++ /FCKeditor/trunk/editor/_source/classes/fckimagepreloader.js	(revision 779)
@@ -45,6 +45,6 @@
 		{
 			var eImg = document.createElement( 'img' ) ;
-			eImg.onload = eImg.onerror = _FCKImagePreloader_OnImage ;
-			eImg._FCKImagePreloader = this ;
+			FCKTools.AddEventListenerEx( eImg, 'load', _FCKImagePreloader_OnImage, this ) ;
+			FCKTools.AddEventListenerEx( eImg, 'error', _FCKImagePreloader_OnImage, this ) ;
 			eImg.src = aImages[i] ;
 
@@ -58,11 +58,7 @@
 var _FCKImagePreloader_ImageCache = new Array() ;
 
-function _FCKImagePreloader_OnImage()
+function _FCKImagePreloader_OnImage( ev, imagePreloader )
 {
-	var oImagePreloader = this._FCKImagePreloader ;
-
-	if ( (--oImagePreloader._PreloadCount) == 0 && oImagePreloader.OnComplete )
-		oImagePreloader.OnComplete() ;
-
-	this._FCKImagePreloader = null ;
+	if ( (--imagePreloader._PreloadCount) == 0 && imagePreloader.OnComplete )
+		imagePreloader.OnComplete() ;
 }
Index: /FCKeditor/trunk/editor/_source/classes/fckpanel.js
===================================================================
--- /FCKeditor/trunk/editor/_source/classes/fckpanel.js	(revision 778)
+++ /FCKeditor/trunk/editor/_source/classes/fckpanel.js	(revision 779)
@@ -90,5 +90,5 @@
 	oDocument.dir = FCKLang.Dir ;
 
-	oDocument.oncontextmenu = FCKTools.CancelEvent ;
+	FCKTools.AddEventListener( oDocument, 'contextmenu', FCKTools.CancelEvent ) ;
 
 	oDocument.body.bgColor = '#FF0000' ;		// @Packager.RemoveLine - Just to be sure that the context menu popup is not bigger that it should be.
Index: /FCKeditor/trunk/editor/_source/classes/fckspecialcombo.js
===================================================================
--- /FCKeditor/trunk/editor/_source/classes/fckspecialcombo.js	(revision 778)
+++ /FCKeditor/trunk/editor/_source/classes/fckspecialcombo.js	(revision 779)
@@ -67,14 +67,14 @@
 }
 
-function FCKSpecialCombo_ItemOnClick()
+function FCKSpecialCombo_ItemOnClick( ev, specialCombo, itemId )
 {
 	this.className = this.originalClass ;
 
-	this.FCKSpecialCombo._Panel.Hide() ;
-
-	this.FCKSpecialCombo.SetLabel( this.FCKItemLabel ) ;
-
-	if ( typeof( this.FCKSpecialCombo.OnSelect ) == 'function' )
-		this.FCKSpecialCombo.OnSelect( this.FCKItemID, this ) ;
+	specialCombo._Panel.Hide() ;
+
+	specialCombo.SetLabel( this.FCKItemLabel ) ;
+
+	if ( typeof( specialCombo.OnSelect ) == 'function' )
+		specialCombo.OnSelect( itemId, this ) ;
 }
 
@@ -86,6 +86,8 @@
 			this.Items[key] = null ;
 	}
-	while (this._ItemsHolderEl.firstChild)
-		this._ItemsHolderEl.removeChild(this._ItemsHolderEl.firstChild);
+	
+	var itemsholder = this._ItemsHolderEl ;
+	while ( itemsholder.firstChild )
+		itemsholder.removeChild( itemsholder.firstChild ) ;
 }
 
@@ -96,7 +98,5 @@
 	oDiv.className = oDiv.originalClass = 'SC_Item' ;
 	oDiv.innerHTML = html ;
-	oDiv.FCKItemID = id ;
 	oDiv.FCKItemLabel = label || id ;
-	oDiv.FCKSpecialCombo = this ;
 	oDiv.Selected = false ;
 
@@ -108,7 +108,7 @@
 		oDiv.style.backgroundColor = bgColor ;
 
-	oDiv.onmouseover	= FCKSpecialCombo_ItemOnMouseOver ;
-	oDiv.onmouseout		= FCKSpecialCombo_ItemOnMouseOut ;
-	oDiv.onclick		= FCKSpecialCombo_ItemOnClick ;
+	FCKTools.AddEventListenerEx( oDiv, 'mouseover', FCKSpecialCombo_ItemOnMouseOver ) ;
+	FCKTools.AddEventListenerEx( oDiv, 'mouseout', FCKSpecialCombo_ItemOnMouseOut ) ;
+	FCKTools.AddEventListenerEx( oDiv, 'click', FCKSpecialCombo_ItemOnClick, [ this, id ] ) ;
 
 	this.Items[ id.toString().toLowerCase() ] = oDiv ;
@@ -170,5 +170,5 @@
 {
 	text = ( !text || text.length == 0 ) ? '&nbsp;' : text ;
-	
+
 	if ( text == this.Label )
 		return ;
@@ -263,9 +263,7 @@
 	// Events Handlers
 
-	oField.SpecialCombo = this ;
-
-	oField.onmouseover	= FCKSpecialCombo_OnMouseOver ;
-	oField.onmouseout	= FCKSpecialCombo_OnMouseOut ;
-	oField.onclick		= FCKSpecialCombo_OnClick ;
+	FCKTools.AddEventListenerEx( oField, 'mouseover', FCKSpecialCombo_OnMouseOver, this ) ;
+	FCKTools.AddEventListenerEx( oField, 'mouseout', FCKSpecialCombo_OnMouseOut, this ) ;
+	FCKTools.AddEventListenerEx( oField, 'click', FCKSpecialCombo_OnClick, this ) ;
 
 	FCKTools.DisableSelection( this._Panel.Document.body ) ;
@@ -286,26 +284,26 @@
 }
 
-function FCKSpecialCombo_OnMouseOver()
-{
-	if ( this.SpecialCombo.Enabled )
-	{
-		switch ( this.SpecialCombo.Style )
+function FCKSpecialCombo_OnMouseOver( ev, specialCombo )
+{
+	if ( specialCombo.Enabled )
+	{
+		switch ( specialCombo.Style )
 		{
-		case FCK_TOOLBARITEM_ONLYICON :
-			this.className = 'TB_Button_On_Over';
-			break ;
-		case FCK_TOOLBARITEM_ONLYTEXT :
-			this.className = 'TB_Button_On_Over';
-			break ;
-		case FCK_TOOLBARITEM_ICONTEXT :
-			this.className = 'SC_Field SC_FieldOver' ;
-			break ;
+			case FCK_TOOLBARITEM_ONLYICON :
+				this.className = 'TB_Button_On_Over';
+				break ;
+			case FCK_TOOLBARITEM_ONLYTEXT :
+				this.className = 'TB_Button_On_Over';
+				break ;
+			case FCK_TOOLBARITEM_ICONTEXT :
+				this.className = 'SC_Field SC_FieldOver' ;
+				break ;
 		}
 	}
 }
 
-function FCKSpecialCombo_OnMouseOut()
-{
-	switch ( this.SpecialCombo.Style )
+function FCKSpecialCombo_OnMouseOut( ev, specialCombo )
+{
+	switch ( specialCombo.Style )
 	{
 		case FCK_TOOLBARITEM_ONLYICON :
@@ -321,5 +319,5 @@
 }
 
-function FCKSpecialCombo_OnClick( e )
+function FCKSpecialCombo_OnClick( e, specialCombo )
 {
 	// For Mozilla we must stop the event propagation to avoid it hiding
@@ -331,15 +329,13 @@
 //	}
 
-	var oSpecialCombo = this.SpecialCombo ;
-
-	if ( oSpecialCombo.Enabled )
-	{
-		var oPanel			= oSpecialCombo._Panel ;
-		var oPanelBox		= oSpecialCombo._PanelBox ;
-		var oItemsHolder	= oSpecialCombo._ItemsHolderEl ;
-		var iMaxHeight		= oSpecialCombo.PanelMaxHeight ;
-
-		if ( oSpecialCombo.OnBeforeClick )
-			oSpecialCombo.OnBeforeClick( oSpecialCombo ) ;
+	if ( specialCombo.Enabled )
+	{
+		var oPanel			= specialCombo._Panel ;
+		var oPanelBox		= specialCombo._PanelBox ;
+		var oItemsHolder	= specialCombo._ItemsHolderEl ;
+		var iMaxHeight		= specialCombo.PanelMaxHeight ;
+
+		if ( specialCombo.OnBeforeClick )
+			specialCombo.OnBeforeClick( specialCombo ) ;
 
 		// This is a tricky thing. We must call the "Load" function, otherwise
@@ -358,5 +354,5 @@
 			oPanelBox.style.height = '' ;
 
-//		oPanel.PanelDiv.style.width = oSpecialCombo.PanelWidth + 'px' ;
+//		oPanel.PanelDiv.style.width = specialCombo.PanelWidth + 'px' ;
 
 		oPanel.Show( 0, this.offsetHeight, this ) ;
Index: /FCKeditor/trunk/editor/_source/classes/fcktoolbar.js
===================================================================
--- /FCKeditor/trunk/editor/_source/classes/fcktoolbar.js	(revision 778)
+++ /FCKeditor/trunk/editor/_source/classes/fcktoolbar.js	(revision 779)
@@ -26,7 +26,4 @@
 {
 	this.Items = new Array() ;
-
-	if ( FCK.IECleanup )
-		FCK.IECleanup.AddItem( this, FCKToolbar_Cleanup ) ;
 }
 
@@ -63,15 +60,7 @@
 FCKToolbar.prototype.Create = function( parentElement )
 {
-	if ( this.MainElement )
-	{
-//		this._Cleanup() ;
-		if ( this.MainElement.parentNode )
-			this.MainElement.parentNode.removeChild( this.MainElement ) ;
-		this.MainElement = null ;
-	}
-
 	var oDoc = FCKTools.GetElementDocument( parentElement ) ;
 
-	var e = this.MainElement = oDoc.createElement( 'table' ) ;
+	var e = oDoc.createElement( 'table' ) ;
 	e.className = 'TB_Toolbar' ;
 	e.style.styleFloat = e.style.cssFloat = ( FCKLang.Dir == 'ltr' ? 'left' : 'right' ) ;
@@ -80,5 +69,5 @@
 	e.cellSpacing = 0 ;
 
-	this.RowElement = e.insertRow(-1) ;
+	var targetRow = e.insertRow(-1) ;
 
 	// Insert the start cell.
@@ -87,5 +76,5 @@
 	if ( !this.HideStart )
 	{
-		eCell = this.RowElement.insertCell(-1) ;
+		eCell = targetRow.insertCell(-1) ;
 		eCell.appendChild( oDoc.createElement( 'div' ) ).className = 'TB_Start' ;
 	}
@@ -93,5 +82,5 @@
 	for ( var i = 0 ; i < this.Items.length ; i++ )
 	{
-		this.Items[i].Create( this.RowElement.insertCell(-1) ) ;
+		this.Items[i].Create( targetRow.insertCell(-1) ) ;
 	}
 
@@ -99,15 +88,9 @@
 	if ( !this.HideEnd )
 	{
-		eCell = this.RowElement.insertCell(-1) ;
+		eCell = targetRow.insertCell(-1) ;
 		eCell.appendChild( oDoc.createElement( 'div' ) ).className = 'TB_End' ;
 	}
 
 	parentElement.appendChild( e ) ;
-}
-
-function FCKToolbar_Cleanup()
-{
-	this.MainElement = null ;
-	this.RowElement = null ;
 }
 
Index: /FCKeditor/trunk/editor/_source/classes/fcktoolbarbuttonui.js
===================================================================
--- /FCKeditor/trunk/editor/_source/classes/fcktoolbarbuttonui.js	(revision 778)
+++ /FCKeditor/trunk/editor/_source/classes/fcktoolbarbuttonui.js	(revision 779)
@@ -48,21 +48,9 @@
 FCKToolbarButtonUI.prototype.Create = function( parentElement )
 {
-	var oMainElement = this.MainElement ;
-
-	if ( oMainElement )
-	{
-		FCKToolbarButtonUI_Cleanup.call(this) ;
-
-		if ( oMainElement.parentNode )
-			oMainElement.parentNode.removeChild( oMainElement ) ;
-		oMainElement = this.MainElement = null ;
-	}
-
 	var oDoc = FCKTools.GetElementDocument( parentElement ) ;
 
 	// Create the Main Element.
-	oMainElement = this.MainElement = oDoc.createElement( 'DIV' ) ;
-	oMainElement._FCKButton = this ;		// IE Memory Leak (Circular reference).
-	oMainElement.title		= this.Tooltip ;
+	var oMainElement = this.MainElement = oDoc.createElement( 'DIV' ) ;
+	oMainElement.title = this.Tooltip ;
 
 	// The following will prevent the button from catching the focus.
@@ -70,23 +58,7 @@
 		 oMainElement.onmousedown	= FCKTools.CancelEvent ;
 
-	oMainElement.onmouseover = function()
-	{
-		if ( this._FCKState == FCK_TRISTATE_OFF )
-			this.className = 'TB_Button_Off_Over' ;
-		else if ( this._FCKState == FCK_TRISTATE_ON )
-			this.className = 'TB_Button_On_Over' ;
-	}
-	oMainElement.onmouseout = function()
-	{
-		if ( this._FCKState == FCK_TRISTATE_OFF )
-			this.className = 'TB_Button_Off' ;
-		else if ( this._FCKState == FCK_TRISTATE_ON )
-			this.className = 'TB_Button_On' ;
-	}
-	oMainElement.onclick = function()
-	{
-		if ( this._FCKButton.OnClick && this._FCKState != FCK_TRISTATE_DISABLED )
-			this._FCKButton.OnClick( this._FCKButton ) ;
-	}
+	FCKTools.AddEventListenerEx( oMainElement, 'mouseover', FCKToolbarButtonUI_OnMouseOver, this ) ;
+	FCKTools.AddEventListenerEx( oMainElement, 'mouseout', FCKToolbarButtonUI_OnMouseOut, this ) ;
+	FCKTools.AddEventListenerEx( oMainElement, 'click', FCKToolbarButtonUI_OnClick, this ) ;
 
 	this.ChangeState( this.State, true ) ;
@@ -171,14 +143,34 @@
 	}
 
-	this.State = e._FCKState = newState ;
+	this.State = newState ;
+}
+
+function FCKToolbarButtonUI_OnMouseOver( ev, button )
+{
+	if ( button.State == FCK_TRISTATE_OFF )
+		this.className = 'TB_Button_Off_Over' ;
+	else if ( button.State == FCK_TRISTATE_ON )
+		this.className = 'TB_Button_On_Over' ;
+}
+
+function FCKToolbarButtonUI_OnMouseOut( ev, button )
+{
+	if ( button.State == FCK_TRISTATE_OFF )
+		this.className = 'TB_Button_Off' ;
+	else if ( button.State == FCK_TRISTATE_ON )
+		this.className = 'TB_Button_On' ;
+}
+
+function FCKToolbarButtonUI_OnClick( ev, button )
+{
+	if ( button.OnClick && button.State != FCK_TRISTATE_DISABLED )
+		button.OnClick( button ) ;
 }
 
 function FCKToolbarButtonUI_Cleanup()
 {
-	if ( this.MainElement )
-	{
-		this.MainElement._FCKButton = null ;
-		this.MainElement = null ;
-	}
+	// This one should not cause memory leak, but just for safety, let's clean
+	// it up.
+	this.MainElement = null ;
 }
 
Index: /FCKeditor/trunk/editor/_source/commandclasses/fcktextcolorcommand.js
===================================================================
--- /FCKeditor/trunk/editor/_source/commandclasses/fcktextcolorcommand.js	(revision 778)
+++ /FCKeditor/trunk/editor/_source/commandclasses/fcktextcolorcommand.js	(revision 779)
@@ -58,5 +58,5 @@
 FCKTextColorCommand.prototype.SetColor = function( color )
 {
-	var style = FCKStyles.GetStyle( '_FCK_' + 
+	var style = FCKStyles.GetStyle( '_FCK_' +
 		( FCK._ActiveColorPanelType == 'ForeColor' ? 'Color' : 'BackColor' ) ) ;
 
@@ -78,27 +78,33 @@
 }
 
-function FCKTextColorCommand_OnMouseOver()	{ this.className='ColorSelected' ; }
+function FCKTextColorCommand_OnMouseOver()
+{
+	this.className = 'ColorSelected' ;
+}
 
-function FCKTextColorCommand_OnMouseOut()	{ this.className='ColorDeselected' ; }
-
-function FCKTextColorCommand_OnClick()
+function FCKTextColorCommand_OnMouseOut()
 {
 	this.className = 'ColorDeselected' ;
-	this.Command.SetColor( '#' + this.Color ) ;
-	this.Command._Panel.Hide() ;
 }
 
-function FCKTextColorCommand_AutoOnClick()
+function FCKTextColorCommand_OnClick( ev, command, color )
 {
 	this.className = 'ColorDeselected' ;
-	this.Command.SetColor( '' ) ;
-	this.Command._Panel.Hide() ;
+	command.SetColor( '#' + color ) ;
+	command._Panel.Hide() ;
 }
 
-function FCKTextColorCommand_MoreOnClick()
+function FCKTextColorCommand_AutoOnClick( ev, command )
 {
 	this.className = 'ColorDeselected' ;
-	this.Command._Panel.Hide() ;
-	FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, this.Command.SetColor ) ;
+	command.SetColor( '' ) ;
+	command._Panel.Hide() ;
+}
+
+function FCKTextColorCommand_MoreOnClick( ev, command )
+{
+	this.className = 'ColorDeselected' ;
+	command._Panel.Hide() ;
+	FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, command.SetColor ) ;
 }
 
@@ -108,7 +114,7 @@
 	{
 		var oDiv = targetDocument.createElement( "DIV" ) ;
-		oDiv.className		= 'ColorDeselected' ;
-		oDiv.onmouseover	= FCKTextColorCommand_OnMouseOver ;
-		oDiv.onmouseout		= FCKTextColorCommand_OnMouseOut ;
+		oDiv.className = 'ColorDeselected' ;
+		FCKTools.AddEventListenerEx( oDiv, 'mouseover', FCKTextColorCommand_OnMouseOver ) ;
+		FCKTools.AddEventListenerEx( oDiv, 'mouseout', FCKTextColorCommand_OnMouseOut ) ;
 
 		return oDiv ;
@@ -137,8 +143,8 @@
 		</table>' ;
 
-	oDiv.Command = this ;
-	oDiv.onclick = FCKTextColorCommand_AutoOnClick ;
+	FCKTools.AddEventListenerEx( oDiv, 'click', FCKTextColorCommand_AutoOnClick, this ) ;
+
 	if ( FCKBrowserInfo.IsSafari )
-		oDiv.style.width= "96%" ;
+		oDiv.style.width = '96%' ;
 
 	// Create an array of colors based on the configuration file.
@@ -154,9 +160,7 @@
 		{
 			oDiv = oRow.insertCell(-1).appendChild( CreateSelectionDiv() ) ;
-			oDiv.Color = aColors[iCounter] ;
 			oDiv.innerHTML = '<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #' + aColors[iCounter] + '"></div></div>' ;
 
-			oDiv.Command = this ;
-			oDiv.onclick = FCKTextColorCommand_OnClick ;
+			FCKTools.AddEventListenerEx( oDiv, 'click', FCKTextColorCommand_OnClick, [ this, aColors[iCounter] ] ) ;
 		}
 	}
@@ -169,7 +173,7 @@
 	oDiv.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">' + FCKLang.ColorMoreColors + '</td></tr></table>' ;
 
-	oDiv.Command = this ;
-	oDiv.onclick = FCKTextColorCommand_MoreOnClick ;
+	FCKTools.AddEventListenerEx( oDiv, 'click', FCKTextColorCommand_MoreOnClick, this ) ;
+
 	if ( FCKBrowserInfo.IsSafari )
-		oDiv.style.width= "96%" ;
+		oDiv.style.width = '96%' ;
 }
Index: /FCKeditor/trunk/editor/_source/internals/fck_ie.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fck_ie.js	(revision 778)
+++ /FCKeditor/trunk/editor/_source/internals/fck_ie.js	(revision 779)
@@ -209,4 +209,5 @@
 function FCK_Cleanup()
 {
+	this.LinkedField = null ;
 	this.EditorWindow = null ;
 	this.EditorDocument = null ;
Index: /FCKeditor/trunk/editor/_source/internals/fcktoolbarset.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fcktoolbarset.js	(revision 778)
+++ /FCKeditor/trunk/editor/_source/internals/fcktoolbarset.js	(revision 779)
@@ -94,5 +94,5 @@
 			eTargetDocument.close() ;
 
-			eTargetDocument.oncontextmenu = FCKTools.CancelEvent ;
+			FCKTools.AddEventListener( eTargetDocument, 'contextmenu', FCKTools.CancelEvent ) ;
 
 			// Load external resources (must be done here, otherwise Firefox will not
@@ -162,8 +162,8 @@
 
 	eExpandHandle.title		= FCKLang.ToolbarExpand ;
-	eExpandHandle.onclick	= FCKToolbarSet_Expand_OnClick ;
+	FCKTools.AddEventListener( eExpandHandle, 'click', FCKToolbarSet_Expand_OnClick ) ;
 
 	eCollapseHandle.title	= FCKLang.ToolbarCollapse ;
-	eCollapseHandle.onclick	= FCKToolbarSet_Collapse_OnClick ;
+	FCKTools.AddEventListener( eCollapseHandle, 'click', FCKToolbarSet_Collapse_OnClick ) ;
 
 	// Set the toolbar state at startup.
