/* ==================================================================
    List Functions for Showing Div based List
  ==================================================================== */
//--	 Function to render any xml and xsl in a specified div using xml url
function renderData(xmlDiv,xmlDOM,xslDOM,xmlURL,xslURL,xmlType,xslType)
{
	//Load XML	
	
	if (xmlType=='string')
	{
		xmlDOM.loadXML( xmlURL );
	}
	else
	{

		xmlDOM.load( xmlURL );

	}
	
	//Load xsl
	if (xslType=='string')
	{
		xslDOM.loadXML( xslURL);
	}
	else
	{
		xslDOM.load( xslURL);
	}
	
	//-- Transform
	xmlDiv.innerHTML =xmlDOM.transformNode(xslDOM);
	
	//-- Highlight First Row
	if (xmlDiv.childNodes(0).childNodes(0).childNodes.length > 1 )
	{		
		highLightRowByRowNo(xmlDiv,1)
	}
}

//-- Sort on Partifular field
function sortData(field,xmlDOM,xslDOM,targetDiv)
{		
    sortField = xslDOM.selectSingleNode("//@order-by");
	var highlight = getCurrentTableRow(targetDiv);		// created on --- 5/01/03  SD
	
	if(highlight==undefined)
		return false;
	
	var row = highlight.innerText;
		
	var a = sortField.value;				// created on --- 5/01/03  SD
	var b = a.split(";");
	var c = b[0];
		
    if(c == "+@"+field)
    {
		sortField.value = "-@" + field;
    }
    else
    {
        sortField.value = "+@" + field + ";" + c;
    }
    targetDiv.innerHTML = xmlDOM.transformNode(xslDOM);

	if (targetDiv.childNodes(0).childNodes(0).childNodes.length > 1 )
	{
		HighLightCurrentRowData(targetDiv,row);
	}
}

//-- Sort on Partifular multiple fields
function sortDataMultiple(sortCriteria,xmlDOM,xslDOM,targetDiv)
{   

    var highlight = getCurrentTableRow(targetDiv);
    var row = highlight.innerText;
    
    sortField = xslDOM.selectSingleNode("//@order-by");
    sortField.value = sortCriteria;
    targetDiv.innerHTML = xmlDOM.transformNode(xslDOM);  
    
    if (targetDiv.childNodes(0).childNodes(0).childNodes.length > 1 )
    {
		HighLightCurrentRowData(targetDiv,row);
    }
}


//-- Function to hightlight the clicked/current table row from a div
function markTableRow(targetDiv)
{	
   	var curRow
	var totRow	
	
	//Reset highlight for all rows
	totRow = targetDiv.childNodes(0).childNodes(0).childNodes.length 
   AlternatBanding(targetDiv);
    
    // Get Current row TR in Table
	curRow = window.event.srcElement;		
	while(curRow.tagName!="TR") curRow = curRow.parentElement;	
    	// HighLight Current TR in table	
	curRow.style.background="#e5eee5";	
	
}



//==================================================================
//These functions are used for list and detail pages
//==================================================================

//-- Function to hightlight the specified table row from a div

function highLightRowByRowNo(targetDiv,i)
{AlternatBanding(targetDiv);
	var totRow
	totRow = targetDiv.childNodes(0).childNodes(0).childNodes.length 
   
	if (totRow <= 1) { return; }  // Modified ///////////////////////////////
    
    if (totRow <= i) { return ;}  // Required because of cookies set on browser
  
    
	
	targetDiv.childNodes(0).childNodes(0).childNodes(i).style.background="#e5eee5";	     
}

//-- Function to find row no. of a currently highlighted row
function getCurrentHighLightRowNo(targetDiv)
{	
	var totRow
	totRow = targetDiv.childNodes(0).childNodes(0).childNodes.length 
	for(var i=0 ; i<totRow; i++ ) {
	if ( targetDiv.childNodes(0).childNodes(0).childNodes(i).style.background=="#e5eee5") {                       
		return i 
		}
	}	
	return 0
}

