1// Copyright (c) 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5var site;
6var key1;
7var key2;
8
9function setRadio(name, value) {
10  var radios = document.querySelectorAll('input[name="' + name + '"]');
11  for (var i = 0; i < radios.length; i++) {
12    radios[i].checked = (radios[i].value == value);
13    radios[i].disabled = !getEnabled();
14  }
15}
16
17function update() {
18  document.body.className = getEnabled() ? '' : 'disabled';
19
20  if (getEnabled()) {
21    $('title').innerText = 'High Contrast is Enabled';
22    $('toggle').innerHTML = '<b>Disable</b> ' +
23                            '<span class="kb">(' + key1 + ')</span>';
24    $('subcontrols').style.display = 'block';
25  } else {
26    $('title').innerText = 'High Contrast is Disabled';
27    $('toggle').innerHTML = '<b>Enable</b> ' +
28                            '<span class="kb">(' + key1 + ')</span>';
29    $('subcontrols').style.display = 'none';
30  }
31
32  setRadio('keyaction', getKeyAction());
33  if (site) {
34    setRadio('scheme', getSiteScheme(site));
35    $('make_default').disabled = (getSiteScheme(site) == getDefaultScheme());
36  } else {
37    setRadio('scheme', getDefaultScheme());
38  }
39  if (getEnabled()) {
40    document.documentElement.setAttribute(
41        'hc',
42        site ? 'a' + getSiteScheme(site) : 'a' + getDefaultScheme());
43  } else {
44    document.documentElement.setAttribute('hc', 'a0');
45  }
46  chrome.extension.getBackgroundPage().updateTabs();
47}
48
49function onToggle() {
50  setEnabled(!getEnabled());
51  update();
52}
53
54function onForget() {
55  resetSiteSchemes();
56  update();
57}
58
59function onRadioChange(name, value) {
60  switch (name) {
61    case 'keyaction':
62      setKeyAction(value);
63      break;
64    case 'apply':
65      setApply(value);
66      break;
67    case 'scheme':
68      if (site) {
69        setSiteScheme(site, value);
70      } else {
71        setDefaultScheme(value);
72      }
73      break;
74  }
75  update();
76}
77
78function onMakeDefault() {
79  setDefaultScheme(getSiteScheme(site));
80  update();
81}
82
83function addRadioListeners(name) {
84  var radios = document.querySelectorAll('input[name="' + name + '"]');
85  for (var i = 0; i < radios.length; i++) {
86    radios[i].addEventListener('change', function(evt) {
87      onRadioChange(evt.target.name, evt.target.value);
88    }, false);
89    radios[i].addEventListener('click', function(evt) {
90      onRadioChange(evt.target.name, evt.target.value);
91    }, false);
92  }
93}
94
95function init() {
96  var i18nElements = document.querySelectorAll('*[i18n-content]');
97  for (var i = 0; i < i18nElements.length; i++) {
98    var elem = i18nElements[i];
99    var msg = elem.getAttribute('i18n-content');
100    elem.innerHTML = chrome.i18n.getMessage(msg);
101  }
102
103  addRadioListeners('keyaction');
104  addRadioListeners('apply');
105  addRadioListeners('scheme');
106  $('toggle').addEventListener('click', onToggle, false);
107  $('make_default').addEventListener('click', onMakeDefault, false);
108  $('forget').addEventListener('click', onForget, false);
109  if (navigator.appVersion.indexOf('Mac') != -1) {
110    key1 = '&#x2318;+Shift+F11';
111    key2 = '&#x2318;+Shift+F12';
112  } else {
113    key1 = 'Shift+F11';
114    key2 = 'Shift+F12';
115  }
116
117  chrome.windows.getLastFocused({'populate': true}, function(window) {
118    for (var i = 0; i < window.tabs.length; i++) {
119      var tab = window.tabs[i];
120      if (tab.active) {
121        if (isDisallowedUrl(tab.url)) {
122          $('scheme_title').innerText = 'Default color scheme:';
123          $('make_default').style.display = 'none';
124        } else {
125          site = siteFromUrl(tab.url);
126          $('scheme_title').innerHTML = 'Color scheme for <b>' + site +
127              '</b>:<br><span class="kb">(' + key2 + ')</span>';
128          $('make_default').style.display = 'block';
129        }
130        update();
131        return;
132      }
133    }
134    site = 'unknown site';
135    update();
136  });
137}
138
139window.addEventListener('load', init, false);
140