<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
 * Copyright (C) 2003-2009 Frederico Caldeira Knabben
 *
 * == BEGIN LICENSE ==
 *
 * Licensed under the terms of any of the following licenses at your
 * choice:
 *
 *  - GNU General Public License Version 2 or later (the "GPL")
 *    http://www.gnu.org/licenses/gpl.html
 *
 *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
 *    http://www.gnu.org/licenses/lgpl.html
 *
 *  - Mozilla Public License Version 1.1 or later (the "MPL")
 *    http://www.mozilla.org/MPL/MPL-1.1.html
 *
 * == END LICENSE ==
 *
 * This page is used by all dialog box as the container.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title></title>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<meta name="robots" content="noindex, nofollow" />
		<script type="text/javascript">
// <![CDATA[

// Domain relaxation logic.
(function()
{
	var d = document.domain ;

	while ( true )
	{
		// Test if we can access a parent property.
		try
		{
			var parentDomain = ( Args().TopWindow || E ).document.domain ;

			if ( document.domain != parentDomain )
				document.domain = parentDomain ;

			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.

		document.domain = d ;
	}
})() ;

var E = frameElement._DialogArguments.Editor ;

// It seems referencing to frameElement._DialogArguments directly would lead to memory leaks in IE.
// So let's use functions to access its members instead.
function Args()
{
	return frameElement._DialogArguments ;
}

function ParentDialog( dialog )
{
	return dialog ? dialog._ParentDialog : frameElement._ParentDialog ;
}

var FCK				= E.FCK ;
var FCKTools		= E.FCKTools ;
var FCKDomTools		= E.FCKDomTools ;
var FCKDialog		= E.FCKDialog ;
var FCKBrowserInfo	= E.FCKBrowserInfo ;
var FCKConfig		= E.FCKConfig ;

// Steal the focus so that the caret would no longer stay in the editor iframe.
window.focus() ;

// Sets the Skin CSS
document.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;

// Sets the language direction.
var langDir = E.FCKLang.Dir ;

// For IE6-, the fck_dialog_ie6.js is loaded, used to fix limitations in the browser.
if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
	document.write( '<' + 'script type="text/javascript" src="' + FCKConfig.SkinPath + 'fck_dialog_ie6.js"><' + '\/script>' ) ;

FCKTools.RegisterDollarFunction( window ) ;

// Resize related functions.
var Sizer = function()
{
	var bAutoSize = false ;

	var retval = {
		// Sets whether the dialog should auto-resize according to its content's height.
		SetAutoSize : function( autoSize )
		{
			bAutoSize = autoSize ;
			this.RefreshSize() ;
		},

		// Fit the dialog container's layout to the inner iframe's external size.
		RefreshContainerSize : function()
		{
			var frmMain = $( 'frmMain' ) ;

			if ( frmMain )
			{
				// Get the container size.
				var height = $( 'contents' ).offsetHeight ;

				// Subtract the size of other elements.
				height -= $( 'TitleArea' ).offsetHeight ;
				height -= $( 'TabsRow' ).offsetHeight ;
				height -= $( 'PopupButtons' ).offsetHeight ;

				frmMain.style.height = Math.max( height, 0 ) + 'px' ;
			}
		},

		// Resize and re-layout the dialog.
		// Triggers the onresize event for the layout logic.
		ResizeDialog : function( width, height )
		{
			FCKDomTools.SetElementStyles( window.frameElement,
					{
						'width' : width + 'px',
						'height' : height + 'px'
					} ) ;

			// If the skin have defined a function for resize fixes, call it now.
			if ( typeof window.DoResizeFixes == 'function' )
				window.DoResizeFixes() ;
		},

		// if bAutoSize is true, automatically fit the dialog size and layout to
		// accomodate the inner iframe's internal height.
		// if bAutoSize is false, then only the layout logic for the dialog decorations
		// is run to accomodate the inner iframe's external height.
		RefreshSize : function()
		{
			if ( bAutoSize )
			{
				var frmMain		= $( 'frmMain' ) ;
				var innerDoc	= frmMain.contentWindow.document ;
				var isStrict	= FCKTools.IsStrictMode( innerDoc ) ;

				// Get the size of the frame contents.
				var innerWidth	= isStrict ? innerDoc.documentElement.scrollWidth : innerDoc.body.scrollWidth ;
				var innerHeight	= isStrict ? innerDoc.documentElement.scrollHeight : innerDoc.body.scrollHeight ;

				// Get the current frame size.
				var frameSize = FCKTools.GetViewPaneSize( frmMain.contentWindow ) ;

				var deltaWidth	= innerWidth - frameSize.Width ;
				var deltaHeight	= innerHeight - frameSize.Height ;

				// If the contents fits the current size.
				if ( deltaWidth <= 0 && deltaHeight <= 0 )
					return ;

				var dialogWidth		= frameElement.offsetWidth + Math.max( deltaWidth, 0 ) ;
				var dialogHeight	= frameElement.offsetHeight + Math.max( deltaHeight, 0 ) ;

				this.ResizeDialog( dialogWidth, dialogHeight ) ;
			}
			this.RefreshContainerSize() ;
		}
	}

	/**
	 * Safari seems to have a bug with the time when RefreshSize() is executed - it
	 * thinks frmMain's innerHeight is 0 if we query the value too soon after the
	 * page is loaded in some circumstances. (#1316)
	 * TODO : Maybe this is not needed anymore after #35.
	 */
	if ( FCKBrowserInfo.IsSafari )
	{
		var originalRefreshSize = retval.RefreshSize ;

		retval.RefreshSize = function()
		{
			FCKTools.SetTimeout( originalRefreshSize, 1, retval ) ;
		}
	}

	/**
	 * IE6 has a similar bug where it sometimes thinks $('contents') has an
	 * offsetHeight of 0 (#2114).
	 */
	if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
	{
		var originalRefreshContainerSize = retval.RefreshContainerSize ;
		retval.RefreshContainerSize = function()
		{
			FCKTools.SetTimeout( originalRefreshContainerSize, 1, retval ) ;
		}
	}

	window.onresize = function()
	{
		retval.RefreshContainerSize() ;
	}

	window.SetAutoSize = FCKTools.Bind( retval, retval.SetAutoSize ) ;

	return retval ;
}() ;

// Manages the throbber image that appears if the inner part of dialog is taking too long to load.
var Throbber = function()
{
	var timer ;

	var updateThrobber = function()
	{
		var throbberParent = $( 'throbberBlock' ) ;
		var throbberBlocks = throbberParent.childNodes ;
		var lastClass = throbberParent.lastChild.className ;

		// From the last to the second one, copy the class from the previous one.
		for ( var i = throbberBlocks.length - 1 ; i > 0 ; i-- )
			throbberBlocks[i].className = throbberBlocks[i-1].className ;

		// For the first one, copy the last class (rotation).
		throbberBlocks[0].className = lastClass ;
	}

	return {
		Show : function( waitMilliseconds )
		{
			// Auto-setup the Show function to be called again after the
			// requested amount of time.
			if ( waitMilliseconds && waitMilliseconds > 0 )
			{
				timer = FCKTools.SetTimeout( this.Show, waitMilliseconds, this, null, window ) ;
				return ;
			}

			var throbberParent = $( 'throbberBlock' ) ;

			if (throbberParent.childNodes.length == 0)
			{
				// Create the throbber blocks.
				var classIds = [ 1,2,3,4,5,4,3,2 ] ;
				while ( classIds.length > 0 )
					throbberParent.appendChild( document.createElement( 'div' ) ).className = ' throbber_' + classIds.shift() ;
			}

			// Center the throbber.
			var frm = $( 'contents' ) ;
			var frmCoords = FCKTools.GetDocumentPosition( window, frm ) ;
			var x = frmCoords.x + ( frm.offsetWidth - throbberParent.offsetWidth ) / 2 ;
			var y = frmCoords.y + ( frm.offsetHeight - throbberParent.offsetHeight ) / 2 ;
			throbberParent.style.left = parseInt( x, 10 ) + 'px' ;
			throbberParent.style.top = parseInt( y, 10 ) + 'px' ;

			// Show it.
			throbberParent.style.visibility = ''  ;

			// Hide tabs and buttons:
			$( 'Tabs' ).style.visibility = 'hidden' ;
			$( 'PopupButtons' ).style.visibility = 'hidden' ;

			// Setup the animation interval.
			timer = setInterval( updateThrobber, 100 ) ;
		},

		Hide : function()
		{
			if ( timer )
			{
				clearInterval( timer ) ;
				timer = null ;
			}

			$( 'throbberBlock' ).style.visibility = 'hidden' ;

			// Show tabs and buttons:
			$( 'Tabs' ).style.visibility = '' ;
			$( 'PopupButtons' ).style.visibility = '' ;
		}
	} ;
}() ;

// Drag and drop handlers.
var DragAndDrop = function()
{
	var registeredWindows = [] ;
	var lastCoords ;
	var currentPos ;

	var cleanUpHandlers = function()
	{
		for ( var i = 0 ; i < registeredWindows.length ; i++ )
		{
			FCKTools.RemoveEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ;
			FCKTools.RemoveEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ;
		}
	}

	var dragMouseMoveHandler = function( evt )
	{
		if ( !lastCoords )
			return ;

		if ( !evt )
			evt = FCKTools.GetElementDocument( this ).parentWindow.event ;

		// Updated the last coordinates.
		var currentCoords =
		{
			x : evt.screenX,
			y : evt.screenY
		} ;

		currentPos =
		{
			x : currentPos.x + ( currentCoords.x - lastCoords.x ),
			y : currentPos.y + ( currentCoords.y - lastCoords.y )
		} ;

		lastCoords = currentCoords ;

		frameElement.style.left	= currentPos.x + 'px' ;
		frameElement.style.top	= currentPos.y + 'px' ;

		if ( evt.preventDefault )
			evt.preventDefault() ;
		else
			evt.returnValue = false ;
	}

	var dragMouseUpHandler = function( evt )
	{
		if ( !lastCoords )
			return ;
		if ( !evt )
			evt = FCKTools.GetElementDocument( this ).parentWindow.event ;
		cleanUpHandlers() ;
		lastCoords = null ;
	}

	return {

		MouseDownHandler : function( evt )
		{
			var view = null ;
			if ( !evt )
			{
				view = FCKTools.GetElementDocument( this ).parentWindow ;
				evt = view.event ;
			}
			else
				view = evt.view ;

			var target = evt.srcElement || evt.target ;
			if ( target.id == 'closeButton' || target.className == 'PopupTab' || target.className == 'PopupTabSelected' )
				return ;

			lastCoords =
			{
				x : evt.screenX,
				y : evt.screenY
			} ;

			// Save the current IFRAME position.
			currentPos =
			{
				x : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'left' ), 10 ),
				y : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'top' ), 10 )
			} ;

			for ( var i = 0 ; i < registeredWindows.length ; i++ )
			{
				FCKTools.AddEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ;
				FCKTools.AddEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ;
			}

			if ( evt.preventDefault )
				evt.preventDefault() ;
			else
				evt.returnValue = false ;
		},

		RegisterHandlers : function( w )
		{
			registeredWindows.push( w ) ;
		}
	}
}() ;

