Subversion Repositories Applications.papyrus

Rev

Rev 1688 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1921 jp_milcent 1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1075 ddelon 2
<!--
1921 jp_milcent 3
 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
4
 * Copyright (C) 2003-2008 Frederico Caldeira Knabben
5
 *
6
 * == BEGIN LICENSE ==
7
 *
8
 * Licensed under the terms of any of the following licenses at your
9
 * choice:
10
 *
11
 *  - GNU General Public License Version 2 or later (the "GPL")
12
 *    http://www.gnu.org/licenses/gpl.html
13
 *
14
 *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
15
 *    http://www.gnu.org/licenses/lgpl.html
16
 *
17
 *  - Mozilla Public License Version 1.1 or later (the "MPL")
18
 *    http://www.mozilla.org/MPL/MPL-1.1.html
19
 *
20
 * == END LICENSE ==
21
 *
22
 * This page is used by all dialog box as the container.
1075 ddelon 23
-->
24
<html xmlns="http://www.w3.org/1999/xhtml">
25
	<head>
1921 jp_milcent 26
		<title></title>
1075 ddelon 27
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
28
		<meta name="robots" content="noindex, nofollow" />
29
		<script type="text/javascript">
1921 jp_milcent 30
// <![CDATA[
1075 ddelon 31
 
1921 jp_milcent 32
// Domain relaxation logic.
33
(function()
34
{
35
	var d = document.domain ;
1075 ddelon 36
 
1921 jp_milcent 37
	while ( true )
38
	{
39
		// Test if we can access a parent property.
40
		try
41
		{
42
			var parentDomain = ( Args().TopWindow || E ).document.domain ;
1075 ddelon 43
 
1921 jp_milcent 44
			if ( document.domain != parentDomain )
45
				document.domain = parentDomain ;
1075 ddelon 46
 
1921 jp_milcent 47
			break ;
48
		}
49
		catch( e ) {}
1075 ddelon 50
 
1921 jp_milcent 51
		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
52
		d = d.replace( /.*?(?:\.|$)/, '' ) ;
1075 ddelon 53
 
1921 jp_milcent 54
		if ( d.length == 0 )
55
			break ;		// It was not able to detect the domain.
1075 ddelon 56
 
1921 jp_milcent 57
		document.domain = d ;
58
	}
59
})() ;
1075 ddelon 60
 
1921 jp_milcent 61
var E = frameElement._DialogArguments.Editor ;
62
 
63
// It seems referencing to frameElement._DialogArguments directly would lead to memory leaks in IE.
64
// So let's use functions to access its members instead.
65
function Args()
66
{
67
	return frameElement._DialogArguments ;
1075 ddelon 68
}
69
 
1921 jp_milcent 70
function ParentDialog( dialog )
1075 ddelon 71
{
1921 jp_milcent 72
	return dialog ? dialog._ParentDialog : frameElement._ParentDialog ;
73
}
1075 ddelon 74
 
1921 jp_milcent 75
var FCK				= E.FCK ;
76
var FCKTools		= E.FCKTools ;
77
var FCKDomTools		= E.FCKDomTools ;
78
var FCKDialog		= E.FCKDialog ;
79
var FCKBrowserInfo	= E.FCKBrowserInfo ;
80
var FCKConfig		= E.FCKConfig ;
1075 ddelon 81
 
1921 jp_milcent 82
// Steal the focus so that the caret would no longer stay in the editor iframe.
83
window.focus() ;
1075 ddelon 84
 
1921 jp_milcent 85
// Sets the Skin CSS
86
document.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
1075 ddelon 87
 
1921 jp_milcent 88
// Sets the language direction.
89
var langDir = document.documentElement.dir = E.FCKLang.Dir ;
1075 ddelon 90
 
1921 jp_milcent 91
// For IE6-, the fck_dialog_ie6.js is loaded, used to fix limitations in the browser.
92
if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
93
	document.write( '<' + 'script type="text/javascript" src="' + FCKConfig.SkinPath + 'fck_dialog_ie6.js"><' + '\/script>' ) ;
1075 ddelon 94
 
