/**
 *
 * Copyright (c) 2007 by Matthew Shwartz Design Studio.
 *
 *   -- Crafted with pride by Stephan Florquin <stephan@kreaflux.com>.
 */

/**
 * Namespace manager.
 */
var Namespace = new Class({
    /**
     * Creates or extends a namespace.
     */
    initialize: function(namespace, object) {
		if(this.isNamespace(namespace)) {
			this.extendNamespace(namespace, object);
		}
		else {
			this.createNamespace(namespace);
			this.setNamespace(namespace, object);
		}
    },
	/**
	 * Returns true if the string is a namespace.
	 */
	isNamespace: function(namespace) {
		try {
			var value = eval(namespace);
			return typeof value != 'undefined';
		}
		catch(e) {
			return false;	
		}
    },
	/**
     * Creates a new namespace.
     */
	createNamespace: function(namespace) {
		var parts = namespace.split('.');
		var currNamespace = '';
		parts.each((function(part) {
			if(currNamespace) {
				currNamespace += '.';
			}
			currNamespace += part;
			if(!this.isNamespace(currNamespace)) {
				this.setNamespace(currNamespace, {});
			}
		}).bind(this));
	},
	/**
     * Extends a existing namespace.
     */
	extendNamespace: function(namespace, object) {
		Object.extend(eval(namespace), object);
	},
	/**
     * Assigns a namespace a value.
     */
	setNamespace: function(namespace, object) {
		eval(namespace + ' = object');
	}
});