Your IP : 172.28.240.42


Current Path : /var/www/html/clients/amz.e-nk.ru/bitrix/admin/htmleditor2/
Upload File :
Current File : /var/www/html/clients/amz.e-nk.ru/bitrix/admin/htmleditor2/Copy of bars.js

/*
Êëàññ îáðàáîòêè òóëáàðñåòîâ.
Êàæäûé òóëáàðñåò - div ñ àáñîëþòíûì ïîçèöèîíèðîâàíèåì.
Ýòî óáèðàåò ÷ðåçìåðíóþ âëîæåííîñòü òàáëèö è óñêîðÿåò ðåàêöèþ íà ñîáûòèÿ
	pX, pY - êîîðëèíàòû âåðõíåãî ëåâîãî óãëà òóëáàðñåòà.
	bVertical - ïîëîæåíèå òóëáàðñåòà
	pLength - â çàâèñèìîñòè îò ïîëîæåíèÿ òóëáàðñåòà îïðåäåëÿåò èëè äëèíó èëè âûñîòó.

*/

/*
êëàññ îáðàáîòêè òóëáàðñåòîâ

pWnd - óêàçàòåëü íà ÿ÷åéêó òàáëèöû <td> â êîòîðîì íàõîäèòñÿ òóëáàðñåò
bVertical - òóëáàðñåò äëÿ âåðòèêàëüíûõ èëè ãîðèçîíòàëüíûõ òóëáàðîâ

*/
function BXToolbarSet(pColumn, pMainObj, bVertical)
{
	ar_BXToolbarSetS.push(this);
	this.className = 'BXToolbarSet';
	pColumn.unselectable = "on";
	this.pWnd = pColumn;
	this.pMainObj = pMainObj;
	this.bVertical = bVertical;
	this.pWnd.className = 'bxedtoolbarset';
	if(bVertical)
	{
		pColumn.style.verticalAlign = "top";
		pColumn.innerHTML = '<img src="/bitrix/images/1.gif" width="1" height="0">';
		this.pWnd = pColumn.appendChild(this.pMainObj.pDocument.createElement("TABLE"));
		this.pWnd.unselectable = "on";
		this.pWnd.cellSpacing = 0;
		this.pWnd.cellPadding = 0;
		this.pWnd.border = 0;
		this.pWnd.insertRow(0);
		this.pParent = pColumn;
	}

	/*
	ïðîâåðÿåò - ïîïàäàåò ëè êîîðäèíàòà â îáëàñòü òóëáàðñåòà (ïëþñ ïîãðåøíîñòü ðÿäûøêîì)
	âîçâðàùàåò
		ìàññèâ:
			"row" => ñòðîêà,
			"col" => ñòîëáåö â êîòîðûé áëèæå âñåãî ïîïàäàåò êîîðäèíàòà,
			"addrow" => ïîïàëà ìåæäó äâóìÿ ñòðîêàìè òóëáàðîâ
	 èëè false åñëè îíà ñëèøêîì äàëåêî
	*/
	BXToolbarSet.prototype.HitTest = function (px, py)
	{
		//alert('HitTest');
		var delta = 3;

		var position = GetRealPos((this.bVertical ? this.pParent : this.pWnd));
		if(	position["left"] - delta < px && 
			px < position["right"] + delta && 
			position["top"] - delta < py && 
			py < position ["bottom"] + delta)
		{
			//window.status = 'L:' + position['left'] + '; T: '+position['top'] + '; R: ' + position['right'] + '; B: ' + position['bottom'] + '; px = ' + px + '; py = ' + py;
			var result = Array();
			result["row"] = 0;
			result["col"] = 0;
			result["addrow"] = false;

			// íàéäåì âñå èìåþùèåñÿ âíóòðè òóëáàðû
			var allNodes;
			if(this.bVertical)
				allNodes = this.pWnd.rows[0].cells;
			else
				allNodes = this.pWnd.childNodes;

			if(!allNodes || allNodes.length<=0)
			{
				result["addrow"] = true;
				return result;
			}

			var allCells, j;
			for(var i=0; i < allNodes.length; i++)
			{
				var toolbar_position = GetRealPos(allNodes[i]);
				if(this.bVertical)
				{
					if(toolbar_position["left"] - delta < px && px < toolbar_position["right"] + delta)
					{
						if(toolbar_position["left"] + delta > px)
						{
							result["addrow"] = true;
							result["col"] = i;
						}
						else if(toolbar_position["right"] - delta < px)
						{
							result["addrow"] = true;
							result["col"] = i+1;
						}
						else
						{
							result["col"] = i;
							allCells = allNodes[i].childNodes[0].rows;
							for(j = allCells.length-1; j > 0; j--)
							{
								var celltemp = allCells[j].cells[0];
								var celltemp_position = GetRealPos(celltemp);
								if(celltemp_position["top"] - delta < py)
								{
									result["row"] = j;
									break;
								}
							}
						}
						return result;
					}
				}
				else
				{
					// åñëè òî÷êà íàõîäèòñÿ âíóòðè òàáëèöû ïî âûñîòå
					if(toolbar_position["top"] - delta < py && py < toolbar_position["bottom"] + delta)
					{
						if(toolbar_position["top"] + delta > py)
						{
							result["addrow"] = true;
							result["row"] = i;
						}
						else if(toolbar_position["bottom"] - delta < py)
						{
							result["addrow"] = true;
							result["row"] = i + 1;
						}
						else
						{
							result["row"] = i;
							allCells = allNodes[i].rows[0].cells;
							for(j = allCells.length-1; j > 0; j--)
							{
								var cell_position = GetRealPos(allCells[j]);
								if(cell_position["left"] - delta < px)
								{
									result["col"] = j;
									return result;
								}
							}
						}
						return result;
					}
				}
			}
		}
		return false;
	}

	BXToolbarSet.prototype.__AddRow = function (id)
	{
		//alert('__AddRow');
		var t = this.pMainObj.pDocument.createElement("TABLE");
		t.id = id;
		t.cellSpacing = 0;
		t.cellPadding = 0;
		t.border = 0;
		t.unselectable = "on";
		var r = t.insertRow(0);
		return t;
	}

	/*
	Äîáàâëÿåò òóëáàð â òóëáàðñåò â çàäàííóþ ïîçèöèþ
	Ïàðàìåòðû:
		pToolbar - ññûëêà íà îáúåêò òèïà BXToolbar,
		row, col - ñòðîêà, ñòîëáåö â êîòîðûé äîáàâèòü òóëáàð,
		bAddRow - true: âñåãäà äîáàâëÿòü íîâóþ ñòðîêó íà ìåñòå col, false - ïûòàòüñÿ äîáàâëÿòü â ñòðîêó row
	Óñòàíàâëèâàåò ôëàæîê BXToolbar.bDocked, äåëàåò òóëáàð relative ñ ðîäèòåëåì â íóæíîì ìåñòå, óáèðàåò øàïêó
	è äîáàâëÿåò ñïðàâà è ñëåâà îáðàìëÿþùèå îáëàñòè.
	×òîáû îòêëåèòü òóëáàð ìåòîä BXToolbar.UnDock
	*/
	BXToolbarSet.prototype.AddToolbar = function (pToolbar, row, col, bAddRow)
	{
		pToolbar.bDocked = true;
		var pColTable = null;
		var rowIcons;
		pToolbar.SetDirection(this.bVertical);
		if(this.bVertical)
		{
			var cols = this.pWnd.rows[0].cells;
			var pRow, tTable;
			if(col>cols.length)
				col = cols.length;
			if(col >= cols.length || bAddRow)
			{
				var ctmp = this.pWnd.rows[0].insertCell(col);
				ctmp.style.verticalAlign = "top";
				tTable = ctmp.appendChild(this.pMainObj.pDocument.createElement("TABLE"));
				tTable.cellSpacing = 0;
				tTable.cellPadding = 0;
				tTable.border = 0;
				tTable.unselectable = "on";
			}
			else
			{
				tTable = cols[col].childNodes[0];
				if(tTable.clientHeight + pToolbar.pWnd.clientHeight > this.pMainObj.arConfig["height"])
				{
					tTable = null;
					return this.AddToolbar(pToolbar, row, col+1, bAddRow);
				}
			}

			if(row>tTable.rows.length)
				row = tTable.rows.length;

			pRow = tTable.insertRow(row);
			pColTable = pRow.insertCell(0);

			tTable = null;
			pRow = null;
			ctmp = null;
			cols = null;
		}
		else
		{
			var allNodes = this.pWnd.childNodes;
			//alert(allNodes.length);
			var pRowTable;
			//alert('row: '+row+'; col:'+col);
			if(row>allNodes.length)
				row = allNodes.length;
			//if(allNodes.length==0 || bAddRow)
			if(row >= allNodes.length || bAddRow)
			{
				//alert('$');
				var t = this.pMainObj.pDocument.createElement("TABLE");
				t.cellSpacing = 0;
				t.cellPadding = 0;
				t.border = 0;
				t.unselectable = "on";
				var r = t.insertRow(0);
				//t.style.border = "1px solid blue";
				
				//pMainObj.toolArea[0].increaseHeight();
				//alert(allNodes.length);
				
				if(row >= allNodes.length)
					pRowTable = this.pWnd.appendChild(t);
				else
					pRowTable = this.pWnd.insertBefore(t, allNodes[row]);
			}
			else
			{
				pRowTable = allNodes[row];
				//alert(pRowTable.clientWidth + pToolbar.pWnd.clientWidth+'::'+this.pMainObj.arConfig["width"]);
				if(pRowTable.clientWidth + pToolbar.pWnd.clientWidth > this.pMainObj.arConfig["width"])
				{
					//alert('!');
					return this.AddToolbar(pToolbar, row+1, col, bAddRow);
				}
			}
			//alert(pRowTable.nodeName);

			if(col>pRowTable.rows[0].cells.length)
				col = pRowTable.rows[0].cells.length;


			pColTable = pRowTable.rows[0].insertCell(col);

			rowIcons = pToolbar.pIconsTable.rows[0];
			rowIcons.cells[0].style.display = GetDisplStr(1);
			rowIcons.cells[rowIcons.cells.length-1].style.display = GetDisplStr(1);


			r = null;
			t = null;
			pRowTable = null;
			allNodes = null;
		}

		pToolbar.row = row;
		pToolbar.col = col;

		pToolbar.pWnd.style.position = "relative";
		pToolbar.pWnd.style.zIndex = "1";
		pToolbar.pWnd.style.left = null;
		pToolbar.pWnd.style.top = null;

		pToolbar.pTitleRow.style.display = "none";

//alert(pToolbar.pWnd.outerHTML);
//return;
		pToolbar.pWnd = pColTable.appendChild(pToolbar.pWnd);
		pToolbar.pToolbarSet = this;
		pToolbar.parentCell = pColTable;
		this.__ReCalc();

		pColTable = null;
	}

	/*
	Óäàëÿåò òóëáàð pToolbar èç òóëáàðñåòà:
		óäàëÿåò åãî èç ÿ÷åéêè òàáëèöû òóëáàðñåòà, åñëè òàáëèöà òóëáàðñåòà ïóñòàÿ, óäàëÿåò è åå.
		îáíóëÿåò BXToolbar.pToolbarSet
	*/
	BXToolbarSet.prototype.DelToolbar = function (pToolbar)
	{		
		pToolbar.parentCell.removeChild(pToolbar.pWnd);
		pToolbar.pToolbarSet = null;
		this.__ReCalc();
	}

	BXToolbarSet.prototype.__ReCalc = function ()
	{
		var allNodes;
		var i, j, pToolbar;
		if(this.bVertical)
		{
			var cols = this.pWnd.rows[0].cells;
			for(i=cols.length-1; i>=0; i--)
			{
				allNodes = cols[i].childNodes[0].rows;
				for(j=allNodes.length-1; j>=0; j--)
					if(allNodes[j].cells[0].childNodes.length<=0)
						cols[i].childNodes[0].deleteRow(j);
				if(cols[i].childNodes[0].rows.length<=0)
					this.pWnd.rows[0].deleteCell(i);
			}

			for(i=0; i<cols.length; i++)
			{
				allNodes = cols[i].childNodes[0].rows;
				for(j=0; j<allNodes.length; j++)
				{
					pToolbar = allNodes[j].cells[0].childNodes[0].pObj;
					pToolbar.row = j;
					pToolbar.col = i;
				}
			}
		}
		else
		{
			allNodes = this.pWnd.childNodes;
			for(i=allNodes.length-1; i>=0; i--) // ãîðèçîíòàëüíûå òàáëèöû (ñòðîêè)
			{
				var tbl = allNodes[i];
				for(j=tbl.rows[0].cells.length-1; j>=0; j--)
					if(tbl.rows[0].cells[j].childNodes.length<=0)
						tbl.rows[0].deleteCell(j);

				//åñëè â ñòðîêå íåò ÿ÷ååê, óäàëÿåì âñþ òàáëèöó
				if(tbl.rows[0].cells.length<=0)
				{
					this.pWnd.removeChild(tbl);
					//pMainObj.toolArea[0].decreaseHeight();
				}
			}

			for(i=0; i<allNodes.length; i++)
				for(j=0; j<allNodes[i].rows[0].cells.length; j++)
				{
					pToolbar = allNodes[i].rows[0].cells[j].childNodes[0].pObj;
					pToolbar.row = i;
					pToolbar.col = j;
				}
		}

		pToolbar = null;
		tbl = null;
		allNodes = null;
	}
}


