m = -1;
	g_iRTEMenuItemMax = -1;
}
function RTE_DD_GenerateMenuOpenHtml(strWebLanguage)
{
	if (strWebLanguage == "1037" || strWebLanguage == "1025")
		return "<table dir=\"rtl\" id=\"" + g_strRTEMenuTableElementName + "\"cellspacing=0 cellpading=0 border=0><tr>";
	else
		return "<table id=\"" + g_strRTEMenuTableElementName + "\"cellspacing=0 cellpading=0 border=0><tr>";
}
function RTE_DD_GenerateMenuCloseHtml()
{
	return "</tr></table>";
}
function RTE_DD_GenerateMenuItemHtml(cColumns, iMenuItem, strCommandToPerform, strCommandValue, strMenuItemHtml, strMenuItemToolTip)
{
	var strHtmlRet = "";
	if (((1 >= cColumns) || ((1 < cColumns) && (0 == (iMenuItem % cColumns)))) && (0 != iMenuItem))
	{
		strHtmlRet = "</tr><tr>";
	}
	strHtmlRet += "<td class=\"ms-toolbar " + g_strRTEUnselectedClassName + "\" nowrap id=\"" + g_strRTEMenuItemBaseName + iMenuItem + "\" " +
			g_strRTEMenuItemAttributeName + "=\"" + iMenuItem +"\" onfocus=\"if (document.readyState == 'complete') { RTE_DD_Item_OnFocus(this);}\" onclick=\"if (document.readyState == 'complete') {return RTE_DD_StartCmdExec('"+ strCommandToPerform + "', '" + strCommandValue +
			"');}\" onmouseover=\"if (document.readyState == 'complete') {RTE_DDItem_OnMouseOver(this); }\" onmouseout=\"if (document.readyState == 'complete') {RTE_DDItem_OnMouseOut(this);}\"><a TABINDEX=-1 href=\"#\" class=\"" + g_strRTEUnselectedClassName + 
			"\" style=\"text-decoration: none; color: black; cursor: hand;\" title=\"" + strMenuItemToolTip + "\" onblur=\"if (document.readyState == 'complete') {RTE_DD_Item_OnBlur();}\" onfocus=\"if (document.readyState == 'complete') {RTE_DD_Item_OnFocus(this.parentElement); }\" >" +
			strMenuItemHtml + "</a></td>";
	return strHtmlRet;
}
function RTE_DD_GetMenuItem(iMenuItem)
{
	var elemMenuItem = RTE_DD_GetMenuFrame().document.all(g_strRTEMenuItemBaseName + iMenuItem);
	return elemMenuItem;
}
function RTE_DD_GetHighlightedMenuItem()
{
	return g_elemRTEHighlightedMenuItem;
}
function RTE_DD_ClearHighlightOnMenuItem(elemMenuItem)
{
	RTE_TB_OnMouseOut(elemMenuItem);
}
function RTE_DD_ClearHighlightedMenuItem()
{
	RTE_DD_ClearHighlightOnMenuItem(RTE_DD_GetHighlightedMenuItem());
}
function RTE_DD_SetHighlightOnMenuItem(elemMenuItem)
{
	if (!RTE_DD_MenuIsOpen())
	{
		return;
	}
	var strMenuItemAttributeValue = elemMenuItem.getAttribute(g_strRTEMenuItemAttributeName);
	if (null != g_elemRTEHighlightedMenuItem)
	{
		RTE_DD_ClearHighlightOnMenuItem(g_elemRTEHighlightedMenuItem)
		g_elemRTEHighlightedMenuItem = null;
		g_iRTEHighlightedMenuItem = -1;
	}
	RTE_TB_OnMouseOver(elemMenuItem);
	elemMenuItem.children(0).focus();
	g_elemRTEHighlightedMenuItem = elemMenuItem;
	g_iRTEHighlightedMenuItem = parseInt(strMenuItemAttributeValue);
}
function RTE_DD_SetHighlightOnPrevMenuItem(cItemsToMove)
{
	var elemHighlighted = RTE_DD_GetHighlightedMenuItem();
	var strMenuItemAttributeValue = elemHighlighted.getAttribute(g_strRTEMenuItemAttributeName);
	var iMenuItem = parseInt(strMenuItemAttributeValue);
	if (iMenuItem > 0)
	{
		var iNewMenuItem = Math.max(iMenuItem - cItemsToMove, 0);
		var elemPrev = RTE_DD_GetMenuItem(iNewMenuItem);
		RTE_DD_SetHighlightOnMenuItem(elemPrev);
	}
}
function RTE_DD_SetHighlightOnNextMenuItem(cItemsToMove)
{
	var elemHighlighted = RTE_DD_GetHighlightedMenuItem();
	var strMenuItemAttributeValue = elemHighlighted.getAttribute(g_strRTEMenuItemAttributeName);
	var iMenuItem = parseInt(strMenuItemAttributeValue);
	if (iMenuItem < g_iRTEMenuItemMax)
	{
		var iNewMenuItem = Math.min(iMenuItem + cItemsToMove, g_iRTEMenuItemMax);
		var elemNext = RTE_DD_GetMenuItem(iNewMenuItem);
		RTE_DD_SetHighlightOnMenuItem(elemNext);
	}
}
function RTE_DD_StartCmdExec(strCommandToPerform, strCommandValue)
{
	document.body.setAttribute(g_strRTECommandToExecuteAttributeName, strCommandToPerform);
	document.body.setAttribute(g_strRTECommandValueAttributeName, strCommandValue);
	document.body.focus();
	RTE_DD_SetHighlightOnMenuItem(RTE_DD_GetMenuItem(0));
	return false;
}
function RTE_DD_OnFocus()
{
}
function RTE_DD_OnBlur()
{
	var elemMenu = RTE_DD_GetMenuElement();
	if (elemMenu.getAttribute(g_strRTEMenuOpeningAttributeName) == "1")
	{
		return;
	}
	var strBaseElementID = RTE_DD_GetMenuBaseElementID();
	var ifmMenu = RTE_DD_GetMenuFrame();
	var strCommandToPerform = ifmMenu.document.body.getAttribute(g_strRTECommandToExecuteAttributeName);
	var strCommandValue = ifmMenu.document.body.getAttribute(g_strRTECommandValueAttributeName);
	RTE_DD_CloseMenu();
	RTE_GiveEditorFocus(strBaseElementID);
	RTE_RestoreSelection(strBaseElementID);
	if ("x" != strCommandToPerform)
	{
		if (RTE_IsExtendedToolbar(strBaseElementID))
		{
			ifmMenu.document.body.setAttribute(g_strRTECommandToExecuteAttributeName, "x");
			ifmMenu.document.body.setAttribute(g_strRTECommandValueAttributeName, "x");
		}
		RTE_ExecuteCommandOnSelection(RTE_DD_GetMenuBaseElementID(), strCommandToPerform, false, strCommandValue);
		if (RTE_IsExtendedToolbar(strBaseElementID))
		{
			RTE_SaveSelection(strBaseElementID);
		}
	}
}
function RTE_DD_Item_OnFocus(elemMenuItemCell)
{
	var elemMenu = RTE_DD_GetMenuElement();
	elemMenu.setAttribute(g_strRTEMenuOpeningAttributeName, "0");
	RTE_DD_SetHighlightOnMenuItem(elemMenuItemCell);
}
function RTE_DD_Item_OnBlur()
{
	g_elemRTEHighlightedMenuItem = null;
	g_iRTEHighlightedMenuItem = -1;
	window.setTimeout("RTE_OnItemBlurTestCloseMenu()", 30);
}
function RTE_OnItemBlurTestCloseMenu()
{
	if (null == g_elemRTEHighlightedMenuItem)
	{
		RTE_DD_CloseMenu();
	}
}
function RTE_DD_OnKeyDown(elem)
{
	var evtSource = elem.document.parentWindow.event;
	var nKeyCode = evtSource.keyCode;
	var fAltKey = evtSource.altKey;
	var fCtrlKey = evtSource.ctrlKey;
	var fShiftKey = evtSource.shiftKey;
	if (!fCtrlKey && !fAltKey && !fShiftKey)
	{
		switch (nKeyCode)
		{
			case 13: 
				var strBaseElementID = g_strRTEDDBaseElementID;
				if (null != strBaseElementID && RTE_IsExtendedToolbar(strBaseElementID))
				{
					var elemHighlighted = RTE_DD_GetHighlightedMenuItem();
					if (null != elemHighlighted)
					{
						evtSource.returnValue = false;
						elemHighlighted.click();
					}
				}
				break;
			case 27: 
				var strBaseElementID = g_strRTEDDBaseElementID;	
				RTE_DD_CloseMenu();
				RTE_GiveEditorFocus(strBaseElementID);
				RTE_ResetAllToolBarStates(strBaseElementID);
				break;
			case 38: 
				evtSource.returnValue = false;
				RTE_DD_SetHighlightOnPrevMenuItem(1);
				break;
			case 9: 
			   evtSource.returnValue = false;
			   break;
			case 40: 
				evtSource.returnValue = false;
				RTE_DD_SetHighlightOnNextMenuItem(1);
				break;
			case 33: 
				evtSource.returnValue = false;
				RTE_DD_SetHighlightOnPrevMenuItem(12);
				break;
			case 34: 
				evtSource.returnValue = false;
				RTE_DD_SetHighlightOnNextMenuItem(12);
				break;
			case 36: 
				evtSource.returnValue = false;
				break;
			case 35: 
				evtSource.returnValue = false;
				break;
		}
	} 
	if (!fCtrlKey && !fAltKey && fShiftKey)
	{
		switch (nKeyCode)
		{
			case 9: 
				evtSource.returnValue = false;
				break;
		}
	} 
}
function RTE_DDItem_OnMouseOver(elemTD)
{
	if (null != elemTD)
	{
		RTE_DD_SetHighlightOnMenuItem(elemTD);
	}
}
function RTE_DDItem_OnMouseOut(elemTD)
{
	if (null != elemTD)
	{
		RTE_DD_ClearHighlightOnMenuItem(elemTD);
	}
}
var g_rgstrRTEMenuHtml = new Array();
var g_strRTEColorMatrixMenuItemPrefixHtml = "<div unselectable=\"on\" style=\"width: 10px; height: 10px; background-color: ";
var g_strRTEColorMatrixMenuItemSufffixHtml = ";\"><img unselectable=\"on\" width=10 height=10 src=\"" + RTE_GetServerRelativeUnlocalizedImageUrl("blank.gif") + "\" alt=\"%TOOLTIP%\"></div>";
function RTE_DD_OpenFontNameOrSizeSelector(strBaseElementID, strWebLanguage, fGeneratingFontNameSelector)
{
	var rngSelection = RTE_GetSelection(strBaseElementID);
	var strSelectionFontName = rngSelection.queryCommandValue(g_strRTEFontNameMnemonic);
	var strSelectionFontSize = rngSelection.queryCommandValue(g_strRTEFontSizeMnemonic);
	var fSelectionBold = rngSelection.queryCommandValue(g_strRTEBoldMnemonic);
	var fSelectionItalic = rngSelection.queryCommandValue(g_strRTEItalicMnemonic);
	var strMenuHtml = "";
	var cMenuItems = -1;
	var strButtonMnemonic = "";
	var rgoMenuInfo = RTE_DD_GetFontNameOrSizeSelectorUnformattedHtml(fGeneratingFontNameSelector, strWebLanguage);
	strMenuHtml = rgoMenuInfo[0];
	cMenuItems = rgoMenuInfo[1];
	if (fGeneratingFontNameSelector)
	{
		strMenuHtml = strMenuHtml.replace(new RegExp(g_strRTEFontSizeToken, "g"), Math.min(Math.max(strSelectionFontSize, 2), 5));
		strButtonMnemonic = g_strRTEFontNameMnemonic;
	}
	else
	{
		strMenuHtml = strMenuHtml.replace(new RegExp(g_strRTEFontNameToken, "g"), strSelectionFontName);
		strButtonMnemonic = g_strRTEFontSizeMnemonic;
	}
	var strBegBoldItalicInsert = "";
	var strEndBoldItalicInsert = "";
	if (fSelectionBold)
	{
		strBegBoldItalicInsert = "<b>";
		strEndBoldItalicInsert = "</b>";
	}
	if (fSelectionItalic)
	{
		strBegBoldItalicInsert += "<i>";
		strEndBoldItalicInsert += "</i>";
	}
	strMenuHtml = strMenuHtml.replace(new RegExp(g_strRTEBegBoldItalicToken, "g"), strBegBoldItalicInsert);
	strMenuHtml = strMenuHtml.replace(new RegExp(g_strRTEEndBoldItalicToken, "g"), strEndBoldItalicInsert);
	RTE_DD_OpenMenu(strBaseElementID, strButtonMnemonic, strMenuHtml, cMenuItems);
}
function RTE_DD_GetFontNameOrSizeSelectorUnformattedHtml(fGeneratingFontNameSelector, strWebLanguage)
{
	var strCommandToPerform;
	if (fGeneratingFontNameSelector)
	{
		strCommandToPerform = g_strRTEFontNameMnemonic;
	}
	else
	{
		strCommandToPerform = g_strRTEFontSizeMnemonic;
	}
	var strMenuHtml = g_rgstrRTEMenuHtml[strCommandToPerform];
	if (null != strMenuHtml)
	{
		return strMenuHtml;
	}
	strMenuHtml = RTE_DD_GenerateMenuOpenHtml(strWebLanguage);
	var cMenuItems = -1;
	if (fGeneratingFontNameSelector)
	{
		var rgstrClientFonts = RTE_GetSortedFontNames();
		cMenuItems = rgstrClientFonts.length;
		var iFont;
		for (iFont = 0; iFont < cMenuItems; iFont++)
		{
			strMenuHtml += RTE_DD_GenerateMenuItemHtml(1, iFont, strCommandToPerform, rgstrClientFonts[iFont],
					g_strRTEBegBoldItalicToken + "<font size=\"" + g_strRTEFontSizeToken + "\" face=\"" + rgstrClientFonts[iFont] + "\">" +
					rgstrClientFonts[iFont] + "</font>" + g_strRTEEndBoldItalicToken, "");
		}
	}
	else
	{
		cMenuItems = 7;
		var nFontSize;
		for (nFontSize = 1; nFontSize <= cMenuItems; nFontSize++)
		{
			strMenuHtml += RTE_DD_GenerateMenuItemHtml(1, nFontSize - 1, strCommandToPerform, nFontSize,
					g_strRTEBegBoldItalicToken + "<font size=\"" + nFontSize + "\" face=\"" + g_strRTEFontNameToken + "\">" +
					nFontSize + " - " + L_ExampleText_TEXT + "</font>" + g_strRTEEndBoldItalicToken, "");
		}
	}
	strMenuHtml += RTE_DD_GenerateMenuCloseHtml();
	g_rgstrRTEMenuHtml[strCommandToPerform] = new Array(strMenuHtml, cMenuItems);
	return g_rgstrRTEMenuHtml[strCommandToPerform];
}
function RTE_DD_OpenForeColorSelector(strBaseElementID, strWebLanguage)
{
	RTE_DD_OpenMenu(strBaseElementID, g_strRTEForeColorMnemonic, RTE_DD_GetColorSelectorHtml(g_strRTEForeColorMnemonic, strWebLanguage), g_rgrgstrRTEColorMatrix.length);
}
function RTE_DD_OpenBackColorSelector(strBaseElementID, strWebLanguage)
{
	RTE_DD_OpenMenu(strBaseElementID, g_strRTEBackColorMnemonic, RTE_DD_GetColorSelectorHtml(g_strRTEBackColorMnemonic, strWebLanguage), g_rgrgstrRTEColorMatrix.length);
}
function RTE_DD_OpenInsertTableElementSelector(strBaseElementID, strWebLanguage)
{
	var strMenuHtml = "";
	var cMenuItems = -1;
	var strCommandToPerform = g_strRTEInsertTableElementMnemonic;
	var rgrgstrInsertTableElementsCommands = new Array(
		new Array(g_strRTEInsertRowAbove,L_InsertRowAboveLabel_TEXT),
		new Array(g_strRTEInsertRowBelow,L_InsertRowBelowLabel_TEXT),
		new Array(g_strRTEInsertColumnLeft,L_InsertColumnLeftLabel_TEXT),
		new Array(g_strRTEInsertColumnRight,L_InsertColumnRightLabel_TEXT),
		new Array(g_strRTEInsertCellLeft,L_InsertCellLeftLabel_TEXT),
		new Array(g_strRTEInsertCellRight,L_InsertCellRightLabel_TEXT)
		);
	var rgoMenuInfo = RTE_DD_GetDropDownListItemHtml(strWebLanguage,strCommandToPerform,
											rgrgstrInsertTableElementsCommands);
	strMenuHtml = rgoMenuInfo[0];
	cMenuItems = rgoMenuInfo[1];
	RTE_DD_OpenMenu(strBaseElementID, strCommandToPerform, strMenuHtml, cMenuItems);
}
function RTE_DD_OpenDeleteTableElementSelector(strBaseElementID, strWebLanguage)
{
	var strMenuHtml = "";
	var cMenuItems = -1;
	var strCommandToPerform = g_strRTEDeleteTableElementMnemonic;
	var rgrgstrInsertTableElementsCommands = new Array(
		new Array(g_strRTEDeleteRow,L_DeleteRowToolTip_TEXT),
		new Array(g_strRTEDeleteColumn,L_DeleteColumnToolTip_TEXT)
		);
	var rgoMenuInfo = RTE_DD_GetDropDownListItemHtml(strWebLanguage,strCommandToPerform,
											rgrgstrInsertTableElementsCommands);
	strMenuHtml = rgoMenuInfo[0];
	cMenuItems = rgoMenuInfo[1];
	RTE_DD_OpenMenu(strBaseElementID, strCommandToPerform, strMenuHtml, cMenuItems);
}
function RTE_DD_GetDropDownListItemHtml(strWebLanguage,strCommandToPerform,rgrgstrCommandValues)
{
	var strMenuHtml = g_rgstrRTEMenuHtml[strCommandToPerform];
	if (null != strMenuHtml)
	{
		return strMenuHtml;
	}
	strMenuHtml = RTE_DD_GenerateMenuOpenHtml(strWebLanguage);
	if (null != rgrgstrCommandValues)
	{
		cMenuItems = rgrgstrCommandValues.length;
		var icmd;
		for (icmd = 0; icmd < cMenuItems; icmd++)
		{
			strMenuHtml += RTE_DD_GenerateMenuItemHtml(1, icmd, strCommandToPerform, rgrgstrCommandValues[icmd][0],
					rgrgstrCommandValues[icmd][1], "");
		}
	}
	strMenuHtml += RTE_DD_GenerateMenuCloseHtml();
	g_rgstrRTEMenuHtml[strCommandToPerform] = new Array(strMenuHtml, cMenuItems);
	return g_rgstrRTEMenuHtml[strCommandToPerform];
}
function RTE_DD_GetColorSelectorHtml(strCommandToPerform, strWebLanguage)
{
	var strMenuHtml = g_rgstrRTEMenuHtml[strCommandToPerform];
	if (null == strMenuHtml)
	{
		strMenuHtml = RTE_DD_GenerateMenuOpenHtml(strWebLanguage);
		var iColor;
		for (iColor = 0; iColor < g_rgrgstrRTEColorMatrix.length; iColor++)
		{
			strMenuHtml += RTE_DD_GenerateMenuItemHtml(g_cRTEColorMatrixColumns, iColor, strCommandToPerform,
					g_rgrgstrRTEColorMatrix[iColor][1], g_strRTEColorMatrixMenuItemPrefixHtml + g_rgrgstrRTEColorMatrix[iColor][1] +
					g_strRTEColorMatrixMenuItemSufffixHtml.replace("%TOOLTIP%", g_rgrgstrRTEColorMatrix[iColor][0]), "");
		}
		strMenuHtml += RTE_DD_GenerateMenuCloseHtml();
		g_rgstrRTEMenuHtml[strCommandToPerform] = strMenuHtml;
	}
	return strMenuHtml;
}
var g_cRTEColorMatrixColumns = 8;
var g_rgrgstrRTEColorMatrix = new Array(
	new Array(L_Black_TEXT, "#000000"), new Array(L_Brown_TEXT, "#993300"), new Array(L_OliveGreen_TEXT, "#333300"), new Array(L_DarkGreen_TEXT, "#003300"),
	new Array(L_DarkTeal_TEXT, "#003366"), new Array(L_DarkBlue_TEXT, "#000080"), new Array(L_Indigo_TEXT, "#333399"), new Array(L_Gray80_TEXT, "#333333"),
	new Array(L_DarkRed_TEXT, "#800000"), new Array(L_Orange_TEXT, "#ff6600"), new Array(L_DarkYellow_TEXT, "#808000"), new Array(L_Green_TEXT, "#008000"),
	new Array(L_Teal_TEXT, "#008080"), new Array(L_Blue_TEXT, "#0000FF"), new Array(L_BlueGray_TEXT, "#666699"), new Array(L_Gray50_TEXT, "#808080"),
	new Array(L_Red_TEXT, "#FF0000"), new Array(L_LightOrange_TEXT, "#ff9900"), new Array(L_Lime_TEXT, "#99cc00"), new Array(L_SeaGreen_TEXT, "#339966"),
	new Array(L_Aqua_TEXT, "#33cccc"), new Array(L_LightBlue_TEXT, "#3366ff"), new Array(L_Violet_TEXT, "#800080"), new Array(L_Gray40_TEXT, "#969696"),
	new Array(L_Pink_TEXT, "#FF00FF"), new Array(L_Gold_TEXT, "#ffcc00"), new Array(L_Yellow_TEXT, "#FFFF00"), new Array(L_BrightGreen_TEXT, "#00FF00"),
	new Array(L_Turquoise_TEXT, "#00FFFF"), new Array(L_SkyBlue_TEXT, "#00ccff"), new Array(L_Plum_TEXT, "#993366"), new Array(L_Gray25_TEXT, "#C0C0C0"),
	new Array(L_Rose_TEXT, "#ff99cc"), new Array(L_Tan_TEXT, "#ffcc99"), new Array(L_LightYellow_TEXT, "#ffff99"), new Array(L_LightGreen_TEXT, "#ccffcc"),
	new Array(L_LightTurquoise_TEXT, "#ccffff"), new Array(L_PaleBlue_TEXT, "#99ccff"), new Array(L_Lavender_TEXT, "#cc99ff"), new Array(L_White_TEXT, "#FFFFFF") );
