@module BaseJS
 
managed Crisp Namespace

@param       {external:String} name    Dot seperatet Namespace-Path
@param       {AnyItem}         [obj]   Any type of Objects

@this        module:BaseJS
@return      {AnyItem} node of Namespace

@memberOf    module:BaseJS

@tutorial {@link http://opencrisp.wca.at/tutorials/BaseJS_test.html#ns|use ns}

@example
// GET
Crisp.ns('a'); // return reference of a = {}

// SET and GET
Crisp.ns('b', { a: 'A' }); // return reference of b = { a: 'A' }
function( name, obj ) {
            var parts = name.split('.'),
                parent = this,
                length;

            length = parts.length - 1;

            for (var i = 0, m = length; i < m; i += 1) {
                parent[ parts[i] ] = parent[ parts[i] ] || {};
                parent = parent[ parts[i] ];
            }

            if ( obj ) {
                if ( !isType( parent[ parts[length] ], typeNameUndefined ) ) {
                    throw new Error("Can't overwrite '" + name + "' of defined!");
                }

                parent[ parts[length] ] = obj;
            }
            else if ( isType( parent[parts[length]], typeNameUndefined ) ) {
                parent[ parts[length] ] = {};
            }

            return parent[parts[length]];
        }