var myDataTable = null;
var fieldsArray = [];
var searchTemp = [];
var headers;
//var globalReportName;
var texttosearch='';
var textinsearch='';
var textinsearchvalue='';
var search='';
var pag=null;
var flag=false;
var CONSTRAINTDIVIDER = '@@@';
var globalbid = null;
var globalsysName = null;
var showDrag = null;
var constraintVals = null;
var specialChars = ['@','#',':', ' ', '$','%','^','&','*','(',')','=','-','_','}','{',']','[','>','<','\'','"','.',';','?','/','!','+','\\','|',',','`','~','\n','\r'];
var startDate;
var endDate;
var username;



function sortFunc(bid){
  
  if (!myDataTable.getState().sortedBy) return '';
  
  var sortKey = myDataTable.getState().sortedBy.key;
  
  var sortDir = (myDataTable.getState().sortedBy.dir === YAHOO.widget.DataTable.CLASS_ASC) ? 
					"asc" : "desc"; 
					
 var sortString = "&sort=" + sortKey + "&dir=" + sortDir;
 
 return sortString;	
}

function formatSearchQuery(bid){
queryString = '';
texttosearch  = Dom.get('queryInput').value;
if(texttosearch){

   	
   
	textinsearchvalue = Dom.get('search_columns').value;
	arr = Dom.get('search_columns').options;
	textinsearch = arr[textinsearchvalue].text;
	
	search='yes';
	
		for (sp=0;sp<specialChars.length;sp++){
		temp=textinsearch.split(specialChars[sp]);
		splen = temp.length;
				
		for (spl=1;spl<=splen;spl++){
			textinsearch =  textinsearch.replace(specialChars[sp],'');
		}
		
	}
	
	queryString =  "&sort="+fieldsArray[0].key+"&search="+search+"&query="+texttosearch+"&insearch="+textinsearch+"&insearchindex="+textinsearchvalue;
	

}
   return queryString;
    
}

function drawRenderedDiv(){

  	try{
		window.external.PleaseWaitDown(this);
	}catch(err){
	
	}
 YAHOO.util.Event.onContentReady('content', function() { 


	var newdiv = document.createElement('div');
  	var divIdName = 'DataTableRendered';
  	newdiv.setAttribute('id',divIdName);
  	document.body.appendChild(newdiv);
  	var totalRecords = (myDataTable.getRecordSet().getLength());
  	var totalDiv = Dom.get('recordCount');
	if (totalDiv){
		totalDiv.innerHTML = 'Total Records:' + totalRecords;
	}
	

});
}
//****************************************************************************
function harvestDateRange() {
	element = document.getElementById("drToggle");
	if (!element) return 'N,0,30,T';
	drParamStr = "N";
	if (element.checked) drParamStr = "Y";
	
	element = document.getElementById("drDateField");
	index = element.selectedIndex;
	drParamStr += ',' + element.options[index].id;
	element = document.getElementById("drInterval");
	drParamStr += ',' + element.value;
	element = document.getElementById("drPeriodP");
	if (element.checked) {
		drParamStr += ',' + element.value;
	} else {
		element = document.getElementById("drPeriodF");
		if (element.checked) {
			drParamStr += ',' + element.value;
		} else {
			element = document.getElementById("drPeriodT");
			if (element.checked) {
				drParamStr += ',' + element.value;
			} else {
				element = document.getElementById("drPeriodR");
				if (element.checked) {
					drParamStr += ',' + element.value;
				} else {
					element = document.getElementById("drPeriodM");
					if (element.checked) {
						drParamStr += ',' + element.value;
					} else {
						drParamStr += ',' + 'X';
					}
				}
			}
		}
	}
	
	element = document.getElementById('drParams');
	element.value = drParamStr;
	
	return drParamStr;
}
//****************************************************************************
function harvestStaticConstraints() {
  var tbl = document.getElementById('tblGrid2');
  var lastRow = tbl.rows.length;
  
  constraintStr = '';
  
  for (i=1;i<lastRow;i++) {
  	selFieldsid = 'selfFields_' + i;
  	selfilterField = document.getElementById(selFieldsid);
	index = selfilterField.selectedIndex;
	fieldAddr = selfilterField.options[index].id;
	
	filterOpID = 'selfOpField_' + i;
	filterOpField = document.getElementById(filterOpID);
	filterOpindex = filterOpField.selectedIndex;
	
	constraintValID = 'filCon_' + i;
	constraintValField = document.getElementById(constraintValID);
	constraintValue = constraintValField.value;
		
	if (i > 1) constraintStr += CONSTRAINTDIVIDER;
	constraintStr += fieldAddr + ',' + filterOpindex + ',' + constraintValue;
	
  }
  
  element = document.getElementById('staticConstraints');
  element.value = constraintStr;
  
  return constraintStr;
}
//****************************************************************************
function harvestDynamicConstraints() {
  var tbl = document.getElementById('tblGrid3');
  var lastRow = tbl.rows.length;
  
  constraintStr = '';
  
  for (i=1;i<lastRow;i++) {
  	selFieldsid = 'selcFields_' + i;
  	selfilterField = document.getElementById(selFieldsid);
	index = selfilterField.selectedIndex;
	fieldAddr = selfilterField.options[index].id;
	
	filterOpID = 'selcOpField_' + i;
	filterOpField = document.getElementById(filterOpID);
	filterOpindex = filterOpField.selectedIndex;
	
	constraintValID = 'constraintCon_' + i;
	constraintValField = document.getElementById(constraintValID);
	constraintValue = constraintValField.checked;
	checkedStr = '';
	if (constraintValue == true) checkedStr = 'checked';
		
	if (i > 1) constraintStr += CONSTRAINTDIVIDER;
	
	constraintStr += fieldAddr + ',' + filterOpindex + ',' + checkedStr;
	
  }
  
  element = document.getElementById('dynamicConstraints');
  element.value = constraintStr;
  
  return constraintStr;
}
//****************************************************************************
function RunReportFromMemory(reportSystemName) {	
    
    // Close the edit screen 
    CloseEditScreen();
  
    // Run the report
    runReport(reportSystemName);

}
//****************************************************************************

