/**
 * (c) 2005 Primary Brokers S.A. - http://www.primary.com.ar/
 */
function Generator (){
	this.generators = new Array();
	this.debug=0;
	this.generated=false;

	/**
	 * Agrega un objeto al lista de pendientes.
	 */
	this.addGenerator=function(generator){
		this.generators.push(generator);
		if (generator.name) {
			this.log("addGenerator name:  " + generator.name);
		} else if (generator.id) {
			this.log("addGenerator id:  " + generator.id);
		} else {
			this.log("addGenerator:  " + generator);
		} 
		this.log("addGenerator. generators.length:  " + this.generators.length);
		if (this.generated) {
			try {
				generator.generate();
			} catch (e) {
			}
		}
	};

	/**
	 * Inicia los objetos en la lista llamando a [Objeto].generate();
	 */
	this.startGenerators=function() {
		for (i in this.generators) {
			var l = this.generators[i];
			try {
				this.log("startGenerator: " + l.divid);
				l.generate();
			} catch(err) {
				if (l.divid != null) {
					this.log("ERROR generator divid="+l.divid+", err="+err);
				} else {
					this.log("ERROR generator="+l+", err="+err);
					this.removeGenerator(l);
				}
			}
		}
		this.generated=true;
	};

	this.log=function(msg) {
		if (this.debug) {
			pstatus("Generator: " + msg);
		}
	};
		
	this.containsGenerator=function(obj) {
		for (var l in this.generators) {
			if (l==obj) {
				return true;
			}
		}
		return false;
	};
	this.removeGenerator=function(obj) {
		var nlist = new Array();
		for (l in this.generators) {
			var lis=this.generators[l];
			if (lis !=null && lis != obj) {
				nlist.push(lis);
			}
		}
		this.generators=nlist;
		this.log("removeGenerator. generators.length:  " + this.generators.length);
	};
}


