add:   if (tinyMCE.isGecko) { h = h.replace(/<strong/gi, '<b'); h = h.replace(/<em(\/?)/gi, '<i'); h = h.replace(/<em /gi, '<i'); h = h.replace(/<\/strong>/gi, '</b>'); h = h.replace(/<\/em>/gi, '</i>'); } 
context: TinyMCE_Engine.prototype.setInnerHTML = function(e, h) {	var i, nl, n;	if (tinyMCE.isMSIE && !tinyMCE.isOpera) {		// Since MSIE handles invalid HTML better that valid XHTML we		// need to make some things invalid. <hr /> gets converted to <hr>.		h = h.replace(/\s\/>/g, '>');		// Since MSIE auto generated emtpy P tags some times we must tell it to keep the real ones		h = h.replace(/<p([^>]*)>\u00A0?<\/p>/gi, '<p$1 mce_keep="true">&nbsp;</p>'); // Keep empty paragraphs		h = h.replace(/<p([^>]*)>\s*&nbsp;\s*<\/p>/gi, '<p$1 mce_keep="true">&nbsp;</p>'); // Keep empty paragraphs		h = h.replace(/<p([^>]*)>\s+<\/p>/gi, '<p$1 mce_keep="true">&nbsp;</p>'); // Keep empty paragraphs		// Remove first comment		e.innerHTML = tinyMCE.uniqueTag + h;		e.firstChild.removeNode(true);		// Remove weird auto generated empty paragraphs unless it's supposed to be there		nl = e.getElementsByTagName("p");		for (i=nl.length-1; i>=0; i--) {			n = nl[i];			if (n.nodeName == 'P' && !n.hasChildNodes() && !n.mce_keep)				n.parentNode.removeChild(n);		}	} else {		h = this.fixGeckoBaseHREFBug(1, e, h);		e.innerHTML = h;		this.fixGeckoBaseHREFBug(2, e, h);	}};
meta: 2801	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/2801/3c26150e1a64cb09ec99f84b07fc866d3e28d08d/TinyMCE_DOMUtils.class.js/clean/jscripts/tiny_mce/classes/TinyMCE_DOMUtils.class.js