// ******************************************
// * $Id$
// *
// *   puo_hook
// *
// * puo_hook functions
// *
// * arguments:
// *
// *           ....
// *
// * Notes:
// *
// ******************************************

var DEZE = this;

var puo_hook = {
        initialize: function(bedrijfadres)
        {
            puo_hook.hook = {};
            if (!bedrijfadres.plugin)
                return;

            puo_hook.bedrijfadres = bedrijfadres;

            var fso = new ActiveXObject("Scripting.FileSystemObject");
            var hookfile = custabspath + "/" + bedrijfadres.plugin;
            if (!fso.FileExists(hookfile))
            {
                Log2File(0, "ERROR: Plugin {0} not found at {1}".format(bedrijfadres.plugin, hookfile));
                return;
            }
            Log2File(1, "Loading plugin {0}".format(hookfile));
            var hook = puo_hook.hook = GetObject("script:" + hookfile);

            hook.initialize({ bedrijfadres: bedrijfadres,
                              plugindata: bedrijfadres.plugindata,
                              S: S,
                              Oracle: Oracle, // Veel functies zijn ook wel via DEZE.S en DEZE.Oracle en zo te benaderen maar shortcuts zijn handiger
                              customerId: customerId,
                              Log2File: Log2File,
                              safe: safe,
                              hookfile: hookfile,
                              DEZE: DEZE });
        },
        finalize: function()
        {
            puo_hook.hook = null; // zodat GC kan opruimen als nodig
        }
    };

puo_hook.hashook = function(fnname)
    {
        return (fnname in puo_hook.hook);
    }

puo_hook.callhook = function(fnname, params, defaultreturnvalue)
    {
        var result = (typeof defaultreturnvalue == "undefined") ? true : defaultreturnvalue;

        if (fnname in puo_hook.hook)
        {
            Log2File(3, "Entering plugin {0}".format(fnname));
            try {
                result = puo_hook.hook[fnname](params);
            }
            catch (e)
            {
                Log2File(0, "ERROR inside plugin {0}: {1}".format(fnname, e.description));
                throw e;
            }
            Log2File(3, "Exit plugin {0}".format(fnname));
        }

        return result;
    }
