var showTimers = new Object();
var hideTimers = new Object();

function eventTrigger (e)
{
if (! e)
e = event;
return e.target || e.srcElement;
}

function GetTableID(DomElement)
{
	if (DomElement.nodeName == "BODY")
		return "";
	
	if ((DomElement.nodeName == "TABLE") && (DomElement.id != ""))
		return DomElement.id;
	
	return GetTableID(DomElement.parentNode);
}

function GetTableRow(DomElement)
{
	if (DomElement.nodeName == "TR")
		return DomElement;
	
	return GetTableRow(DomElement.parentNode);
}

function FindRow(table_id, row)
{
	var row1 = document.getElementById(table_id).childNodes.item(0).childNodes.item(0); 
	var count = 0;
	while(row1)
	{
		if(row1 == row)
			break;
		count++;
		row1 = row1.nextSibling;
	}
	return count;
}

function FindFirstClass(DomElement, ClassName)
{
	if (DomElement.nodeName == "BODY")
		return "";
		
	if (DomElement.className == ClassName)
		return DomElement;
	
	return FindFirstClass(DomElement.parentNode, ClassName);
		
}

function ChangeClass(DomElement, ClassFrom, ClassTo, table_id)
{
	var Count = 0;
	while(DomElement)
	{
		if ((DomElement.className == ClassFrom) && (Count + 1 != expandedRow[table_id]))
			DomElement.className = ClassTo;
			
		Count++;
		DomElement = DomElement.nextSibling;	
	}
}


function InitializeTable(TableID)
{	
	var loop_row = document.getElementById(TableID).childNodes.item(0).childNodes.item(0);
	
	while(loop_row)
	{	
	        if(window.addEventListener){ // Mozilla, Netscape, Firefox	
			if (loop_row.className == 'visible') 
			{					
				loop_row.addEventListener("mouseover", function(event){ ExpandEvent(event) }, false);					
				loop_row.addEventListener("mouseout", function(event){ collapse_visible(event) },false);
			} 
			else if (loop_row.className == 'expand') 
			{
				loop_row.addEventListener("mouseover", function(event){ keepExpanded(event); }, false);
				loop_row.addEventListener("mouseout", function(event){ collapse_expand(event); }, false);
			}			
		} else { // IE
			if (loop_row.className == 'visible') 
			{
				loop_row.attachEvent("onmouseover", function(event) { ExpandEvent(event) });	
				loop_row.attachEvent("onmouseout", function(event){ collapse_visible(event) });
			} 
			else if (loop_row.className == 'expand') 
			{
				loop_row.attachEvent("onmouseover", function(event) { keepExpanded(event); });
				loop_row.attachEvent("onmouseout", function(event){ collapse_expand(event); });
			}
		}	
		loop_row = loop_row.nextSibling;
	}
	loop_row = '';
}

function ExpandEvent(e)
{
	var eventSource = eventTrigger(e);
	var table_id = GetTableID(eventSource);
	var table_row = GetTableRow(eventSource);
	clearTimeout(showTimers[table_id]);
	clearTimeout(hideTimers[table_id]);

	ChangeClass(document.getElementById(table_id).childNodes.item(0).childNodes.item(0), 'highlight', 'visible', table_id)

	table_row.className = "highlight";

	var RowNumber = FindRow(table_id, table_row);
	
	showTimers[table_id] = window.setTimeout("DoExpand('" + table_id + "'," + RowNumber + ")", 700);
}
			
function DoExpand(table_id, row_number)
{
	clearTimeout(showTimers[table_id]); 
		
	if ((expandedRow[table_id] >= 0) && (expandedRow[table_id] != (row_number + 1)))
	{
		var PrevRow = document.getElementById(table_id).childNodes.item(0).childNodes.item(expandedRow[table_id]);
		PrevRow.style.display = "none";
		PrevRow.previousSibling.className = "visible";
	}

	var table_row = document.getElementById(table_id).childNodes.item(0).childNodes.item(row_number);
	
	if ((! table_row.nextSibling) || (table_row.nextSibling.className != "expand"))
	{
		expandedRow[table_id] = -1;
		return;
	}
		
	//if ((navigator.userAgent.indexOf("Opera") != -1) || (navigator.userAgent.indexOf("Firefox") != -1) || (navigator.userAgent.indexOf("Safari") != -1) || (navigator.userAgent.indexOf("Netscape") != -1)) {
        //   table_row.nextSibling.style.display = "table-row";	
        //} 
        //else {
        //   table_row.nextSibling.style.display = "inline";
        //}
             
        if ((navigator.userAgent.indexOf("MSIE") != -1) && (navigator.userAgent.indexOf("Opera") == -1)) {
        	table_row.nextSibling.style.display = "inline";
        }
        else {
        	table_row.nextSibling.style.display = "table-row";
        }
        
	expandedRow[table_id] = row_number + 1;

}
		
function collapse_expand(e)
{
	var eventSource = eventTrigger(e);
	var table_id = GetTableID(eventSource);
	var collapse_row = FindFirstClass(eventSource, "highlight");	
	hideTimers[table_id] = window.setTimeout("DoCollapse('" + table_id + "', " + expandedRow[table_id] + ")", 1000);
}
			
function collapse_visible(e)
{
	var eventSource = eventTrigger(e);
	var table_id = GetTableID(eventSource);
	clearTimeout(showTimers[table_id]);
	hideTimers[table_id] = window.setTimeout("DoCollapse('" + table_id + "', " + expandedRow[table_id] + ")", 1000);
}

function keepExpanded(e)
{
	var eventSource = eventTrigger(e);
	var table_id = GetTableID(eventSource);	
	clearTimeout(hideTimers[table_id]);	
	var table_row = document.getElementById(table_id).childNodes.item(0).childNodes.item(expandedRow[table_id]);
}

			
function DoCollapse(table_id)
{ 
	clearTimeout(hideTimers[table_id]);

	if(expandedRow[table_id] >= 0)
	{
		var row = document.getElementById(table_id).childNodes.item(0).childNodes.item(expandedRow[table_id]);
		ChangeClass(document.getElementById(table_id).childNodes.item(0).childNodes.item(0), 'highlight', 'visible', table_id);
		row.style.display = "none";
		row.previousSibling.className = "visible";
	} 
	else
	{
		ChangeClass(document.getElementById(table_id).childNodes.item(0).childNodes.item(0), 'highlight', 'visible')
	}
}