1921 jp_milcent 95
FCKTools.RegisterDollarFunction( window ) ;
1075 ddelon 96
 
1921 jp_milcent 97
// Resize related functions.
98
var Sizer = function()
1075 ddelon 99
{
1921 jp_milcent 100
	var bAutoSize = false ;
1075 ddelon 101
 
1921 jp_milcent 102
	var retval = {
103
		// Sets whether the dialog should auto-resize according to its content's height.
104
		SetAutoSize : function( autoSize )
105
		{
106
			bAutoSize = autoSize ;
107
			this.RefreshSize() ;
108
		},
1075 ddelon 109
 
1921 jp_milcent 110
		// Fit the dialog container's layout to the inner iframe's external size.
111
		RefreshContainerSize : function()
112
		{
113
			var frmMain = $( 'frmMain' ) ;
1075 ddelon 114
 
1921 jp_milcent 115
			if ( frmMain )
116
			{
117
				// Get the container size.
118
				var height = $( 'contents' ).offsetHeight ;
1075 ddelon 119
 
1921 jp_milcent 120
				// Subtract the size of other elements.
121
				height -= $( 'TitleArea' ).offsetHeight ;
122
				height -= $( 'TabsRow' ).offsetHeight ;
123
				height -= $( 'PopupButtons' ).offsetHeight ;
1075 ddelon 124
 
1921 jp_milcent 125
				frmMain.style.height = Math.max( height, 0 ) + 'px' ;
126
			}
127
		},
128
 
129
		// Resize and re-layout the dialog.
130
		// Triggers the onresize event for the layout logic.
131
		ResizeDialog : function( width, height )
1075 ddelon 132
		{
1921 jp_milcent 133
			FCKDomTools.SetElementStyles( window.frameElement,
134
					{
135
						'width' : width + 'px',
136
						'height' : height + 'px'
137
					} ) ;
138
 
139
			// If the skin have defined a function for resize fixes, call it now.
140
			if ( typeof window.DoResizeFixes == 'function' )
141
				window.DoResizeFixes() ;
142
		},
143
 
144
		// if bAutoSize is true, automatically fit the dialog size and layout to
145
		// accomodate the inner iframe's internal height.
146
		// if bAutoSize is false, then only the layout logic for the dialog decorations
147
		// is run to accomodate the inner iframe's external height.
148
		RefreshSize : function()
149
		{
150
			if ( bAutoSize )
151
			{
152
				var frmMain		= $( 'frmMain' ) ;
153
				var innerDoc	= frmMain.contentWindow.document ;
154
				var isStrict	= FCKTools.IsStrictMode( innerDoc ) ;
155
 
156
				// Get the size of the frame contents.
157
				var innerWidth	= isStrict ? innerDoc.documentElement.scrollWidth : innerDoc.body.scrollWidth ;
158
				var innerHeight	= isStrict ? innerDoc.documentElement.scrollHeight : innerDoc.body.scrollHeight ;
159
 
160
				// Get the current frame size.
161
				var frameSize = FCKTools.GetViewPaneSize( frmMain.contentWindow ) ;
162
 
163
				var deltaWidth	= innerWidth - frameSize.Width ;
164
				var deltaHeight	= innerHeight - frameSize.Height ;
165
 
166
				// If the contents fits the current size.
167
				if ( deltaWidth <= 0 && deltaHeight <= 0 )
168
					return ;
169
 
170
				var dialogWidth		= frameElement.offsetWidth + Math.max( deltaWidth, 0 ) ;
171
				var dialogHeight	= frameElement.offsetHeight + Math.max( deltaHeight, 0 ) ;
172
 
173
				this.ResizeDialog( dialogWidth, dialogHeight ) ;
174
			}
175
			this.RefreshContainerSize() ;
1075 ddelon 176
		}
177
	}
178
 
1921 jp_milcent 179
	/**
180
	 * Safari seems to have a bug with the time when RefreshSize() is executed - it
181
	 * thinks frmMain's innerHeight is 0 if we query the value too soon after the
182
	 * page is loaded in some circumstances. (#1316)
183
	 * TODO : Maybe this is not needed anymore after #35.
184
	 */
185
	if ( FCKBrowserInfo.IsSafari )
186
	{
187
		var originalRefreshSize = retval.RefreshSize ;
1075 ddelon 188
 
1921 jp_milcent 189
		retval.RefreshSize = function()
190
		{
191
			FCKTools.SetTimeout( originalRefreshSize, 1, retval ) ;
192
		}
193
	}
194
 
195
	/**
196
	 * IE6 has a similar bug where it sometimes thinks $('contents') has an
197
	 * offsetHeight of 0 (#2114).
198
	 */
199
	if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
1075 ddelon 200
	{
1921 jp_milcent 201
		var originalRefreshContainerSize = retval.RefreshContainerSize ;
202
		retval.RefreshContainerSize = function()
203
		{
204
			FCKTools.SetTimeout( originalRefreshContainerSize, 1, retval ) ;
205
		}
1075 ddelon 206
	}
207
 
1921 jp_milcent 208
	window.onresize = function()
209
	{
210
		retval.RefreshContainerSize() ;
211
	}
1075 ddelon 212
 
1921 jp_milcent 213
	window.SetAutoSize = FCKTools.Bind( retval, retval.SetAutoSize ) ;
1075 ddelon 214
 
1921 jp_milcent 215
	return retval ;
216
}() ;
217
 
