var dt_tableURLs = [];
var dt_tableTimers = [];
var dt_tableUpdateSequences = [];

function dt_updateTableNav(tableID, nav, nav_info) {
	var html = '';
	if(nav_info.total_num_pages > 1) {
		html = nav;
	}
	if(!html) {
		html = '&nbsp;';
	}
	$('#' + tableID + '_nav').html(html);
}

function dt_updateTableHTML(tableID, header, data, zeroRowMessage) {
	var rows = '<tr class="header">';
	for (col in header) {
		rows += '<td'
				+ (header[col]['class'] ? ' class="' + header[col]['class']
						+ '"' : '')
				+ (header[col]['width'] ? ' width="' + header[col]['width']
						+ '"' : '') + '>' + header[col]['display'] + '<\/td>';
	}
	rows += '<\/tr>';

	var counter = 0
	if(data.length > 0) {
		for (row in data) {
			rows += '<tr class="' + (counter++ % 2 == 0 ? 'even' : 'odd') + '">';
			for (col in data[row]) {
				var cellData = data[row][col]['display'];
				if (data[row][col]['url']) {
					cellData = '<a class="cell_url" href="' + data[row][col]['url']
							+ '">' + cellData + '<\/a>';
				}
				rows += '<td'
						+ (data[row][col]['class'] ? ' class="'
								+ data[row][col]['class'] + '"' : '') + '>'
						+ cellData + '<\/td>';
			}
			rows += '<\/tr>';
		}
	}
	else {
		rows += '<tr class="zero_row"><td class="zero_row_cell" colspan="' + header.length + '">';
		rows += zeroRowMessage;
		rows += '<\/td><\/tr>';
	}

	$('#' + tableID).html(rows);
}

function dt_responseHandler(response) {
	dt_updateTableHTML(response.id, response.header, response.data, response.zero_rows_message);
	dt_updateTableNav(response.id, response.nav, response.nav_info);
	dt_tableURLs[response.id] = response.urls.full_ajax;
}

function dt_updateTable(url) {
	$.ajax({
		url : url,
		success : dt_responseHandler,
		cache : false,
		dataType : 'json'
	});
	return false;
}

function dt_updateTableByID(tableID) {
	dt_updateTable(dt_tableURLs[tableID]);
}

function dt_resetSearch(tableID, url) {
	if ($('#' + tableID + '_search').val() || $('#' + tableID + '_filter').val()) {
		$('#' + tableID + '_search').val('');
		$('#' + tableID + '_filter').val('');

		dt_updateTable(url);
	}

	return false;
}

function dt_executeUpdate(tableID, data) {
	var seq = dt_tableUpdateSequences[tableID] ? dt_tableUpdateSequences[tableID] : 0;
	seq++;
	dt_tableUpdateSequences[tableID] = seq;
	
	data['pg'] = 1; // This is such a hack...
	
	$.ajax({
		type: 'POST',
		url: dt_tableURLs[tableID],
		data: data,
		success: function(response) {
			if(dt_tableUpdateSequences[response.id] === seq) {
				dt_responseHandler(response);
			}
		},
		cache: false,
		dataType: 'json'
	});
}

function dt_executeSearch(tableID) {
	dt_executeUpdate(tableID, {
		'q' : $('#' + tableID + '_search').val()
	});
}

function dt_search(tableID) {
	if (dt_tableTimers[tableID] !== undefined) {
		clearTimeout(dt_tableTimers[tableID]);
	}

	dt_tableTimers[tableID] = setTimeout("dt_executeSearch('" + tableID + "')", 200);

	return false;
}

function dt_filter(tableID) {
	dt_executeUpdate(tableID, {
		'filter' : $('#' + tableID + '_filter').val()
	});
}

function dt_downloadSpreadsheet(tableID) {
	var spreadsheetDownloadForm = $('#' + tableID + '_spreadsheet_download_form');
	spreadsheetDownloadForm.attr('action', dt_tableURLs[tableID]);
	spreadsheetDownloadForm.submit();
	return false;
}

