var INVK_METHOD = 1;
var INVK_GET = 2;
var INVK_SET = 4;
function Dlmgr() 
{
	netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	this.cid = "@glowria.fr/FireDlmgrGate;1";
	this.plug = Components.classes[this.cid].createInstance();
	this.plug = this.plug.QueryInterface(Components.interfaces.IFireDlmgrGate);
	//this.plug.init("{0CDB4C66-0EC3-415D-A1CB-BD88ECFC110B}");
}

Dlmgr.prototype =
{
	plug : null,
	cid : null,

    /*
        Initialization method
    */
    init: function (classid) {
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        this.plug.init("{" + classid + "}");
    },

	invk : function(t,a)
	{
		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
		switch (a.length)
		{
			case 0: throw "No params !";
			case 1: return this.plug.invoke(t,a[0]);
			case 2: return this.plug.invoke1(t,a[0],a[1]);
			case 3: return this.plug.invoke2(t,a[0],a[1],a[2]);
			case 4: return this.plug.invoke3(t,a[0],a[1],a[2],a[3]);
			case 5: return this.plug.invoke4(t,a[0],a[1],a[2],a[3],a[4]);
			case 6: return this.plug.invoke5(t,a[0],a[1],a[2],a[3],a[4],a[5]);
			case 7: return this.plug.invoke6(t,a[0],a[1],a[2],a[3],a[4],a[5],a[6]);
			case 8: return this.plug.invoke7(t,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7]);
			case 9: return this.plug.invoke8(t,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);
			case 10: return this.plug.invoke9(t,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);
			case 11: return this.plug.invoke10(t,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10]);
			default: throw "Too many params !"
		}
	},

	call : function()
	{
		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
		return this.invk(INVK_METHOD,arguments);
	},

	get : function()
	{
		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
		return this.invk(INVK_GET,arguments);
	},

	set : function()
	{
		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
		return this.invk(INVK_SET,arguments);
	}
}
