﻿// class Server extends WebObject
function Server(url)
{
    if(Server.caller != Server.getServer)
    {
        throw new Error("A Server object cannot be created directly");
    } else
    {
        this.url = url;
        
        extend(this, WebObject);
    }
}

Server.prototype = new WebObject();

// public String getURL();
Server.prototype.getURL = function()
{
    return this.url;
};

// public void query
Server.prototype.query = function(url, params, callback)
{
    var request = Server.createXMLHttpRequest();
    var body = null;
    
    for(var property in params)
    {
        if(!body)
        {
            body = "";
        } else
        {
            body += "&";
        }
        
        body += property + "=" + params[property];
    }
    
    // alert(body);
    request.open("POST", url, true);
    request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    request.send(body);
    
    request.onreadystatechange = function()
    {
        if(request.readyState == 4)
        {
            if(request.status == 200)
            {
                var value = null;
                eval("value = " + request.responseText);
                
                callback(true, value);
            } else
            {
                callback(false);
            }
        }
    };
}

// public void post
Server.prototype.post = function()
{
};

// public String toString();
Server.prototype.toString = function()
{
    return "Server@" + this.url;
};

// public static XMLHttpRequest createXMLHttpRequest();
Server.createXMLHttpRequest = function()
{
    if(window.XMLHttpRequest)
    {
        return new XMLHttpRequest();
    } else if(Toolkit.getBrowser() == Toolkit.INTERNET_EXPLORER)
    {
        return new ActiveXObject("Microsoft.XMLHTTP");
    } else
    {
        throw new Error("XML HTTP not supported");
    }
}

// public static Server getHost();
Server.getHost = function()
{
    return Server.getServer(window.location.host);
};

// public static Server getServer(String url);
Server.getServer = function(url)
{
    var server = Server[url];
    
    if(!server)
    {
        server = Server[url] = new Server(url);
    }
    
    return server;
};