218
// Manages the throbber image that appears if the inner part of dialog is taking too long to load.
219
var Throbber = function()
1075 ddelon 220
{
1921 jp_milcent 221
	var timer ;
1075 ddelon 222
 
1921 jp_milcent 223
	var updateThrobber = function()
224
	{
225
		var throbberParent = $( 'throbberBlock' ) ;
226
		var throbberBlocks = throbberParent.childNodes ;
227
		var lastClass = throbberParent.lastChild.className ;
1075 ddelon 228
 
1921 jp_milcent 229
		// From the last to the second one, copy the class from the previous one.
230
		for ( var i = throbberBlocks.length - 1 ; i > 0 ; i-- )
231
			throbberBlocks[i].className = throbberBlocks[i-1].className ;
1075 ddelon 232
 
1921 jp_milcent 233
		// For the first one, copy the last class (rotation).
234
		throbberBlocks[0].className = lastClass ;
235
	}
1075 ddelon 236
 
1921 jp_milcent 237
	return {
238
		Show : function( waitMilliseconds )
239
		{
240
			// Auto-setup the Show function to be called again after the
241
			// requested amount of time.
242
			if ( waitMilliseconds && waitMilliseconds > 0 )
243
			{
244
				timer = FCKTools.SetTimeout( this.Show, waitMilliseconds, this, null, window ) ;
245
				return ;
246
			}
1075 ddelon 247
 
1921 jp_milcent 248
			var throbberParent = $( 'throbberBlock' ) ;
1075 ddelon 249
 
1921 jp_milcent 250
			if (throbberParent.childNodes.length == 0)
251
			{
252
				// Create the throbber blocks.
253
				var classIds = [ 1,2,3,4,5,4,3,2 ] ;
254
				while ( classIds.length > 0 )
255
					throbberParent.appendChild( document.createElement( 'div' ) ).className = ' throbber_' + classIds.shift() ;
256
			}
1075 ddelon 257
 
1921 jp_milcent 258
			// Center the throbber.
259
			var frm = $( 'contents' ) ;
260
			var frmCoords = FCKTools.GetDocumentPosition( window, frm ) ;
261
			var x = frmCoords.x + ( frm.offsetWidth - throbberParent.offsetWidth ) / 2 ;
262
			var y = frmCoords.y + ( frm.offsetHeight - throbberParent.offsetHeight ) / 2 ;
263
			throbberParent.style.left = parseInt( x, 10 ) + 'px' ;
264
			throbberParent.style.top = parseInt( y, 10 ) + 'px' ;
1075 ddelon 265
 
1921 jp_milcent 266
			// Show it.
267
			throbberParent.style.visibility = ''  ;
1075 ddelon 268
 
1921 jp_milcent 269
			// Hide tabs and buttons:
270
			$( 'Tabs' ).style.visibility = 'hidden' ;
271
			$( 'PopupButtons' ).style.visibility = 'hidden' ;
1075 ddelon 272
 
1921 jp_milcent 273
			// Setup the animation interval.
274
			timer = setInterval( updateThrobber, 100 ) ;
275
		},
1075 ddelon 276
 
1921 jp_milcent 277
		Hide : function()
278
		{
279
			if ( timer )
280
			{
281
				clearInterval( timer ) ;
282
				timer = null ;
283
			}
284
 
285
			$( 'throbberBlock' ).style.visibility = 'hidden' ;
286
 
287
			// Show tabs and buttons:
288
			$( 'Tabs' ).style.visibility = '' ;
289
			$( 'PopupButtons' ).style.visibility = '' ;
290
		}
291
	} ;
292
}() ;
293
 
