v2.3.0.1
- FIX: Make utils.ColourPicker remember Custom colours for the lifetime
       of foobar2000 being open.

v2.3.0
- CHG: Drop support for foobar2000 v1.3.x. Now requires v1.4 or later.
- NEW: Add utils.DateStringFromTimestamp and utils.TimestampFromDateString
       See docs\interfaces.txt for full details.
- CHG: (Beta3) The Properties dialog has been rewritten and there is no longer
       any "Clear" or "Delete" buttons. Now you can multi-select using your mouse
       and combinations of Ctrl/Shift keys. There is a right click menu to Select
       All/Select None/Invert selection and Remove. Ctrl+A and the Delete keyboard
       shortcuts are also supported.
- CHG: (Beta3) The list view under File>Preferences>JScript Panel now supports
       inline editing from a single click on the value. You no longer
       double click items to open a new dialog.
- CHG: The following methods no longer support the previously optional "force"
       paramter.
       window.Repaint();
       window.RepaintRect(x, y, w, h);
       IFbTitleFormat Eval() // returns an empty string when not playing
- CHG: The following methods no longer support the previously optional "flags"
       parameter. All commands are ran if they exist. It no longer matters if
       they are hidden or not.
       fb.RunContextCommand(command);
       fb.RunContextCommandWithMetadb(command, handle_or_handle_list);
- CHG: These previously optional parameters have been removed:
       IContextMenuManager BuildMenu "max_id"
       IMainMenuManager BuildMenu "count"
       utils.CheckComponent "is_dll"
       utils.WriteTextFile "write_bom" (writing a BOM is no longer supported)
       See docs\interfaces.txt for full details.
- CHG: plman.PlayingPlaylist is now a read-only property.
- CHG: The IPlaylistRecyclerManager interface has been removed and replaced
       with fixed "plman" methods. All previous functionality remains.
       Look at the description for plman.RecyclerCount in docs\interfaces.txt
       or check the" Breaking Changes" wiki page.
- CHG: fb.GetLibraryRelativePath has been removed. Use IMetadbHandleList
       GetLibraryRelativePaths instead.
- CHG: utils.FileTest has been removed and replaced with the following 4 methods:
       utils.Chardet(filename)
       utils.GetFileSize(filename)
       utils.IsFile(filename)
       utils.IsFolder(folder)
       There is no replacement for "split" mode.
- CHG: The "Grab focus" checkbox in the "Configuration Window" and the
       "dragdrop" preprocessor have both been removed. Both features are
       disabled by default but are automatically enabled if relevant
       callbacks like "on_drag_drop" or "on_key_up" are present in the
       script.

https://github.com/marc2k3/foo_jscript_panel/wiki/Breaking-Changes

v2.2.2.4
- FIX: Fix bug introduced in v2.2.2.1 which prevented images loaded with
       gdi.Image / gdi.LoadImageAsync being deleted/overwritten after
       Dispose() had been called.

v2.2.2.3
- FIX: Fix IMetadbHandleList MakeDifference method.

v2.2.2.2
- FIX: Fix broken descriptions for main menu items in the keyboard shortcut
       preferences. Thanks to TheQwertiest for spotting and providing the
       fix.

v2.2.2.1
- CHG: Remove optional "force" argument from fb.GetFocusItem as it had no effect.
       No errors will be thrown if present but it will be ignored. See
       docs\interfaces.txt.
- FIX: Various sample fixes. Volume now scales at the same rate as the
       Default UI volume slider. Thumbs has been fixed to work with Last.fm
       site update.
- CHG: Compiled with latest foobar2000 SDK.

v2.2.2
- FIX: Fix broken colour handling in IGdiBitmap GetColourSchemeJSON. The original code
       by kbuffington aka MordredKLB was good but I broke it so apologies for that.
- CHG: IGdiBitmap GetColourScheme has been removed. See this page for how to use the
       better JSON method mentioned above.

https://github.com/marc2k3/foo_jscript_panel/wiki/Breaking-Changes

