Index: /CKEditor/trunk/_source/plugins/scayt/dialogs/options.js
===================================================================
--- /CKEditor/trunk/_source/plugins/scayt/dialogs/options.js	(revision 3695)
+++ /CKEditor/trunk/_source/plugins/scayt/dialogs/options.js	(revision 3696)
@@ -10,4 +10,10 @@
 		doc = CKEDITOR.document,
 		fckLang = 'en';
+	var dic_buttons = [
+		// [0] contains buttons for creating
+		"dic_create,dic_restore",
+		// [1] contains buton for manipulation 
+		"dic_rename,dic_delete"
+	];
 
 	var init_with_captions = function()
@@ -19,13 +25,11 @@
 			i;
 
-/*
 		// Add buttons titles
 		for ( var i in buttons )
 		{
 			var button = buttons[ i ];
-			doc.getById( button ).setHtml( captions[ 'button_' + button] );
+			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.
@@ -34,6 +38,13 @@
 			var label = 'label_' + labels[ i ],
 				labelElement = doc.getById( label );
-			if ( labelElement )
+
+			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";
+			}
 		}
 		
@@ -95,4 +106,125 @@
 			field.append( langList[ i ].radio );
 		}
+
+		// user dictionary handlers
+		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(',');
+		 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 ] );
+				});
+		}
 	};
 	var reload = function()
@@ -122,10 +254,4 @@
 
 		// * user dictionary    
-		var dic_buttons = [
-			// [0] contains buttons for creating
-			'dic_create,dic_restore',
-			// [1] contains buton for manipulation 
-			'dic_rename,dic_delete,dic_restore'
-		];
 		scayt.getNameUserDictionary(
 			function( o )
@@ -134,5 +260,5 @@
 				if ( dic_name )
 				{
-					dojo.byId( 'dic_name' ).value = dic_name;
+					doc.getById( 'dic_name' ).setValue(dic_name);
 					display_dic_buttons( dic_buttons[1] );
 				}
@@ -141,34 +267,52 @@
 				
 			},
-			function () {
-			});
-
+			function ()
+				{
+					doc.getById( 'dic_name' ).setValue("");
+				});
+
+		dic_success_message("")
 		var dic_flag = 0; 
-		 // ** bind event listeners
-		dojo.query('div.dic_buttons a.button').onclick(function( ev )
-			{
-				if (typeof window[this.id] == 'function'  ){
-					// get dic name
-					var dic_name = dojo.trim ( dojo.byId('dic_name').value );
-					// check common dictionary rules
-					if (!dic_name)
-					{
-						dic_error_message( editor.lang.scayt.emptyDic );
-						return false;
-					}
-					// Apply handler
-					window[this.id].apply( window, [this,ev , dic_name, dic_buttons ] );
-				}
-				//console.info( typeof window[this.id], window[this.id].calle )
-				return false;
-			});
 	};
 
-    return {
-           title : editor.lang.scayt.title,
-           minWidth : 340,
-           minHeight : 200,
-           onShow : function()
-		   {
+	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', {} );
@@ -237,17 +381,17 @@
 							html : 	'<div class="inner_options">' +
 									'	<div class="messagebox"></div>' +
-									'	<div>' +
+									'	<div style="display:none;">' +
 									'		<input type="checkbox" value="0" id="allCaps" />' +
 									'		<label for="allCaps" id="label_allCaps"></label>' +
 									'	</div>' +
-									'	<div>' +
+									'	<div style="display:none;">' +
 									'		<input type="checkbox" value="0" id="ignoreDomainNames" />' +
 									'		<label for="ignoreDomainNames" id="label_ignoreDomainNames"></label>' +
 									'	</div>' +
-									'	<div>' +
+									'	<div style="display:none;">' +
 									'	<input type="checkbox" value="0" id="mixedCase" />' +
 									'		<label for="mixedCase" id="label_mixedCase"></label>' +
 									'	</div>' +
-									'	<div>' +
+									'	<div style="display:none;">' +
 									'		<input type="checkbox" value="0" id="mixedWithDigits" />' +
 									'		<label for="mixedWithDigits" id="label_mixedWithDigits"></label>' +
@@ -272,5 +416,4 @@
 					]
 				},
-				/*
 				{
 					id : 'dictionaries',
@@ -281,21 +424,27 @@
 							style: '',
 							id : 'dic',
-							html : 	'<div class="inner_dictionary">' +
-									'	<div class="messagebox" id="dic_message"></div>' +
-									'	<div class="dictionary" > ' +
-									'		<label for="dname" id="dname"></label>' +
-									'		<input type="text" size="14" maxlength="15" value="" id="dic_name" name="dic_name"/>' +
-									'		<div class="dic_buttons">' +
-									'			<a href="javascript:void(0)" id="dic_create" class="button"></a>' +
-									'			<a href="javascript:void(0)" id="dic_delete" class="button"></a>' +
-									'			<a href="javascript:void(0)" id="dic_rename" class="button"></a>' +
-									'			<a href="javascript:void(0)" id="dic_restore" class="button"></a>' +
+							html : 	'<div class="inner_dictionary" style="text-align:left; white-space:normal;">' +
+									'	<div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message"> </div>' +
+									'	<div style="margin:5px auto; width:80%;white-space:normal;"> ' +
+									'       <span class="cke_dialog_ui_labeled_label" >Dictionary name</span><br>'+
+									'		<span class="cke_dialog_ui_labeled_content" >'+
+									'			<div class="cke_dialog_ui_input_text">'+
+									'				<input id="dic_name" type="text" class="cke_dialog_ui_input_text"/>'+
+									'		</div></span></div>'+
+									'		<div style="margin:5px auto; width:80%;white-space:normal;">'+
+									'			<a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_create">'+
+									'				</a>' +
+									'			<a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_delete">'+
+									'				</a>' +
+									'			<a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_rename">'+
+									'				</a>' +
+									'			<a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_restore">'+
+									'				</a>' +
 									'		</div>' +
-									'	</div><p id="dic_info"></p>' +
+									'	<div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info"></div>' +
 									'</div>'
 						}
 					]
 				},
-				*/
 				{
 					id : 'about',
Index: /CKEditor/trunk/_source/plugins/scayt/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/scayt/plugin.js	(revision 3695)
+++ /CKEditor/trunk/_source/plugins/scayt/plugin.js	(revision 3696)
@@ -24,8 +24,9 @@
 		{
 			// Initialise Scayt instance.
-			var scayt_control = new scayt(
-				{
-					srcNodeRef: editor.document.getWindow().$.frameElement
-				});
+			var oParams = CKEDITOR.config.scaytParams || {};
+			oParams.srcNodeRef = editor.document.getWindow().$.frameElement; 		// Get the iframe.
+			// syntax : AppName.AppVersion@AppRevision
+			oParams.assocApp  = "CKEDITOR." + CKEDITOR.version + "@" + CKEDITOR.revision;
+			var scayt_control = new scayt( oParams );
 
 			// Copy config.
@@ -46,5 +47,5 @@
 		};
 
-		editor.on( 'contentDom', createInstance );		// Get the iframe somehow.
+		editor.on( 'contentDom', createInstance );
 		editor.on( 'contentDomUnload', function()
 			{
@@ -52,6 +53,5 @@
 				var scripts = CKEDITOR.document.getElementsByTag( 'script' );
 				scaytIdRegex =  /^dojoIoScript(\d+)$/i;
-				scaytSrcRegex =  /^http:\/\/demo\.spellchecker\.net\/spellcheck3\/script\/ssrv\.cgi/i;
-
+				scaytSrcRegex =  /^https?:\/\/svc\.spellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i;
 				for ( var i=0; i < scripts.count(); i++ )
 				{
@@ -154,33 +154,30 @@
 
 			this.engineLoaded = -1;	// Loading in progress.
-			djConfig = 
-			{
-				baseUrl: './',
-				blankGif: 'http://demo.spellchecker.net/spellcheck3/lf/scayt/blank.gif',
-				parseOnLoad: true,
-				afterOnLoad: true,
-				useXDomain: true,
-				locale: 'en',
-				xdWaitSeconds: 10,
-				preventCache: false,
-				scaytNodes: document.getElementById('foo'),
-				require: [
-					'dojo.i18n',
-					'scayt._base'
-				],
-				modulePaths:
-				{
-					'scayt': 'http://demo.spellchecker.net/spellcheck3/lf/scayt'
-				},
+			// 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 = 
+			{
+				baseUrl: scaytConfigBaseUrl,
 				addOnLoad: 
 				[
 					function()
 					{
-						CKEDITOR.fireOnce( 'scaytReady' );
+						CKEDITOR.fireOnce( "scaytReady" );
 					}
 				],
 				isDebug: false
 			};
-
 			// Append javascript code.
 			CKEDITOR.document.getHead().append( 
@@ -190,5 +187,5 @@
 							{
 								type : 'text/javascript',
-								src : 'http://demo.spellchecker.net/spellcheck3/lf/dojo/dojo/dojo.xd.js'
+								src : scaytUrl
 							}
 					})
@@ -229,5 +226,5 @@
 				scayt_control.setDisabled( isEnabled );
 			}
-			else if ( !editor.config.scayt_autoStartup && plugin.engineLoaded >= 0 )	// Load first time
+			else if ( !editor.config.scaytParams.autoStartup && plugin.engineLoaded >= 0 )	// Load first time
 			{
 				this.setState( CKEDITOR.TRISTATE_DISABLED );
@@ -357,5 +354,6 @@
 							_r = {},
 							items_suggestion = scayt.getSuggestion( word, sLang );
-
+						if (!items_suggestion || !items_suggestion.length || items_suggestion.length == 0 )
+							return null;
 						// Remove unused commands and menuitems
 						for ( i in moreSuggestions )
@@ -371,16 +369,5 @@
 						moreSuggestions = {};		// Reset items.
 						mainSuggestions = {};
-
-						// Register the More suggestions group;
-						editor.addMenuItem( 'scayt_moresuggest',
-							{
-								label : editor.lang.scayt.moreSuggestions,
-								group : 'scayt_moresuggest',
-								order : 10,
-								getItems : function()
-								{
-									return moreSuggestions;
-								}
-							});
+						moreSuggestionsUnable = false;
 
 						for ( var i = 0, l = items_suggestion.length; i < l; i += 1 )
@@ -397,5 +384,5 @@
 								})( element.$, items_suggestion[i] );
 
-							if ( i < editor.config.scayt_maxSuggestions )
+							if ( i < editor.config.scaytParams.maxSuggestions )
 							{
 								addButtonCommand( editor, 'button_' + commandName, items_suggestion[i], 
@@ -409,6 +396,20 @@
 									commandName, exec, 'scayt_moresuggest', i + 1 );
 								moreSuggestions[ commandName ] = CKEDITOR.TRISTATE_OFF;
-							}
-						}
+								moreSuggestionsUnable = true;
+							}
+						}
+						if ( moreSuggestionsUnable )
+							// Rgister the More suggestions group;
+							editor.addMenuItem( 'scayt_moresuggest',
+								{
+									label : editor.lang.scayt.moreSuggestions,
+									group : 'scayt_moresuggest',
+									order : 10,
+									getItems : function()
+									{
+										return moreSuggestions;
+									}
+								});
+						
 
 						var ignore_command =
@@ -446,4 +447,10 @@
 						mainSuggestions[ 'scayt_add_word' ] = CKEDITOR.TRISTATE_OFF;
 
+						// ** ahow ads entry point
+						// ** hide ads listener register
+//						try{
+							//scayt_control.showBanner( editor )	
+//						}catch(err){}
+						
 						return mainSuggestions;
 					});
@@ -451,5 +458,5 @@
 
 			// Start plugin
-			if ( editor.config.scayt_autoStartup )
+			if ( editor.config.scaytParams.autoStartup )
 			{
 				var showInitialState = function()
@@ -466,4 +473,6 @@
 })();
 
-CKEDITOR.config.scayt_maxSuggestions = 5;
-CKEDITOR.config.scayt_autoStartup = false;
+CKEDITOR.config.scaytParams = CKEDITOR.config.scaytParams || {};
+CKEDITOR.config.scaytParams.maxSuggestions = CKEDITOR.config.scaytParams.maxSuggestions || 5;
+CKEDITOR.config.scaytParams.autoStartup = CKEDITOR.config.scaytParams.autoStartup || false;
+
