Skin the player level info display (closes #912).

Since there isn't a lot of place for the player's name,
the name will get truncated to 15 characters max.

There is a lot of duplication of the HTML structure,
but that's how things are currently set up and I still find it
cleaner (and easier) to duplicate the HTML than to dynamically
generate it with JS from a template.
Stop queues when changing tabs (refs #928, #927)

So that animations and sounds stop playing when the user changes tabs
(specifically level-up sounds when changing from a game in a complete
tab to another one), all queues must be stopped.  To do so, we must keep
track of queues: I chose to use the $(root) container as a global queue
element, in addition to a $(root).data('queues') array with the names of
the queues in use.

Most of the changes here involve refactoring the calls to .queue() to
accomodate the above.

However, this changeset also removes the debug code introduced in #927,
as I was finally able to reproduce the problem: it turns out that when
you open a tab of a previously completed game, the players_info[] array
will not contain the id of the next player.  I added some "duct tape"
so the error does not come up.  However, this may not be desired
behavior, and needs to be discussed.
Merge branch 'master' of git://gitorious.org/~arbrandes/cardstories/arbrandes-cardstories
Stop the FB login window poping up in IE (closes #935).

Unfortunatelly I couldn't figure out why that happens, but stopping
keydown event propagation in the chat_plugin chat input key handler
prevents that from happening.
Fix a bug when changing mind on the card (closes #936).

I introduced this bug while working on anonymous views for
the create steps. I had to change the way the closing of the
dock worked in the create_pick_card case, but accidently also
changed the behaviour for the case where the author changes his mind,
which should remain intact.

This commit fixes my mistake and adds a test case.
Updates README (implicit dependency, post-process of tables)
Fixes #943 - Missing DEFAULT_FROM_EMAIL in django's sample configuration file

Added better default for sender of "password recovery" emails. Was
previously set by Django to "webmaster@localhost".
Added instructions/dependencies to run the Python & JS tests
Fix failing chat.js test (closes #946).

It seems that when stopping propagation on an event object,
you shouldn't be reusing the same event object again, which
I guess makes sense.

Create a new keydown event every time you need one in tests instead
of reusing the same event multiple times.
Fixes #941 - Bots don't pick a card - exceptions.KeyError: 39

The bots were still using NCARDS as the maximum number of card_id, not
taking into account the cards that the players can earn (NCARDS_EARNED).
When a player happened to chose a card he earned, the bot hadn't set an
initial value for that card's score, and was thus crashing.
Implement events log table (closes #938).

The table structure is basically the same as described in #65,
except that there is no field that indicates whether the event
belongs to the owner or the player because that should be evident
from the event type (author events don't overlap with player events).

I decided to store event types as integers and not as strings, which would
have been a bit more user friendly, but I decided against it as the event_logs
table has the potential to be quite large and storing event type as an integer
should be both more efficient and take up less space.

The event logging slows down the test_game.py tests quite a bit.
On my machine the tests run in 3.5 seconds with logging disabled and
in about 5 seconds with logging enabled. That looks like a big difference,
I wasn't really expecting it to be so noticeable.

The test_event_logs.py test is rather awkward because the logging is totally
async, so I came up with a hackish way of testing the events serially.
Merge branch 'master' of git://gitorious.org/~antoviaque/cardstories/antoviaques-cardstories
Fixed bogus copyright header
Closes #937 - Notification email templating & sending

Adds base script to send mass-mailing, using Django's email sending
classes, along with its templating capabilities. The script is
standalone, but shares the configuration file from the django website.

For now, the script only sends a test email, in MIME multipart
(HTML/plain text) with an image attached, to a hard-coded test
recipient.
Merge branch 'master' of git://gitorious.org/cardstories-mtyaka/cardstories
Use the new star dance pngs (with visible shadow) (closes #934).

I created a new png sprite from the new sequence pngs. Since it was
only four different images, each of them repeated for 6 frames,
I created a sprite with only those four images and changed the spritely
framerate from 24 down to 4 for this particular sprite.
Implement functions to query/aggregate event logs (closes #957).

These functions are to be used for composing the daily emails.

They are split across two modules, some of them reside in the
cardstories.event_logs module itself, while others are part
of the mailing.aggregate module.

To be honest I'm not entirely sure why I split them like this.
The idea was the the more generic functions that only query
the event_logs table should be part of the event_logs module,
while those more specific to emails would be inside mailing.aggregate.
In the end I'm not really sure whether the event_logs function turned
out to be as generic as I imagined.

The idea is that for mail sending we will be using plain sync
python functions, not twisted's async stuff. This is to keep things
simple for now.
Show advertise window immediately (refs #932)

After this changeset the advertise window will be shown immediately
after entering the invitation_owner state.
Merge remote-tracking branch 'antoviaque/master'
Merge remote-tracking branch 'mtyaka/master'