//-- Function to return currently highlighted row
function getCurrentTableRow(targetDiv)
{
	var totRow
	totRow = targetDiv.childNodes(0).childNodes(0).childNodes.length 
	for(var i=0 ; i<totRow; i++ )
	{
		if ( targetDiv.childNodes(0).childNodes(0).childNodes(i).style.background=="#e5eee5")
		{
			return targetDiv.childNodes(0).childNodes(0).childNodes(i)
		}
	}	
	return null;
}
function AlternatBanding(targetDiv) //created by vinod by alternate banding of data
{
var totRow = targetDiv.childNodes(0).childNodes(0).childNodes.length;
var counter=0;	
	for(var j = 0; j < totRow; j++)
	{
	    if(counter==0)
	    {
	    targetDiv.childNodes(0).childNodes(0).childNodes(j).style.background = "#e9e9e9";		
	    counter=1;
	    }
	    else
	    {
	    targetDiv.childNodes(0).childNodes(0).childNodes(j).style.background = "#f0f0f0"		
	    counter=0;
	    }
		
	}
}
function HighLightCurrentRowData(targetDiv,i)				// created on --- 5/01/03  SD
{		
	var totRow = targetDiv.childNodes(0).childNodes(0).childNodes.length;
    AlternatBanding(targetDiv);
	var count = 0;
	var counter=0;	
	for(var j = 0; j < totRow; j++)
	{
	    
		if ( targetDiv.childNodes(0).childNodes(0).childNodes(j).innerText == i && count == 0)
		{
			count = count + 1;
			targetDiv.childNodes(0).childNodes(0).childNodes(j).style.background="#e5eee5";
		}
	}
}

function showLink(obj,flag)
{	
	if (flag==1) {
		obj.style.color="#D81010";
	}
	else {
		obj.style.color="#000CAC";
	}
}

function changeClass(obj, new_style) {
    obj.className = new_style;
}

function ExportClick(){
        var userid    = document.all("userid").value 
        var sessionid = document.all("sessionid").value 
	//url = "../Reports/MB-Export.asp?purpose=list&userid=" + userid
	url = "../Reports/MB-Export.asp?purpose=list&userid=" + userid +"&" +"sessionid="+sessionid  ;
	openWin(url,'ExportWindow','toolbar=no,scrollbars=no,resizable=yes,height=395,width=590');
}
function SortClick()
{
	var userid    = document.all("userid").value 
    var sessionid = document.all("sessionid").value 
	url = "../reports/SortCriteria.asp?purpose=list&userid=" + userid;
	openWin(url,'SortWindow','toolbar=no,scrollbars=no,resizable=no,height=180,width=590');
}


//----------------------------------------------------
function sortOnMultipleColumns(field) {
//----------------------------------------------------
	
	//Locate Sort Nodes 
	sortList = xsl.selectNodes("//xsl:sort");

	var curNode;
	curNode = sortList.item(0);
	var pNode
	pNode = curNode.parentNode
	
	//Remove Old Sort Nodes
	for(var j=0 ; j < sortList.length; j++ ){
		pNode.removeChild( sortList.item(j)) ;	     	
	}


	//Insert new sort Nodes
	fl=field.split(";")
	var newElem
	for(var j=1 ; j < fl.length; j++ ){
	
		val=fl[j]
		i=val.indexOf("|",0)			
		if (i>0) {		
			/*	
			field = left(val,dt - 1)
			if ( field.indexOf("-") >=0 ) {
				order="descending"
			}
			else {
				order="ascending"
			}
			field = right(field, field.length - 2)
			field = "concat(substring(@"+field+", 7,4), substring("+field+", 1,2), substring(@"+field+", 4,2))" 					
			dt=text
			*/
		}
		else {
			xx=val.indexOf("-")
			if ( xx != -1 ) {
				order="descending"
			}
			else {
				order="ascending"
			}
			//alert(val)			
			fld = val.substring(2, val.length)
			//alert(fld)
			
			var filter="//s:AttributeType [ @name = '"+fld+"' ]"
			xNode = xml.selectSingleNode(filter);
			dt = trim(xNode.childNodes(0).getAttribute("dt:type"))			
			//alert(dt)	
			switch (dt) {
				case "int" :
					dt="number";
					break;
				case "string":
					dt="text"
					break;
				default:
					dt="text"
			}
			fld="@"+fld
				
			
		}	

			
		newElem = xml.createElement("xsl:sort");
		newElem.setAttribute("select", fld);	
		newElem.setAttribute("data-type", dt);
		newElem.setAttribute("order", order);	

		//Append
		pNode = xsl.selectSingleNode("//xsl:for-each")	
   		pNode.insertBefore(newElem,pNode.childNodes(0));	
	
	}
			

	//Transform
	var xslN = new ActiveXObject("Microsoft.XMLDOM");
	xslN.async = false;
	xslN.loadXML ( xsl.xml)

	//Re-Assign inoto dom
        xsl.loadXML(xslN.xml)
	xml.transformNodeToObject(xsl,xslT)

	window.parent.frames[0].document.forms[0].Goto.value = xsl.xml

	//Rest of the Operation
	RetriveDataFromXslt();
	//code to show and hide the divs appropriately and write the innerText for the number of pages
	document.forms[0].currentpage.value="div1";
	var doc_divs =document.all.tags("div");
	doc_divs=filterdivs(doc_divs);
	if(doc_divs.length !=0){
		doc_divs[0].style.visibility="visible";
		var doc_tds=window.parent.frames[0].document.all.tags("td");
		doc_tds[5].innerText="Page 1 of "+doc_divs.length;
	}
}

