 /*
  * Infragistics WebGrid CSOM Script: ig_WebGrid_xml.js
  * Version 5.3.20053.50
  * Copyright(c) 2001-2005 Infragistics, Inc. All Rights Reserved.
  */

function igtbl_onReadyStateChange()
{
	var gn;
	if(arguments.length==1)
		gn=arguments[0];
	else
		gn=arguments[1];
	if(typeof(gn)!="string")
		gn=gn.target.igtbl_currentGrid;
	var g=igtbl_getGridById(gn);
	var r=g.RowToQuery;
	if(g.CallBack || g.XmlHttp.readyState==4)
	{
		g.responseText="";
		if(arguments.length>1)
			g.responseText=arguments[0];
		else if(g.XmlHttp)
			g.responseText=g.XmlHttp.responseText;		
		if (g.XmlResponseObject)
		{
			var a = g.XmlResponseObject;
			g.XmlResponseObject = null;
			igtbl_dispose(a);
		}					
		var xmlRespObj = new Object();
		g.XmlResponseObject=xmlRespObj;
		xmlRespObj.ResponseStatus=g.eError.Ok;
		xmlRespObj.ReqType=g.ReqType;
		xmlRespObj.Tag=null;
		xmlRespObj.XmlResp=null;
		xmlRespObj.Cancel=false;
		if(g.responseText=="")
			xmlRespObj.ResponseStatus=g.eError.LoadFailed;
		else if(ig_csom.IsIE)
		{
			var start=g.responseText.indexOf("<xml");
			var end=g.responseText.indexOf("</xml>")+6;
			g.XmlResp.loadXML(g.responseText.substr(start,end-start));
			var node=g.XmlResp.selectSingleNode("xml/UltraWebGrid/XmlHTTPResponse");
			if(node)
			{
				xmlRespObj.StatusMessage = unescape(node.selectSingleNode("StatusMessage").text);
				xmlRespObj.Tag = unescape(node.selectSingleNode("Tag").text);
				xmlRespObj.XmlResp=g.XmlResp;
				if(node.getAttribute("ResponseStatus")!=0)
					xmlRespObj.ResponseStatus=g.eError.LoadFailed;
				xmlRespObj.Cancel=(node.selectSingleNode("Cancel").text=="true");	
			}
			else
			{
				xmlRespObj.StatusMessage=g.responseText;
				xmlRespObj.ResponseStatus=g.eError.LoadFailed;
			}
		}
		if(g.fireEvent(g.Events.XmlHTTPResponse,[g.Id,r?r.Element.id:"",g.XmlResponseObject]) || xmlRespObj.ResponseStatus==g.eError.LoadFailed)
		{
			if(g.Events.XmlHTTPResponse[1]==1)
				g.NeedPostBack=false;
			g.ReadyState=g.eReadyState.Ready;
			g.Error=g.eError.LoadFailed;
			if(g.ReqType==g.eReqType.UpdateRow)
				g.RowToQuery._generateUpdateRowSemaphore(true);
			return;
		}
		if(g.Events.XmlHTTPResponse[1]==1)
			g.NeedPostBack=false;
		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;
			case g.eReqType.UpdateRow:
				igtbl_requestUpdateRowComplete(gn);
				break;
			case g.eReqType.Page:
				igtbl_requestPageComplete(gn);
				break;
			default:
				igtbl_requestComplete(gn);
				break;
		}
		g.ReadyState=g.eReadyState.Ready;
		g.fireEvent(g.Events.AfterXmlHttpResponseProcessed,[g.Id]);
		g.ReqType=g.eReqType.None;
		g.Error=g.eError.Ok;
		g.RowToQuery=null;
	}
}