// Selection related functions.
//(Became simple shortcuts after the fix for #1990)
var Selection =
{
	/**
	 * Ensures that the editing area contains an active selection. This is a
	 * requirement for IE, as it looses the selection when the focus moves to other
	 * frames.
	 */
	EnsureSelection : function()
	{
		// Move the focus to the Cancel button so even if the dialog contains a
		// contentEditable element the selection is properly restored in the editor #2496
		window.focus() ;
		$( 'btnCancel' ).focus() ;

		FCK.Selection.Restore() ;
	},

	/**
	 * Get the FCKSelection object for the editor instance.
	 */
	GetSelection : function()
	{
		return FCK.Selection ;
	},

	/**
	 * Get the selected element in the editing area (for object selections).
	 */
	GetSelectedElement : function()
	{
		return FCK.Selection.GetSelectedElement() ;
	}
}

// Tab related functions.
var Tabs = function()
{
	// Only element ids should be stored here instead of element references since setSelectedTab and TabDiv_OnClick
	// would build circular references with the element references inside and cause memory leaks in IE6.
	var oTabs = new Object() ;

	var setSelectedTab = function( tabCode )
	{
		for ( var sCode in oTabs )
		{
			if ( sCode == tabCode )
				$( oTabs[sCode] ).className = 'PopupTabSelected' ;
			else
				$( oTabs[sCode] ).className = 'PopupTab' ;
		}

		if ( typeof( window.frames["frmMain"].OnDialogTabChange ) == 'function' )
			window.frames["frmMain"].OnDialogTabChange( tabCode ) ;
	}

	function TabDiv_OnClick()
	{
		setSelectedTab( this.TabCode ) ;
	}

	window.AddTab = function( tabCode, tabText, startHidden )
	{
		if ( typeof( oTabs[ tabCode ] ) != 'undefined' )
			return ;

		var eTabsRow = $( 'Tabs' ) ;

		var oCell = eTabsRow.insertCell(  eTabsRow.cells.length - 1 ) ;
		oCell.noWrap = true ;

		var oDiv = document.createElement( 'DIV' ) ;
		oDiv.className = 'PopupTab' ;
		oDiv.innerHTML = tabText ;
		oDiv.TabCode = tabCode ;
		oDiv.onclick = TabDiv_OnClick ;
		oDiv.id = Math.random() ;

		if ( startHidden )
			oDiv.style.display = 'none' ;

		eTabsRow = $( 'TabsRow' ) ;

		oCell.appendChild( oDiv ) ;

		if ( eTabsRow.style.display == 'none' )
		{
			var eTitleArea = $( 'TitleArea' ) ;
			eTitleArea.className = 'PopupTitle' ;

			oDiv.className = 'PopupTabSelected' ;
			eTabsRow.style.display = '' ;

			if ( window.onresize )
				window.onresize() ;
		}

		oTabs[ tabCode ] = oDiv.id ;

		FCKTools.DisableSelection( oDiv ) ;
	} ;

	window.SetSelectedTab = setSelectedTab ;

	window.SetTabVisibility = function( tabCode, isVisible )
	{
		var oTab = $( oTabs[ tabCode ] ) ;
		oTab.style.display = isVisible ? '' : 'none' ;

		if ( ! isVisible && oTab.className == 'PopupTabSelected' )
		{
			for ( var sCode in oTabs )
			{
				if ( $( oTabs[sCode] ).style.display != 'none' )
				{
					setSelectedTab( sCode ) ;
					break ;
				}
			}
		}
	} ;
}() ;

