Index: CKEditor/trunk/CHANGES.html
===================================================================
--- CKEditor/trunk/CHANGES.html	(revision 3856)
+++ CKEditor/trunk/CHANGES.html	(revision 3857)
@@ -120,4 +120,5 @@
  			list command may leak outside of a selected table cell and into the rest of document.</li>
  		<li><a href="http://dev.fckeditor.net/ticket/3916">#3916</a> : Fixed maximize does not enlarge editor width when width is set.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/3839">#3839</a> : Update Scayt plugin to reflect the latest change from SpellChecker.net.</li>
 	</ul>
 	<h3>
Index: CKEditor/trunk/_source/plugins/scayt/dialogs/options.js
===================================================================
--- CKEditor/trunk/_source/plugins/scayt/dialogs/options.js	(revision 3856)
+++ CKEditor/trunk/_source/plugins/scayt/dialogs/options.js	(revision 3857)
@@ -9,5 +9,8 @@
 		captions,
 		doc = CKEDITOR.document,
-		fckLang = 'en';
+		tags = [],
+		i,
+		contents = [],
+		userDicActive = false;
 	var dic_buttons = [
 		// [0] contains buttons for creating
@@ -16,365 +19,5 @@
 		"dic_rename,dic_delete"
 	];
-
-	var init_with_captions = function()
-	{
-		var dialog = this,
-			lang_list = dialog.data.scayt.getLangList(),
-			buttons = [ 'dic_create','dic_delete','dic_rename','dic_restore' ],
-			labels = [ 'mixedCase','mixedWithDigits','allCaps','ignoreDomainNames' ],
-			i;
-
-		// Add buttons titles
-		for ( i in buttons )
-		{
-			var button = buttons[ i ];
-			doc.getById( button ).setHtml( '<span class="cke_dialog_ui_button">' + captions[ 'button_' + button]  +'</span>' );
-		}
-		doc.getById( 'dic_info' ).setHtml( captions[ 'dic_info' ] );
-
-		// Fill options and dictionary labels.
-		for ( i in labels )
-		{
-			var label = 'label_' + labels[ i ],
-				labelElement = doc.getById( label );
-
-			if (  'undefined' != typeof labelElement
-			   && 'undefined' != typeof captions[ label ]
-			   && 'undefined' != typeof dialog.options[labels[ i ]] )
-			{
-				labelElement.setHtml( captions[ label ] );
-				var labelParent = labelElement.getParent();
-				labelParent.$.style.display = "block";
-			}
-		}
-
-		var about = '<p>' + captions[ 'about_throwt_image' ] + '</p>'+
-					'<p>' + captions[ 'version' ]  + dialog.data.scayt.version.toString() + '</p>' +
-					'<p>' + captions[ 'about_throwt_copy' ] + '</p>';
-
-		doc.getById( 'scayt_about' ).setHtml( about );
-
-		// Create languages tab.
-		var createOption = function( option, list )
-		{
-			var label = doc.createElement( 'label' );
-			label.setAttribute( 'for', 'cke_option' + option );
-			label.setHtml( list[ option ] );
-
-			if ( dialog.sLang == option )	// Current.
-				dialog.chosed_lang = option;
-
-			var div = doc.createElement( 'div' );
-			var radio = CKEDITOR.dom.element.createFromHtml( '<input id="cke_option' +
-					option + '" type="radio" ' +
-					( dialog.sLang == option ? 'checked="checked"' : '' ) +
-					' value="' + option + '" name="scayt_lang" />' );
-
-			radio.on( 'click', function()
-				{
-					this.$.checked = true;
-					dialog.chosed_lang = option;
-				});
-
-			div.append( radio );
-			div.append( label );
-
-			return {
-				lang : list[ option ],
-				code : option,
-				radio : div
-			};
-		};
-
-		var langList = [];
-		for ( i in lang_list.rtl )
-			langList[ langList.length ] = createOption( i, lang_list.ltr );
-
-		for ( i in lang_list.ltr )
-			langList[ langList.length  ] = createOption( i, lang_list.ltr );
-
-		langList.sort( 	function( lang1, lang2 )
-			{
-				return ( lang2.lang > lang1.lang ) ? -1 : 1 ;
-			});
-
-		var fieldL = doc.getById( 'scayt_lcol' ),
-			fieldR = doc.getById( 'scayt_rcol' );
-		for ( i=0; i < langList.length; i++ )
-		{
-			var field = ( i < langList.length / 2 ) ? fieldL : fieldR;
-			field.append( langList[ i ].radio );
-		}
-
-		// user dictionary handlers
-		var dic = {};
-		dic.dic_create = function( el, dic_name , dic_buttons )
-			{
-				// comma separated button's ids include repeats if exists
-				var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];
-
-				var err_massage = captions["err_dic_create"];
-				var suc_massage = captions["succ_dic_create"];
-				//console.info("--plugin ");
-
-				scayt.createUserDictionary(dic_name,
-					function(arg)
-						{
-							//console.info( "dic_create callback called with args" , arg );
-							hide_dic_buttons ( all_buttons );
-							display_dic_buttons ( dic_buttons[1] );
-							suc_massage = suc_massage.replace("%s" , arg.dname );
-							dic_success_message (suc_massage);
-						},
-					function(arg)
-						{
-							//console.info( "dic_create errorback called with args" , arg )
-							err_massage = err_massage.replace("%s" ,arg.dname );
-							dic_error_message ( err_massage + "( "+ (arg.message || "") +")");
-						});
-
-			};
-
-		dic.dic_rename = function( el, dic_name , dic_buttons )
-			{
-				//
-				// try to rename dictionary
-				// @TODO: rename dict
-				//console.info ( captions["err_dic_rename"] )
-				var err_massage = captions["err_dic_rename"] || "";
-				var suc_massage = captions["succ_dic_rename"] || "";
-				scayt.renameUserDictionary(dic_name,
-					function(arg)
-						{
-							//console.info( "dic_rename callback called with args" , arg );
-							suc_massage = suc_massage.replace("%s" , arg.dname );
-							set_dic_name( dic_name );
-							dic_success_message ( suc_massage );
-						},
-					function(arg)
-						{
-							//console.info( "dic_rename errorback called with args" , arg )
-							err_massage = err_massage.replace("%s" , arg.dname  );
-							set_dic_name( dic_name );
-							dic_error_message( err_massage + "( " + ( arg.message || "" ) + " )" );
-						});
-			};
-
-		dic.dic_delete = function ( el, dic_name , dic_buttons )
-			{
-				var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];
-				var err_massage = captions["err_dic_delete"];
-				var suc_massage = captions["succ_dic_delete"];
-
-				// try to delete dictionary
-				// @TODO: delete dict
-				scayt.deleteUserDictionary(
-					function(arg)
-						{
-							//console.info( "dic_delete callback " , dic_name ,arg );
-							suc_massage = suc_massage.replace("%s" , arg.dname );
-							hide_dic_buttons ( all_buttons );
-							display_dic_buttons ( dic_buttons[0] );
-							set_dic_name( "" ); // empty input field
-							dic_success_message( suc_massage );
-						},
-					function(arg)
-						{
-							//console.info( " dic_delete errorback called with args" , arg )
-							err_massage = err_massage.replace("%s" , arg.dname );
-							dic_error_message(err_massage);
-						});
-			};
-
-		dic.dic_restore = dialog.dic_restore || function ( el, dic_name , dic_buttons )
-			{
-				// try to restore existing dictionary
-				var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];
-				var err_massage = captions["err_dic_restore"];
-				var suc_massage = captions["succ_dic_restore"];
-
-				scayt.restoreUserDictionary(dic_name,
-					function(arg)
-						{
-							//console.info( "dic_restore callback called with args" , arg );
-							suc_massage = suc_massage.replace("%s" , arg.dname );
-							hide_dic_buttons ( all_buttons );
-							display_dic_buttons(dic_buttons[1]);
-							dic_success_message( suc_massage );
-						},
-					function(arg)
-						{
-							//console.info( " dic_restore errorback called with args" , arg )
-							err_massage = err_massage.replace("%s" , arg.dname );
-							dic_error_message( err_massage );
-						});
-			};
-
-		// ** bind event listeners
-		var arr_buttons = ( dic_buttons[0] + ',' + dic_buttons[1] ).split( ',' ),
-			l;
-
-		for ( i = 0, l = arr_buttons.length ; i < l ; i += 1 )
-		{
-		 	var dic_button = doc.getById(arr_buttons[i]);
-
-			dic_button.on( 'click', function ()
-				{
-					var dic_name = doc.getById('dic_name').getValue();
-					if ( !dic_name )
-					{
-						dic_error_message(" Dictionary name should not be empty. ");
-						return false;
-					}
-					//apply handler
-					dic[ this.getId() ].apply( null, [ this, dic_name, dic_buttons ] );
-
-					return true;
-				});
-		}
-	};
-	var reload = function()
-	{
-		var dialog = this;
-
-		// Animate options.
-		for ( var i in dialog.options )
-		{
-			var checkbox = doc.getById( i );
-			if ( checkbox )
-			{
-				checkbox.removeAttribute( 'checked' );
-				if ( dialog.options[ i ] == 1 )
-					checkbox.setAttribute( 'checked', 'checked' );
-
-				// Bind events. Do it only once.
-				if ( firstLoad )
-				{
-					checkbox.on( 'click', function()
-						{
-							dialog.options[ this.getId() ] = this.$.checked ? 1 : 0 ;
-						} );
-				}
-			}
-		}
-
-		// * user dictionary
-		scayt.getNameUserDictionary(
-			function( o )
-			{
-				var dic_name = o.dname;
-				if ( dic_name )
-				{
-					doc.getById( 'dic_name' ).setValue(dic_name);
-					display_dic_buttons( dic_buttons[1] );
-				}
-				else
-					display_dic_buttons( dic_buttons[0] );
-
-			},
-			function ()
-				{
-					doc.getById( 'dic_name' ).setValue("");
-				});
-
-		dic_success_message("");
-	};
-
-	function dic_error_message ( m )
-		{
-			doc.getById('dic_message').setHtml('<span style="color:red;">' + m + '</span>' );
-		}
-        function dic_success_message ( m )
-		{
-			doc.getById('dic_message').setHtml('<span style="color:blue;">' + m + '</span>') ;
-		}
-	function display_dic_buttons ( sIds )
-		{
-
-			sIds = new String( sIds );
-			var aIds = sIds.split(',');
-			for ( var i=0, l = aIds.length; i < l ; i+=1)
-			{
-				doc.getById( aIds[i] ).$.style.display = "inline";
-			}
-
-		}
-	function hide_dic_buttons ( sIds )
-		{
-			sIds = new String( sIds );
-			var aIds = sIds.split(',');
-			for ( var i = 0, l = aIds.length; i < l ; i += 1 )
-			{
-				doc.getById( aIds[i] ).$.style.display = "none";
-			}
-		}
-	function set_dic_name ( dic_name )
-		{
-			doc.getById('dic_name').$.value= dic_name;
-		}
-
-	return {
-		title : editor.lang.scayt.title,
-		minWidth : 340,
-		minHeight : 200,
-		onShow : function()
-			{
-				var dialog = this;
-				dialog.data = editor.fire( 'scaytDialog', {} );
-				dialog.options = dialog.data.scayt_control.option();
-				dialog.sLang = dialog.data.scayt_control.sLang;
-
-				if ( !dialog.data || !dialog.data.scayt || !dialog.data.scayt_control )
-				{
-					alert( 'Error loading application service' );
-					dialog.hide();
-					return;
-				}
-
-				var stop = 0;
-				if ( firstLoad )
-				{
-					dialog.data.scayt.getCaption( 'en', function( caps )
-						{
-							if ( stop++ > 0 )	// Once only
-								return;
-							captions = caps;
-							init_with_captions.apply( dialog );
-							reload.apply( dialog );
-							firstLoad = false;
-						});
-				}
-				else
-					reload.apply( dialog );
-
-				dialog.selectPage( dialog.data.tab );
-			},
-			onOk : function()
-			{
-				var scayt_control =  this.data.scayt_control,
-					o = scayt_control.option(),
-					c = 0;
-
-				// Set up options if any was set.
-				for ( var oN in this.options )
-				{
-					if (o[oN] != this.options[ oN ] && c === 0 )
-					{
-						scayt_control.option( this.options );
-						c++;
-					}
-				}
-
-				// Setup languge if it was changed.
-				var csLang = this.chosed_lang;
-				if ( csLang && this.data.sLang != csLang )
-				{
-					scayt_control.setLang( csLang );
-					c++;
-				}
-				if ( c > 0 )
-					scayt_control.refresh();
-			},
-			contents : [
+	var tags_contents =  [
 				{
 					id : 'options',
@@ -464,5 +107,388 @@
 					]
 				}
-			]
+			];
+	var dialogDefiniton = {
+		title : editor.lang.scayt.title,
+		minWidth : 340,
+		minHeight : 200,
+		onShow : function()
+		{
+			var dialog = this;
+			dialog.data = editor.fire( 'scaytDialog', {} );
+			dialog.options = dialog.data.scayt_control.option();
+			dialog.sLang = dialog.data.scayt_control.sLang;
+
+			if ( !dialog.data || !dialog.data.scayt || !dialog.data.scayt_control )
+			{
+				alert( 'Error loading application service' );
+				dialog.hide();
+				return;
+			}
+
+			var stop = 0;
+			if ( firstLoad )
+			{
+				dialog.data.scayt.getCaption( 'en', function( caps )
+					{
+						if ( stop++ > 0 )	// Once only
+							return;
+						captions = caps;
+						init_with_captions.apply( dialog );
+						reload.apply( dialog );
+						firstLoad = false;
+					});
+			}
+			else
+				reload.apply( dialog );
+
+			dialog.selectPage( dialog.data.tab );
+		},
+		onOk : function()
+		{
+			var scayt_control =  this.data.scayt_control,
+				o = scayt_control.option(),
+				c = 0;
+
+			// Set up options if any was set.
+			for ( var i in this.options )
+			{
+				if (o[i] != this.options[ i ] && c === 0 )
+				{
+					scayt_control.option( this.options );
+					c++;
+				}
+			}
+
+			// Setup languge if it was changed.
+			var csLang = this.chosed_lang;
+			if ( csLang && this.data.sLang != csLang )
+			{
+				scayt_control.setLang( csLang );
+				c++;
+			}
+			if ( c > 0 )
+				scayt_control.refresh();
+		},
+		contents : contents
         };