BXToolbar.prototype.fun = function(e)
{
//		var a=xc("s");

	return;
	if(window.event)
		e = window.event;
	rpos = GetRealPos(this);
	if(Math.abs(e.clientX - rpos["left"])<3)
		this.style.cursor = 'E-resize';
	else if(Math.abs(e.clientX - rpos["right"])<3)
		this.style.cursor = 'E-resize';
	else if(Math.abs(e.clientY - rpos["top"])<3)
		this.style.cursor = 'N-resize';
	else if(Math.abs(e.clientY - rpos["bottom"])<3)
		this.style.cursor = 'N-resize';
	else
		this.style.cursor = 'default';

	if(this.drag && this.style.cursor == 'n-resize')
	{
		//alert(e.clientY - rpos["top"]);
		this.style.height = e.clientY - rpos["top"]+3;
		//alert(this.innerHTML);
	}

}



/////////////////////////////////////////////////////////////////////////////////////
// êëàññ BXToolbar - òóëáàð
//   pWnd - óêàçàòåëü íà TABLE òóëáàðà
//   bDragging - ñîñòîÿíèå ïåðåòÿãèâàíèÿ
//   bDocked - ñîñòîÿíèå - â îêíå (false) èëè ïðèñòûêîâàí (true)
//	 pTitleRow - óêàçàòåëü íà ñòðîêó <tr> â êîòîðîé íàõîäèòñÿ çàãîëîâîê òóëáàðà
//	 pIconsTable - óêàçàòåëü íà òàáëèöó <table> â ÿ÷åéêàõ êîòîðîé íàõîäÿòñÿ êíîïêè òóëáàðà
//	 pToolbarSet - óêàçàòåëü íà îáúåêò BXToolbarSet, ê êîòîðîìó ïðèêëååí òóëáàð
//	 	bVertical - âåðòèêàëüíûé èëè ãîðèçîíòàëüíûé òóëáàð
//	 	parentCell - óêàçàòåëü íà êîíêðåòíóþ ÿ÷åéêó òàáëèöû èç òóëáàðñåòà
//	 	row - íîìåð ñòðîêè â òóëáàðñåòå
//	 	col - íîìåð ñòîëáöà â òóëáàðñåòå
/////////////////////////////////////////////////////////////////////////////////////
function BXToolbar(pMainObj, title, dx, dy)
{
	ar_BXToolbarS.push(this);
	this.pMainObj = pMainObj;
	this.className = 'BXToolbar';
	this.id = Math.random();
	this.bVertical = false;
	this.title = title;
	this.arButtons = Array();

	var obj = this;
	var tableToolbar = pMainObj.pDocument.createElement("TABLE");
	//ar_DOM_ELEMENTS.push([pMainObj.pDocument,tableToolbar]);

	tableToolbar.unselectable = "on";

	tableToolbar.pObj = this;
	tableToolbar.ondragstart = function (e){return false;};
	//tableToolbar.onmousedown = function (e){return false;};
	tableToolbar.cellSpacing = 0;
	tableToolbar.cellPadding = 0;
	//tableToolbar.className = "bxedtoolbar";
	tableToolbar.style.width = (dx != null ? dx : "0%");
	tableToolbar.style.height = (dy != null ? dy : "20px");

	var rowTitle = tableToolbar.insertRow(0);
	var cellTitle = rowTitle.insertCell(0);
	cellTitle.noWrap = "nowrap";
	cellTitle.className = "bxedtoolbartitle";
	cellTitle.unselectable = "on";
	cellTitle.style.cursor = "move";
	cellTitle.innerHTML = '<table cellpadding=0 cellspacing=0 border=0 width="100%" class="bxedtoolbartitletext"><tr><td width="99%" nowrap>'+title+'</td><td width="0%">&nbsp;</td><td width="1%">x</td></table>';
	cellTitle.onmousedown = function(e){obj.MouseDown(e); return false;};
	this.pTitleRow = rowTitle;

	var row2 = tableToolbar.insertRow(1);
	var cellrow2 = row2.insertCell(0);
	cellrow2.className = "bxedtoolbar";
	cellrow2.unselectable = "on";

	var tableIcons = pMainObj.CreateElement("TABLE");
	//var tableIcons = document.createElement("TABLE");
	//ar_DOM_ELEMENTS.push([pMainObj.pDocument,tableIcons]);

	tableIcons.pObj = this;
	tableIcons.cellSpacing = 0;
	tableIcons.cellPadding = 0;
	tableIcons.className = "bxedtoolbaricons";
	tableIcons.style.width = "100%";
	tableIcons.style.height = (dy != null ? dy : "22px");
	tableIcons.unselectable = "on";
	var rowIcons = tableIcons.insertRow(0);
	rowIcons.style.backgroundImage = "url(/bitrix/images/fileman/htmledit2/toolbarbg.gif)";

	var cellIcons = rowIcons.insertCell(0);

	cellIcons.style.width = "0%";
	cellIcons.style.cursor = "move";
	cellIcons.appendChild(pMainObj.CreateElement("IMG", {"src": "/bitrix/images/fileman/htmledit2/toolbarleft.gif", "title": title, "alt": title}));
	cellIcons.unselectable = "on";
	cellIcons.onmousedown = function(e){obj.MouseDown(e);  return false;};

	cellIcons = rowIcons.insertCell(-1);
	cellIcons.unselectable = "on";
	cellIcons.style.width = "100%";
	cellIcons.style.backgroundImage = "url(/bitrix/images/fileman/htmledit2/toolbarbg.gif)";
	cellIcons.innerHTML = ' ';
	cellIcons = rowIcons.insertCell(-1);
	cellIcons.unselectable = "on";
	cellIcons.style.width = "0%";
	//Ïðàâàÿ ÷àñòü òóëáàðà
	cellIcons.appendChild(pMainObj.CreateElement("IMG", {"src": "/bitrix/images/fileman/htmledit2/toolbarright.gif", "title": title, "alt": title}));
	cellIcons.onmousedown = function(e){obj.MouseDown(e); return false;};

	//this.SetDirection(this.bVertical);

	this.pIconsTable = cellrow2.appendChild(tableIcons);
	this.pWnd = this.pMainObj.pWnd.appendChild(tableToolbar);


	row2 = null;
	cellrow2 = null;
	rowTitle = null;
	cellTitle = null;
	cellIcons = null;
	rowIcons = null;
	tableIcons = null;
	tableToolbar = null;

	//pBXEventDispatcher.AddHandler('mousedown', function(e){obj.MouseDown(e);});

	pBXEventDispatcher.AddHandler('mouseup', function(e){obj.MouseUp(e);});
	pBXEventDispatcher.AddHandler('mousemove', function(e){obj.MouseMove(e);});

	/*
	f = function (e)
		{
			if(window.event)
				e = window.event;
			if(this.style.cursor == 'n-resize')
				this.drag = true;
		}
	this.pMainObj.AddEventHandler("mousedown", f);

	f = function (e)
		{
			if(window.event)
				e = window.event;
			if(this.style.cursor == 'n-resize')
				this.drag = false;
		}
	this.pMainObj.AddEventHandler("mouseup", f);
	*/

	//this.pMainObj.TranslateEvent(this.pTable);

	///////////////////////////////////////////////////
	// ìåòîäû
	///////////////////////////////////////////////////

	/*
	äîáàâëÿåò êíîïêó â òóëáàð
	*/
	BXToolbar.prototype.AddButton = function (pButton, num)
	{

		this.arButtons[this.arButtons.length] = pButton;
		var rowIcons = this.pIconsTable.rows[0];
		var but_count = rowIcons.cells.length - 3;
		if(!num || num>but_count)
			num = but_count;

		var cellIcon = rowIcons.insertCell(num + 1);
		cellIcon.unselectable = "on";
		cellIcon.style.backgroundImage = "url(/bitrix/images/fileman/htmledit2/toolbarbg.gif)";
		cellIcon.style.width = "0%";
		//pButton.Show(cellIcon);
		cellIcon.appendChild(pButton.pWnd);
		cellIcon.pObj = pButton; // opera bug!

		cellIcon = null;
		rowIcons = null;
	}

	BXToolbar.prototype.OnClick = function (px, py)
	{

	}

	BXToolbar.prototype.SetDirection = function(bVertical)
	{
		//alert('SetDirection');
		if(this.bVertical == bVertical)
			return;

	/*
	BXTButton.prototype.OnToolbarChangeDirection = function (bVertical)
	{
		if(this.id=='separator')
		{
			if(bVertical)
			{
				this.pWnd.style.width = '22px';
				this.pWnd.style.height = '2px';
			}
			else
			{
				this.pWnd.style.width = '2px';
				this.pWnd.style.height = '22px';
			}
		}
	}
	*/

		var obj = this;
		this.bVertical = bVertical;
		var newr, i, buttons, ar = Array();
		if(bVertical)
		{
			buttons = this.pIconsTable.rows[0].cells;
			i=0;
			while(buttons.length>3)
				ar[i++] = this.pIconsTable.rows[0].removeChild(buttons[1]);

			this.pIconsTable.deleteRow(0);
			var ct = this.pIconsTable.insertRow(0).insertCell(0);
			ct.appendChild(pMainObj.CreateElement("IMG", {"src": "/bitrix/images/fileman/htmledit2/toolbartop.gif", "title": title, "alt": title}));
			ct.style.width = "0%";
			ct.onmousedown = function(e){obj.MouseDown(e);  return false;};
			ct.style.height = "0%";
			ct.style.cursor = "move";
			for(i=0; i<ar.length; i++)
			{
				var ra = this.pIconsTable.insertRow(i+1);
				ct = ra.appendChild(ar[i]);
				ct.style.backgroundImage = "url(/bitrix/images/fileman/htmledit2/toolbarbg_vert.gif)";
				if(ct.pObj.OnToolbarChangeDirection)
					ct.pObj.OnToolbarChangeDirection(bVertical);
			}
			ct = this.pIconsTable.insertRow(-1).insertCell(0).appendChild(pMainObj.CreateElement("IMG", {"src": "/bitrix/images/fileman/htmledit2/toolbarbottom.gif", "title": title, "alt": title}));
			ct = null;
			ra = null;
		}
		else
		{
			buttons = this.pIconsTable.rows;
			for(i=1; i<buttons.length-1; i++)
				ar[i-1] = buttons[i].removeChild(buttons[i].cells[0]);

			while(this.pIconsTable.rows.length>0)
				this.pIconsTable.deleteRow(0);

			var r = this.pIconsTable.insertRow(0)
			var ct2 = r.insertCell(0);
			ct2.appendChild(pMainObj.CreateElement("IMG", {"src": "/bitrix/images/fileman/htmledit2/toolbarleft.gif", "title": title, "alt": title}));
			ct2.style.width = "0%";
			ct2.style.height = "0%";
			ct2.style.cursor = "move";
			ct2.onmousedown = function(e){obj.MouseDown(e);  return false;};
			for(i=0; i<ar.length; i++)
			{
				ct2 = r.appendChild(ar[i]);
				ct2.style.width = "0%";
				ct2.style.backgroundImage = "url(/bitrix/images/fileman/htmledit2/toolbarbg.gif)";
				if(ct2.pObj.OnToolbarChangeDirection)
					ct2.pObj.OnToolbarChangeDirection(bVertical);
			}
			var ln = r.cells.length;
			ct2 = r.insertCell(ln)
			ct2.innerHTML = ' ';
			ct2.style.width = "100%";
			r.insertCell(-1).appendChild(pMainObj.CreateElement("IMG", {"src": "/bitrix/images/fileman/htmledit2/toolbarright.gif", "title": title, "alt": title}));

			buttons = null;
			r = null;
			ct2 = null;
		}
	}
}




