
 
JS9 ChangeLog
 Public Release 3.0 (January 6, 2020)
-  improve  menu placement for Jupyter support
 -  replace image filter menu with plugin that supports parameter adjustments
 -  just redisplay already-loaded slices
 -  added PanZoom controls to Zoom menu, containing "pan to" support
 -  wcs menu: don't show wcs options if image has no wcs
 -  add Google's new turbo colormap
 -  add analysis plot configuration dialog box to set data range and scale
 -  improve panner to show display area (not image area)
 -  infobox: fix bug displaying image coords instead of phys if sys was image
 -  webworker init: avoid CORS problems when webworker is on a remote location
 -  add array-based x,y flip and +/- 90 degree rotation to the Zoom menu
 -  add JS9.SetRot90() and JS9.SetFlip() public access routines
 -  improve LTM/LTV support, various bug fixes
 -  avoid weakness in wcslib causing the wrong header length to be used
 -  fix error handling when called from external message
 -  update emscripten to v1.39.3 (required several changes to montage)
 -  upgrade code to use ES6
 
 Public Release 2.5 (August 30, 2019)
-  re-displaying an image now calls the onload callback
 -  JS9.BlendDisplay('reset') unsets blended images
 -  JS9.DisplayExtension('all') loads all image extensions
 -  JS9.ReprojectData('all') uses the current image to reproject others
 -  JS9.Load('foo.fits', {allext: true}) loads foo.fits, then all extensions
 -  add 'Display all images' button to Extensions plugin
 -  add support for loading all images in a multi-extension FITS file at once
 -  fix typo that made incorrect sections of non-rectangular images at zoom < 1
 -  fix bug when zooming image with a selected region
 -  fix bug when loading multiple annuli at once
 -  fix regression in DisplaySection: new ext was not added to FITS filename
 
 Public Release 2.4 (July 15, 2019)
-  fix double tap to close capability on iPhones
 -  fix internal regcnts tasks using annuli on iOS devices and re-enable them
 -  wcs grid: fix high limit display coordinates
 -  analysis menu: only display 3d analysis menu options for 3d images
 -  refactor LoadWindow so load waits for the lightwin to be fully created
 -  desktop app: support merging analysis tasks and loading foreign web pages
 -  add JS9.GetAnalysis() to return analysis task definitions
 -  add missing routine in internal CountsInRegions() and RadialProfile()
 -  add support for "All" selection of regions to include text children
 -  GetRegions: return text child region id
 -  desktop app: enabling node mounts local file system for direct FITS access
 -  desktop app: add security checks
 -  fix overly-aggressive .gitignore and add missing files
 -  fix typo that broke createMosaic("all")
 -  fix bugs in imexam plugins using a rotated line to define the image section
 -  fix spinner when using open local file dialog
 -  update emscripten to v1.38.37
 -  update contextMenu to v2.8.0
 
 Public Release 2.3 (May 1, 2019)