v2.2.1.1
- CHG: Restore access to the Configuration Window via the Columns UI
       Preferences layout tab. Although buggy, access needs to remain to recover
       from installing bad scripts.
- FIX: Fix various sample problems reported on the foobar2000 forums such as
       main menu Edit items not always being available and some JS-Smooth "overflow"
       errors.

v2.2.1
- FIX: Revert all timer related changes made in v2.2.0.2-v2.2.0.3. Although tested
       and working fine on my main machine, it caused crashes on Windows XP and
       foobar2000 not to exit properly when running inside a Windows 7 virtual machine.
       Apologies for any inconvenience!

v2.2.0.3
- FIX: Fix potential freeze on shutdown caused by timer threads. Thanks to TheQwertiest.
- CHG: Access to the "Configuration Window" via the "Layout" tab in the Columns UI
       Preferences has been blocked. The "Configure Panel..." button will now
       be grayed out. Always use the context menu on the panel itself.
- FIX: Some minor sample bugs have been fixed.

v2.2.0.2
- FIX: Revert some changes made in v2.2.0 which may have broken various scripts
       that made use of plman (Playlist Manager) methods/properties. It would
       typically be noticeable if you had no playlists on startup or
       removed all playlists.

v2.2.0.1
- FIX: Fix issue introduced in v2.2.0 where some colours with certain levels of
       alpha transparency were not handled properly.

v2.2.0
- FIX: (Beta6) Fix a bug introduced in Beta3 where "Configuration Window" settings were
       not applied immediately.
- FIX: (Beta5) Restore Windows XP support which was broken in Beta1 to Beta4.
- CHG: Remove window.DlgCode. The docs were wrong, behaviour was inconsistent between
       Default UI and Columns UI and it's just not needed. Support for all keys will be
       enabled if you check "Grab focus" in the "Configuration Window". All instances
       will need removing from scripts. If you want to support this and older components
       with the same script, do something like:

       if ('DlgCode' in window) { window.DlgCode = 4; }
- CHG: fb.RunMainMenuCommand, fb.RunContextCommand, fb.RunContextCommandWithMetadb
       have all been rewritten and must be supplied with the full path to their commands.
       Case is not important. You should use forward slashes with no spaces. eg:
       fb.RunMainMenuCommand("Library/Search");
- CHG: All files imported to the "Configuration Window", Preferences>Tools or
       included in a script via the "import" preprocessor directive must be
       UTF8 encoded (with or without BOM). utils.ReadTextFile is unaffected although
       it should have better UTF8 detection than before.
- CHG: The default "write_bom" argument for utils.WriteTextFile when omitted is now False.
- CHG: The code that parses the preprocessor section has been rewritten from scratch.
       The only difference is that double quotes in the name/author no longer need to be
       escaped so they will be duplicated if you did this previously.
- CHG: window.GetColourCUI and window.GetFontCUI no longer accept the previously optional
       "client_guid" argument.
- NEW: Add menu toolbar to "Configuration Window" which provides quick access to all
       included samples and docs. You can now Import/Export scripts via the File menu.
       The "Reset" option now properly resets all settings.
- NEW: The preset colour schemes previously bundled inside the "Colour Schemes" folder can
       now be loaded directly from the main preferences under "Tools>JScript Panel".
- NEW: Add utils.ListFiles and utils.ListFolders. See docs\interfaces.txt.
- NEW: Update fb.CreateHandleList to take an optional handle argument to create a list
       containing a single item. See docs\interfaces.txt.
- NEW: Add FbMetadbHandle GetAlbumArt method which returns the image and path
       without the need for using utils.GetAlbumArtAsync and
       on_get_album_art_done(). See docs\interfaces.txt.
- FIX: utils.FileTest can now query files over 4GB in size when in "s" mode.
       See docs\interfaces.txt
- FIX: Various sample fixes.
- CHG: Lots of internal code refactoring and external dependency updates.
- CHG: If you browse the component folder and notice the "jscript.api" and
       "interface.api" files are missing, it's intentional. The contents are now
       included inside the component.

