/**
 * @author Artur Bilski
 */
var Initializer = Class.create({
  initialize: function(klass, variable) {
    this._class = klass;
    this._var = variable;
    window[this._var] = null;
    this._class.callbacks = [];
    this._class.callWhenReady = this.callWhenReadyTemplate.bind(this);
  },
  
  fireCallbacks: function() {
    var obj = window[this._var] = new this._class();
    
    this._class.callbacks.invoke('call', null, obj);
  },
  
  callWhenReadyTemplate: function(f) {
    var obj = window[this._var];
    
    if (obj) {
      f(obj);
    }
    else {
      this._class.callbacks.push(f);
    }
  }
});

Initializer.instances = new Array();

Initializer.run = function(class_, var_) {
  Initializer.instances.push(new Initializer(class_, var_));
};

Initializer.onWindowLoad = function() {
  Initializer.instances.invoke('fireCallbacks');
};

Event.observe(window, 'load', Initializer.onWindowLoad);
