15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 2011 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var a1Timer = null;
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var a2Timer = null;
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var port = null;
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var iconFlashTimer = null;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var HOUR_MS = 1000 * 60 * 60;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Override from common.js
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)window.stopFlashingIcon = function() {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  window.clearTimeout(iconFlashTimer);
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome.browserAction.setIcon({'path': 'clock-19.png'});
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Override from common.js
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)window.flashIcon = function() {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var flashes = 10;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function flash() {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (flashes == 0) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      stopFlashingIcon();
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (flashes % 2 == 0) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome.browserAction.setIcon({'path': 'clock-highlighted-19.png'});
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome.browserAction.setIcon({'path': 'clock-19.png'});
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    flashes--;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    iconFlashTimer = window.setTimeout(flash, 500);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  flash();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function setTimer(alarmHours, alarmMinutes) {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var alarmTime = (alarmHours * 60 + alarmMinutes) * 60 * 1000;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var d = new Date();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var now = d.getHours() * HOUR_MS +
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            d.getMinutes() * 60 * 1000 +
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            d.getSeconds() * 1000;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var delta = (alarmTime - now);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (delta >= -5000 && delta < 1000) {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ringAlarm(alarmHours, alarmMinutes);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (port) {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      port.postMessage({'cmd': 'anim'});
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return null;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (delta < 0) {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    delta += HOUR_MS * 24;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (delta >= 1000) {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (delta > HOUR_MS) {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delta = HOUR_MS;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    console.log('Timer set for ' + delta + ' ms');
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return window.setTimeout(resetTimers, delta);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return null;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function resetTimers() {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (a1Timer) {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    window.clearTimeout(a1Timer);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  try {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var a1_on = (localStorage['a1_on'] == 'true');
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var a1_tt = localStorage['a1_tt'] || DEFAULT_A1_TT;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var a1_ampm = localStorage['a1_ampm'] || DEFAULT_A1_AMPM;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (a1_on) {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var alarmHoursMinutes = parseTime(a1_tt, a1_ampm);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var alarmHours = alarmHoursMinutes[0];
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var alarmMinutes = alarmHoursMinutes[1];
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      a1Timer = setTimer(alarmHours, alarmMinutes);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } catch (e) {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    console.log(e);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  try {
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var a2_on = (localStorage['a2_on'] == 'true');
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var a2_tt = localStorage['a2_tt'] || DEFAULT_A2_TT;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var a2_ampm = localStorage['a2_ampm'] || DEFAULT_A2_AMPM;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (a2_on) {
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var alarmHoursMinutes = parseTime(a2_tt, a2_ampm);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var alarmHours = alarmHoursMinutes[0];
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var alarmMinutes = alarmHoursMinutes[1];
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      a2Timer = setTimer(alarmHours, alarmMinutes);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } catch (e) {
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    console.log(e);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (a1_on || a2_on) {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    chrome.browserAction.setIcon({'path': 'clock-19.png'});
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    chrome.browserAction.setIcon({'path': 'clock-disabled-19.png'});
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function onLocalStorageChange() {
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  resetTimers();
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function initBackground() {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  window.addEventListener('storage', onLocalStorageChange, false);
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome.runtime.onConnect.addListener(function(popupPort) {
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    port = popupPort;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    port.onDisconnect.addListener(function() {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      port = null;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    });
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)initBackground();
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)resetTimers();
127