var _iLastPickedIndex = -1;
var _oPreviewed, _oXml, _oPop, _o, _iPopH, _iPopW, _oXslProc;

var KEY_SELECTALL="A".charCodeAt(0);;
var KEY_ENTER = 13;
var KEY_SPACE = 32;
var KEY_UP = 38;
var KEY_DOWN = 40;
var KEY_LEFT = 37;
var KEY_RIGHT = 39;

var GRID_SUPPORT_PREVIEW = true;
var GRID_SUPPORT_MULTISELECT = true;
var _oCurrentGridTable=null;
var _oCurrentGridTableRow;

var _iNumSelected = 0;
var _iTotalRecords
// getUrlParams(?Param1=Value1&Param2=Value2) //

var URLParams = new Object() ;
var aParams = document.location.search.substr(1).split('&') ;
for (i=0 ; i < aParams.length ; i++) {
	var aParam = aParams[i].split('=') ;
	URLParams[aParam[0]] = aParam[1] ;
}

function document.onselectstart()
{
 var s = event.srcElement.tagName;
	if (s != "INPUT" && s != "TEXTAREA" && s != "A") event.returnValue = false;
}



function initGrid(oGridTable)
{
	// Handle slow loading parent pages
	if (oGridTable!=null)
	{
		if(_oCurrentGridTable!=null){unselectAllRows();}
		_oCurrentGridTable=oGridTable;
		var iTotalRecords = 0;
		
		// Get the total number or records if there are any
		if (typeof(_oCurrentGridTable) != "undefined" && _oCurrentGridTable.rows[0]!=null && _oCurrentGridTable.rows[0].oid)
		{
			iTotalRecords = _oCurrentGridTable.rows.length;
		}
		
		
			_iNumSelected = 0;
			_iTotalRecords = iTotalRecords;
			

		

		// If there are records in the grid, select the first record
		if (iTotalRecords > 0)
		{
			if(_oCurrentGridTable.rows[0]!=null)
				handleSelectRow(_oCurrentGridTable.rows[0]);
			
			// Bring focus to allow for instant keyboard nav
			// Use setActive to get around child window loosing focus bug
			_oCurrentGridTable.setActive();
		}
		else
		{
			// HandleSelect does this internally, do it manually if not called
		
		}
	}
	
}


// Automagically sets the title of the NOBR to it's inner text to allow for auto-ellipse text viewing
function RenderToolTip()
{
	var o = event.srcElement;

	if (o && o.tagName == "NOBR" && o.title == "" && o.innerText != "")
	{
		o.title = o.innerText;
	}
}






/*
	START USER INPUT CODE
	=====================
*/
function handleDblClick(o)
{
	if(o!=null)
	{
		var sChoose = URLParams['choose'] ;
		if(sChoose=="true")
		{
			var retval="";
			if(o.ReturnID==""){
				retval=o.trid;
			}
			else {retval=o.ReturnID;}
			retval+="|"+o.ReturnName+"|"+o.ReturnParam;
			window.returnValue=retval;
			window.close();
				
		}
		else{
			var ptable=getOuterTable(o)
			var goUrl="Admin/Form/LoadForm.aspx";
			if(ptable.formurl!=""){ goUrl=ptable.formurl;}
		
			var recId=o.trid;
			var formid=ptable.formid;
			if(formid!=null&&formid!="")
			{
				goUrl+="?FormID="+formid+"&id="+recId;
				var rtn=openWebDialog(goUrl,800,600);
				if(rtn=="refresh")
				{
					document.forms[0].submit();
					
				}
			}
		}
	}
}

function handleClick(o)
{
	
	if(o.selected==false||o.selected=='false')
	{
		//alert(o.trid);
		handleSelectRow(o);
	}
	else if (event.ctrlKey && _iNumSelected > 1)
	{
		unselectRow(o);

		if (o.expanded)
		{
			collapseRow(o);
		}
	}
	else
	{
		_iLastPickedIndex = o.rowIndex;
		unselectRows(o);
	}
	_oCurrentGridTableRow=o;
//	selectLine(o);
}

