module.exports = CollectingHandler;

function CollectingHandler(cbs){

this._cbs = cbs || {};
this.events = [];

}

var EVENTS = require(“./”).EVENTS; Object.keys(EVENTS).forEach(function(name){

if(EVENTS[name] === 0){
        name = "on" + name;
        CollectingHandler.prototype[name] = function(){
                this.events.push([name]);
                if(this._cbs[name]) this._cbs[name]();
        };
} else if(EVENTS[name] === 1){
        name = "on" + name;
        CollectingHandler.prototype[name] = function(a){
                this.events.push([name, a]);
                if(this._cbs[name]) this._cbs[name](a);
        };
} else if(EVENTS[name] === 2){
        name = "on" + name;
        CollectingHandler.prototype[name] = function(a, b){
                this.events.push([name, a, b]);
                if(this._cbs[name]) this._cbs[name](a, b);
        };
} else {
        throw Error("wrong number of arguments");
}

});

CollectingHandler.prototype.onreset = function(){

this.events = [];
if(this._cbs.onreset) this._cbs.onreset();

};

CollectingHandler.prototype.restart = function(){

if(this._cbs.onreset) this._cbs.onreset();

for(var i = 0, len = this.events.length; i < len; i++){
        if(this._cbs[this.events[i][0]]){

                var num = this.events[i].length;

                if(num === 1){
                        this._cbs[this.events[i][0]]();
                } else if(num === 2){
                        this._cbs[this.events[i][0]](this.events[i][1]);
                } else {
                        this._cbs[this.events[i][0]](this.events[i][1], this.events[i][2]);
                }
        }
}

};