294
// Drag and drop handlers.
295
var DragAndDrop = function()
1075 ddelon 296
{
1921 jp_milcent 297
	var registeredWindows = [] ;
298
	var lastCoords ;
299
	var currentPos ;
300
 
301
	var cleanUpHandlers = function()
1075 ddelon 302
	{
1921 jp_milcent 303
		for ( var i = 0 ; i < registeredWindows.length ; i++ )
304
		{
305
			FCKTools.RemoveEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ;
306
			FCKTools.RemoveEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ;
307
		}
308
	}
309
 
310
	var dragMouseMoveHandler = function( evt )
311
	{
312
		if ( !lastCoords )
313
			return ;
314
 
315
		if ( !evt )
316
			evt = FCKTools.GetElementDocument( this ).parentWindow.event ;
317
 
318
		// Updated the last coordinates.
319
		var currentCoords =
320
		{
321
			x : evt.screenX,
322
			y : evt.screenY
323
		} ;
324
 
325
		currentPos =
326
		{
327
			x : currentPos.x + ( currentCoords.x - lastCoords.x ),
328
			y : currentPos.y + ( currentCoords.y - lastCoords.y )
329
		} ;
330
 
331
		lastCoords = currentCoords ;
332
 
333
		frameElement.style.left	= currentPos.x + 'px' ;
334
		frameElement.style.top	= currentPos.y + 'px' ;
335
 
336
		if ( evt.preventDefault )
337
			evt.preventDefault() ;
1075 ddelon 338
		else
1921 jp_milcent 339
			evt.returnValue = false ;
1075 ddelon 340
	}
341
 
1921 jp_milcent 342
	var dragMouseUpHandler = function( evt )
343
	{
344
		if ( !lastCoords )
345
			return ;
346
		if ( !evt )
347
			evt = FCKTools.GetElementDocument( this ).parentWindow.event ;
348
		cleanUpHandlers() ;
349
		lastCoords = null ;
350
	}
1075 ddelon 351
 
1921 jp_milcent 352
	return {
1075 ddelon 353
 
1921 jp_milcent 354
		MouseDownHandler : function( evt )
1075 ddelon 355
		{
1921 jp_milcent 356
			var view = null ;
357
			if ( !evt )
1075 ddelon 358
			{
1921 jp_milcent 359
				view = FCKTools.GetElementDocument( this ).parentWindow ;
360
				evt = view.event ;
1075 ddelon 361
			}
1921 jp_milcent 362
			else
363
				view = evt.view ;
364
 
365
			var target = evt.srcElement || evt.target ;
366
			if ( target.id == 'closeButton' || target.className == 'PopupTab' || target.className == 'PopupTabSelected' )
367
				return ;
368
 
369
			lastCoords =
370
			{
371
				x : evt.screenX,
372
				y : evt.screenY
373
			} ;
374
 
375
			// Save the current IFRAME position.
376
			currentPos =
377
			{
378
				x : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'left' ), 10 ),
379
				y : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'top' ), 10 )
380
			} ;
381
 
382
			for ( var i = 0 ; i < registeredWindows.length ; i++ )
383
			{
384
				FCKTools.AddEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ;
385
				FCKTools.AddEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ;
386
			}
387
 
388
			if ( evt.preventDefault )
389
				evt.preventDefault() ;
390
			else
391
				evt.returnValue = false ;
392
		},