/*
ïðè íàæàòèè íà ëåâóþ êíîïêó ìûøè:
	ïðîâåðÿåì - íàõîäèìñÿ ëè ìû íàä îáëàñòüþ ýòîãî òóëáàðà,
	åñëè äà, òî íà÷èíàåì drag
*/
BXToolbar.prototype.MouseDown = function (e)
{
	//addAdvEvent(this.pEditorDocument, 'contextmenu', function (e){obj.OnContextMenu(e);});
	if(window.event)
		e = window.event;

	if(e.pageX || e.pageY)
	{
		e.realX = e.pageX;
		e.realY = e.pageY;
	}
	else if(e.clientX || e.clientY)
	{
		e.realX = e.clientX + document.body.scrollLeft;
		e.realY = e.clientY + document.body.scrollTop;
	}

	var position = GetRealPos(this.pWnd);
	this.pMainObj.bDragging = true;
	this.bDragging = true;

	this.pMainObj.iLeftDragOffset = e.realX - position["left"];
	this.pMainObj.iTopDragOffset = e.realY - position["top"];

	pBXEventDispatcher.SetCursor("move");
	this.pWnd.oldBorder = this.pWnd.style.border;
	this.pWnd.style.zIndex = "1000";
}

/*
ïðè îòïóñêàíèè êíîïêè ìûøè:
	åñëè áûëî ïåðåòÿãèâàíèå ýòîãî òóëáàðà, òî ïðåêðàùàåì ýòî
*/
BXToolbar.prototype.MouseUp = function (e)
{
	if(this.pMainObj.bDragging && this.bDragging)
	{
		this.pMainObj.bDragging = false;
		this.bDragging = false;
		this.pWnd.style.zIndex = "1";
		this.pWnd.style.border = this.pWnd.oldBorder;
		pBXEventDispatcher.SetCursor("auto");
	}
	
	//alert(pMainObj.toolArea[0].areaHeight);
}

/*
Îòêëåèâàåò òóëáàð îò òóëáàðñåòà
	óäàëÿåò åãî èç òóëáàðñåòà ïðè ïîìîùè BXToolbarSet.DelToolbar
	äåëàåò åìó position = "absolute";
	ïðÿ÷åò ðàìêè è ïîêàçûâàåò çàãîëîâîê òóëáàðà
*/
BXToolbar.prototype.UnDock = function ()
{
	if(this.pToolbarSet)
		this.pToolbarSet.DelToolbar(this);
	this.pWnd.style.zIndex = "1000";
	this.pWnd.style.position = "absolute";
	this.pMainObj.pWnd.appendChild(this.pWnd);
	var rowIcons = this.pIconsTable.rows[0];
	rowIcons.cells[0].style.display = "none";
	//rowIcons.cells[rowIcons.cells.length-2].style.display = "none";
	rowIcons.cells[rowIcons.cells.length-1].style.display = "none";
	this.pTitleRow.style.display = GetDisplStr(1);
	this.SetDirection(false);
}

