var ChainsObserver = new Class({

	Implements: [Events],

	initialize: function(){
		this.chains = [];
	},

 	add: function(chain){
		this.chains.push(chain);
		chain.addEvent('chainComplete', this.chainComplete.bind(this));
	},

	chainComplete: function(args){
	  //console.log('chainsWatcher: chainComplete for args: ', args);
		this.chains.each(function(chain, index){
			//console.log('chains index: ', index, ' met length: ', this.chains.length);
			if (this.chains[index] != null && this.chains[index].isComplete()) this.chains.splice(index, 1);
		}.bind(this));

		if (this.chains.length <= 0) this.fireEvent('chainsCompleted');
	},

	cancelChains: function(){
		this.chains.each(function(chain, index){
			if (this.chains[index] != null){
				this.chains[index].removeEvents();
				this.chains[index].stop();
			}
		}.bind(this));
		this.reset();
  },

	reset: function(){
		this.chains = [];
	}

});
