var Base = new Class({
  usingComponents: ["Menu","Popup","Collapse","Page_admin","Flickr"],
  components: false,
  runningComponents: false,
  
  initialize: function() 
  {
    this.components = new Array();
    this.runningComponents = new Array();
  },
  
  init: function() 
  {
    this.initializeComponents();
    this.initializeCallbacks();
  },
  
  loadComponents: function()
  {
    for (var i = 0; i < this.usingComponents.length; i++) {
      var name = this.usingComponents[i];
      var elements = $$(".jsComponent"+name);
      if (elements != "") this.loadJS("/lib/js/components/"+name.toLowerCase()+"/"+name+".class.js");
      else this.usingComponents[i] = false;
    }
    this.loadJS("/lib/js/base/bootstrap.js");
  },
  
  initializeComponents: function()
  {
    for (var i = 0; i < this.usingComponents.length; i++) {
      var name = this.usingComponents[i];
      var elements = $$(".jsComponent"+name);
      if (elements != "") {
        for (var j = 0; j < elements.length; j++) {
          var componentId = (i+1)*j;
          if (typeof(this.runningComponents[name]) != "object") 
            this.runningComponents[name] = new Array();
          this.components[elements[j].id] = eval("new "+name+"('"+elements[j].id+"')");
          this.components[elements[j].id].run(elements[j]);
          this.runningComponents[name][elements[j].id] = this.components[elements[j].id]
        }
      }
    }
  },
  
  initializeCallbacks: function()
  {
    window.addEvent('resize', function() { base.repaint(); });
  },
  
  repaint: function()
  {
    for (var id in this.components) {
      if (typeof(this.components[id]) == "object") {
        this.components[id].repaint();
      }
    }
  },
  
  loadJS: function( jsFile )
  {
    var script = new Element("script", {
      "type": "text/javascript",
      "src": jsFile
    });

    $(document).getElement("head").appendChild(script);
  },
  
  getWindowSize: function ()
  {
    return {
      "width": (window.getWidth()<=0?document.body.clientWidth:window.getWidth()),
      "height": (window.getHeight()<=0?document.body.clientHeight:window.getHeight())
    }
  }
});

/* Initialize Javascript framework */
var base;

window.addEvent('domready', function() { base = new Base(); base.loadComponents(); });
