(function () {
/**
 * MangoSpring JS Framework
 * Copyright (c) 2008, MangoSpring Technologies
 * All rights reserved.
 */


// Top Level Namespace 
if (typeof(MangoSpring) === "undefined") {
    MangoSpring = {};
}


/**
 * Utility method to register a namespace under global namespace to avoid
 * naming conflicts that can arise with the use of thirdparty scripts later.
 *
 * @method register
 * @return {Object}
 */
MangoSpring.namespace = function () {
    if (arguments.length == 0) { return; }
    
    var namespace = {};
    for (var i = 0, a = arguments; i < a.length; i = i + 1) {
        var nslvl = a[i].split(".");
        namespace = MangoSpring;

        for (var j=(nslvl[0] == 'MangoSpring' ? 1 : 0); j < a[i].length; j = j + 1) {
            namespace[nslvl[j]] = namespace[nslvl[j]] || {};
            namespace = namespace[nslvl[j]];
        }
    }

    return namespace;
};

/**
* Registers a module with the given namespace
* @param {String} module - name of the module to register
* @param {Object} myClass
* @return {Object}
*/
MangoSpring.register = function (module, myClass, ns) {
    var namespace = MangoSpring[ns];

    if (!namespace && ns) {
        namespace = MangoSpring.namespace(ns);
    }
    
    if (namespace && !namespace[module]) {
        namespace[module] = myClass || {};
    } else if (!namespace && !MangoSpring[module]) {
        MangoSpring[module] = myClass;
    }
    
    return namespace;
}


/**
* Method to provide logging facility in Firebug
* @param {String} message
* @return {void}
*/
MangoSpring.log = function (message) {
    if (YAHOO.widget && YAHOO.widget.LogReader) {
        YAHOO.log(message);
    } else if (window.console) {
        window.console.log(message);
    }
}


//register ui, util namespace
MangoSpring.namespace("ui", "util", "config", "net", "model", "event");

})();
