/* Gestisce le operazioni che riguardano le classi */
var Class = {
    /* Crea una nuova classe con il tipo e le caratteristiche specificate */
    create: function(type, description) {
        // Recupera il costruttore eventualmente specificato e la classe base da cui ereditare;
        var constructor = description[type] || new Function();
        var base = (description.inherits || Object);
        
        // Aggiunge al costruttore i membri del prototipo dell'oggetto base
        for (var property in base.prototype) {
            constructor.prototype[property] = base.prototype[property];
        }
        
        // Imposta il tipo specifico nel costruttore
        constructor.prototype.type = type;
        
        // Imposta la classe base eventualmente specificata nel costruttore
        constructor.prototype.base = function() { return base.apply(this, arguments); };
        
        // Aggiunge tutti i membri d'istanza specificati al costruttore
        for (var member in description.instanceMembers) {
            constructor.prototype[member] = description.instanceMembers[member];
        }
        
        // Aggiunge tutti i membri di classe specificati al costruttore
        for (var member in description.classMembers) {
            constructor[member] = description.classMembers[member];
        }

        // Registra il costruttore nella pagina
        eval(type + ' = constructor;');
    },
	
	/* Attacca le caratteristiche di un oggetto a un elemento del DOM */
	attach: function(element, object) {
		for (var property in object) {
			element[property] = object[property];
		}
	}
};