function SaveReport(reportSystemName){

   	var drParams = harvestDateRange();
	
	var staticConstraints = harvestStaticConstraints();
	
	var dynamicConstraints = harvestDynamicConstraints();
	
	try{
	   var reportid = Dom.get('reportid').value;
	}catch(err){
	   var reportid = 0;
	}
	
	var setIDRpt = Dom.get('setIDRpt').value;

	var reportDescr = Dom.get('report_descr').value;

	var reportName = Dom.get('report_title').value;
	
	var reportSystemName = Dom.get('report_system').value;
	
	
	var parameters = {reportid:reportid, setIDRpt: setIDRpt, drParams:drParams, staticConstraints: staticConstraints, dynamicConstraints: dynamicConstraints, reportSystemName: reportSystemName,reportName:reportName,reportDescr:reportDescr, pageName: 'module', asynchronous: true, func:'save',module:'reports'};
	
	new Ajax.Request('index.php',
	{
    		method:'get',
    		parameters: parameters,
    		onSuccess: function(transport){
      			var response  = transport.responseText || "Error";
      			alert('Report Saved');
      			window.location.reload(true);
      		}
	  });

	
	
}


function SaveNewReport(){
    
   	var drParams = harvestDateRange();
   	
   	try{
	   var reportid = Dom.get('reportid').value;
	}catch(err){
	   var reportid = 0;
	}	
	
	var staticConstraints = harvestStaticConstraints();
	var reportSystemName = Dom.get('report_system').value;	
	if(reportSystemName == ''){
	   alert('You must give the report a unique system name');
	   return;
	}
	
	var dynamicConstraints = harvestDynamicConstraints();
	
	
	var setIDRpt = Dom.get('setIDRpt').value;
	
	if (setIDRpt == -1) { 
	   alert('You must pick a summary set');
	   return;
	}
	
	
	var reportDescr = Dom.get('report_descr').value;

	
	var reportName = Dom.get('report_title').value;
	if(reportName == ''){
	   alert('You must name the report');
	   return;
	}
	
	
	var parameters = {setIDRpt: setIDRpt, drParams:drParams, staticConstraints: staticConstraints, dynamicConstraints: dynamicConstraints, reportSystemName: reportSystemName,reportName:reportName,reportDescr:reportDescr, pageName: 'module', asynchronous: true, func:'save',module:'reports'};
	
	new Ajax.Request('index.php',
	{
    		method:'get',
    		parameters: parameters,
    		onSuccess: function(transport){
      			var response  = transport.responseText || "Error";
      			alert('Report Saved');
                        window.location.reload(true);
      			
      		}
	  });

	
	
}


function SaveReportFromMemory() {
	harvestDateRange();
	harvestStaticConstraints();
	harvestDynamicConstraints();
	document.reporteditform.submit();	
}


function runConstrainedReport(bid,numConstraints) {

	var runStatus;
	if (document.getElementById('dateStart') && document.getElementById('dateEnd')){
		runStatus = validateDateRange(document.getElementById('dateStart').value,document.getElementById('dateEnd').value);
	}else{
		runStatus = true;
	}
	
	if (runStatus){
		var valStr = '';
		constraintVals = harvestDynamicConstraintsValues(bid);	
		
		var element = document.getElementById('constraintVals');
		
		element.value = constraintVals;
		if(globalbid){
			runReport(globalsysName,globalbid);
		}
		else{
			runReport(globalsysName);
		}

	}
}

