var ShowcaseNav = {
	BreakLine : function (sText, nMaxLength)
	{
		var nBreakPos = 0;
		var sString1 = sText;
		var sString2 = "", sTemp1 = "", sTemp2 = "";
		if (this.GetTextWidth(sString1) > nMaxLength)
		{
			while (this.GetTextWidth(sString1) > nMaxLength)
			{
				var nBreakPos = this.BinarySearch(sString1, nMaxLength);
				sTemp2 = sString1.substring(0, nBreakPos);
				if (sTemp2.indexOf(' ') != -1)
				{
					sTemp2 = sString1.substring(0, sTemp2.lastIndexOf(' '));
					sString2 = sString1.substring(sTemp2.length+1, sString1.length);
					sString1 = sTemp2;
				}
				else if (sString1.indexOf(' ') != -1)
				{
					sTemp2 = sString1.substring(0, sString1.indexOf(' '));
					sString2 = sString1.substring(sTemp2.length+1, sString1.length);
					sString1 = sTemp2;
				}
				sTemp1 += sString1 + "<br>";
				sString1 = sString2;
			}
			return sTemp1 + sString2;
		}
		else
		{
			return sText;
		}
	},
	BinarySearch : function (sText, nMaxLength)
	{
		var nLeft = 0;
		var nRight = sText.length;
		var nBreakPos = nLeft;
		var nLastBreakPos = nRight;
		while (Math.abs(nLastBreakPos - nBreakPos) > 1)
		{
			nLastBreakPos = nBreakPos;
			nBreakPos = Math.floor((nLeft+nRight)/2);
			if (nMaxLength < this.GetTextWidth(sText.substring(0, nBreakPos)))
			{
				nRight = nBreakPos - 1;
			}
			else
			{
				nLeft = nBreakPos + 1;
			}
		}
		return Math.min(nBreakPos, nLastBreakPos);
	},
	GetTextWidth : function (sText)
	{
		var oE = document.createElement("span");
		oE.innerHTML = sText;
		document.body.appendChild(oE);
		var nLen = oE.offsetWidth;
		document.body.removeChild(oE);
		return nLen;
	},
	locateAndExpand : function (sId)
	{
		if (sId.length > 0)
		{
			var oThing = document.getElementById(sId);
			oThing.setAttribute('expanded', '1');
			var oChild = oThing.firstChild;
			while (oChild)
			{
				if (oChild.nodeType == 1)
				{
					if (oChild.nodeName.toLowerCase() == "div" && oChild.className == 'showCaseNavDynamicSub')
					{
						oChild.className = 'showCaseNavDynamicSubOn';
						break;
					}
					else
					{
						oChild = oChild.firstChild;
					}
				}
				else
				{
					oChild = oChild.nextSibling;
				}
			}	
			var oParent = oThing.parentNode;
			while (oParent.nodeName.toLowerCase() != "body")
			{
				if (oParent.nodeType == 1)
				{
					if (oParent.nodeName.toLowerCase() == "li")
					{
						oParent.setAttribute('expanded', '1');
						oParent = oParent.parentNode;
					}
					else
					{
						oParent = oParent.parentNode;
					}
				}
				else
				{
					oParent = oParent.previousSibling;
				}
			}	
		}
	}
}