function C1WebCommandBuilder(data)
{
	this._data = data;

	this._Menu = this._data.Class == 'Menu';
	this._ToolBar  = this._data.Class == 'ToolBar';
	this._TopicBar = this._data.Class == 'TopicBar';
	this._TreeView = this._data.Class == 'TreeView';
	this._TabStrip = this._data.Class == 'TabStrip';
	this._hashEls = [];

	this._createElement = function(tag)
	{
		return document.createElement(tag);
	}

	this._rootElement = document.getElementById(data.ClientID);
	// Workaround for a C1WebSplitter's bug

	if (!this._rootElement)
	{
		var tbls = document.getElementsByTagName('table');
		for(var i=0; i<tbls.length; i++)
		{
			var tbl = tbls[i];
			if (!tbl.id && tbl.timestamp == data.TimeStamp)
			{
				this._rootElement = tbl;
				tbl.id = data.ClientID;
				break;
			}
		}
	}

	if (this._rootElement.rows.length >= 1)
		this._contentRow = this._rootElement.rows[0];
	this._nullWidth = '0%';
	if (navigator.userAgent.toLowerCase().indexOf('msie')==-1)
		this._nullWidth = '1px';
	this._CreateTable = function(wide) {
		var _res = this._createElement("TABLE");
		_res.cellPadding = '0';
		_res.cellSpacing = '0';
		_res.border = '0';
		if (this._GetP(wide,true))
			_res.style.width = '100%';
		return _res;
	}
	this._InsertCell = function (row)
	{
		var _cell = row.insertCell(row.cells.length);
		_cell.vAlign = 'top';
		return _cell;
	}
	this._InsertLastCell = function (row)
	{
		return row.insertCell(row.cells.length);
	}
	this._InsertRow = function(_table)
	{
		return _table.insertRow(_table.rows.length);
	}

	this._MergeStyle = function(st, _style)
	{
		var	ss = _style.split(";");
		if (!st)
			return _style;
		for	(var i = 0;	i <	ss.length; i++)
		{
			if (ss[i])
			{
				var	pair = c1c_splitTwice(ss[i], ":");
				if (st.indexOf(pair[0]+':') == -1)
					st += ss[i] + ';';
			}
		}
		return st;
	}
	this._GetCompoundStyle = function(_controlStyle, _groupStyle, _itemStyle, is)
	{
		var st = '';
		if (_itemStyle)
			st += _itemStyle;
		if (_groupStyle)
			st = this._MergeStyle(st, _groupStyle);
		if (_controlStyle)
			st = this._MergeStyle(st, _controlStyle);
		if (is)
			st = this._MergeStyle(st, is);
		return st;
	}
	this._GetCompoundProperty = function(_cProp, _gProp, _iProp)
	{
		var res = '';
		if (typeof(_iProp) != 'undefined')
			return _iProp;
		else if (typeof(_gProp) != 'undefined')
			return _gProp;
		return _cProp;
	}
	this._GetStyleValue = function(_style, _name)
	{
		if (!_style)
			return "";
		//var r = '(?<='+name+':)(.*?)(?=;)';
		var r = "(^|;)"+_name+':(.*?)(?=;)';
		var m = _style.match(new RegExp(r));
		if (m)
		{
			var	pair = c1c_splitTwice(m[0], ":");
			return pair[1];
		}
		else
			return "";
	}
	this._ApplyStyle = function(el, _style, fo)
	{
		if (!_style)
			return;
		var	ss = _style.split(";");
		for	(var i = 0;	i <	ss.length; i++)
		{
			var	pair = c1c_splitTwice(ss[i], ":");
			if (pair.length	== 2)
			{
				if (typeof(el.style[pair[0]]) != 'undefined' && (!fo || pair[0] == 'fontSize' || pair[0] == 'fontFamily'|| pair[0] == 'color' || pair[0] == 'fontStyle' || pair[0] == 'fontVariant' || pair[0] == 'fontWeight' || pair[0] == 'textAlign'  || pair[0] == 'textDecoration'))
					el.style[pair[0]] = pair[1];
				else if (pair[0] == 'className' && !fo)
					el.className = pair[1];
			}
		}
	}
	this._Content_CreateInternalRepresentationControl = function(row, groupData, data, vert)
	{
		if (this._contentRow)
		{
			var contentCell = this._contentRow.cells[data.ContentIndex];
			this._contentRow.removeChild(contentCell);
			row.appendChild(contentCell);
			this._contentRow.insertCell(data.ContentIndex);
		}
	}
	this._Sep_CreateInternalRepresentationControl = function(body, groupData, data, vert)
	{
		var style = this._GetCompoundStyle(this._data.SeparatorStyle, groupData.SeparatorStyle, data.SeparatorStyle);
		if (style)
		{
			var paddingBottom = this._GetStyleValue(style, "PaddingBottom");
			if (paddingBottom)
				body.style.paddingBottom = paddingBottom;
			var paddingTop = this._GetStyleValue(style, "PaddingTop");
			if (paddingTop)
				body.style.paddingTop = paddingTop;
			var paddingLeft = this._GetStyleValue(style, "paddingLeft");
			if (paddingLeft)
				body.style.paddingLeft = paddingLeft;
			var paddingRight = this._GetStyleValue(style, "paddingRight");
			if (paddingRight)
				body.style.paddingRight = paddingRight;
		}
		if (!vert && typeof(this._data.ItemSize) == 'undefined')
			body.style.height = '100%';
		var innerTable = this._CreateTable(vert);
		body.appendChild(innerTable);
		if (!vert)
		{
			if (typeof(this._data.ItemSize) != 'undefined')
				innerTable.style.height = this._data.ItemSize;
			else if (this._ToolBar)
				innerTable.style.height = '100%';
		}
		var innerRow = innerTable.insertRow(0);
		var innerBody = this._InsertCell(innerRow);

		innerBody.vAlign = 'middle';
		var img = this._createElement('IMG');
		innerBody.appendChild(img);
		img.style.width = '0px';
		img.style.height = '0px';
		img.style.borderWidth = '0px';
		img.width = '';
		img.height = '';
		img.src = this._data.Urls[0];

		var backImageUrl = this._GetStyleValue(style, "BackImageUrl");	  
		if (backImageUrl)
			innerBody.style.backgroundImage = 'url(' + this._data.Urls[backImageUrl] + ')';;

		var size = this._GetStyleValue(style, "BackImageSize");	 
		if (vert)
			innerBody.style.height = size;
		else
			innerBody.style.width = size;
		this._ApplyStyle(body, style);
		var cssClass = this._GetStyleValue(style, "CssClass"); 
		if (!backImageUrl && !cssClass)
		{
			var borderColor = this._GetStyleValue(style, "borderColor");
			var borderStyle = this._GetStyleValue(style, "borderStyle");
			var borderWidth = this._GetStyleValue(style, "borderWidth");
			body.style.borderColor = '';
			if (borderColor)
			{
				body.style.borderColor = '';
				innerBody.style[this._GetCssAttrName("Color", vert)] = borderColor;
			}
			if (borderStyle)
			{
				body.style.borderStyle = '';
				innerBody.style[this._GetCssAttrName("Style", vert)] = borderStyle;
			}
			if (borderWidth)
			{
				body.style.borderWidth = '';
				innerBody.style[this._GetCssAttrName("Width", vert)] = borderWidth;
			}
		}
		// height
		if (!vert)
		{
			var div = this._createElement('DIV');
			innerBody.appendChild(div);
			div.style.overflow = 'hidden';
			div.style.width = '0px';
			div.innerHTML = 'x';
		}

	}

	this._GetCssAttrName = function(part, vert)
	{
		var prefix;
		if (vert)
			prefix = "borderTop";
		else
			prefix = "borderLeft";
		return prefix + part;
	}

	this._Group_ProcessBodyRowStyle = function(row, data, vert)
	{
		if (!vert)
			row.style.height = '100%';
	}
	this._ProcessLabelCell = function(cell, groupData, data, style, header)	   
	{
		cell.unselectable = 'on';
		var wrap = this._GetP(this._GetCompoundProperty(groupData.WrapText, data.WrapText), true);
		if (!wrap || header)
			cell.style.whiteSpace = "nowrap";
		if (data.Text) cell.innerHTML = data.Text;				  
		cell.vAlign = 'middle';
		var ha = this._GetStyleValue(style, "ItemAlign");
		if (ha) cell.align = ha;
		// LabelPadding
		var p;
		p = this._GetStyleValue(style, "LabelPaddingLeft");
		if (p) cell.style.paddingLeft = p;
		p = this._GetStyleValue(style, "LabelPaddingRight");
		if (p) cell.style.paddingRight = p;
		p = this._GetStyleValue(style, "LabelPaddingTop");
		if (p) cell.style.paddingTop = p;
		p = this._GetStyleValue(style, "LabelPaddingBottom");
		if (p) cell.style.paddingBottom = p;
	}
	this._ProcessIconCell = function(cell, groupData, data, style, iw, id)	  
	{
		cell.unselectable = 'on';
		var lit = this._createElement('DIV');
		var img = this._createElement('IMG');
		img.id = id + '_img';
		lit.appendChild(img);
		cell.appendChild(lit);
		if (iw)
		{
			//lit.style.display = "inline-block";
			lit.style.width = iw;
			cell.style.width = iw;
		}
		else
			cell.style.width = this._nullWidth;
		var pos = this._GetStyleValue(style, "ItemImagePosition");
		img.style.borderWidth = '0px';

		//if (data.Class == 'Header')
		//{
		img.style.width = '1px';
		img.style.height = '1px';
		//}
		img.onload = this._onload;


		if (data.ImageUrl)
			img.src = this._data.Urls[data.ImageUrl];
		else
		{
			img.src = this._data.Urls[0];
			img.style.display = 'none';
		}

		var its = this._GetStyleValue(style, "ImageTextSpacing");
		if (its)
			img.style.marginRight = its;
		else if (data.ImageUrl)
			img.style.marginRight = '4px';

	}
	this._ProcessBoundary = function(table, boundaryTable, leftCell, middleCell, rightCell, vert, data, groupData)
	{
		if (vert)
		{
			table.style.width = '100%';
			table.rows[0].style.height = '100%';
		}
		else
			table.style.height = '100%';
		var lburl = this._GetUrl(this._GetStyleValue(data.CurrentStyle, "LeftBorderImageUrl"));
		var mx = data.Class == 'Header' && this._data.MixedBordersMode;
		if (lburl && !(mx && groupData.Index != "0"))
		{
			var img = this._createElement('IMG');
			img.style.borderWidth = '0px';
			img.id = data.ClientID + '_lbi';
			img.style.width = '1px';
			img.style.height = '1px';
			img.onload = this._onload;
			img.src = lburl;
			leftCell.appendChild(img);
			leftCell.style.width = this._nullWidth;
		}
		var rburl;
		if (!mx)
			rburl = this._GetUrl(this._GetStyleValue(data.CurrentStyle, "RightBorderImageUrl"));
		else
		{
			if (!groupData.NextIsActive)
				rburl = this._GetUrl(this._GetStyleValue(data.CurrentStyle, "RightBorderImageUrl"));
			else
				rburl = this._GetUrl(this._GetStyleValue(this._data.ActiveHeaderStyle, "LeftBorderImageUrl"));			  

		}
		if (rburl)
		{
			var img = this._createElement('IMG');
			img.style.borderWidth = '0px';
			img.id = data.ClientID + '_rbi';
			img.onload = this._onload;
			img.style.width = '1px';
			img.style.height = '1px';
			img.src = rburl;
			rightCell.appendChild(img);
			rightCell.style.width = this._nullWidth;
		}


	}
	this._Item_CreateRepresentationControl = function(body, groupData, data, vert, id) 
	{
		this._ProcessItemSpecialSymbolStyle(data, groupData);
		if (data.Class == 'LinkItem' || data.Class == 'Header')
		{
			data.ClientID = id;
			var en = this._GetCompoundProperty(this._data.Enabled, groupData.Enabled, data.Enabled);
			data.IsEnabled = this._GetP(en, true);
			data.Target = this._GetCompoundProperty(data.Target, groupData.Target,this._data.Target);
			var st;
			if (data.Class == 'Header')
			{
				st = this._GetCompoundStyle(this._data.InactiveHeaderStyle, groupData.InactiveHeaderStyle);
				data.CItemStyle = st;
				data.CMouseOverItemStyle = this._GetCompoundStyle(this._data.MouseOverInactiveHeaderStyle, groupData.MouseOverInactiveHeaderStyle, '', data.CItemStyle);
				data.CSelectedItemStyle = this._GetCompoundStyle(this._data.ActiveHeaderStyle, groupData.ActiveHeaderStyle, '', data.CItemStyle);
				data.CMouseOverSelectedItemStyle = this._GetCompoundStyle(this._data.MouseOverActiveHeaderStyle, groupData.MouseOverActiveHeaderStyle, '', data.CItemStyle);

				if (!data.IsEnabled)
				{
					st = this._GetCompoundStyle(this._data.DisabledHeaderStyle, groupData.DisabledHeaderStyle, '', st);
					data.CDisabledItemStyle = st;
					data.CItemStyle = st;
				}	 
				else if (data.Selected)
					st = data.CSelectedItemStyle;
			}
			else
			{
				st = this._GetCompoundStyle(this._data.ItemStyle, groupData.ItemStyle, data.ItemStyle);
				data.CItemStyle = st;
				data.CMouseOverItemStyle = this._GetCompoundStyle(this._data.MouseOverItemStyle, groupData.MouseOverItemStyle, data.MouseOverItemStyle, data.CItemStyle);
				data.CSelectedItemStyle = this._GetCompoundStyle(this._data.SelectedItemStyle, groupData.SelectedItemStyle, data.SelectedItemStyle, data.CItemStyle);
				data.CMouseOverSelectedItemStyle = this._GetCompoundStyle(this._data.MouseOverSelectedItemStyle, groupData.MouseOverSelectedItemStyle, data.MouseOverSelectedItemStyle, data.CItemStyle);
				if (this._Menu && this._GetP(data.Level,1) > 0)
				{	 
					st = this._GetCompoundStyle(this._data.SubMenuItemStyle, groupData.SubMenuItemStyle, data.SubMenuItemStyle, st);
					data.CItemStyle = st;
					data.CMouseOverItemStyle = this._GetCompoundStyle(this._data.SubMenuMouseOverItemStyle, groupData.SubMenuMouseOverItemStyle, data.SubMenuMouseOverItemStyle, data.CMouseOverItemStyle);
					data.CSelectedItemStyle = this._GetCompoundStyle(this._data.SubMenuSelectedItemStyle, groupData.SubMenuSelectedItemStyle, data.SubMenuSelectedItemStyle, data.CSelectedItemStyle);
					data.CMouseOverSelectedItemStyle = this._GetCompoundStyle(this._data.SubMenuMouseOverSelectedItemStyle, groupData.SubMenuMouseOverSelectedItemStyle, data.SubMenuMouseOverSelectedItemStyle, data.CMouseOverSelectedItemStyle);
				}
				if (this._Menu)
				{
					var checkImg;
					var o = this._GetP(data.Level,1) == 0 ? this._data : groupData;
					if (!this._GetP(o.AllowMultipleSelect, true) && data.SpecialSymbolStyle.RadioMarkImageUrl)
						checkImg = data.SpecialSymbolStyle.RadioMarkImageUrl;
					else if(data.SpecialSymbolStyle.CheckMarkImageUrl)
						checkImg = data.SpecialSymbolStyle.CheckMarkImageUrl;
					if (checkImg && !(this._GetStyleValue(data.CItemStyle, "ImageUrl") || this._GetStyleValue(data.CMouseOverItemStyle, "ImageUrl") || this._GetStyleValue(data.CSelectedItemStyle, "ImageUrl") || this._GetStyleValue(data.CMouseOverSelectedItemStyle, "ImageUrl")))
					{
						data.CSelectedItemStyle += 'ImageUrl:'+checkImg+';';
						data.CMouseOverSelectedItemStyle += 'ImageUrl:'+checkImg+';';
					}
				}
				if (!data.IsEnabled)
					st = this._GetCompoundStyle(this._data.DisabledItemStyle, groupData.DisabledItemStyle, data.DisabledItemStyle, st);
				else if (data.Selected)
					st = data.CSelectedItemStyle;
			}
			data.CurrentStyle = st;
			data.Hash = this.getHash(vert,st,data,groupData);
			data.ImageUrl = this._GetStyleValue(st, "ImageUrl");

			var res;
			var iipos = this._GetStyleValue(st, "ItemImagePosition");
			data.TextOnly = iipos == 'TextOnly';
			data.ImageOnly = iipos == 'ImageOnly';
			var elToClone = this.getFromHashTable(data.Hash);
			if (elToClone)
			{
				res = this.cloneItem(elToClone, id, data);
				body.appendChild(res);	  
				return res;
			}
			res = this._CreateTable();
			body.appendChild(res);
			res.id = id + '_bt';
			if (data.IsEnabled && !this._data.firstLinkItem)
				this._data.firstLinkItem = res;
			var tr = res.insertRow(0);
			var lc = this._InsertCell(tr);
			var mc = this._InsertCell(tr);
			var rc = this._InsertCell(tr);


			//C1WebItemBase.ProcessBoundary
			if (vert)
			{
				res.style.width = '100%';
				//tr.style.height = '100%';
			}
			else
			{
				//??? res.style.height = '100%';
			}

			lc.style.height = '100%';
			mc.style.height = '100%';
			rc.style.height = '100%';
			mc.style.width = '100%';
			rc.style.width = this._nullWidth;
			lc.style.width = this._nullWidth;
			mc.vAlign = 'middle';
			mc.id = id + '_mbc';
			lc.vAlign = 'middle';
			rc.vAlign = 'middle';

			var url =  this._GetStyleValue(st, "BackImageUrl");			 
			if (url)
				mc.style.backgroundImage = 'url('+this._data.Urls[url]+')';

			// C1WebItemBase.ProcessTableStyle
			res.style.width = '100%';


			var it = this._CreateTable();
			mc.appendChild(it);
			//it.style.width = '100%';
			//if (data.Class != 'Header' || this.TabPos == 'Top' ||	 this.TabPos == 'Bottom' )
			//	  it.style.height = '100%';

			var ir = it.insertRow(0);
			//if (data.Class == 'Header' && this.TabPos != 'Top' &&	 this.TabPos != 'Bottom')
			//	  ir.style.height = '100%';

			var ic = this._InsertCell(ir);
			ic.id = id;

			this._ProcessBoundary(it, res, lc, mc, rc, vert, data, groupData);
			if (data.ToolTip)
				ic.title = data.ToolTip;
			if (data.Class != 'Header')
			{
				var p = this._GetCompoundProperty(this._data.ItemPadding, groupData.ItemPadding);
				if (p)
					ic.style.padding = p;
			}

			var it1 = this._CreateTable();
			ic.appendChild(it1);
			it1.style.height = '100%';
			it1.style.width = '100%';
			ic.vAlign = 'top';

			for(var r=0; r<3; r++)
			{
				ir = it1.insertRow(r);
				ir.style.height = '0px';
				for(var c=0; c<3; c++)
				{
					var ic1 = this._InsertCell(ir);
					if (r != 1)
						ic1.style.height = '0%';
					ic1.vAlign = 'top';
					if (c == 0)
						ic1.align = 'left';
					else if (c == 2)
						ic1.align = 'right';
				}
			}
			if (!data.TextOnly)
			{
				var i_cell = it1.rows[1].cells[0];
				if (iipos == 'Far')
					i_cell = it1.rows[1].cells[2];
				else if (iipos == 'Top')
					i_cell = it1.rows[0].cells[1];
				else if (iipos == 'Bottom')
					i_cell = it1.rows[2].cells[1];
				var iw;
				if (this._Menu && this._GetP(data.Level,1) > 0)
				{
					iw = this._GetCompoundProperty(this._data.SubMenuIconBarWidth, groupData.IconBarWidth, data.IconBarWidth);
					if (!iw)
						iw = this._data.IconBarWidth;
				}
				else
					iw = this._GetCompoundProperty(this._data.IconBarWidth, groupData.IconBarWidth, data.IconBarWidth);
				if (iw)
					i_cell.style.width =  iw;
				else 
					i_cell.style.width =  '0%';
				this._ProcessIconCell(i_cell, groupData, data, st, iw, id);
			}
			mc = it1.rows[1].cells[1];
			if (!data.ImageOnly)
			{
				this._ProcessLabelCell(mc, groupData, data, st, data.Class == 'Header');
				mc.id = id+'_txt';
			}
			this._ApplyStyle(ic, st);
			this._ApplyStyle(it1, st, true);
			this._Item_ProcessTableStyle(res, vert);
			// C1WebToolBarItem_InternalPostProcessInnerTable
			if (this._ToolBar)
				this._ToolBarItem_InternalPostProcessInnerTable(it1, data, vert, id);
			else if (data.Class == 'Header')
				this._Header_InternalPostProcessInnerTable(it1, data, vert, id);
			else if (this._Menu)
				this._MenuItem_InternalPostProcessInnerTable(it1, groupData, data, vert);	 
			else if (this._TreeView)
				this._TreeItem_InternalPostProcessInnerTable(it1, groupData, data, vert);	 
			this._Shortcut_InternalPostProcessInnerTable(it1, data, vert, id);
			if (!data.CheckedCheckBox)
				this.addElToHash(data.Hash, res, id);
			return res;
		}
		else if (data.Class == 'Separator')
		{
			var res = this._CreateTable(vert);
			body.appendChild(res);
			var row = res.insertRow(0);
			var cell = this._InsertCell(row);
			this._Sep_CreateInternalRepresentationControl(cell, groupData, data, vert);
			this._Item_ProcessTableStyle(res, vert);
			return res;
		}
		else if (data.Class == 'ContentItem')
		{
			var res = this._CreateTable(vert);
			body.appendChild(res);
			var row = res.insertRow(0);
			this._Content_CreateInternalRepresentationControl(row, groupData, data, vert);
			this._Item_ProcessTableStyle(res, vert);
			return res;
		}

	}
	this._TreeItem_InternalPostProcessInnerTable = function(it, groupData, data, vert)
	{
		var row = it.rows[0];
		var cellBefore = row.firstChild;
		if (data.ShowCheckBox)
		{
			var cell_cbx = row.insertCell(0);
			cellBefore = cell_cbx;
			cell_cbx.rowSpan = 3;
			cell_cbx.style.align = 'left';
			cell_cbx.vAlign = 'middle'; 
			cell_cbx.style.width = '1px';
			var cbx = this._createElement('INPUT');
			cbx.type = 'checkbox';
			cell_cbx.appendChild(cbx);
			var _checked = this._GetP(data.Selected, false);
			if (_checked)
			{
				cbx.checked = true;
				data.CheckedCheckBox = true;
			}
			if (!this._GetP(data.IsEnabled, true))
				cbx.setAttribute('disabled', 'disabled');
			cbx.onclick = SetCheckboxClicked;
			cbx.id = data.ClientID + '_cbx';

		}
		var indCell = this._createElement('TD');
		indCell.rowSpan = 3;
		indCell.style.width = this._nullWidth;
		indCell.align = 'right';
		indCell.vAlign = 'middle';
		var indTxt = '&nbsp;';
		var style = data.SpecialSymbolStyle;
		var indUrl = style.NoExpandNodeImageUrl; 
		var indId = data.ClientID + '_ti';
		if (data.NestedGroup || data.ActualPopulateOnDemand)
			if (data.ActualPopulateOnDemand || !this._GetP(data.NestedGroup.ActualActive, true))
			{
				indUrl = style.CollapsedNodeImageUrl;
				indTxt = "+";
			}
			else
			{
				indUrl = style.ExpandedNodeImageUrl;
				indTxt = "-";
			}
		if (indUrl)
		{
			var img = this._createElement('IMG');
			img.id = indId;
			img.onload = this._onload;
			img.style.width = '16px';
			img.style.height = '16px';
			img.src = this._GetUrl(indUrl); 
			img.style.borderWidth = '0px';

			if (this._data.ShowLines && this._GetP(data.Level, 1) > 0)
			{
				var indLine = row.insertCell(0);
				indLine.rowSpan = 3;
				indLine.style.width = this._nullWidth;
				indLine.align = 'left';
				indLine.vAlign = 'bottom';

				var indLineImg = this._createElement('IMG');
				indLineImg.style.borderWidth = '0px';
				indLineImg.src = this._GetUrl(style.HorizontalLineImageUrl);
				indLine.appendChild(indLineImg);
			}

			indCell.appendChild(img);
			img.onclick = SetPlusMinusClicked;
		}
		else
		{
			var lc = this._createElement('SPAN');
			lc.id = indId;
			lc.style.width = '20px';
			lc.style.textAlign = 'center';
			lc.innerHTML = indTxt;
			indCell.appendChild(lc);
		}
		row.insertBefore(indCell, cellBefore);
	}
	this._MenuItem_InternalPostProcessInnerTable = function(it, groupData, data, vert)
	{
		var smm = this._GetP(this._data.SubMenuMark, 'Yes');
		if (smm == 'No' || (!(data.SubMenu || smm == 'Yes') || !vert))
			return;
		var row = it.rows[0];
		var cellInd;
		if (this._GetP(this._data.HorzPopupDirection, 'LeftToRight') == 'LeftToRight')
			cellInd = 3;
		else
			cellInd = 0;
		var indCell = row.insertCell(cellInd);
		indCell.rowSpan = 3;
		indCell.style.width = this._nullWidth;
		indCell.align = 'right';
		indCell.vAlign = 'middle';
		var indUrl; 
		var indTxt;
		indUrl	= this._GetUrl(this._data.SpecialSymbolStyle.SubMenuMarkImageUrl);
		indTxt = groupData.SpecialSymbolStyle.SubMenuMarkText;
		if (!indTxt && !indUrl)
		{
			indUrl = this._GetUrl(this._data.SubMenuMarkImageUrl);
		}
		if (indUrl)
		{
			var img = this._createElement('IMG');
			indCell.appendChild(img);
			img.style.borderWidth = '0px';
			{
				img.onload = this._onload;
				img.style.width = '10px';
			}
			if (!data.SubMenu)
				img.style.visibility = 'hidden';
			img.src = indUrl;
			img.alt = " ";
		}
		else
		{
			if (data.SubMenu)
				indCell.innerHTML = indTxt;
			else
				indCell.innerHTML = "<span style=\"overflow:hidden;height:0px;visibility:hidden;\">_</span>";
		}
	}
	this._ToolBarItem_InternalPostProcessInnerTable = function(it, data, vert, id)
	{
		var row = it.rows[0];
		if (data.HasDropDownButton && !vert)
		{
			var _cell_cbx = this._InsertCell(row);
			_cell_cbx.rowSpan = 3;
			_cell_cbx.align = 'left';
			_cell_cbx.vAlign = 'middle';
			_cell_cbx.style.width = '1px';
			_cell_cbx.setAttribute('unselectable', 'on');

			var _img = this._createElement('IMG');
			_cell_cbx.appendChild(_img);
			_img.style.width = '9px';
			_img.style.height = '16px';
			_img.style.borderWidth = '0px';
			_img.src = this._data.Urls[data.DropDownButtonImageUrl];
			if (data.IsEnabled)
			{
				_cell_cbx.onclick = this._dropDownButtonFunc;
				_cell_cbx.id = id + '_dropBtn';
				_cell_cbx._dropDownContextMenuId = data.DropDownContextMenuId;
			}
		}
		var indCell = row.insertCell(0);
		indCell.rowSpan = 3;
		indCell.style.width = this._nullWidth;
		indCell.align = 'right';
		indCell.vAlign = 'middle';
	}
	this._Shortcut_InternalPostProcessInnerTable = function(it, data, vert, id)
	{
		var row = it.rows[0];
		if (data.KeyboardShortcut && this._GetP(this._data.ShowKeyboardShortcuts, true))
		{
			var idx = this._TreeView ? 4 : 3;
			var _cell_cbx = row.insertCell(idx);
			_cell_cbx.rowSpan = 3;
			_cell_cbx.align = 'right';
			_cell_cbx.vAlign = 'middle';
			_cell_cbx.innerHTML = data.KeyboardShortcut;			
		}
	}
	this._Header_InternalPostProcessInnerTable = function(it, data, vert, id)
	{
		var row = it.rows[0];
		var exStyle;
		var colStyle;
		if (data.IsEnabled)
		{
			exStyle = data.CSelectedItemStyle;
			colStyle = data.CItemStyle;
		}
		else
		{
			exStyle = data.CDisabledItemStyle;
			colStyle = exStyle;
		}

		var iip =  this._GetStyleValue(exStyle, "ItemImagePosition");		 
		var cellind;
		if (iip && iip == 'Far')
			cellInd = 0;
		else
			cellInd = 3;

		var indCell = row.insertCell(cellInd);
		indCell.rowSpan = 3;
		indCell.style.width = this._nullWidth;
		indCell.align = 'right';
		indCell.vAlign = 'middle';

		var img = this._createElement('IMG');
		indCell.appendChild(img);
		img.style.borderWidth = '0px';
		img.id = id + '_ind';

		var indUrl;	   
		if (data.Selected)		  
			indUrl = this._GetStyleValue(exStyle, "IndicatorUrl"); 
		else
			indUrl = this._GetStyleValue(colStyle, "IndicatorUrl"); 

		if (!indUrl)
		{
			indUrl = 0;
			img.style.height = '0%';
			img.style.width = this._nullWidth;

		}
		else
		{
			img.onload = this._onload;
			img.style.height = '1px';
			img.style.width = '25px';
		}

		img.src = this._GetUrl(indUrl);
	}

	this._Item_ProcessTableStyle = function(res, vert)
	{
		res.style.width = '100%';
	}

	this._ProcessBodyStyle = function(cell, data, vert)
	{
		// C1WebCustomGroup.ProcessBodyStyle
		if (!vert)
			cell.style.height = '100%';
		var gp = this._GetCompoundProperty(this._data.GroupPadding, data.GroupPadding);
		if (gp)
			cell.style.padding = gp;
	}
	this._CreateItemSpacing = function(item,vert,isp)
	{
		var st;
		if (vert)
			st = "height";
		else
			st = "width";
		var res = this._createElement('DIV');
		res.style.overflow = 'hidden';
		res.style[st] = isp;

		if (vert && (this._rootElement.style.textDecorationOverline ||
					 this._rootElement.style.textDecorationUnderline ||
					 this._rootElement.style.textDecorationLineThrough))
			res.innerHTML = '';
		else
			res.innerHTML = '&nbsp;';
		return res;
	}

	this._Item_AddRepresantationNestedGroup = function(cell, group, item, vert, id, level)
	{
		if (item.SubMenu)
			this._Group_CreateRepresentationControl(cell, item.SubMenu, 0, this._GetP(item.Level,0), item.ClientID);
		if (item.ActualPopulateOnDemand)
		{
			item.NestedGroup = new Object();
			item.NestedGroup.WaitControl = true;
			item.NestedGroup.ActualActive = false;
		}

		if (item.NestedGroup)
		{
			if (item.ShowCheckBox)
				item.NestedGroup.ShowCheckBoxes = true;
			var table = this._CreateTable();
			cell.appendChild(table);
			var row = this._InsertRow(table);
			var cell1 = this._InsertCell(row);
			var cell2 = this._InsertCell(row);

			if (this._data.ShowLines)
			{
				var style = group.SpecialSymbolStyle;
				var indUrl = this._GetUrl(style.NoExpandNodeImageUrl); 
				var vertUrl = this._GetUrl(style.VerticalLineImageUrl); 
				cell1.style.width = '10px';
				cell1.style.backgroundRepeat = 'repeat-y';
				cell1.style.backgroundPosition = 'bottom right';
				cell1.style.backgroundImage = 'url('+vertUrl+')';

			}
			else
				cell1.style.width = '20px';

			this._Group_CreateRepresentationControl(cell2, item.NestedGroup, 0, this._GetP(item.Level,0), item.ClientID);
		}

	}
	this._Group_CreateItemsRepresentationControls = function(row, data, vert, group_id) 
	{
		var vis = 0;
		var isp = this._GetCompoundProperty(this._data.ItemSpacing, data.ItemSpacing);
		//if (typeof(data.Items) == 'undefined')
		//	  return;
		this._Group_ProcessBodyRowStyle(row, data, vert);
		if (vert)
		{
			var cell = this._InsertCell(row);
			this._ProcessBodyStyle(cell, data, vert);
			if (this._data.ExpandEffect && this._TopicBar)
			{
				div = document.createElement('div');
				div.id = row.id+'_expand';
				cell = cell.appendChild(div);
				div = document.createElement('div');
				cell = cell.appendChild(div);
			}
			if (typeof(data.Items) != 'undefined')
			{
				for(var i=0;i<data.Items.length;i++) {
					var item = data.Items[i];
					if (data.ShowCheckBoxes)
						item.ShowCheckBox = true;
					if (typeof(item.Visible) == 'undefined' || item.Visible)
					{
						if (vis > 0 && typeof(isp) != 'undefined')
						{
							var c = this._CreateItemSpacing(item,vert,isp);
							if (c)
								cell.appendChild(c);
						}
						var id = group_id + '_i'+item.Index; 
						this._Item_CreateRepresentationControl(cell, data, item, vert, id);
						this._Item_AddRepresantationNestedGroup(cell, data, item, vert, id);
						vis++;
					}
				}
			}
			else
			{
				if (this._rootElement.style.textDecorationOverline ||
					this._rootElement.style.textDecorationUnderline ||
					this._rootElement.style.textDecorationLineThrough)
					cell.innerHTML = '<br/>';
				else
					cell.innerHTML = '&nbsp;';
			}
		}
		else
		{
			if (typeof(data.Items) != 'undefined')
				for(var i=0;i<data.Items.length;i++) {
					var item = data.Items[i]; 
					if (typeof(item.Visible) == 'undefined' || item.Visible)
					{
						var cell = this._InsertCell(row);
						this._ProcessBodyStyle(cell, data, vert);

						var id = group_id + '_i'+i; 
						this._Item_CreateRepresentationControl(cell, data, item, vert, id);
						this._Item_AddRepresantationNestedGroup(cell, data, item, vert, id);
						if (vis > 0 && typeof(isp) != 'undefined')
						{
							if (vert)
								cell.style.paddingTop = isp;
							else
								cell.style.paddingLeft = isp;
						}

						vis++;
					}
				}
		}
		// C1WebGroupHeader.CreateItemsRepresentationControls
		if (this._TopicBar || this._TabStrip || data.WaitControl)
		{
			this._Group_CreateWaitCallbackControl(row, data, group_id, this._GetP(data.ActualPopulateOnDemand, false) && !this._GetP(data.ActualActive, true));
		}
	}
	this._Group_CreateWaitCallbackControl = function(bodyRow, data, id, visible)
	{
		if (visible)
		{
			while (bodyRow.firstChild)
				bodyRow.removeChild(bodyRow.firstChild);
		}
		var cell; 
		if (this._TreeView)
		{
			cell = this._InsertCell(bodyRow);
			this._ProcessBodyStyle(cell, data, true);
			cell.align = 'left';
			cell.style.width = '100%';
		}
		else
		{
			cell = bodyRow.firstChild.appendChild(document.createElement('DIV'));
			this._ProcessBodyStyle(cell, data, true);
			cell.align = 'center';
		}
		cell.id = id + '_cb';

		if (!this._data.CallbackWaitControlID)
		{
			cell._dontClone = true;
			var waitimg = this._GetUrl(this._GetP(this._data.CallbackWaitImageUrl, 1));
			var img = this._createElement('IMG');
			cell.appendChild(img);
			img.style.borderWidth = 0;
			img.src = waitimg;
			data.CallbackWaitControlID = cell.id;
		}
		else
			data.CallbackWaitControlID = this._data.CallbackWaitControlID;

		if (!visible && !this._TreeView)
			cell.style.display = 'none';

	}
	this._ProcessSpecialSymbolStyle = function(data)
	{
		if (!this._data.SpecialSymbolStyle)
			this._data.SpecialSymbolStyle = new Object();
		var cst = this._data.SpecialSymbolStyle;
		if (!data.SpecialSymbolStyle)
			data.SpecialSymbolStyle = cst;
		var gst = data.SpecialSymbolStyle;
		this._ProcessSSS(gst, cst);

	}
	this._ProcessSSS = function(gst, cst)
	{
		if (!gst.CheckMarkImageUrl)
			gst.CheckMarkImageUrl = cst.CheckMarkImageUrl;
		if (!gst.RadioMarkImageUrl)
			gst.RadioMarkImageUrl = cst.RadioMarkImageUrl;
		if (!gst.SubMenuMarkImageUrl)
			gst.SubMenuMarkImageUrl = cst.SubMenuMarkImageUrl;
		if (!gst.SubMenuMarkText)
			gst.SubMenuMarkText = cst.SubMenuMarkText;
		if (!gst.CollapsedNodeImageUrl)
			gst.CollapsedNodeImageUrl = cst.CollapsedNodeImageUrl;
		if (!gst.NoExpandNodeImageUrl)
			gst.NoExpandNodeImageUrl = cst.NoExpandNodeImageUrl;
		if (!gst.ExpandedNodeImageUrl)
			gst.ExpandedNodeImageUrl = cst.ExpandedNodeImageUrl;
		if (!gst.VerticalLineImageUrl)
			gst.VerticalLineImageUrl = cst.VerticalLineImageUrl;
		if (!gst.HorizontalLineImageUrl)
			gst.HorizontalLineImageUrl = cst.HorizontalLineImageUrl;
	}
	this._ProcessItemSpecialSymbolStyle = function(data, _gdata)
	{
		if (!_gdata.SpecialSymbolStyle)
			_gdata.SpecialSymbolStyle = new Object();
		var cst = _gdata.SpecialSymbolStyle;
		if (!data.SpecialSymbolStyle)
			data.SpecialSymbolStyle = cst;
		var gst = data.SpecialSymbolStyle;
		this._ProcessSSS(gst, cst);
	}
	this._Group_CreateRepresentationControl = function(cell, data, index, level, parId)
	{
		this._ProcessSpecialSymbolStyle(data);
		var vert = !(this._ToolBar && (typeof(this._data.Layout) == "undefined" || this._data.Layout == 'Horizontal'));
		var res = this._CreateTable(vert && !this._Menu);
		var row = res.insertRow(res.rows.lenght);
		with (res) {
			if (this._TopicBar || this._TabStrip || this._ToolBar)
				id = parId + '__g' + index;
			else
				id = parId + '_g' + index;
			data.ClientID = id;
			row.id = id + '_br';
		}
		if (this._Menu)
		{
			res.style.display = "none";
			data.IsActive = false;
		}
		if (this._TopicBar && !this._GetP(data.ActualActive, true))
		{
			row.style.display = "none";
			data.IsActive = false;
		}
		else if (this._TabStrip && !this._GetP(data.ActualActive, true))
		{
			data.IsActive = false;
			res.style.display = "none";
		}
		else if (this._TreeView	 && !this._GetP(data.ActualActive, true))
		{
			data.IsActive = false;
			res.style.display = "none";
		}
		var div = null;
		if (this._data.ExpandEffect && this._data.ExpandEffect != 'Fade' && !this._TopicBar)
		{
			div = document.createElement('div');
			div.id = res.id+'_expand';
		}

		if (!div)
		{
			if (this._Menu)
				this._rootElement.parentNode.appendChild(res);
			else
				cell.appendChild(res);
		}
		else
		{
			if (this._Menu)
				this._rootElement.parentNode.appendChild(div);
			else
				cell.appendChild(div);
			div.appendChild(res);
		}
		with (res) {
			if (data.ToolTip)
				title = data.ToolTip;
			var st;
			data.IsActive = true;
			this._Group_ProcessTableStyle(res, data, vert);

			//if (this.Class == 'TopicBar' && typeof(this._data.ShowGroupHeaders) == 'undefined')
			//{
			//	  var headerRow = res.insertRow(res.rows.lenght);
			//	  var headerCell = this._InsertCell(row);
			//	  headerCell.valign = 'top';
			//}


			if (!this._TabStrip)
				data.BodyRowClientID = id + '_br';
			else
				data.BodyRowClientID = id;

			row.style.height = '100%';
			// HasHeaderRow
			if (this._TopicBar && this._GetP(this._data.ShowGroupHeaders, true))
			{
				var hr = res.insertRow(0);
				var hc = this._InsertCell(hr);
				this._ProcessHeaderRow(hr);
				this._ProcessHeaderCell(hc, data, index);
			}

			this._Group_CreateItemsRepresentationControls(row, data, vert, id);
		}
		if (!this._GetP(data.Enabled, true))
			res._disabled = true;
		return res;
	}	
	this._ProcessHeaderRow = function(row)
	{
	}
	this._ProcessHeaderCell = function(cell, gdata, index)
	{
		if (this._TopicBar)
		{
			var header = this._Header_Create(cell, gdata, index);
			this._ProcessHeaderControlStyle(header);
		}
	}
	this._Header_Create = function(cell, gdata, index)
	{
		var data = {Class: 'Header', Selected: this._GetP(gdata.ActualActive, true), Text: this._GetP(gdata.Text, '')};
		var id = this._data.ClientID + '_h_' + index + '_0';
		gdata.header = data;
		var vert = true;
		if (this.TabPos == 'Top' || this.TabPos == 'Bottom')
			vert = false;
		return this._Item_CreateRepresentationControl(cell, gdata, data, vert, id)	   ;
	}
	this._ProcessHeaderControlStyle = function(header)
	{
	}
	this._CreateHeaderContent = function(body, data)
	{
		var result = this._CreateTable(this.AllHeadersInSingleCell);
		body.appendChild(result);
		var row = this._InsertRow(result);
		row.style.height = '100%';
		this._CreateRepresentationHeaders(row);
	}
	this._CreateRepresentationHeaders = function(bodyRow)
	{
		with (this._data)
		{
			if (this.AllHeadersInSingleCell)
			{
				var cell = this._InsertCell(bodyRow);
				for (var i=0;i<Groups.length;i++)
				{
					var group = Groups[i];
					group.NextIsActive = ((i+1) < Groups.length) && this._GetP(Groups[i+1].ActualActive, true);
					if (typeof(group.Visible) == "undefined" || group.Visible)
						this._Header_Create(cell, group,i);
				}
			}
			else
			{
				for (var i=0;i<Groups.length;i++)
				{
					var group = Groups[i];
					group.NextIsActive = ((i+1) < Groups.length) && this._GetP(Groups[i+1].ActualActive, true);
					if (typeof(group.Visible) == "undefined" || group.Visible)
					{
						var cell = this._InsertCell(bodyRow);
						cell.style.height = '100%';
						this._Header_Create(cell, group,i);
					}
				}
			}
		}
	}
	this._Group_ProcessTableStyle = function(table, data, vert)
	{

		if (!vert)
		{
			table.style.styleFloat = 'left';
			table.style.cssFloat = 'left';
		}

		var st;
		if (this._Menu)
			st = this._GetCompoundStyle(this._data.SubMenuStyle, data.GroupStyle);	
		else if (this._GetP(data.Enabled, true))
			st = this._GetCompoundStyle(this._data.GroupStyle, data.GroupStyle);
		else
			st = this._GetCompoundStyle(this._data.DisabledGroupStyle, data.DisabledGroupStyle);

		if (this._TabStrip && !table.style.width)
			table.style.width = '100%';

		this._ApplyStyle(table, st);
		if (!this._GetP(data.ActualActive, true) && this._TopicBar)
			table.style.height = '';

		if (this._data.HideTabSideGroupBorder)
		{

			table.style['border'+this.TabPos+'Style'] = "";
			table.style['border'+this.TabPos+'Width'] = "";
			table.style['border'+this.TabPos+'Color'] = "";
		}

		data.Height = this._GetStyleValue(st, 'height');


		var backurl = this._GetUrl(this._GetStyleValue(st, 'BackImageUrl'));
		if (backurl)
			table.style.backgroundImage = 'url(' + backurl + ')';
		if (this._Menu && !this._GetP(vert, true))
		{
			table.style.styleFloat = 'left';
			table.style.cssFloat = 'left';
		}

		if (data.GroupSpacing)
		{
			if (vert)
				table.style.marginTop = data.GroupSpacing;
			else
				table.style.marginLeft = data.GroupSpacing;
		}

	}

	this._ProcessTableStyle = function(table, vert)
	{

		if (!vert)
		{
			table.style.styleFloat = 'left';
			table.style.cssFloat = 'left';
		}
		var st;
		st = this._data.GroupStyle;	 
		this._ApplyStyle(table, st);

		var backurl = this._GetUrl(this._GetStyleValue(st, 'BackImageUrl'));
		if (backurl)
			table.style.backgroundImage = 'url(' + backurl + ')';
	}

	this._CustomTree_ProcessBodyRowStyle = function(bodyRow)
	{
	}
	this.CustomTree_ProcessBodyStyle = function(body, vert)
	{
		if (this._Menu && !vert)
			body.style.height = '100%';
	}

	this._CustomTree_CreateItemsRepresentationControls = function(bodyRow, vert)
	{
		var gdata = new Object();
		gdata.WrapText = false;
		gdata.SpecialSymbolStyle = new Object();
		this._ProcessSpecialSymbolStyle(gdata);
		this._CustomTree_ProcessBodyRowStyle(bodyRow);
		if (vert)
		{
			var cell = this._InsertCell(bodyRow);
			this.CustomTree_ProcessBodyStyle(cell,vert);
			if (this._data.Items)
				for(var i=0;i<this._data.Items.length;i++)
				{
					var item = this._data.Items[i];
					item.Level = 0;
					if (!item.ShowCheckBox)
						item.ShowCheckBox = this._data.ShowCheckBoxes;
					var id = this._data.ClientID + '_int_i'+i;
					this._Item_CreateRepresentationControl(cell, gdata, item, vert, id);
					this._Item_AddRepresantationNestedGroup(cell, gdata, item, vert, id);
				}
		}
		else
		{
			if (this._data.Items)
				for(var i=0;i<this._data.Items.length;i++)
				{
					var item = this._data.Items[i];
					item.Level = 0;
					var cell = this._InsertCell(bodyRow);
					var id = this._data.ClientID + '_int_i'+i;
					this.CustomTree_ProcessBodyStyle(cell);
					this._Item_CreateRepresentationControl(cell, gdata, item, vert, id);
					this._Item_AddRepresantationNestedGroup(cell, gdata, item, vert, id);
				}
		}
	}
	this._CustomTree_CreateControlContent = function(body) 
	{
		var vert = (this._TreeView || this._GetP(this._data.Layout, 'Vertical') == 'Vertical');

		var result = this._CreateTable(vert);
		body.appendChild(result);
		result.id = this._data.ClientID + '_int';
		var row = this._InsertRow(result);
		row.id = result.id + '_br';
		row.style.height = '100%';
		this._ProcessTableStyle(result, vert);
		this._CustomTree_CreateItemsRepresentationControls(row, vert);
		if (this._data.Padding)
			body.style.padding = this._data.Padding;
	}

	this._CreateControlContent = function (){ 
		// C1WebCommandBase.CreateChildControls
		var row = this._InsertRow(this._rootElement);
		this._rootRow = row;
		row.style.height = '100%';
		row.style.width = '100%';
		var cell = this._InsertCell(row);
		cell.style.height = '100%';
		cell.style.width = '100%';
		cell.vAlign = 'top';
		//C1WebCommandBase.ProcessControlStyle
		if (typeof(this._data.Padding) == 'undefined')
			cell.style.padding = '0px';
		else
			cell.style.padding = this._data.Padding;
		if (this._data.EnableDragDrop)
		{
			this._data.SortableElement = cell;
			cell.id = this._data.ClientID + '_srt';
		}

		if (this._TabStrip)
		{
			this.TabPos = this._GetP(this._data.TabPosition, 'Top');
			this.AllHeadersInSingleCell = (this.TabPos == 'Left' || this.TabPos == 'Right');
			var table = this._CreateTable(true);
			cell.appendChild(table);	
			var headerRow;
			var bodyRow;
			var headerCell;
			var bodyCell;
			var sep;
			with (this._data)
			{
				if (this._GetP(this._data.ShowTabs, true))
				{
					if (this.TabPos == 'Top')
					{
						headerRow = table.insertRow(0);
						bodyRow = table.insertRow(1);
						headerCell = headerRow.insertCell(0);
						//sep = headerRow;
					}
					if (this.TabPos == 'Bottom')
					{
						bodyRow = table.insertRow(0);
						headerRow = table.insertRow(1);
						headerCell = headerRow.insertCell(0);
						//sep = headerRow;
					}
					if (this.TabPos == 'Left')
					{
						bodyRow = table.insertRow(0);
						headerCell = bodyRow.insertCell(0);
						//sep = headerCell;
					}
					if (this.TabPos == 'Right')
					{
						bodyRow = table.insertRow(0);
						bodyCell = this._InsertCell(bodyRow);
						headerCell = this._InsertCell(bodyRow);
						//sep = headerCell;
					}
					sep = headerCell;
					headerCell.vAlign = 'top';
					//headerCell.style.height = '100%';
					var surl = this._GetUrl(this._data.SeparatorInactiveImageUrl);
					if (surl)
					{
						var pos;
						var repeat;
						if (this.TabPos == 'Top')
						{
							pos = 'bottom';
							repeat = 'x';
						}
						else if (this.TabPos == 'Bottom')
						{
							pos = 'top';
							repeat = 'x';
						}
						else if (this.TabPos == 'Left')
						{
							pos = 'right';
							repeat = 'y';
						}
						else
						{
							pos = 'left';
							repeat = 'y';
						}
						sep.style.backgroundImage = 'url('+surl+')';
						sep.style.backgroundPosition = pos;
						sep.style.backgroundRepeat = "repeat-"+repeat;
					}
				}
				else
					bodyRow = table.insertRow(0);
				if (!bodyCell)
					bodyCell = this._InsertCell(bodyRow);

				if (this._GetP(this._data.ShowTabs, true))
					this._CreateHeaderContent(headerCell, data);

				if (Groups) 
				{
					for (var i=0;i<Groups.length;i++)
					{

						var group = Groups[i];
						if (typeof(group.Visible) == "undefined" || group.Visible)
							this._Group_CreateRepresentationControl(bodyCell, group,group.Index,0,this._data.ClientID);
					}
				}
				return;
			}
		}
		// FlatControl.CreateControlContent
		with (this._data)
		{
			if (Class == 'ToolBar' || Class == 'TopicBar')
			{
				if (this._data.Groups) {
					var _firstVis = true;
					for (var i=0;i<Groups.length;i++)
					{
						var group = Groups[i];
						if (typeof(group.Visible) == "undefined" || group.Visible)
						{
							if (!_firstVis && this._data.GroupSpacing)
								group.GroupSpacing = this._data.GroupSpacing;
							_firstVis = false;							 
							this._Group_CreateRepresentationControl(cell, group,group.Index,0,this._data.ClientID);
						}
					}
				}
			}	 
			else if (this._Menu || this._TreeView)
				this._CustomTree_CreateControlContent(cell);

		}
	}	

	this._Start_Item = function(c, g, gdata, data, idx)
	{
		if (!this._GetP(data.Visible, true))
			return;
		var item = c1c_init_item(data.ClientID,
								 this._GetP(data.onclick, null),
								 this._GetP(data.onselect, null),
								 this._GetP(data.onmousedown, null),
								 this._GetP(data.onmouseenter, null),
								 this._GetP(data.onmouseleave, null),
								 this._GetP(data.onmousemove, null),
								 this._GetP(data.onmouseout, null),
								 this._GetP(data.onmouseover, null),
								 this._GetP(data.onmouseup, null),
								 this._GetP(data.onmousewheel, null),
								 data.CItemStyle,
								 data.CMouseOverItemStyle,
								 data.CSelectedItemStyle,
								 data.CMouseOverSelectedItemStyle,
								 this._GetUrl(data.NavigateUrl),
								 this._GetP(data.Target, ''),
								 data.IsEnabled,
								 this._GetP(data.Selected, false),
								 this._GetP(this._data.IsClickHandler, false),
								 this._GetP(this._data.IsSelectHandler, false),
								 this._GetP(gdata.AllowSelectItem, false),
								 this._GetP(data.PostBackFunc, this._data.PostBackFunc),
								 this._GetUrl(this._GetStyleValue(data.CItemStyle, 'BackImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CItemStyle, 'ImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CItemStyle, 'LeftBorderImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CItemStyle, 'RightBorderImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CMouseOverItemStyle, 'BackImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CMouseOverItemStyle, 'ImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CMouseOverItemStyle, 'LeftBorderImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CMouseOverItemStyle, 'RightBorderImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CSelectedItemStyle, 'BackImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CSelectedItemStyle, 'ImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CSelectedItemStyle, 'LeftBorderImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CSelectedItemStyle, 'RightBorderImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CMouseOverSelectedItemStyle, 'BackImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CMouseOverSelectedItemStyle, 'ImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CMouseOverSelectedItemStyle, 'LeftBorderImageUrl')),
								 this._GetUrl(this._GetStyleValue(data.CMouseOverSelectedItemStyle, 'RightBorderImageUrl'))
								);
		g.AddItem(item);
		if (data.SubMenu)
			this._Start_Group(item, data.SubMenu, 0);		 
		if (this._TreeView)
		{
			item.InitTreeItem(data.ClientID+'_ti', this._GetUrl(data.SpecialSymbolStyle.CollapsedNodeImageUrl), this._GetUrl(data.SpecialSymbolStyle.ExpandedNodeImageUrl));
			if (data.ActualPopulateOnDemand)
				item.InitTreeItemCallback(data.CallBackFunc, gdata.CallbackWaitControlID);
		}
		if (data.NestedGroup)
		{
			this._Start_Group(item, data.NestedGroup, 0); 
		}
		if (window.C1KeyboardShortcuts && this._GetP(this._data.KeyboardSupport, true) && data.KeyboardShortcut)
			window.C1KeyboardShortcuts.addShortcut(item, data.KeyboardShortcut);
	}
	this._Start_Header = function(c, gdata, header)
	{
		c.AddHeader(header.ClientID,
					this._GetP(gdata.onclick, null),
					this._GetP(gdata.onselect, null),
					this._GetP(gdata.onmousedown, null),
					this._GetP(gdata.onmouseenter, null),
					this._GetP(gdata.onmouseleave, null),
					this._GetP(gdata.onmousemove, null),
					this._GetP(gdata.onmouseout, null),
					this._GetP(gdata.onmouseover, null),
					this._GetP(gdata.onmouseup, null),
					this._GetP(gdata.onmousewheel, null),
					header.CItemStyle,
					header.CMouseOverItemStyle,
					header.CSelectedItemStyle,
					header.CMouseOverSelectedItemStyle,
					this._data.PostBackFunc,
					header.Selected,
					gdata.BodyRowClientID,
					gdata.ClientID,
					gdata.Height,
					this._GetP(this._data.GroupActivationHandler, false),
					this._GetUrl(this._GetStyleValue(header.CItemStyle, 'BackImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CItemStyle, 'ImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CItemStyle, 'LeftBorderImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CItemStyle, 'RightBorderImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CMouseOverItemStyle, 'BackImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CMouseOverItemStyle, 'ImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CMouseOverItemStyle, 'LeftBorderImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CMouseOverItemStyle, 'RightBorderImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CSelectedItemStyle, 'BackImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CSelectedItemStyle, 'ImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CSelectedItemStyle, 'LeftBorderImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CSelectedItemStyle, 'RightBorderImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CMouseOverSelectedItemStyle, 'BackImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CMouseOverSelectedItemStyle, 'ImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CMouseOverSelectedItemStyle, 'LeftBorderImageUrl')),
					this._GetUrl(this._GetStyleValue(header.CMouseOverSelectedItemStyle, 'RightBorderImageUrl')),
					header.IsEnabled,
					this._GetP(gdata.EnableExpandCollapse, true),
					gdata.CallBackFunc, 
					gdata.CallbackWaitControlID, 
					this._GetUrl(this._GetStyleValue(header.CItemStyle, 'IndicatorUrl')),
					this._GetUrl(this._GetStyleValue(header.CMouseOverItemStyle, 'IndicatorUrl')),
					this._GetUrl(this._GetStyleValue(header.CSelectedItemStyle, 'IndicatorUrl')),
					this._GetUrl(this._GetStyleValue(header.CMouseOverSelectedItemStyle, 'IndicatorUrl'))
				   );
	}
	this._Start_Group = function(c, data, idx)
	{
		var act = true;
		if (typeof(data.Active) == 'boolean' && !data.Active)
			act = false;
		var ic = 0;
		if (data.Items)
			ic = data.Items.length;
		var g = c1c_init_group(data.ClientID, 
							   this._GetP(data.Enabled, true),
							   act,
							   this._GetP(data.AllowSelectItem, false),
							   this._GetP(data.AllowMultipleSelect,true),
							   this._GetP(data.AlwaysHasSelected, false),
							   this._GetP(data.AllowMultipleSelectInControl, true),
							   this._GetP(data.AllowUnselectItem, true),
							   ic,
							   '__'+data.ClientID + '_SSF');
		c.AddGroup(g);
		for(var i=0; i<ic; i++)
		{
			var item = data.Items[i];
			if (item.Class == 'LinkItem')
				this._Start_Item(c, g, data, item, i);
		}
		if(data.header)
		{
			this._Start_Header(c, data, data.header);
		}
		if (this._Menu)
			g.InitSubMenu(data.ClientID, this._GetP(data.OffsetPixelX,0), this._GetP(data.OffsetPixel0,0), this._GetP(data.Opacity,100), this._GetP(data.ShadowColor,''), this._GetP(data.ShadowDirection,135));
		else if (this._TreeView)
			g.InitTreeGroup(data.ClientID);

	}

	this._Start = function()
	{
		var el = this._rootElement;
		if (el && (this._GetP(this._data.TimeStamp, "") == "" || el.getAttribute('TimeStamp') == this._data.TimeStamp))
		{
			var _c1_control = c1c_init_control(this._data.ClientID);
			_c1_control._isMenu = this._Menu;
			_c1_control._isToolBar = this._ToolBar;
			_c1_control._isTreeView = this._TreeView;
			_c1_control._isTabStrip = this._TabStrip;
			_c1_control._isTopicBar = this._TopicBar;
			_c1_control.enableDragDrop = this._data.EnableDragDrop;
			if (this._GetP(this._data.KeyboardSupport,true) && this._data.firstLinkItem)
			{
				_c1_control.set_keyboardSupport(true);
				if (this._data.firstLinkItem)
				{
					var ti = el.tabIndex;
					if (!ti || ti < 0)
					{
						if (document.all)
							ti = document.all.length;
						else
							ti = 1;
					}
					this._data.firstLinkItem.tabIndex = ti;
					if (ti)
						el.removeAttribute('tabIndex')
				}
			}
			if (this._Menu || this._TreeView)
				_c1_control.InitTreeControl('__'+this._data.ClientID+'_SSIF', this._GetP(this._data.AllowSelectItem, false), this._GetP(this._data.AllowUnselectItem, true), this._GetP(this._data.AllowMultipleSelect, true), this._GetP(this._data.AlwaysHasSelected, false));
			with(this._data)
					if (this._data.Groups)
			{
				for (var i=0;i<this._data.Groups.length;i++)
				{
					var group = this._data.Groups[i];
					if (typeof(group.Visible) == "undefined" || group.Visible)
						this._Start_Group(_c1_control, group,i);
				}
			}
					else if (this._data.Items)
					{
						for (var i=0;i<this._data.Items.length;i++)
						{
							var item = this._data.Items[i];
							if (this._GetP(item.Visible, true) && (item.Class == 'LinkItem'))
								this._Start_Item(_c1_control, _c1_control, this._data, item, i);
						}
					}

		}
		if (this._TopicBar)
			_c1_control.InitTopicBar(this._GetP(this._data.ViewStyle, 'Standart') == 'Button', this._GetP(this._data.AutoCollapse, false));
		if (this._TabStrip)
		{
			var leftBorderImage = this._GetUrl(this._GetStyleValue(this._data.ActiveHeaderStyle, 'LeftBorderImageUrl'));
			var mouseOverLeftBoderImage = this._GetUrl(this._GetStyleValue(this._data.MouseOverActiveHeaderStyle, 'LeftBorderImageUrl'));
			_c1_control.InitTabStrip(this._GetUrl(this._data.SeparatorInactiveImageUrl), this._GetP(this._data.MixedBordersMode, false), leftBorderImage, mouseOverLeftBoderImage);
		}
		if (this._Menu)
		{
			_c1_control.InitMenu(this._GetP(this._data.Layout, 'Vertical') == 'Vertical', this._GetP(this._data.HorzPopupDirection, 'LeftToRight') == 'LeftToRight', this._GetP(this._data.VertPopupDirection, 'TopToBottom') == 'TopToBottom', this._GetP(this._data.ClickToOpen, false), this._GetP(this._data.HideSubMenuDelay, 500));
			if (this._data.ContextMenu == 'Default')
				_c1_control.InitDefaultContextMenu();
			else if (this._data.ContextMenu == 'Control')
				_c1_control.InitControlContextMenu(this._data.ContextControlId);
			else if (this._data.ContextMenu == 'Custom')
				_c1_control.InitCustomContextMenu();
		}
		if (this._TreeView)
		{
			var psf = '__'+this._data.ClientID+'_PSF';
			var exp = this._GetP(this._data.ExpandSinglePath, false);
			if (document.getElementById(psf))
				_c1_control.InitTreeView(psf, exp);
			else
				_c1_control.InitTreeView(null, exp);
			if (this._data.GroupExpandHandler)
				_c1_control.setGroupExpandHandler();
			if (this._data.GroupCollapseHandler)
				_c1_control.setGroupCollapseHandler();
		}
		if (this._TopicBar || this._TabStrip || this._TreeView)
			_c1_control.SetGroupStatusField('__'+this._data.ClientID+'_GSF');
		if (this._data.EnableDragDrop)
			_c1_control.SetGroupOrderField('__'+this._data.ClientID+'_GOF');


		// Remove spinner
		// if (this._rootRow != this._rootElement.rows[0])
		// this._rootElement.deleteRow(0);
		// Remove content row
		if (this._contentRow && this._rootRow != this._rootElement.rows[0])
			this._rootElement.deleteRow(0);

		if (this._data.ExpandEffect)		
		{
			_c1_control.ExpandEffect = this._data.ExpandEffect;
			_c1_control.ExpandEffectDuration = this._GetP(this._data.ExpandEffectDuration, 300);
		}
		if (this._ToolBar )
			_c1_control.horizontal = this._GetP(this._data.Layout, 'Horizontal') == 'Horizontal';

		if (this._data.SortableElement)
		{	
			this._data.SortableElement.data = _c1_control;
			_c1_control.groupSpacing = data.GroupSpacing;
			Sortable.create(this._data.SortableElement, {tag: 'table', ghosting: true, onUpdate: function(list){list.data.onDragDrop(list, Sortable.sequence(list))}});
		}

	}
	this._GetP = function(value, def)
	{
		if (typeof(value) == 'undefined')
			return def;
		else
			return value;
	}
	this._GetUrl = function(idx)
	{
		if (typeof(idx)=='number' || (typeof(idx)=='string' && idx != ''))
			return this._data.Urls[idx];
		else
			return '';
	}
}