function RTE_GetDialogHelper()
{
	return document.all(g_strRTEDialogHelperID);
}
function RTE_GetSortedFontNames()
{
	var rgstrFontNamesRet = new Array();
	var dh = RTE_GetDialogHelper();
	if ((null != dh) && (null != dh.fonts) && (0 < dh.fonts.count))
	{
		var iFont;
		for (iFont = 1; iFont < dh.fonts.count; iFont++)
		{
			RTE_InsertIntoSortedArrayIfValid(dh.fonts(iFont), rgstrFontNamesRet);
		}
	}
	else
	{
		RTE_InsertIntoSortedArrayIfValid(L_Font1_TEXT, rgstrFontNamesRet);
		RTE_InsertIntoSortedArrayIfValid(L_Font2_TEXT, rgstrFontNamesRet);
		RTE_InsertIntoSortedArrayIfValid(L_Font3_TEXT, rgstrFontNamesRet);
		RTE_InsertIntoSortedArrayIfValid(L_Font4_TEXT, rgstrFontNamesRet);
		RTE_InsertIntoSortedArrayIfValid(L_Font5_TEXT, rgstrFontNamesRet);
		RTE_InsertIntoSortedArrayIfValid(L_Font6_TEXT, rgstrFontNamesRet);
		RTE_InsertIntoSortedArrayIfValid(L_Font7_TEXT, rgstrFontNamesRet);
		RTE_InsertIntoSortedArrayIfValid(L_Font8_TEXT, rgstrFontNamesRet);
	}
	return rgstrFontNamesRet;
}
function RTE_IsChildOfElement(elemSearchingFor, elemToSearch)
{
	var rgelemChildren = elemToSearch.children;
	if ((null == rgelemChildren) || (0 >= rgelemChildren.length))
	{
		return false;
	}
	var iChild = 0;
	for (iChild = 0; iChild < rgelemChildren.length; iChild++)
	{
		var elemChild = rgelemChildren[iChild];
		if (elemChild == elemSearchingFor)
		{
			return true;
		}
		if (RTE_IsChildOfElement(elemSearchingFor, elemChild))
		{
			return true;
		}
	}
	return false;
}
function RTE_FindParentElementWithTag(elem, strTagName)
{
	if (null == elem.parentElement)
	{
		return null;
	}
	return RTE_FindParentElementOrSelfWithTag(elem.parentElement, strTagName);
}
function RTE_FindParentElementOrSelfWithTag(elem, strTagName)
{
	if (elem.tagName == strTagName)
	{
		return elem;
	}
	else
	{
		if (null == elem.parentElement)
		{
			return null;
		}
		return RTE_FindParentElementOrSelfWithTag(elem.parentElement, strTagName);
	}
}
var g_iRTELeft = 0;
var g_iRTETop = 1;
var g_iRTEWidth = 2;
var g_iRTEHeight = 3;
var g_iRTERight = 4;
var g_iRTEBottom = 5;
function RTE_GetElementWindowCoordinates(elem)
{
	var xLeft = 0;
	var yTop = 0;
	var cxWidth = elem.offsetWidth;
	var cyHeight = elem.offsetHeight;
	do
	{
		xLeft += elem.offsetLeft;
		yTop += elem.offsetTop;
		if (null == elem.offsetParent)
		{
			xLeft += parseInt(elem.currentStyle.marginLeft);
			yTop += parseInt(elem.currentStyle.marginTop);
		}
		elem = elem.offsetParent;
	}
	while (elem != null);
	var rgnRet = new Array();
	rgnRet[g_iRTELeft] = xLeft;
	rgnRet[g_iRTETop] = yTop;
	rgnRet[g_iRTEWidth] = cxWidth;
	rgnRet[g_iRTEHeight] = cyHeight;
	rgnRet[g_iRTERight] = xLeft + cxWidth - 1;
	rgnRet[g_iRTEBottom] = yTop + cyHeight - 1;
	return rgnRet;
}
function RTE_GetServerRelativeUnlocalizedImageUrl(strImageFileName)
{
   return "/_layouts/images/" + strImageFileName;
}
function RTE_GetServerRelativeImageUrl(strImageFileName)
{
	return "/_layouts/" + L_Language_Text + "/images/" + strImageFileName;
}
function RTE_GetServerRelativeStylesheetUrl(strStylesheetFileName, strWebLocale)
{
   return "/_layouts/" + strWebLocale+ "/styles/" + strStylesheetFileName;
}
function RTE_GetServerRelativeScriptUrl(strScriptFileName, strWebLocale)
{
   return "/_layouts/" + strWebLocale+ "/" + strScriptFileName;
}
function RTE_StripDoubleSpaces(str)
{
	while (str.indexOf("  ") != -1)
	{
		str = str.replace(/  /g, " ");
	}
	return str;
}
function RTE_AddClassToClassList(strClassList, strNewClass)
{
	if (0 <= strClassList.indexOf(strNewClass))
	{
		return strClassList;
	}
	return RTE_StripDoubleSpaces(strClassList + " " + strNewClass);
}
function RTE_ReplaceClassInClassList(strClassList, strOldClass, strNewClass)
{
	var iSel = strClassList.indexOf(strOldClass);
	var strAheadOfOldClass = "";
	if (0 < iSel)
	{
		return RTE_StripDoubleSpaces(strClassList.substr(0, iSel) + " " + strNewClass + " " + strClassList.substr(iSel + strOldClass.length));
	}
	return RTE_AddClassToClassList(strClassList, strNewClass);
}
function RTE_RemoveClassFromClassList(strClassList, strClass)
{
	return RTE_ReplaceClassInClassList(strClassList, strClass, "");
}
function RTE_AddOrRemoveClassFromClassList(fAdd, strClassList, strClass)
{
	if (fAdd)
	{
		return RTE_AddClassToClassList(strClassList, strClass);
	}
	return RTE_RemoveClassFromClassList(strClassList, strClass);
}
function RTE_InsertIntoSortedArrayIfValid(strInsert, rgstrDest)
{
	if ((null == strInsert) || (0 == strInsert.length))
	{
		return;
	}
	var i = 0;
	for (i = rgstrDest.length; i >= 0; i--)
	{
		if ((0 == i) || (rgstrDest[i - 1] < strInsert))
		{
			rgstrDest[i] = strInsert;
			return;
		}
		else
		{
			rgstrDest[i] = rgstrDest[i - 1];
		}
	}
}
function RTE_GetCurrentSelection(strBaseElementID)
{
	var docEditor = RTE_GetEditorDocument(strBaseElementID);
	if (docEditor != null)
	{
		return docEditor.selection;
	}
	return null;
}
function RTE_GetCurrentSelectionRange(strBaseElementID)
{
	var selection = RTE_GetCurrentSelection(strBaseElementID);
	if (selection != null)
	{
		return selection.createRange();
	}
	return null;
}
function RTE_GetCurrentSelectionChain(strBaseElementID)
{
	var aChain = new Array();
	var elem = RTE_GetCurrentElement(strBaseElementID);
	while (elem != null)
	{
		aChain[aChain.length] = elem;
		if (elem.id == strBaseElementID || elem.tagName == "BODY")
		{
			break;
		}
		elem = elem.parentElement;
	}
	return aChain;
}
function RTE_IsElementInChain(aChain, strTagName)
{
	if (aChain == null || aChain.length == 0)
	{
		return false;
	}
	var aChain_length = aChain.length;
	if (strTagName == null || strTagName.length == 0)
	{
		return false;
	}
	for (var i=0; i<aChain_length; i++)
	{
		if (aChain[i].tagName == strTagName)
		{
			return true;
		}
	}
	return false;
}
var g_aTableCellTagNames;
if (g_aTableCellTagNames == null)
{
	g_aTableCellTagNames = new Array("TD", "TH");
}
function RTE_GetCurrentElement(strBaseElementID)
{
	var selection = RTE_GetCurrentSelection(strBaseElementID);
	if (selection == null) {return null;}
	var range = selection.createRange();
	if (range == null) {return null;}
	if (selection.type.toLowerCase() == "control")
	{
		if (range.length != 1) {return null;}
		return range.item(0);
	}
	else
	{
		var elemParent = range.parentElement();
		if (elemParent != null)
		{
			var editorDocument = RTE_GetEditorDocument(strBaseElementID);
			if (null != editorDocument && editorDocument.body.contains(elemParent))
			{
				return elemParent;
			}
		}
	}
	return null;
}
function RTE_IsElementSelected(strBaseElementID, strTagName)
{
	var currentElement = RTE_GetCurrentElement(strBaseElementID);
	if (currentElement != null)
	{
		if (currentElement.tagName == strTagName)
		{
			return true;
		}
	}
	return false;
}
function RTE_GetNearestContainingParentElementOfType(strBaseElementID, elem, strTagName)
{
	return RTE_GetNearestContainingParentElementOfTypes(strBaseElementID, elem, new Array(strTagName))
}
function RTE_GetNearestContainingParentElementOfTypes(strBaseElementID, elem, aTagNames)
{
	var aTagNames_length = aTagNames.length;
	if (elem == null) return null;
	for (var i=0; i<aTagNames_length; i++)
	{
		if (elem.tagName == aTagNames[i])
		{
			return elem;
		}
	}
	var elemParent = elem.parentElement;
	while (elemParent != null)
	{
		if (elemParent.id == strBaseElementID)
		{
			return null;
		}
		for (var i=0; i<aTagNames_length; i++)
		{
			if (elemParent.tagName == aTagNames[i])
			{
				return elemParent;
			}
		}
		elemParent = elemParent.parentElement;
	}
	return null;
}
function RTE_GetNearestContainingElementOfType(strBaseElementID, strTagName)
{
	var elem = RTE_GetCurrentElement(strBaseElementID);
	return RTE_GetNearestContainingParentElementOfType(strBaseElementID, elem, strTagName);
}
function RTE_GetNearestContainingElementOfTypes(strBaseElementID, aTagNames)
{
	var elem = RTE_GetCurrentElement(strBaseElementID);
	return RTE_GetNearestContainingParentElementOfTypes(strBaseElementID, elem, aTagNames);
}
function RTE_GetSelectedCells(strBaseElementID)
{
	var selectedCells = new Array();
	if (RTE_IsElementSelected(strBaseElementID, "TR"))
	{
		var elemRowCurrent = RTE_GetCurrentElement(strBaseElementID);
		if (elemRowCurrent != null)
		{
			var rngSelection = RTE_GetCurrentSelectionRange(strBaseElementID);
			if (null != rngSelection)
			{
				var rngContainedElement = rngSelection.duplicate();
				if (null != rngContainedElement)
				{
					for (var i=0; i<elemRowCurrent.cells.length; i++)
					{
						rngContainedElement.moveToElementText(elemRowCurrent.cells(i));
						if (rngSelection.inRange(rngContainedElement))
						{
							selectedCells[selectedCells.length] = elemRowCurrent.cells(i);
						}
						else if ((rngSelection.compareEndPoints("StartToStart", rngContainedElement)==1)
							&& (rngSelection.compareEndPoints("StartToEnd", rngContainedElement)==-1))
						{
							selectedCells[selectedCells.length] = elemRowCurrent.cells(i);
						}
						else if ((rngSelection.compareEndPoints("EndToStart", rngContainedElement)==1)
							&& (rngSelection.compareEndPoints("EndToEnd", rngContainedElement)==-1))
						{
							selectedCells[selectedCells.length] = elemRowCurrent.cells(i);
						}
					}
				}
			}
		}
	}
	return selectedCells;
}
function RTE_InsertTable(strBaseElementID)
{
	var cols = 2;
	var rows = 2;
	var tableHtml = '<TABLE STYLE="display: inline; font-size: 1em; border-collapse: collapse;border:solid 1px #c4c4c4;">';
	for (var i = 0; i < rows; ++i)
	{
		tableHtml += '<TR>';
		for (var j = 0; j < cols; ++j)
		{
			tableHtml += '<TD style="vertical-align:TOP;border:solid 1px #c4c4c4;padding:2px;"><div></div></TD>';
		}
		tableHtml += "</TR>";
	}
	tableHtml += "</TABLE>";
	var rngSelection = RTE_GetSelection(strBaseElementID);
	if (null != rngSelection)
	{
		rngSelection.pasteHTML(tableHtml);
	}
}
function RTE_InsertCellLeft(strBaseElementID)
{
	if (RTE_GetDirectionOfSelection(strBaseElementID) == "rtl")
	{
		RTE_InsertCellBase(strBaseElementID, "afterEnd");
	}
	else
	{
		RTE_InsertCellBase(strBaseElementID, "beforeBegin");
	}
}
function RTE_InsertCellRight(strBaseElementID)
{
	if (RTE_GetDirectionOfSelection(strBaseElementID) == "rtl")
	{
		RTE_InsertCellBase(strBaseElementID, "beforeBegin");
	}
	else
	{
		RTE_InsertCellBase(strBaseElementID, "afterEnd");
	}
}
function RTE_InsertCellBase(strBaseElementID, strWhere)
{
	var elemCellCurrent = RTE_GetNearestContainingElementOfTypes(strBaseElementID, g_aTableCellTagNames);
	if (elemCellCurrent == null)
	{
		return;
	}
	var docEditor=RTE_GetEditorDocument(strBaseElementID);
	if (docEditor == null) 
	{
		return;
	}
	var elemCellNew = docEditor.createElement(elemCellCurrent.tagName);
	if (elemCellNew == null)
	{
		return;
	}   
	elemCellNew.mergeAttributes(elemCellCurrent, true);
	elemCellNew.runtimeStyle.cssText = elemCellCurrent.runtimeStyle.cssText;
	elemCellCurrent.insertAdjacentElement(strWhere, elemCellNew);
	var textRange = docEditor.body.createTextRange();
	if (null != textRange)
	{
		textRange.moveToElementText(elemCellNew);
		textRange.select();
	}
}
function RTE_InsertRowAbove(strBaseElementID)
{
	RTE_InsertRowBase(strBaseElementID, "beforeBegin");
}
function RTE_InsertRowBelow(strBaseElementID)
{
	RTE_InsertRowBase(strBaseElementID, "afterEnd");
}
function RTE_InsertRowBase(strBaseElementID, strWhere)
{
	var elemRowSelected = RTE_GetNearestContainingElementOfType(strBaseElementID, "TR");
	if (elemRowSelected == null)
	{
		return;
	}
	var docEditor=RTE_GetEditorDocument(strBaseElementID);
	if (docEditor == null) 
	{
		return;
	}
	var elemRowNew = docEditor.createElement("TR");
	if (elemRowNew == null)
	{
		return;
	}
	elemRowNew.mergeAttributes(elemRowSelected, true);
	elemRowNew.runtimeStyle.cssText = elemRowSelected.runtimeStyle.cssText;
	elemRowSelected.insertAdjacentElement(strWhere, elemRowNew);
	var cells = elemRowSelected.cells;
	for (var i=0; i<cells.length; i++)
	{
		var elemCellNew = elemRowNew.insertCell();
		elemCellNew.mergeAttributes(cells(i), true);
		elemCellNew.runtimeStyle.cssText = cells(i).runtimeStyle.cssText;
	}
	var textRange = docEditor.body.createTextRange();
	if (null != textRange)
	{
		var dir = RTE_GetDirectionOfSelection(strBaseElementID);
		if (dir == "ltr") 
		{
			textRange.moveToElementText(elemRowNew.cells(0));
		}
		else
		{
			textRange.moveToElementText(elemRowNew.cells(elemRowNew.cells.length - 1));    
		}
		textRange.select();
	}
}
function RTE_InsertColumnLeft(strBaseElementID)
{
	if (RTE_GetDirectionOfSelection(strBaseElementID) == "rtl")
	{
		return RTE_InsertColumnBase(strBaseElementID, "afterEnd");
	}
	else
	{
		return RTE_InsertColumnBase(strBaseElementID, "beforeBegin");
	}
}
function RTE_InsertColumnRight(strBaseElementID)
{
	if (RTE_GetDirectionOfSelection(strBaseElementID) == "rtl")
	{
		return RTE_InsertColumnBase(strBaseElementID, "beforeBegin");
	}
	else
	{
		return RTE_InsertColumnBase(strBaseElementID, "afterEnd");
	}
}
function RTE_InsertColumnBase(strBaseElementID, strWhere)
{
	var elemCellSelected = RTE_GetNearestContainingElementOfTypes(strBaseElementID, g_aTableCellTagNames);
	if (elemCellSelected == null)
	{
		return;
	}
	var elemTableSelected = RTE_GetNearestContainingParentElementOfType(strBaseElementID, elemCellSelected, "TABLE");
	if (elemTableSelected == null)
	{
		return false;
	}
	var docEditor=RTE_GetEditorDocument(strBaseElementID);
	if (docEditor == null) return;
	var colSpanIndex = 0;
	var colSpanCount = 0;
	var elemRowSelected = RTE_GetNearestContainingParentElementOfType(strBaseElementID, elemCellSelected, "TR");
	if (elemRowSelected != null)
	{
		var elemRowSelectedCells = elemRowSelected.cells;
		var elemRowSelectedCellsLength = elemRowSelectedCells.length;
		for (var i=0; i<elemRowSelectedCellsLength; i++)
		{
			colSpanCount = elemRowSelectedCells[i].colSpan;
			if (elemRowSelectedCells[i] == elemCellSelected)
			{
				currentCellPosition = i;
				break;
			}
			colSpanIndex += colSpanCount;
		}
	}
	var elemTableSelectedRows = elemTableSelected.rows;
	var elemTableSelectedRowsLength = elemTableSelectedRows.length;
	for (var i=0; i<elemTableSelectedRowsLength; i++)
	{
		var elemRow = elemTableSelectedRows[i];
		if (elemRow != null)
		{
			var currentColSpanIndex = 0;
			var currentColSpanCount = 0;
			var elemRowCells = elemRow.cells;
			var elemRowCellsLength = elemRowCells.length;
			for (var j=0; j<elemRowCellsLength; j++)
			{
				var elemCell = elemRowCells[j];
				currentColSpanCount = elemCell.colSpan;
				if (strWhere == "beforeBegin")
				{
					if (currentColSpanIndex==colSpanIndex) 
					{
						var elemCellNew = docEditor.createElement(elemCell.tagName);
						if (elemCellNew != null)
						{
							elemCellNew.mergeAttributes(elemCell, true);
							elemCellNew.runtimeStyle.cssText = elemCell.runtimeStyle.cssText;
							elemCellNew.colSpan = 1;
							elemCell.insertAdjacentElement(strWhere, elemCellNew);
							if (i == 0)
							{
								var textRange = docEditor.body.createTextRange();
								if (textRange != null)
								{
									textRange.moveToElementText(elemCellNew);
									textRange.select();
								}
							}
						}
						break;
					}
					else if (currentColSpanIndex+currentColSpanCount > colSpanIndex) 
					{
						elemCell.colSpan++;
						break;
					}
				}
				else if (strWhere == "afterEnd")
				{
					if (currentColSpanIndex+currentColSpanCount == colSpanIndex+colSpanCount) 
					{
						var elemCellNew = docEditor.createElement(elemCell.tagName);
						if (elemCellNew != null)
						{
							elemCellNew.mergeAttributes(elemCell, true);
							elemCellNew.runtimeStyle.cssText = elemCell.runtimeStyle.cssText;
							elemCellNew.colSpan = 1;
							elemCell.insertAdjacentElement(strWhere, elemCellNew);
							if (i == 0)
							{
								var textRange = docEditor.body.createTextRange();
								if (textRange != null)
								{
									textRange.moveToElementText(elemCellNew);
									textRange.select();
								}
							}
						}
						break;
					}
					else if (currentColSpanIndex+currentColSpanCount > colSpanIndex+colSpanCount) 
					{
						elemCell.colSpan++;
						break;
					}
				}
				currentColSpanIndex += currentColSpanCount;
			}
		}
	}
}
function RTE_DeleteColumn(strBaseElementID)
{
	var elemCellSelected = RTE_GetNearestContainingElementOfTypes(strBaseElementID, g_aTableCellTagNames);
	if (elemCellSelected == null) {    return;    }
	var elemTableSelected = RTE_GetNearestContainingParentElementOfType(strBaseElementID, elemCellSelected, "TABLE");
	if (elemTableSelected == null) { return; }
	var elemCellSelectedIndex = elemCellSelected.cellIndex;
	var colSpanIndex = 0;
	var colSpanCount = 0;
	var elemRowSelected = RTE_GetNearestContainingParentElementOfType(strBaseElementID, elemCellSelected, "TR");
	if (elemRowSelected != null)
	{
		var elemRowSelectedCells = elemRowSelected.cells;
		var elemRowSelectedCellsLength = elemRowSelectedCells.length;
		for (var i=0; i<elemRowSelectedCellsLength; i++)
		{
			colSpanCount = elemRowSelectedCells[i].colSpan;
			if (elemRowSelectedCells[i] == elemCellSelected)
			{
				currentCellPosition = i;
				break;
			}
			colSpanIndex += colSpanCount;
		}
	}
	var elemTableSelectedRows = elemTableSelected.rows;
	var elemTableSelectedRowsLength = elemTableSelectedRows.length;
	for (var i=0; i<elemTableSelectedRowsLength; i++)
	{
		var elemRow = elemTableSelectedRows[i];
		if (elemRow != null)
		{
			var currentColSpanIndex = 0;
			var currentColSpanCount = 0;
			var cellsToModify = new Array();
			var elemRowCells = elemRow.cells;
			var elemRowCellsLength = elemRowCells.length;
			for (var j=0; j<=elemRowCellsLength; j++)
			{
				if (currentColSpanIndex >= colSpanIndex+colSpanCount)
				{
					for (var k=0; k<cellsToModify.length; k++)
					{
						var cell = cellsToModify[k][0];
						var decrement = cellsToModify[k][1];
						if (decrement == cell.colSpan)
						{
							cell.removeNode(true);
						}
						else
						{
							cell.colSpan -= decrement;
						}
					}
					break;
				}
				var elemCell = elemRowCells[j];
				currentColSpanCount = elemCell.colSpan;
				if (currentColSpanIndex+currentColSpanCount <= colSpanIndex)
				{
					currentColSpanIndex += currentColSpanCount;
					continue;
				}
				else
				{
					var colSpanDecrement = 0;
					if ((currentColSpanIndex >= colSpanIndex) && (currentColSpanIndex+currentColSpanCount <= colSpanIndex+colSpanCount))
					{
						colSpanDecrement = currentColSpanCount;
					}
					else if ((currentColSpanIndex <= colSpanIndex) && (currentColSpanIndex+currentColSpanCount >= colSpanIndex+colSpanCount))
					{
						colSpanDecrement = colSpanCount;
					}
					else if ((currentColSpanIndex <= colSpanIndex) && (currentColSpanIndex+currentColSpanCount < colSpanIndex+colSpanCount))
					{
						colSpanDecrement = currentColSpanIndex + currentColSpanCount - colSpanIndex;
					}
					else if ((currentColSpanIndex > colSpanIndex)  && (currentColSpanIndex+currentColSpanCount > colSpanIndex+colSpanCount))
					{
						colSpanDecrement = colSpanIndex + colSpanCount - currentColSpanIndex;
					}
					cellsToModify[cellsToModify.length] = new Array(elemCell, colSpanDecrement);
				}
				currentColSpanIndex += currentColSpanCount;
			}
		}
	}
	var rows = elemTableSelected.rows;
	var rowsLength = rows.length;
	for(var i=rowsLength; i>0; i--)
	{
		if (rows(i-1).cells.length==0)
		{
			rows(i-1).removeNode(true);
		}
	}
	if (elemTableSelected.rows.length == 0)
	{
		elemTableSelected.removeNode(true);
	}
	else
	{
		var moveSelectionToCellIndex=0;
		var moveSelectionToSpanCount=0;
		var elemTableTopRowCells = rows[0].cells;
		for (var i=0; i<elemTableTopRowCells.length; i++)
		{
			moveSelectionToCellIndex = i;
			var currentSpanCount = elemTableTopRowCells[i].colSpan;
			if (moveSelectionToSpanCount + currentSpanCount > colSpanIndex)
				break;
			moveSelectionToSpanCount += currentSpanCount;
		}
		var editorDocument=RTE_GetEditorDocument(strBaseElementID);
		var textRange=editorDocument.body.createTextRange();
		var cellToSelect=elemTableTopRowCells[moveSelectionToCellIndex];
		if (null != textRange && null != cellToSelect)
		{
			textRange.moveToElementText(cellToSelect);
			textRange.select();
			textRange.collapse(true);
		}
	}
	RTE_StartResetToolBarTimer(strBaseElementID);
}
function RTE_DeleteRow(strBaseElementID)
{
	var elemRowSelected = RTE_GetNearestContainingElementOfType(strBaseElementID, "TR");
	if (elemRowSelected != null)
	{
		var elemTableSelected = RTE_GetNearestContainingParentElementOfType(strBaseElementID, elemRowSelected, "TABLE");
		var elemTableNewSelectionRowIndex = elemRowSelected.rowIndex;
		elemRowSelected.removeNode(true);
		if (elemTableSelected)
		{
			if (elemTableSelected.rows.length > 0)
			{
				if (elemTableNewSelectionRowIndex >= elemTableSelected.rows.length)
				{
					elemTableNewSelectionRowIndex = elemTableSelected.rows.length - 1;
				}
				var elemTableNewSelectionRowCells = elemTableSelected.rows[elemTableNewSelectionRowIndex].cells;
				var editorDocument=RTE_GetEditorDocument(strBaseElementID);
				var textRange=editorDocument.body.createTextRange();
				if (null != textRange && null != elemTableNewSelectionRowCells)
				{
					if (elemTableNewSelectionRowCells.length > 0)
					{
						var cellToSelect=elemTableNewSelectionRowCells[0];
						textRange.moveToElementText(cellToSelect);
						textRange.select();
						textRange.collapse(true);
					}
	            }
			}
			else
			{
				elemTableSelected.removeNode(true);
			}
		}
	}
	RTE_StartResetToolBarTimer(strBaseElementID);
}
function RTE_SplitCell(strBaseElementID)
{
	var elemCellSelected = RTE_GetNearestContainingElementOfTypes(strBaseElementID, g_aTableCellTagNames);
	if (elemCellSelected == null)
	{
		return;
	}
	var currentCellPosition = -1;
	var colSpanCount = 0;
	var elemRowSelected = RTE_GetNearestContainingParentElementOfType(strBaseElementID, elemCellSelected, "TR");
	if (elemRowSelected != null)
	{
		for (var i=0; i<elemRowSelected.cells.length; i++)
		{
			colSpanCount += elemRowSelected.cells[i].colSpan;
			if (elemRowSelected.cells[i] == elemCellSelected)
			{
				currentCellPosition = i;
				break;
			}
		}
	}
	var elemCellNew = document.createElement(elemCellSelected.tagName);
	if (elemCellNew != null)
	{
		elemCellNew.mergeAttributes(elemCellSelected, true);
		elemCellNew.runtimeStyle.cssText = elemCellSelected.runtimeStyle.cssText;
		if (elemCellSelected.colSpan > 1)
		{
			elemCellNew.colSpan = elemCellSelected.colSpan/2;
			elemCellSelected.colSpan -= elemCellNew.colSpan;
		}
		else
		{
			elemCellNew.colSpan = 1;
			var elemTableSelected = RTE_GetNearestContainingParentElementOfType(strBaseElementID, elemRowSelected, "TABLE");
			for (var i=0; i<elemTableSelected.rows.length; i++)
			{
				var currentColSpanCount = 0;
				var elemRow = elemTableSelected.rows[i];
				if (elemRow != null && elemRow != elemRowSelected)
				{
					for (var j=0; j<elemRow.cells.length; j++)
					{
						var elemCell = elemRow.cells[j];
						currentColSpanCount += elemCell.colSpan;
						if (currentColSpanCount >= colSpanCount)
						{
							elemCell.colSpan++;
							break;
						}
					}
				}
			}
		}
		elemCellSelected.insertAdjacentElement("afterEnd", elemCellNew);
		RTE_StartResetToolBarTimer(strBaseElementID);
	}
}
function RTE_MergeCells(strBaseElementID)
{
	if (RTE_IsElementSelected(strBaseElementID, "TR"))
	{
		RTE_MergeSelected(strBaseElementID);
	}
	else
	{
		RTE_MergeWithDirection(strBaseElementID, "none");
	}
}
function RTE_MergeSelected(strBaseElementID)
{
	var elemRowSelected = RTE_GetCurrentElement(strBaseElementID);
	if (null == elemRowSelected || elemRowSelected.tagName != "TR") return; 
	if (elemRowSelected != null)
	{
		var selectedCells = RTE_GetSelectedCells(strBaseElementID);
		if (selectedCells.length > 1)
		{
			for (var i=1; i<selectedCells.length; i++)
			{
				if (selectedCells[i].innerText.length > 0)
				{
					selectedCells[0].innerHTML += " ";
				}
				selectedCells[0].innerHTML += selectedCells[i].innerHTML;
				selectedCells[0].colSpan += selectedCells[i].colSpan;
				elemRowSelected.removeChild(selectedCells[i]);
			}
			if (RTE_GetCurrentElement(strBaseElementID) != selectedCells[0])
			{
				var editorDocument = RTE_GetEditorDocument(strBaseElementID);
				var textRange = editorDocument.body.createTextRange();
				if (null != textRange)
				{
					textRange.moveToElementText(selectedCells[0]);
					textRange.select();
				}
			}
		}
	}
}
function RTE_MergeWithRight(strBaseElementID)
{
	RTE_MergeWithDirection(strBaseElementID, "right");
}
function RTE_MergeWithLeft(strBaseElementID)
{
	RTE_MergeWithDirection(strBaseElementID, "left");
}
function RTE_MergeWithAbove(strBaseElementID)
{
	RTE_MergeWithDirection(strBaseElementID, "above");
}
function RTE_MergeWithBelow(strBaseElementID)
{
	RTE_MergeWithDirection(strBaseElementID, "below");
}
function RTE_MergeWithDirection(strBaseElementID, dir)
{
	RTE_MergeSelected(strBaseElementID);
	var elemSelected=RTE_GetCurrentElement(strBaseElementID);
	if (elemSelected == null) return;
	var elemCellSelected=RTE_GetNearestContainingParentElementOfTypes(strBaseElementID, elemSelected, g_aTableCellTagNames);	
	if (elemCellSelected ==null) return;
	var elemRowSelected=RTE_GetNearestContainingParentElementOfType(strBaseElementID, elemCellSelected, "TR");
	if (elemRowSelected ==null) return;
	var elemTable = RTE_GetNearestContainingParentElementOfType(strBaseElementID, elemRowSelected, "TABLE");
	if (RTE_GetDirectionOfSelection(strBaseElementID) == "rtl")
	{
		if (dir == "right")
		{
			dir = "left";
		}
		else if (dir == "left")
		{
			dir = "right";
		}
	}
	switch(dir)
	{
		case "right":
			var mergeFromIndex = elemCellSelected.cellIndex;
			var rowCells = elemRowSelected.cells;
			if (mergeFromIndex+1 >= rowCells.length) return;
			if (rowCells[mergeFromIndex+1].rowSpan == rowCells[mergeFromIndex].rowSpan)
			{   
				RTE_MergeHorizontal(strBaseElementID, elemRowSelected, mergeFromIndex);
			}
			else
			{
				alert(L_InvalidMerge_TEXT);
			}
			break;
		case "left":
			var mergeFromIndex = elemCellSelected.cellIndex-1;
			var rowCells = elemRowSelected.cells;
			if (mergeFromIndex < 0) return;
			if (rowCells[mergeFromIndex+1].rowSpan == rowCells[mergeFromIndex].rowSpan)
			{   
				RTE_MergeHorizontal(strBaseElementID, elemRowSelected, mergeFromIndex);
				RTE_PutSelectionInCell(strBaseElementID, elemRowSelected.cells[mergeFromIndex]);
			}
			else
			{
				alert(L_InvalidMerge_TEXT);
			}
			break;
		case "above":
			if (elemTable == null) return;
			if (elemRowSelected.rowIndex == 0) return;
			var rowBelow = elemRowSelected;
			var rowBelowCells = rowBelow.cells;
			var rowBelowCell = elemCellSelected;
			var spanGrid = RTE_GenerateSpanGridUpToTarget(elemTable, elemCellSelected);
			var rowBelowCellColSpanIndex = spanGrid.targetCellColSpanIndex;
			var spanGridAboveTarget = spanGrid.columns[rowBelowCellColSpanIndex].cells[elemRowSelected.rowIndex-1];
			var rowAboveCell = spanGridAboveTarget.cell;
			if (rowBelowCell.colSpan == rowAboveCell.colSpan && spanGridAboveTarget.colSpanIndex == rowBelowCellColSpanIndex)
			{
				RTE_MergeVertical(strBaseElementID, rowBelow, rowBelowCell, rowAboveCell)
				RTE_PutSelectionInCell(strBaseElementID, rowAboveCell);
			}
			else
			{
				alert(L_InvalidMerge_TEXT);
			}
			break;
		case "below":
			if (elemTable == null) return;
			var rowAboveCell = elemCellSelected;
			var spanGrid = RTE_GenerateSpanGridUpToTarget(elemTable, rowAboveCell);
			var rowAboveCellColSpanIndex = spanGrid.targetCellColSpanIndex;
			var spanGridBelowTarget = spanGrid.columns[rowAboveCellColSpanIndex].cells[elemRowSelected.rowIndex+rowAboveCell.rowSpan];
			if (spanGridBelowTarget == null) return;
			var rowBelowCell = spanGridBelowTarget.cell;
			var rowBelow = RTE_GetNearestContainingParentElementOfType(strBaseElementID, rowBelowCell, "TR");
			if (rowBelow == null) return;
			if (rowBelowCell.colSpan == rowAboveCell.colSpan && spanGridBelowTarget.colSpanIndex == rowAboveCellColSpanIndex)
			{
				RTE_MergeVertical(strBaseElementID, rowBelow, rowBelowCell, rowAboveCell)
			}
			else
			{
				alert(L_InvalidMerge_TEXT);
			}
			break;
		case "none":
			if (elemRowSelected.cells[elemCellSelected.cellIndex] != null &&
				elemRowSelected.cells[elemCellSelected.cellIndex + 1] != null)
			{
				var dir = RTE_GetDirectionOfSelection(elemCellSelected);
				if (   (dir != "rtl" && elemCellSelected.cellIndex == elemRowSelected.cells.length - 1 )
					|| (dir == "rtl" && elemCellSelected.cellIndex != 0))
				{
					var mergeFromCellIndex = elemCellSelected.cellIndex-1;
					if (mergeFromCellIndex < 0) return;
					RTE_MergeHorizontal(strBaseElementID, elemRowSelected, mergeFromCellIndex);
					RTE_PutSelectionInCell(strBaseElementID, elemRowSelected.cells[mergeFromCellIndex]);
				}
				else
				{
					if (elemCellSelected.cellIndex+1 >= elemRowSelected.length) return;
					RTE_MergeHorizontal(strBaseElementID, elemRowSelected, elemCellSelected.cellIndex);
				}
			}
			break;
	}
	RTE_StartResetToolBarTimer(strBaseElementID);
}
function RTE_MergeHorizontal(strBaseElementID, elemRow, mergeFromIndex)
{
	var rowCells = elemRow.cells;
	if (rowCells[mergeFromIndex].innerText.length > 0)
	{
		rowCells[mergeFromIndex].innerHTML += " ";
	}
	rowCells[mergeFromIndex].innerHTML += rowCells[mergeFromIndex+1].innerHTML;
	rowCells[mergeFromIndex].colSpan += rowCells[mergeFromIndex+1].colSpan;
	elemRow.removeChild(rowCells[mergeFromIndex+1]);
}
function RTE_MergeVertical(strBaseElementID, rowBelow, rowBelowCell, rowAboveCell)
{   
	if (rowAboveCell.innerText.length > 0)
	{
		rowAboveCell.innerHTML += " ";
	}
	rowAboveCell.innerHTML += rowBelowCell.innerHTML;
	rowAboveCell.rowSpan += rowBelowCell.rowSpan;
	rowBelow.removeChild(rowBelowCell);  
}
function RTE_PutSelectionInCell(strBaseElementID, newCell)
{
	if (RTE_GetCurrentElement(strBaseElementID) != newCell)
	{
		var editorDocument = RTE_GetEditorDocument(strBaseElementID);
		var textRange = editorDocument.body.createTextRange();
		textRange.moveToElementText(newCell);
		textRange.select();
	}
}
var g_oExtendedRichTextSupport;
function RTE_GetEditorInstanceVariables(strBaseElementID)
{
	if (g_oExtendedRichTextSupport != null)
	{
		if (null != g_oExtendedRichTextSupport.editors && g_oExtendedRichTextSupport.editors[strBaseElementID] != null)
		{
			return g_oExtendedRichTextSupport.editors[strBaseElementID];
		}
	}
	return null;
}
function RTE_InitializeExtendedRichTextSupport(strBaseElementID)
{
	if (g_oExtendedRichTextSupport == null)
	{
		g_oExtendedRichTextSupport = new Object;
		g_oExtendedRichTextSupport.editors = new Array();
	}
	g_oExtendedRichTextSupport.editors[strBaseElementID] = new Object;
}
function RTE_TB_OnClickInsertTable(strBaseElementID)
{
	RTE_SaveSelection(strBaseElementID);
	RTE_InsertTable(strBaseElementID);
	RTE_StartResetToolBarTimer(strBaseElementID);
}
function RTE_TB_OnClickSplitCell(strBaseElementID)
{
	RTE_SaveSelection(strBaseElementID);
	RTE_SplitCell(strBaseElementID);
	RTE_StartResetToolBarTimer(strBaseElementID);
}
function RTE_TB_OnClickMergeCells(strBaseElementID)
{
	RTE_SaveSelection(strBaseElementID);
	RTE_MergeCells(strBaseElementID);
	RTE_StartResetToolBarTimer(strBaseElementID);
}
function RTE_TB_OnClickSetDirectionOfSelection(strBaseElementID,strDirection)
{
	RTE_SaveSelection(strBaseElementID);
	RTE2_SetDirectionOfSelection(strBaseElementID, strDirection);
	RTE_StartResetToolBarTimer(strBaseElementID);
}
function RTE_TB_GenerateExtendedToolBarSeparatorHtml()
{
	return "<td class=ms-separator  unselectable=\"on\">|</td>";
}
function RTE_TB_GenerateExtendedToolBarLineBreakHtml()
{
	return "</tr></table></td></tr><tr unselectable=\"on\"><td unselectable=\"on\"><table cellspacing=0 cellpadding=0 border=0 unselectable=\"on\"><tr unselectable=\"on\">";
}
function RTE_DD_GenerateDropDownList(strBaseElementID,strWebLanguage,strCommandToPerform,strToolTip,strButtonImage,onClickEvent,fShowImageWithDropArrow)
{
	var strHtmlRet = "";
	strHtmlRet += RTE_TB_GenerateOpenCellExtendedToolbarButtonHtml(strBaseElementID, strCommandToPerform,"RTE_SaveSelection('" + strBaseElementID + "'); " + onClickEvent);
	strHtmlRet += "<img src=\"" + RTE_GetServerRelativeImageUrl(strButtonImage) + "\" alt=\"" + strToolTip + "\" border=0 width=16 height=16 unselectable=\"on\">";
	if (fShowImageWithDropArrow)
	{
		strHtmlRet += "<img alt=\"" + strToolTip + "\" src=\"" + RTE_GetServerRelativeUnlocalizedImageUrl("menudark.gif") + "\" border=0 width=13 height=13 unselectable=\"on\">";
	}
	strHtmlRet += RTE_TB_GenerateCloseCellButtonHtml();
	return strHtmlRet;
}
function RTE_DD_GenerateInsertTableElementExtendedToolBarButtonHtml(strBaseElementID, strWebLanguage)
{
	var strHtmlRet = "";
	var strCommandToPerform = g_strRTEInsertTableElementMnemonic;
	var strToolTip = L_InsertTableElementToolTip_TEXT;
	var strButtonImage = "rteirow.gif"; 
	var onClickEvent = "RTE_DD_OpenInsertTableElementSelector('" + strBaseElementID + "' ,'" + strWebLanguage + "'); return false;";
	return RTE_DD_GenerateDropDownList(strBaseElementID, strWebLanguage,strCommandToPerform,strToolTip,strButtonImage,onClickEvent,true);
}
function RTE_DD_GenerateDeleteTableElementExtendedToolBarButtonHtml(strBaseElementID, strWebLanguage)
{
	var strHtmlRet = "";
	var strCommandToPerform = g_strRTEDeleteTableElementMnemonic;
	var strToolTip = L_DeleteTableElementToolTip_TEXT;
	var strButtonImage = "rtedrow.gif"; 
	var onClickEvent = "RTE_DD_OpenDeleteTableElementSelector('" + strBaseElementID + "' ,'" + strWebLanguage + "'); return false;";
	return RTE_DD_GenerateDropDownList(strBaseElementID, strWebLanguage,strCommandToPerform,strToolTip,strButtonImage,onClickEvent,true);
}
function RTE_TB_GenerateOpenCellExtendedToolbarButtonHtml(strBaseElementID, strButtonMnemonic, strOnClickJScript, strTooltip)
{
var aHtmlRet = new Array();
	aHtmlRet.push("<td class=\"");
	aHtmlRet.push(g_strRTEToolbarClassName);
	aHtmlRet.push("\" unselectable=\"on\"><table cellpadding=1 cellspacing=0 border=0 unselectable=\"on\"><tr unselectable=\"on\"><td class=\"");
	aHtmlRet.push(g_strRTEToolbarClassName);
	aHtmlRet.push(" ");
	aHtmlRet.push(g_strRTEUnselectedClassName);
	aHtmlRet.push("\" nowrap id=\"");
	aHtmlRet.push(strBaseElementID);
	aHtmlRet.push("_");
	aHtmlRet.push(strButtonMnemonic);
	aHtmlRet.push("\" onmouseover=\"RTE_TB_OnMouseOver(this);\" onmouseout=\"RTE_TB_OnMouseOut(this);\"");
	if (strOnClickJScript)
	{ 
		aHtmlRet.push(" onClick=\"RTE_DD_CloseMenu();");
		aHtmlRet.push(strOnClickJScript);
		aHtmlRet.push("\"");
	}
	if (strTooltip)
	{
		aHtmlRet.push(" title=\"");
		aHtmlRet.push(strTooltip);
		aHtmlRet.push("\"");
	}
	aHtmlRet.push("unselectable=\"on\">");
	return aHtmlRet.join("");
}
function RTE_GenerateFontNameExtendedToolBarButtonHtml(strBaseElementID, strWebLanguage, fRestrictedMode, fSh