v2.1.8
- NEW: Add FbMetadbHandleList RemoveAttachedImages method.
- FIX: There are no longer any limitations managing attached images.
       Working with the playing file is now supported. Thanks to Peter
       for the new SDK release and the help I needed!

v2.1.7.2
- FIX: Fix various sample bugs.
- CHG: Compile component with latest foobar2000 and Windows SDKs.

v2.1.7.1
- FIX: Images loaded by gdi.LoadImageAsync are no longer locked by the process.
- FIX: Correctly bump utils.Version - it wasn't updated in v2.1.7.

v2.1.7
- NEW: Add FbMetadbHandleList AttachImage / RemoveAttachedImage methods.
       See docs\interfaces.txt. There are some limitations!!

v2.1.6
- NEW: Add IContextMenuManager InitContextPlaylist method which shows
       playlist specific options not available when passing a handle list
       to InitContext.
- FIX: Update JSPlaylist and JS Smooth Playlist samples with the above method.

v2.1.5.2
- CHG: utils.InputBox is now centred when you open it plus you can now
       detect when the user presses Cancel. See docs\interfaces.txt.
- FIX: Fix bug with Autoplaylists sample which prevent existing queries
       from being edited.
- CHG: gr.GdiDrawText no longer has any return value.

v2.1.5.1
- FIX: Fix incorrect spelling on the "Cancel" button in utils.InputBox.

v2.1.5
- NEW: Add utils.InputBox method. See docs\interfaces.txt.
- FIX: Update samples in "complete" folder with above method - input is no longer
       truncated at 254 characters.
- CHG: Remove "fromhook" argument from "on_metadb_changed" callback. From now on, it
       will always be "undefined".
- FIX: Ensure JSPlaylist doesn't load the same font more than once. Previously it
       was using gdi.Font inside on_paint which is bad practice.

v2.1.4
- NEW: Add on_dsp_preset_changed callback. See docs\callbacks.txt.
- NEW: Add fb.GetDSPPresets and fb.SetDSPPreset methods. See docs\interfaces.txt.
- NEW: Add FbMetadbHandleList GetLibraryRelativePaths method. See docs\interfaces.txt.
- NEW: Add FbMetadbHandleList Convert method which converts a handle list to an array
       of handles. See docs\interfaces.txt.

v2.1.3
- NEW: Add fb.GetOutputDevices and fb.SetOutputDevice methods. See docs\interfaces.txt.
- NEW: Add on_output_device_changed callback. See docs\callbacks.txt.
- FIX: JSPlaylist / JS Smooth Browser/Playlist, make right click behaviour consistent
       with other playlist/library viewers. Holding Shift should now show hidden context
       menu items.
- FIX: Playback now restarts when changing replaygain mode with fb.ReplaygainMode

v2.1.2
- CHG: foobar2000 v1.3 is now supported. v1.3 users must make sure they have the
       Visual C++ 2017 redist installed: https://aka.ms/vs/15/release/vc_redist.x86.exe
       Full details here: https://github.com/marc2k3/foo_jscript_panel/wiki/Installation

v2.1.1
- NEW: A new IGdiBitmap GetColourSchemeJSON method has been added. See docs\interfaces.txt.
       Thanks to github.com/kbuffington for the contribution.
- FIX: Fix script error when dragging items on to JSPlaylist / JS Smooth Playlist with no
       active playlist.

v2.1.0.2
- FIX: Fix crash when supplying plman.IsAutoPlaylist/plman.IsPlaylistLocked with
       an invalid playlistIndex.

v2.1.0.1
- NEW: Add plman.RemovePlaylistSwitch method. Unlike plman.RemovePlaylist, this
       automatically sets another playlist as active if removing the active playlist.
       See docs\interfaces.txt.
- FIX: Update "JS Smooth Playlist Manager" and "JSPlaylist" to make use of the above
       method which should fix some previous buggy behaviour whem removing playlists.

