﻿CKEDITOR.dialog.add("scaytDialog", function (d) {
	var c = d.scayt,
		k = '\x3cp\x3e\x3cimg alt\x3d"logo" title\x3d"logo" src\x3d"' + c.getLogo() + '" /\x3e\x3c/p\x3e\x3cp\x3e' + c.getLocal("version") + c.getVersion() + '\x3c/p\x3e\x3cp\x3e\x3ca href\x3d"' + c.getOption("CKUserManual") + '" target\x3d"_blank" style\x3d"text-decoration: underline; color: blue; cursor: pointer;"\x3e' + c.getLocal("btn_userManual") + "\x3c/a\x3e\x3c/p\x3e\x3cp\x3e" + c.getLocal("text_copyrights") + "\x3c/p\x3e",
		n = CKEDITOR.document,
		l = {
			isChanged: function () {
				return null ===
					this.newLang || this.currentLang === this.newLang ? !1 : !0
			},
			currentLang: c.getLang(),
			newLang: null,
			reset: function () {
				this.currentLang = c.getLang();
				this.newLang = null
			},
			id: "lang"
		},
		k = [{
			id: "options",
			label: c.getLocal("tab_options"),
			onShow: function () { },
			elements: [{
				type: "vbox",
				id: "scaytOptions",
				children: function () {
					var b = c.getApplicationConfig(),
						a = [],
						g = {
							"ignore-all-caps-words": "label_allCaps",
							"ignore-domain-names": "label_ignoreDomainNames",
							"ignore-words-with-mixed-cases": "label_mixedCase",
							"ignore-words-with-numbers": "label_mixedWithDigits"
						},
						h;
					for (h in b) b = {
						type: "checkbox"
					}, b.id = h, b.label = c.getLocal(g[h]), a.push(b);
					return a
				}(),
				onShow: function () {
					this.getChild();
					for (var b = d.scayt, a = 0; a < this.getChild().length; a++) this.getChild()[a].setValue(b.getApplicationConfig()[this.getChild()[a].id])
				}
			}]
		}, {
			id: "langs",
			label: c.getLocal("tab_languages"),
			elements: [{
				id: "leftLangColumn",
				type: "vbox",
				align: "left",
				widths: ["100"],
				children: [{
					type: "html",
					id: "langBox",
					style: "overflow: hidden; white-space: normal;margin-bottom:15px;",
					html: '\x3cdiv\x3e\x3cdiv style\x3d"float:left;width:45%;margin-left:5px;" id\x3d"left-col-' +
						d.name + '" class\x3d"scayt-lang-list"\x3e\x3c/div\x3e\x3cdiv style\x3d"float:left;width:45%;margin-left:15px;" id\x3d"right-col-' + d.name + '" class\x3d"scayt-lang-list"\x3e\x3c/div\x3e\x3c/div\x3e',
					onShow: function () {
						var b = d.scayt.getLang();
						n.getById("scaytLang_" + d.name + "_" + b).$.checked = !0
					}
				}]
			}]
		}, {
			id: "dictionaries",
			label: c.getLocal("tab_dictionaries"),
			elements: [{
				type: "vbox",
				id: "rightCol_col__left",
				children: [{
					type: "html",
					id: "dictionaryNote",
					html: ""
				}, {
					type: "text",
					id: "dictionaryName",
					label: c.getLocal("label_fieldNameDic") ||
						"Dictionary name",
					onShow: function (b) {
						var a = b.sender,
							g = d.scayt;
						b = SCAYT.prototype.UILib;
						var h = a.getContentElement("dictionaries", "dictionaryName").getInputElement().$;
						g.isLicensed() || (h.disabled = !0, b.css(h, {
							cursor: "not-allowed"
						}));
						setTimeout(function () {
							a.getContentElement("dictionaries", "dictionaryNote").getElement().setText("");
							null != g.getUserDictionaryName() && "" != g.getUserDictionaryName() && a.getContentElement("dictionaries", "dictionaryName").setValue(g.getUserDictionaryName())
						}, 0)
					}
				}, {
					type: "hbox",
					id: "udButtonsHolder",
					align: "left",
					widths: ["auto"],
					style: "width:auto;",
					children: [{
						type: "button",
						id: "createDic",
						label: c.getLocal("btn_createDic"),
						title: c.getLocal("btn_createDic"),
						onLoad: function () {
							this.getDialog();
							var b = d.scayt,
								a = SCAYT.prototype.UILib,
								g = this.getElement().$,
								h = this.getElement().getChild(0).$;
							b.isLicensed() || (a.css(g, {
								cursor: "not-allowed"
							}), a.css(h, {
								cursor: "not-allowed"
							}))
						},
						onClick: function () {
							var b = this.getDialog(),
								a = f,
								g = d.scayt,
								h = b.getContentElement("dictionaries", "dictionaryName").getValue();
							g.isLicensed() && g.createUserDictionary(h, function (e) {
								e.error || a.toggleDictionaryState.call(b, "dictionaryState");
								e.dialog = b;
								e.command = "create";
								e.name = h;
								d.fire("scaytUserDictionaryAction", e)
							}, function (a) {
								a.dialog = b;
								a.command = "create";
								a.name = h;
								d.fire("scaytUserDictionaryActionError", a)
							})
						}
					}, {
						type: "button",
						id: "restoreDic",
						label: c.getLocal("btn_connectDic"),
						title: c.getLocal("btn_connectDic"),
						onLoad: function () {
							this.getDialog();
							var b = d.scayt,
								a = SCAYT.prototype.UILib,
								g = this.getElement().$,
								h = this.getElement().getChild(0).$;
							b.isLicensed() || (a.css(g, {
								cursor: "not-allowed"
							}), a.css(h, {
								cursor: "not-allowed"
							}))
						},
						onClick: function () {
							var b = this.getDialog(),
								a = d.scayt,
								g = f,
								h = b.getContentElement("dictionaries", "dictionaryName").getValue();
							a.isLicensed() && a.restoreUserDictionary(h, function (a) {
								a.dialog = b;
								a.error || g.toggleDictionaryState.call(b, "dictionaryState");
								a.command = "restore";
								a.name = h;
								d.fire("scaytUserDictionaryAction", a)
							}, function (a) {
								a.dialog = b;
								a.command = "restore";
								a.name = h;
								d.fire("scaytUserDictionaryActionError", a)
							})
						}
					}, {
						type: "button",
						id: "disconnectDic",
						label: c.getLocal("btn_disconnectDic"),
						title: c.getLocal("btn_disconnectDic"),
						onClick: function () {
							var b = this.getDialog(),
								a = d.scayt,
								g = f,
								h = b.getContentElement("dictionaries", "dictionaryName"),
								e = h.getValue();
							a.isLicensed() && (a.disconnectFromUserDictionary({}), h.setValue(""), g.toggleDictionaryState.call(b, "initialState"), d.fire("scaytUserDictionaryAction", {
								dialog: b,
								command: "disconnect",
								name: e
							}))
						}
					}, {
						type: "button",
						id: "removeDic",
						label: c.getLocal("btn_deleteDic"),
						title: c.getLocal("btn_deleteDic"),
						onClick: function () {
							var b = this.getDialog(),
								a = d.scayt,
								g = f,
								h = b.getContentElement("dictionaries", "dictionaryName"),
								e = h.getValue();
							a.isLicensed() && a.removeUserDictionary(e, function (a) {
								h.setValue("");
								a.error || g.toggleDictionaryState.call(b, "initialState");
								a.dialog = b;
								a.command = "remove";
								a.name = e;
								d.fire("scaytUserDictionaryAction", a)
							}, function (a) {
								a.dialog = b;
								a.command = "remove";
								a.name = e;
								d.fire("scaytUserDictionaryActionError", a)
							})
						}
					}, {
						type: "button",
						id: "renameDic",
						label: c.getLocal("btn_renameDic"),
						title: c.getLocal("btn_renameDic"),
						onClick: function () {
							var b = this.getDialog(),
								a = d.scayt,
								g = b.getContentElement("dictionaries", "dictionaryName").getValue();
							a.isLicensed() && a.renameUserDictionary(g, function (a) {
								a.dialog = b;
								a.command = "rename";
								a.name = g;
								d.fire("scaytUserDictionaryAction", a)
							}, function (a) {
								a.dialog = b;
								a.command = "rename";
								a.name = g;
								d.fire("scaytUserDictionaryActionError", a)
							})
						}
					}, {
						type: "button",
						id: "editDic",
						label: c.getLocal("btn_goToDic"),
						title: c.getLocal("btn_goToDic"),
						onLoad: function () {
							this.getDialog()
						},
						onClick: function () {
							var b = this.getDialog(),
								a = b.getContentElement("dictionaries", "addWordField");
							f.clearWordList.call(b);
							a.setValue("");
							f.getUserDictionary.call(b);
							f.toggleDictionaryState.call(b, "wordsState")
						}
					}]
				}, {
					type: "hbox",
					id: "dicInfo",
					align: "left",
					children: [{
						type: "html",
						id: "dicInfoHtml",
						html: '\x3cdiv id\x3d"dic_info_editor1" style\x3d"margin:5px auto; width:95%;white-space:normal;"\x3e' + (d.scayt.isLicensed && d.scayt.isLicensed() ? '\x3ca href\x3d"' + c.getOption("CKUserManual") + '" target\x3d"_blank" style\x3d"text-decoration: underline; color: blue; cursor: pointer;"\x3e' +
							c.getLocal("text_descriptionDicForPaid") + "\x3c/a\x3e" : c.getLocal("text_descriptionDicForFree")) + "\x3c/div\x3e"
					}]
				}, {
					id: "addWordAction",
					type: "hbox",
					style: "width: 100%; margin-bottom: 0;",
					widths: ["40%", "60%"],
					children: [{
						id: "addWord",
						type: "vbox",
						style: "min-width: 150px;",
						children: [{
							type: "text",
							id: "addWordField",
							label: "Add word",
							maxLength: "64"
						}]
					}, {
						id: "addWordButtons",
						type: "vbox",
						style: "margin-top: 20px;",
						children: [{
							type: "hbox",
							id: "addWordButton",
							align: "left",
							children: [{
								type: "button",
								id: "addWord",
								label: c.getLocal("btn_addWord"),
								title: c.getLocal("btn_addWord"),
								onClick: function () {
									var b = this.getDialog(),
										a = d.scayt,
										g = b.getContentElement("dictionaries", "itemList"),
										h = b.getContentElement("dictionaries", "addWordField"),
										e = h.getValue(),
										c = a.getOption("wordBoundaryRegex"),
										f = this;
									e && (-1 !== e.search(c) ? d.fire("scaytUserDictionaryAction", {
										dialog: b,
										command: "wordWithBannedSymbols",
										name: e,
										error: !0
									}) : g.inChildren(e) ? (h.setValue(""), d.fire("scaytUserDictionaryAction", {
										dialog: b,
										command: "wordAlreadyAdded",
										name: e
									})) : (this.disable(), a.addWordToUserDictionary(e,
										function (a) {
											a.error || (h.setValue(""), g.addChild(e, !0));
											a.dialog = b;
											a.command = "addWord";
											a.name = e;
											f.enable();
											d.fire("scaytUserDictionaryAction", a)
										},
										function (a) {
											a.dialog = b;
											a.command = "addWord";
											a.name = e;
											f.enable();
											d.fire("scaytUserDictionaryActionError", a)
										})))
								}
							}, {
								type: "button",
								id: "backToDic",
								label: c.getLocal("btn_dictionaryPreferences"),
								title: c.getLocal("btn_dictionaryPreferences"),
								align: "right",
								onClick: function () {
									var b = this.getDialog(),
										a = d.scayt;
									null != a.getUserDictionaryName() && "" != a.getUserDictionaryName() ?
										f.toggleDictionaryState.call(b, "dictionaryState") : f.toggleDictionaryState.call(b, "initialState")
								}
							}]
						}]
					}]
				}, {
					id: "wordsHolder",
					type: "hbox",
					style: "width: 100%; height: 170px; margin-bottom: 0;",
					children: [{
						type: "scaytItemList",
						id: "itemList",
						align: "left",
						style: "width: 100%; height: 170px; overflow: auto",
						onClick: function (b) {
							var a = b.data.$;
							b = d.scayt;
							var g = SCAYT.prototype.UILib,
								a = a.target || a.srcElement,
								h = g.parent(a)[0],
								e = g.attr(h, "data-cke-scayt-ud-word"),
								c = this.getDialog(),
								f = c.getContentElement("dictionaries",
									"itemList"),
								q = this;
							g.hasClass(a, "cke_scaytItemList_remove") && !this.isBlocked() && (this.block(), b.deleteWordFromUserDictionary(e, function (a) {
								a.error || f.removeChild(h, e);
								q.unblock();
								a.dialog = c;
								a.command = "deleteWord";
								a.name = e;
								d.fire("scaytUserDictionaryAction", a)
							}, function (a) {
								q.unblock();
								a.dialog = c;
								a.command = "deleteWord";
								a.name = e;
								d.fire("scaytUserDictionaryActionError", a)
							}))
						}
					}]
				}]
			}]
		}, {
			id: "about",
			label: c.getLocal("tab_about"),
			elements: [{
				type: "html",
				id: "about",
				style: "margin: 5px 5px;",
				html: '\x3cdiv\x3e\x3cdiv id\x3d"scayt_about_"\x3e' +
					k + "\x3c/div\x3e\x3c/div\x3e"
			}]
		}];
	d.on("scaytUserDictionaryAction", function (b) {
		var a = SCAYT.prototype.UILib,
			g = b.data.dialog,
			d = g.getContentElement("dictionaries", "dictionaryNote").getElement(),
			e = b.editor.scayt,
			c;
		void 0 === b.data.error ? (c = e.getLocal("message_success_" + b.data.command + "Dic"), c = c.replace("%s", b.data.name), d.setText(c), a.css(d.$, {
			color: "blue"
		})) : ("" === b.data.name ? d.setText(e.getLocal("message_info_emptyDic")) : (c = e.getLocal("message_error_" + b.data.command + "Dic"), c = c.replace("%s", b.data.name),
			d.setText(c)), a.css(d.$, {
				color: "red"
			}), null != e.getUserDictionaryName() && "" != e.getUserDictionaryName() ? g.getContentElement("dictionaries", "dictionaryName").setValue(e.getUserDictionaryName()) : g.getContentElement("dictionaries", "dictionaryName").setValue(""))
	});
	d.on("scaytUserDictionaryActionError", function (b) {
		var a = SCAYT.prototype.UILib,
			g = b.data.dialog,
			d = g.getContentElement("dictionaries", "dictionaryNote").getElement(),
			c = b.editor.scayt,
			f;
		"" === b.data.name ? d.setText(c.getLocal("message_info_emptyDic")) :
			(f = c.getLocal("message_error_" + b.data.command + "Dic"), f = f.replace("%s", b.data.name), d.setText(f));
		a.css(d.$, {
			color: "red"
		});
		null != c.getUserDictionaryName() && "" != c.getUserDictionaryName() ? g.getContentElement("dictionaries", "dictionaryName").setValue(c.getUserDictionaryName()) : g.getContentElement("dictionaries", "dictionaryName").setValue("")
	});
	var f = {
		title: "SCAYT",
		resizable: CKEDITOR.DIALOG_RESIZE_BOTH,
		minWidth: "moono-lisa" == (CKEDITOR.skinName || d.config.skin) ? 450 : 340,
		minHeight: 300,
		onLoad: function () {
			if (0 !==
				d.config.scayt_uiTabs[1]) {
				var b = f,
					a = b.getLangBoxes.call(this);
				this.getContentElement("dictionaries", "addWordField");
				a.getParent().setStyle("white-space", "normal");
				b.renderLangList(a);
				this.definition.minWidth = this.getSize().width;
				this.resize(this.definition.minWidth, this.definition.minHeight)
			}
		},
		onCancel: function () {
			l.reset()
		},
		onHide: function () {
			d.unlockSelection()
		},
		onShow: function () {
			d.fire("scaytDialogShown", this);
			if (0 !== d.config.scayt_uiTabs[2]) {
				var b = this.getContentElement("dictionaries", "addWordField");
				f.clearWordList.call(this);
				b.setValue("");
				f.getUserDictionary.call(this);
				f.toggleDictionaryState.call(this, "wordsState")
			}
		},
		onOk: function () {
			var b = f,
				a = d.scayt;
			this.getContentElement("options", "scaytOptions");
			b = b.getChangedOption.call(this);
			a.commitOption({
				changedOptions: b
			})
		},
		toggleDictionaryButtons: function (b) {
			var a = this.getContentElement("dictionaries", "existDic").getElement().getParent(),
				d = this.getContentElement("dictionaries", "notExistDic").getElement().getParent();
			b ? (a.show(), d.hide()) : (a.hide(),
				d.show())
		},
		getChangedOption: function () {
			var b = {};
			if (1 === d.config.scayt_uiTabs[0])
				for (var a = this.getContentElement("options", "scaytOptions").getChild(), c = 0; c < a.length; c++) a[c].isChanged() && (b[a[c].id] = a[c].getValue());
			l.isChanged() && (b[l.id] = d.config.scayt_sLang = l.currentLang = l.newLang);
			return b
		},
		buildRadioInputs: function (b, a, c) {
			c = new CKEDITOR.dom.element("div");
			var h = "scaytLang_" + d.name + "_" + a,
				e = CKEDITOR.dom.element.createFromHtml('\x3cinput id\x3d"' + h + '" type\x3d"radio"  value\x3d"' + a + '" name\x3d"scayt_lang" /\x3e'),
				f = new CKEDITOR.dom.element("label"),
				k = d.scayt;
			c.setStyles({
				"white-space": "normal",
				position: "relative",
				"padding-bottom": "2px"
			});
			e.on("click", function (a) {
				l.newLang = a.sender.getValue()
			});
			f.appendText(b);
			f.setAttribute("for", h);
			c.append(e);
			c.append(f);
			a === k.getLang() && (e.setAttribute("checked", !0), e.setAttribute("defaultChecked", "defaultChecked"));
			return c
		},
		renderLangList: function (b) {
			var a = d.name.replace(/(:|\.|\[|\]|,|=|@)/g, "\\$1"),
				g = b.find("#left-col-" + a).getItem(0);
			b = b.find("#right-col-" + a).getItem(0);
			var h = c.getScaytLangList(),
				a = c.getGraytLangList(),
				e = {},
				f = [],
				k = 0,
				l = !1,
				m;
			for (m in h.ltr) e[m] = h.ltr[m];
			for (m in h.rtl) e[m] = h.rtl[m];
			for (m in e) f.push([m, e[m]]);
			f.sort(function (a, b) {
				var c = 0;
				a[1] > b[1] ? c = 1 : a[1] < b[1] && (c = -1);
				return c
			});
			e = {};
			for (l = 0; l < f.length; l++) e[f[l][0]] = f[l][1];
			f = Math.round(f.length / 2);
			for (m in e) k++, l = m in a.ltr || m in a.rtl, this.buildRadioInputs(e[m], m, l).appendTo(k <= f ? g : b)
		},
		getLangBoxes: function () {
			return this.getContentElement("langs", "langBox").getElement()
		},
		toggleDictionaryState: function (b) {
			var a =
				this.getContentElement("dictionaries", "dictionaryName").getElement().getParent(),
				c = this.getContentElement("dictionaries", "udButtonsHolder").getElement().getParent(),
				d = this.getContentElement("dictionaries", "createDic").getElement().getParent(),
				e = this.getContentElement("dictionaries", "restoreDic").getElement().getParent(),
				f = this.getContentElement("dictionaries", "disconnectDic").getElement().getParent(),
				l = this.getContentElement("dictionaries", "removeDic").getElement().getParent(),
				k = this.getContentElement("dictionaries",
					"renameDic").getElement().getParent(),
				m = this.getContentElement("dictionaries", "dicInfo").getElement().getParent(),
				n = this.getContentElement("dictionaries", "addWordAction").getElement().getParent(),
				p = this.getContentElement("dictionaries", "wordsHolder").getElement().getParent();
			switch (b) {
				case "initialState":
					a.show();
					c.show();
					d.show();
					e.show();
					f.hide();
					l.hide();
					k.hide();
					m.show();
					n.hide();
					p.hide();
					break;
				case "wordsState":
					a.hide();
					c.hide();
					m.hide();
					n.show();
					p.show();
					break;
				case "dictionaryState":
					a.show(),
						c.show(), d.hide(), e.hide(), f.show(), l.show(), k.show(), m.show(), n.hide(), p.hide()
			}
		},
		clearWordList: function () {
			this.getContentElement("dictionaries", "itemList").removeAllChild()
		},
		getUserDictionary: function () {
			var b = this,
				a = d.scayt;
			a.getUserDictionary(a.getUserDictionaryName(), function (a) {
				a.error || f.renderItemList.call(b, a.wordlist)
			})
		},
		renderItemList: function (b) {
			for (var a = this.getContentElement("dictionaries", "itemList"), c = 0; c < b.length; c++) a.addChild(b[c])
		},
		contents: function (b, a) {
			var c = [],
				d = a.config.scayt_uiTabs;
			if (d) {
				for (var e in d) 1 === d[e] && c.push(b[e]);
				c.push(b[b.length - 1])
			} else return b;
			return c
		}(k, d)
	};
	return f
});
CKEDITOR.tools.extend(CKEDITOR.ui.dialog, {
	scaytItemList: function (d, c, k) {
		if (arguments.length) {
			var n = this;
			d.on("load", function () {
				n.getElement().on("click", function (c) { })
			});
			CKEDITOR.ui.dialog.uiElement.call(this, d, c, k, "", null, null, function () {
				var d = ['\x3cp class\x3d"cke_dialog_ui_', c.type, '"'];
				c.style && d.push('style\x3d"' + c.style + '" ');
				d.push("\x3e");
				d.push("\x3c/p\x3e");
				return d.join("")
			})
		}
	}
});
CKEDITOR.ui.dialog.scaytItemList.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, {
	children: [],
	blocked: !1,
	addChild: function (d, c) {
		var k = new CKEDITOR.dom.element("p"),
			n = new CKEDITOR.dom.element("a"),
			l = this.getElement().getChildren().getItem(0);
		this.children.push(d);
		k.addClass("cke_scaytItemList-child");
		k.setAttribute("data-cke-scayt-ud-word", d);
		k.appendText(d);
		n.addClass("cke_scaytItemList_remove");
		n.addClass("cke_dialog_close_button");
		n.setAttribute("href", "javascript:void(0)");
		k.append(n);
		l.append(k, c ? !0 : !1)
	},
	inChildren: function (d) {
		return SCAYT.prototype.Utils.inArray(this.children, d)
	},
	removeChild: function (d, c) {
		this.children.splice(SCAYT.prototype.Utils.indexOf(this.children, c), 1);
		this.getElement().getChildren().getItem(0).$.removeChild(d)
	},
	removeAllChild: function () {
		this.children = [];
		this.getElement().getChildren().getItem(0).setHtml("")
	},
	block: function () {
		this.blocked = !0
	},
	unblock: function () {
		this.blocked = !1
	},
	isBlocked: function () {
		return this.blocked
	}
});
(function () {
	commonBuilder = {
		build: function (d, c, k) {
			return new CKEDITOR.ui.dialog[c.type](d, c, k)
		}
	};
	CKEDITOR.dialog.addUIElement("scaytItemList", commonBuilder)
})();
