summaryrefslogtreecommitdiff
path: root/httemplate/elements/fckeditor/editor/fckdialog.html
diff options
context:
space:
mode:
Diffstat (limited to 'httemplate/elements/fckeditor/editor/fckdialog.html')
-rw-r--r--httemplate/elements/fckeditor/editor/fckdialog.html819
1 files changed, 819 insertions, 0 deletions
diff --git a/httemplate/elements/fckeditor/editor/fckdialog.html b/httemplate/elements/fckeditor/editor/fckdialog.html
new file mode 100644
index 0000000..0770c89
--- /dev/null
+++ b/httemplate/elements/fckeditor/editor/fckdialog.html
@@ -0,0 +1,819 @@
+<!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-2010 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>