function checkStartDate(){
	
	if (document.getElementById('dateStart').value=='' || document.getElementById('dateStart').value=='undefined'){
		document.getElementById('dateStartseed').value='';	
	}else{
		document.getElementById('dateStartseed').value=document.getElementById('dateStart').value;
	}
}
function checkEndDate(){
	if (document.getElementById('dateEnd').value=='' || document.getElementById('dateEnd').value=='undefined'){
		document.getElementById('dateEndseed').value='';	
	}else{
		document.getElementById('dateEndseed').value=document.getElementById('dateEnd').value;
	}
}

function harvestDynamicConstraintsValues(bid) {

  var tbl = document.getElementById(bid+'DynConstVals');
 
  constraintStr = '';
  if (tbl != undefined) {
	  //var lastRow = tbl.rows.length; 
	  var lastRow = tbl.getElementsByTagName('tr')[0].getElementsByTagName('td').length;
	  for (i=1;i<lastRow+1;i++) {	// for each Dynamic Constraint
	  	selFieldsid = bid+'constraint_' + i;
	  	selfilterField = document.getElementById(selFieldsid); 
	  	if (selfilterField != undefined) { 	
		  	CVal = selfilterField.value;		
			if (i > 1) constraintStr += CONSTRAINTDIVIDER;	
			constraintStr += CVal;
	  	}	
	  }
	  
	  var element = document.getElementById('dateStartseed');
		if ((element != "undefined") && (element)) {
			//alert("Add Date Start #" + constraintStr + "#");
			if (constraintStr.length > 0) {
				constraintStr += CONSTRAINTDIVIDER;			
			}
			constraintStr += element.value;
			element = document.getElementById('dateEndseed');
			
			constraintStr += CONSTRAINTDIVIDER;
			constraintStr += element.value;
		}
  }

  return constraintStr;
}

//Check if endDate is > startDate
function validateDateRange(vstartDate,vendDate){
	startDate = vstartDate;
	endDate = vendDate;
	
	
	if (startDate=='' && endDate=='')
		return true;
	else if(startDate=='' && endDate!=''){
		var currentTime = new Date();
		var month = currentTime.getMonth() + 1;
		month=month+'';
		if (month.length==1){
			month = '0'+month;
		}
		var day = currentTime.getDate();
		day=day+'';
		if (day.length==1){
			day = '0'+day;
		}
		var year = currentTime.getFullYear();
		startDate = month+'/'+day+'/'+year;//currentdate
		document.getElementById('dateStartseed').value=startDate;
		return true;
	}else if(startDate!='' && endDate==''){
		var currentTime = new Date();
		var month = currentTime.getMonth() + 1;
		month=month+'';
		if (month.length==1){
			month = '0'+month;
		}
		var day = currentTime.getDate();
		day=day+'';
		if (day.length==1){
			day = '0'+day;
		}
		var year = currentTime.getFullYear();
		endDate = month+'/'+day+'/'+year;//currentdate
		document.getElementById('dateEndseed').value=endDate;
		return true;
	}
	
	else{
		var dayPartStartDate = parseInt(startDate.substring(3,5),10);
		//alert(dayPartStartDate);
		var monPartStartDate = parseInt(startDate.substring(0,2),10);
		var yearPartStartDate = parseInt(startDate.substring(6,10),10);
		
		var dayPartEndDate = parseInt(endDate.substring(3,5),10);
		//alert(dayPartEndDate );
		var monPartEndDate = parseInt(endDate.substring(0,2),10);
		var yearPartEndDate = parseInt(endDate.substring(6,10),10);
		
		if (yearPartEndDate > yearPartStartDate){ //if endYear > startYear
			return true;
		}else if (yearPartEndDate < yearPartStartDate){ //if endYear < startYear
			alert('End date should be greater than Start Date');
			return false;
		}else{ //if endYear == startYear
			if (monPartEndDate > monPartStartDate){ //if endMonth > startMonth
				return true;
			}else if (monPartEndDate < monPartStartDate){ //if endMonth < startMonth
				alert('End date should be greater than Start Date');
				return false;
			}else{ //if endMonth == startMonth
				if (dayPartEndDate >= dayPartStartDate){ //if endDay > startDay
					return true;
				}else if (dayPartEndDate < dayPartStartDate){ //if endDay < startDay
					alert('End date should be greater than Start Date');
					return false;
				}
			}
		}
		
	}
}

function expandSearch(reportName){
	var selectbox = Dom.get('search_columns');
	var i;
	for (i=0;i<searchTemp.length;i++){
		var optn = document.createElement("OPTION");
		//if (headers[i].firstChild.nodeValue!=''){
		if (searchTemp[i]!='' && typeof searchTemp[i]!='undefined'){
			//optn.text = headers[i].firstChild.nodeValue;
			optn.text = searchTemp[i];
			optn.value = i;
			//optn.label = headers[i].firstChild.nodeValue;
			optn.label = searchTemp[i];
			selectbox.options.add(optn);
		}
	}
	
	var searchbox = Dom.get('searchtable');
	Dom.setStyle(searchbox,'display','');
}