//----------------------------------------------------
function sortListOnMultipleColumns(field) {
//----------------------------------------------------
	//Locate Sort Nodes 
	sortList = xsl.selectNodes("//xsl:sort");	
	var curNode;
	curNode = sortList.item(0);
	var pNode
	pNode = curNode.parentNode
	
	//Remove Old Sort Nodes
	for(var j=0 ; j < sortList.length; j++ ){
		pNode.removeChild( sortList.item(j)) ;	     	
	}


	//Insert new sort Nodes
	fl=field.split(";")
	var newElem
	for(var j=1 ; j < fl.length; j++ ){
	
		val=fl[j]
		i=val.indexOf("|",0)			
		if (i>0) {		
			/*	
			field = left(val,dt - 1)
			if ( field.indexOf("-") >=0 ) {
				order="descending"
			}
			else {
				order="ascending"
			}
			field = right(field, field.length - 2)
			field = "concat(substring(@"+field+", 7,4), substring("+field+", 1,2), substring(@"+field+", 4,2))" 					
			dt=text
			*/
		}
		else {
			xx=val.indexOf("-")
			if ( xx != -1 ) {
				order="descending"
			}
			else {
				order="ascending"
			}
			//alert(val)			
			fld = val.substring(2, val.length)
			//alert(fld)
			
			var filter="//s:AttributeType [ @name = '"+fld+"' ]"
			xNode = xml.selectSingleNode(filter);
			dt = trim(xNode.childNodes(0).getAttribute("dt:type"))			
			//alert(dt)	
			switch (dt) {
				case "int" :
					dt="number";
					break;
				case "string":
					dt="text"
					break;
				default:
					dt="text"
			}
			fld="@"+fld
				
			
		}	

			
		newElem = xml.createElement("xsl:sort");
		newElem.setAttribute("select", fld);	
		newElem.setAttribute("data-type", dt);
		newElem.setAttribute("order", order);	

		//Append
		pNode = xsl.selectSingleNode("//xsl:for-each")	
   		pNode.insertBefore(newElem,pNode.childNodes(0));	
	
	}
			

	//Transform
	var xslN = new ActiveXObject("Microsoft.XMLDOM");
	xslN.async = false;
	xslN.loadXML ( xsl.xml)

	//Re-Assign inoto dom
        xsl.loadXML(xslN.xml)

	dataTable.innerHTML = xml.transformNode(xsl);  


}