function document.onkeyup()
{
	var s = event.srcElement.tagName;
	if (s == "INPUT" || s== "TEXTAREA" || s == "A") { event.returnValue = false; return false;}
	
	if(_oCurrentGridTable==null) {return false;}
	// We don't currently handle multi-select with keyboard only & make sure this is a full grid
	if (event.altKey || event.shiftKey || (event.ctrlKey && event.keyCode != KEY_SELECTALL) ||
		typeof(_oCurrentGridTable) == "undefined")
	{
		return false;
	}
		// Handle various keyboard commands
	switch (event.keyCode)
	{
		case KEY_SELECTALL:
			if (event.ctrlKey && GRID_SUPPORT_MULTISELECT && _iTotalRecords > 0)
			{
				selectAllRows();
			}
			break;

		case KEY_ENTER:
		
			if (_iTotalRecords > 0)
			{
				_oCurrentGridTable.rows[_iLastPickedIndex].fireEvent("ondblclick");
			}
			break;
			
		case KEY_DOWN:
			if (_iLastPickedIndex < _oCurrentGridTable.rows.length - 1)
			{
				unselectRows();
				
				var i = _iLastPickedIndex + 1;
				
				// Skip over the Preview TR
				if (_oCurrentGridTable.rows[i].cells[0].className == "gridPreview")
				{
					i++;
				}
				
				_oCurrentGridTable.rows[i].fireEvent("onclick");
			}
			break;
		
		case KEY_UP:
			if (_iLastPickedIndex > 0)
			{
				unselectRows();

				var i = _iLastPickedIndex - 1;

				// Skip over the Preview TR
				if (_oCurrentGridTable.rows[i].cells[0].className == "gridPreview")
				{
					i--;
				}

				_oCurrentGridTable.rows[i].fireEvent("onclick");
			}
			break;

		case KEY_SPACE:
			//expandRow(_oCurrentGridTable.rows[_iLastPickedIndex]);
			break;
		
		case KEY_RIGHT:
			_oGridStatusBar.LoadPage(true);
			break;
		
		case KEY_LEFT:
			_oGridStatusBar.LoadPage();
			break;
	}
}

/*
	END USER INPUT CODE
	===================
*/






function getOuterTable(obj)
{
	if(typeof(obj) == "undefined"){ return null;}
	var oParent=obj.parentElement;
	var findit=false;
	if(oParent==null)
	{
		return null;
	}
	else if(oParent.tagName.toLowerCase()=="table")
	{
		return oParent;
	}
	else{
		return getOuterTable(oParent);
	}
	
}

function getOuterTableRow(obj)
{
	if(typeof(obj) == "undefined"){ return null;}
	var oParent=obj.parentElement;
	var findit=false;
	if(oParent==null)
	{
		return null;
	}
	else if(oParent.tagName.toLowerCase()=="tr")
	{
		return oParent;
	}
	else{
		return getOuterTableRow(oParent);
	}
	
}

/*
	START ROW SELECTION HELPER CODE
	===============================
*/
function handleSelectRow(o)
{
	var oParent=getOuterTable(o);
	if(_oCurrentGridTable==null||_oCurrentGridTable!=oParent)
	{
		 initGrid(oParent);
	}
	if (event && event.shiftKey && GRID_SUPPORT_MULTISELECT && _iLastPickedIndex != -1)
	{
		
		unselectRows(o);
		
		if (o.rowIndex < _iLastPickedIndex)
		{
			selectRows(o.rowIndex, _iLastPickedIndex);
		}
		else
		{
			selectRows(_iLastPickedIndex, o.rowIndex);
		}		
	}
	else
	{	
		
		selectRow(o);

		if (event && !event.ctrlKey || !GRID_SUPPORT_MULTISELECT)
		{
			unselectRows(o);
		}

		_iLastPickedIndex = o.rowIndex;
	}

	//gridBar.RefreshStatus();
}

function selectRow(o)
{
	if ( o.firstChild.className != "gridPreview")
	{
		_iNumSelected++;
		o.selected=true;
		o.style.paddingTop = "0px";
		 if(o.rowstyle=="tree")
         {
			applyStyle(o, "gridSelectOnTree");
		 }
		 else
		 {
		   applyStyle(o, "gridSelectOn");
		 }
		checkSelectOne(o.trid,true);
	}
}

function unselectRow(o)
{
	if (o.selected)
	{
		_iNumSelected--;
		o.selected=false;
		 if(o.rowstyle=="tree")
         {
			applyStyle(o, "gridSelectOffTree");
		 }
		 else
		 {
		   applyStyle(o, "gridSelectOff");
		 }
		checkSelectOne(o.trid,false);
	}
}

function selectAllRows()
{
	selectRows(0, _oCurrentGridTable.rows.length - 1);
}

function unselectAllRows()
{
	unselectRows();
}

// Selects a range of rows
function selectRows(iStart, iStop)
{
	for (iStart; iStart < iStop + 1; iStart++)
	{
		selectRow(_oCurrentGridTable.rows[iStart]);
	}

	//gridBar.RefreshStatus();
}

// Unselects ALL rows skipping the one provided
function unselectRows(oSkip)
{
	for (var i=0; i < _oCurrentGridTable.rows.length; i++)
	{
		var oTr = _oCurrentGridTable.rows[i];

		if (oTr !== oSkip)
		{
			unselectRow(oTr);
			collapseRow(oTr);
		}
	}
}

