<script>
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

 var list = 
     [
  "blueprint/sample.html",
  "blueprint/forms.html",
  "blueprint/grid.html",
  "blueprint/elements.html",
  "js-input/3d-thingy.html",
  "js-input/crypto-otp.html",
  "js-input/sunspider/3d-cube.html",
  "js-input/sunspider/3d-morph.html",
  "js-input/sunspider/3d-raytrace.html",
  "js-input/sunspider/access-binary-trees.html",
  "js-input/sunspider/access-fannkuch.html",
  "js-input/sunspider/access-nbody.html",
  "js-input/sunspider/access-nsieve.html",
  "js-input/sunspider/bitops-3bit-bits-in-byte.html",
  "js-input/sunspider/bitops-bits-in-byte.html",
  "js-input/sunspider/bitops-bitwise-and.html",
  "js-input/sunspider/bitops-nsieve-bits.html",
  "js-input/sunspider/controlflow-recursive.html",
  "js-input/sunspider/crypto-aes.html",
  "js-input/sunspider/crypto-md5.html",
  "js-input/sunspider/crypto-sha1.html",
  "js-input/sunspider/date-format-tofte.html",
  "js-input/sunspider/date-format-xparb.html",
  "js-input/sunspider/math-cordic.html",
  "js-input/sunspider/math-partial-sums.html",
  "js-input/sunspider/math-spectral-norm.html",
  "js-input/sunspider/regexp-dna.html",
  "js-input/sunspider/string-base64.html",
  "js-input/sunspider/string-fasta.html",
  "js-input/sunspider/string-tagcloud.html",
  "js-input/sunspider/string-unpack-code.html",
  "js-input/sunspider/string-validate-input.html"
     ];
 var interval = 1000;
 var idx = 0;
 var w;
 
 window.onload = function () {
     w = window.open("about:blank");
     window.setTimeout(loadURL, interval); 
 };
 function loadURL () {
     w.close();
     w = window.open(list[idx++]);
     if (idx < list.length) {
     window.setTimeout(loadURL, interval);
     } else {
         window.setTimeout(Quitter.quit, interval);
     }
 }
 var i;
 
 for(i=0; i < list.length;i++) {
     document.write(list[i]);
     document.write("<br>");
 }
  </script>