function contractSearch(){
	var searchid = Dom.get('searchtable');
	
	if (typeof searchid != "undefined") {
		Dom.setStyle(searchid,'display','none');
	}
}

function testSearch(temp){
	texttosearch  = Dom.get('queryInput').value;
	textinsearchvalue = Dom.get('search_columns').value;
	arr = Dom.get('search_columns').options;
	textinsearch = arr[textinsearchvalue].text;
	
	search='yes';
	var myDataSource = new YAHOO.util.DataSource("index.php?module=reports&func=runreport_xml");
	
	myDataSource.responseType = YAHOO.util.DataSource.TYPE_XML;
        		 

	myDataSource.responseSchema = {
		resultNode: "DBData",
		fields: fieldsArray
    };
	
	var oCallback2 = {
		success : function(oRequest, oResponse, oPayload){
		myDataTable.onDataReturnInitializeTable(oRequest, oResponse, oPayload);
		  	
		var newState = { totalRecords :  oPayload.totalRecords};
		pag.setState(newState);
		var totalRecords = (myDataTable.getRecordSet().getLength());
  	var totalDiv = Dom.get('recordCount');
	if (totalDiv){
		totalDiv.innerHTML = 'Total Records:' + totalRecords;
	}
		//pag.setTotalRecords('totalRecords', oPayload.totalRecords);
		},
		scope : myDataTable,
		argument : myDataTable.getState()
	}; 
	
	for (sp=0;sp<specialChars.length;sp++){
		temp=textinsearch.split(specialChars[sp]);
		splen = temp.length;
				
		for (spl=1;spl<=splen;spl++){
			textinsearch =  textinsearch.replace(specialChars[sp],'');
		}
		
	}
	
	queryString =  "&blockname=mainreport&reportName="+globalsysName+"&pageName=module&asynchronous=true"+"&search="+search+"&query="+texttosearch+"&insearch="+textinsearch+"&insearchindex="+textinsearchvalue;
 	
	myDataSource.sendRequest(queryString,
        oCallback2,myDataTable,true); 
}

function clearFilter(){
	search='no';
	texttosearch='';
	textinsearch='';
	textinsearchvalue='';
	Dom.get('queryInput').value ="";
	Dom.get('search_columns').value="0";
	
	var myDataSource = new YAHOO.util.DataSource("index.php?module=reports&func=runreport_xml");
	
	myDataSource.responseType = YAHOO.util.DataSource.TYPE_XML;
        		 

	myDataSource.responseSchema = {
		resultNode: "DBData",
		fields: fieldsArray
    };
	
	var oCallback2 = {
		success : function(oRequest, oResponse, oPayload){
		myDataTable.onDataReturnInitializeTable(oRequest, oResponse, oPayload);
		var totalRecords = (myDataTable.getRecordSet().getLength());
		var totalDiv = Dom.get('recordCount');
		if (totalDiv){
			totalDiv.innerHTML = 'Total Records:' + totalRecords;
		}
		
		var totalDiv = Dom.get('RecordCount');
		if (totalDiv){
			totalDiv.innerHTML = 'Records Returned: ' + oPayload.totalRecords;
		}
		var newState = { totalRecords :  oPayload.totalRecords};
		pag.setState(newState);
		},
		scope : myDataTable,
		argument : myDataTable.getState()
	}; 
	queryString =  "&blockname=mainreport&reportName="+globalsysName+"&pageName=module&asynchronous=true"+"&search="+search+"&query="+texttosearch+"&insearch="+textinsearch+"&insearchindex="+textinsearchvalue;

	myDataSource.sendRequest(queryString,
        oCallback2,myDataTable,true); 

}

function deleteReport(reportName){

   var parameters = {reportName: reportName, pageName: 'module', asynchronous: true, func:'delete',module:'reports'};
   
   var answer = confirm("Are you sure you want to DELETE "+reportName+ "?")

   if(answer){
		new Ajax.Request('index.php',
	   		{
	    		method:'get',
	    		parameters: parameters,
	    		onSuccess: function(transport){
	      			var response  = transport.responseText || "Error";
	      			alert(response);
	      			window.location.reload(true);
	      		}
	      	});
   
   }
}

function CloseEditScreen(){
    window.location.reload(true);
}

function editReport(reportName){


	var parameters = {reportName: reportName, pageName: 'module', asynchronous: true, func:'edit',module:'reports'};
   
	new Ajax.Request('index.php',
   		{
    		method:'get',
    		parameters: parameters,
    		onSuccess: function(transport){
      			var response  = transport.responseText || "Error";
      			
      			new Ajax.Updater('editreport', 'index.php',  {method: 'get' ,parameters:{ reportID: response, pageName: 'module', asynchronous: true, func:'loadreport',module:'reportcreator'}});
      			
      			Dom.setStyle('dynamicConstraints','display','none');
   				Dom.setStyle('reportBody','display','none');
      			Dom.setStyle('editreport','display','');
      			
      			}
      		
      	});



}

