
var Module = new Class({
    Binds: ['send'],
    Implements:[Events],
    path:null,
    module:null,
    id:null,

    initialize: function(module, id, path){
        this.module = module;
        this.id = id;
        this.path = path;
    },

    send: function(args, callback){
        return Module.doRequest(this.path, args, callback);
    },

    set: function(name, value, callback){
        return Module.doRequest("modules/set.php", {
            module:this.module,
            moduleid:this.id,
            name:name,
            value:value
        }, callback);
    },

    remove: function(callback){
        return Module.doRequest("modules/remove.php", {
            module:this.module,
            moduleid:this.id
        }, callback);
    }
});

//static methods
Module.create = function(module, args){
    args["module"] = module;
    return JSON.decode(Module.doRequest("modules/create.php", args));
}

Module.doRequest = function(path, args, callback){
    try {
        var request = new Request({
            url:path,
            async: (callback?true:false),
            evalScripts: false
        });
        if(callback){
            request.addEvent("success", callback);
            request.addEvent("failure", callback);
        }
        
        var result = request.post(args);

        if (result.isSuccess())
            return result.response.text;
        else return null;

    } catch(e){
        callback(null);
        return null;
    }
}