﻿function c1g_getNodeLevel(row)
{
	var id = row.id;
	var len = id.length;
	
	var idx = id.lastIndexOf("_");
	if (idx >= 0 && (idx + 2 < len) && id.substr(idx+1,2)=="GH")
	{
		idx = id.lastIndexOf("-");
		var val = id.substr(idx+1, len);
		val = parseInt(val);
		return isNaN(val) ? -1 : val;
	}
	
	return -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 t = img.onclick.toString();
	
	if (t.indexOf("c1g_showHide(") != -1)
	{
		t = t.split(",");
		while (t[1].charAt(0) == " ") t[1] = t[1].substr(1, t[1].length - 1); 
		while (t[2].charAt(0) == " ") t[2] = t[2].substr(1, t[2].length - 1);
		return new Array(t[1].substr(1,t[1].length-2),t[2].substr(1,t[2].length-2));
	}
	else
	{
		t = t.split(",");
		t = t[2].split("|");
		return new Array(t[2].substr(0,t[2].length),t[3].substr(0,t[3].length));
	}
}

function c1g_showHide(e, imgCollapsed, imgExpanded, groupby, ajx)
{
	if (!e) e = window.event;

	var src = (e.srcElement) ? e.srcElement : e.currentTarget;
	var evtsrc = src;

	src = c1g_upToTag(src, "TR");
	if (!src) return;

	// get the node level
	var level = c1g_getNodeLevel(src);
	if (level < 0)
		 return;
	
	// loop through all rows below this one until the next node
	table = c1g_upToTag(src.parentNode, "TABLE");
	if (!table) return;

	var clientRowID = c1g_getattr(src, "id");	
	var gridid = c1g_getGridID(evtsrc);
	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"] || rows[row].parentNode.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 (rlevel == level + 1 || !hdr || e.shiftKey)
					{
						hdr = (rlevel == level + 1);
						lastlvl = false;
						var img = c1g_getImgElement(rows[row]);
						if (rlevel > -1 && img && img.src)
						{
							var imgs = c1g_getImages(img);
							img.src = e.shiftKey ? imgs[1] : imgs[0];
						}	
					
						if (rlevel >= 0 && e.shiftKey)
						{
							var id = c1g_getattr(rows[row],"id");
							c1g_updateGroupedField(gridid, rlevel+"~"+id, ajx);
						}
							
						c1g_toggleRowVisisbility(rows[row], display);
					}

					// datarow
					if (lastlvl && rlevel < 0 && !hdr)
						c1g_toggleRowVisisbility(rows[row], display);
				}
				else
				{
					if (level < rlevel)
					{
						var collapsed = true;
						if (row + 1 < len)
						{
							var t = c1g_getNodeLevel(rows[row+1]);
							
							if (rows[row+1].style.display == "")
								collapsed = false;
							
							if ((t >=0 && t <= rlevel) || (rows[row+1].parentNode.tagName=="TFOOT"))
								collapsed = true;
						}
						
						if (!collapsed)
						{
							var id = c1g_getattr(rows[row],"id");
							c1g_updateGroupedField(gridid, rlevel+"~"+id, ajx);
						}
						
						var img = c1g_getImgElement(rows[row]);
						if (img && img.src)
						{
							var imgs = c1g_getImages(img); 
							img.src = 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;

	c1g_refreshGrid(gridid);
	c1g_updateGroupedField(gridid, level+"~"+clientRowID, ajx);
}


function c1g_updateGroupedField(gridid, value, ajx)
{
	if (ajx)
	{
		var cntxt = eval(gridid+"_cntxt");
		c1g_updateGroupedFieldAjx(cntxt, value);
	}
	else
		c1g_updateField(c1g_Props[gridid].IDGroupedRows, value); 
}


function c1g_updateField(id, value)
{
	var f = c1g_getByName(id);
	if (f)
	{
		if (f.value.indexOf(value) != -1)
			f.value = f.value.replace(value+":", "");
		else
			f.value += value + ":";
		
		return f.value;
	}
	
	return null;
}
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();