//
// Copyright (c) 2002 ComponentOne L.L.C. All rights reserved.
// Version 1.1.20024.1
//
//row
/*function c1g_getNodeLevel(gridid, row)
{
    var p = c1g_Props[gridid];
    var rid = c1g_getattr(row, "id");
}*/
function c1g_getNodeLevel(row)
{
	var node = row.style["nodeLevel"];
	return (node) ? parseInt(node) : -1;
}

function c1g_hasElementNode(item)
{
	var f = false;
	
	var len = item.childNodes.length;
	for (var i = 0; (i < len) && !f; i++)
		f = (item.childNodes[i].nodeType != 3);
		
	return f;
}

function c1g_getImgElement(row)
{
	var imgs = row.getElementsByTagName("IMG");
	return (imgs && imgs.length > 0) ? imgs[0] : null;
}

function c1g_toggleRowVisisbility(row, vis)
{
	if (row)
	{
		row.style.display = vis;
		
		var len = row.cells.length;		
		for (var i = 0; i < len; i++)
		{
			if (c1g_hasElementNode(row.cells[i]))
				row.cells[i].style.display = vis;
		}
	}
}

function c1g_getImages(img)
{
    var tmp = img.onclick.toString().split(",");
    return new Array(tmp[1], tmp[2]);
}

function c1g_showHide(e, imgCollapsed, imgExpanded, groupby)
{
	if (!e) 
		e = window.event;
	// find row that was clicked

	var src = null; //event.srcElement;
	if (e.srcElement)
		src = e.srcElement;
	else
		src = e.currentTarget;

	var evtsrc = src;
  
	while (src != null && src.tagName != "TR")
		src = c1g_getParent(src)

	if (src == null)
		 return;

	var clientRowID = c1g_getattr(src, "id");	

	// get the node level
	var level = c1g_getNodeLevel(src);
	if (level < 0)
		 return;
	
	// loop through all rows below this one until the next node
	var table = c1g_getParent(src);
	while (table != null && table.tagName != "TABLE")
		table = c1g_getParent(table);
	if (table == null)
		return;

	var rows = table.rows;
	var display = "";
	var lastlvl = true;
	var hdr = false;
	var len = rows.length;
	for (var row = src.rowIndex + 1; row < len; row++)
	{
		// stop at the next node higher than or equal to the source
		var rlevel = c1g_getNodeLevel(rows[row]);
		
		if (rlevel > -1 && rlevel <= level) break;
		if (rows[row].style["pager"] || c1g_getParent(rows[row]).tagName == "TFOOT") break;
		
		// handle detail rows

		if ((groupby && (level < rlevel || rlevel < 0)) || (!groupby && rlevel < 0))
		{
			// hiding or showing?
			if (display.length == 0)
				display = (rows[row].style.display == "none")? "": "none";
	
			// flip visibility
			if( groupby )
			{
				// if we're expanding only expand the next level up
				if( display == "" )
				{
					// group row
					//if( level <= rlevel )
					if (rlevel == level + 1 || !hdr || e.shiftKey)
					{
						hdr = (rlevel == level + 1);
						lastlvl = false;
						var img = c1g_getImgElement(rows[row]);
						/*if( rlevel > -1 && img && img.src)
							img.src = e.shiftKey ? imgExpanded : imgCollapsed;
							*/
						if (rlevel > -1 && img && img.src)
						{
							var imgs = c1g_getImages(img);
							img.src = e.shiftKey ? imgs[1] : imgs[0];
						}	
							
						c1g_toggleRowVisisbility(rows[row], display);
					}

					// datarow
					if (lastlvl && rlevel < 0 && !hdr)
						c1g_toggleRowVisisbility(rows[row], display);
				}
				else
				{
					if( level < rlevel )
					{
						var img = c1g_getImgElement(rows[row]);
						/*if(img && img.src )
							img.src = imgExpanded;*/
						if (img && img.src)
						{
						    var imgs = c1g_getImages(img); 
							img = imgs[1];						    
						}
							
						c1g_toggleRowVisisbility(rows[row], display);
					}
					
					if (rlevel < 0)
						c1g_toggleRowVisisbility(rows[row], display);
				}
			}
			else
				if (rlevel < 0)
					c1g_toggleRowVisisbility(rows[row], display);
		}
	}

	// flip image
	src = evtsrc;
	if (src.tagName == "IMG")
		src.src = (display == "none")? imgCollapsed: imgExpanded;
		
	var gridid = c1g_getGridID(evtsrc);
	c1g_refreshGrid(gridid);

	var field = c1g_getByName("__" + gridid + "_GroupedRows");
	if (field != null)
	{
		var props = c1g_Props[gridid];
		clientRowID = level + "~" + clientRowID;

		if (typeof(props.groupedRows[clientRowID]) == "undefined")
			props.groupedRows[clientRowID] = clientRowID;
		else
		{
			var na = new Array();
			for (var i in props.groupedRows)
				if (props.groupedRows[i] != clientRowID)
					na[i] = props.groupedRows[i];

			props.groupedRows = na;
		}			

		var val = "";
		for (var i in props.groupedRows)
			val = val + props.groupedRows[i] + ":";

		field.value = val;
	}
}