<!DOCTYPE html>
<html>
<head>
<!--
 Copyright (C) 2007 Apple Inc.  All rights reserved.

 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions
 are met:
 1. Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
 2. Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.

 THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
-->

<title>SunSpider JavaScript Benchmark Results</title>
<link rel="stylesheet" href="sunspider.css">
</head>

<body>
<h2><span id="logo">&#x2600;</span>SunSpider JavaScript Benchmark Results</h2>

<p><a href="sunspider-driver.html">Run Again</a></p>

<p><input style="width: 90%;" id="selfUrl" type="text" readonly="readonly"><br>
<small>(You can bookmark this results URL for later comparison.)</small></p>

<form onsubmit="event.preventDefault(); compare(other.value);">To compare to another run, paste a saved result URL in the text field below and press enter:<br>
<input style="width: 90%;" name="other" type="text"><br>
</form>

<pre id="console">
</pre>


<script>
var selfUrlInput = document.getElementById("selfUrl");
selfUrlInput.value = location;

var output = pivot(eval("(" + decodeURI(location.search.substring(1)) + ")"));

function pivot(input) {
    var output = [];
    for (var test in input) {
        for (var i = 0; i < input[test].length; i++) {
             if (!output[i])
                 output[i] = {};
             output[i][test] =  input[test][i];
        }
    }
    return output;
}

function print(str) {
    var console = document.getElementById("console");
    console.appendChild(document.createTextNode(str));
    console.appendChild(document.createElement("br"));
}
</script>

<script src="sunspider-test-prefix.js"></script>
<script src="sunspider-analyze-results.js"></script>
<script src="sunspider-compare-results.js"></script>

<script>
var output2 = output;

function compare(other)
{
    document.getElementById("console").innerHTML = "";
    var output1 = pivot(eval("(" + decodeURI(other.split("?")[1]) + ")"));
    sunspiderCompareResults(output1, output2);
}
</script>


</body>
</html>