393
 
394
		RegisterHandlers : function( w )
395
		{
396
			registeredWindows.push( w ) ;
1075 ddelon 397
		}
398
	}
1921 jp_milcent 399
}() ;
400
 
401
// Selection related functions.
402
//(Became simple shortcuts after the fix for #1990)
403
var Selection =
404
{
405
	/**
406
	 * Ensures that the editing area contains an active selection. This is a
407
	 * requirement for IE, as it looses the selection when the focus moves to other
408
	 * frames.
409
	 */
410
	EnsureSelection : function()
411
	{
412
		FCK.Selection.Restore() ;
413
	},
414
 
415
	/**
416
	 * Get the FCKSelection object for the editor instance.
417
	 */
418
	GetSelection : function()
419
	{
420
		return FCK.Selection ;
421
	},
422
 
423
	/**
424
	 * Get the selected element in the editing area (for object selections).
425
	 */
426
	GetSelectedElement : function()
427
	{
428
		return FCK.Selection.GetSelectedElement() ;
429
	}
1075 ddelon 430
}
431
 
1921 jp_milcent 432
// Tab related functions.
433
var Tabs = function()
1075 ddelon 434
{
1921 jp_milcent 435
	// Only element ids should be stored here instead of element references since setSelectedTab and TabDiv_OnClick
436
	// would build circular references with the element references inside and cause memory leaks in IE6.
437
	var oTabs = new Object() ;
438
 
439
	var setSelectedTab = function( tabCode )
1075 ddelon 440
	{
1921 jp_milcent 441
		for ( var sCode in oTabs )
1075 ddelon 442
		{
1921 jp_milcent 443
			if ( sCode == tabCode )
444
				$( oTabs[sCode] ).className = 'PopupTabSelected' ;
445
			else
446
				$( oTabs[sCode] ).className = 'PopupTab' ;
1075 ddelon 447
		}
1921 jp_milcent 448
 
449
		if ( typeof( window.frames["frmMain"].OnDialogTabChange ) == 'function' )
450
			window.frames["frmMain"].OnDialogTabChange( tabCode ) ;
1075 ddelon 451
	}
452
 
1921 jp_milcent 453
	function TabDiv_OnClick()
454
	{
455
		setSelectedTab( this.TabCode ) ;
456
	}
457
 
458
	window.AddTab = function( tabCode, tabText, startHidden )
459
	{
460
		if ( typeof( oTabs[ tabCode ] ) != 'undefined' )
461
			return ;
462
 
463
		var eTabsRow = $( 'Tabs' ) ;
464
 
465
		var oCell = eTabsRow.insertCell(  eTabsRow.cells.length - 1 ) ;
466
		oCell.noWrap = true ;
467
 
468
		var oDiv = document.createElement( 'DIV' ) ;
469
		oDiv.className = 'PopupTab' ;
470
		oDiv.innerHTML = tabText ;
471
		oDiv.TabCode = tabCode ;
472
		oDiv.onclick = TabDiv_OnClick ;
473
		oDiv.id = Math.random() ;
474
 
475
		if ( startHidden )
476
			oDiv.style.display = 'none' ;
477
 
478
		eTabsRow = $( 'TabsRow' ) ;
479
 
480
		oCell.appendChild( oDiv ) ;
481
 
482
		if ( eTabsRow.style.display == 'none' )
483
		{
484
			var eTitleArea = $( 'TitleArea' ) ;
485
			eTitleArea.className = 'PopupTitle' ;
486
 
487
			oDiv.className = 'PopupTabSelected' ;
488
			eTabsRow.style.display = '' ;
489
 
490
			if ( window.onresize )
491
				window.onresize() ;
492
		}
493
 
494
		oTabs[ tabCode ] = oDiv.id ;
495
 
496
		FCKTools.DisableSelection( oDiv ) ;
497
	} ;
498
 
499
	window.SetSelectedTab = setSelectedTab ;
500
 
501
	window.SetTabVisibility = function( tabCode, isVisible )
502
	{
503
		var oTab = $( oTabs[ tabCode ] ) ;
504
		oTab.style.display = isVisible ? '' : 'none' ;
505
 
506
		if ( ! isVisible && oTab.className == 'PopupTabSelected' )
507
		{
508
			for ( var sCode in oTabs )
509
			{
510
				if ( $( oTabs[sCode] ).style.display != 'none' )
511
				{
512
					setSelectedTab( sCode ) ;
513
					break ;
514
				}
515
			}
516
		}
517
	} ;
518
}() ;
519
 
