if (!nimble) {

    var nimble              = function() { };

    nimble.gettext          = function(text) { return gettext(text); };
    nimble.loadEvent        = new YAHOO.util.CustomEvent("load");
    nimble.beforeLoadEvent  = new YAHOO.util.CustomEvent("beforeLoad");
    nimble.onLoad           = function(call) {
        nimble.loadEvent.subscribe(call);
    };
    nimble.beforeLoad       = function(call) {
        nimble.beforeLoadEvent.subscribe(call);
    };
    nimble.fireLoad         = function() {
        nimble.content      = document.getElementById('content');
        nimble.beforeLoadEvent.fire();
        nimble.loadEvent.fire();
    }

    /*
     * Loader functions
     * Unifies yui-loader events and functions.
     */

    nimble.loader = function() { };
    nimble.loader._loader   = new YAHOO.util.YUILoader({ base: '/site_media/yui/', require: [], skin: { defaultSkin:'nimble', base: '../assets/skins/' } });
    nimble.loader._loader.addModule( { name: 'google', type: 'js', fullpath: 'http://www.google.com/jsapi?key=ABQIAAAAVPUrKKXrDX-oXAOVpFS9UBRshBzYtAvWC6mqgLnRDNa7R325yRSNseZ7_KmaSj6g7SM1PevhFX68_A', varName: 'google'} );
    nimble.loader._loader.addModule( { name: 'nimble-translate', type: 'js', fullpath: '/translate.js' } );
    nimble.loader._loader.addModule( { name: 'nimble-form', type: 'js', fullpath: '/site_media/js/nimble-form.js', varName: 'nimble.form', requires: ['dom', 'connection', 'nimble-panel'] } );
    nimble.loader._loader.addModule( { name: 'nimble-panel', type: 'js', fullpath: '/site_media/js/nimble-panel.js', varName: 'nimble.panel', requires: ['dom', 'nimble-translate', 'container', 'animation', 'dragdrop'] } );
    nimble.loader._loader.addModule( { name: 'nimble-list',  type: 'js', fullpath: '/site_media/js/nimble-list.js', varName: 'nimble.list', requires: ['dom', 'connection'] } );
    nimble.loader._loader.addModule( { name: 'nimble-dragdrop', type: 'js', fullpath: '/site_media/js/nimble-dragdrop.js', varName: 'nimble.dragdrop', requires: ['nimble-list', 'animation', 'dragdrop', ] } );
    nimble.loader._loader.addModule( { name: 'nimble-menu', type: 'js', fullpath: '/site_media/js/nimble-menu.js', varName: 'nimble.menu', requires: ['dom', 'animation'] } );
    nimble.loader._loader.addModule( { name: 'nimble-autocomplete', type: 'js', fullpath: '/site_media/js/nimble-autocomplete.js', varName: 'nimble.autocomplete', requires: ['dom', 'json', 'connection', 'autocomplete'] } );
    nimble.loader._loader.addModule( { name: 'nimble-widget', type: 'js', fullpath: '/site_media/js/nimble-widget.js', varName: 'nimble.widget', requires: ['dom'] } );
//    nimble.loader._loader.filter="DEBUG";

    nimble.loader.require   = function(element) { return nimble.loader._loader.require(element);};
    nimble.loader.insert    = function() { return nimble.loader._loader.insert(); };
    nimble.loader._loader.onSuccess = function() { if (YAHOO.util.Event.DOMReady) { nimble.fireLoad(); } else { YAHOO.util.Event.onDOMReady(function(ev) { nimble.fireLoad(); }); } };
    nimble.loader._loader.onFailure = function(e) { alert('Error loading modules: ' + e.msg); };

}

