var BLIP = {
	Class: {
		namespace: function(name,value) {
			var parts = name.split('.'),
					type,
					part,
					i;

			for (i = 0; i < parts.length; i++) {
				part = parts.slice(0,i+1).join('.');
				eval("type = typeof(" + part + ");");

				if (type == "undefined") {
					eval(part + " = {}");
				}
			}

			eval(name + " = value");
		},

		create: function(name,superClass,constructor,our) {
			var inheritence,
					i;

			BLIP.Class.namespace(name,constructor);

			if (superClass && superClass != Object && superClass != Function) {
				inheritence = function() {};
				inheritence.prototype = superClass.prototype;
				constructor.prototype = new inheritence();
				constructor.prototype.constructor = constructor;
				constructor.baseConstructor = superClass;
				constructor.prototype.superClass = superClass;
				constructor.superClass = superClass.prototype;
			}

			for (i in our) {
				constructor.prototype[i] = our[i];
			}

			return constructor;
		}
	},

	Mixin : {
		create : function(name, mixin) {
			BLIP.Class.namespace(name, mixin);
		}
	}
};