520
// readystatechange handler for registering drag and drop handlers in cover
521
// iframes, defined out here to avoid memory leak.
522
// Do NOT put this function as a private function as it will induce memory leak
523
// in IE and it's not detectable with Drip or sIEve and undetectable leaks are
524
// really nasty (sigh).
525
var onReadyRegister = function()
1075 ddelon 526
{
1921 jp_milcent 527
	if ( this.readyState != 'complete' )
528
		return ;
529
	DragAndDrop.RegisterHandlers( this.contentWindow ) ;
530
} ;
1075 ddelon 531
 
1921 jp_milcent 532
// The business logic of the dialog, dealing with operational things like
533
// dialog open/dialog close/enable/disable/etc.
534
(function()
535
{
536
	var setOnKeyDown = function( targetDocument )
1075 ddelon 537
	{
1921 jp_milcent 538
		targetDocument.onkeydown = function ( e )
539
		{
540
			e = e || event || this.parentWindow.event ;
541
			switch ( e.keyCode )
542
			{
543
				case 13 :		// ENTER
544
					var oTarget = e.srcElement || e.target ;
545
					if ( oTarget.tagName == 'TEXTAREA' )
546
						return true ;
547
					Ok() ;
548
					return false ;
549
 
550
				case 27 :		// ESC
551
					Cancel() ;
552
					return false ;
553
			}
554
			return true ;
555
		}
556
	} ;
557
 
558
	var contextMenuBlocker = function( e )
559
	{
1075 ddelon 560
		var sTagName = e.target.tagName ;
561
		if ( ! ( ( sTagName == "INPUT" && e.target.type == "text" ) || sTagName == "TEXTAREA" ) )
562
			e.preventDefault() ;
1921 jp_milcent 563
	} ;
1075 ddelon 564
 
1921 jp_milcent 565
	var disableContextMenu = function( targetDocument )
1075 ddelon 566
	{
1921 jp_milcent 567
		if ( FCKBrowserInfo.IsIE )
568
			return ;
1075 ddelon 569
 
1921 jp_milcent 570
		targetDocument.addEventListener( 'contextmenu', contextMenuBlocker, true ) ;
571
	} ;
1075 ddelon 572
 
1921 jp_milcent 573
	// Program entry point.
574
	window.Init = function()
575
	{
576
		// Start the throbber timer.
577
		Throbber.Show( 1000 ) ;
1075 ddelon 578
 
1921 jp_milcent 579
		Sizer.RefreshContainerSize() ;
580
		LoadInnerDialog() ;
1075 ddelon 581
 
1921 jp_milcent 582
		FCKTools.DisableSelection( document.body ) ;
1075 ddelon 583
 
1921 jp_milcent 584
		// Make the title area draggable.
585
		var titleElement = $( 'header' ) ;
586
		titleElement.onmousedown = DragAndDrop.MouseDownHandler ;
587
 
588
		// Connect mousemove and mouseup events from dialog frame and outer window to dialog dragging logic.
589
		DragAndDrop.RegisterHandlers( window ) ;
590
		DragAndDrop.RegisterHandlers( Args().TopWindow ) ;
591
 
592
		// Disable the previous dialog if it exists.
593
		if ( ParentDialog() )
594
		{
595
			ParentDialog().contentWindow.SetEnabled( false ) ;
596
			if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
597
			{
598
				var currentParent = ParentDialog() ;
599
				while ( currentParent )
600
				{
601
					var blockerFrame = currentParent.contentWindow.$( 'blocker' ) ;
602
					if ( blockerFrame.readyState == 'complete' )
603
						DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ;
604
					else
605
						blockerFrame.onreadystatechange = onReadyRegister ;
606
					currentParent = ParentDialog( currentParent ) ;
607
				}
608
			}
609
			else
610
			{
611
				var currentParent = ParentDialog() ;
612
				while ( currentParent )
613
				{
614
					DragAndDrop.RegisterHandlers( currentParent.contentWindow ) ;
615
					currentParent = ParentDialog( currentParent ) ;
616
				}
617
			}
618
		}
619
 
620
		// If this is the only dialog on screen, enable the background cover.
621
		if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
622
		{
623
			var blockerFrame = FCKDialog.GetCover().firstChild ;
624
			if ( blockerFrame.readyState == 'complete' )
625
				DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ;
626
			else
627
				blockerFrame.onreadystatechange = onReadyRegister;
628
		}
629
 
630
		// Add Enter/Esc hotkeys and disable context menu for the dialog.
631
		setOnKeyDown( document ) ;
632
		disableContextMenu( document ) ;
633
	} ;
634
 
635
	window.LoadInnerDialog = function()
1075 ddelon 636
	{
1921 jp_milcent 637
		if ( window.onresize )
638
			window.onresize() ;
1075 ddelon 639
 
1921 jp_milcent 640
		// First of all, translate the dialog box contents.
641
		E.FCKLanguageManager.TranslatePage( document ) ;
1075 ddelon 642
 
1921 jp_milcent 643
		// Create the IFRAME that holds the dialog contents.
644
		$( 'innerContents' ).innerHTML = '<iframe id="frmMain" src="' + Args().Page + '" name="frmMain" frameborder="0" width="100%" height="100%" scrolling="auto" style="visibility: hidden;" allowtransparency="true"><\/iframe>' ;
645
	} ;
1075 ddelon 646
 
1921 jp_milcent 647
	window.InnerDialogLoaded = function()
648
	{
649
		// If the dialog has been closed before the iframe is loaded, do nothing.
650
		if ( !frameElement.parentNode )
651
			return null ;
1075 ddelon 652
 
1921 jp_milcent 653
		Throbber.Hide() ;
654
 
655
		var frmMain = $('frmMain') ;
656
		var innerWindow = frmMain.contentWindow ;
657
		var innerDoc = innerWindow.document ;
658
 
659
		// Show the loaded iframe.
660
		frmMain.style.visibility = '' ;
661
 
662
		// Set the language direction.
663
		innerDoc.documentElement.dir = langDir ;
664
 
665
		// Sets the Skin CSS.
666
		innerDoc.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
667
 
668
		setOnKeyDown( innerDoc ) ;
669
		disableContextMenu( innerDoc ) ;
670
 
671
		Sizer.RefreshContainerSize();
672
 
673
		DragAndDrop.RegisterHandlers( innerWindow ) ;
674
 
675
		innerWindow.focus() ;
676
 
677
		return E ;
678
	} ;
679
 
680
	window.SetOkButton = function( showIt )
681
	{
682
		$('btnOk').style.visibility = ( showIt ? '' : 'hidden' ) ;
683
	} ;
684
 
685
	window.Ok = function()
686
	{
687
		Selection.EnsureSelection() ;
688
 
689
		var frmMain = window.frames["frmMain"] ;
690
 
691
		if ( frmMain.Ok && frmMain.Ok() )
692
			CloseDialog() ;
693
		else
694
			frmMain.focus() ;
695
	} ;
696
 
697
	window.Cancel = function( dontFireChange )
698
	{
699
		Selection.EnsureSelection() ;
700
		return CloseDialog( dontFireChange ) ;
701
	} ;
702
 
703
	window.CloseDialog = function( dontFireChange )
704
	{
705
		Throbber.Hide() ;
706
 
707
		// Points the src to a non-existent location to avoid loading errors later, in case the dialog
708
		// haven't been completed loaded at this point.
709
		if ( $( 'frmMain' ) )
710
			$( 'frmMain' ).src = FCKTools.GetVoidUrl() ;
711
 
712
		if ( !dontFireChange && !FCK.EditMode )
713
		{
714
			// All dialog windows, by default, will fire the "OnSelectionChange"
715
			// event, no matter the Ok or Cancel button has been pressed.
716
			// It seems that OnSelectionChange may enter on a concurrency state
717
			// on some situations (#1965), so we should put the event firing in
718
			// the execution queue instead of executing it immediately.
719
			setTimeout( function()
720
				{
721
					FCK.Events.FireEvent( 'OnSelectionChange' ) ;
722
				}, 0 ) ;
723
		}
724
 
725
		FCKDialog.OnDialogClose( window ) ;
726
	} ;
727
 
728
	window.SetEnabled = function( isEnabled )
729
	{
730
		var cover = $( 'cover' ) ;
731
		cover.style.display = isEnabled ? 'none' : '' ;
732
 
733
		if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
734
		{
735
			if ( !isEnabled )
736
			{
737
				// Inser the blocker IFRAME before the cover.
738
				var blocker = document.createElement( 'iframe' ) ;
739
				blocker.src = FCKTools.GetVoidUrl() ;
740
				blocker.hideFocus = true ;
741
				blocker.frameBorder = 0 ;
742
				blocker.id = blocker.className = 'blocker' ;
743
				cover.appendChild( blocker ) ;
744
			}
745
			else
746
			{
747
				var blocker = $( 'blocker' ) ;
748
				if ( blocker && blocker.parentNode )
749
					blocker.parentNode.removeChild( blocker ) ;
750
			}
751
		}
752
	} ;
753
})() ;
754
// ]]>
1075 ddelon 755
		</script>