function exportReportCSV(reportName){

  bid = 0;
  
  if(Dom.get('constraintVals')){
		dynConstraints = Dom.get('constraintVals').value;
	
	}else if(Dom.get('constData')){
		dynConstraints = Dom.get('constData').value;
	}
	
	constraintVals= dynConstraints;

	var searchQuery = formatSearchQuery(bid);
	var sortQuery = sortFunc(bid);
	
	var locationURL = '/index.php?module=reports&func=runreport_csv&reportName='+reportName+'&dynamicConstraintsData='+dynConstraints+searchQuery+sortQuery,reportName;

	
	window.location = locationURL;
	
}

function printReport(reportName,bid){
dynConstraints = '';
   if(Dom.get('constraintVals')){
		dynConstraints = Dom.get('constraintVals').value;
	
	}else if(Dom.get('constData')){
		dynConstraints = Dom.get('constData').value;
	}
constraintVals= dynConstraints;



var searchQuery = formatSearchQuery(bid);

var sortQuery = sortFunc(bid);	


	window.open ("/index.php?module=reports&func=print&reportName="+reportName+"&userName="+username+"&dynamicConstraintsData="+dynConstraints+searchQuery+sortQuery,reportName);	

}

function addRecord(entityID){

   	var locationURL = '/index.php?module=lms&func=edit&entityID='+entityID;
	window.location = locationURL;

}

function deleteSelectedInstances(entityIDVal,reportName,bid){

	var column = myDataTable.getColumn(1);
	var columnKey = column.key;
	recs = myDataTable.getRecordSet();
	var selectedRecords = myDataTable.getSelectedRows();
  	var num_selected = selectedRecords.length;
  	var instances = [];
	if(num_selected == 0){
		alert('No Instances Selected');
		return;
	}
	var confirmed = confirm('Are you sure you want to delete ?');
	if(!confirmed) return;
	
	for(var i=0;i<num_selected;i++)
	{
		var instanceidurl = recs.getRecord(selectedRecords[i]).getData('editurl');
		var pos = instanceidurl.search('instance=');
		var posinstanceurl = instanceidurl.substring(pos);
		
		var pos2 = posinstanceurl.search('=');
		pos2=pos2+1;
		var instanceid = posinstanceurl.substring(pos2);

		instances.push(instanceid);
	    
				   
	}
	var instanceString = Object.toJSON(instances);
    var  parameters = {pageName: 'module', asynchronous: true, func:'delete',module:'lms',instances:instanceString,entityID:entityIDVal};
	// Now, send it to the server to delete
	new Ajax.Request('index.php',
   	{
    				method:'get',
    				parameters: parameters,
    				onSuccess: function(transport){
						
						runReport(reportName,bid);
					}
	});

}