/*
Ïðè äâèæåíèè ìûøè
	åñëè ñîñòîÿíèå ïåðåòÿãèâàíèÿ, òî ïðîâåðÿåì ïðè ïîìîùè BXToolToolbarSet.HitTest â
	êàêîé òóëáàðñåò ïîïàäàåì è â çàâèñèìîñòè îò ýòîãî ëèáî ïðèêðåïëÿåì ê òóëáàðñåòó,
	ëèáî îòëåïëÿåì, ëèáî ïåðåìåùàåì âíóòðè åãî è ëèáî ïåðåìåùàåì "îòêëååíûì"
*/
BXToolbar.prototype.MouseMove = function (e)
{
//	window.status = e.realY;
	if(this.pMainObj.bDragging && this.bDragging)
	{
		//var position = GetRealPos(this.pWnd);
		// ïðîâåðÿåì: ïîïàäàåì ëè â òóëáàðñåò
		var bDocked = false;
		var actToolbarSet = false;
		var arToolbarSet = this.pMainObj.GetToolbarSet();
		for(var i=0; i<arToolbarSet.length; i++)
		{
			var arPos = arToolbarSet[i].HitTest(e.realX, e.realY)
			if(arPos)
			{
				bDocked = true;
				actToolbarSet = arToolbarSet[i];
				break;
			}
		}

		if(this.bDocked && !bDocked) // òóëáàð âûøåë èç òóëáàðñåòà
		{
			this.UnDock();
			this.pWnd.style.left = e.realX - this.pMainObj.iLeftDragOffset;
			this.pWnd.style.top = e.realY - this.pMainObj.iTopDragOffset;
		}
		else if(!this.bDocked && bDocked && actToolbarSet) // òóëáàð ïîïàäàåò â òóëáàðñåò
		{
			if(this.pToolbarSet)
				this.pToolbarSet.DelToolbar(this);
			actToolbarSet.AddToolbar(this, arPos['row'], arPos['col'], arPos['addrow']);
		}
		else if(!this.bDocked && !bDocked)
		{
			this.pWnd.style.left = e.realX - this.pMainObj.iLeftDragOffset;
			this.pWnd.style.top = e.realY - this.pMainObj.iTopDragOffset;
		}
		else if((arPos["addrow"] /*&& this.row!=0 && arPos['row']!=0*/) || this.row!=arPos['row'] || this.col!=arPos['col'])
		{
			//window.status = this.row + '!=' + arPos['row'] + '||' + this.col + '!=' + arPos['col'];
			if(this.pToolbarSet)
				this.pToolbarSet.DelToolbar(this);
			actToolbarSet.AddToolbar(this, arPos['row'], arPos['col'], arPos['addrow']);
			//window.status = Math.random() + '; ' + this.row + '!=' + arPos['row'] + ' x ' + this.col + '!=' + arPos['col'];
		}
		/*
		else
			window.status = Math.random();
			*/
		this.bDocked = bDocked;
	}
}



function BXTaskbarSet(pColumn, pMainObj, iNum)
{
	ar_BXTaskbarSetS.push(this);
	var obj = this;
	var bVertical = (iNum == 1 || iNum==2);
	this.__Size = ["100%", "100%"];

	this.className = 'BXTaskbarSet';
	pColumn.unselectable = "on";
	this.pParentWnd = pColumn;
	this.pMainObj = pMainObj;
	this.bVertical = bVertical;
	this.pParentWnd.className = 'bxedtaskbarset';
	this.iNum = iNum;
	if(bVertical)
		pColumn.style.verticalAlign = "top";

	pColumn.innerHTML = '<img src="/bitrix/images/1.gif" width="1" height="1" border="0">';

	pColumn.style.paddingBottom = "1px";
	this.pWnd = pColumn.appendChild(this.pMainObj.CreateElement("TABLE"));
	this.pWnd.unselectable = "on";
	this.pWnd.cellSpacing = 0;
	this.pWnd.cellPadding = 0;
	this.pWnd.border = 0;
	//this.pWnd.style.border = "1px red solid";	
	this.pWnd.style.width = this.__Size[0];
	this.pWnd.style.height = this.__Size[1];

	var r = this.pWnd.insertRow(-1);
	switch(this.iNum)
	{
		case 0: //âåðõíèé
			this.pMainCell = r.insertCell(-1);
			this.pMoveColumn = this.pWnd.insertRow(-1).insertCell(-1);
			break;
		case 1: //ëåâûé
			this.pMainCell = r.insertCell(-1);
			this.pMoveColumn = r.insertCell(-1);
			break;
		case 2: //ïðàâûé
			this.pMoveColumn = r.insertCell(-1);
			this.pMainCell = r.insertCell(-1);
			break;
		case 3: //íèæíèé
			this.pMoveColumn = r.insertCell(-1);
			this.pMainCell = this.pWnd.insertRow(-1).insertCell(-1);
			break;
	}

	r = null;

	this.pTaskbarsTable = this.pMainCell.appendChild(this.pMainObj.CreateElement("TABLE", {"unselectable": "on", "cellPadding": "0", "cellSpacing": "0", "border": "0"}, {"height": "100%", "width": "100%"}));
	this.pDataColumn = this.pTaskbarsTable.insertRow(-1).insertCell(-1);
	this.pBottomColumn = this.pTaskbarsTable.insertRow(-1).insertCell(-1);

	this.arTaskbars = Array();

	this.pMainCell.style.height = "100%";
	this.pMainCell.style.width = "100%";
	this.pDataColumn.style.height = "100%";
	this.pDataColumn.style.width = "100%";

	switch(this.iNum)
	{
		case 0: //âåðõíèé
		case 3: //íèæíèé
			this.pMoveColumn.style.cursor = "N-resize";
			this.pMoveColumn.style.height = "6px";
			this.pMoveImg = this.pMoveColumn.appendChild(this.pMainObj.CreateElement("IMG", {"border": "0", "width": "48", "height": "6"}));
			break;
		case 1: //ëåâûé
		case 2: //ïðàâûé
			this.pMoveColumn.style.cursor = "W-resize";
			this.pMoveColumn.style.width = "6px";
			this.pMoveImg = this.pMoveColumn.appendChild(this.pMainObj.CreateElement("IMG", {"border": "0", "width": "6", "height": "48"}));
			break;
	}

	this.pMoveImg.style.cursor = "default";
	this.pMoveColumn.align = 'center';
	this.pMoveColumn.vAlign = 'middle';

	//this.pBottomColumn.style.display = 'none';
	//this.pBottomColumn.style.paddingBottom = "1px";
	this.pMoveColumn.style.display = "none";
	this.pMoveColumn.style.width = "0%";
	this.pMoveColumn.style.height = "0%";
	//this.pMoveColumn.innerHTML='<img src="/bitrix/images/1.gif" alt="" border=0 width="6" height="4">';
	//this.pMoveColumn.style.border = "1px solid #333333";

	addCustomElementEvent(this.pMoveImg, "mousedown", function (){this.ShowToggle();}, this);

	this.pMoveColumn.ondragstart = function (e){return false;};
	//this.pMoveColumn.onmousedown = function(e){globalBXTaskbarSet.MouseDown(e); return false;};
	this.pMoveColumn.onmousedown = function(e){obj.MouseDown(e); return false;};

	globalBXTaskbarSet = this;
	
	//pBXEventDispatcher.AddHandler('mouseup', BXTaskbarSetMouseUp);
	pBXEventDispatcher.AddHandler('mouseup', function(e){obj.MouseUp(e);});
	//pBXEventDispatcher.AddHandler('mousemove', BXTaskbarSetMouseMove);
	pBXEventDispatcher.AddHandler('mousemove', function(e){obj.MouseMove(e);});
	
	//addEvent(pObject.pDocument, eventName, function (e) {pBXEventDispatcher.OnEvent(pObject.pDocument, e);});
	//addEvent(pObject.pEditorDocument, eventName,  function (e) {pBXEventDispatcher.OnEvent(pObject.pEditorDocument, e);});
	//addAdvEvent(pMainObj.pDocument, 'mouseup', BXTaskbarSetMouseUp);
	//addAdvEvent(pMainObj.pEditorDocument, 'mouseup', BXTaskbarSetMouseUp);
	//addAdvEvent(pMainObj.pDocument, 'mousemove', BXTaskbarSetMouseMove);
	//addAdvEvent(pMainObj.pEditorDocument, 'mousemove', BXTaskbarSetMouseMove);
	this.Show();
	//obj = null;
}

BXTaskbarSetMouseUp = function(e)
{
	globalBXTaskbarSet.MouseUp(e);
}

BXTaskbarSetMouseMove = function(e)
{
	globalBXTaskbarSet.MouseMove(e);
}


BXTaskbarSet.prototype.MouseDown = function (e)
{
	//this.pMoveColumn.style.border="1px dashed #000000";
	if(!this.bShowing)
		return;

	if(window.event)
		e = window.event;

	if(e.pageX || e.pageY)
	{
		e.realX = e.pageX;
		e.realY = e.pageY;
	}
	else if(e.clientX || e.clientY)
	{
		e.realX = e.clientX + document.body.scrollLeft;
		e.realY = e.clientY + document.body.scrollTop;
	}
	//alert('BXTaskbarSet.prototype.MouseDown');
	var position = GetRealPos(this.pWnd);
	this.pMainObj.bDragging = true;
	this.bDragging = true;

	switch (this.iNum)
	{
		case 0:
			this.pMainObj.iDragOffset = position["bottom"] - e.realY - position["top"];
			pBXEventDispatcher.SetCursor("N-resize");
			break;
		case 1:
			this.pMainObj.iDragOffset = position["right"] - e.realX - position["left"] ;
			pBXEventDispatcher.SetCursor("W-resize");
			break;
		case 2:
			this.pMainObj.iDragOffset = e.realX - position["left"] + position["right"];
			pBXEventDispatcher.SetCursor("W-resize");
			break;
		case 3:
			this.pMainObj.iDragOffset = e.realY - position["top"] + position["bottom"];
			pBXEventDispatcher.SetCursor("N-resize");
			break;
	}
}