v2.1.0
- CHG: Requires foobar2000 v1.4 Beta 8 or later.
- CHG: The drag/drop functionality has been completely rewritten by TheQwertiest.
       This will break all existing scripts which allow dragging in files from external
       sources. The ability to drag handle lists from JScript Panel to other panels
       has been added. The included playlist samples have been updated so they're
       compatible but they do not make use of the new functionality.
- NEW: A new on_replaygain_mode_changed callback has been added. See docs\callbacks.txt.
- CHG: The behaviour of plman.AddLocations with the "select" argument set to "true" has
       been slightly modified. See docs\interfaces.txt.

https://github.com/marc2k3/foo_jscript_panel/wiki/Drag-and-Drop
https://github.com/marc2k3/foo_jscript_panel/wiki/Breaking-Changes

v2.0.6
- NEW: Add fb.CopyHandleListToClipboard method. Contents can then be pasted in other components
       or as files in Windows Explorer. See docs\interfaces.txt.
- NEW: Add fb.CheckClipboardContents / fb.GetClipboardContents. Contents can be handles
       copied to the clipboard in other components or a file selection from Windows
       Explorer. See docs\interfaces.txt.
- CHG: "JSPlaylist" has been updated for full clipboard functionality with updated
       context menu items and keyboard shortcut support (CTRL+C, CTRL+X and CTRL+V).

v2.0.5
- NEW: Add IFbTitleFormat EvalWithMetadbs method that takes a handle list as an argument.
       Returns a VBArray. See docs\interfaces.txt.
- NEW: plman.SortPlaylistsByName. See docs\interfaces.txt.
- FIX: The FbMetadbHandleList OrderByRelativePath method now takes subsong index in to account.
       Thanks to WilB for reporting.
- CHG: plman.GetPlaybackQueueContents has been restored after being removed in the v2 cleanse.
       It's the only way to determine if a single playlist item has been queued more than once.
       Note that each IFbPlaybackQueueItem is read-only. See docs\interfaces.txt
- CHG: The "Properties" dialog size and layout have been tweaked.

v2.0.4
- NEW: New plman.FindPlaylist and plman.FindOrCreatePlaylist methods have been addded.
- CHG: on_library_items_added, on_library_items_changed, on_library_items_removed
       now return a handle list of affected items. See docs\callbacks.txt.
- CHG: Various doc tidy up/fixes. Some plman methods have been updated to return
       -1 on failure. See docs\interfaces.txt, docs\callbacks.txt.

v2.0.3
- CHG: utils.WriteTextFile now takes an optional "write_bom" argument. It
       defaults to true if omitted. If "false", then the resulting file
       should be UTF8 without BOM. See docs\interfaces.txt.
- CHG: Tidy up docs and IMenuObj interface. See the "Breaking Changes"
       wiki for details.

https://github.com/marc2k3/foo_jscript_panel/wiki/Breaking-Changes

v2.0.2
- FIX: Fix random component crash caused by utils.WriteTextFile.
- FIX: Fix "JS-Smooth" script image caching feature choking on some images.
       The breakage was introduced by me in v2.0.1.2 as I attempted
       to update some old code. Thanks to always.beta for reporting.

v2.0.1.2
- FIX: As part of the v2 update, I accidentally broke the ability to drag
       tracks within "JSPlaylist". This has now been fixed.

v2.0.1.1
- CHG: Add usage notes to "Rating" and "Last.fm Lover" samples. "Rating" can
       now tag files or use the JScript Panel "Playback Stats" database in
       addition to using "foo_playcount" like it did before.
- NEW: A "Queue Viewer" script has been added to the "samples\complete" folder.
       It has a couple of basic options on the right click menu.

v2.0.1
- NEW: Add "Last.fm Lover" sample. Imports all loved tracks from Last.fm
       in to the new JScript Panel "Playback Stats" database. All loved
       tracks will have the value of %JSP_LOVED% set to 1 which is available
       in all components/search. You can then love/unlove tracks by clicking
       the heart icon. Obviously this requires a Last.fm account. Use the right
       click menu to set your username and authorise the script.