+	
+	var scayt_control = CKEDITOR.plugins.scayt.getScayt( editor );
+	if ( scayt_control )
+	{
+		tags = scayt_control.uiTags;
+	}
+	
+	for ( i in tags ) {
+		if ( tags[ i ] == 1 )
+			contents[ contents.length ] = tags_contents[ i ];
+	}
+	if ( tags[2] == 1 )
+		userDicActive = true;
+	
+	function onDicButtonClick()
+	{
+		var dic_name = doc.getById('dic_name').getValue();
+		if ( !dic_name )
+		{
+			dic_error_message(" Dictionary name should not be empty. ");
+			return false;
+		}
+		//apply handler
+		dic[ this.getId() ].apply( null, [ this, dic_name, dic_buttons ] );
+
+		return true;
+	}
+	var init_with_captions = function()
+	{
+		var dialog = this,
+			lang_list = dialog.data.scayt.getLangList(),
+			buttons = [ 'dic_create','dic_delete','dic_rename','dic_restore' ],
+			labels = [ 'mixedCase','mixedWithDigits','allCaps','ignoreDomainNames' ],
+			i;
+
+		// Add buttons titles
+		if (userDicActive)
+		{
+			for ( i in buttons )
+			{
+				var button = buttons[ i ];
+				doc.getById( button ).setHtml( '<span class="cke_dialog_ui_button">' + captions[ 'button_' + button]  +'</span>' );
+			}
+			doc.getById( 'dic_info' ).setHtml( captions[ 'dic_info' ] );
+		}
+		
+
+		// Fill options and dictionary labels.
+		for ( i in labels )
+		{
+			var label = 'label_' + labels[ i ],
+				labelElement = doc.getById( label );
+
+			if (  'undefined' != typeof labelElement
+			   && 'undefined' != typeof captions[ label ]
+			   && 'undefined' != typeof dialog.options[labels[ i ]] )
+			{
+				labelElement.setHtml( captions[ label ] );
+				var labelParent = labelElement.getParent();
+				labelParent.$.style.display = "block";
+			}
+		}
+
+		var about = '<p>' + captions[ 'about_throwt_image' ] + '</p>'+
+					'<p>' + captions[ 'version' ]  + dialog.data.scayt.version.toString() + '</p>' +
+					'<p>' + captions[ 'about_throwt_copy' ] + '</p>';
+
+		doc.getById( 'scayt_about' ).setHtml( about );
+
+		// Create languages tab.
+		var createOption = function( option, list )
+		{
+			var label = doc.createElement( 'label' );
+			label.setAttribute( 'for', 'cke_option' + option );
+			label.setHtml( list[ option ] );
+
+			if ( dialog.sLang == option )	// Current.
+				dialog.chosed_lang = option;
+
+			var div = doc.createElement( 'div' );
+			var radio = CKEDITOR.dom.element.createFromHtml( '<input id="cke_option' +
+					option + '" type="radio" ' +
+					( dialog.sLang == option ? 'checked="checked"' : '' ) +
+					' value="' + option + '" name="scayt_lang" />' );
+
+			radio.on( 'click', function()
+				{
+					this.$.checked = true;
+					dialog.chosed_lang = option;
+				});
+
+			div.append( radio );
+			div.append( label );
+
+			return {
+				lang : list[ option ],
+				code : option,
+				radio : div
+			};
+		};
+
+		var langList = [];
+		for ( i in lang_list.rtl )
+			langList[ langList.length ] = createOption( i, lang_list.ltr );
+
+		for ( i in lang_list.ltr )
+			langList[ langList.length  ] = createOption( i, lang_list.ltr );
+
+		langList.sort( 	function( lang1, lang2 )
+			{
+				return ( lang2.lang > lang1.lang ) ? -1 : 1 ;
+			});
+
+		var fieldL = doc.getById( 'scayt_lcol' ),
+			fieldR = doc.getById( 'scayt_rcol' );
+		for ( i=0; i < langList.length; i++ )
+		{
+			var field = ( i < langList.length / 2 ) ? fieldL : fieldR;
+			field.append( langList[ i ].radio );
+		}
+
+		// user dictionary handlers
+		var dic = {};
+		dic.dic_create = function( el, dic_name , dic_buttons )
+			{
+				// comma separated button's ids include repeats if exists
+				var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];
+
+				var err_massage = captions["err_dic_create"];
+				var suc_massage = captions["succ_dic_create"];
+				//console.info("--plugin ");
+
+				scayt.createUserDictionary(dic_name,
+					function(arg)
+						{
+							//console.info( "dic_create callback called with args" , arg );
+							hide_dic_buttons ( all_buttons );
+							display_dic_buttons ( dic_buttons[1] );
+							suc_massage = suc_massage.replace("%s" , arg.dname );
+							dic_success_message (suc_massage);
+						},
+					function(arg)
+						{
+							//console.info( "dic_create errorback called with args" , arg )
+							err_massage = err_massage.replace("%s" ,arg.dname );
+							dic_error_message ( err_massage + "( "+ (arg.message || "") +")");
+						});
+
+			};
+
+		dic.dic_rename = function( el, dic_name , dic_buttons )
+			{
+				//
+				// try to rename dictionary
+				// @TODO: rename dict
+				//console.info ( captions["err_dic_rename"] )
+				var err_massage = captions["err_dic_rename"] || "";
+				var suc_massage = captions["succ_dic_rename"] || "";
+				scayt.renameUserDictionary(dic_name,
+					function(arg)
+						{
+							//console.info( "dic_rename callback called with args" , arg );
+							suc_massage = suc_massage.replace("%s" , arg.dname );
+							set_dic_name( dic_name );
+							dic_success_message ( suc_massage );
+						},
+					function(arg)
+						{
+							//console.info( "dic_rename errorback called with args" , arg )
+							err_massage = err_massage.replace("%s" , arg.dname  );
+							set_dic_name( dic_name );
+							dic_error_message( err_massage + "( " + ( arg.message || "" ) + " )" );
+						});
+			};
+
+		dic.dic_delete = function ( el, dic_name , dic_buttons )
+			{
+				var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];
+				var err_massage = captions["err_dic_delete"];
+				var suc_massage = captions["succ_dic_delete"];
+
+				// try to delete dictionary
+				// @TODO: delete dict
+				scayt.deleteUserDictionary(
+					function(arg)
+						{
+							//console.info( "dic_delete callback " , dic_name ,arg );
+							suc_massage = suc_massage.replace("%s" , arg.dname );
+							hide_dic_buttons ( all_buttons );
+							display_dic_buttons ( dic_buttons[0] );
+							set_dic_name( "" ); // empty input field
+							dic_success_message( suc_massage );
+						},
+					function(arg)
+						{
+							//console.info( " dic_delete errorback called with args" , arg )
+							err_massage = err_massage.replace("%s" , arg.dname );
+							dic_error_message(err_massage);
+						});
+			};
+
+		dic.dic_restore = dialog.dic_restore || function ( el, dic_name , dic_buttons )
+			{
+				// try to restore existing dictionary
+				var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];
+				var err_massage = captions["err_dic_restore"];
+				var suc_massage = captions["succ_dic_restore"];
+
+				scayt.restoreUserDictionary(dic_name,
+					function(arg)
+						{
+							//console.info( "dic_restore callback called with args" , arg );
+							suc_massage = suc_massage.replace("%s" , arg.dname );
+							hide_dic_buttons ( all_buttons );
+							display_dic_buttons(dic_buttons[1]);
+							dic_success_message( suc_massage );
+						},
+					function(arg)
+						{
+							//console.info( " dic_restore errorback called with args" , arg )
+							err_massage = err_massage.replace("%s" , arg.dname );
+							dic_error_message( err_massage );
+						});
+			};
+
+		// ** bind event listeners
+		var arr_buttons = ( dic_buttons[0] + ',' + dic_buttons[1] ).split( ',' ),
+			l;
+
+		for ( i = 0, l = arr_buttons.length ; i < l ; i += 1 )
+		{
+		 	var dic_button = doc.getById(arr_buttons[i]);
+			if ( dic_button )
+				dic_button.on( 'click', onDicButtonClick, this );
+		}
+	};
+
+	var reload = function()
+	{
+		var dialog = this;
+
+		// Animate options.
+		for ( var i in dialog.options )
+		{
+			var checkbox = doc.getById( i );
+			if ( checkbox )
+			{
+				checkbox.removeAttribute( 'checked' );
+				if ( dialog.options[ i ] == 1 )
+					checkbox.setAttribute( 'checked', 'checked' );
+
+				// Bind events. Do it only once.
+				if ( firstLoad )
+				{
+					checkbox.on( 'click', function()
+						{
+							dialog.options[ this.getId() ] = this.$.checked ? 1 : 0 ;
+						} );
+				}
+			}
+		}
+
+		// * user dictionary
+		if ( userDicActive ){
+			scayt.getNameUserDictionary(
+			function( o )
+			{
+				var dic_name = o.dname;
+				if ( dic_name )
+				{
+					doc.getById( 'dic_name' ).setValue(dic_name);
+					display_dic_buttons( dic_buttons[1] );
+				}
+				else
+					display_dic_buttons( dic_buttons[0] );
+
+			},
+			function ()
+			{
+				doc.getById( 'dic_name' ).setValue("");
+			});
+			dic_success_message("");
+		}
+		
+	};
+
+	function dic_error_message ( m )
+		{
+			doc.getById('dic_message').setHtml('<span style="color:red;">' + m + '</span>' );
+		}
+    function dic_success_message ( m )
+		{
+			doc.getById('dic_message').setHtml('<span style="color:blue;">' + m + '</span>') ;
+		}
+	function display_dic_buttons ( sIds )
+		{
+
+			sIds = String( sIds );
+			var aIds = sIds.split(',');
+			for ( var i=0, l = aIds.length; i < l ; i+=1)
+			{
+				doc.getById( aIds[i] ).$.style.display = "inline";
+			}
+
+		}
+	function hide_dic_buttons ( sIds )
+		{
+			sIds = String( sIds );
+			var aIds = sIds.split(',');
+			for ( var i = 0, l = aIds.length; i < l ; i += 1 )
+			{
+				doc.getById( aIds[i] ).$.style.display = "none";
+			}
+		}
+	function set_dic_name ( dic_name )
+		{
+			doc.getById('dic_name').$.value= dic_name;
+		}
+
+	return dialogDefiniton;
 });
