1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsencr.define('options.internet', function() {
621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  /**
821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * Network settings constants. These enums usually match their C++
921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * counterparts.
1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   */
1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  function Constants() {}
1221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Minimum length for wireless network password.
1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Constants.MIN_WIRELESS_PASSWORD_LENGTH = 5;
1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Minimum length for SSID name.
1521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Constants.MIN_WIRELESS_SSID_LENGTH = 1;
1621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Cellular activation states:
1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Constants.ACTIVATION_STATE_UNKNOWN             = 0;
1821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Constants.ACTIVATION_STATE_ACTIVATED           = 1;
1921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Constants.ACTIVATION_STATE_ACTIVATING          = 2;
2021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Constants.ACTIVATION_STATE_NOT_ACTIVATED       = 3;
2121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Constants.ACTIVATION_STATE_PARTIALLY_ACTIVATED = 4;
2221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Network types:
2321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Constants.TYPE_UNKNOWN   = 0;
2421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Constants.TYPE_ETHERNET  = 1;
2521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Constants.TYPE_WIFI      = 2;
2621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Constants.TYPE_WIMAX     = 3;
2721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Constants.TYPE_BLUETOOTH = 4;
2821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Constants.TYPE_CELLULAR  = 5;
2921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  /**
31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * Creates a new network list div.
32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * @param {Object=} opt_propertyBag Optional properties.
33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * @constructor
34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * @extends {HTMLDivElement}
35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   */
36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  var NetworkElement = cr.ui.define('div');
37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  NetworkElement.prototype = {
39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    __proto__: HTMLDivElement.prototype,
40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    /** @inheritDoc */
42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    decorate: function() {
43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.addEventListener('click', this.handleClick_);
44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    },
45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    /**
47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * Loads given network list.
48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * @param {Array} networks An array of network object.
49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     */
50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    load: function(networks) {
51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.textContent = '';
52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      for (var i = 0; i < networks.length; ++i) {
54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        this.appendChild(new NetworkItem(networks[i]));
55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      }
56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    },
57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    /**
59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * Handles click on network list and triggers actions when clicked on
60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * a NetworkListItem button.
61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * @private
62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * @param {!Event} e The click event object.
63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     */
64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    handleClick_: function(e) {
65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      // We shouldn't respond to click events selecting an input,
66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      // so return on those.
67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      if (e.target.tagName == 'INPUT') {
68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        return;
69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      }
70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      // Handle left button click
71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      if (e.button == 0) {
72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        var el = e.target;
73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        // If click is on action buttons of a network item.
74513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        if (!(el.buttonType && el.networkType && el.servicePath)) {
75513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch          if (el.buttonType) {
76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            return;
77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen          }
78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen          // If click is on a network item or its label, walk up the DOM tree
79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen          // to find the network item.
80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen          var item = el;
81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen          while (item && !item.data) {
82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            item = item.parentNode;
83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen          }
84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          if (item.connecting)
85731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            return;
86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen          if (item) {
88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            var data = item.data;
89513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            // Don't try to connect to Ethernet or unactivated Cellular.
90513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            if (data && (data.networkType == 1 ||
91513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                        (data.networkType == 5 && data.activation_state != 1)))
92731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick              return;
93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            for (var i = 0; i < this.childNodes.length; i++) {
94731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick              if (this.childNodes[i] != item)
95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                this.childNodes[i].hidePassword();
96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            }
974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch            InternetOptions.unlockUpdates();
98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            // If clicked on other networks item.
99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            if (data && data.servicePath == '?') {
100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen              if (InternetOptions.useSettingsUI &&
101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                  data.type != options.internet.Constants.TYPE_CELLULAR) {
102201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                item.showOtherLogin();
103201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch              } else {
104201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                chrome.send('buttonClickCallback',
105201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                            [String(data.networkType),
106201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                             data.servicePath,
107201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                             'connect']);
108201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch              }
109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            }
110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen          }
111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        }
112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      }
113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    }
114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  };
115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  /**
117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * Creates a new network item.
118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * @param {Object} network The network this represents.
119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * @constructor
120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * @extends {HTMLDivElement}
121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   */
122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  function NetworkItem(network) {
123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    var el = cr.doc.createElement('div');
124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    el.data = {
125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      servicePath: network[0],
126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      networkName: network[1],
127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      networkStatus: network[2],
128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      networkType: network[3],
129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      connected: network[4],
130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      connecting: network[5],
131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      iconURL: network[6],
132513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      remembered: network[7],
133513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      activation_state: network[8],
134201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      needs_new_plan: network[9],
1354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      connectable: network[10]
136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    };
137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    NetworkItem.decorate(el);
138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    return el;
139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
141731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
142731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  /**
143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * Decorates an element as a network item.
144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * @param {!HTMLElement} el The element to decorate.
145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   */
146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  NetworkItem.decorate = function(el) {
147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    el.__proto__ = NetworkItem.prototype;
148bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    el.decorate();
149bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  };
150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  NetworkItem.prototype = {
152bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    __proto__: HTMLDivElement.prototype,
153bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
154bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    /** @inheritDoc */
155bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    decorate: function() {
156bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.className = 'network-item';
157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.connected = this.data.connected;
1584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      this.connectable = this.data.connectable;
159513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      this.other = this.data.servicePath == '?';
160bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.id = this.data.servicePath;
161bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      // textDiv holds icon, name and status text.
162bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var textDiv = this.ownerDocument.createElement('div');
163bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      textDiv.className = 'network-item-text';
164bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      if (this.data.iconURL) {
165bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        textDiv.style.backgroundImage = url(this.data.iconURL);
166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      }
167bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
168bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var nameEl = this.ownerDocument.createElement('div');
169bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      nameEl.className = 'network-name-label';
170bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      nameEl.textContent = this.data.networkName;
171bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      textDiv.appendChild(nameEl);
172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
173513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      if (this.other) {
174bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        // No status and buttons for "Other..."
175bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        this.appendChild(textDiv);
176bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        return;
177bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      }
178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
179bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      // Only show status text for networks other than "remembered".
180bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      if (!this.data.remembered) {
181bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        var statusEl = this.ownerDocument.createElement('div');
182bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        statusEl.className = 'network-status-label';
183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        statusEl.textContent = this.data.networkStatus;
184bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        textDiv.appendChild(statusEl);
185bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      }
186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.appendChild(textDiv);
188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var spacerDiv = this.ownerDocument.createElement('div');
190bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      spacerDiv.className = 'network-item-box-spacer';
191bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.appendChild(spacerDiv);
192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
193bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var buttonsDiv = this.ownerDocument.createElement('div');
194513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var self = this;
195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      if (!this.data.remembered) {
196513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        var no_plan =
19721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            this.data.networkType == Constants.TYPE_CELLULAR &&
198201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch            this.data.needs_new_plan;
199513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        var show_activate =
20021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          (this.data.networkType == Constants.TYPE_CELLULAR &&
201513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch           this.data.activation_state !=
20221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen               Constants.ACTIVATION_STATE_ACTIVATED &&
203513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch           this.data.activation_state !=
20421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen               Constants.ACTIVATION_STATE_ACTIVATING);
205513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
206513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        // Show [Activate] button for non-activated Cellular network.
207513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        if (show_activate || no_plan) {
208513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch          var button_name = no_plan ? 'buyplan_button' : 'activate_button';
209513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch          buttonsDiv.appendChild(
210513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch              this.createButton_(button_name, 'activate',
211513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                 function(e) {
212513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                chrome.send('buttonClickCallback',
213513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                            [String(self.data.networkType),
214513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                             self.data.servicePath,
215513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                             'activate']);
216513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch              }));
217513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        }
21821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        // Show disconnect button if not ethernet.
21921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        if (this.data.networkType != Constants.TYPE_ETHERNET &&
22021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            this.data.connected) {
22121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          buttonsDiv.appendChild(
22221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen              this.createButton_('disconnect_button', 'disconnect',
22321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                                  function(e) {
22421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                 chrome.send('buttonClickCallback',
22521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                             [String(self.data.networkType),
22621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                              self.data.servicePath,
22721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                              'disconnect']);
22821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen               }));
22921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        }
230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        if (!this.data.connected && !this.data.connecting) {
231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          // connect button (if not ethernet and not showing activate button)
23221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          if (this.data.networkType != Constants.TYPE_ETHERNET &&
233201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch              !show_activate && !no_plan) {
234201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch            buttonsDiv.appendChild(
235201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                this.createButton_('connect_button', 'connect',
236201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                   function(e) {
237201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                  chrome.send('buttonClickCallback',
238201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                              [String(self.data.networkType),
239201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                               self.data.servicePath,
240201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                               'connect']);
241201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                }));
242201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch          }
243201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        }
244201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        if (this.data.connected ||
24521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            this.data.networkType == Constants.TYPE_CELLULAR) {
246513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch          buttonsDiv.appendChild(
247513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch              this.createButton_('options_button', 'options',
248513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                 function(e) {
249513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                chrome.send('buttonClickCallback',
250513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                            [String(self.data.networkType),
251513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                             self.data.servicePath,
252513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                             'options']);
253513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch              }));
254bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        }
255bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      } else {
256513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        // Put "Forget this network" button.
257513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        var button = this.createButton_('forget_button', 'forget',
258513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                        function(e) {
259513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                       chrome.send('buttonClickCallback',
260513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                   [String(self.data.networkType),
261513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                   self.data.servicePath,
262513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                   'forget']);
263513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                     });
264513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        if (!AccountsOptions.currentUserIsOwner()) {
265513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch          // Disable this for guest non-Owners.
266731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          button.disabled = true;
267731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        }
268731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
269731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        buttonsDiv.appendChild(button);
270bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      }
271bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.appendChild(buttonsDiv);
272bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    },
273bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
274513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    showPassword: function() {
275731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      if (this.connecting)
276731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        return;
2774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      InternetOptions.lockUpdates();
2794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
280bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var passwordDiv = this.ownerDocument.createElement('div');
281bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      passwordDiv.className = 'network-password';
282bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var passInput = this.ownerDocument.createElement('input');
283bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      passwordDiv.appendChild(passInput);
284bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      passInput.placeholder = localStrings.getString('inetPassPrompt');
285bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      passInput.type = 'password';
286bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var buttonEl = this.ownerDocument.createElement('button');
287bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      buttonEl.textContent = localStrings.getString('inetLogin');
288bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      buttonEl.addEventListener('click', this.handleLogin_);
289bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      buttonEl.servicePath = this.data.servicePath;
290bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      buttonEl.style.right = '0';
291bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      buttonEl.style.position = 'absolute';
292bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      buttonEl.style.visibility = 'visible';
293731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      buttonEl.disabled = true;
294bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
295bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var togglePassLabel = this.ownerDocument.createElement('label');
296bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      togglePassLabel.style.display = 'inline';
297bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var togglePassSpan = this.ownerDocument.createElement('span');
298bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var togglePassCheckbox = this.ownerDocument.createElement('input');
299bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      togglePassCheckbox.type = 'checkbox';
300bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      togglePassCheckbox.checked = false;
301bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      togglePassCheckbox.target = passInput;
302bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      togglePassCheckbox.addEventListener('change', this.handleShowPass_);
303bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      togglePassSpan.textContent = localStrings.getString('inetShowPass');
304513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      togglePassLabel.appendChild(togglePassCheckbox);
305bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      togglePassLabel.appendChild(togglePassSpan);
306bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      passwordDiv.appendChild(togglePassLabel);
307bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
308731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      // Disable login button if there is no password.
309731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      passInput.addEventListener('keyup', function(e) {
310731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        buttonEl.disabled =
31121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          passInput.value.length < Constants.MIN_WIRELESS_PASSWORD_LENGTH;
312731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      });
313731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
314bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      passwordDiv.appendChild(buttonEl);
315bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.connecting = true;
316bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.appendChild(passwordDiv);
317bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    },
318bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
319bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    handleShowPass_: function(e) {
320bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var target = e.target;
321bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      if (target.checked) {
322bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        target.target.type = 'text';
323bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      } else {
324bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        target.target.type = 'password';
325bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      }
326bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    },
327bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
328bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    hidePassword: function() {
329bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.connecting = false;
330bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var children = this.childNodes;
331513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      // Remove all password divs starting from the end.
332513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      for (var i = children.length-1; i >= 0; i--) {
333513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        if (children[i].className == 'network-password') {
334bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen          this.removeChild(children[i]);
335bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        }
336bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      }
337bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    },
338bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
339bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    showOtherLogin: function() {
340731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      if (this.connecting)
341731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        return;
342513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
3434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      InternetOptions.lockUpdates();
3444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
345513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var ssidDiv = this.ownerDocument.createElement('div');
346513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      ssidDiv.className = 'network-password';
347bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var ssidInput = this.ownerDocument.createElement('input');
348bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      ssidInput.placeholder = localStrings.getString('inetSsidPrompt');
349513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      ssidDiv.appendChild(ssidInput);
350513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
351513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var securityDiv = this.ownerDocument.createElement('div');
352513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityDiv.className = 'network-password';
353513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var securityInput = this.ownerDocument.createElement('select');
354513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var securityNoneOption = this.ownerDocument.createElement('option');
355513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityNoneOption.value = 'none';
356513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityNoneOption.label = localStrings.getString('inetSecurityNone');
357513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityInput.appendChild(securityNoneOption);
358513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var securityWEPOption = this.ownerDocument.createElement('option');
359513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityWEPOption.value = 'wep';
360513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityWEPOption.label = localStrings.getString('inetSecurityWEP');
361513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityInput.appendChild(securityWEPOption);
362513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var securityWPAOption = this.ownerDocument.createElement('option');
363513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityWPAOption.value = 'wpa';
364513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityWPAOption.label = localStrings.getString('inetSecurityWPA');
365513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityInput.appendChild(securityWPAOption);
366513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var securityRSNOption = this.ownerDocument.createElement('option');
367513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityRSNOption.value = 'rsn';
368513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityRSNOption.label = localStrings.getString('inetSecurityRSN');
369513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityInput.appendChild(securityRSNOption);
370513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityDiv.appendChild(securityInput);
371513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
372513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var passwordDiv = this.ownerDocument.createElement('div');
373513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      passwordDiv.className = 'network-password';
374bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var passInput = this.ownerDocument.createElement('input');
375bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      passInput.placeholder = localStrings.getString('inetPassPrompt');
376513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      passInput.type = 'password';
377513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      passInput.disabled = true;
378bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      passwordDiv.appendChild(passInput);
379513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
380513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var togglePassLabel = this.ownerDocument.createElement('label');
381513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      togglePassLabel.style.display = 'inline';
382513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var togglePassSpan = this.ownerDocument.createElement('span');
383513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var togglePassCheckbox = this.ownerDocument.createElement('input');
384513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      togglePassCheckbox.type = 'checkbox';
385513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      togglePassCheckbox.checked = false;
386513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      togglePassCheckbox.target = passInput;
387513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      togglePassCheckbox.addEventListener('change', this.handleShowPass_);
388513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      togglePassSpan.textContent = localStrings.getString('inetShowPass');
389513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      togglePassLabel.appendChild(togglePassCheckbox);
390513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      togglePassLabel.appendChild(togglePassSpan);
391513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      passwordDiv.appendChild(togglePassLabel);
392513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
393513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var buttonEl =
394513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        this.createButton_('inetLogin', true, this.handleOtherLogin_);
395513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      buttonEl.style.right = '0';
396513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      buttonEl.style.position = 'absolute';
397bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      buttonEl.style.visibility = 'visible';
398513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      buttonEl.disabled = true;
399bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      passwordDiv.appendChild(buttonEl);
400513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
401513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      this.appendChild(ssidDiv);
402513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      this.appendChild(securityDiv);
403bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      this.appendChild(passwordDiv);
404513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
405513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityInput.addEventListener('change', function(e) {
406513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        // If changed to None, then disable passInput and clear it out.
407513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        // Otherwise enable it.
408513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        if (securityInput.value == 'none') {
409513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch          passInput.disabled = true;
410513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch          passInput.value = '';
411513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        } else {
412513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch          passInput.disabled = false;
413513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        }
414513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      });
415513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
416513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var keyup_listener = function(e) {
417513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        // Disable login button if ssid is not long enough or
418513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        // password is not long enough (unless no security)
419513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        var ssid_good =
42021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          ssidInput.value.length >= Constants.MIN_WIRELESS_SSID_LENGTH;
421513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        var pass_good =
422513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch          securityInput.value == 'none' ||
42321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            passInput.value.length >= Constants.MIN_WIRELESS_PASSWORD_LENGTH;
424513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch        buttonEl.disabled = !ssid_good || !pass_good;
425513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      };
426513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      ssidInput.addEventListener('keyup', keyup_listener);
427513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      securityInput.addEventListener('change', keyup_listener);
428513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      passInput.addEventListener('keyup', keyup_listener);
429731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      this.connecting = true;
430bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    },
431bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
432bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    handleLogin_: function(e) {
4334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      // The user has clicked on the Login button. It's now safe to
4344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      // unclock UI updates.
4354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      InternetOptions.unlockUpdates();
436bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var el = e.target;
437bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var parent = el.parentNode;
438bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      el.disabled = true;
439bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var input = parent.firstChild;
440bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      input.disabled = true;
441bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      chrome.send('loginToNetwork', [el.servicePath, input.value]);
442bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    },
443bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
444bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    handleOtherLogin_: function(e) {
4454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      // See comments in handleLogin_().
4464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      InternetOptions.unlockUpdates();
447bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var el = e.target;
448513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var parent = el.parentNode.parentNode;
449bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      el.disabled = true;
450513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var ssid = parent.childNodes[1].firstChild;
451513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var sec = parent.childNodes[2].firstChild;
452513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      var pass = parent.childNodes[3].firstChild;
453513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      sec.disabled = true;
454bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      ssid.disabled = true;
455bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      pass.disabled = true;
456513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      chrome.send('loginToOtherNetwork', [sec.value, ssid.value, pass.value]);
457bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    },
458bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
459bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    /**
460bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * Creates a button for interacting with a network.
461bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * @param {Object} name The name of the localStrings to use for the text.
462bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     * @param {Object} type The type of button.
463bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen     */
464513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    createButton_: function(name, type, callback) {
465bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      var buttonEl = this.ownerDocument.createElement('button');
466bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      buttonEl.buttonType = type;
467513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      buttonEl.textContent = localStrings.getString(name);
468513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      buttonEl.addEventListener('click', callback);
469bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      return buttonEl;
470bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    }
471bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  };
472bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
473bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  /**
474bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * Whether the underlying network is connected. Only used for display purpose.
475bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * @type {boolean}
476bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   */
477bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  cr.defineProperty(NetworkItem, 'connected', cr.PropertyKind.BOOL_ATTR);
478bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
479bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  /**
480bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * Whether the underlying network is currently connecting.
481bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * Only used for display purpose.
482bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   * @type {boolean}
483bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen   */
484bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  cr.defineProperty(NetworkItem, 'connecting', cr.PropertyKind.BOOL_ATTR);
485bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
486513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  /**
487513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch   * Whether the underlying network is an other network for adding networks.
488513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch   * Only used for display purpose.
489513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch   * @type {boolean}
490513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch   */
491513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  cr.defineProperty(NetworkItem, 'other', cr.PropertyKind.BOOL_ATTR);
492513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
4934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  /**
4944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch   * Whether the underlying network is connectable.
4954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch   * @type {boolean}
4964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch   */
4974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  cr.defineProperty(NetworkItem, 'connectable', cr.PropertyKind.BOOL_ATTR);
4984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
499bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  return {
50021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    Constants: Constants,
501bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    NetworkElement: NetworkElement
502bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  };
503bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen});
504