756
	</head>
1921 jp_milcent 757
	<body onload="Init();" class="PopupBody">
758
		<div class="contents" id="contents">
759
			<div id="header">
760
				<div id="TitleArea" class="PopupTitle PopupTitleBorder">
1075 ddelon 761
					<script type="text/javascript">
1921 jp_milcent 762
// <![CDATA[
763
document.write( Args().Title ) ;
764
// ]]>
1075 ddelon 765
					</script>
1921 jp_milcent 766
					<div id="closeButton" onclick="Cancel();"></div>
767
				</div>
768
				<div id="TabsRow" class="PopupTabArea" style="display: none">
1075 ddelon 769
					<table border="0" cellpadding="0" cellspacing="0" width="100%">
1921 jp_milcent 770
						<tr id="Tabs">
1075 ddelon 771
							<td class="PopupTabEmptyArea">&nbsp;</td>
772
							<td class="PopupTabEmptyArea" width="100%">&nbsp;</td>
773
						</tr>
774
					</table>
1921 jp_milcent 775
				</div>
776
			</div>
777
			<div id="innerContents"></div>
778
			<div id="PopupButtons" class="PopupButtons">
779
				<table border="0" cellpadding="0" cellspacing="0">
780
					<tr>
781
						<td width="100%">&nbsp;</td>
