Your IP : 3.141.32.16


Current Path : /var/www/www-root/data/www/www.monolith-realty.ru/bitrix/js/fileman/html_editor/
Upload File :
Current File : /var/www/www-root/data/www/www.monolith-realty.ru/bitrix/js/fileman/html_editor/html-snippets.js

/**
 * Bitrix HTML Editor 3.0
 * Date: 24.04.13
 * Time: 4:23
 *
 * Snippets class
 */
(function()
{
function __runsnips()
{
	function BXEditorSnippets(editor)
	{
		this.editor = editor;
		this.listLoaded = false;
		this.snippets = this.editor.config.snippets;
		this.HandleList();
		this.Init();
	}

	BXEditorSnippets.prototype = {
		Init: function()
		{
			BX.addCustomEvent(this.editor, "OnApplySiteTemplate", BX.proxy(this.OnTemplateChanged, this));
		},

		SetSnippets: function(snippets)
		{
			this.snippets =
				this.editor.config.snippets =
					this.editor.snippetsTaskbar.snippets = snippets;
			this.HandleList();
		},

		GetList: function()
		{
			return this.snippets[this.editor.GetTemplateId()];
		},

		HandleList: function()
		{
			var
				i,
				items = this.GetList().items;
			if (items)
			{
				for (i in items)
				{
					if (items.hasOwnProperty(i))
					{
						items[i].key = items[i].path.replace('/', ',');
					}
				}
			}
		},

		ReloadList: function(clearCache)
		{
			this.editor.snippetsTaskbar.ClearSearchResult();
			var _this = this;
			this.editor.Request({
				getData: this.editor.GetReqData('load_snippets_list',
					{
						site_template: this.editor.GetTemplateId(),
						clear_cache: clearCache ? 'Y' : 'N'
					}
				),
				handler: function(res)
				{
					if (res.result)
					{
						_this.SetSnippets(res.snippets);
						_this.RebuildAll();
					}
				}
			});
		},

		FetchPlainListOfCategories: function(list, level, result)
		{
			var i, l = list.length;
			for (i = 0; i < l; i++)
			{
				result.push({
					level: level,
					key: list[i].key,
					section: list[i].section
				});

				if (list[i].children && list[i].children.length > 0)
				{
					this.FetchPlainListOfCategories(list[i].children, level + 1, result);
				}
			}
		},

		AddNewCategory: function(params)
		{
			var _this = this;
			this.editor.Request({
				getData: this.editor.GetReqData('snippet_add_category',
					{
						site_template: this.editor.GetTemplateId(),
						category_name: params.name,
						category_parent: params.parent
					}
				),
				handler: function(res)
				{
					if (res.result)
					{
						_this.SetSnippets(res.snippets);
						_this.RebuildAll();
					}
				}
			});
		},

		RemoveCategory: function(params)
		{
			var _this = this;
			this.editor.Request({
				getData: this.editor.GetReqData('snippet_remove_category',
					{
						site_template: this.editor.GetTemplateId(),
						category_path: params.path
					}
				),
				handler: function(res)
				{
					if (res.result)
					{
						_this.SetSnippets(res.snippets);
						_this.RebuildAll();
					}
				}
			});
		},

		RenameCategory: function(params)
		{
			var _this = this;
			this.editor.Request({
				getData: this.editor.GetReqData('snippet_rename_category',
					{
						site_template: this.editor.GetTemplateId(),
						category_path: params.path,
						category_new_name: params.newName
					}
				),
				handler: function(res)
				{
					if (res.result)
					{
						_this.SetSnippets(res.snippets);
						_this.RebuildAll();
					}
				}
			});
		},

		SaveSnippet: function(params)
		{
			var _this = this;
			this.editor.Request({
				postData: this.editor.GetReqData('edit_snippet',
					{
						site_template: this.editor.GetTemplateId(),
						path: params.path.replace(',', '/'),
						name: params.name,
						code: params.code,
						description: params.description,
						current_path: params.currentPath
					}
				),
				handler: function(res)
				{
					if (res.result)
					{
						_this.SetSnippets(res.snippets);
						_this.RebuildAll();
					}
				}
			});
		},

		RemoveSnippet: function(params)
		{
			var _this = this;
			this.editor.Request({
				getData: this.editor.GetReqData('remove_snippet',
					{
						site_template: this.editor.GetTemplateId(),
						path: params.path.replace(',', '/')
					}
				),
				handler: function(res)
				{
					if (res.result)
					{
						_this.SetSnippets(res.snippets);
						_this.RebuildAll();
					}
				}
			});
		},

		RebuildAll: function()
		{
			var snippetsCategories = this.editor.GetDialog('snippetsCategories');
			if (snippetsCategories && snippetsCategories.IsOpen())
			{
				snippetsCategories.DisplayAddForm(false);
				snippetsCategories.BuildTree(this.GetList().groups);
			}

			// Build structure
			if (this.snippets[this.editor.GetTemplateId()] && this.editor.snippetsTaskbar)
			{
				this.editor.snippetsTaskbar.BuildTree(this.snippets[this.editor.GetTemplateId()].groups, this.snippets[this.editor.GetTemplateId()].items);
			}

			var editSnippet = this.editor.GetDialog('editSnippet');
			if (editSnippet && editSnippet.IsOpen())
			{
				editSnippet.SetCategories();
			}
		},

		OnTemplateChanged: function()
		{
			this.ReloadList(false);
		}
	};

	function SnippetsControl(editor)
	{
		// Call parrent constructor
		SnippetsControl.superclass.constructor.apply(this, arguments);

		this.id = 'snippets';
		this.snippets = this.editor.config.snippets;
		this.templateId = this.editor.templateId;
		this.title = BX.message('BXEdSnippetsTitle');
		this.searchPlaceholder = BX.message('BXEdSnipSearchPlaceHolder');
		this.uniqueId = 'taskbar_' + this.editor.id + '_' + this.id;

		this.Init();
	}

	BX.extend(SnippetsControl, window.BXHtmlEditor.Taskbar);

	SnippetsControl.prototype.Init = function()
	{
		this.BuildSceleton();

		// Build structure
		if (this.snippets[this.templateId])
		{
			this.BuildTree(this.snippets[this.templateId].groups, this.snippets[this.templateId].items);
		}

		var _this = this;
		_this.editor.phpParser.AddBxNode('snippet_icon',
			{
				Parse: function(params)
				{
					return params.code || '';
				}
			}
		);
	};

	SnippetsControl.prototype.GetMenuItems = function()
	{
		var _this = this;

		return [
			{
				text : BX.message('BXEdAddSnippet'),
				title : BX.message('BXEdAddSnippet'),
				className : "",
				onclick: function()
				{
					_this.editor.GetDialog('editSnippet').Show();
					BX.PopupMenu.destroy(_this.uniqueId + "_menu");
				}
			},
			{
				text : BX.message('RefreshTaskbar'),
				title : BX.message('RefreshTaskbar'),
				className : "",
				onclick: function()
				{
					_this.editor.snippets.ReloadList(true);
					BX.PopupMenu.destroy(_this.uniqueId + "_menu");
				}
			},
			{
				text : BX.message('BXEdManageCategories'),
				title : BX.message('BXEdManageCategories'),
				className : "",
				onclick: function()
				{
					_this.editor.GetDialog('snippetsCategories').Show();
					BX.PopupMenu.destroy(_this.uniqueId + "_menu");
				}
			}
		];
	};

	SnippetsControl.prototype.HandleElementEx = function(wrap, dd, params)
	{
		this.editor.SetBxTag(dd, {tag: "snippet_icon", params: params});
		wrap.title = params.description || params.title;

		var editBut = wrap.appendChild(BX.create("SPAN", {props: {className: "bxhtmled-right-side-item-edit-btn", title: BX.message('BXEdSnipEdit')}}));
		this.editor.SetBxTag(editBut, {tag: "_snippet", params: params});

		BX.bind(editBut, 'mousedown', BX.proxy(this.EditSnippet, this));
	};

	SnippetsControl.prototype.EditSnippet = function(e)
	{
		var target = e.target || e.srcElement;

		function _editDeactivate()
		{
			BX.removeClass(target, 'bxhtmled-right-side-item-edit-btn-active');
			BX.unbind(document, 'mouseup', _editDeactivate);
		}

		BX.addClass(target, 'bxhtmled-right-side-item-edit-btn-active');
		BX.bind(document, 'mouseup', _editDeactivate);

		this.editor.GetDialog('editSnippet').Show(target);
		return BX.PreventDefault(e);
	};

	SnippetsControl.prototype.BuildTree = function(sections, elements)
	{
		// Call parent method
		SnippetsControl.superclass.BuildTree.apply(this, arguments);
		if ((!sections || sections.length == 0) && (!elements || elements.length == 0))
		{
			this.pTreeCont.appendChild(BX.create('DIV', {props: {className: 'bxhtmled-no-snip'}, text: BX.message('BXEdSnipNoSnippets')}));
		}
	};

	function EditSnippetDialog(editor, params)
	{
		params = params || {};
		params.id = 'bx_edit_snippet';
		params.width =  600;
		this.zIndex = 3007;
		this.id = 'edit_snippet';

		// Call parrent constructor
		EditSnippetDialog.superclass.constructor.apply(this, [editor, params]);
		this.SetContent(this.Build());
		BX.addClass(this.oDialog.DIV, "bx-edit-snip-dialog");
		BX.addCustomEvent(this, "OnDialogSave", BX.proxy(this.Save, this));
	}
	BX.extend(EditSnippetDialog, window.BXHtmlEditor.Dialog);

	EditSnippetDialog.prototype.Save = function()
	{
		this.editor.snippets.SaveSnippet(
			{
				path: this.pCatSelect.value,
				name: this.pName.value,
				code: this.pCode.value,
				description: this.pDesc.value,
				currentPath: this.currentPath
			}
		);
	};

	EditSnippetDialog.prototype.Build = function()
	{
		this.pCont = BX.create('DIV', {props: {className: 'bxhtmled-edit-snip-cnt'}});

		function addRow(tbl, c1Par, bAdditional)
		{
			var r, c1, c2;

			r = tbl.insertRow(-1);
			if (bAdditional)
			{
				r.className = 'bxhtmled-add-row';
			}

			c1 = r.insertCell(-1);
			c1.className = 'bxhtmled-left-c';

			if (c1Par && c1Par.label)
			{
				c1.appendChild(BX.create('LABEL', {props: {className: c1Par.required ? 'bxhtmled-req' : ''},text: c1Par.label})).setAttribute('for', c1Par.id);
			}

			c2 = r.insertCell(-1);
			c2.className = 'bxhtmled-right-c';
			return {row: r, leftCell: c1, rightCell: c2};
		}

		this.arTabs = [
			{
				id: 'base',
				name: BX.message('BXEdSnipBaseSettings')
			},
			{
				id: 'additional',
				name: BX.message('BXEdSnipAddSettings')
			}
		];


		var res = this.BuildTabControl(this.pCont, this.arTabs);
		this.arTabs = res.tabs;

		// Base params
		var
			_this = this,
			r, c,
			pBaseTbl = BX.create('TABLE', {props: {className: 'bxhtmled-dialog-tbl'}}),
			pAddTbl = BX.create('TABLE', {props: {className: 'bxhtmled-dialog-tbl'}});

		// Name
		r = addRow(pBaseTbl, {label: BX.message('BXEdSnipName') + ':', id: this.id + '-name', required: true});
		this.pName = r.rightCell.appendChild(BX.create('INPUT', {props:
		{
			type: 'text',
			id: this.id + '-name',
			placeholder: BX.message('BXEdSnipNamePlaceHolder')
		}}));

		// Code
		r = addRow(pBaseTbl, {label: BX.message('BXEdSnipCode') + ':', id: this.id + '-code', required: true});
		this.pCode = r.rightCell.appendChild(BX.create('TEXTAREA', {
			props:
			{
				id: this.id + '-code',
				placeholder: BX.message('BXEdSnipCodePlaceHolder')
			},
			style:
			{
				height: '250px'
			}
		}));
		this.arTabs[0].cont.appendChild(pBaseTbl);

		// Category
		r = addRow(pAddTbl, {label: BX.message('BXEdSnipCategory') + ':', id: this.id + '-category'});
		this.pCatSelect = r.rightCell.appendChild(BX.create('SELECT', {
			props: {
				id: this.id + '-category'
			},
			style: {
				maxWidth: '280px'
			}
		}));
		this.pCatManageBut = r.rightCell.appendChild(BX.create('INPUT', {props:
		{
			className: 'bxhtmled-manage-cat',
			type: 'button',
			value: '...',
			title: BX.message('BXEdManageCategories')
		}}));
		this.pCatManageBut.onclick = function()
		{
			_this.editor.GetDialog('snippetsCategories').Show();
		};

		// Description
		r = addRow(pAddTbl, {label: BX.message('BXEdSnipDescription') + ':', id: this.id + '-hint'});
		this.pDesc = r.rightCell.appendChild(BX.create('TEXTAREA', {props:
		{
			id: this.id + '-hint',
			placeholder: BX.message('BXEdSnipDescriptionPlaceholder')
		}}));
		this.arTabs[1].cont.appendChild(pAddTbl);

		// Delete button
		r = BX.adjust(pAddTbl.insertRow(-1), {style: {display: 'none'}});
		c = BX.adjust(r.insertCell(-1), {props: {className: 'bxhtmled--centr-c'}, attrs: {colsPan: 2}});
		c.appendChild(BX.create("INPUT", {
			props:{className: '', type: 'button', value: BX.message('BXEdSnipRemove')},
			events: {
				'click' : function()
				{
					if (confirm(BX.message('BXEdSnipRemoveConfirm')))
					{
						_this.editor.snippets.RemoveSnippet({path: _this.currentPath});
						_this.Close();
					}
				}
			}
		}));
		this.delSnipRow = r;

		return this.pCont;
	};

	EditSnippetDialog.prototype.Show = function(snippetNode)
	{
		this.SetTitle(BX.message('BXEdEditSnippetDialogTitle'));
		this.SetCategories();

		var
			params = {},
			bxTag = this.editor.GetBxTag(snippetNode),
			bNew = !bxTag || !bxTag.tag;

		if (!bNew)
		{
			params = bxTag.params;
			this.currentPath = (params.path == '' ? '' : params.path.replace(',', '/') + '/') + params.name;
			this.delSnipRow.style.display = '';
		}
		else
		{
			this.currentPath = '';
			this.delSnipRow.style.display = 'none';
		}

		this.pName.value = params.title || '';
		this.pCode.value = params.code || '';
		this.pDesc.value = params.description || '';
		this.pCatSelect.value = params.key || '';

		// Call parrent Dialog.Show()
		EditSnippetDialog.superclass.Show.apply(this, arguments);
	};

	EditSnippetDialog.prototype.SetCategories = function()
	{
		// Clear select
		this.pCatSelect.options.length = 0;
		this.pCatSelect.options.add(new Option(BX.message('BXEdSnippetsTitle'), '', true, true));

		var
			name, delim = ' . ', j, i,
			plainList = [],
			list = this.editor.snippetsTaskbar.GetSectionsTreeInfo();

		this.editor.snippets.FetchPlainListOfCategories(list, 1, plainList);

		for (i = 0; i < plainList.length; i++)
		{
			name = '';
			for (j = 0; j < plainList[i].level; j++)
			{
				name += delim;
			}
			name += plainList[i].section.name;

			this.pCatSelect.options.add(new Option(name, plainList[i].key, false, false));
		}
	};

	function SnippetsCategoryDialog(editor, params)
	{
		params = params || {};
		params.id = 'bx_snippets_cats';
		//params.height = 600;
		params.width =  400;
		params.zIndex = 3010;

		this.id = 'snippet_categories';

		// Call parrent constructor
		SnippetsCategoryDialog.superclass.constructor.apply(this, [editor, params]);
		this.SetContent(this.Build());

		this.oDialog.ClearButtons();
		this.oDialog.SetButtons([this.oDialog.btnClose]);

		BX.addClass(this.oDialog.DIV, "bx-edit-snip-cat-dialog");
		//BX.addCustomEvent(this, "OnDialogSave", BX.proxy(this.Save, this));
	}
	BX.extend(SnippetsCategoryDialog, window.BXHtmlEditor.Dialog);

	SnippetsCategoryDialog.prototype.Save = function()
	{
	};

	SnippetsCategoryDialog.prototype.Build = function()
	{
		this.pCont = BX.create('DIV', {props: {className: 'bxhtmled-snip-cat-cnt'}});

		// Add category button & wrap
		this.pAddCatWrap = this.pCont.appendChild(BX.create('DIV', {props: {className: 'bxhtmled-snip-cat-add-wrap'}}));
		this.pAddCatBut = this.pAddCatWrap.appendChild(BX.create('SPAN', {props: {className: 'bxhtmled-snip-cat-add-but'}, text: BX.message('BXEdSnipCatAdd')}));
		BX.bind(this.pAddCatBut, 'click', BX.proxy(this.DisplayAddForm, this));

		var tbl = this.pAddCatWrap.appendChild(BX.create('TABLE', {props: {className: 'bxhtmled-snip-cat-add-tbl'}}));
		var r, c;
		r = tbl.insertRow(-1);
		c = r.insertCell(-1);
		c.className = 'bxhtmled-left-c';
		c.appendChild(BX.create('LABEL', {props: {className: 'bxhtmled-req'}, attrs: {'for': this.id + '-cat-name'}, text: BX.message('BXEdSnipCatAddName') + ':'}));

		c = r.insertCell(-1);
		c.className = 'bxhtmled-right-c';
		this.pCatName = c.appendChild(BX.create('INPUT', {props:
		{
			type: 'text',
			id: this.id + '-cat-name'
		}}));

		r = tbl.insertRow(-1);
		c = r.insertCell(-1);
		c.className = 'bxhtmled-left-c';
		c.appendChild(BX.create('LABEL', {props: {className: 'bxhtmled-req'}, attrs: {'for': this.id + '-cat-par'}, text: BX.message('BXEdSnipParCategory') + ':'}));

		c = r.insertCell(-1);
		c.className = 'bxhtmled-right-c';
		this.pCatPar = c.appendChild(BX.create('SELECT', {props:{id: this.id + '-cat-par'}}));

		r = tbl.insertRow(-1);
		c = r.insertCell(-1);
		c.colSpan = 2;
		c.style.textAlign = 'center';

		this.pSaveCat = c.appendChild(BX.create('INPUT', {props:
		{
			type: 'button',
			className: 'adm-btn-save bxhtmled-snip-save-but',
			value: BX.message('BXEdSnipCatAddBut')
		}}));
		BX.bind(this.pSaveCat, 'click', BX.proxy(this.AddNewCategory, this));

		// Category List
		this.pCatListWrap = this.pCont.appendChild(BX.create('DIV', {props: {className: 'bxhtmled-snip-cat-list-wrap'}}));

		return this.pCont;
	};

	SnippetsCategoryDialog.prototype.AddNewCategory = function()
	{
		this.editor.snippets.AddNewCategory({
			name: this.pCatName.value,
			parent: this.pCatPar.value,
			siteTemplate: ''
		});
	};


	SnippetsCategoryDialog.prototype.DisplayAddForm = function(bShow)
	{
		if (this.animation)
			this.animation.stop();

		if (bShow !== true && bShow !== false)
			bShow = !this.bAddCatOpened;

		bShow = bShow !== false;

		if (this.bAddCatOpened !== bShow)
		{
			if (bShow)
			{
				//jsDD.Disable();
				this.DisableKeyCheck();
				BX.bind(this.pCatName, 'keydown', BX.proxy(this.AddCatKeydown, this));

				this.SetParentCategories();
				this.animationStartHeight = 25;
				this.animationEndHeight = 160;
				BX.focus(this.pCatName);
			}
			else
			{
				//jsDD.Enable();
				this.EnableKeyCheck();
				BX.unbind(this.pCatName, 'keydown', BX.proxy(this.AddCatKeydown, this));
				this.animationStartHeight = 160;
				this.animationEndHeight = 25;
			}

			var _this = this;
			this.animation = new BX.easing({
				duration : 300,
				start : {height: this.animationStartHeight},
				finish : {height: this.animationEndHeight},
				transition : BX.easing.makeEaseOut(BX.easing.transitions.quart),

				step : function(state)
				{
					_this.pAddCatWrap.style.height = state.height + 'px';
				},

				complete : BX.proxy(function()
				{
					this.animation = null;
				}, this)
			});

			this.animation.animate();
			this.bAddCatOpened = bShow;
		}
		this.ResetAddCategoryForm();
	};

	SnippetsCategoryDialog.prototype.SetParentCategories = function()
	{
		// Clear select
		this.pCatPar.options.length = 0;
		this.pCatPar.options.add(new Option(BX.message('BXEdSnippetsTitle'), '', true, true));

		var
			name, delim = ' . ', j, i,
			plainList = [],
			list = this.editor.snippetsTaskbar.GetSectionsTreeInfo();

		this.editor.snippets.FetchPlainListOfCategories(list, 1, plainList);

		for (i = 0; i < plainList.length; i++)
		{
			if (plainList[i].level < 2)
			{
				name = '';
				for (j = 0; j < plainList[i].level; j++)
				{
					name += delim;
				}
				name += plainList[i].section.name;

				this.pCatPar.options.add(new Option(name, plainList[i].key, false, false));
			}
		}
	};

	SnippetsCategoryDialog.prototype.Show = function()
	{
		this.SetTitle(BX.message('BXEdManageCategoriesTitle'));

		this.BuildTree(this.editor.snippets.GetList().groups);
		this.bAddCatOpened = false;
		this.pAddCatWrap.style.height = '';

		// Call parrent Dialog.Show()
		SnippetsCategoryDialog.superclass.Show.apply(this, arguments);
	};

	SnippetsCategoryDialog.prototype.BuildTree = function(sections)
	{
		BX.cleanNode(this.pCatListWrap);
		this.catIndex = {};
		//this.sections = [];
		for (var i = 0; i < sections.length; i++)
		{
			this.BuildCategory(sections[i]);
		}
	};

	SnippetsCategoryDialog.prototype.BuildCategory = function(section)
	{
		var
			_this = this,
			parentCont = this.GetCategoryContByPath(section.path),
			pGroup = BX.create("DIV", {props: {className: "bxhtmled-tskbr-sect-outer"}}),
			pGroupTitle = pGroup.appendChild(BX.create("DIV", {props: {className: "bxhtmled-tskbr-sect"}})),
			icon = pGroupTitle.appendChild(BX.create("SPAN", {props: {className: "bxhtmled-tskbr-sect-icon bxhtmled-tskbr-sect-icon-open"}})),
			title = pGroupTitle.appendChild(BX.create("SPAN", {props: {className: "bxhtmled-tskbr-sect-title"}, text: section.title || section.name})),
			renameInput = pGroupTitle.appendChild(BX.create("INPUT", {props: {
				type: 'text',
				className: "bxhtmled-tskbr-name-input"
			}})),
			childCont = pGroup.appendChild(BX.create("DIV", {props: {className: "bxhtmled-tskb-child"}, style: {display: "block"}})),
			pIconEdit = pGroupTitle.appendChild(BX.create("SPAN", {props: {className: "bxhtmled-right-side-item-edit-btn", title: BX.message('BXEdSnipCatEdit')}})),
			pIconDel = pGroupTitle.appendChild(BX.create("SPAN", {props: {className: "bxhtmled-right-side-item-del-btn", title: BX.message('BXEdSnipCatDelete')}}));

		BX.bind(pIconDel, 'mousedown', BX.proxy(this.DisableDD(), this));
		BX.bind(pIconEdit, 'mousedown', BX.proxy(this.DisableDD(), this));
		BX.bind(renameInput, 'mousedown', BX.proxy(this.DisableDD(), this));

		// Drop category
		BX.bind(pIconDel, 'click', function()
			{
				if (confirm(BX.message('BXEdDropCatConfirm')))
				{
					var path = section.path == '' ? section.name : section.path + '/' + section.name;
					_this.editor.snippets.RemoveCategory({path: path});
				}
			}
		);

		// Rename category
		BX.bind(pIconEdit, 'click', function()
			{
				_this.ShowRename(true, section, renameInput, pGroupTitle);
			}
		);

		childCont.style.display = 'block';

		var key = section.path == '' ? section.name : section.path + ',' + section.name;
		var depth = section.path == '' ? 0 : 1;

		var sect = {
			key: key,
			children: [],
			section: section
		};

		this.catIndex[key] = {
			icon: icon,
			outerCont: pGroup,
			cont: pGroupTitle,
			childCont: childCont,
			sect: sect
		};

		if (depth > 0)
		{
			BX.addClass(pGroupTitle, "bxhtmled-tskbr-sect-" + depth);
			BX.addClass(icon, "bxhtmled-tskbr-sect-icon-" + depth);
		}

		parentCont.appendChild(pGroup);
	};

	SnippetsCategoryDialog.prototype.ShowRename = function(bShow, section, renameInput, pGroupTitle)
	{
		bShow = bShow !== false;
		if (bShow)
		{
			BX.addClass(pGroupTitle, 'bxhtmled-tskbr-sect-rename');
			this.currentRenamedCat = {
				section: section,
				renameInput: renameInput,
				pGroupTitle: pGroupTitle
			};
			renameInput.value = section.name;
			//jsDD.Disable();
			this.DisableKeyCheck();
			BX.bind(renameInput, 'keydown', BX.proxy(this.RenameKeydown, this));
			BX.focus(renameInput);
			renameInput.select();
		}
		else
		{
			BX.removeClass(pGroupTitle, 'bxhtmled-tskbr-sect-rename');
			BX.unbind(renameInput, 'keydown', BX.proxy(this.RenameKeydown, this));
			//jsDD.Enable();
			this.EnableKeyCheck();
			this.currentRenamedCat = false;
		}
	};

	SnippetsCategoryDialog.prototype.RenameKeydown = function(e)
	{
		if (e && this.currentRenamedCat)
		{
			if (e.keyCode == this.editor.KEY_CODES['escape'])
			{
				this.ShowRename(false, this.currentRenamedCat.section, this.currentRenamedCat.renameInput, this.currentRenamedCat.pGroupTitle);
				BX.PreventDefault(e);
			}
			else if (e.keyCode == this.editor.KEY_CODES['enter'])
			{
				var
					newName = BX.util.trim(this.currentRenamedCat.renameInput.value),
					section = this.currentRenamedCat.section,
					path = section.path == '' ? section.name : section.path + '/' + section.name;

				if (newName !== '')
				{
					this.editor.snippets.RenameCategory(
					{
						path: path,
						newName: newName
					});
				}
				this.ShowRename(false, this.currentRenamedCat.section, this.currentRenamedCat.renameInput, this.currentRenamedCat.pGroupTitle);
				BX.PreventDefault(e);
			}
		}
	};

	SnippetsCategoryDialog.prototype.AddCatKeydown = function(e)
	{
		if (e && this.bAddCatOpened)
		{
			if (e.keyCode == this.editor.KEY_CODES['escape'])
			{
				this.DisplayAddForm(false);
				BX.PreventDefault(e);
			}
			else if (e.keyCode == this.editor.KEY_CODES['enter'])
			{
				this.AddNewCategory();
				BX.PreventDefault(e);
			}
		}
	};

	SnippetsCategoryDialog.prototype.DisableDD = function()
	{
		jsDD.Disable();
		BX.bind(document, 'mouseup', BX.proxy(this.EnableDD, this));
	};

	SnippetsCategoryDialog.prototype.EnableDD = function()
	{
		jsDD.Enable();
		BX.unbind(document, 'mouseup', BX.proxy(this.EnableDD, this));
	};

	SnippetsCategoryDialog.prototype.OnDragFinish = function()
	{
	};

	SnippetsCategoryDialog.prototype.GetCategoryContByPath = function(path)
	{
		if (path == '' || !this.catIndex[path])
		{
			return this.pCatListWrap;
		}
		else
		{
			return this.catIndex[path].childCont;
		}
	};

	SnippetsCategoryDialog.prototype.ResetAddCategoryForm = function(path)
	{
		this.pCatName.value = '';
		this.pCatPar.value = '';
	};


	window.BXHtmlEditor.SnippetsControl = SnippetsControl;
	window.BXHtmlEditor.BXEditorSnippets = BXEditorSnippets;
	window.BXHtmlEditor.dialogs.editSnippet = EditSnippetDialog;
	window.BXHtmlEditor.dialogs.snippetsCategories = SnippetsCategoryDialog;
}

	if (window.BXHtmlEditor && window.BXHtmlEditor.dialogs)
		__runsnips();
	else
		BX.addCustomEvent(window, "OnEditorBaseControlsDefined", __runsnips);

})();