BXTaskbarSet.prototype.MouseMove = function (e)
{
	if(this.pMainObj.bDragging && this.bDragging)
	{
	//alert(this.iNum);
		var v;
		switch (this.iNum)
		{
			case 0:
				v = this.pMainObj.iDragOffset + e.realY;
				this.pWnd.style.height = (v<=0? 0 : v);
				break;
			case 1:
				v = this.pMainObj.iDragOffset + e.realX;
				this.pWnd.style.width = (v<=0? 0 : v);
				//this.pMoveColumn.style.width = "1000px";
				break;
			case 2:
				v = this.pMainObj.iDragOffset - e.realX;
				this.pWnd.style.width = (v<=0? 0 : v);
				break;
			case 3:
				v = this.pMainObj.iDragOffset - e.realY;
				this.pWnd.style.height = (v<=0? 0 : v);
				break;
		}
	}
}

BXTaskbarSet.prototype.MouseUp = function (e)
{
	//alert(this.pMainObj.bDragging+' -- '+this.bDragging);
	
	if(this.pMainObj.bDragging && this.bDragging)
	{
	//alert('BXTaskbarSet.prototype.MouseUp');
		//this.pMoveColumn.style.border="0px solid #000000"
		this.pMainObj.bDragging = false;
		this.bDragging = false;
		pBXEventDispatcher.SetCursor("auto");
	}
}

BXTaskbarSet.prototype.Show = function ()
{
	this.pDataColumn.style.display = GetDisplStr(1);
	this.pBottomColumn.style.display = GetDisplStr(1);
	this.pMoveImg.alt = this.pMoveImg.title = BX_MESS.Hide;
	switch(this.iNum)
	{
	case 0:
		this.pMoveImg.src="/bitrix/images/fileman/htmledit2/splitterh-r.gif";
		this.pMoveColumn.style.backgroundImage = "url(/bitrix/images/fileman/htmledit2/splitterhbg-r.gif)";
		break;
	case 1:
		this.pMoveImg.src="/bitrix/images/fileman/htmledit2/splitterv-r.gif";
		this.pMoveColumn.style.backgroundImage = "url(/bitrix/images/fileman/htmledit2/splittervbg-r.gif)";
		break;
	case 2:
		this.pMoveImg.src="/bitrix/images/fileman/htmledit2/splitterv.gif";
		this.pMoveColumn.style.backgroundImage = "url(/bitrix/images/fileman/htmledit2/splittervbg.gif)";
		break;
	case 3:
		this.pMoveImg.src="/bitrix/images/fileman/htmledit2/splitterh.gif";
		this.pMoveColumn.style.backgroundImage = "url(/bitrix/images/fileman/htmledit2/splitterhbg.gif)";
		break;
	}

	switch(this.iNum)
	{
	case 0:
	case 3:
		this.pWnd.style.height = this.__Size[1];
		break;
	case 1:
	case 2:
		this.pWnd.style.width = this.__Size[0];
		break;
	}
	this.bShowing = true;
}

BXTaskbarSet.prototype.Hide = function ()
{
	this.pDataColumn.style.display = GetDisplStr(0);
	this.pBottomColumn.style.display = GetDisplStr(0);
	this.pMoveImg.alt = this.pMoveImg.title = BX_MESS.Restore;
	switch(this.iNum)
	{
	case 0:
		this.pMoveImg.src="/bitrix/images/fileman/htmledit2/splitterh.gif";
		this.pMoveColumn.style.backgroundImage = "url(/bitrix/images/fileman/htmledit2/splitterhbg.gif)";
		break;
	case 1:
		this.pMoveImg.src="/bitrix/images/fileman/htmledit2/splitterv.gif";
		this.pMoveColumn.style.backgroundImage = "url(/bitrix/images/fileman/htmledit2/splittervbg.gif)";
		break;
	case 2:
		this.pMoveImg.src="/bitrix/images/fileman/htmledit2/splitterv-r.gif";
		this.pMoveColumn.style.backgroundImage = "url(/bitrix/images/fileman/htmledit2/splittervbg-r.gif)";
		break;
	case 3:
		this.pMoveImg.src="/bitrix/images/fileman/htmledit2/splitterh-r.gif";
		this.pMoveColumn.style.backgroundImage = "url(/bitrix/images/fileman/htmledit2/splitterhbg-r.gif)";
		break;
	}

	switch(this.iNum)
	{
	case 0:
	case 3:
		this.__Size[1] = this.pWnd.offsetHeight;
		this.pWnd.style.height = "0%";
		break;
	case 1:
	case 2:
		this.__Size[0] = this.pWnd.offsetWidth;
		this.pWnd.style.width = "0%";
		break;
	}
	this.bShowing = false;
}

BXTaskbarSet.prototype.ShowToggle = function()
{
	if(this.bShowing)
		this.Hide();
	else
		this.Show();
}

BXTaskbarSet.prototype.OnResize = function (e)
{

}

BXTaskbarSet.prototype.AddTaskbar = function (pTaskbar)
{

	pTaskbar.bDocked = true;
	pTaskbar.pWnd.style.position = "relative";
	pTaskbar.pWnd.style.zIndex = "0";
	pTaskbar.pWnd.style.left = null;
	pTaskbar.pWnd.style.top = null;
	//pTaskbar.pWnd.style.height = null;
	//pTaskbar.pWnd.style.width = null;
	pTaskbar.oldWidth = pTaskbar.pWnd.style.width;
	pTaskbar.oldHeight = pTaskbar.pWnd.style.height;
	pTaskbar.pTaskbarSet = this;
	pTaskbar.parentCell = this.pWnd;
	this.arTaskbars[this.arTaskbars.length] = pTaskbar;
	this.DrawTabs();
	pTaskbar.SetActive();


	if(this.bVertical)
	{
		//pTaskbar.pWnd.style.width = "100%";
		pTaskbar.pWnd.style.height = "100%";
	}
	else
	{
		if(this.arTaskbars.length==1)
			this.pWnd.style.height = "150px";

		//pTaskbar.pWnd.style.height = "100%";
		//pTaskbar.pWnd.style.width = "100%";
	}

	//this.pDataColumn.appendChild(pTaskbar.pWnd);
	pTaskbar = null;

}

BXTaskbarSet.prototype.DelTaskbar = function (pTaskbar)
{
	pTaskbar.pWnd.parentNode.removeChild(pTaskbar.pWnd);
	pTaskbar.pTaskbarSet = null;
	for(var i=0; i<this.arTaskbars.length; i++)
	{
		if(pTaskbar.id==this.arTaskbars[i].id)
		{
			var arNewTemp = Array();
			for(var j=0; j<this.arTaskbars.length; j++)
				if(i!=j)
					arNewTemp[arNewTemp.length] = this.arTaskbars[j];
			this.arTaskbars = arNewTemp;
			this.DrawTabs();
			if(arNewTemp.length>0)
				this.ActivateTaskbar(arNewTemp[0].id);
			break;
		}
	}
}


BXTaskbarSet.prototype.HitTest = function (px, py)
{
	var delta = 5;

	var position = GetRealPos((/*this.bVertical ? this.pParent : */this.pWnd));
	if(
		position["left"] - delta < px && px < position["right"] + delta
		&& position["top"] - delta < py && py < position ["bottom"] + delta
	)
	{
		return true;
	}

	if(this.iNum==0)
	{
		//window.status = position["left"]+' - '+delta+' < '+px+' && '+px+' < '+position["right"]+' + '+delta+' && '+position["top"]+' - '+delta+' < '+py+' && '+py+' < '+position["bottom"]+' + '+delta+';';
	}

	return false;
}

BXTaskbarSet.prototype.DrawTabs = function ()
{
	if(this.arTaskbars.length<=0)
	{
		this.pMoveColumn.style.display = "none";
		this.pWnd.style.width = "0%";
		this.pWnd.style.height = "0%";
	}
	else
		this.pMoveColumn.style.display = (BXIsIE()?"block":"table-cell");

	if(this.arTaskbars.length<=1)
	{
		this.pBottomColumn.style.display = 'none';
	}
	else
	{
		this.pBottomColumn.style.display = (BXIsIE()?"block":"table-cell");
		//var w = this.pWnd.clientWidth/this.arTaskbars.length;

		while(this.pBottomColumn.childNodes.length>0)
			this.pBottomColumn.removeChild(this.pBottomColumn.childNodes[0]);

		var pIconTable = this.pMainObj.pDocument.createElement("TABLE");
		pIconTable.unselectable = "on";
		pIconTable.cellSpacing = 0;
		pIconTable.cellPadding = 0;
		pIconTable.width = "100%";
		pIconTable.border = 0;
		var r = pIconTable.insertRow(0), c;
		//var obj;
		for(var k=0; k<this.arTaskbars.length; k++)
		{
			c = r.insertCell(-1);
			//c.className = 'bxedtaskbaricontable';
			c.style.width = "0%";
			c.tid = this.arTaskbars[k].id;
			c.innerHTML = '<span unselectable="on" style="overflow:hidden; cursor:default; ">'+this.arTaskbars[k].title+'</span>';
			c.pObj = this.arTaskbars[k];
			c.onclick = function (e){this.pObj.SetActive();};
		}
		c = r.insertCell(-1);
		c.width = "100%";
		c.unselectable = "on";
		c.className = 'bxedtaskbaricontable';
		c.innerHTML = '&nbsp;';
		this.pBottomColumn.appendChild(pIconTable);

		c = null;
		r = null;
		pIconTable = null;
	}
}

