internal: allow checkout ui to set statusbar

Minor bug fix and geared toward future functionality

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
internal: default_focus not called

Minor bug. Was being called in an else clause dependent on some help context
logic for new tabs, but should be called for every new tab. Shouldn't result
in any end-user visible change, but if interfaces wrapped in browser.js were
to have a default_focus function, then this could come into play.

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
internal: an alternative to default_focus

Interfaces can now set event listeners on their window for 'tab_focus' instead
of defining a single default_focus function.

We also include a change to browser.js so that embedded interfaces also get
their default_focus function called (and a tab_focus event sent).

This is geared to help future functionality, but shouldn't produce any end-user
visible changes by itself.

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
internal: JSAN socket library

Leverages Mozilla's nsISocketTransportService, nsIScriptableInputStream, and
nsIInputStreamPump XPCOM, and the NetUtils javascript module.

    Usage example:

    Install netcat on a server and as root do:  nc -l -p 5000

    Then, in the staff client, load Admin -> For Developers -> Javascript Shell

    Enter:

    JSAN.use('util.socket');
    var s = new util.socket('server hostname or IP address here', 5000);
    s.write('hello\n');

    On the server, reply with world<enter>

    Back in the javascript shell, use

    s.read();

This is geared to help with implementing future functionality, but shouldn't
result in any end-user visible changes by itself.

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
JSAN module autoloader for "add-ons"

This adds a "Server Add-ons" menu entry under Admin -> Workstation
Administration in the staff client.  Choosing this allows you to edit or set a
list of identifiers that correspond to JSAN-style modules found in
/server/addons/, and is meant mainly for activating 3rd party modules within the
staff client on a per-workstation basis.  You need the
ADMIN_SERVER_ADDON_FOR_WORKSTATION permission to use it.

Configuration options for activated add-ons may also show up in this interface.

More technical details:

This Server Add-ons list is stored as a JSON array in the Mozilla preference
'oils.addon.autoload.list'.

We also add an addon.autoloader module that gets called in most XUL interfaces
via the util_overlay file.  This autoloader will loop through the modules
specified in 'oils.addon.autoload.list' and instantiate each, storing a
reference to each of the newly created objects in a data structure in
window.oils_autoloaded.

So, as an example, let's say there is a module: /xul/server/addon/uber_scan.js
And we have the identifier 'uber_scan' in our Server Add-ons list.  Then, on
every page load of a XUL interface using the stock util overlay, we will
effectively call:

    new addon.uber_scan();

Causing the code in the module to execute.  It is up to the module to determine
whether it needs to do anything within a given interface.

Signed-off-by: Jason Etheridge <jason@esilibrary.com>

Conflicts [permission numbering]:
	Open-ILS/src/sql/Pg/950.data.seed-values.sql
P.V. SUPA GoodStuff integration

This impliments a "Server Add-ons" module for integrating P.V. Supa's RFID
product known as GoodStuff with the Evergreen staff client.

To activate it, you should add the identifier "pv_supa_goodstuff" (without the
quotes) to the list managed by the Admin->Workstation Administration->Server
Add-ons menu action within the staff client.  You will need the
ADMIN_SERVER_ADDON_FOR_WORKSTATION permission to do this.

After doing this and clicking the Update Active Add-Ons button, the interface
will refresh and show a GoodStuff tab in the Add-on Preferences section.  Within
this tab you will have the option of specifying the hostname and port for the
GoodStuff hardware. There is also an "Enabled" setting that needs to be checked.

Currently three interfaces have been integrated:
* Circulation -> Check In Items
* Circulation -> Check Out Items (where you scan the patron barcode)
* Circulation -> Check Out Items (where you scan the item barcodes)

Each interface gets an RFID checkbox if the "Enabled" preference has been set,
that can activate/deactivate the functionality on a per interface basis.  The
checkbox states persist (i.e. are sticky).

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Stamping P.V. SUPA upgrade scripts

Signed-off-by: Mike Rylander <mrylander@gmail.com>