782
						<td nowrap="nowrap">
783
							<input id="btnOk" style="visibility: hidden;" type="button" value="Ok" class="Button" onclick="Ok();" fckLang="DlgBtnOK" />
784
							&nbsp;
785
							<input id="btnCancel" type="button" value="Cancel" class="Button" onclick="Cancel();" fckLang="DlgBtnCancel" />
786
						</td>
787
					</tr>
788
				</table>
789
			</div>
790
		</div>
791
		<div class="tl"></div>
792
		<div class="tc"></div>
793
		<div class="tr"></div>
794
		<div class="ml"></div>
795
		<div class="mr"></div>
796
		<div class="bl"></div>
797
		<div class="bc"></div>
798
		<div class="br"></div>
799
		<div class="cover" id="cover" style="display:none"></div>
800
		<div id="throbberBlock" style="position: absolute; visibility: hidden"></div>
801
		<script type="text/javascript">
802
// <![CDATA[
803
			// Set the class name for language direction.
804
			document.body.className += ' ' + langDir ;
805
 
806
			var cover = $( 'cover' ) ;
807
			cover.style.backgroundColor = FCKConfig.BackgroundBlockerColor ;
808
			FCKDomTools.SetOpacity( cover, FCKConfig.BackgroundBlockerOpacity ) ;
809
// ]]>
810
		</script>
1075 ddelon 811
	</body>
1921 jp_milcent 812
</html>