function igtbl_requestChildRowsComplete(gn)
{
	var g=igtbl_getGridById(gn);
	var r=g.RowToQuery;
	if(!ig_csom.IsIE)
	{
		g._innerObj.innerHTML=g.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");
		if(!rowsNode)
			rowsNode=g.XmlResp;
		rowsNode=rowsNode.selectSingleNode("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();
	}
}

function igtbl_onScrollXml(evnt,gn)
{
	var g=igtbl_getGridById(gn);
	g.event=evnt;
	var de=g.getDivElement();
	if(g.noMoreRows)
		return;
	if(de && de.scrollHeight==de.scrollTop+de.clientHeight && g.RowsRange>0)
	{
		if(g.RowsServerLength>g.Rows.length)
		{
			g.invokeXmlHttpRequest(g.eReqType.MoreRows);
			return igtbl_cancelEvent(evnt);
		}
	}
}

function igtbl_requestMoreRowsComplete(gn)
{
	var g=igtbl_getGridById(gn);
	if(ig_csom.IsIE)
	{
		var node=g.XmlResp.selectSingleNode("form");
		if(!node)
			node=g.XmlResp;
		node=node.selectSingleNode("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");
			g.alignDivs(0,true);
		}
	}
	else
	{
		g._innerObj.innerHTML=g.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;
			g.alignDivs(0,true);
		}
	}
	g.Rows.setLastRowId(g.Rows.getRow(g.Rows.length-1).Id);
	g.cancelNoOnScrollTimeout=window.setTimeout("igtbl_cancelNoOnScroll('"+g.Id+"')",100);
}

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)
	{
		var row=igtbl_getRowById(rowId);
		if(row)
			ar[i++]=row.getLevel();
		else
			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_requestPageComplete(gn)
{
	var g=igtbl_getGridById(gn);
	if(ig_csom.IsIE)
	{
		igtbl_requestSortComplete(gn);
		var node=g.XmlResp.selectSingleNode("form");
		if(!node)
			node=g.XmlResp;
		node=node.selectSingleNode("xml/UltraWebGrid/Pager");
		if (node)
		{
			
			var pager = igtbl_getDocumentElement(g.UniqueID+"_pager");
			if(pager)
			{
				if(!pager.length)
				{
					var oldElem = pager;
					pager = new Array(1);
					pager[0] = oldElem;
				}
				for (var i=0;i<pager.length;i++)
					pager[i].innerHTML = unescape(node.getAttribute("Labels"));
				g.CurrentPageIndex=node.getAttribute("CurrentPageIndex");
			}
		}
	}
	else if(ig_csom.IsNetscape6)
	{
		g._innerObj.innerHTML=g.responseText.substring(0);
		var rows=g._innerObj.getElementsByTagName("tbody")[1].childNodes;
		var rowsLength=rows.length;
		while(g.Rows.Element.childNodes.length>0)
			g.Rows.Element.removeChild(g.Rows.Element.childNodes[0]);
		while(rows.length>0)
			g.Rows.Element.appendChild(rows[0]);

		var arIndex=-1,acColumn=null,acrIndex=-1,aRows=null;
		g.setActiveRow(null);
		g.setActiveCell(null);
		g.Rows.dispose();
		g.Rows.length=rowsLength;
		g.RowsRetrieved=g.Rows.length;
		if(g._scrElem)
		{
			igtbl_scrollTop(g._scrElem,0);
			g.alignDivs();
		}
		else
			igtbl_scrollTop(g.DivElement,0);
		var pager = igtbl_getDocumentElement(g.UniqueID+"_pager");
		if(pager)
		{
			if(!pager.length)
				pager=[pager];
			var pagerNew=[];
			var tblMain=g._innerObj.firstChild.childNodes[0];
			while(tblMain && tblMain.id!=g.UniqueID+"_main")
				tblMain=tblMain.nextSibling;
			if(tblMain)
			{
				for(var i=0;i<tblMain.rows.length;i++)
					if(tblMain.rows[i].firstChild.id==g.UniqueID+"_pager")
						pagerNew[pagerNew.length]=tblMain.rows[i].firstChild;
				if(pagerNew.length==pager.length)
					for(var i=0;i<pager.length;i++)
						pager[i].innerHTML = pagerNew[i].innerHTML;
			}
			g.CurrentPageIndex=g._pageToGo;
		}
	}
}
function igtbl_requestSortComplete(gn)
{
	var g=igtbl_getGridById(gn);	
	if(ig_csom.IsIE)
	{
		var node=g.XmlResp.selectSingleNode("form");
		if(!node)
			node=g.XmlResp;
		node=node.selectSingleNode("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)
		{
			if(acrIndex==-1)
			{
				if(rows.AddNewRow)
					rows.AddNewRow.getCellByColumn(acColumn).activate();
			}
			else if(acrIndex<rows.length)
				rows.getRow(acrIndex).getCellByColumn(acColumn).activate();
		}
		g.RowsRetrieved=rows.length;
		if(rows.Band.Index==0)
		{
			if(g._scrElem)
			{
				igtbl_scrollTop(g._scrElem,0);
				g.alignDivs();
			}
			else
				igtbl_scrollTop(g.DivElement,0);
		}
	}
}

function igtbl_requestUpdateRowComplete(gn)
{
	var g=igtbl_getGridById(gn);
	var r=g.RowToQuery;
	if(ig_csom.IsIE)
	{
		var node=g.XmlResp.selectSingleNode("form");
		if(!node)node=g.XmlResp;
		node=node.selectSingleNode("xml/UltraWebGrid/XmlHTTPResponse");
		if (node)
		{
			var cellsNode=node.selectSingleNode("Row/Cells");
			if(cellsNode)
				for(var i=0;i<cellsNode.childNodes.length;i++)
				{
					var cell=r.getCellFromKey(unescape(cellsNode.childNodes[i].getAttribute("lit:key")));
					if(cell)
					{
						var value=unescape(cellsNode.childNodes[i].selectSingleNode("Value").text);
						var oldValue=unescape(cell.Node.selectSingleNode("Value").text);
						if(typeof(cell._oldValue)!="undefined")
						{
							delete cell._oldValue;
							g._removeChange("ChangedCells",cell);
						}
						if(value!=oldValue)
						{
							cell.setValue(value,false);
							g._removeChange("ChangedCells",cell);
						}
					}
				}
		}
	}
	g.fireEvent(g.Events.AfterRowUpdate,[g.Id,r.Element.id]);
	if(g.Events.AfterRowUpdate[1]==1)
		g.NeedPostBack=false;
}

function igtbl_requestComplete(gn)
{
	var g=igtbl_getGridById(gn);
	g.ReqType=g.eReqType.None;
	if(g.CallBack || g.XmlHttp.readyState==4)
		g.ReadyState=g.eReadyState.Ready;
}
