//	cTable Javascript - Copyright (C) 2007-2010 Charles A Upsdell, All Rights Reserved; www.upsdell.com
//
aModule.has ( 'cTable' );


// CLASSES

cTable.prototype.$name = 'cTable';


function cTable ( sName )
{
this.name = sName || 'anon';
this.table = new Array();
}


cTable.prototype.addColumn = function ( arglist )
{
var $name = 'addColumn';
if ( (this.table.length > 0) && (this.table.length != arguments.length) )
	{ this.$name.alert( $name, 'column length mismatch', this.name, this.table.length, arguments.length ); return; }
if ( this.table.length == 0 )
  {
	this.table.length = arguments.length;
	for ( var r = 0; r < arguments.length; ++r )
		this.table[r] = new Array();
  }
for ( var r = 0; r < arguments.length; ++r )
	this.table[r].push( arguments[r] );
}


cTable.prototype.addRow = function ( arglist )
{
var $name = 'addRow';
var nColumns = arguments.length;
var nRow = this.table.length;
if ( (nRow > 0) && (this.table[0].length != nColumns) )
	{ this.$name.alert( $name, 'column length mismatch', this.name, this.table[0].length, arguments.length ); return; }
this.table.push( new Array(nColumns) );
for ( var c = 0; c < nColumns; ++c )
	this.table[nRow][c] = arguments[c];
}


cTable.prototype.getCell = function ( r, c )
{
var $name = 'getCell';
if ( arguments.length == 0 )
	return undefined;
c = c || 0;
if ( (r >= 0) && (r < this.table.length) && (c >= 0) && (c < this.table[0].length) )
	return this.table[r][c];
else
	return undefined;
}


cTable.prototype.getColumn = function ( c )
{
var $name = 'getColumn';
c = c || 0;
if ( (c < 0) || (this.table.length == 0) || (c >= this.table[0].length) )
	return undefined;
else
  {
	var column = new Array( this.table.length );
	for ( var r = 0; r < this.table.length; ++r )
		column[r] = this.table[r][c];
	return ( column );
  }
}


cTable.prototype.getRow = function ( r )
{
var $name = 'getRow';
if ( (arguments.length == 0) || (r < 0) || (r >= this.table.length) )
	return undefined;
else
	return this.table[r];
}


cTable.prototype.indexOf = function ( value, c )
{
var $name = 'indexOf';
if ( arguments.length == 0 )
	return -1;
c = c || 0;
for ( var r = 0; r < this.table.length; ++r )
  {
	if ( value == this.table[r][c] )
		return r;
  }
return -1;
}


cTable.prototype.indexOfUs = function ( value, c )
{
var $name = 'indexOfUs';
if ( arguments.length == 0 )
	return -1;
c = c || 0;
value = value.replace(/_/g,' ');
for ( var r = 0; r < this.table.length; ++r )
  {
	if ( value == this.table[r][c].replace(/_/g,' ') )
		return r;
  }
return -1;
}


cTable.prototype.valueOf = function ( value, c1, c2, isUs, isMap )
{
var $name = 'valueOf';
if ( arguments.length == 0 )
	return undefined;
if ( c1 === undefined )
	c1 = 0;
if ( c2 === undefined )
	c2 = (c1 == 0) ? 1 : c1 - 1;
if ( isUs === undefined )
	isUs = false;
if ( isMap === undefined )
	isMap = false;
var r;
if ( isUs )
	r = this.indexOfUs( value, c1 );
else
	r = this.indexOf( value, c1 );
if ( (r == -1) || (c2 < 0) || (c2 >= this.table[0].length) )
	return isMap ? value : undefined;
else
	return this.table[r][c2];
}

