<!DOCTYPE html>
<html>
    <head>
        <title>Jasmine Spec Runner</title>

        <!-- jasmine source -->
        <link rel="shortcut icon" type="image/png" href="spec/lib/jasmine-1.2.0/jasmine_favicon.png">
        <link rel="stylesheet" type="text/css" href="spec/lib/jasmine-1.2.0/jasmine.css">
        <script type="text/javascript" src="spec/lib/jasmine-1.2.0/jasmine.js"></script>
        <script type="text/javascript" src="spec/lib/jasmine-1.2.0/jasmine-html.js"></script>

        <!-- include source files here... -->
        <script type="text/javascript" src="js/index.js"></script>

        <!-- include spec files here... -->
        <script type="text/javascript" src="spec/helper.js"></script>
        <script type="text/javascript" src="spec/index.js"></script>

        <script type="text/javascript">
            (function() {
                var jasmineEnv = jasmine.getEnv();
                jasmineEnv.updateInterval = 1000;

                var htmlReporter = new jasmine.HtmlReporter();

                jasmineEnv.addReporter(htmlReporter);

                jasmineEnv.specFilter = function(spec) {
                    return htmlReporter.specFilter(spec);
                };

                var currentWindowOnload = window.onload;

                window.onload = function() {
                    if (currentWindowOnload) {
                        currentWindowOnload();
                    }
                    execJasmine();
                };

                function execJasmine() {
                    jasmineEnv.execute();
                }
            })();
        </script>
    </head>
    <body>
        <div id="stage" style="display:none;"></div>
    </body>
</html>
