summaryrefslogtreecommitdiffstats
path: root/content/manager
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--content/manager/createAccount.js244
-rw-r--r--content/manager/createAccount.xhtml97
-rw-r--r--content/manager/editAccountOverlay.js56
-rw-r--r--content/manager/editAccountOverlay.xhtml154
4 files changed, 551 insertions, 0 deletions
diff --git a/content/manager/createAccount.js b/content/manager/createAccount.js
new file mode 100644
index 0000000..72c266b
--- /dev/null
+++ b/content/manager/createAccount.js
@@ -0,0 +1,244 @@
+/*
+ * This file is part of EAS-4-TbSync.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+ "use strict";
+
+var { TbSync } = ChromeUtils.import("chrome://tbsync/content/tbsync.jsm");
+
+const eas = TbSync.providers.eas;
+
+var tbSyncEasNewAccount = {
+
+ startTime: 0,
+ maxTimeout: 30,
+ validating: false,
+
+ onClose: function () {
+ //disallow closing of wizard while validating
+ return !this.validating;
+ },
+
+ onCancel: function (event) {
+ //disallow closing of wizard while validating
+ if (this.validating) {
+ event.preventDefault();
+ }
+ },
+
+ onLoad: function () {
+ this.providerData = new TbSync.ProviderData("eas");
+
+ this.elementName = document.getElementById('tbsync.newaccount.name');
+ this.elementUser = document.getElementById('tbsync.newaccount.user');
+ this.elementUrl = document.getElementById('tbsync.newaccount.url');
+ this.elementPass = document.getElementById('tbsync.newaccount.password');
+ this.elementServertype = document.getElementById('tbsync.newaccount.servertype');
+
+ document.getElementById("tbsync.newaccount.wizard").getButton("back").hidden = true;
+ this.onUserDropdown();
+
+ document.getElementById("tbsync.error").hidden = true;
+ document.getElementById("tbsync.spinner").hidden = true;
+
+ document.addEventListener("wizardfinish", tbSyncEasNewAccount.onFinish.bind(this));
+ document.addEventListener("wizardcancel", tbSyncEasNewAccount.onCancel.bind(this));
+ // bug https://bugzilla.mozilla.org/show_bug.cgi?id=1618252
+ document.getElementById('tbsync.newaccount.wizard')._adjustWizardHeader();
+ },
+
+ onUnload: function () {
+ },
+
+ onUserTextInput: function () {
+ document.getElementById("tbsync.error").hidden = true;
+ switch (this.elementServertype.value) {
+ case "select":
+ document.getElementById("tbsync.newaccount.wizard").getButton("finish").disabled = true;
+ break;
+
+ case "auto":
+ document.getElementById("tbsync.newaccount.wizard").getButton("finish").disabled = (this.elementName.value.trim() == "" || this.elementUser.value == "" || this.elementPass.value == "");
+ break;
+
+ case "office365":
+ document.getElementById("tbsync.newaccount.wizard").getButton("finish").disabled = (this.elementName.value.trim() == "" || this.elementUser.value == "");
+ break;
+
+ case "custom":
+ default:
+ document.getElementById("tbsync.newaccount.wizard").getButton("finish").disabled = (this.elementName.value.trim() == "" || this.elementUser.value == "" || this.elementPass.value == "" || this.elementUrl.value.trim() == "");
+ break;
+ }
+ },
+
+ onUserDropdown: function () {
+ if (this.elementServertype) {
+ switch (this.elementServertype.value) {
+ case "select":
+ document.getElementById('tbsync.newaccount.user.box').hidden = true;
+ document.getElementById('tbsync.newaccount.url.box').hidden = true;
+ document.getElementById('tbsync.newaccount.password.box').hidden = true;
+ document.getElementById("tbsync.newaccount.wizard").getButton("finish").label = TbSync.getString("newaccount.add_custom","eas");
+ break;
+
+ case "auto":
+ document.getElementById('tbsync.newaccount.user.box').hidden = false;
+ document.getElementById('tbsync.newaccount.url.box').hidden = true;
+ document.getElementById('tbsync.newaccount.password.box').hidden = false;
+ document.getElementById("tbsync.newaccount.wizard").getButton("finish").label = TbSync.getString("newaccount.add_auto","eas");
+ break;
+
+ case "office365":
+ document.getElementById('tbsync.newaccount.user.box').hidden = false;
+ document.getElementById('tbsync.newaccount.url.box').hidden = true;
+ document.getElementById('tbsync.newaccount.password.box').hidden = true;
+ document.getElementById("tbsync.newaccount.wizard").getButton("finish").label = TbSync.getString("newaccount.add_custom","eas");
+ break;
+
+ case "custom":
+ default:
+ document.getElementById('tbsync.newaccount.user.box').hidden = false;
+ document.getElementById('tbsync.newaccount.url.box').hidden = false;
+ document.getElementById('tbsync.newaccount.password.box').hidden = false;
+ document.getElementById("tbsync.newaccount.wizard").getButton("finish").label = TbSync.getString("newaccount.add_custom","eas");
+ break;
+ }
+ this.onUserTextInput();
+ //document.getElementById("tbsync.newaccount.name").focus();
+ }
+ },
+
+ onFinish: function (event) {
+ if (document.getElementById("tbsync.newaccount.wizard").getButton("finish").disabled == false) {
+ //initiate validation of server connection
+ this.validate();
+ }
+ event.preventDefault();
+ },
+
+ validate: async function () {
+ let user = this.elementUser.value;
+ let servertype = this.elementServertype.value;
+ let accountname = this.elementName.value.trim();
+
+ let url = (servertype == "custom") ?this.elementUrl.value.trim() : "";
+ let password = (servertype == "auto" || servertype == "custom") ? this.elementPass.value : "";
+
+ if ((servertype == "auto" || servertype == "office365") && user.split("@").length != 2) {
+ alert(TbSync.getString("autodiscover.NeedEmail","eas"))
+ return;
+ }
+
+ this.validating = true;
+ let error = "";
+
+ //document.getElementById("tbsync.newaccount.wizard").canRewind = false;
+ document.getElementById("tbsync.error").hidden = true;
+ document.getElementById("tbsync.newaccount.wizard").getButton("cancel").disabled = true;
+ document.getElementById("tbsync.newaccount.wizard").getButton("finish").disabled = true;
+ document.getElementById("tbsync.newaccount.name").disabled = true;
+ document.getElementById("tbsync.newaccount.user").disabled = true;
+ document.getElementById("tbsync.newaccount.password").disabled = true;
+ document.getElementById("tbsync.newaccount.servertype").disabled = true;
+
+ tbSyncEasNewAccount.startTime = Date.now();
+ tbSyncEasNewAccount.updateAutodiscoverStatus();
+ document.getElementById("tbsync.spinner").hidden = false;
+
+ //do autodiscover
+ if (servertype == "office365" || servertype == "auto") {
+ let updateTimer = Components.classes["@mozilla.org/timer;1"].createInstance(Components.interfaces.nsITimer);
+ updateTimer.initWithCallback({notify : function () {tbSyncEasNewAccount.updateAutodiscoverStatus()}}, 1000, 3);
+
+ if (servertype == "office365") {
+ let v2 = await eas.network.getServerConnectionViaAutodiscoverV2JsonRequest("https://autodiscover-s.outlook.com/autodiscover/autodiscover.json?Email="+encodeURIComponent(user)+"&Protocol=ActiveSync");
+ let oauthData = eas.network.getOAuthObj({ host: v2.server, user, accountname, servertype });
+ if (oauthData) {
+ // ask for token
+ document.getElementById("tbsync.spinner").hidden = true;
+ let _rv = {};
+ if (await oauthData.asyncConnect(_rv)) {
+ password = _rv.tokens;
+ } else {
+ error = TbSync.getString("status." + _rv.error, "eas");
+ }
+ document.getElementById("tbsync.spinner").hidden = false;
+ url=v2.server;
+ } else {
+ error = TbSync.getString("status.404", "eas");
+ }
+ } else {
+ let result = await eas.network.getServerConnectionViaAutodiscover(user, password, tbSyncEasNewAccount.maxTimeout*1000);
+ if (result.server) {
+ user = result.user;
+ url = result.server;
+ } else {
+ error = result.error; // is a localized string
+ }
+ }
+
+ updateTimer.cancel();
+ }
+
+ //now validate the information
+ if (!error) {
+ if (!password) error = TbSync.getString("status.401", "eas");
+ }
+
+ //add if valid
+ if (!error) {
+ tbSyncEasNewAccount.addAccount(user, password, servertype, accountname, url);
+ }
+
+ //end validation
+ document.getElementById("tbsync.newaccount.name").disabled = false;
+ document.getElementById("tbsync.newaccount.user").disabled = false;
+ document.getElementById("tbsync.newaccount.password").disabled = false;
+ document.getElementById("tbsync.newaccount.servertype").disabled = false;
+ document.getElementById("tbsync.newaccount.wizard").getButton("cancel").disabled = false;
+ document.getElementById("tbsync.newaccount.wizard").getButton("finish").disabled = false;
+ document.getElementById("tbsync.spinner").hidden = true;
+ //document.getElementById("tbsync.newaccount.wizard").canRewind = true;
+
+ this.validating = false;
+
+ //close wizard, if done
+ if (!error) {
+ document.getElementById("tbsync.newaccount.wizard").cancel();
+ } else {
+ document.getElementById("tbsync.error.message").textContent = error;
+ document.getElementById("tbsync.error").hidden = false;
+ }
+ },
+
+ updateAutodiscoverStatus: function () {
+ let offset = Math.round(((Date.now() - tbSyncEasNewAccount.startTime)/1000));
+ let timeout = (offset>2) ? " (" + (tbSyncEasNewAccount.maxTimeout - offset) + ")" : "";
+
+ document.getElementById('tbsync.newaccount.autodiscoverstatus').value = TbSync.getString("autodiscover.Querying","eas") + timeout;
+ },
+
+ addAccount (user, password, servertype, accountname, url) {
+ let newAccountEntry = this.providerData.getDefaultAccountEntries();
+ newAccountEntry.user = user;
+ newAccountEntry.servertype = servertype;
+
+ if (url) {
+ //if no protocoll is given, prepend "https://"
+ if (url.substring(0,4) != "http" || url.indexOf("://") == -1) url = "https://" + url.split("://").join("/");
+ newAccountEntry.host = eas.network.stripAutodiscoverUrl(url);
+ newAccountEntry.https = (url.substring(0,5) == "https");
+ }
+
+ // Add the new account.
+ let newAccountData = this.providerData.addAccount(accountname, newAccountEntry);
+ eas.network.getAuthData(newAccountData).updateLoginData(user, password);
+
+ window.close();
+ }
+};
diff --git a/content/manager/createAccount.xhtml b/content/manager/createAccount.xhtml
new file mode 100644
index 0000000..73acf13
--- /dev/null
+++ b/content/manager/createAccount.xhtml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+
+<window
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml"
+ onload="tbSyncEasNewAccount.onLoad();"
+ onunload="tbSyncEasNewAccount.onUnload();"
+ onclose="return tbSyncEasNewAccount.onClose()" >
+
+ <linkset>
+ <html:link rel="localization" href="toolkit/global/wizard.ftl"/>
+ </linkset>
+
+ <script type="application/javascript" src="chrome://eas4tbsync/content/manager/createAccount.js"/>
+ <script type="application/javascript" src="chrome://eas4tbsync/content/locales.js"/>
+
+ <wizard
+ title="__EAS4TBSYNCMSG_add.title__"
+ id="tbsync.newaccount.wizard">
+
+ <wizardpage onFirstPage="true" label="__EAS4TBSYNCMSG_add.shortdescription__">
+ <description style="width: 350px">__EAS4TBSYNCMSG_add.description__</description>
+
+ <richlistbox height="250" id="tbsync.newaccount.servertype" seltype="single" style="margin-top:1ex" onselect="tbSyncEasNewAccount.onUserDropdown();">
+ <richlistitem value="auto" style="padding: 4px">
+ <vbox><image src="chrome://eas4tbsync/content/skin/eas32.png" style="margin:1ex" /></vbox>
+ <vbox flex="1">
+ <label class="header" value="__EAS4TBSYNCMSG_servertype.auto__" />
+ <description>__EAS4TBSYNCMSG_servertype.description.auto__</description>
+ </vbox>
+ </richlistitem>
+
+ <richlistitem value="custom" style="padding: 4px">
+ <vbox><image src="chrome://eas4tbsync/content/skin/eas32.png" style="margin:1ex" /></vbox>
+ <vbox flex="1">
+ <label class="header" value="__EAS4TBSYNCMSG_servertype.custom__" />
+ <description>__EAS4TBSYNCMSG_servertype.description.custom__</description>
+ </vbox>
+ </richlistitem>
+
+ <richlistitem value="office365" style="padding: 4px">
+ <vbox><image src="chrome://eas4tbsync/content/skin/365_32.png" style="margin:1ex" /></vbox>
+ <vbox flex="1">
+ <label class="header" value="__EAS4TBSYNCMSG_servertype.office365__" />
+ <description>__EAS4TBSYNCMSG_servertype.description.office365__</description>
+ </vbox>
+ </richlistitem>
+ </richlistbox>
+
+ <html:table style="margin-top:1em">
+ <html:tr>
+ <html:td width="33%"><vbox pack="center"><label value="__EAS4TBSYNCMSG_add.name__" /></vbox></html:td>
+ <html:td width="67%"><html:input id="tbsync.newaccount.name" oninput="tbSyncEasNewAccount.onUserTextInput();"/></html:td>
+ </html:tr>
+ <html:tr id="tbsync.newaccount.user.box">
+ <html:td><vbox pack="center"><label value="__EAS4TBSYNCMSG_add.user__" /></vbox></html:td>
+ <html:td><html:input id="tbsync.newaccount.user" oninput="tbSyncEasNewAccount.onUserTextInput();"/></html:td>
+ </html:tr>
+ <html:tr id="tbsync.newaccount.password.box">
+ <html:td><vbox pack="center"><label value="__EAS4TBSYNCMSG_add.password__" /></vbox></html:td>
+ <html:td><html:input id="tbsync.newaccount.password" type="password" oninput="tbSyncEasNewAccount.onUserTextInput();"/></html:td>
+ </html:tr>
+ <html:tr id="tbsync.newaccount.url.box">
+ <html:td><vbox pack="center"><label value="__EAS4TBSYNCMSG_add.url__" /></vbox></html:td>
+ <html:td><html:input id="tbsync.newaccount.url" oninput="tbSyncEasNewAccount.onUserTextInput();" tooltiptext="__EAS4TBSYNCMSG_add.urldescription__"/></html:td>
+ </html:tr>
+
+ <!--html:tr style="height:40px; margin-top:1ex;margin-bottom:1ex;">
+ <html:td><vbox pack="center"></vbox></html:td>
+ <html:td><vbox pack="center"></vbox></html:td>
+ </html:tr-->
+ </html:table>
+
+ <vbox flex="1">
+ </vbox>
+ <hbox id="tbsync.spinner">
+ <image src="chrome://tbsync/content/skin/spinner.gif" style="margin-left:1em" width="16" height="16"/>
+ <label id='tbsync.newaccount.autodiscoverstatus' value="" />
+ </hbox>
+
+ <vbox id="tbsync.error" style="width: 450px;">
+ <description id="tbsync.error.message" flex="1" style="font-weight: bold;"></description>
+ <vbox>
+ <button
+ id="tbsync.error.link"
+ label="__EAS4TBSYNCMSG_manager.ShowEventLog__"
+ oncommand="TbSync.eventlog.open();"/>
+ </vbox>
+ </vbox>
+
+
+ </wizardpage>
+
+ </wizard>
+
+</window>
diff --git a/content/manager/editAccountOverlay.js b/content/manager/editAccountOverlay.js
new file mode 100644
index 0000000..7fdc18f
--- /dev/null
+++ b/content/manager/editAccountOverlay.js
@@ -0,0 +1,56 @@
+/*
+ * This file is part of EAS-4-TbSync.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+"use strict";
+
+const eas = TbSync.providers.eas;
+
+var tbSyncEditAccountOverlay = {
+
+ onload: function (window, accountData) {
+ this.accountData = accountData;
+
+ // special treatment for configuration label, which is a permanent setting and will not change by switching modes
+ let configlabel = window.document.getElementById("tbsync.accountsettings.label.config");
+ if (configlabel) {
+ configlabel.setAttribute("value", TbSync.getString("config.custom", "eas"));
+ }
+ },
+
+ stripHost: function (document) {
+ let host = document.getElementById('tbsync.AccountPropertys.pref.host').value;
+ if (host.indexOf("https://") == 0) {
+ host = host.replace("https://","");
+ document.getElementById('tbsync.AccountPropertys.pref.https').checked = true;
+ this.accountData.setAccountProperty("https", true);
+ } else if (host.indexOf("http://") == 0) {
+ host = host.replace("http://","");
+ document.getElementById('tbsync.AccountPropertys.pref.https').checked = false;
+ this.accountData.setAccountProperty("https", false);
+ }
+
+ while (host.endsWith("/")) { host = host.slice(0,-1); }
+ document.getElementById('tbsync.AccountPropertys.pref.host').value = host
+ this.accountData.setAccountProperty("host", host);
+ },
+
+ deleteFolder: function() {
+ let folderList = document.getElementById("tbsync.accountsettings.folderlist");
+ if (folderList.selectedItem !== null && !folderList.disabled) {
+ let folderData = folderList.selectedItem.folderData;
+
+ //only trashed folders can be purged (for example O365 does not show deleted folders but also does not allow to purge them)
+ if (!eas.tools.parentIsTrash(folderData)) return;
+
+ if (folderData.getFolderProperty("selected")) window.alert(TbSync.getString("deletefolder.notallowed::" + folderData.getFolderProperty("foldername"), "eas"));
+ else if (window.confirm(TbSync.getString("deletefolder.confirm::" + folderData.getFolderProperty("foldername"), "eas"))) {
+ folderData.sync({syncList: false, syncJob: "deletefolder"});
+ }
+ }
+ }
+};
diff --git a/content/manager/editAccountOverlay.xhtml b/content/manager/editAccountOverlay.xhtml
new file mode 100644
index 0000000..dc37731
--- /dev/null
+++ b/content/manager/editAccountOverlay.xhtml
@@ -0,0 +1,154 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://tbsync/content/skin/fix_dropdown_1534697.css" type="text/css"?>
+
+<overlay
+ id="tbSyncAccountConfig"
+ xmlns:html="http://www.w3.org/1999/xhtml">
+
+ <script type="application/javascript" src="chrome://eas4tbsync/content/manager/editAccountOverlay.js"/>
+ <script type="application/javascript" src="chrome://eas4tbsync/content/locales.js"/>
+
+ <menuitem
+ id="TbSync.eas.FolderListContextMenuDelete"
+ label="__EAS4TBSYNCMSG_pref.ShowTrashedFolders__"
+ class="menuitem-iconic"
+ image="chrome://tbsync/content/skin/trash16.png"
+ appendto="tbsync.accountsettings.FolderListContextMenu"
+ oncommand="tbSyncEditAccountOverlay.deleteFolder();"/>
+
+ <tab id="manager.tabs.accountsettings" label="__EAS4TBSYNCMSG_manager.tabs.accountsettings__" appendto="manager.tabs" />
+ <tab id="manager.tabs.syncsettings" label="__EAS4TBSYNCMSG_manager.tabs.syncsettings__" appendto="manager.tabs" />
+
+ <tabpanel id="manager.tabpanels.accountsettings" appendto="manager.tabpanels" flex="1" orient="vertical"><!-- ACCOUNT SETTINGS -->
+ <vbox flex="1">
+ <label class="header lockIfConnected" style="margin-left:0; margin-bottom:1ex;" value="" id="tbsync.accountsettings.label.config" />
+ <html:table flex="1">
+ <html:tr>
+ <html:td style="margin-right:1ex;">
+ <vbox pack="center">
+ <label style="text-align:left" control="tbsync.accountsettings.pref.accountname" value="__EAS4TBSYNCMSG_pref.AccountName__" />
+ </vbox>
+ </html:td>
+ <html:td width="100%">
+ <html:input id="tbsync.accountsettings.pref.accountname" />
+ </html:td>
+ </html:tr>
+
+ <html:tr>
+ <html:td style="margin-right:1ex;" >
+ <vbox pack="center">
+ <label class="lockIfConnected" style="text-align:left" control="tbsync.accountsettings.pref.user" value="__EAS4TBSYNCMSG_pref.UserName__" />
+ </vbox>
+ </html:td>
+ <html:td>
+ <html:input class="lockIfConnected" tooltiptext="__EAS4TBSYNCMSG_pref.UserNameDescription__" id="tbsync.accountsettings.pref.user" />
+ </html:td>
+ </html:tr>
+
+ <html:tr>
+ <html:td style="margin-right:1ex;" >
+ <vbox pack="center">
+ <label class="lockIfConnected" style="text-align:left" control="tbsync.accountsettings.pref.host" value="__EAS4TBSYNCMSG_pref.ServerName__" />
+ </vbox>
+ </html:td>
+ <html:td>
+ <html:input class="lockIfConnected" tooltiptext="__EAS4TBSYNCMSG_pref.ServerNameDescription__" id="tbsync.accountsettings.pref.host" onblur="tbSyncEditAccountOverlay.stripHost(document);" />
+ </html:td>
+ </html:tr>
+
+ <html:tr>
+ <html:td style="margin-right:1ex;" >
+ <hbox/>
+ </html:td>
+ <html:td>
+ <checkbox class="lockIfConnected" style="margin-bottom:1ex" id="tbsync.accountsettings.pref.https" label="__EAS4TBSYNCMSG_pref.usehttps__" />
+ </html:td>
+ </html:tr>
+
+ <html:tr>
+ <html:td style="margin-right:1ex;" >
+ <vbox id="asversion.hook" pack="center">
+ <label class="lockIfConnected" style="text-align:left" control="tbsync.accountsettings.pref.asversionselected" value="__EAS4TBSYNCMSG_pref.ActiveSyncVersion__" />
+ </vbox>
+ </html:td>
+ <html:td>
+ <menulist flex="0" id="tbsync.accountsettings.pref.asversionselected" class="lockIfConnected">
+ <menupopup id="asversion.popup">
+ <menuitem label="__EAS4TBSYNCMSG_pref.autodetect__" value="auto" />
+ <menuitem label="v2.5" value="2.5" />
+ <menuitem label="v14.0" value="14.0" />
+ </menupopup>
+ </menulist>
+ </html:td>
+ </html:tr>
+
+ <html:tr>
+ <html:td style="margin-right:1ex;" >
+ <label class="lockIfConnected" style="text-align:left" value="__EAS4TBSYNCMSG_pref.DeviceId__" />
+ </html:td>
+ <html:td>
+ <label value="" disabled="true" id="tbsync.accountsettings.pref.deviceId" />
+ </html:td>
+ </html:tr>
+ </html:table>
+
+ <vbox flex="1" />
+ <vbox class="showIfConnected">
+ <hbox>
+ <vbox pack="center"><image src="chrome://tbsync/content/skin/info16.png" /></vbox>
+ <description flex="1">__EAS4TBSYNCMSG_manager.lockedsettings.description__</description>
+ </hbox>
+ </vbox>
+
+ </vbox>
+ </tabpanel>
+
+ <tabpanel id="manager.tabpanels.syncsettings" appendto="manager.tabpanels" flex="1" orient="vertical"><!-- SYNC SETTINGS -->
+ <vbox flex="1">
+ <label style="margin-left:0; margin-bottom: 1ex;" class="header lockIfConnected" value="__EAS4TBSYNCMSG_pref.generaloptions__"/>
+ <vbox>
+ <checkbox class="lockIfConnected" id="tbsync.accountsettings.pref.provision" label="__EAS4TBSYNCMSG_pref.provision__" />
+ </vbox>
+
+ <label style="margin-left:0; margin-bottom: 1ex; margin-top: 3ex" class="header lockIfConnected" value="__EAS4TBSYNCMSG_pref.contactoptions__"/>
+ <vbox>
+ <checkbox class="lockIfConnected" id="tbsync.accountsettings.pref.displayoverride" label="__EAS4TBSYNCMSG_pref.displayoverride__" />
+ <hbox align="center">
+ <description id="separator.hook" class="lockIfConnected" flex="0">__EAS4TBSYNCMSG_pref.seperator.description__</description>
+ <menulist id="tbsync.accountsettings.pref.seperator" class="lockIfConnected">
+ <menupopup id="separator.popup">
+ <menuitem label="__EAS4TBSYNCMSG_pref.seperator.linebreak__" value="10" />
+ <menuitem label="__EAS4TBSYNCMSG_pref.seperator.comma__" value="44" />
+ </menupopup>
+ </menulist>
+ </hbox>
+ </vbox>
+
+ <label style="margin-left:0; margin-bottom: 1ex; margin-top: 3ex" class="header lockIfConnected" value="__EAS4TBSYNCMSG_pref.calendaroptions__"/>
+ <vbox>
+ <hbox align="center">
+ <description id="synclimit.hook" class="lockIfConnected" flex="0">__EAS4TBSYNCMSG_pref.synclimit.description__</description>
+ <menulist id="tbsync.accountsettings.pref.synclimit" class="lockIfConnected">
+ <menupopup id="synclimit.popup">
+ <menuitem label="__EAS4TBSYNCMSG_pref.synclimit.all__" value="0" />
+ <menuitem label="__EAS4TBSYNCMSG_pref.synclimit.2weeks__" value="4" />
+ <menuitem label="__EAS4TBSYNCMSG_pref.synclimit.1month__" value="5" />
+ <menuitem label="__EAS4TBSYNCMSG_pref.synclimit.3month__" value="6" />
+ <menuitem label="__EAS4TBSYNCMSG_pref.synclimit.6month__" value="7" />
+ </menupopup>
+ </menulist>
+ </hbox>
+ </vbox>
+
+
+ <vbox flex="1" />
+ <vbox class="showIfConnected">
+ <hbox>
+ <vbox pack="center"><image src="chrome://tbsync/content/skin/info16.png" /></vbox>
+ <description flex="1">__EAS4TBSYNCMSG_manager.lockedsettings.description__</description>
+ </hbox>
+ </vbox>
+ </vbox>
+ </tabpanel>
+
+</overlay>