/* Object to create expanding and contracting tables */

function ExpandTable(id,form,max) //constructor function
{
	this.table = document.getElementById(id);
	if(!this.table) return;
	this.max = max || 100;
	this.form = form;
	var rows = this.table.rows;
	var add = toArray(this.form['addbutton[]']);
	var remove = toArray(this.form['removebutton[]']);
	//var name = toArray(this.form['boardname[]']);
	//var title = toArray(this.form['boardtitle[]']);
	for(var i=0;i<rows.length;i++)
	{
		add[i].onclick = this.addRow(this);
		 remove[i].onclick = this.removeRow(this);
	}
	this.checkLimit();
}

ExpandTable.prototype.checkLimit = function(a) // hides add/remove buttons based on one row/max rows
{
	var rows = this.table.rows.length;
	var buttons = this.table.rows[0].getElementsByTagName('BUTTON');
	buttons[1].style.display = (rows == 1 && !a) ? 'none' : 'block';
	for(var i=0;i<rows;i++)
	{
		buttons = this.table.rows[i].getElementsByTagName('BUTTON');
		buttons[0].style.display = (rows == this.max) ? 'none' : 'block';
	}
}

ExpandTable.prototype.removeRow = function(obj) //remove clicked row
{
	return function()
	{
		if(obj.table.rows.length == 1) return true;
		row = this;
		while (row.tagName != 'TR') row = row.parentNode;
		obj.table.removeChild(row);
		obj.checkLimit();
	}
} 

ExpandTable.prototype.addRow = function(obj) //add row directly below clicked row
{
	return function()
	{
		if(obj.table.rows.length == obj.max) return true;
		row = this;
		while (row.tagName != 'TR') row = row.parentNode;
		obj.checkLimit(true);
		var nextTr = obj.table.rows[row.rowIndex] || null;
		var copyTr = row.cloneNode(true);
		copyTr.getElementsByTagName('input')[0].value='';
		obj.addHandlers(copyTr);
		var newTr = obj.table.insertBefore(copyTr,nextTr);

		obj.checkLimit();
	}
	
}

ExpandTable.prototype.addHandlers = function(r) // register event handlers for buttons
{
	var row = r || this.table.rows[0];
	var children = row.getElementsByTagName("*");
	var oldchildren = this.table.rows[0].getElementsByTagName("*");
	for (var i = 0; i < children.length; i++)
	{
		children[i].onclick = oldchildren[i].onclick;
		children[i].onfocus = oldchildren[i].onfocus;
		children[i].onblur = oldchildren[i].onblur;
		children[i].onkeypress = oldchildren[i].onkeypress;
		children[i].onkeyup = oldchildren[i].onkeyup;
	}
}

/* returns obj cast to an array */

function toArray(obj)
{
	return (obj.length && obj.length>1) ? obj : new Array(obj);
}