- FIX: The timer mechanism behind window.SetInterval and window.SetTimeout
       has been completely rewritten by TheQwertiest. Previously, it was
       limited to 16 instances and then it would fail causing random buggy
       behaviour in some advanced scripts.
- FIX: Fix ListenBrainz not clearing its cache after a successful submission.
       Thanks to zeremy for reporting.
- FIX: Fix "Thumbs" sample not deleting images.

v2.0.0
- CHG: Requires foobar2000 v1.4. It will not load with anything earlier.
- CHG: fb.Trace has been removed and replaced with a native console.log method.
       It takes multiple arguments as before.
- CHG: All callbacks/methods with "Color" in the name have been renamed
       with "Colour". This will break most scripts!
       on_colors_changed -> on_colours_changed
       utils.ColorPicker -> utils.ColourPicker
       utils.GetSysColor -> utils.GetSysColour
       window.GetColorCUI -> window.GetColourCUI
       window.GetColorDUI -> window.GetColourDUI
       IGdiBitmap GetColorScheme -> GetColourScheme
- CHG: The IFbPlaybackQueueItem interface and plman.CreatePlaybackQueueItem
       method have been removed.
- CHG: plman.GetPlaybackQueueContents has been replaced with plman.GetPlaybackQueueHandles
       which returns a handle list. You can check the Count property so there is no longer
       any need for plman.GetPlaybackQueueCount and plman.IsPlaybackQueueActive
       which have been removed.
- CHG: on_refresh_background_done and window.GetBackgroundImage have both
       been removed.
- CHG: The IGdiBitmap BoxBlur method has been removed. Try StackBlur instead.
- CHG: IContextMenuManager InitContext only accepts a handle list as an argument.
- CHG: Anyone who has a "js_settings" folder in their foobar2000 profile folder
       from using my previous samples should move the contents in to the "js_data"
       folder. Typically, this would be autoplaylists.json, thumbs.ini, listenbrainz.ini.
- NEW: Enable Windows XP support. Also, support for Vista/7/WINE with IE7/IE8 has
       been restored. ES5 features are still supported for those with IE9 or later.
       If your scripts crash after upgrading and making the changes outlined above, make
       sure to check the "Script Engine" setting in the "Configuration Window".
- NEW: Add utils.WriteTextFile. Always creates a UTF8-BOM file.
- NEW: Add window.Name property. See docs\interfaces.txt.
- NEW: Add a custom "Playback Stats" backend and "handle" methods for writing values.
       This has had breaking changes since "Beta4" so any existing users must look at updated
       wiki and update their script. All previously saved data should be fine.

See the following pages for full details:
https://github.com/marc2k3/foo_jscript_panel/wiki/Breaking-Changes
https://github.com/marc2k3/foo_jscript_panel/wiki/Configuration-Window
https://github.com/marc2k3/foo_jscript_panel/wiki/WINE
https://github.com/marc2k3/foo_jscript_panel/tree/master/foo_jscript_panel/samples
https://github.com/marc2k3/foo_jscript_panel/wiki/Playback-Stats

v1.3.2.2
- NEW: Component now reports version on script error.
- FIX: "JSPlaylist"/"JS Smooth Playlist" have been unable to tag files since v1.3.0
       when foo_playcount was missing.

v1.3.2.1
- NEW: Add fb.AlwaysOnTop property. Can be used to read or write the setting. A
       new "on_always_on_top_changed" callback has been added to detect when it
       changes via any other means such as using the menu, keyboard shortcuts, etc.

v1.3.2
- FIX: Improved handling of utf8 files without BOM. This affects files loaded
       via the PREPROCESSOR section and the "Configuration Window>Tools>Import" button.
       They should now be treated the same as files with BOM.

v1.3.1
- FIX: Fixed a bug where plman.IsPlaylistItemSelected didn't return a proper boolean
       value. Thanks to TheQwertiest for reporting.
- FIX: Fixed a bug where plman.ShowAutoPlaylistUI didn't always return the correct
       boolean value.
- CHG: plman.MovePlaylistSelection now returns a boolean value to indicate success
       or failure.