-  support for Mac app, a bit of Windows app: see github/ericmandel/js9app
 -  Electron desktop app: use internal colorpicker if Electron version >= 5
 -  add logo support
 -  add AlignPanZoom() public routine
 -  add --cmds [cmds] and --cmdfile [file] switches to js9Electron.js
 -  add --node switch to js9Electron.js, allowing nodeIntegration
 -  add JS9.globalOpts.onpreload property
 -  fix wcs alignment of blended images during pan and zoom operations
 -  fix mosaic code, which needed area mosaic file after all
 -  redesign Menubar to use more submenus, especially File menu
 -  fix bug in the supermenu sometimes not displaying the File sub-menus
 -  work around  invalidation of emscripten heap pointers when memory increases
 -  add ability to change child text options via the parent shape
 -  add ability to push selected region to bottom of overlapping stack ('d')
 -  add ability to select all regions ('S' and Regions menu option)
 -  add SaveDir public routine (desktop app only) to set the save directory
 -  SavePNG,SaveJPEG: add option to save image RGB pixels instead of display
 -  SavePNG,SaveJPEG: add option to skip saving the layers (e.g. regions)
 -  shape layers (incl. regions) can now be exported in SVG format
 -  closing a light window that displays images now supports: close, move, ask
 -  add support for unconstrained panning
 -  dynamically select a JS9 display (supports one plugin for many displays)
 -  SaveColormap: allow multiple colormaps to be save at once
 -  add ability to change color, width, dash lines, tags of selected regions
 -  fix bug in "north is up" rotation: take CDELT values into account
 -  add direction vector to panner
 -  display regions in lightwin instead of on display or in infobox
 -  add region copyToClipboard capability (so 'p' always pastes last region)
 -  add ability to specify display opts in a FITS header (IMOPTS param)
 -  add ability to specify colormaps in a FITS header (IMCMAP param)
 -  add ability to create image cutouts of selected region(s)
 -  add ability to rename a JS9 display via JS9.RenameDisplay() api call
 -  ensure saved order of images after session load
 -  add --title and --renameid options to desktop app to rename display ids
 -  parameterize initial blending params
 -  Preload() loads .cmap files as colormaps
 -  colormaps: specify m colorwheel slices, from which n colormaps are assigned
 -  add ability to specify {display: id} param to external api calls
 -  add ability to unremove previously removed regions
 -  add ability to select regions based on the file from which they were loaded
 -  calling LoadRegions() twice removes previous regions loaded from the file
 -  add globalOpts.quietReturn to silence 'OK' messages
 -  Desktop (Electron.js) version: add --savedir option to skip save dialog
 -  JS9.Load(): globalOpts.reloadRefresh property to control reloading an image
 -  add 'revert' option to wcs reproject submenu
 -  wcs menu: each wcs system has own current units (based on initial defaults)
 -  fix region parser to see 'linear' as wcs, not a 'line' region
 -  cmaps: allow color choice via text input in fallback colorpicker
 -  fix memory leaks in reproject code
 -  LoadColormap: support file containing array of colormaps
 -  Infobox: for long filenames, click to see right hand side
 -  addColormaps now replaces a cmap with same name
 -  add 3D plot capabilities for data cubes in Analysis menu
 -  many improvements to user-defined menus
 -  turn on wasm in js9's Electron.js Desktop app
 -  menu: allow load/save of cmaps without a loaded image
 -  when blending, only sync zoom/pan reprojected images that are wcs aligned
 -  reproject: use float32 instead of float64 if datatype allows (less memory)
 -  reproject: correctly align images when wcs ref image is panned or zoomed
 -  reproject: fix memory leaks, always go back to original image
 -  js9 helper: increase ping timeout to avoid Chrome disconnects
 -  improve header generation and FITS card handling
 -  allow DisplaySection() to display the new section in a different display
 -  add colormaps plugin to create (complementary) colormaps
 -  fine-tune positioning: arrow keys display small crosshair cursor
 -  fine-tune positioning: arrow keys change magnifier display center
 -  regions menu: listonchange can act on "selected" (default) or "all" regions
 -  preferences plugin: image parameter for "all" or "selected" listonchange
 -  Meta (or Ctrl) now used for keyboard shortcuts displaying a light window
 -  edit, region menus: add option to display region configuration window
 -  add 'M-e' keyboard shortcut to display region configuration window
 -  add 'M-o' keyboard shortcut to open a local file
 -  add 'p' keyboard shortcut to paste regions at current mouse position
 -  (joining 'P' keyboard shortcut to paste regions at their own position)
 -  add 's' keyboard shortcut to select region that contains the mouse
 -  fix bug when saving/copying regions inside a rotated group
 -  Meta key during mouse move no longer updates internal image position
 -  update emscripten to v1.38.28
 -  update fabric.js to v2.7.0
 
 Public Release 2.2 (October 9, 2018)
