// note, this template substitution is XSS, but no way to avoid it in this framework
var expected_alerts = {{GET[alerts]}};
var timeout= "{{GET[timeout]}}";
if (timeout == "") {
  timeout = 2;
}

if(expected_alerts.length == 0) {
  function alert_assert(msg) {
   test(function () { assert_unreached(msg) });
 }
} else {
 var t_alert = async_test('Expecting alerts: {{GET[alerts]}}');
 step_timeout(function() {
   if(t_alert.phase != t_alert.phases.COMPLETE) {
     t_alert.step(function() { assert_unreached('Alert timeout, expected alerts ' + expected_alerts  + ' not fired.') });
     t_alert.done();
    }
 }, timeout * 1000);
 var alert_assert = function (msg) {
     t_alert.step(function () {
         if(msg && msg instanceof Error) {
             msg = msg.message;
         }
         if (msg && msg.match(/^FAIL/i)) {
             assert_unreached(msg);
             t_alert.done();
         }
         for (var i = 0; i < expected_alerts.length; i++) {
             if (expected_alerts[i] == msg) {
                 assert_true(expected_alerts[i] == msg);
                 expected_alerts.splice(i, 1);
                 if (expected_alerts.length == 0) {
                     t_alert.done();
                 }
                 return;
             }
         }
         assert_unreached('unexpected alert: ' + msg);
         t_log.done();
     });
 }.bind(this);
}