
//= namespace ft
if (typeof(ft) == 'undefined') ft = {};

//= require <prototype.js>

ft.PageService = Class.create({
    
    initialize: function(url)
    {
        this.serviceUrl = url;
    },
    
    remoteCall: function(methodName, params, callback)
    {
        params = $H(params);
        params.set('_method', methodName);
        
        // execute Ajax method with service URL plus function name and args.
        new Ajax.Request(this.serviceUrl, {
            parameters: params,
            requestHeaders: {Accept: 'application/json'},
            onSuccess: function(resp) {
                if (callback)
                {
                    if (resp.responseJSON == null)
                        callback({error: "Internal server error"});
                    else
                        callback(resp.responseJSON);
                }
            },
            onFailure: function(resp) {
                if (callback)
                    callback({error:"Error " + resp.status + " accessing service"});
            }
        });
    },
    
    buildParams: function(values)
    {
        var params = new Hash();
        // Go through all params except for last one, which is the callback,
        // and associate a _pNN name with each.
        for (var k=0; k<values.length-1; ++k)
            params.set("_p" + k.toPaddedString(2), values[k]);
        return params;
    }
    
//// Sample call in derived class    
//    addTwoNumbers: function(a, b, callback)
//    {
//        var params = this.buildParams($A(arguments));
//        this.remoteCall('addTwoNumbers', params, callback);
//    }
});