function applyStyle(o, sClass)
{
	var i = 0;
	var ii = o.cells.length;
   
	   while (i < ii)
	   {
	    	o.cells[i].className = sClass;
	    	i++;
	   }
	
}

/*
	END ROW SELECTION HELPER CODE
	=============================
*/

/*

function document.oncontextmenu()
{
	_o = event.srcElement;
	event.returnValue = true;
}

*/




/*
	START PREVIEW CODE
	==================
*/
function collapseRow(oTr)
{
	if (oTr.expanded)
	{
		oTr.cells[0].firstChild.src = "imgs/r.gif";
		_oCurrentGridTable.deleteRow(oTr.rowIndex + 1);
		oTr.expanded = false;
		_oPreviewed = null;
	}
}

function expandRow(oTr)
{
	if (!GRID_SUPPORT_PREVIEW)
	{
		return false;
	}
	
	// If this Row is previewed or there is another expanded row, collapse them
	if (oTr.expanded)
	{
		collapseRow(oTr);
		return;
	}
	else if (_oPreviewed)
	{
		collapseRow(_oPreviewed);
	}

	// If this is multi-object grid, reset the XSL Transform to force a reload
	if (oTr.otype != undefined)
	{
		var sType = oTr.otype;
		_oXslProc = null;
	}
	else
	{
		var sType = _oCurrentGridTable.oname;
	}
	
	// Create and cache an XML Document for Preview Data
	if (!_oXml)
	{
		_oXml		= new ActiveXObject("Microsoft.XMLDOM");
		_oXml.async	= false;
	}

	_oXml.load("/_grid/preview.aspx?type=" + sType + "&id=" + oTr.oid);

	// This will preserve user entered tags exactly as they were entered,
	// emails have CDATA protection
	if(parseInt(sType, 10) != EmailActivity)
	{
		var sXml = _oXml.xml;
		sXml = sXml.replace(/&/gi, "&amp;");
		_oXml.loadXML(sXml);
	}

	if (!handleXMLErr(_oXml))
	{
		return;
	}

	// If it doesn't exist, create and cache an XSL Transform
	if (!_oXslProc)
	{
		var oXslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
		oXslDoc.async = false;
		oXslDoc.resolveExternals = false;
		oXslDoc.load( "/_xslfiles/" + sType + "_preview.xsl" );

		var oXslt = new ActiveXObject("Msxml2.XSLTemplate");
		oXslt.stylesheet = oXslDoc;

		_oXslProc = oXslt.createProcessor();
		_oXslProc.addParameter("languageCode",ORG_LANGUAGE_CODE);
		_oXslProc.addParameter("numberFormat",ORG_NUMBER_FORMAT);
		_oXslProc.addParameter("numberFormatMask",ORG_NUMBER_FORMAT_MASK);
		_oXslProc.addParameter("timeFormat",ORG_TIME_FORMAT);
		_oXslProc.addParameter("currencySymbol",ORG_CURRENCY_SYMBOL);
		_oXslProc.addParameter("dateSeparator",ORG_DATE_SEPARATOR);
		_oXslProc.addParameter("dateFormat",ORG_DATE_FORMAT);
	}

	_oXslProc.input = _oXml;
	_oXslProc.transform();


	// Setup Preview Row
	var oNewTR = _oCurrentGridTable.insertRow(oTr.rowIndex+1);

	oNewTR.oid  = oTr.oid;		// Assign id and otype to the new row (preview)
	if (oTr.otype)
	{
		oNewTR.otype= oTr.otype;
	}
	
	with (oNewTR)
	{
		style.height = "100%";
		onmouseover	= function y() { window.event.cancelBubble = true };
		onclick		= function x() { window.event.cancelBubble = true };
	}

	// Setup Preview Cell
	var oTD = oNewTR.insertCell(0);

	with (oTD)
	{
		className = "gridPreview";
		colSpan	= oTr.cells.length;
		innerHTML = (EmailActivity == sType) ? decodeXml(_oXslProc.output) : _oXslProc.output;
		scrollIntoView(false);
	}

	oTr.expanded = true;
	oTr.style.paddingTop = "0px";
	oTr.cells[0].firstChild.src = "imgs/d.gif";

	_oPreviewed = oTr;
}

/*
	END PREVIEW CODE
	================
*/

function checkSelectAll(objAll)
{
	var index=objAll.id.indexOf('_chkCheckAll');
	if(index!=-1)
	{
		var tableid=objAll.id.substring(0,index);
	
		var oTable=document.getElementById(tableid);
		if(_oCurrentGridTable==null||_oCurrentGridTable!=oTable)
		{
			initGrid(oTable);
		}
	}
	 var status = objAll.checked;
	
	if(status)
		selectAllRows();
	else
		unselectAllRows();
	
}

