// holder for instances of pagination processes,
// such that a single html page can have more than
// one pagination going on (e.g. in different <div>s or <table>s)
var pagers = new Array();

/*
* Initialize process using the SACK object from the ajax.js class
* Creates an ajax object and gives it the action php script to call
* and determines which js function to call after returning from that script
* Takes: 
*	netid: netid of user whose stuff is being paginated
*	HTMLtable: id of table where will be inserting rows
*	sql_cols: comma-separated list of columns in database table that will be retrieving
*	sql_table: name of database table that will be querying
* 	where_clause: col=value pairs, delimited by "AND" to restrict results
*	i.e. "SELECT sql_cols FROM sql_table WHERE where_clause"
* Returns: index number into pagers array, i.e. which pagination process it is
*/
function init_pager(netid,HTMLtable,script,orderBy,ascDesc,startNum,howMany) {
	var pagerID = pagers.length;
	var pager = new Array();
	pagers[pagerID] = pager;
	var ajaxObj = new sack();
	pager['netid'] = netid;
	pager['HTMLtable'] = HTMLtable;
	pager['orderBy'] = orderBy;
	pager['ascDesc'] = ascDesc;
	pager['startNum'] = startNum;
	pager['limit'] = howMany;
	pager['ajaxObj'] = ajaxObj;
	
	pager['ajaxObj'].requestFile = script;
	pager['ajaxObj'].method = "POST";
	pager['ajaxObj'].onCompletion = function() { showPageResults(pagerID); };
	pager['ajaxObj'].onLoading = showPagerWorking;

	return pagerID;
}

/*
* Switches between ascending and descending items
* Takes: ID of pager object
*/
function toggleDirection(pagerID,orderBy)
{
	var pager = pagers[pagerID];
	pager['orderBy'] = orderBy;
	
	if (pager['ascDesc'] == 'asc')
		pager['ascDesc'] = 'desc';
	else
		pager['ascDesc'] = 'asc';
	
	sendPageQuery(pagerID,null,null,null,null,null);
}

function showPrevPage(pagerID)
{
	var pager = pagers[pagerID];
	//window.status=pager['startNum'] + ", " + pager['limit'];
	if (pager['startNum'] == 0) return;
	
	var newStart = pager['startNum'] - pager['limit'];
	//alert(newStart);
	if (newStart >= 0)
		pager['startNum'] = newStart;
	else pager['startNum']=0;
		
	sendPageQuery(pagerID,null,null,null,null,null);
}

function showNextPage(pagerID,totalItems)
{
	var pager = pagers[pagerID];
	//window.status=pager['startNum'] + ", " + pager['limit'];
	//var numPages;
	//if (totalItems % pager['limit']==0) numPages = totalItems/pager['limit'];
	//else numPages = totalItems/pager['limit'] +1;

	var newStart = parseInt(pager['startNum']) + parseInt(pager['limit']);
	//alert(newStart);
	if (newStart < totalItems)
		pager['startNum'] = newStart;
	else return;
		
	sendPageQuery(pagerID,null,null,null,null,null);
}


/*
* What is called to evaluate sql query and get the results
* Sets the parameters of the AJAX request and executes it
* Takes: 
*	index into pagers array
	which table column to sort list by
	whether to order ascending or desc
	starting item number (w.r.t. above ordering)
	how many items to show
	other arguments in a javascript array of arrays
*/	
function sendPageQuery(pagerID,orderBy,ascDesc,startNum,howMany,argsArray) {
	pager = pagers[pagerID];
	
	if (argsArray != null) { // get each array of arguments out
		if (argsArray[0][0] != null) 
			pager['ajaxObj'].setVar("citeidList",argsArray[0][0]); // first array is citeids
	}
	
	
	if (orderBy == null) orderBy = pager['orderBy'];
	else pager['orderBy'] = orderBy;
	if (ascDesc == null) ascDesc = pager['ascDesc'];
	else pager['ascDesc'] = ascDesc;
	if (startNum == null) startNum = pager['startNum'];
	else pager['startNum'] = startNum;
	if (howMany == null || howMany =="") howMany = pager['limit'];
	else pager['limit'] = howMany;
	
	pager['ajaxObj'].setVar("netid",pager['netid']);
	pager['ajaxObj'].setVar("orderBy",orderBy);
	pager['ajaxObj'].setVar("ascDesc",ascDesc);
	pager['ajaxObj'].setVar("start",startNum);
	pager['ajaxObj'].setVar("limit",howMany);
	pager['ajaxObj'].runAJAX(); //125
	
}

function showPagerWorking()
{
	var messageElement = document.getElementById("message");
	messageElement.innerHTML = "[ <em>WORKING</em> ]";

}

/*
* This is called automatically after the AJAX call returns (see init function)
* It locates the <table> with the matching pagerID and 
*/
function showPageResults(pagerID){
	var messageElement = document.getElementById("message");
	messageElement.innerHTML = "";
	
	var pager = pagers[pagerID];
	if (pager['ajaxObj'].responseStatus[0] != 200) return;
	var data = pager['ajaxObj'].response.split("\n");
	var htmltable = document.getElementById(pager['HTMLtable']);
	
	// remove everything in table except header
	//var tableHeader = htmltable.rows[0].innerHTML;
	//htmltable.innerHTML = "";
	//htmltable.insertRow(0).innerHTML = tableHeader;
	var header = "<table width=\"100%\" cellpadding=\"5\">\n<tr>\n<th></th>\n<th><a href=\"#\" onClick=\"toggleDirection(uploadPagerID,'citeid');return false;\">citation</a></th>\n<th width=\"125\"><a href=\"#\" onClick=\"toggleDirection(uploadPagerID,'time');return false;\">time</a></th></tr>\n";
	
	// for each row of data, insert a new row into the table
	var rows = "";
	for(i=0; i < data.length - 1; i++) {
		rows = rows + "<tr>" + data[i] +"</tr>\n";
		//var numRows = htmltable.rows.length;
		//var newRow = htmltable.insertRow(numRows); // insert just below last row
		//newRow.innerHTML = data[i];
	}
	//alert(header + rows + "</table>\n");
	htmltable.innerHTML = header + rows + "</table>\n";
	//alert(htmltable.innerHTML);
	
}