Index: CKEditor/trunk/_source/plugins/scayt/plugin.js
===================================================================
--- CKEditor/trunk/_source/plugins/scayt/plugin.js	(revision 3856)
+++ CKEditor/trunk/_source/plugins/scayt/plugin.js	(revision 3857)
@@ -19,13 +19,24 @@
 	{
 		var editor = this;
-		dojo.requireLocalization( 'scayt', 'caption', '', 'ROOT' );
 
 		var createInstance = function()	// Create new instance every time Document is created.
 		{
 			// Initialise Scayt instance.
-			var oParams = CKEDITOR.config.scaytParams || {};
+			var oParams = {};
 			oParams.srcNodeRef = editor.document.getWindow().$.frameElement; 		// Get the iframe.
 			// syntax : AppName.AppVersion@AppRevision
 			oParams.assocApp  = "CKEDITOR." + CKEDITOR.version + "@" + CKEDITOR.revision;
+			
+			oParams.customerid = editor.config.scayt_customerid  || "1:11111111111111111111111111111111111111";
+			oParams.customDictionaryName = editor.config.scayt_customDictionaryName;
+			oParams.userDictionaryName = editor.config.scayt_userDictionaryName;
+			oParams.defLang = editor.scayt_defLang;
+			
+			if ( CKEDITOR._scaytParams ) 
+				for ( var k in CKEDITOR._scaytParams )
+				{
+					oParams[ k ] = CKEDITOR._scaytParams[ k ];
+				}
+			
 			var scayt_control = new scayt( oParams );
 
@@ -38,5 +49,5 @@
 				scayt_control.paused = lastInstance.paused;
 			}
-
+			
 			plugin.instances[ editor.name ] = scayt_control;
 
@@ -68,15 +79,16 @@
 		editor.on( 'beforeCommandExec', function( ev )		// Disable SCAYT before Source command execution.
 			{
-				if ( ev.data.name == 'source' && editor.mode == 'wysiwyg' )
-				{
-					var scayt = plugin.getScayt( editor );
-					if ( scayt )
-					{
-						scayt.paused = !scayt.disabled;
-						scayt.setDisabled( true );
+				if ( (ev.data.name == 'source' ||  ev.data.name == 'newpage') && editor.mode == 'wysiwyg' )
+				{
+					var scayt_instanse = plugin.getScayt( editor );
+					if ( scayt_instanse )
+					{
+						scayt_instanse.paused = !scayt_instanse.disabled;
+						scayt_instanse.destroy();
+						delete plugin.instances[ editor.name ];
 					}
 				}
 			});
-
+		
 		// Listen to data manipulation to reflect scayt markup.
 		editor.on( 'afterSetData', function()
@@ -85,4 +97,23 @@
 					plugin.getScayt( editor ).refresh();
 			});
+
+		// Reload spell-checking for current word after insertion completed.
+		editor.on( 'insertElement', function()
+			{
+				var scayt_instance = plugin.getScayt( editor );
+				if ( plugin.isScaytEnabled( editor ) )
+				{
+					// Unlock the selection before reload, SCAYT will take
+					// care selection update.
+					if ( CKEDITOR.env.ie )
+						editor.getSelection().unlock( true );
+
+					// Swallow any SCAYT engine errors.
+					try{
+						scayt_instance.refresh();
+					}catch( er )
+					{}
+				}
+			}, this, null, 50 );
 
 		editor.on( 'scaytDialog', function( ev )	// Communication with dialog.
@@ -135,6 +166,6 @@
 		isScaytEnabled : function( editor )
 		{
-			var scayt = this.getScayt( editor );
-			return ( scayt ) ? scayt.disabled === false : false;
+			var scayt_instanse = this.getScayt( editor );
+			return ( scayt_instanse ) ? scayt_instanse.disabled === false : false;
 		},
 		loadEngine : function( editor )
@@ -155,19 +186,15 @@
 
 			this.engineLoaded = -1;	// Loading in progress.
-			// assign diojo configurable vars
-			var parseUrl =  function(data)
-				{
-					var m = data.match(/(.*)[\/\\]([^\/\\]+\.\w+)$/);
-					return { path: m[1], file: m[2] };
-				};
 
 			// compose scayt url
 			var protocol = document.location.protocol;
-			var baseUrl  = "svc.spellchecker.net/spellcheck/lf/scayt/scayt.js";
-			var scaytUrl  =  editor.config.scaytParams.srcScayt ||
-				(protocol + "//" + baseUrl);
-			var scaytConfigBaseUrl = parseUrl(scaytUrl).path +  "/";
-
-			djScaytConfig =
+			// Default to 'http' for unknown.
+			protocol = protocol.search( /https?:/) != -1? protocol : 'http:';
+			var baseUrl  = "svc.spellchecker.net/spellcheck/lf/scayt/scayt1.js";
+			
+			var scaytUrl  =  editor.config.scayt_srcUrl || ( protocol + "//" + baseUrl );
+			var scaytConfigBaseUrl =  plugin.parseUrl( scaytUrl ).path +  "/";
+
+			CKEDITOR._djScaytConfig =
 			{
 				baseUrl: scaytConfigBaseUrl,
@@ -194,4 +221,12 @@
 
 			return null;
+		},
+		parseUrl : function ( data )
+		{
+			var match;
+			if ( data.match && ( match = data.match(/(.*)[\/\\](.*?\.\w+)$/) ) )
+				return { path: match[1], file: match[2] }
+			else
+				return data;
 		}
 	};
@@ -312,11 +347,11 @@
 				});
 
