// Copyright 2007 Victor Sim http://www.axgui.com
// THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW.
// ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THE LICENSE
// OF THIS PRODUCT OR COPYRIGHT LAW IS PROHIBITED.

function ajaxRequest()
{
    var ajaxObject = new Object();
    ajaxObject.req = false;
    if (window.ActiveXObject) // if browser is Internet Explorer
    {
        try
        {
            ajaxObject.req = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            try
            {
               ajaxObject.req = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e) { }
        }
    }
    else if (window.XMLHttpRequest) // if browser is Mozilla, Safari etc
    {
        ajaxObject.req = new XMLHttpRequest();
        if (ajaxObject.req.overrideMimeType)
        {
            ajaxObject.req.overrideMimeType('text/xml');
        }
    }

    ajaxObject.getURL = function(arg)
    {
        if (ajaxObject.req && arg.url)
        {
            // prevent cache
            var nocache = "nocache=" + new Date().getTime();
            arg.url = (arg.url.indexOf('?') == -1) ? arg.url + "?" + nocache : arg.url + "&" + nocache;
            ajaxObject.req.open('GET', arg.url, true);
            ajaxObject.req.send(null);
            ajaxObject.req.onreadystatechange = (arg.onreadystatechange) ? arg.onreadystatechange : function()
            {
                var readyState = ajaxObject.req.readyState;
                if(readyState == 0)
                {
                    if(arg.on_error)
                        arg.on_error();
                }
                else if(readyState == 1 || readyState == 2 || readyState == 3)
                {
                    if(arg.on_load)
                        arg.on_load();
                }
                else if(readyState == 4)
                {
                    if(ajaxObject.req.status < 400)
                    {
                        if(arg.on_success)
                            arg.on_success(ajaxObject.req.responseText);
                    }
                    else
                    {
                        if(arg.on_error)
                            arg.on_error(ajaxObject.req.responseText);
                    }
                }
            };
        }
    }

    ajaxObject.postURL = function(arg)
    {
        var parameters = '';
        if(arg.url && arg.url.indexOf('?') > 0)
        {
            parameters = arg.url.substring(arg.url.indexOf('?')+1, arg.url.length);
            arg.url = arg.url.substring(0, arg.url.indexOf('?'));
        }

        if(arg.thisform)
        {
            var inputs = arg.thisform.getElementsByTagName("input");
            if(inputs.length > 0)
            {
                var params = new Array();
                for(var x=0; x < inputs.length; x++)
                {
                    params.push(inputs[x].name + "=" + escape(inputs[x].value));
                }
                parameters += '&' + params.join('&');
            }
        }
        if (ajaxObject.req && arg.url)
        {
            ajaxObject.req.open('POST', arg.url, true);
            ajaxObject.req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            ajaxObject.req.setRequestHeader("Content-length", parameters.length);
            ajaxObject.req.setRequestHeader("Connection", "close");
            ajaxObject.req.send(parameters);
            ajaxObject.req.onreadystatechange = (arg.onreadystatechange) ? arg.onreadystatechange : function()
            {
                var readyState = ajaxObject.req.readyState;
                if(readyState == 0)
                {
                    if(arg.on_error)
                        arg.on_error();
                }
                else if(readyState == 1 || readyState == 2 || readyState == 3)
                {
                    if(arg.on_load)
                        arg.on_load();
                }
                else if(readyState == 4)
                {
                    if(ajaxObject.req.status < 400)
                    {
                        if(arg.on_success)
                            arg.on_success(ajaxObject.req.responseText);
                    }
                    else
                    {
                        if(arg.on_error)
                            arg.on_error(ajaxObject.req.responseText);
                    }
                }
            };
        }
    }

    return ajaxObject;
}
