Index: _dev/domain_fix_template.js
===================================================================
--- _dev/domain_fix_template.js	(revision 1922)
+++ _dev/domain_fix_template.js	(working copy)
@@ -25,7 +25,7 @@
 
 // ### Minified Script (must be updated on changes in the original below).
 
-(function(){var d=document.domain;while (true){try{var A=window.top.opener.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
+(function(){var d=document.domain;while (true){try{var A=window.parent.OnUploadCompleted;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
 
 // ### Original Script.
 
@@ -38,7 +38,7 @@
 		// Test if we can access a parent property.
 		try
 		{
-			var test = window.top.opener.document.domain ;
+			var test = window.parent.OnUploadCompleted ;
 			break ;
 		}
 		catch( e ) {}
Index: _whatsnew.html
===================================================================
--- _whatsnew.html	(revision 1922)
+++ _whatsnew.html	(working copy)
@@ -49,6 +49,8 @@
 			fckstyles.xml in servers which cannot return the correct content type header for .xml files.</li>
 		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2102">#2102</a>] Fixed FCKConfig.DocType
 			which stopped working in FCKeditor 2.6.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2115">#2115</a>] Fixed 
+			JavaScript (permission denied) error in Firefox when file has been uploaded.</li>
 	</ul>
 	<h3>
 		Version 2.6</h3>
Index: editor/filemanager/connectors/asp/io.asp
===================================================================
--- editor/filemanager/connectors/asp/io.asp	(revision 1922)
+++ editor/filemanager/connectors/asp/io.asp	(working copy)
@@ -214,38 +214,10 @@
 Sub SendUploadResults( errorNumber, fileUrl, fileName, customMsg )
 	Response.Clear
 	Response.Write "<script type=""text/javascript"">"
-	Response.Write "(function()"
-	Response.Write "{"
-	Response.Write "var d = document.domain ;"
+	' Minified version of the document.domain automatic fix script (#1919). 
+	' The original script can be found at _dev/domain_fix_template.js
+	Response.Write "(function(){var d=document.domain;while (true){try{var A=window.parent.OnUploadCompleted;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();"
 
-	Response.Write " while ( true )"
-	Response.Write "	{"
-	' Test if we can access a parent property.
-	Response.Write "		try"
-	Response.Write "		{"
-	Response.Write "			var test = window.top.opener.document.domain ;"
-	Response.Write "			break ;"
-	Response.Write "		}"
-	Response.Write "		catch( e ) {}"
-
-	' Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
-	Response.Write "		d = d.replace( /.*?(?:\.|$)/, '' ) ;"
-
-	Response.Write "		if ( d.length == 0 )"
-	' It was not able to detect the domain.
-	Response.Write "			break ;"
-	Response.Write ""
-	Response.Write "		try"
-	Response.Write "		{"
-	Response.Write "			document.domain = d ;"
-	Response.Write "		}"
-	Response.Write "		catch (e)"
-	Response.Write "		{"
-	Response.Write "			break ;"
-	Response.Write "		}"
-	Response.Write "	}"
-	Response.Write "})() ;"
-
 	Response.Write "window.parent.OnUploadCompleted(" & errorNumber & ",""" & Replace( fileUrl, """", "\""" ) & """,""" & Replace( fileName, """", "\""" ) & """,""" & Replace( customMsg , """", "\""" ) & """) ;"
 	Response.Write "</script>"
 	Response.End
Index: editor/filemanager/connectors/cfm/cf5_upload.cfm
===================================================================
--- editor/filemanager/connectors/cfm/cf5_upload.cfm	(revision 1922)
+++ editor/filemanager/connectors/cfm/cf5_upload.cfm	(working copy)
@@ -47,38 +47,9 @@
 	function SendUploadResults(errorNumber, fileUrl, fileName, customMsg)
 	{
 		WriteOutput('<script type="text/javascript">');
-		WriteOutput("(function()"&
-"{"&
-"	var d = document.domain ;"&
-""&
-"	while ( true )"&
-"	{"&
-		// Test if we can access a parent property.
-"		try"&
-"		{"&
-"			var test = window.top.opener.document.domain ;"&
-"			break ;"&
-"		}"&
-"		catch( e ) {}"&
-""&
-		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
-"		d = d.replace( /.*?(?:\.|$)/, '' ) ;"&
-""&
-"		if ( d.length == 0 )"&
-			// It was not able to detect the domain.
-"			break ;"&
-""&
-"		try"&
-"		{"&
-"			document.domain = d ;"&
-"		}"&
-"		catch (e)"&
-"		{"&
-"			break ;"&
-"		}"&
-"	}"&
-"})() ;");
-
+		// Minified version of the document.domain automatic fix script (#1919). 
+		// The original script can be found at _dev/domain_fix_template.js
+		WriteOutput("(function(){var d=document.domain;while (true){try{var A=window.parent.OnUploadCompleted;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();");
 		WriteOutput('window.parent.OnUploadCompleted(' & errorNumber & ', "' & JSStringFormat(fileUrl) & '", "' & JSStringFormat(fileName) & '", "' & JSStringFormat(customMsg) & '");' );
 		WriteOutput('</script>');
 	}
Index: editor/filemanager/connectors/cfm/cf_io.cfm
===================================================================
--- editor/filemanager/connectors/cfm/cf_io.cfm	(revision 1922)
+++ editor/filemanager/connectors/cfm/cf_io.cfm	(working copy)
@@ -265,41 +265,13 @@
 	<cfargument name="fileName" required="false" type="String" default="">
 	<cfargument name="customMsg" required="false" type="String" default="">
 
+	<!--- Minified version of the document.domain automatic fix script (#1919). 
+	The original script can be found at _dev/domain_fix_template.js --->
 	<cfoutput>
 <script type="text/javascript">
-(function()
-{
-	var d = document.domain ;
-
-	while ( true )
-	{
-		// Test if we can access a parent property.
-		try
-		{
-			var test = window.top.opener.document.domain ;
-			break ;
-		}
-		catch( e ) {}
-
-		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
-		d = d.replace( /.*?(?:\.|$)/, '' ) ;
-
-		if ( d.length == 0 )
-			break ;		// It was not able to detect the domain.
-
-		try
-		{
-			document.domain = d ;
-		}
-		catch (e)
-		{
-			break ;
-		}
-	}
-})() ;
-
-			window.parent.OnUploadCompleted( #errorNumber#, "#JSStringFormat(fileUrl)#", "#JSStringFormat(fileName)#", "#JSStringFormat(customMsg)#" );
-		</script>
+(function(){var d=document.domain;while (true){try{var A=window.parent.OnUploadCompleted;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
+window.parent.OnUploadCompleted( #errorNumber#, "#JSStringFormat(fileUrl)#", "#JSStringFormat(fileName)#", "#JSStringFormat(customMsg)#" );
+</script>
 	</cfoutput>
 	<cfabort>
 </cffunction>
Index: editor/filemanager/connectors/lasso/upload.lasso
===================================================================
--- editor/filemanager/connectors/lasso/upload.lasso	(revision 1922)
+++ editor/filemanager/connectors/lasso/upload.lasso	(working copy)
@@ -74,38 +74,15 @@
 		-type='string',
 		-description='Sets the HTML response for the FCKEditor Quick Upload feature.'
 	);
-		$__html_reply__ = '\
-<script type="text/javascript">
-(function()
-{
-	var d = document.domain ;
-
-	while ( true )
-	{
-		// Test if we can access a parent property.
-		try
-		{
-			var test = window.top.opener.document.domain ;
-			break ;
-		}
-		catch( e ) {}
-
-		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
-		d = d.replace( /.*?(?:\\.|$)/, "" ) ;
-
-		if ( d.length == 0 )
-			break ;		// It was not able to detect the domain.
-
-		try
-		{
-			document.domain = d ;
-		}
-		catch (e)
-		{
-			break ;
-		}
-	}
-})() ;
+		
+		$__html_reply__ = '<script type="text/javascript">';
+		
+		// Minified version of the document.domain automatic fix script (#1919). 
+		// The original script can be found at _dev/domain_fix_template.js
+		// Note: in Lasso replace \ with \\
+		$__html_reply__ = $__html_reply__ + "(function(){var d=document.domain;while (true){try{var A=window.parent.OnUploadCompleted;break;}catch(e) {};d=d.replace(/.*?(?:\\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();";
+		
+		$__html_reply__ = $__html_reply__ + '\
 	window.parent.OnUploadCompleted(' + #errorNumber + ',"'
 		+ string_replace(#fileUrl, -find='"', -replace='\\"') + '","'
 		+ string_replace(#fileName, -find='"', -replace='\\"') + '","'
Index: editor/filemanager/connectors/perl/commands.pl
===================================================================
--- editor/filemanager/connectors/perl/commands.pl	(revision 1922)
+++ editor/filemanager/connectors/perl/commands.pl	(working copy)
@@ -169,42 +169,15 @@
 
 	local($sErrorNumber, $sFileUrl, $sFileName, $customMsg) = @_;
 
+	# Minified version of the document.domain automatic fix script (#1919). 
+	# The original script can be found at _dev/domain_fix_template.js
+	# Note: in Perl replace \ with \\ and $ with \$
 	print <<EOF;
 Content-type: text/html
 
 <script type="text/javascript">
-// Automatically detect the correct document.domain (#1919).
-(function()
-{
-	var d = document.domain ;
+(function(){var d=document.domain;while (true){try{var A=window.parent.OnUploadCompleted;break;}catch(e) {};d=d.replace(/.*?(?:\\.|\$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
 
-	while ( true )
-	{
-		// Test if we can access a parent property.
-		try
-		{
-			var test = window.top.opener.document.domain ;
-			break ;
-		}
-		catch( e ) {}
-
-		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
-		d = d.replace( /.*?(?:\\.|\$)/, '' ) ;
-
-		if ( d.length == 0 )
-			break ;		// It was not able to detect the domain.
-
-		try
-		{
-			document.domain = d ;
-		}
-		catch (e)
-		{
-			break ;
-		}
-	}
-})() ;
-
 EOF
 	print 'window.parent.OnUploadCompleted(' . $sErrorNumber . ',"' . JS_cnv($sFileUrl) . '","' . JS_cnv($sFileName) . '","' . JS_cnv($customMsg) . '") ;';
 	print '</script>';
Index: editor/filemanager/connectors/php/io.php
===================================================================
--- editor/filemanager/connectors/php/io.php	(revision 1922)
+++ editor/filemanager/connectors/php/io.php	(working copy)
@@ -277,40 +277,13 @@
 // This is the function that sends the results of the uploading process.
 function SendUploadResults( $errorNumber, $fileUrl = '', $fileName = '', $customMsg = '' )
 {
+	// Minified version of the document.domain automatic fix script (#1919).
+	// The original script can be found at _dev/domain_fix_template.js
 	echo <<<EOF
 <script type="text/javascript">
-(function()
-{
-	var d = document.domain ;
-
-	while ( true )
-	{
-		// Test if we can access a parent property.
-		try
-		{
-			var test = window.top.opener.document.domain ;
-			break ;
-		}
-		catch( e ) {}
-
-		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
-		d = d.replace( /.*?(?:\.|$)/, '' ) ;
-
-		if ( d.length == 0 )
-			break ;		// It was not able to detect the domain.
-
-		try
-		{
-			document.domain = d ;
-		}
-		catch (e)
-		{
-			break ;
-		}
-	}
-})() ;
-
+(function(){var d=document.domain;while (true){try{var A=window.parent.OnUploadCompleted;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
 EOF;
+
 	$rpl = array( '\\' => '\\\\', '"' => '\\"' ) ;
 	echo 'window.parent.OnUploadCompleted(' . $errorNumber . ',"' . strtr( $fileUrl, $rpl ) . '","' . strtr( $fileName, $rpl ) . '", "' . strtr( $customMsg, $rpl ) . '") ;' ;
 	echo '</script>' ;
Index: editor/filemanager/connectors/py/fckoutput.py
===================================================================
--- editor/filemanager/connectors/py/fckoutput.py	(revision 1922)
+++ editor/filemanager/connectors/py/fckoutput.py	(working copy)
@@ -101,38 +101,12 @@
 	def sendUploadResults( self, errorNo = 0, fileUrl = '', fileName = '', customMsg = '' ):
 		self.setHttpHeaders("text/html")
 		"This is the function that sends the results of the uploading process"
-		return """<script type="text/javascript">
-			(function()
-			{
-				var d = document.domain ;
+		
+		"Minified version of the document.domain automatic fix script (#1919)."
+		"The original script can be found at _dev/domain_fix_template.js"
+		return """<script type="text/javascript">			
+			(function(){var d=document.domain;while (true){try{var A=window.parent.OnUploadCompleted;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
 
-				while ( true )
-				{
-					// Test if we can access a parent property.
-					try
-					{
-						var test = window.top.opener.document.domain ;
-						break ;
-					}
-					catch( e ) {}
-
-					// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
-					d = d.replace( /.*?(?:\.|$)/, '' ) ;
-
-					if ( d.length == 0 )
-						break ;		// It was not able to detect the domain.
-
-					try
-					{
-						document.domain = d ;
-					}
-					catch (e)
-					{
-						break ;
-					}
-				}
-			})() ;
-
 			window.parent.OnUploadCompleted(%(errorNumber)s,"%(fileUrl)s","%(fileName)s","%(customMsg)s");
 			</script>""" % {
 			'errorNumber': errorNo,