-			editor.ui.add( 'Scayt', CKEDITOR.UI_MENUBUTTON,
-				{
-					label : editor.lang.scayt.title,
-					title : editor.lang.scayt.title,
-					className : 'cke_button_scayt',
-					onRender: function()
-					{
+				editor.ui.add( 'Scayt', CKEDITOR.UI_MENUBUTTON,
+					{
+						label : editor.lang.scayt.title,
+						title : editor.lang.scayt.title,
+						className : 'cke_button_scayt',
+						onRender: function()
+						{
 						command.on( 'state', function()
 							{
@@ -331,12 +366,12 @@
 						editor.getMenuItem( 'scaytToggle' ).label = editor.lang.scayt[ isEnabled ? 'disable' : 'enable' ];
 
-						return {
-							scaytToggle : CKEDITOR.TRISTATE_OFF,
-							scaytOptions : isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
-							scaytLangs : isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
-							scaytAbout : isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED
-						};
-					}
-				});
+							return {
+								scaytToggle : CKEDITOR.TRISTATE_OFF,
+								scaytOptions : isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
+								scaytLangs : isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
+								scaytAbout : isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED
+							};
+						}
+					});
 
 			// If the "contextmenu" plugin is loaded, register the listeners.
@@ -345,9 +380,9 @@
 				editor.contextMenu.addListener( function( element, selection )
 					{
-						var scayt_control = plugin.getScayt( editor );
-						if ( !plugin.isScaytEnabled( editor ) || !element || !element.$ )
+						if ( !( plugin.isScaytEnabled( editor ) && element ) )
 							return null;
 
-						var word = scayt_control.getWord( element.$ );
+						var scayt_control = plugin.getScayt( editor ),
+							word = scayt_control.getWord( element.$ );
 
 						if ( !word )
@@ -451,9 +486,6 @@
 						mainSuggestions[ 'scayt_add_word' ] = CKEDITOR.TRISTATE_OFF;
 
-						// ** ahow ads entry point
-						// ** hide ads listener register
-//						try{
-							//scayt_control.showBanner( editor )
-//						}catch(err){}
+						if ( scayt_control.fireOnContextMenu )
+							scayt_control.fireOnContextMenu( editor )
 
 						return mainSuggestions;
@@ -477,5 +509,4 @@
 })();
 
-CKEDITOR.config.scaytParams = CKEDITOR.config.scaytParams || {};
-CKEDITOR.config.scayt_maxSuggestions = 5;
+CKEDITOR.config.scayt_maxSuggestions =  5;
 CKEDITOR.config.scayt_autoStartup = false;
