/* Build a TWIG table using data received via AJAX/JSON.
 * Copyright (C) 2006  Aaron Stone <aaron@serendipity.cx>

 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

var spinner = new Array();

function loadTable(tablename, url)
{
	if (!spinner[tablename]) {
		// First load, get the spinner.
		spinner[tablename] = document.getElementById(tablename + '-nav-curr').innerHTML;
	} else {
		// Subsequent loads, use the spinner.
		document.getElementById(tablename + '-nav-curr').innerHTML = spinner[tablename];
	}
	getDataJSON(tablename, url, loadTableInner);

	eval(tablename + '_url=url');
}

function removeTable(tablename)
{
	var table = document.getElementById(tablename);
	if (!table.rows) return;

	var rows = table.rows.length;
	for (var i = rows - 1; i >= 0; i--) {
		table.deleteRow(i);
	}
}

function urlParams(params)
{
	ret = '';
	for (key in params) {
		ret += '&' + key + '=' + params[key];
	}
	return ret;
}

function loadTableInner(tablename, req)
{
	var data = eval('(' + req.responseText + ')');
	var nav = data['navigation'];
	var tabledata = data['table'];

	if (data['document']) {
		var docdata = data['document'];
		document.title = docdata['title'];
	}

	/* Clear the old contents of the table. */
	removeTable(tablename);

	// FIXME: Rewrite these in Prototype using DOM.
	document.getElementById(tablename + '-nav-first').innerHTML = 
		'<a href="javascript:loadTable(\'' + tablename + '\','
		+ tablename + '_url+\'' + urlParams(nav['first']['params'])
		+ '\')">' + nav['first']['contents'] + '</a>';
	document.getElementById(tablename + '-nav-prev').innerHTML = 
		'<a href="javascript:loadTable(\'' + tablename + '\','
		+ tablename + '_url+\'' + urlParams(nav['prev']['params'])
		+ '\')">' + nav['prev']['contents'] + '</a>';
	document.getElementById(tablename + '-nav-curr').innerHTML = nav['curr']['contents'];
	document.getElementById(tablename + '-nav-next').innerHTML = 
		'<a href="javascript:loadTable(\'' + tablename + '\','
		+ tablename + '_url+\'' + urlParams(nav['next']['params'])
		+ '\')">' + nav['next']['contents'] + '</a>';
	document.getElementById(tablename + '-nav-last').innerHTML = 
		'<a href="javascript:loadTable(\'' + tablename + '\','
		+ tablename + '_url+\'' + urlParams(nav['last']['params'])
		+ '\')">' + nav['last']['contents'] + '</a>';

	var table = document.getElementById(tablename);
	for (var i=0;i<tabledata.length;i++) {
		var row = document.createElement('tr');
		var cell;

		if (i % 2)
			row.className = 'roweven';
		else
			row.className = 'rowodd';

		var rowprops = tabledata[i].shift();
		if (rowprops['class'])
			for (var n=0;n<rowprops['class'].length;n++)
				row.addClassName(rowprops['class'][n]);

		for (var j=0;j<tabledata[i].length;j++) {
			cell = document.createElement('td');
			if (typeof(tabledata[i][j])=='object') {
				cell.valign = tabledata[i][j]['valign'];
				cell.align = tabledata[i][j]['align'];
				if (tabledata[i][j]['nowrap'])
					cell.style.whiteSpace = 'nowrap';
				cell.innerHTML = tabledata[i][j]['contents'];
			} else {
				cell.innerHTML = tabledata[i][j];
			}

			row.appendChild(cell);
		}

		table.appendChild(row);
	}

	// Make all links into lightbox links
	lbIfy(table);
}

