text: /*
  Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.html or http://ckeditor.com/license
  */
  
  CKEDITOR.dialog.add( 'checkspell', function( editor )
  {
  	var number = CKEDITOR.tools.getNextNumber(),
  		iframeId = 'cke_frame_' + number,
  		textareaId = 'cke_data_' + number,
  		errorBoxId = 'cke_error_' + number,
  		interval,
  		protocol = document.location.protocol || 'http:',
  		errorMsg = editor.lang.spellCheck.notAvailable;
  
  	var pasteArea = '<textarea'+
  			' style="display: none"' +
  			' id="' + textareaId + '"' +
  			' rows="10"' +
  			' cols="40">' +
  		' </textarea><div' +
  			' id="' + errorBoxId + '"' +
  			' style="display:none;color:red;font-size:16px;font-weight:bold;padding-top:160px;text-align:center;z-index:11;">' +
  		'</div><iframe' +
  			' src=""' +
  			' style="width:100%;background-color:#f1f1e3;"' +
  			' frameborder="0"' +
  			' name="' + iframeId + '"' +
  			' id="' + iframeId + '"' +
  			' allowtransparency="1">' +
  		'</iframe>';
  
  	var wscCoreUrl = editor.config.wsc_customLoaderScript || ( protocol +
  			'//loader.webspellchecker.net/sproxy_fck/sproxy.php'
  			+ '?plugin=fck2'
  			+ '&customerid=' + editor.config.wsc_customerId
  			+ '&cmd=script&doc=wsc&schema=22'
  		);
  
  	if ( editor.config.wsc_customLoaderScript )
  		errorMsg += '<p style="color:#000;font-size:11px;font-weight: normal;text-align:center;padding-top:10px">' +
  			editor.lang.spellCheck.errorLoading.replace( /%s/g, editor.config.wsc_customLoaderScript ) + '</p>';
  
  	function burnSpelling( dialog, errorMsg )
  	{
  		var i = 0;
  		return function ()
  		{
  			if ( typeof( window.doSpell ) == 'function' )
  			{
  				//Call from window.setInteval expected at once.
  				if ( typeof( interval ) != 'undefined' )
  					window.clearInterval( interval );
  
  				initAndSpell( dialog );
  			}
  			else if ( i++ == 180 )								// Timeout: 180 * 250ms = 45s.
  				window._cancelOnError( errorMsg );
  		};
  	}
  
  	window._cancelOnError = function( m )
  	{
  		if ( typeof( window.WSC_Error ) == 'undefined' )
  		{
  			CKEDITOR.document.getById( iframeId ).setStyle( 'display', 'none' );
  			var errorBox = CKEDITOR.document.getById( errorBoxId );
  			errorBox.setStyle( 'display', 'block' );
  			errorBox.setHtml( m || editor.lang.spellCheck.notAvailable );
  		}
  	};
  
  	function initAndSpell( dialog )
  	{
  		var LangComparer = new window._SP_FCK_LangCompare(),							// Language abbr standarts comparer.
  			pluginPath = CKEDITOR.getUrl( editor.plugins.wsc.path + 'dialogs/' ),			// Service paths corecting/preparing.
  			framesetPath = pluginPath + 'tmpFrameset.html';
  
  		// global var is used in FCK specific core
  		// change on equal var used in fckplugin.js
  		window.gFCKPluginName = 'wsc';
  
  		LangComparer.setDefaulLangCode( editor.config.defaultLanguage );
  
  		window.doSpell({
  			ctrl : textareaId,
  
  			lang : editor.config.wsc_lang || LangComparer.getSPLangCode(editor.langCode ),
  			intLang: editor.config.wsc_uiLang || LangComparer.getSPLangCode(editor.langCode ),
  			winType : iframeId,		// If not defined app will run on winpopup.
  
  			// Callback binding section.
  			onCancel : function()
  			{
  				dialog.hide();
  			},
  			onFinish : function( dT )
  			{
  				editor.focus();
  				dialog.getParentEditor().setData( dT.value );
  				dialog.hide();
  			},
  
  			// Some manipulations with client static pages.
  			staticFrame : framesetPath,
  			framesetPath : framesetPath,
  			iframePath : pluginPath + 'ciframe.html',
  
  			// Styles defining.
  			schemaURI : pluginPath + 'wsc.css',
  
  			userDictionaryName: editor.config.wsc_userDictionaryName,
  			customDictionaryName: editor.config.wsc_customDictionaryIds && editor.config.wsc_customDictionaryIds.split(","),
  			domainName: editor.config.wsc_domainName
  
  		});
  
  		// Hide user message console (if application was loaded more then after timeout).
  		CKEDITOR.document.getById( errorBoxId ).setStyle( 'display', 'none' );
  		CKEDITOR.document.getById( iframeId ).setStyle( 'display', 'block' );
  	}
  
  	return {
  		title : editor.config.wsc_dialogTitle || editor.lang.spellCheck.title,
  		minWidth : 485,
  		minHeight : 380,
  		buttons : [ CKEDITOR.dialog.cancelButton ],
  		onShow : function()
  		{
  			var contentArea = this.getContentElement( 'general', 'content' ).getElement();
  			contentArea.setHtml( pasteArea );
  			contentArea.getChild( 2 ).setStyle( 'height', this._.contentSize.height + 'px' );
  
  			if ( typeof( window.doSpell ) != 'function' )
  			{
  				// Load script.
  				CKEDITOR.document.getHead().append(
  					CKEDITOR.document.createElement( 'script',
  						{
  							attributes :
  								{
  									type : 'text/javascript',
  									src : wscCoreUrl
  								}
  						})
  				);
  			}
  
  			var sData = editor.getData();											// Get the data to be checked.
  			CKEDITOR.document.getById( textareaId ).setValue( sData );
  
  			interval = window.setInterval( burnSpelling( this, errorMsg ), 250 );
  		},
  		onHide : function()
  		{
  			window.ooo = undefined;
  			window.int_framsetLoaded = undefined;
  			window.framesetLoaded = undefined;
  			window.is_window_opened = false;
  		},
  		contents : [
  			{
  				id : 'general',
  				label : editor.config.wsc_dialogTitle || editor.lang.spellCheck.title,
  				padding : 0,
  				elements : [
  					{
  						type : 'html',
  						id : 'content',
  						html : ''
  					}
  				]
  			}
  		]
  	};
  });
  
  // Expand the spell-check frame when dialog resized. (#6829)
  CKEDITOR.dialog.on( 'resize', function( evt )
  {
  	var data = evt.data,
  		dialog = data.dialog;
  
  	if ( dialog._.name == 'checkspell' )
  	{
  		var content = dialog.getContentElement( 'general', 'content' ).getElement(),
  			iframe = content && content.getChild( 2 );
  
  		iframe && iframe.setSize( 'height', data.height );
  		iframe && iframe.setSize( 'width', data.width );
  	}
  });
  