/*
	Ejemplo de Core
*/
var Core = function(){
	
		// Variable privadas
    var modules = {};
    
    // Cremos la instancia
		function createInstance(moduleID){
			var instance = modules[moduleID].creator(new Sandbox(this)),
			name, method;
			
			if (!debug) {
				for (name in instance){
					method = instance[name];
					if (typeof method == "function") {
						instance[name] = function(name, method) {
							return function(){
								try { return method.apply(this, arguments);	}	
								catch(ex) { log(1, name + "(): " + ex.message);	}
							}							
							
						}
					}
				}
			}
			return instance;
		}

    // Método públicos
    return {
        register: function(moduleID, creator) {
            modules[moduleID] = {
                    creator: creator,
                    instance: null
                };   
        },
        start: function(moduleID) {
            modules[moduleID].instance = createInstance(moduleID);
            modules[moduleID].instance.init();
        },
        stop: function(moduleID){
            var data = modules[moduleID];
            if (data.instance) {
                data.instance.destroy();
                data.instance = null;   
            }   
        },
       startAll: function(){
       	for (var moduleID in modules) {
       		if (modules.hasOwnProperty(moduleID)) {
       			this.start(moduleID);
       		}		
       	}
       },
       stopAll: function() {
       	for (var moduleID in modules) {
       		if (modules.hasOwnProperty(moduleID)) {
       			this.stop(moduleID);
       		}		
       	}
       },
       getModules: function(){
       	return modules;	
       }
    };   
}();


/*
	Ejemplo de SandBox
*/
var Sandbox = function() {
	// Variables privadas
	var priv = "Privado";

	// Métodos públicos
	return {
		alert: function(str){
			alert(str + priv);
		},
		console: function(str){
			console.log(str);	
		},
		notify: function(opt){
			// Comprobaciones previas 
			// ....
			$("#notify #title").text(opt.title);
			$("#notify #content").html(opt.content);
		}
	}	
	
};



/*
	Ejemplo de Módulo
*/
Core.register("hola-mundo", function(sandbox){
	// Variables privadas
	var priv = "Privada";

	// Método privados
	return {
		init: function(){
			try{
				sandbox.console("iniciamos el módulo");
			} catch(ex) {
				alert("No se ha encontrado sandbox");	
			}
		},
		destroy: function(){
			// destructor
		}
	};
});