// readystatechange handler for registering drag and drop handlers in cover
// iframes, defined out here to avoid memory leak.
// Do NOT put this function as a private function as it will induce memory leak
// in IE and it's not detectable with Drip or sIEve and undetectable leaks are
// really nasty (sigh).
var onReadyRegister = function()
{
	if ( this.readyState != 'complete' )
		return ;
	DragAndDrop.RegisterHandlers( this.contentWindow ) ;
} ;

// The business logic of the dialog, dealing with operational things like
// dialog open/dialog close/enable/disable/etc.
(function()
{
	var setOnKeyDown = function( targetDocument )
	{
		targetDocument.onkeydown = function ( e )
		{
			e = e || event || this.parentWindow.event ;
			switch ( e.keyCode )
			{
				case 13 :		// ENTER
					var oTarget = e.srcElement || e.target ;
					if ( oTarget.tagName == 'TEXTAREA' )
						return true ;
					Ok() ;
					return false ;

				case 27 :		// ESC
					Cancel() ;
					return false ;
			}
			return true ;
		}
	} ;

	var contextMenuBlocker = function( e )
	{
		var sTagName = e.target.tagName ;
		if ( ! ( ( sTagName == "INPUT" && e.target.type == "text" ) || sTagName == "TEXTAREA" ) )
			e.preventDefault() ;
	} ;

	var disableContextMenu = function( targetDocument )
	{
		if ( FCKBrowserInfo.IsIE )
			return ;

		targetDocument.addEventListener( 'contextmenu', contextMenuBlocker, true ) ;
	} ;

	// Program entry point.
	window.Init = function()
	{
		$( 'contents' ).dir = langDir;

		// Start the throbber timer.
		Throbber.Show( 1000 ) ;

		Sizer.RefreshContainerSize() ;
		LoadInnerDialog() ;

		FCKTools.DisableSelection( document.body ) ;

		// Make the title area draggable.
		var titleElement = $( 'header' ) ;
		titleElement.onmousedown = DragAndDrop.MouseDownHandler ;

		// Connect mousemove and mouseup events from dialog frame and outer window to dialog dragging logic.
		DragAndDrop.RegisterHandlers( window ) ;
		DragAndDrop.RegisterHandlers( Args().TopWindow ) ;

		// Disable the previous dialog if it exists.
		if ( ParentDialog() )
		{
			ParentDialog().contentWindow.SetEnabled( false ) ;
			if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
			{
				var currentParent = ParentDialog() ;
				while ( currentParent )
				{
					var blockerFrame = currentParent.contentWindow.$( 'blocker' ) ;
					if ( blockerFrame.readyState == 'complete' )
						DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ;
					else
						blockerFrame.onreadystatechange = onReadyRegister ;
					currentParent = ParentDialog( currentParent ) ;
				}
			}
			else
			{
				var currentParent = ParentDialog() ;
				while ( currentParent )
				{
					DragAndDrop.RegisterHandlers( currentParent.contentWindow ) ;
					currentParent = ParentDialog( currentParent ) ;
				}
			}
		}

		// If this is the only dialog on screen, enable the background cover.
		if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
		{
			var blockerFrame = FCKDialog.GetCover().firstChild ;
			if ( blockerFrame.readyState == 'complete' )
				DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ;
			else
				blockerFrame.onreadystatechange = onReadyRegister;
		}

		// Add Enter/Esc hotkeys and disable context menu for the dialog.
		setOnKeyDown( document ) ;
		disableContextMenu( document ) ;
	} ;

	window.LoadInnerDialog = function()
	{
		if ( window.onresize )
			window.onresize() ;

		// First of all, translate the dialog box contents.
		E.FCKLanguageManager.TranslatePage( document ) ;

		// Create the IFRAME that holds the dialog contents.
		$( 'innerContents' ).innerHTML = '<iframe id="frmMain" src="' + Args().Page + '" name="frmMain" frameborder="0" width="100%" height="100%" scrolling="auto" style="visibility: hidden;" allowtransparency="true"><\/iframe>' ;
	} ;

	window.InnerDialogLoaded = function()
	{
		// If the dialog has been closed before the iframe is loaded, do nothing.
		if ( !frameElement.parentNode )
			return null ;

		Throbber.Hide() ;

		var frmMain = $('frmMain') ;
		var innerWindow = frmMain.contentWindow ;
		var innerDoc = innerWindow.document ;

		// Show the loaded iframe.
		frmMain.style.visibility = '' ;

		// Set the language direction.
		innerDoc.documentElement.dir = langDir ;

		// Sets the Skin CSS.
		innerDoc.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;

		setOnKeyDown( innerDoc ) ;
		disableContextMenu( innerDoc ) ;

		Sizer.RefreshContainerSize();

		DragAndDrop.RegisterHandlers( innerWindow ) ;

		innerWindow.focus() ;

		return E ;
	} ;

	window.SetOkButton = function( showIt )
	{
		$('btnOk').style.visibility = ( showIt ? '' : 'hidden' ) ;
	} ;

	window.Ok = function()
	{
		Selection.EnsureSelection() ;

		var frmMain = window.frames["frmMain"] ;

		if ( frmMain.Ok && frmMain.Ok() )
			CloseDialog() ;
		else
			frmMain.focus() ;
	} ;

	window.Cancel = function( dontFireChange )
	{
		Selection.EnsureSelection() ;
		return CloseDialog( dontFireChange ) ;
	} ;

	window.CloseDialog = function( dontFireChange )
	{
		Throbber.Hide() ;

		// Points the src to a non-existent location to avoid loading errors later, in case the dialog
		// haven't been completed loaded at this point.
		if ( $( 'frmMain' ) )
			$( 'frmMain' ).src = FCKTools.GetVoidUrl() ;

		if ( !dontFireChange && !FCK.EditMode )
		{
			// All dialog windows, by default, will fire the "OnSelectionChange"
			// event, no matter the Ok or Cancel button has been pressed.
			// It seems that OnSelectionChange may enter on a concurrency state
			// on some situations (#1965), so we should put the event firing in
			// the execution queue instead of executing it immediately.
			setTimeout( function()
				{
					FCK.Events.FireEvent( 'OnSelectionChange' ) ;
				}, 0 ) ;
		}

		FCKDialog.OnDialogClose( window ) ;
	} ;

	window.SetEnabled = function( isEnabled )
	{
		var cover = $( 'cover' ) ;
		cover.style.display = isEnabled ? 'none' : '' ;

		if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
		{
			if ( !isEnabled )
			{
				// Inser the blocker IFRAME before the cover.
				var blocker = document.createElement( 'iframe' ) ;
				blocker.src = FCKTools.GetVoidUrl() ;
				blocker.hideFocus = true ;
				blocker.frameBorder = 0 ;
				blocker.id = blocker.className = 'blocker' ;
				cover.appendChild( blocker ) ;
			}
			else
			{
				var blocker = $( 'blocker' ) ;
				if ( blocker && blocker.parentNode )
					blocker.parentNode.removeChild( blocker ) ;
			}
		}
	} ;
})() ;
// ]]>
		</script>
	</head>
	<body onload="Init();" class="PopupBody">
		<div class="contents" id="contents">
			<div id="header">
				<div id="TitleArea" class="PopupTitle PopupTitleBorder">
					<script type="text/javascript">
