// Enable mouse cursor rows/columns highlighting for all tables in the document
// that have set the "highlightable" style class and that are defined by then.
// This function should not be called twice on the same document as it would
// add duplicate event handlers.
//
// requires runtime.js, dom.js
//
function startTableHighlight()
{
	DOM.addPageStyle("table.highlightable tr.highlight td, table.highlightable tr.highlight th, table.highlightable td.highlight, table.highlightable th.highlight { background-color: #FFFFDD; } table.highlightable tr.highlight td.first, table.highlightable tr.highlight th.first, table.highlightable td.highlight.first, table.highlightable th.highlight.first { background-color: #EEEECC; }");

	function addEvents(obj)
	{
		DOM.addEvent(obj, "mouseover", function(event) {
			var e = DOM.findParentByName(event.target, "td");
			if (!e)
			{
				e = DOM.findParentByName(event.target, "th");
				if (!e) return;
			}
			var parent_row = DOM.findParentByName(e, "tr");
			if (!parent_row) return;
			var parent_table = DOM.findParentByName(parent_row, "table");
			if (!parent_table) return;

			// row styling
			DOM.addClass(parent_row, "highlight");

			// column styling
			var ci = e.cellIndex;
			var rows = parent_table.rows;
			if (rows.length == 0)
				rows = parent_table.getElementsByTagName("tr");
			for (var i = 0; i < rows.length; i++)
			{
				var cell = rows[i].cells[ci];
				DOM.addClass(cell, "highlight");
			}
		} );
		DOM.addEvent(obj, "mouseout", function(event) {
			var e = DOM.findParentByName(event.target, "td");
			if (!e)
			{
				e = DOM.findParentByName(event.target, "th");
				if (!e) return;
			}
			var parent_row = DOM.findParentByName(e, "tr");
			if (!parent_row) return;
			var parent_table = DOM.findParentByName(parent_row, "table");
			if (!parent_table) return;

			// row de-styling
			DOM.removeClass(parent_row, "highlight");

			// column de-styling
			var ci = e.cellIndex;
			var rows = parent_table.rows;
			if (rows.length == 0)
				rows = parent_table.getElementsByTagName("tr");
			for (var i = 0; i < rows.length; i++)
			{
				var cell = rows[i].cells[ci];
				DOM.removeClass(cell, "highlight");
			}
		} );
	}

	var cells = elTag("td");
	for (var i = 0; i < cells.length; i++)
	{
		addEvents(cells[i]);
	}
	cells = elTag("th");
	for (var i = 0; i < cells.length; i++)
	{
		addEvents(cells[i]);
	}
}