-  add sync plugin: synchronize operations between two or more images
 -  add JS9.SyncImages() and JS9.UnsyncImages() public access routines
 -  SetParam(): setting a core param calls the core function
 -  add support for disabling colormap, pan, regions, scale, wcs, or zoom for a given image
 -  add Scale Clipping Limits plugin (with pixel distribution plot)
 -  add support for setting up a proxy from Apache to the Node.js helper
 -  add Separate/Gather Images plugin
 -  desktop app: add support for printing entire window
 -  desktop app: add support for saving entire window to a pdf file
 -  add support for loading all slices of a data cube separately into JS9
 -  add support for user-defined menus in the Menubar
 -  add support for averaging pixels when binning (def: summing)
 -  add support for Mac-style menubars
 -  add Edit menu to Menubar (copy/paste regions, positions, values)
 -  add JS9.DisplayCoordGrid() and associated client-side task to Analysis menu
 -  add JS9.CountsInRegions() and associated client-side task to Analysis menu
 -  add JS9.RadialProfile(), and associated client-side task to Analysis menu
 -  reproject will try to bin large images to avoid memory limits
 -  add support for wcs-based cross-hair tracking of images
 -  add support for displaying mosaic images
 -  add CreateMosaic() public routine
 -  remove .fz suffix in various places where it breaks things
 -  fix bug where binning an image was not updating the CD matrix
 -  update emscripten to v1.38.5
 -  update socket.io to v2.1.1
 
 Public Release 2.1 (May 10, 2018)
-  allow JS9.SetPan() to accept a single object with x and y properties
 -  allow JS9.WCSToPix() to accept a single object with ra and dec properties
 -  allow JS9.PixToWCS() to accept a single object with x and y properties
 -  add support for Toolbar plugin
 -  add JS9.SetParam() and JS9.GetParam() public routines
 -  add JS9.SetToolbar() and JS9.GetToolbar() public routines
 -  add JS9.SeparateDisplay() public routine to separate images in a display
 -  add JS9.GatherDisplay() public routine to gather images into a display
 -  add JS9.LoadColormap() public routine
 -  add JS9.LightWindow() public routine
 -  JS9.GetImageData() now returns display size, bin factor
 -  JS9.RunAnalysis() return types now include "regions" and "catalog"
 -  include comments and history in display of FITS header 
 -  iOS 11.2.2,5 disable wasm: github.com/kripken/emscripten/issues/6042
 -  add refresh property to JS9.Load() to re-retrieve data
 -  add support for refreshing a file/url in JS9.RefreshImage()
 -  add support for displaying full image to JS9.DisplaySection()
 -  add 'f' (full) and 'r' (refresh) keyboard actions
 -  change 'r' (raise region layer) to '^' in keyboard actions
 -  add refresh and section commands to Console plugin (and js9 script)
 -  binning plugin: add button to load full image
 -  sessions: save/re-run dataLayer routines (e.g. reproject, rotate)
 -  sessions: save/restore blend mode
 -  sessions: save/restore wcsim from reprojection
 -  sessions: save/restore display parameters
 -  SaveSession saves either current image or all images
 -  ensure correct extension for Save{Session,PNG,JPEG}
 -  image blending: update GUI when changes are made via API
 -  image blending: support sizing of static div
 -  fix imexam routines needing integer section limits
 -  update emscripten to v1.37.28
 -  update fabric.js to v1.7.22
 -  update contextMenu to v2.6.3
 
 Minor Patch Release 2.0.2 (December 15, 2017)