BXTaskbarSet.prototype.ActivateTaskbar = function (id)
{
	while(this.pDataColumn.childNodes.length>0)
		this.pDataColumn.removeChild(this.pDataColumn.childNodes[0]);

	for(var i=0; i<this.arTaskbars.length; i++)
	{
		if(this.arTaskbars[i].id==id)
		{
			this.pDataColumn.appendChild(this.arTaskbars[i].pWnd);
			break;
		}
	}
	if(this.pBottomColumn.childNodes[0])
	{
		var tsb_cells = this.pBottomColumn.childNodes[0].rows[0].cells;
		for(i=0; i<tsb_cells.length-1; i++)
		{
			if(tsb_cells[i].tid!=id && tsb_cells[i].className!='bxedtaskbaricontable')
				tsb_cells[i].className = 'bxedtaskbaricontable';
			else if(tsb_cells[i].tid==id && tsb_cells[i].className!='bxedtaskbaricontableact')
				tsb_cells[i].className = 'bxedtaskbaricontableact';
		}
		tsb_cells = null;
	}
}


/////////////////////////////////////////////////////////////
function BXTaskbar()
{

}

BXTaskbar.prototype.Create = function(pMainObj, title, dx, dy)
{
	ar_BXTaskbarS.push(this);
	this.pMainObj = pMainObj;
	this.className = 'BXTaskbar';
	this.id = Math.random();
	this.bVertical = false;
	this.title = title;

	var obj = this;
	var tableTaskbar = pMainObj.pDocument.createElement("TABLE");
	tableTaskbar.unselectable = "on";
	tableTaskbar.pObj = this;
	tableTaskbar.ondragstart = function (e){return false;};
	tableTaskbar.cellSpacing = 0;
	tableTaskbar.cellPadding = 0;
	//tableToolbar.className = "bxedtoolbar";
	tableTaskbar.style.width = (dx != null ? dx : "100%");
	tableTaskbar.style.height = (dy != null ? dy : "200px");
	tableTaskbar.style.position = "absolute";
	tableTaskbar.style.zIndex = "1000";

	var rowTitle = tableTaskbar.insertRow(0);
	var cellTitle = rowTitle.insertCell(0);
	cellTitle.noWrap = "nowrap";
	cellTitle.className = "bxedtaskbartitle";
	cellTitle.unselectable = "on";
	//cellTitle.style.cursor = "move";
	cellTitle.style.height = "0%";
	//cellTitle.style.width = "200px";
	//cellTitle.innerHTML = '<table cellpadding=0 cellspacing=0 border=0 width="100%" class="bxedtaskbartitletext"><tr><td width="99%" id = "text" nowrap unselectable="on">'+title+'</td><td width="0%" id="sep">&nbsp;</td><td width="1%" id="button"><img src="/bitrix/images/fileman/htmledit2/taskbarx.gif" width="17" height="17"/></td></table>';
	var hdrow = cellTitle.appendChild(pMainObj.CreateElement("TABLE", {"cellPadding":"0", "cellSpacing":"0", "border":"0", "width":"100%", "className":"bxedtaskbartitletext"})).insertRow(-1);

	var c = hdrow.insertCell(-1);
	c.style.width = "180px";
	c.id = "text";
	c.noWrap=true;
	c.unselectable="on";
	c.innerHTML = title;

	c = hdrow.insertCell(-1);
	c.style.width = "0%";
	c.id = "sep";
	c.innerHTML = "&nbsp;";

	c = hdrow.insertCell(-1);
	c.style.width = "1%";
	c.id = "button";
	c.innerHTML = '<img src="/bitrix/images/fileman/htmledit2/taskbarx.gif" width="17" height="17"/>';
	addCustomElementEvent(c, "mousedown", function (){this.Close();}, this);

	cellTitle.onmousedown = function(e){obj.MouseDown(e); return false;};
	this.pTitleRow = rowTitle;

	var row2 = tableTaskbar.insertRow(1);
	var cellrow2 = row2.insertCell(0);
	cellrow2.className = "bxedtaskbar";
	cellrow2.unselectable = "on";
	cellrow2.style.height = "100%";
	this.pDataCell = cellrow2;
	this.pWnd = this.pMainObj.pWnd.appendChild(tableTaskbar);

	//pBXEventDispatcher.AddHandler('mouseup', function(e){obj.MouseUp(e);});
	//pBXEventDispatcher.AddHandler('mousemove', function(e){obj.MouseMove(e);});

	//this.pDataCell.className = "bxedtaskbarinner";
	//this.pDataCell.innerHTML = "XX";

	if(this.OnTaskbarCreate)
		this.OnTaskbarCreate();

	c = null;
	cellrow2 = null;
	row2 = null;
	hdrow = null;
	cellTitle = null;
	rowTitle = null;
	tableTaskbar = null;
}

BXTaskbar.prototype.SetActive = function ()
{
	if(this.pTaskbarSet)
	{
		this.pTaskbarSet.ActivateTaskbar(this.id);
	}
}

BXTaskbar.prototype.Close = function()
{
	if(this.pTaskbarSet)
		this.pTaskbarSet.DelTaskbar(this);
}

BXTaskbar.prototype.MouseDown = function (e)
{
	return false;
	if(window.event)
		e = window.event;

	if(e.pageX || e.pageY)
	{
		e.realX = e.pageX;
		e.realY = e.pageY;
	}
	else if(e.clientX || e.clientY)
	{
		e.realX = e.clientX + document.body.scrollLeft;
		e.realY = e.clientY + document.body.scrollTop;
	}

	var position = GetRealPos(this.pWnd);
	this.pMainObj.bDragging = true;
	this.bDragging = true;

	this.pMainObj.iLeftDragOffset = e.realX - position["left"];
	this.pMainObj.iTopDragOffset = e.realY - position["top"];

	pBXEventDispatcher.SetCursor("move");
	this.pWnd.oldBorder = this.pWnd.style.border;
	this.pWnd.style.border = "1px solid #000000";
	this.pWnd.style.zIndex = 1000;
	//alert(this.pWnd.style.zIndex);

	if(!this.bDocked)
	{
		this.pWnd.parentNode.removeChild(this.pWnd);
		this.pMainObj.pWnd.appendChild(this.pWnd);
	}
}

BXTaskbar.prototype.MouseMove = function (e)
{
	alert('BXTaskbar.prototype.MouseMove');
	if(this.pMainObj.bDragging && this.bDragging)
	{
		var bDocked = false;
		var actTaskbarSet = false;
		var arTaskbarSet = this.pMainObj.GetTaskbarSet();
		for(var i=0; i<arTaskbarSet.length; i++)
		{
			if(arTaskbarSet[i].HitTest(e.realX, e.realY))
			{
				bDocked = true;
				actTaskbarSet = arTaskbarSet[i];
				break;
			}
		}

		if(this.bDocked && !bDocked) // òóëáàð âûøåë èç òóëáàðñåòà
		{
			this.UnDock();
			this.pWnd.style.left = e.realX - this.pMainObj.iLeftDragOffset;
			this.pWnd.style.top = e.realY - this.pMainObj.iTopDragOffset;
		}
		else if(!this.bDocked && bDocked && actTaskbarSet) // òóëáàð ïîïàäàåò â òóëáàðñåò
		{
			if(this.pTaskbarSet)
				this.pTaskbarSet.DelTaskbar(this);

			actTaskbarSet.AddTaskbar(this);
		}
		else if(!this.bDocked && !bDocked)
		{
			this.pWnd.style.left = e.realX - this.pMainObj.iLeftDragOffset;
			this.pWnd.style.top = e.realY - this.pMainObj.iTopDragOffset;
		}
		this.bDocked = bDocked;
	}
}

BXTaskbar.prototype.MouseUp = function (e)
{
	if(this.pMainObj.bDragging && this.bDragging)
	{
		//alert('BXTaskbar.prototype.MouseUp = function (e)');
		this.pMainObj.bDragging = false;
		this.bDragging = false;
		this.pWnd.style.zIndex = "1";
	//alert(this.pWnd.style.zIndex);
		this.pWnd.style.border = this.pWnd.oldBorder;
		pBXEventDispatcher.SetCursor("auto");
	}
}

BXTaskbar.prototype.SetContent = function (sContent)
{
	this.pDataCell.innerHTML = sContent;
}


BXTaskbar.prototype.UnDock = function ()
{
	if(this.pTaskbarSet)
		this.pTaskbarSet.DelTaskbar(this);

	this.pWnd.style.zIndex = "1000";
	this.pWnd.style.position = "absolute";
	this.pWnd.style.width = this.oldWidth;
	this.pWnd.style.height = this.oldHeight;

	this.pMainObj.pWnd.appendChild(this.pWnd);
}