C1WebCommandBuilder.prototype.create = function(id)
{
	this._CreateControlContent();
	window.setTimeout("window."+id+".start()",10);
}
C1WebCommandBuilder.prototype.start = function()
{
	this._Start();
}
C1WebCommandBuilder.prototype.build = function(id)
{
	var el = this._rootElement;
	if (el && (this._GetP(this._data.TimeStamp, "") == "" || el.getAttribute('TimeStamp') == this._data.TimeStamp))
	{
		window.setTimeout("window."+id+".create('"+id+"')",10);
	}
}
C1WebCommandBuilder.prototype.getHash = function(vert,st,data,groupData)
{
	var cutStyle = "";
	if (st) {
		var	ss = st.split(";");
		for	(var i = 0;	i <	ss.length; i++)
		{
			if (ss[i])
			{
				var	pair = c1c_splitTwice(ss[i], ":");
				if (pair[0] != "ImageUrl")
					cutStyle += ss[i] + ';';
			}
		}
	}
	var fl = (data.NestedGroup || data.ActualPopulateOnDemand) && (data.ActualPopulateOnDemand || !this._GetP(data.NestedGroup.ActualActive, true));
	var res = ":"+data.Class+vert+cutStyle+data.NestedGroup+data.SubMenu+data.ActualActive+data.Selected+data.IsEnabled+this.specialSymbolStyleToStr(data.SpecialSymbolStyle)+data.MarkType+data.HasDropDownButton+groupData.ShowLines+groupData.ShowCheckBoxes+groupData.IconBarWidth+data.ShowLines+data.ShowCheckBox+fl+data.KeyboardShortcut;

	return res;
}
C1WebCommandBuilder.prototype.getFromHashTable = function(hash)
{
	for(var i=0; i<this._hashEls.length;i++)
	{
		if (this._hashEls[i][0] == hash)
			return this._hashEls[i];
	}
	return null;
}
C1WebCommandBuilder.prototype.addElToHash = function(hash, el, id)
{
	this._hashEls[this._hashEls.length] = [hash, el, id];
}