- CHG: Update docs for consistency with actual component behaviour. Some methods
       which returned useless values have been updated to return nothing.
- CHG: On failure, these now return -1
       IFbFileInfo InfoFind
       IFbFileInfo MetaFind
       IFbMetadbHandleList BSearch
       IFbMetadbHandleList Find
       plman.ActivePlaylist
       plman.CreateAutoPlaylist
       plman.PlayingPlaylist
- CHG: Remove the whole IStyleTextRender interface. Anything that uses
       gdi.CreateStyleTextRender or was based on "glow text sample.txt"
       will no longer work
- CHG: Remove these IFbPlaylistRecyclerManager properties/methods:
       Id
       FindById
       RestoreById

v1.3.0
- CHG: Support for IE7/IE8/WINE users has been dropped. Your computer
       must have IE9 or later installed.
- CHG: The "UpdateFileInfoSimple" handle and handle list methods are
       now gone.
- NEW: A new "UpdateFileInfoFromJSON" method has been added.
       If anyone needs help with this, just ask.
- NEW: You can now create an empty handle list with fb.CreateHandleList()
       See docs\interfaces.txt.

v1.2.4
- NEW: Add utils.ColorPicker which is a popup dialog for selecting colours.
       See docs\interfaces.txt, samples\basic\Color Picker.txt
- FIX: Fix various bugs in samples\complete folder.
- CHG: Listenbrainz sample now has an on/off toggle on the menu.

v1.2.3.3
- CHG: No component changes except a version bump.
- FIX: Fix typo in "musicbrainz.txt". Thanks to zeremy for spotting.
- CHG: Listenbrainz now has caching/retry support. It's my first attempt
       at this so please report any issues! I also need reports of any
       code 400 errors from the server as the script will need updating
       before these tracks can be submitted successfully.
- NEW: Br3tt's JS Smooth scripts are now bundled with the component and the
       separate repository has been nuked.

v1.2.3.2
- CHG: No component changes except a version bump.
- FIX: Listenbrainz. Fix "musicbrainz track id" not being submitted from
       m4a files.

v1.2.3.1
- CHG: No component changes except a version bump. All changes are to samples.
- NEW: Last.fm Bio, Allmusic, Listenbrainz samples. "Thumbs" can download images
       from Last.fm again but only manually.
- FIX: Most samples are now DPI aware so text/tooltips should increase inline
       with other desktop elements. For existing users, each panel script should
       be re-imported from the "samples\complete" folder.

v1.2.3
- NEW: Add fb.ReplaygainMode. Can be used to retrieve or set the value.
       See docs\interfaces.txt
- CHG: Hide JScript Panel main menu items. Given they're meant for binding to
       to keyboard shortcuts/standard buttons, there is no need for them to be
       visible. Hold Shift if you really want to access them from the menu.
- FIX: Fix FbMetadbHandleList MakeUnion method and update docs with examples for
       MakeUnion, MakeDifference and MakeIntersection methods.

v1.2.2
- NEW: Add new "on_main_menu" callback. 10 main menu items have been created
       meaning you can now bind them to global keyboard shortcuts, standard
       toolbar buttons, etc and have them run your own custom code.
       See docs\callbacks.txt

v1.2.1
- FIX: Fix bug where the playing item handle was never sent to the
       "on_playback_edited" callback even though the docs said it would.
- FIX: Tidy up docs and auto-complete hints for "on_metadb_changed"
       and "on_selection_changed".

v1.2.0.1
- CHG: Minor code cleanups but no new component features for now.
- NEW: Add Last.fm Similar Artists / Charts & Musicbrainz samples.

v1.2.0
- NEW: If your computer has IE9 or later installed, newer ECMAScript5 features
       are now available. Many thanks to TheQwertiest for discovering how to do this.
- CHG: The "Script engine" option has been removed from the "Configuration" window.
       The newer Chakra engine is always used if available but will fall back to
       JScript if not.