BXTaskbar.prototype.CreateScrollableArea = function (pParent)
{
	var res = this.pMainObj.pDocument.createElement("DIV");
	res.style.position = "relative";
	res.style.left = "0px";
	res.style.right = "0px";
	res.style.width = "100%";
	res.style.height = "100%";
	pParent = pParent.appendChild(res);
	res = null;

	res = this.pMainObj.pDocument.createElement("DIV");
	res.style.position = "absolute";
	res.style.left = "0px";
	res.style.right = "0px";
	res.style.width = "100%";
	res.style.height = "100%";

	if(!BXIsIE())
		res.style.overflow = "-moz-scrollbars-vertical";

	res.style.overflowY = "scroll";
	res.style.overflowX = "auto";

	res.style.scrollbar3dLightColor = "#C0C0C0";
	res.style.scrollbarArrowColor = "#252525";
	res.style.scrollbarBaseColor = "#C0C0C0";
	res.style.scrollbarDarkShadowColor = "#252525";
	res.style.scrollbarFaceColor = "#D4D4D4";
	res.style.scrollbarHighlightColor = "#EFEFEF";
	res.style.scrollbarShadowColor = "#EFEFEF";
	res.style.scrollbarTrackColor = "#DFDFDF";


	pParent = pParent.appendChild(res);
	res = null;

	return pParent;
}

////////////////////////////////
// Custom taskbars
///////////////////////////////

/***  Properties taskbar ***/
function BXPropertiesTaskbar()
{
	ar_BXPropertiesTaskbarS.push(this);
	var obj = this;
	obj.bDefault = false;
	BXPropertiesTaskbar.prototype.OnTaskbarCreate = function ()
	{
		var obj = this;

		var table = this.pMainObj.pDocument.createElement("TABLE");
		table.style.width = "100%";
		table.style.height = "100%";
		table.cellSpacing = 0;
		table.cellPadding = 0;
		this.pCellPath = table.insertRow(-1).insertCell(-1);
		this.pCellPath.style.height = "0%";
		this.pCellPath.className = "bxproptagspath";

		this.pCellProps = table.insertRow(-1).insertCell(-1);
		this.pCellProps.style.height = "100%";
		this.pCellProps.vAlign = "top";
		this.pDataCell.appendChild(table);

		this.pCellProps = this.CreateScrollableArea(this.pCellProps);

		this.pCellProps.className = "bxtaskbarprops";
		//this.pCellProps.innerHTML = 'Property tab';

		this.pMainObj.AddEventHandler("OnSelectionChange", obj.OnSelectionChange);

		//obj = null;
		table = null;
	}

	BXPropertiesTaskbar.prototype.OnSelectionChange = function (sReloadControl)
	{
		// obj - ñàì òàñêáàð
		//alert('1');
		//try {swsw();} catch(e){}
		var oSelected = obj.pMainObj.GetSelectionObject();
		var pElement = oSelected;
		var pElementTemp, strPath = '';
		if(sReloadControl == "always" || !obj.oOldSelected || !BXElementEqual(oSelected, obj.oOldSelected))
		{
			obj.oOldSelected = oSelected;

			while(obj.pCellPath.childNodes.length>0)
				obj.pCellPath.removeChild(obj.pCellPath.childNodes[0]);

			var tPath = obj.pMainObj.pDocument.createElement("TABLE");
			tPath.className = "bxproptagspathinl";
			tPath.cellSpacing = 0;
			tPath.cellPadding = 1;
			var rPath = tPath.insertRow(-1);
			var cPath, pBut;

			var oRange;
			var cActiveTag = null;
			var fPropertyPanel = null;
			var fPropertyPanelElement = null;

			if(obj.pMainObj.pEditorDocument.body.createTextRange)
				oRange = obj.pMainObj.pEditorDocument.body.createTextRange();

			while(pElement && (pElementTemp = pElement.parentNode) != null)
			{
				if(pElementTemp.nodeType!=1 || !pElement.tagName)
				{
					pElement = pElementTemp;
					continue;
				}

				strPath = pElement.tagName.toLowerCase();
				if(pElement.getAttribute("__bxtagname"))
					strPath = pElement.getAttribute("__bxtagname").toLowerCase();

				if(strPath == 'tbody')
				{
					pElement = pElementTemp;
					continue;
				}

				cPath = rPath.insertCell(0);

				if(!fPropertyPanel && pPropertybarHandlers[strPath])
				{
					fPropertyPanel = pPropertybarHandlers[strPath];
					fPropertyPanelElement = pElement;
					cActiveTag = cPath;
				}

				cPath.innerHTML = '&lt;'+strPath+'&gt;';
				cPath.style.cursor = "default";
				cPath.pElement = pElement;
				cPath.oRange = oRange;
				cPath.pMainObj = obj.pMainObj;
				cPath.onclick = function (){
					if(this.oRange && this.oRange.moveToElementText)
					{
						this.oRange.moveToElementText(this.pElement);
						this.oRange.select();
					}
					else
					{
						this.pMainObj.pEditorWindow.getSelection().selectAllChildren(this.pElement);
					}

					this.pMainObj.OnEvent("OnSelectionChange");
				};

				cPath = rPath.insertCell(0);
				cPath.innerHTML = ' ';
				pElement = pElementTemp;
			}

			var bDefault = false;
			obj.pCellPath.appendChild(tPath);
			if(!fPropertyPanel)
			{
				fPropertyPanel = pPropertybarHandlers['default'];
				fPropertyPanelElement = oSelected;
				bDefault = true;
			}

			if(cActiveTag)
			{
				cActiveTag.style.backgroundColor = '#E4E4E4';
				cActiveTag.style.fontWeight = 'bold';
			}

			if(fPropertyPanelElement && fPropertyPanelElement.tagName && (!(obj.oOldPropertyPanelElement && BXElementEqual(fPropertyPanelElement, obj.oOldPropertyPanelElement)) || sReloadControl == "always"))
			{
				var sRealTag = fPropertyPanelElement.tagName.toLowerCase();
				if(fPropertyPanelElement.getAttribute("__bxtagname"))
					sRealTag = fPropertyPanelElement.getAttribute("__bxtagname").toLowerCase();

				obj.oOldPropertyPanelElement = fPropertyPanelElement;

				var bNew = false;
				if((sReloadControl == "always") || (bDefault && obj.bDefault != bDefault) || (!bDefault && (!obj.sOldTag || obj.sOldTag != sRealTag)))
				{
					obj.pMainObj.OnChange("OnPropertyChange", "");

					bNew = true;
					while(obj.pCellProps.childNodes.length>0)
						obj.pCellProps.removeChild(obj.pCellProps.childNodes[0]);
				}

				obj.sOldTag = sRealTag;

				if(fPropertyPanel)
				{
					fPropertyPanel(bNew, obj, fPropertyPanelElement);
				}
				//alert(obj);
				//alert('2');
				//cleanPropPanelLeak();
				ar_PROP_ELEMENTS.push(obj);
				obj.bDefault = bDefault;
			}

			tPath = null;
			rPath = null;
			cPath = null;
			pBut = null;


		}
		pElement = null;
		oSelected = null;
		return true;
	}
}

function cleanPropPanelLeak()
{
	var prev_el = ar_PROP_ELEMENTS.length-1;
	if (prev_el>=0)
	{
		try 
		{
			/*for (var prop in ar_PROP_ELEMENTS[el].arElements)
			{
				ar_PROP_ELEMENTS[prev_el].arElements[prop] = null;
			}*/
		
			ar_PROP_ELEMENTS[prev_el].parentCell = null;
			ar_PROP_ELEMENTS[prev_el].oOldSelected = null;
			ar_PROP_ELEMENTS[prev_el].parentCell = null;
			ar_PROP_ELEMENTS[prev_el].pTaskbarSet = null;
			ar_PROP_ELEMENTS[prev_el].oOldPropertyPanelElement = null;
			ar_PROP_ELEMENTS[prev_el].pWnd = null;
			ar_PROP_ELEMENTS[prev_el].pDataCell = null;
			ar_PROP_ELEMENTS[prev_el].pTitleRow = null;
			if (ar_PROP_ELEMENTS[prev_el].pHtmlElement)
				ar_PROP_ELEMENTS[prev_el].pHtmlElement = null;			
		}
		catch (e) {}
	}
}


BXPropertiesTaskbar.prototype = new BXTaskbar;