C1WebCommandBuilder.prototype.setNewIds = function(el, oldId, newId, data)
{
	var idLen = oldId.length;
	if (el.id && el.id.indexOf(oldId) == 0)
		el.id = newId + el.id.substr(idLen);
	if (el.id == newId)
		data.toolTipElement = el;
	else if (el.id == newId+"_txt")
		data.textElement = el;
	else if (el.id == newId+"_img")
		data.imageElement = el;
	else if (el.id == newId+"_ind")
		data.indicatorElement = el;
	else if (el.id == newId+"_lbi")
		data.lbiElement = el;
	else if (el.id == newId+"_rbi")
		data.rbiElement = el;
	else if (el.id == newId+"_ti")
		data.tiElement = el;
	else if (el.id == newId+"_cbx")
		data.cbxElement = el;
	else if (el.id == newId+"_dropBtn")
		data.dropElement = el;
	var kids = el.childNodes;
	for (var i = 0; i < kids.length; i++) 
		this.setNewIds(kids[i], oldId, newId, data);
}
C1WebCommandBuilder.prototype.setNewText = function(data)
{
	if (!data.ImageOnly)
		data.textElement.innerHTML = this._GetP(data.Text,'');
}
C1WebCommandBuilder.prototype.setNewToolTip = function(data)
{
	data.toolTipElement.title = this._GetP(data.ToolTip,'');
}
C1WebCommandBuilder.prototype.setNewImage = function(data)
{
	if (!data.TextOnly)
	{ 
		data.imageElement.onload = this._onload;
		if (data.ImageUrl)
			data.imageElement.src = this._data.Urls[data.ImageUrl];
		else
		{
			data.imageElement.src = this._data.Urls[0];
			data.imageElement.style.display = 'none';
		}
	}
}
C1WebCommandBuilder.prototype.setImageSize = function(data)
{
	if (data.indicatorElement)
		data.indicatorElement.onload = this._onload;
	if (data.lbiElement)
		data.lbiElement.onload = this._onload;
	if (data.rbiElement)
		data.rbiElement.onload = this._onload;
	if (data.tiElement)
	{
		data.tiElement.onload = this._onload;
		data.tiElement.onclick = SetPlusMinusClicked;
	}
	if (data.cbxElement)
		data.cbxElement.onclick = SetCheckboxClicked;
	if (data.dropElement)
		data.dropElement.onclick = this._dropDownButtonFunc;
}
C1WebCommandBuilder.prototype.specialSymbolStyleToStr = function(gst)
{
	var res = "sst:";
	if (gst.CheckMarkImageUrl)
		res += "1:" + gst.CheckMarkImageUrl;
	if (gst.RadioMarkImageUrl)
		res += "2:" + gst.RadioMarkImageUrl;
	if (gst.SubMenuMarkImageUrl)
		res += "3:" + gst.SubMenuMarkImageUrl;
	if (gst.SubMenuMarkText)
		res += "4:" + gst.SubMenuMarkText;
	if (gst.CollapsedNodeImageUrl)
		res += "4:" + gst.CollapsedNodeImageUrl;
	if (gst.NoExpandNodeImageUrl)
		res += "4:" + gst.NoExpandNodeImageUrl;
	if (gst.ExpandedNodeImageUrl)
		res += "4:" + gst.ExpandedNodeImageUrl;
	if (gst.VerticalLineImageUrl)
		res += "4:" + gst.VerticalLineImageUrl;
	if (gst.HorizontalLineImageUrl)
		res += "4:" + gst.HorizontalLineImageUrl;
	return res;
}
C1WebCommandBuilder.prototype._onload = function () {this.style.width='';this.style.height='';};
C1WebCommandBuilder.prototype.cloneItem = function(elToClone, id, data)
{
	var	 res = elToClone[1].cloneNode(true);
	this.setNewIds(res,elToClone[2],id,data);
	this.setNewText(data);
	this.setNewToolTip(data);
	this.setNewImage(data);
	this.setImageSize(data);
	return res;
}
C1WebCommandBuilder.prototype._dropDownButtonFunc = function () { OnDropDownClick(this, this._dropDownContextMenuId) };