function runReport(reportName,bid,flag){ 
		try{
		window.external.PleaseWaitUp(this);
	}catch(err){
	
	} 
var parameters = '';
var reportNav;
var bottomNav;
var reportBody;
var dynamicConstraints;
var dynConstraints = '';


if(Dom.get('constraintVals')){
	dynConstraints = Dom.get('constraintVals').value;
	
}else if(Dom.get('constData')){
	dynConstraints = Dom.get('constData').value;
}
constraintVals= dynConstraints;

if (globalsysName){
	if (globalsysName!=reportName){
		dynConstraints='';
	}
}

globalsysName = reportName;

//Put in the links that allow us to edit or delete this report
if (typeof bid == "undefined" || !bid) {


   	Dom.get('editreport').innerHTML = '';
   	Dom.setStyle('dynamicConstraints','display','');
   	Dom.setStyle('reportBody','display','');
	reportNav = Dom.get('reportNav');
	bottomNav = Dom.get('bottomNav');
	dynamicConstraints = Dom.get('dynamicConstraints');
	
	reportBody = Dom.get('reportBody');
	
	if (reportBody){
		reportBody.innerHTML = '';
	}
	if (reportNav){
		reportNav.innerHTML	='';
	}
	if (bottomNav){
		bottomNav.innerHTML ='';
	}
	
	if (dynamicConstraints){
		dynamicConstraints.innerHTML = '';
	}
	
	parameters = {dynamicConstraintsData: dynConstraints, blockname: 'mainreport',reportName: reportName, pageName: 'module', asynchronous: true, func:'runreport_xml',module:'reports'};
	
}
else{
    globalbid = bid;
	reportNav = Dom.get('reportNav'+bid);
	bottomNav = Dom.get('bottomNav'+bid);
	Dom.get("report_block"+bid).innerHTML = '';
	parameters = {dynamicConstraintsData: dynConstraints,bid: bid,reportName: reportName, pageName: 'module', asynchronous: true, func:'runreport_xml',module:'reports'};
}


new Ajax.Request('index.php',
   		{
    		method:'get',
    		parameters: parameters,
    		onSuccess: function(transport){
    		   
      			var xmlDoc  = transport.responseXML || "Error";
      			headers = xmlDoc.getElementsByTagName('DBHeader');
				footer = xmlDoc.getElementsByTagName('DBFooter');
				headerstype = xmlDoc.getElementsByTagName('DBType');
				globalHeaders = headers;
      		    var caption = xmlDoc.getElementsByTagName("Title")[0].childNodes[0].nodeValue;
      			var entityID = xmlDoc.getElementsByTagName("entityID")[0].childNodes[0].nodeValue;
				
				username = xmlDoc.getElementsByTagName("UserName")[0].childNodes[0].nodeValue;
      			showDrag = xmlDoc.getElementsByTagName('isDragable');
		

  if (typeof bid == "undefined") {    		         			
      			reportNav.innerHTML = " <a href='#' onClick='editReport(\""+reportName+"\");'><img src='/images/report_edit.png' border='0' /> Edit Report</a>| <a href='#' onClick='deleteReport(\""+reportName+"\");'><img src='/images/report_delete.png' border='0' /> Delete Report</a> |<a href='#' onClick='addRecord(\""+entityID+"\");'><img src='/images/add.png' border='0' />Add Record</a> |<a href='#' onClick='deleteSelectedInstances(\""+entityID+"\",\""+reportName+"\");'> <img src='/images/delete.png' border='0' /> Delete Record(s)</a> | <a href='#' onClick='expandSearch(\""+reportName+"\");'> <img src='/images/search.png' border='0' /> Search</a> | <a href='#' onClick='printReport(\""+reportName+"\");'> <img src='/images/printer.png' border='0' /> Print</a> | <a href='#' onClick='exportReportCSV(\""+reportName+"\");'> <img src='/images/report_go.png' border='0' /> Export to CSV</a><br /><span id='recordCount'></span>";
	}
	else{
			reportNav.innerHTML = "<span id='recordCount'></span>  <a href='#' onClick='addRecord(\""+entityID+"\");'><img src='/images/add.png' border='0' /> Add Record</a> |<a href='#' onClick='deleteSelectedInstances(\""+entityID+"\",\""+reportName+"\",\""+bid+"\");'><img src='/images/delete.png' border='0' /> Delete Record(s)</a> | <a href='#' onClick='expandSearch(\""+reportName+"\");'> <img src='/images/search.png' border='0' /> Search</a> | <a href='#' onClick='printReport(\""+reportName+"\",\""+bid+"\");'> <img src='/images/printer.png' border='0' /> Print</a> | <a href='#' onClick='exportReportCSV(\""+reportName+"\");'> <img src='/images/report_go.png' border='0' /> Export to CSV</a><div id='searchtable' style='display:none;'><table width='80%' cellspacing='0 cellpadding='5' border='0' align='center' class='search'><tbody><tr><td nowrap='' align='right'><b>Search for</b></td><td><input type='text' name='search_text' id='queryInput' style='width: 120px;' class='txtBox'/></td><td><b>In</b></td><td nowrap=''><div id='basicsearchcolumns_real'><select   id='search_columns' name='search_columns'></select></div></td><td  nowrap=''><a class='button'	onclick='testSearch()'><span id='searchnow'>Search Now</span></a></td><td  nowrap=''><a class='button' onclick='clearFilter()'><span>Clear Filters</span></a></td><td><a href='#' style='text-decoration:none;' onclick='contractSearch();'>[x]</a></td></tbody></tr></table></div><div class='dynamicConstraints' id='dynamicConstraints"+bid+"'></div>";


	}


	try{
	    contractSearch();
		var constraintsNode = xmlDoc.getElementsByTagName('Constraints');
		if(typeof constraintsNode != "undefined"){
			var constraints = constraintsNode[0].childNodes[0].nodeValue;
			   try{
				  if (typeof bid == "undefined") {
				    Dom.get('dynamicConstraints').innerHTML = constraints;
					Dom.setStyle('dynamicConstraints','display','');
				  }
				  else{
					Dom.get('dynamicConstraints'+bid).innerHTML = constraints;
					Dom.setStyle('dynamicConstraints'+bid,'display','');
				  }
				}
				catch(err){}

				}
    }
    catch(err){
	   try{
		  if (typeof bid == "undefined") {
			Dom.get('dynamicConstraints').innerHTML = '';
			Dom.setStyle('dynamicConstraints','display','none');
		  }
		  else{
			Dom.get('dynamicConstraints'+bid).innerHTML = '';
			Dom.setStyle('dynamicConstraints'+bid,'display','none');
		  }
		}
		catch(err){}
      			
     }


	if (typeof bid == "undefined") {    
      			bottomNav.innerHTML = "<input type='hidden' id='constraintVals' value='"+constraintVals+"'/><a href='#' onClick='editReport(\""+reportName+"\");'><img src='/images/report_edit.png' border='0' /> Edit Report</a>| <a href='#' onClick='deleteReport(\""+reportName+"\");'><img src='/images/report_delete.png' border='0' /> Delete Report</a> |<a href='#' onClick='addRecord(\""+entityID+"\");'> <img src='/images/add.png' border='0' />Add Record</a> |<a href='#' onClick='deleteSelectedInstances(\""+entityID+"\",\""+reportName+"\");'> <img src='/images/delete.png' border='0' /> Delete Record(s)</a> | <a href='#' onClick='printReport(\""+reportName+"\");'> <img src='/images/printer.png' border='0' /> Print</a> | <a href='#' onClick='exportReportCSV(\""+reportName+"\");'> <img src='/images/report_go.png' border='0' /> Export to CSV</a>";

	}
	else{
			bottomNav.innerHTML = "<input type='hidden' id='constraintVals' value='"+constraintVals+"'/><a href='#' onClick='addRecord(\""+entityID+"\");'> <img src='/images/add.png' border='0' /> Add Record</a> |<a href='#' onClick='deleteSelectedInstances(\""+entityID+"\",\""+reportName+"\",\""+bid+"\");'> <img src='/images/delete.png' border='0' /> Delete Record(s)</a> | <a href='#' onClick='expandSearch(\""+reportName+"\");'> <img src='/images/search.png' border='0' /> Search</a> | <a href='#' onClick='printReport(\""+reportName+"\",\""+bid+"\");'> <img src='/images/printer.png' border='0' /> Print</a> | <a href='#' onClick='exportReportCSV(\""+reportName+"\");'> <img src='/images/report_go.png' border='0' /> Export to CSV</a>";


	}
		
	var formatDrag = function(elCell, oRecord, oColumn, sData) { 
		if(sData){
			if(oRecord.getData("isDragable")){
				targetEntity = oRecord.getData('targetEntity');
				
				dateAddr = oRecord.getData("dateAddr");
				refAddr = oRecord.getData("refAddr");
				refInst = oRecord.getData("refInst");
				
				statusFieldAddr = oRecord.getData("statusFieldAddr")
				newStatus = oRecord.getData("newStatus");
				targetStatus = oRecord.getData("targetStatus");
				targetStatusAddr = oRecord.getData("targetStatusAddr");
				locationAddr = oRecord.getData("locationAddr");
				mode = oRecord.getData("mode");
				cloneFields = oRecord.getData("cloneFields");
				sourceEntity = oRecord.getData("sourceEntity");



elCell.innerHTML = '<span  onMouseDown=\'dragThisEntity(this,'+bid+',event,"'+targetEntity+'","'+dateAddr+'" ,"'+refAddr+'","'+refInst+'" ,"'+ statusFieldAddr+'","'+newStatus+'","'+targetStatus+'","'+targetStatusAddr+'","'+ locationAddr +'","'+mode+'","'+cloneFields+'","'+sourceEntity+'");\'>&diams;&diams;</span><span style="display:none">'+oRecord.getData("tooltipstr")+'</span>';
			} 
		}
	}; 
			
	var formatUrl = function(elCell, oRecord, oColumn, sData) { 
		if(sData){
		   if(oRecord.getData('editurl')){
			elCell.innerHTML = "<a href='" + oRecord.getData("editurl") + "'>" + sData + "</a>"; }
			else{
			   elCell.innerHTML = sData;
			}
		}
		else{
		   if(oRecord.getData('na') == 'NA'){
			elCell.innerHTML = "<a href='" + oRecord.getData("editurl") + "'>" + 'NA' + "</a>"; 
			oRecord.setData('na','');
		   }
		}
	}; 
	

		
	var myColumnDefs = [];
	//var fieldsArray = [];
	searchTemp=[]; //Reinitialising in order to get a new set of option for search select box
	fieldsArray[0] = {key:'isDragable'};

	myColumnDefs[0] = {key:'isDragable', label:'♦♦', sortable:false,formatter:formatDrag};
	for(i=0;i<headers.length;i++){
	   try{
			
			clean_header =  headers[i].firstChild.nodeValue.replace(/ /g,'');
			clean_header =  clean_header.replace(/:/g,'');
			var temp = [];
			for (sp=0;sp<specialChars.length;sp++){
				temp=clean_header.split(specialChars[sp]);
				splen = temp.length;
				
				for (spl=1;spl<=splen;spl++){
					clean_header =  clean_header.replace(specialChars[sp],'');
				}
				
			}
			
			if (headerstype[i].firstChild.nodeValue=='numeric'){
				fieldsArray[i+1] = {key:clean_header,sortable:true,parser:"number"};
			}else{
				fieldsArray[i+1] = {key:clean_header};
			}
			searchTemp[i]=headers[i].firstChild.nodeValue;
			myColumnDefs[i+1] = {key:clean_header, label:headers[i].firstChild.nodeValue, sortable:true,formatter:formatUrl};
		}
		catch(err){
		
		  fieldsArray[i+1] = {key:''};
			myColumnDefs[i+1] = {key:'', label:'', sortable:false};
		}
	}
    
	fieldsArray[i+13] = {key:'editurl'};
	fieldsArray[i+1] = {key:'targetEntity'};
	fieldsArray[i+2] = {key:'sourceEntity'};
	fieldsArray[i+3] = {key:'dateAddr'};
	fieldsArray[i+4] = {key:'refAddr'};
	fieldsArray[i+5] = {key:'refInst'};
	fieldsArray[i+6] = {key:'statusFieldAddr'};
	fieldsArray[i+7] = {key:'newStatus'};
	fieldsArray[i+8] = {key:'targetStatus'};
	fieldsArray[i+9] = {key:'targetStatusAddr'};
	fieldsArray[i+10] = {key:'locationAddr'};
	fieldsArray[i+11] = {key:'mode'};
	fieldsArray[i+12] = {key:'cloneFields'};
	fieldsArray[i+14] = {key:'na'};  
	fieldsArray[i+15] = {key:'tooltipstr'};
	ReportTable = function() {
			
			var myDataSource;

			myDataSource = new YAHOO.util.DataSource(xmlDoc);
			
			
			myDataSource.responseType = YAHOO.util.DataSource.TYPE_XML;
			myDataSource.responseSchema = {
				resultNode: "DBData",
				fields: fieldsArray
			};
			pag = new YAHOO.widget.Paginator({rowsPerPage : 20,alwaysVisible : false, template: YAHOO.widget.Paginator.TEMPLATE_ROWS_PER_PAGE,
                rowsPerPageOptions: [20,50,100],paginationEventHandler:
YAHOO.widget.DataTable.handleDataSourcePagination
});
			
			// DataTable configuration-added by sumeen
			
			if (flag==true){//disable pagination for print
				var myConfigs = {
					initialRequest: "&blockname=mainreport&reportName="+reportName+"&pageName= module& asynchronous=true"+"&search="+search+"&query="+texttosearch+"&insearch="+textinsearch+"&insearchindex="+textinsearchvalue,// Initial request for first page of data
										caption:caption
					
				};
			}else{
			if (typeof bid == "undefined") {
					var myConfigs = {
					initialRequest: "&blockname=mainreport&reportName="+reportName+"&pageName= module& asynchronous=true"+"&search="+search+"&query="+texttosearch+"&insearch="+textinsearch+"&insearchindex="+textinsearchvalue,// Initial request for first page of data
										caption:caption,
					paginator: pag// Enables pagination 
					
				};
		}else{
		var myConfigs = {
					initialRequest: "&blockname=mainreport&reportName="+reportName+"&pageName= module& asynchronous=true"+"&search="+search+"&query="+texttosearch+"&insearch="+textinsearch+"&insearchindex="+textinsearchvalue,// Initial request for first page of data
					paginator: pag// Enables pagination 
					
				};

		
		}

			}
			
		
		 if (typeof bid == "undefined") {

			myDataTable = new YAHOO.widget.DataTable("reportBody", myColumnDefs, myDataSource,
								myConfigs);
					 }
		 else{
						myDataTable = new YAHOO.widget.DataTable("report_block"+bid, myColumnDefs, myDataSource,myConfigs );
		   
		 }		 
		 try{
			if(showDrag.length==0){
					myDataTable.hideColumn('isDragable');
		
		  	}	
		  	else{
		  	    myDataTable.setColumnWidth('isDragable',35);
		  	}
				}catch(err){
				   alert(err);
				}
		
		myDataTable.subscribe("rowMouseoverEvent", myDataTable.onEventHighlightRow);
		myDataTable.subscribe("rowMouseoutEvent", myDataTable.onEventUnhighlightRow);
		myDataTable.subscribe("rowClickEvent", myDataTable.onEventSelectRow);
		
		
	    var tfoot = myDataTable.getTbodyEl().parentNode.createTFoot();
		var tr = tfoot.insertRow(-1);
		
		tr.className = "yui-dt-first yui-dt-last";
		
		for(k=0;k<footer.length;k++){	
			var th = tr.appendChild(document.createElement('th'));
			th.className= "yui-dt-first yui-dt-last";
			if (footer[k].firstChild.nodeValue == 'Totals')
				th.colSpan = 2;

			th.id = 'total_'+footer[k].firstChild.nodeValue;
			th.innerHTML = '<div class="yui-dt-liner">'+footer[k].firstChild.nodeValue+'</div>';
		}

	
		myDataTable.subscribe("postRenderEvent",drawRenderedDiv());
		
		
		
		       
		return {
			oDS: myDataSource,
			oDT: myDataTable
		};
	}();
                
                

      			
      			
      		}
      	});





}