function checkBoxAllClick(objAll)
{

	var index=objAll.id.indexOf('_chkCheckAll');
	if(index!=-1)
	{
		var tableid=objAll.id.substring(0,index);
	
		var oTable=document.getElementById(tableid);
		if(_oCurrentGridTable==null||_oCurrentGridTable!=oTable)
		{
			initGrid(oTable);
		}
	}
	 var status = objAll.checked;
	 checkBoxAll(status);
}

function checkBoxAll(isCheck)
{
   var tableid=_oCurrentGridTable.id
  var checks = document.all(tableid+'_chkDelete');
	
	if(checks==null)
		return ;
	if(checks.length==null)
	{
		checks.checked=isCheck;
	}
	else
	{
		for (i = 0; i < checks.length; i++)
		{
			checks[i].checked = isCheck;
		}
	}
	if(!isCheck) selline=null;
	
}

function checkSelectOne(checkvalue,ischeck)
{
  var tableid=_oCurrentGridTable.id
  var checks = document.all(tableid+'_chkDelete');
		
	if(checks==null)
		return ;
	if(checks.length==null)
	{
		checks.checked=ischeck;
	}
	else
	{
		for (i = 0; i < checks.length; i++)
		{
    		if (checks[i].value==checkvalue)
				checks[i].checked = ischeck;
		}
	}
}
function getCheckBoxIds()
{
	var strvalue="";
	if(_oCurrentGridTable==null||_oCurrentGridTable.id==null) return"";
	var tableid=_oCurrentGridTable.id
	var checks = document.all(tableid+'_chkDelete');
	if(checks==null) return "";
	if(checks.length==null)
	{
		if(checks.checked)
		{
			strvalue=checks.value;
		}
	}
	else
	{
		for (i = 0; i < checks.length; i++)
		{
			var e=checks[i];
    		if(e.checked == true) 
			{
				if(strvalue=="") {strvalue=e.value;}
				else { strvalue+=","+e.value;}
			}    		
		}
	}	
    return strvalue;
}

function isInCurrentGrid(obj)
{
	if(_oCurrentGridTable==null) {return false;}
	else
	{
		var outTable=getOuterTable(obj);
		if(outTable.id.indexOf(_oCurrentGridTable.id)!=-1)
		{
			return true;
		}
		else {return false;}
	}
}
function getCurrentRow(obj)
{
	if(isInCurrentGrid(obj))
	{
		return _oCurrentGridTableRow;
	}
	else { return null;}
}
function SortBy(tableid,field)
{
	 var sortField = document.getElementById(tableid+'_SortField');
	if(field!="")
	{	
		var oldfield=sortField.value;
		//alert(oldfield+":"+field);
		if(oldfield.toLowerCase()==field.toLowerCase())
		{
					
			SortDirection(tableid)
		}
		else {
			sortField.value=field;	
			
			document.forms[0].submit();
		}
	}
}

function SortDirection(tableid)
{
	var sortDir =document.getElementById(tableid+'_SortDirection'); 

	if(sortDir.value.toLowerCase()=="asc")
	{
		sortDir.value="Desc";
	}
	else
	{
		sortDir.value="Asc";
	}
	//alert(sortDir.value);
	document.forms[0].submit();
	
}

function checkBoxClick(objCheckBox,allowMulti)
{

	var index=objCheckBox.id.indexOf('_chkDelete');
	if(index!=-1)
	{
		var tableid=objCheckBox.id.substring(0,index);
	
		var oTable=document.getElementById(tableid);
		if(_oCurrentGridTable==null||_oCurrentGridTable!=oTable)
		{
			initGrid(oTable);
		}
	}
	
	var outTableRow=getOuterTableRow(objCheckBox);		
	var checks = document.all(objCheckBox.id);

	if(allowMulti==false)  //single select
	{
		
		if(objCheckBox.checked)
		{
			setCheckBoxValue(checks,false)
			objCheckBox.checked=true;
			_oCurrentGridTableRow=outTableRow;		
		}
		else
		{
			_oCurrentGridTableRow=null;
		}
	}
	else  //double select
	{
		if(objCheckBox.checked)
		{
			_oCurrentGridTableRow=outTableRow;		
		}
		else
		{
			_oCurrentGridTableRow=null;
		}
	}
	
}

function setCheckBoxValue(checks,value)
{

	if(checks==null)
			return ;
	if(checks.length==null)
	{
		checks.checked=value;
	}
	else
	{
		for (i = 0; i < checks.length; i++)
		{
			checks[i].checked = value;
		}
	}
}

