Ext.ns('CMS');

CMS.Registry = function(init) {

    var registry = init || {};

    return {
        get:    function(name) {
            if(!name) {
                return registry;
            } else if(this.exists(name)) {
                var ns = name.split('.');

                if(ns.length === 1) {
                    return registry[name];
                } else {
                    var o = registry;

                    for(var i = 0; i < ns.length; i++) {
                        if(typeof o[ns[i]] !== 'undefined') {
                            o = o[ns[i]];
                        }
                    }
                }

                return o;
            }

            return undefined;
        },

        set:    function(name, value) {
            if(!name) {
                return false;
            }

            var ns      = name.split('.');
            var exists  = this.exists(name);

            if(ns.length === 1) {
                if(!value && exists) {
                    delete registry[name];
                } else {
                    registry[name] = value;
                }
            } else {
                var rt = ns[0];

                if(typeof registry[rt] == 'undefined') {
                    registry[rt] = {};
                }

                o = registry[rt];

                for(i = 1; i < ns.length;++i) {
                    if(ns[i] == ns[ns.length-1]) {
                        if(!value && exists) {
                            delete o[ns[i]];
                        } else {
                            o[ns[i]] = value;
                        }
                    } else {
                        o[ns[i]] = o[ns[i]] || {};
                        o = o[ns[i]];
                    }
                }
            }

            return true;
        },

        exists: function(name) {
            var ns = name.split('.');

            if(ns.length === 1) {
                return (typeof registry[name] != 'undefined');
            } else {
                var o = registry;

                for(var i = 0; i < ns.length; i++) {
                    if(typeof o != 'undefined') {
                        o = o[ns[i]];
                    }
                }

                return (typeof o != 'undefined');
            }

            return false;
        }
    };
};