- NEW: utils.version reports the component version. See docs\interfaces.txt.
- CHG: Minor tweaks to "Configuration Window".
- FIX: Update "JSPlaylist" so it works with Chakra engine. Thanks to zeremy
       for reporting
- FIX: A previous window.RepaintRect bug reported by Wilb has now been fixed.
- FIX: Zap a few more compiler warnings.

v1.1.7
- FIX: Remove trailing space in "Console" when using fb.Trace.
- FIX: Text Reader sample. Ensure "Open containing folder" works when specifiying
       a folder rather than a full path to a file.
- FIX: Thumbs sample. Fix issue where using %profile% in the "Custom folder"
       setting would fail if the profile path contained special title formatting
       characters like %()[]'
- CHG: Remove "Delay load" from "Configuration" window.

v1.1.6.2
- FIX: plman.AddLocations: Original order of files in array is now maintained.
- CHG: plman.AddLocations: Progress dialog stays hidden for short operations.

v1.1.6.1
- CHG: Minor changes to Console logging on startup.
- NEW: The "complete" samples folder has 2 new scripts: "thumbs.txt" and "text reader.txt".
       Thumbs allows the display/cycling of multiple images in a given folder. Text reader
       displays the contents of any plain text file. Title formatting can be used to specify
       the folder/file paths.

v1.1.6
- NEW: IGdiBitmap StackBlur method. See docs\interfaces.txt and
       samples\basic\StackBlur.txt.
- CHG: Update ApplyMask sample.

v1.1.5.1
- NEW: Add "Open component folder" to default right click menu.
       This provides quick access to the docs and samples.


v1.1.5
- NEW: plman.IsPlaylistLocked(playlistIndex). See docs\interfaces.txt.
- NEW: on_playlists_changed is now called when a playlist's lock
       status changes through the use of components such as foo_utils or
       foo_playlist_attributes. See docs\callbacks.txt.
- CHG: Existing samples moved in to new "basic" subfolder.
- NEW: Add new "complete" samples folder containing some more feature complete
       samples.
- NEW: Add updated "JSPlaylist" for JScript Panel.

v1.1.4.1
- FIX: Prevent old tooltips lingering after script error.

v1.1.4
- FIX: main preferences keyboard shortcuts were never processed in columns UI
       when JScript Panel had focus.

v1.1.3
- NEW: IGdiBitmap SaveAs method.

v1.1.2
- FIX: Fix on_mouse_wheel not being called with certain trackpads.

v1.1.1
- NEW: New "on_mouse_wheel_h" callback for left/right scrolling. See docs\callbacks.txt.

v1.1.0
- CHG: GetQueryItems should be a "fb" method, not "plman".
- FIX: Fix crash when using GetQueryItems with dates as part of the query.
- CHG: Update Columns UI SDK.

v1.0.7
- NEW: fb.GetLibraryRelativePath(handle)

v1.0.6
- NEW: FbMetadbHandleList UpdateFileInfoSimple method.

v1.0.5
- CHG: Update Columns UI SDK.
- CHG: Tidy up docs/samples.

v1.0.4
- NEW: utils.MapString(text, lcid, flags)

v1.0.3
- CHG: Revert previous Columns UI SDK update.

v1.0.2
- CHG: Update Columns UI SDK.
- CHG: Hopefully removed all traces of WSH Panel Mod
       from sources and documentation!

v1.0.1
- CHG: Update default script so you know a blank panel
       is JScript Panel as opposed to WSH Panel Mod.

v1.0.0 (Compared to WSH Panel Mod 1.5.6)
- CHG: Given the name, it obviously doesn't support VBScript.
- CHG: Due to using updated library files, support for Windows XP
       has been dropped.
- CHG: Compiled with new SDK. Requires foobar2000 v1.3 or above.
- CHG: Remove functions marked as obsolete 3+ years ago. Obviously
       there are replacements that been around even longer.

       window.WatchMetadb
       window.UnWatchMetadb
       window.CreateTimerTimeout
       window.CreateTimerInterval
       window.KillTimer
       UpdateFileInfo