/***  Components taskbar ***/
function BXComponentsTaskbar()
{
	ar_BXComponentsTaskbarS.push(this);
	//alert('BXComponentsTaskbar');
	var obj = this;
	BXComponentsTaskbar.prototype.OnTaskbarCreate = function ()
	{
		var obj = this;

		this.pDataCell = this.CreateScrollableArea(this.pDataCell);

		var table = this.pMainObj.CreateElement("TABLE", {'cellSpacing': '0', 'cellPadding': '8', 'className': "bxtaskbarcomp"});

		table.style.height = "100%";
		this.pDataCell.appendChild(table);
		this.pWnd.style.width = "200px"; //////init
		this.pWnd.style.width = "100%"; //////init
		//this.pWnd.id = 'xxxx';
		this.pCellList = table.insertRow(-1).insertCell(-1);
		this.pCellList.style.height = "0%";
		this.pModulesList = this.pMainObj.CreateCustomElement('BXList',
				{
					'width': '150',
					'height': '150',
					'field_size': '150',
					'bSetGlobalStyles': true,
					'values': [],
					'OnChange': function (selected)
					{
						if(selected)
							obj.ShowComponentList(selected["value"]);
					}
				}
			);

		this.pCellList.appendChild(this.pModulesList.pWnd);

		var emptyRow = table.insertRow(-1).insertCell(-1);
		emptyRow.style.height = "0%";
		emptyRow.innerHTML = "&nbsp;";

		this.pCellComp = table.insertRow(-1).insertCell(-1);
		this.pCellComp.style.height = "100%";
		this.pCellComp.vAlign = "top";

		//this.pCellComp = this.CreateScrollableArea(this.pCellComp);

		this.pMainObj.pComponentTaskbar = this;
		this.BuildList();
/*		//table.style.width = "100%";
*/

		emptyRow = null;
		table = null;
	}

	BXComponentsTaskbar.prototype.BuildList = function ()
	{
		var arList = [];
		var arFolders = this.pMainObj.arTemplateParams["FOLDERS"];
		for(var i=0; i<arFolders.length; i++)
			arList.push({'value': arFolders[i]["ID"], 'name': arFolders[i]["NAME"]});

		this.pModulesList.SetValues(arList);
		this.pModulesList.Select(0);
		this.pModulesList.FireChangeEvent();

		arList = null;
		arFolders = null;
	}

	BXComponentsTaskbar.prototype.ShowComponentList = function (sFolder)
	{
		while(this.pCellComp.childNodes.length>0)
			this.pCellComp.removeChild(this.pCellComp.childNodes[0]);

		var arComponents = [], arAllComponents = this.pMainObj.arTemplateParams["COMPONENTS"];
		for(var i=0; i<arAllComponents.length; i++)
		{
			if(arAllComponents[i]["FOLDER"]==sFolder)
				arComponents.push(arAllComponents[i]);
		}

		var r, c, im, obj = this;
		this.bOpenedBlock = false;
		for(i=0;i<arComponents.length; i++)
		{
			if(arComponents[i]["SEPARATOR"])
			{
				this.__OpenBlock(arComponents[i]["NAME"]);
			}
			else
			{
				if(!this.bOpenedBlock)
					this.__OpenBlock('');
				r = this._tableCompList.insertRow(-1);
				c = r.insertCell(-1);
				//alert(BXSerialize(arComponents[i]));
				im = this.pMainObj.CreateElement('IMG', {'src': arComponents[i]["ICON"]});
				var obj = this;
				//im.onmousedown = function(e) {
					
					//alert('obj.pMainObj.name');
				//	obj.pMainObj.OnEvent("OnSelectionChange"); 
				//}
				im.ondragstart = function (e)
					{
						if(window.event)window.event.cancelBubble = true;
					};
				im.setAttribute("__bxtagname", "component");
				im.setAttribute("__bxcontainer", BXSerialize({"SCRIPT_NAME": arComponents[i]["PATH"], "PARAMS": {}}));

				c.appendChild(im);
				c = r.insertCell(-1);
				c.innerHTML = arComponents[i]["NAME"];
				
				if(BXIsIE())
					im.ondragend = function (e){
							this.id = Math.random();
							//alert(this.nodeName);
							obj.pMainObj.nLastDragNDropComponent = this.id;
							obj.pMainObj.OnDragDrop();
						};
				else
				{
					im.onmousedown = function (e){						
							this.id = Math.random();
							//alert(this.nodeName);
							obj.pMainObj.nLastDragNDropComponent = this.id;
							//obj.pMainObj.pEditorDocument.createEvent("HTMLEvents");
							//e.initEvent("click","true","true");							
							//obj.pMainObj.OnDragDrop();
						};

				}
				
				

				im = null;
			}
		}
		this.__CloseBlock();
		for(i=0; i<this.pCellComp.childNodes.length; i++)
		{
			if(this.pCellComp.childNodes[i].rows)
				this.pCellComp.childNodes[i].rows[0].Hide(true);
		}
	}

	BXComponentsTaskbar.prototype.__OpenBlock = function (name)
	{
		this.__CloseBlock();

		this._tableBlock = this.pCellComp.appendChild(this.pMainObj.CreateElement("table", {cellPadding: '0', border: 0, cellSpacing: 0, width: '100%', className: 'bxedcompblock'}));
		var rowTitle = this._tableBlock.insertRow(-1);
		var c = rowTitle.insertCell(-1);
		c.style.width = '0%';
		var im_l = c.appendChild(this.pMainObj.CreateElement("IMG", {'src': '/bitrix/images/fileman/htmledit2/tscomp-lt-o.gif', 'width': '20', height: '20'}));

		c = rowTitle.insertCell(-1);
		c.unselectable = "on";
		c.style.width = '100%';
		c.id = "title";
		c.innerHTML = (name && name.length>0 ? name : BX_MESS.CompTBTitle);
		c.style.backgroundImage = 'url(/bitrix/images/fileman/htmledit2/tscomp-ct-bg.gif)';

		c = rowTitle.insertCell(-1);
		c.style.width = '0%';
		var im_r = c.appendChild(this.pMainObj.CreateElement("IMG", {'src': '/bitrix/images/fileman/htmledit2/tscomp-rt-o.gif', 'width': '5', height: '20'}));


		var rowData = this._tableBlock.insertRow(-1);
		c = rowData.insertCell(-1);
		c.colSpan = "3";
		c.style.borderLeft = "solid 1px #7A7A7A";
		c.style.borderRight = "solid 1px #7A7A7A";
		this._tableCompList = c.appendChild(this.pMainObj.CreateElement("TABLE", {cellPadding: '2', border: 0, cellSpacing: 0, width: '100%', 'className': 'bxcomplist'}));

		var rowBottom = this._tableBlock.insertRow(-1);
		c = rowBottom.insertCell(-1);
		c.appendChild(this.pMainObj.CreateElement("IMG", {'src': '/bitrix/images/fileman/htmledit2/tscomp-lb.gif', 'width': '20', height: '4'}));

		c = rowBottom.insertCell(-1);
		c.style.backgroundImage = 'url(/bitrix/images/fileman/htmledit2/tscomp-cb.gif)';
		c.appendChild(this.pMainObj.CreateElement("IMG", {'src': '/bitrix/images/1.gif', 'width': '4', height: '4'}));

		c = rowBottom.insertCell(-1);
		c.appendChild(this.pMainObj.CreateElement("IMG", {'src': '/bitrix/images/fileman/htmledit2/tscomp-rb.gif', 'width': '4', height: '4'}));

		this.pCellComp.appendChild(this.pMainObj.CreateElement("IMG", {'src': '/bitrix/images/1.gif', 'width': '4', height: '4'}));

		rowTitle.rowData = rowData;
		rowTitle.rowBottom = rowBottom;
		rowTitle.im_r = im_r;
		rowTitle.im_l = im_l;
		rowTitle.Hide = this.Hide;
		rowTitle.onclick = function(){this.Hide(!this.hidden)};

		this.bOpenedBlock = true;

		rowData = null;
		rowBottom = null;
		im_l = null;
		c = null;
		rowTitle = null;
	}

	BXComponentsTaskbar.prototype.__CloseBlock = function ()
	{
		if(!this.bOpenedBlock)
			return;
		this.bOpenedBlock = false;
	}

	BXComponentsTaskbar.prototype.Hide = function (bHide)
	{
		if(!bHide)
		{
			this.hidden = false;
			this.rowData.style.display = GetDisplStr(1);
			this.rowBottom.style.display = GetDisplStr(1);
			this.im_r.src = '/bitrix/images/fileman/htmledit2/tscomp-rt-o.gif';
			this.im_l.src = '/bitrix/images/fileman/htmledit2/tscomp-lt-o.gif';
		}
		else
		{
			this.hidden = true;
			this.rowData.style.display = GetDisplStr(0);
			this.rowBottom.style.display = GetDisplStr(0);
			this.im_r.src = '/bitrix/images/fileman/htmledit2/tscomp-rt-c.gif';
			this.im_l.src = '/bitrix/images/fileman/htmledit2/tscomp-lt-c.gif';
		}
	}
}

BXComponentsTaskbar.prototype = new BXTaskbar;

/***  Explorer taskbar ***/
function BXExplorerTaskbar()
{

}

BXExplorerTaskbar.prototype = new BXTaskbar;

/***  Clipboard taskbar ***/



/***  Context help taskbar ***/
function BXHelpTaskbar()
{

}

BXHelpTaskbar.prototype = new BXTaskbar;



function BXCreateTaskbars(pMainObj, arParams)
{
	var pTaskbar;
	if(!pMainObj.arConfig["bWithoutPHP"])
	{
		pTaskbar = new BXComponentsTaskbar();
		pTaskbar.Create(pMainObj, BX_MESS.CompTBTitle);
		pMainObj.arTaskbarSet[2].AddTaskbar(pTaskbar);
	}

	/*
	var pTaskbar = new BXExplorerTaskbar();
	pTaskbar.Create(pMainObj, 'Ïðîâîäíèê');
	pMainObj.arTaskbarSet[2].AddTaskbar(pTaskbar);
	pTaskbar1.SetActive();
	*/

	pTaskbar = new BXPropertiesTaskbar();
	pTaskbar.Create(pMainObj, BX_MESS.CompTBProp);
	pMainObj.arTaskbarSet[3].AddTaskbar(pTaskbar);

	/*
	pTaskbar = new BXHelpTaskbar();
	pTaskbar.Create(pMainObj, 'Ïîìîùü');
	pMainObj.arTaskbarSet[3].AddTaskbar(pTaskbar);

	pTaskbar = new BXHelpTaskbar();
	pTaskbar.Create(pMainObj, 'Ïîìîùü');
	pMainObj.arTaskbarSet[2].AddTaskbar(pTaskbar);
	pTaskbar1.SetActive();
	*/

	pTaskbar = null;
}

pBXEventDispatcher.AddEditorHandler("OnCreate", BXCreateTaskbars);