diff --git a/oliver_screen/static/brick1.png b/oliver_screen/static/brick1.png
new file mode 100644
index 0000000..cbafff1
Binary files /dev/null and b/oliver_screen/static/brick1.png differ
diff --git a/oliver_screen/static/brick2.png b/oliver_screen/static/brick2.png
new file mode 100644
index 0000000..f29d1d8
Binary files /dev/null and b/oliver_screen/static/brick2.png differ
diff --git a/oliver_screen/static/brick3.png b/oliver_screen/static/brick3.png
new file mode 100644
index 0000000..35ca352
Binary files /dev/null and b/oliver_screen/static/brick3.png differ
diff --git a/oliver_screen/static/brick4.png b/oliver_screen/static/brick4.png
new file mode 100644
index 0000000..f7b75e2
Binary files /dev/null and b/oliver_screen/static/brick4.png differ
diff --git a/oliver_screen/static/falling_pieces.js b/oliver_screen/static/falling_pieces.js
new file mode 100644
index 0000000..95cd06c
--- /dev/null
+++ b/oliver_screen/static/falling_pieces.js
@@ -0,0 +1,125 @@
+/* */
+function is_tetris_song() {
+ var test;
+ $("#now_playing").filter(function(){
+ test = /Tetris|Korobeiniki/i.test( $(this).text() );
+ });
+ return test;
+}
+
+function play_tetris() {
+ /* http://www.webkit.org/blog-files/bricks/ and kak-logos */
+ $("#gameContainer").show();
+}
+function dont_play_tetris() {
+ $("#gameContainer").hide();
+}
+
+/* Define the number of bricks to be used in the animation */
+const NUMBER_OF_BRICKS = 15;
+
+/*
+ Called when the "Falling Bricks" page is completely loaded.
+*/
+function init()
+{
+ /* Get a reference to the element that will contain the bricks */
+ var container = document.getElementById('brickContainer');
+ /* Fill the empty container with new bricks */
+ for (var i = 0; i < NUMBER_OF_BRICKS; i++)
+ {
+ container.appendChild(createABrick());
+ }
+}
+
+function randomRotation() {
+ if(Math.random() <= 0.25) {
+ return "deg0";
+ } else if(Math.random() <= 0.5) {
+ return "deg90";
+ } else if(Math.random() <= 0.75) {
+ return "deg180";
+ } else {
+ return "deg270";
+ }
+}
+
+/*
+ Receives the lowest and highest values of a range and
+ returns a random integer that falls within that range.
+*/
+function randomInteger(low, high)
+{
+ return low + Math.floor(Math.random() * (high - low));
+}
+
+
+/*
+ Receives the lowest and highest values of a range and
+ returns a random float that falls within that range.
+*/
+function randomFloat(low, high)
+{
+ return low + Math.random() * (high - low);
+}
+
+
+/* Receives a number and returns its CSS pixel value. */
+function pixelValue(value)
+{
+ return value + 'px';
+}
+
+
+/* Returns a duration value for the falling animation. */
+
+function durationValue(value)
+{
+ return value + 's';
+}
+
+
+/* Uses an img element to create each brick. */
+function createABrick()
+{
+ /* Start by creating a wrapper div, and an empty img element */
+ var brickDiv = document.createElement('div');
+ var image = document.createElement('img');
+
+ /* Randomly choose a brick image and assign it to the newly created element */
+ /* FIXME: this url should be dynamic */
+ image.src = '/static/brick' + randomInteger(1, 5) + '.png';
+
+ brickDiv.style.top = "-150px";
+
+ /* Position the brick at a random location along the screen */
+ brickDiv.style.left = pixelValue(randomInteger(0, 450));
+
+ /* Set a random rotation for the brick */
+ /* FIXME: this does'nt work */
+ //brickDiv.style.webkitTranslateRotate = randomRotation();
+ //brickDiv.className = randomRotation();
+ //console.log(brickDiv.style);
+
+ /* Set the -webkit-animation-name property with these values */
+ brickDiv.style.webkitAnimationName = 'fade, drop';
+
+ /* Set the duration for the fade and drop animations */
+ var fadeAndDropDuration = durationValue(10.0);
+
+ /* Set the -webkit-animation-duration property with these values */
+ brickDiv.style.webkitAnimationDuration = fadeAndDropDuration + ', ' + fadeAndDropDuration;
+
+ var brickDelay = durationValue(randomFloat(0, 10));
+ brickDiv.style.webkitAnimationDelay = brickDelay + ', ' + brickDelay;
+
+ // add the to the