//-----------------------------------------------------------------
function sortOnSingleColumn(field,xmlDOM,xslDOM, dtFlag) {
//----------------------------------------------------------------

	//Locate Sort Nodes 
	sortList = xslDOM.selectNodes("//xsl:sort");
	
	var curNode;
	curNode = sortList.item(0);
	var pNode
	pNode = curNode.parentNode
	
	//For a single sort criteria alternate the order
	order = trim(curNode.getAttribute("order"))
	curSelect = trim(curNode.getAttribute("select"))

	if (curSelect.indexOf("substring",0) > 0) {
		fld="concat(substring(@"+field+", 7,4), substring(@"+field+", 1,2), substring(@"+field+", 4,2))"
	}
	else {	
		fld = "@"+trim(field)
	}
	//alert(curSelect+"|"+fld)

	if (curSelect == fld) {
		if (order == "ascending") {
			order = "descending"
		}
		else {
			order = "ascending"
		}		
	}
	else {
		order = "ascending"
	}
	
	//Remove Old Sort Nodes
	for(var j=0 ; j < sortList.length; j++ ){
		pNode.removeChild( sortList.item(j)) ;	     	
	}

	sortList = xslDOM.selectNodes("//xsl:sort");	

	//Insert New Sort Nodes

	var filter="";
	filter = "//s:AttributeType [ @name = '" + field + "' ]"
	
	xNode = xmlDOM.selectSingleNode(filter);

	dt = trim(xNode.childNodes(0).getAttribute("dt:type"))
	switch (dt) {
		case "int" :
			dt="number";
			break;
		case "string":
			dt="text"
			break;
		default:
			dt="text"
	}	

	if (dtFlag==1) {
		field = "concat(substring(@"+field+", 7,4), substring(@"+field+", 1,2), substring(@"+field+", 4,2))" 	
	}
	else {
		field = "@"+field
	}


	var newElem = xmlDOM.createElement("xsl:sort");
	newElem.setAttribute("select",field);	
	newElem.setAttribute("data-type", dt);
	newElem.setAttribute("order", order);
	//alert(newElem.xml)

	//Append & Transform on Div 
	pNode = xslDOM.selectSingleNode("//xsl:for-each")	
   	pNode.insertBefore(newElem,pNode.childNodes(0));

	//Transform
	var xslN = new ActiveXObject("Microsoft.XMLDOM");
	xslN.async = false;
	xslN.loadXML ( xslDOM.xml)
	
	//Re-Assign inoto dom
        xslDOM.loadXML(xslN.xml)

	xmlDOM.transformNodeToObject(xslDOM,xslT)
//	dtFlag.innerHTML = xmlDOM.transformNode(xslDOM)

	RetriveDataFromXslt();

	//code to show and hide the divs appropriately and write the innerText for the number of pages

	document.forms[0].currentpage.value="div1";
	var doc_divs =document.all.tags("div");
	doc_divs=filterdivs(doc_divs);
	if(doc_divs.length !=0){
		doc_divs[0].style.visibility="visible";
		var doc_tds=window.parent.frames[0].document.all.tags("td");
		doc_tds[5].innerText="Page 1 of "+doc_divs.length;
	}

}




//****************** Sort On Single Column ***********************************
//-----------------------------------------------------------------
function sortListOnSingleColumn(field,xmlDOM,xslDOM, dataTable ,dtFlag) {
//----------------------------------------------------------------

	//Locate Sort Nodes 
	sortList = xslDOM.selectNodes("//xsl:sort");
	if (sortList.length == 0 )
	{
		return false;
	}	
	var highlight = getCurrentTableRow(dataTable);
	//-- Added By Sachin on 12-11-2003 for Handling the Error When Clicked on the Title and If no Records are Present
	
	if(highlight==undefined)
	{
		return false;
	}
	
	var row = highlight.innerText;
	
	var curNode;
	curNode = sortList.item(0);
	var pNode
	pNode = curNode.parentNode
	
	//For a single sort criteria alternate the order
	order = trim(curNode.getAttribute("order"))
	curSelect = trim(curNode.getAttribute("select"))
  
	var orderprevNode = order
	var prevNode = curSelect
	if(prevNode.substring(0,6)=="concat")
	{
		var pni = prevNode.substring(18);
		var len1 = pni.indexOf(",")	//11
		prevNode = pni.substring(0,eval(len1))
		prevNode = "@"+prevNode
	}

	if (curSelect.indexOf("substring",0) > 0) {
		fld="concat(substring(@"+field+", 7,4), substring(@"+field+", 1,2), substring(@"+field+", 4,2))"
	}
	else {	
		fld = "@"+trim(field)
	}
	if (curSelect == fld) {
		if (order == "ascending") {
			order = "descending"
		}
		else {
			order = "ascending"
		}		
	}
	else {
		order = "ascending"
	}
	
//	alert(curSelect)	// returns prev sort node @candidate	

	//Remove Old Sort Nodes
	for(var j=0 ; j < sortList.length; j++ ){
		pNode.removeChild( sortList.item(j)) ;	     	
	}

	sortList = xslDOM.selectNodes("//xsl:sort");	
	
   
	//Insert New Sort Nodes
	//alert(field)

	var filter="";
	filter = "//s:AttributeType [ @name = '" + field + "' ]"
//	1453

	var filterprevNode = "";

	if(prevNode.substring(0,1)=="@")
	{
		filterprevNode = "//s:AttributeType [ @name = '" + prevNode.substring(1) + "' ]"
	}
	else if(prevNode.substring(0,1)!="@")
	{
		filterprevNode = "//s:AttributeType [ @name = '" + prevNode + "' ]"	
	}	

	//alert(xmlDOM.xml)
	xNode = xmlDOM.selectSingleNode(filter);
	//alert(xNode.xml)
	
	dt = trim(xNode.childNodes(0).getAttribute("dt:type"))
//	alert(dt)	
	switch (dt) {
		case "int" :
			dt="number";
			break;
		case "number" :
			dt="number";
			break;			
		case "string":
			dt="text"
			break;
		default:
			dt="text"
	}	


//	1453	
	
	xNodeprevNode = xmlDOM.selectSingleNode(filterprevNode)

	dtprevNode = (xNodeprevNode.childNodes(0).getAttribute("dt:type"))
	
	
	switch(dtprevNode)
	{
		case "int":
			dtprevNode = "number"
			break;
		case "number":
			dtprevNode = "number"
			break;
		case "string":
			dtprevNode = "text"
			break;
		default:
			dtprevNode = "text"
			break;
	}
	if (dtFlag==1) {
		field = "concat(substring(@"+field+", 7,4), substring(@"+field+", 1,2), substring(@"+field+", 4,2))" 	
	}
	else {
		field = "@"+field
	}

	var newElem = xmlDOM.createElement("xsl:sort");
	newElem.setAttribute("select",field);	
	newElem.setAttribute("data-type", dt);
	newElem.setAttribute("order", order);

	var newElemprevNode = xmlDOM.createElement("xsl:sort");
	newElemprevNode.setAttribute("select",prevNode);
	newElemprevNode.setAttribute("order",orderprevNode);
	newElemprevNode.setAttribute("data-type",dtprevNode);
	
	//Append & Transform on Div 
	pNode = xslDOM.selectSingleNode("//xsl:for-each")	
	pNode.insertBefore(newElemprevNode,pNode.childNodes(0));
   	pNode.insertBefore(newElem,pNode.childNodes(0));	

	//alert(xslDOM.childNodes(0).childNodes(1).xml)
	
	//Transform
	var xslN = new ActiveXObject("Microsoft.XMLDOM");
	xslN.async = false;
	xslN.loadXML ( xslDOM.xml)

//	alert(xslN.childNodes(0).childNodes(1).xml)

	//Re-Assign inoto dom
	 xslDOM.loadXML(xslN.xml)
	//xmlDOM.transformNodeToObject(xslDOM,xslT)

//	alert(xslDOM.xml)
	dataTable.innerHTML = xmlDOM.transformNode(xslDOM);

	if (dataTable.childNodes(0).childNodes(0).childNodes.length > 1 )
	{
		HighLightCurrentRowData(dataTable,row);
	}
	
}
function setListHeight(){
	bodyTopmargin = 1
	//dataTable.style.height =  mainDiv.offsetHeight - bodyTopmargin  - headerDiv.offsetHeight - footerDiv.offsetHeight

}	

