/* 
Infragistics UltraWebGrid Script 
Version 4.3.20043.27
Copyright (c) 2001-2004 Infragistics, Inc. All Rights Reserved.
*/

var igtbl_reqType=new Object();
igtbl_reqType.None=0;
igtbl_reqType.ChildRows=1;
igtbl_reqType.MoreRows=2;
igtbl_reqType.Sort=3;
igtbl_reqType.UpdateCell=4;
igtbl_reqType.AddNewRow=5;
igtbl_reqType.DeleteRow=6;

var igtbl_readyState=new Object();
igtbl_readyState.Ready=0;
igtbl_readyState.Loading=1;

var igtbl_error=new Object();
igtbl_error.Ok=0;
igtbl_error.LoadFailed=1;

function igtbl_onReadyStateChange(gn)
{
	if(typeof(gn)!="string")
		gn=gn.target.igtbl_currentGrid;
	var g=igtbl_getGridById(gn);
	if(g.XmlHttp.readyState==4)
	{
		if(ig_csom.IsIE)
			g.XmlResp.loadXML(g.XmlHttp.responseText);
		if(g.XmlHttp.responseText=="")
		{
			g.ReadyState=g.eReadyState.Ready;
			g.Error=g.eError.LoadFailed;
			return;
		}
		switch(g.ReqType)
		{
			case g.eReqType.ChildRows:
				igtbl_requestChildRowsComplete(gn);
				break;
			case g.eReqType.MoreRows:
				igtbl_requestMoreRowsComplete(gn);
				break;
			case g.eReqType.Sort:
				igtbl_requestSortComplete(gn);
				break;
			default:
				igtbl_requestComplete(gn);
				break;
		}
		g.ReqType=g.eReqType.None;
		g.ReadyState=g.eReadyState.Ready;
		g.Error=g.eError.Ok;
	}
}

function igtbl_requestChildRowsComplete(gn)
{
	var g=igtbl_getGridById(gn);
	var r=g.RowToQuery;
	if(!ig_csom.IsIE)
	{
		g.innerObj.innerHTML=g.XmlHttp.responseText.substring(0);
		var rows=g.innerObj.getElementsByTagName("tr");
		var i=0,row=rows[i];
		while(row && row.id!=r.Element.id)
			row=rows[++i];
		if(row && row.nextSibling)
		{
			if(r.Element.nextSibling)
				r.Element.parentNode.insertBefore(row.nextSibling,r.Element.nextSibling);
			else
				r.Element.parentNode.appendChild(row.nextSibling);
			r.HiddenElement=r.Element.nextSibling;
			r.ChildRowsCount=igtbl_rowsCount(igtbl_getChildRows(gn,r.Element));
			r.VisChildRowsCount=igtbl_visRowsCount(igtbl_getChildRows(gn,r.Element));
			r.Rows=new igtbl_Rows(null,r.Band.Grid.Bands[r.Band.Index+1],r);
			r.FirstChildRow=r.Rows.getRow(0);
		}
	}
	else
	{
		var rowsNode=g.XmlResp.selectSingleNode("form/xml/UltraWebGrid/Body/Rows/Row/Rows");
		for(var i=0;i<r.Band.Index && rowsNode;i++)
			rowsNode=rowsNode.selectSingleNode("Row/Rows");
		if(rowsNode==null)
			return;
		r.Node.appendChild(rowsNode);
		if(!r.Rows)
			r.Rows=new igtbl_Rows(r.Node.selectSingleNode("Rows"),r.Band.Grid.Bands[r.Band.Index+1],r);
		r.prerenderChildRows();
		r.Rows.render();
	}
	g.RowToQuery=null;
}

function igtbl_onScrollXml(evnt,gn)
{
	var g=igtbl_getGridById(gn);
	var de=g.DivElement;
	if(g.scrElem)
		de=g.scrElem;
	if(de.getAttribute("noOnScroll"))
	{
		if(de.getAttribute("oldST"))
			de.scrollTop=parseInt(de.getAttribute("oldST"));
		return igtbl_cancelEvent(evnt);
	}
	if(g.noMoreRows)
		return;
	if(de && de.scrollHeight==de.scrollTop+de.clientHeight && g.RowsRange>0)
	{
		de.setAttribute("oldST",de.scrollTop.toString());
		if(g.RowsServerLength>g.Rows.length)
		{
			g.QueryString="NeedMoreRows\x01"+g.RowsRetrieved;
			var sortOrder="";
			for(var i=0;i<g.Bands[0].SortedColumns.length;i++)
			{
				var col=igtbl_getColumnById(g.Bands[0].SortedColumns[i]);
				sortOrder+=col.Key+(col.SortIndicator==2?" DESC":"")+(i<g.Bands[0].SortedColumns.length-1?",":"");
			}
			if(sortOrder)
				g.QueryString+="\x02"+sortOrder;
			g.xmlHttpRequest(g.eReqType.MoreRows);
			de.setAttribute("noOnScroll","true");
			window.setTimeout("igtbl_cancelNoOnScroll('"+gn+"')",100);
			return igtbl_cancelEvent(evnt);
		}
	}
}

