var integrio = {};
integrio.js = {
    version:"1.0",
    author:"Minor (Dima Ermak) Integrio systems",
    debug:false,
    showLoadedCode:false,
    rootUrl:"/scripts/",
    loadedModules:{},
    codesLength:0,
    codeLines:0,
    includeUseTag:false,
    emptySriptTag:null
};
integrio.js.getXHTTPTransport = function() {
    var result = false;
    var actions = [function() {
        return new XMLHttpRequest();
    },function() {
        return new ActiveXObject('Msxml2.XMLHTTP');
    },function() {
        return new ActiveXObject('Microsoft.XMLHTTP');
    }];
    for (var i = 0; i < actions.length; i++) {
        try {
            result = actions[i]();
            break;
        } catch(e) {
        }
    }
    return result;
};
integrio.js.include = function(path, absolutePath) {
    if (integrio.js.loadedModules[path]) {
        return;
    }
    var getterURL = (absolutePath ? "" : integrio.js.rootUrl) + path.replace(/\./g, '/') + '.js';
    if (this.debug) {
        getterURL += "?rnd=" + Math.random();
    }
    integrio.js.module(path);
    var transport = integrio.js.getXHTTPTransport();
    transport.open('GET', getterURL, false);
    transport.send(null);
    var code = transport.responseText;
    if (this.showLoadedCode) {
        alert(path + "\n" + code);
    }
    this.codesLength += code.length;
    this.codeLines += code.split("\n").length;
    if (integrio.js.includeUseTag) {
        var head = document.getElementsByTagName("head")[0] || document.documentElement;
        if (integrio.js.emptySriptTag == null) {
            integrio.js.emptySriptTag = document.createElement("script");
            integrio.js.emptySriptTag.type = "text/javascript";
            integrio.js.emptySriptTag.id = "integrio_js_empty_script_tag";
            head.appendChild(integrio.js.emptySriptTag);
        }
        var script = document.createElement("script");
        script.type = "text/javascript";
        head.insertBefore(script, integrio.js.emptySriptTag.nextSibling);
        try {
            script.appendChild(document.createTextNode(code));
        } catch (e){
            script.text = code;
        }
    } else {

        if (typeof execScript != 'undefined') {
            execScript(code);
        } else {
            window.eval(code);
        }
    }
    transport = null;
    integrio.js.loadedModules[path] = true;
    return true;
};
integrio.js.getContent = function(url) {
    var transport = integrio.js.getXHTTPTransport();
    transport.open('GET', url, false);
    transport.send(null);
    try {
        return transport.responseText;
    } finally {
        transport = null;
    }
};
integrio.js.module = function(path) {
    var packages = path.split(".");
    var p = "";
    for (var i = 0; i < packages.length - 1; i++) {
        p = p + (i != 0 ? "." : "") + packages[i];
        var t = window.eval(p);
        if (typeof t == "undefined") {
            var code = p + "={};";
            window.eval(code);
        }
    }
    this.loadedModules[path] = true;
};
