//table of contents generator
var TOC =
{
	anchorName:"toc_",
	doc:document,
	headers:null,
	containersToGenerate:[],
	headerCounter:0,
	generate:function(containerToGenerateId,tocContainerId)
	{
		TOC.generateAnchors(containerToGenerateId);

		
		for(var i=0;i<this.containersToGenerate.length;i++)
		{
			TOC.generateAnchors(this.containersToGenerate[i],true);
		
		}		
		
		var depth = 0;
		var list = document.createElement("ul");
		list.setAttribute("class","header");
		var workingList = list;

		for(var i=0;i<TOC.headers.length;i++)
		{
			if(!TOC.headers[i].tagName) continue;
			tagName = TOC.headers[i].tagName.toLowerCase();
			
			if((tagName == "h1")||
				(tagName == "h2")||(tagName == "dt"))
			{
				if(((tagName == "h2")||(tagName == "dt"))&&(depth == 0))
				{
					ul = document.createElement("ul");
					depth ++;
					workingList.appendChild(ul);
					workingList = ul;
					className = null;
				}
				else if((tagName == "h1")&&(depth > 0))
				{
					workingList = list;
					depth --;

				} 	
				li = document.createElement("li");
				var text = "";
				if(document.all)
				{	
					text = TOC.headers[i].innerText;
				}
				else
					text = TOC.headers[i].textContent;
				if(StringUtils.trim(text).length == 0) continue;				
				li.innerHTML  = "<a href=\"#"+TOC.anchorName+i+"\">"+text+"</a>";
				
				workingList.appendChild(li);
					
			}
		}		
		document.getElementById(tocContainerId).appendChild(list);
	},
	
	generateAnchors:function(containerToGenerateId,dontClearHeaders)
	{
		if(!dontClearHeaders)
		{
			TOC.headers = [];
			this.headerCounter = 0;

		}	
		var data = TOC.doc.getElementById(containerToGenerateId).childNodes;

	
		for(var i=0;i<data.length;i++)
		{
			if(!data[i].tagName) continue;
			tagName = data[i].tagName.toLowerCase();

			if((tagName == "h1")||
				(tagName == "h2")||(tagName == "dt"))
			{
				TOC.headers.push(data[i]);
				data[i].innerHTML ="<a name = \""+TOC.anchorName+this.headerCounter+"\"></a>"+data[i].innerHTML;
				this.headerCounter ++;
			}
		}	
	},
	isToc:function(anchor)
	{
		return anchor.getAttribute("name").indexOf(TOC.anchorName) === 0;	
	}
}