////////////////////////////////////
// Author: Boris Nagaev
////////////////////////////////////

function $(str)
{
    return document.getElementById(str);
}

function ajax_loading_show()
{
    if ($('ajax_loading'))
    {
        $('ajax_loading').innerHTML = 'loading...';
    }
}

function ajax_loading_hide()
{
    if ($('ajax_loading'))
    {
        $('ajax_loading').innerHTML = '';
    }
}

ajax_loading_hide();

function make_request_object()
{
    var i;
    var request = null;

    var msxmlhttp =
    [
    //'Msxml2.XMLHTTP.5.0',
    //'Msxml2.XMLHTTP.4.0',
    //'Msxml2.XMLHTTP.3.0',
    'Msxml2.XMLHTTP',
    'Microsoft.XMLHTTP'
    ];

    for (i = 0; i < msxmlhttp.length; i++)
    {
        try
        {
            request = new ActiveXObject(msxmlhttp[i]);
        }
        catch (e)
        {
            request = null;
        }
        
        if (request)
        {
            break;
        }
    }
        

    if (request)
    {
        return request;
    }


    try
    {
        request = new XMLHttpRequest();
    }
    catch (e)
    {
    }


    return request;
}

function bajax(sURL, post_array, action, then)
{
    var i;
    var post = '';
    var request_type = 'GET';
    var sURL1 = sURL;
    

    var request = make_request_object();
    var asynchronous=false;

    if (!request)
    {
        return;
    }

    if (sURL.split('?').length==1)
    {
        sURL1 += '?';
    }
    else
    {
        sURL1 += '&';
    }

    sURL1 += 'ran='+Math.floor(Math.random() * 9999999);



    if (action != 'return')
    {
        asynchronous = true;

        request.onreadystatechange = function()
        {
            if (request.readyState == 4)
            {
            
                //old_alert(sURL + "\n\n" + request.responseText);
                
                
                // hide 'loading...'
                ajax_loading_hide();

                
                
                try
                {



                    if (action == 'eval')
                    {
                        eval(request.responseText);
                    }
                    else
                    {
                        $(action).innerHTML = request.responseText;
                    }


                }
                catch (e)
                {
                }

                if (then)
                {
                    try
                    {
                        eval(then);
                    }
                    catch(e)
                    {
                    }

                }

            }
        };


    }

    if (post_array)
    {
        var p, v;
        
        request_type = 'POST';
        
        for (i = 0; i < post_array.length / 2; i++)
        {
            p = post_array[2 * i];
            v = post_array[2 * i + 1];
            
            if (!v)
            {
                continue;
            }
            
            post += p + "=" + encodeURIComponent(v + '') + '&';
        }
    }

    // loading...
    ajax_loading_show();

    // request
    request.open(request_type, sURL1, asynchronous);

    if (post_array)
    {
        request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        request.setRequestHeader("Content-Length", post.length);
        request.send(post);
    }
    else
    {
        request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
        request.send(null);
    }

    if (action=='return')
    {
        // hide 'loading...'
        ajax_loading_hide();
          
        return request.responseText;
    }

}

function myeval(sURL, then)
{
    bajax(sURL, false, 'eval', then);
}

function setHTML(sURL, then, kuda)
{
    bajax(sURL, false, kuda, then);
}

function loadHTML(sURL)
{
    return bajax(sURL, false, 'return', false);
}

function myeval_post(sURL, then, what, value)
{
    bajax(sURL, [what, value], 'eval', then);
}


