Tue Sep 10 22:40 2013 CDT
    * www/account.html, www/acp.html, www/login.html: 
      Import www/assets/js/data.js for easy access to user preferences
    * www/assets/js/account.js, www/assets/js/acp.js: remove redundant
      cookie util functions
    * www/assets/js/data.js, www/assets/js/util.js, www/assets/js/iourl.js:
      Add a user option to enable SSL for websockets and API calls
    * www/assets/js/ui.js: Add a warning if the user loaded the page over
      SSL (because some media players throw warnings and others don't work
      at all (Twitch.tv, Justin.tv: go eat a dick)
    * www/assets/js/player.js: Prevent race conditions for media types that
      depend on swfobject

Tue Sep 10 17:17 2013 CDT
    * www/assets/js/player.js: Fix loading over SSL for everything except
      TwitchTV and JustinTV

Tue Sep 10 16:45 2013 CDT
    * lib/channel.js: Don't attempt to emit to SSL sockets if it's disabled

Tue Sep 10 16:34 2013 CDT
    * www/channel.html, www/assets/js/jwplayer.js: Cache jwplayer script
      locally since their server doesn't support SSL

Tue Sep 10 16:10 2013 CDT
    * lib/server.js, lib/api.js: Implicitly trust X-Forwarded-For when the
      source ip is 127.0.0.1

Tue Sep 10 14:09 2013 CDT
    * lib/config.js, lib/server.js: Add a config key for the passphrase
      to the ssl key.

Mon Sep  9 22:10 2013 CDT
    * lib/acp.js: Change acp-channel-unload callback to duplicate the list
      of users in the channel to prevent concurrent modification while
      kicking
    * lib/channel.js: As an extra precaution, set user.channel = null after
      kicking a user

Mon Sep  9 17:11 2013 CDT
    * lib/server.js: If SSL is enabled in config, create an additional
      server listening with SSL for websockets and HTTPS traffic
    * lib/config.js: Add config keys for SSL
    * lib/channel.js: Broadcast messages to both regular and SSL sockets
    * www/assets/js/iourl.js: Add SSL_URL and automatically set WEB_URL and
      IO_URL to SSL_URL when the protocol is HTTPS
    * www/assets/js/callbacks.js: Automatically set the secure option on
      io.connect()
    * www/assets/js/ui.js, www/index.html, www/channel.html: Fix links to
      be dependent on the protocol

Sun Sep  8 17:41 2013 CDT
    * lib/server.js: Change behavior of unloadChannel - deletes all object
      keys in the channel object and then sets channel.dead = true
    * lib/channel.js: Add extra checks in callbacks to ensure certain things
      don't happen if the channel is dead
    * lib/playlist.js: Add extra checks to kill the playlist if the channel
      it is associated with is dead
    * lib/database.js: Add extra checks to prevent loading channel data into
      a dead channel object
    * tests/fastQuit.js: A simple script to open a connection, join a
      channel, and disconnect immediately to test for race conditions

Sat Sep  7 23:38 2013 CDT
    * lib/user.js: Add "loggingIn" field to act as a lock on async logins.
      Delay further login attempts until the current login attempt finishes.
      Should prevent cases where sending multiple logins quickly in
      succession caused race conditions and thus odd "duplicate login"
      kicks.

Sat Sep  7 15:43 2013 CDT
    * lib/channel.js, lib/user.js: Add an extra check for channel.users[i]
      to write an error message (instead of kicking) when the same user that
      is connecting is the one being kicked.

Fri Sep  6 16:29 2013 CDT
    * lib/config.js: Add an io-host option to allow binding socket.io to
      a different IP than the webserver

Fri Sep  6 15:51 2013 CDT
    * lib/utilities.js: Tweak the throttle code for rate limiters to fix
      incorrect behavior of the burst cap after the cooldown period has
      been passed
    * tests/rateLimiter.js: Write a couple quick test cases to ensure that
      rate limiting is handled properly

Thu Sep  5 22:52 2013 CDT
    * www/assets/js/callbacks.js: Disable the channel registration button
      and change its text while a registration attempt is being processed
      (prevents DB errors from impatient people spamming the button)
      (addresses Issue #276 <Remove register channel button after click> )

Thu Sep  5 13:45 2013 CDT
    * acp.js, actionlog.js, api.js, channel.js, chatcommand.js, config.js,
      customembed.js, database.js, filter.js, get-info.js, logger.js,
      media.js, notwebsocket.js, playlist.js, poll.js, rank.js, server.js,
      stats.js, ullist.js, user.js, utilities.js: move server
      files into lib/ folder to clean up the root directory of the project.
    * api.js: replace regex with $util.isValidChannelName (L68);
      fix relative file paths (per moving api.js to lib/)
    * server.js: fix relative file paths
    * channel.js: fix relative file paths

Wed Sep  4 22:45 2013 CDT
    * changelog: initialize changelog file

Wed Sep  4 17:47 2013 CDT
    * www/assets/js/data.js: add CHANNEL.usercount variable
    * www/assets/js/callbacks.js: update CHANNEL.usercount variable when
      the usercount changes
    * www/assets/js/util.js: add "Anonymous" to the usercount breakdown
      display (addresses Issue #270 <Suggestion: Put Mute button on Right
      click menu + anon count>)

Changelog established on Wed Sep  4 2013
