COAL.ScriptLoader = {
  
  load_count: 0,
  scripts_array: null,
  final_callback: null,
  
  init: function( scripts, callback ) {
    this.scripts_array = scripts;
    this.final_callback = callback;
    this.loadNextScript(this);
    
  },
  loadNextScript: function(context) {
    if(context.load_count < context.scripts_array.length) {
      context.loadScript( context.scripts_array[context.load_count],context.loadNextScript, context );
      context.load_count = context.load_count + 1;
    } else {
      context.final_callback();
    }
  },
  loadScript: function( url, callback, context ){
      var script = document.createElement("script")
      script.type = "text/javascript";
      if (script.readyState){  //IE
          script.onreadystatechange = function(){
              if (script.readyState == "loaded" ||
                      script.readyState == "complete"){
                  script.onreadystatechange = null;
                  callback(context);
              }
          };
      } else {  //Others
          script.onload = function(){
              callback(context);
          };
      }
      script.src = '/javascripts/' + url;
      document.getElementsByTagName("head")[0].appendChild(script);
  }
}