if( navigator.userAgent.indexOf('Firefox') != -1 || navigator.userAgent.indexOf('FireFox') != -1 || navigator.userAgent.indexOf('firefox') != -1 ) {
	/* From: http://ajax.phpmagazine.net/2006/11/xhtml_and_documentwrite_replac.html */
	document.write = function(str) {   
		 var moz = !window.opera && !/Apple/.test(navigator.vendor);   
			 
		 // Watch for writing out closing tags, we just   
		 // ignore these (as we auto-generate our own)   
		 if ( str.match(/^<\//) ) return;   
		
		 // Make sure & are formatted properly, but Opera   
		 // messes this up and just ignores it   
		 if ( !window.opera )   
			  str = str.replace(/&(?![#a-z0-9]+;)/g, "&");   
		
		 // Watch for when no closing tag is provided   
		 // (Only does one element, quite weak)   
		 str = str.replace(/<([a-z]+)(.*[^\/])>$/, "<$1$2></$1>");   
			 
		 // Mozilla assumes that everything in <acronym title="Extensible HyperText Markup Language">XHTML</acronym> innerHTML   
		 // is actually <acronym title="Extensible HyperText Markup Language">XHTML</acronym> - Opera and Safari assume that it's <acronym title="Extensible Markup Language">XML</acronym>   
		 if ( !moz )   
			  str = str.replace(/(<[a-z]+)/g, "$1 xmlns='http://www.w3.org/1999/xhtml'");   
			  
		 // The HTML needs to be within a XHTML element   
		 var div = document.createElementNS("http://www.w3.org/1999/xhtml","div");
		 div.innerHTML = str;   
			 
		 // Find the last element in the document   
		 var pos;   
			 
		 // Opera and Safari treat getElementsByTagName("*") accurately   
		 // always including the last element on the page   
		 if ( !moz ) {   
			  pos = document.getElementsByTagName("*");   
			  pos = pos[pos.length - 1];   
				  
		 // Mozilla does not, we have to traverse manually   
		 } else {   
			  pos = document;   
			  while ( pos.lastChild && pos.lastChild.nodeType == 1 )   
					pos = pos.lastChild;   
		 }   
			 
		 // Add all the nodes in that position   
		 var nodes = div.childNodes;   
		 while ( nodes.length )   
			  pos.parentNode.appendChild( nodes[0] );   
	}; 
}