// An antMarcher can move a load of ants also control elements with them
function antmarcher()
{
	this.ants = new Array();
	this.elements = new Array();
	this.ereverseindex = new Array();
	this.addAnt = am_addAnt;
	this.addBoundAnt = am_addBoundAnt;
	this.marchAnts = am_marchAnts;
	this.bufferElementPos = am_bufferElementPos;
	this.paintAnts = am_paintAnts;
	this.simpleUpdate = am_simpleUpdate;
	this.showElements = am_showElements;
	this.hideElements = am_hideElements;
}

function am_addAnt(ant)
{
	var al = this.ants.length;
	this.ants[this.ants.length] = ant;
}

function am_addBoundAnt(ant, element)
{
	this.addAnt(ant);
	var el = this.elements.length;
	this.elements[el] = new Array('element', 'nextpos');
	this.elements[el]['element'] = element;
	ant.onstep = this.bufferElementPos;
	ant.setExtraData('element', element);
}

function am_bufferElementPos(ant, path)
{
	// All this really does is put queue the next position
	// into the ants extradata
	ant.setExtraData('nextpos', ant.getPathPosition());
}

function am_marchAnts()
{
	var al = this.ants.length;
	for(i = 0; i < al; i++)
	{
		var ant = this.ants[i];
		ant.step();
	}
}

function am_paintAnts()
{
	var al = this.ants.length;
	for(i = 0; i < al; i++)
	{
		var ant = this.ants[i];
		var data = ant.getExtraData();
		var element = data['element'];
		var nextpos = data['nextpos'];
		element.style.left = nextpos['x'] + 'px';
		element.style.top = nextpos['y'] + 'px';
	}

}

function am_showElements()
{
	var al = this.ants.length;
	for(i = 0; i < al; i++)
	{
		var ant = this.ants[i];
		var data = ant.getExtraData();
		var element = data['element'];
		element.style.show = 'show';
	}
}

function am_hideElements()
{
	var al = this.ants.length;
	for(i = 0; i < al; i++)
	{
		var ant = this.ants[i];
		var data = ant.getExtraData();
		var element = data['element'];
		element.style.show = 'hide';
	}
}

function am_simpleUpdate()
{
	// Convienience function; if your only doing something simple this'll do
	this.marchAnts();
	this.paintAnts();
}