var TARGET_CLASS_NAME = "Body";
var ROW_CLASS_NAME = "Row";
var CELL_CLASS_NAME = "Cell";
var EVEN_CLASS_NAME = "";
var ODD_CLASS_NAME = "Alt";
var FIRST_CLASS_NAME = "First";
var LAST_CLASS_NAME = "Last";
var COUNT_CLASS_NAME = "Count";
function classifyTablesByContainerClass(containerClass) 
{
	xGetElementsByClassName(containerClass, document, '*', classifyTablesByContainer);
}

function classifyTablesByContainer(el) 
{
	var tables = xGetElementsByTagName('TABLE',el);
	for ( var i = 0; i < tables.length; i++ ) {
		classifyTableSections( tables[i] );
	}
}

function classifyTables(targetTableClass) {
	var tables = getElementsByClass(targetTableClass, "table", document);
	for ( var i = 0; i < tables.length; i++ ) {
		classifyTableSections( tables[i] );
	}
}

function classifyTableSections(tableElem) {
	var thead = tableElem.getElementsByTagName("thead");
	if ( thead.length > 0 ) {
		classifyRows( thead[0] );
	}
	var tbodies = tableElem.getElementsByTagName("tbody");
	for ( var i = 0; i < tbodies.length; i++ ) {
		classifyRows( tbodies[i] );
	}
	var tfoot = tableElem.getElementsByTagName("tfoot");
	if ( tfoot.length > 0 ) {
		classifyRows( tfoot[0] );
	}
}

function classifyRows(tableSection) {
	var rows = tableSection.rows;
	for ( var i = 0; i < rows.length; i++ )
	{
		addClassNames(rows[i], i%2==0, i==0, i==rows.length-1, ROW_CLASS_NAME, rows.length, i );
		classifyCells(rows[i]);
	}
}

function classifyCells(row) {
	var cells = row.cells;
	for ( var i = 0; i < cells.length; i++ )
		addClassNames(cells[i], i%2==0, i==0, i==cells.length-1, CELL_CLASS_NAME, cells.length, i );
}

function addClassNames(elem, isEven, isFirst, isLast, className, count, index ) {
	addClassName( elem, className );
	addClassName( elem, className+(1+index) );
	addClassName( elem, COUNT_CLASS_NAME+count );
	addClassName( elem, isEven ? EVEN_CLASS_NAME : ODD_CLASS_NAME );
	if ( isFirst )
		addClassName( elem, FIRST_CLASS_NAME );
	if ( isLast ) 
		addClassName( elem, LAST_CLASS_NAME );
}

