var LibraryManager = Class.create({ 
    initialize: function(){ 
        var carpetaBase = "includes/"; 
        this._rutaArchivos = new Array(); // ruta según tipo de archivo (manejado por extensión) 
        this._rutaArchivos["css"] = carpetaBase + "css/"; 
        this._rutaArchivos["js"] = carpetaBase + "js/"; 
        this._archivosCargandose = new Array(); // archivos que actualmente se están cargando 
        this._archivosCargados = new Array(); // archivos que ya se han cargado 
    }, 
    initialize: function(carpetaBase){ 
        this._rutaArchivos = new Array(); // ruta según tipo de archivo (manejado por extensión) 
        this._rutaArchivos["css"] = carpetaBase + "css/"; 
        this._rutaArchivos["js"] = carpetaBase + "js/"; 
        this._archivosCargandose = new Array(); // archivos que actualmente se están cargando 
        this._archivosCargados = new Array(); // archivos que ya se han cargado 
    },
    initialize: function(rutaCss, rutaJs){ 
        this._rutaArchivos = new Array(); // ruta según tipo de archivo (manejado por extensión) 
        this._rutaArchivos["css"] = rutaCss; 
        this._rutaArchivos["js"] = rutaJs; 
        this._archivosCargandose = new Array(); // archivos que actualmente se están cargando 
        this._archivosCargados = new Array(); // archivos que ya se han cargado 
    }, 
   /** 
    * Método reiterativo. Carga un archivo por cada llamada. 
    * @param {Object} libreria (Array) -> Listado de archivos a cagar 
    * @param {Object} callback (Function) -> Se llamará esta función al terminar la carga de todos los archivos 
    */ 
    load: function(libreria, callback){ 
        if (libreria.length == 0)  
            callback.call(); 
        else { 
            // si no se ha cargado 
            if (!this._archivosCargados[libreria.first()]) { 
                var scope = this; 
                // si ya se está cargando, esperar a que esté listo antes de continuar 
                // (ésto es útil en caso de cargar múltiples librerías a la vez que requieran ese mismo archivo) 
                if (this._archivosCargandose[libreria.first()]) { 
                    var interval = setInterval(function(){ 
                        if (scope._archivosCargados[libreria.first()]) { 
                            libreria.shift(); 
                            clearInterval(interval); 
                            scope.load(libreria, callback); 
                        } 
                    }, 10); 
                } 
                else { 
                    var tipo = libreria.first().split(".").last(); 
                    this._archivosCargandose[libreria.first()] = true; 
                    switch (tipo) { 
                        case "css": 
                            var nodoCss = document.createElement('link'); 
                            with (nodoCss) { 
                                type = 'text/css'; 
                                rel = 'stylesheet'; 
                                media = 'screen'; 
                            } 
                            nodoCss.href = this._rutaArchivos[tipo] + libreria.first(); 
                            document.getElementsByTagName("head")[0].appendChild(nodoCss); 
                            this._archivosCargados[libreria.first()] = true; 
                            libreria.shift(); 
                            this.load(libreria, callback); 
                            break; 
                        case "js": 
                            new Ajax.Request(this._rutaArchivos[tipo] + libreria.first(), { 
                                method: 'get', 
                                onComplete: function(){ 
                                    scope._archivosCargados[libreria.first()] = true; 
                                    libreria.shift(); 
                                    scope.load(libreria, callback); 
                                } 
                            }); 
                            break; 
                        default: 
                            libreria.shift(); 
                            this.load(libreria, callback); 
                    } 
                } 
            } 
            // si ya se ha cargado 
            else { 
                libreria.shift(); 
                this.load(libreria, callback); 
            } 
        } 
    }, 
   /** 
    * Método reiterativo. Carga un archivo por cada llamada. 
    * @param {Object} libreria (Array) -> Listado de archivos a cagar
    */ 
    load: function(libreria){ 
        if (libreria.length != 0) { 
            // si no se ha cargado 
            if (!this._archivosCargados[libreria.first()]) { 
                var scope = this; 
                // si ya se está cargando, esperar a que esté listo antes de continuar 
                // (ésto es útil en caso de cargar múltiples librerías a la vez que requieran ese mismo archivo) 
                if (this._archivosCargandose[libreria.first()]) { 
                    var interval = setInterval(function(){ 
                        if (scope._archivosCargados[libreria.first()]) { 
                            libreria.shift(); 
                            clearInterval(interval); 
                            scope.load(libreria); 
                        } 
                    }, 10); 
                } 
                else { 
                    var tipo = libreria.first().split(".").last(); 
                    this._archivosCargandose[libreria.first()] = true; 
                    switch (tipo) { 
                        case "css": 
                            var nodoCss = document.createElement('link'); 
                            with (nodoCss) { 
                                type = 'text/css'; 
                                rel = 'stylesheet'; 
                                media = 'screen'; 
                            } 
                            nodoCss.href = this._rutaArchivos[tipo] + libreria.first(); 
                            document.getElementsByTagName("head")[0].appendChild(nodoCss); 
                            this._archivosCargados[libreria.first()] = true; 
                            libreria.shift(); 
                            this.load(libreria); 
                            break; 
                        case "js": 
                            new Ajax.Request(this._rutaArchivos[tipo] + libreria.first(), { 
                                method: 'get', 
                                onComplete: function(){ 
                                    scope._archivosCargados[libreria.first()] = true; 
                                    libreria.shift(); 
                                    scope.load(libreria); 
                                } 
                            }); 
                            break; 
                        default: 
                            libreria.shift(); 
                            this.load(libreria); 
                    } 
                } 
            } 
            // si ya se ha cargado 
            else { 
                libreria.shift(); 
                this.load(libreria); 
            } 
        } 
    }  
}); 
//var libraryManager = new LibraryManager(); 