function igtbl_cancelNoOnScroll(gn)
{
	var g=igtbl_getGridById(gn);
	var de=g.DivElement;
	if(g.scrElem)
		de=g.scrElem;
	de.removeAttribute("noOnScroll");
	de.removeAttribute("oldST");
}

function igtbl_requestMoreRowsComplete(gn)
{
	var g=igtbl_getGridById(gn);
	if(ig_csom.IsIE)
	{
		var node=g.XmlResp.selectSingleNode("form/xml/UltraWebGrid/Body/Rows");
		var strTransform=g.Rows.applyXslToNode(node,g.Rows.SelectedNodes.length);
		if(strTransform)
		{
			g.innerObj.innerHTML=strTransform;
			var nodes=node.selectNodes("Row");
			g.Rows.length+=nodes.length;
			g.RowsRetrieved+=nodes.length;
			for(var i=0;i<nodes.length;i++)
			{
				g.Rows.Node.appendChild(nodes[i]);
				g.Rows.Element.appendChild(g.innerObj.firstChild.rows[0]);
			}
			g.Rows.SelectedNodes=g.Rows.Node.selectNodes("Row");
		}
	}
	else
	{
		g.innerObj.innerHTML=g.XmlHttp.responseText.substring(0);
		var rows=g.innerObj.getElementsByTagName("tr");
		var i=0,row=rows[i];
		while(row && !row.id)
			row=rows[++i];
		var length=-1,pr=g.Rows.getRow(0).Element.parentNode;
		while(row)
		{
			length++;
			var ns=row.nextSibling;
			pr.appendChild(row);
			row=ns;
		}
		if(length>=0)
		{
			g.Rows.length+=length;
			g.RowsRetrieved+=length;
		}
	}
}

function igtbl_isArLess(a1,a2)
{
	if(a1.length<a2.length)
		return true;
	if(a1.length>a2.length)
		return false;
	for(var i=0;i<a1.length;i++)
	{
		if(a1[i]<a2[i])
			return true;
		if(a1[i]>a2[i])
			return false;
	}
	return false;
}

function igtbl_sortRowIdsByClctn(rc)
{
	var ar=new Array(),i=0;
	for(var rowId in rc)
		ar[i++]=rowId.split('_').slice(1);
	for(var i=0;i<ar.length;i++)
		for(var j=0;j<ar[i].length;j++)
			ar[i][j]=parseInt(ar[i][j],10);
	var sorted=false;
	while(!sorted)
	{
		sorted=true;
		for(var i=0;i<ar.length-1;i++)
			if(igtbl_isArLess(ar[i],ar[i+1]))
			{
				var a=ar[i];
				ar[i]=ar[i+1];
				ar[i+1]=a;
				sorted=false;
			}
	}
	return ar;
}

function igtbl_requestSortComplete(gn)
{
	var g=igtbl_getGridById(gn);
	if(ig_csom.IsIE)
	{
		var node=g.XmlResp.selectSingleNode("form/xml/UltraWebGrid/Body/Rows");
		var rows=g.Rows;
		if(g.RowToQuery)
		{
			rows=g.RowToQuery.Rows;
			for(var i=0;i<rows.Band.Index;i++)
				node=node.selectSingleNode("Row/Rows")
		}
		rows.Node.parentNode.replaceChild(node,rows.Node);
		rows.Node=node;
		rows.SelectedNodes=node.selectNodes("Row");
		var arIndex=-1,acColumn=null,acrIndex=-1,aRows=null;
		if(g.oActiveRow && g.oActiveRow.OwnerCollection==rows)
			arIndex=g.oActiveRow.getIndex();
		if(g.oActiveRow && g.oActiveRow.Band.Index>=rows.Band.Index)
			g.setActiveRow(null);
		if(g.oActiveCell && g.oActiveCell.Row.OwnerCollection==rows)
		{
			acColumn=g.oActiveCell.Column;
			acrIndex=g.oActiveCell.Row.getIndex();
		}
		if(g.oActiveCell && g.oActiveCell.Band.Index>=rows.Band.Index)
			g.setActiveCell(null);
		rows.dispose();
		rows.length=rows.SelectedNodes.length;
		rows.render();
		if(arIndex!=-1)
			rows.getRow(arIndex).activate();
		if(acColumn)
			rows.getRow(acrIndex).getCellByColumn(acColumn).activate();
		g.RowsRetrieved=rows.length;
		if(rows.Band.Index==0)
		{
			if(g.scrElem)
			{
				g.scrElem.scrollTop=0;
				g.alignDivs();
			}
			else
				g.DivElement.scrollTop=0;
		}
	}
}

function igtbl_requestComplete(gn)
{
	var g=igtbl_getGridById(gn);
	g.QueryString="";
	g.ReqType=g.eReqType.None;
	if(g.XmlHttp.readyState==4)
		g.ReadyState=g.eReadyState.Ready;
}