-  add zscale, zmax to SetScale()
 -  improve display-based routines (separate, gather, resize, center, select)
 -  improve alignment of differently sized images
 -  allow zoom during image blending
 -  add menu support for closing all images
 -  add support for selecting a target display in a supermenu                  
 -  add support for dispersing images from one display into new displays       
 -  add support for gathering images from multiple displays into one           
 -  add support for new image inheriting params from current image             
 -  fix allinone (don't use wasm)
 -  fix bug loading wasm file in LoadWindow('new')
 
 Minor Patch Release 2.0.1 (September 29, 2017)
-  move helper log file outside www directory
 -  improve fetchURL() error messages
 -  fix bug in load catalog menu option
 -  allow json opts in Load* family of routines
 -  fix bug in JS9.Preload by saving a copy of opts
 
 Public Release 2.0 (September 27, 2017)
-  add support for emscripten-based WebAssembly
 -  add support for HPX projection
 -  add wcs selection menu to regions config dialog
 -  aesthetic improvements to regions config dialog
 -  fix race condition in Electron startup if not codesigned
 -  fix binning when manually specifying parent file
 -  fix wcs system display in infobox
 -  fix bug in js9Helper.js where localhost was not upgrading to use ws
 -  update emscripten to v1.37.20
 -  update fabric.js to v1.7.19
 -  update socket.io to v2.0.3
 -  update jquery to v3.2.1
 -  update jquery-ui to v1.12.1
 
 Public Release 1.12 (July 25, 2017)
-  refactor astroem to use astroem repository of emscripten library byte-code
 -  add DisplaySection() public routine
 -  add ability to extract a section from images (as well as tables)
 -  add fits2fits configuration params for large files support
 -  add large file support in which large files can be handled externally
 -  allow infoBox to be configured via JS9.globalOpts.infoBox and preferences
 -  add wcs center and wcs fov display to infoBox
 -  add js9.app Mac desktops to run js9 script (drag/drop images onto it, etc.)
 -  add support for specifying URLs on js9 command line (uses proxy load)
 -  JS9.Preload() will now call JS9.ProxyLoad(), if required
 -  proxy load now turned on by default (needed for Desktop use)
 -  add support for drag/drop URLs onto JS9 display (uses proxy load)
 -  add support for uploading FITS files to a remove server
 -  add support for displaying bzip2 files
 -  add support for drag drop of region, catalogs, sessions (by file extension)
 -  add text, fonts, stroke options to region configuration dialog box
 -  add support for specifying a text region as a child of a region
 -  add js9-to-ds9 region conversion to js9 script (-r)
 -  add support for importing ds9 regions, including properties in comments
 -  sort overlapping regions so smallest is on top
 -  fix memory leaks in mef support
 -  add Divs plugin to show/hide in-page JS9 plugin divs
 -  allow shape size controls to match shape color at border, corner, or both
 -  use file extensions when opening local files (fits, regions, catalogs, etc)
 -  add keyboard action to move selected region in back of other shapes (not a default)
 -  JS9.RegisterPlugins() will instantiate plugins if scripts load asynchronously
 -  add JS9.InstantiatePlugins() public routine
 -  deprecate auto load of js9Prefs.son (load js9prefs.js explicitly instead)
 -  update emscripten to v1.37.9
 -  update socket.io to v1.7.3 (big change in module directory structure)
 
 Public Release 1.11 (January 9, 2017)
-  add support for displaying HEALPix files
 -  add initial support for memory management of internal FITS files
 -  add menu support for clearing FITS files from internal memory
 -  add support for running JS9 on the Desktop using Electron.js
 -  integrate Desktop Electron support into into js9 script
 -  add ability to load local catalogs and save catalogs to disk
 -  add JS9.LoadCatalog() and JS9.SaveCatalog() public routines
 -  add Shape Layer plugin to turn on/off layers and set the active layer
 -  remove list of shape layers from View menu in favor of Shape Layer plugin
 -  add JS9.ActiveShapeLayer() public routine
 -  improve onimagedisplay processing for mef, cube, imarith plugins
 -  fix bug in cube plugin blink support
 -  update fabric.js to v1.6.6
 -  update socket.io to v1.5.1
 -  update closure-compiler to v20160911
 
 Public Release 1.10 (October 11, 2016)
-  add support for full-display mode
 -  add support for keyboard actions and shortcuts
 -  add JS9.SetRGBMode(), JS9.GetRGBMode() public routines
 -  unclutter the position/value display
 -  don't update value/position if "special key" is pressed
 -  buttons and menu/titlebars are now beautiful and Mac-like
 -  buttons can be beautiful and flat (change via class specification)
 -  add support for copying regions to another image (JS9.CopyRegions())
 -  add initial support for plotly plotting library
 -  improvements to energyplot, evfilter, binning plugins
 -  add support for alternate WCS (including JS9.GetWCS, JS9.SetWCS routines)
 -  add JS9.LookupImage() public routine
 -  generalize and extend plugin callback capability
 -  extend range of FITS files that can be WCS-projected using Montage
 -  add support in the File menu for saving and loading sessions
 -  add JS9.LoadSession() and JS9.SaveSession() public routines
 -  update imexam,fitsy, archive plugins
 -  update fabric.js to v1.6.3
 -  update cfitsio to v3.39
 -  update socket.io to v1.4.5
 
 Public Release 1.9 (June 8, 2016)
-  add standard RGB image processing functions to the Analysis menu
 -  add support for gesture-based zoom (scroll wheel and pinch)
 -  add MouseTouch plugin to change mouse/touch actions
 -  image id now contains extension name or number for FITS extensions
 -  add support for histogram equalization scaling
 -  add support in js9 script for starting up a browser/web page
 -  add support for displaying slices of a FITS data cube
 -  add support for image arithmetic (between 2 images or image & constant)
 -  add support moving images between JS9 displays
 -  add support for displaying HDUs in multi-extension FITS files
 -  add 'magma', 'inferno', 'plasma', 'viridis' colormaps from matplotlib
 -  deprecate the use of funtools when building JS9; please use cfitsio
 
 Public Release 1.8 (March 21, 2016)
-  add image blending plugin to support blending operations between images
 -  add ability to blend images using W3C composite/blending modes
 -  add colorbar plugin to display colormap vs intensity information
 -  add blink plugin to blink images
 -  add line region (with support for multiple line segments)
 -  add raw data layers to allow manipulation of underlying raw data
 -  add JS9.FilterRGBImage() to support RGB image processing routines
 -  add JS9.GaussBlurData public routine to perform Gaussian blur on data layer
 -  add JS9.RawDataLayer() public routine for raw data layer manipulation
 -  add JS9.ShiftData() public routine to shift raw data in x and y
 -  add JS9.GetDisplayData(), returning data for all images in a given display
 -  add JS9.SaveJPEG() public routine to save image and overlays as JPEG
 -  add JS9.AddColormap() public routine to add a colormap to JS9
 -  add JS9.SaveColormap(), JS9.OpenColormapMenu() public routines
 -  JS9.SavePNG() public routine now saves image and graphical overlays
 -  add support for reprojecting images using Montage/mProjectPP
 -  add JS9.Reproject() public access routine
 -  change menu option Color->alpha (0 to 255) to Color->opacity (0.0 to 1.0)
 -  fix bug when interactively changing panner for non-square images
 -  fix bug in lut colormap, which truncated the first color
 -  refactor emscripten astroem package into sub-packages
 -  update emscripten to v1.35.0
 
 Public Release 1.7 (January 12, 2016)
-  add Jupyter/IPython support for iframes
 -  add keyboard focus support for Jupyter/IPython
 -  add timeouts to avoid back-end connect() hangs
 -  add support for using rgb file as the display over a data file
 -  default helper is "none" (for Jupyter, where js9Prefs.json is not loaded) 
 -  add lower right handle to change width and height of display
 -  add View menu option to change width and height of display
 -  add JS9.ResizeDisplay() to change the size of a JS9 display element
 -  add JS9.DisplayPlugin() public routine for custom menus
 -  add JS9.GetFITSHeader() (as a string) public routine for custom menus
 -  add resize handle to display (lower right corner) 
 -  add View menu option to change the display width and height
 -  add support for handling group events in shape layers (i.e. catalogs)
 -  add support for handling mouse events in shape layers (i.e. catalogs)
 -  add support for tooltips to shape layers (i.e. catalogs)
 -  add return values to saveFITS() and savePNG()
 -  add spinner while waiting
 -  fix OpenFileMenu() and OpenRegionMenu() when using multiple displays
 -  fix text region printing
 -  fix bug in panner box when panner image does not fill panner width
 -  fix region configure to "delete" only itself (not all regions)
 -  fix one pixel bug in WCS region conversion
 -  update fabric.js to v1.5.0
 -  update socket.io to v1.3.7
 -  updated jquery to v1.11.3
 
 Public Release 1.6 (November 7, 2015)
-  add support for extracting image/table sections from "parent" files
 -  add JS9.LoadProxy() public routine to load FITS URLs via proxy server
 -  add support for loading Dropbox (and other CORS enabled) shared links
 -  add support for loading links by proxy through the back-end server
 -  add SetValPos and DisplayMessage public routines
 -  add options to create new JS9 windows from the file menu
 -  add experimental support for JS9 in an iframe, using postMessage
 -  remove starting "_" from SUPERMENU id (not legal syntax)
 -  fix various iOS foibles (scrolling, double-click to close)
 -  fix memory leak in cfitsio RefreshImage() support
 -  fix bug in lut colormap limit check
 -  fix bug in JS9.RefreshImage() blob handler
 -  fix overflow bug in cfitsio bscale/bzero support
 -  fix bug in zscale by properly exposing emscripten methods
 -  update emscripten to 1.34.1
 -  update wcs library to 3.9.0
 
 Public Release 1.5 (July 9, 2015)
-  add support for specifying regions using Funtools/DS9 syntax
 -  add support for loading Funtools/DS9 region files
 -  add support for running the Node.js helper using https protocol
 
 Public Release 1.4 (May 3, 2015)
-  add Preferences plugin to set image and region user prefs
 -  add ability to save image to FITS and PNG files (limited Safari support)
 -  add ability to save regions to a text file
 -  fix bugs in Binning plugin (mainly for cfitsio, but some general bug fixes)
 
 Public Release 1.3 (March 30, 2015)
-  add cfitsio library support to JS9 (emscripten compile to javascript)
 -  add data-width and data-height attributes to change the size of JS9 divs
 -  extend tpos and js9helper to use cfitsio (or funtools)
 -  update tpos js9Protocol to 1.1 to include header comments in the header
 -  default WCS is now determined in the browser, not by the back-end server
 -  ensure that section info is maintained during JS9.RefreshImage()
 -  prevent preload from happening more than once
 -  fix broken File->Open menu option
 -  update emscripten to v1.27, add new optimizations to astroem
 
 Public Release 1.2 (January 4, 2015)
-  concurrent release of pyjs9 1.0 on github
 -  update socket.io to the Engine.IO-driven v1.x (specifically v1.2.1)
 -  add ability to reconnect to node.js server automatically if latter restarts
 -  add support for specifying a temp work dir for back-end analysis
 -  add http support to js9Helper.js so messages can be sent via GET, POST
 -  JS9.Load: accepts FITS files as blobs and base64-encoded strings
 -  JS9.RefreshImage: accepts blobs (FITS files), js arrays and typed arrays
 -  JS9.GetImageData(): returned data can be array or base64-encoded string
 -  fix bug in arguments to public api routines sent via external message
 -  fix bug in File List: clicking on same file multiple times now redisplays
 
 Public Release 1.1 (November 15, 2014)
-  NB: api change: added errcode to argument list of RunAnalysis() callback
 -  new api: AddDivs() to add JS9 displays and/or plugins to the web page
 -  new api: Send() sends msgs programmatically (useful for 3rd party helpers)
 -  add support for super-menus that can control multiple JS9 displays
 -  add support for onload callback when displaying FITS files
 -  allow xcen, ycen (in image coords), zoom to be passed in obj to JS9.Load()
 -  re-factor js9Helper.js: each analysis task is its own top-level msg
 -  allow user-defined msgs to be added to analysis tasks more easily
 -  ensure correct region size during RefreshImage() and table binning
 -  add contour plugin to default plugins in js9plugins.js
 -  add checks for NaN values to imexam plugins
 -  fix imexam plugins bug when regions are rotated and resized
 -  fix bug in encircled energy preventing calculation for non-integer radii
 -  properly handle FITS TFORM cards without a repeat value (XMM data)
 -  resize regions properly when tables are binned by a block factor
 -  ensure that datamin and datmamax are updated when a binary table is binned
 -  don't send image notify events to back-end during contrast/bias changes
 
 Public Release 1.0 (September 30, 2014)
-  NB: change to the Public API: id is no longer first argument. See API doc.
 -  infobox plugin upgraded to a tabular display
 -  node.js server sends unique pageid back to JS9
 -  JS9 menus now cover light windows (higher zindex)
 -  improved accuracy of polygon points for contours
 -  moving a polygon point now calls listRegion
 -  added missing commas in WCS display of polygon points
 -  corrected WCS for drag/drop of sections of FITS binary tables
 -  fixed incorrect region size when binning FITS binary tables
 -  fixed memory leak in astroem reg2wcs routine
 -  plugin divs can now set height and width using CSS
 -  added defensive code to remove bash functions from CGI and node calls
 -  updated fabric.js to 1.4.11
 
 Release 1-epsilon (July 28, 2014)
-  JS9.Load() can now load FITS files directly (rather than converting to PNG)
 -  added support for FITS binary tables, including binning and filtering
 -  added support for gzip'ed FITS files
 -  added support for "physical" coordinates (i.e., tied to original data file)
 -  changed 2D graphics subsystem from Kinetic.js to fabric.js
 -  added generalized shape layer support for regions, catalogs, contours, etc.
 -  region context menu is now a light-weight web page with many new features
 -  added text and point regions
 -  position of a pixel is now in the center of the pixel
 -  accelerator key changed from shift key to meta key (command on Mac, control elsewhere)
 -  reduced number of js9 files to load in a web page
 -  redesigned and flattened returned region object
 -  redesigned public API
 -  changed Public routines JS9.Pix2WCS and JS9.WCS2Pix to be 1-indexed
 -  added ability to group and move regions
 -  box rotation is now around the center of the region
 -  all image coordinate are now 1-indexed throughout
 -  fixed bug where adding a polygon pt didn't show until region was selected
 -  changed polygon points to an array of objects {x, y} instead of just x, y
 -  fixed various layout bugs in plugins
 -  updated emscripten to latest version
 -  updated flot to latest version
 -  updated jquery to 1.11.1
 
 Beta Release 13 (April 6, 2014)
-  added support for handling NaN values
 
 Beta Release 12 (March 10, 2014)
-  added support for browser-based analysis via plugins (JS9.RegisterPlugin)
 -  converted Menubar, Info, Panner, Magnifier to plugins
 -  initial version of imexam plugin available (in plugins directory)
 -  initial version of archive/catalog server plugin available
 -  added support for zscale (IRAF min/max algorithm for scaling)
 -  added support for user scale limits
 -  regions can now be moved off the image
 -  shift key disables mouse plugin callbacks
 -  zooming a small image will use all of the available display canvas
 -  added support for sub-pixel zooming
 -  added ability to process all keys in keypress callback
 -  added arrow key support for moving regions
 -  added fractional pixel positions for zoomed images
 -  fixed bug which reset pan when changing colormaps on a zoomed image
 -  added strict mode
 -  update emscripten to 1.8.2
 
 Beta Release 11 (December 18, 2013)
-  initial port to iPad
 -  removed notifyHelper message when mouse enters image window
 -  fixed tpos crash when converting really large images
 -  updated jquery.contextMenu.js
 
 Beta Release 10 (December 9, 2013)
-  added support for RGB composite display
 -  added support for reading in auxiliary files via auxFiles preference
 -  added support for overlaying FITS image masks
 -  added support so that drag and drop files can be found by local analysis
 -  added analOpts.dataPath to specify where to look for drag and drop files
 -  box regions need to rotate around upper left point to ensure consistency
 -  changed name of fitshelper to js9helper
 -  changed JS9.submitAnalysis() to JS9.SubmitAnalysis()
 -  changed analOpts.datadir to analOpts.dataDir
 -  removed wcs event processing from node and CGI helper (use browser wcs)
 -  js9helper not run as a server from js9Helper.js any more (scales better)
 -  added ability to turn off redraw when creating a large number of regions
 -  fixed bug in panner display for non-square images
 -  added work-around for Google Chrome v31 bug (regions not drawn)
 
 Beta Release 9 (October 23, 2013)
-  added support for client-based WCS using emscripten 1.5.6
 -  added drag and drop of FITS images (binary tables are coming)
 -  added support for region callbacks (executed when a region changes)
 -  added JS9.Regions() public routine to retrieve and modify selected regions
 -  added Close Image button to File menu
 -  reduced size of panner when created by View menu
 -  updated Kinetic.js to v4.7.2
 -  minor bug fixes (e.g., annuli strokeWidth not resizing properly)
 
 Beta Release 8 (September 23, 2013)
-  fixed security in node.js support by requiring use of wrapper scripts
 -  added support for CGI-based back-end helpers
 -  implemented automatic discovery of analysis definitions
 -  added timer-based management of WCS update requests
 -  updated socket.io to 0.9.16
 -  changed routine name from JS9.preloadImages() back to JS9.Preload()!
 
 Beta Release 7 (August 19, 2013)
-  fits2png: added support for "%cookie" in odir specification
 -  js9.js and js9Helper.js both now use js9Prefs.json for setting preferences
 -  fixed bug in display/manipulation of panner when image is zoomed
 -  added "none" as an analysis return type to support hidden analysis
 -  changed routine name JS9.Preload() to JS9.preloadImages()
 -  added clipping to region manipulation
 -  fixed region strokewidth problem when zooming image
 -  fixed magnifier and panner where multiple instances of js9 are present
 -  numerous changes to pass new JSLint rules
 -  updated jquery to 1.10.2
 -  updated jquery.flot to 0.8.2
 -  removed references to of jquery-ui in demo files (its not used)
 
 Beta Release 6 (July 22, 2013)
-  added support for panner window, including ability to zoom the panner
 -  added support for magnifier window, including ability to change magnification
 -  implemented zoom menu (zoomIn, zoomOut, zoom1, zoom2, zoom4, zoom8)
 -  added support for all FITS data types (silrd) in js9.js and tpos.c
 -  png file now contains FITS header in json format
 -  NB: the format of the PNG representation file has changed substantially!
 -  raw arrays now implemented as a typed array, using DataView to unpack it
 -  updated Kinetic.js to v4.5.4 (multiple changes required to code)
 
 Beta Release 5 (May 20, 2013)
 
-  added support for dynamic creation of js9 instances (new or light window)
 -  added support for pre-loading images into a js9 on page load
 -  added support for running analysis web page buttons, forms, etc.
 -  added support for printing the image
 -  added new demo pages
 -  changed js9msg script name to js9
 -  loading javascript files is "generic" (no version numbers in filenames)
 -  updated Kinetic.js to v4.5.1
 
 Beta Release 4 (April 26, 2013)
-  added support for polygon regions
 -  added support for fixing (i.e. freezing) regions in place
 -  added support for container regions (constrain position of other regions)
 -  added support for shift key accelerator
 -  fixed multiple bugs in region listOnChange support
 -  updated Kinetic.js to v4.4.3
 
 Beta Release 3 (April 2, 2013)
-  updated Kinetic.js to v4.4.0 to fix new chrome v26.0.1410.43 (whoah!)
 
 Beta Release 2 (April 1, 2013)
-  added support for executing analysis from console window
 -  added support for messaging to js9 via Node-based js9Msg.js
 -  added ability to specify params to region creation
 -  added server mode and input from stdin to js9Msg.js
 
 Beta Release 1 (February 27, 2013)
-  initial beta release with support for displaying FITS images, scaling,
colormaps, external analysis, regions, wcs