<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Million dollar test</title>
<style type="text/css" media="screen">
    body {
        padding: 0px; margin: 0px; font-size: 12px; font-family:"Lucida Grande", Verdana, Arial, sans-serif;
        background:#303030;
    }
    .ie {text-align: left; width:1000px;position:relative;visibility:hidden;z-index:1;}
    .grid {height: 1000px; width:1000px; position:relative;z-index:153;xoverflow:hidden;}
    .row {background:url(100grid_inv.png) #000;height: 100px; text-align: left; position:relative;width:1000px;z-index:10;}
    #lq {width:1000px;position:relative;z-index:0;text-align:left;}
    .bz {perspective: 1500px;perspective-origin: 50% 325px;}
    .fc {transform-style: preserve-3d;transform:  rotateY(0deg) ;opacity: 1.0;}
    @keyframes spin_3d {
    0%    { transform: rotateY(0)       rotateZ(0); }
    33%   { transform: rotateY(-20deg)  rotateZ(-20deg); }
    65%   { transform: rotateY(20deg) rotateZ(20deg); }
    100%  { transform: rotateY(0deg) rotateZ(0deg); }
    }
    .plane > a {display:block;height:100%;width:100%;}
    .plane {
        position: absolute;
        opacity:0.5;
        background-repeat:no-repeat;
        transition: transform 0.3s, opacity 0s;-webkit-backface-visibility: visible;}
</style>

<script type="text/javascript">
function loadBlocks() {
    document.getElementById("ie").style.visibility = "visible";
    document.getElementById("ie").className = document.getElementById("ie").className + " bz";
    document.getElementById("grid").className = document.getElementById("grid").className + " fc";
    document.getElementById("lq").style.display = "none";

    var cubes;

    cubify(200,0,250,50);
    cubify(800,500,900,600);
    cubify(250,350,300,400);
    cubify(600,600,650,650);
    cubify(850,0,900,50);
    cubify(650,450,700,500);
    cubify(100,500,250,650);
    cubify(400,600,500,700);
    cubify(700,600,800,700);
    cubify(350,0,500,150);
    cubify(450,200,500,250);
    cubify(550,250,600,300);
    cubify(0,400,100,450);
    cubify(600,150,650,200);
    cubify(600,700,650,750);
    cubify(150,850,450,950);
    cubify(200,100,300,200);
    cubify(750,200,950,400);
    cubify(250,700,350,800);
    cubify(600,800,700,900);
    cubify(100,300,150,350);
    cubify(0,300,50,350);
    cubify(850,650,950,700);
    cubify(900,100,950,150);
    cubify(200,400,250,450);
    cubify(200,250,250,300);
    cubify(300,600,350,650);
    cubify(50,200,100,250);
    cubify(100,100,150,150);
    cubify(0,0,5,5);
    cubify(470,430,475,435);
    cubify(520,480,525,485);
    cubify(570,380,575,385);
    cubify(550,0,600,50);
    cubify(650,0,700,50);
    cubify(425,390,455,400);
    cubify(435,400,445,430);
    cubify(525,425,530,430);
    cubify(450,500,465,515);
    cubify(650,100,750,200);
    cubify(0,0,50,50);
    cubify(700,750,900,800);
    cubify(495,390,510,405);
    cubify(495,445,500,450);
    cubify(560,450,565,455);
    cubify(460,460,465,465);
    cubify(525,370,530,375);
    cubify(490,420,495,425);
    cubify(520,440,525,445);
    cubify(510,420,515,425);
    cubify(495,465,500,470);
    cubify(475,405,480,410);
    cubify(545,400,550,405);
    cubify(485,370,490,375);
    cubify(430,365,435,370);

    document.getElementById("grid").innerHTML = cubes + document.getElementById("grid").innerHTML;

    function cubify(x1, y1, x2, y2)
    {
        var width, height,dw;
        width = x2 - x1;
        height = y2 - y1;
        if (width < height) {
            dw = width;
        } else {
            dw = height;
        }
        cubes += addBlock(x1,y1,width,height,dw);
    }
    
    function addBlock(x1,y1,xf,qp,dw)
    {
       return "<div class='a_cube'><div class='plane one' style='background-color: red;height:"+dw+"px;width:"+dw+"px;top:"+y1+"px;left:"+x1+"px;transform:rotateY(90deg) rotateZ(-90deg) translateX(0px) translateY(-"+(dw/2)+"px) translateZ("+(dw/2)+"px) translateY(0px);position:absolute;'></div><div class='plane two' style='background-color: blue;height:"+dw+"px;width:"+dw+"px;top:"+y1+"px;left:"+x1+"px;transform:rotateY(90deg) rotateX(180deg) rotateZ(-90deg) translateX(0px) translateY(-"+(dw/2)+"px) translateZ("+(dw/2)+"px) translateY(0px);position:absolute;'></div><div class='plane three' style='background-color: green;height:"+dw+"px;width:"+dw+"px;top:"+y1+"px;left:"+x1+"px;transform:rotateX(-90deg) translateX(0px) translateZ("+(dw/2)+"px) translateY(-"+(dw/2)+"px);position:absolute;'></div><div class='plane four' style='background-color: yellow;height:"+dw+"px;width:"+dw+"px;top:"+y1+"px;left:"+x1+"px;transform:rotateY(90deg) rotateX(90deg) rotateZ(-90deg) translateY(-"+(dw/2)+"px) translateX(0px) translateZ("+(dw/2)+"px) translateY(0px);position:absolute;'></div><div class='plane five' style='background-color: gray;height:"+dw+"px;width:"+dw+"px;top:"+y1+"px;left:"+x1+"px;transform:rotateY(0deg) translateX(0px) translateZ("+(dw)+"px) translateY(0px);position:absolute;'></div></div>";
    }

    document.getElementById("grid").style.animation = "spin_3d 36s infinite linear";
};

</script>
</head>
<body onload="loadBlocks()">
<center>
    <div id="lq">
        <div style="top: 252px; left: 203px; width: 196px; height: 196px; position: relative;
            z-index: 0; text-align: left; border: 0px solid #999; padding: 0px; background: #333;
            -moz-border-radius: 0px; -webkit-border-radius: 0px; text-align: center;">
            $1 a pixel
        </div>
    </div>
    <div class="ie" id="ie">
        <div class="grid" id="grid">
            <div class="row" id="row0"></div><div class="row" id="row1"></div><div class="row" id="row2"></div><div class="row" id="row3"></div><div class="row" id="row4"></div><div class="row" id="row5"></div><div class="row" id="row6"></div><div class="row" id="row7"></div><div class="row" id="row8"></div><div class="row" id="row9"></div>
        </div>
    </div>
</center>
</body>
</html>
