/*
Copyright (c) 2000 - Incordia AB, site: http://www.incordia.se, email: mailto:info@incordia.se
*/

function pamatrix(pam)
{
	this.cols = pam_cols;
	this.rows = pam_rows;

	this.getdefault = pam_getdefault;

	this.empty = pam_empty;
	this.clear = pam_clear;

	this.set = pam_set;
	this.get = pam_get;
	
	this.addrow = pam_addrow;
	this.swaprow = pam_swaprow;
	this.delrow = pam_delrow;
	
	this.addcol = pam_addcol;
	this.swapcol = pam_swapcol;
	this.delcol = pam_delcol;

	this.dump = pam_dump;

	if(pam == "")
		this.clear();
	else
	{
		var ra = pam.split("^");
		for(var r = 0; r < ra.length; r++) ra[r] = ra[r].split("|");
		this.m = ra;
	}
}
function pam_getdefault()
{
	var r, c, a, d = null;

	for(r = 0; r < this.rows(); r++)
	{
		for(c = 0; c < this.cols(); c++)
		{
			a = this.get(r, c).split(":");

			if(a[0] != "" && d == null)
				d = new Array(r, c);

			if(a[2] == 1) return new Array(r, c);
		}
	}
	return d;
}
function pam_empty()
{
	return (this.m == null);
}
function pam_clear()
{
	this.m = null;
}
function pam_set(r, c, e)
{
	this.m[r][c] = e;
}
function pam_get(r, c)
{
	return this.m[r][c];
}
function pam_cols()
{
	return (this.empty() ? 0 : this.m[0].length);
}
function pam_rows()
{
	return (this.empty() ? 0 : this.m.length);
}
function pam_swaprow(s, t)
{
	var tmp = this.m[t];

	this.m[t] = this.m[s];
	this.m[s] = tmp;
}
function pam_delrow(i)
{
	if(this.empty())
		return;
	else if(this.rows() == 1)
		this.clear();
	else if(i <= 0)
		this.m = this.m.slice(1, this.m.length);
	else if(i >= this.m.length - 1)
		this.m = this.m.slice(0, this.m.length - 1);
	else
		this.m = this.m.slice(0, i).concat(this.m.slice(i+1, this.m.length));
}
function pam_addrow(i, e)
{
	if(this.empty())
	{
		this.m = new Array(new Array(1));;
		this.set(0,0,e);
		return;
	}

	var ir = new Array(Array(this.m[0].length));

	for(var r = 0; r < ir[0].length; r++) ir[0][r] = e;

	if(i <= 0)
		this.m = ir.concat(this.m);
	else if(i >= this.m.length)
		this.m = this.m.concat(ir);
	else
		this.m = this.m.slice(0, i).concat(ir).concat(this.m.slice(i, this.m.length));
}
function pam_swapcol(s, t)
{
	var tmp;

	for(var r = 0; r < this.m.length; r++)
	{
		tmp = this.m[r][t];
		this.m[r][t] = this.m[r][s];
		this.m[r][s] = tmp;
	}
}
function pam_delcol(i)
{
	var r;
	var nr = this.rows();
	var nc = this.cols();

	if(this.empty())
		return;
	else if(nc == 1)
		this.clear();
	else if(i <= 0)
	{
		for(r = 0; r < nr; r++)
			this.m[r] = this.m[r].slice(1, nc);
	}
	else if(i >= nc - 1)
	{
		for(r = 0; r < nr; r++)
			this.m[r] = this.m[r].slice(0, nc - 1);
	}
	else
	{
		for(r = 0; r < nr; r++)
			this.m[r] = this.m[r].slice(0, i).concat(this.m[r].slice(i + 1, nc));
	}
}
function pam_addcol(i, e)
{
	if(this.empty())
	{
		this.m = new Array(new Array(1));
		this.set(0, 0, e);
		return;
	}

	var ir = Array(1)
	var r;
	var nr = this.rows();
	var nc = this.cols();

	ir[0] = e;

	if(i <= 0)
	{
		for(r = 0; r < nr; r++)
			this.m[r] = ir.concat(this.m[r]);
	}
	else if(i >= nc)
	{
		for(r = 0; r < nr; r++)
			this.m[r] = this.m[r].concat(ir);
	}
	else
	{
		for(r = 0; r < nr; r++)
			this.m[r] = this.m[r].slice(0, i).concat(ir).concat(this.m[r].slice(i, nc));
	}
}
function pam_dump()
{
	if(this.empty()) return "";
	var s = "";
	for(var r = 0; r < this.m.length; r++) s += this.m[r].join("|") + "^";
	return s.slice(0, s.length-1);
}
