Subversion Repositories Applications.papyrus

Rev

Rev 1688 | Go to most recent revision | Blame | Last modification | View Log | RSS feed

<!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-2008 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 = document.documentElement.dir = 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()
        {
                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()
        {
                // 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>