var sys = new function() {
    var loaded = new Array();
    function _doLoad(file) {
        document.write('<scr' + 'ipt type="text/javascript" src="' + file + '"><\/scr' + 'ipt>');
    }

    /**
     * Load javascript file for module.
     */
    this.LoadModule = function(moduleName) {
        switch (moduleName) {
        case 'swfobject':
            if (typeof loaded['swfobject'] == 'undefined') {
                _doLoad(sys.Config.urlScriptRoot + 'system/js/_External/swfobject.js');
                loaded['swfobject'] = true;
            }
            break;
        case 'swfupload':
            if (typeof loaded['swfupload'] == 'undefined') {
                _doLoad(sys.Config.urlScriptRoot + 'system/js/_External/swfupload.js');
                loaded['swfupload'] = true;
            }
            break;
        case 'swfupload.queue':
            if (typeof loaded['swfupload.queue'] == 'undefined') {
                _doLoad(sys.Config.urlScriptRoot + 'system/js/_External/swfupload.queue.js');
                loaded['swfupload.queue'] = true;
            }
            break;
        case 'swfupload.speed':
            if (typeof loaded['swfupload.speed'] == 'undefined') {
                _doLoad(sys.Config.urlScriptRoot + 'system/js/_External/swfupload.speed.js');
                loaded['swfupload.speed'] = true;
            }
            break;
        case 'jquery':
            if (typeof loaded['jquery'] == 'undefined') {
                _doLoad(sys.Config.urlScriptRoot + 'system/js/_External/jquery.js');
                loaded['jquery'] = true;
            }
            break;
        case 'thickbox':
            if (typeof loaded['thickbox'] == 'undefined') {
                _doLoad(sys.Config.urlScriptRoot + 'system/js/_External/thickbox.js');
                loaded['thickbox'] = true;
            }
            break;
        default:
            var module_sc = moduleName.charAt(1);
            var module = "";

            switch (module_sc) {
            case 'm':
                module = 'system';
                break;
            case 'p':
                module = 'presentation';
                break;
            case 'u':
                module = 'user';
                break;
            }
            if (module != "") {
                var reg = /s\w([A-Z][^A-Z]*).*/;
                var matches = moduleName.match(reg);
                if (typeof matches[1] != undefined && matches[1]) {
                    var path = sys.Config.urlScriptRoot + module + '/js/' + matches[1] + '/' + moduleName + '.js';
                    _doLoad(path);
                    return true;
                }

                // sys.Debug.DumpAlert(matches);
            }
            break;
        alert('Cannot process module "' + moduleName + '"');
        return false;
    }
}   ;

    this.inheritPrototype = function(subType, superType) {
        var prototype = object(superType.prototype); // create object
        prototype.constructor = subType; // augment object
        subType.prototype = prototype; // assign object
    };
};

sys.Config = new function() {
    this.urlScriptRoot = "/";
    this.urlAjax = "/system.php?ajax=1";

    this.lang = '';
};

sys.Debug = new function() {
    var dump_max_level = 3;
    this.Dump = function(arr, level) {
        var dumped_text = "";
        // if(!level) level = 2;

        // The padding given at the beginning of the line.
        var level_padding = "";
        for ( var j = 0; j < level + 1; j++)
            level_padding += "    ";

        if (typeof (arr) == 'object') { // Array/Hashes/Objects
            for ( var item in arr) {
                var value = arr[item];

                if (typeof (value) == 'object') { // If it is an array,
                    if (level < dump_max_level) {
                        dumped_text += level_padding + "'" + item + "' ...\n";
                        dumped_text += sys.Debug.Dump(value, level + 1);
                    }
                } else {
                    dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
                }
            }
        } else { // Stings/Chars/Numbers etc.
            dumped_text = "===>" + arr + "<===(" + typeof (arr) + ")";
        }
        return dumped_text;
    };
    this.DumpAlert = function(value) {
        alert(sys.Debug.Dump(value));
    };
};
