%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/bitrix/components/bitrix/main.post.list/templates/.default/
Upload File :
Create Path :
Current File : /home/bitrix/www/bitrix/components/bitrix/main.post.list/templates/.default/script.js

;(function(){
	window["UC"] = (window["UC"] || {});
	if (window["FCList"])
		return;

	var safeEditing = true,
		safeEditingCurrentObj = null,
		quoteData = null,
		repo = {commentExemplarId : {}};

	window.FCList = function (params, add) {
		this.CID = params["CID"];
		this.ENTITY_XML_ID = params["ENTITY_XML_ID"];
		this.container = params["container"];
		this.nav = params["nav"];
		this.mid = params["mid"];
		this.order = params["order"];
		this.status = "ready";
		this.msg = (!!this.nav ? this.nav.innerHTML : '');
		this.params = (add || {});
		this.pullNewRecords = {};
		this.rights = params["rights"];
		this.DATE_TIME_FORMAT = (this.params["DATE_TIME_FORMAT"] || null);
		this.comments = {};
		this.bindEvents = [
			[
				this.nav, "click", BX.proxy(function (e) {
					BX.eventCancelBubble(e);
					e.preventDefault();
					this.get();
					return false;
				}, this)
			]
		];

		this.exemplarId = BX.util.getRandomString(20);
		this.windowEvents = {
			OnUCUserIsWriting : BX.delegate(function(ENTITY_XML_ID, id, commentExemplarId) {
				if (this.ENTITY_XML_ID == ENTITY_XML_ID) {
					BX.ajax({
						url: this.url.activity,
						method: 'POST',
						data: {
							AJAX_POST : "Y",
							ENTITY_XML_ID : this.ENTITY_XML_ID,
							COMMENT_EXEMPLAR_ID : commentExemplarId,
							MODE : "PUSH&PULL",
							sessid : BX.bitrix_sessid(),
							sign : params["sign"],
							"PATH_TO_USER" : this.params["PATH_TO_USER"],
							"AVATAR_SIZE" : this.params["AVATAR_SIZE"],
							"NAME_TEMPLATE" : this.params["NAME_TEMPLATE"],
							"SHOW_LOGIN" : this.params["SHOW_LOGIN"]
						}
					});
				}
			}, this),
			OnUCAfterRecordAdd : BX.delegate(function(ENTITY_XML_ID, data) {
				if (this.ENTITY_XML_ID == ENTITY_XML_ID) {
					this.add(data["messageId"], data, true, "simple");
				}
			}, this),
			OnUCFormSubmit : BX.delegate(function(ENTITY_XML_ID, ENTITY_ID, obj, data) {
				if (this.ENTITY_XML_ID == ENTITY_XML_ID) {
					data["EXEMPLAR_ID"] = this.exemplarId;
					this.pullNewRecords[ENTITY_XML_ID + '-0'] = "busy";
				}
			}, this),
			OnUCFormResponse : BX.delegate(function(ENTITY_XML_ID, ENTITY_ID/*, obj, data*/) {
				if (this.ENTITY_XML_ID == ENTITY_XML_ID)
				{
					this.pullNewRecords[ENTITY_XML_ID + '-0'] = "ready";
					this.pullNewRecords[ENTITY_XML_ID + '-' + ENTITY_ID] = "done";
				}
			}, this),
			OnUCFormAfterShow : BX.delegate(function(obj/*, text, data*/) {
				if (
					typeof obj.id != 'undefined'
					&& this.ENTITY_XML_ID == obj.id[0]
				)
				{
					if (BX('record-' + this.ENTITY_XML_ID + '-new'))
					{
						var commentsBlockNode = BX.findParent(BX('record-' + this.ENTITY_XML_ID + '-new'), { className: 'feed-comments-block'});
						if (commentsBlockNode)
						{
							BX.addClass(commentsBlockNode, 'feed-comments-block-editor-shown');

							var outerNode = BX.findChild(commentsBlockNode, { className: 'feed-com-add-box-outer'}, true);
							if (outerNode)
							{
								outerNode.style.display = (obj.id[1] == 0 ? 'block' : 'none');
							}
						}
					}
				}
			}, this),
			OnUCFormAfterHide : BX.delegate(function(obj) {
				if (this.ENTITY_XML_ID == obj.id[0])
				{
					if (BX('record-' + this.ENTITY_XML_ID + '-new'))
					{
						var commentsBlockNode = BX.findParent(BX('record-' + this.ENTITY_XML_ID + '-new'), { className: 'feed-comments-block'});
						if (commentsBlockNode)
						{
							BX.removeClass(commentsBlockNode, 'feed-comments-block-editor-shown');

							var outerNode = BX.findChild(commentsBlockNode, { className: 'feed-com-add-box-outer'}, true);
							if (outerNode)
							{
								outerNode.style.display = 'block';
							}
						}
					}
				}
			}, this),
			OnUCUserQuote : BX.delegate(function(ENTITY_XML_ID) {
				if (this.ENTITY_XML_ID == ENTITY_XML_ID && this.quote && this.quote.popup)
				{
					this.quote.popup.hide();
				}
			}, this),
			'onPullEvent-unicomments' : BX.delegate(function(command, params) {
				if (
					this.ENTITY_XML_ID == params["ENTITY_XML_ID"]
					&& (
						(params["USER_ID"] + '') != (BX.message("USER_ID") + '')
						||
						( params["EXEMPLAR_ID"] && params["EXEMPLAR_ID"] != this.exemplarId )
						|| (
							typeof params["AUX"] != 'undefined'
							&& BX.util.in_array(params["AUX"], ['createtask', 'fileversion'])
						)
					)
				)
				{
					if (command === 'comment' && params["ID"])
					{
						if (params["COMMENT_EXEMPLAR_ID"])
							repo.commentExemplarId[params["ENTITY_XML_ID"] + '_' + params["COMMENT_EXEMPLAR_ID"]] = true;
						this.pullNewRecord(params);
					}
					else if (command === 'answer' &&
						((params["USER_ID"] + '') !== (BX.message("USER_ID") + '')) &&
						(!params["COMMENT_EXEMPLAR_ID"] || repo.commentExemplarId[params["ENTITY_XML_ID"] + '_' + params["COMMENT_EXEMPLAR_ID"]] !== true)
					)
					{
						this.pullNewAuthor(params["USER_ID"], params["NAME"], params["AVATAR"]);
					}
				}
			}, this)
		};

		if (this.params && this.params["NOTIFY_TAG"] && !!this.params["NOTIFY_TEXT"] && !!window["UC"]["Informer"])
		{
			this.windowEvents['OnUCCommentWasPulled'] = BX.delegate(function(id, data)
			{
				if (this.ENTITY_XML_ID == id[0]) { window["UC"]["Informer"].check(id, data, this.params["NOTIFY_TAG"], this.params["NOTIFY_TEXT"]) }
			}, this);
			window["UC"]["InformerTags"][this.params["NOTIFY_TAG"]] = (window["UC"]["InformerTags"][this.params["NOTIFY_TAG"]] || []);
		}
		var ii;
		for (ii = 0; ii < this.bindEvents.length; ii++)
		{
			BX.bind(this.bindEvents[ii][0], this.bindEvents[ii][1], this.bindEvents[ii][2]);
		}
		for (ii in this.windowEvents)
		{
			if (this.windowEvents.hasOwnProperty(ii))
			{
				BX.addCustomEvent(window, ii, this.windowEvents[ii]);
			}
		}

		var tw = /%23com(\d+)/gi.exec(location.href),
			com = parseInt(location.hash && location.hash.indexOf("#com") >= 0 ?
				location.hash.replace("#com", "") : (tw ? tw[1] : 0));
		if (com > 0)
			this.checkHash(com);

		if (this.params["BIND_VIEWER"] == "Y" && BX["viewElementBind"] && BX('record-' + this.ENTITY_XML_ID + '-new'))
		{
			BX.viewElementBind(
				BX('record-' + this.ENTITY_XML_ID + '-new').parentNode, {},
				function(node){
					return BX.type.isElementNode(node) && (node.getAttribute('data-bx-viewer') || node.getAttribute('data-bx-image'));
				}
			);
		}

		this.init(params);

		if (this.mid > 0 && BX('record-' + [this.ENTITY_XML_ID, this.mid].join('-') + '-cover'))
		{
			var n = BX('record-' + [this.ENTITY_XML_ID, this.mid].join('-') + '-cover').parentNode.firstChild,
				r = new RegExp("record-(" + this.ENTITY_XML_ID + ")-([0-9]+)-cover", "gi");
			while (BX(n))
			{
				if (n["hasAttribute"] && n.hasAttribute("id") && r.test(n.getAttribute("id")))
				{
					(n.getAttribute("id") + "").replace(r, function(str, ENTITY_XML_ID, mid) {
						traceForReading([ENTITY_XML_ID, mid]);
					});
				}
				n = n.nextSibling;
			}
		}
		if (repo[this.ENTITY_XML_ID])
			repo[this.ENTITY_XML_ID].destroy();
		repo[this.ENTITY_XML_ID] = this;

		BX.ready(function() {
			setTimeout(BX.delegate(function() {
				BX.onCustomEvent(window, "OnUCHasBeenInitialized", [this.ENTITY_XML_ID, this]);
			}, this), 100)
		});

		return this;
	};
	window.FCList.prototype = {
		url : {
			activity : '/bitrix/components/bitrix/main.post.list/activity.php'
		},
		destroy : function()
		{
			var ii, node;
			while ((node = this.bindEvents.pop()) && node)
			{
				BX.unbindAll(node[0]);
				node[0] = null;
				node[2] = null;
			}
			for (ii in this.windowEvents)
			{
				if (this.windowEvents.hasOwnProperty(ii))
				{
					BX.removeCustomEvent(window, ii, this.windowEvents[ii]);
					this.windowEvents[ii] = null;
				}
			}
			this.windowEvents = null;
			delete repo[this.ENTITY_XML_ID];
			BX.onCustomEvent(window, "OnUCHasBeenDestroyed", [this.ENTITY_XML_ID, this]);
		},
		init : function()
		{
			if (this.params["SHOW_POST_FORM"] == "Y")
			{
				this.quote.show = BX.delegate(function(e, params) {
						setTimeout(BX.delegate( function() { this.quoteShow(e, params); }, this ), 50);
					}, this
				);
				var res = BX('record-' + this.ENTITY_XML_ID + '-new'),
					nodes = BX.findChildren(res.parentNode, {"tagName" : "DIV", "className" : "feed-com-block-cover"}, false);
				nodes = (!!nodes ? nodes : []);
				nodes.push(res);
				if (!!this.container)
					nodes.push(this.container);

				for (var ii = 0; ii < nodes.length; ii++)
				{
					BX.bind(nodes[ii], "mouseup", this.quote.show);
				}
				// dnd
				var dnd = BX('record-' + this.ENTITY_XML_ID + '-switcher');
				if (dnd && !dnd.bxDndIsBound)
				{
					dnd.bxDndIsBound = "Y";
					BX.bind(dnd, "dragenter", BX.delegate(this.reply, this));
				}
				BX.addCustomEvent(window, "onQuote"+this.ENTITY_XML_ID, this.quote.show);
			} // only for small informer at the left bottom screens part
		},
		quote : {
			show : BX.DoNothing(),
			popup : null
		},
		quoteCheck : function() {
			var text = '', range, author = null;
			if (window.getSelection)
			{
				range = window.getSelection();
				text = range.toString();
			}
			else if (document.selection)
			{
				range = document.selection;
				text = range.createRange().text;
			}
			if (text != "")
			{
				var parent = BX('record-' + this.ENTITY_XML_ID + '-new'),
					endParent = BX.findParent(range.focusNode, {"tagName" : "DIV", "className" : "feed-com-block-cover"}, parent.parentNode),
					startParent = BX.findParent(range.anchorNode, {"tagName" : "DIV", "className" : "feed-com-block-cover"}, parent.parentNode);
				if (endParent != startParent || BX(endParent) && !endParent.hasAttribute("id"))
				{
					text = "";
				}
				else if (BX(endParent))
				{
					var node = BX(endParent.getAttribute("id").replace(/\-cover$/, "-actions-reply"));
					if (node)
					{
						author = {
							id : parseInt(node.getAttribute("bx-mpl-author-id")),
							name : node.getAttribute("bx-mpl-author-name"),
							gender : node.getAttribute("bx-mpl-author-gender")
						};
					}
				}
			}
			if (text == "")
			{
				if (!!this.quote.popup)
					this.quote.popup.hide();
				return false;
			}
			return {text : text, author : author};
		},
		quoteShow : function(e, params) {
			params = (params || this.quoteCheck());

			if (!params || !params['text'])
			{
				quoteData = null;
				return;
			}
			quoteData = params;

			if (this.quote.popup == null)
			{
				this.quote.popup = new MPLQuote({
					id : this.ENTITY_XML_ID,
					closeByEsc : true,
					autoHide : true,
					autoHideTimeout : 2500,
					events : {
						click : BX.delegate(function(e) {
							e.preventDefault();
							BX.eventCancelBubble(e);
							safeEditingCurrentObj = safeEditing;
							BX.onCustomEvent(window, "OnUCUserQuote", [this.ENTITY_XML_ID, params['author'], params['text'], safeEditingCurrentObj]);
							this.quote.popup.hide();
							return false;
						}, this)
					},
					classEvents : {
						onQuoteHide : BX.proxy(function() { quoteData = null; this.quote.popup = null; }, this)
					}
				});
			}
			this.quote.popup.show(e);
		},
		display : function(status, startHeight)
		{
			var fxStart = 0, fxFinish = 0,
				time = 0,
				el = this.container;
			status = (status == "hide" ? "hide" : "show");
			if (status == "hide")
			{
				fxStart = parseInt(this.container.offsetHeight);
				time = fxStart / 2000;

				time = (time < 0.3 ? 0.3 : (time > 0.5 ? 0.5 : time));
				el.style.overflow = 'hidden';

				(new BX["easing"]({
					duration : time*1000,
					start : {height:fxStart, opacity:100},
					finish : {height:fxFinish, opacity:0},
					transition : BX.easing.makeEaseOut(BX.easing.transitions.quart),
					step : function(state){
						el.style.maxHeight = state.height + "px";
						el.style.opacity = state.opacity / 100;
					},
					complete : BX.proxy(function(){
						el.style.cssText = '';
						el.style.display = "none";
						BX.onCustomEvent(this, 'OnUCListWasHidden', [this, [], el]);
					}, this)
				})).animate();
			}
			else
			{
				fxStart = parseInt(startHeight || 20);

				el.style.display = "block";
				el.style.overflow = 'hidden';
				el.style.maxHeight = fxStart;

				fxFinish = parseInt(this.container.offsetHeight);
				time = (fxFinish - fxStart) / (2000 - fxStart);
				time = (time < 0.3 ? 0.3 : (time > 0.8 ? 0.8 : time));
				(new BX["easing"]({
					duration : time*1000,
					start : {height:fxStart, opacity:(fxStart > 0 ? 100 : 0)},
					finish : {height:fxFinish, opacity:100},
					transition : BX.easing.makeEaseOut(BX.easing.transitions.quart),
					step : function(state){
						el.style.maxHeight = state.height + "px";
						el.style.opacity = state.opacity / 100;
					},
					complete : BX.proxy(function(){
						el.style.cssText = '';
						el.style.maxHeight = 'none';
						BX.onCustomEvent(this, 'OnUCListWasShown', [this, [], el]);
					}, this)
				})).animate();
			}
		},
		get : function()
		{
			if (this.status == "done")
			{
				if (this.nav.getAttribute("bx-visibility-status") == "visible") {
					this.display("hide");
					BX.adjust(this.nav, {attrs : {"bx-visibility-status" : "none"}, html : this.msg});
				} else {
					this.display("show");
					BX.adjust(this.nav, {attrs : {"bx-visibility-status" : "visible"}, html : BX.message("BLOG_C_HIDE")});
				}
			}
			else if (this.status == "ready")
			{
				this.send();
			}
			return false;
		},
		send : function() {
			this.status = "busy";
			BX.addClass(this.nav, "feed-com-all-hover");
			var data = BX.ajax.prepareData({
					AJAX_POST : "Y",
					ENTITY_XML_ID : this.ENTITY_XML_ID,
					MODE : "LIST",
					FILTER : (this.order == "ASC" ? {">ID" : this.mid} : {"<ID" : this.mid}),
					sessid : BX.bitrix_sessid() } ),
				url = BX.util.htmlspecialcharsback(this.nav.getAttribute("href"));
				url = (url.indexOf('#') !== -1 ? url.substr(0, url.indexOf('#')) : url);
			var result = {url : url, data : data};
			BX.onCustomEvent(this, "OnUCListHasToBeEnlarged", [this, result]);
			url = result.url;
			data = result.data;
			BX.ajax({
				url: (url + (url.indexOf('?') !== -1 ? "&" : "?") + data),
				method: 'GET',
				dataType: 'json',
				data: '',
				onsuccess: BX.proxy(this.build, this),
				onfailure: BX.proxy(this.complete, this)
			});
		},
		build : function(data) {
			this.status = "ready";
			this.wait("hide");
			BX.removeClass(this.nav, "feed-com-all-hover");
			if (!!data && data["status"] == "success")
			{
				var res = (!!data["navigation"] ? BX.create('DIV', {html : data["navigation"]}) : null),
					ob = BX.processHTML(data["messageList"], false);

				var offsetHeight = this.container.offsetHeight,
					container = BX.create("DIV", {html : ob.HTML});
				if (this.order == "ASC" || !this.container.firstChild)
				{
					this.container.appendChild(container);
				}
				else
				{
					this.container.insertBefore(container, this.container.firstChild);
				}
				BX.onCustomEvent(window, "OnUCFeedChanged", [[this.ENTITY_XML_ID, this.mid]]);

				this.display('show', offsetHeight);
				if (!!res)
					res = res.firstChild;
				if (!!res)
					BX.adjust(this.nav, {attrs : {href : res.getAttribute("href")}, html : res.innerHTML});
				else {
					BX.adjust(this.nav, {
						attrs : {href : "#", "bx-visibility-status" : "visible"}, html : BX.message("BLOG_C_HIDE"),
						events : { click : function(e) {
							BX.eventCancelBubble(e);
							e.preventDefault();
							return false;
						}}});
					this.status = "done";
				}
				var cnt = 0,
					func = BX.delegate(function()
				{
					cnt++;
					if (cnt < 100)
					{
						if (this.container.childNodes.length > 0)
						{
							BX.ajax.processScripts(ob.SCRIPT);
							var first = container.firstChild,
								last = container.lastChild,
								min = 0,
								max = 0;
							if (first && first.hasAttribute("id"))
							{
								min = parseInt(first.getAttribute("id").
									replace("record-" + this.ENTITY_XML_ID + "-", "").
									replace("-cover", "")
								);
								min = (min > 0 ? min : 0);
							}
							if (last && last.hasAttribute("id"))
							{
								max = parseInt(last.getAttribute("id").
									replace("record-" + this.ENTITY_XML_ID + "-", "").
									replace("-cover", "")
								);
								max = (max > 0 ? max : 0);
							}
							if (min > max)
							{
								max = max + min;
								min = max - min;
								max = max - min;
							}
							container.setAttribute("bx-mpl-min", min + '');
							container.setAttribute("bx-mpl-max", max + '');
							container.setAttribute("bx-mpl-loaded", "Y");
							this.recalcMoreButtonsList(container);
							BX.onCustomEvent(this, "OnUCListWasBuilt", [this, data, container]);
						}
						else
							BX.defer(func)();
					}
				}, this);
				BX.defer(func)();
			}
		},
		complete : function() {
			this.status = "done";
			BX.removeClass(this.nav, "feed-com-all-hover");
			this.wait("hide");
		},
		wait : function(status) {
			status = (status == "show" ? "show" : "hide");
			return status;
		},
		reply : function(node) {
			safeEditingCurrentObj = safeEditing;
			if (BX.type.isElementNode(node))
				BX.onCustomEvent(window, 'OnUCUserReply', [this.ENTITY_XML_ID, node.getAttribute("bx-mpl-author-id"), node.getAttribute("bx-mpl-author-name"), safeEditingCurrentObj]);
			else
				BX.onCustomEvent(window, 'OnUCUserReply', [this.ENTITY_XML_ID, undefined, undefined, safeEditingCurrentObj]);
		},
		/*
		* @params array data Like an {
		errorMessage : "ERROR_MESSAGE",
		okMessage : "OK_MESSAGE",
		status : true,
		message : "html text",
		messageBBCode : "bbcode text",
		messageId : {ENTITY_XML_ID, RESULT},
		messageFields : {}}
		*/
		add : function(id, data, edit, animation) {
			if (!(!!data && !!id && parseInt(id[1]) > 0))
				return false;
			var
				container = BX('record-' + id.join('-') + '-cover'),
				html = (!!data["message"] ? data["message"] :  window.fcParseTemplate(
					{ messageFields : data["messageFields"] },
					{
						RIGHTS : this.rights,
						DATE_TIME_FORMAT : this.DATE_TIME_FORMAT,
						VIEW_URL : this.params.VIEW_URL,
						EDIT_URL : this.params.EDIT_URL,
						MODERATE_URL : this.params.MODERATE_URL,
						DELETE_URL : this.params.DELETE_URL,
						AUTHOR_URL : this.params.AUTHOR_URL,
						AUTHOR_URL_PARAMS : this.params.AUTHOR_URL_PARAMS,

						NAME_TEMPLATE : this.params.NAME_TEMPLATE,
						SHOW_LOGIN : this.params.SHOW_LOGIN
					},
					this.getTemplate()
				)),
				ob = BX.processHTML(html, false),
				results,
				newCommentsContainer = BX('record-' + id[0] + '-new'),
				acts = ["MODERATE", "EDIT", "DELETE"],
				needToCheck = false,
				height = 0;
			for (var ii in acts)
			{
				if (acts.hasOwnProperty(ii))
				{
					if (this.rights[acts[ii]] == "OWNLAST")
					{
						needToCheck = true;
						break;
					}
				}
			}
			if (needToCheck)
			{
				results = (!!newCommentsContainer.lastChild && newCommentsContainer.lastChild.className == "feed-com-block-cover" ? [newCommentsContainer.lastChild] : []);
				var res, res2;
				if (this.addCheckPreviousNodes !== true)
				{
					results = BX.findChildren(newCommentsContainer.parentNode, {tagName : "DIV", "className" : "feed-com-block-cover"}, false);
					var results2 = BX.findChildren(newCommentsContainer, {tagName : "DIV",  "className" : "feed-com-block-cover"}, false);
					results = (!!results ? results : []); results2 = (!!results2 ? results2 : []);
					while (results2.length > 0 && (res = results2.pop()) && !!res)
						results.push(res);
					this.addCheckPreviousNodes = true;
				}
				while ((res = results.pop()) && res)
				{
					res2 = BX(res.id.replace("-cover", "-actions"));
					if (!!res2)
					{
						if (this.rights["EDIT"] == "OWNLAST")
							res2.setAttribute("bx-mpl-edit-show", "N");
						if (this.rights["MODERATE"] == "OWNLAST")
							res2.setAttribute("bx-mpl-moderate-show", "N");
						if (this.rights["DELETE"] == "OWNLAST")
							res2.setAttribute("bx-mpl-delete-show", "N");
					}
				}
			}

			var changeOpacity = false;
			if (!container) // add
			{
				container = BX.create("DIV", {
					attrs : {id : ("record-" + id.join('-') + '-cover'), "className" : "feed-com-block-cover"},
					style : {opacity : 0, height : 0, overflow: "hidden"},
					html : ob.HTML});
				newCommentsContainer.appendChild(container);
				changeOpacity = true;
			}
			else // edit
			{
				var
					containerBody = BX.create("DIV", {
						attrs : {
							id : ("record-" + id.join('-') + '-cover'),
							className : "feed-com-block-cover"
						},
						style : {
							display : "none"
						},
						html : ob.HTML
					}),
					containerForRemove = container,

					// get expanded status
					commentOuterNode = BX.findChild(containerForRemove, {
							tag: 'div',
							className: 'feed-com-text-inner'
						}, true),
					expanded = (commentOuterNode && commentOuterNode.classList.contains('feed-com-text-inner-expanded'));

				// set expanded status
				if (expanded)
				{
					commentOuterNode = BX.findChild(containerBody, {
						tag: 'div',
						className: 'feed-com-text-inner'
					}, true);
					if (commentOuterNode)
					{
						commentOuterNode.classList.add('feed-com-text-inner-expanded');
					}
				}

				container.parentNode.insertBefore(containerBody, container);
				container.removeAttribute("id");
				height = container.scrollHeight;
				BX.hide(container);
				BX.show(containerBody);
				container = containerBody;
				setTimeout(function() {
					BX.remove(containerForRemove);
				}, 1000);
			}

			if (
				animation !== "simple"
				&& typeof BXMobileApp == 'undefined' // non-mobile
			)
			{
				var curPos = BX.pos(container),
					scroll = BX.GetWindowScrollPos(),
					size = BX.GetWindowInnerSize();
				(new BX["easing"]({
					duration : 1000,
					start : { opacity : (changeOpacity ? 0 : 100), height : height},
					finish : { opacity: 100, height : container.scrollHeight},
					transition : BX.easing.makeEaseOut(BX.easing.transitions.quart),
					step : function(state){
						container.style.height = state.height + "px";
						container.style.opacity = state.opacity / 100;
						if (scroll.scrollTop > 0 && curPos.top < (scroll.scrollTop + size.innerHeight))
						{
							window.scrollTo(0, scroll.scrollTop + state.height);
						}
					},

					complete : function(){
						container.style.cssText = '';
					}
				})).animate();
			}
			else
			{
				(new BX["easing"]({
					duration : 500,
					start : { opacity : (changeOpacity ? 0 : 100), height : height},
					finish : { opacity : 100, height : container.scrollHeight},
					transition : BX.easing.makeEaseOut(BX.easing.transitions.cubic),
					step : function(state) {
						container.style.height = state.height + "px";
						container.style.opacity = state.opacity / 100;
					},
					complete : BX.proxy(function() {
						container.style.cssText = '';
						BX.onCustomEvent(this, 'OnUCRecordWasShown', [this.ENTITY_XML_ID, id, container]);
					}, this)
				})).animate();
			}
			var cnt = 0,
			func = function()
			{
				cnt++;
				if (cnt < 100)
				{
					var node = BX("record-" + id.join('-') + '-cover');
					if (node && node.childNodes.length > 0)
					{
						BX.ajax.processScripts(ob.SCRIPT);
						if (this.params["BIND_VIEWER"] == "Y" && BX["viewElementBind"])
						{
							BX.viewElementBind(
								node, {},
								function(node){
									return BX.type.isElementNode(node) && (node.getAttribute('data-bx-viewer') || node.getAttribute('data-bx-image'));
								}
							);
						}
						this.recalcMoreButton(this.findMoreButton(node));
					}
					else
					{
						BX.defer(func, this)();
					}
				}
				BX.onCustomEvent(window, 'OnUCRecordHasDrawn', [this.ENTITY_XML_ID, id, data["messageFields"]]);
				BX.onCustomEvent(window, "OnUCFeedChanged", [id]);
			};
			BX.defer(func, this)();
			return true;
		},
		findMoreButton: function(commentNode) {
			return false;
		},
		recalcMoreButton: function(buttonNode) {
			return false;
		},
		recalcMoreButtonsList: function(listNode) {
			return false;
		},
		pullNewAuthor : function(authorId, authorName, authorAvatar) {
			BX.onCustomEvent(window, 'OnUCUsersAreWriting', [this.ENTITY_XML_ID, authorId, authorName, authorAvatar]);
		},
		pullNewRecord : function(params) {
			var id = [this.ENTITY_XML_ID, parseInt(params["ID"])];
			if (!!this.pullNewRecords[id.join('-')] && this.pullNewRecords[id.join('-')] == "busy")
				return true;
			else if (!!this.pullNewRecords[id[0] + '-0'] && this.pullNewRecords[id[0] + '-0'] == "busy")
				return setTimeout(BX.proxy(function () {this.pullNewRecord(params)}, this), 100);

			BX.onCustomEvent(window, "OnUCBeforeCommentWillBePulled", [id, params]);

			if (params["NEED_REQUEST"] == "Y")
			{
				if (
					params['URL']['LINK'].indexOf('#GROUPS_PATH#') >= 0
					&& !!BX.message('MPL_WORKGROUPS_PATH')
				)
					params['URL']['LINK'] = params['URL']['LINK'].replace('#GROUPS_PATH#', BX.message('MPL_WORKGROUPS_PATH'));

				this.pullNewRecords[id.join('-')] = "busy";
				var data = BX.ajax.prepareData( {
					AJAX_POST : "Y",
					ENTITY_XML_ID : this.ENTITY_XML_ID,
					MODE : "RECORD",
					FILTER : {"ID" : params["ID"]},
					sessid : BX.bitrix_sessid() }),
					url = params['URL']['LINK'];
					url = (url.indexOf('#') !== -1 ? url.substr(0, url.indexOf('#')) : url);
				BX.ajax({
					url: (url + (url.indexOf('?') !== -1 ? "&" : "?") + data),
					method: 'GET',
					dataType: 'json',
					data: '',
					onsuccess: BX.delegate(function(data){
						if (!!BX('record-' + id.join('-') + '-cover'))
							return;
						this.add([this.ENTITY_XML_ID, parseInt(params["ID"])], data);
						var node = BX('record-' + id.join('-') + '-cover'),
							node1 = BX.findChild(node, {className: 'feed-com-main-content'}, true, false);
						BX.addClass(node, 'comment-new-answer');
						BX.addClass(node1, 'feed-com-block-pointer-to-new feed-com-block-new');
						this.pullNewRecords[id.join('-')] = "done";
						if (BX('record-' + id[0] + '-corner'))
						{
							BX.addClass(BX('record-' + id[0] + '-corner'), (BX.hasClass(node1, "feed-com-block-new") ? "feed-post-block-yellow-corner" :""));
							BX('record-' + id[0] + '-corner').removeAttribute("id");
						}
						BX.onCustomEvent(window, "OnUCCommentWasPulled", [id, data]);
					}, this)
				});
			}
			else if (params["ACTION"] == "DELETE")
			{
				if (BX('record-' + this.ENTITY_XML_ID + '-' + params["ID"]))
					BX.fx.hide(BX('record-' + this.ENTITY_XML_ID + '-' + params["ID"]), 'scroll',  {time : 0.2});

				BX.onCustomEvent(window, 'OnUCommentWasDeleted', [this.ENTITY_XML_ID, [this.ENTITY_XML_ID, params["ID"]], params]);
				BX.onCustomEvent(window, "OnUCFeedChanged", [params["ID"]]);
			}
			else if (params["ACTION"] == "HIDE")
			{
				var node0 = BX('record-' + this.ENTITY_XML_ID + '-' + params["ID"]),
					node2 = node0 ? BX.findChild(node0, {"tagName" : "DIV", "className" : "feed-com-block"}, true) : null;

				if (BX(node2))
				{
					if (BX.hasClass(node2, ("blog-comment-user-" + BX.message("USER_ID"))))
					{
						BX.removeClass(node2, "feed-com-block-approved");
						BX.addClass(node2, "feed-com-block-hidden");
					}
					else
					{
						BX.fx.hide(node0, 'scroll',  {time : 0.2});
						BX.onCustomEvent(window, 'OnUCommentWasHidden', [this.ENTITY_XML_ID, [this.ENTITY_XML_ID, params["ID"]], params]);
						BX.onCustomEvent(window, "OnUCFeedChanged", [params["ID"]]);
					}
				}
			}
			else if (params["ACTION"] == "EDIT" && !BX('record-' + this.ENTITY_XML_ID + '-' + params["ID"]))
			{
				BX.DoNothing();
			}
			//else if (params["ACTION"] == "MODERATE" && !BX('record-' + this.ENTITY_XML_ID + '-' + params["ID"]))
			//{
			//	TODO: We have to show moderated messages in a right order
			//}
			else
			{
				if (params && !(params["AUTHOR"] && (params["AUTHOR"]["ID"] + '') == (BX.message("USER_ID") + '')))
					params["NEW"] = "Y";
				this.add(id, {"messageFields" : params});
				var node = BX('record-' + id.join('-') + '-cover'),
					node1 = BX.findChild(node, {className: 'feed-com-main-content'}, true, false);
				if (BX('record-' + id[0] + '-corner'))
				{
					BX.addClass(BX('record-' + id[0] + '-corner'), (params["NEW"] == "Y" ? "feed-post-block-yellow-corner" :""));
					BX('record-' + id[0] + '-corner').removeAttribute("id");
				}

				BX.addClass(node, 'comment-new-answer');
				if (params["NEW"] == "Y")
				{
					BX.addClass(node1, 'feed-com-block-pointer-to-new feed-com-block-new');
				}
				this.pullNewRecords[id.join('-')] = "done";
				BX.onCustomEvent(window, "OnUCCommentWasPulled", [id, {"messageFields" : params}])
			}
			return true;
		},
		act : function(url, id, act) {
			if (url.substr(0, 1) != '/')
			{
				try { eval(url); return false; }
				catch(e) {}
				if (BX.type.isFunction(url)) {
					url(this, id, act);
					return false;
				}
			}
			this.showWait(id);
			act = (act === "EDIT" ? "EDIT" : (act === "DELETE" ? "DELETE" : "MODERATE"));
			id = parseInt(id);
			var data = BX.ajax.prepareData( {
				sessid : BX.bitrix_sessid(),
				MODE : "RECORD",
				NOREDIRECT : "Y",
				AJAX_POST : "Y",
				FILTER : {"ID" : id},
				ENTITY_XML_ID : this.ENTITY_XML_ID } );
			url = (url.indexOf('#') !== -1 ? url.substr(0, url.indexOf('#')) : url);

			BX.ajax({
				'method': 'GET',
				'url': (url + (url.indexOf('?') !== -1 ? "&" : "?") + data),
				'data': '',
				dataType: 'json',
				onsuccess: BX.proxy(function(data) {
					this.closeWait(id);
					if (data["status"] == "error")
					{
						this.showError(id, data["message"] || "Unknown error.");
					}
					else
					{
						if (act !== "EDIT")
						{
							var container = BX('record-' + this.ENTITY_XML_ID + '-' + id + '-cover');
							if (!!data['message'] && !!container)
							{
								var
									ob = BX.processHTML(data["message"], false);
								container.innerHTML = ob.HTML;
								var cnt = 0,
								func = function()
								{
									cnt++;
									if (cnt < 100)
									{
										if (container.childNodes.length > 0)
											BX.ajax.processScripts(ob.SCRIPT);
										else
											BX.defer(func)();
									}
								};
								BX.defer(func)();
								data['okMessage'] = '';
							}
							else if (act == "DELETE" && !!data['okMessage'])
							{
								BX.hide(BX('record-' + this.ENTITY_XML_ID + '-' + id));
								BX.onCustomEvent(window, 'OnUCommentWasDeleted', [this.ENTITY_XML_ID, [this.ENTITY_XML_ID, id]]);
							}
						}
						BX.onCustomEvent(window, 'OnUCAfterRecordEdit', [this.ENTITY_XML_ID, id, data, act]);
						BX.onCustomEvent(window, "OnUCFeedChanged", [id]);
					}
					this.busy = false;
				}, this),
				onfailure: BX.delegate(function(data){
					this.closeWait(id);
					this.showError(id, data);
				}, this)
			});
			return false;
		},
		showError : function(id, text) {
			if (this.errorWindow)
				this.errorWindow.close();

			this.errorWindow = new BX.PopupWindow('bx-comments-error', null, {
				autoHide: false,
				zIndex: 200,
				overlay: {opacity: 50, backgroundColor: "#000000"},
				buttons: [
					new BX.PopupWindowButton({
						text : BX.message("MPL_CLOSE"),
						events : { click : BX.delegate(function() {
							if (this.errorWindow)
								this.errorWindow.close(); }, this) }
					})
				],
				closeByEsc: true,
				titleBar: {content: BX.create('span', {props : { className : "popup-window-titlebar-text feed-error-title" },
					html: '<div class="feed-error-icon"></div>' + BX.message("MPL_ERROR_OCCURRED")})},
				//titleBar: ,
				// ,
				closeIcon : true,
				contentColor : "white",
				content : '<div class="feed-error-block">' + text + '</div>'
			});
			this.errorWindow.show();
		},
		checkHash : function(ENTITY_ID) {
			var id = [this.ENTITY_XML_ID, ENTITY_ID],
				node = BX('record-' + id.join('-') + '-cover');
			if (!!node)
			{
				var curPos = BX.pos(node);
				window.scrollTo(0, curPos["top"]);
				node = BX.findChild(node, {className: 'feed-com-main-content'}, true, false);
				BX.removeClass(node, "feed-com-block-pointer-to-new feed-com-block-new");
				BX.addClass(node, "feed-com-block-pointer");
			}
		},
		getTemplate : function()
		{
			return BX.message("MPL_RECORD_TEMPLATE");
		},
		showWait : function(id)
		{
			window.fcShowWait(BX('record-' + this.ENTITY_XML_ID + '-' + id + '-actions'));
		},
		closeWait : function(id)
		{
			window.fcCloseWait(BX('record-' + this.ENTITY_XML_ID + '-' + id + '-actions')||null);
		}
	};

	window.FCList.getQuoteData = function(){ return quoteData; };
	window.FCList.getInstance = function(params, add) {
		if (!repo[params["ENTITY_XML_ID"]])
			new window.FCList(params, add);
		return repo[params["ENTITY_XML_ID"]];
	};

	var lastWaitElement = null;
	window["fcShowWait"] = function(el) {
		if (el && !BX.type.isElementNode(el))
			el = null;
		el = el || this;

		if (BX.type.isElementNode(el))
		{
			BX.defer(function(){el.disabled = true})();
			var waiter_parent = BX.findParent(el, BX.is_relative);

			el.bxwaiter = (waiter_parent || document.body).appendChild(BX.create('DIV', {
				props: {className: 'feed-com-loader'},
				style: {position: 'absolute'}
			}));
			lastWaitElement = el;

			return el.bxwaiter;
		}
		return true;
	};

	window["fcCloseWait"] = function(el) {
		if (el && !BX.type.isElementNode(el))
			el = null;
		el = el || lastWaitElement || this;

		if (BX.type.isElementNode(el))
		{
			if (el.bxwaiter && el.bxwaiter.parentNode)
			{
				el.bxwaiter.parentNode.removeChild(el.bxwaiter);
				el.bxwaiter = null;
			}

			el.disabled = false;
			if (lastWaitElement == el)
				lastWaitElement = null;
		}
	};

	window["fcShowActions"] = function(ENTITY_XML_ID, ID, el) {
		var panels = [];
		if (el.getAttribute('bx-mpl-view-show') == 'Y')
		{
			panels.push({
				text : BX.message("MPL_MES_HREF"),
				href : el.getAttribute('bx-mpl-view-url').replace(/\\#(.+)$/gi, "") + "#com" + ID
			});
			panels.push({
				text : '<span id="record-popup-' + ENTITY_XML_ID + '-' + ID + '-link-text">' + BX.message("B_B_MS_LINK") + '</span>' +
					'<span id="record-popup-' + ENTITY_XML_ID + '-' + ID + '-link-icon-animate" class="comment-menu-link-icon-wrap">' +
						'<span class="comment-menu-link-icon" id="record-popup-' + ENTITY_XML_ID + '-' + ID + '-link-icon-done" style="display: none;">' +

						'</span>' +
					'</span>',
				onclick : function() {
					var
						id = 'record-popup-' + ENTITY_XML_ID + '-' + ID + '-link',
						urlView = el.getAttribute('bx-mpl-view-url').replace(/#(.+)$/gi, "") + "#com" + ID,
						menuItemText = BX(id + '-text'),
						menuItemIconDone = BX(id + '-icon-done');

					urlView = (urlView.indexOf('http') < 0 ? (location.protocol + '//' + location.host) : '') + urlView;

					if (BX.clipboard.isCopySupported())
					{
						if (menuItemText && menuItemText.getAttribute('data-block-click') == 'Y')
						{
							return;
						}

						BX.clipboard.copy(urlView);
						if (
							menuItemText
							&& menuItemIconDone
						)
						{
							menuItemIconDone.style.display = 'inline-block';
							BX.removeClass(BX(id + '-icon-animate'), 'comment-menu-link-icon-animate');

							BX.adjust(BX(id + '-text'), {
								attrs: {
									'data-block-click': 'Y'
								}
							});

							setTimeout(function() {
								BX.addClass(BX(id + '-icon-animate'), 'comment-menu-link-icon-animate');
							}, 1);

							setTimeout(function() {
								BX.adjust(BX(id + '-text'), {
									attrs: {
										'data-block-click': 'N'
									}
								});
							}, 500);
						}

						return;
					}

					var
						it = BX.proxy_context,
						height = parseInt(!!it.getAttribute("bx-height") ? it.getAttribute("bx-height") : it.offsetHeight);

					if (it.getAttribute("bx-status") != "shown")
					{
						it.setAttribute("bx-status", "shown");
						if (!BX(id) && !!BX(id + '-text'))
						{
							var
								node = BX(id + '-text'),
								pos = BX.pos(node),
								pos2 = BX.pos(node.parentNode),
								nodes = BX.findChildren(node.parentNode.parentNode.parentNode, {className : "menu-popup-item-text"}, true);

							pos["height"] = pos2["height"] - 1;
							if (nodes)
							{
								var width = 0, pos3;
								for (var ii = 0; ii < nodes.length; ii++)
								{
									pos3 = BX.pos(nodes[ii]);
									width = Math.max(width, pos3["width"]);
								}
								pos2["width"] = width;
							}
							BX.adjust(it, {
								attrs : {"bx-height" : it.offsetHeight},
								style : { overflow : "hidden", display : 'block'},
								children : [
									BX.create('BR'),
									BX.create('DIV', { attrs : {id : id},
										children : [
											BX.create('SPAN', {attrs : {"className" : "menu-popup-item-left"}}),
											BX.create('SPAN', {attrs : {"className" : "menu-popup-item-icon"}}),
											BX.create('SPAN', {attrs : {"className" : "menu-popup-item-text"},
												children : [
													BX.create('INPUT', {
															attrs : {
																id : id + '-input',
																type : "text",
																value : urlView} ,
															style : {
																height : pos2["height"] + 'px',
																width : pos2["width"] + 'px'
															},
															events : {
																click : function(e) {
																	this.select();
																	e.preventDefault();
																}
															}
														}
													)
												]
											})
										]
									}),
									BX.create('SPAN', {"className" : "menu-popup-item-right"})
								]
							});
						}
						(new BX["fx"]({
							time: 0.2,
							step: 0.05,
							type: 'linear',
							start: height,
							finish: height * 2,
							callback: BX.delegate(function(height) {this.style.height = height + 'px';}, it)
						})).start();
						BX.fx.show(BX(id), 0.2);
						BX(id + '-input').select();
					}
					else
					{
						it.setAttribute("bx-status", "hidden");
						(new BX["fx"]({
							time: 0.2,
							step: 0.05,
							type: 'linear',
							start: it.offsetHeight,
							finish: height,
							callback: BX.delegate(function(height) {this.style.height = height + 'px';}, it)
						})).start();
						BX.fx.hide(BX(id), 0.2);
					}
				}
			});
		}
		if (el.getAttribute('bx-mpl-edit-show') == 'Y')
			panels.push({
				text : BX.message("BPC_MES_EDIT"),
				onclick : function() { window['UC'][ENTITY_XML_ID].act(el.getAttribute('bx-mpl-edit-url'), ID, 'EDIT'); this.popupWindow.close(); return false;}
			});
		if (el.getAttribute('bx-mpl-moderate-show') == 'Y')
		{
			var hidden = el.getAttribute('bx-mpl-moderate-approved') == 'hidden';
			panels.push({
				text : (hidden ? BX.message("BPC_MES_SHOW") : BX.message("BPC_MES_HIDE")),
				onclick : function() {

					var moderateUrl = el.getAttribute('bx-mpl-moderate-url').
						replace("#action#", (hidden ? "show" : "hide")).
						replace("#ACTION#", (hidden ? "SHOW" : "HIDE"));

					if (BX.type.isNotEmptyString(moderateUrl))
					{
						moderateUrl = BX.util.add_url_param(moderateUrl, {
							b24statAction: (hidden ? "showComment" : "hideComment")
						});
					}
					window['UC'][ENTITY_XML_ID].act(moderateUrl, ID, 'MODERATE');
					this.popupWindow.close();}
			});
		}
		if (el.getAttribute('bx-mpl-delete-show') == 'Y')
		{
			panels.push({
				text : BX.message("BPC_MES_DELETE"),
				onclick : function() {
					if(window.confirm(BX.message("BPC_MES_DELETE_POST_CONFIRM")))
						window['UC'][ENTITY_XML_ID].act(el.getAttribute('bx-mpl-delete-url'), ID, 'DELETE');
					this.popupWindow.close(); return false;
				}
			});
		}

		if (
			el.getAttribute('bx-mpl-createtask-show') == 'Y'
			&& typeof oLF != 'undefined'
		)
		{
			var
				commentEntityType = el.getAttribute('bx-mpl-comment-entity-type'),
				postEntityType = el.getAttribute('bx-mpl-post-entity-type');

			panels.push({
				text : BX.message("BPC_MES_CREATE_TASK"),
				onclick : function() {
					oLF.createTask({
						postEntityType: (BX.type.isNotEmptyString(postEntityType) ? postEntityType : 'BLOG_POST'),
						entityType: (BX.type.isNotEmptyString(commentEntityType) ? commentEntityType : 'BLOG_COMMENT'),
						entityId: ID
					});
					this.popupWindow.close(); return false;
				}
			});
		}

		if (panels.length > 0) {
			for (var ii in panels)
			{
				if (panels.hasOwnProperty(ii))
				{
					panels[ii]['className'] = 'blog-comment-popup-menu';
				}
			}
			BX.PopupMenu.show('action-' + ENTITY_XML_ID + '-' + ID, el,
				panels,
				{
					offsetLeft: -18,
					offsetTop: 2,
					lightShadow: false,
					angle: {position: 'top', offset: 50},
					events : {
						onPopupClose : function() { this.destroy();BX.PopupMenu.Data['action-' + ENTITY_XML_ID + '-' + ID] = null; }
					}
				}
			);
		}
	};

	window["fcCommentExpand"] = function(el) {
		BX.UI.Animations.expand({
			moreButtonNode: el,
			type: 'comment',
			classBlock: 'feed-com-block',
			classOuter: 'feed-com-text-inner',
			classInner: 'feed-com-text-inner-inner',
			heightLimit: 200,
			callback: function(el) {
				BX.onCustomEvent(window, 'OnUCRecordWasExpanded', [el]);
				el.classList.add('feed-com-text-inner-expanded');

				var commentContentId = el.getAttribute('bx-content-view-xml-id');
				if (BX.type.isNotEmptyString(commentContentId))
				{
					BX.onCustomEvent(window, "OnUCFeedChanged", [ commentContentId.split('-') ]);
				}
			}
		})
	};

	/**
	* Parse template with params
	* We work with such template as array(
	*     "messageFields" => array(
		"#ID#" =>
			$res["ID"],
		"#FULL_ID#" =>
			$arParams["ENTITY_XML_ID"]."-".$res["ID"],
		"#ENTITY_XML_ID#" =>
			$arParams["ENTITY_XML_ID"],
		"#NEW#" =>
			($res["NEW"] == "Y" ? "new" : "old"),
		"#APPROVED#" =>
			($res["APPROVED"] != "Y" ? "hidden" : "approved"),
		"#DATE#" =>
			(ConvertTimeStamp($res["POST_TIMESTAMP"], "SHORT") == $todayString ? $res["POST_TIME"] : $res["POST_DATE"]),
		"#TEXT#" =>
			$res["POST_MESSAGE_TEXT"],
		"#CLASSNAME#" =>
			(isset($res["CLASSNAME"]) ? " ".$res["CLASSNAME"] : ""),
		"#VIEW_URL#" =>
			str_replace(array("#ID#", "#id#"), $res["ID"], $arParams["VIEW_URL"]),
		"#VIEW_SHOW#" =>
			($arParams["URL_VIEW"] == "" ? "N" : "Y"),
		"#EDIT_URL#" =>
			str_replace(array("#ID#", "#id#"), $res["ID"], $arParams["EDIT_URL"]),
		"#EDIT_SHOW#" =>
			($arParams["RIGHTS"]["EDIT"] == "Y" || $arParams["RIGHTS"]["EDIT"] == "ALL" ||
			$arParams["RIGHTS"]["EDIT"] == "OWN" && $USER->GetID() == $res["AUTHOR"]["ID"] ? "Y" : "N"),
		"#MODERATE_URL#" =>
			str_replace(array("#ID#", "#id#"), $res["ID"], $arParams["MODERATE_URL"]),
		"#MODERATE_SHOW#" =>
			($arParams["RIGHTS"]["MODERATE"] == "Y" || $arParams["RIGHTS"]["MODERATE"] == "ALL" ||
			$arParams["RIGHTS"]["MODERATE"] == "OWN" && $USER->GetID() == $res["AUTHOR"]["ID"] ? "Y" : "N"),
		"#DELETE_URL#" =>
			str_replace(array("#ID#", "#id#"), $res["ID"], $arParams["DELETE_URL"]),
		"#DELETE_SHOW#" =>
			($arParams["RIGHTS"]["MODERATE"] == "Y" || $arParams["RIGHTS"]["MODERATE"] == "ALL" ||
			$arParams["RIGHTS"]["MODERATE"] == "OWN" && $USER->GetID() == $res["AUTHOR"]["ID"] ? "Y" : "N"),
		"#BEFORE_HEADER#" => $res["BEFORE_HEADER"],
		"#BEFORE_ACTIONS#" => $res["BEFORE_ACTIONS"],
		"#AFTER_ACTIONS#" => $res["AFTER_ACTIONS"],
		"#AFTER_HEADER#" => $res["AFTER_HEADER"],
		"#BEFORE#" => $res["BEFORE"],
		"#AFTER#" => $res["AFTER"],
		"#BEFORE_RECORD#" => $res["BEFORE_RECORD"],
		"#AFTER_RECORD#" => $res["AFTER_RECORD"],
		"#AUTHOR_ID#" =>
			$res["AUTHOR"]["ID"],
		"#AUTHOR_AVATAR_IS#" =>
			(empty($res["AUTHOR"]["AVATAR"]) ? "N" : "Y"),
		"#AUTHOR_AVATAR#" =>
			$res["AUTHOR"]["AVATAR"],
		"#AUTHOR_URL#" =>
			str_replace(
				array("#ID#", "#id#", "#USER_ID#", "#user_id#"),
				array($res["ID"], $res["ID"], $res["AUTHOR"]["ID"], $res["AUTHOR"]["ID"]),
				$arParams["AUTHOR_URL"]),
		"#AUTHOR_NAME#" =>
			CUser::FormatName(
			$arParams["NAME_TEMPLATE"],
			array(
				"NAME" => $res["AUTHOR"]["NAME"],
				"LAST_NAME" => $res["AUTHOR"]["LAST_NAME"],
				"SECOND_NAME" => $res["AUTHOR"]["SECOND_NAME"],
				"LOGIN" => $res["AUTHOR"]["LOGIN"],
				"NAME_LIST_FORMATTED" => ""
			),
			($arParams["SHOW_LOGIN"] != "N"),
			false),
		"#SHOW_POST_FORM#" =>
			$arParams["SHOW_POST_FORM"],
		"#AUTHOR_EXTRANET_STYLE#" =>
			($res["AUTHOR"]["IS_EXTRANET"] == "Y" ? ' feed-com-name-extranet' : ''),
		"background:url('') no-repeat center;" =>
			""
	 *     )
	 * )
	 * @param data
	 * @param params
	 * @param txt
	 * @return string
	 */
	window["fcParseTemplate"] = function(data, params, txt) {
		params = (params || {});

		params["RIGHTS"] = (params["RIGHTS"] || {});
		for (var ii = 0, rights = ["MODERATE", "EDIT", "DELETE"]; ii < rights.length; ii++)
		{
			params["RIGHTS"][rights[ii]] =
				BX.util.in_array(params["RIGHTS"][rights[ii]], ["Y", "ALL", "OWN", "OWNLAST"]) ? params["RIGHTS"][rights[ii]] : "N";
		}

		params["DATE_TIME_FORMAT"] = (!!params["DATE_TIME_FORMAT"] ? params["DATE_TIME_FORMAT"] : 'd F Y G:i');
		params["TIME_FORMAT"] = (!!params["DATE_TIME_FORMAT"] && params["DATE_TIME_FORMAT"].indexOf('a') >= 0 ? 'g:i a' : 'G:i');

		params["VIEW_URL"] = (params["VIEW_URL"] || '');
		params["EDIT_URL"] = (params["EDIT_URL"] || '');
		params["MODERATE_URL"] = (params["MODERATE_URL"] || '');
		params["DELETE_URL"] = (params["DELETE_URL"] || '');
		params["AUTHOR_URL"] = (params["AUTHOR_URL"] || '');

		params["NAME_TEMPLATE"] = (params["NAME_TEMPLATE"] || '');
		params["SHOW_LOGIN"] = (params["SHOW_LOGIN"] || '');
		var res = (data && data["messageFields"] ? data["messageFields"] : data),
			replacement = {
				"ID" : '',
				"FULL_ID" : '',
				"CONTENT_ID" : '',
				"ENTITY_XML_ID" : '',
				"NEW" : "old",
				"APPROVED" : 'Y',
				"DATE" : '',
				"TEXT" : '',
				"CLASSNAME" : '',
				"VIEW_URL" : '',
				"VIEW_SHOW" : 'N',
				"EDIT_URL" : '',
				"EDIT_SHOW" : 'N',
				"MODERATE_URL" : '',
				"MODERATE_SHOW" : 'N',
				"DELETE_URL" : '',
				"DELETE_SHOW" : 'N',
				"CREATETASK_SHOW" : 'N',
				"BEFORE_HEADER" : '',
				"BEFORE_ACTIONS" : '',
				"AFTER_ACTIONS" : '',
				"AFTER_HEADER" : '',
				"BEFORE" : '',
				"AFTER" : '',
				"BEFORE_RECORD" : '',
				"AFTER_RECORD" : '',
				"AUTHOR_ID" : 0,
				"AUTHOR_AVATAR_IS" : 'N',
				"AUTHOR_AVATAR" : '',
				"AUTHOR_URL" : '',
				"AUTHOR_NAME" : '',
				"AUTHOR_EXTRANET_STYLE" : '',
				"SHOW_POST_FORM" : 'Y',
				"VOTE_ID" : "",
				"AUTHOR_TOOLTIP_PARAMS" : '',
				"background:url('') no-repeat center;" : "",
				"LIKE_REACT" : ''
			};
		if (!!res && !!data["messageFields"])
		{
			res["AUTHOR"] = (!!res["AUTHOR"] ? res["AUTHOR"] : {});
			var timestamp = parseInt(res["POST_TIMESTAMP"]) + parseInt(BX.message('USER_TZ_OFFSET')) + parseInt(BX.message('SERVER_TZ_OFFSET'));
			var dateFormat = [
				['today', params["TIME_FORMAT"]],
				['yesterday', (params["TIME_FORMAT"].indexOf("yesterday") < 0 ? 'yesterday, '+params["TIME_FORMAT"] : params["TIME_FORMAT"])],
				['', params["DATE_TIME_FORMAT"]]
			];
/*
			var dateFormat = [
				['s', 'sshort'],
				['i', 'ishort'],
				['H', 'Hshort'],
				['d', 'dshort'],
				['m', 'mshort'],
				['Y', 'Yshort']
			];
*/
			var authorStyle = '';
			if (typeof res["AUTHOR"]["TYPE"] != 'undefined')
			{
				if (res["AUTHOR"]["TYPE"] == 'EMAIL')
				{
					authorStyle = ' feed-com-name-email';
				}
				else if (res["AUTHOR"]["TYPE"] == 'EXTRANET')
				{
					authorStyle = ' feed-com-name-extranet';
				}
			}
			else if (res["AUTHOR"]["IS_EXTRANET"] == "Y")
			{
				authorStyle = ' feed-com-name-extranet';
			}
			var commentText = (
				!!res.AUX
				&& res.AUX.length > 0
					? BX.CommentAux.getLiveText(res.AUX, (!!res.AUX_LIVE_PARAMS ? res.AUX_LIVE_PARAMS : {} ))
					: res["POST_MESSAGE_TEXT"].replace(/\001/gi, "").replace(/#/gi, "\001")
			);

			replacement = {
				"ID" : res["ID"],
				"FULL_ID" : res["FULL_ID"].join('-'),
				"CONTENT_ID" : (res["RATING"] && res["RATING"]["ENTITY_TYPE_ID"] && res["RATING"]["ENTITY_ID"] ? res["RATING"]["ENTITY_TYPE_ID"] + "-" + res["RATING"]["ENTITY_ID"] : ""),
				"ENTITY_XML_ID" : res["ENTITY_XML_ID"],
				"NEW" : res["NEW"] == "Y" ? "new" : "old",
				"APPROVED" : (res["APPROVED"] != "Y" ? "hidden" : "approved"),
				"DATE" : BX.date.format(
					dateFormat,
					timestamp,
					parseInt(Date.now()/1000) + parseInt(BX.message('USER_TZ_OFFSET')) + parseInt(BX.message('SERVER_TZ_OFFSET')),
					true
				),
				"TEXT" : commentText,
				"CLASSNAME" : (res["CLASSNAME"] ? " " + res["CLASSNAME"] : ""),
				"VIEW_URL" : params["VIEW_URL"].replace("#ID#", res["ID"]).replace("#id#", res["ID"]),
				"VIEW_SHOW" : (params["VIEW_URL"] !== '' ? "Y" : "N"),
				"EDIT_URL" : params["EDIT_URL"].replace("#ID#", res["ID"]).replace("#id#", res["ID"]),
				"EDIT_SHOW" : (
					(
						!res.AUX
						|| res.AUX.length <= 0
					)
					&& (
						params["RIGHTS"]["EDIT"] == "Y"
						|| params["RIGHTS"]["EDIT"] == "ALL"
						|| (
							params["RIGHTS"]["EDIT"] == "OWN"
							&& BX.message("USER_ID") == res["AUTHOR"]["ID"]
						)
					)
						? "Y"
						: "N"
				),
				"MODERATE_URL" : params["MODERATE_URL"].replace("#ID#", res["ID"]).replace("#id#", res["ID"]),
				"MODERATE_SHOW" : (params["RIGHTS"]["MODERATE"] == "Y" || params["RIGHTS"]["MODERATE"] == "ALL" ||
					params["RIGHTS"]["MODERATE"] == "OWN" && BX.message("USER_ID") == res["AUTHOR"]["ID"] ? "Y" : "N"),
				"DELETE_URL" : params["DELETE_URL"].replace("#ID#", res["ID"]).replace("#id#", res["ID"]),
				"DELETE_SHOW" : (params["RIGHTS"]["DELETE"] == "Y" || params["RIGHTS"]["DELETE"] == "ALL" ||
					params["RIGHTS"]["DELETE"] == "OWN" && BX.message("USER_ID") == res["AUTHOR"]["ID"] ? "Y" : "N"),
				"CREATETASK_SHOW" : (
					(!res.AUX || res.AUX.length <= 0)
					&& params["RIGHTS"]["CREATETASK"] == "Y"
						? "Y"
						: "N"
				),
				"BEFORE_HEADER" : res['BEFORE_HEADER'],
				"BEFORE_ACTIONS" : res['BEFORE_ACTIONS'],
				"AFTER_ACTIONS" : res['AFTER_ACTIONS'],
				"AFTER_HEADER" : res['AFTER_HEADER'],
				"BEFORE" : res['BEFORE'],
				"AFTER" : res['AFTER'],
				"BEFORE_RECORD" : res['BEFORE_RECORD'],
				"AFTER_RECORD" : res['AFTER_RECORD'],
				"AUTHOR_ID" : res["AUTHOR"]["ID"],
				"AUTHOR_AVATAR_IS" : (!!res["AUTHOR"]["AVATAR"] ? "Y" : "N"),
				"AUTHOR_AVATAR" : (!!res["AUTHOR"]["AVATAR"] ? res["AUTHOR"]["AVATAR"] : '/bitrix/images/1.gif'),
				"AUTHOR_AVATAR_BG" : (!!res["AUTHOR"]["AVATAR"] ? "background-image:url('" + res["AUTHOR"]["AVATAR"] + "')" : ''),
				"AUTHOR_URL" : params["AUTHOR_URL"].
					replace("#ID#", res["ID"]).
					replace("#id#", res["ID"]).
					replace("#USER_ID#", res["AUTHOR"]["ID"]).
					replace("#user_id#", res["AUTHOR"]["ID"]) + (
						typeof res["AUTHOR"]["EXTERNAL_AUTH_ID"] != 'undefined'
						&& res["AUTHOR"]["EXTERNAL_AUTH_ID"] == 'email'
						&& typeof params["AUTHOR_URL_PARAMS"] != 'undefined'
							? (params["AUTHOR_URL"].indexOf("?") >= 0 ? '&' : '?') + 'entityType=' + params["AUTHOR_URL_PARAMS"]["entityType"] + '&entityId=' + params["AUTHOR_URL_PARAMS"]["entityId"]
							: ''
					),
				"AUTHOR_NAME" : BX.formatName(res["AUTHOR"], params["NAME_TEMPLATE"], params["SHOW_LOGIN"]),
				"AUTHOR_EXTRANET_STYLE" : authorStyle,
				"VOTE_ID" : (res["RATING"] && res["RATING"]["VOTE_ID"] ? res["RATING"]["VOTE_ID"] : ""),
				"AUTHOR_PERSONAL_GENDER" : (BX.type.isNotEmptyString(res["AUTHOR"]["PERSONAL_GENDER"]) ? res["AUTHOR"]["PERSONAL_GENDER"] : ''),
				"AUTHOR_TOOLTIP_PARAMS" : (typeof res["AUTHOR_TOOLTIP_PARAMS"] != 'undefined' ? res["AUTHOR_TOOLTIP_PARAMS"] : '{}'),
				"background:url('') no-repeat center;" : "",
				"LIKE_REACT" : (!!res["LIKE_REACT"] ? res["LIKE_REACT"] : ''),
				"POST_ENTITY_TYPE" : (!!res["POST_CONTENT_TYPE_ID"] ? res["POST_CONTENT_TYPE_ID"] : ''),
				"COMMENT_ENTITY_TYPE" : (!!res["COMMENT_CONTENT_TYPE_ID"] ? res["COMMENT_CONTENT_TYPE_ID"] : '')
			};
		}
		else
		{
			for (ii in replacement)
			{
				if (replacement.hasOwnProperty(ii))
				{
					replacement[ii] = (!!data[ii] ? data[ii] : replacement[ii]);
				}
			}
		}
		for (ii in replacement)
		{
			if (replacement.hasOwnProperty(ii))
			{
				replacement[ii] = (!!replacement[ii] ? replacement[ii] : '');
			}
		}
		replacement["SHOW_POST_FORM"] = (BX('record-' + replacement["ENTITY_XML_ID"] + '-0-placeholder') ? "Y" : "N");
		for (var ij in replacement)
		{
			if (replacement.hasOwnProperty(ij))
			{
				txt = txt.replace(new RegExp('#' + ij + '#', "g"), replacement[ij]);
			}
		}
		return txt.replace("background:url('') no-repeat center;", "").replace(/\001/gi, "#");
	};

	window["fcPull"] = function(ENTITY_XML_ID, data) {
		BX.ajax({
			url: '/bitrix/components/bitrix/main.post.list/templates/.default/component_epilog.php',
			method: 'POST',
			data: {
				AJAX_POST :  "Y",
				ENTITY_XML_ID : ENTITY_XML_ID,
				MODE : "PUSH&PULL",
				sessid : BX.bitrix_sessid(),
				DATA : data
			}
		});
	};

	var newCommentsToCheckForReading = { data : [], screen : {}, timeout : 0 },
		traceForReading = function(id) {
		newCommentsToCheckForReading.data.push(id);
		newCommentsToCheckForReading.screen = (newCommentsToCheckForReading.screen || {
			scrollTop : BX.GetWindowScrollPos().scrollTop,
			time : new Date().getTime()
		});
		newCommentsToCheckForReading.screen["checked"] = false;
		newCommentsToCheckForReading.timeout = (newCommentsToCheckForReading.timeout || setTimeout(markReadComments, 1000));
	};
	BX.addCustomEvent(window, 'OnUCRecordHasDrawn', function(ENTITY_XML_ID, id){traceForReading(id);});

	var markReadComments = function() {
		var scroll = BX.GetWindowScrollPos();
		if(scroll.scrollTop != newCommentsToCheckForReading.screen["scrollTop"])
		{
			newCommentsToCheckForReading.screen["time"] = new Date().getTime();
			newCommentsToCheckForReading.screen["scrollTop"] = scroll.scrollTop;
			newCommentsToCheckForReading.screen["checked"] = false;
		}
		else if(!newCommentsToCheckForReading.screen["checked"] &&
			(new Date().getTime() - newCommentsToCheckForReading.screen["time"] > 3000))
		{
			newCommentsToCheckForReading.screen["time"] = new Date().getTime();
			newCommentsToCheckForReading.screen["checked"] = true;

			var commentsReadToCounter = 0,
				size = BX.GetWindowInnerSize(),
				res = [],
				node, pos, node1, i,
				commentsBlockNode, cornerNode;
			for (i = 0; i < newCommentsToCheckForReading.data.length; i++)
			{
				node = BX('record-' + newCommentsToCheckForReading.data[i].join('-') + '-cover');
				if (node)
				{
					pos = BX.pos(node);
					if (pos.top >= scroll.scrollTop && pos.top <= (scroll.scrollTop +size.innerHeight - 20))
					{
						BX.onCustomEvent(window, 'OnUCCommentWasRead', [newCommentsToCheckForReading.data[i], node]);
						BX.removeClass(node, 'comment-new-answer');

						commentsBlockNode = BX.findParent(node, { className: 'feed-comments-block'});
						if (commentsBlockNode)
						{
							cornerNode = BX.findChild(commentsBlockNode, {className: 'feed-com-corner'});
							if (cornerNode)
							{
								BX.addClass(cornerNode, "feed-post-block-corner-fade");
							}
						}

						node1 = BX.findChild(node, {className: 'feed-com-main-content'}, true, false);
						BX.removeClass(node1, 'feed-com-block-pointer-to-new feed-com-block-new');
						BX.addClass(node1, 'feed-com-block-read');
						commentsReadToCounter++;
					}
					else
					{
						res.push(newCommentsToCheckForReading.data[i]);
					}
				}
			}
			newCommentsToCheckForReading.data = res;
			if(commentsReadToCounter > 0)
				BX.onCustomEvent(window, 'onCounterDecrement', [commentsReadToCounter]);
		}

		if (newCommentsToCheckForReading.data.length > 0)
			newCommentsToCheckForReading.timeout = setTimeout(markReadComments, 1000);
		else
		{
			newCommentsToCheckForReading.timeout = 0;
		}
	};

	var MPLQuote = function(params) {
		this.params = params;
		this.id = params["id"];
		this.closeByEsc = !!params["closeByEsc"];
		this.autoHide = !!params["autoHide"];
		this.autoHideTimeout = (!!params["autoHideTimeout"] ? parseInt(params["autoHideTimeout"]) : 0);

		if (this.params.classEvents)
		{
			for (var eventName in this.params.classEvents)
				if (this.params.classEvents.hasOwnProperty(eventName))
					BX.addCustomEvent(this, eventName, this.params.classEvents[eventName]);
		}

		this.node = document.createElement("A");
		BX.adjust(this.node, {
			props : {
				id : this.id
			},
			style : {
				zIndex: BX.PopupWindow.getOption("popupZindex") + this.params.zIndex,
				position: "absolute",
				display: "none",
				top: "0px",
				left: "0px"
			},
			attrs : {
				"className" : "mpl-quote-block",
				href : "#"
			},
			events : this.params.events
		});

		document.body.appendChild(this.node);
	};
	MPLQuote.prototype = {
		show : function(e){
			var pos = this.getPosition(this.node, e);
			BX.adjust(this.node, {style : {top : pos.y + 'px', left : pos.x + 'px', display : 'block'}});
			BX.addClass(this.node, "mpl-quote-block-show");
			if (this.closeByEsc && !this.isCloseByEscBinded)
			{
				this.isCloseByEscBinded = BX.delegate(this._onKeyUp, this);
				BX.bind(document, "keyup", this.isCloseByEscBinded);
			}

			if (this.params.autoHide && !this.isAutoHideBinded)
			{
				setTimeout(
					BX.proxy(function() {
						BX.bind(this.node, "click", this.cancelBubble);
						this.isAutoHideBinded = BX.delegate(this.hide, this);
						BX.bind(document, "click", this.isAutoHideBinded);
					}, this), 0
				);
			}

			if (this.autoHideTimeout > 0 && this.autoHideTimeoutInt <= 0)
			{
				if (!this.autoHideTimeoutBinded)
					this.autoHideTimeoutBinded = BX.delegate(this.hide, this);
				this.autoHideTimeoutInt = setTimeout(this.autoHideTimeoutBinded, this.autoHideTimeout);
			}
		},
		hide : function(event) {
			if (!this.isShown())
				return;

			if (event && !(BX.getEventButton(event) & BX.MSLEFT))
				return;

			this.node.style.display = "none";

			if (this.isCloseByEscBinded)
			{
				BX.unbind(document, "keyup", this.isCloseByEscBinded);
				this.isCloseByEscBinded = false;
			}

			if (this.autoHideTimeout > 0)
			{
				clearTimeout(this.autoHideTimeoutInt);
				this.autoHideTimeoutInt = 0;
			}
			setTimeout(BX.proxy(this._hide, this), 0);
		},
		_hide : function()
		{
			BX.onCustomEvent(this, "onQuoteHide", [this]);
			if (this.params.autoHide && this.isAutoHideBinded)
			{
				BX.unbind(this.node, "click", this.cancelBubble);
				BX.unbind(document, "click", this.isAutoHideBinded);
				this.isAutoHideBinded = false;
			}
			BX.remove(this.node);
		},
		getPosition : function(node, e) {
			var nodePos;
			if (e.pageX == null) {
				var doc = document.documentElement, body = document.body;
				var x = e.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
				var y = e.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
				nodePos = {x: x, y: y};
			} else {
				nodePos = {x: e.pageX, y: e.pageY};
			}
			return {'x': nodePos.x + 5, 'y':nodePos.y - 16};
		},
		isShown : function()
		{
			return this.node.style.display == "block";
		},
		cancelBubble : function(event)
		{
			if(!event)
				event = window.event;

			if (event.stopPropagation)
				event.stopPropagation();
			else
				event.cancelBubble = true;
		},
		_onKeyUp : function(event)
		{
			event = event || window.event;
			if (event.keyCode == 27)
				this.hide(event);
		}
	};

	window.mplCheckForQuote = function(e, node, ENTITY_XML_ID, author_id) {
		e = (document.all ? window.event : e);
		var text = '', range, author = null;

		if (window.getSelection) {
			range = window.getSelection();
			text = range.toString();
		} else if (document.selection) {
			range = document.selection;
			text = range.createRange().text;
		}
		if (text != "")
		{
			var endParent = BX.findParent(range.focusNode, {"tagName" : node.tagName, "className" : node.className}, node),
				startParent = BX.findParent(range.anchorNode, {"tagName" : node.tagName, "className" : node.className}, node);
			if (endParent != startParent || endParent != node) {
				text = "";
			} else {
				if (!!author_id && BX(author_id, true))
				{
					var tmp = BX(author_id, true);
					if (!!tmp && tmp.hasAttribute("bx-post-author-id"))
					{
						author = {
							id : parseInt(tmp.getAttribute("bx-post-author-id")),
							gender : tmp.getAttribute("bx-post-author-gender"),
							name : tmp.innerHTML
						}
					}
				}
			}
		}
		if (text != "") {
			BX.onCustomEvent(window, "onQuote" + ENTITY_XML_ID, [e, {text : text, author : author}]);
			return true;
		}
		return false;
	};

	window.mplReplaceUserPath = function(text) {
		if (
			typeof text != 'string'
			|| text.length <= 0
		)
		{
			return '';
		}

		if (BX('MPL_IS_EXTRANET_SITE') == 'Y')
		{
			text = text.replace('/company/personal/user/', '/extranet/contacts/personal/user/');
		}
		else
		{
			text = text.replace('/extranet/contacts/personal/user/', '/company/personal/user/');
		}

		text = text.replace(
			new RegExp("[\\w\/]*\/mobile\/users\/\\?user_id=(\\d+)", 'igm'),
			(
				BX('MPL_IS_EXTRANET_SITE') == 'Y'
					? '/extranet/contacts/personal/user/$1/'
					: '/company/personal/user/$1/'
			)
		);

		return text;
	};

	BX.onCustomEvent("main.post.list/default", ["script.js"]);
})();

Zerion Mini Shell 1.0