1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
\r
3 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
\r
4 * Copyright (C) 2003-2010 Frederico Caldeira Knabben
\r
6 * == BEGIN LICENSE ==
\r
8 * Licensed under the terms of any of the following licenses at your
\r
11 * - GNU General Public License Version 2 or later (the "GPL")
\r
12 * http://www.gnu.org/licenses/gpl.html
\r
14 * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
\r
15 * http://www.gnu.org/licenses/lgpl.html
\r
17 * - Mozilla Public License Version 1.1 or later (the "MPL")
\r
18 * http://www.mozilla.org/MPL/MPL-1.1.html
\r
22 * This page is used by all dialog box as the container.
\r
24 <html xmlns="http://www.w3.org/1999/xhtml">
\r
27 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
\r
28 <meta name="robots" content="noindex, nofollow" />
\r
29 <script type="text/javascript">
\r
32 // Domain relaxation logic.
\r
35 var d = document.domain ;
\r
39 // Test if we can access a parent property.
\r
42 var parentDomain = ( Args().TopWindow || E ).document.domain ;
\r
44 if ( document.domain != parentDomain )
\r
45 document.domain = parentDomain ;
\r
51 // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
\r
52 d = d.replace( /.*?(?:\.|$)/, '' ) ;
\r
54 if ( d.length == 0 )
\r
55 break ; // It was not able to detect the domain.
\r
57 document.domain = d ;
\r
61 var E = frameElement._DialogArguments.Editor ;
\r
63 // It seems referencing to frameElement._DialogArguments directly would lead to memory leaks in IE.
\r
64 // So let's use functions to access its members instead.
\r
67 return frameElement._DialogArguments ;
\r
70 function ParentDialog( dialog )
\r
72 return dialog ? dialog._ParentDialog : frameElement._ParentDialog ;
\r
76 var FCKTools = E.FCKTools ;
\r
77 var FCKDomTools = E.FCKDomTools ;
\r
78 var FCKDialog = E.FCKDialog ;
\r
79 var FCKBrowserInfo = E.FCKBrowserInfo ;
\r
80 var FCKConfig = E.FCKConfig ;
\r
82 // Steal the focus so that the caret would no longer stay in the editor iframe.
\r
85 // Sets the Skin CSS
\r
86 document.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
\r
88 // Sets the language direction.
\r
89 var langDir = E.FCKLang.Dir ;
\r
91 // For IE6-, the fck_dialog_ie6.js is loaded, used to fix limitations in the browser.
\r
92 if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
\r
93 document.write( '<' + 'script type="text/javascript" src="' + FCKConfig.SkinPath + 'fck_dialog_ie6.js"><' + '\/script>' ) ;
\r
95 FCKTools.RegisterDollarFunction( window ) ;
\r
97 // Resize related functions.
\r
98 var Sizer = function()
\r
100 var bAutoSize = false ;
\r
103 // Sets whether the dialog should auto-resize according to its content's height.
\r
104 SetAutoSize : function( autoSize )
\r
106 bAutoSize = autoSize ;
\r
107 this.RefreshSize() ;
\r
110 // Fit the dialog container's layout to the inner iframe's external size.
\r
111 RefreshContainerSize : function()
\r
113 var frmMain = $( 'frmMain' ) ;
\r
117 // Get the container size.
\r
118 var height = $( 'contents' ).offsetHeight ;
\r
120 // Subtract the size of other elements.
\r
121 height -= $( 'TitleArea' ).offsetHeight ;
\r
122 height -= $( 'TabsRow' ).offsetHeight ;
\r
123 height -= $( 'PopupButtons' ).offsetHeight ;
\r
125 frmMain.style.height = Math.max( height, 0 ) + 'px' ;
\r
129 // Resize and re-layout the dialog.
\r
130 // Triggers the onresize event for the layout logic.
\r
131 ResizeDialog : function( width, height )
\r
133 FCKDomTools.SetElementStyles( window.frameElement,
\r
135 'width' : width + 'px',
\r
136 'height' : height + 'px'
\r
139 // If the skin have defined a function for resize fixes, call it now.
\r
140 if ( typeof window.DoResizeFixes == 'function' )
\r
141 window.DoResizeFixes() ;
\r
144 // if bAutoSize is true, automatically fit the dialog size and layout to
\r
145 // accomodate the inner iframe's internal height.
\r
146 // if bAutoSize is false, then only the layout logic for the dialog decorations
\r
147 // is run to accomodate the inner iframe's external height.
\r
148 RefreshSize : function()
\r
152 var frmMain = $( 'frmMain' ) ;
\r
153 var innerDoc = frmMain.contentWindow.document ;
\r
154 var isStrict = FCKTools.IsStrictMode( innerDoc ) ;
\r
156 // Get the size of the frame contents.
\r
157 var innerWidth = isStrict ? innerDoc.documentElement.scrollWidth : innerDoc.body.scrollWidth ;
\r
158 var innerHeight = isStrict ? innerDoc.documentElement.scrollHeight : innerDoc.body.scrollHeight ;
\r
160 // Get the current frame size.
\r
161 var frameSize = FCKTools.GetViewPaneSize( frmMain.contentWindow ) ;
\r
163 var deltaWidth = innerWidth - frameSize.Width ;
\r
164 var deltaHeight = innerHeight - frameSize.Height ;
\r
166 // If the contents fits the current size.
\r
167 if ( deltaWidth <= 0 && deltaHeight <= 0 )
\r
170 var dialogWidth = frameElement.offsetWidth + Math.max( deltaWidth, 0 ) ;
\r
171 var dialogHeight = frameElement.offsetHeight + Math.max( deltaHeight, 0 ) ;
\r
173 this.ResizeDialog( dialogWidth, dialogHeight ) ;
\r
175 this.RefreshContainerSize() ;
\r
180 * Safari seems to have a bug with the time when RefreshSize() is executed - it
\r
181 * thinks frmMain's innerHeight is 0 if we query the value too soon after the
\r
182 * page is loaded in some circumstances. (#1316)
\r
183 * TODO : Maybe this is not needed anymore after #35.
\r
185 if ( FCKBrowserInfo.IsSafari )
\r
187 var originalRefreshSize = retval.RefreshSize ;
\r
189 retval.RefreshSize = function()
\r
191 FCKTools.SetTimeout( originalRefreshSize, 1, retval ) ;
\r
196 * IE6 has a similar bug where it sometimes thinks $('contents') has an
\r
197 * offsetHeight of 0 (#2114).
\r
199 if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
\r
201 var originalRefreshContainerSize = retval.RefreshContainerSize ;
\r
202 retval.RefreshContainerSize = function()
\r
204 FCKTools.SetTimeout( originalRefreshContainerSize, 1, retval ) ;
\r
208 window.onresize = function()
\r
210 retval.RefreshContainerSize() ;
\r
213 window.SetAutoSize = FCKTools.Bind( retval, retval.SetAutoSize ) ;
\r
218 // Manages the throbber image that appears if the inner part of dialog is taking too long to load.
\r
219 var Throbber = function()
\r
223 var updateThrobber = function()
\r
225 var throbberParent = $( 'throbberBlock' ) ;
\r
226 var throbberBlocks = throbberParent.childNodes ;
\r
227 var lastClass = throbberParent.lastChild.className ;
\r
229 // From the last to the second one, copy the class from the previous one.
\r
230 for ( var i = throbberBlocks.length - 1 ; i > 0 ; i-- )
\r
231 throbberBlocks[i].className = throbberBlocks[i-1].className ;
\r
233 // For the first one, copy the last class (rotation).
\r
234 throbberBlocks[0].className = lastClass ;
\r
238 Show : function( waitMilliseconds )
\r
240 // Auto-setup the Show function to be called again after the
\r
241 // requested amount of time.
\r
242 if ( waitMilliseconds && waitMilliseconds > 0 )
\r
244 timer = FCKTools.SetTimeout( this.Show, waitMilliseconds, this, null, window ) ;
\r
248 var throbberParent = $( 'throbberBlock' ) ;
\r
250 if (throbberParent.childNodes.length == 0)
\r
252 // Create the throbber blocks.
\r
253 var classIds = [ 1,2,3,4,5,4,3,2 ] ;
\r
254 while ( classIds.length > 0 )
\r
255 throbberParent.appendChild( document.createElement( 'div' ) ).className = ' throbber_' + classIds.shift() ;
\r
258 // Center the throbber.
\r
259 var frm = $( 'contents' ) ;
\r
260 var frmCoords = FCKTools.GetDocumentPosition( window, frm ) ;
\r
261 var x = frmCoords.x + ( frm.offsetWidth - throbberParent.offsetWidth ) / 2 ;
\r
262 var y = frmCoords.y + ( frm.offsetHeight - throbberParent.offsetHeight ) / 2 ;
\r
263 throbberParent.style.left = parseInt( x, 10 ) + 'px' ;
\r
264 throbberParent.style.top = parseInt( y, 10 ) + 'px' ;
\r
267 throbberParent.style.visibility = '' ;
\r
269 // Hide tabs and buttons:
\r
270 $( 'Tabs' ).style.visibility = 'hidden' ;
\r
271 $( 'PopupButtons' ).style.visibility = 'hidden' ;
\r
273 // Setup the animation interval.
\r
274 timer = setInterval( updateThrobber, 100 ) ;
\r
281 clearInterval( timer ) ;
\r
285 $( 'throbberBlock' ).style.visibility = 'hidden' ;
\r
287 // Show tabs and buttons:
\r
288 $( 'Tabs' ).style.visibility = '' ;
\r
289 $( 'PopupButtons' ).style.visibility = '' ;
\r
294 // Drag and drop handlers.
\r
295 var DragAndDrop = function()
\r
297 var registeredWindows = [] ;
\r
301 var cleanUpHandlers = function()
\r
303 for ( var i = 0 ; i < registeredWindows.length ; i++ )
\r
305 FCKTools.RemoveEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ;
\r
306 FCKTools.RemoveEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ;
\r
310 var dragMouseMoveHandler = function( evt )
\r
316 evt = FCKTools.GetElementDocument( this ).parentWindow.event ;
\r
318 // Updated the last coordinates.
\r
319 var currentCoords =
\r
327 x : currentPos.x + ( currentCoords.x - lastCoords.x ),
\r
328 y : currentPos.y + ( currentCoords.y - lastCoords.y )
\r
331 lastCoords = currentCoords ;
\r
333 frameElement.style.left = currentPos.x + 'px' ;
\r
334 frameElement.style.top = currentPos.y + 'px' ;
\r
336 if ( evt.preventDefault )
\r
337 evt.preventDefault() ;
\r
339 evt.returnValue = false ;
\r
342 var dragMouseUpHandler = function( evt )
\r
347 evt = FCKTools.GetElementDocument( this ).parentWindow.event ;
\r
348 cleanUpHandlers() ;
\r
349 lastCoords = null ;
\r
354 MouseDownHandler : function( evt )
\r
359 view = FCKTools.GetElementDocument( this ).parentWindow ;
\r
365 var target = evt.srcElement || evt.target ;
\r
366 if ( target.id == 'closeButton' || target.className == 'PopupTab' || target.className == 'PopupTabSelected' )
\r
375 // Save the current IFRAME position.
\r
378 x : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'left' ), 10 ),
\r
379 y : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'top' ), 10 )
\r
382 for ( var i = 0 ; i < registeredWindows.length ; i++ )
\r
384 FCKTools.AddEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ;
\r
385 FCKTools.AddEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ;
\r
388 if ( evt.preventDefault )
\r
389 evt.preventDefault() ;
\r
391 evt.returnValue = false ;
\r
394 RegisterHandlers : function( w )
\r
396 registeredWindows.push( w ) ;
\r
401 // Selection related functions.
\r
402 //(Became simple shortcuts after the fix for #1990)
\r
406 * Ensures that the editing area contains an active selection. This is a
\r
407 * requirement for IE, as it looses the selection when the focus moves to other
\r
410 EnsureSelection : function()
\r
412 // Move the focus to the Cancel button so even if the dialog contains a
\r
413 // contentEditable element the selection is properly restored in the editor #2496
\r
415 $( 'btnCancel' ).focus() ;
\r
417 FCK.Selection.Restore() ;
\r
421 * Get the FCKSelection object for the editor instance.
\r
423 GetSelection : function()
\r
425 return FCK.Selection ;
\r
429 * Get the selected element in the editing area (for object selections).
\r
431 GetSelectedElement : function()
\r
433 return FCK.Selection.GetSelectedElement() ;
\r
437 // Tab related functions.
\r
438 var Tabs = function()
\r
440 // Only element ids should be stored here instead of element references since setSelectedTab and TabDiv_OnClick
\r
441 // would build circular references with the element references inside and cause memory leaks in IE6.
\r
442 var oTabs = new Object() ;
\r
444 var setSelectedTab = function( tabCode )
\r
446 for ( var sCode in oTabs )
\r
448 if ( sCode == tabCode )
\r
449 $( oTabs[sCode] ).className = 'PopupTabSelected' ;
\r
451 $( oTabs[sCode] ).className = 'PopupTab' ;
\r
454 if ( typeof( window.frames["frmMain"].OnDialogTabChange ) == 'function' )
\r
455 window.frames["frmMain"].OnDialogTabChange( tabCode ) ;
\r
458 function TabDiv_OnClick()
\r
460 setSelectedTab( this.TabCode ) ;
\r
463 window.AddTab = function( tabCode, tabText, startHidden )
\r
465 if ( typeof( oTabs[ tabCode ] ) != 'undefined' )
\r
468 var eTabsRow = $( 'Tabs' ) ;
\r
470 var oCell = eTabsRow.insertCell( eTabsRow.cells.length - 1 ) ;
\r
471 oCell.noWrap = true ;
\r
473 var oDiv = document.createElement( 'DIV' ) ;
\r
474 oDiv.className = 'PopupTab' ;
\r
475 oDiv.innerHTML = tabText ;
\r
476 oDiv.TabCode = tabCode ;
\r
477 oDiv.onclick = TabDiv_OnClick ;
\r
478 oDiv.id = Math.random() ;
\r
481 oDiv.style.display = 'none' ;
\r
483 eTabsRow = $( 'TabsRow' ) ;
\r
485 oCell.appendChild( oDiv ) ;
\r
487 if ( eTabsRow.style.display == 'none' )
\r
489 var eTitleArea = $( 'TitleArea' ) ;
\r
490 eTitleArea.className = 'PopupTitle' ;
\r
492 oDiv.className = 'PopupTabSelected' ;
\r
493 eTabsRow.style.display = '' ;
\r
495 if ( window.onresize )
\r
496 window.onresize() ;
\r
499 oTabs[ tabCode ] = oDiv.id ;
\r
501 FCKTools.DisableSelection( oDiv ) ;
\r
504 window.SetSelectedTab = setSelectedTab ;
\r
506 window.SetTabVisibility = function( tabCode, isVisible )
\r
508 var oTab = $( oTabs[ tabCode ] ) ;
\r
509 oTab.style.display = isVisible ? '' : 'none' ;
\r
511 if ( ! isVisible && oTab.className == 'PopupTabSelected' )
\r
513 for ( var sCode in oTabs )
\r
515 if ( $( oTabs[sCode] ).style.display != 'none' )
\r
517 setSelectedTab( sCode ) ;
\r
525 // readystatechange handler for registering drag and drop handlers in cover
\r
526 // iframes, defined out here to avoid memory leak.
\r
527 // Do NOT put this function as a private function as it will induce memory leak
\r
528 // in IE and it's not detectable with Drip or sIEve and undetectable leaks are
\r
529 // really nasty (sigh).
\r
530 var onReadyRegister = function()
\r
532 if ( this.readyState != 'complete' )
\r
534 DragAndDrop.RegisterHandlers( this.contentWindow ) ;
\r
537 // The business logic of the dialog, dealing with operational things like
\r
538 // dialog open/dialog close/enable/disable/etc.
\r
541 var setOnKeyDown = function( targetDocument )
\r
543 targetDocument.onkeydown = function ( e )
\r
545 e = e || event || this.parentWindow.event ;
\r
546 switch ( e.keyCode )
\r
549 var oTarget = e.srcElement || e.target ;
\r
550 if ( oTarget.tagName == 'TEXTAREA' )
\r
563 var contextMenuBlocker = function( e )
\r
565 var sTagName = e.target.tagName ;
\r
566 if ( ! ( ( sTagName == "INPUT" && e.target.type == "text" ) || sTagName == "TEXTAREA" ) )
\r
567 e.preventDefault() ;
\r
570 var disableContextMenu = function( targetDocument )
\r
572 if ( FCKBrowserInfo.IsIE )
\r
575 targetDocument.addEventListener( 'contextmenu', contextMenuBlocker, true ) ;
\r
578 // Program entry point.
\r
579 window.Init = function()
\r
581 $( 'contents' ).dir = langDir;
\r
583 // Start the throbber timer.
\r
584 Throbber.Show( 1000 ) ;
\r
586 Sizer.RefreshContainerSize() ;
\r
587 LoadInnerDialog() ;
\r
589 FCKTools.DisableSelection( document.body ) ;
\r
591 // Make the title area draggable.
\r
592 var titleElement = $( 'header' ) ;
\r
593 titleElement.onmousedown = DragAndDrop.MouseDownHandler ;
\r
595 // Connect mousemove and mouseup events from dialog frame and outer window to dialog dragging logic.
\r
596 DragAndDrop.RegisterHandlers( window ) ;
\r
597 DragAndDrop.RegisterHandlers( Args().TopWindow ) ;
\r
599 // Disable the previous dialog if it exists.
\r
600 if ( ParentDialog() )
\r
602 ParentDialog().contentWindow.SetEnabled( false ) ;
\r
603 if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
\r
605 var currentParent = ParentDialog() ;
\r
606 while ( currentParent )
\r
608 var blockerFrame = currentParent.contentWindow.$( 'blocker' ) ;
\r
609 if ( blockerFrame.readyState == 'complete' )
\r
610 DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ;
\r
612 blockerFrame.onreadystatechange = onReadyRegister ;
\r
613 currentParent = ParentDialog( currentParent ) ;
\r
618 var currentParent = ParentDialog() ;
\r
619 while ( currentParent )
\r
621 DragAndDrop.RegisterHandlers( currentParent.contentWindow ) ;
\r
622 currentParent = ParentDialog( currentParent ) ;
\r
627 // If this is the only dialog on screen, enable the background cover.
\r
628 if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
\r
630 var blockerFrame = FCKDialog.GetCover().firstChild ;
\r
631 if ( blockerFrame.readyState == 'complete' )
\r
632 DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ;
\r
634 blockerFrame.onreadystatechange = onReadyRegister;
\r
637 // Add Enter/Esc hotkeys and disable context menu for the dialog.
\r
638 setOnKeyDown( document ) ;
\r
639 disableContextMenu( document ) ;
\r
642 window.LoadInnerDialog = function()
\r
644 if ( window.onresize )
\r
645 window.onresize() ;
\r
647 // First of all, translate the dialog box contents.
\r
648 E.FCKLanguageManager.TranslatePage( document ) ;
\r
650 // Create the IFRAME that holds the dialog contents.
\r
651 $( 'innerContents' ).innerHTML = '<iframe id="frmMain" src="' + Args().Page + '" name="frmMain" frameborder="0" width="100%" height="100%" scrolling="auto" style="visibility: hidden;" allowtransparency="true"><\/iframe>' ;
\r
654 window.InnerDialogLoaded = function()
\r
656 // If the dialog has been closed before the iframe is loaded, do nothing.
\r
657 if ( !frameElement.parentNode )
\r
662 var frmMain = $('frmMain') ;
\r
663 var innerWindow = frmMain.contentWindow ;
\r
664 var innerDoc = innerWindow.document ;
\r
666 // Show the loaded iframe.
\r
667 frmMain.style.visibility = '' ;
\r
669 // Set the language direction.
\r
670 innerDoc.documentElement.dir = langDir ;
\r
672 // Sets the Skin CSS.
\r
673 innerDoc.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
\r
675 setOnKeyDown( innerDoc ) ;
\r
676 disableContextMenu( innerDoc ) ;
\r
678 Sizer.RefreshContainerSize();
\r
680 DragAndDrop.RegisterHandlers( innerWindow ) ;
\r
682 innerWindow.focus() ;
\r
687 window.SetOkButton = function( showIt )
\r
689 $('btnOk').style.visibility = ( showIt ? '' : 'hidden' ) ;
\r
692 window.Ok = function()
\r
694 Selection.EnsureSelection() ;
\r
696 var frmMain = window.frames["frmMain"] ;
\r
698 if ( frmMain.Ok && frmMain.Ok() )
\r
704 window.Cancel = function( dontFireChange )
\r
706 Selection.EnsureSelection() ;
\r
707 return CloseDialog( dontFireChange ) ;
\r
710 window.CloseDialog = function( dontFireChange )
\r
714 // Points the src to a non-existent location to avoid loading errors later, in case the dialog
\r
715 // haven't been completed loaded at this point.
\r
716 if ( $( 'frmMain' ) )
\r
717 $( 'frmMain' ).src = FCKTools.GetVoidUrl() ;
\r
719 if ( !dontFireChange && !FCK.EditMode )
\r
721 // All dialog windows, by default, will fire the "OnSelectionChange"
\r
722 // event, no matter the Ok or Cancel button has been pressed.
\r
723 // It seems that OnSelectionChange may enter on a concurrency state
\r
724 // on some situations (#1965), so we should put the event firing in
\r
725 // the execution queue instead of executing it immediately.
\r
726 setTimeout( function()
\r
728 FCK.Events.FireEvent( 'OnSelectionChange' ) ;
\r
732 FCKDialog.OnDialogClose( window ) ;
\r
735 window.SetEnabled = function( isEnabled )
\r
737 var cover = $( 'cover' ) ;
\r
738 cover.style.display = isEnabled ? 'none' : '' ;
\r
740 if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
\r
744 // Inser the blocker IFRAME before the cover.
\r
745 var blocker = document.createElement( 'iframe' ) ;
\r
746 blocker.src = FCKTools.GetVoidUrl() ;
\r
747 blocker.hideFocus = true ;
\r
748 blocker.frameBorder = 0 ;
\r
749 blocker.id = blocker.className = 'blocker' ;
\r
750 cover.appendChild( blocker ) ;
\r
754 var blocker = $( 'blocker' ) ;
\r
755 if ( blocker && blocker.parentNode )
\r
756 blocker.parentNode.removeChild( blocker ) ;
\r
764 <body onload="Init();" class="PopupBody">
\r
765 <div class="contents" id="contents">
\r
767 <div id="TitleArea" class="PopupTitle PopupTitleBorder">
\r
768 <script type="text/javascript">
\r
770 document.write( Args().Title ) ;
\r
773 <div id="closeButton" onclick="Cancel();"></div>
\r
775 <div id="TabsRow" class="PopupTabArea" style="display: none">
\r
776 <table border="0" cellpadding="0" cellspacing="0" width="100%">
\r
778 <td class="PopupTabEmptyArea"> </td>
\r
779 <td class="PopupTabEmptyArea" width="100%"> </td>
\r
784 <div id="innerContents"></div>
\r
785 <div id="PopupButtons" class="PopupButtons">
\r
786 <table border="0" cellpadding="0" cellspacing="0">
\r
788 <td width="100%"> </td>
\r
789 <td nowrap="nowrap">
\r
790 <input id="btnOk" style="visibility: hidden;" type="button" value="Ok" class="Button" onclick="Ok();" fckLang="DlgBtnOK" />
\r
792 <input id="btnCancel" type="button" value="Cancel" class="Button" onclick="Cancel();" fckLang="DlgBtnCancel" />
\r
798 <div class="tl"></div>
\r
799 <div class="tc"></div>
\r
800 <div class="tr"></div>
\r
801 <div class="ml"></div>
\r
802 <div class="mr"></div>
\r
803 <div class="bl"></div>
\r
804 <div class="bc"></div>
\r
805 <div class="br"></div>
\r
806 <div class="cover" id="cover" style="display:none"></div>
\r
807 <div id="throbberBlock" style="position: absolute; visibility: hidden"></div>
\r
808 <script type="text/javascript">
\r
810 // Set the class name for language direction.
\r
811 document.body.className += ' ' + langDir ;
\r
813 var cover = $( 'cover' ) ;
\r
814 cover.style.backgroundColor = FCKConfig.BackgroundBlockerColor ;
\r
815 FCKDomTools.SetOpacity( cover, FCKConfig.BackgroundBlockerOpacity ) ;
\r