15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var blankClockImage;
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var blankClockAnim1Image;
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var blankClockAnim2Image;
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var animationTimer;
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var currentClockImage;
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var port;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateEnabledStatus(alarm) {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var enabled = $('a' + alarm + '_on').checked;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a' + alarm + '_tt').disabled = !enabled;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a' + alarm + '_ampm').disabled = !enabled;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var valid = true;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  try {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var tt = $('a' + alarm + '_tt').value;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var ampm = $('a' + alarm + '_ampm').selectedIndex;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    parseTime(tt, ampm);
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } catch (x) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    valid = false;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (valid) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    $('a' + alarm + '_wrap').removeAttribute('aria-invalid');
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    $('a' + alarm + '_wrap').setAttribute('aria-invalid', 'true');
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enabled) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    $('a' + alarm + '_wrap').classList.remove('disabled');
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    $('a' + alarm + '_wrap').classList.add('disabled');
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function loadAllImages() {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var loadCount = 0;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var img = new Image();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  img.onload = function() {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    blankClockImage = img;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    currentClockImage = blankClockImage;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    drawClock();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  img.src = 'blank-clock-150.png';
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These will finish loading before they're needed, no need
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // for an onload handler.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blankClockAnim1Image = new Image();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blankClockAnim1Image.src = 'blank-clock-ring1-150.png';
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blankClockAnim2Image = new Image();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  blankClockAnim2Image.src = 'blank-clock-ring2-150.png';
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function drawClock(hh, mm, ss) {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (hh == undefined || mm == undefined) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var d = new Date();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    hh = d.getHours();
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mm = d.getMinutes();
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ss = d.getSeconds() + 0.001 * d.getMilliseconds();
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!currentClockImage) {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    loadAllImages();
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var ctx = $('clock').getContext('2d');
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.drawImage(currentClockImage, 0, 0);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Move the hour by the fraction of the minute
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  hh = (hh % 12) + (mm / 60);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Move the minute by the fraction of the second
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mm += (ss / 60);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var hourAngle = Math.PI * hh / 6;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var hourX = Math.sin(hourAngle);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var hourY = -Math.cos(hourAngle);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var minAngle = Math.PI * mm / 30;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var minX = Math.sin(minAngle);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var minY = -Math.cos(minAngle);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var secAngle = Math.PI * ss / 30;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var secX = Math.sin(secAngle);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var secY = -Math.cos(secAngle);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var cx = 75;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var cy = 77;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.lineWidth = 5;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.strokeStyle = '#ffffff';
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.globalAlpha = 0.5;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.beginPath();
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.moveTo(cx - 4 * hourX, cy - 4 * hourY);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.lineTo(cx + 20 * hourX, cy + 20 * hourY);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.stroke();
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.beginPath();
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.moveTo(cx - 8 * minX, cy - 8 * minY);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.lineTo(cx + 35 * minX, cy + 33 * minY);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.stroke();
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.lineWidth = 3;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.strokeStyle = '#696969';
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.globalAlpha = 1.0;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.beginPath();
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.moveTo(cx - 4 * hourX, cy - 4 * hourY);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.lineTo(cx + 20 * hourX, cy + 20 * hourY);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.stroke();
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.beginPath();
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.moveTo(cx - 8 * minX, cy - 8 * minY);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.lineTo(cx + 35 * minX, cy + 33 * minY);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.stroke();
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.lineWidth = 1;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.strokeStyle = '#990000';
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.globalAlpha = 1.0;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.beginPath();
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.moveTo(cx - 4 * secX, cy - 4 * secY);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.lineTo(cx + 40 * secX, cy + 40 * secY);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ctx.stroke();
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateCurrentTime() {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var now = new Date();
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var hh = now.getHours();
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var mm = now.getMinutes();
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var ss = now.getSeconds();
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var str = '';
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (hh % 12 == 0) {
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    str += '12';
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    str += (hh % 12);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  str += ':';
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (mm >= 10) {
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    str += mm;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    str += '0' + mm;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  str += ':';
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (ss >= 10) {
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    str += ss;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    str += '0' + ss;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (hh >= 12) {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    str += " PM";
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    str += " AM";
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('current_time').innerText = str;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Override from common.js
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)window.stopAlarmAnimation = function() {
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  window.clearTimeout(animationTimer);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  currentClockImage = blankClockImage;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  drawClock();
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  isAnimating = false;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Override from common.js
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)window.displayAlarmAnimation = function() {
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  isAnimating = true;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var rings = 100;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function ring() {
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (rings == 0) {
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      stopAlarmAnimation();
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    currentClockImage = (rings % 2 == 0)?
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        blankClockAnim1Image:
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        blankClockAnim2Image;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    drawClock();
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rings--;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    animationTimer = window.setTimeout(ring, 50);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ring();
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function addOutlineStyleListeners() {
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  document.addEventListener('click', function(evt) {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    document.body.classList.add('nooutline');
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, true);
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  document.addEventListener('keydown', function(evt) {
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    document.body.classList.remove('nooutline');
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, true);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function load() {
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  try {
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    port = chrome.runtime.connect();
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    port.onMessage.addListener(function(msg) {
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (msg.cmd == 'anim') {
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        displayAlarmAnimation();
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    });
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } catch (e) {
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  addOutlineStyleListeners();
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stopAll();
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  drawClock();
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  setInterval(drawClock, 100);
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  updateCurrentTime();
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  setInterval(updateCurrentTime, 250);
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function updateTime(timeElement) {
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!parseTime(timeElement.value)) {
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    timeElement.valueAsNumber =
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        timeElement.valueAsNumber % (12 * 60 * 60 * 1000);
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (timeElement.valueAsNumber < (1 * 60 * 60 * 1000))
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      timeElement.valueAsNumber += (12 * 60 * 60 * 1000);
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('clock').addEventListener('click', function(evt) {
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (isPlaying || isSpeaking || isAnimating) {
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      stopAll();
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ringAlarmWithCurrentTime();
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, false);
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('clock').addEventListener('keydown', function(evt) {
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (evt.keyCode == 13 || evt.keyCode == 32) {
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (isPlaying || isSpeaking || isAnimating) {
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        stopAll();
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ringAlarmWithCurrentTime();
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, false);
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Alarm 1
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var a1_tt = localStorage['a1_tt'] || DEFAULT_A1_TT;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a1_tt').value = a1_tt;
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a1_tt').addEventListener('input', function(evt) {
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    updateEnabledStatus(1);
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!updateTime($('a1_tt'))) {
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      evt.stopPropagation();
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    localStorage['a1_tt'] = $('a1_tt').value;
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    updateEnabledStatus(1);
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, false);
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a1_tt').addEventListener('change', function(evt) {
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if ($('a1_tt').value.length == 4 &&
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        parseTime('0' + $('a1_tt').value)) {
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      $('a1_tt').value = '0' + $('a1_tt').value;
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!updateTime($('a1_tt'))) {
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      evt.stopPropagation();
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    localStorage['a1_tt'] = $('a1_tt').value;
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    updateEnabledStatus(1);
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, false);
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var a1_on = (localStorage['a1_on'] == 'true');
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a1_on').checked = a1_on;
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a1_on').addEventListener('change', function(evt) {
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    window.setTimeout(function() {
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      localStorage['a1_on'] = $('a1_on').checked;
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      updateEnabledStatus(1);
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }, 0);
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, false);
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var a1_ampm = localStorage['a1_ampm'] || DEFAULT_A1_AMPM;
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a1_ampm').selectedIndex = a1_ampm;
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a1_ampm').addEventListener('change', function(evt) {
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    localStorage['a1_ampm'] = $('a1_ampm').selectedIndex;
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, false);
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  updateEnabledStatus(1);
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Alarm 2
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var a2_tt = localStorage['a2_tt'] || DEFAULT_A2_TT;
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a2_tt').value = a2_tt;
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a2_tt').addEventListener('input', function(evt) {
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    updateEnabledStatus(2);
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!updateTime($('a2_tt'))) {
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      evt.stopPropagation();
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    localStorage['a2_tt'] = $('a2_tt').value;
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    updateEnabledStatus(2);
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, false);
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a2_tt').addEventListener('change', function(evt) {
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if ($('a2_tt').value.length == 4 &&
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        parseTime('0' + $('a2_tt').value)) {
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      $('a2_tt').value = '0' + $('a2_tt').value;
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!updateTime($('a2_tt'))) {
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      evt.stopPropagation();
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    localStorage['a2_tt'] = $('a2_tt').value;
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    updateEnabledStatus(2);
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, false);
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var a2_on = (localStorage['a2_on'] == 'true');
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a2_on').checked = a2_on;
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a2_on').addEventListener('change', function(evt) {
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    window.setTimeout(function() {
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      localStorage['a2_on'] = $('a2_on').checked;
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      updateEnabledStatus(2);
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }, 0);
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, false);
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var a2_ampm = localStorage['a2_ampm'] || DEFAULT_A2_AMPM;
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a2_ampm').selectedIndex = a2_ampm;
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('a2_ampm').addEventListener('change', function(evt) {
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    localStorage['a2_ampm'] = $('a2_ampm').selectedIndex;
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, false);
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  updateEnabledStatus(2);
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Phrase
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var phrase = localStorage['phrase'] || DEFAULT_PHRASE;
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('phrase').value = phrase;
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $('phrase').addEventListener('change', function(evt) {
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    localStorage['phrase'] = $('phrase').value;
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, false);
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Speech parameters
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var rateElement = $('rate');
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var volumeElement = $('volume');
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var rate = localStorage['rate'] || DEFAULT_RATE;
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var volume = localStorage['volume'] || DEFAULT_VOLUME;
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rateElement.value = rate;
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  volumeElement.value = volume;
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function listener(evt) {
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rate = rateElement.value;
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    localStorage['rate'] = rate;
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    volume = volumeElement.value;
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    localStorage['volume'] = volume;
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rateElement.addEventListener('keyup', listener, false);
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  volumeElement.addEventListener('keyup', listener, false);
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rateElement.addEventListener('mouseup', listener, false);
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  volumeElement.addEventListener('mouseup', listener, false);
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var sound = $('sound');
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var currentSound = localStorage['sound'] || DEFAULT_SOUND;
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (var i = 0; i < sound.options.length; i++) {
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (sound.options[i].value == currentSound) {
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      sound.selectedIndex = i;
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localStorage['sound'] = sound.options[sound.selectedIndex].value;
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sound.addEventListener('change', function() {
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    localStorage['sound'] = sound.options[sound.selectedIndex].value;
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, false);
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var playSoundButton = $('playsound');
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  playSoundButton.addEventListener('click', function(evt) {
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    playSound(false);
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var playSpeechButton = $('playspeech');
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  playSpeechButton.addEventListener('click', function(evt) {
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    speakPhraseWithCurrentTime();
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var voice = $('voice');
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var voiceArray = [];
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (chrome && chrome.tts) {
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    chrome.tts.getVoices(function(va) {
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      voiceArray = va;
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (var i = 0; i < voiceArray.length; i++) {
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var opt = document.createElement('option');
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var name = voiceArray[i].voiceName;
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (name == localStorage['voice']) {
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          opt.setAttribute('selected', '');
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        opt.setAttribute('value', name);
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        opt.innerText = voiceArray[i].voiceName;
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        voice.appendChild(opt);
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    });
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  voice.addEventListener('change', function() {
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var i = voice.selectedIndex;
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    localStorage['voice'] = voiceArray[i].voiceName;
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }, false);
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)document.addEventListener('DOMContentLoaded', load);
404