//--------------------------------------------------------------------
// Function to hightlight the specified table row from a div
// Parameters: 
//		1) targetDiv - Div to be updated generally( 'dataTable' )
//		2) keyID	 - value of the key
//		3) keyName	 - key name we are looking for
//--------------------------------------------------------------------
function highLightRowByKeyNameAndId(targetDiv,keyID,keyName)
{
	var totRow
	var i = 0
	totRow = targetDiv.childNodes(0).childNodes(0).childNodes.length 
	if (totRow <= 1) { return }
	for(var j=1 ; j < totRow; j++ ){
		currKeyID = targetDiv.childNodes(0).childNodes(0).childNodes(j).childNodes(0).childNodes(0).getAttribute(keyName);
		if ( currKeyID == keyID ){
			i = j 
			j = totRow
		}
	}

	if (i == 0 ){return}
AlternatBanding(targetDiv);
	//Select
	targetDiv.childNodes(0).childNodes(0).childNodes(i).style.background="#e5eee5";	     
}

//-------------------------------------------------------------------------------------------
// Function to hightlight the specified table row from a div and also set
// cookie with the current keyname,value
//
// The setKeyId function should be written in every list page that needs this functionality
// Parameters: 
//		1) targetDiv - Div to be updated generally( 'dataTable' )
//------------------------------------------------------------------------------------------
function markTableRowAndSetKey(targetDiv)
{	
	markTableRow(targetDiv);	
	setKeyID(targetDiv);	
}

function chkclicked(chkall,datatb)
{
   var chklen=(datatb.childNodes(0).childNodes(0).childNodes.length)-1;
   var cnt=0;
   for(var i=1;i<=chklen;i++)
   {
    if (datatb.childNodes(0).childNodes(0).childNodes(i).childNodes(0).childNodes(0).checked==true)
     {cnt=cnt+1;}
   }
    
      if (parseInt(cnt)==parseInt(chklen))
      {chkall.checked=true;}
      else
      {chkall.checked=false;}
    
}

