Zo = {};

Zo._loadFile = function(file)  {
    if(Zo.files_loaded == undefined || typeof Zo.files_loaded == undefined) {
        Zo.files_loaded = {};
    }
    
    if(Zo.files_loaded[file] != undefined && typeof Zo.files_loaded[file] != undefined) {
        return true;
    }
    
    jQuery.ajax({
        async: false,
        type: "GET",
        url: file,
        data: null,
        cache: true,
        success: function() {
            Zo.files_loaded[file] = true;
        },
        dataType: 'script'
    });
};

Zo.load = function(object_name) {
    if(arguments.length > 1) {
        for(var i = 0; i < arguments.length; i++) {
            Zo.load(arguments[i]);
        }
    }
    
    Zo._loadFile('/framework/js/' + object_name + '.js');
}

Zo.loadPlugin = function(plugin_name) {
    if(arguments.length > 1) {
        for(var i = 0; i < arguments.length; i++) {
            Zo.loadPlugin(arguments[i]);
        }
    }
    
    Zo._loadFile('/framework/js/jquery.' + plugin_name + '.js');
}

Zo.loadClass = function(class_name) {
    if(arguments.length > 1) {
        for(var i = 0; i < arguments.length; i++) {
            Zo.loadClass(arguments[i]);
        }
    }
    
    Zo._loadFile('/js/classes/' + class_name + '.js');
}

Zo.loadScript = function(file_name) {
    if(arguments.length > 1) {
        for(var i = 0; i < arguments.length; i++) {
            Zo.loadScript(arguments[i]);
        }
    }
    
    Zo._loadFile(file_name);
}

Zo.get = function(object_name) {
    Zo.load(object_name);
    return new window[object_name](Array.prototype.slice.call(arguments, 1));
}
