var http_request = false;
var time0=0.0;
var time1=1.0;
var commspeed=0;

JSON = {
    encode : function(input)
    {
        if (!input) return 'null';

        switch (input.constructor)
        {
            case String:
                return '"' + input + '"';

            case Number:
                return input.toString();

            case Array:
                var buf = [];
                for (i in input)
                {
                    if (!isNaN(parseFloat(input[i])))
                    {
                        buf.push(JSON.encode(input[i]));
                        //if (debug) document.getElementById('infomap').innerHTML += "<br>Json array:" + parseFloat(input[i]);
                    }
                }
                var tojson = '[' + buf.join(', ') + ']';
                //if (debug) document.getElementById('infomap').innerHTML += "<br>Json result:" + tojson;
                return tojson;

            case Object:
                var buf = [];
                for (k in input)
                {
                    buf.push(k + ' : ' + JSON.encode(input[k]));
                }
                return '{ ' + buf.join(', ') + '} ';

            default:
                return 'null';
        }
    }
}

//***** AJAX FUNCTIONS
function makePOSTRequest(url, parameters)
{
    //if (debug) document.getElementById('infomap').innerHTML += "<br><font color=green><b>NEW REQ:" + url + "?" + parameters;
    var d = new Date();
    time0 = d.getTime();

    if (typeof(http_request)!="object")
    {
        http_request = false;
        if (window.XMLHttpRequest)
        {
            //***** Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType)
            {
         	    // set type accordingly to anticipated content type
                //http_request.overrideMimeType('text/xml');
                http_request.overrideMimeType('text/html');
            }
        }
        else if (window.ActiveXObject)
        {
            // IE
            try
            {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e)
            {
                try
                {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e) {}
            }
        }
        if (!http_request)
        {
            alert('Error: There is a problem with your browser: cannot communicate with the server, cannot create Ajax XMLHTTP instance. Please restart your computer and try again.');
            return false;
        }
    }

    /*
    readyState Status Codes:
    0 = uninitialized
    1 = loading
    2 = loaded
    3 = interactive
    4 = complete
    */

    if (http_request.readyState == 0 || http_request.readyState == 4)
    {
        if (debug) document.getElementById('infomap').innerHTML += "<br><font color=green><b>Starting, HTTP state=" + http_request.readyState;// + ",: "+parameters+"</b></font>";
        http_request.onreadystatechange = alertContents;
        http_request.open('POST', url, true);
        http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        http_request.setRequestHeader("Content-length", parameters.length);
        http_request.setRequestHeader("Connection", "close");
        http_request.send(parameters);
    }
    else
    {
        if (debug) document.getElementById('infomap').innerHTML += "<br><font color=red><b>Skipping, HTTP state=" + http_request.readyState + ",: "+parameters+"</b></font>";
        //Ext.MessageBox.alert('Comunication error', "<font color=red><b>Error: cannot send AJAX request to the server.</b> AJAX status is "+http_request.readyState+". Please refresh your browser and try again.</font>");
    }
    //if (debug) document.getElementById('infomap').innerHTML += "<br><font color=red><b>Starting, HTTP state=" + http_request.readyState + "</b></font>";
}

function alertContents()
{
    if (http_request.readyState == 4)
    {
        if (http_request.status == 200)
        {
            var d = new Date();
            time1 = d.getTime();
            //alert(http_request.responseText);
            //ProgressBar.reset(true);
            //Ext.getCmp('areamap').setTitle('Area map [Processing...]');
            var result = http_request.responseText;
            var elapsed = parseFloat(time1 - time0);
            commspeed = Math.round(parseFloat(result.length)/elapsed);
            if (debug) document.getElementById('infomap').innerHTML += "<br>AJAX speed=" + commspeed + "Kb/sec, " + result.length + " bytes, "+elapsed+ "msec";

            if (loading)
            {
                ProcessLoadedGeometry(result);
            }
            else
            {
                ProcessAJAXResponse(result);
            }
        }
        else
        {
            //if (debug) document.getElementById('infomap').innerHTML += "<br><font color=blue>AJAX response error:</font> Status=" + http_request.status+" "+http_request.responseText
            Ext.MessageBox.alert('Attention - communication error', '<font color=red><b>Error communicationg with the server, HTTP status=' + http_request.status + '</b></font>');
            result='[{"request":"error"}]';
            ProcessAJAXResponse(result);
        }
    }
    else
    {
        //if (debug) document.getElementById('infomap').innerHTML += "<br><font color=red><b>Processing, HTTP state=" + http_request.readyState + "</b></font>";
    }
}