// <![CDATA[
document.write( Args().Title ) ;
// ]]>
					</script>
					<div id="closeButton" onclick="Cancel();"></div>
				</div>
				<div id="TabsRow" class="PopupTabArea" style="display: none">
					<table border="0" cellpadding="0" cellspacing="0" width="100%">
						<tr id="Tabs">
							<td class="PopupTabEmptyArea">&nbsp;</td>
							<td class="PopupTabEmptyArea" width="100%">&nbsp;</td>
						</tr>
					</table>
				</div>
			</div>
			<div id="innerContents"></div>
			<div id="PopupButtons" class="PopupButtons">
				<table border="0" cellpadding="0" cellspacing="0">
					<tr>
						<td width="100%">&nbsp;</td>
						<td nowrap="nowrap">
							<input id="btnOk" style="visibility: hidden;" type="button" value="Ok" class="Button" onclick="Ok();" fckLang="DlgBtnOK" />
							&nbsp;
							<input id="btnCancel" type="button" value="Cancel" class="Button" onclick="Cancel();" fckLang="DlgBtnCancel" />
						</td>
					</tr>
				</table>
			</div>
		</div>
		<div class="tl"></div>
		<div class="tc"></div>
		<div class="tr"></div>
		<div class="ml"></div>
		<div class="mr"></div>
		<div class="bl"></div>
		<div class="bc"></div>
		<div class="br"></div>
		<div class="cover" id="cover" style="display:none"></div>
		<div id="throbberBlock" style="position: absolute; visibility: hidden"></div>
		<script type="text/javascript">
// <![CDATA[
			// Set the class name for language direction.
			document.body.className += ' ' + langDir ;

			var cover = $( 'cover' ) ;
			cover.style.backgroundColor = FCKConfig.BackgroundBlockerColor ;
			FCKDomTools.SetOpacity( cover, FCKConfig.BackgroundBlockerOpacity ) ;
// ]]>
		</script>
	</body>
</html>