- CHG: Remove all these fb methods because plman (Playlist Manager) methods
       also exist.

       fb.CreatePlaylist
       fb.RemovePlaylist
       fb.RenamePlaylist
       fb.DuplicatePlaylist
       fb.MovePlaylist
       fb.ActivePlaylist
       fb.PlayingPlaylist
       fb.PlaylistCount
       fb.PlaylistItemCount
       fb.GetPlaylistName
       fb.PlaybackOrder
- CHG: Even though plman alternatives of these fb methods did not exist, I've
       removed them for consistency.

       fb.CreateAutoPlaylist
       fb.IsAutoPlaylist
       fb.ShowAutoPlaylistUI

       plman.CreateAutoPlaylist, plman.IsAutoPlaylist and plman.ShowAutoPlaylistUI
       have been created to replace them.
- CHG: plman.GetPlaylistFocusItemHandle has been removed because it's identical to fb.GetFocusItem
       which is more commonly used.
- CHG: utils.GetAlbumArt removed as the corresponding function has been
       removed from the foobar2000 SDK. utils.GetAlbumArtAsync, utils.GetAlbumArtEmbedded
       and utils.GetAlbumArtV2 are still present.
- CHG: AppendMenuItem no longer accepts MF_POPUP as a flag. Use
       AppendTo instead.
- CHG: Remove on_tooltip_custom_paint() callback. window.CreateTooltip has been
       updated to accept custom font paramters. See docs\interfaces.txt.
- CHG: "Properties" dialog has a larger default size.
- CHG: "Safe mode" is no longer an option.
- CHG: Tidy up samples.
- CHG: Tidy up preprocessors. You no longer have to specify these when using the on_metadb_changed()
       callback.
       // @feature "v1.4"
       // @feature "watch-metadb"
       Due to this change, "on_metadb_changed" will only receive a "handle list" and never a "handle"
       as the first argument. Also, "on_selection_changed" won't receive a "handle" argument.
- NEW: fb.GetLibraryItems() returns a handle list of all items in library.
- NEW: fb.IsLibraryEnabled() (boolean)
- NEW: fb.ShowLibrarySearchUI(query) opens the Library>Search window
       populated with the query you set.
- NEW: on_library_items_added() callback.
- NEW: on_library_items_removed() callback.
- NEW: on_library_items_changed() callback.
- NEW: plman.AddLocations(playlistIndex, paths[, select])
       paths: an array of file paths and/or URLs
       select: false if omitted.
- NEW: plman.ClearPlaylist(playlistIndex). Use to clear a specified playlist. fb.ClearPlaylist still exists
       because it is just a shortcut to the Edit menu command which clears the active playlist.
- NEW: plman.GetQueryItems(source_handlelist, query) returns an unsorted
       handle list. Consider using OrderByFormat, etc on the result.
- NEW: plman.UndoBackup(playlistIndex). If you call this before
       adding/removing/reordering playlist items, you will be able to use
       the undo/redo commands on the Edit menu.
- NEW: CalcTotalDuration() handle list method. returns the total in seconds.
- NEW: CalcTotalSize() handle list method. returns the total in bytes.
- NEW: utils.FormatDuration(seconds). returns a string like "3wk 2d 1:30:21"
- NEW: utils.FormatFileSize(bytes). returns a string like "7.9 GB"
- NEW: window.CreateToolTip now takes optional font name, font size (px) and
       style arguments. eg window.CreateToolTip("Segoe UI", 32, 1);
       Defaults of "Segoe UI", 12 and 0 are used if omitted. See docs\flags.txt
       for valid style values.
- NEW: Default right click menu now has a "Reload" script option. This
       saves opening/closing the dialog when working on external files. In
       addition, a new window.Reload method has been added so you can force a panel
       reload with your own menus, buttons, etc.
- NEW: Script errors are now displayed in a popup window in addition to
       the Console like it was previously.
- FIX: EstimateLineWrap no longer leaves stray punctuation when wrapping
       text at end of line.
- FIX: IFbMetadbHandle FileSize now works with "JScript" engine. Previously,
       it only worked with "JScript9".
