//SIRIUS:  loader: '', 'xml', 'script', 'form'
//         method: '', 'get', 'post'
//         data: ID формы.  Чтобы было выполнено document.getElementById("js_send_from")
//         addition_data : var addition_data = { 'variable':'test',   'arr':[1,2,3],   'arr2':{'id':'id1', 'value':1}};
function do_request(script_name, form_id, method, addition_data, loader) {
    try{ document.getElementById("wait_container").style.display=''; }
    catch(e){}
    if(document.getElementById(form_id)){
        try{ data = document.getElementById(form_id) }
        catch(e){ data = form_id; }
    }
    
    var req = new JsHttpRequest();
    req.onreadystatechange =  function() {
        if (req.readyState == 4) {
            try{ document.getElementById("wait_container").style.display='none'; } catch(e){}
            if (req.responseJS) {
                //SIRIUS:  получили определенные переменные, посланные отдельно от основного вывода, в массиве $_RESULT
                if(req.responseJS.output_container1){
                    try{ document.getElementById(req.responseJS.output_container1).innerHTML = req.responseJS.res1; } 
                    catch(e){/*alert('Некуда выводить!! [хотели в '+req.responseJS.output_container1+']');*/}
                } else {
                    try{ eval(req.responseJS.res1); }
                    catch(e){alert('Ошибка в выполнении присланного кода:\n\n '+req.responseJS.res1);}
                }
                if(req.responseJS.js_code){
                    try{ eval(req.responseJS.js_code); }
                    catch(e){alert('Ошибка в выполнении присланного кода:\n\n '+req.responseJS.js_code);}
                }
            }
            //SIRIUS: текст, посланный обычным принтом
            if(req.responseText){
                try{ document.getElementById(req.responseJS.debug_container).innerHTML = req.responseText; } 
                catch(e){alert('нет контейнера для вывода отладочной инфы!! [нужен '+req.responseJS.debug_container+']');}
            }
        }
    }
    // Allow caching (to avoid different server queries for identical input data). Caching is always disabled if we are uploading a file.
    req.caching = false;
    var data = { "data" : data,  additional : addition_data };
    req.loader = loader;
    req.open(method, script_name, true);
    req.send(data);
}