<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">/**
 * http://new-dev.ru/
 * author GoldSoft &lt;newdevexpert@gmail.com&gt;
 * Copyright (c) New-Dev.ru
 */

AIREWRITER_KERNEL = {

	__: function(text) {
		return text;
	},

	callFunction: function(func) {
		var dim = func.split(".");
		if (dim.length &gt; 1) {
			return window[dim[0]][dim[1]]();
		} else {
			return window[func]();
		}
	},

	redirectTo: function(url) {
		window.location.href = url;
	},

	confirmDialog: function(dialogText, okFunc, cancelFunc, dialogTitle, options) {

		var kernel = this,
			btns = {};
		
		btns[kernel.__("Нет")] = function() { 
			if (typeof (cancelFunc) == "function") {
				setTimeout(cancelFunc, 50);
			}
			$(this).dialog("destroy");
		};
		
		btns[kernel.__("Да")] = function() { 
			if (typeof (okFunc) == "function") {
				setTimeout(okFunc, 50);
			}
			$(this).dialog("destroy");
		};

		
		var defaults = {
			modal: true,
			resizable: false,
			width: "auto",
			minHeight: 75,
			title: dialogTitle || kernel.__("Необходимо подтверждение"),
			buttons: btns
		};	

		$.extend(defaults, options);
		
		$('&lt;div style="padding: 10px; max-width: 100%; word-wrap: break-word;"&gt;' + (dialogText || kernel.__("Вы уверены, что хотите это сделать?")) + "&lt;/div&gt;").dialog(defaults);
	},

	showAjaxError: function(data) {
		var kernel = this;
		
		kernel.confirmDialog(
			data.responseText,
			function() {
				$(this).dialog("close");
			},
			null,
			"Ajax error",
			{buttons: null}
		);
	},

	showResponse: function(data, sender) {
		var kernel = this;
		
		if (!data.redirect)
			HideLoading();

		
		if (data.msg) {
			if (data.status == "ok") {
				Growl.info({ title: data.msg.title, text: data.msg.text });
			} else if (data.status == "error") {
				Growl.error({ title: data.msg.title, text: data.msg.text });
			}
		}
		
		if (data.container &amp;&amp; data.func) {
			var $target = (data.container == "sender") ? sender : $(data.container);
			$target.html(data.response).fadeIn("slow",function() {
				kernel.callFunction(data.func);
			});
		} else if (data.container) {
			var $target = (data.container == "sender") ? sender : $(data.container);
			$target.html(data.response);
		} else if (data.append_container &amp;&amp; data.func) {
			$(data.append_container).append(data.response);
			kernel.callFunction(data.func);
		} else if (data.append_container) {
			$(data.append_container).append(data.response);
		} else if (data.func) {
			kernel.callFunction(data.func);
		}
		
		if (data.redirect) {
			setTimeout(function() {
				if (data.redirect == "self")
					window.location.reload();
				else
					window.location.href = data.redirect;
			}, 1000);
		}
	},

	doAjax: function(sender) {
		var kernel = this,
			url = sender.data("url"),
				query_str = sender.data("vars").replace(/\|/g, "&amp;");
		
		if (query_str.indexOf("&amp;user_hash=") == -1)
			query_str += "&amp;user_hash=" + AIREWRITER_OPTIONS.USER_HASH;
		
		if (typeof url === "undefined") {
			url = AIREWRITER_OPTIONS.IN_ADMINPANEL ? AIREWRITER_OPTIONS.ADMIN_URL : AIREWRITER_OPTIONS.SITE_AJAX_URL;
		}
		
		if (query_str.indexOf("&amp;without_loader=1") === -1)
			ShowLoading("");
		
		$.ajax({
			type: "POST",
			url: url,
			data: query_str,
			dataType: "json",
			success: function(data) {
				if (!data.redirect) {
					sender.attr("disabled", false);
				}
				
				kernel.showResponse(data, sender);
			},
			error: function(data) {
				HideLoading();
				kernel.showAjaxError(data);
			}
		});
		
		return false;
	},
	
	bindAjaxButtons: function() {
		var kernel = this;
		
		$(document).on("click", 'a[data-do="ajax-airewriter"], input[data-do="ajax-airewriter"]', function(event) {
			var sender = $(this);
				
			if (typeof sender.data("confirm") !== "undefined") {

				kernel.confirmDialog(
					sender.data("msg"),
					function() {
						kernel.doAjax(sender);
					}, 
					null, 
					sender.data("title")
				);

			} else {
				kernel.doAjax(sender);
			}
			
			return false;
		});
	},
	
	bindAjaxForms: function() {
		var kernel = this;
		
		$("form.airewriter_ajax_form").submit(function() {
			ShowLoading("");
			$.post(AIREWRITER_OPTIONS.ADMIN_URL, $(this).serialize(), function( data ) {
				kernel.showResponse(data);
			}, "json")
			.fail(function(response) {
				HideLoading();
				kernel.showAjaxError(response);
			});
			
			return false;
		});
	},
	
	parseVarsStr: function(vars) {
		var arr = vars.split("|"),
			varsData = [];
		
		for (var x = 0; x &lt; arr.length; x++) {
			var tmp = arr[x].split("=");
			varsData[unescape(tmp[0])] = unescape(tmp[1]).replace(/[+]/g, " ");
		}
		
		return varsData;
	},
	
	setDataVarsValue: function(sender, key, value) {
		var vars = sender.data("vars"),
			str = "|" + key + "=" + value;
		
		if (vars.indexOf(key) === -1) {
			vars += str;
		} else {
			var re = new RegExp("\\|" + key + "=[^\\|]*"); 
			vars = vars.replace(re, str);
		}
		
		sender.data("vars", vars);
	},
	
	execAjaxAiReWriter: function($sender) {
		var $el = $sender.prev(),
			kernel = this;
		
		if (!kernel.isXfieldElement($el)) {
			var $container = $el.closest("td.xfields");
			
			if ($container.length) {
				$el = $container.find("[name^=\"xfield\[\"]");
			} else {
				$container = $el.closest("div");
				
				if ($container.length) {
					$el = $container.find("[name^=\"xfield\[\"]");
				} else {
					Growl.error({ title:kernel.__("Ошибка"), text:kernel.__("Контейнер дополнительного поля не найден") });
					return false;
				}
			}
		}
		
		if (kernel.isXfieldElement($el)) {
			var site_url = $el.val(),
				xfieldname = $el.prop("name");
			
			this.setDataVarsValue($sender, "site_url", site_url);
			
			this.doAjax($sender);
		} else {
			Growl.error({ title:kernel.__("Ошибка"), text:kernel.__("Элемент дополнительного поля не найден") });
			return false;
		}
	},
	
	isXfieldElement: function($el) {
		return (
			$el.length
			&amp;&amp;
			typeof $el.attr("name") !== "undefined"
			&amp;&amp;
			$el.attr("name") !== false
			&amp;&amp;
			$el.attr("name").indexOf("xfield[") === 0
		);
	},
	
};
</pre></body></html>