diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 6bf400d..762dc69 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -28,6 +28,22 @@
     <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.WAKE_LOCK"/>
+    <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
+    <uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/>
+
+    <!-- Allows an application to read the user Browser's history and bookmarks. -->
+    <permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
+        android:permissionGroup="android.permission-group.PERSONAL_INFO"
+        android:label="@string/permlab_readHistoryBookmarks"
+        android:description="@string/permdesc_readHistoryBookmarks"
+        android:protectionLevel="dangerous" />
+
+    <!-- Allows an application to write (but not read) the user Browser's history and bookmarks. -->
+    <permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"
+        android:permissionGroup="android.permission-group.PERSONAL_INFO"
+        android:label="@string/permlab_writeHistoryBookmarks"
+        android:description="@string/permdesc_writeHistoryBookmarks"
+        android:protectionLevel="dangerous" />
 
     <application   android:name="Browser"
                    android:label="Browser"
@@ -37,7 +53,11 @@
              (android.test) library. -->
         <uses-library android:name="android.test.runner" />
 
-        <provider android:name="BrowserProvider" android:authorities="browser" android:multiprocess="true" />
+        <provider android:name="BrowserProvider" 
+                  android:authorities="browser" 
+                  android:multiprocess="true" 
+                  android:readPermission="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
+                  android:writePermission="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/>
         <activity android:name="BrowserActivity" android:label="Browser"
                   android:launchMode="singleTask"
                   android:alwaysRetainTaskState="true"
@@ -91,6 +111,7 @@
             </intent-filter>
             <intent-filter>
                 <action android:name="android.intent.action.WEB_SEARCH" />
+                <action android:name="android.intent.action.MEDIA_SEARCH" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
             <intent-filter>
@@ -141,7 +162,13 @@
                   android:theme="@android:style/Theme.Dialog">
         </activity>
 
-        <service android:name="GearsDialogService" android:process=":dialog"
+        <activity android:name="GearsNativeDialog"
+                  android:configChanges="orientation|keyboardHidden"
+                  android:theme="@android:style/Theme.Dialog">
+        </activity>
+
+        <service android:name="GearsDialogService"
+                 android:process=":dialog"
                  android:exported="false">
             <intent-filter>
                 <action android:name="com.android.browser.IGearsDialogService" />
diff --git a/assets/html/flashtest.html b/assets/html/flashtest.html
new file mode 100644
index 0000000..8e1cf48
--- /dev/null
+++ b/assets/html/flashtest.html
@@ -0,0 +1,18 @@
+<html>
+<head>
+<title>Flash test</title>
+</head>
+<body>
+<h1>Flash test</h1>
+This is text above the plugin
+<a href="http://www.google.com">Google</a>
+<br>
+lhs
+<object type="application/x-shockwave-flash" height=120 width=240>
+    <param name="FlashFileName" value="/data/data/com.android.browser/app_plugins/Ball.swf" />
+</object>
+<br>
+
+This is some the text and more text and more text and more text and more text and more text and more text and more text and more text and more text and more text
+</body>
+</html>
diff --git a/assets/html/plugin.html b/assets/html/plugin.html
new file mode 100755
index 0000000..f112a4b
--- /dev/null
+++ b/assets/html/plugin.html
@@ -0,0 +1,43 @@
+<html>
+<head>
+<title>Plugin test</title>
+</head>
+<body>
+<h1>Plugin test page</h1>
+This is text above the plugin
+<a href="http://www.google.com">Google</a>
+<br>
+lhs
+<object type="application/x-testplugin" height=40 width=64>
+    <param name="DrawingModel" value="Bitmap" />
+</object>
+<object type="application/x-testplugin" height=40 width=64>
+    <param name="DrawingModel" value="Canvas" />
+</object>
+rhs
+<br>
+
+This is some the text and more text and more text and more text and more text and more text and more text and more text and more text and more text and more text
+<ol>
+<li><a href="http://www.google.com">Google</a></li>
+<li><a href="http://www.gmail.com">Gmail</a></li>
+<li><a href="http://maps.google.com/">Google Maps</a></li>
+<li><a href="http://news.google.com">Google News</a></li>
+<li><a href="http://www.yahoo.com">Yahoo!</a></li>
+<li><a href="http://www.yahoomail.com">Yahoo! Mail</a></li>
+<li><a href="http://www.msn.com">MSN</a></li>
+<li><a href="http://www.hotmail.com">Hotmail</a></li>
+<li><a href="http://www.aol.com">AOL</a></li>
+<li><a href="http://mail.aol.com">AOL Mail</a></li>
+<li><a href="http://www.ebay.com">eBay</a></li>
+<li><a href="http://www.ask.com">Ask.com</a></li>
+<li><a href="http://www.amazon.com">Amazon</a></li>
+<li><a href="http://www.myspace.com">MySpace</a></li>
+<li><a href="http://www.nytimes.com">New York Times</a></li>
+<li><a href="http://www.weather.com">Weather Channel</a></li>
+<li><a href="http://www.wikipedia.org/">Wikipedia</a></li>
+<li><a href="http://www.cnet.com">CNET</a></li>
+<li><a href="http://www.apple.com">Apple</a></li>
+</ol>
+</body>
+</html>
diff --git a/assets/plugins/gears-0.4.23.0/permissions_dialog.html b/assets/plugins/gears-0.4.23.0/permissions_dialog.html
deleted file mode 100644
index a332f78..0000000
--- a/assets/plugins/gears-0.4.23.0/permissions_dialog.html
+++ /dev/null
@@ -1,2857 +0,0 @@
-﻿<!DOCTYPE html>
-
-<!--
-Copyright 2007, The Android Open Source Project
-
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, 
-    this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
- 3. Neither the name of Google Inc. nor the names of its contributors may be
-    used to endorse or promote products derived from this software without
-    specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--->
-
-<html>
-<head>
-  <style type="text/css">
-
-
-/*
-Copyright 2007, The Android Open Source Project
-
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, 
-    this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
- 3. Neither the name of Google Inc. nor the names of its contributors may be
-    used to endorse or promote products derived from this software without
-    specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-body, html {
-  background-color:white;
-  padding:0;
-  margin:0;
-  height:100%;
-  overflow:hidden;
-  cursor:default;
-
-  /* 
-    Makes the text unselectable in mozilla. See html_diaog.js for IE
-    implementation.
-  */
-  -moz-user-select:none;
-}
-
-body, td, input, select, button {
-  font-family:arial,sans-serif;
-  font-size:13px;
-}
-
-p {
-  margin:0;
-  margin-bottom:1em;
-}
-
-a {
-  color:blue;
-  text-decoration:underline;
-}
-
-button {
-  /*
-  It would be better to express margins in ems, but it causes layout
-  artifacts (presumably because of rounding errors) when combined with
-  the -moz-border-radius property used in button.css on Firefox 2.
-
-  Also: bizarely, if I try to use the more natural margin-left:10px, I get
-  a bug where the buttons bounce on IE when you hover over them.
-  */
-  position:relative;
-  margin-right:7px;
-  left:7px;
-}
-
-#head {
-  padding:1em;
-}
-
-#foot {
-
-  /*
-  On Android we do not use position:absolute due to some
-  rendering limitations (absolute positioning works, but
-  the automatic resizing of dialog is confused by the
-  variable content and the display is wrong, while if we
-  remove the absolute positioning, #foot is back in the
-  flow and the dialog displays correctly)
-  */
-
-  background:white;
-  bottom:0;
-  width:100%;
-}
-
-#button-row {
-  margin:1em;
-}
-
-.accesskey {
-  text-decoration: underline;
-
-  /* IE CSS extension */
-  accelerator: true;
-}
-
-    #content {
-      margin:0 1em;
-    }
-
-    #yellowbox-right {
-      padding-left:1em;
-      padding-right:1em;
-    }
-
-
-
-    #checkbox-row {
-      margin-top:1em;
-
-      margin-bottom:1em;
-
-    }
-
-    .header-icon {
-      margin-right:0.5em;
-      display:none;
-    }
-
-    #custom-icon {
-      display:none;
-      margin-left:1em;
-    }
-
-    #custom-name {
-      font-weight:bold;
-      font-size:1.1em;
-      display:none;
-    }
-
-    #origin {
-      display:none;
-    }
-
-    #custom-message {
-
-      margin-top:6px;
-
-      display:none;
-    }
-
-    #origin-only {
-      font-weight:bold;
-      font-size:1.1em;
-      display:none;
-    }
-
-    #yellowbox {
-      margin:4px 0 4px 0;
-      border:solid #f1cc1d;
-      border-width:1px 0;
-      background:#faefb8;
-    }
-
-    #yellowbox-inner {
-      /* pseudo-rounded corners */
-      margin:0 -1px;
-      border:solid #f1cc1d;
-      border-width:0 1px;
-
-      padding:1em 0;
-
-    }
-
-    #yellowbox p {
-
-      padding:0 1em;
-
-    }
-
-    #permissions-help {
-      margin:4px;
-      display:none;
-    }
-  </style>
-</head>
-<body>
-  <div id="strings" style="display:none">
-    <div id="string-allow"></div>
-    <div id="string-allow-accesskey"></div>
-    <div id="string-deny"></div>
-    <div id="string-deny-accesskey"></div>
-    <div id="string-cancel"></div>
-    <div id="string-trust-site-accesskey"></div>
-  </div>
-
-  <!--
-  PIE only works with one window, and we are in a modal dialog.
-  Using window.open(this.href) replaces the content of the current dialog,
-  which is annoying when no back button is displayed...
-  The workaround is to embed directly a short explanation text, and
-  hide/show the div container for the help and the settings dialog.
-  -->
-
-  <div id="permissions-help">
-   <h2>Information</h2>
-   <p>
-     <span id="string-description"></span>
-   </p>
-   <ul>
-     <li><span id="string-localserver-desc"></span></li>
-     <li><span id="string-database-desc"></span></li>
-     <li><span id="string-workerpool-desc"></span></li>
-   </ul>
-   <a href="#" onclick="showHelp(false); return false;">Go back</a>
-  </div>
-
-
-  <div id="head">
-    <table width="100%" cellpadding="0" cellspacing="0" border="0">
-      <tr>
-        <td valign="top">
-        <!-- On IE Mobile, we can reliably hide or show div elements.
-        Showing or hiding image elements is like playing the Russian roulette:
-        it is potentially lethal. -->
-        <div id="icon-local-data" class="header-icon">
-
-          <img width="32" height="32" src="data:image/png;base64,
-iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0
-d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABLNJREFUeNrEV1toHFUY/ua2
-9yTYpKEJxIRisJJWY+1L82KtLaYPtRE1IERSFYxVKEqLoH2QPFjxhr5ozUuD
-iIZWkdQgWgu2IsQH26TFeklqAxpzaUjcZJPdzVzX/5zdmb3NdlYM5od/z5mz
-Z/7/O//1jJBKpbCeJGKdSf7g/Y5+Gg+6/Tk1HYJpWbBMExaNeXM+mjRaMAwd
-mqZB13XOTU2VaL6tOlfUZeJdh547s1QEgCl/rLMCPp/AF+bmLNTWpg1z+GiY
-C2QKbOGGnoJumDQ3aZ5eUzUVyUQS8XgciUQcrXf60d1VSc8pApbC98OJ1mjU
-unDivQNFIBgAUq7kLJnEEp8piuJpwr33V2D3rhC3ypmhGzj92Z/0XiAjOkWy
-gfa9Vfj6XIxAmBdo8e4iAM5QsCzLsieAurogWu+q5PPRKwmEw2EC4MvIsJA+
-oEggbsHA6flWuGrKnDhN1r+ygCjKzn5Z9iEYCkLx+QtkSgRCcg/C/wpAkrIA
-JALjJ+WKXAygZBawH0HImloQDOe5HBcwAPZ+keYMtCQpfE0QbJnyzQHklwPJ
-eS7fBaIDRqZ3RMmWIXqWmzSAPIS681wOgGvXLQwOJXgW/DZuOBbIk+ltgXx/
-xVessgFcn9AxNp506oQiK1Q3BC6DahPPAM8YyN0QDvud+ZNdsyVeUzIcvCk4
-FvmKT/J2gSBkAUQqpP+3FxQWov4PL62pgie67ykHQL6Jnnl2cE2UU6PzbLhi
-FofsUpLz6eoXn3K2aW7sZwz3vYPV5SWPM5aWLXtVKkZL05M4/2YvUqYBdWUZ
-c+O/IFBRiV+/+pzqgICxb4aw56VX0bBjp1up8nZBbhCWIi2+gurGJqiRMGJT
-E1igthusjEBPJpFcXiSQf6HB5b1C2fV1m5z59Mys7QIph4vJT6eNz9+AQX3f
-1DUkFxeRiEZhGgYx3RFWNb6nRLEulN2U4Y0MjOhUKpsLiPl3uO9d1GxuptMm
-yPxj2PZQF9oOvUhKa6DRRUSURYwM9POYKDZBkezGDG9mxUTMxqJYFLGTF3/A
-qac6sbowDx/1+ejkH9j/xglsffBRNN/3ADr7BqAEK8gqBqYuX8THjx/gQVkc
-53myhQxr7PbjmQXs5H7yOzO9QM2m9vaWvP/v2NcBi65olmGhqn5TuVnAruJ/
-s94v2oFis1sGqBSApqFRBizx51z6/btzHIDso04YCLkGoYtsg3jBMwhZWu05
-dhzaqgp1OYZITQ2+PHYY186f5e4ZPPI0FibGyToWQtUbsbPnCNp6XvAKQkZx
-4kRZdYCZvL33LZzsuBcbGm+FqSbx7esvU0ZopFhPG5N+2nqe53FRRh1gbyza
-F8YSl1KX/hcIkKl1WKRUlMmk1HJTVoqfPlKzwbva59/5osz8TimemZ3HyOhV
-ProRM78vUoVkLEbxEEftllZsaX+Y8l+l248IJRQpXQeY721OUyLjgiy82Zk5
-jI7+RLnh3jiq6hvQfepspu7HsPvoK3x96/5HcOmTk9z8bI+r/mIXLGSCMAug
-pWUbtm/fwRdGRq+UNGZhgLH42Nf7dlkdX1VVe2HeNj8HSJ9LJb8N15roO/Kj
-46/9eJAAWA6A9f48/0eAAQASLt1W3nvcdQAAAABJRU5ErkJggg==
-           ">
-
-        </div>
-        <div id="icon-locationdata" class="header-icon">
-
-          <img width="32" height="32" src="data:image/png;base64,
-iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsT
-AAALEwEAmpwYAAAAIGNIUk0AAG4nAABzrwAA/oMAAH9bAABMGwAA+PYAADHr
-AAAXyBit77wAAAXuSURBVHja7JdLbFxnFcd/3+M+Zjz2jCe168QTx2lw0rRV
-E4PapGqgXhDRpkhTsUCAqDQLFjyE2kUjsUGGJcomG8tdQOsKNggEKZQuKEhu
-FYqAFjshNLaT+DUO8sw44/G8PHPn3rks5tp1wqNjCMqGTzr6pPOd+53/eX7n
-Ct/3uZdLco/X/wGI3X5wbnggCjwHjACDAXsRmAQunJ1a3vifATg3PJAEJqTW
-Ma/hoQyFMhRCSDzXxXMaBSB1dmr59XbvVLtQPiq18XLv4cO2UyrjN320qdGm
-iRkOEYpGsTs77Xql8oXTfV28tbrx9l0DcG54IKkM8+WDJ5+knFulsraOMlvW
-K9NEmSbaMjE7Ogh3d7NZ2Bg5fX/X9FurG7N3KwnPD544RaNWpriapWfoEI89
-/2ViiQTR/n6GP/9F4oOHkFpjd3XRM3QY4Hw7F+t2rDc7IoNWJExm9jJew+XI
-6U/TMzTEvkePIZWBkAq7K8aVX/4cpU26+qLkFxcHzw0PJD8qH9rxwPHuxADr
-KwtU1gpIrTA6wggpKedyFFbSCKkwQmGUNpCGgTIMuvcPABy/GyE47rl11pfT
-gM/To98mti9B7to1/jjxCpd++mPyC/NEeu/n5Fe+jtIGSptYndG2AOg2ABTK
-uSy1YgVlKMxwB0JKaqUSytAoramXywghMSwTZbTI9zyAwt0AsFjbKCOUQmrF
-n374Gp/40vMcOPEEAoEyDBIff4xmw+Xqb95AahNlWGwWN7Ya1H8dggsIH6kl
-UisKK2nWrl9DCMnBJz/F4BOfRAhJKZuhXiyiDRN8KKws4zb9X5imJXeQCAjT
-tNoDcHZq+RIwid9EaYXSmsraGl6jwcLv3mHh3Ys0XZdyLhtYb5K9NkPDqb89
-ejV7BTAAM9iNwOsSEKZptRUCgBe9hjvpuV7M7ND87dIU2ZkPUJaNYYfIz99A
-22EMu4N8eomVy+9vLFUbo0Bsh0IfaAJ1YBNoAF5bjSjwQqpequA3faTWSG20
-yk4byCDxnEqZxT9c5Oam+9L3F9dvAvftoJ5g7wbsoAuLtp/joKGkiqtZhJQt
-EIFipVtxn5v8NfMV57vjC/nLQC+wJ/BCFOgK9m4gtBX+Xc0DZ6eWX/ObzQvF
-TA6lzaDmDZRhcvMv0xSqtXd+sLj+28DCrXirHa+uH4SgDniA/58MJKlqPl9w
-Nqsoo9V0qut5cos3Sj9KF74XGCV3KPQAN4j7LSADlALe7ieiYOA4v55Ot7xg
-mKzO/JVMzf3JyqZbCaz1A3KBSqB0OaBbQQL6jlP/6CoYH0seC+K4vby16vTm
-m9fxGi5COhTXcxSO9Yc/++DeFEKglfA7Ow0vFJLXXdd785WJqaUAjO849fYm
-ovGx5CiQikRCg5FIqOXPpofve0ilWPvVLEapCyElVXOd/FAfjuMRCmkOHLDZ
-t9eiVHZIpzdBcB74zte+8fpGWyPZ+Fjy1Xg8mjp54lH6+uIBeI+52QVsW7F/
-oIfc3Co/++YbeI7Dx756klwDenstYt2KcEhw9MEwQniUSnUu/j5PJuNMAyN3
-gpD/XHksdeaZEfbu7dnm12p1stlb9PZ2A9AzdB9WpwBb0gjbPP54D6dO9fDI
-w1EKBZd6vQlAJKJ4+nScQw/Yx4HJ8bFk9F96YHws+WqiP5raE49hmsaOXPKp
-1eq4rkckYuPjg+/zwcSfqVYbJD73CH19diALlYqL1mBZYpsHPumVGpls+TZP
-iNst70499dQJpNiqnibQxG04XL06x9GjB9Fa4NME38PbdAAPFZJAE99vfeO6
-HrOzZY4csVCquX2PZbm8936ZG/ONbRDiQ+Xx1LNnPoNpSfC9AEAr6ZaXlihX
-yjz00EHw3QCAuy2zJbeVK+Bx5UqRaJckkZA75FrnF9+tcmPenQZG1PhY8oV4
-fM+3nj1zBtMyArQfut5zG8zMzHHogQFse+f57XJ38iwTFhbr9PfrfzjfnxCs
-Zry+SsVfFeNjySQwcWetb08sWrInHiaTLe+6ZcaiNoWN2r8TeU7c69/zvw8A
-aBuA3Xz76MYAAAAASUVORK5CYII=
-           ">
-
-        </div> 
-          <!-- Some browsers automatically focus the first focusable item. We
-          don't want anything focused, so we add this fake item. -->
-          <a href="#" id="focus-thief"></a>
-        </td>
-        <td width="100%" valign="middle">
-          <div id="local-data" style="display:none">
-            <span id="string-query-data"></span>
-          </div>
-          <div id="location-data" style="display:none">
-            <span id="string-query-location"></span>
-          </div>
-        </td>
-      </tr>
-    </table>
-  </div>
-
-  <div id="content">
-    <div id="yellowbox">
-      <div id="yellowbox-inner">
-        <table width="100%" cellpadding="0" cellspacing="0" border="0">
-          <tr>
-            <td id="yellowbox-left" valign="top">
-              <img id="custom-icon" width="0" height="0" src="blank.gif">
-            </td>
-            <td id="yellowbox-right" width="100%" valign="middle">
-              <div id="custom-name"></div>
-              <div id="origin"></div>
-              <div id="origin-only"></div>
-              <div id="custom-message"></div>
-            </td>
-          </tr>
-        </table>
-      </div>
-    </div>
-
-    <div id="string-location-privacy-statement" style="display:none; padding-top:3px;"></div>
-
-    <p id="checkbox-row" style="display:none">
-      <table width="100%" cellspacing="0" cellpadding="0" border="0">
-        <tr>
-          <td valign="middle">
-            <input type="checkbox" id="unlock" accesskey="T"
-                   onclick="updateAllowButtonEnabledState()">
-          </td>
-          <td valign="middle">
-            <label for="unlock">
-              &nbsp;<span id="string-trust-site"></span>
-            </label>
-          </td>
-        </tr>
-      </table>
-    </p>
-    
-  </div>
-
-  <div id="foot">
-
-    <div id="button-row">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-
-
-          <td width="100%" valign="middle">
-
-            <a href="#" onclick="denyAccessPermanently(); return false;">
-
-            <span id="string-never-allow-link"></span></a>
-
-          </td>
-
-
-          <td nowrap="true" align="right" valign="middle">
-            <button id="allow-button" class="custom"
-              onclick="allowAccessPermanently(); return false;"></button
-            ><button id="deny-button" class="custom"
-              onclick="denyAccessTemporarily(); return false;"></button>
-          </td>
-        </tr>
-      </table>
-    </div>
-  </div>
-
-
-</body>
-<!--
-We include all files through m4 as the HTML dialog implementation on
-PocketIE does not support callbacks for loading external JavaScript files.
-TODO: find a better way to include scripts for PIE
--->
-<script>
-/*
-Copyright (c) 2005 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-//Array.prototype.______array = '______array';
-
-var JSON = {
-    org: 'http://www.JSON.org',
-    copyright: '(c)2005 JSON.org',
-    license: 'http://www.crockford.com/JSON/license.html',
-
-    stringify: function (arg) {
-        var c, i, l, s = '', v;
-
-        switch (typeof arg) {
-        case 'object':
-            if (arg) {
-                if (arg.constructor == Array.prototype.constructor) {
-                    for (i = 0; i < arg.length; ++i) {
-                        v = this.stringify(arg[i]);
-                        if (s) {
-                            s += ',';
-                        }
-                        s += v;
-                    }
-                    return '[' + s + ']';
-                } else if (typeof arg.toString != 'undefined') {
-                    for (i in arg) {
-                        v = arg[i];
-                        if (typeof v != 'undefined' && typeof v != 'function') {
-                            v = this.stringify(v);
-                            if (s) {
-                                s += ',';
-                            }
-                            s += this.stringify(i) + ':' + v;
-                        }
-                    }
-                    return '{' + s + '}';
-                }
-            }
-            return 'null';
-        case 'number':
-            return isFinite(arg) ? String(arg) : 'null';
-        case 'string':
-            l = arg.length;
-            s = '"';
-            for (i = 0; i < l; i += 1) {
-                c = arg.charAt(i);
-                if (c >= ' ') {
-                    if (c == '\\' || c == '"') {
-                        s += '\\';
-                    }
-                    s += c;
-                } else {
-                    switch (c) {
-                        case '\b':
-                            s += '\\b';
-                            break;
-                        case '\f':
-                            s += '\\f';
-                            break;
-                        case '\n':
-                            s += '\\n';
-                            break;
-                        case '\r':
-                            s += '\\r';
-                            break;
-                        case '\t':
-                            s += '\\t';
-                            break;
-                        default:
-                            c = c.charCodeAt();
-                            s += '\\u00' + Math.floor(c / 16).toString(16) +
-                                (c % 16).toString(16);
-                    }
-                }
-            }
-            return s + '"';
-        case 'boolean':
-            return String(arg);
-        default:
-            return 'null';
-        }
-    },
-    parse: function (text) {
-        var at = 0;
-        var ch = ' ';
-
-        function error(m) {
-            throw {
-                name: 'JSONError',
-                message: m,
-                at: at - 1,
-                text: text
-            };
-        }
-
-        function next() {
-            ch = text.charAt(at);
-            at += 1;
-            return ch;
-        }
-
-        function white() {
-            while (ch) {
-                if (ch <= ' ') {
-                    next();
-                } else if (ch == '/') {
-                    switch (next()) {
-                        case '/':
-                            while (next() && ch != '\n' && ch != '\r') {}
-                            break;
-                        case '*':
-                            next();
-                            for (;;) {
-                                if (ch) {
-                                    if (ch == '*') {
-                                        if (next() == '/') {
-                                            next();
-                                            break;
-                                        }
-                                    } else {
-                                        next();
-                                    }
-                                } else {
-                                    error("Unterminated comment");
-                                }
-                            }
-                            break;
-                        default:
-                            error("Syntax error");
-                    }
-                } else {
-                    break;
-                }
-            }
-        }
-
-        function string() {
-            var i, s = '', t, u;
-
-            if (ch == '"') {
-outer:          while (next()) {
-                    if (ch == '"') {
-                        next();
-                        return s;
-                    } else if (ch == '\\') {
-                        switch (next()) {
-                        case 'b':
-                            s += '\b';
-                            break;
-                        case 'f':
-                            s += '\f';
-                            break;
-                        case 'n':
-                            s += '\n';
-                            break;
-                        case 'r':
-                            s += '\r';
-                            break;
-                        case 't':
-                            s += '\t';
-                            break;
-                        case 'u':
-                            u = 0;
-                            for (i = 0; i < 4; i += 1) {
-                                t = parseInt(next(), 16);
-                                if (!isFinite(t)) {
-                                    break outer;
-                                }
-                                u = u * 16 + t;
-                            }
-                            s += String.fromCharCode(u);
-                            break;
-                        default:
-                            s += ch;
-                        }
-                    } else {
-                        s += ch;
-                    }
-                }
-            }
-            error("Bad string");
-        }
-
-        function array() {
-            var a = [];
-
-            if (ch == '[') {
-                next();
-                white();
-                if (ch == ']') {
-                    next();
-                    return a;
-                }
-                while (ch) {
-                    a.push(value());
-                    white();
-                    if (ch == ']') {
-                        next();
-                        return a;
-                    } else if (ch != ',') {
-                        break;
-                    }
-                    next();
-                    white();
-                }
-            }
-            error("Bad array");
-        }
-
-        function object() {
-            var k, o = {};
-
-            if (ch == '{') {
-                next();
-                white();
-                if (ch == '}') {
-                    next();
-                    return o;
-                }
-                while (ch) {
-                    k = string();
-                    white();
-                    if (ch != ':') {
-                        break;
-                    }
-                    next();
-                    o[k] = value();
-                    white();
-                    if (ch == '}') {
-                        next();
-                        return o;
-                    } else if (ch != ',') {
-                        break;
-                    }
-                    next();
-                    white();
-                }
-            }
-            error("Bad object");
-        }
-
-        function number() {
-            var n = '', v;
-            if (ch == '-') {
-                n = '-';
-                next();
-            }
-            while (ch >= '0' && ch <= '9') {
-                n += ch;
-                next();
-            }
-            if (ch == '.') {
-                n += '.';
-                while (next() && ch >= '0' && ch <= '9') {
-                    n += ch;
-                }
-            }
-            if (ch == 'e' || ch == 'E') {
-                n += 'e';
-                next();
-                if (ch == '-' || ch == '+') {
-                    n += ch;
-                    next();
-                }
-                while (ch >= '0' && ch <= '9') {
-                    n += ch;
-                    next();
-                }
-            }
-            v = +n;
-            if (!isFinite(v)) {
-                ////error("Bad number");
-            } else {
-                return v;
-            }
-        }
-
-        function word() {
-            switch (ch) {
-                case 't':
-                    if (next() == 'r' && next() == 'u' && next() == 'e') {
-                        next();
-                        return true;
-                    }
-                    break;
-                case 'f':
-                    if (next() == 'a' && next() == 'l' && next() == 's' &&
-                            next() == 'e') {
-                        next();
-                        return false;
-                    }
-                    break;
-                case 'n':
-                    if (next() == 'u' && next() == 'l' && next() == 'l') {
-                        next();
-                        return null;
-                    }
-                    break;
-            }
-            error("Syntax error");
-        }
-
-        function value() {
-            white();
-            switch (ch) {
-                case '{':
-                    return object();
-                case '[':
-                    return array();
-                case '"':
-                    return string();
-                case '-':
-                    return number();
-                default:
-                    return ch >= '0' && ch <= '9' ? number() : word();
-            }
-        }
-
-        return value();
-    }
-};
-
-// Copyright 2008, The Android Open Source Project
-//
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are met:
-//
-//  1. Redistributions of source code must retain the above copyright notice, 
-//     this list of conditions and the following disclaimer.
-//  2. Redistributions in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//  3. Neither the name of Google Inc. nor the names of its contributors may be
-//     used to endorse or promote products derived from this software without
-//     specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-//=============================================================================
-// Various basic JavaScript utilities.
-//=============================================================================
-
-/**
- * Check that the type is not undefined (we do it here as on
- * some devices typeof returns unknown instead of undefined...).
- * We have to pass the evaluation of (typeof elem) (i.e., a string)
- * to the function rather than simply (element) -- passing an 
- * undefined object would make the function crash on PIE.
- */
-function isDefined(type) {
-  return type != 'undefined' && type != 'unknown';
-}
-
-/**
- * Returns true if val is a function.
- */
-function isFunction(val) {
-  return typeof val == "function";
-}
-
-// TODO(aa): more basic type checking here.
-
-
-/**
- * Creates a 'bound' function that calls the current function with a preset
- * 'this' object and set of arguments.
- */
-Function.prototype.bind = function(obj) {
-  var preArgs = Array.prototype.slice.call(arguments, 1);
-  var self = this;
-  return function() {
-    var postArgs = Array.prototype.slice.call(arguments, 0);
-    var totalArgs = preArgs.concat(postArgs);
-    return self.apply(obj, totalArgs);
-  }
-};
-
-/**
- * Creates a partially applied function that calls the current function with
- * a preset set of arguments.
- */
-Function.prototype.partial = function() {
-  var args = Array.prototype.slice.call(arguments, 0);
-  return this.bind(null, args);
-};
-
-/**
- * Binds all the methods in obj to obj.
- */
-function bindMethods(obj) {
-  for (var p in obj) {
-    if (isFunction(obj[p])) {
-      obj[p] = obj[p].bind(obj);
-    }
-  }
-}
-
-
-/**
- * Trim leading and trailing whitespace from a string.
- */
-String.prototype.trim = function(str) {
-  return this.replace(/^\s+/, "").replace(/\s+$/, "");
-};
-
-
-/**
- * Find the index of a given element in an array. Returns -1 if the item does
- * not exist.
- */
-Array.prototype.indexOf = function(item) {
-  for (var i = 0; i < this.length; i++) {
-    if (this[i] === item) {
-      return i;
-    }
-  }
-  return -1;
-};
-
-/**
- * Makes a deep copy of an object.
- */
-function cloneObject(original) {
-  var newObject = new Object();
-  for (i in original) {
-    if (typeof original[i] == 'object') {
-      newObject[i] = cloneObject(original[i]);
-    }
-    else {
-      newObject[i] = original[i];
-    }
-  }
-  newObject.length = original.length;
-  return newObject;
-}
-
-var browser = {};
-
-(function() {
-  var ua = navigator.userAgent;
-  browser.opera = typeof opera != "undefined";
-  browser.ie = !browser.opera && ua.indexOf("MSIE") > -1;
-  browser.ie_mobile = (ua.indexOf("Windows CE") > -1) &&
-      (ua.indexOf("MSIE") > -1);
-  browser.webkit = ua.indexOf("WebKit") > -1;
-  // WebKit also gives product == "gecko".
-  browser.mozilla = !browser.webkit && navigator.product == "Gecko";
-  browser.safari = ua.indexOf("Safari") > -1;
-  browser.mac = navigator.platform.indexOf("Mac") > -1;
-  browser.linux = navigator.platform.indexOf("Linux") > -1;
-  browser.windows = navigator.platform.indexOf("Win") > -1;
-  browser.android = ua.indexOf("Android") > -1;
-  if (browser.android) {
-    browser.safari = false;
-  }
-  // TODO(aa): Add detection for more browsers, as necessary.
-})();
-
-// Copyright 2008, The Android Open Source Project
-//
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are met:
-//
-//  1. Redistributions of source code must retain the above copyright notice, 
-//     this list of conditions and the following disclaimer.
-//  2. Redistributions in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//  3. Neither the name of Google Inc. nor the names of its contributors may be
-//     used to endorse or promote products derived from this software without
-//     specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-//=============================================================================
-// DOM manipulation utilities.
-// Requires: base.js
-//=============================================================================
-
-var dom = {};
-
-/**
- * Provides a cross-browser way of getting an element by its id
- */
-dom.getElementById = function(id) {
-  if (isDefined(typeof document.getElementById)) {
-    return document.getElementById(id);
-  } else if (isDefined(typeof document.all)) {
-    return document.all[id];
-  }
-  throw new Error("Failed to get element by ID.");
-};
-
-/**
- * Gets the position and dimensions of an element in pixels in relation
- * to the window origin.
- */
-dom.getPosition = function(elem) {
-  var ret = { 'left'   : 0,
-              'top'    : 0,
-              'width'  : elem.width,
-              'height' : elem.height };
-  
-  if (!elem.offsetParent) return ret;
-  
-  var left = 0;
-  var top = 0;
-  while (elem) {
-    left += elem.offsetLeft;
-    top += elem.offsetTop;
-    elem = elem.offsetParent
-  }
-  ret.left = left;
-  ret.top = top;
-  return ret;
-};
-
-/**
- * Returns the height of the inside of the window.
- */
-dom.getWindowInnerHeight = function() {
-  if (isDefined(typeof window.innerHeight)) { // Firefox
-    return window.innerHeight;
-  } else if (isDefined(typeof document.body.offsetHeight)) { // IE
-    return document.body.offsetHeight;
-  }
-
-  throw new Error("Could not get windowInnerHeight.");
-};
-
-/**
- * Add an event listener to an element cross-browser.
- */
-dom.addEvent = function(element, eventName, handler) {
-  var wrapper = dom._callEventHandler.bind(dom, handler);
-
-  if (isDefined(typeof element.addEventListener)) {
-    // Standards-compatible browsers
-    element.addEventListener(eventName, wrapper, false);
-  } else if (isDefined(typeof element.attachEvent)) {
-    // IE
-    element.attachEvent("on" + eventName, wrapper);
-  } else {
-    throw new Error('Failed to attach event.');
-  }
-};
-
-/**
- * Private helper for calling event handlers compatibly across browsers.
- */
-dom._callEventHandler = function(handler, e) {
-  // Older versions of IE don't pass event to the handler.
-  if (!e) e = window.event;
-
-  // TODO(aa): Normalize event object properties.
-
-  return handler(e);
-};
-
-/**
- * Gets the CSS classes for an element.
- */
-dom.getClasses = function(elm) {
-  return elm.className.split(/\s+/);
-};
-
-/**
- * Check is an element has a particular CSS class name.
- */
-dom.hasClass = function(elm, className) {
-  return this.getClasses(elm).indexOf(className) > -1;
-};
-
-/**
- * Adds a CSS class to an element. Do nothing if the class already exists.
- */
-dom.addClass = function(elm, className) {
-  var classes = this.getClasses(elm);
-  if (classes.indexOf(className) > -1) {
-    return;
-  }
-  classes.push(className);
-  elm.className = classes.join(" ");
-};
-
-/**
- * Removes a CSS class from an element. Do nothing if the class doesn't exist.
- */
-dom.removeClass = function(elm, className) {
-  var classes = this.getClasses(elm);
-  var index = classes.indexOf(className);
-  if (index == -1) {
-    return;
-  }
-  classes.splice(index, 1);
-  elm.className = classes.join(" ");
-};
-
-/**
- * Gets the text (non-html) content of an element.
- */
-dom.getTextContent = function(elm) {
-  if (isDefined(typeof elm.textContent)) {
-    return elm.textContent;
-  } else if (isDefined(typeof elm.innerText)) {
-    return elm.innerText;
-  } else {
-    throw new Error("Could not find a property to get text content.");
-  }
-};
-
-/**
- * Sets the text (non-html) contents of an element.
- */
-dom.setTextContent = function(elm, text) {
-  if (isDefined(typeof elm.textContent)) {
-    elm.textContent = text;
-  } else if (isDefined(typeof elm.innerText)) {
-    elm.innerText = text;
-  } else {
-    throw new Error("Could not find a property to set text content.");
-  }
-};
-
-// Copyright 2007, The Android Open Source Project
-//
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are met:
-//
-//  1. Redistributions of source code must retain the above copyright notice, 
-//     this list of conditions and the following disclaimer.
-//  2. Redistributions in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//  3. Neither the name of Google Inc. nor the names of its contributors may be
-//     used to endorse or promote products derived from this software without
-//     specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-/**
- * Initialize the base functionality of the dialog.
- */
-function initDialog() {
-  if (!browser.ie_mobile) {
-    dom.addEvent(document, "keyup", handleKeyUp);
-  } else {
-    var buttonRowElem = null;
-    if (window.pie_dialog.IsSmartPhone()) {
-      buttonRowElem = dom.getElementById("button-row-smartphone");
-    } else {
-      buttonRowElem = dom.getElementById("button-row");
-    }
-    if (buttonRowElem) {
-      buttonRowElem.style.display = 'block';
-    }
-  }
-  if (browser.ie_mobile) {
-    window.pie_dialog.SetScriptContext(window);
-    window.pie_dialog.ResizeDialog();
-  }
-}
-
-/**
- * Set the label of an input button, and optionally, its accesskey.
- */
-function setButtonLabel(textID, elemID, accessKeyID) {
-  var textElem = dom.getElementById(textID);
-  var buttonElem = dom.getElementById(elemID);
-  if (textElem == null || buttonElem == null) {
-    return;
-  }
-
-  var accessKeyElem = null;
-  if (isDefined(typeof accessKeyID)) {
-    accessKeyElem = dom.getElementById(accessKeyID);
-  }
-
-  // This function works for two different kinds of buttons. Simple buttons
-  // based on the <input type="button"> tag, and custom buttons based on a
-  // <button> tag with the css class "custom".
-  // Note that on Windows Mobile 5, the tagName property is not defined.
-  // We can therefore safely assume that the converse is also true:
-  // if tagName is not defined, then the platform must be Windows Mobile 5.  
-  if (!isDefined(typeof buttonElem.tagName) ||
-      buttonElem.tagName.toLowerCase() == "input") {
-    buttonElem.value = dom.getTextContent(textElem).trim();
-    if (accessKeyElem != null) {
-      buttonElem.accessKey = dom.getTextContent(accessKeyElem).trim();
-    }
-  } else if (buttonElem.tagName.toLowerCase() == "button") {
-    var text = dom.getTextContent(textElem).trim();
-
-    if (accessKeyElem != null) {
-      // Some browsers use the accessKey attribute of the the anchor tag.
-      var accessKey = dom.getTextContent(accessKeyElem).trim();
-      buttonElem.accessKey = accessKey;
-
-      // Find the first matching character in the text and mark it.
-      // Note: this form of String.replace() only replaces the first occurence.
-      text = text.replace(accessKey,
-                          "<span class='accesskey'>" + accessKey + "</span>");
-    }
-
-    buttonElem.innerHTML = text;
-  } else {
-    throw new Error("Unexpected button tag name: " + buttonElem.tagName);
-  }
-}
-
-/**
- * Allows a dialog to do custom layout when the window changes sizes. The
- * provided function will be called with the height of the content area when the
- * dialog should relayout.
- */
-function initCustomLayout(layoutFunction) {
-  function doLayout() {
-    layoutFunction(getContentHeight());
-  }
-
-  doLayout();
-
-  // We do an additional layout in onload because sometimes things aren't
-  // stabilized when the first doLayout() is called above.
-  dom.addEvent(window, "load", doLayout);
-  dom.addEvent(window, "resize", doLayout);
-
-  // Mozilla doesn't fire continuous events during resize, so if we want to get
-  // somewhat smooth resizing, we need to run our own timer loop. This still
-  // doesn't look perfect, because the timer goes off out of sync with the
-  // browser's internal reflow, but I think it's better than nothing.
-  // TODO(aa): Keep looking for a way to get an event for each reflow, like IE.
-  if (browser.mozilla) {
-    var lastHeight = -1;
-
-    function maybeDoLayout() {
-      var currentHeight = dom.getWindowInnerHeight();
-      if (currentHeight != lastHeight) {
-        lastHeight = currentHeight;
-        doLayout();
-      }
-    }
-
-    window.setInterval(maybeDoLayout, 30);
-  }
-}
-
-/**
- * Get the JSON-formatted arguments that were passed by the caller.
- */
-function getArguments() {
-  var argsString;
-  if (browser.ie_mobile) {
-    argsString = window.pie_dialog.GetDialogArguments();
-  } else if (browser.ie) {
-    argsString = window.external.GetDialogArguments();
-  } else if (browser.mozilla) {
-    argsString = getFirefoxArguments(window.arguments[0]);
-  } else if (browser.safari) {
-    argsString = window.gears_dialogArguments;
-  } else if (browser.android) {
-    argsString = "" + window.bridge.getDialogArguments();
-  }
-
-  if (typeof argsString == "string") {
-    return JSON.parse(argsString);
-  } else {
-    return null;
-  }
-}
-
-/**
- * Helper used by getArguments(). Getting the arguments in the right type is
- * more involved in Firefox.
- */
-function getFirefoxArguments(windowArguments) {
-  var Ci = Components.interfaces;
-  windowArguments.QueryInterface(Ci.nsIProperties);
-  var supportsString = 
-    windowArguments.get("dialogArguments", Ci.nsISupportsString);
-  return supportsString.data;
-}
-
-/**
- * Close the dialog, sending the specified result back to the caller.
- */
-function saveAndClose(resultObject) {
-  var resultString = JSON.stringify(resultObject);
-  if (browser.ie_mobile) {
-    window.pie_dialog.CloseDialog(resultString);
-  } else if (browser.ie) {
-    window.external.CloseDialog(resultString);
-  } else if (browser.mozilla) {
-    saveFirefoxResults(resultString);
-    window.close();
-  } else if (browser.safari) {
-    window.gears_dialog.setResults(resultString);
-  } else if (browser.android) {
-    window.bridge.closeDialog(resultString);
-  }
-}
-
-/**
- * Helper used by endDialog() for Firefox.
- */
-function saveFirefoxResults(resultString) {
-  var Cc = Components.classes;
-  var Ci = Components.interfaces;
-  
-  var props = window.arguments[0].QueryInterface(Ci.nsIProperties);
-  var supportsString = Cc["@mozilla.org/supports-string;1"]
-      .createInstance(Ci.nsISupportsString);
-      
-  supportsString.data = resultString;
-  props.set("dialogResult", supportsString);
-}
-
-/**
- * Returns the height of the content area of the dialog.
- */
-function getContentHeight() {
-  var head = dom.getElementById("head");
-  var foot = dom.getElementById("foot");
-  return dom.getWindowInnerHeight() - head.offsetHeight - foot.offsetHeight;
-}
-
-/**
- * For some reason ESC doesn't work on HTML dialogs in either Firefox or IE. So
- * we implement it manually.
- */
-function handleKeyUp(e) {
-  var ESC_KEY_CODE = 27;
-  
-  if (e.keyCode == ESC_KEY_CODE) {
-    saveAndClose(null);
-  }
-}
-
-/**
- * Disables a button in the right way, whether it is normal or custom.
- */
-function disableButton(buttonElem) {
-  buttonElem.disabled = true;
-
-  if (browser.ie_mobile) {
-    window.pie_dialog.SetButtonEnabled(false);
-  }
-
-  if (!isDefined(typeof buttonElem.tagName) || 
-      buttonElem.tagName.toLowerCase() == "input") {
-    buttonElem.style.color = "gray";
-  } else if (buttonElem.tagName.toLowerCase() == "button") {
-    dom.addClass(buttonElem, "disabled");
-  } else {
-    throw new Error("Unexpected tag name: " + buttonElem.tagName);
-  }
-}
-
-/**
- * Enables a button in the right way, whether it is normal or custom.
- */
-function enableButton(buttonElem) {
-  buttonElem.disabled = false;
-
-  if (browser.ie_mobile) {
-    window.pie_dialog.SetButtonEnabled(true);
-  }
-  
-  if (!isDefined(typeof buttonElem.tagName) ||
-      buttonElem.tagName.toLowerCase() == "input") {
-    buttonElem.style.color = "black";
-  } else if (buttonElem.tagName.toLowerCase() == "button") {
-    dom.removeClass(buttonElem, "disabled");
-  } else {
-    throw new Error("Unexpected tag name: " + buttonElem.tagName);
-  }
-}
-
-/**
- * Returns a wrapped domain (useful for small screens dialogs, 
- * e.g. windows mobile devices)
- */
-function wrapDomain(str) {
-  if (!browser.ie_mobile) {
-    return str;
-  }
-
-  var max = 20;
-  var url;
-  var scheme_start = str.indexOf("://");
-  var scheme = "";
-
-  if (scheme_start != -1) {
-    scheme = str.substring(0, scheme_start);
-    scheme += "://";
-    // there's automatically an hyphenation
-    // point used by the browser after http://
-    // so we only have to hyphenate the
-    // rest of the string
-    url = str.substring(scheme.length);
-  } else {
-    url = str;
-  }
-
-  // We hyphenate the string on every dot
-  var components = url.split(".");
-  if (components.length < 1) {
-    return str;
-  }
-
-  var content = components[0];
-  var len = content.length;
-  for (var i=1; i < components.length; i++) {
-    var elem = components[i];
-    content += ".";
-    len++;
-    if (len + elem.length > max) {
-      content += "<br>";
-      len = 0;
-    }
-    content += elem;
-    len += elem.length;
-  }
-  return scheme + content;
-}
-
-/**
- * Resizes the dialog to fit the content size.
- */
-function resizeDialogToFitContent(opt_minDialogInnerHeight) {
-  // This does not work on PIE (no height measurement)
-  if (browser.ie_mobile) {
-    window.pie_dialog.ResizeDialog();
-    return;
-  }
-  // window.resize() is not working on Android, we bail out.
-  if (browser.android) {
-    return;
-  }
-
-  // Resize the window to fit
-  var contentDiv = dom.getElementById("content");
-  var contentHeightProvided = getContentHeight();
-  var contentHeightDesired = contentDiv.offsetHeight;
-
-  var dialogHeightProvided = dom.getWindowInnerHeight();
-  var dialogHeightDesired =
-      dialogHeightProvided + (contentHeightDesired - contentHeightProvided);
-
-  var minDialogHeight = opt_minDialogInnerHeight || 0;
-  var maxDialogHeight = 400; // arbitrary max height for a dialog to resize to
-  
-  var targetHeight = Math.max(dialogHeightDesired, minDialogHeight);
-  targetHeight = Math.min(dialogHeightDesired, maxDialogHeight);
-
-  if (targetHeight != dialogHeightProvided) {
-    var dy = targetHeight - dialogHeightProvided;
-    window.resizeBy(0, dy);
-  }
-}
-
-/**
- * Safari running on OSX 10.4 can't load images dynamically from the network,
- * this helper function calls gears-specific code to work around this
- * limitation.
- */
-function loadImage(elem, image_url) {
-  if (browser.safari) {
-    var position = dom.getPosition(elem);
-    window.gears_dialog.loadImageIntoElement(image_url, position.top,
-                                             position.left,
-                                             position.width,
-                                             position.height);
-  } else {
-    elem.src = image_url;
-  }
-}
-
-// Copyright 2008, The Android Open Source Project
-//
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are met:
-//
-//  1. Redistributions of source code must retain the above copyright notice, 
-//     this list of conditions and the following disclaimer.
-//  2. Redistributions in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//  3. Neither the name of Google Inc. nor the names of its contributors may be
-//     used to endorse or promote products derived from this software without
-//     specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-//=============================================================================
-// Implements the behavior of our custom buttons. There is no native support in
-// IE for rounded corners on HTML elements, so this script also implements a
-// hack to simulate them in that browser.
-//
-// Requires: base.js, dom.js
-//=============================================================================
-
-/**
- * Constructor.
- */
-function CustomButton(htmlButton) {
-  bindMethods(this);
-  
-  this._focused = false;
-  this._htmlButton = htmlButton;
-
-  if (!document.all) {  // not IE
-    dom.addEvent(htmlButton, "mouseover", this._handleMouseOver);
-    dom.addEvent(htmlButton, "mouseout", this._handleMouseOut);
-  } else {  // IE
-    // mouseover/mouseout behave badly with nested elements in IE. Luckily,
-    // mouseenter/mouseleave are provided and have the equivalent semantics.
-    dom.addEvent(htmlButton, "mouseenter", this._handleMouseOver);
-    dom.addEvent(htmlButton, "mouseleave", this._handleMouseOut);
-
-    // We also handle focus and blur in IE so that we can update the corners
-    // to match the black border IE provides.
-    dom.addEvent(htmlButton, "focusin", this._handleFocus);
-    dom.addEvent(htmlButton, "blur", this._handleBlur);
-
-    dom.addClass(htmlButton, "ie");
-    this._createCorners();
-  }
-
-  // Limit button widths to a minimum of 60px. They look funny skinnier.  
-  if (htmlButton.offsetWidth < 60) {
-    htmlButton.style.width = "60px";
-  }
-
-  htmlButton.style.visibility = "visible";
-}
-
-/**
- * Initializes all the custom buttons on the page.
- */
-CustomButton.initializeAll = function() {
-  var buttons = document.getElementsByTagName("button");
-  for (var i = 0, button; button = buttons[i]; i++) {
-    if (dom.hasClass(button, "custom")) {
-      new CustomButton(button);
-    }
-  }
-};
-
-/**
- * Highlights the button on mouseover. Note that this gets called multiple
- * times while the mouse goes over sub elements inside the button.
- */
-CustomButton.prototype._handleMouseOver = function() {
-  if (!this._htmlButton.disabled && !this._focused) {
-    dom.addClass(this._htmlButton, "hover");
-    this._setCornerColor("blue");
-  }
-};
-
-/**
- * Undoes the highlighting of the button on mouseout. Note that this gets called
- * multiple times when the mouse moves out of sub elements, even if it is still
- * over the button. That is OK, as long as there is immediately a mouseover
- * event.
- */
-CustomButton.prototype._handleMouseOut = function() {
-  if (!this._htmlButton.disabled && !this._focused) {
-    dom.removeClass(this._htmlButton, "hover");
-    this._setCornerColor("grey");
-  }
-};
-
-/**
- * Highlights the button on focus. Currently only used for IE.
- * TODO(aa): The black highlight looks cool. Consider for other browsers.
- */
-CustomButton.prototype._handleFocus = function() {
-  dom.removeClass(this._htmlButton, "hover");
-  this._setCornerColor("black");
-  this._focused = true;
-};
-
-/**
- * Undoes the highlighting of the button on blur.
- */
-CustomButton.prototype._handleBlur = function() {
-  this._setCornerColor("grey");
-  this._focused = false;
-};
-
-/**
- * Helper to create the graphics that make the button have rounded corners in
- * IE.
- */
-CustomButton.prototype._createCorners = function() {
-  // Making the button position:relative makes it possible to position things
-  // inside it relative to it's border.
-  this._htmlButton.style.position = "relative";
-
-  var verticalEdges = ["left", "right"];
-  var horizontalEdges = ["top", "bottom"];
-  var colors = ["grey", "blue", "black"];
-
-  for (var i = 0; i < verticalEdges.length; i++) {
-    for (var j = 0; j < horizontalEdges.length; j++) {
-      for (var k = 0; k < colors.length; k++) {
-        var img = document.createElement("img");
-        img.src = "button_corner_" + colors[k]  + ".gif";
-        img.color  = colors[k];
-        img.style.position = "absolute";
-        img.style[verticalEdges[i]] = "-2px";
-        img.style[horizontalEdges[j]] = "-2px";
-        img.style.filter =
-            "progid:DXImageTransform.Microsoft.BasicImage(Rotation=" + 
-            (i + j) + ")";
-        this._htmlButton.appendChild(img);
-      }
-    }
-  }
-
-  this._setCornerColor("grey");
-};
-
-/**
- * Sets the color of the corners in IE by changing the stack order of the corner
- * images.
- */
-CustomButton.prototype._setCornerColor = function(newColor) {
-  var imgs = this._htmlButton.getElementsByTagName("img");
-  for (var i = 0, img; img = imgs[i]; i++) {
-    img.style.zIndex = Number(img.color == newColor);
-  }
-};
-
-var localized_strings = {
-  "el": {
-    "string-workerpool-desc": "Εκτέλεση ασύγχρονου JavaScript για βελτίωση απόκρισης εφαρμογών",
-    "string-allow": "Να επιτρέπεται",
-    "string-query-data": "Ο παρακάτω ιστότοπος επιθυμεί να αποθηκεύει πληροφορίες στον υπολογιστή σας χρησιμοποιώντας το Gears.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "Ο παρακάτω ιστότοπος επιθυμεί να αποκτήσει πρόσβαση σε πληροφορίες σχετικά με την τοποθεσία σας μέσω του Gears.",
-    "string-html-title": "Προειδοποίηση ασφαλείας Gears",
-    "string-description": "Το Gears είναι μια επέκταση προγράμματος περιήγησης ανοιχτής προέλευσης που επιτρέπει τις εφαρμογές ιστού να παρέχουν λειτουργίες εκτός σύνδεσης χρησιμοποιώντας τα ακόλουθα JavaScript API:",
-    "string-database-desc": "Αποθήκευση δεδομένων τοπικά σε μια σχεσιακή βάση δεδομένων με δυνατότητα πλήρους αναζήτησης",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Άκυρο",
-    "string-never-allow-link": "Να μην επιτρέπεται ποτέ αυτός ο ιστότοπος",
-    "string-deny": "Απόρριψη",
-    "string-never-allow-link-wince": "Να μην επιτρέπεται ποτέ",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Αποθήκευση και διανομή πόρων εφαρμογών τοπικά",
-    "string-location-privacy-statement": "Διαβάστε την πολιτική για θέματα ιδιωτικού περιεχομένου του ιστότοπου για να δείτε πώς θα χρησιμοποιηθεί η τοποθεσία σας.",
-    "string-trust-site": "Εμπιστεύομαι αυτόν τον ιστότοπο. Να επιτρέπεται να χρησιμοποιεί το Gears."
-  },
-  "gu": {
-    "string-workerpool-desc": "એપ્લિકેશનની રિસ્પોંસિવનેસ વધારવા માટે અસિંક્રોનસ JavaScript ચલાવો",
-    "string-allow": "મંજૂરી આપો",
-    "string-query-data": "નીચેની વેબસાઇટ Gearsનો ઉપયોગ કરીને તમારા કમ્પ્યુટર પર માહિતી સંગ્રહિત કરવા માંગે છે.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "નીચેની વેબસાઇટ Gearsનો ઉપયોગ કરીને તમારા સ્થાન વિશેની માહિતી એક્સેસ કરવા માંગે છે.",
-    "string-html-title": "Gears સુરક્ષા ચેતવણી",
-    "string-description": "Gears એક ઓપન સોર્સ બ્રાઉઝર એક્સ્ટેંશન છે જે નીચેની JavaScript APIsનો ઉપયોગ કરીને ઓફલાઇન ફંક્શનાલિટી આપવા વેબ એપ્લિકેશંસને એનેબલ કરે છે.",
-    "string-database-desc": "ડેટાને સ્થાનિક રીતે સંપૂર્ણ રીતે શોધી શકાય તેવા રિલેશનલ ડેટાબેસમાં સ્ટોર કરો",
-    "string-allow-accesskey": "A",
-    "string-cancel": "રદ કરો",
-    "string-never-allow-link": "આ સાઇટને ક્યારેય મંજૂરી આપશો નહીં",
-    "string-deny": "નકારો",
-    "string-never-allow-link-wince": "તેને ક્યારેય મંજૂર કરશો નહીં",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "એપ્લિકેશન સાધનોને સ્થાનિક રીતે સ્ટોર અને સર્વ કરો",
-    "string-location-privacy-statement": "તમારા સ્થળનો ઉપયોગ કેવી રીતે થશે તે જોવા સાઇટની ગોપનીયતા નીતિ વાંચો.",
-    "string-trust-site": "આ સાઇટ પર મને વિષ્વાસ છે. તેને Gearsનો ઉપયોગ કરવાની મંજુરી આપો."
-  },
-  "zh-TW": {
-    "string-workerpool-desc": "執行非同步 JavaScript 以提升應用程式的回應速度",
-    "string-allow": "允許",
-    "string-query-data": "下方的網站要使用 Gears 在您的電腦上儲存資訊。",
-    "string-deny-accesskey": "D",
-    "string-query-location": "下方的網站要使用 Gears 存取您位置的相關資訊。",
-    "string-html-title": "Gears 安全性警告",
-    "string-description": "Gears 是一種開放程式碼的瀏覽器擴充功能，它透過下列 JavaScript API 為網路應用程式提供離線功能：",
-    "string-database-desc": "在本機將資料儲存到完全可搜尋的關聯式資料庫中",
-    "string-allow-accesskey": "A",
-    "string-cancel": "取消",
-    "string-never-allow-link": "永不允許這個網站",
-    "string-deny": "拒絕",
-    "string-never-allow-link-wince": "永不允許",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "在本機儲存並提供應用程式資源",
-    "string-location-privacy-statement": "閱讀網站的隱私權政策以查看網站會如何使用您的位置。",
-    "string-trust-site": "我相信這個網站。 讓它使用 Gears。"
-  },
-  "vi": {
-    "string-workerpool-desc": "Chạy JavaScript không đồng bộ để tăng khả năng phản hồi của ứng dụng",
-    "string-allow": "Cho phép",
-    "string-query-data": "Trang web dưới đây muốn lưu trữ thông tin trên máy tính của bạn bằng cách sử dụng Gears.",
-    "string-deny-accesskey": "T",
-    "string-query-location": "Trang web dưới đây muốn truy cập vào thông tin về vị trí của bạn bằng cách sử dụng Gears.",
-    "string-html-title": "Cảnh báo Bảo mật của Gears",
-    "string-description": "Gears là một tiện ích bổ sung nguồn mở của trình duyệt cho phép ứng dụng web cung cấp tính năng ngoại tuyến bằng cách sử dụng các JavaScript API dưới đây:",
-    "string-database-desc": "Lưu dữ liệu cục bộ trong cơ sở dữ liệu quan hệ có thể tìm kiếm đầy đủ",
-    "string-allow-accesskey": "P",
-    "string-cancel": "Huỷ",
-    "string-never-allow-link": "Không bao giờ cho phép trang web này",
-    "string-deny": "Từ chối",
-    "string-never-allow-link-wince": "Không bao giờ cho phép Gears trên trang web này",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Lưu trữ và phục vụ các tài nguyên ứng dụng cục bộ",
-    "string-location-privacy-statement": "Đọc chính sách bảo mật của trang để xem vị trí của bạn sẽ được sử dụng thế nào.",
-    "string-trust-site": "Tôi tin cậy trang này. Cho phép trang web này sử dụng Gears."
-  },
-  "ca": {
-    "string-workerpool-desc": "Executar JavaScript asíncron per millorar la sensibilitat de les aplicacions",
-    "string-allow": "Permet",
-    "string-query-data": "El lloc web següent vol emmagatzemar informació al vostre ordinador mitjançant Gears.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "El lloc web següent vol accedir a informació sobre la vostra ubicació mitjançant Gears.",
-    "string-html-title": "Advertència de seguretat de Gears",
-    "string-description": "Gear és una extensió de navegador de codi obert que permet que les aplicacions web proporcionin funcionalitat fora de línia mitjançant les següents API de JavaScript:",
-    "string-database-desc": "Desar dades localment en una base de dades relacional amb funció de cerca completa",
-    "string-allow-accesskey": "P",
-    "string-cancel": "Cancel·la",
-    "string-never-allow-link": "No permetis mai aquest lloc",
-    "string-deny": "Denega",
-    "string-never-allow-link-wince": "No permetre'l mai",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Desar i servir recursos d'aplicacions localment",
-    "string-location-privacy-statement": "Llegiu la política de privadesa del lloc per veure com es farà servir la vostra ubicació.",
-    "string-trust-site": "Confio en aquest lloc. Permet que utilitzi Gears."
-  },
-  "it": {
-    "string-workerpool-desc": "Eseguire codice JavaScript in modo asincrono per migliorare la velocità di risposta dell'applicazione",
-    "string-allow": "Consenti",
-    "string-query-data": "Il sito Web riportato di seguito vuole memorizzare le informazioni relative al computer che utilizza Google Gears.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "Il sito Web riportato di seguito vuole accedere alle informazioni relative alla posizione di utilizzo di Google Gears.",
-    "string-html-title": "Avviso di protezione di Google Gears",
-    "string-description": "Google Gears è un'estensione browser open source che permette alle applicazioni Web di fornire funzionalità offline tramite le seguenti API JavaScript:",
-    "string-database-desc": "Memorizzare i dati localmente in un database relazionale dotato di ricerca integrata",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Annulla",
-    "string-never-allow-link": "Non consentire mai l'accesso a questo sito",
-    "string-deny": "Nega",
-    "string-never-allow-link-wince": "Non consentirlo mai",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Memorizzare e fornire localmente le risorse dell'applicazione",
-    "string-location-privacy-statement": "Leggi le norme sulla privacy del sito per vedere come verrà utilizzata la tua posizione.",
-    "string-trust-site": "Considero questo sito attendibile. Consenti al sito di utilizzare Google Gears."
-  },
-  "kn": {
-    "string-workerpool-desc": "ಅಪ್ಲಿಕೇಶನ್ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಉತ್ತಮಪಡಿಸಲು ಏಸಿಂಕ್ರೋನಸ್ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಚಲಿಸಿ",
-    "string-allow": "ಅನುಮತಿಸು",
-    "string-query-data": "ಈ ಕೆಳಗಿನ ವೆಬ್ ಸೈಟ್ Gears ಬಳಸಿ ನಿಮ್ಮ ಕಂಪ್ಯೂಟರಿನಲ್ಲಿ ಮಾಹಿತಿಯನ್ನು ಇರಿಸಲು ಬಯಸುತ್ತಿದೆ.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "ಈ ಕೆಳಗಿನ ವೆಬ್ ಸೈಟ್ Gears ಬಳಸಿ ನಿಮ್ಮ ಸ್ಥಳದ ಕುರಿತು ಮಾಹಿತಿ ಪಡೆದುಕೊಳ್ಳಲು ಬಯಸುತ್ತಿದೆ.",
-    "string-html-title": "Gears ರಕ್ಷಣಾ ಎಚ್ಚರಿಕೆ",
-    "string-description": "Gears ಒಂದು ಓಪನ್ ಸೋರ್ಸ್ ಬ್ರೌಸರ್ ವಿಸ್ತರಣೆಯಾಗಿದ್ದು, ಅದು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಗಳಿಗೆ ಈ ಕೆಳಗಿನ JavaScript API ಗಳನ್ನು ಬಳಸಿ ಆಫ್ಲೈನ್ ಫಂಕ್ಷನಾಲಿಟಿಯನ್ನು ನೀಡಲು ಸಾಧ್ಯವಾಗಿಸುತ್ತದೆ.",
-    "string-database-desc": "ಪೂರ್ಣವಾಗಿ ಹುಡುಕಬಹುದಾದ ಸಾಂಬಂಧಿಕ ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿ ಸ್ಥಳೀಯವಾಗಿ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸಿ",
-    "string-allow-accesskey": "A",
-    "string-cancel": "ರದ್ದುಮಾಡು",
-    "string-never-allow-link": "ಈ ಸೈಟನ್ನು ಎಂದಿಗೂ ಅನುಮತಿಸಬೇಡಿ",
-    "string-deny": "ನಿರಾಕರಿಸು",
-    "string-never-allow-link-wince": "ಅದನ್ನು ಎಂದಿಗೂ ಅನುಮತಿಸಬೇಡಿ",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "ಸ್ಥಳೀಯವಾಗಿ ಅಪ್ಲಿಕೇಶನ್ ಮೂಲಗಳನ್ನು ಸಂಗ್ರಹಿಸಿ ಮತ್ತು ಒದಗಿಸಿ",
-    "string-location-privacy-statement": "ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಹೇಗೆ ಉಪಯೋಗಿಸಲಾಗುತ್ತದೆ ಎಂದು ತಿಳಿಯಲು ಈ ಸೈಟ್ ನ ಗೌಪ್ಯತಾ ನೀತಿಯನ್ನು ಓದಿ.",
-    "string-trust-site": "ಈ ಸೈಟನ್ನು ನಾನು ನಂಬುತ್ತೇನೆ. ಇದಕ್ಕೆ Gears ಉಪಯೋಗಿಸಲು ಅನುಮತಿಸು."
-  },
-  "ar": {
-    "string-workerpool-desc": "تشغيل جافا سكريبت غير متزامنة لتحسين سرعة استجابة التطبيقات",
-    "string-allow": "سماح",
-    "string-query-data": "يرغب موقع الويب أدناه في تخزين معلومات على موقعك باستخدام Gears.",
-    "string-deny-accesskey": "ف",
-    "string-query-location": "يرغب موقع الويب أدناه في الوصول إلى معلومات حول موقعك باستخدام Gears.",
-    "string-html-title": "تحذير أمان خاص بـ Gears",
-    "string-description": "Gears هو ملحق متصفح مفتوح المصدر يتيح لتطبيقات الويب إمكانية القيام بوظائفها في حالة عدم الاتصال باستخدام واجهات برمجة التطبيقات (API) التالية المعدة باستخدام جافا سكريبت:",
-    "string-database-desc": "تخزين البيانات محليًا في قاعدة بيانات ارتباطية قابلة للبحث بشكل كامل",
-    "string-allow-accesskey": "س",
-    "string-cancel": "إلغاء",
-    "string-never-allow-link": "عدم السماح لهذا الموقع مطلقًا",
-    "string-deny": "رفض",
-    "string-never-allow-link-wince": "عدم السماح بـ Gears مطلقًا",
-    "string-trust-site-accesskey": "موثوق",
-    "string-localserver-desc": "تخزين موارد التطبيقات وإتاحتها محليًا",
-    "string-location-privacy-statement": "قم بقراءة سياسة خصوصية الموقع لمعرفة كيف سيتم استخدام موقعك.",
-    "string-trust-site": "أثق في هذا الموقع. وأرجو السماح له باستخدام Gears."
-  },
-  "ml": {
-    "string-workerpool-desc": "അപ്ലിക്കേഷന്‍ പ്രതികരണം അഭിവൃദ്ധിപ്പെടുത്താന്‍ ഏകകാലികമല്ലാത്ത ജാവാസ്ക്രിപ്റ്റ് പ്രവര്‍ത്തിപ്പിക്കുക",
-    "string-allow": "അനുവദിക്കൂ",
-    "string-query-data": "താഴെക്കാണുന്ന വെബ്സൈറ്റ് നിങ്ങളുടെ കമ്പ്യൂട്ടറില് വിവരങ്ങള് Gears ഉപയോഗിച്ച് ശേഖരിക്കാനാഗ്രഹിക്കുന്നു.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "താഴെക്കാണുന്ന വെബ്സൈറ്റ് നിങ്ങളുടെ മേഖലയെക്കുറിച്ചുള്ള വിവരങ്ങള് Gears ഉപയോഗിച്ച് ആക്സസ്സ് ചെയ്യാനാഗ്രഹിക്കുന്നു.",
-    "string-html-title": "Gears സുരക്ഷാ മുന്നറിയിപ്പ്",
-    "string-description": "Gears ഒരു തുറന്ന ഉറവിട ബ്രൌസര്‍ എക്സ്റ്റന്ഷനാണ്, അത് JavaScript APIs ഉപയോഗിച്ച് വെബ് അപ്ളിക്കേഷന് ഓഫ്ലൈന് ക്രിയാത്മകത നല്കുന്നു:",
-    "string-database-desc": "പൂര്‍ണമായും തിരയാവുന്ന ആനുപാതികമായ ഡാറ്റാബേസില്‍ ഡാറ്റ സംഭരിക്കുക",
-    "string-allow-accesskey": "A",
-    "string-cancel": "റദ്ദാക്കൂ",
-    "string-never-allow-link": "ഈ സൈറ്റിനെ ഒരിക്കലും അനുവദിക്കരുത്",
-    "string-deny": "നിരസിക്കൂ",
-    "string-never-allow-link-wince": "ഇതൊരിക്കലും അനുവദിക്കരുത്",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "അപ്ലിക്കേഷന്‍ വിഭവങ്ങള്‍ പ്രാദേശികമായി സംഭരിച്ച് പ്രയോജനപ്പെടുത്തൂ",
-    "string-location-privacy-statement": "നിങ്ങളുടെ ലൊക്കേഷന് എങ്ങനെയാണ് ഉപയോഗിച്ചിരിക്കുന്നതെന്ന് കാണാന് സൈറ്റിന്റെ സ്വകാര്യതാ നയം വായിക്കുക.",
-    "string-trust-site": "ഞാനീ സൈറ്റിനെ വിശ്വസിക്കുന്നു. ഇതിനെ Gears ഉപയോഗിക്കാന് അനുവദിക്കുക."
-  },
-  "cs": {
-    "string-workerpool-desc": "Spouštět asynchronní JavaScript ke zlepšení odezvy aplikace",
-    "string-allow": "Povolit",
-    "string-query-data": "Následující webová stránka chce pomocí aplikace Gears uložit informace do vašeho počítače.",
-    "string-deny-accesskey": "Z",
-    "string-query-location": "Následující webová stránka se pomocí aplikace Gears pokouší získat informace o vaší lokalitě.",
-    "string-html-title": "Výstraha zabezpečení aplikace Gears",
-    "string-description": "Gears je rozšíření typu open source pro webové prohlížeče, které umožňuje webovým aplikacím pracovat v režimu offline pomocí následujících rozhraní API prostředí JavaScript:",
-    "string-database-desc": "Ukládat data lokálně v relační databázi, ve které lze vyhledávat",
-    "string-allow-accesskey": "P",
-    "string-cancel": "Zrušit",
-    "string-never-allow-link": "Nikdy nepovolit tyto stránky",
-    "string-deny": "Zamítnout",
-    "string-never-allow-link-wince": "Nikdy nepovolit tuto aplikaci",
-    "string-trust-site-accesskey": "d",
-    "string-localserver-desc": "Ukládat a nabízet zdroje aplikací lokálně",
-    "string-location-privacy-statement": "Přečtěte si zásady ochrany osobních údajů tohoto webu, kde zjistíte, jakým způsobem budou použity informace o vaší lokalitě.",
-    "string-trust-site": "Důvěřuji tomuto webu. Umožnit používání aplikace Gears."
-  },
-  "et": {
-    "string-workerpool-desc": "Käivita asünkroonne JavaScript, et rakenduse töö kiirust parandada",
-    "string-allow": "Luba",
-    "string-query-data": "Alljärgnev veebisait soovib Gearsi kasutades salvestada teavet teie arvutisse.",
-    "string-deny-accesskey": "K",
-    "string-query-location": "Alljärgnev veebisait soovib Gearsi kasutades juurdepääsu teabele teie asukoha kohta.",
-    "string-html-title": "Gearsi turvahoiatus",
-    "string-description": "Gears on avatud lähtekoodiga brauserilaiendus, mis võimaldab veebirakendustel võrguühenduseta töötada, kasutades järgmisi JavaScripti rakendusliideseid:",
-    "string-database-desc": "Salvestage andmed lokaalselt otsingu täisfunktsiooniga relatsioonandmebaasi",
-    "string-allow-accesskey": "L",
-    "string-cancel": "Tühista",
-    "string-never-allow-link": "Ära luba seda saiti kunagi",
-    "string-deny": "Keeldu",
-    "string-never-allow-link-wince": "Ära luba seda kunagi",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Salvestage ja kasutage rakenduse vahendeid lokaalselt",
-    "string-location-privacy-statement": "Kui soovite teada, kuidas teie asukohateavet kasutatakse, lugege saidi privaatsuspõhimõtteid.",
-    "string-trust-site": "Usaldan seda saiti. Luba sellel Gearsi kasutada."
-  },
-  "id": {
-    "string-workerpool-desc": "Menjalankan JavaScript asinkron untuk meningkatkan respons aplikasi",
-    "string-allow": "OK",
-    "string-query-data": "Website berikut ingin menyimpan informasi di komputer Anda dengan menggunakan Gears.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "Website berikut ingin mengakses informasi tentang lokasi Anda dengan menggunakan Gears.",
-    "string-html-title": "Peringatan Keamanan Gears",
-    "string-description": "Gears adalah ekstensi browser open source yang memungkinkan aplikasi web untuk menyediakan fungsionalitas offline dengan menggunakan JavaScript API:",
-    "string-database-desc": "Menyimpan data secara lokal pada basis data relasional yang dapat cari",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Batalkan",
-    "string-never-allow-link": "Jangan pernah izinkan situs ini",
-    "string-deny": "Tolak",
-    "string-never-allow-link-wince": "Jangan pernah mengizinkannya",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Menyimpan dan menggunakan sumber daya aplikasi secara lokal",
-    "string-location-privacy-statement": "Baca kebijakan privasi situs untuk melihat bagaimana lokasi Anda akan digunakan.",
-    "string-trust-site": "Saya mempercayai situs ini. Izinkan untuk menggunakan Gears."
-  },
-  "es": {
-    "string-workerpool-desc": "Ejecutar JavaScript asíncrono para mejorar la capacidad de respuesta de la aplicación",
-    "string-allow": "Permitir",
-    "string-query-data": "El siguiente sitio Web desea almacenar información en tu equipo utilizando Gears.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "El siguiente sitio web desea acceder a información sobre tu ubicación con Gears.",
-    "string-html-title": "Advertencia de seguridad Gears",
-    "string-description": "Gears es una extensión del navegador de software libre que permite a las aplicaciones web funcionar sin conexión a través de las siguientes interfaces de programación de aplicaciones (API) de Javascript:",
-    "string-database-desc": "Almacenar datos localmente en una base de datos relacional que admite búsquedas completas",
-    "string-allow-accesskey": "P",
-    "string-cancel": "Cancelar",
-    "string-never-allow-link": "No permitir nunca este sitio",
-    "string-deny": "Denegar",
-    "string-never-allow-link-wince": "No permitirlo nunca",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Almacenar y proporcionar recursos de aplicaciones de forma local.",
-    "string-location-privacy-statement": "Lee la política de privacidad de este sitio para ver cómo se utilizará tu ubicación.",
-    "string-trust-site": "Confío en este sitio. Permitir utilizar Gears."
-  },
-  "en-GB": {
-    "string-workerpool-desc": "Run asynchronous JavaScript to improve application responsiveness",
-    "string-allow": "Allow",
-    "string-query-data": "The website below wants to store information on your computer using Gears.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "The website below wants to access information about your location using Gears.",
-    "string-html-title": "Gears Security Warning",
-    "string-description": "Gears is an open source browser extension that enables web applications to provide offline functionality using the following JavaScript APIs:",
-    "string-database-desc": "Store data locally in a fully-searchable relational database",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Cancel",
-    "string-never-allow-link": "Never allow this site",
-    "string-deny": "Deny",
-    "string-never-allow-link-wince": "Never allow",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Store and serve application resources locally",
-    "string-location-privacy-statement": "Read the site's privacy policy to see how your location will be used.",
-    "string-trust-site": "I trust this site. Allow it to use Gears."
-  },
-  "ru": {
-    "string-workerpool-desc": "Запустить асинхронный JavaScript, чтобы ускорить работу приложения",
-    "string-allow": "Разрешить",
-    "string-query-data": "Указанный ниже веб-сайт запрашивает разрешение на хранение информации на компьютере с помощью Gears.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "Указанный ниже веб-сайт запрашивает разрешение на получение информации о местонахождении с помощью Gears.",
-    "string-html-title": "Предупреждение безопасности Gears",
-    "string-description": "Gears – это расширение для браузера с открытым исходным кодом, позволяющее веб-приложениям работать в автономном режиме с помощью следующих API JavaScript:",
-    "string-database-desc": "Сохраняйте данные на компьютере пользователя в виде реляционной БД с возможностью поиска по ним",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Отмена",
-    "string-never-allow-link": "Никогда не разрешать этому сайту",
-    "string-deny": "Запретить",
-    "string-never-allow-link-wince": "Никогда не разрешать",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Сохраняйте и размещайте ресурсы приложений на локальном компьютере",
-    "string-location-privacy-statement": "Для того чтобы узнать о том, как будет использована информация о местонахождении, ознакомьтесь с политикой конфиденциальности сайта.",
-    "string-trust-site": "Я доверяю этому сайту. Разрешить использование Gears."
-  },
-  "nl": {
-    "string-workerpool-desc": "Asynchroon JavaScript uitvoeren om ontvankelijkheid van toepassing te verbeteren",
-    "string-allow": "Toestaan",
-    "string-query-data": "De website hieronder probeert via Gears informatie op uw computer op te slaan.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "De website hieronder probeert via Gears informatie te krijgen over uw locatie.",
-    "string-html-title": "Beveiligingswaarschuwing voor Gears",
-    "string-description": "Gears is een browseruitbreiding met open broncode waarmee webtoepassingen offline functionaliteit kunnen bieden met de volgende JavaScript-API's:",
-    "string-database-desc": "Gegevens lokaal opslaan in een volledig doorzoekbare relationele database",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Annuleren",
-    "string-never-allow-link": "Deze site nooit toestaan",
-    "string-deny": "Weigeren",
-    "string-never-allow-link-wince": "Nooit toestaan",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Toepassingsbronnen lokaal opslaan en aanbieden",
-    "string-location-privacy-statement": "Lees het privacybeleid op de site voor informatie over het gebruik van uw locatie.",
-    "string-trust-site": "Ik vertrouw deze site. Sta deze site toe Gears te gebruiken."
-  },
-  "no": {
-    "string-workerpool-desc": "Kjør asynkront JavaScript for å forbedre programmets respons",
-    "string-allow": "Tillat",
-    "string-query-data": "Nettstedet nedenfor ønsker å bruke Gears til å lagre informasjon om datamaskinen.",
-    "string-deny-accesskey": "V",
-    "string-query-location": "Nettstedet nedenfor ønsker å bruke Gears for å få tilgang på informasjon om hvor du befinner deg.",
-    "string-html-title": "Sikkerhetsadvarsel for Gears",
-    "string-description": "Gears er en nettleserutvidelse med åpen kildekode som lar nettprogrammer fungere i frakoblet modus ved hjelp av følgende JavaScript API-er:",
-    "string-database-desc": "Lagre data lokalt i en fullt søkbar relasjonsdatabase",
-    "string-allow-accesskey": "T",
-    "string-cancel": "Avbryt",
-    "string-never-allow-link": "Avvis alltid dette nettstedet",
-    "string-deny": "Avvis",
-    "string-never-allow-link-wince": "Avvis alltid",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Lagre og bruk programressurser lokalt",
-    "string-location-privacy-statement": "Les retningslinjene for personvern for nettstedet for å se hvordan området brukes.",
-    "string-trust-site": "Jeg stoler på dette nettstedet. Tillat at det bruker Gears."
-  },
-  "tr": {
-    "string-workerpool-desc": "Uygulamanın daha iyi yanıt vermesi için asenkron olarak Javascript yürütür",
-    "string-allow": "İzin ver",
-    "string-query-data": "Aşağıdaki web sitesi Gears'ı kullanarak bilgisayarınızda bilgi depolamak istiyor.",
-    "string-deny-accesskey": "R",
-    "string-query-location": "Aşağıdaki web sitesi Gears'ı kullanarak konumunuzla ilgili bilgilere erişmek istiyor.",
-    "string-html-title": "Gears Güvenlik Uyarısı",
-    "string-description": "Gears, web uygulamalarının aşağıdaki JavaScript API'larını kullanarak çevrimdışı çalışmasına olanak tanıyan açık kaynaklı bir tarayıcı uzantısıdır:",
-    "string-database-desc": "Verileri tamamen aratılabilir ilişkisel veritabanında yerel olarak sakla",
-    "string-allow-accesskey": "V",
-    "string-cancel": "İptal",
-    "string-never-allow-link": "Bu siteye asla izin verme",
-    "string-deny": "Reddet",
-    "string-never-allow-link-wince": "Asla izin verme",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Uygulama kaynaklarını yerel olarak saklar ve sunar",
-    "string-location-privacy-statement": "Konumunuzun nasıl kullanılacağını öğrenmek için sitenin gizlilik politikasını okuyun.",
-    "string-trust-site": "Bu siteye güveniyorum. Gears'ı kullanmasına izin ver."
-  },
-  "lv": {
-    "string-workerpool-desc": "Palaidiet asinhrono JavaScript, lai uzlabotu lietojumprogrammas atbildēšanas iespējas",
-    "string-allow": "Atļaut",
-    "string-query-data": "Tālāk minētā vietne vēlas saglabāt informāciju par jūsu datoru, lietojot Gears.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "Tālāk minētā vietne vēlas piekļūt informācijai par jūsu atrašanās vietu, lietojot Gears.",
-    "string-html-title": "Gears drošības brīdinājums",
-    "string-description": "Gears ir atklāta pirmkoda pārlūkprogramma, ar kuru tīmekļa lietojumprogrammas nodrošina funkcionalitāti bezsaistē, izmantojot šādas JavaScript API:",
-    "string-database-desc": "Datu glabāšana lokāli pilnībā pārmeklējamā relāciju datu bāzē",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Atcelt",
-    "string-never-allow-link": "Nekad neļaut piekļūt šai vietnei",
-    "string-deny": "Aizliegt",
-    "string-never-allow-link-wince": "Nekad to neatļaut",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Lietojumprogrammu resursu saglabāšana un apkalpošana lokāli",
-    "string-location-privacy-statement": "Izlasiet vietnes konfidencialitātes politiku, lai redzētu, kā tiks izmantota jūsu atrašanās vieta.",
-    "string-trust-site": "Es uzticos šai vietnei. Atļaujiet tai lietot Gears."
-  },
-  "lt": {
-    "string-workerpool-desc": "Padidinkite programos jautrumą paleisdami asinchroninę „Javascript“",
-    "string-allow": "Leisti",
-    "string-query-data": "Žemiau nurodyta interneto svetainė bando išsaugoti informaciją apie jūsų vietovę naudojant „Gears“.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "Žemiau nurodyta interneto svetainė bando prieiti prie informacijos apie jūsų vietovę naudojant „Gears“.",
-    "string-html-title": "„Gears“ įspėjimas apie saugą",
-    "string-description": "„Gears“ – tai atvirojo kodo naršyklės plėtinys, leidžiantis žiniatinklio programoms naudoti atjungties funkcines galimybes su šiais „JavaScript“ API:",
-    "string-database-desc": "Išsaugokite duomenis vietoje, sąryšinėje duomenų bazėje su veikiančia paieškos funkcija",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Atšaukti",
-    "string-never-allow-link": "Niekada neleisti šios svetainės",
-    "string-deny": "Atmesti",
-    "string-never-allow-link-wince": "Niekada neleisti",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Saugokite ir prižiūrėkite programos išteklius vietoje",
-    "string-location-privacy-statement": "Perskaitykite svetainės privatumo politiką, kad sužinotumėte, kaip bus naudojama jūsų vietovė.",
-    "string-trust-site": "Pasitikiu šia svetaine. Leisti jai naudoti „Gears“."
-  },
-  "th": {
-    "string-workerpool-desc": "เรียกใช้ JavaScript อะซิงโครนัสเพื่อปรับปรุงการตอบสนองของแอปพลิเคชัน",
-    "string-allow": "อนุญาต",
-    "string-query-data": "เว็บไซต์ต่อไปนี้ต้องการเก็บข้อมูลในคอมพิวเตอร์ของคุณโดยใช้ Gears",
-    "string-deny-accesskey": "ป",
-    "string-query-location": "เว็บไซต์ต่อไปนี้ต้องการเข้าถึงข้อมูลเกี่ยวกับตำแหน่งของคุณโดยใช้ Gears",
-    "string-html-title": "คำเตือนด้านความปลอดภัยของ Gears",
-    "string-description": "Gears เป็นส่วนขยายเบราว์เซอร์แบบโอเพ่นซอร์สที่ช่วยให้แอปพลิเคชันทางเว็บมีการทำงานแบบออฟไลน์โดยใช้ JavaScript API ต่อไปนี้:",
-    "string-database-desc": "จัดเก็บข้อมูลในตัวเครื่องในฐานข้อมูลที่สัมพันธ์กันและสามารถค้นหาได้อย่างสมบูรณ์",
-    "string-allow-accesskey": "อ",
-    "string-cancel": "ยกเลิก",
-    "string-never-allow-link": "ไม่อนุญาตไซต์นี้",
-    "string-deny": "ปฏิเสธ",
-    "string-never-allow-link-wince": "ไม่อนุญาต",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "จัดเก็บและรองรับทรัพยากรของแอปพลิเคชันในเครื่อง",
-    "string-location-privacy-statement": "อ่านนโยบายส่วนบุคคลของไซต์เพื่อดูว่าตำแหน่งของคุณจะถูกนำมาใช้อย่างไร",
-    "string-trust-site": "ฉันเชื่อถือไซต์นี้ อนุญาตให้ใช้ Gears"
-  },
-  "ro": {
-    "string-workerpool-desc": "Rulaţi JavaScript asincron, pentru a îmbunătăţi viteza de răspuns a aplicaţiei",
-    "string-allow": "Permiteţi",
-    "string-query-data": "Site-ul Web de mai jos doreşte să salveze informaţii pe computerul dvs. utilizând Gears.",
-    "string-deny-accesskey": "R",
-    "string-query-location": "Site-ul Web de mai jos doreşte să acceseze informaţii despre locaţia dvs. utilizând Gears.",
-    "string-html-title": "Avertizare de securitate Gears",
-    "string-description": "Gears este o extensie de browser cu sursă liberă care permite aplicaţiilor Web să ofere funcţionalitate offline, utilizând următoarele API-uri JavaScript:",
-    "string-database-desc": "Stocaţi date local într-o bază de date relaţională în care se pot efectua căutări complete",
-    "string-allow-accesskey": "P",
-    "string-cancel": "Anulaţi",
-    "string-never-allow-link": "Nu permiteţi niciodată acest site",
-    "string-deny": "Respingeţi",
-    "string-never-allow-link-wince": "Nu permiteţi niciodată",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Stocaţi şi livraţi local resurse ale aplicaţiei",
-    "string-location-privacy-statement": "Citiţi politica de confidenţialitate a site-ului pentru a afla cum va fi utilizată locaţia dvs.",
-    "string-trust-site": "Am încredere în acest site. Îi permit să utilizeze Gears."
-  },
-  "is": {
-    "string-workerpool-desc": "Keyra ósamstillt JavaScript til að bæta svörun forrits",
-    "string-allow": "Leyfa",
-    "string-query-data": "Vefsvæðið hér fyrir neðan vill fá aðgang að upplýsingum um tölvuna þína með því að nota Gears.",
-    "string-deny-accesskey": "F",
-    "string-query-location": "Vefsvæðið hér fyrir neðan vill fá aðgang að upplýsingum um staðsetninguna þína með því að nota Gears.",
-    "string-html-title": "Öryggisviðvörun frá Gears",
-    "string-description": "Gears er vafraviðbót með opnum kóða sem gerir vefforritum kleift að vinna án nettengingar með eftirfarandi JavaScript forritaskilum:",
-    "string-database-desc": "Geyma gögn staðbundið í töflugagnagrunni sem hægt er að leita í",
-    "string-allow-accesskey": "L",
-    "string-cancel": "Hætta við",
-    "string-never-allow-link": "Aldrei leyfa þetta svæði",
-    "string-deny": "Hafna",
-    "string-never-allow-link-wince": "Aldrei leyfa það",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Geyma og vinna staðbundið með tilföng fyrir forrit",
-    "string-location-privacy-statement": "Lestu persónuverndarstefnu svæðisins til þess að sjá hvernig staðsetningin þín verður notuð.",
-    "string-trust-site": "Ég treysti þessu vefsvæði. Það má nota Gears."
-  },
-  "fil": {
-    "string-workerpool-desc": "Magpatakbo ng hindi magkakasabay na JavaScript upang mapagbuti ang kakayahang tumugon ng application",
-    "string-allow": "Payagan",
-    "string-query-data": "Nais lagyan ng impormasyon ang website sa ibaba sa iyong computer gamit ang Mga Gear.",
-    "string-deny-accesskey": "T",
-    "string-query-location": "Nais i-access ng website sa ibaba ang impormasyon tungkol sa iyong lokasyon gamit ang mga Gear.",
-    "string-html-title": "Babala sa Seguridad ng Mga Gear",
-    "string-description": "Ang mga Gear ay isang open source browser extension na pinagana ng mga web application ng offline na pagpapaandar gamit ang sumusunod na Mga JavaScript API:",
-    "string-database-desc": "I-imbak ang data nang lokal sa isang ganap na mahahanapan na relational database",
-    "string-allow-accesskey": "P",
-    "string-cancel": "Ikansela",
-    "string-never-allow-link": "Huwag kailanman payagan ang site na ito",
-    "string-deny": "Tanggihan",
-    "string-never-allow-link-wince": "Huwag kailanman ito papayagan",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Mag-imbak at maghatid nang lokal ng mga mapagkukunan ng application",
-    "string-location-privacy-statement": "Basahin ang patakaran sa privacy ng site upang makita kung paano magagamit ang iyong lokasyon.",
-    "string-trust-site": "Pinagkakatiwalaan ko ang site na ito. Pinahihintulutan na gamitin ang mga Gear na ito."
-  },
-  "ta": {
-    "string-workerpool-desc": "பயன்பாட்டின் செயல்திறனை மேம்படுத்த ஒத்திசையாத JavaScript ஐ இயக்கவும்.",
-    "string-allow": "அனுமதி",
-    "string-query-data": "கீழே உள்ள வலைத்தளம் Gears ஐப் பயன்படுத்தி உங்கள் கணினியில் தகவலைச் சேமிக்க நினைக்கிறது.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "கீழே உள்ள வலைத்தளம் Gears ஐப் பயன்படுத்தி உங்கள் இருப்பிடம் பற்றிய தகவலை அணுக நினைக்கிறது.",
-    "string-html-title": "Gears பாதுகாப்பு எச்சரிக்கை",
-    "string-description": "Gears ஒரு ஓப்பன் சோர்ஸ் உலாவி விரிவாக்கல், பின்வரும் JavaScript APIகளைப் பயன்படுத்தி ஆஃப்லைனில் வலை பயன்பாடுகளை அணுக உதவுகிறது:",
-    "string-database-desc": "தரவுகளை உங்கள் கணினியிலேயே, முழுமையாகத் தேடப்படக்கூடிய, ரிலேஷனல் டேடாபேஸில் சேமிக்கவும்",
-    "string-allow-accesskey": "A",
-    "string-cancel": "ரத்துசெய்",
-    "string-never-allow-link": "இந்த தளத்தை எப்போதும் அனுமதிக்காதே",
-    "string-deny": "மறு",
-    "string-never-allow-link-wince": "எப்போதும் அனுமதிக்காதே",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "பயன்பாட்டின் ஆதாரங்களை உங்கள் கணினியில் சேமிக்கவும் மற்றும் வழங்கவும்",
-    "string-location-privacy-statement": "உங்கள் இருப்பிடத்தை எங்கு உபயோகப்படுத்தப்படும் என்று காண தளங்களின் தனியுரிமை கொள்கையைப் படிக்கவும்.",
-    "string-trust-site": "நான் இந்த தளத்தை நம்புகிறேன். Gears ஐப் பயன்படுத்த அனுமதிக்கவும்."
-  },
-  "fr": {
-    "string-workerpool-desc": "Exécuter JavaScript asynchrone pour améliorer le temps de réponse de l'application",
-    "string-allow": "Autoriser",
-    "string-query-data": "Le site Web ci-dessous souhaite stocker des informations sur votre ordinateur à l'aide de Google Gears.",
-    "string-deny-accesskey": "R",
-    "string-query-location": "Le site Web ci-dessous souhaite accéder aux informations sur votre emplacement à l'aide de Google Gears.",
-    "string-html-title": "Avertissement de sécurité de Google Gears",
-    "string-description": "Google Gears est une extension open source de navigateur qui permet aux applications Web de fournir des services hors ligne, grâce aux API JavaScript suivantes :",
-    "string-database-desc": "Enregistrer des données localement dans une base de données relationnelle avec une fonction de recherche",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Annuler",
-    "string-never-allow-link": "Ne jamais autoriser ce site",
-    "string-deny": "Refuser",
-    "string-never-allow-link-wince": "Ne jamais l'autoriser",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Stocker et distribuer localement des ressources de l'application",
-    "string-location-privacy-statement": "Lisez la politique de confidentialité du site pour savoir comment votre emplacement va être utilisé.",
-    "string-trust-site": "J'ai confiance en ce site. L'autoriser à utiliser Google Gears."
-  },
-  "bg": {
-    "string-workerpool-desc": "Изпълнявайте асинхронен JavaScript, за да подобрите скоростта на работа на приложенията",
-    "string-allow": "Разрешаване",
-    "string-query-data": "Уебсайтът по-долу иска да съхрани информация на компютъра ви чрез Gears.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "Уебсайтът по-долу иска да получи достъп до информацията за вашето местоположение чрез Gears.",
-    "string-html-title": "Предупреждение за защита на Gears",
-    "string-description": "Gears е разширение за браузъри с отворен код, което позволява на уеб приложенията да функционират в офлайн режим чрез следните приложни програмни интерфейси на JavaScript:",
-    "string-database-desc": "Съхранявайте информация локално в база от сродни данни с възможност за пълно търсене в тях",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Отказ",
-    "string-never-allow-link": "Не давам разрешението си за този сайт",
-    "string-deny": "Забраняване",
-    "string-never-allow-link-wince": "Не се разрешава изобщо",
-    "string-trust-site-accesskey": "й",
-    "string-localserver-desc": "Съхранявайте и използайте локално ресурсите на приложенията",
-    "string-location-privacy-statement": "Прочетете декларацията за поверителност на сайта, за да разберете как ще се използва информацията за местоположението ви.",
-    "string-trust-site": "Имам доверие на този сайт. Нека да може да използва Gears."
-  },
-  "uk": {
-    "string-workerpool-desc": "Запустіть асинхронний сценарій Javascript, щоб підвищити швидкість реагування програми",
-    "string-allow": "Дозволити",
-    "string-query-data": "Нижченаведений веб-сайт намагається зберегти інформацію на Вашому комп’ютері за допомогою Gears.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "Нижченаведений веб-сайт намагається отримати доступ до інформації про Ваше розташування за допомогою Gears.",
-    "string-html-title": "Попередження системи безпеки Gears",
-    "string-description": "Gears – це розширення веб-браузера з відкритим кодом, яке дозволяє веб-програмам працювати в автономному режимі за допомогою таких інтерфейсів API JavaScript:",
-    "string-database-desc": "Дані зберігаються локально у відповідній базі даних із повною підтримкою функцій пошуку",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Скасувати",
-    "string-never-allow-link": "Ніколи не дозволяти цьому веб-сайту",
-    "string-deny": "Відхилити",
-    "string-never-allow-link-wince": "Ніколи не дозволяти",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Локальне збереження та обслуговування програмних ресурсів",
-    "string-location-privacy-statement": "Ознайомтеся з політикою конфіденційності веб-сайту, щоб дізнатися, як буде використовуватися Ваше розташування.",
-    "string-trust-site": "Я довіряю цьому сайту. Дозволити йому використовувати Gears."
-  },
-  "hr": {
-    "string-workerpool-desc": "Pokrenite asinkroni JavaScript kako biste poboljšali odziv aplikacije",
-    "string-allow": "Dopusti",
-    "string-query-data": "Dolje navedena web-lokacija želi pomoću Gearsa pohraniti informacije na Vaše računalo.",
-    "string-deny-accesskey": "O",
-    "string-query-location": "Dolje navedena web-lokacija želi pristupiti informacijama o vašoj lokaciji pomoću Gearsa.",
-    "string-html-title": "Gearsovo upozorenje o sigurnosti",
-    "string-description": "Gears je pregledničko proširenje otvorenog izvornog koda koje web-aplikacijama omogućuje izvanmrežno funkcioniranje pomoću sljedećih API-ja za JavaScript:",
-    "string-database-desc": "Podatke spremi lokalno u potpuno pretraživoj relacijskoj bazi podataka",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Odustani",
-    "string-never-allow-link": "Nikad ne dopuštaj ovu web lokaciju",
-    "string-deny": "Odbij",
-    "string-never-allow-link-wince": "Nikad ne dopuštaj",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Izvore aplikacije pohrani i poslužuj lokalno",
-    "string-location-privacy-statement": "Pročitajte pravila o zaštiti privatnosti te web-lokacije da biste saznali kako će se koristiti Vaša lokacija.",
-    "string-trust-site": "Ovu web-lokaciju smatram pouzdanom. Dopusti joj da koristi Gears."
-  },
-  "bn": {
-    "string-workerpool-desc": "প্রয়োগ প্রতিক্রিয়া উন্নত করতে অ্যাসিঙ্ক্রোনাস জাভাস্ক্রিপ্ট রান করুন",
-    "string-allow": "মঞ্জুরি দিন",
-    "string-query-data": "নিচের ওয়েবসাইটটি আপনার কম্পিউটারে তথ্য সঞ্চয় করতে চায় Gears ব্যহার করে ׀",
-    "string-deny-accesskey": "D",
-    "string-query-location": "নিচের ওয়েবসাইটটি আপনার Gears ব্যবহার করার অবস্থানের সম্পর্কে তথ্য অ্যাকসেস করতে চায় ׀",
-    "string-html-title": "Gears নিরাপত্তা সতর্কবাণী",
-    "string-description": "Gears একটি মুক্ত স্রোত ব্রাউসার যা ওয়েব অ্যাপ্লিকেশান প্রদান করে JavaScript APIs ব্যবহার করে অফলাইন ফাংশানালিটি প্রদান করে :",
-    "string-database-desc": "একটি পূর্ণ-সন্ধানযোগ্য সম্পর্কযুক্ত ডেটাবেসে স্থানীয়ভাবে ডেটা সঞ্চয় করুন",
-    "string-allow-accesskey": "A",
-    "string-cancel": "বাতিল",
-    "string-never-allow-link": "কখনই এই সাইটটির মঞ্জুরি দেবেন না",
-    "string-deny": "অস্বীকার",
-    "string-never-allow-link-wince": "এটিকে কখনই অনুমতি দেয় না",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "প্রয়োগ সম্পদ স্থানীয়ভানে সঞ্চয় এবং পরিবেশন করুন",
-    "string-location-privacy-statement": "এই সাইটের গোপনীয়তা নীতি পড়ুন আপনার অবস্থান কি ভাবে ব্যবহার করা হবে তা দেখতে׀",
-    "string-trust-site": "আমি এই সাইটে বিশ্বাস করি׀ Gears ব্যবহার করতে অনুমতি দিন ׀"
-  },
-  "en-US": {
-    "string-workerpool-desc": "Run asynchronous JavaScript to improve application responsiveness",
-    "string-allow": "Allow",
-    "string-query-data": "The website below wants to store information on your computer using Gears.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "The website below wants to access information about your location using Gears.",
-    "string-html-title": "Gears Security Warning",
-    "string-description": "Gears is an open source browser extension that enables web applications to provide offline functionality using the following JavaScript APIs:",
-    "string-database-desc": "Store data locally in a fully-searchable relational database",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Cancel",
-    "string-never-allow-link": "Never allow this site",
-    "string-deny": "Deny",
-    "string-never-allow-link-wince": "Never allow it",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Store and serve application resources locally",
-    "string-location-privacy-statement": "Read the site's privacy policy to see how your location will be used.",
-    "string-trust-site": "I trust this site. Allow it to use Gears."
-  },
-  "da": {
-    "string-workerpool-desc": "Kør asynkron JavaScript for at forbedre programmernes svartid",
-    "string-allow": "Tillad",
-    "string-query-data": "Nedenstående websted ønsker at gemme oplysninger på din computer ved hjælp af Gears.",
-    "string-deny-accesskey": "F",
-    "string-query-location": "Nedenstående websted ønsker at få adgang til oplysninger om din placering ved hjælp af Gears.",
-    "string-html-title": "Gears-sikkerhedsadvarsel",
-    "string-description": "Gears er en open source-browserudvidelse, som gør det muligt for webprogrammer at stille offlinefunktioner til rådighed ved hjælp af følgende JavaScript-API'er:",
-    "string-database-desc": "Gem data lokalt i en fuldt søgbar relationel database",
-    "string-allow-accesskey": "I",
-    "string-cancel": "Annuller",
-    "string-never-allow-link": "Tillad aldrig dette websted",
-    "string-deny": "Afvis",
-    "string-never-allow-link-wince": "Giv aldrig tilladelse",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Gem og servicer applikationsressourcer lokalt",
-    "string-location-privacy-statement": "Læs webstedets politik til beskyttelse af personlige oplysninger for at få mere at vide om, hvordan din placering vil blive brugt.",
-    "string-trust-site": "Jeg har tillid til dette websted. Giv tilladelse til, at det bruger Gears."
-  },
-  "fa": {
-    "string-workerpool-desc": "JavaScript ناهمزمان را برای بهبود پاسخگویی برنامه اجرا کنید.",
-    "string-allow": "مجاز",
-    "string-query-data": "وب سایت زیر می خواهد با استفاده از Gears اطلاعات را در رایانه شما ذخیره کند.",
-    "string-deny-accesskey": "رد كردن",
-    "string-query-location": "وب سایت زیر می خواهد با استفاده از Gears به اطلاعاتی در مورد موقعیت شما دست یابد.",
-    "string-html-title": "اخطار امنیتی Gears",
-    "string-description": "Gears یک پسوند مرورگر منبع باز است که با استفاده از برنامه های JavaScript زیر امکان عملکرد برنامه های وب در حالت آفلاین را فراهم می سازد:",
-    "string-database-desc": "داده ها را در یک پایگاه داده مربوطه که کاملاً قابل جستجو باشد به صورت محلی ذخیره کنید",
-    "string-allow-accesskey": "مجاز",
-    "string-cancel": "لغو",
-    "string-never-allow-link": "هرگز به این سایت اجازه داده نشود",
-    "string-deny": "رد",
-    "string-never-allow-link-wince": "هرگز اجازه داده نشود",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "منابع برنامه را به صورت محلی ذخیره و استفاده کنید",
-    "string-location-privacy-statement": "برای اطلاع از نحوه استفاده از موقعیت خود، سیاست حفظ حقوق خصوصی سایت را مطالعه کنید.",
-    "string-trust-site": "من به این سایت اعتماد دارم. به آن اجازه دهید از Gears استفاده کند."
-  },
-  "hi": {
-    "string-workerpool-desc": "अनुप्रयोग की प्रतिक्रियात्मकता में सुधार लाने के लिए एसिंक्रॉनस JavaScript चलाएँ",
-    "string-allow": "अनुमति दें",
-    "string-query-data": "नीचे दी गई वेबसाइट Gears का उपयोग कर आपके कंप्यूटर पर जानकारी संग्रहीत करना चाहती है.",
-    "string-deny-accesskey": "इंकार करें",
-    "string-query-location": "नीचे दी गई वेबसाइट Gears का उपयोग कर आपकी स्थिति के बारे में जानकारी पर पहुँचना चाहती है.",
-    "string-html-title": "Gears सुरक्षा चेतावनी",
-    "string-description": "Gears एक खुला स्रोत ब्राउज़र एक्सटेंशन है जो वेब अनुप्रयोगों को निम्नलिखित JavaScript APIs का उपयोग कर ऑफ़लाइन कार्यक्षमताएँ उपलब्ध कराने देता है:",
-    "string-database-desc": "डेटा को स्थानीय रूप से एक पूर्ण रूप से खोजने योग्य रिलेशनल डेटाबेस में संचित करें",
-    "string-allow-accesskey": "अनुमति दें",
-    "string-cancel": "रद्द करें",
-    "string-never-allow-link": "इस साइट को कभी अनुमति न दें",
-    "string-deny": "इंकार करें",
-    "string-never-allow-link-wince": "उसे कभी अनुमति न दें",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "अनुप्रयोग संसाधन स्थानीय रूप से संचित और सर्व करें",
-    "string-location-privacy-statement": "यह देखने के लिए कि आपकी स्थिति का किस प्रकार उपयोग किया जाएगा साइट की गोपनीयता नीति पढ़ें.",
-    "string-trust-site": "मैं इस साइट पर भरोसा करता हूँ. इसे Gears का उपयोग करने दें."
-  },
-  "pt-BR": {
-    "string-workerpool-desc": "Executar o JavaScript assíncrono para melhorar a resposta do aplicativo",
-    "string-allow": "Permitir",
-    "string-query-data": "O site abaixo deseja armazenar informações sobre o computador que usa o Gears.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "O site abaixo deseja acessar informações sobre o local que usa o Gears.",
-    "string-html-title": "Aviso de segurança do Gears",
-    "string-description": "O Gears é uma extensão de navegador de código aberto que permite que aplicativos da web forneçam funcionalidades off-line utilizando estas APIs em JavaScript:",
-    "string-database-desc": "Armazenar os dados em um banco de dados relacional local completamente pesquisável",
-    "string-allow-accesskey": "P",
-    "string-cancel": "Cancelar",
-    "string-never-allow-link": "Nunca permitir este site",
-    "string-deny": "Negar",
-    "string-never-allow-link-wince": "Nunca permiti-lo",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Armazenar e atender a recursos de aplicativo localmente",
-    "string-location-privacy-statement": "Leia as políticas de privacidade dos sites para ver como seu local será usado.",
-    "string-trust-site": "Este site é confiável. Permita que ele use o Gears."
-  },
-  "fi": {
-    "string-workerpool-desc": "Paranna sovellusten suorituskykyä käyttämällä asynkronista JavaScriptiä",
-    "string-allow": "Salli",
-    "string-query-data": "Alla oleva sivusto haluaa tallentaa tietoja tietokoneellesi käyttämällä Gearsia.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "Alla oleva sivusto haluaa päästä sijaintitietoihisi käyttämällä Gearsia.",
-    "string-html-title": "Gears-tietoturvavaroitus",
-    "string-description": "Gears on avoimen lähdekoodin selainlaajennus, jonka avulla verkkosovelluksia voi käyttää offline-tilassa seuraavilla JavaScript API -liittymillä:",
-    "string-database-desc": "Tallenna tietoja paikallisesti täysin haettaviin relaatiotietokantoihin",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Peruuta",
-    "string-never-allow-link": "Älä koskaan salli tätä sivustoa",
-    "string-deny": "Estä",
-    "string-never-allow-link-wince": "Älä koskaan salli",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Tallenna ja käytä sovellusten resurssitiedostoja paikallisesti",
-    "string-location-privacy-statement": "Lukemalla tämän sivuston tietosuojakäytännön näet, miten sijaintiasi käytetään.",
-    "string-trust-site": "Luotan tähän sivustoon. Anna sen käyttää Gearsia."
-  },
-  "hu": {
-    "string-workerpool-desc": "Aszinkron JavaScript futtatása az alkalmazás jobb kezelhetősége érdekében",
-    "string-allow": "Engedélyezés",
-    "string-query-data": "Az alábbi webhely a Szinkron szolgáltatás használatával adatokat szeretne tárolni az Ön számítógépén.",
-    "string-deny-accesskey": "T",
-    "string-query-location": "Az alábbi webhely a Szinkron szolgáltatás használatával adatokat szeretne megtudni az Ön helyéről.",
-    "string-html-title": "Biztonsági figyelmeztetés a Szinkrontól",
-    "string-description": "A Szinkron nyílt forráskódú böngészőbővítmény, amely lehetővé teszi a webes alkalmazások számára, hogy kapcsolaton kívüli funkciókat kínáljanak a következő JavaScript API-k segítségével:",
-    "string-database-desc": "Adatok helyi tárolása egy teljes mértékben kereshető relációs adatbázisban",
-    "string-allow-accesskey": "E",
-    "string-cancel": "Mégse",
-    "string-never-allow-link": "Soha ne engedélyezze ezt a webhelyet",
-    "string-deny": "Tiltás",
-    "string-never-allow-link-wince": "Soha ne engedélyezze",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Alkalmazás-erőforrások helyi tárolása és kiszolgálása",
-    "string-location-privacy-statement": "Olvassa el a webhely adatvédelmi szabályzatát, hogy megtudja, hogyan kezelik a felhasználók helyét.",
-    "string-trust-site": "Megbízom ebben a webhelyben. Használhatja a Szinkron szolgáltatást."
-  },
-  "ja": {
-    "string-workerpool-desc": "Asynchronous JavaScript により、アプリケーションのレスポンスを向上",
-    "string-allow": "許可",
-    "string-query-data": "下記のウェブサイトは、Gears を使用してパソコンに情報を保存します。",
-    "string-deny-accesskey": "D",
-    "string-query-location": "下記のウェブサイトは、Gears を使用して場所に関する情報にアクセスします。",
-    "string-html-title": "Gears のセキュリティ警告",
-    "string-description": "Gears は、ウェブ アプリケーションの機能をオフラインで使えるようにするオープン ソースのブラウザ拡張ツールです。使用している JavaScript API は、次のとおりです。",
-    "string-database-desc": "検索できるローカルのリレーショナル データベースにデータを保存",
-    "string-allow-accesskey": "A",
-    "string-cancel": "キャンセル",
-    "string-never-allow-link": "このサイトを常に拒否する",
-    "string-deny": "拒否",
-    "string-never-allow-link-wince": "常に拒否する",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "アプリケーション リソースをクライアント PC 側で格納して提供",
-    "string-location-privacy-statement": "場所の使用方法については、サイトのプライバシー ポリシーをご覧ください。",
-    "string-trust-site": "このサイトを信頼します。Gears の使用を許可します。"
-  },
-  "he": {
-    "string-workerpool-desc": "הפעל Javascript אסינכרוני כדי לשפר את היענות היישום",
-    "string-allow": "אפשר",
-    "string-query-data": "אתר האינטרנט שלהלן מבקש לאחסן באמצעות Gears מידע במחשב שלך.",
-    "string-deny-accesskey": "ד",
-    "string-query-location": "אתר האינטרנט שלהלן מבקש גישה באמצעות Gears למידע לגבי המיקום שלך.",
-    "string-html-title": "אזהרת אבטחה של Gears",
-    "string-description": "Gears הוא הרחבת דפדפן בעלת קוד פתוח. ההרחבה מאפשרת ליישומי אינטרנט לספק פונקציונליות באופן לא מקוון באמצעות ממשקי JavaScript API הבאים:",
-    "string-database-desc": "אחסן מידע באופן מקומי במסד נתונים טבלאי הניתן לחיפוש במלואו",
-    "string-allow-accesskey": "א",
-    "string-cancel": "ביטול",
-    "string-never-allow-link": "לעולם אין לאפשר אתר זה",
-    "string-deny": "דחה",
-    "string-never-allow-link-wince": "לעולם אל תאפשר שירות זה",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "אחסן משאבי יישומים והגש אותם באופן מקומי",
-    "string-location-privacy-statement": "עיין בהצהרת הפרטיות של האתר כדי לראות את אופן השימוש במיקומך.",
-    "string-trust-site": "אני נותן אמון באתר זה. אפשר לו להשתמש ב-Gears."
-  },
-  "te": {
-    "string-workerpool-desc": "అప్లికేషన్ ప్రతిస్పందనా స్వభావాన్ని పెంచడానికి అసమకాలీకరించిన జావాస్క్రిప్ట్‌ను రన్ చెయ్యండి",
-    "string-allow": "అనుమతించు",
-    "string-query-data": "Gears ఉపయోగించి ఈ క్రింది నున్న వెబ్సైట్ మీ కంప్యుటర్లో సమాచారాన్ని నిల్వ చెయ్యలనుకుంటుంది.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "Gears ఉపయోగించి ఈ క్రింది నున్న వెబ్సైట్ మీ స్థానం గురించి సమాచారాన్ని ఆక్సెస్ చెయ్యలనుకుంటుంది.",
-    "string-html-title": "Gears భద్రత హెచ్చెరిక",
-    "string-description": "Gears అనేది ఒక ఓపెన్ సోర్స్ బ్రౌజర్ ఎక్స్ టెన్షన్. ఇది ఈ క్రింది JavaScript API లని ఉపయోగించి వెబ్ అప్లికేషన్ల కోసం ఆఫ్లైన్ ఉపయోగాన్ని ఎనేబుల్ చేస్తుంది:",
-    "string-database-desc": "డేటాను స్థానికంగా శోధించదగిన సంబంధిత డేటాబేస్‌లో నిల్వ చెయ్యండి",
-    "string-allow-accesskey": "A",
-    "string-cancel": "రద్దు చెయ్యి",
-    "string-never-allow-link": "ఈ సైట్‌ను ఎప్పుడూ అనుమతించవద్దు",
-    "string-deny": "తిరస్కరించు",
-    "string-never-allow-link-wince": "దీనిని ఎప్పుడూ అనుమతించవద్దు",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "అప్లికేషన్ రిసోర్సులను స్థానికంగా నిల్వ చేసి, అందించు",
-    "string-location-privacy-statement": "ఈ సైట్ యొక్క గోప్యతా విధానాన్ని చదివి మీ స్థానం ఎలా ఉపయోగించబడుతుందో తెలుసుకోండి .",
-    "string-trust-site": "నేను ఈ సైట్ని నమ్ముతున్నాను. దానిని Gears ఉపయోగించడానికి అనుమతించు."
-  },
-  "pt-PT": {
-    "string-workerpool-desc": "Executar Javascript assíncrono para melhorar a capacidade de resposta das aplicações",
-    "string-allow": "Permitir",
-    "string-query-data": "O Web site abaixo deseja armazenar informação no seu computador através do Gears.",
-    "string-deny-accesskey": "E",
-    "string-query-location": "O Web site abaixo deseja aceder a informação acerca da sua localização através do Gears.",
-    "string-html-title": "Aviso de segurança do Gears",
-    "string-description": "O Gears é uma extensão de browser de software livre que permite às aplicações Web fornecerem a funcionalidade off-line através da utilização das seguintes APIs de JavaScript:",
-    "string-database-desc": "Armazenar dados localmente numa base de dados relacional totalmente pesquisável",
-    "string-allow-accesskey": "P",
-    "string-cancel": "Cancelar",
-    "string-never-allow-link": "Nunca permitir este site",
-    "string-deny": "Negar",
-    "string-never-allow-link-wince": "Nunca permitir",
-    "string-trust-site-accesskey": "c",
-    "string-localserver-desc": "Armazenar e servir localmente recursos da aplicação",
-    "string-location-privacy-statement": "Leia a política de privacidade do site para saber como a sua localização vai ser usada.",
-    "string-trust-site": "Confio neste site. Permitir que utilize o Gears."
-  },
-  "sr": {
-    "string-workerpool-desc": "Покрените асинхрони JavaScript како бисте побољшали реакције апликације",
-    "string-allow": "Дозволи",
-    "string-query-data": "Веб сајт испод жели да ускладишти информације на вашем рачунару помоћу услуге Gears.",
-    "string-deny-accesskey": "X",
-    "string-query-location": "Веб сајт испод жели да приступи информацијама о вашој локацији помоћу услуге Gears.",
-    "string-html-title": "Gears безбедносно упозорење",
-    "string-description": "Gears је проширење прегледача отвореног кода којe веб апликацијама омогућава функционисање ван мреже помоћу следећих JavaScript API-ја:",
-    "string-database-desc": "Складиштите податке локално у потпуно претраживој релационој бази података",
-    "string-allow-accesskey": "M",
-    "string-cancel": "Откажи",
-    "string-never-allow-link": "Никада не дозволи овом сајту",
-    "string-deny": "Забрани приступ",
-    "string-never-allow-link-wince": "Никада не дозволи",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Складиштите и пружајте ресурсе апликације локално",
-    "string-location-privacy-statement": "Прочитајте политику приватности сајта да бисте видели како ће се ваша локација користити.",
-    "string-trust-site": "Имам поверења у овај сајт. Дозволи му да користи Gears."
-  },
-  "ko": {
-    "string-workerpool-desc": "비동기 자바스크립트를 실행하여 응용 프로그램 응답성 개선",
-    "string-allow": "허용",
-    "string-query-data": "다음 웹사이트가 Gears를 사용하여 컴퓨터에 정보를 저장하려고 합니다.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "다음 웹사이트가 Gears를 사용하여 사용자의 위치 정보에 액세스하려고 합니다.",
-    "string-html-title": "Gears 보안경고",
-    "string-description": "Gears는 다음과 같은 자바스크립트 API를 통해 오프라인에서 웹 애플리케이션을 사용할 수 있게 해 주는 오픈 소스 브라우저 확장 프로그램입니다.",
-    "string-database-desc": "완벽한 검색이 가능한 관계형 데이터베이스의 형태로 데이터를 로컬 컴퓨터에 저장",
-    "string-allow-accesskey": "A",
-    "string-cancel": "취소",
-    "string-never-allow-link": "사이트를 허용하지 않음",
-    "string-deny": "금지",
-    "string-never-allow-link-wince": "허용하지 않음",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "로컬 컴퓨터에서 애플리케이션 리소스 저장 및 사용",
-    "string-location-privacy-statement": "위치가 사용되는 방법을 보려면 사이트의 개인정보 보호정책을 읽어 보세요.",
-    "string-trust-site": "이 사이트를 신뢰합니다. Gears 사용을 허용합니다."
-  },
-  "sv": {
-    "string-workerpool-desc": "Kör asynkron JavaScript som förbättrar programmets responsivitet",
-    "string-allow": "Tillåt",
-    "string-query-data": "Webbplatsen nedan vill ha tillgång till information om din plats som använder Gears.",
-    "string-deny-accesskey": "E",
-    "string-query-location": "Webbplatsen nedan will ha tillgång till information om din plats som använder Gears.",
-    "string-html-title": "Säkerhetsvarning i Gears",
-    "string-description": "Gears är ett webbläsartillägg med öppen källkod som gör att webbprogram kan ge offlinefunktionalitet med följande JavaScript-API:er:",
-    "string-database-desc": "Spara data lokalt i en helt sökbar relationsdatabas",
-    "string-allow-accesskey": "T",
-    "string-cancel": "Avbryt",
-    "string-never-allow-link": "Tillåt aldrig den här webbplatsen",
-    "string-deny": "Neka",
-    "string-never-allow-link-wince": "Tillåt aldrig",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Spara och hantera programresurser lokalt",
-    "string-location-privacy-statement": "Läs webbplatsens sekretesspolicy för att se hur din plats kommer att användas.",
-    "string-trust-site": "Jag litar på den här platsen Tillåt den använda Gears."
-  },
-  "ur": {
-    "string-workerpool-desc": "اپلی کیشن کا رد عمل بہتر بنانے کیلئے مطابقت پذیر جاوا اسکرپٹ چلائیں",
-    "string-allow": "اجازت دیں",
-    "string-query-data": "ذیل کی ویب سائٹ گیئرز کا استعمال کرتے ہوئے آپ کے کمپیوٹر پر معلومات جمع کرنا چاہتی ہے۔",
-    "string-deny-accesskey": "D",
-    "string-query-location": "ذیل کی ویب سائٹ گیئرز کا استعمال کرتے ہوئے آپ کے مقام سے متعلق معلومات تک رسائی حاصل کرنا چاہتی ہے۔",
-    "string-html-title": "گیئرز کی تحفظاتی تنبیہ",
-    "string-description": "گیئرز براؤزر کی ایک کھلے وسائل والی توسیع ہے جو ویب اطلاقات کو درج ذیل جاوا اسکرپٹ اطلاقات کا استعمال کرتے ہوئے آف لائن کارکردگی فراہم کرنے کے قابل بناتا ہے:",
-    "string-database-desc": "ایک پوری طرح قابل تلاش متعلقہ ڈیٹا بیس",
-    "string-allow-accesskey": "A",
-    "string-cancel": "منسوخ",
-    "string-never-allow-link": "کبھی بھی اس سائٹ کی اجازت نہ دیں۔",
-    "string-deny": "مسترد",
-    "string-never-allow-link-wince": "کبھی بھی اس کی اجازت نہ دیں",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "اطلاقی وسائل کو مقامی طور پر جمع اور استعمال کریں",
-    "string-location-privacy-statement": "یہ دیکھنے کیلئے کہ آپ کے جائے وقوع کا استعمال کس طرح کیا جائے گا، اس سائٹ کی رازداری کی پالیسی کو پڑھیں۔",
-    "string-trust-site": "میں اس سائٹ پر اعتبار کرتا ہوں۔ اسے گیئرز استعمال کرنے کی اجازت دیں۔"
-  },
-  "sk": {
-    "string-workerpool-desc": "Spustiť asynchrónny Javascript na zlepšenie reakcie aplikácie",
-    "string-allow": "Povoliť",
-    "string-query-data": "Nižšie uvedená webová lokalita chce použiť rozšírenie Gears na uchovávanie informácií vo vašom počítači.",
-    "string-deny-accesskey": "K",
-    "string-query-location": "Nižšie uvedená webová lokalita chce použiť rozšírenie Gears na získanie prístupu k informáciám o vašom umiestnení.",
-    "string-html-title": "Varovanie zabezpečenia rozšírenia Gears",
-    "string-description": "Gears je rozšírenie prehliadača typu open source, ktoré umožňuje webovým aplikáciám poskytovať funkcie v režime offline prostredníctvom nasledujúcich rozhraní JavaScript API:",
-    "string-database-desc": "Uložiť informácie lokálne v relačnej databáze, s možnosťou úplného prehľadávania",
-    "string-allow-accesskey": "P",
-    "string-cancel": "Zrušiť",
-    "string-never-allow-link": "Nikdy nepovoliť túto lokalitu",
-    "string-deny": "Zakázať",
-    "string-never-allow-link-wince": "Nikdy nepovoliť",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Uložiť a sprístupniť zdroje aplikácie lokálne",
-    "string-location-privacy-statement": "Ak chcete zistiť, na aké účely sa použijú informácie o vašom umiestnení, prečítajte si zásady ochrany osobných údajov pre túto lokalitu.",
-    "string-trust-site": "Považujem túto lokalitu za dôveryhodnú. Povoliť, aby mohla používať rozšírenie Gears."
-  },
-  "zh-CN": {
-    "string-workerpool-desc": "运行异步 JavaScript 以提高应用程序响应速度",
-    "string-allow": "允许",
-    "string-query-data": "下列网站要使用 Gears 在您的计算机上存储信息。",
-    "string-deny-accesskey": "D",
-    "string-query-location": "下列网站要使用 Gears 访问有关您的位置的信息。",
-    "string-html-title": "Gears 安全警告",
-    "string-description": "Gears 是一种开放源代码的浏览器扩展程序，通过该扩展程序网络应用程序可以使用以下 JavaScript API 提供脱机功能：",
-    "string-database-desc": "在本地将数据存储到可全面搜索的关系数据库中",
-    "string-allow-accesskey": "A",
-    "string-cancel": "取消",
-    "string-never-allow-link": "永不允许该网站",
-    "string-deny": "拒绝",
-    "string-never-allow-link-wince": "永不允许",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "在本地存储和提供应用程序资源",
-    "string-location-privacy-statement": "阅读网站的隐私政策，了解该网站会如何使用您的位置。",
-    "string-trust-site": "我信任该网站。 允许其使用 Gears。"
-  },
-  "de": {
-    "string-workerpool-desc": "Asynchrones JavaScript zum Verbessern der Anwendungsreaktion ausführen",
-    "string-allow": "Zulassen",
-    "string-query-data": "Die untenstehende Website möchte über Gears Informationen auf Ihrem Computer speichern.",
-    "string-deny-accesskey": "V",
-    "string-query-location": "Die untenstehende Website fordert über Gears Zugriffsinformationen zu Ihrem Speicherort an.",
-    "string-html-title": "Gears-Sicherheitswarnung",
-    "string-description": "Gears ist eine Open-Source-Browsererweiterung, mit der Webanwendungen unter Verwendung der folgenden JavaScript-APIs Offline-Funktionen anbieten können:",
-    "string-database-desc": "Daten lokal in einer voll durchsuchbaren relationalen Datenbank speichern",
-    "string-allow-accesskey": "Z",
-    "string-cancel": "Abbrechen",
-    "string-never-allow-link": "Diese Website nie zulassen",
-    "string-deny": "Verweigern",
-    "string-never-allow-link-wince": "Nie zulassen",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Anwendungsressourcen lokal speichern und bereitstellen",
-    "string-location-privacy-statement": "Lesen Sie die Datenschutzrichtlinien für die Site, um zu erfahren, wie Ihr Speicherort verwendet wird.",
-    "string-trust-site": "Ich vertraue dieser Site. Verwendung von Gears zulassen."
-  },
-  "pl": {
-    "string-workerpool-desc": "Uruchom asynchroniczny skrypt JavaScript, aby usprawnić działanie aplikacji",
-    "string-allow": "Zezwalaj",
-    "string-query-data": "Poniższa witryna internetowa chce przechowywać informacje na Twoim komputerze za pośrednictwem wtyczki Gears.",
-    "string-deny-accesskey": "P",
-    "string-query-location": "Poniższa witryna internetowa chce uzyskać dostęp do informacji o Twojej lokalizacji za pośrednictwem wtyczki Gears.",
-    "string-html-title": "Ostrzeżenie wtyczki Gears dotyczące zabezpieczeń",
-    "string-description": "Wtyczka Gears to rozszerzenie przeglądarki typu open source, które umożliwia aplikacjom internetowym funkcjonowanie w trybie offline przy użyciu następujących interfejsów API języka JavaScript:",
-    "string-database-desc": "Przechowuj dane lokalnie w relacyjnej bazie danych z możliwością pełnego przeszukiwania",
-    "string-allow-accesskey": "Z",
-    "string-cancel": "Anuluj",
-    "string-never-allow-link": "Nigdy nie zezwalaj na tę witrynę",
-    "string-deny": "Odmów",
-    "string-never-allow-link-wince": "Nigdy nie zezwalaj",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Przechowuj zasoby aplikacji i obsługuj je lokalnie",
-    "string-location-privacy-statement": "Zapoznaj się z polityką prywatności witryny, aby zobaczyć, do czego zostaną wykorzystane informacje o Twojej lokalizacji.",
-    "string-trust-site": "Ufam tej witrynie. Zezwól jej na korzystanie z wtyczki Gears."
-  },
-  "ms": {
-    "string-workerpool-desc": "Jalankan JavaScript tak segerak untuk meningkatkan kesambutan aplikasi",
-    "string-allow": "Benarkan",
-    "string-query-data": "Laman web di bawah mahu menyimpan maklumat pada komputer anda dengan menggunakan Gear.",
-    "string-deny-accesskey": "L",
-    "string-query-location": "Laman web di bawah mahu mengakses maklumat mengenai lokasi anda dengan menggunakan Gear.",
-    "string-html-title": "Amaran Keselamatan Gear",
-    "string-description": "Gear adalah lanjutan penyemak imbas sumber terbuka yang membolehkan aplikasi web untuk menyediakan kefungsian luar talian menggunakan JavaScript APIs yang berikut:",
-    "string-database-desc": "Simpan data setempat dalam pangkalan data hubungan boleh cari sepenuhnya",
-    "string-allow-accesskey": "N",
-    "string-cancel": "Batal",
-    "string-never-allow-link": "Jangan sekali-kali benarkan laman ini",
-    "string-deny": "Tolak",
-    "string-never-allow-link-wince": "Jangan sekali-kali benarkannya",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Simpan dan berikan sumber aplikasi setempat",
-    "string-location-privacy-statement": "Baca dasar privasi tapak untuk melihat bagaimana lokasi anda akan digunakan.",
-    "string-trust-site": "Saya percaya tapak ini. Benarkannya untuk menggunakan Gear."
-  },
-  "sl": {
-    "string-workerpool-desc": "Zaženi asinhroni javascript, da bo odzivnost aplikacij boljša",
-    "string-allow": "Dovoli",
-    "string-query-data": "To spletno mesto želi shraniti informacije o računalniku, v katerem se uporablja program Gears.",
-    "string-deny-accesskey": "R",
-    "string-query-location": "To spletno mesto želi omogočiti dostop do informacij o lokaciji, ki uporablja program Gears.",
-    "string-html-title": "Varnostno opozorilo programa Gears",
-    "string-description": "Gears je odprtokodna razširitev brskalnika, ki z uporabo teh programskih vmesnikov z JavaScriptom omogoča delovanje spletnih programov brez povezave:",
-    "string-database-desc": "Lokalno shranjevanje podatkov v relacijsko podatkovno zbirko, po kateri je mogoče iskati",
-    "string-allow-accesskey": "A",
-    "string-cancel": "Prekliči",
-    "string-never-allow-link": "Nikoli ne dovoli tega spletnega mesta",
-    "string-deny": "Zavrni",
-    "string-never-allow-link-wince": "Nikoli ne dovoli",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "Lokalno shranjevanje in omogočanje virov za aplikacije",
-    "string-location-privacy-statement": "Če želite izvedeti, kako bo uporabljena vaša lokacija, preberite pravilnik o zasebnosti, ki velja za to spletno mesto.",
-    "string-trust-site": "Temu spletnemu mestu zaupam. Dovoli mu uporabo programa Gears."
-  },
-  "mr": {
-    "string-workerpool-desc": "अनुप्रयोगाच्या प्रतिसादात्मकतेत सुधारणा करण्यासाठी असिंक्रोनस JavaScript चालवा",
-    "string-allow": "अनुमती द्या",
-    "string-query-data": "खालील वेबसाइट Gears वापरुन आपल्या संगणकावर माहिती संचयित करू इच्छित आहे.",
-    "string-deny-accesskey": "D",
-    "string-query-location": "खालील वेबसाइट Gears वापरुन आपल्या स्थानाबद्दलच्या माहितीमध्ये प्रवेश करू इच्छिते.",
-    "string-html-title": "Gears सुरक्षा चेतावणी",
-    "string-description": "Gears एक ओपन सोर्स ब्राउझर विस्तार आहे जो ऑफलाइन कार्यक्षमता प्रदान करण्यासाठी खालील JavaScript APIs वापरुन वेब अनुप्रयोग सक्षम करतोः",
-    "string-database-desc": "संपूर्ण-शोध करण्यायोग्य संबंधित डेटाबेस मध्ये स्थानिक रुपात डेटा संग्रहित करा",
-    "string-allow-accesskey": "A",
-    "string-cancel": "रद्द करा",
-    "string-never-allow-link": "या साइटला कधीही अनुमती देऊ नये",
-    "string-deny": "अमान्य करा",
-    "string-never-allow-link-wince": "यास कधीही परवानगी देऊ नये",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "अनुप्रयोग स्रोतांना स्थानिक रुपात संग्रहित आणि सर्व्ह करा",
-    "string-location-privacy-statement": "आपले स्थान कसे वापरले जाते हे जाणून घेण्यासाठी साउटचे गोपनीयता धोरण वाचा.",
-    "string-trust-site": "माझा या साइटवर विश्वास आहे. तिला Gears वापरण्याची परवानगी द्या."
-  },
-  "or": {
-    "string-workerpool-desc": "ଅନୁପ୍ରୟୋଗ ଶୀଘ୍ର ପ୍ରତିକ୍ରିୟା କରିବାକୁ ଏକ ଏସିଂକ୍ରୋନିୟସ୍ JavaScript ଚଲାନ୍ତୁ",
-    "string-allow": "ଅନୁମତି",
-    "string-query-data": "Gears ବ୍ୟବହାର କରି ନିମ୍ନ ୱେବସାଇଟ୍ ଆପଣଙ୍କ କମ୍ପ୍ୟୁଟରରେ ସୂଚନା ଗଚ୍ଛିତ କରିବାକୁ ଚାହୁଁଛି |",
-    "string-deny-accesskey": "D",
-    "string-query-location": "Gears ବ୍ୟବହାର କରି ନିମ୍ନ ୱେବସାଇଟ୍ ଆପଣଙ୍କ ଅବସ୍ଥାନ ସମ୍ବନ୍ଧରେ ସୂଚନା ଆସେସ୍ କରିବାକୁ ଚାହୁଁଛି |",
-    "string-html-title": "Gears ସୁରକ୍ଷା ଚେତାବନୀ",
-    "string-description": "Gears ଏକ ଖୋଲା ଉତ୍ସ ବ୍ରାଉଜର୍ ବିସ୍ତାର , ଯାହା ଅଫଲାଇନ୍ କାର୍ଯ୍ୟକ୍ଷମତା ପ୍ରଦାନ କରିବାକୁ ନିମ୍ନ JavaScript APIs ବ୍ୟବହାର କରି ୱେବ୍ ଅନୁପ୍ରୟୋଗ ସକ୍ଷମ କରେ",
-    "string-database-desc": "ପୂର୍ଣ୍ଣ-ସନ୍ଧାନ ଯୋଗ୍ୟ ସମ୍ପର୍କିତ ଡାଟାବେସ୍‌‌ରେ ଡାଟା ସ୍ଥାନୀୟ ଭାବରେ ଗଚ୍ଛିତ କରନ୍ତୁ",
-    "string-allow-accesskey": "A",
-    "string-cancel": "ବାତିଲ୍",
-    "string-never-allow-link": "କେବେ ମଧ୍ୟ ଏହି ସାଇଟ୍‌କୁ ଅନୁମତି କରନ୍ତୁ ନାହିଁ",
-    "string-deny": "ଅଗ୍ରାହ୍ୟ",
-    "string-never-allow-link-wince": "ଏହାକୁ କେବେ ମଧ୍ୟ ଅନୁମତି କରନ୍ତୁ ନାହିଁ",
-    "string-trust-site-accesskey": "t",
-    "string-localserver-desc": "ଅନୁପ୍ରୟୋଗ ଉତ୍ସଗୁଡିକୁ ସ୍ଥାନୀୟ ଭାବରେ ଗଚ୍ଛିତ ଏବଂ ପରିବେଷିତ କରନ୍ତୁ",
-    "string-location-privacy-statement": "ଆଣଙ୍କର ଅବସ୍ଥାନ କିପରି ବ୍ୟବହୃତ ହେବ ଦେଖିବାକୁ ଏହି ସାଇଟର ଗୋପନୀୟତା ନୀତି ପଢନ୍ତୁ |",
-    "string-trust-site": "ମୁଁ ଏହି ସାଇଟକୁ ବିଶ୍ବାସ କରେ,ଏହାକୁ Gears ବ୍ୟବହାର କରିବାକୁ ଅନୁମତି ପ୍ରଦାନ କରନ୍ତୁ |"
-  }
-};
-
-// Insert all localized strings for the specified locale into the div or span
-// matching the id.
-function loadI18nStrings(locale) {
-  var rtl_languages = ['he', 'ar', 'fa', 'ur'];
-
-  if (!locale) {
-    locale = 'en-US';
-  } else {
-    if (!localized_strings[locale]) {
-      // For xx-YY locales, determine what the base locale is.
-      var base_locale = locale.split('-')[0];
-
-      if (localized_strings[base_locale]) {
-        locale = base_locale;
-      } else {
-        locale = 'en-US';
-      }
-    }
-  }
-
-  var strings = localized_strings[locale];
-
-  // If the specified locale is an right to left language, change the direction
-  // of the page.
-  for (index in rtl_languages) {
-    if (locale == rtl_languages[index]) {
-      document.body.dir = "rtl";
-      break;
-    }
-  }
-
-  // Copy each string to the proper UI element, if it exists.
-  for (name in strings) {
-    if (name == 'string-html-title') {
-      if (!browser.ie_mobile) {
-        // IE Mobile dialogs don't have a title bar.
-        // Furthermore, document.title is undefined in IE Mobile on WinMo 5.
-        // It's also impossible to add properties to the window object.
-        // (see http://code.google.com/apis/gears/mobile.html)
-        document.title = strings[name];
-      }
-    } else {
-      var element = dom.getElementById(name);
-      if (element) {
-        element.innerHTML = strings[name];
-      }
-    }
-  }
-}
-
-
-</script>
-
-<script>
-  var debug = false;
-  initDialog();
-
-  initWarning();
-
-  setButtonLabel("string-allow", "allow-button", "string-allow-accesskey");
-  setButtonLabel("string-deny", "deny-button", "string-deny-accesskey");
-
-  // Highlight the access key in the 'trust' text.
-  // TODO(zork): Cause this to be based on the localized string, and figure out
-  // how to programmatically set the access key for the checkbox.
-  var trustTextElement = dom.getElementById("string-trust-site");
-  text = trustTextElement.innerHTML;
-  text = text.replace(/t/, "<span class='accesskey'>t</span>");
-  trustTextElement.innerHTML = text;
-
-  if (!browser.ie_mobile) {
-    CustomButton.initializeAll();
-  }
-
-  if (browser.ie_mobile) {
-    var allowText = dom.getElementById("string-allow");
-    if (allowText) {
-      window.pie_dialog.SetButton(allowText.innerText, "allowAccessPermanently();");
-      window.pie_dialog.SetButtonEnabled(true);
-    }
-    var cancelText = dom.getElementById("string-cancel");
-    if (cancelText) {
-      window.pie_dialog.SetCancelButton(cancelText.innerText);
-    }
-    // Focus allow button by default.
-    dom.getElementById('allow-button').focus();
-  }
-
-  function setTextContent(elem, content) {
-    if (isDefined(typeof document.createTextNode)) {
-      elem.appendChild(document.createTextNode(content)); 
-    } else {
-      elem.innerText = content;
-    }
-  }
-
-  function showHelp(show) {
-    if (browser.ie_mobile) {
-      var elemSettings = dom.getElementById("permissions-settings"); 
-      var elemHelp = dom.getElementById("permissions-help"); 
-      if (show) {
-        elemSettings.style.display = 'none';
-        elemHelp.style.display = 'block';
-        window.pie_dialog.SetButton("Back", "showHelp(false);");
-        window.pie_dialog.SetButtonEnabled(true);
-      } else {
-        elemSettings.style.display = 'block';
-        elemHelp.style.display = 'none';
-        window.pie_dialog.SetButton("Allow", "allowAccessPermanently();");
-      }
-      window.pie_dialog.ResizeDialog();
-    } else {
-      window.open('http://gears.google.com/?action=help');
-    }
-  }
-
-  function initWarning() {
-    var args;
-    if (debug) {
-      // Handy for debugging layout:
-      args = {
-        locale: "en-US",
-        origin: "http://www.google.com",
-        dialogType: "localData",
-        customIcon: "http://google-gears.googlecode.com/svn/trunk/gears/test/manual/shortcuts/32.png",
-        customName: "My Application",
-        customMessage: "Press the button to enable my application to run offline!"
-      };
-    } else {
-      // The arguments to this dialog are a single string, see PermissionsDialog
-      args = getArguments();
-    }
-
-    loadI18nStrings(args.locale);
-    var origin = args['origin'];  // required parameter
-    var dialogType = args['dialogType'];  // required parameter
-    var customIcon = args['customIcon'];
-    var customName = args['customName'];
-    var customMessage = args['customMessage'];
-
-    var elem;
-
-    elem = dom.getElementById("icon");
-    if (dialogType == "localData") {
-      elem = dom.getElementById("icon-local-data");
-      elem.style.display = "block";
-      elem = dom.getElementById("local-data");
-      elem.style.display = "block";
-    } else if (dialogType == "locationData") {
-      elem = dom.getElementById("icon-locationdata");
-      elem.style.display = "block";
-      elem = dom.getElementById("location-data");
-      elem.style.display = "block";
-      elem = dom.getElementById("string-location-privacy-statement");
-      elem.style.display = "block";
-    }
-
-    if (!customName) {
-      elem = dom.getElementById("origin-only");
-      elem.style.display = "block";
-      if (browser.ie_mobile) {
-        elem.innerHTML = wrapDomain(origin);
-      } else {
-        setTextContent(elem, origin);
-      }
-
-      // When all we have is the origin, we lay it out centered because that
-      // looks nicer. This is also what the original dialog did, which did not
-      // support the extra name, icon, or message.
-      if (!browser.ie_mobile && !customIcon && !customMessage) {
-        elem.setAttribute("align", "center");
-      }
-    } else {
-      elem = dom.getElementById("origin");
-      elem.style.display = "block";
-      setTextContent(elem, origin);
-    }
-
-    if (customIcon) {
-      elem = dom.getElementById("custom-icon");
-      elem.style.display = "inline";
-      elem.height = 32;
-      elem.width = 32;
-      loadImage(elem, customIcon);
-    }
-
-    if (customName) {
-      elem = dom.getElementById("custom-name");
-      elem.style.display = "block";
-      setTextContent(elem, customName);
-    }
-
-    if (customMessage) {
-      elem = dom.getElementById("custom-message");
-      elem.style.display = "block";
-      setTextContent(elem, customMessage);
-    }
-
-    if (!browser.ie_mobile) {
-      // Set up the checkbox to toggle the enabledness of the Allow button.
-      dom.getElementById("unlock").onclick = updateAllowButtonEnabledState;
-      dom.getElementById("checkbox-row").style.display = 'block';
-      updateAllowButtonEnabledState();
-    }
-    resizeDialogToFitContent();
-  }
-
-
-  function updateAllowButtonEnabledState() {
-    var allowButton = dom.getElementById("allow-button");
-    var unlockCheckbox = dom.getElementById("unlock");
-
-    if (unlockCheckbox.checked) {
-      enableButton(allowButton);
-    } else {
-      disableButton(allowButton);
-    }
-  }
-
-  // Note: The structure that the following functions pass is coupled to the
-  // code in PermissionsDialog that processes it.
-  function allowAccessPermanently() {
-      saveAndClose({"allow": true, "permanently": true});
-  }
-
-  function denyAccessTemporarily() {
-    saveAndClose({"allow": false, "permanently": false});
-  }
-
-  function denyAccessPermanently() {
-    saveAndClose({"allow": false, "permanently": true });
-  }
-</script>
-</html>
diff --git a/assets/plugins/gears-0.4.23.0/settings_dialog.html b/assets/plugins/gears-0.4.23.0/settings_dialog.html
deleted file mode 100644
index e70e790..0000000
--- a/assets/plugins/gears-0.4.23.0/settings_dialog.html
+++ /dev/null
@@ -1,2750 +0,0 @@
-﻿<!DOCTYPE html>
-
-<!--
-Copyright 2007, The Android Open Source Project
-
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, 
-    this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
- 3. Neither the name of Google Inc. nor the names of its contributors may be
-    used to endorse or promote products derived from this software without
-    specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--->
-
-<html>
-<head>
-  <style type="text/css">
-
-
-/*
-Copyright 2007, The Android Open Source Project
-
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, 
-    this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
- 3. Neither the name of Google Inc. nor the names of its contributors may be
-    used to endorse or promote products derived from this software without
-    specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-body, html {
-  background-color:white;
-  padding:0;
-  margin:0;
-  height:100%;
-  overflow:hidden;
-  cursor:default;
-
-  /* 
-    Makes the text unselectable in mozilla. See html_diaog.js for IE
-    implementation.
-  */
-  -moz-user-select:none;
-}
-
-body, td, input, select, button {
-  font-family:arial,sans-serif;
-  font-size:13px;
-}
-
-p {
-  margin:0;
-  margin-bottom:1em;
-}
-
-a {
-  color:blue;
-  text-decoration:underline;
-}
-
-button {
-  /*
-  It would be better to express margins in ems, but it causes layout
-  artifacts (presumably because of rounding errors) when combined with
-  the -moz-border-radius property used in button.css on Firefox 2.
-
-  Also: bizarely, if I try to use the more natural margin-left:10px, I get
-  a bug where the buttons bounce on IE when you hover over them.
-  */
-  position:relative;
-  margin-right:7px;
-  left:7px;
-}
-
-#head {
-  padding:1em;
-}
-
-#foot {
-
-  /*
-  On Android we do not use position:absolute due to some
-  rendering limitations (absolute positioning works, but
-  the automatic resizing of dialog is confused by the
-  variable content and the display is wrong, while if we
-  remove the absolute positioning, #foot is back in the
-  flow and the dialog displays correctly)
-  */
-
-  background:white;
-  bottom:0;
-  width:100%;
-}
-
-#button-row {
-  margin:1em;
-}
-
-.accesskey {
-  text-decoration: underline;
-
-  /* IE CSS extension */
-  accelerator: true;
-}
-
-    h1 {
-      font-size:1.2em;
-      margin:0;
-    }
-
-    h2 {
-      font-size:1.1em;
-      margin:0;
-    }
-
-    /* TODO(aa): Move into standard stylesheet if used in all dialogs? */
-    #icon {
-      margin-right:0.5em;
-    }
-
-    #content {
-      overflow-x:hidden;
-      overflow-y:auto;
-
-      margin:0 1em;
-
-    }
-
-    #content table {
-      border: 1px #ccc;
-      /* Only set the sides and bottom border of the table because
-      border-colapse doesn't work on WinCE. */
-      border-style: none solid;
-      border-collapse: collapse;
-      /* A bug in Mozilla with border-collapse:collapse along with the overflow
-      settings we have on the scroll element causes the left border to be
-      placed 1px to the left, making the element invisible. */
-      margin-left:1px;
-    }
-
-    #content td {
-
-      padding: 4px; 
-
-    }
-
-    #content table.permissions {
-      border-bottom-style: solid;
-    }
-
-    #version {
-      font-size:0.8em;
-      font-style:italic;
-    }
-
-    #content td.left {
-      width: 100%;
-
-      padding-left: 20px;
-
-    }
-
-    #content td.right {
-
-      padding-right: 20px;
-
-    }
-
-    .app-icon {
-      width: 30px;
-    }
-
-    .app-name {
-      width: 150px;
-    }
-
-    .app-origin {
-      width: 70px;
-    }
-
-
-
-    td.origin-name {
-      font-weight: bold;
-      width: 100%;
-    }
-
-
-    div.radio-buttons {
-
-      width: 150px;
-
-    }
-
-
-
-
-  </style>
-</head>
-<body>
-  <div id="strings" style="display:none;">
-    <div id="string-cancel"></div>
-    <div id="string-cancel-accesskey"></div>
-    <div id="string-apply"></div>
-    <div id="string-apply-accesskey"></div>
-    <div id="string-nosites"></div>
-    <div id="string-allowed"></div>
-    <div id="string-denied"></div>
-    <div id="string-local-storage"></div>
-    <div id="string-location-data"></div>
-    <div id="string-remove"></div>
-  </div>
-  
-  <div id="head">
-    <table width="100%" cellpadding="0" cellspacing="0" border="0">
-      <tr>
-        <td valign="middle">
-
-          <img id="icon" src="data:image/png;base64,
-iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAJPElEQVR4Xq3V
-WWyc1d0G8Oecd515Z/csHsfxntiOE8eOMY6dxFkokJCQlACBhEpsvWgLRkAL
-IhRxEYrSpp/6XYCgUokKBQEl0ABR0wrShBAI2R1nM3HseB+Px2PPPu/Mu3aE
-uKkoUhPzuzhXRzp/PUfPOcQ0TcxGrOcJ9Jz6F4YmTNq2yF4r5436aFyrlyz8
-nyQxH6m7aTdETxO+D8UssSxF/0gGc4NCpc3u2VtctvBNb5HjN71XUw8bxAHd
-pPiGkQeg/PADDI5lMZ3QYRUZL2MpqRVIyhpwGwj62OdTObo1l405svEBd9/h
-J7ae3Nd1p6rIP+wA5/tzuKExgKDfsZm32KHIU6AUaGnwiD5b5u3R0787OXVu
-x0kbF3t7ZuyzPZ/ve2HjfySI65SdPOQf7z/UNM87pPg8zi32wI0/J8oINE1F
-NgewLOBxW8GwxnyTUWCqcSycHyT7Du99V9XY1rX37Lh43QPoagrhS689zRnp
-X/p9btjcZUB+CL29vThwPD6USOnHrRbGqCixNLc3ueuK3BpMQ0U0oaJvONvd
-uvaGoVklkJm+6DbU2Aa3rxxy7CL0VBxj4Qz++s/I4ebF1VvKAyRiaEmkMobt
-bO/0Gy0NRZu9bh5XBifVxqXbnm/p2JiZVQtmJs5WhcZHq+XkEAhlYJrAF2cS
-qUX1pV13bVgSqa+yo6bMgSInl57XdOdDM0l9kFIKniWcwDP6rFtQUn/f6QTt
-uPd0z2AMJoGqGYjMqD1Vc8j5zEw/qJGG3UrBsQwMNpjgqHZW1w3MKbYiFTm1
-StOU2Q3Ai3bcdt9LH4iuusczsgxKCSwiYxLCQMmnwbAUDEMg5/PgRDec3qqc
-yXpQ4rejrjj0zME9j+/IyUnrrGrIsDwal3f1GAbReI7FgiqpeTqWWjQxJePK
-cAY9lxO4MmrCJc6UOt3BDoAFIQbmV3mF7qN7num/3F2CAnb610+CwITAsjAB
-GIYBAkBgKN4ZDiFhAttqq4TpqamNcU0PEULHeUJDnEAUs0P2e0saYeaGsLjO
-bjvfl3pDUWnX0IT8JYMcOprLmsTc0T/yzopyNRsFy7CIzOQQy3kO2ezeQRSQ
-qVvbEc2r2D00DsUwANNEhdWCUknEuyMT6GpvRTCT3GparW/LeQXTyWT0QjT9
-SXEt9+jSX1Xvd7iql+ZiF8CyDBQNmJzO64ZJj9ntLt3lCTaLNp89E+3BmXMD
-hcPVzNh4zLQGOh976oW9f0YBSy0WvD86CcNThLtrKkloZIhSm0PvHp/A1rpq
-lCiy17TbdwY710C72IOiaNR7MqFsuJjVXyoOp6Qq/TIEjiKb08FxHMqDFkY3
-yTLK2UGQQiJ0Bf/4fFQfjJa8sG7zI++1+eYYHo9nCN8iXdWlyIHgyboqsJry
-cljROmKqtreIY/9uJVgkSLaHi5evXKGHQ1Cv9oNQin2FZC5l0i0ttzrifAU5
-FovpvpEJ+YjLzup1VVL7onk2QRQYUGLi4pUYDp7zPvvcrv07BUH47mcUZXg8
-2rYEpqY8JFTUPFKzoKG5UhJ3uIo8J731Da/PWd65AqExGCODoIQAuoYGlw1B
-VthOjpEJPYpVGVNbdvOaus6GGtvqyLSyqvdqdoQS8s21TEZzkGyuE98e/h20
-JeAFL8ttiondjrllQDyGIlGA3+GgFkPH1Imv0NdzFgPxJCJZGQalqHLYsCLg
-vosH+ay4j+9sH3PO0z6e+onLZBzzq8RjMLXtn345irc+upr97Pj48bLy8iF8
-D/Liwhp0+jyBSUU52Oh2LbCYOhiOg6pqOBdL4Eg0poRy6gkLy0SKRaGy2W1v
-bnTZITEMcgB0wsM0ga8GRkFX+G9pvW/xp4qsMOevpFc6JYTL6n98ua55vc5y
-Iv4bsmvxfDS6nYjnlc2VkuWdCqedVxUVR6fj2DM8fpwThF8sdDnPcLoKllJr
-QtXur7NL/9fmcVpFlgWVJBT24FTv1zjjLt39xAcf/5S3cPhfUZFSHJ6YQoVV
-PMKKYpSxSgjJORyYmBoRrNI9j61ZeWZzZSmaXHYEBD7b5nG8GlO0rlAub6LA
-SKehxGOAaMHZLw5u7jt11IdrQP82FkFtSTEsBEGbw+knDidGUhlEFfW9wgM0
-XCynYWMoGl0OgFKEZQUNDuktWTcuEYsFBRhMpvHOhcvZ2k13Ple1uDmNa0C3
-LF6A1ZXl0FRlk3tuOavJWaQ0DQ6OO52MxzE2GQGTzYJwPFoDPlxKpgGYikTJ
-JPUUIUcp9g+OZEtuWXf/s7tff8XqcMi4Bux6K+tNDg8+6F+waAcnSchenIRL
-FGDjGL+mqIjBBCQRNosFJ0NhhFUNIsdxAqU+wenGcH8/ZkTp/PYXd77P8zyu
-FQ0lM09xbvcuR209lKEBUBOolKwICMKDedOkeZb75qV89UIf3uwbwl1zi2GD
-2e4sK68DAQopoaS6Jlzk8+N60LCifjAZS0wo3SdBkgmYlMAncmj3OpvSmvYa
-SyCUFwdg6jp+VlOGeRxtopL0srN+AZcfHYbf5USq50xw7PLXDK4DObS6FZNy
-fr+TZdZRSuEROBT6DoYQjGRljGVz3VaG+cjDMqMCpcvsc+Zs8Ta12JT+y1CH
-BwGGweHxMOTWZY9s2/WHV0S7A9eCnLh5KXoTmTVnYsmtGU2HT+SDLW77+haP
-CzaHA9l0BjlNhVDkg628HILNDvlqP5SxYXAcjwIcn0ng9RPdZ188cLitbvkK
-BdeAPTA5g1a34yDgOFiIHIQQDKayXQ6W/e1ClrWypgE7z4ElJrIDV3ApPImR
-VBYCz6FC0iHrBj4eGE413n3v02WNixVcI7bRaYMBoMJmRR4motk8av2+l6Zj
-sdWKad5htYjQczkkpiI4MDmNL6LxbsUw/1Ik8nmJYe6ITk8vkWoX7ChU8FPu
-OlrA/P+SevhFHj6bhKDVgq/jCUQNwENJkUmwXgCg6QaOzSTx4Wj4PZ/TuX5b
-bfWXQYJTvK69Wbduw/sP7Pz9AZc/YOA6sGo2AxMA1Q0IFCghJj4cGERpqf/I
-J+HIJRNmOSVUOh9LxtxWy/YHW5cotkgImqZC1/K4/dHHrtrm1+J6UXHZKlg7
-b4Jl+SqwHStRe/NatN++EcFVPzrfcOvaVk/nmhaho7Dctn7TA1u3Xg3Mmwd/
-RyduXL8BbbdvAmuxYjb+DcasAaYvg7ldAAAAAElFTkSuQmCC
-           ">
-
-          <!-- Some browsers automatically focus the first focusable item. We
-          don't want anything focused, so we add this fake item. -->
-          <a href="#" id="focus-thief"></a>
-        </td>
-        <td width="100%" valign="middle">
-          <h1>
-          <span id="string-gears-settings"></span>
-          </h1>
-        </td>
-      </tr>
-    </table>
-  </div>
-  <div id="content">
-    <p>
-      <span id="string-permissions-description"></span>
-    </p>
-    <div id='div-permissions'>
-    </div>
-    <br>
-    <br>
-    <div id="string-version"></div>
-  </div>
-  <div id="foot">
-    <div id="button-row">
-      <table width="100%" cellpadding="0" cellspacing="0" border="0">
-        <tr>
-
-          <td nowrap="true" align="right" valign="middle">
-            <button id="confirm-button" class="custom"
-                onclick="saveAndClose(calculateDiff()); return false;"
-              ></button
-            ><button id="cancel-button" accesskey="C" class="custom"
-                onclick="saveAndClose(null); return false;"
-              ></button>
-          </td>
-
-        </tr>
-      </table>
-    </div>
-  </div>
-
-
-</body>
-
-<script>
-/*
-Copyright (c) 2005 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-//Array.prototype.______array = '______array';
-
-var JSON = {
-    org: 'http://www.JSON.org',
-    copyright: '(c)2005 JSON.org',
-    license: 'http://www.crockford.com/JSON/license.html',
-
-    stringify: function (arg) {
-        var c, i, l, s = '', v;
-
-        switch (typeof arg) {
-        case 'object':
-            if (arg) {
-                if (arg.constructor == Array.prototype.constructor) {
-                    for (i = 0; i < arg.length; ++i) {
-                        v = this.stringify(arg[i]);
-                        if (s) {
-                            s += ',';
-                        }
-                        s += v;
-                    }
-                    return '[' + s + ']';
-                } else if (typeof arg.toString != 'undefined') {
-                    for (i in arg) {
-                        v = arg[i];
-                        if (typeof v != 'undefined' && typeof v != 'function') {
-                            v = this.stringify(v);
-                            if (s) {
-                                s += ',';
-                            }
-                            s += this.stringify(i) + ':' + v;
-                        }
-                    }
-                    return '{' + s + '}';
-                }
-            }
-            return 'null';
-        case 'number':
-            return isFinite(arg) ? String(arg) : 'null';
-        case 'string':
-            l = arg.length;
-            s = '"';
-            for (i = 0; i < l; i += 1) {
-                c = arg.charAt(i);
-                if (c >= ' ') {
-                    if (c == '\\' || c == '"') {
-                        s += '\\';
-                    }
-                    s += c;
-                } else {
-                    switch (c) {
-                        case '\b':
-                            s += '\\b';
-                            break;
-                        case '\f':
-                            s += '\\f';
-                            break;
-                        case '\n':
-                            s += '\\n';
-                            break;
-                        case '\r':
-                            s += '\\r';
-                            break;
-                        case '\t':
-                            s += '\\t';
-                            break;
-                        default:
-                            c = c.charCodeAt();
-                            s += '\\u00' + Math.floor(c / 16).toString(16) +
-                                (c % 16).toString(16);
-                    }
-                }
-            }
-            return s + '"';
-        case 'boolean':
-            return String(arg);
-        default:
-            return 'null';
-        }
-    },
-    parse: function (text) {
-        var at = 0;
-        var ch = ' ';
-
-        function error(m) {
-            throw {
-                name: 'JSONError',
-                message: m,
-                at: at - 1,
-                text: text
-            };
-        }
-
-        function next() {
-            ch = text.charAt(at);
-            at += 1;
-            return ch;
-        }
-
-        function white() {
-            while (ch) {
-                if (ch <= ' ') {
-                    next();
-                } else if (ch == '/') {
-                    switch (next()) {
-                        case '/':
-                            while (next() && ch != '\n' && ch != '\r') {}
-                            break;
-                        case '*':
-                            next();
-                            for (;;) {
-                                if (ch) {
-                                    if (ch == '*') {
-                                        if (next() == '/') {
-                                            next();
-                                            break;
-                                        }
-                                    } else {
-                                        next();
-                                    }
-                                } else {
-                                    error("Unterminated comment");
-                                }
-                            }
-                            break;
-                        default:
-                            error("Syntax error");
-                    }
-                } else {
-                    break;
-                }
-            }
-        }
-
-        function string() {
-            var i, s = '', t, u;
-
-            if (ch == '"') {
-outer:          while (next()) {
-                    if (ch == '"') {
-                        next();
-                        return s;
-                    } else if (ch == '\\') {
-                        switch (next()) {
-                        case 'b':
-                            s += '\b';
-                            break;
-                        case 'f':
-                            s += '\f';
-                            break;
-                        case 'n':
-                            s += '\n';
-                            break;
-                        case 'r':
-                            s += '\r';
-                            break;
-                        case 't':
-                            s += '\t';
-                            break;
-                        case 'u':
-                            u = 0;
-                            for (i = 0; i < 4; i += 1) {
-                                t = parseInt(next(), 16);
-                                if (!isFinite(t)) {
-                                    break outer;
-                                }
-                                u = u * 16 + t;
-                            }
-                            s += String.fromCharCode(u);
-                            break;
-                        default:
-                            s += ch;
-                        }
-                    } else {
-                        s += ch;
-                    }
-                }
-            }
-            error("Bad string");
-        }
-
-        function array() {
-            var a = [];
-
-            if (ch == '[') {
-                next();
-                white();
-                if (ch == ']') {
-                    next();
-                    return a;
-                }
-                while (ch) {
-                    a.push(value());
-                    white();
-                    if (ch == ']') {
-                        next();
-                        return a;
-                    } else if (ch != ',') {
-                        break;
-                    }
-                    next();
-                    white();
-                }
-            }
-            error("Bad array");
-        }
-
-        function object() {
-            var k, o = {};
-
-            if (ch == '{') {
-                next();
-                white();
-                if (ch == '}') {
-                    next();
-                    return o;
-                }
-                while (ch) {
-                    k = string();
-                    white();
-                    if (ch != ':') {
-                        break;
-                    }
-                    next();
-                    o[k] = value();
-                    white();
-                    if (ch == '}') {
-                        next();
-                        return o;
-                    } else if (ch != ',') {
-                        break;
-                    }
-                    next();
-                    white();
-                }
-            }
-            error("Bad object");
-        }
-
-        function number() {
-            var n = '', v;
-            if (ch == '-') {
-                n = '-';
-                next();
-            }
-            while (ch >= '0' && ch <= '9') {
-                n += ch;
-                next();
-            }
-            if (ch == '.') {
-                n += '.';
-                while (next() && ch >= '0' && ch <= '9') {
-                    n += ch;
-                }
-            }
-            if (ch == 'e' || ch == 'E') {
-                n += 'e';
-                next();
-                if (ch == '-' || ch == '+') {
-                    n += ch;
-                    next();
-                }
-                while (ch >= '0' && ch <= '9') {
-                    n += ch;
-                    next();
-                }
-            }
-            v = +n;
-            if (!isFinite(v)) {
-                ////error("Bad number");
-            } else {
-                return v;
-            }
-        }
-
-        function word() {
-            switch (ch) {
-                case 't':
-                    if (next() == 'r' && next() == 'u' && next() == 'e') {
-                        next();
-                        return true;
-                    }
-                    break;
-                case 'f':
-                    if (next() == 'a' && next() == 'l' && next() == 's' &&
-                            next() == 'e') {
-                        next();
-                        return false;
-                    }
-                    break;
-                case 'n':
-                    if (next() == 'u' && next() == 'l' && next() == 'l') {
-                        next();
-                        return null;
-                    }
-                    break;
-            }
-            error("Syntax error");
-        }
-
-        function value() {
-            white();
-            switch (ch) {
-                case '{':
-                    return object();
-                case '[':
-                    return array();
-                case '"':
-                    return string();
-                case '-':
-                    return number();
-                default:
-                    return ch >= '0' && ch <= '9' ? number() : word();
-            }
-        }
-
-        return value();
-    }
-};
-
-// Copyright 2008, The Android Open Source Project
-//
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are met:
-//
-//  1. Redistributions of source code must retain the above copyright notice, 
-//     this list of conditions and the following disclaimer.
-//  2. Redistributions in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//  3. Neither the name of Google Inc. nor the names of its contributors may be
-//     used to endorse or promote products derived from this software without
-//     specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-//=============================================================================
-// Various basic JavaScript utilities.
-//=============================================================================
-
-/**
- * Check that the type is not undefined (we do it here as on
- * some devices typeof returns unknown instead of undefined...).
- * We have to pass the evaluation of (typeof elem) (i.e., a string)
- * to the function rather than simply (element) -- passing an 
- * undefined object would make the function crash on PIE.
- */
-function isDefined(type) {
-  return type != 'undefined' && type != 'unknown';
-}
-
-/**
- * Returns true if val is a function.
- */
-function isFunction(val) {
-  return typeof val == "function";
-}
-
-// TODO(aa): more basic type checking here.
-
-
-/**
- * Creates a 'bound' function that calls the current function with a preset
- * 'this' object and set of arguments.
- */
-Function.prototype.bind = function(obj) {
-  var preArgs = Array.prototype.slice.call(arguments, 1);
-  var self = this;
-  return function() {
-    var postArgs = Array.prototype.slice.call(arguments, 0);
-    var totalArgs = preArgs.concat(postArgs);
-    return self.apply(obj, totalArgs);
-  }
-};
-
-/**
- * Creates a partially applied function that calls the current function with
- * a preset set of arguments.
- */
-Function.prototype.partial = function() {
-  var args = Array.prototype.slice.call(arguments, 0);
-  return this.bind(null, args);
-};
-
-/**
- * Binds all the methods in obj to obj.
- */
-function bindMethods(obj) {
-  for (var p in obj) {
-    if (isFunction(obj[p])) {
-      obj[p] = obj[p].bind(obj);
-    }
-  }
-}
-
-
-/**
- * Trim leading and trailing whitespace from a string.
- */
-String.prototype.trim = function(str) {
-  return this.replace(/^\s+/, "").replace(/\s+$/, "");
-};
-
-
-/**
- * Find the index of a given element in an array. Returns -1 if the item does
- * not exist.
- */
-Array.prototype.indexOf = function(item) {
-  for (var i = 0; i < this.length; i++) {
-    if (this[i] === item) {
-      return i;
-    }
-  }
-  return -1;
-};
-
-/**
- * Makes a deep copy of an object.
- */
-function cloneObject(original) {
-  var newObject = new Object();
-  for (i in original) {
-    if (typeof original[i] == 'object') {
-      newObject[i] = cloneObject(original[i]);
-    }
-    else {
-      newObject[i] = original[i];
-    }
-  }
-  newObject.length = original.length;
-  return newObject;
-}
-
-var browser = {};
-
-(function() {
-  var ua = navigator.userAgent;
-  browser.opera = typeof opera != "undefined";
-  browser.ie = !browser.opera && ua.indexOf("MSIE") > -1;
-  browser.ie_mobile = (ua.indexOf("Windows CE") > -1) &&
-      (ua.indexOf("MSIE") > -1);
-  browser.webkit = ua.indexOf("WebKit") > -1;
-  // WebKit also gives product == "gecko".
-  browser.mozilla = !browser.webkit && navigator.product == "Gecko";
-  browser.safari = ua.indexOf("Safari") > -1;
-  browser.mac = navigator.platform.indexOf("Mac") > -1;
-  browser.linux = navigator.platform.indexOf("Linux") > -1;
-  browser.windows = navigator.platform.indexOf("Win") > -1;
-  browser.android = ua.indexOf("Android") > -1;
-  if (browser.android) {
-    browser.safari = false;
-  }
-  // TODO(aa): Add detection for more browsers, as necessary.
-})();
-
-// Copyright 2008, The Android Open Source Project
-//
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are met:
-//
-//  1. Redistributions of source code must retain the above copyright notice, 
-//     this list of conditions and the following disclaimer.
-//  2. Redistributions in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//  3. Neither the name of Google Inc. nor the names of its contributors may be
-//     used to endorse or promote products derived from this software without
-//     specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-//=============================================================================
-// DOM manipulation utilities.
-// Requires: base.js
-//=============================================================================
-
-var dom = {};
-
-/**
- * Provides a cross-browser way of getting an element by its id
- */
-dom.getElementById = function(id) {
-  if (isDefined(typeof document.getElementById)) {
-    return document.getElementById(id);
-  } else if (isDefined(typeof document.all)) {
-    return document.all[id];
-  }
-  throw new Error("Failed to get element by ID.");
-};
-
-/**
- * Gets the position and dimensions of an element in pixels in relation
- * to the window origin.
- */
-dom.getPosition = function(elem) {
-  var ret = { 'left'   : 0,
-              'top'    : 0,
-              'width'  : elem.width,
-              'height' : elem.height };
-  
-  if (!elem.offsetParent) return ret;
-  
-  var left = 0;
-  var top = 0;
-  while (elem) {
-    left += elem.offsetLeft;
-    top += elem.offsetTop;
-    elem = elem.offsetParent
-  }
-  ret.left = left;
-  ret.top = top;
-  return ret;
-};
-
-/**
- * Returns the height of the inside of the window.
- */
-dom.getWindowInnerHeight = function() {
-  if (isDefined(typeof window.innerHeight)) { // Firefox
-    return window.innerHeight;
-  } else if (isDefined(typeof document.body.offsetHeight)) { // IE
-    return document.body.offsetHeight;
-  }
-
-  throw new Error("Could not get windowInnerHeight.");
-};
-
-/**
- * Add an event listener to an element cross-browser.
- */
-dom.addEvent = function(element, eventName, handler) {
-  var wrapper = dom._callEventHandler.bind(dom, handler);
-
-  if (isDefined(typeof element.addEventListener)) {
-    // Standards-compatible browsers
-    element.addEventListener(eventName, wrapper, false);
-  } else if (isDefined(typeof element.attachEvent)) {
-    // IE
-    element.attachEvent("on" + eventName, wrapper);
-  } else {
-    throw new Error('Failed to attach event.');
-  }
-};
-
-/**
- * Private helper for calling event handlers compatibly across browsers.
- */
-dom._callEventHandler = function(handler, e) {
-  // Older versions of IE don't pass event to the handler.
-  if (!e) e = window.event;
-
-  // TODO(aa): Normalize event object properties.
-
-  return handler(e);
-};
-
-/**
- * Gets the CSS classes for an element.
- */
-dom.getClasses = function(elm) {
-  return elm.className.split(/\s+/);
-};
-
-/**
- * Check is an element has a particular CSS class name.
- */
-dom.hasClass = function(elm, className) {
-  return this.getClasses(elm).indexOf(className) > -1;
-};
-
-/**
- * Adds a CSS class to an element. Do nothing if the class already exists.
- */
-dom.addClass = function(elm, className) {
-  var classes = this.getClasses(elm);
-  if (classes.indexOf(className) > -1) {
-    return;
-  }
-  classes.push(className);
-  elm.className = classes.join(" ");
-};
-
-/**
- * Removes a CSS class from an element. Do nothing if the class doesn't exist.
- */
-dom.removeClass = function(elm, className) {
-  var classes = this.getClasses(elm);
-  var index = classes.indexOf(className);
-  if (index == -1) {
-    return;
-  }
-  classes.splice(index, 1);
-  elm.className = classes.join(" ");
-};
-
-/**
- * Gets the text (non-html) content of an element.
- */
-dom.getTextContent = function(elm) {
-  if (isDefined(typeof elm.textContent)) {
-    return elm.textContent;
-  } else if (isDefined(typeof elm.innerText)) {
-    return elm.innerText;
-  } else {
-    throw new Error("Could not find a property to get text content.");
-  }
-};
-
-/**
- * Sets the text (non-html) contents of an element.
- */
-dom.setTextContent = function(elm, text) {
-  if (isDefined(typeof elm.textContent)) {
-    elm.textContent = text;
-  } else if (isDefined(typeof elm.innerText)) {
-    elm.innerText = text;
-  } else {
-    throw new Error("Could not find a property to set text content.");
-  }
-};
-
-// Copyright 2007, The Android Open Source Project
-//
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are met:
-//
-//  1. Redistributions of source code must retain the above copyright notice, 
-//     this list of conditions and the following disclaimer.
-//  2. Redistributions in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//  3. Neither the name of Google Inc. nor the names of its contributors may be
-//     used to endorse or promote products derived from this software without
-//     specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-/**
- * Initialize the base functionality of the dialog.
- */
-function initDialog() {
-  if (!browser.ie_mobile) {
-    dom.addEvent(document, "keyup", handleKeyUp);
-  } else {
-    var buttonRowElem = null;
-    if (window.pie_dialog.IsSmartPhone()) {
-      buttonRowElem = dom.getElementById("button-row-smartphone");
-    } else {
-      buttonRowElem = dom.getElementById("button-row");
-    }
-    if (buttonRowElem) {
-      buttonRowElem.style.display = 'block';
-    }
-  }
-  if (browser.ie_mobile) {
-    window.pie_dialog.SetScriptContext(window);
-    window.pie_dialog.ResizeDialog();
-  }
-}
-
-/**
- * Set the label of an input button, and optionally, its accesskey.
- */
-function setButtonLabel(textID, elemID, accessKeyID) {
-  var textElem = dom.getElementById(textID);
-  var buttonElem = dom.getElementById(elemID);
-  if (textElem == null || buttonElem == null) {
-    return;
-  }
-
-  var accessKeyElem = null;
-  if (isDefined(typeof accessKeyID)) {
-    accessKeyElem = dom.getElementById(accessKeyID);
-  }
-
-  // This function works for two different kinds of buttons. Simple buttons
-  // based on the <input type="button"> tag, and custom buttons based on a
-  // <button> tag with the css class "custom".
-  // Note that on Windows Mobile 5, the tagName property is not defined.
-  // We can therefore safely assume that the converse is also true:
-  // if tagName is not defined, then the platform must be Windows Mobile 5.  
-  if (!isDefined(typeof buttonElem.tagName) ||
-      buttonElem.tagName.toLowerCase() == "input") {
-    buttonElem.value = dom.getTextContent(textElem).trim();
-    if (accessKeyElem != null) {
-      buttonElem.accessKey = dom.getTextContent(accessKeyElem).trim();
-    }
-  } else if (buttonElem.tagName.toLowerCase() == "button") {
-    var text = dom.getTextContent(textElem).trim();
-
-    if (accessKeyElem != null) {
-      // Some browsers use the accessKey attribute of the the anchor tag.
-      var accessKey = dom.getTextContent(accessKeyElem).trim();
-      buttonElem.accessKey = accessKey;
-
-      // Find the first matching character in the text and mark it.
-      // Note: this form of String.replace() only replaces the first occurence.
-      text = text.replace(accessKey,
-                          "<span class='accesskey'>" + accessKey + "</span>");
-    }
-
-    buttonElem.innerHTML = text;
-  } else {
-    throw new Error("Unexpected button tag name: " + buttonElem.tagName);
-  }
-}
-
-/**
- * Allows a dialog to do custom layout when the window changes sizes. The
- * provided function will be called with the height of the content area when the
- * dialog should relayout.
- */
-function initCustomLayout(layoutFunction) {
-  function doLayout() {
-    layoutFunction(getContentHeight());
-  }
-
-  doLayout();
-
-  // We do an additional layout in onload because sometimes things aren't
-  // stabilized when the first doLayout() is called above.
-  dom.addEvent(window, "load", doLayout);
-  dom.addEvent(window, "resize", doLayout);
-
-  // Mozilla doesn't fire continuous events during resize, so if we want to get
-  // somewhat smooth resizing, we need to run our own timer loop. This still
-  // doesn't look perfect, because the timer goes off out of sync with the
-  // browser's internal reflow, but I think it's better than nothing.
-  // TODO(aa): Keep looking for a way to get an event for each reflow, like IE.
-  if (browser.mozilla) {
-    var lastHeight = -1;
-
-    function maybeDoLayout() {
-      var currentHeight = dom.getWindowInnerHeight();
-      if (currentHeight != lastHeight) {
-        lastHeight = currentHeight;
-        doLayout();
-      }
-    }
-
-    window.setInterval(maybeDoLayout, 30);
-  }
-}
-
-/**
- * Get the JSON-formatted arguments that were passed by the caller.
- */
-function getArguments() {
-  var argsString;
-  if (browser.ie_mobile) {
-    argsString = window.pie_dialog.GetDialogArguments();
-  } else if (browser.ie) {
-    argsString = window.external.GetDialogArguments();
-  } else if (browser.mozilla) {
-    argsString = getFirefoxArguments(window.arguments[0]);
-  } else if (browser.safari) {
-    argsString = window.gears_dialogArguments;
-  } else if (browser.android) {
-    argsString = "" + window.bridge.getDialogArguments();
-  }
-
-  if (typeof argsString == "string") {
-    return JSON.parse(argsString);
-  } else {
-    return null;
-  }
-}
-
-/**
- * Helper used by getArguments(). Getting the arguments in the right type is
- * more involved in Firefox.
- */
-function getFirefoxArguments(windowArguments) {
-  var Ci = Components.interfaces;
-  windowArguments.QueryInterface(Ci.nsIProperties);
-  var supportsString = 
-    windowArguments.get("dialogArguments", Ci.nsISupportsString);
-  return supportsString.data;
-}
-
-/**
- * Close the dialog, sending the specified result back to the caller.
- */
-function saveAndClose(resultObject) {
-  var resultString = JSON.stringify(resultObject);
-  if (browser.ie_mobile) {
-    window.pie_dialog.CloseDialog(resultString);
-  } else if (browser.ie) {
-    window.external.CloseDialog(resultString);
-  } else if (browser.mozilla) {
-    saveFirefoxResults(resultString);
-    window.close();
-  } else if (browser.safari) {
-    window.gears_dialog.setResults(resultString);
-  } else if (browser.android) {
-    window.bridge.closeDialog(resultString);
-  }
-}
-
-/**
- * Helper used by endDialog() for Firefox.
- */
-function saveFirefoxResults(resultString) {
-  var Cc = Components.classes;
-  var Ci = Components.interfaces;
-  
-  var props = window.arguments[0].QueryInterface(Ci.nsIProperties);
-  var supportsString = Cc["@mozilla.org/supports-string;1"]
-      .createInstance(Ci.nsISupportsString);
-      
-  supportsString.data = resultString;
-  props.set("dialogResult", supportsString);
-}
-
-/**
- * Returns the height of the content area of the dialog.
- */
-function getContentHeight() {
-  var head = dom.getElementById("head");
-  var foot = dom.getElementById("foot");
-  return dom.getWindowInnerHeight() - head.offsetHeight - foot.offsetHeight;
-}
-
-/**
- * For some reason ESC doesn't work on HTML dialogs in either Firefox or IE. So
- * we implement it manually.
- */
-function handleKeyUp(e) {
-  var ESC_KEY_CODE = 27;
-  
-  if (e.keyCode == ESC_KEY_CODE) {
-    saveAndClose(null);
-  }
-}
-
-/**
- * Disables a button in the right way, whether it is normal or custom.
- */
-function disableButton(buttonElem) {
-  buttonElem.disabled = true;
-
-  if (browser.ie_mobile) {
-    window.pie_dialog.SetButtonEnabled(false);
-  }
-
-  if (!isDefined(typeof buttonElem.tagName) || 
-      buttonElem.tagName.toLowerCase() == "input") {
-    buttonElem.style.color = "gray";
-  } else if (buttonElem.tagName.toLowerCase() == "button") {
-    dom.addClass(buttonElem, "disabled");
-  } else {
-    throw new Error("Unexpected tag name: " + buttonElem.tagName);
-  }
-}
-
-/**
- * Enables a button in the right way, whether it is normal or custom.
- */
-function enableButton(buttonElem) {
-  buttonElem.disabled = false;
-
-  if (browser.ie_mobile) {
-    window.pie_dialog.SetButtonEnabled(true);
-  }
-  
-  if (!isDefined(typeof buttonElem.tagName) ||
-      buttonElem.tagName.toLowerCase() == "input") {
-    buttonElem.style.color = "black";
-  } else if (buttonElem.tagName.toLowerCase() == "button") {
-    dom.removeClass(buttonElem, "disabled");
-  } else {
-    throw new Error("Unexpected tag name: " + buttonElem.tagName);
-  }
-}
-
-/**
- * Returns a wrapped domain (useful for small screens dialogs, 
- * e.g. windows mobile devices)
- */
-function wrapDomain(str) {
-  if (!browser.ie_mobile) {
-    return str;
-  }
-
-  var max = 20;
-  var url;
-  var scheme_start = str.indexOf("://");
-  var scheme = "";
-
-  if (scheme_start != -1) {
-    scheme = str.substring(0, scheme_start);
-    scheme += "://";
-    // there's automatically an hyphenation
-    // point used by the browser after http://
-    // so we only have to hyphenate the
-    // rest of the string
-    url = str.substring(scheme.length);
-  } else {
-    url = str;
-  }
-
-  // We hyphenate the string on every dot
-  var components = url.split(".");
-  if (components.length < 1) {
-    return str;
-  }
-
-  var content = components[0];
-  var len = content.length;
-  for (var i=1; i < components.length; i++) {
-    var elem = components[i];
-    content += ".";
-    len++;
-    if (len + elem.length > max) {
-      content += "<br>";
-      len = 0;
-    }
-    content += elem;
-    len += elem.length;
-  }
-  return scheme + content;
-}
-
-/**
- * Resizes the dialog to fit the content size.
- */
-function resizeDialogToFitContent(opt_minDialogInnerHeight) {
-  // This does not work on PIE (no height measurement)
-  if (browser.ie_mobile) {
-    window.pie_dialog.ResizeDialog();
-    return;
-  }
-  // window.resize() is not working on Android, we bail out.
-  if (browser.android) {
-    return;
-  }
-
-  // Resize the window to fit
-  var contentDiv = dom.getElementById("content");
-  var contentHeightProvided = getContentHeight();
-  var contentHeightDesired = contentDiv.offsetHeight;
-
-  var dialogHeightProvided = dom.getWindowInnerHeight();
-  var dialogHeightDesired =
-      dialogHeightProvided + (contentHeightDesired - contentHeightProvided);
-
-  var minDialogHeight = opt_minDialogInnerHeight || 0;
-  var maxDialogHeight = 400; // arbitrary max height for a dialog to resize to
-  
-  var targetHeight = Math.max(dialogHeightDesired, minDialogHeight);
-  targetHeight = Math.min(dialogHeightDesired, maxDialogHeight);
-
-  if (targetHeight != dialogHeightProvided) {
-    var dy = targetHeight - dialogHeightProvided;
-    window.resizeBy(0, dy);
-  }
-}
-
-/**
- * Safari running on OSX 10.4 can't load images dynamically from the network,
- * this helper function calls gears-specific code to work around this
- * limitation.
- */
-function loadImage(elem, image_url) {
-  if (browser.safari) {
-    var position = dom.getPosition(elem);
-    window.gears_dialog.loadImageIntoElement(image_url, position.top,
-                                             position.left,
-                                             position.width,
-                                             position.height);
-  } else {
-    elem.src = image_url;
-  }
-}
-
-// Copyright 2008, The Android Open Source Project
-//
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are met:
-//
-//  1. Redistributions of source code must retain the above copyright notice, 
-//     this list of conditions and the following disclaimer.
-//  2. Redistributions in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//  3. Neither the name of Google Inc. nor the names of its contributors may be
-//     used to endorse or promote products derived from this software without
-//     specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-//=============================================================================
-// Implements the behavior of our custom buttons. There is no native support in
-// IE for rounded corners on HTML elements, so this script also implements a
-// hack to simulate them in that browser.
-//
-// Requires: base.js, dom.js
-//=============================================================================
-
-/**
- * Constructor.
- */
-function CustomButton(htmlButton) {
-  bindMethods(this);
-  
-  this._focused = false;
-  this._htmlButton = htmlButton;
-
-  if (!document.all) {  // not IE
-    dom.addEvent(htmlButton, "mouseover", this._handleMouseOver);
-    dom.addEvent(htmlButton, "mouseout", this._handleMouseOut);
-  } else {  // IE
-    // mouseover/mouseout behave badly with nested elements in IE. Luckily,
-    // mouseenter/mouseleave are provided and have the equivalent semantics.
-    dom.addEvent(htmlButton, "mouseenter", this._handleMouseOver);
-    dom.addEvent(htmlButton, "mouseleave", this._handleMouseOut);
-
-    // We also handle focus and blur in IE so that we can update the corners
-    // to match the black border IE provides.
-    dom.addEvent(htmlButton, "focusin", this._handleFocus);
-    dom.addEvent(htmlButton, "blur", this._handleBlur);
-
-    dom.addClass(htmlButton, "ie");
-    this._createCorners();
-  }
-
-  // Limit button widths to a minimum of 60px. They look funny skinnier.  
-  if (htmlButton.offsetWidth < 60) {
-    htmlButton.style.width = "60px";
-  }
-
-  htmlButton.style.visibility = "visible";
-}
-
-/**
- * Initializes all the custom buttons on the page.
- */
-CustomButton.initializeAll = function() {
-  var buttons = document.getElementsByTagName("button");
-  for (var i = 0, button; button = buttons[i]; i++) {
-    if (dom.hasClass(button, "custom")) {
-      new CustomButton(button);
-    }
-  }
-};
-
-/**
- * Highlights the button on mouseover. Note that this gets called multiple
- * times while the mouse goes over sub elements inside the button.
- */
-CustomButton.prototype._handleMouseOver = function() {
-  if (!this._htmlButton.disabled && !this._focused) {
-    dom.addClass(this._htmlButton, "hover");
-    this._setCornerColor("blue");
-  }
-};
-
-/**
- * Undoes the highlighting of the button on mouseout. Note that this gets called
- * multiple times when the mouse moves out of sub elements, even if it is still
- * over the button. That is OK, as long as there is immediately a mouseover
- * event.
- */
-CustomButton.prototype._handleMouseOut = function() {
-  if (!this._htmlButton.disabled && !this._focused) {
-    dom.removeClass(this._htmlButton, "hover");
-    this._setCornerColor("grey");
-  }
-};
-
-/**
- * Highlights the button on focus. Currently only used for IE.
- * TODO(aa): The black highlight looks cool. Consider for other browsers.
- */
-CustomButton.prototype._handleFocus = function() {
-  dom.removeClass(this._htmlButton, "hover");
-  this._setCornerColor("black");
-  this._focused = true;
-};
-
-/**
- * Undoes the highlighting of the button on blur.
- */
-CustomButton.prototype._handleBlur = function() {
-  this._setCornerColor("grey");
-  this._focused = false;
-};
-
-/**
- * Helper to create the graphics that make the button have rounded corners in
- * IE.
- */
-CustomButton.prototype._createCorners = function() {
-  // Making the button position:relative makes it possible to position things
-  // inside it relative to it's border.
-  this._htmlButton.style.position = "relative";
-
-  var verticalEdges = ["left", "right"];
-  var horizontalEdges = ["top", "bottom"];
-  var colors = ["grey", "blue", "black"];
-
-  for (var i = 0; i < verticalEdges.length; i++) {
-    for (var j = 0; j < horizontalEdges.length; j++) {
-      for (var k = 0; k < colors.length; k++) {
-        var img = document.createElement("img");
-        img.src = "button_corner_" + colors[k]  + ".gif";
-        img.color  = colors[k];
-        img.style.position = "absolute";
-        img.style[verticalEdges[i]] = "-2px";
-        img.style[horizontalEdges[j]] = "-2px";
-        img.style.filter =
-            "progid:DXImageTransform.Microsoft.BasicImage(Rotation=" + 
-            (i + j) + ")";
-        this._htmlButton.appendChild(img);
-      }
-    }
-  }
-
-  this._setCornerColor("grey");
-};
-
-/**
- * Sets the color of the corners in IE by changing the stack order of the corner
- * images.
- */
-CustomButton.prototype._setCornerColor = function(newColor) {
-  var imgs = this._htmlButton.getElementsByTagName("img");
-  for (var i = 0, img; img = imgs[i]; i++) {
-    img.style.zIndex = Number(img.color == newColor);
-  }
-};
-
-var localized_strings = {
-  "el": {
-    "string-denied": "Δεν επιτρέπονται",
-    "string-apply-accesskey": "A",
-    "string-remove": "Κατάργηση",
-    "string-gears-settings": "Ρυθμίσεις Gears",
-    "string-apply": "Εφαρμογή",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Άκυρο",
-    "string-html-title": "Ρυθμίσεις Gears",
-    "string-allowed": "Επιτρέπονται",
-    "string-local-storage": "Τοπικός αποθηκευτικός χώρος",
-    "string-nosites": "Δεν υπάρχουν ιστότοποι.",
-    "string-permissions-description": "Ο παρακάτω πίνακας δείχνει τα δικαιώματα που χορηγήσατε σε κάθε ιστότοπο που επιχείρησε να χρησιμοποιήσει το Gears.",
-    "string-location-data": "Τοποθεσία",
-    "string-version": "Έκδοση Gears 0.4.23.0"
-  },
-  "gu": {
-    "string-denied": "નકારેલું",
-    "string-apply-accesskey": "A",
-    "string-remove": "દૂર કરો",
-    "string-gears-settings": "Gears સેટિંગ્સ",
-    "string-apply": "લાગુ કરો",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "રદ કરો",
-    "string-html-title": "Gears સેટિંગ્સ",
-    "string-allowed": "મંજુર કરેલ",
-    "string-local-storage": "સ્થાનિક સ્ટોરેજ",
-    "string-nosites": "કોઇ સાઇટ્સ નથીં.",
-    "string-permissions-description": "નીચેનુ કોષ્ટક દર્શાવે છે કે તમે જુદી-જુદી સાઇટ્સને કઇ પરવાનગીઓ આપેલી છે કે જેમણે Gearsનો ઉપયોગ કરવાનો પ્રયત્ન કર્યો છે.",
-    "string-location-data": "સ્થાન",
-    "string-version": "Gears સંસ્કરણ 0.4.23.0"
-  },
-  "zh-TW": {
-    "string-denied": "遭拒",
-    "string-apply-accesskey": "A",
-    "string-remove": "移除",
-    "string-gears-settings": "Gears 設定",
-    "string-apply": "套用",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "取消",
-    "string-html-title": "Gears 設定",
-    "string-allowed": "允許",
-    "string-local-storage": "本機儲存",
-    "string-nosites": "沒有網站。",
-    "string-permissions-description": "下表顯示您授予嘗試使用 Gears 之各個網站的權限。",
-    "string-location-data": "位置",
-    "string-version": "Gears 版本 0.4.23.0"
-  },
-  "vi": {
-    "string-denied": "Bị từ chối",
-    "string-apply-accesskey": "P",
-    "string-remove": "Xoá",
-    "string-gears-settings": "Cài đặt Gears",
-    "string-apply": "Áp dụng",
-    "string-cancel-accesskey": "H",
-    "string-cancel": "Huỷ",
-    "string-html-title": "Cài đặt Gears",
-    "string-allowed": "Được phép",
-    "string-local-storage": "Bộ nhớ cục bộ",
-    "string-nosites": "Không có trang web nào.",
-    "string-permissions-description": "Bảng dưới đây hiển thị các quyền bạn cấp cho mỗi trang đã cố gắng sử dụng Gears.",
-    "string-location-data": "Vị trí",
-    "string-version": "Gears phiên bản 0.4.23.0"
-  },
-  "ca": {
-    "string-denied": "Denegat",
-    "string-apply-accesskey": "P",
-    "string-remove": "Elimina",
-    "string-gears-settings": "Configuració de Gears",
-    "string-apply": "Aplica",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Cancel·la",
-    "string-html-title": "Configuració de Gears",
-    "string-allowed": "Permès",
-    "string-local-storage": "Emmagatzematge local",
-    "string-nosites": "Cap lloc.",
-    "string-permissions-description": "La taula següent mostra els permisos que teniu a cada lloc que ha intentat utilizar Gears.",
-    "string-location-data": "Ubicació",
-    "string-version": "Versió de Gears 0.4.23.0"
-  },
-  "it": {
-    "string-denied": "Non consentito",
-    "string-apply-accesskey": "A",
-    "string-remove": "Rimuovi",
-    "string-gears-settings": "Impostazioni di Google Gears",
-    "string-apply": "Applica",
-    "string-cancel-accesskey": "A",
-    "string-cancel": "Annulla",
-    "string-html-title": "Impostazioni di Google Gears",
-    "string-allowed": "Consentito",
-    "string-local-storage": "Archiviazione locale",
-    "string-nosites": "Nessun sito.",
-    "string-permissions-description": "La tabella riportata di seguito mostra le autorizzazioni concesse ai siti che hanno tentato di utilizzare Google Gears.",
-    "string-location-data": "Posizione",
-    "string-version": "Versione di Google Gears 0.4.23.0"
-  },
-  "kn": {
-    "string-denied": "ನಿರಾಕರಿಸಲಾಗಿದೆ",
-    "string-apply-accesskey": "A",
-    "string-remove": "ತೆಗೆಯಿರಿ",
-    "string-gears-settings": "Gears ಸೆಟ್ಟಿಂಗ್ಸ್",
-    "string-apply": "ಅನ್ವಯಿಸಿ",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "ರದ್ದುಮಾಡು",
-    "string-html-title": "Gears ಸೆಟ್ಟಿಂಗ್ಸ್",
-    "string-allowed": "ಅನುಮತಿಸಲಾಗಿದೆ",
-    "string-local-storage": "ಸ್ಥಳೀಯ ಶೇಖರಣೆ",
-    "string-nosites": "ಸೈಟುಗಳಿಲ್ಲ.",
-    "string-permissions-description": "ಕೆಳಗಿನ ಟೇಬಲ್ Gears ಬಳಸಲು ಪ್ರಯತ್ನಿಸಿದ ಪ್ರತಿಯೊಂದು ಸೈಟ್ ಗೂ ನೀವು ನೀಡಿದ ಅನುಮತಿಗಳನ್ನು ತೋರಿಸುತ್ತಿದೆ.",
-    "string-location-data": "ಸ್ಥಳ",
-    "string-version": "0.4.23.0 Gears ಆವೃತ್ತಿ"
-  },
-  "ar": {
-    "string-denied": "مرفوض",
-    "string-apply-accesskey": "س",
-    "string-remove": "إزالة",
-    "string-gears-settings": "إعدادات Gears",
-    "string-apply": "تطبيق",
-    "string-cancel-accesskey": "غ",
-    "string-cancel": "إلغاء",
-    "string-html-title": "إعدادات Gears",
-    "string-allowed": "مسموح",
-    "string-local-storage": "تخزين محلي",
-    "string-nosites": "لا توجد مواقع.",
-    "string-permissions-description": "يوضح الجدول أدناه الأذونات التي قمت بمنحها لكل موقع حاول استخدام Gears.",
-    "string-location-data": "الموقع",
-    "string-version": "Gears الإصدار 0.4.23.0"
-  },
-  "ml": {
-    "string-denied": "തടഞ്ഞു",
-    "string-apply-accesskey": "A",
-    "string-remove": "നീക്കംചെയ്യൂ",
-    "string-gears-settings": "Gears ക്രമീകരണങ്ങള്",
-    "string-apply": "അപേക്ഷിക്കുക",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "റദ്ദാക്കൂ",
-    "string-html-title": "Gears ക്രമീകരണങ്ങള്",
-    "string-allowed": "അനുവദിച്ചു",
-    "string-local-storage": "പ്രാദേശിക ശേഖരം",
-    "string-nosites": "സൈറ്റുകളൊന്നുമില്ല.",
-    "string-permissions-description": "താഴെക്കാണുന്ന പട്ടിക Gears ഉപയോഗിക്കാന് ശ്രമിച്ച ഓരോ സൈറ്റിലേക്കും അനുവദിച്ചവ കാണിക്കുന്നു.",
-    "string-location-data": "ലൊക്കേഷന്",
-    "string-version": "Gears പതിപ്പ് 0.4.23.0"
-  },
-  "cs": {
-    "string-denied": "Zamítnuto",
-    "string-apply-accesskey": "P",
-    "string-remove": "Odebrat",
-    "string-gears-settings": "Nastavení aplikace Gears",
-    "string-apply": "Použít",
-    "string-cancel-accesskey": "R",
-    "string-cancel": "Zrušit",
-    "string-html-title": "Nastavení aplikace Gears",
-    "string-allowed": "Povoleno",
-    "string-local-storage": "Místní úložiště",
-    "string-nosites": "Žádné weby.",
-    "string-permissions-description": "Následující tabulka zobrazuje oprávnění udělená každému webu, který se pokusil použít aplikaci Gears.",
-    "string-location-data": "Lokalita",
-    "string-version": "Gears verze 0.4.23.0"
-  },
-  "et": {
-    "string-denied": "Keelatud",
-    "string-apply-accesskey": "L",
-    "string-remove": "Eemalda",
-    "string-gears-settings": "Gearsi seaded",
-    "string-apply": "Rakenda",
-    "string-cancel-accesskey": "T",
-    "string-cancel": "Tühista",
-    "string-html-title": "Gearsi seaded",
-    "string-allowed": "Lubatud",
-    "string-local-storage": "Kohalik salvestamine",
-    "string-nosites": "Saidid puuduvad.",
-    "string-permissions-description": "Alljärgnev tabel näitab lubasid, mille olete igale Gearsi kasutada püüdnud saidile andnud.",
-    "string-location-data": "Asukoht",
-    "string-version": "Gearsi versioon 0.4.23.0"
-  },
-  "id": {
-    "string-denied": "Ditolak",
-    "string-apply-accesskey": "A",
-    "string-remove": "Hapus",
-    "string-gears-settings": "Pengaturan Gears",
-    "string-apply": "Terapkan",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Batalkan",
-    "string-html-title": "Pengaturan Gears",
-    "string-allowed": "Diizinkan",
-    "string-local-storage": "Penyimpanan lokal",
-    "string-nosites": "Tiada situs.",
-    "string-permissions-description": "Tabel berikut menunjukkan izin yang telah Anda berikan ke setiap situs yang berusaha menggunakan Gears.",
-    "string-location-data": "Lokasi",
-    "string-version": "Versi Gears 0.4.23.0"
-  },
-  "es": {
-    "string-denied": "Denegado",
-    "string-apply-accesskey": "P",
-    "string-remove": "Quitar",
-    "string-gears-settings": "Configuración Gears",
-    "string-apply": "Aplicar",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Cancelar",
-    "string-html-title": "Configuración Gears",
-    "string-allowed": "Permitido",
-    "string-local-storage": "Almacenamiento local",
-    "string-nosites": "No hay sitios.",
-    "string-permissions-description": "La siguiente tabla muestra las autorizaciones que has concedido a cada sitio en el que has intentado usar Gears.",
-    "string-location-data": "Ubicación",
-    "string-version": "Versión Gears 0.4.23.0"
-  },
-  "en-GB": {
-    "string-denied": "Denied",
-    "string-apply-accesskey": "A",
-    "string-remove": "Remove",
-    "string-gears-settings": "Gears Settings",
-    "string-apply": "Apply",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Cancel",
-    "string-html-title": "Gears Settings",
-    "string-allowed": "Allowed",
-    "string-local-storage": "Local storage",
-    "string-nosites": "No sites.",
-    "string-permissions-description": "The table below shows the permissions you have granted to each site that has attempted to use Gears.",
-    "string-location-data": "Location",
-    "string-version": "Gears version 0.4.23.0"
-  },
-  "ru": {
-    "string-denied": "Отказано",
-    "string-apply-accesskey": "A",
-    "string-remove": "Удалить",
-    "string-gears-settings": "Настройки Gears",
-    "string-apply": "Применить",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Отмена",
-    "string-html-title": "Настройки Gears",
-    "string-allowed": "Разрешено",
-    "string-local-storage": "Локальное хранилище",
-    "string-nosites": "Нет сайтов.",
-    "string-permissions-description": "В таблице ниже перечислены разрешения, предоставленные каждому сайту, который пытался воспользоваться Gears.",
-    "string-location-data": "Местонахождение",
-    "string-version": "Gears версии 0.4.23.0"
-  },
-  "nl": {
-    "string-denied": "Geweigerd",
-    "string-apply-accesskey": "A",
-    "string-remove": "Verwijderen",
-    "string-gears-settings": "Instellingen voor Gears",
-    "string-apply": "Toepassen",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Annuleren",
-    "string-html-title": "Instellingen voor Gears",
-    "string-allowed": "Toegestaan",
-    "string-local-storage": "Lokale opslag",
-    "string-nosites": "Geen sites.",
-    "string-permissions-description": "Voor elke site die heeft geprobeerd Gears te gebruiken, worden in de tabel hieronder de machtigingen weergegeven die u aan deze site hebt verleend.",
-    "string-location-data": "Locatie",
-    "string-version": "Gears-versie 0.4.23.0"
-  },
-  "no": {
-    "string-denied": "Ikke tillatt",
-    "string-apply-accesskey": "T",
-    "string-remove": "Fjern",
-    "string-gears-settings": "Innstillinger for Gears",
-    "string-apply": "Bruk",
-    "string-cancel-accesskey": "A",
-    "string-cancel": "Avbryt",
-    "string-html-title": "Innstillinger for Gears",
-    "string-allowed": "Tillatt",
-    "string-local-storage": "Lokal lagring",
-    "string-nosites": "Ingen steder.",
-    "string-permissions-description": "Tabellen nedenfor viser tillatelsene du har gitt til hvert nettsted som har forsøkt å bruke Gears.",
-    "string-location-data": "Område",
-    "string-version": "Gears versjon 0.4.23.0"
-  },
-  "tr": {
-    "string-denied": "Reddedildi",
-    "string-apply-accesskey": "V",
-    "string-remove": "Kaldır",
-    "string-gears-settings": "Gears Ayarları",
-    "string-apply": "Uygula",
-    "string-cancel-accesskey": "a",
-    "string-cancel": "İptal",
-    "string-html-title": "Gears Ayarları",
-    "string-allowed": "İzin verildi",
-    "string-local-storage": "Yerel depolama",
-    "string-nosites": "Site yok.",
-    "string-permissions-description": "Aşağıdaki tablo Gears kullanan her site için sağladığınız izinleri gösterir.",
-    "string-location-data": "Konum",
-    "string-version": "Gears sürüm 0.4.23.0"
-  },
-  "lv": {
-    "string-denied": "Neatļauts",
-    "string-apply-accesskey": "A",
-    "string-remove": "Noņemt",
-    "string-gears-settings": "Gears iestatījumi",
-    "string-apply": "Lietot",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Atcelt",
-    "string-html-title": "Gears iestatījumi",
-    "string-allowed": "Atļauts",
-    "string-local-storage": "Vietējā atmiņa",
-    "string-nosites": "Nav vietņu.",
-    "string-permissions-description": "Tālāk minētā tabula rāda atļaujas, kuras esat piešķīris katrai vietnei, kas mēģināja lietot Gears.",
-    "string-location-data": "Atrašanās vieta",
-    "string-version": "Gears versija 0.4.23.0"
-  },
-  "lt": {
-    "string-denied": "Neleidžiama",
-    "string-apply-accesskey": "A",
-    "string-remove": "Pašalinti",
-    "string-gears-settings": "„Gears“ nuostatos",
-    "string-apply": "Taikyti",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Atšaukti",
-    "string-html-title": "„Gears“ nuostatos",
-    "string-allowed": "Leidžiama",
-    "string-local-storage": "Vietinė saugykla",
-    "string-nosites": "Nėra svetainių.",
-    "string-permissions-description": "Žemiau pateikta lentelėje rodomi leidimai, kuriuos suteikėte kiekvienai svetainei, bandžiusiai naudoti „Gears“.",
-    "string-location-data": "Vietovė",
-    "string-version": "„Gears“ versija 0.4.23.0"
-  },
-  "th": {
-    "string-denied": "ปฏิเสธ",
-    "string-apply-accesskey": "อ",
-    "string-remove": "ลบ",
-    "string-gears-settings": "การตั้งค่า Gears",
-    "string-apply": "ใช้",
-    "string-cancel-accesskey": "ย",
-    "string-cancel": "ยกเลิก",
-    "string-html-title": "การตั้งค่า Gears",
-    "string-allowed": "อนุญาต",
-    "string-local-storage": "พื้นที่เก็บข้อมูลในเครื่อง",
-    "string-nosites": "ไม่มีไซต์",
-    "string-permissions-description": "ตารางต่อไปนี้แสดงสิทธิ์ที่คุณให้แก่แต่ละไซต์ที่พยายามใช้ Gears",
-    "string-location-data": "ตำแหน่ง",
-    "string-version": "Gears เวอร์ชัน 0.4.23.0"
-  },
-  "ro": {
-    "string-denied": "Refuzat",
-    "string-apply-accesskey": "P",
-    "string-remove": "Eliminaţi",
-    "string-gears-settings": "Setări Gears",
-    "string-apply": "Aplicaţi",
-    "string-cancel-accesskey": "A",
-    "string-cancel": "Anulaţi",
-    "string-html-title": "Setări Gears",
-    "string-allowed": "Permis",
-    "string-local-storage": "Stocare locală",
-    "string-nosites": "Niciun site.",
-    "string-permissions-description": "Tabelul de mai jos afişează permisiunile pe care le-aţi acordat fiecărui site care a încercat să utilizeze Gears.",
-    "string-location-data": "Locaţie",
-    "string-version": "Versiune Gears 0.4.23.0"
-  },
-  "is": {
-    "string-denied": "Hafnað",
-    "string-apply-accesskey": "L",
-    "string-remove": "Fjarlægja",
-    "string-gears-settings": "Stillingar Gears",
-    "string-apply": "Nota",
-    "string-cancel-accesskey": "H",
-    "string-cancel": "Hætta við",
-    "string-html-title": "Stillingar Gears",
-    "string-allowed": "Leyft",
-    "string-local-storage": "Staðbundin geymsla",
-    "string-nosites": "Engin vefsvæði.",
-    "string-permissions-description": "Taflan hér fyrir neðan sýnir þær heimildir sem þú hefur veitt hverju svæði sem hefur reynt að nota Gears.",
-    "string-location-data": "Staðsetning",
-    "string-version": "Gears útgáfa 0.4.23.0"
-  },
-  "fil": {
-    "string-denied": "Tinganggihan",
-    "string-apply-accesskey": "P",
-    "string-remove": "Alisin",
-    "string-gears-settings": "Mga Setting ng Gear",
-    "string-apply": "Ilapat",
-    "string-cancel-accesskey": "I",
-    "string-cancel": "Ikansela",
-    "string-html-title": "Mga Setting ng Gear",
-    "string-allowed": "Pinahintulutan",
-    "string-local-storage": "Lokal na imbakan",
-    "string-nosites": "Walang mga site.",
-    "string-permissions-description": "Ang talahanayan sa ibaba ay nagpapakita ng mga pahintulot na naibigay mo sa bawat site na sinubukang gumamit ng Mga Gear.",
-    "string-location-data": "Lokasyon",
-    "string-version": "bersyon ng Mga Gear 0.4.23.0"
-  },
-  "ta": {
-    "string-denied": "அனுமதி மறுத்தது",
-    "string-apply-accesskey": "A",
-    "string-remove": "அகற்று",
-    "string-gears-settings": "Gears அமைப்புகள்",
-    "string-apply": "பயன்படுத்து",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "ரத்துசெய்",
-    "string-html-title": "Gears அமைப்புகள்",
-    "string-allowed": "அனுமதிக்கப்பட்டது",
-    "string-local-storage": "உள்ளக சேமிப்பிடம்",
-    "string-nosites": "தளங்கள் இல்லை.",
-    "string-permissions-description": "கீழே உள்ள அட்டவணை Gears ஐப் பயன்படுத்த ஒவ்வொரு தளங்களுக்கும் நீங்கள் அளித்த அனுமதிகளை காட்டுகிறது.",
-    "string-location-data": "இருப்பிடம்",
-    "string-version": "Gears பதிப்பு 0.4.23.0"
-  },
-  "fr": {
-    "string-denied": "Refusé",
-    "string-apply-accesskey": "A",
-    "string-remove": "Supprimer",
-    "string-gears-settings": "Paramètres de Google Gears",
-    "string-apply": "Appliquer",
-    "string-cancel-accesskey": "U",
-    "string-cancel": "Annuler",
-    "string-html-title": "Paramètres de Google Gears",
-    "string-allowed": "Autorisé",
-    "string-local-storage": "Stockage local",
-    "string-nosites": "Aucun site.",
-    "string-permissions-description": "Le tableau ci-dessous montre les autorisations que vous avez accordées à chaque site ayant tenté d'utiliser Google Gears.",
-    "string-location-data": "Emplacement",
-    "string-version": "Version 0.4.23.0 de Google Gears"
-  },
-  "bg": {
-    "string-denied": "Отказан",
-    "string-apply-accesskey": "A",
-    "string-remove": "Премахване",
-    "string-gears-settings": "Настройки на Gears",
-    "string-apply": "Прилагане",
-    "string-cancel-accesskey": "С",
-    "string-cancel": "Отказ",
-    "string-html-title": "Настройки на Gears",
-    "string-allowed": "Разрешен",
-    "string-local-storage": "Локално хранилище",
-    "string-nosites": "Няма сайтове.",
-    "string-permissions-description": "В таблицата по-долу са показани дадените от вас разрешения на всеки сайт, който се е опитал да използва Gears.",
-    "string-location-data": "Местоположение",
-    "string-version": "Версия 0.4.23.0 на Gears"
-  },
-  "uk": {
-    "string-denied": "Відхилено",
-    "string-apply-accesskey": "A",
-    "string-remove": "Видалити",
-    "string-gears-settings": "Налаштування Gears",
-    "string-apply": "Застосувати",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Скасувати",
-    "string-html-title": "Налаштування Gears",
-    "string-allowed": "Дозволено",
-    "string-local-storage": "Збереження на локальному диску",
-    "string-nosites": "Сайти відсутні.",
-    "string-permissions-description": "У нижченаведеній таблиці наведено дозволи, надані кожному сайту, який намагається використовувати Gears.",
-    "string-location-data": "Розташування",
-    "string-version": "Gears версії 0.4.23.0"
-  },
-  "hr": {
-    "string-denied": "Odbijeno",
-    "string-apply-accesskey": "A",
-    "string-remove": "Ukloni",
-    "string-gears-settings": "Postavke Gearsa",
-    "string-apply": "Primijeni",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Odustani",
-    "string-html-title": "Postavke Gearsa",
-    "string-allowed": "Dopušteno",
-    "string-local-storage": "Lokalna pohrana",
-    "string-nosites": "Nema web-lokacija.",
-    "string-permissions-description": "U dolje navedenoj tablici navedene su dozvole koje ste dali svakoj web-lokaciji koja je pokušala koristiti Gears.",
-    "string-location-data": "Lokacija",
-    "string-version": "Verzija Gearsa 0.4.23.0"
-  },
-  "bn": {
-    "string-denied": "অস্বীকৃত",
-    "string-apply-accesskey": "A",
-    "string-remove": "সরান",
-    "string-gears-settings": "Gears সেটিংস",
-    "string-apply": "প্রয়োগ",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "বাতিল",
-    "string-html-title": "Gears সেটিংস",
-    "string-allowed": "অনুমতিপ্রাপ্ত",
-    "string-local-storage": "স্থানিয় স্টোরেজ",
-    "string-nosites": "কোন সাইটগুলি ׀",
-    "string-permissions-description": "নিচের সারণিটির অনুসারে আপনি প্রত্যেকটি সাইটটিকে অনুমতি দিয়েছেন যা Gears ব্যবহার করতে চেয়েছে ׀",
-    "string-location-data": "অবস্থান",
-    "string-version": "Gears সংস্করণ 0.4.23.0"
-  },
-  "en-US": {
-    "string-denied": "Denied",
-    "string-apply-accesskey": "A",
-    "string-remove": "Remove",
-    "string-gears-settings": "Gears Settings",
-    "string-apply": "Apply",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Cancel",
-    "string-html-title": "Gears Settings",
-    "string-allowed": "Allowed",
-    "string-local-storage": "Local storage",
-    "string-nosites": "No sites.",
-    "string-permissions-description": "The table below shows the permissions you have granted to each site that has attempted to use Gears.",
-    "string-location-data": "Location",
-    "string-version": "Gears version 0.4.23.0"
-  },
-  "da": {
-    "string-denied": "Afvist",
-    "string-apply-accesskey": "I",
-    "string-remove": "Fjern",
-    "string-gears-settings": "Indstillinger til Gears",
-    "string-apply": "Anvend",
-    "string-cancel-accesskey": "A",
-    "string-cancel": "Annuller",
-    "string-html-title": "Indstillinger til Gears",
-    "string-allowed": "Tilladt",
-    "string-local-storage": "Lokalt lager",
-    "string-nosites": "Ingen websteder.",
-    "string-permissions-description": "Nedenstående tabel indeholder en oversigt over de tilladelser, du har givet til de websteder, der har forsøgt at få adgang til at bruge Gears.",
-    "string-location-data": "Placering",
-    "string-version": "Gears-version PRODUKT_VERSION"
-  },
-  "fa": {
-    "string-denied": "مردود",
-    "string-apply-accesskey": "مجاز",
-    "string-remove": "حذف",
-    "string-gears-settings": "تنظیمات Gears",
-    "string-apply": "اعمال",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "لغو",
-    "string-html-title": "تنظیمات Gears",
-    "string-allowed": "مجاز",
-    "string-local-storage": "مکان ذخیره",
-    "string-nosites": "سایتی وجود ندارد.",
-    "string-permissions-description": "جدول زیر مجوزهای شما برای دستیابی به سایتهایی که از Gears استفاده می کند را نشان می دهد.",
-    "string-location-data": "موقعیت",
-    "string-version": "Gears نسخه 0.4.23.0"
-  },
-  "hi": {
-    "string-denied": "अस्वीकृत",
-    "string-apply-accesskey": "अनुमति दें",
-    "string-remove": "निकालें",
-    "string-gears-settings": "Gears सेटिंग्स",
-    "string-apply": "लागू करें",
-    "string-cancel-accesskey": "रद्द करें",
-    "string-cancel": "रद्द करें",
-    "string-html-title": "Gears सेटिंग्स",
-    "string-allowed": "स्वीकार्य",
-    "string-local-storage": "स्थानीय संग्रहण",
-    "string-nosites": "कोई साइट नहीं.",
-    "string-permissions-description": "नीचे दी गई टेबल वे अनुमतियाँ दिखाती है जो आपने उन साइटों को दी है जिन्होंने Gears का उपयोग करने का प्रयास किया है.",
-    "string-location-data": "स्थिति",
-    "string-version": "Gears संस्करण 0.4.23.0"
-  },
-  "pt-BR": {
-    "string-denied": "Negado",
-    "string-apply-accesskey": "P",
-    "string-remove": "Remover",
-    "string-gears-settings": "Configurações do Gears",
-    "string-apply": "Aplicar",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Cancelar",
-    "string-html-title": "Configurações do Gears",
-    "string-allowed": "Permitido",
-    "string-local-storage": "Armazenamento local",
-    "string-nosites": "Nenhum site.",
-    "string-permissions-description": "A tabela abaixo mostra as permissões concedidas por você a cada site que tentou usar o Gears.",
-    "string-location-data": "Local",
-    "string-version": "Gears versão 0.4.23.0"
-  },
-  "fi": {
-    "string-denied": "Estetty",
-    "string-apply-accesskey": "A",
-    "string-remove": "Poista",
-    "string-gears-settings": "Gearsin asetukset",
-    "string-apply": "Ota käyttöön",
-    "string-cancel-accesskey": "P",
-    "string-cancel": "Peruuta",
-    "string-html-title": "Gearsin asetukset",
-    "string-allowed": "Sallittu",
-    "string-local-storage": "Paikallinen tallennus",
-    "string-nosites": "Ei sivustoja.",
-    "string-permissions-description": "Oheisesta taulukosta näet luvat, jotka olet myöntänyt jokaiselle sivustolle, joka on yrittänyt käyttää Gearsia.",
-    "string-location-data": "Sijainti",
-    "string-version": "Gearsin versio 0.4.23.0"
-  },
-  "hu": {
-    "string-denied": "Megtagadva",
-    "string-apply-accesskey": "E",
-    "string-remove": "Eltávolítás",
-    "string-gears-settings": "A Szinkron beállításai",
-    "string-apply": "OK",
-    "string-cancel-accesskey": "M",
-    "string-cancel": "Mégse",
-    "string-html-title": "A Szinkron beállításai",
-    "string-allowed": "Engedélyezve",
-    "string-local-storage": "Helyi tárolás",
-    "string-nosites": "Nincsenek webhelyek.",
-    "string-permissions-description": "Az alábbi táblázat azt mutatja, hogy a Szinkron használatát megkísérlő webhelyeknek milyen engedélyeket adott.",
-    "string-location-data": "Hely",
-    "string-version": "A Szinkron verziószáma: 0.4.23.0"
-  },
-  "ja": {
-    "string-denied": "拒否",
-    "string-apply-accesskey": "A",
-    "string-remove": "削除",
-    "string-gears-settings": "Gears の設定",
-    "string-apply": "適用",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "キャンセル",
-    "string-html-title": "Gears の設定",
-    "string-allowed": "許可",
-    "string-local-storage": "ローカル保存",
-    "string-nosites": "サイトがありません。",
-    "string-permissions-description": "下記の表は、Gears を使用しようとした各サイトに与えた権限を示しています。",
-    "string-location-data": "場所",
-    "string-version": "Gears バージョン 0.4.23.0"
-  },
-  "he": {
-    "string-denied": "נדחה",
-    "string-apply-accesskey": "א",
-    "string-remove": "הסר",
-    "string-gears-settings": "הגדרות Gears",
-    "string-apply": "החל",
-    "string-cancel-accesskey": "ביטול",
-    "string-cancel": "ביטול",
-    "string-html-title": "הגדרות Gears",
-    "string-allowed": "מותר",
-    "string-local-storage": "אחסון מקומי",
-    "string-nosites": "ללא אתרים.",
-    "string-permissions-description": "הטבלה שלהלן מראה את ההרשאות שהענקת לכל אתר שניסה להשתמש ב-Gears.",
-    "string-location-data": "מיקום",
-    "string-version": "Gears בגרסה 0.4.23.0"
-  },
-  "te": {
-    "string-denied": "అనుమతి లేని",
-    "string-apply-accesskey": "A",
-    "string-remove": "తొలగించు",
-    "string-gears-settings": "Gears సెట్టింగులు",
-    "string-apply": "వర్తించు",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "రద్దు చెయ్యి",
-    "string-html-title": "Gears సెట్టింగులు",
-    "string-allowed": "అనుమతించబడిన",
-    "string-local-storage": "స్థానిక నిల్వ",
-    "string-nosites": "సైట్లు లేవు.",
-    "string-permissions-description": "ఈ క్రింది పట్టిక, మీరు ఏ సైట్లకి Gears ఉపయోగించడానికి అనుమతి ఇచ్చారో, చూపిస్తుంది.",
-    "string-location-data": "స్థానం",
-    "string-version": "0.4.23.0 Gears వర్షన్"
-  },
-  "pt-PT": {
-    "string-denied": "Negado",
-    "string-apply-accesskey": "P",
-    "string-remove": "Remover",
-    "string-gears-settings": "Definições do Gears",
-    "string-apply": "Aplicar",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Cancelar",
-    "string-html-title": "Definições do Gears",
-    "string-allowed": "Permitido",
-    "string-local-storage": "Armazenamento local",
-    "string-nosites": "Não existem sites.",
-    "string-permissions-description": "A tabela abaixo mostra as autorizações que concedeu a cada site que tentou utilizar o Gears.",
-    "string-location-data": "Localização",
-    "string-version": "Versão 0.4.23.0 do Gears"
-  },
-  "sr": {
-    "string-denied": "Забрањен приступ",
-    "string-apply-accesskey": "M",
-    "string-remove": "Уклони",
-    "string-gears-settings": "Gears подешавања",
-    "string-apply": "Примени",
-    "string-cancel-accesskey": "О",
-    "string-cancel": "Откажи",
-    "string-html-title": "Gears подешавања",
-    "string-allowed": "Дозвољен приступ",
-    "string-local-storage": "Локални простор за складиштење",
-    "string-nosites": "Ниједан сајт.",
-    "string-permissions-description": "Табела испод приказује дозволе које сте одобрили сваком сајту који је покушао да користи Gears.",
-    "string-location-data": "Локација",
-    "string-version": "Gears верзија 0.4.23.0"
-  },
-  "ko": {
-    "string-denied": "거부됨",
-    "string-apply-accesskey": "A",
-    "string-remove": "삭제",
-    "string-gears-settings": "Gears 설정",
-    "string-apply": "적용",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "취소",
-    "string-html-title": "Gears 설정",
-    "string-allowed": "허용",
-    "string-local-storage": "로컬 저장소",
-    "string-nosites": "사이트가 없습니다.",
-    "string-permissions-description": "다음 표는 Gears를 사용하려 시도했던 각 사이트에 대해 승인받은 사용권한을 보여줍니다.",
-    "string-location-data": "위치",
-    "string-version": "Gears 버전 0.4.23.0"
-  },
-  "sv": {
-    "string-denied": "Nekad",
-    "string-apply-accesskey": "T",
-    "string-remove": "Ta bort",
-    "string-gears-settings": "Inställningar i Gears",
-    "string-apply": "Tillämpa",
-    "string-cancel-accesskey": "A",
-    "string-cancel": "Avbryt",
-    "string-html-title": "Inställningar i Gears",
-    "string-allowed": "Tillåten",
-    "string-local-storage": "Lokal lagring",
-    "string-nosites": "Inga webbplatser",
-    "string-permissions-description": "Tabellen nedan visar beviljade tillstånd för varje webbplats som har försökt att använda Gears.",
-    "string-location-data": "Plats",
-    "string-version": "Gears version 0.4.23.0"
-  },
-  "ur": {
-    "string-denied": "مسترد",
-    "string-apply-accesskey": "A",
-    "string-remove": "حذف کریں",
-    "string-gears-settings": "گیئرز کی ترتیبات",
-    "string-apply": "اطلاق کریں",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "منسوخ",
-    "string-html-title": "گیئرز کی ترتیبات",
-    "string-allowed": "اجازت ہے",
-    "string-local-storage": "ذخیرہ کرنے کی مقامی جگہ",
-    "string-nosites": "کوئی سائٹ نہیں۔",
-    "string-permissions-description": "ذیل کا جدول ان اجازتوں کو دکھاتا ہے جو آپ نے ان سائٹوں کیلئے دی ہیں جنہوں نے گیئرز کے استعمال کی کوشش کی تھی۔",
-    "string-location-data": "جائے وقوع",
-    "string-version": "گیئرز ورژن0.4.23.0"
-  },
-  "sk": {
-    "string-denied": "Odmietnuté",
-    "string-apply-accesskey": "P",
-    "string-remove": "Odstrániť",
-    "string-gears-settings": "Nastavenia rozšírenia Gears",
-    "string-apply": "Použiť",
-    "string-cancel-accesskey": "R",
-    "string-cancel": "Zrušiť",
-    "string-html-title": "Nastavenia rozšírenia Gears",
-    "string-allowed": "Povolené",
-    "string-local-storage": "Lokálny ukladací priestor",
-    "string-nosites": "Žiadne lokality.",
-    "string-permissions-description": "V nižšie uvedenej tabuľke sú uvedené povolenia, ktoré máte udelené pre všetky lokality, ktoré sa pokúsili použiť rozšírenie Gears.",
-    "string-location-data": "Umiestnenie",
-    "string-version": "Gears, verzia 0.4.23.0"
-  },
-  "zh-CN": {
-    "string-denied": "已拒绝",
-    "string-apply-accesskey": "A",
-    "string-remove": "删除",
-    "string-gears-settings": "Gears 设置",
-    "string-apply": "应用",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "取消",
-    "string-html-title": "Gears 设置",
-    "string-allowed": "允许",
-    "string-local-storage": "本地存储",
-    "string-nosites": "没有网站。",
-    "string-permissions-description": "下表显示了您向试图使用 Gears 的每个网站授予了哪些权限。",
-    "string-location-data": "位置",
-    "string-version": "Gears 版本 0.4.23.0"
-  },
-  "de": {
-    "string-denied": "Verweigert",
-    "string-apply-accesskey": "Z",
-    "string-remove": "Entfernen",
-    "string-gears-settings": "Gears-Einstellungen",
-    "string-apply": "Anwenden",
-    "string-cancel-accesskey": "A",
-    "string-cancel": "Abbrechen",
-    "string-html-title": "Gears-Einstellungen",
-    "string-allowed": "Zulässig",
-    "string-local-storage": "Lokaler Speicherplatz",
-    "string-nosites": "Keine Sites.",
-    "string-permissions-description": "Die untenstehende Tabelle zeigt die Berechtigungen an, die Sie jeder Site gewährt haben, die versucht hat, Gears zu verwenden.",
-    "string-location-data": "Speicherort",
-    "string-version": "Gears-Version PRODUKT_VERSION"
-  },
-  "pl": {
-    "string-denied": "Zabroniono",
-    "string-apply-accesskey": "Z",
-    "string-remove": "Usuń",
-    "string-gears-settings": "Ustawienia wtyczki Gears",
-    "string-apply": "Zastosuj",
-    "string-cancel-accesskey": "A",
-    "string-cancel": "Anuluj",
-    "string-html-title": "Ustawienia wtyczki Gears",
-    "string-allowed": "Zezwolono",
-    "string-local-storage": "Przechowywanie danych lokalnie",
-    "string-nosites": "Brak witryn.",
-    "string-permissions-description": "Poniższa tabela zawiera uprawnienia, jakie przyznano każdej z witryn próbujących użyć wtyczki Gears.",
-    "string-location-data": "Lokalizacja",
-    "string-version": "Gears 0.4.23.0"
-  },
-  "ms": {
-    "string-denied": "Ditolak",
-    "string-apply-accesskey": "N",
-    "string-remove": "Keluarkan",
-    "string-gears-settings": "Tetapan Gear",
-    "string-apply": "Gunakan",
-    "string-cancel-accesskey": "B",
-    "string-cancel": "Batal",
-    "string-html-title": "Tetapan Gear",
-    "string-allowed": "Dibenarkan",
-    "string-local-storage": "Penyimpanan setempat",
-    "string-nosites": "Tiada tapak.",
-    "string-permissions-description": "Jadual di bawah menunjukkan kebenaran yang telah anda berikan kepada setiap tapak yang telah cuba menggunakan Gear.",
-    "string-location-data": "Lokasi",
-    "string-version": "Versi Gear 0.4.23.0"
-  },
-  "sl": {
-    "string-denied": "Zavrnjeno",
-    "string-apply-accesskey": "A",
-    "string-remove": "Odstrani",
-    "string-gears-settings": "Nastavitve programa Gears",
-    "string-apply": "Uporabi",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Prekliči",
-    "string-html-title": "Nastavitve programa Gears",
-    "string-allowed": "Dovoljeno",
-    "string-local-storage": "Lokalna shramba",
-    "string-nosites": "Ni spletnih mest.",
-    "string-permissions-description": "V spodnji tabeli so prikazana dovoljenja, ki ste jih podelili vsem spletnim mestom, ki so poskusila uporabljati program Gears.",
-    "string-location-data": "Lokacija",
-    "string-version": "Različica programa Gears 0.4.23.0"
-  },
-  "mr": {
-    "string-denied": "अननुमत",
-    "string-apply-accesskey": "A",
-    "string-remove": "काढा",
-    "string-gears-settings": "Gears सेटिंग्ज",
-    "string-apply": "लागू करा",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "रद्द करा",
-    "string-html-title": "Gears सेटिंग्ज",
-    "string-allowed": "अनुमत",
-    "string-local-storage": "स्थानिक संचय",
-    "string-nosites": "साइट नाहीत.",
-    "string-permissions-description": "निम्न सारणी Gears वापरण्याचा प्रयत्न केलेल्या प्रत्येक साइटकरिता आपल्याकडे किती परवानग्या आहेत हे दर्शविते.",
-    "string-location-data": "स्थान",
-    "string-version": "Gears आवृत्ती 0.4.23.0"
-  },
-  "or": {
-    "string-denied": "ମନାକରନ୍ତୁ",
-    "string-apply-accesskey": "A",
-    "string-remove": "ଅପସାରଣ",
-    "string-gears-settings": "Gears ସେଟିଂସମୂହ",
-    "string-apply": "ଲାଗୁ କରନ୍ତୁ",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "ବାତିଲ୍",
-    "string-html-title": "Gears ସେଟିଂସମୂହ",
-    "string-allowed": "ଅନୁମତି ପ୍ରାପ୍ତ କରନ୍ତୁ",
-    "string-local-storage": "ସ୍ଥାନୀୟ ସଂଞ୍ଚୟ",
-    "string-nosites": "କୌଣସି ସାଇଟମାନ ନାହିଁ |",
-    "string-permissions-description": "ନିମ୍ନ ସାରଣୀ ଆପଣ ପ୍ରତ୍ୟେକ ସାଇଟକୁ ପ୍ରଦାନ କରିଥିବା ସ୍ବୀକୃତି ଦର୍ଶାଉଛି,ଯାହା Gears ବ୍ୟବହାର କରିବାକୁ ପଦକ୍ଷେପ ନେଇଛି |",
-    "string-location-data": "ସ୍ଥାନ",
-    "string-version": "Gears ସଂସ୍କରଣ 0.4.23.0"
-  }
-};
-
-// Insert all localized strings for the specified locale into the div or span
-// matching the id.
-function loadI18nStrings(locale) {
-  var rtl_languages = ['he', 'ar', 'fa', 'ur'];
-
-  if (!locale) {
-    locale = 'en-US';
-  } else {
-    if (!localized_strings[locale]) {
-      // For xx-YY locales, determine what the base locale is.
-      var base_locale = locale.split('-')[0];
-
-      if (localized_strings[base_locale]) {
-        locale = base_locale;
-      } else {
-        locale = 'en-US';
-      }
-    }
-  }
-
-  var strings = localized_strings[locale];
-
-  // If the specified locale is an right to left language, change the direction
-  // of the page.
-  for (index in rtl_languages) {
-    if (locale == rtl_languages[index]) {
-      document.body.dir = "rtl";
-      break;
-    }
-  }
-
-  // Copy each string to the proper UI element, if it exists.
-  for (name in strings) {
-    if (name == 'string-html-title') {
-      if (!browser.ie_mobile) {
-        // IE Mobile dialogs don't have a title bar.
-        // Furthermore, document.title is undefined in IE Mobile on WinMo 5.
-        // It's also impossible to add properties to the window object.
-        // (see http://code.google.com/apis/gears/mobile.html)
-        document.title = strings[name];
-      }
-    } else {
-      var element = dom.getElementById(name);
-      if (element) {
-        element.innerHTML = strings[name];
-      }
-    }
-  }
-}
-
-
-</script>
-<script>
-  var debug = false;
-  var permissions;
-  var originalPermissions;
-
-  // Must match values in permission_db.h
-  var PERMISSION_NOT_SET = 0;
-  var PERMISSION_ALLOWED = 1;
-  var PERMISSION_DENIED  = 2;
-
-  if (debug && browser.ie_mobile) {
-    // Handy for debugging layout.
-    // Remember to remove the pie_dialog object tag above when debugging on
-    // WinMo 5, otherwise the assignement below will fail with "the object does
-    // not support this property or method".
-    pie_dialog = new Object();
-    pie_dialog.IsSmartPhone = function() { return false; };
-    pie_dialog.SetCancelButton = function() {};
-    pie_dialog.SetButton = function() {};
-    pie_dialog.SetButtonEnabled = function() {};
-    pie_dialog.SetScriptContext = function() {};
-    pie_dialog.ResizeDialog = function() {};
-  }
-
-  initDialog();
-
-  initSettings();
-
-  setButtonLabel("string-cancel", "cancel-button", "string-cancel-accesskey");
-  setButtonLabel("string-apply", "confirm-button", "string-apply-accesskey");
-
-  if (!browser.ie_mobile) {
-    CustomButton.initializeAll();
-    if (!browser.android) {
-      initCustomLayout(layoutSettings);
-    }
-  } else {
-    var applyText = dom.getElementById("string-apply");
-    if (applyText) {
-      window.pie_dialog.SetButton(applyText.innerText, 
-        "saveAndClose(calculateDiff());");
-    }
-    var cancelText = dom.getElementById("string-cancel");
-    if (cancelText) {
-      window.pie_dialog.SetCancelButton(cancelText.innerText);
-    }
-    window.pie_dialog.SetButtonEnabled(true);
-  }
-
-  // Start out with only cancel enabled, just for clarity.
-  disableButton(dom.getElementById("confirm-button"));
-
-  function initSettings() {
-    var args;
-
-    if (debug) {
-      // Handy for debugging layout:
-      var args = {
-        locale: "en-US",
-        permissions: [
-          {
-            name: "http://www.google.com",
-            localStorage: { permissionState: 1 },
-            locationData: { permissionState: 0 }
-          },
-          { 
-            name: "http://www.aaronboodman.com",
-            localStorage: { permissionState: 1 },
-            locationData: { permissionState: 1 }
-          },
-          { 
-            name: "http://www.evil.org",
-            localStorage: { permissionState: 2 },
-            locationData: { permissionState: 2 }
-          }
-        ]
-      };
-    } else {
-      args = getArguments();
-    }
-    loadI18nStrings(args.locale);
-    permissions = args.permissions;
-    originalPermissions = cloneObject(permissions);
-
-    updatePermissionsList();
-  }
-
-  function updatePermissionsList() {
-    var table = dom.getElementById('div-permissions');
-
-    var content = "";
-    var isFirstOrigin = true;
-    for (var index = 0; index < permissions.length; index++) {
-      content += renderOrigin(index, permissions[index], isFirstOrigin);
-      isFirstOrigin = false;
-    }
-    if (content == "") {
-      content = "<table style=\"border-style: solid;\"><tbody>";
-      content += "<tr><td class=\"left\"><em>";
-      var noSitesText = dom.getElementById("string-nosites");
-      if (noSitesText) {
-        if (isDefined(typeof noSitesText.innerText)) {
-          content += noSitesText.innerText;
-        } else {
-          content += noSitesText.textContent;
-        }
-      }
-      content += "</em></td><td></td></tr></tbody></table>";
-    } 
-    table.innerHTML = content;
-  }
-
-  function renderOrigin(index, originData, isFirstOrigin) {
-    var localStorageContent =
-        renderLocalStorage(index, originData.localStorage);
-    var locationDataContent =
-        renderLocationData(index, originData.locationData);
-
-    // Defend against an origin having no data for any permission class.
-    if (localStorageContent == "" && locationDataContent == "") {
-      return "";
-    }
-    var content = "<table";
-    if (isFirstOrigin) {
-      content += " style=\"border-top-style: solid;\"";
-    }
-    content += "><tbody>";
-    content += "<tr><td class=\"origin-name\">";
-    content += wrapDomain(originData.name);
-    content += "</td><td><a href='#' onclick='handleRemoveClick(";
-    content += index;
-    content += ");'>";
-    content += getString("string-remove");
-    content += "</a></td>";
-    content += "</td></tr></tbody></table>";
-
-    content += "<table class=\"permissions\"><tbody>";
-    if (localStorageContent != "") {
-      content += "<tr>";
-      content += localStorageContent;
-      content += "</tr>";
-    }
-    if (locationDataContent != "") {
-      content += "<tr>";
-      content += locationDataContent;
-      content += "</tr>";
-    }
-    content += "</td></tr></tbody></table>";
-    return content;
-  }
-
-  function renderLocalStorage(index, data) {
-    if (data == null || data.permissionState == PERMISSION_NOT_SET) {
-      return "";
-    }
-    var content = "";
-    content += "<td class=\"left\">";
-    content += getString("string-local-storage");
-    content += "</td><td class=\"right\">";
-    content += renderRadioButtons(index, "localStorage",
-                                  data.permissionState);
-    content += "</td>";
-    // Permission class-specific content goes here;
-    return content;
-  }
-
-  function renderLocationData(index, data) {
-    if (data == null || data.permissionState == PERMISSION_NOT_SET) {
-      return "";
-    }
-    var content = "";
-    content += "<td class=\"left\">";
-    content += getString("string-location-data");
-    content += "</td><td class=\"right\">";
-    content += renderRadioButtons(index, "locationData",
-                                  data.permissionState);
-    content += "</td>";
-    // Permission class-specific content goes here;
-    return content;
-  }
-
-  function getString(stringId) {
-    var textElement = dom.getElementById(stringId);
-    if (!isDefined(typeof textElement)) {
-      return "";
-    }
-    return dom.getTextContent(textElement);
-  }
-
-  function renderRadioButtons(index, permissionClass, permissionState) {
-    var radioButtonName = getRadioButtonName(index, permissionClass);
-    var content = "<div class=\"radio-buttons\">";
-    content += "<input type=\"radio\" name=\"" + radioButtonName + "\"";
-    content += " id=\"" + radioButtonName + "-allow\"";
-
-    if (permissionState == PERMISSION_ALLOWED) {
-      content += "checked=\"true\"";
-    }
-    content += " onclick='handleRadioClick(" + index + ", \"" +
-               permissionClass + "\", " + PERMISSION_ALLOWED + ");'>";
-    content += "</input>";
-    content += "<label for=\"" + radioButtonName + "-allow\">";
-    content += getString("string-allowed");
-    content += "</label>";
-
-    content += "<input type=\"radio\" name=\"" + radioButtonName + "\"";
-    content += " id=\"" + radioButtonName + "-deny\"";
-
-    if (permissionState == PERMISSION_DENIED) {
-      content += "checked=\"true\"";
-    }
-    content += " onclick='handleRadioClick(" + index + ", \"" +
-               permissionClass + "\", " + PERMISSION_DENIED + ");'>";
-    content += "</input>";
-    content += "<label for=\"" + radioButtonName + "-deny\">";
-    content += getString("string-denied");
-    content += "</label>";
-    content += "</div>";
-    return content;
-  }
-
-  function getRadioButtonName(index, permissionClass) {
-    return index + "-" + permissionClass + "-radio";
-  }
-
-  function handleRadioClick(index, permissionClass, permissionState) {
-    updatePermission(index, permissionClass, permissionState);
-
-    // Return false to prevent the default link action (scrolling up to top of
-    // page in this case).
-    return false;
-  }
-
-  function handleRemoveClick(index) {
-    updatePermission(index, "localStorage", PERMISSION_NOT_SET);
-    updatePermission(index, "locationData", PERMISSION_NOT_SET);
-    updatePermissionsList();
-
-    // Return false to prevent the default link action (scrolling up to top of
-    // page in this case).
-    return false;
-  }
-
-  function updatePermission(index, permissionClass, permissionState) {
-    if (permissions[index][permissionClass]) {
-      if (permissions[index][permissionClass].permissionState !=
-          permissionState) {
-        permissions[index][permissionClass].permissionState =
-          permissionState;
-        enableButton(dom.getElementById("confirm-button"));
-      }
-    }
-  }
-
-  function layoutSettings(contentHeight) {
-    var content = dom.getElementById("content");
-
-    content.style.height = Math.max(contentHeight, 0) + "px";
-
-    // If a scrollbar is going to be visible, then add some padding between it
-    // and the inner right edge of the content. We don't want to have this in
-    // all the time or else there will be double-padding when the scrollbar
-    // isn't visible.
-    if (content.scrollHeight > contentHeight) {
-      content.style.paddingRight = "1em";
-    } else {
-      content.style.paddingRight = "";
-    }
-  }
-
-  function calculateDiff() {
-    var permissionClasses = ["localStorage", "locationData"];
-    var result = { "modifiedOrigins": [] };
-    for (var index = 0; index < originalPermissions.length; index++) {
-      var originalOriginData = originalPermissions[index];
-      var originData = permissions[index];
-      // Defend against a mis-match between the origins in each list.
-      if (isDefined(typeof originData) && 
-          originData.name == originalOriginData.name) {
-        var modifiedOriginData = new Object();
-        var modified = false;
-        for (var i = 0; i < permissionClasses.length; i++) {
-          var permissionClass = permissionClasses[i];
-          // The data may not include entries for all permission classes.
-          if (isDefined(typeof originalOriginData[permissionClass])) {
-            var originalState =
-                originalOriginData[permissionClass]["permissionState"];
-            var state = originData[permissionClass]["permissionState"];
-            if (originalState != state) {
-              modified = true;
-              modifiedOriginData[permissionClass] = new Object();
-              modifiedOriginData[permissionClass]["permissionState"] = state;
-            }
-          }
-        }
-        if (modified) {
-          modifiedOriginData.name = originData.name;
-          result.modifiedOrigins.push(modifiedOriginData);
-        }
-      }
-    }
-    return result;
-  }
-
-</script>
-</html>
diff --git a/assets/plugins/gears-0.4.23.0/shortcuts_dialog.html b/assets/plugins/gears-0.4.23.0/shortcuts_dialog.html
deleted file mode 100644
index fc68120..0000000
--- a/assets/plugins/gears-0.4.23.0/shortcuts_dialog.html
+++ /dev/null
@@ -1,2907 +0,0 @@
-﻿<!DOCTYPE html>
-
-<!--
-Copyright 2007, The Android Open Source Project
-
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, 
-    this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
- 3. Neither the name of Google Inc. nor the names of its contributors may be
-    used to endorse or promote products derived from this software without
-    specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--->
-
-<html>
-<head>
-  <style type="text/css">
-
-
-/*
-Copyright 2007, The Android Open Source Project
-
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, 
-    this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
- 3. Neither the name of Google Inc. nor the names of its contributors may be
-    used to endorse or promote products derived from this software without
-    specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-body, html {
-  background-color:white;
-  padding:0;
-  margin:0;
-  height:100%;
-  overflow:hidden;
-  cursor:default;
-
-  /* 
-    Makes the text unselectable in mozilla. See html_diaog.js for IE
-    implementation.
-  */
-  -moz-user-select:none;
-}
-
-body, td, input, select, button {
-  font-family:arial,sans-serif;
-  font-size:13px;
-}
-
-p {
-  margin:0;
-  margin-bottom:1em;
-}
-
-a {
-  color:blue;
-  text-decoration:underline;
-}
-
-button {
-  /*
-  It would be better to express margins in ems, but it causes layout
-  artifacts (presumably because of rounding errors) when combined with
-  the -moz-border-radius property used in button.css on Firefox 2.
-
-  Also: bizarely, if I try to use the more natural margin-left:10px, I get
-  a bug where the buttons bounce on IE when you hover over them.
-  */
-  position:relative;
-  margin-right:7px;
-  left:7px;
-}
-
-#head {
-  padding:1em;
-}
-
-#foot {
-
-  /*
-  On Android we do not use position:absolute due to some
-  rendering limitations (absolute positioning works, but
-  the automatic resizing of dialog is confused by the
-  variable content and the display is wrong, while if we
-  remove the absolute positioning, #foot is back in the
-  flow and the dialog displays correctly)
-  */
-
-  background:white;
-  bottom:0;
-  width:100%;
-}
-
-#button-row {
-  margin:1em;
-}
-
-.accesskey {
-  text-decoration: underline;
-
-  /* IE CSS extension */
-  accelerator: true;
-}
-
-    #icon {
-      margin-right:0.5em;
-    }
-
-    #content {
-      margin:0 1em;
-      padding-bottom:1em;
-    }
-
-    #scroll td {
-      padding-top:0;
-    }
-
-    #scroll img {
-      margin-right:1em;
-    }
-
-    #highlightbox {
-      /* for pseudo-rounded corners, also see highlightbox-inner */
-      margin:0 1px;
-      border:solid #e8e8e8;
-      border-width:1px 0;
-      background:#f8f8f8;
-    }
-
-    #highlightbox-inner {
-      margin:0 -1px;
-      border:solid #e8e8e8;
-      border-width:0 1px;
-      padding:1em;
-    }
-    
-    #shortcut-name {
-      margin-bottom:2px;
-      font-weight: bold;
-    }
-
-    #shortcut-description {
-      /* We turn this on only when there is a description */
-      display:none;
-    }
-
-    #locations {
-      margin-top:1.2em;
-      display:none;
-    }
-    
-    #locations table {
-      margin-top:-2px;
-      margin-left:0.45em;
-    }
-
-  </style>
-</head>
-<body>
-  <!-- This div contains strings that are conditionally used in the UI -->
-  <div id="strings" style="display:none;">
-    <!-- window titles -->
-    <div id="string-title-default"></div>
-    <div id="string-title-simple"></div>
-    
-    <!-- headers -->
-    <div id="string-header-desktop"></div>
-    <div id="string-header-wince"></div>
-
-    <!-- buttons -->
-    <div id="string-ok"></div>
-    <div id="string-ok-accesskey"></div>
-    <div id="string-cancel"></div>
-    <div id="string-cancel-accesskey"></div>
-    <div id="string-yes"></div>
-    <div id="string-yes-accesskey"></div>
-    <div id="string-no"></div>
-    <div id="string-no-accesskey"></div>
-    <div id="string-never-allow"></div>
-    <div id="string-never-allow-wince"></div>
-  </div>
-
-  <div id="head">
-    <table width="100%" cellpadding="0" cellspacing="0" border="0">
-      <tr>
-        <td valign="top">
-
-          <img id="icon" src="data:image/png;base64,
-iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAJPElEQVR4Xq3V
-WWyc1d0G8Oecd515Z/csHsfxntiOE8eOMY6dxFkokJCQlACBhEpsvWgLRkAL
-IhRxEYrSpp/6XYCgUokKBQEl0ABR0wrShBAI2R1nM3HseB+Px2PPPu/Mu3aE
-uKkoUhPzuzhXRzp/PUfPOcQ0TcxGrOcJ9Jz6F4YmTNq2yF4r5436aFyrlyz8
-nyQxH6m7aTdETxO+D8UssSxF/0gGc4NCpc3u2VtctvBNb5HjN71XUw8bxAHd
-pPiGkQeg/PADDI5lMZ3QYRUZL2MpqRVIyhpwGwj62OdTObo1l405svEBd9/h
-J7ae3Nd1p6rIP+wA5/tzuKExgKDfsZm32KHIU6AUaGnwiD5b5u3R0787OXVu
-x0kbF3t7ZuyzPZ/ve2HjfySI65SdPOQf7z/UNM87pPg8zi32wI0/J8oINE1F
-NgewLOBxW8GwxnyTUWCqcSycHyT7Du99V9XY1rX37Lh43QPoagrhS689zRnp
-X/p9btjcZUB+CL29vThwPD6USOnHrRbGqCixNLc3ueuK3BpMQ0U0oaJvONvd
-uvaGoVklkJm+6DbU2Aa3rxxy7CL0VBxj4Qz++s/I4ebF1VvKAyRiaEmkMobt
-bO/0Gy0NRZu9bh5XBifVxqXbnm/p2JiZVQtmJs5WhcZHq+XkEAhlYJrAF2cS
-qUX1pV13bVgSqa+yo6bMgSInl57XdOdDM0l9kFIKniWcwDP6rFtQUn/f6QTt
-uPd0z2AMJoGqGYjMqD1Vc8j5zEw/qJGG3UrBsQwMNpjgqHZW1w3MKbYiFTm1
-StOU2Q3Ai3bcdt9LH4iuusczsgxKCSwiYxLCQMmnwbAUDEMg5/PgRDec3qqc
-yXpQ4rejrjj0zME9j+/IyUnrrGrIsDwal3f1GAbReI7FgiqpeTqWWjQxJePK
-cAY9lxO4MmrCJc6UOt3BDoAFIQbmV3mF7qN7num/3F2CAnb610+CwITAsjAB
-GIYBAkBgKN4ZDiFhAttqq4TpqamNcU0PEULHeUJDnEAUs0P2e0saYeaGsLjO
-bjvfl3pDUWnX0IT8JYMcOprLmsTc0T/yzopyNRsFy7CIzOQQy3kO2ezeQRSQ
-qVvbEc2r2D00DsUwANNEhdWCUknEuyMT6GpvRTCT3GparW/LeQXTyWT0QjT9
-SXEt9+jSX1Xvd7iql+ZiF8CyDBQNmJzO64ZJj9ntLt3lCTaLNp89E+3BmXMD
-hcPVzNh4zLQGOh976oW9f0YBSy0WvD86CcNThLtrKkloZIhSm0PvHp/A1rpq
-lCiy17TbdwY710C72IOiaNR7MqFsuJjVXyoOp6Qq/TIEjiKb08FxHMqDFkY3
-yTLK2UGQQiJ0Bf/4fFQfjJa8sG7zI++1+eYYHo9nCN8iXdWlyIHgyboqsJry
-cljROmKqtreIY/9uJVgkSLaHi5evXKGHQ1Cv9oNQin2FZC5l0i0ttzrifAU5
-FovpvpEJ+YjLzup1VVL7onk2QRQYUGLi4pUYDp7zPvvcrv07BUH47mcUZXg8
-2rYEpqY8JFTUPFKzoKG5UhJ3uIo8J731Da/PWd65AqExGCODoIQAuoYGlw1B
-VthOjpEJPYpVGVNbdvOaus6GGtvqyLSyqvdqdoQS8s21TEZzkGyuE98e/h20
-JeAFL8ttiondjrllQDyGIlGA3+GgFkPH1Imv0NdzFgPxJCJZGQalqHLYsCLg
-vosH+ay4j+9sH3PO0z6e+onLZBzzq8RjMLXtn345irc+upr97Pj48bLy8iF8
-D/Liwhp0+jyBSUU52Oh2LbCYOhiOg6pqOBdL4Eg0poRy6gkLy0SKRaGy2W1v
-bnTZITEMcgB0wsM0ga8GRkFX+G9pvW/xp4qsMOevpFc6JYTL6n98ua55vc5y
-Iv4bsmvxfDS6nYjnlc2VkuWdCqedVxUVR6fj2DM8fpwThF8sdDnPcLoKllJr
-QtXur7NL/9fmcVpFlgWVJBT24FTv1zjjLt39xAcf/5S3cPhfUZFSHJ6YQoVV
-PMKKYpSxSgjJORyYmBoRrNI9j61ZeWZzZSmaXHYEBD7b5nG8GlO0rlAub6LA
-SKehxGOAaMHZLw5u7jt11IdrQP82FkFtSTEsBEGbw+knDidGUhlEFfW9wgM0
-XCynYWMoGl0OgFKEZQUNDuktWTcuEYsFBRhMpvHOhcvZ2k13Ple1uDmNa0C3
-LF6A1ZXl0FRlk3tuOavJWaQ0DQ6OO52MxzE2GQGTzYJwPFoDPlxKpgGYikTJ
-JPUUIUcp9g+OZEtuWXf/s7tff8XqcMi4Bux6K+tNDg8+6F+waAcnSchenIRL
-FGDjGL+mqIjBBCQRNosFJ0NhhFUNIsdxAqU+wenGcH8/ZkTp/PYXd77P8zyu
-FQ0lM09xbvcuR209lKEBUBOolKwICMKDedOkeZb75qV89UIf3uwbwl1zi2GD
-2e4sK68DAQopoaS6Jlzk8+N60LCifjAZS0wo3SdBkgmYlMAncmj3OpvSmvYa
-SyCUFwdg6jp+VlOGeRxtopL0srN+AZcfHYbf5USq50xw7PLXDK4DObS6FZNy
-fr+TZdZRSuEROBT6DoYQjGRljGVz3VaG+cjDMqMCpcvsc+Zs8Ta12JT+y1CH
-BwGGweHxMOTWZY9s2/WHV0S7A9eCnLh5KXoTmTVnYsmtGU2HT+SDLW77+haP
-CzaHA9l0BjlNhVDkg628HILNDvlqP5SxYXAcjwIcn0ng9RPdZ188cLitbvkK
-BdeAPTA5g1a34yDgOFiIHIQQDKayXQ6W/e1ClrWypgE7z4ElJrIDV3ApPImR
-VBYCz6FC0iHrBj4eGE413n3v02WNixVcI7bRaYMBoMJmRR4motk8av2+l6Zj
-sdWKad5htYjQczkkpiI4MDmNL6LxbsUw/1Ik8nmJYe6ITk8vkWoX7ChU8FPu
-OlrA/P+SevhFHj6bhKDVgq/jCUQNwENJkUmwXgCg6QaOzSTx4Wj4PZ/TuX5b
-bfWXQYJTvK69Wbduw/sP7Pz9AZc/YOA6sGo2AxMA1Q0IFCghJj4cGERpqf/I
-J+HIJRNmOSVUOh9LxtxWy/YHW5cotkgImqZC1/K4/dHHrtrm1+J6UXHZKlg7
-b4Jl+SqwHStRe/NatN++EcFVPzrfcOvaVk/nmhaho7Dctn7TA1u3Xg3Mmwd/
-RyduXL8BbbdvAmuxYjb+DcasAaYvg7ldAAAAAElFTkSuQmCC
-           ">
-
-          <!-- Some browsers automatically focus the first focusable item. We
-          don't want anything focused, so we add this fake item. -->
-          <a href="#" id="focus-thief"></a>
-        </td>
-        <td id="header" width="100%" valign="middle"></td>
-      </tr>
-    </table>
-  </div>
-
-  <div id="content">
-    <div id="highlightbox">
-      <div id="highlightbox-inner">
-        <div id="scroll">
-          <table cellpadding="0" cellspacing="0" border="0">
-            <tr>
-              <td valign="top"><img id="shortcut-icon" width="32" height="32" src="blank.gif"></td>
-              <td align="left" width="100%" valign="middle">
-                <div id="shortcut-name"></div
-                ><div id="shortcut-description"></div>
-              </td>
-            </tr>
-          </table>
-        </div>
-      </div>
-    </div>
-
-    <div id="locations">
-      <p><span id="string-location-query"></span></p>
-      <div id="locations-windows">
-        <table cellpadding="0" cellspacing="2" border="0">
-          <tr>
-            <!-- NOTE: Confusingly, onclick also gets fired when the checkbox changes via keyboard press. -->
-            <!-- NOTE: The values in the checkboxes correspond to the SHORTCUT_LOCATION_* bitmasks defined in desktop.cc. -->
-            <td valign="middle"><input type="checkbox" id="location-desktop" value="1" onclick="resetConfirmDisabledState()"></td>
-            <td valign="middle"><label for="location-desktop"><span id="string-desktop"></span></label></td>
-          </tr>
-          <tr>
-            <td valign="middle"><input type="checkbox" id="location-startmenu" value="4" onclick="resetConfirmDisabledState()"></td>
-            <td valign="middle"><label for="location-startmenu"><span id="string-startmenu"></span></label></td>
-          </tr>
-          <tr>
-            <td valign="middle"><input type="checkbox" id="location-quicklaunch" value="2" onclick="resetConfirmDisabledState()"></td>
-            <td valign="middle"><label for="location-quicklaunch"><span id="string-quicklaunch"></span></label></td>
-          </tr>
-        </table>
-      </div>
-      <!-- TODO(aa): Support more locations on other platforms, such as dock
-      and applications on OSX? -->
-    </div>
-  </div>
-
-  <div id="foot">
-
-
-    <div id="button-row">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-
-          <td width="100%" valign="middle">
-            <a href="#" onclick="denyShortcutPermanently(); return false;" id="deny-permanently-link"></a>
-          </td>
-          <td nowrap="true" align="right" valign="middle">
-            <button id="allow-button" class="custom"
-              onclick="allowShortcutsTemporarily(); return false;"></button
-            ><button id="deny-button" class="custom"
-              onclick="denyShortcutsTemporarily(); return false;"></button>
-          </td>
-
-        </tr>
-      </table>
-    </div>
-  </div>
-
-</body>
-<!--
-We include all files through m4 as the HTML dialog implementation on
-PocketIE does not support callbacks for loading external JavaScript files.
-TODO: find a better way to include scripts for PIE
--->
-<script>
-/*
-Copyright (c) 2005 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-//Array.prototype.______array = '______array';
-
-var JSON = {
-    org: 'http://www.JSON.org',
-    copyright: '(c)2005 JSON.org',
-    license: 'http://www.crockford.com/JSON/license.html',
-
-    stringify: function (arg) {
-        var c, i, l, s = '', v;
-
-        switch (typeof arg) {
-        case 'object':
-            if (arg) {
-                if (arg.constructor == Array.prototype.constructor) {
-                    for (i = 0; i < arg.length; ++i) {
-                        v = this.stringify(arg[i]);
-                        if (s) {
-                            s += ',';
-                        }
-                        s += v;
-                    }
-                    return '[' + s + ']';
-                } else if (typeof arg.toString != 'undefined') {
-                    for (i in arg) {
-                        v = arg[i];
-                        if (typeof v != 'undefined' && typeof v != 'function') {
-                            v = this.stringify(v);
-                            if (s) {
-                                s += ',';
-                            }
-                            s += this.stringify(i) + ':' + v;
-                        }
-                    }
-                    return '{' + s + '}';
-                }
-            }
-            return 'null';
-        case 'number':
-            return isFinite(arg) ? String(arg) : 'null';
-        case 'string':
-            l = arg.length;
-            s = '"';
-            for (i = 0; i < l; i += 1) {
-                c = arg.charAt(i);
-                if (c >= ' ') {
-                    if (c == '\\' || c == '"') {
-                        s += '\\';
-                    }
-                    s += c;
-                } else {
-                    switch (c) {
-                        case '\b':
-                            s += '\\b';
-                            break;
-                        case '\f':
-                            s += '\\f';
-                            break;
-                        case '\n':
-                            s += '\\n';
-                            break;
-                        case '\r':
-                            s += '\\r';
-                            break;
-                        case '\t':
-                            s += '\\t';
-                            break;
-                        default:
-                            c = c.charCodeAt();
-                            s += '\\u00' + Math.floor(c / 16).toString(16) +
-                                (c % 16).toString(16);
-                    }
-                }
-            }
-            return s + '"';
-        case 'boolean':
-            return String(arg);
-        default:
-            return 'null';
-        }
-    },
-    parse: function (text) {
-        var at = 0;
-        var ch = ' ';
-
-        function error(m) {
-            throw {
-                name: 'JSONError',
-                message: m,
-                at: at - 1,
-                text: text
-            };
-        }
-
-        function next() {
-            ch = text.charAt(at);
-            at += 1;
-            return ch;
-        }
-
-        function white() {
-            while (ch) {
-                if (ch <= ' ') {
-                    next();
-                } else if (ch == '/') {
-                    switch (next()) {
-                        case '/':
-                            while (next() && ch != '\n' && ch != '\r') {}
-                            break;
-                        case '*':
-                            next();
-                            for (;;) {
-                                if (ch) {
-                                    if (ch == '*') {
-                                        if (next() == '/') {
-                                            next();
-                                            break;
-                                        }
-                                    } else {
-                                        next();
-                                    }
-                                } else {
-                                    error("Unterminated comment");
-                                }
-                            }
-                            break;
-                        default:
-                            error("Syntax error");
-                    }
-                } else {
-                    break;
-                }
-            }
-        }
-
-        function string() {
-            var i, s = '', t, u;
-
-            if (ch == '"') {
-outer:          while (next()) {
-                    if (ch == '"') {
-                        next();
-                        return s;
-                    } else if (ch == '\\') {
-                        switch (next()) {
-                        case 'b':
-                            s += '\b';
-                            break;
-                        case 'f':
-                            s += '\f';
-                            break;
-                        case 'n':
-                            s += '\n';
-                            break;
-                        case 'r':
-                            s += '\r';
-                            break;
-                        case 't':
-                            s += '\t';
-                            break;
-                        case 'u':
-                            u = 0;
-                            for (i = 0; i < 4; i += 1) {
-                                t = parseInt(next(), 16);
-                                if (!isFinite(t)) {
-                                    break outer;
-                                }
-                                u = u * 16 + t;
-                            }
-                            s += String.fromCharCode(u);
-                            break;
-                        default:
-                            s += ch;
-                        }
-                    } else {
-                        s += ch;
-                    }
-                }
-            }
-            error("Bad string");
-        }
-
-        function array() {
-            var a = [];
-
-            if (ch == '[') {
-                next();
-                white();
-                if (ch == ']') {
-                    next();
-                    return a;
-                }
-                while (ch) {
-                    a.push(value());
-                    white();
-                    if (ch == ']') {
-                        next();
-                        return a;
-                    } else if (ch != ',') {
-                        break;
-                    }
-                    next();
-                    white();
-                }
-            }
-            error("Bad array");
-        }
-
-        function object() {
-            var k, o = {};
-
-            if (ch == '{') {
-                next();
-                white();
-                if (ch == '}') {
-                    next();
-                    return o;
-                }
-                while (ch) {
-                    k = string();
-                    white();
-                    if (ch != ':') {
-                        break;
-                    }
-                    next();
-                    o[k] = value();
-                    white();
-                    if (ch == '}') {
-                        next();
-                        return o;
-                    } else if (ch != ',') {
-                        break;
-                    }
-                    next();
-                    white();
-                }
-            }
-            error("Bad object");
-        }
-
-        function number() {
-            var n = '', v;
-            if (ch == '-') {
-                n = '-';
-                next();
-            }
-            while (ch >= '0' && ch <= '9') {
-                n += ch;
-                next();
-            }
-            if (ch == '.') {
-                n += '.';
-                while (next() && ch >= '0' && ch <= '9') {
-                    n += ch;
-                }
-            }
-            if (ch == 'e' || ch == 'E') {
-                n += 'e';
-                next();
-                if (ch == '-' || ch == '+') {
-                    n += ch;
-                    next();
-                }
-                while (ch >= '0' && ch <= '9') {
-                    n += ch;
-                    next();
-                }
-            }
-            v = +n;
-            if (!isFinite(v)) {
-                ////error("Bad number");
-            } else {
-                return v;
-            }
-        }
-
-        function word() {
-            switch (ch) {
-                case 't':
-                    if (next() == 'r' && next() == 'u' && next() == 'e') {
-                        next();
-                        return true;
-                    }
-                    break;
-                case 'f':
-                    if (next() == 'a' && next() == 'l' && next() == 's' &&
-                            next() == 'e') {
-                        next();
-                        return false;
-                    }
-                    break;
-                case 'n':
-                    if (next() == 'u' && next() == 'l' && next() == 'l') {
-                        next();
-                        return null;
-                    }
-                    break;
-            }
-            error("Syntax error");
-        }
-
-        function value() {
-            white();
-            switch (ch) {
-                case '{':
-                    return object();
-                case '[':
-                    return array();
-                case '"':
-                    return string();
-                case '-':
-                    return number();
-                default:
-                    return ch >= '0' && ch <= '9' ? number() : word();
-            }
-        }
-
-        return value();
-    }
-};
-
-// Copyright 2008, The Android Open Source Project
-//
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are met:
-//
-//  1. Redistributions of source code must retain the above copyright notice, 
-//     this list of conditions and the following disclaimer.
-//  2. Redistributions in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//  3. Neither the name of Google Inc. nor the names of its contributors may be
-//     used to endorse or promote products derived from this software without
-//     specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-//=============================================================================
-// Various basic JavaScript utilities.
-//=============================================================================
-
-/**
- * Check that the type is not undefined (we do it here as on
- * some devices typeof returns unknown instead of undefined...).
- * We have to pass the evaluation of (typeof elem) (i.e., a string)
- * to the function rather than simply (element) -- passing an 
- * undefined object would make the function crash on PIE.
- */
-function isDefined(type) {
-  return type != 'undefined' && type != 'unknown';
-}
-
-/**
- * Returns true if val is a function.
- */
-function isFunction(val) {
-  return typeof val == "function";
-}
-
-// TODO(aa): more basic type checking here.
-
-
-/**
- * Creates a 'bound' function that calls the current function with a preset
- * 'this' object and set of arguments.
- */
-Function.prototype.bind = function(obj) {
-  var preArgs = Array.prototype.slice.call(arguments, 1);
-  var self = this;
-  return function() {
-    var postArgs = Array.prototype.slice.call(arguments, 0);
-    var totalArgs = preArgs.concat(postArgs);
-    return self.apply(obj, totalArgs);
-  }
-};
-
-/**
- * Creates a partially applied function that calls the current function with
- * a preset set of arguments.
- */
-Function.prototype.partial = function() {
-  var args = Array.prototype.slice.call(arguments, 0);
-  return this.bind(null, args);
-};
-
-/**
- * Binds all the methods in obj to obj.
- */
-function bindMethods(obj) {
-  for (var p in obj) {
-    if (isFunction(obj[p])) {
-      obj[p] = obj[p].bind(obj);
-    }
-  }
-}
-
-
-/**
- * Trim leading and trailing whitespace from a string.
- */
-String.prototype.trim = function(str) {
-  return this.replace(/^\s+/, "").replace(/\s+$/, "");
-};
-
-
-/**
- * Find the index of a given element in an array. Returns -1 if the item does
- * not exist.
- */
-Array.prototype.indexOf = function(item) {
-  for (var i = 0; i < this.length; i++) {
-    if (this[i] === item) {
-      return i;
-    }
-  }
-  return -1;
-};
-
-/**
- * Makes a deep copy of an object.
- */
-function cloneObject(original) {
-  var newObject = new Object();
-  for (i in original) {
-    if (typeof original[i] == 'object') {
-      newObject[i] = cloneObject(original[i]);
-    }
-    else {
-      newObject[i] = original[i];
-    }
-  }
-  newObject.length = original.length;
-  return newObject;
-}
-
-var browser = {};
-
-(function() {
-  var ua = navigator.userAgent;
-  browser.opera = typeof opera != "undefined";
-  browser.ie = !browser.opera && ua.indexOf("MSIE") > -1;
-  browser.ie_mobile = (ua.indexOf("Windows CE") > -1) &&
-      (ua.indexOf("MSIE") > -1);
-  browser.webkit = ua.indexOf("WebKit") > -1;
-  // WebKit also gives product == "gecko".
-  browser.mozilla = !browser.webkit && navigator.product == "Gecko";
-  browser.safari = ua.indexOf("Safari") > -1;
-  browser.mac = navigator.platform.indexOf("Mac") > -1;
-  browser.linux = navigator.platform.indexOf("Linux") > -1;
-  browser.windows = navigator.platform.indexOf("Win") > -1;
-  browser.android = ua.indexOf("Android") > -1;
-  if (browser.android) {
-    browser.safari = false;
-  }
-  // TODO(aa): Add detection for more browsers, as necessary.
-})();
-
-// Copyright 2008, The Android Open Source Project
-//
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are met:
-//
-//  1. Redistributions of source code must retain the above copyright notice, 
-//     this list of conditions and the following disclaimer.
-//  2. Redistributions in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//  3. Neither the name of Google Inc. nor the names of its contributors may be
-//     used to endorse or promote products derived from this software without
-//     specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-//=============================================================================
-// DOM manipulation utilities.
-// Requires: base.js
-//=============================================================================
-
-var dom = {};
-
-/**
- * Provides a cross-browser way of getting an element by its id
- */
-dom.getElementById = function(id) {
-  if (isDefined(typeof document.getElementById)) {
-    return document.getElementById(id);
-  } else if (isDefined(typeof document.all)) {
-    return document.all[id];
-  }
-  throw new Error("Failed to get element by ID.");
-};
-
-/**
- * Gets the position and dimensions of an element in pixels in relation
- * to the window origin.
- */
-dom.getPosition = function(elem) {
-  var ret = { 'left'   : 0,
-              'top'    : 0,
-              'width'  : elem.width,
-              'height' : elem.height };
-  
-  if (!elem.offsetParent) return ret;
-  
-  var left = 0;
-  var top = 0;
-  while (elem) {
-    left += elem.offsetLeft;
-    top += elem.offsetTop;
-    elem = elem.offsetParent
-  }
-  ret.left = left;
-  ret.top = top;
-  return ret;
-};
-
-/**
- * Returns the height of the inside of the window.
- */
-dom.getWindowInnerHeight = function() {
-  if (isDefined(typeof window.innerHeight)) { // Firefox
-    return window.innerHeight;
-  } else if (isDefined(typeof document.body.offsetHeight)) { // IE
-    return document.body.offsetHeight;
-  }
-
-  throw new Error("Could not get windowInnerHeight.");
-};
-
-/**
- * Add an event listener to an element cross-browser.
- */
-dom.addEvent = function(element, eventName, handler) {
-  var wrapper = dom._callEventHandler.bind(dom, handler);
-
-  if (isDefined(typeof element.addEventListener)) {
-    // Standards-compatible browsers
-    element.addEventListener(eventName, wrapper, false);
-  } else if (isDefined(typeof element.attachEvent)) {
-    // IE
-    element.attachEvent("on" + eventName, wrapper);
-  } else {
-    throw new Error('Failed to attach event.');
-  }
-};
-
-/**
- * Private helper for calling event handlers compatibly across browsers.
- */
-dom._callEventHandler = function(handler, e) {
-  // Older versions of IE don't pass event to the handler.
-  if (!e) e = window.event;
-
-  // TODO(aa): Normalize event object properties.
-
-  return handler(e);
-};
-
-/**
- * Gets the CSS classes for an element.
- */
-dom.getClasses = function(elm) {
-  return elm.className.split(/\s+/);
-};
-
-/**
- * Check is an element has a particular CSS class name.
- */
-dom.hasClass = function(elm, className) {
-  return this.getClasses(elm).indexOf(className) > -1;
-};
-
-/**
- * Adds a CSS class to an element. Do nothing if the class already exists.
- */
-dom.addClass = function(elm, className) {
-  var classes = this.getClasses(elm);
-  if (classes.indexOf(className) > -1) {
-    return;
-  }
-  classes.push(className);
-  elm.className = classes.join(" ");
-};
-
-/**
- * Removes a CSS class from an element. Do nothing if the class doesn't exist.
- */
-dom.removeClass = function(elm, className) {
-  var classes = this.getClasses(elm);
-  var index = classes.indexOf(className);
-  if (index == -1) {
-    return;
-  }
-  classes.splice(index, 1);
-  elm.className = classes.join(" ");
-};
-
-/**
- * Gets the text (non-html) content of an element.
- */
-dom.getTextContent = function(elm) {
-  if (isDefined(typeof elm.textContent)) {
-    return elm.textContent;
-  } else if (isDefined(typeof elm.innerText)) {
-    return elm.innerText;
-  } else {
-    throw new Error("Could not find a property to get text content.");
-  }
-};
-
-/**
- * Sets the text (non-html) contents of an element.
- */
-dom.setTextContent = function(elm, text) {
-  if (isDefined(typeof elm.textContent)) {
-    elm.textContent = text;
-  } else if (isDefined(typeof elm.innerText)) {
-    elm.innerText = text;
-  } else {
-    throw new Error("Could not find a property to set text content.");
-  }
-};
-
-// Copyright 2007, The Android Open Source Project
-//
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are met:
-//
-//  1. Redistributions of source code must retain the above copyright notice, 
-//     this list of conditions and the following disclaimer.
-//  2. Redistributions in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//  3. Neither the name of Google Inc. nor the names of its contributors may be
-//     used to endorse or promote products derived from this software without
-//     specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-/**
- * Initialize the base functionality of the dialog.
- */
-function initDialog() {
-  if (!browser.ie_mobile) {
-    dom.addEvent(document, "keyup", handleKeyUp);
-  } else {
-    var buttonRowElem = null;
-    if (window.pie_dialog.IsSmartPhone()) {
-      buttonRowElem = dom.getElementById("button-row-smartphone");
-    } else {
-      buttonRowElem = dom.getElementById("button-row");
-    }
-    if (buttonRowElem) {
-      buttonRowElem.style.display = 'block';
-    }
-  }
-  if (browser.ie_mobile) {
-    window.pie_dialog.SetScriptContext(window);
-    window.pie_dialog.ResizeDialog();
-  }
-}
-
-/**
- * Set the label of an input button, and optionally, its accesskey.
- */
-function setButtonLabel(textID, elemID, accessKeyID) {
-  var textElem = dom.getElementById(textID);
-  var buttonElem = dom.getElementById(elemID);
-  if (textElem == null || buttonElem == null) {
-    return;
-  }
-
-  var accessKeyElem = null;
-  if (isDefined(typeof accessKeyID)) {
-    accessKeyElem = dom.getElementById(accessKeyID);
-  }
-
-  // This function works for two different kinds of buttons. Simple buttons
-  // based on the <input type="button"> tag, and custom buttons based on a
-  // <button> tag with the css class "custom".
-  // Note that on Windows Mobile 5, the tagName property is not defined.
-  // We can therefore safely assume that the converse is also true:
-  // if tagName is not defined, then the platform must be Windows Mobile 5.  
-  if (!isDefined(typeof buttonElem.tagName) ||
-      buttonElem.tagName.toLowerCase() == "input") {
-    buttonElem.value = dom.getTextContent(textElem).trim();
-    if (accessKeyElem != null) {
-      buttonElem.accessKey = dom.getTextContent(accessKeyElem).trim();
-    }
-  } else if (buttonElem.tagName.toLowerCase() == "button") {
-    var text = dom.getTextContent(textElem).trim();
-
-    if (accessKeyElem != null) {
-      // Some browsers use the accessKey attribute of the the anchor tag.
-      var accessKey = dom.getTextContent(accessKeyElem).trim();
-      buttonElem.accessKey = accessKey;
-
-      // Find the first matching character in the text and mark it.
-      // Note: this form of String.replace() only replaces the first occurence.
-      text = text.replace(accessKey,
-                          "<span class='accesskey'>" + accessKey + "</span>");
-    }
-
-    buttonElem.innerHTML = text;
-  } else {
-    throw new Error("Unexpected button tag name: " + buttonElem.tagName);
-  }
-}
-
-/**
- * Allows a dialog to do custom layout when the window changes sizes. The
- * provided function will be called with the height of the content area when the
- * dialog should relayout.
- */
-function initCustomLayout(layoutFunction) {
-  function doLayout() {
-    layoutFunction(getContentHeight());
-  }
-
-  doLayout();
-
-  // We do an additional layout in onload because sometimes things aren't
-  // stabilized when the first doLayout() is called above.
-  dom.addEvent(window, "load", doLayout);
-  dom.addEvent(window, "resize", doLayout);
-
-  // Mozilla doesn't fire continuous events during resize, so if we want to get
-  // somewhat smooth resizing, we need to run our own timer loop. This still
-  // doesn't look perfect, because the timer goes off out of sync with the
-  // browser's internal reflow, but I think it's better than nothing.
-  // TODO(aa): Keep looking for a way to get an event for each reflow, like IE.
-  if (browser.mozilla) {
-    var lastHeight = -1;
-
-    function maybeDoLayout() {
-      var currentHeight = dom.getWindowInnerHeight();
-      if (currentHeight != lastHeight) {
-        lastHeight = currentHeight;
-        doLayout();
-      }
-    }
-
-    window.setInterval(maybeDoLayout, 30);
-  }
-}
-
-/**
- * Get the JSON-formatted arguments that were passed by the caller.
- */
-function getArguments() {
-  var argsString;
-  if (browser.ie_mobile) {
-    argsString = window.pie_dialog.GetDialogArguments();
-  } else if (browser.ie) {
-    argsString = window.external.GetDialogArguments();
-  } else if (browser.mozilla) {
-    argsString = getFirefoxArguments(window.arguments[0]);
-  } else if (browser.safari) {
-    argsString = window.gears_dialogArguments;
-  } else if (browser.android) {
-    argsString = "" + window.bridge.getDialogArguments();
-  }
-
-  if (typeof argsString == "string") {
-    return JSON.parse(argsString);
-  } else {
-    return null;
-  }
-}
-
-/**
- * Helper used by getArguments(). Getting the arguments in the right type is
- * more involved in Firefox.
- */
-function getFirefoxArguments(windowArguments) {
-  var Ci = Components.interfaces;
-  windowArguments.QueryInterface(Ci.nsIProperties);
-  var supportsString = 
-    windowArguments.get("dialogArguments", Ci.nsISupportsString);
-  return supportsString.data;
-}
-
-/**
- * Close the dialog, sending the specified result back to the caller.
- */
-function saveAndClose(resultObject) {
-  var resultString = JSON.stringify(resultObject);
-  if (browser.ie_mobile) {
-    window.pie_dialog.CloseDialog(resultString);
-  } else if (browser.ie) {
-    window.external.CloseDialog(resultString);
-  } else if (browser.mozilla) {
-    saveFirefoxResults(resultString);
-    window.close();
-  } else if (browser.safari) {
-    window.gears_dialog.setResults(resultString);
-  } else if (browser.android) {
-    window.bridge.closeDialog(resultString);
-  }
-}
-
-/**
- * Helper used by endDialog() for Firefox.
- */
-function saveFirefoxResults(resultString) {
-  var Cc = Components.classes;
-  var Ci = Components.interfaces;
-  
-  var props = window.arguments[0].QueryInterface(Ci.nsIProperties);
-  var supportsString = Cc["@mozilla.org/supports-string;1"]
-      .createInstance(Ci.nsISupportsString);
-      
-  supportsString.data = resultString;
-  props.set("dialogResult", supportsString);
-}
-
-/**
- * Returns the height of the content area of the dialog.
- */
-function getContentHeight() {
-  var head = dom.getElementById("head");
-  var foot = dom.getElementById("foot");
-  return dom.getWindowInnerHeight() - head.offsetHeight - foot.offsetHeight;
-}
-
-/**
- * For some reason ESC doesn't work on HTML dialogs in either Firefox or IE. So
- * we implement it manually.
- */
-function handleKeyUp(e) {
-  var ESC_KEY_CODE = 27;
-  
-  if (e.keyCode == ESC_KEY_CODE) {
-    saveAndClose(null);
-  }
-}
-
-/**
- * Disables a button in the right way, whether it is normal or custom.
- */
-function disableButton(buttonElem) {
-  buttonElem.disabled = true;
-
-  if (browser.ie_mobile) {
-    window.pie_dialog.SetButtonEnabled(false);
-  }
-
-  if (!isDefined(typeof buttonElem.tagName) || 
-      buttonElem.tagName.toLowerCase() == "input") {
-    buttonElem.style.color = "gray";
-  } else if (buttonElem.tagName.toLowerCase() == "button") {
-    dom.addClass(buttonElem, "disabled");
-  } else {
-    throw new Error("Unexpected tag name: " + buttonElem.tagName);
-  }
-}
-
-/**
- * Enables a button in the right way, whether it is normal or custom.
- */
-function enableButton(buttonElem) {
-  buttonElem.disabled = false;
-
-  if (browser.ie_mobile) {
-    window.pie_dialog.SetButtonEnabled(true);
-  }
-  
-  if (!isDefined(typeof buttonElem.tagName) ||
-      buttonElem.tagName.toLowerCase() == "input") {
-    buttonElem.style.color = "black";
-  } else if (buttonElem.tagName.toLowerCase() == "button") {
-    dom.removeClass(buttonElem, "disabled");
-  } else {
-    throw new Error("Unexpected tag name: " + buttonElem.tagName);
-  }
-}
-
-/**
- * Returns a wrapped domain (useful for small screens dialogs, 
- * e.g. windows mobile devices)
- */
-function wrapDomain(str) {
-  if (!browser.ie_mobile) {
-    return str;
-  }
-
-  var max = 20;
-  var url;
-  var scheme_start = str.indexOf("://");
-  var scheme = "";
-
-  if (scheme_start != -1) {
-    scheme = str.substring(0, scheme_start);
-    scheme += "://";
-    // there's automatically an hyphenation
-    // point used by the browser after http://
-    // so we only have to hyphenate the
-    // rest of the string
-    url = str.substring(scheme.length);
-  } else {
-    url = str;
-  }
-
-  // We hyphenate the string on every dot
-  var components = url.split(".");
-  if (components.length < 1) {
-    return str;
-  }
-
-  var content = components[0];
-  var len = content.length;
-  for (var i=1; i < components.length; i++) {
-    var elem = components[i];
-    content += ".";
-    len++;
-    if (len + elem.length > max) {
-      content += "<br>";
-      len = 0;
-    }
-    content += elem;
-    len += elem.length;
-  }
-  return scheme + content;
-}
-
-/**
- * Resizes the dialog to fit the content size.
- */
-function resizeDialogToFitContent(opt_minDialogInnerHeight) {
-  // This does not work on PIE (no height measurement)
-  if (browser.ie_mobile) {
-    window.pie_dialog.ResizeDialog();
-    return;
-  }
-  // window.resize() is not working on Android, we bail out.
-  if (browser.android) {
-    return;
-  }
-
-  // Resize the window to fit
-  var contentDiv = dom.getElementById("content");
-  var contentHeightProvided = getContentHeight();
-  var contentHeightDesired = contentDiv.offsetHeight;
-
-  var dialogHeightProvided = dom.getWindowInnerHeight();
-  var dialogHeightDesired =
-      dialogHeightProvided + (contentHeightDesired - contentHeightProvided);
-
-  var minDialogHeight = opt_minDialogInnerHeight || 0;
-  var maxDialogHeight = 400; // arbitrary max height for a dialog to resize to
-  
-  var targetHeight = Math.max(dialogHeightDesired, minDialogHeight);
-  targetHeight = Math.min(dialogHeightDesired, maxDialogHeight);
-
-  if (targetHeight != dialogHeightProvided) {
-    var dy = targetHeight - dialogHeightProvided;
-    window.resizeBy(0, dy);
-  }
-}
-
-/**
- * Safari running on OSX 10.4 can't load images dynamically from the network,
- * this helper function calls gears-specific code to work around this
- * limitation.
- */
-function loadImage(elem, image_url) {
-  if (browser.safari) {
-    var position = dom.getPosition(elem);
-    window.gears_dialog.loadImageIntoElement(image_url, position.top,
-                                             position.left,
-                                             position.width,
-                                             position.height);
-  } else {
-    elem.src = image_url;
-  }
-}
-
-// Copyright 2008, The Android Open Source Project
-//
-// Redistribution and use in source and binary forms, with or without 
-// modification, are permitted provided that the following conditions are met:
-//
-//  1. Redistributions of source code must retain the above copyright notice, 
-//     this list of conditions and the following disclaimer.
-//  2. Redistributions in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//  3. Neither the name of Google Inc. nor the names of its contributors may be
-//     used to endorse or promote products derived from this software without
-//     specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-//=============================================================================
-// Implements the behavior of our custom buttons. There is no native support in
-// IE for rounded corners on HTML elements, so this script also implements a
-// hack to simulate them in that browser.
-//
-// Requires: base.js, dom.js
-//=============================================================================
-
-/**
- * Constructor.
- */
-function CustomButton(htmlButton) {
-  bindMethods(this);
-  
-  this._focused = false;
-  this._htmlButton = htmlButton;
-
-  if (!document.all) {  // not IE
-    dom.addEvent(htmlButton, "mouseover", this._handleMouseOver);
-    dom.addEvent(htmlButton, "mouseout", this._handleMouseOut);
-  } else {  // IE
-    // mouseover/mouseout behave badly with nested elements in IE. Luckily,
-    // mouseenter/mouseleave are provided and have the equivalent semantics.
-    dom.addEvent(htmlButton, "mouseenter", this._handleMouseOver);
-    dom.addEvent(htmlButton, "mouseleave", this._handleMouseOut);
-
-    // We also handle focus and blur in IE so that we can update the corners
-    // to match the black border IE provides.
-    dom.addEvent(htmlButton, "focusin", this._handleFocus);
-    dom.addEvent(htmlButton, "blur", this._handleBlur);
-
-    dom.addClass(htmlButton, "ie");
-    this._createCorners();
-  }
-
-  // Limit button widths to a minimum of 60px. They look funny skinnier.  
-  if (htmlButton.offsetWidth < 60) {
-    htmlButton.style.width = "60px";
-  }
-
-  htmlButton.style.visibility = "visible";
-}
-
-/**
- * Initializes all the custom buttons on the page.
- */
-CustomButton.initializeAll = function() {
-  var buttons = document.getElementsByTagName("button");
-  for (var i = 0, button; button = buttons[i]; i++) {
-    if (dom.hasClass(button, "custom")) {
-      new CustomButton(button);
-    }
-  }
-};
-
-/**
- * Highlights the button on mouseover. Note that this gets called multiple
- * times while the mouse goes over sub elements inside the button.
- */
-CustomButton.prototype._handleMouseOver = function() {
-  if (!this._htmlButton.disabled && !this._focused) {
-    dom.addClass(this._htmlButton, "hover");
-    this._setCornerColor("blue");
-  }
-};
-
-/**
- * Undoes the highlighting of the button on mouseout. Note that this gets called
- * multiple times when the mouse moves out of sub elements, even if it is still
- * over the button. That is OK, as long as there is immediately a mouseover
- * event.
- */
-CustomButton.prototype._handleMouseOut = function() {
-  if (!this._htmlButton.disabled && !this._focused) {
-    dom.removeClass(this._htmlButton, "hover");
-    this._setCornerColor("grey");
-  }
-};
-
-/**
- * Highlights the button on focus. Currently only used for IE.
- * TODO(aa): The black highlight looks cool. Consider for other browsers.
- */
-CustomButton.prototype._handleFocus = function() {
-  dom.removeClass(this._htmlButton, "hover");
-  this._setCornerColor("black");
-  this._focused = true;
-};
-
-/**
- * Undoes the highlighting of the button on blur.
- */
-CustomButton.prototype._handleBlur = function() {
-  this._setCornerColor("grey");
-  this._focused = false;
-};
-
-/**
- * Helper to create the graphics that make the button have rounded corners in
- * IE.
- */
-CustomButton.prototype._createCorners = function() {
-  // Making the button position:relative makes it possible to position things
-  // inside it relative to it's border.
-  this._htmlButton.style.position = "relative";
-
-  var verticalEdges = ["left", "right"];
-  var horizontalEdges = ["top", "bottom"];
-  var colors = ["grey", "blue", "black"];
-
-  for (var i = 0; i < verticalEdges.length; i++) {
-    for (var j = 0; j < horizontalEdges.length; j++) {
-      for (var k = 0; k < colors.length; k++) {
-        var img = document.createElement("img");
-        img.src = "button_corner_" + colors[k]  + ".gif";
-        img.color  = colors[k];
-        img.style.position = "absolute";
-        img.style[verticalEdges[i]] = "-2px";
-        img.style[horizontalEdges[j]] = "-2px";
-        img.style.filter =
-            "progid:DXImageTransform.Microsoft.BasicImage(Rotation=" + 
-            (i + j) + ")";
-        this._htmlButton.appendChild(img);
-      }
-    }
-  }
-
-  this._setCornerColor("grey");
-};
-
-/**
- * Sets the color of the corners in IE by changing the stack order of the corner
- * images.
- */
-CustomButton.prototype._setCornerColor = function(newColor) {
-  var imgs = this._htmlButton.getElementsByTagName("img");
-  for (var i = 0, img; img = imgs[i]; i++) {
-    img.style.zIndex = Number(img.color == newColor);
-  }
-};
-
-var localized_strings = {
-  "el": {
-    "string-no": "Όχι",
-    "string-header-desktop": "Αυτός ο ιστότοπος θέλει να δημιουργήσει μια συντόμευση στον υπολογιστή σας. Θέλετε να το επιτρέψετε αυτό;",
-    "string-no-accesskey": "Ο",
-    "string-header-wince": "Αυτός ο ιστότοπος θέλει να δημιουργήσει μια συντόμευση στη λίστα προγραμμάτων. Θέλετε να το επιτρέψετε;",
-    "string-title-simple": "Δημιουργία συντομεύσεων εφαρμογών",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Άκυρο",
-    "string-startmenu": "Μενού έναρξης",
-    "string-yes": "Ναι",
-    "string-never-allow": "Να μην επιτρέπεται ποτέ αυτή η συντόμευση",
-    "string-yes-accesskey": "Ν",
-    "string-quicklaunch": "Γραμμή γρήγορης εκκίνησης",
-    "string-never-allow-wince": "Να μην επιτρέπεται ποτέ",
-    "string-desktop": "Επιφάνεια εργασίας",
-    "string-title-default": "Gears - Δημιουργία συντόμευσης στην επιφάνεια εργασίας",
-    "string-location-query": "Δημιουργία συντομεύσεων στις παρακάτω θέσεις:"
-  },
-  "gu": {
-    "string-no": "નહીં",
-    "string-header-desktop": "આ વેબસાઇટને તમારા કમ્પ્યુટર પર એક શોર્ટકટ બનાવવો છે શું આની તમારે મંજુરી આપવી છે?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "આ વેબસાઇટ આપની પ્રોગ્રામોની સૂચિમાં શૉર્ટકટ્સ બનાવવા માંગે છે. શું આપ આને મંજુરી આપવા માંગો છો?",
-    "string-title-simple": "એપ્લિકેશન શોર્ટકટ બનાવો",
-    "string-ok-accesskey": "O",
-    "string-ok": "ઓકે",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "રદ કરો",
-    "string-startmenu": "પ્રારંભ મેનુ",
-    "string-yes": "હા",
-    "string-never-allow": "આ શૉર્ટકટને ક્યારેય મંજૂર કરશો નહીં",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "ક્વિક લોંચ બાર",
-    "string-never-allow-wince": "ક્યારેય મંજૂર કરશો નહીં",
-    "string-desktop": "ડેસ્કટોપ",
-    "string-title-default": "Gears - ડેસ્ક્ટોપ શોર્ટકટ બનાવો",
-    "string-location-query": "નીચેના સ્થાનો પર શોર્ટકટ્સ બનાવો"
-  },
-  "zh-TW": {
-    "string-no": "否",
-    "string-header-desktop": "這個網站要在您的電腦上建立捷徑。 您是否允許這個動作？",
-    "string-no-accesskey": "N",
-    "string-header-wince": "這個網站要在您的程式清單中建立捷徑。 您是否允許這個動作？",
-    "string-title-simple": "建立應用程式捷徑",
-    "string-ok-accesskey": "O",
-    "string-ok": "確定",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "取消",
-    "string-startmenu": "開始功能表",
-    "string-yes": "是",
-    "string-never-allow": "永不允許這個捷徑",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "快速啟動列",
-    "string-never-allow-wince": "永不允許",
-    "string-desktop": "桌面",
-    "string-title-default": "Gears - 建立桌面捷徑",
-    "string-location-query": "在下列位置建立捷徑："
-  },
-  "vi": {
-    "string-no": "Không",
-    "string-header-desktop": "Trang web này muốn tạo một lối tắt trên màn hình của bạn. Bạn có cho phép tác vụ này không?",
-    "string-no-accesskey": "K",
-    "string-header-wince": "Trang web này muốn tạo lối tắt trong danh sách chương trình của bạn. Bạn có cho phép tác vụ này không?",
-    "string-title-simple": "Tạp Lối tắt cho Ứng dụng",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "H",
-    "string-cancel": "Huỷ",
-    "string-startmenu": "Trình đơn bắt đầu",
-    "string-yes": "Có",
-    "string-never-allow": "Không bao giờ cho phép lối tắt này",
-    "string-yes-accesskey": "C",
-    "string-quicklaunch": "Thanh khởi động nhanh",
-    "string-never-allow-wince": "Không bao giờ cho phép",
-    "string-desktop": "Màn hình",
-    "string-title-default": "Gears - Tạo Lối tắt trên Màn hình",
-    "string-location-query": "Tạo lối tắt trong các vị trí sau:"
-  },
-  "ca": {
-    "string-no": "No",
-    "string-header-desktop": "Aquest lloc web vol crear una drecera al vostre ordinador. Ho voleu permetre?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Aquest lloc web vol crear una drecera a la vostra llista de programes. Ho voleu permetre?",
-    "string-title-simple": "Creeu dreceres d'aplicacions",
-    "string-ok-accesskey": "O",
-    "string-ok": "D'acord",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Cancel·la",
-    "string-startmenu": "Menú Inici",
-    "string-yes": "Sí",
-    "string-never-allow": "No permetre mai aquesta drecera",
-    "string-yes-accesskey": "S",
-    "string-quicklaunch": "Barra d'inici ràpid",
-    "string-never-allow-wince": "No permetre mai",
-    "string-desktop": "Escriptori",
-    "string-title-default": "Gears - Crea una drecera a l'escriptori",
-    "string-location-query": "Crea dreceres a les ubicacions següents:"
-  },
-  "it": {
-    "string-no": "No",
-    "string-header-desktop": "Questo sito web vuole creare un collegamento sul tuo computer. Consentire l'operazione?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Questo sito Web vuole creare sul tuo desktop un collegamento nel tuo elenco di programmi. Consentire l'operazione?",
-    "string-title-simple": "Crea collegamenti applicazione",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "A",
-    "string-cancel": "Annulla",
-    "string-startmenu": "Menu Start",
-    "string-yes": "Sì",
-    "string-never-allow": "Non consentire mai questo collegamento",
-    "string-yes-accesskey": "S",
-    "string-quicklaunch": "Barra Avvio veloce",
-    "string-never-allow-wince": "Non consentire mai",
-    "string-desktop": "Desktop",
-    "string-title-default": "Google Gears - Crea collegamento sul desktop",
-    "string-location-query": "Crea collegamenti nelle seguenti posizioni:"
-  },
-  "kn": {
-    "string-no": "ಇಲ್ಲ",
-    "string-header-desktop": "ಈ ವೆಬ್ ಸೈಟ್ ನಿಮ್ಮ ಕಂಪ್ಯೂಟರಿನಲ್ಲಿ ಒಂದು ಶಾರ್ಟ್ ಕಟ್ ರಚಿಸಲು ಬಯಸುತ್ತದೆ. ಇದನ್ನು ನೀವು ಅನುಮತಿಸಲು ಬಯಸುತ್ತೀರಾ?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "ನಿಮ್ಮ ಕಾರ್ಯಕ್ರಮಗಳ ಪಟ್ಟಿಯಲ್ಲಿ ಶಾರ್ಟ್‌ಕಟ್‌ಗಳನ್ನು ರಚಿಸಲು ಈ ವೆಬ್‌ಸೈಟ್ ಬಯಸುತ್ತದೆ. ನೀವು ಇದನ್ನು ಅನುಮತಿಸಲು ಬಯಸುತ್ತೀರಾ?",
-    "string-title-simple": "ಅಪ್ಲಿಕೇಶನ್ ಶಾರ್ಟ್ ಕಟ್ ಗಳನ್ನು ರಚಿಸಿ",
-    "string-ok-accesskey": "O",
-    "string-ok": "ಸರಿ",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "ರದ್ದುಮಾಡು",
-    "string-startmenu": "ಪ್ರಾರಂಭ ಮೆನು",
-    "string-yes": "ಹೌದು",
-    "string-never-allow": "ಈ ಶಾರ್ಟ್‌ಕಟ್‌ನ್ನು ಎಂದಿಗೂ ಅನುಮತಿಸಬೇಡಿ",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "ಕ್ವಿಕ್ ಲಾಂಚ್ ಬಾರ್",
-    "string-never-allow-wince": "ಎಂದಿಗೂ ಅನುಮತಿಸಬೇಡಿ",
-    "string-desktop": "ಡೆಸ್ಕ್ ಟಾಪ್",
-    "string-title-default": "Gears - ಡೆಸ್ಕ್ ಟಾಪ್ ಶಾರ್ಟ್ ಕಟ್ ರಚಿಸಿ",
-    "string-location-query": "ಈ ಕೆಳಗಿನ ಸ್ಥಳಗಳಲ್ಲಿ ಶಾರ್ಟ್ ಕಟ್ ಗಳನ್ನು ರಚಿಸಿ:"
-  },
-  "ar": {
-    "string-no": "لا",
-    "string-header-desktop": "يتطلب موقع الويب هذا إنشاء اختصار على الكمبيوتر الخاص بك. هل تريد السماح بذلك؟",
-    "string-no-accesskey": "ل",
-    "string-header-wince": "يرغب موقع الويب هذا في إنشاء اختصار في قائمة البرامج لديك. هل ترغب في السماح له بذلك؟",
-    "string-title-simple": "إنشاء اختصارات للتطبيقات",
-    "string-ok-accesskey": "م",
-    "string-ok": "موافق",
-    "string-cancel-accesskey": "غ",
-    "string-cancel": "إلغاء",
-    "string-startmenu": "القائمة ابدأ",
-    "string-yes": "نعم",
-    "string-never-allow": "عدم السماح بهذا الاختصار مطلقًا",
-    "string-yes-accesskey": "ن",
-    "string-quicklaunch": "شريط التشغيل السريع",
-    "string-never-allow-wince": "عدم السماح مطلقًا",
-    "string-desktop": "سطح المكتب",
-    "string-title-default": "Gears - إنشاء اختصار لسطح المكتب",
-    "string-location-query": "قم بإنشاء اختصارات في المواقع التالية:"
-  },
-  "ml": {
-    "string-no": "ഇല്ല",
-    "string-header-desktop": "ഈ വെബ്സൈറ്റ് നിങ്ങളുടെ കമ്പ്യൂട്ടരില് ഒരു കുറുക്കുവഴി സൃഷ്ടിക്കാന് ആവശ്യപ്പെടുന്നു. ഇതനുവദിക്കാന് നിങ്ങള് ആഗ്രഹിക്കുന്നുണ്ടോ?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "പ്രോഗ്രാമുകളുടെ പട്ടികയില്‍ ഒരു കുറുക്കുവഴി സൃഷ്ടിക്കാന്‍ ഈ വെബ്സൈറ്റ് ആവശ്യപ്പെടുന്നു. ഇതനുവദിക്കാന്‍ നിങ്ങള്‍ ആഗ്രഹിക്കുന്നുണ്ടോ?",
-    "string-title-simple": "അപ്ലിക്കേഷന്‍ കുറുക്കുവഴികള്‍ സൃഷ്ടിക്കുക",
-    "string-ok-accesskey": "O",
-    "string-ok": "ശരി",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "റദ്ദാക്കൂ",
-    "string-startmenu": "തുടങ്ങുക മെനു",
-    "string-yes": "അതെ",
-    "string-never-allow": "ഈ കുറുക്കുവഴി ഒരിക്കലും അനുവദിക്കരുത്",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "ദ്രുത ലോഞ്ച് ബാര്‍",
-    "string-never-allow-wince": "ഒരിക്കലും അനുവദിക്കരുത്",
-    "string-desktop": "ഡെസ്ക്ടോപ്",
-    "string-title-default": "Gears - ഡെസ്ക്ടോപ് കുറുക്കുവഴി സൃഷ്ടിക്കുക",
-    "string-location-query": "താഴെക്കാണുന്ന ലോക്കഷനുകളില് കുറുക്കുവഴികള് സൃഷ്ടിക്കുക"
-  },
-  "cs": {
-    "string-no": "Ne",
-    "string-header-desktop": "Tato webová stránka chce vytvořit zástupce ve vašem počítači. Chcete tuto akci povolit?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Tento web chce vytvořit zástupce v seznamu programů. Chcete tuto akci povolit?",
-    "string-title-simple": "Vytvořit zástupce aplikace",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "R",
-    "string-cancel": "Zrušit",
-    "string-startmenu": "Nabídka Start",
-    "string-yes": "Ano",
-    "string-never-allow": "Nikdy nepovolit tohoto zástupce",
-    "string-yes-accesskey": "A",
-    "string-quicklaunch": "Panel rychlého spuštění",
-    "string-never-allow-wince": "Nikdy nepovolit",
-    "string-desktop": "Plocha",
-    "string-title-default": "Gears – vytvořit zástupce na ploše",
-    "string-location-query": "Vytvořit zástupce v následujících umístěních:"
-  },
-  "et": {
-    "string-no": "Ei",
-    "string-header-desktop": "See veebilehekülg tahab teie arvutisse otseteed luua. Kas soovite seda lubada?",
-    "string-no-accesskey": "E",
-    "string-header-wince": "Veebisait soovib teie programmiloendisse luua otsetee. Kas lubate seda?",
-    "string-title-simple": "Loo rakenduse otseteed",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "T",
-    "string-cancel": "Tühista",
-    "string-startmenu": "Start-menüü",
-    "string-yes": "Jah",
-    "string-never-allow": "Ära luba seda otseteed kunagi",
-    "string-yes-accesskey": "J",
-    "string-quicklaunch": "Kiirkäivitusriba",
-    "string-never-allow-wince": "Ära luba kunagi",
-    "string-desktop": "Töölaud",
-    "string-title-default": "Gears – loo töölaua otsetee",
-    "string-location-query": "Loo otseteed järgmistesse asukohtadesse:"
-  },
-  "id": {
-    "string-no": "Tidak",
-    "string-header-desktop": "Website ini ingin membuat pintasan pada komputer Anda. Anda ingin mengizinkannya?",
-    "string-no-accesskey": "T",
-    "string-header-wince": "Situs web ini ingin membuat pintasan dalam daftar program Anda. Apakah Anda mengizinkannya?",
-    "string-title-simple": "Buat Pintasan Aplikasi",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Batalkan",
-    "string-startmenu": "Menu Mulai",
-    "string-yes": "Ya",
-    "string-never-allow": "Jangan pernah mengizinkan pintasan ini",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "Bilah luncur cepat",
-    "string-never-allow-wince": "Jangan pernah mengizinkan",
-    "string-desktop": "Desktop",
-    "string-title-default": "Gears - Buat Jalan Pintas Desktop",
-    "string-location-query": "Buat pintasan di lokasi berikut ini:"
-  },
-  "es": {
-    "string-no": "No",
-    "string-header-desktop": "Este sitio web desea crear un acceso directo en tu equipo. ¿Quieres permitirlo?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Este sitio web desea crear un acceso directo en tu lista de programas. ¿Quieres permitirlo?",
-    "string-title-simple": "Crear accesos directos de la aplicación",
-    "string-ok-accesskey": "A",
-    "string-ok": "Aceptar",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Cancelar",
-    "string-startmenu": "Menú Inicio",
-    "string-yes": "Sí",
-    "string-never-allow": "No permitir nunca este acceso directo",
-    "string-yes-accesskey": "S",
-    "string-quicklaunch": "Barra de inicio rápida",
-    "string-never-allow-wince": "No permitir nunca",
-    "string-desktop": "Escritorio",
-    "string-title-default": "Gears - Crear acceso directo en el escritorio",
-    "string-location-query": "Crear accesos directos en las siguientes ubicaciones:"
-  },
-  "en-GB": {
-    "string-no": "No",
-    "string-header-desktop": "This website wants to create a shortcut on your computer. Do you want to allow this?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "This website wants to create the shortcuts listed below in your list of programmes. Do you want to allow this?",
-    "string-title-simple": "Create Application Shortcuts",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Cancel",
-    "string-startmenu": "Start menu",
-    "string-yes": "Yes",
-    "string-never-allow": "Never allow this shortcut",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "Quick launch bar",
-    "string-never-allow-wince": "Never allow",
-    "string-desktop": "Desktop",
-    "string-title-default": "Gears - Create Desktop Shortcut",
-    "string-location-query": "Create shortcuts in the following locations:"
-  },
-  "ru": {
-    "string-no": "Нет",
-    "string-header-desktop": "Этот веб-сайт собирается создать ярлык на вашем компьютере. Разрешить?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Этот веб-сайт пытается создать ярлык в вашем списке программ. Разрешить?",
-    "string-title-simple": "Создать ярлыки для приложений",
-    "string-ok-accesskey": "O",
-    "string-ok": "ОК",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Отмена",
-    "string-startmenu": "Меню \"Пуск\"",
-    "string-yes": "Да",
-    "string-never-allow": "Никогда не разрешать создание этого ярлыка",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "Панель быстрого запуска",
-    "string-never-allow-wince": "Никогда",
-    "string-desktop": "Рабочий стол",
-    "string-title-default": "Gears — создать ярлык на рабочем столе",
-    "string-location-query": "Создать ярлыки со следующим размещением:"
-  },
-  "nl": {
-    "string-no": "Nee",
-    "string-header-desktop": "Deze website wil een snelkoppeling maken op je computer. Vind je dat goed?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Deze website wil een snelkoppeling maken in uw programmalijst. Wilt u dit toestaan?",
-    "string-title-simple": "Toepassingssnelkoppelingen maken",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Annuleren",
-    "string-startmenu": "Startmenu",
-    "string-yes": "Ja",
-    "string-never-allow": "Deze snelkoppeling nooit toestaan",
-    "string-yes-accesskey": "J",
-    "string-quicklaunch": "Werkbalk Snel starten",
-    "string-never-allow-wince": "Nooit toestaan",
-    "string-desktop": "Bureaublad",
-    "string-title-default": "Gears - Snelkoppeling op bureaublad maken",
-    "string-location-query": "Snelkoppelingen maken op de volgende locaties:"
-  },
-  "no": {
-    "string-no": "Nei",
-    "string-header-desktop": "Dette nettstedet ønsker å opprette en snarvei på datamaskinen. Vil du tillate dette?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Dette nettstedet vil opprette en snarvei i listen over programmer. Vil du tillate dette?",
-    "string-title-simple": "Opprett snarveier til programmer",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "A",
-    "string-cancel": "Avbryt",
-    "string-startmenu": "Start-meny",
-    "string-yes": "Ja",
-    "string-never-allow": "Avvis alltid denne snarveien",
-    "string-yes-accesskey": "J",
-    "string-quicklaunch": "Hurtigstartlinje",
-    "string-never-allow-wince": "Avvis alltid",
-    "string-desktop": "Skrivebord",
-    "string-title-default": "Gears – Opprett snarvei på skrivebordet",
-    "string-location-query": "Opprett snarveier på følgende plasseringer:"
-  },
-  "tr": {
-    "string-no": "Hayır",
-    "string-header-desktop": "Bu web sitesi bilgisayarınızda bir kısayol oluşturmak istiyor. Buna izin vermek istiyor musunuz?",
-    "string-no-accesskey": "H",
-    "string-header-wince": "Bu web sitesi, programlar listenizde bir kısayol oluşturmak istiyor. Buna izin vermek istiyor musunuz?",
-    "string-title-simple": "Uygulama Kısayolları Oluştur",
-    "string-ok-accesskey": "T",
-    "string-ok": "Tamam",
-    "string-cancel-accesskey": "a",
-    "string-cancel": "İptal",
-    "string-startmenu": "Başlat menüsü",
-    "string-yes": "Evet",
-    "string-never-allow": "Bu kısayola asla izin verme",
-    "string-yes-accesskey": "E",
-    "string-quicklaunch": "Hızlı başlat çubuğu",
-    "string-never-allow-wince": "Asla izin verme",
-    "string-desktop": "Masaüstü",
-    "string-title-default": "Gears - Masaüstü Kısayolu Oluştur",
-    "string-location-query": "Kısayolları aşağıdaki konumlarda oluştur:"
-  },
-  "lv": {
-    "string-no": "Nē",
-    "string-header-desktop": "Šī vietne vēlas izveidot datorā saīsni. Vai vēlaties to atļaut?",
-    "string-no-accesskey": "Nē",
-    "string-header-wince": "Šī vietne jūsu programmu sarakstā gatavojas izveidot īsceļu. Vai atļausit?",
-    "string-title-simple": "Izveidot lietojumprogrammu saīsnes",
-    "string-ok-accesskey": "O",
-    "string-ok": "Labi",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Atcelt",
-    "string-startmenu": "Izvēlne Sākt",
-    "string-yes": "Jā",
-    "string-never-allow": "Nekad neatļaut šī īsceļa izveidi",
-    "string-yes-accesskey": "Jā",
-    "string-quicklaunch": "Ātrās palaišanas josla",
-    "string-never-allow-wince": "Nekad neatļaut",
-    "string-desktop": "Datora darbvirsma",
-    "string-title-default": "Gears — darbvirsmas saīsnes izveide",
-    "string-location-query": "Izveidot saīsnes šādās vietās:"
-  },
-  "lt": {
-    "string-no": "Ne",
-    "string-header-desktop": "Ši svetainė sukurs šaukinį jūsų kompiuteryje. Ar leisti?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Ši svetainė sukurs šaukinį programų sąraše. Ar leisti?",
-    "string-title-simple": "Sukurti programos šaukinius",
-    "string-ok-accesskey": "O",
-    "string-ok": "Gerai",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Atšaukti",
-    "string-startmenu": "Pradinis meniu",
-    "string-yes": "Taip",
-    "string-never-allow": "Niekada neleisti šio šaukinio",
-    "string-yes-accesskey": "T",
-    "string-quicklaunch": "Sparčiosios paleisties juosta",
-    "string-never-allow-wince": "Niekada neleisti",
-    "string-desktop": "Darbalaukis",
-    "string-title-default": "„Gears“ – sukurti darbalaukio šaukinį",
-    "string-location-query": "Sukurti šaukinius šiose vietose:"
-  },
-  "th": {
-    "string-no": "ไม่",
-    "string-header-desktop": "เว็บไซต์นี้ต้องการสร้างทางลัดบนเดสก์ท็อปของคุณ คุณต้องการอนุญาตหรือไม่",
-    "string-no-accesskey": "ม",
-    "string-header-wince": "เว็บไซต์นี้ต้องการสร้างทางลัดที่ปรากฏในรายการโปรแกรมของคุณ คุณต้องการอนุญาตหรือไม่",
-    "string-title-simple": "สร้างทางลัดของแอปพลิเคชัน",
-    "string-ok-accesskey": "ต",
-    "string-ok": "ตกลง",
-    "string-cancel-accesskey": "ย",
-    "string-cancel": "ยกเลิก",
-    "string-startmenu": "เมนู Start",
-    "string-yes": "ใช่",
-    "string-never-allow": "ไม่อนุญาตให้สร้างทางลัดนี้",
-    "string-yes-accesskey": "ช",
-    "string-quicklaunch": "แถบ Quick Launch",
-    "string-never-allow-wince": "ไม่อนุญาต",
-    "string-desktop": "เดสก์ท็อป",
-    "string-title-default": "Gears - สร้างทางลัดบนเดสก์ท็อป",
-    "string-location-query": "สร้างทางลัดในตำแหน่งต่อไปนี้:"
-  },
-  "ro": {
-    "string-no": "Nu",
-    "string-header-desktop": "Acest site Web doreşte să creeze o comandă rapidă pe computerul dvs. Permiteţi acest lucru?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Acest site Web doreşte să creeze o comandă rapidă în lista dvs. de programe. Permiteţi acest lucru?",
-    "string-title-simple": "Creaţi comenzi rapide pentru aplicaţii",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "A",
-    "string-cancel": "Anulaţi",
-    "string-startmenu": "Meniul Start",
-    "string-yes": "Da",
-    "string-never-allow": "Nu permiteţi niciodată această comandă rapidă",
-    "string-yes-accesskey": "D",
-    "string-quicklaunch": "Bara Lansare rapidă",
-    "string-never-allow-wince": "Nu permiteţi niciodată",
-    "string-desktop": "Desktop",
-    "string-title-default": "Gears – Creaţi comandă rapidă de pe desktop",
-    "string-location-query": "Creaţi comenzi rapide în următoarele locaţii:"
-  },
-  "is": {
-    "string-no": "Nei",
-    "string-header-desktop": "Þetta vefsvæði óskar eftir að búa til flýtivísun á tölvunni hjá þér. Viltu leyfa það?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Þetta vefsvæði óskar eftir að búa til flýtivísun í forritalistanum hjá þér. Viltu leyfa það?",
-    "string-title-simple": "Útbúa flýtivísanir fyrir forrit",
-    "string-ok-accesskey": "O",
-    "string-ok": "Í lagi",
-    "string-cancel-accesskey": "H",
-    "string-cancel": "Hætta við",
-    "string-startmenu": "Upphafsvalmynd",
-    "string-yes": "Já",
-    "string-never-allow": "Aldrei heimila þessa flýtivísun",
-    "string-yes-accesskey": "J",
-    "string-quicklaunch": "Stika fyrir flýtiræsingu",
-    "string-never-allow-wince": "Leyfa aldrei",
-    "string-desktop": "Skjáborð",
-    "string-title-default": "Gears - Setja flýtivísun á skjáborð",
-    "string-location-query": "Útbúa flýtivísanir á eftirfarandi staðsetningum:"
-  },
-  "fil": {
-    "string-no": "Hindi",
-    "string-header-desktop": "Nais ng website na ito na lumikha ng isang shortcut sa iyong computer. Nais mo bang payagan ito?",
-    "string-no-accesskey": "H",
-    "string-header-wince": "Nais ng website na ito na lumikha ng isang shortcut sa iyong listahan ng mga program. Nais mo ba itong payagan?",
-    "string-title-simple": "Lumikha ng mga Shortcut ng Application",
-    "string-ok-accesskey": "K",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "I",
-    "string-cancel": "Ikansela",
-    "string-startmenu": "Start menu",
-    "string-yes": "Oo",
-    "string-never-allow": "Huwag kailanman payagan ang shortcut na ito",
-    "string-yes-accesskey": "O",
-    "string-quicklaunch": "Quick launch bar",
-    "string-never-allow-wince": "Huwag kailanman papayagan",
-    "string-desktop": "Desktop",
-    "string-title-default": "Mga Gear - Lumikha ng Shortcut sa Desktop",
-    "string-location-query": "Lumikha ng mga shortcut sa mga sumusunod na lokasyon:"
-  },
-  "ta": {
-    "string-no": "இல்லை",
-    "string-header-desktop": "இந்தத் தளம் உங்கள் கணினியில் குறுக்கு வழியை உருவாக்க விரும்புகிறது. நீங்கள் இதை அனுமதிக்க வேண்டுமா?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "உங்கள் நிரல்களின் பட்டியலில் ஒரு குறுக்குவழியை உருவாக்க இந்த வலைத்தளம் முயற்சிக்கிறது. இதனை அனுமதிக்க விரும்புகிறீர்களா?",
-    "string-title-simple": "அப்ளிகேஷன் குறுக்குவழியை உருவாக்கு",
-    "string-ok-accesskey": "O",
-    "string-ok": "சரி",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "ரத்துசெய்",
-    "string-startmenu": "ஸ்டார்ட் மெனு",
-    "string-yes": "ஆம்",
-    "string-never-allow": "இந்த குறுக்குவழியை எப்போதும் அனுமதிக்க வேண்டாம்",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "குவிக் லான்ச் பார்",
-    "string-never-allow-wince": "எப்போதும் அனுமதிக்காதே",
-    "string-desktop": "டெஸ்க்டாப்",
-    "string-title-default": "Gears - டெஸ்க்டாப் குறுக்குவழியை உருவாக்கு",
-    "string-location-query": "பின்வரும் இடத்தில் குறுக்கு வழியை உருவாக்கவும்:"
-  },
-  "fr": {
-    "string-no": "Non",
-    "string-header-desktop": "Autorisez-vous la création par ce site Web d'un raccourci sur votre ordinateur ?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Ce site Web souhaite créer un raccourci dans votre liste de programmes. Autorisez-vous cette opération ?",
-    "string-title-simple": "Créer des raccourcis d'applications",
-    "string-ok-accesskey": "K",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "U",
-    "string-cancel": "Annuler",
-    "string-startmenu": "Menu Démarrer",
-    "string-yes": "Oui",
-    "string-never-allow": "Ne jamais autoriser ce raccourci",
-    "string-yes-accesskey": "O",
-    "string-quicklaunch": "Barre de lancement rapide",
-    "string-never-allow-wince": "Ne jamais autoriser",
-    "string-desktop": "Bureau",
-    "string-title-default": "Google Gears - Créer un raccourci sur le Bureau",
-    "string-location-query": "Créer des raccourcis aux emplacements suivants :"
-  },
-  "bg": {
-    "string-no": "Не",
-    "string-header-desktop": "Прави се опит за създаване на пряк път към този уебсайт на компютъра ви. Разрешавате ли?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Този уебсайт иска да създаде пряк път в списъка ви с програми. Разрешавате ли?",
-    "string-title-simple": "Създаване на преки пътища към приложението",
-    "string-ok-accesskey": "О",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "С",
-    "string-cancel": "Отказ",
-    "string-startmenu": "Меню „Старт“",
-    "string-yes": "Да",
-    "string-never-allow": "Създаването на този пряк път не се разрешава изобщо",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "Лента за бързо стартиране",
-    "string-never-allow-wince": "Не се разрешава изобщо",
-    "string-desktop": "Работен плот",
-    "string-title-default": "Gears - Създаване на пряк път на работния плот",
-    "string-location-query": "Преки пътища да бъдат създадени на следните места:"
-  },
-  "uk": {
-    "string-no": "Ні",
-    "string-header-desktop": "Цей веб-сайт хоче створити ярлик на Вашому комп’ютері. Дозволити?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Цей веб-сайт намагається створити ярлик у списку програм. Дозволити це?",
-    "string-title-simple": "Створіть ярлики програм",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Скасувати",
-    "string-startmenu": "Меню \"Пуск\"",
-    "string-yes": "Так",
-    "string-never-allow": "Ніколи не дозволяти створювати цей ярлик",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "Панель \"Швидкий запуск\"",
-    "string-never-allow-wince": "Ніколи не дозволяти",
-    "string-desktop": "Робочий стіл",
-    "string-title-default": "Gears – Створення ярликів на робочому столі",
-    "string-location-query": "Створіть ярлики у таких розташуваннях:"
-  },
-  "hr": {
-    "string-no": "Ne",
-    "string-header-desktop": "Ova web-lokacija želi stvoriti prečac na Vašem računalu. Dopuštate li taj postupak?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Ova web-lokacija želi stvoriti prečac na Vašem popisu programa. Dopuštate li taj postupak?",
-    "string-title-simple": "Stvori prečace za aplikacije",
-    "string-ok-accesskey": "K",
-    "string-ok": "U redu",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Odustani",
-    "string-startmenu": "Izbornik Start",
-    "string-yes": "Da",
-    "string-never-allow": "Nikad ne dopuštaj ovaj prečac",
-    "string-yes-accesskey": "D",
-    "string-quicklaunch": "Traka za brzo pokretanje",
-    "string-never-allow-wince": "Ne dopuštaj",
-    "string-desktop": "Radna površina",
-    "string-title-default": "Gears – Napravi prečac na radnoj površini",
-    "string-location-query": "Stvori prečace na sljedećim mjestima:"
-  },
-  "bn": {
-    "string-no": "না",
-    "string-header-desktop": "এই ওয়েবসাইটটা আপনার কম্পিউটারে একটি শর্টকার্ট তৈরি করতে চায় ׀ আপনি কি এটার অনুমতি দিতে চান?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "এই ওয়েবসাইটটি আপনার প্রোগ্রামের তালিকাতে একটি শর্টকাট তৈরি করতে চায়৷ আপনি কি এটি মঞ্জুরি দিতে চান?",
-    "string-title-simple": "অ্যাপ্লিকেশান শর্টকার্ট তৈরি করুন",
-    "string-ok-accesskey": "O",
-    "string-ok": "ওকে",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "বাতিল",
-    "string-startmenu": "সূচনা মেনু",
-    "string-yes": "হ্যাঁ",
-    "string-never-allow": "কখনই এই শর্টকাটটির মঞ্জুরি দেবেন না",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "দ্রুত লঞ্চ দণ্ড",
-    "string-never-allow-wince": "কখনই মঞ্জুরি দেবেন না",
-    "string-desktop": "ডেস্কটপ",
-    "string-title-default": "Gears- ডেস্কটপ শর্টকাট তৈরি করুন",
-    "string-location-query": "এই যায়গাগুলিতে জন্য শর্টকার্টগুলি তৈরি করুন:"
-  },
-  "en-US": {
-    "string-no": "No",
-    "string-header-desktop": "This website wants to create a shortcut on your computer. Do you want to allow this?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "This website wants to create a shortcut in your list of programs. Do you want to allow this?",
-    "string-title-simple": "Create Application Shortcuts",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Cancel",
-    "string-startmenu": "Start menu",
-    "string-yes": "Yes",
-    "string-never-allow": "Never allow this shortcut",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "Quick launch bar",
-    "string-never-allow-wince": "Never allow",
-    "string-desktop": "Desktop",
-    "string-title-default": "Gears - Create Desktop Shortcut",
-    "string-location-query": "Create shortcuts in the following locations:"
-  },
-  "da": {
-    "string-no": "Nej",
-    "string-header-desktop": "Dette websted ønsker at oprette en genvej på din computer. Vil du tillade det?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Dette websted ønsker at oprette en genvej i din liste med programmer. Vil du tillade det?",
-    "string-title-simple": "Opret genveje til programmer",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "A",
-    "string-cancel": "Annuller",
-    "string-startmenu": "Startmenu",
-    "string-yes": "Ja",
-    "string-never-allow": "Tillad aldrig denne genvej",
-    "string-yes-accesskey": "J",
-    "string-quicklaunch": "Værktøjslinjen Hurtig start",
-    "string-never-allow-wince": "Giv aldrig tilladelse",
-    "string-desktop": "Skrivebord",
-    "string-title-default": "Gears – opret genvej på skrivebordet",
-    "string-location-query": "Opret genveje følgende steder:"
-  },
-  "fa": {
-    "string-no": "خیر",
-    "string-header-desktop": "این وب سایت می خواهد میانبری در رایانه شما ایجاد کند. آیا اجازه می دهید؟",
-    "string-no-accesskey": "N",
-    "string-header-wince": "این وب سایت می خواهد یك میانبر در ليست برنامه های شما ایجاد کند. آیا اجازه می دهید؟",
-    "string-title-simple": "ايجاد ميانبرهای برنامه",
-    "string-ok-accesskey": "O",
-    "string-ok": "تأیید",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "لغو",
-    "string-startmenu": "منوی شروع",
-    "string-yes": "بله",
-    "string-never-allow": "هرگز اجازه ندهید این میانبر ایجاد شود.",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "ميله راه اندازی سريع",
-    "string-never-allow-wince": "هرگز اجازه داده نشود",
-    "string-desktop": "دسک تاپ",
-    "string-title-default": "Gears- ایجاد میانبر در دسک تاپ",
-    "string-location-query": "ایجاد میانبر در محل های زیر:"
-  },
-  "hi": {
-    "string-no": "नहीं",
-    "string-header-desktop": "यह वेबसाइट आपके कंप्यूटर पर एक शॉर्टकट बनाना चाहती है. क्या आप इसकी अनुमति देना चाहते हैं?",
-    "string-no-accesskey": "नहीं",
-    "string-header-wince": "यह वेबसाइट आपके प्रोग्रामों की सूची में शॉर्टकट बनाना चाहती है. क्या आप इसकी अनुमति देना चाहते हैं?",
-    "string-title-simple": "अनुप्रयोग शार्टकट बनाएँ",
-    "string-ok-accesskey": "ठीक",
-    "string-ok": "ठीक",
-    "string-cancel-accesskey": "रद्द करें",
-    "string-cancel": "रद्द करें",
-    "string-startmenu": "प्रारंभ मेनू",
-    "string-yes": "हाँ",
-    "string-never-allow": "इस शॉर्टकट को कभी अनुमति न दें",
-    "string-yes-accesskey": "हाँ",
-    "string-quicklaunch": "त्वरित लॉन्च पट्टिका",
-    "string-never-allow-wince": "कभी अनुमति न दें",
-    "string-desktop": "डेस्कटॉप",
-    "string-title-default": "Gears - डेस्कटॉप शॉर्टकट बनाएँ",
-    "string-location-query": "निम्न स्थानों पर शॉर्टकट बनाएँ:"
-  },
-  "pt-BR": {
-    "string-no": "Não",
-    "string-header-desktop": "Este site deseja criar um atalho no seu computador. Gostaria de permitir isso?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Este site deseja criar um atalho na sua lista de programas. Deseja permitir isso?",
-    "string-title-simple": "Criar atalhos do aplicativo",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Cancelar",
-    "string-startmenu": "Menu Iniciar",
-    "string-yes": "Sim",
-    "string-never-allow": "Nunca permitir este atalho",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "Barra de inicialização rápida",
-    "string-never-allow-wince": "Nunca permitir",
-    "string-desktop": "Área de trabalho",
-    "string-title-default": "Gears - Criar atalho na área de trabalho",
-    "string-location-query": "Criar atalhos nos seguintes locais:"
-  },
-  "fi": {
-    "string-no": "Ei",
-    "string-header-desktop": "Tämä sivusto haluaa luoda pikakuvakkeen tietokoneellesi. Sallitko pikakuvakkeen luomisen?",
-    "string-no-accesskey": "E",
-    "string-header-wince": "Tämä sivusto haluaa luoda pikakuvakkeen ohjelmaluetteloosi. Sallitko pikakuvakkeen luomisen?",
-    "string-title-simple": "Luo sovelluksista pikakuvakkeita",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "P",
-    "string-cancel": "Peruuta",
-    "string-startmenu": "Aloitusvalikko",
-    "string-yes": "Kyllä",
-    "string-never-allow": "Älä koskaan salli tätä pikakuvaketta",
-    "string-yes-accesskey": "K",
-    "string-quicklaunch": "Pikakäynnistyspalkki",
-    "string-never-allow-wince": "Älä koskaan salli",
-    "string-desktop": "Työpöytä",
-    "string-title-default": "Gears - Luo pikakuvake työpöydälle",
-    "string-location-query": "Luo pikakuvakkeet seuraaviin kohteisiin:"
-  },
-  "hu": {
-    "string-no": "Nem",
-    "string-header-desktop": "Ez a webhely parancsikont szeretne létrehozni a számítógépen. Engedélyezi ezt?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Ez a webhely egy parancsikont kíván létrehozni a programlistában. Engedélyezi ezt?",
-    "string-title-simple": "Alkalmazásindító parancsikonok létrehozása",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "M",
-    "string-cancel": "Mégse",
-    "string-startmenu": "Start menü",
-    "string-yes": "Igen",
-    "string-never-allow": "Soha ne engedélyezze ezt a parancsikont",
-    "string-yes-accesskey": "I",
-    "string-quicklaunch": "Gyorsindítás eszköztár",
-    "string-never-allow-wince": "Soha ne engedélyezze",
-    "string-desktop": "Asztal",
-    "string-title-default": "Szinkron - Asztali parancsikon létrehozása",
-    "string-location-query": "Parancsikonok létrehozása a következő helyeken:"
-  },
-  "ja": {
-    "string-no": "いいえ",
-    "string-header-desktop": "デスクトップにこのサイトのショートカットが作成されます。許可しますか？",
-    "string-no-accesskey": "N",
-    "string-header-wince": "プログラム一覧にこのサイトのショートカットが作成されます。許可しますか？",
-    "string-title-simple": "アプリケーション ショートカットを作成",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "キャンセル",
-    "string-startmenu": "スタート メニュー",
-    "string-yes": "はい",
-    "string-never-allow": "このショートカットを常に拒否する",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "クイック起動バー",
-    "string-never-allow-wince": "許可しない",
-    "string-desktop": "デスクトップ",
-    "string-title-default": "Gears - デスクトップ ショートカットを作成",
-    "string-location-query": "ショートカットを作成する場所"
-  },
-  "he": {
-    "string-no": "לא",
-    "string-header-desktop": "אתר אינטרנט זה רוצה ליצור קיצור דרך במחשב שלך. האם ברצונך לאפשר זאת?",
-    "string-no-accesskey": "לא",
-    "string-header-wince": "אתר אינטרנט זה מעוניין ליצור קיצור דרך ברשימת התוכניות שלך. האם ברצונך לאפשר זאת?",
-    "string-title-simple": "צור קיצורי דרך ליישומים",
-    "string-ok-accesskey": "אישור",
-    "string-ok": "אישור",
-    "string-cancel-accesskey": "ביטול",
-    "string-cancel": "ביטול",
-    "string-startmenu": "תפריט 'התחל'",
-    "string-yes": "כן",
-    "string-never-allow": "לעולם אל תאפשר קיצור דרך זה",
-    "string-yes-accesskey": "כן",
-    "string-quicklaunch": "סרגל הפעלה מהירה",
-    "string-never-allow-wince": "לעולם אל תאפשר",
-    "string-desktop": "שולחן עבודה",
-    "string-title-default": "Gears - צור קיצור דרך בשולחן העבודה",
-    "string-location-query": "צור קיצורי דרך במיקומים הבאים:"
-  },
-  "te": {
-    "string-no": "వద్దు",
-    "string-header-desktop": "ఈ వెబ్ సైట్ మీ కమ్ప్యుటర్ పైన షార్ట్ కట్స్ సృష్టించాలని అనుకుంటుంది . ఇది మీరు కొనసాగించాలని అనుకుంటున్నారా?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "ఈ వెబ్‌సైట్ మీ ప్రోగ్రామ్‌ల జాబితాలో ఒక సత్వర మార్గాన్ని సృష్టించదలిచింది. మీరు దీనిని అనుమతించదలిచారా?",
-    "string-title-simple": "అప్ప్లికేషన్ల షార్ట్కట్లు సృష్టించు",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "రద్దు చెయ్యి",
-    "string-startmenu": "స్టార్ట్ మెన్యు",
-    "string-yes": "అవును",
-    "string-never-allow": "ఈ సత్వర మార్గాన్ని ఎప్పుడూ అనుమతించవద్దు",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "శీఘ్ర లాంచ్ బార్",
-    "string-never-allow-wince": "ఎప్పుడూ అనుమతించవద్దు",
-    "string-desktop": "డెస్క్ టాప్",
-    "string-title-default": "Gears -డెస్క్ టాప్ షార్ట్ కట్ని సృష్టించు",
-    "string-location-query": "ఈ లోకేషన్స్ లో షార్ట్ కట్స్ సృష్టించండి:"
-  },
-  "pt-PT": {
-    "string-no": "Não",
-    "string-header-desktop": "Este Web site pretende criar um atalho no seu computador. Pretende permitir esta acção?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Este Web site pretende criar um atalho na sua lista de programas. Pretende permitir esta acção?",
-    "string-title-simple": "Criar atalhos para as aplicações",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Cancelar",
-    "string-startmenu": "Menu Iniciar",
-    "string-yes": "Sim",
-    "string-never-allow": "Nunca permitir este atalho",
-    "string-yes-accesskey": "S",
-    "string-quicklaunch": "Barra de iniciação rápida",
-    "string-never-allow-wince": "Nunca permitir",
-    "string-desktop": "Ambiente de trabalho",
-    "string-title-default": "Gears - Criar atalho no ambiente de trabalho",
-    "string-location-query": "Criar atalhos nas seguintes localizações:"
-  },
-  "sr": {
-    "string-no": "Не",
-    "string-header-desktop": "Овај веб сајт жели да направи пречицу на вашем рачунару. Да ли желите да то дозволите?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Овај веб сајт жели да направи пречицу на листи програма. Да ли желите да то дозволите?",
-    "string-title-simple": "Креирај пречице апликација",
-    "string-ok-accesskey": "P",
-    "string-ok": "Потврди",
-    "string-cancel-accesskey": "О",
-    "string-cancel": "Откажи",
-    "string-startmenu": "Старт мени",
-    "string-yes": "Да",
-    "string-never-allow": "Никада не дозволи ову пречицу",
-    "string-yes-accesskey": "D",
-    "string-quicklaunch": "Трака за брзо покретање",
-    "string-never-allow-wince": "Никада не дозволи",
-    "string-desktop": "Радна површина",
-    "string-title-default": "Gears - направи пречицу на радној површини",
-    "string-location-query": "Hаправи пречице на следећим локацијама:"
-  },
-  "ko": {
-    "string-no": "아니요",
-    "string-header-desktop": "웹사이트에서 사용자 컴퓨터에 바로가기를 만들려고 합니다. 허용하시겠습니까?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "웹사이트에서 프로그램 목록에 바로가기를 만들려고 합니다. 바로가기를 만드시겠습니까?",
-    "string-title-simple": "애플리케이션 바로가기 만들기",
-    "string-ok-accesskey": "O",
-    "string-ok": "확인",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "취소",
-    "string-startmenu": "시작 메뉴",
-    "string-yes": "예",
-    "string-never-allow": "바로가기를 허용하지 않음",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "빠른실행 표시줄",
-    "string-never-allow-wince": "허용 안함",
-    "string-desktop": "바탕화면",
-    "string-title-default": "Gears - 바탕화면 바로가기 만들기",
-    "string-location-query": "바로가기 생성 위치:"
-  },
-  "sv": {
-    "string-no": "Nej",
-    "string-header-desktop": "Webbplatsen försöker skapa en genväg i datorn. Vill du tillåta det?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Den här webbplatsen vill skapa en genväg i din programlista. Vill du tillåta det?",
-    "string-title-simple": "Skapa programgenvägar",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "A",
-    "string-cancel": "Avbryt",
-    "string-startmenu": "Start-meny",
-    "string-yes": "Ja",
-    "string-never-allow": "Tillåt aldrig den här genvägen",
-    "string-yes-accesskey": "J",
-    "string-quicklaunch": "Fältet Snabbstart",
-    "string-never-allow-wince": "Tillåt aldrig",
-    "string-desktop": "Skrivbord",
-    "string-title-default": "Gears - Skapa genväg på skrivbordet",
-    "string-location-query": "Skapa genvägar på följande platser:"
-  },
-  "ur": {
-    "string-no": "نہیں",
-    "string-header-desktop": "یہ ویب سائٹ آپ کے کمپیوٹر پر ایک شارٹ کٹ بنانا چاہتی ہے۔ کیا آپ اس کی اجازت دیں گے؟",
-    "string-no-accesskey": "نہیں",
-    "string-header-wince": "یہ ویب سائٹ آپ کے پروگرامز کی فہرست میں درج ذیل شارٹ کٹ بنانا چاہتی ہے۔ کیا آپ اس کی اجازت دیں گے؟",
-    "string-title-simple": "اطلاق کا شارٹ کٹ بنائیں",
-    "string-ok-accesskey": "O",
-    "string-ok": "ٹھیک ہے",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "منسوخ",
-    "string-startmenu": "اسٹارٹ مینو",
-    "string-yes": "ہاں",
-    "string-never-allow": "کبھی بھی اس شارٹ کٹ کی اجازت نہ دیں۔",
-    "string-yes-accesskey": "ہاں",
-    "string-quicklaunch": "فوری شروع کرنے کا بار",
-    "string-never-allow-wince": "کبھی بھی اجازت نہ دیں",
-    "string-desktop": "ڈیسک ٹاپ",
-    "string-title-default": "گیئرز - ڈیسک ٹاپ شارٹ کٹ بنائیں",
-    "string-location-query": "درج ذیل مقامات پر شارٹ کٹ بنائیں:"
-  },
-  "sk": {
-    "string-no": "Nie",
-    "string-header-desktop": "Táto webová lokalita chce vytvoriť odkaz v počítači. Chcete to povoliť?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Táto webová lokalita chce vytvoriť odkaz v zozname programov. Chcete to povoliť?",
-    "string-title-simple": "Vytvorte odkazy na aplikácie",
-    "string-ok-accesskey": "K",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "R",
-    "string-cancel": "Zrušiť",
-    "string-startmenu": "Ponuka Štart",
-    "string-yes": "Áno",
-    "string-never-allow": "Nikdy nepovoliť tento odkaz",
-    "string-yes-accesskey": "O",
-    "string-quicklaunch": "Panel s nástrojmi Rýchly prístup",
-    "string-never-allow-wince": "Nikdy nepovoliť",
-    "string-desktop": "Pracovná plocha",
-    "string-title-default": "Gears - Vytvoriť odkaz na pracovnej ploche",
-    "string-location-query": "Vytvoriť odkazy na nasledujúcich miestach:"
-  },
-  "zh-CN": {
-    "string-no": "否",
-    "string-header-desktop": "该网站要在您的计算机上创建快捷键。 是否允许该操作？",
-    "string-no-accesskey": "N",
-    "string-header-wince": "该网站要在您的程序列表中创建快捷方式。 是否允许该操作？",
-    "string-title-simple": "创建应用程序快捷键",
-    "string-ok-accesskey": "O",
-    "string-ok": "确定",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "取消",
-    "string-startmenu": "开始菜单",
-    "string-yes": "是",
-    "string-never-allow": "永不允许该快捷方式",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "快速启动栏",
-    "string-never-allow-wince": "永不允许",
-    "string-desktop": "桌面",
-    "string-title-default": "Gears - 创建桌面快捷方式",
-    "string-location-query": "在以下位置创建快捷键："
-  },
-  "de": {
-    "string-no": "Nein",
-    "string-header-desktop": "Für diese Website soll eine Verknüpfung auf Ihrem Computer erstellt werden. Möchten Sie dies zulassen?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Für diese Website soll eine Verknüpfung in Ihrer Programmliste erstellt werden. Möchten Sie dies zulassen?",
-    "string-title-simple": "Anwendungsverknüpfungen erstellen",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "A",
-    "string-cancel": "Abbrechen",
-    "string-startmenu": "Startmenü",
-    "string-yes": "Ja",
-    "string-never-allow": "Diese Verknüpfung nie zulassen",
-    "string-yes-accesskey": "J",
-    "string-quicklaunch": "Schnellstartleiste",
-    "string-never-allow-wince": "Nie zulassen",
-    "string-desktop": "Desktop",
-    "string-title-default": "Gears - Desktopverknüpfung erstellen",
-    "string-location-query": "Verknüpfungen unter folgenden Speicherpfaden erstellen:"
-  },
-  "pl": {
-    "string-no": "Nie",
-    "string-header-desktop": "Ta witryna internetowa chce utworzyć skrót na Twoim komputerze. Czy chcesz na to zezwolić?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "Ta witryna chce utworzyć skrót na Twojej liście programów. Czy chcesz na to zezwolić?",
-    "string-title-simple": "Utwórz skróty do aplikacji",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "A",
-    "string-cancel": "Anuluj",
-    "string-startmenu": "Menu Start",
-    "string-yes": "Tak",
-    "string-never-allow": "Nigdy nie zezwalaj na ten skrót",
-    "string-yes-accesskey": "T",
-    "string-quicklaunch": "Pasek szybkiego uruchamiania",
-    "string-never-allow-wince": "Nigdy nie zezwalaj",
-    "string-desktop": "Pulpit",
-    "string-title-default": "Gears — utwórz skrót na pulpicie",
-    "string-location-query": "Utwórz skróty w następujących lokalizacjach:"
-  },
-  "ms": {
-    "string-no": "Tidak",
-    "string-header-desktop": "Laman web ini mahu membuat pintasan pada komputer anda. Adakah anda membenarkannya?",
-    "string-no-accesskey": "T",
-    "string-header-wince": "Laman web ini mahu membuat pintasan dalam senarai atur cara anda. Adakah anda hendak membenarkannya?",
-    "string-title-simple": "Buat Pintasan Aplikasi",
-    "string-ok-accesskey": "O",
-    "string-ok": "OK",
-    "string-cancel-accesskey": "B",
-    "string-cancel": "Batal",
-    "string-startmenu": "Menu mula",
-    "string-yes": "Ya",
-    "string-never-allow": "Jangan sekali-kali benarkan pintasan ini",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "Bar lancar cepat",
-    "string-never-allow-wince": "Jangan sekali-kali benarkan",
-    "string-desktop": "Desktop",
-    "string-title-default": "Gear - Buat Pintasan Desktop",
-    "string-location-query": "Buat pintasan dalam lokasi yang berikut:"
-  },
-  "sl": {
-    "string-no": "Ne",
-    "string-header-desktop": "To spletno mesto želi v vašem računalniku ustvariti bližnjico. Ali želite to dejanje dovoliti?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "To spletno mesto skuša na seznamu programov ustvariti bližnjico. Ali želite to dejanje dovoliti?",
-    "string-title-simple": "Ustvarite bližnjice za programe",
-    "string-ok-accesskey": "O",
-    "string-ok": "V redu",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "Prekliči",
-    "string-startmenu": "Meni »Start«",
-    "string-yes": "Da",
-    "string-never-allow": "Nikoli ne dovoli te bližnjice",
-    "string-yes-accesskey": "D",
-    "string-quicklaunch": "Vrstica za hitri zagon",
-    "string-never-allow-wince": "Nikoli ne dovoli",
-    "string-desktop": "Namizje",
-    "string-title-default": "Gears – Ustvarjanje bližnjice na namizju",
-    "string-location-query": "Ustvari bližnjice na teh mestih:"
-  },
-  "mr": {
-    "string-no": "नाही",
-    "string-header-desktop": "ही वेबसाइट आपल्या संगणकावर शॉर्टकट तयार करू इच्छिते. यास आपली अनुमती आहे?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "ही वेबसाइट आपल्या प्रोग्राम्स सूचीमध्ये एक शॉर्टकट तयार करू इच्छित आहे. आपण यास परवानगी देऊ इच्छिता काय?",
-    "string-title-simple": "एप्लिकेशन शॉर्टकट तयार करा",
-    "string-ok-accesskey": "O",
-    "string-ok": "ओके",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "रद्द करा",
-    "string-startmenu": "स्टार्ट मेनू",
-    "string-yes": "होय",
-    "string-never-allow": "या शॉर्टकटला कधीही परवानगी देऊ नये",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "क्विक लाँच बार",
-    "string-never-allow-wince": "कधीही परवानगी देऊ नये",
-    "string-desktop": "डेस्कटॉप",
-    "string-title-default": "Gears - डेस्कटॉप शॉर्टकट तयार करा",
-    "string-location-query": "खालील स्थानांवर शॉर्टकट तयार करा:"
-  },
-  "or": {
-    "string-no": "ନା",
-    "string-header-desktop": "ଏହି ୱେବସାଇଟ୍ ଆପଣଙ୍କ କମ୍ପ୍ୟୁଟରରେ ଏକ ସର୍ଟକଟ ସୃଷ୍ଟି କରିବାକୁ ଚାହୁଁଛି ଆପଣ ଏହାକୁ ଅନୁମତି ଦେବାକୁ ଚାହୁଁଛନ୍ତି ?",
-    "string-no-accesskey": "N",
-    "string-header-wince": "ଏହି ୱେବସାଇଟ୍ ଆପଣଙ୍କର ପ୍ରୋଗ୍ରାମ୍ ତାଲିକାରେ ଏକ ସର୍ଟକଟ୍ ସୃଷ୍ଟି କରିବାକୁ ଚାହୁଁଛି । ଆପଣ ଏହାକୁ ଅନୁମତି କରିବାକୁ ଚାହୁଁଛନ୍ତି କି?",
-    "string-title-simple": "ଅନୁପ୍ରୟୋଗ ସର୍ଟକଟଗୁଡିକ ସୃଷ୍ଟି କରନ୍ତୁ",
-    "string-ok-accesskey": "O",
-    "string-ok": "ଓକେ",
-    "string-cancel-accesskey": "C",
-    "string-cancel": "ବାତିଲ୍",
-    "string-startmenu": "ଷ୍ଟାର୍ଟ ମେନୁ",
-    "string-yes": "ହଁ",
-    "string-never-allow": "ଏହି ସର୍ଟକଟ୍ କେବେ ମଧ୍ୟ ଅନୁମତି କରନ୍ତୁ ନାହିଁ",
-    "string-yes-accesskey": "Y",
-    "string-quicklaunch": "କୁଇକ୍ ଲଞ୍ଚ୍ ବାର୍",
-    "string-never-allow-wince": "କେବେ ମଧ୍ୟ ଅନୁମତି କରନ୍ତୁ ନାହିଁ",
-    "string-desktop": "ଡେସ୍କଟପ୍",
-    "string-title-default": "Gears - ଡେସ୍କଟପ୍ ସର୍ଟକଟ୍ ସୃଷ୍ଟି କରନ୍ତୁ",
-    "string-location-query": "ନିମ୍ନ ଅବସ୍ଥାନ ଗୁଡିକରେ ସର୍ଟକଟ ସୃଷ୍ଟି କରନ୍ତୁ:"
-  }
-};
-
-// Insert all localized strings for the specified locale into the div or span
-// matching the id.
-function loadI18nStrings(locale) {
-  var rtl_languages = ['he', 'ar', 'fa', 'ur'];
-
-  if (!locale) {
-    locale = 'en-US';
-  } else {
-    if (!localized_strings[locale]) {
-      // For xx-YY locales, determine what the base locale is.
-      var base_locale = locale.split('-')[0];
-
-      if (localized_strings[base_locale]) {
-        locale = base_locale;
-      } else {
-        locale = 'en-US';
-      }
-    }
-  }
-
-  var strings = localized_strings[locale];
-
-  // If the specified locale is an right to left language, change the direction
-  // of the page.
-  for (index in rtl_languages) {
-    if (locale == rtl_languages[index]) {
-      document.body.dir = "rtl";
-      break;
-    }
-  }
-
-  // Copy each string to the proper UI element, if it exists.
-  for (name in strings) {
-    if (name == 'string-html-title') {
-      if (!browser.ie_mobile) {
-        // IE Mobile dialogs don't have a title bar.
-        // Furthermore, document.title is undefined in IE Mobile on WinMo 5.
-        // It's also impossible to add properties to the window object.
-        // (see http://code.google.com/apis/gears/mobile.html)
-        document.title = strings[name];
-      }
-    } else {
-      var element = dom.getElementById(name);
-      if (element) {
-        element.innerHTML = strings[name];
-      }
-    }
-  }
-}
-
-
-</script>
-
-<script>
-  var debug = false;
-  var dialogMinHeight = 200;
-
-  // We currently only support custom locations for desktop windows.
-  var locationsEnabled = browser.windows && !browser.ie_mobile;
-
-  var args;
-
-  if (debug) {
-    // Handy for debugging layout:
-    if (browser.ie_mobile) {
-      window.pie_dialog = new Object();
-      window.pie_dialog.IsSmartPhone = function() { return false; };
-      window.pie_dialog.SetCancelButton = function() {};
-      window.pie_dialog.SetButton = function() {};
-      window.pie_dialog.SetButtonEnabled = function() {};
-      window.pie_dialog.SetScriptContext = function() {};
-      window.pie_dialog.ResizeDialog = function() {};
-    }
-
-    args = {
-      locale: "en-US",
-      style: "simple",
-      name: "My Application",
-      link: "http://www.google.com/",
-      description: "This application does things does things!",
-      // description: "This application does things does things that do things that do things that do things that do things that do things that do things that do things that do things that do things that do things that do things that do things that do things that do things that do things that do things that do things that do things.",
-      icon16x16: "http://google-gears.googlecode.com/svn/trunk/gears/test/manual/shortcuts/16.png",
-      icon32x32: "http://google-gears.googlecode.com/svn/trunk/gears/test/manual/shortcuts/32.png",
-      icon48x48: "http://google-gears.googlecode.com/svn/trunk/gears/test/manual/shortcuts/48.png",
-      icon128x128: "http://google-gears.googlecode.com/svn/trunk/gears/test/manual/shortcuts/128.png"
-    };
-  } else {
-    args = getArguments();
-  }
-
-  loadI18nStrings(args.locale);
-
-  initDialog();
-  initLayout();
-  initShortcuts(args);
-  resizeDialogToFitContent(dialogMinHeight);
-
-  function initLayout() {
-    if (locationsEnabled) {
-      dom.getElementById("locations").style.display = "block";
-    }
-    
-    // Set up the rest of the layout. The details vary based on the layout style
-    // and the user agent (currently "simple" style only supported by desktop
-    // Gears).
-    if (isDefined(typeof args.style) && args.style == "simple") {
-      initSimpleStyle();
-    } else if (browser.ie_mobile) {
-      initPieStyle();
-    } else {
-      initDefaultStyle();
-    }
-
-    resetConfirmDisabledState();
-  }
-
-  function initSimpleStyle() {
-    document.title =
-        dom.getTextContent(dom.getElementById("string-title-simple"));
-    dom.getElementById("icon").parentNode.style.display = "none";
-    dom.getElementById("header").style.display = "none";
-    dom.getElementById("head").style.paddingBottom = "0";
-    dom.getElementById("deny-permanently-link").style.display = "none";
-    setButtonLabel("string-ok", "allow-button", "string-ok-accesskey");
-    setButtonLabel("string-cancel", "deny-button", "string-cancel-accesskey");
-
-    // Also check the desktop checkbox by default
-    dom.getElementById("location-desktop").checked = true;    
-
-    // Turn on the buttons. They are turned off by default for CustomButton, but
-    // simple style does not use custom button.
-    var buttons = document.getElementsByTagName("button");
-    for (var i = 0, button; button = buttons[i]; i++) {
-      button.className = "";
-      button.style.visibility = "visible";
-    }
-  }
-
-  function initPieStyle() {
-    // For PIE, we don't set a window title.
-    setElementContents("string-header-wince", "header");
-
-    if (window.pie_dialog.IsSmartPhone()) {
-      // On softkey-only devices we only use a regular link to trigger
-      // the "never-allow" action. For "allow" and "deny" we use only
-      // the softkey lables.
-      setElementContents("string-never-allow-wince", "deny-permanently-link");
-    } else {
-      // For touchscreen devices, we use buttons for all actions. Additionally,
-      // we also set the sofkey labels.
-      setButtonLabel("string-yes", "allow-button", "string-yes-accesskey");
-      setButtonLabel("string-no", "deny-button", "string-no-accesskey");
-      setButtonLabel("string-never-allow-wince", "deny-permanently-button");
-    }
-    // Set the softkey labels for both softkey-only and touchscreen UIs.
-    window.pie_dialog.SetButton(dom.getElementById("string-yes").innerText,
-                                "allowShortcutsTemporarily();");
-    window.pie_dialog.SetCancelButton(dom.getElementById("string-no").innerText);
-    // On PIE, the allow button is disabled by default.
-    // Why not just remove the disabled attribute?
-    // Because on WinCE, we need to also call
-    // window.pie_dialog.SetButtonEnabled(true); , which enables the right
-    // softkey button.
-    enableButton(dom.getElementById("allow-button"));
-  }
-
-  function initDefaultStyle() {
-    document.title =
-      dom.getTextContent(dom.getElementById("string-title-default"));
-    setElementContents("string-header-desktop", "header");
-    setButtonLabel("string-yes", "allow-button", "string-yes-accesskey");
-    setButtonLabel("string-no", "deny-button", "string-no-accesskey");
-    setElementContents("string-never-allow", "deny-permanently-link");
-
-    CustomButton.initializeAll();
-  }
-  
-  /**
-   * Populate the shortcuts UI based on the data passed in from C++.
-   */
-  function initShortcuts(shortcutData) {
-    var iconElement = dom.getElementById("shortcut-icon");
-    var nameElement = dom.getElementById("shortcut-name");
-    var descriptionElement = dom.getElementById("shortcut-description");
-    
-    loadImage(iconElement, pickIconToRender(shortcutData));
-    dom.setTextContent(nameElement, shortcutData.name);
-
-    if (isDefined(typeof shortcutData.description) &&
-        shortcutData.description) {
-      dom.setTextContent(descriptionElement, shortcutData.description);
-      descriptionElement.style.display = "block";
-    }
-
-    preloadIcons(shortcutData);
-  }
-
-  /**
-   * Picks the best icon to render in the UI.
-   */
-  function pickIconToRender(shortcutData) {
-    if (shortcutData.icon32x32) { // ideal size
-      return shortcutData.icon32x32;
-    } else if (shortcutData.icon48x48) { // better to pick one that is too big
-      return shortcutData.icon48x48;
-    } else if (shortcutData.icon128x128) {
-      return shortcutData.icon128x128;
-    } else {
-      return shortcutData.icon16x16; // pick too small icon last
-    }
-  }
-
-  /**
-   * Preloads the icons for a shortcut so that later when they are requested
-   * from C++, they will be fast.
-   */
-  function preloadIcons(shortcutData) {
-    for (var prop in shortcutData) {
-      if (prop.indexOf("icon") == 0) {
-        var img = new Image();
-        img.src = shortcutData[prop];
-      }
-    }
-  }
-
-  /**
-   * Sets the confirm button's disabled state depending on whether there is
-   * at least one checkbox checked.
-   */  
-  function resetConfirmDisabledState() {
-    if (!locationsEnabled) {
-      return;
-    }
-    
-    var allowButton = dom.getElementById("allow-button");
-    var checkboxes =
-        dom.getElementById("locations").getElementsByTagName("input");
-
-    for (var i = 0, checkbox; checkbox = checkboxes[i]; i++) {
-      if (checkbox.checked) {
-        enableButton(allowButton);
-        return;
-      }
-    }
-    
-    disableButton(allowButton);
-  }
-
-  /**
-   * Called when the user clicks the allow button.
-   */
-  function allowShortcutsTemporarily() {
-    var result = {
-      allow: true,
-      locations: 0
-    };
-    
-    if (locationsEnabled) {
-      var checkboxes =
-          dom.getElementById("locations").getElementsByTagName("input");
-      for (var i = 0, checkbox; checkbox = checkboxes[i]; i++) {
-        if (checkbox.checked) {
-          result.locations |= parseInt(checkbox.value);
-        }
-      }
-    }
-    saveAndClose(result);
-  }
-
-  /**
-   * Called when the user clicks the no button.
-   */
-  function denyShortcutsTemporarily() {
-    saveAndClose(null); // default behavior is to deny all
-  }
-  
-  /**
-   * Called when the user clicks the "Never allow this shortcut" link.
-   */
-  function denyShortcutPermanently() {
-    saveAndClose({
-      allow: false
-    });
-  }
-
-  /**
-   * Set the contents of the element specified by destID from from that of the
-   * element specified by sourceID.
-   */
-  function setElementContents(sourceID, destID) {
-    var sourceElem = dom.getElementById(sourceID);
-    var destElem = dom.getElementById(destID);
-    if (isDefined(typeof sourceElem) && isDefined(typeof destElem)) {
-      destElem.innerHTML = sourceElem.innerHTML;
-    }
-  }
-</script>
-</html>
diff --git a/assets/plugins/gears-0.5.2.0/dummy b/assets/plugins/gears-0.5.2.0/dummy
new file mode 100644
index 0000000..50f9ab9
--- /dev/null
+++ b/assets/plugins/gears-0.5.2.0/dummy
@@ -0,0 +1 @@
+This file is used to ensure this subdirectory is created.
diff --git a/assets/plugins/gears.so b/assets/plugins/gears.so
index 1d0ba0e..4a1aff2 100644
--- a/assets/plugins/gears.so
+++ b/assets/plugins/gears.so
Binary files differ
diff --git a/res/drawable/dialog_frame.9.png b/res/drawable/dialog_frame.9.png
deleted file mode 100644
index 3d41e2f..0000000
--- a/res/drawable/dialog_frame.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/gears.png b/res/drawable/gears.png
new file mode 100644
index 0000000..bd0fb08
--- /dev/null
+++ b/res/drawable/gears.png
Binary files differ
diff --git a/res/drawable/gears_back.png b/res/drawable/gears_back.png
new file mode 100755
index 0000000..5ce50eb
--- /dev/null
+++ b/res/drawable/gears_back.png
Binary files differ
diff --git a/res/drawable/gears_button.xml b/res/drawable/gears_button.xml
new file mode 100755
index 0000000..ec8cebb
--- /dev/null
+++ b/res/drawable/gears_button.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2008, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+  <item android:state_focused="true" android:state_pressed="false"
+    android:state_enabled="true"
+    android:drawable="@drawable/gears_button_selected" />
+  <item android:state_enabled="true" android:state_pressed="true"
+    android:drawable="@drawable/gears_button_pressed" />
+  <item android:state_enabled="true" android:state_focused="false"
+    android:state_pressed="false"
+    android:drawable="@drawable/gears_button_default" />
+  <item android:drawable="@drawable/gears_button_default" />
+</selector>
diff --git a/res/drawable/gears_button_default.9.png b/res/drawable/gears_button_default.9.png
new file mode 100644
index 0000000..3b1d065
--- /dev/null
+++ b/res/drawable/gears_button_default.9.png
Binary files differ
diff --git a/res/drawable/gears_button_pressed.9.png b/res/drawable/gears_button_pressed.9.png
new file mode 100644
index 0000000..7b56794
--- /dev/null
+++ b/res/drawable/gears_button_pressed.9.png
Binary files differ
diff --git a/res/drawable/gears_button_selected.9.png b/res/drawable/gears_button_selected.9.png
new file mode 100644
index 0000000..e1d5608
--- /dev/null
+++ b/res/drawable/gears_button_selected.9.png
Binary files differ
diff --git a/res/drawable/gears_file_audio.png b/res/drawable/gears_file_audio.png
new file mode 100755
index 0000000..ce897b6
--- /dev/null
+++ b/res/drawable/gears_file_audio.png
Binary files differ
diff --git a/res/drawable/gears_file_image.png b/res/drawable/gears_file_image.png
new file mode 100755
index 0000000..b140f84
--- /dev/null
+++ b/res/drawable/gears_file_image.png
Binary files differ
diff --git a/res/drawable/gears_file_unknown.png b/res/drawable/gears_file_unknown.png
new file mode 100755
index 0000000..23386f4
--- /dev/null
+++ b/res/drawable/gears_file_unknown.png
Binary files differ
diff --git a/res/drawable/gears_file_video.png b/res/drawable/gears_file_video.png
new file mode 100755
index 0000000..d876afb
--- /dev/null
+++ b/res/drawable/gears_file_video.png
Binary files differ
diff --git a/res/drawable/gears_folder.png b/res/drawable/gears_folder.png
new file mode 100755
index 0000000..ed31ba5
--- /dev/null
+++ b/res/drawable/gears_folder.png
Binary files differ
diff --git a/res/drawable/gears_icon_32x32.png b/res/drawable/gears_icon_32x32.png
new file mode 100644
index 0000000..f703f7f
--- /dev/null
+++ b/res/drawable/gears_icon_32x32.png
Binary files differ
diff --git a/res/drawable/gears_icon_48x48.png b/res/drawable/gears_icon_48x48.png
new file mode 100644
index 0000000..da5493b
--- /dev/null
+++ b/res/drawable/gears_icon_48x48.png
Binary files differ
diff --git a/res/drawable/gears_local_data.png b/res/drawable/gears_local_data.png
new file mode 100644
index 0000000..4c43456
--- /dev/null
+++ b/res/drawable/gears_local_data.png
Binary files differ
diff --git a/res/drawable/gears_location_data.png b/res/drawable/gears_location_data.png
new file mode 100644
index 0000000..f69ad75
--- /dev/null
+++ b/res/drawable/gears_location_data.png
Binary files differ
diff --git a/res/drawable/ic_browser_done.png b/res/drawable/ic_browser_done.png
deleted file mode 100644
index 3f30072..0000000
--- a/res/drawable/ic_browser_done.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_browser_down.png b/res/drawable/ic_browser_down.png
deleted file mode 100755
index e3747a7..0000000
--- a/res/drawable/ic_browser_down.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_browser_up.png b/res/drawable/ic_browser_up.png
deleted file mode 100755
index 6ea5a81..0000000
--- a/res/drawable/ic_browser_up.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_btn_close_panel.png b/res/drawable/ic_btn_close_panel.png
new file mode 100644
index 0000000..b6e1ce1
--- /dev/null
+++ b/res/drawable/ic_btn_close_panel.png
Binary files differ
diff --git a/res/drawable/ic_btn_find_next.png b/res/drawable/ic_btn_find_next.png
new file mode 100644
index 0000000..abdc247
--- /dev/null
+++ b/res/drawable/ic_btn_find_next.png
Binary files differ
diff --git a/res/drawable/ic_btn_find_prev.png b/res/drawable/ic_btn_find_prev.png
new file mode 100644
index 0000000..4e3da1d
--- /dev/null
+++ b/res/drawable/ic_btn_find_prev.png
Binary files differ
diff --git a/res/drawable/ic_menu_forward.png b/res/drawable/ic_menu_forward.png
deleted file mode 100644
index 0936fac..0000000
--- a/res/drawable/ic_menu_forward.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_search_browser.png b/res/drawable/ic_search_browser.png
deleted file mode 100644
index 9876117..0000000
--- a/res/drawable/ic_search_browser.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/map.xml b/res/drawable/map.xml
deleted file mode 100644
index 84d5903..0000000
--- a/res/drawable/map.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/res/drawable/checkbox.xml
-**
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_focused="true" android:drawable="@drawable/mapfocused"/>
-    <item android:drawable="@drawable/mapunfocused"/>
-</selector>
diff --git a/res/drawable/mapfocused.png b/res/drawable/mapfocused.png
deleted file mode 100644
index 83efcac..0000000
--- a/res/drawable/mapfocused.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/mapunfocused.png b/res/drawable/mapunfocused.png
deleted file mode 100644
index 736dc68..0000000
--- a/res/drawable/mapunfocused.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/urlbar_background.9.png b/res/drawable/urlbar_background.9.png
deleted file mode 100644
index 38583b3..0000000
--- a/res/drawable/urlbar_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/layout-land/gears_dialog.xml b/res/layout-land/gears_dialog.xml
new file mode 100644
index 0000000..f5cf969
--- /dev/null
+++ b/res/layout-land/gears_dialog.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2008, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  android:drawingCacheQuality="auto"
+  android:layout_width="fill_parent"
+  android:layout_height="wrap_content"
+  android:orientation="vertical"
+  android:padding="10dip"
+  android:background="@color/white">
+
+  <LinearLayout
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:paddingBottom="10dip">
+
+    <LinearLayout
+      android:layout_width="fill_parent"
+      android:layout_height="wrap_content"
+      android:orientation="vertical">
+
+      <LinearLayout
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+
+        <ImageView
+          android:id="@+id/icon"
+          android:paddingRight="10dip"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_centerHorizontal="true" />
+
+        <TextView
+          android:id="@+id/dialog_title"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_centerVertical="true"
+          android:paddingRight="10dip"
+          android:gravity="center_vertical"
+          android:visibility="gone"
+          android:textSize="16dip"
+          android:textStyle="bold"
+          android:textColor="@color/black"/>
+
+        <TextView
+          android:id="@+id/dialog_subtitle"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:paddingTop="10dip"
+          android:paddingRight="10dip"
+          android:gravity="center_vertical"
+          android:visibility="gone"
+          android:textSize="13dip"
+          android:textColor="@color/black"/>
+
+        <TextView
+          android:id="@+id/dialog_message"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:visibility="gone"
+          android:gravity="center_vertical"
+          android:textSize="13dip"
+          android:textColor="@color/black"/>
+
+      </LinearLayout>
+
+    </LinearLayout>
+
+  </LinearLayout>
+
+  <LinearLayout
+    android:id="@+id/panel_content"
+    android:layout_width="fill_parent"
+    android:layout_height="0dip"
+    android:layout_weight="1"/>
+
+  <RelativeLayout
+    android:background="@color/white"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:paddingTop="10dip">
+
+    <Button
+      android:id="@+id/button_alwaysdeny"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_alignParentLeft="true"
+      style="@style/gears_button"
+      android:textSize="13dip"/>
+
+    <LinearLayout
+      android:layout_width="wrap_content"
+      android:layout_alignParentRight="true"
+      android:layout_height="wrap_content">
+
+      <Button
+        android:id="@+id/button_allow"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="13dip"/>
+
+      <Button
+        android:id="@+id/button_deny"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="13dip"/>
+
+    </LinearLayout>
+
+  </RelativeLayout>
+
+</LinearLayout>
diff --git a/res/layout-land/page_info.xml b/res/layout-land/page_info.xml
index f08dd7d..63d18ca 100644
--- a/res/layout-land/page_info.xml
+++ b/res/layout-land/page_info.xml
@@ -14,53 +14,60 @@
      limitations under the License.
 -->
 
-<LinearLayout
+<ScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical" >
-    
-    <!-- Title: -->
-    <TextView
-        android:id="@+id/title"
-        android:textStyle="bold"
-        android:textSize="14sp"
-        android:textColor="@color/white"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_marginLeft="20dip"
-        android:layout_marginRight="20dip"
-        android:layout_marginTop="12dip"
-        android:layout_marginBottom="12dip" />
 
-    <!-- Address: -->
-    <TableLayout
+    <LinearLayout
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
-        android:shrinkColumns="1"
-        android:orientation="vertical">
-
-        <TableRow>
-            <TextView 
-                android:id="@+id/address_header"
-                android:text="@string/page_info_address"
-                android:textSize="14sp"
-                android:textColor="@color/white"
-                android:gravity="left"
-                android:layout_marginLeft="20dip"
-                android:layout_marginRight="20dip" />
-            
-            <TextView
-                android:id="@+id/address"
-                android:textSize="14sp"
-                android:textColor="@color/white"
-                android:gravity="left"
-                android:layout_marginLeft="10dip"
-                android:layout_marginRight="20dip"
-                android:layout_marginBottom="12dip" />
-        </TableRow>
-
-    </TableLayout>
+        android:orientation="vertical" >
     
-</LinearLayout>
+        <!-- Title: -->
+        <TextView
+            android:id="@+id/title"
+            android:textStyle="bold"
+            android:textSize="14sp"
+            android:textColor="@color/white"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:layout_marginLeft="20dip"
+            android:layout_marginRight="20dip"
+            android:layout_marginTop="12dip"
+            android:layout_marginBottom="12dip" />
+
+        <!-- Address: -->
+        <TableLayout
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:shrinkColumns="1"
+            android:orientation="vertical">
+
+            <TableRow>
+                <TextView 
+                    android:id="@+id/address_header"
+                    android:text="@string/page_info_address"
+                    android:textSize="14sp"
+                    android:textColor="@color/white"
+                    android:gravity="left"
+                    android:layout_marginLeft="20dip"
+                    android:layout_marginRight="20dip" />
+                
+                <TextView
+                    android:id="@+id/address"
+                    android:textSize="14sp"
+                    android:textColor="@color/white"
+                    android:gravity="left"
+                    android:layout_marginLeft="10dip"
+                    android:layout_marginRight="20dip"
+                    android:layout_marginBottom="12dip" />
+            </TableRow>
+
+        </TableLayout>
+        
+    </LinearLayout>
+
+</ScrollView>
 
diff --git a/res/layout/browser_find.xml b/res/layout/browser_find.xml
index b1da8f1..7e587c1 100644
--- a/res/layout/browser_find.xml
+++ b/res/layout/browser_find.xml
@@ -18,111 +18,68 @@
     android:id="@+id/findControls"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
-    android:background="@android:drawable/menu_full_frame"
+    android:background="@android:drawable/bottom_bar"
     android:paddingTop="12dip"
     >
-    
-        <LinearLayout
-            android:layout_width="wrap_content"
+    <ImageButton 
+        android:src="@drawable/ic_btn_find_prev"
+        android:id="@+id/previous"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        />
+
+    <ImageButton 
+        android:src="@drawable/ic_btn_find_next"
+        android:id="@+id/next"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        />
+
+    <LinearLayout
+        android:layout_height="wrap_content"
+        android:layout_width="0dip"
+        android:layout_weight="1"
+        android:orientation="vertical"
+        android:layout_marginRight="6dip"
+        >
+        <EditText android:id="@+id/edit"
+            android:layout_width="fill_parent"
             android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:layout_marginLeft="6dip"
-            android:layout_marginRight="6dip"
+            android:scrollHorizontally="true"
+            android:autoText="false"
+            android:capitalize="none"
+            android:hint="@string/find_dot"
+            />
+        <LinearLayout android:id="@+id/matches_view"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:orientation="horizontal"
+            android:layout_gravity="right"
+            android:visibility="invisible"
             >
-            <ImageButton android:id="@+id/done"
+            <TextView android:id="@+id/matches"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:src="@drawable/ic_browser_done"
+                android:layout_gravity="right"
+                android:text="@string/zero"
+                android:textAppearance="?android:attr/textAppearanceSmall"
+                android:textColor="?android:attr/textColorSecondaryInverse"
                 />
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:text="@string/done"
-                android:layout_gravity="center_horizontal"
-                android:textColor="?android:attr/textColorPrimaryInverse"
+                android:layout_marginRight="3dip"
+                android:layout_gravity="right"
+                android:text="@string/matches_found"
+                android:textAppearance="?android:attr/textAppearanceSmall"
+                android:textColor="?android:attr/textColorSecondaryInverse"
                 />
         </LinearLayout>
-
-        <LinearLayout
-            android:layout_height="wrap_content"
-            android:layout_width="0dip"
-            android:layout_weight="1"
-            android:orientation="vertical"
-            android:layout_marginRight="6dip"
-            >
-            <EditText android:id="@+id/edit"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:scrollHorizontally="true"
-                android:autoText="false"
-                android:capitalize="none"
-                android:hint="@string/find_dot"
-                />
-            <LinearLayout
-                android:layout_height="wrap_content"
-                android:layout_width="wrap_content"
-                android:orientation="horizontal"
-                android:layout_gravity="center_horizontal"
-                android:paddingTop="1dip"
-                >
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginRight="3dip"
-                    android:text="@string/matches_found"
-                    android:textColor="?android:attr/textColorPrimaryInverse"
-                    />
-                <TextView android:id="@+id/matches"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:text="@string/zero"
-                    android:textColor="?android:attr/textColorPrimaryInverse"
-                    />
-            </LinearLayout>
-        </LinearLayout>
-
-        <LinearLayout
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:layout_marginRight="6dip"
-            >
-            <ImageButton 
-                android:src="@drawable/ic_browser_up"
-                android:id="@+id/previous"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                />
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:text="@string/prev"
-                android:layout_gravity="center_horizontal"
-                android:textColor="?android:attr/textColorPrimaryInverse"
-                />
-        </LinearLayout>
-
-        <LinearLayout
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:layout_marginRight="6dip"
-            >
-            <ImageButton 
-                android:src="@drawable/ic_browser_down"
-                android:id="@+id/next"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                />
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:text="@string/next"
-                android:layout_gravity="center_horizontal"
-                android:textColor="?android:attr/textColorPrimaryInverse"
-                />
-        </LinearLayout>
-
+    </LinearLayout>
+    <ImageButton android:id="@+id/done"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/ic_btn_close_panel"
+        />
 </LinearLayout>	
 
diff --git a/res/layout/cache_cleared.xml b/res/layout/cache_cleared.xml
deleted file mode 100644
index a65183c..0000000
--- a/res/layout/cache_cleared.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--
-/*
- * Copyright 2007, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
-        >
-    <TextView
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginLeft="50dip"
-            android:layout_marginTop="50dip"
-            android:layout_marginRight="50dip"
-            android:layout_marginBottom="50dip"
-            android:text="@string/cache_cleared"
-            />
-</LinearLayout>
diff --git a/res/layout/gears_dialog.xml b/res/layout/gears_dialog.xml
new file mode 100644
index 0000000..b1a43cd
--- /dev/null
+++ b/res/layout/gears_dialog.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2008, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  android:drawingCacheQuality="auto"
+  android:layout_width="fill_parent"
+  android:layout_height="wrap_content"
+  android:orientation="vertical"
+  android:padding="10dip"
+  android:background="@color/white">
+
+  <LinearLayout
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:paddingBottom="10dip">
+
+    <LinearLayout
+      android:layout_width="fill_parent"
+      android:layout_height="wrap_content"
+      android:orientation="vertical">
+
+      <LinearLayout
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+
+        <ImageView
+          android:id="@+id/icon"
+          android:paddingRight="10dip"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_centerHorizontal="true" />
+
+        <TextView
+          android:id="@+id/dialog_title"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_centerVertical="true"
+          android:gravity="center_vertical"
+          android:visibility="gone"
+          android:textSize="16dip"
+          android:textStyle="bold"
+          android:textColor="@color/black"/>
+
+        <TextView
+          android:id="@+id/dialog_message"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:visibility="gone"
+          android:gravity="center_vertical"
+          android:textSize="13dip"
+          android:textColor="@color/black"/>
+
+      </LinearLayout>
+
+      <TextView
+        android:id="@+id/dialog_subtitle"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingTop="10dip"
+        android:gravity="center_vertical"
+        android:visibility="gone"
+        android:textSize="13dip"
+        android:textColor="@color/black"/>
+
+    </LinearLayout>
+
+  </LinearLayout>
+
+  <LinearLayout
+    android:id="@+id/panel_content"
+    android:layout_width="fill_parent"
+    android:layout_height="0dip"
+    android:layout_weight="1"/>
+
+  <RelativeLayout
+    android:background="@color/white"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:paddingTop="10dip">
+
+    <Button
+      android:id="@+id/button_alwaysdeny"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_alignParentLeft="true"
+      style="@style/gears_button"
+      android:textSize="13dip"/>
+
+    <LinearLayout
+      android:layout_width="wrap_content"
+      android:layout_alignParentRight="true"
+      android:layout_height="wrap_content">
+
+      <Button
+        android:id="@+id/button_allow"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="13dip"/>
+
+      <Button
+        android:id="@+id/button_deny"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="13dip"/>
+
+    </LinearLayout>
+
+  </RelativeLayout>
+
+</LinearLayout>
diff --git a/res/layout/gears_dialog_filepicker.xml b/res/layout/gears_dialog_filepicker.xml
new file mode 100644
index 0000000..5f1c653
--- /dev/null
+++ b/res/layout/gears_dialog_filepicker.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2008, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  android:orientation="vertical"
+  android:layout_width="wrap_content"
+  android:layout_height="wrap_content">
+
+  <LinearLayout
+    android:orientation="vertical"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:background="@color/gray"
+    android:padding="1px">
+
+    <LinearLayout
+      android:orientation="vertical"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:background="@color/white">
+
+      <GridView android:id="@+id/files_list"
+        android:padding="4px"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:horizontalSpacing="2px"
+        android:verticalSpacing="2px"
+        android:numColumns="3"
+        style="@android:style/Widget.ListView.White" />
+
+    </LinearLayout>
+
+  </LinearLayout>
+
+</LinearLayout>
diff --git a/res/layout/gears_dialog_filepicker_cell.xml b/res/layout/gears_dialog_filepicker_cell.xml
new file mode 100644
index 0000000..1db167f
--- /dev/null
+++ b/res/layout/gears_dialog_filepicker_cell.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2008, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  android:orientation="vertical"
+  android:layout_width="wrap_content"
+  android:layout_height="wrap_content"
+  android:gravity="center_horizontal"
+  android:padding="2px" >
+
+  <ImageView
+    android:id="@+id/icon"
+    android:scaleType="fitCenter"
+    android:layout_width="64px"
+    android:layout_height="64px" />
+
+  <TextView
+    android:id="@+id/name"
+    android:textAppearance="?android:attr/textAppearanceSmall"
+    android:textColor="@color/black"
+    android:singleLine="true"
+    android:ellipsize="middle"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content" />
+
+</LinearLayout>
diff --git a/res/layout/gears_dialog_permission.xml b/res/layout/gears_dialog_permission.xml
new file mode 100644
index 0000000..3852f83
--- /dev/null
+++ b/res/layout/gears_dialog_permission.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2008, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  android:orientation="vertical"
+  android:layout_width="fill_parent"
+  android:layout_height="wrap_content">
+
+  <LinearLayout
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:id="@+id/content_border"
+    android:padding="1px">
+
+    <LinearLayout
+      android:layout_width="fill_parent"
+      android:layout_height="wrap_content"
+      android:id="@+id/content_background"
+      android:padding="4dip">
+
+      <ImageView
+        android:id="@+id/origin_icon"
+        android:padding="10dip"
+        android:layout_centerHorizontal="true"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:visibility="gone"
+        android:adjustViewBounds="true"
+        android:src="@drawable/gears"/>
+
+      <LinearLayout
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:padding="4dip"
+        android:orientation="vertical">
+
+        <TextView
+          android:id="@+id/origin_title"
+          android:layout_width="fill_parent"
+          android:layout_height="wrap_content"
+          android:visibility="gone"
+          android:textStyle="bold"
+          android:gravity="left"
+          android:textSize="13dip"
+          android:textColor="@color/black"/>
+
+        <TextView
+          android:id="@+id/origin_subtitle"
+          android:layout_width="fill_parent"
+          android:layout_height="wrap_content"
+          android:visibility="gone"
+          android:gravity="left"
+          android:textSize="13dip"
+          android:textColor="@color/black"/>
+
+        <TextView
+          android:id="@+id/origin_message"
+          android:layout_width="fill_parent"
+          android:layout_height="wrap_content"
+          android:visibility="gone"
+          android:paddingTop="10dip"
+          android:gravity="left"
+          android:textSize="13dip"
+          android:textColor="@color/black"/>
+
+      </LinearLayout>
+
+    </LinearLayout>
+
+  </LinearLayout>
+
+  <TextView
+    android:id="@+id/privacy_policy_label"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:paddingTop="10dip"
+    android:gravity="center_horizontal"
+    android:textSize="13dip"
+    android:textStyle="italic"
+    android:textColor="@color/black"
+    android:visibility="gone"
+    android:text="@string/privacy_policy" />
+
+</LinearLayout>
diff --git a/res/layout/gears_dialog_settings.xml b/res/layout/gears_dialog_settings.xml
new file mode 100644
index 0000000..a9026db
--- /dev/null
+++ b/res/layout/gears_dialog_settings.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2008, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  android:orientation="vertical"
+  android:layout_width="wrap_content"
+  android:layout_height="wrap_content">
+
+  <LinearLayout
+    android:orientation="vertical"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:background="@color/gray"
+    android:padding="1px">
+
+    <LinearLayout
+      android:orientation="vertical"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:background="@color/white">
+
+      <ListView android:id="@+id/sites_list"
+        android:padding="4dip"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        style="@android:style/Widget.ListView.White" />
+
+    </LinearLayout>
+
+  </LinearLayout>
+
+  <TextView
+    android:id="@+id/gears_version"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:paddingTop="10dip"
+    android:gravity="center_horizontal"
+    android:textSize="13dip"
+    android:textStyle="italic"
+    android:textColor="@color/black" />
+
+</LinearLayout>
diff --git a/res/layout/gears_dialog_settings_row.xml b/res/layout/gears_dialog_settings_row.xml
new file mode 100644
index 0000000..8a2cadf
--- /dev/null
+++ b/res/layout/gears_dialog_settings_row.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2008, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  android:orientation="vertical"
+  android:layout_width="fill_parent"
+  android:layout_height="wrap_content"
+  android:textSize="13dip"
+  android:background="@color/white"
+  android:textColor="@color/black">
+
+  <LinearLayout
+    android:orientation="horizontal"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:padding="4dip">
+
+    <TextView
+      android:id="@+id/origin_name"
+      android:layout_width="0dip"
+      android:layout_height="wrap_content"
+      android:layout_weight="1"
+      android:textColor="@color/black"
+      android:textStyle="bold"/>
+
+    <Button
+      android:id="@+id/origin_remove"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      style="@style/gears_button"
+      android:text="@string/remove"/>
+
+  </LinearLayout>
+
+  <TableLayout
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content">
+
+    <TableRow
+      android:id="@+id/local_storage_choice"
+      android:visibility="gone">
+
+      <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="fill_parent"
+        android:textColor="@color/black"
+        android:gravity="center_vertical"
+        android:text="@string/local_storage"/>
+
+      <RadioGroup android:orientation="horizontal">
+        <RadioButton
+          android:id="@+id/local_storage_allowed"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:textColor="@color/black"
+          android:textSize="13dip"
+          android:text="@string/allowed"/>
+
+        <RadioButton
+          android:id="@+id/local_storage_denied"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:textColor="@color/black"
+          android:textSize="13dip"
+          android:text="@string/denied"/>
+      </RadioGroup>
+
+    </TableRow>
+
+    <TableRow
+      android:id="@+id/location_data_choice"
+      android:visibility="gone">
+
+      <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="fill_parent"
+        android:textColor="@color/black"
+        android:gravity="center_vertical"
+        android:text="@string/location"/>
+
+      <RadioGroup android:orientation="horizontal">
+        <RadioButton
+          android:id="@+id/location_data_allowed"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:textColor="@color/black"
+          android:textSize="13dip"
+          android:text="@string/allowed"/>
+
+        <RadioButton
+          android:id="@+id/location_data_denied"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:textColor="@color/black"
+          android:textSize="13dip"
+          android:text="@string/denied"/>
+      </RadioGroup>
+
+    </TableRow>
+
+  </TableLayout>
+
+</LinearLayout>
diff --git a/res/layout/page_info.xml b/res/layout/page_info.xml
index b10b72a..ee45082 100644
--- a/res/layout/page_info.xml
+++ b/res/layout/page_info.xml
@@ -14,54 +14,61 @@
      limitations under the License.
 -->
 
-<LinearLayout
+<ScrollView
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical" >
-    
-    <!-- Title: -->
-    <TextView
-        android:id="@+id/title"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:textStyle="bold"
-        android:textSize="14sp"
-        android:textColor="@color/white"
-        android:layout_marginLeft="20dip"
-        android:layout_marginRight="20dip"
-        android:layout_marginTop="12dip"
-        android:layout_marginBottom="12dip" />
-    
-    <!-- Address: -->
-    <TableLayout
+
+    <LinearLayout
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
-        android:orientation="vertical">
-        
-        <TextView 
-            android:id="@+id/address_header"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:text="@string/page_info_address"
-            android:textSize="14sp"
-            android:textColor="@color/white"
-            android:gravity="left"
-            android:layout_marginLeft="20dip"
-            android:layout_marginRight="20dip"
-            android:layout_marginBottom="10dip" />
-        
+        android:orientation="vertical" >
+    
+        <!-- Title: -->
         <TextView
-            android:id="@+id/address"
+            android:id="@+id/title"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
+            android:textStyle="bold"
             android:textSize="14sp"
             android:textColor="@color/white"
-            android:gravity="left"
             android:layout_marginLeft="20dip"
             android:layout_marginRight="20dip"
+            android:layout_marginTop="12dip"
             android:layout_marginBottom="12dip" />
+    
+        <!-- Address: -->
+        <TableLayout
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
         
-    </TableLayout>
+            <TextView 
+                android:id="@+id/address_header"
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:text="@string/page_info_address"
+                android:textSize="14sp"
+                android:textColor="@color/white"
+                android:gravity="left"
+                android:layout_marginLeft="20dip"
+                android:layout_marginRight="20dip"
+                android:layout_marginBottom="10dip" />
+            
+            <TextView
+                android:id="@+id/address"
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:textSize="14sp"
+                android:textColor="@color/white"
+                android:gravity="left"
+                android:layout_marginLeft="20dip"
+                android:layout_marginRight="20dip"
+                android:layout_marginBottom="12dip" />
+            
+        </TableLayout>
+        
+    </LinearLayout>
 
-</LinearLayout>
+</ScrollView>
diff --git a/res/layout/tabitem.xml b/res/layout/tabitem.xml
index 9edd614..9c82972 100644
--- a/res/layout/tabitem.xml
+++ b/res/layout/tabitem.xml
@@ -16,15 +16,14 @@
 
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
-    android:layout_height="198dip"
     android:orientation="vertical"
     android:padding="4dip"
-    android:background="@android:drawable/gallery_thumb">
+    android:background="@color/white">
 
     <com.android.browser.FakeWebView android:id="@+id/icon"
         android:background="@color/black"
-        android:layout_width="145dip"
-        android:layout_height="190dip" />
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent" />
 
     <TextView android:id="@+id/label"
         android:layout_width="fill_parent"
@@ -45,10 +44,10 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="bottom|right"
-        android:paddingTop="12dip"
-        android:paddingBottom="10dip"
-        android:paddingLeft="10dip"
-        android:paddingRight="10dip"
+        android:paddingTop="14dip"
+        android:paddingBottom="12dip"
+        android:paddingLeft="12dip"
+        android:paddingRight="12dip"
         android:src="@android:drawable/btn_dialog" />
 
 </FrameLayout>
diff --git a/res/menu/bookmarkscontext.xml b/res/menu/bookmarkscontext.xml
index 383b3b6..b43e242 100644
--- a/res/menu/bookmarkscontext.xml
+++ b/res/menu/bookmarkscontext.xml
@@ -15,22 +15,24 @@
 -->
 
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <group android:id="@+id/ADD_MENU">
-        <item android:id="@+id/new_context_menu_id"
-            android:title="@string/save_to_bookmarks"/>
-    </group>
-    <group android:id="@+id/CONTEXT_MENU">
-        <item android:id="@+id/open_context_menu_id"
-            android:title="@string/open_bookmark"/>
-        <item android:id="@+id/new_window_context_menu_id"
-            android:title="@string/open_in_new_window"/>
-        <item android:id="@+id/edit_context_menu_id"
-            android:title="@string/edit_bookmark"/>
-        <item android:id="@+id/send_context_menu_id"
-            android:title="@string/tab_picker_send_url"/>
-         <item android:id="@+id/copy_url_context_menu_id"
-            android:title="@string/contextmenu_copylink"/>  
-         <item android:id="@+id/delete_context_menu_id"
-            android:title="@string/remove_bookmark"/>    
-    </group>
+  <group android:id="@+id/ADD_MENU">
+    <item android:id="@+id/new_context_menu_id"
+      android:title="@string/save_to_bookmarks"/>
+  </group>
+  <group android:id="@+id/CONTEXT_MENU">
+    <item android:id="@+id/open_context_menu_id"
+      android:title="@string/open_bookmark"/>
+    <item android:id="@+id/new_window_context_menu_id"
+      android:title="@string/open_in_new_window"/>
+    <item android:id="@+id/edit_context_menu_id"
+      android:title="@string/edit_bookmark"/>
+    <item android:id="@+id/shortcut_context_menu_id"
+      android:title="@string/create_shortcut_bookmark"/>
+    <item android:id="@+id/send_context_menu_id"
+      android:title="@string/tab_picker_send_url"/>
+    <item android:id="@+id/copy_url_context_menu_id"
+      android:title="@string/contextmenu_copylink"/>
+    <item android:id="@+id/delete_context_menu_id"
+      android:title="@string/remove_bookmark"/>
+  </group>
 </menu>
diff --git a/res/menu/browser.xml b/res/menu/browser.xml
index 9f30ad1..5f5b3ca 100644
--- a/res/menu/browser.xml
+++ b/res/menu/browser.xml
@@ -55,12 +55,9 @@
             android:title="@string/history" />
         <item android:id="@+id/view_downloads_menu_id"
             android:title="@string/menu_view_download" /> 
-<!--
-        Disabling the find option for version 1.0
         <item android:id="@+id/find_menu_id"
             android:title="@string/find_dot" 
             android:alphabeticShortcut="f" />
--->
         <item android:id="@+id/page_info_menu_id"
             android:title="@string/page_info" />
         <item android:id="@+id/bookmark_page_menu_id"
@@ -77,6 +74,22 @@
             android:alphabeticShortcut="i" />
         <item android:id="@+id/zoom_out_menu_id"
             android:alphabeticShortcut="o" />
+        <item android:id="@+id/window_one_menu_id"
+            android:alphabeticShortcut="1" />
+        <item android:id="@+id/window_two_menu_id"
+            android:alphabeticShortcut="2" />
+        <item android:id="@+id/window_three_menu_id"
+            android:alphabeticShortcut="3" />
+        <item android:id="@+id/window_four_menu_id"
+            android:alphabeticShortcut="4" />
+        <item android:id="@+id/window_five_menu_id"
+            android:alphabeticShortcut="5" />
+        <item android:id="@+id/window_six_menu_id"
+            android:alphabeticShortcut="6" />
+        <item android:id="@+id/window_seven_menu_id"
+            android:alphabeticShortcut="7" />
+        <item android:id="@+id/window_eight_menu_id"
+            android:alphabeticShortcut="8" />
         <item android:id="@+id/dump_nav_menu_id"
             android:title="@string/dump_nav"
             android:visible="false" />
@@ -84,12 +97,15 @@
     <group android:id="@+id/TAB_MENU">
         <item android:id="@+id/new_tab_menu_id"
             android:title="@string/tab_picker_new_tab"
+            android:alphabeticShortcut="t" 
             android:icon="@android:drawable/ic_menu_add" />
         <item android:id="@+id/bookmarks_tab_menu_id"
             android:title="@string/bookmarks" 
+            android:alphabeticShortcut="b" 
             android:icon="@drawable/ic_menu_bookmark" />
         <item android:id="@+id/history_tab_menu_id"
             android:title="@string/history"
+            android:alphabeticShortcut="h" 
             android:icon="@drawable/ic_menu_recent_history" />
     </group>
     <!-- these items are toggled in and out of @+id/stop_reload_menu_id -->
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 2471227..30c00bf 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -1,217 +1,363 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string name="action">Přihlásit se</string>
-  <string name="activity_instrumentation_functional_test_runner">Spouštěč testu funkcí prohlížeče</string>
-  <string name="activity_instrumentation_test_runner">Spouštěč testu prohlížeče</string>
-  <string name="add_new_bookmark">Nová záložka</string>
-  <string name="back">Zpět</string>
-  <string name="bookmark_needs_title">"Záložka musí mít název!"</string>
-  <string name="bookmark_needs_url">"Záložka musí mít umístění!"</string>
-  <string name="bookmark_saved">Uloženo do záložek</string>
-  <string name="bookmark_url_not_valid">Adresa URL je neplatná!</string>
-  <string name="bookmarks">Záložky</string>
-  <string name="browserFrame307Post">Tato webová stránka se nyní přesměruje. Chcete znovu odeslat zadaná data formuláře do nového umístění?</string>
-  <string name="browserFrameFileErrorLabel">Chyba souboru</string>
-  <string name="browserFrameFormResubmitLabel">Potvrdit</string>
-  <string name="browserFrameFormResubmitMessage">Stránka, kterou chcete zobrazit, obsahuje data POSTDATA. Pokud znovu odešlete data, zopakují se všechny činnosti provedené formulářem (např. hledání nebo nakupování online).</string>
-  <string name="browserFrameNetworkErrorLabel">Chyba sítě</string>
-  <string name="browserFrameRedirect">Přesměrovat</string>
-  <string name="browser_bookmarks_page_bookmarks_text">Záložky</string>
-  <string name="browser_history">Historie prohlížeče</string>
-  <string name="cache_cleared">Mezipaměť vymazána</string>
-  <string name="cancel">Storno</string>
-  <string name="clear">Vymazat</string>
-  <string name="close">Zavřít</string>
-  <string name="common_name">Obecné jméno:</string>
-  <string name="contextmenu_bookmark_thislink">Přidat odkaz do záložek</string>
-  <string name="contextmenu_copylink">Kopírovat odkaz</string>
-  <string name="contextmenu_download_image">Stáhnout obrázek</string>
-  <string name="contextmenu_openlink">Otevřít odkaz</string>
-  <string name="contextmenu_openlink_newwindow">Otevřít v novém okně</string>
-  <string name="current_page">Aktuální stránka: </string>
-  <string name="delete">Odstranit</string>
-  <string name="delete_all">Odstranit vše</string>
-  <string name="delete_all_bookmarks">Odstranit všechny záložky?</string>
-  <string name="delete_all_bookmarks_warning">Odstranit všechny záložky?</string>
-  <string name="delete_bookmark">Odstranit záložku?</string>
-  <string name="delete_bookmark_warning">Odstranit \"<xliff:g id="bookmark">%s</xliff:g>\"?</string>
-  <string name="do_not_save">Neukládat</string>
-  <string name="done">Hotovo</string>
-  <string name="download_cancel_dlg_msg">Všech <xliff:g id="download_count">%d</xliff:g> souborů ke stažení bude zrušeno a vymazáno z historie stahování</string>
-  <string name="download_cancel_dlg_title">Zrušit všechny soubory ke stažení?</string>
-  <string name="download_canceled">Zrušeno</string>
-  <string name="download_clear_dlg_msg">Všechny položky budou vymazány ze seznamu a odebrány z mezipaměti prohlížeče.</string>
-  <string name="download_clear_dlg_title">Vymazat historii stahování?</string>
-  <string name="download_error">Chyba</string>
-  <string name="download_file_error">Stahování nelze dokončit; není dostatek volného místa.</string>
-  <string name="download_file_error_dlg_msg">Soubor <xliff:g id="filename">%s</xliff:g> nelze stáhnout!\nUvolněte místo a akci zopakujte</string>
-  <string name="download_file_error_dlg_title">V zařízení je nedostatek volného místa!</string>
-  <string name="download_length_required">Nelze stáhnout; nelze zjistit velikost obsahu</string>
-  <string name="download_menu_cancel">Zrušit stahování</string>
-  <string name="download_menu_cancel_all">Zrušit stahování</string>
-  <string name="download_menu_clear">Vymazat ze seznamu</string>
-  <string name="download_menu_clear_all">Vymazat seznam</string>
-  <string name="download_menu_open">Otevřít</string>
-  <string name="download_no_sdcard_dlg_msg">Ke stažení souboru <xliff:g id="filename">%s</xliff:g> je požadována karta SD</string>
-  <string name="download_no_sdcard_dlg_title">Karta SD chybí</string>
-  <string name="download_not_acceptable">Nelze stáhnout; obsah není podporován</string>
-  <string name="download_pending">Zahájení stahování\u2026</string>
-  <string name="download_pending_network">Čekání na síť\u2026</string>
-  <string name="download_precondition_failed">Stahování bylo přerušeno a nelze jej obnovit</string>
-  <string name="download_running">Stahování </string>
-  <string name="download_running_paused">Čekání na síť\u2026 </string>
-  <string name="download_success">Stahování souboru <xliff:g id="file">%s</xliff:g> dokončeno</string>
-  <string name="download_title">Historie stahování</string>
-  <string name="download_unknown_filename">&lt;Neznámý&gt;</string>
-  <string name="dump_nav">Výpis mezipaměti navigace</string>
-  <string name="edit_bookmark">Upravit záložku</string>
-  <string name="empty_bookmark">"Nelze vytvořit prázdnou záložku!"</string>
-  <string name="find_dot">Najít\u2026</string>
-  <string name="forward">Předat dál</string>
-  <string name="goto_dot">Přejít\u2026</string>
-  <string name="history">Historie</string>
-  <string name="history_picker_view_web_page">Zobrazit webovou stránku</string>
-  <string name="homepage">Domovská stránka</string>
-  <string name="homepage_set">Domovská stránka aktualizována</string>
-  <string name="http">http://</string>
-  <string name="info_base">Název:\n  <xliff:g id="title">%s1</xliff:g> \n\nAdresa URL: \n  <xliff:g id="url">%s2</xliff:g></string>
-  <string name="issued_by">Vystavitel:</string>
-  <string name="issued_to">Vystaveno pro:</string>
-  <string name="js_dialog_title_default">JavaScript</string>
-  <string name="js_dialog_title_prefix">Stránka na adrese</string>
-  <string name="js_dialog_title_suffix">uvádí:</string>
-  <string name="loadSuspended">Načítání stránky je pozastaveno a bude pokračovat po obnovení připojení</string>
-  <string name="loadSuspendedTitle">Žádné pokrytí sítí!</string>
-  <string name="location">Umístění</string>
-  <string name="matches_found">Nalezené výsledky:</string>
-  <string name="menu_preferences">Nastavení</string>
-  <string name="menu_use_as_homepage">Nastavit jako domovskou stránku</string>
-  <string name="menu_view_download">Zobrazit soubory ke stažení</string>
-  <string name="menu_zoom">Lupa</string>
-  <string name="name">Název</string>
-  <string name="new_window">Nové okno</string>
-  <string name="next">Další</string>
-  <string name="no_database">Žádná databáze!</string>
-  <string name="ok">OK</string>
-  <string name="oma_error_failed_to_download">Stažení média se nezdařilo</string>
-  <string name="oma_error_insufficient_memory">Nedostatek paměti! Zkontrolujte kartu SD</string>
-  <string name="oma_error_invalid_descriptor">Neplatný popisovač stahování</string>
-  <string name="oma_error_non_acceptable_content">Obsah není podporován</string>
-  <string name="oma_label_action">Stáhnout</string>
-  <string name="oma_label_cancel">Konec</string>
-  <string name="oma_label_description">Popis:</string>
-  <string name="oma_label_download_error">Chyba stahování:</string>
-  <string name="oma_label_exit">Konec</string>
-  <string name="oma_label_name">Název:</string>
-  <string name="oma_label_proceed">Pokračovat</string>
-  <string name="oma_label_size">Velikost:</string>
-  <string name="oma_label_type">Typ:</string>
-  <string name="oma_label_vendor">Výrobce:</string>
-  <string name="oma_label_want_to_download">Chcete tento obsah stáhnout?</string>
-  <string name="oma_status_attribute_mismatch">Neshoda atributů</string>
-  <string name="oma_status_device_aborted">Zařízení přerušeno</string>
-  <string name="oma_status_insufficient_memory">Nedostatek paměti</string>
-  <string name="oma_status_invalid_descriptor">Neplatný popisovač</string>
-  <string name="oma_status_invalid_version">Neplatná verze</string>
-  <string name="oma_status_loader_error">Chyba zavaděče</string>
-  <string name="oma_status_loss_of_service">Ztráta služby</string>
-  <string name="oma_status_non_acceptable_content">Nepřijatelný obsah</string>
-  <string name="oma_status_success">Úspěch</string>
-  <string name="oma_warning_one_or_more_types_not_supported">Nejméně jedna kategorie obsahu není podporována.</string>
-  <string name="open_bookmark">Zobrazit webovou stránku</string>
-  <string name="open_in_new_window">Otevřít v novém okně</string>
-  <string name="org_name">Organizace:</string>
-  <string name="org_unit">Organizační jednotka:</string>
-  <string name="override">Nahradit</string>
-  <string name="override_message">Chcete nahradit existující záložku?</string>
-  <string name="password">Heslo</string>
-  <string name="pref_content_block_popups">Blokovat automaticky otevíraná okna</string>
-  <string name="pref_content_javascript">Povolit JavaScript</string>
-  <string name="pref_content_load_images">Načítat obrázky</string>
-  <string name="pref_content_load_images_summary">Obrázky budou načítány s webovými stránkami</string>
-  <string name="pref_content_open_in_background">Otevřít na pozadí</string>
-  <string name="pref_content_open_in_background_summary">Otevře nová okna na pozadí</string>
-  <string name="pref_content_title">Nastavení obsahu stránky</string>
-  <string name="pref_development_nav_dump">Povolit výpis mezipaměti navigace</string>
-  <string name="pref_development_normal_rendering">Normální zobrazování</string>
-  <string name="pref_development_single_column_rendering">Zobrazování v jednom sloupci</string>
-  <string name="pref_development_title">Ladit</string>
-  <string name="pref_development_trace">Povolit trasování</string>
-  <string name="pref_development_track">Povolit trackball</string>
-  <string name="pref_development_uastring">Řetězec Desktop UA</string>
-  <string name="pref_development_viewport">Používat širokou pracovní oblast</string>
-  <string name="pref_extras_reset_default">Obnovit nastavení</string>
-  <string name="pref_extras_reset_default_dlg">Obnovit výchozí nastavení?</string>
-  <string name="pref_extras_reset_default_summary">Obnovit výchozí nastavení všech hodnot</string>
-  <string name="pref_extras_title">Doplňky</string>
-  <string name="pref_plugin_enable">Povolit moduly plug-in</string>
-  <string name="pref_plugin_enable_summary">Povolí webům používat dostupné moduly plug-in</string>
-  <string name="pref_plugin_installed">Nainstalované moduly plug-in</string>
-  <string name="pref_plugin_installed_empty_list">Žádné nainstalované moduly plug-in</string>
-  <string name="pref_plugin_installed_summary">Zobrazit aktuálně nainstalované moduly plug-in</string>
-  <string name="pref_plugin_title">Moduly plug-in</string>
-  <string name="pref_privacy_clear_cache">Vymazat mezipaměť</string>
-  <string name="pref_privacy_clear_cache_dlg">Vymazat mezipaměť?</string>
-  <string name="pref_privacy_clear_cache_summary">Vymaže mezipaměť prohlížeče</string>
-  <string name="pref_privacy_clear_cookies">Vymazat soubory cookie</string>
-  <string name="pref_privacy_clear_cookies_dlg">Vymazat všechny soubory cookie?</string>
-  <string name="pref_privacy_clear_cookies_summary">Vymaže všechny soubory cookie prohlížeče</string>
-  <string name="pref_privacy_clear_form_data">Vymazat data formulářů</string>
-  <string name="pref_privacy_clear_form_data_dlg">Vymazat uložená data formulářů?</string>
-  <string name="pref_privacy_clear_form_data_summary">Vymaže všechna uložená data formulářů</string>
-  <string name="pref_privacy_clear_history">Vymazat historii</string>
-  <string name="pref_privacy_clear_history_dlg">Vymazat historii prohlížeče?</string>
-  <string name="pref_privacy_clear_history_summary">Vymaže historii navigace prohlížeče</string>
-  <string name="pref_privacy_clear_passwords">Vymazat hesla</string>
-  <string name="pref_privacy_clear_passwords_dlg">Vymazat všechna uložená hesla?</string>
-  <string name="pref_privacy_clear_passwords_summary">Vymaže všechna uložená hesla</string>
-  <string name="pref_privacy_title">Nastavení ochrany osobních údajů</string>
-  <string name="pref_security_accept_cookies">Přijímat soubory cookie</string>
-  <string name="pref_security_accept_cookies_summary">Povolí prohlížeči pracovat se soubory cookie</string>
-  <string name="pref_security_remember_passwords">Zapamatovat hesla</string>
-  <string name="pref_security_remember_passwords_summary">Povolí zapamatování uživatelských jmen a hesel na webech</string>
-  <string name="pref_security_save_form_data">Zapamatovat data formulářů</string>
-  <string name="pref_security_save_form_data_summary">Povolí zapamatování údajů zadaných do formulářů k pozdějšímu použití</string>
-  <string name="pref_security_show_security_warning">Zobrazovat upozornění zabezpečení</string>
-  <string name="pref_security_show_security_warning_summary">Zobrazí upozornění v případě potíží se zabezpečeným webem</string>
-  <string name="pref_security_title">Nastavení zabezpečení</string>
-  <string name="pref_text_size">Velikost textu</string>
-  <string name="pref_text_size_dialogtitle">Velikost textu</string>
-  <string name="pref_text_size_summary">Vyberte velikost textu</string>
-  <string name="prev">Předchozí</string>
-  <string name="question_mark">\?</string>
-  <string name="reload">Aktualizovat</string>
-  <string name="remove_bookmark">Odstranit záložku</string>
-  <string name="replace">Nahradit</string>
-  <string name="retry">Opakovat</string>
-  <string name="save">Uložit</string>
-  <string name="save_to_bookmarks">Uložit do záložek</string>
-  <string name="search_label">Prohlížeč</string>
-  <string name="security_warning">Upozornění zabezpečení</string>
-  <string name="sign_in_to">Přihlásit k <xliff:g id="hostname">%s1</xliff:g> \"<xliff:g id="realm">%s2</xliff:g>\"</string>
-  <string name="ssl_certificate">Certifikát</string>
-  <string name="ssl_certificate_is_valid">Tento certifikát je platný</string>
-  <string name="ssl_continue">Pokračovat</string>
-  <string name="ssl_expired">Platnost tohoto certifikátu vypršela</string>
-  <string name="ssl_mismatch">Neshoda názvu hostitele</string>
-  <string name="ssl_not_yet_valid">Tento certifikát ještě není platný</string>
-  <string name="ssl_untrusted">Tento certifikát nepochází od důvěryhodného certifikačního úřadu</string>
-  <string name="ssl_warnings_header">Došlo k potížím s certifikátem zabezpečení tohoto webu</string>
-  <string name="stop">Zastavit</string>
-  <string name="stopping">Zastavení\u2026</string>
-  <string name="tab_picker_bookmark">Záložka</string>
-  <string name="tab_picker_new_tab">Otevřít nové okno</string>
-  <string name="tab_picker_properties">Vlastnosti</string>
-  <string name="tab_picker_remove_tab">Zavřít</string>
-  <string name="tab_picker_send_url">Odeslat adresu URL</string>
-  <string name="tab_picker_title">Aktuální okna</string>
-  <string name="tab_picker_view_tab">Zobrazit</string>
-  <string name="username">Jméno</string>
-  <string name="view_certificate">Zobrazit certifikát</string>
-  <string name="view_tabs">Přehled okna</string>
-  <string name="view_tabs_condensed">Okna</string>
-  <string name="visual_history">Vizuální historie</string>
-  <string name="with">s</string>
-  <string name="zero">0</string>
+    <string name="sign_in_to">"Přihlásit k <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
+    <string name="username">"Jméno"</string>
+    <string name="password">"Heslo"</string>
+    <string name="action">"Přihlásit se"</string>
+    <string name="cancel">"Storno"</string>
+    <string name="ok">"OK"</string>
+    <string name="matches_found">"Nalezené výsledky:"</string>
+    <string name="zero">"0"</string>
+    <!-- no translation found for page_info (1656227822243993707) -->
+    <skip />
+    <!-- no translation found for page_info_view (159850381944181348) -->
+    <skip />
+    <!-- no translation found for page_info_address (2265093697152452560) -->
+    <skip />
+    <string name="ssl_warnings_header">"Došlo k potížím s certifikátem zabezpečení tohoto webu"</string>
+    <string name="ssl_continue">"Pokračovat"</string>
+    <string name="security_warning">"Upozornění zabezpečení"</string>
+    <string name="view_certificate">"Zobrazit certifikát"</string>
+    <string name="ssl_untrusted">"Tento certifikát nepochází od důvěryhodného certifikačního úřadu"</string>
+    <string name="ssl_mismatch">"Neshoda názvu hostitele"</string>
+    <string name="ssl_expired">"Platnost tohoto certifikátu vypršela"</string>
+    <string name="ssl_not_yet_valid">"Tento certifikát ještě není platný"</string>
+    <string name="ssl_certificate">"Certifikát"</string>
+    <string name="ssl_certificate_is_valid">"Tento certifikát je platný"</string>
+    <string name="issued_to">"Vystaveno pro:"</string>
+    <string name="common_name">"Obecné jméno:"</string>
+    <string name="org_name">"Organizace:"</string>
+    <string name="org_unit">"Organizační jednotka:"</string>
+    <string name="issued_by">"Vystavitel:"</string>
+    <!-- no translation found for validity_period (1501896257332312390) -->
+    <skip />
+    <!-- no translation found for issued_on (414564986069254430) -->
+    <skip />
+    <!-- no translation found for expires_on (6391846087921048527) -->
+    <skip />
+    <!-- no translation found for retrieving_creds_dlg_msg (7567204449190054542) -->
+    <skip />
+    <string name="close">"Zavřít"</string>
+    <!-- no translation found for close_window (4303233575176107684) -->
+    <skip />
+    <string name="stopping">"Zastavení…"</string>
+    <string name="stop">"Zastavit"</string>
+    <string name="reload">"Aktualizovat"</string>
+    <string name="back">"Zpět"</string>
+    <string name="forward">"Předat dál"</string>
+    <string name="save">"Uložit"</string>
+    <string name="do_not_save">"Neukládat"</string>
+    <string name="location">"Umístění"</string>
+    <string name="name">"Název"</string>
+    <string name="http">"http://"</string>
+    <string name="save_to_bookmarks">"Uložit do záložek"</string>
+    <string name="edit_bookmark">"Upravit záložku"</string>
+    <!-- no translation found for create_shortcut_bookmark (8844594917529938681) -->
+    <skip />
+    <string name="open_bookmark">"Zobrazit webovou stránku"</string>
+    <string name="remove_bookmark">"Odstranit záložku"</string>
+    <!-- no translation found for remove_history_item (7324190140276838017) -->
+    <skip />
+    <string name="bookmark_saved">"Uloženo do záložek"</string>
+    <string name="bookmark_needs_title">"Záložka musí mít název!"</string>
+    <string name="bookmark_needs_url">"Záložka musí mít umístění!"</string>
+    <string name="empty_bookmark">"Nelze vytvořit prázdnou záložku!"</string>
+    <string name="bookmark_url_not_valid">"Adresa URL je neplatná!"</string>
+    <string name="delete_bookmark">"Odstranit záložku?"</string>
+    <!-- no translation found for bookmark_page (3160265153559879995) -->
+    <skip />
+    <string name="current_page">"Aktuální stránka:"</string>
+    <string name="delete_bookmark_warning">"Odstranit \"<xliff:g id="BOOKMARK">%s</xliff:g>\"?"</string>
+    <string name="open_in_new_window">"Otevřít v novém okně"</string>
+    <string name="new_window">"Nové okno"</string>
+    <string name="goto_dot">"Přejít…"</string>
+    <string name="find_dot">"Najít…"</string>
+    <string name="homepage">"Domovská stránka"</string>
+    <string name="view_tabs">"Přehled okna"</string>
+    <string name="view_tabs_condensed">"Okna"</string>
+    <string name="tab_picker_title">"Aktuální okna"</string>
+    <string name="tab_picker_view_tab">"Zobrazit"</string>
+    <string name="tab_picker_new_tab">"Otevřít nové okno"</string>
+    <string name="tab_picker_remove_tab">"Zavřít"</string>
+    <string name="tab_picker_bookmark">"Záložka"</string>
+    <string name="tab_picker_send_url">"Odeslat adresu URL"</string>
+    <string name="bookmarks">"Záložky"</string>
+    <!-- no translation found for shortcut_bookmark (2216457055118901642) -->
+    <skip />
+    <string name="history">"Historie"</string>
+    <string name="menu_view_download">"Zobrazit soubory ke stažení"</string>
+    <!-- no translation found for menu_bookmark_page (3665522585178656450) -->
+    <skip />
+    <!-- no translation found for share_page (8692293666665880742) -->
+    <skip />
+    <string name="menu_zoom">"Lupa"</string>
+    <!-- no translation found for menu_flip_orientation (2091430534812676789) -->
+    <skip />
+    <string name="contextmenu_openlink">"Otevřít odkaz"</string>
+    <string name="contextmenu_openlink_newwindow">"Otevřít v novém okně"</string>
+    <string name="contextmenu_bookmark_thislink">"Přidat odkaz do záložek"</string>
+    <!-- no translation found for contextmenu_savelink (4158359991031234655) -->
+    <skip />
+    <!-- no translation found for contextmenu_sharelink (7783642077260444452) -->
+    <skip />
+    <!-- no translation found for contextmenu_copy (4371155644923777927) -->
+    <skip />
+    <string name="contextmenu_copylink">"Kopírovat odkaz"</string>
+    <string name="contextmenu_download_image">"Stáhnout obrázek"</string>
+    <!-- no translation found for contextmenu_view_image (531069860166711980) -->
+    <skip />
+    <!-- no translation found for contextmenu_dial_dot (6240101001071843117) -->
+    <skip />
+    <!-- no translation found for contextmenu_add_contact (8251406599209677565) -->
+    <skip />
+    <!-- no translation found for contextmenu_send_mail (1725214944636787835) -->
+    <skip />
+    <!-- no translation found for contextmenu_map (5651794703520905543) -->
+    <skip />
+    <string name="clear">"Vymazat"</string>
+    <string name="replace">"Nahradit"</string>
+    <string name="browser_bookmarks_page_bookmarks_text">"Záložky"</string>
+    <string name="menu_preferences">"Nastavení"</string>
+    <string name="pref_content_title">"Nastavení obsahu stránky"</string>
+    <string name="pref_content_load_images">"Načítat obrázky"</string>
+    <string name="pref_content_load_images_summary">"Obrázky budou načítány s webovými stránkami"</string>
+    <string name="pref_content_block_popups">"Blokovat automaticky otevíraná okna"</string>
+    <string name="pref_content_javascript">"Povolit JavaScript"</string>
+    <string name="pref_content_open_in_background">"Otevřít na pozadí"</string>
+    <string name="pref_content_open_in_background_summary">"Otevře nová okna na pozadí"</string>
+    <!-- no translation found for pref_content_homepage (2991649697673532692) -->
+    <skip />
+    <!-- no translation found for pref_content_autofit (1364437137234703707) -->
+    <skip />
+    <!-- no translation found for pref_content_autofit_summary (444470842722907601) -->
+    <skip />
+    <string name="pref_privacy_title">"Nastavení ochrany osobních údajů"</string>
+    <string name="pref_privacy_clear_cache">"Vymazat mezipaměť"</string>
+    <string name="pref_privacy_clear_cache_summary">"Vymaže mezipaměť prohlížeče"</string>
+    <string name="pref_privacy_clear_cache_dlg">"Vymazat mezipaměť?"</string>
+    <string name="pref_privacy_clear_cookies">"Vymazat soubory cookie"</string>
+    <string name="pref_privacy_clear_cookies_summary">"Vymaže všechny soubory cookie prohlížeče"</string>
+    <string name="pref_privacy_clear_cookies_dlg">"Vymazat všechny soubory cookie?"</string>
+    <string name="pref_privacy_clear_history">"Vymazat historii"</string>
+    <string name="pref_privacy_clear_history_summary">"Vymaže historii navigace prohlížeče"</string>
+    <string name="pref_privacy_clear_history_dlg">"Vymazat historii prohlížeče?"</string>
+    <string name="pref_privacy_clear_form_data">"Vymazat data formulářů"</string>
+    <string name="pref_privacy_clear_form_data_summary">"Vymaže všechna uložená data formulářů"</string>
+    <string name="pref_privacy_clear_form_data_dlg">"Vymazat uložená data formulářů?"</string>
+    <string name="pref_privacy_clear_passwords">"Vymazat hesla"</string>
+    <string name="pref_privacy_clear_passwords_summary">"Vymaže všechna uložená hesla"</string>
+    <string name="pref_privacy_clear_passwords_dlg">"Vymazat všechna uložená hesla?"</string>
+    <string name="pref_security_title">"Nastavení zabezpečení"</string>
+    <string name="pref_security_remember_passwords">"Zapamatovat hesla"</string>
+    <string name="pref_security_remember_passwords_summary">"Povolí zapamatování uživatelských jmen a hesel na webech"</string>
+    <string name="pref_security_save_form_data">"Zapamatovat data formulářů"</string>
+    <string name="pref_security_save_form_data_summary">"Povolí zapamatování údajů zadaných do formulářů k pozdějšímu použití"</string>
+    <string name="pref_security_show_security_warning">"Zobrazovat upozornění zabezpečení"</string>
+    <string name="pref_security_show_security_warning_summary">"Zobrazí upozornění v případě potíží se zabezpečeným webem"</string>
+    <string name="pref_security_accept_cookies">"Přijímat soubory cookie"</string>
+    <string name="pref_security_accept_cookies_summary">"Povolí prohlížeči pracovat se soubory cookie"</string>
+    <string name="pref_text_size">"Velikost textu"</string>
+    <!-- no translation found for pref_text_size_choices:0 (4457326528950972067) -->
+    <!-- no translation found for pref_text_size_choices:1 (1555986354512273606) -->
+    <!-- no translation found for pref_text_size_choices:2 (8305896588786870094) -->
+    <!-- no translation found for pref_text_size_choices:3 (696418588578389970) -->
+    <!-- no translation found for pref_text_size_choices:4 (369126115416730900) -->
+    <string name="pref_text_size_dialogtitle">"Velikost textu"</string>
+    <string name="pref_extras_title">"Doplňky"</string>
+    <!-- no translation found for pref_extras_gears_enable (4340581939678973961) -->
+    <skip />
+    <!-- no translation found for pref_extras_gears_enable_summary (8268383434639752615) -->
+    <skip />
+    <!-- no translation found for pref_extras_gears_settings (8134598592309505365) -->
+    <skip />
+    <string name="pref_plugin_installed">"Nainstalované moduly plug-in"</string>
+    <string name="pref_plugin_installed_empty_list">"Žádné nainstalované moduly plug-in"</string>
+    <!-- no translation found for pref_extras_gears_settings_summary (4977594917280947221) -->
+    <skip />
+    <string name="pref_extras_reset_default">"Obnovit nastavení"</string>
+    <string name="pref_extras_reset_default_summary">"Obnovit výchozí nastavení všech hodnot"</string>
+    <string name="pref_extras_reset_default_dlg">"Obnovit výchozí nastavení?"</string>
+    <!-- no translation found for pref_extras_reset_default_dlg_title (3219857287210097506) -->
+    <skip />
+    <string name="pref_development_title">"Ladit"</string>
+    <string name="pref_development_viewport">"Používat širokou pracovní oblast"</string>
+    <string name="pref_development_single_column_rendering">"Zobrazování v jednom sloupci"</string>
+    <string name="pref_development_normal_rendering">"Normální zobrazování"</string>
+    <string name="pref_development_trace">"Povolit trasování"</string>
+    <string name="pref_development_nav_dump">"Povolit výpis mezipaměti navigace"</string>
+    <string name="pref_development_uastring">"Řetězec Desktop UA"</string>
+    <!-- no translation found for pref_development_ua_choices:0 (8502182137122977907) -->
+    <!-- no translation found for pref_development_ua_choices:1 (1998909307307679470) -->
+    <!-- no translation found for pref_development_ua_choices:2 (4853619775017483028) -->
+    <!-- no translation found for pref_development_ua_values:0 (3489778245340350674) -->
+    <!-- no translation found for pref_development_ua_values:1 (6221825100252834342) -->
+    <!-- no translation found for pref_development_ua_values:2 (5248227834068796732) -->
+    <!-- no translation found for pref_default_text_encoding (6304831623703726600) -->
+    <skip />
+    <!-- no translation found for pref_default_text_encoding_choices:0 (8765350839505971955) -->
+    <!-- no translation found for pref_default_text_encoding_choices:1 (77312792454464279) -->
+    <!-- no translation found for pref_default_text_encoding_choices:2 (2253146182935181942) -->
+    <!-- no translation found for pref_default_text_encoding_choices:3 (7817846505944009833) -->
+    <!-- no translation found for pref_default_text_encoding_choices:4 (2895188063888859356) -->
+    <!-- no translation found for pref_default_text_encoding_dialogtitle (3198813978566207575) -->
+    <skip />
+    <!-- no translation found for pref_default_text_encoding_default (6124114302615434355) -->
+    <skip />
+    <string name="browserFrameRedirect">"Přesměrovat"</string>
+    <string name="browserFrame307Post">"Tato webová stránka se nyní přesměruje. Chcete znovu odeslat zadaná data formuláře do nového umístění?"</string>
+    <string name="browserFrameNetworkErrorLabel">"Chyba sítě"</string>
+    <string name="browserFrameFileErrorLabel">"Chyba souboru"</string>
+    <string name="browserFrameFormResubmitLabel">"Potvrdit"</string>
+    <string name="browserFrameFormResubmitMessage">"Stránka, kterou chcete zobrazit, obsahuje data POSTDATA. Pokud znovu odešlete data, zopakují se všechny činnosti provedené formulářem (např. hledání nebo nakupování online)."</string>
+    <string name="loadSuspendedTitle">"Žádné pokrytí sítí!"</string>
+    <string name="loadSuspended">"Načítání stránky je pozastaveno a bude pokračovat po obnovení připojení"</string>
+    <!-- no translation found for clear_history (3513685511948114003) -->
+    <skip />
+    <string name="browser_history">"Historie prohlížeče"</string>
+    <!-- no translation found for empty_history (6213663891559716675) -->
+    <skip />
+    <string name="add_new_bookmark">"Nová záložka"</string>
+    <string name="no_database">"Žádná databáze!"</string>
+    <!-- no translation found for search_hint (6901396674886953519) -->
+    <skip />
+    <!-- no translation found for search (4226978786484971503) -->
+    <skip />
+    <!-- no translation found for search_button_text (154992215859076652) -->
+    <skip />
+    <string name="js_dialog_title_prefix">"Stránka na adrese"</string>
+    <string name="js_dialog_title_suffix">"uvádí:"</string>
+    <string name="js_dialog_title_default">"JavaScript"</string>
+    <!-- no translation found for js_dialog_before_unload (6366800208412705478) -->
+    <skip />
+    <!-- no translation found for attention (2464961428524095045) -->
+    <skip />
+    <!-- no translation found for popup_window_attempt (8398708758010279253) -->
+    <skip />
+    <!-- no translation found for allow (975920461384028355) -->
+    <skip />
+    <!-- no translation found for block (8222234609302978844) -->
+    <skip />
+    <!-- no translation found for too_many_windows_dialog_title (7333114058131121612) -->
+    <skip />
+    <!-- no translation found for too_many_windows_dialog_message (5756910780171823582) -->
+    <skip />
+    <!-- no translation found for too_many_subwindows_dialog_title (2259095685014237401) -->
+    <skip />
+    <!-- no translation found for too_many_subwindows_dialog_message (8649268116653189359) -->
+    <skip />
+    <string name="download_title">"Historie stahování"</string>
+    <string name="download_unknown_filename">"&lt;Neznámý&gt;"</string>
+    <string name="download_menu_open">"Otevřít"</string>
+    <string name="download_menu_clear">"Vymazat ze seznamu"</string>
+    <string name="download_menu_cancel">"Zrušit stahování"</string>
+    <string name="download_menu_cancel_all">"Zrušit stahování"</string>
+    <string name="download_menu_clear_all">"Vymazat seznam"</string>
+    <string name="download_clear_dlg_title">"Vymazat historii stahování?"</string>
+    <string name="download_clear_dlg_msg">"Všechny položky budou vymazány ze seznamu a odebrány z mezipaměti prohlížeče."</string>
+    <string name="download_cancel_dlg_title">"Zrušit všechny soubory ke stažení?"</string>
+    <string name="download_cancel_dlg_msg">"Všech <xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> souborů ke stažení bude zrušeno a vymazáno z historie stahování"</string>
+    <string name="download_file_error_dlg_title">"V zařízení je nedostatek volného místa!"</string>
+    <string name="download_file_error_dlg_msg">"Soubor <xliff:g id="FILENAME">%s</xliff:g> nelze stáhnout!"\n"Uvolněte místo a akci zopakujte"</string>
+    <!-- no translation found for download_failed_generic_dlg_title (8562717866914682645) -->
+    <skip />
+    <string name="download_no_sdcard_dlg_title">"Karta SD chybí"</string>
+    <string name="download_no_sdcard_dlg_msg">"Ke stažení souboru <xliff:g id="FILENAME">%s</xliff:g> je požadována karta SD"</string>
+    <!-- no translation found for download_sdcard_busy_dlg_title (3567893864853166417) -->
+    <skip />
+    <!-- no translation found for download_sdcard_busy_dlg_msg (1001912975692187541) -->
+    <skip />
+    <!-- no translation found for download_no_application (5265347124243427089) -->
+    <skip />
+    <string name="retry">"Opakovat"</string>
+    <!-- no translation found for no_downloads (7894879851319497472) -->
+    <skip />
+    <string name="download_error">"Chyba"</string>
+    <string name="download_success">"Stahování souboru <xliff:g id="FILE">%s</xliff:g> dokončeno"</string>
+    <string name="download_running">"Stahování"</string>
+    <string name="download_pending">"Zahájení stahování…"</string>
+    <string name="download_pending_network">"Čekání na síť…"</string>
+    <string name="download_running_paused">"Čekání na síť…"</string>
+    <string name="download_canceled">"Zrušeno"</string>
+    <string name="download_not_acceptable">"Nelze stáhnout; obsah není podporován"</string>
+    <string name="download_file_error">"Stahování nelze dokončit; není dostatek volného místa."</string>
+    <string name="download_length_required">"Nelze stáhnout; nelze zjistit velikost obsahu"</string>
+    <string name="download_precondition_failed">"Stahování bylo přerušeno a nelze jej obnovit"</string>
+    <string name="activity_instrumentation_test_runner">"Spouštěč testu prohlížeče"</string>
+    <!-- no translation found for bookmarks:0 (2669626530219651906) -->
+    <!-- no translation found for bookmarks:1 (8920188753455673436) -->
+    <!-- no translation found for bookmarks:2 (5890527770397510829) -->
+    <!-- no translation found for bookmarks:3 (634634678612400806) -->
+    <!-- no translation found for bookmarks:4 (4132740574133762086) -->
+    <!-- no translation found for bookmarks:5 (6510542478033180946) -->
+    <!-- no translation found for bookmarks:6 (5667186751799051943) -->
+    <!-- no translation found for bookmarks:7 (3378357885957076220) -->
+    <!-- no translation found for bookmarks:8 (2727431815822096867) -->
+    <!-- no translation found for bookmarks:9 (7949295853613367991) -->
+    <!-- no translation found for bookmarks:10 (5985757861847203946) -->
+    <!-- no translation found for bookmarks:11 (6260770464856553368) -->
+    <!-- no translation found for bookmarks:12 (4463319277329080059) -->
+    <!-- no translation found for bookmarks:13 (2636025423846695074) -->
+    <!-- no translation found for bookmarks:14 (2643133601978453087) -->
+    <!-- no translation found for bookmarks:15 (8995994276785373352) -->
+    <!-- no translation found for bookmarks:16 (4894838772550822052) -->
+    <!-- no translation found for bookmarks:17 (7081430327955247093) -->
+    <!-- no translation found for bookmarks:18 (2796182980773740417) -->
+    <!-- no translation found for bookmarks:19 (1324322519589241668) -->
+    <!-- no translation found for bookmarks:20 (1055922756345330887) -->
+    <!-- no translation found for bookmarks:21 (1518235964411311132) -->
+    <!-- no translation found for bookmarks:22 (8138495122223575936) -->
+    <!-- no translation found for bookmarks:23 (8289313955121188870) -->
+    <!-- no translation found for bookmarks:24 (7125621759895702022) -->
+    <!-- no translation found for bookmarks:25 (7609322002140654607) -->
+    <!-- no translation found for permlab_browserHistoryBookmarks (5493497627955922660) -->
+    <skip />
+    <!-- no translation found for permdesc_browserHistoryBookmarksr (3171543258112427347) -->
+    <skip />
+    <!-- no translation found for query_data_message (7140709852400117779) -->
+    <skip />
+    <!-- no translation found for location_message (6511630893995463975) -->
+    <skip />
+    <!-- no translation found for shortcut_message (5568077355697048834) -->
+    <skip />
+    <!-- no translation found for settings_message (1701958693991922301) -->
+    <skip />
+    <!-- no translation found for filepicker_message (5531754350158888098) -->
+    <skip />
+    <!-- no translation found for settings_title (32825391041790606) -->
+    <skip />
+    <!-- no translation found for privacy_policy (1087157192372256439) -->
+    <skip />
+    <!-- no translation found for permission_button_alwaysdeny (7803128350369883866) -->
+    <skip />
+    <!-- no translation found for permission_button_allow (7881835043864608428) -->
+    <skip />
+    <!-- no translation found for permission_button_deny (3548320067085927679) -->
+    <skip />
+    <!-- no translation found for shortcut_button_alwaysdeny (6308157245982840996) -->
+    <skip />
+    <!-- no translation found for shortcut_button_allow (8498946786971248422) -->
+    <skip />
+    <!-- no translation found for shortcut_button_deny (3940523612393573649) -->
+    <skip />
+    <!-- no translation found for settings_button_allow (7851054650645187901) -->
+    <skip />
+    <!-- no translation found for settings_button_deny (3326471281560175933) -->
+    <skip />
+    <!-- no translation found for filepicker_button_allow (5240552202985777948) -->
+    <skip />
+    <!-- no translation found for filepicker_button_deny (1051766005354192724) -->
+    <skip />
+    <!-- no translation found for remove (2594370161087626837) -->
+    <skip />
+    <!-- no translation found for local_storage (5763760818741582585) -->
+    <skip />
+    <!-- no translation found for allowed (8924273826726032911) -->
+    <skip />
+    <!-- no translation found for denied (6492706120626219130) -->
+    <skip />
+    <!-- no translation found for unrecognized_dialog_message (3815294112748134088) -->
+    <skip />
+    <!-- no translation found for default_button (1348925503811332932) -->
+    <skip />
 </resources>
diff --git a/res/values-de-rDE/strings.xml b/res/values-de-rDE/strings.xml
deleted file mode 100644
index beff7cd..0000000
--- a/res/values-de-rDE/strings.xml
+++ /dev/null
@@ -1,270 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string name="action">Anmelden</string>
-  <string name="activity_instrumentation_functional_test_runner">Testlauf Browserfunktion</string>
-  <string name="activity_instrumentation_test_runner">Testlauf Browserfunktion</string>
-  <string name="add_new_bookmark">Neues Lesezeichen</string>
-  <string name="allow">Zulassen</string>
-  <string name="attention">Achtung</string>
-  <string name="back">Zurück</string>
-  <string name="block">Blockieren</string>
-  <string name="bookmark_needs_title">"Lesezeichen müssen einen Namen besitzen."</string>
-  <string name="bookmark_needs_url">"Lesezeichen müssen auf einen Ort weisen."</string>
-  <string name="bookmark_page">Zuletzt angesehene Seite mit Lesezeichen versehen</string>
-  <string name="bookmark_saved">Unter Lesezeichen gespeichert.</string>
-  <string name="bookmark_url_not_valid">URL ist nicht gültig.</string>
-  <string name="bookmarks">Lesezeichen</string>
-  <string name="browserFrame307Post">Für diese Webseite gibt es einen anderen Ort. Möchten Sie die im Formzlar eingegebenen Daten zu diesem Ort senden?</string>
-  <string name="browserFrameFileErrorLabel">Problem mit der Datei</string>
-  <string name="browserFrameFormResubmitLabel">Bestätigen</string>
-  <string name="browserFrameFormResubmitMessage">Die Seite, die Sie ansehen möchten, enthält Daten, die bereits übertragen wurden (\"POSTDATA\"). Wenn Sie die Daten erneut senden, werden alle Aktionen, die vom Formular auf der Seite veranlasst werden (z. B. eine Suche oder ein Online-Kauf) wiederholt.</string>
-  <string name="browserFrameNetworkErrorLabel">Problem mit Datenverbindung</string>
-  <string name="browserFrameRedirect">Umleiten</string>
-  <string name="browser_bookmarks_page_bookmarks_text">Lesezeichen</string>
-  <string name="browser_history">Zuletzt besuchte Seiten</string>
-  <string name="cache_cleared">Cache gelöscht</string>
-  <string name="cancel">Abbrechen</string>
-  <string name="clear">Löschen</string>
-  <string name="clear_history">Verlauf löschen</string>
-  <string name="close">Schließen</string>
-  <string name="close_window">Dieses Fenster wird geschlossen.</string>
-  <string name="common_name">Allgemeiner Name:</string>
-  <string name="contextmenu_add_contact">Kontakt hinzufügen</string>
-  <string name="contextmenu_bookmark_thislink">Lesezeichen Verknüpfung</string>
-  <string name="contextmenu_copy">Kopieren</string>
-  <string name="contextmenu_copylink">URL Verknüpfung kopieren</string>
-  <string name="contextmenu_dial_dot">Wählen\u2026</string>
-  <string name="contextmenu_download_image">Bild speichern</string>
-  <string name="contextmenu_javascript">JavaScript</string>
-  <string name="contextmenu_map">Landkarte</string>
-  <string name="contextmenu_openlink">Öffnen</string>
-  <string name="contextmenu_openlink_newwindow">In neuem Fenster öffnen</string>
-  <string name="contextmenu_savelink">Verknüpfung speichern</string>
-  <string name="contextmenu_send_mail">E-Mail senden</string>
-  <string name="contextmenu_sharelink">Verknüpfung freigeben</string>
-  <string name="contextmenu_view_image">Bild anzeigen</string>
-  <string name="current_page">Aktuelle Seite:\u0020</string>
-  <string name="delete">Löschen</string>
-  <string name="delete_bookmark">Löschen</string>
-  <string name="delete_bookmark_warning">Lesezeichen \"<xliff:g id="bookmark">%s</xliff:g>\" wird gelöscht.</string>
-  <string name="do_not_save">Abbrechen</string>
-  <string name="done">Fertig</string>
-  <string name="download_cancel_dlg_msg">Alle <xliff:g id="download_count">%d</xliff:g> Downloads werden abgebrochen und aus dem Verlauf des Herunterladens entfernt.</string>
-  <string name="download_cancel_dlg_title">Herunterladen abbrechen</string>
-  <string name="download_canceled">Herunterladen abgebrochen.</string>
-  <string name="download_clear_dlg_msg">Alle Elemente werden in der Liste gelöscht und aus dem Browser-Cache (Zwischenspeicher) entfernt.</string>
-  <string name="download_clear_dlg_title">Löschen</string>
-  <string name="download_error">Herunterladen nicht erfolgreich.</string>
-  <string name="download_failed_generic_dlg_title">Herunterladen nicht erfolgreich</string>
-  <string name="download_file_error">Herunterladen kann nicht komplett durchgeführt werden. Der freie Speicherplatz reicht nicht aus.</string>
-  <string name="download_file_error_dlg_msg"><xliff:g id="filename">%s</xliff:g> konnte nicht heruntergeladen werden.\nStellen Sie zusätzlichen Speicher auf dem Telefon bereit und versuchen Sie es erneut.</string>
-  <string name="download_file_error_dlg_title">Speicherplatz reicht nicht aus</string>
-  <string name="download_length_required">Herunterladen kann nicht durchgeführt werden. Die Größe des Elementes kann nicht ermittelt werden.</string>
-  <string name="download_menu_cancel">Herunterladen abbrechen</string>
-  <string name="download_menu_cancel_all">Alle Herunterladungen abbrechen</string>
-  <string name="download_menu_clear">Aus Liste löschen</string>
-  <string name="download_menu_clear_all">Liste löschen</string>
-  <string name="download_menu_open">Öffnen</string>
-  <string name="download_no_application">Es gibt keine Anwendung zum Öffnen dieser Datei.</string>
-  <string name="download_no_sdcard_dlg_msg">Eine SD-Karte wird für das Herunterladen von <xliff:g id="filename">%s</xliff:g> benötigt.</string>
-  <string name="download_no_sdcard_dlg_title">Keine SD-Karte</string>
-  <string name="download_not_acceptable">Herunterladen kann nicht durchgeführt werden. Die Inhalte, die heruntergeladen werden sollen, werden vom Telefon nicht unterstützt.</string>
-  <string name="download_pending">Herunterladen wird gestartet\u2026</string>
-  <string name="download_pending_network">Warten auf Datenverbindung\u2026</string>
-  <string name="download_precondition_failed">Herunterladen wurde unterbrochen. Wiederaufnahme nicht möglich.</string>
-  <string name="download_running">Beim Herunterladen\u2026</string>
-  <string name="download_running_paused">Warten auf Datenverbindung\u2026</string>
-  <string name="download_success"><xliff:g id="file">%s</xliff:g> Herunterladen abgeschlossen.</string>
-  <string name="download_title">Verlauf des Herunterladens</string>
-  <string name="download_unknown_filename">&lt;Unbekannt&gt;</string>
-  <string name="dump_nav">Navigations-Cache löschen</string>
-  <string name="edit_bookmark">Lesezeichen bearbeiten</string>
-  <string name="empty_bookmark">"Es kann kein leeres Lesezeichen erstellt werden."</string>
-  <string name="empty_history">Browser-Verlauf ist leer.</string>
-  <string name="expires_on">Gültig bis:</string>
-  <string name="find_dot">Suchen auf Seite</string>
-  <string name="fingerprints">Fingerabdrücke:</string>
-  <string name="forward">Weiterleiten</string>
-  <string name="goto_dot">Gehe zu URL</string>
-  <string name="history">Verlauf</string>
-  <string name="history_picker_view_web_page">Öffnen</string>
-  <string name="homepage">Startseite</string>
-  <string name="homepage_set">Startseite aktualisiert</string>
-  <string name="http">http://</string>
-  <string name="info_base">Titel:\n  <xliff:g id="title">%s1</xliff:g> \n\nURL: \n  <xliff:g id="url">%s2</xliff:g></string>
-  <string name="issued_by">Herausgegeben von:</string>
-  <string name="issued_on">Herausgegeben am:</string>
-  <string name="issued_to">Herausgegeben an:</string>
-  <string name="js_dialog_before_unload">Diese Seite verlassen?\n\n<xliff:g id="message">%s</xliff:g>\n\nWählen Sie »OK« zur Fortsetzung oder »Abbrechen«, um auf aktueller Seite zu bleiben.</string>
-  <string name="js_dialog_title_default">JavaScript</string>
-  <string name="js_dialog_title_prefix">Die Seite auf</string>
-  <string name="js_dialog_title_suffix">gibt an:</string>
-  <string name="loadSuspended">Das Laden der Seite wird fortgesetzt, nachdem die Verbindung wiederhergestellt wurde.</string>
-  <string name="loadSuspendedTitle">Keine Netzverbindung</string>
-  <string name="location">Ort</string>
-  <string name="matches_found">Gefundene Übereinstimmungen:</string>
-  <string name="md5_fingerprint">MD5-Fingerabdruck:</string>
-  <string name="menu_bookmark_page">Lesezeichen für diese Seite</string>
-  <string name="menu_flip_orientation">Ausrichtung wechseln</string>
-  <string name="menu_preferences">Einstellungen</string>
-  <string name="menu_use_as_homepage">Als Startseite einstellen</string>
-  <string name="menu_view_download">Heruntergeladen</string>
-  <string name="menu_zoom">Zoom</string>
-  <string name="name">Name</string>
-  <string name="new_window">Neues Fenster</string>
-  <string name="next">Weiter</string>
-  <string name="no_database">Keine Datenbank!</string>
-  <string name="no_downloads">Verlauf des Herunterladens ist leer.</string>
-  <string name="ok">OK</string>
-  <string name="oma_error_failed_to_download">Medien können nicht heruntergeladen werden.</string>
-  <string name="oma_error_insufficient_memory">Speicher reicht nicht aus! Prüfen Sie die SD-Karte.</string>
-  <string name="oma_error_invalid_descriptor">Beschreibung des Herunterladen-Ziels ungültig. </string>
-  <string name="oma_error_non_acceptable_content">Inhalte werden nicht unterstützt.</string>
-  <string name="oma_label_action">Herunterladen</string>
-  <string name="oma_label_cancel">Beenden</string>
-  <string name="oma_label_description">Beschreibung:</string>
-  <string name="oma_label_download_error">Fehler beim Herunterladen:</string>
-  <string name="oma_label_exit">Beenden</string>
-  <string name="oma_label_name">Name:</string>
-  <string name="oma_label_proceed">Fortfahren</string>
-  <string name="oma_label_size">Größe:</string>
-  <string name="oma_label_type">Typ:</string>
-  <string name="oma_label_vendor">Anbieter:</string>
-  <string name="oma_label_want_to_download">Möchten Sie diese Inhalte herunterladen?</string>
-  <string name="oma_status_attribute_mismatch">Attribut passt nicht</string>
-  <string name="oma_status_device_aborted">Telefongespräch unterbrochen</string>
-  <string name="oma_status_insufficient_memory">Speicher reicht nicht aus</string>
-  <string name="oma_status_invalid_descriptor">Ungültige Beschreibung</string>
-  <string name="oma_status_invalid_version">Ungültige Version</string>
-  <string name="oma_status_loader_error">Ladefehler</string>
-  <string name="oma_status_loss_of_service">Verlust des Dienstes</string>
-  <string name="oma_status_non_acceptable_content">Nicht akzeptierbare Inhalte</string>
-  <string name="oma_status_success">Erfolgreich</string>
-  <string name="oma_warning_one_or_more_types_not_supported">Eine oder mehrere Inhaltskategorien werden nicht unterstützt.</string>
-  <string name="open_bookmark">Öffnen</string>
-  <string name="open_in_new_window">In neuem Fenster öffnen</string>
-  <string name="org_name">Organisation:</string>
-  <string name="org_unit">Organisatorische Einheit:</string>
-  <string name="override">Ersetzen</string>
-  <string name="override_message">Die bestehenden Lesezeichen werden ersetzt.</string>
-  <string name="page_info">Seiteninfo</string>
-  <string name="page_info_address">Adresse:</string>
-  <string name="page_info_cache_source">Cache-Quelle:</string>
-  <string name="page_info_encoding">Kodierung:</string>
-  <string name="page_info_expires">Gültig bis:</string>
-  <string name="page_info_modified">Geändert am:</string>
-  <string name="page_info_referring_url">Bezugs-URL:</string>
-  <string name="page_info_render_mode">Umsetzungsmodus:</string>
-  <string name="page_info_size">Größe:</string>
-  <string name="page_info_type">Typ:</string>
-  <string name="page_info_view">Seiteninfo anzeigen</string>
-  <string name="password">Kennwort</string>
-  <string name="popup_window_attempt">Diese Site versucht ein
-      Popup-Fenster zu öffnen.</string>
-  <string name="pref_content_autofit">Seiten automatisch einpassen</string>
-  <string name="pref_content_autofit_summary">Webseiten formatieren, um sie in den Bildschirm einzupassen</string>
-  <string name="pref_content_block_popups">Popup-Fenster blockieren</string>
-  <string name="pref_content_homepage">Als Startseite einstellen</string>
-  <string name="pref_content_javascript">JavaScript aktivieren</string>
-  <string name="pref_content_load_images">Bilder laden</string>
-  <string name="pref_content_load_images_summary">Bilder auf Webseiten anzeigen</string>
-  <string name="pref_content_open_in_background">Im Hintergrund öffnen</string>
-  <string name="pref_content_open_in_background_summary">Neue Fenster hinter aktuellem Fenster öffnen</string>
-  <string name="pref_content_title">Einstellungen für Seiteninhalte</string>
-  <string name="pref_development_nav_dump">Löschen von Nav.-Cache aktivieren</string>
-  <string name="pref_development_normal_rendering">Normales Umsetzen</string>
-  <string name="pref_development_single_column_rendering">Umsetzen einer Spalte</string>
-  <string name="pref_development_title">Programmfehler entfernen</string>
-  <string name="pref_development_trace">Tracing aktivieren</string>
-  <string name="pref_development_track">Trackball aktivieren</string>
-  <string name="pref_development_uastring">UA (User Agent) String</string>
-  <string name="pref_development_viewport">Weite Darstellung im Browser (Viewport) verwenden</string>
-  <string name="pref_extras_gears_enable">Gears aktivieren</string>
-  <string name="pref_extras_gears_enable_summary">Anwendungen, die die Browser-Funktionalität erweitern</string>
-  <string name="pref_extras_gears_settings">Gears-Einstellungen</string>
-  <string name="pref_extras_gears_settings_summary">Anwendungen, die die Browser-Funktionalität erweitern</string>
-  <string name="pref_extras_reset_default">Standard wiederherstellen</string>
-  <string name="pref_extras_reset_default_dlg">Alle Browserdaten werden gelöscht und die Einstellungen werden auf die Standardwerte zurückgesetzt.</string>
-  <string name="pref_extras_reset_default_dlg_title">Standard wiederherstellen</string>
-  <string name="pref_extras_reset_default_summary">Alle Browserdaten löschen und Einstellungen auf Standardwerte zurücksetzen</string>
-  <string name="pref_extras_title">Erweiterte Einstellungen</string>
-  <string name="pref_plugin_installed_empty_listxx">Nicht installierte Plugins.</string>
-  <string name="pref_plugin_installed_summaryxx">Aktuell installierte Plugins anzeigen</string>
-  <string name="pref_privacy_clear_cache">Zwischenspeicher löschen</string>
-  <string name="pref_privacy_clear_cache_dlg">Der Zwischenspeicher wird gelöscht.</string>
-  <string name="pref_privacy_clear_cache_summary">Alle im Zwischenspeicher gespeicherten Seiteninhalte löschen</string>
-  <string name="pref_privacy_clear_cookies">Alle Cookie-Daten löschen</string>
-  <string name="pref_privacy_clear_cookies_dlg">Alle Cookies werden gelöscht.</string>
-  <string name="pref_privacy_clear_cookies_summary">Alle Browser-Cookies löschen</string>
-  <string name="pref_privacy_clear_form_data">Formulardaten löschen</string>
-  <string name="pref_privacy_clear_form_data_dlg">Alle gespeicherten Formulardaten werden gelöscht.</string>
-  <string name="pref_privacy_clear_form_data_summary">Alle gespeicherten Formulardaten löschen</string>
-  <string name="pref_privacy_clear_history">Verlauf löschen</string>
-  <string name="pref_privacy_clear_history_dlg">Der Navigationsverlauf des Browsers wird gelöscht.</string>
-  <string name="pref_privacy_clear_history_summary">Navigationsverlauf des Browsers löschen</string>
-  <string name="pref_privacy_clear_passwords">Kennworte löschen</string>
-  <string name="pref_privacy_clear_passwords_dlg">Alle gespeicherten Kennworte werden gelöscht.</string>
-  <string name="pref_privacy_clear_passwords_summary">Alle gespeicherten Kennworte löschen</string>
-  <string name="pref_privacy_title">Datenschutzeinstellungen</string>
-  <string name="pref_security_accept_cookies">Cookies akzeptieren</string>
-  <string name="pref_security_accept_cookies_summary">Seiten ermöglichen \"cookie\"-Daten zu speichern und zu lesen</string>
-  <string name="pref_security_remember_passwords">An Kennworte erinnern</string>
-  <string name="pref_security_remember_passwords_summary">Benutzernamen und Kennworte für Webseiten speichern</string>
-  <string name="pref_security_save_form_data">An Formulardaten erinnern</string>
-  <string name="pref_security_save_form_data_summary">An Daten erinnern, die in Formulare eingegeben wurden</string>
-  <string name="pref_security_show_security_warning">Sicherheitswarnungen anzeigen</string>
-  <string name="pref_security_show_security_warning_summary">Warnung anzeigen, wenn es ein Problem mit der Sicherheit einer Seite gibt</string>
-  <string name="pref_security_title">Sicherheitseinstellungen</string>
-  <string name="pref_text_size">Textgröße</string>
-  <string name="pref_text_size_dialogtitle">Textgröße</string>
-  <string name="pref_text_size_summary">Größe von Text auf Webseiten auswählen</string>
-  <string name="prev">Zurück</string>
-  <string name="question_mark">\?</string>
-  <string name="reload">Aktualisieren</string>
-  <string name="remove_bookmark">Lesezeichen löschen</string>
-  <string name="remove_history_item">Aus Verlauf entfernen</string>
-  <string name="replace">Ersetzen</string>
-  <string name="retrieving_creds_dlg_msg">Anmeldedetails abrufen\u2026</string>
-  <string name="retry">Wiederholen</string>
-  <string name="save">OK</string>
-  <string name="save_to_bookmarks">Lesezeichen Verknüpfung</string>
-  <string name="search">Suchen</string>
-  <string name="search_button_text">Gehe zu</string>
-  <string name="search_hint">Webadresse eingeben</string>
-  <string name="search_label">Browser</string>
-  <string name="security_warning">Sicherheitswarnung</string>
-  <string name="sha1_fingerprint">Fingerabdruck gemäß SHA1:</string>
-  <string name="share_page">Seite freigeben</string>
-  <string name="shortcut_bookmark">Lesezeichen</string>
-  <string name="sign_in_to">Bei <xliff:g id="hostname">%s1</xliff:g> \"<xliff:g id="realm">%s2</xliff:g>\" anmelden</string>
-  <string name="ssl_certificate">Sicherheitszertifikat</string>
-  <string name="ssl_certificate_is_valid">Dieses Zertifikat ist gültig.</string>
-  <string name="ssl_continue">Fortfahren</string>
-  <string name="ssl_expired">Dieses Zertifikat ist nicht mehr gültig.</string>
-  <string name="ssl_mismatch">Der Name der Seite stimmt nicht mit dem Namen des Zertifikats überein.</string>
-  <string name="ssl_not_yet_valid">Dieses Zertifikat ist noch nicht gültig.</string>
-  <string name="ssl_untrusted">Dieses Zertifikat wurde von keiner zuverlässigen Stelle ausgestellt.</string>
-  <string name="ssl_warnings_header">Es gibt Probleme mit dem Sicherheitszertifikat für diese Seite.</string>
-  <string name="stop">Anhalten</string>
-  <string name="stopping">Anhalten\u2026</string>
-  <string name="tab_picker_bookmark">Lesezeichen</string>
-  <string name="tab_picker_new_tab">Neues Fenster</string>
-  <string name="tab_picker_remove_tab">Schließen</string>
-  <string name="tab_picker_send_url">Verknüpfung freigeben</string>
-  <string name="tab_picker_title">Aktuelle Fenster</string>
-  <string name="tab_picker_view_tab">Ansicht</string>
-  <string name="too_many_subwindows_dialog_message">Neues Popup-Fenster
-     konnte nicht geöffnet werden, da nicht mehr als ein Fenster gleichzeitig geöffnet werden kann.</string>
-  <string name="too_many_subwindows_dialog_title">Pop-up-Fenster bereits geöffnet</string>
-  <string name="too_many_windows_dialog_message">Neues Fenster konnte nicht geöffnet werden, da bereits die maximale Anzahl von Fenstern geöffnet ist.</string>
-  <string name="too_many_windows_dialog_title">Maximale Fensteranzahl erreicht</string>
-  <string name="username">Name</string>
-  <string name="validity_period">Gültigkeit:</string>
-  <string name="view_certificate">Zertifikat anzeigen</string>
-  <string name="view_tabs">Fensterübersicht</string>
-  <string name="view_tabs_condensed">Fenster</string>
-  <string name="visual_history">Fensterverlauf</string>
-  <string name="with">mit</string>
-  <string name="zero">0</string>
-</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
new file mode 100644
index 0000000..e943084
--- /dev/null
+++ b/res/values-de/strings.xml
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="sign_in_to">"Bei <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\" anmelden"</string>
+    <string name="username">"Name"</string>
+    <string name="password">"Passwort"</string>
+    <string name="action">"Anmelden"</string>
+    <string name="cancel">"Abbrechen"</string>
+    <string name="ok">"OK"</string>
+    <!-- no translation found for matches_found (4019114285322631887) -->
+    <skip />
+    <!-- no translation found for zero (5187607177868389265) -->
+    <skip />
+    <string name="page_info">"Seiten-Info"</string>
+    <string name="page_info_view">"Seiten-Info anzeigen"</string>
+    <string name="page_info_address">"Adresse:"</string>
+    <string name="ssl_warnings_header">"Es ist ein Problem mit dem Sicherheitszertifikat für diese Website aufgetreten."</string>
+    <string name="ssl_continue">"Fortfahren"</string>
+    <string name="security_warning">"Sicherheitswarnung"</string>
+    <string name="view_certificate">"Zertifikat anzeigen"</string>
+    <string name="ssl_untrusted">"Dieses Zertifikat wurde nicht von einer vertrauenswürdigen Stelle ausgegeben."</string>
+    <string name="ssl_mismatch">"Der Name der Website stimmt nicht mit dem Namen auf dem Zertifikat überein."</string>
+    <string name="ssl_expired">"Dieses Zertifikat ist abgelaufen."</string>
+    <string name="ssl_not_yet_valid">"Dieses Zertifikat ist noch nicht gültig."</string>
+    <string name="ssl_certificate">"Sicherheitszertifikat"</string>
+    <string name="ssl_certificate_is_valid">"Dies ist ein gültiges Zertifikat."</string>
+    <string name="issued_to">"Ausgegeben an:"</string>
+    <string name="common_name">"Allgemeiner Name."</string>
+    <string name="org_name">"Organisation:"</string>
+    <string name="org_unit">"Organisationseinheit:"</string>
+    <string name="issued_by">"Ausgegeben von:"</string>
+    <string name="validity_period">"Gültigkeit:"</string>
+    <string name="issued_on">"Ausgegeben am:"</string>
+    <string name="expires_on">"Läuft ab am:"</string>
+    <string name="retrieving_creds_dlg_msg">"Anmeldedetails werden abgerufen…"</string>
+    <string name="close">"Schließen"</string>
+    <string name="close_window">"Dieses Fenster wird geschlossen."</string>
+    <string name="stopping">"Wird angehalten..."</string>
+    <string name="stop">"Anhalten"</string>
+    <string name="reload">"Aktualisieren"</string>
+    <string name="back">"Zurück"</string>
+    <string name="forward">"Weiter"</string>
+    <string name="save">"OK"</string>
+    <string name="do_not_save">"Abbrechen"</string>
+    <string name="location">"Ort"</string>
+    <string name="name">"Name"</string>
+    <string name="http">"http://"</string>
+    <!-- no translation found for save_to_bookmarks (4680844117598293907) -->
+    <skip />
+    <string name="edit_bookmark">"Lesezeichen bearbeiten"</string>
+    <!-- no translation found for create_shortcut_bookmark (9202323987633899835) -->
+    <skip />
+    <string name="open_bookmark">"Öffnen"</string>
+    <string name="remove_bookmark">"Lesezeichen löschen"</string>
+    <string name="remove_history_item">"Aus Verlauf entfernen"</string>
+    <string name="bookmark_saved">"Gespeichert in Lesezeichen."</string>
+    <string name="bookmark_needs_title">"Das Lesezeichen muss über einen Namen verfügen."</string>
+    <string name="bookmark_needs_url">"Das Lesezeichen muss über einen Speicherort verfügen."</string>
+    <string name="empty_bookmark">"Sie können kein leeres Lesezeichen erstellen."</string>
+    <string name="bookmark_url_not_valid">"URL ist nicht gültig."</string>
+    <string name="delete_bookmark">"Löschen"</string>
+    <string name="bookmark_page">"Lesezeichen für zuletzt besuchte Seite"</string>
+    <string name="current_page">"Aktuelle Seite:"</string>
+    <string name="delete_bookmark_warning">"Lesezeichen \"<xliff:g id="BOOKMARK">%s</xliff:g>\" wird gelöscht."</string>
+    <string name="open_in_new_window">"In neuem Fenster öffnen"</string>
+    <string name="new_window">"Neues Fenster"</string>
+    <string name="goto_dot">"Gehe zu URL"</string>
+    <string name="find_dot">"Auf Seite suchen"</string>
+    <string name="homepage">"Startseite"</string>
+    <string name="view_tabs">"Fensterübersicht"</string>
+    <!-- no translation found for view_tabs_condensed (5803955493821945369) -->
+    <skip />
+    <string name="tab_picker_title">"Aktuelle Fenster"</string>
+    <string name="tab_picker_view_tab">"Anzeigen"</string>
+    <string name="tab_picker_new_tab">"Neues Fenster"</string>
+    <string name="tab_picker_remove_tab">"Schließen"</string>
+    <string name="tab_picker_bookmark">"Lesezeichen"</string>
+    <string name="tab_picker_send_url">"Link weiterleiten"</string>
+    <string name="bookmarks">"Lesezeichen"</string>
+    <string name="shortcut_bookmark">"Lesezeichen"</string>
+    <string name="history">"Suchverlauf"</string>
+    <string name="menu_view_download">"Downloads"</string>
+    <string name="menu_bookmark_page">"Lesezeichen-Seite"</string>
+    <string name="share_page">"Seitenlink weiterleiten"</string>
+    <string name="menu_zoom">"Zoom"</string>
+    <string name="menu_flip_orientation">"Ausrichtung drehen"</string>
+    <string name="contextmenu_openlink">"Öffnen"</string>
+    <string name="contextmenu_openlink_newwindow">"In neuem Fenster öffnen"</string>
+    <string name="contextmenu_bookmark_thislink">"Lesezeichen-Link"</string>
+    <string name="contextmenu_savelink">"Link speichern"</string>
+    <string name="contextmenu_sharelink">"Link weiterleiten"</string>
+    <string name="contextmenu_copy">"Kopieren"</string>
+    <string name="contextmenu_copylink">"Link-URL kopieren"</string>
+    <string name="contextmenu_download_image">"Bild speichern"</string>
+    <string name="contextmenu_view_image">"Bild anzeigen"</string>
+    <string name="contextmenu_dial_dot">"Wählen..."</string>
+    <string name="contextmenu_add_contact">"Kontakt hinzufügen"</string>
+    <string name="contextmenu_send_mail">"E-Mail senden"</string>
+    <string name="contextmenu_map">"Karte"</string>
+    <string name="clear">"Löschen"</string>
+    <string name="replace">"Ersetzen"</string>
+    <string name="browser_bookmarks_page_bookmarks_text">"Lesezeichen"</string>
+    <string name="menu_preferences">"Einstellungen"</string>
+    <string name="pref_content_title">"Einstellungen für Seiteninhalt"</string>
+    <string name="pref_content_load_images">"Bilder laden"</string>
+    <string name="pref_content_load_images_summary">"Bilder auf Webseiten anzeigen"</string>
+    <string name="pref_content_block_popups">"Popup-Fenster blockieren"</string>
+    <string name="pref_content_javascript">"JavaScript aktivieren"</string>
+    <string name="pref_content_open_in_background">"Im Hintergrund öffnen"</string>
+    <string name="pref_content_open_in_background_summary">"Neue Fenster hinter dem aktuellen Fenster geöffnet"</string>
+    <string name="pref_content_homepage">"Startseite festlegen"</string>
+    <string name="pref_content_autofit">"Seiten autom. anpassen"</string>
+    <string name="pref_content_autofit_summary">"Webseiten an den Bildschirm anpassen"</string>
+    <string name="pref_privacy_title">"Datenschutzeinstellungen"</string>
+    <string name="pref_privacy_clear_cache">"Cache löschen"</string>
+    <string name="pref_privacy_clear_cache_summary">"Alle Seiteninhalte im Cache löschen"</string>
+    <string name="pref_privacy_clear_cache_dlg">"Der Cache wird gelöscht."</string>
+    <string name="pref_privacy_clear_cookies">"Alle Cookiedaten löschen"</string>
+    <string name="pref_privacy_clear_cookies_summary">"Alle Browser-Cookies löschen"</string>
+    <string name="pref_privacy_clear_cookies_dlg">"Alle Cookies werden gelöscht."</string>
+    <string name="pref_privacy_clear_history">"Verlauf löschen"</string>
+    <string name="pref_privacy_clear_history_summary">"Navigationsverlauf des Browsers löschen"</string>
+    <string name="pref_privacy_clear_history_dlg">"Der Navigationsverlauf des Browsers wird gelöscht."</string>
+    <string name="pref_privacy_clear_form_data">"Formulardaten löschen"</string>
+    <string name="pref_privacy_clear_form_data_summary">"Alle gespeicherten Formulardaten löschen"</string>
+    <string name="pref_privacy_clear_form_data_dlg">"Alle gespeicherten Formulardaten werden gelöscht."</string>
+    <string name="pref_privacy_clear_passwords">"Passwörter löschen"</string>
+    <string name="pref_privacy_clear_passwords_summary">"Alle gespeicherten Passwörter löschen"</string>
+    <string name="pref_privacy_clear_passwords_dlg">"Alle gespeicherten Passwörter werden gelöscht."</string>
+    <string name="pref_security_title">"Sicherheitseinstellungen"</string>
+    <string name="pref_security_remember_passwords">"Passwörter merken"</string>
+    <string name="pref_security_remember_passwords_summary">"Nutzernamen und Passwörter für Websites speichern"</string>
+    <string name="pref_security_save_form_data">"Formulardaten merken"</string>
+    <string name="pref_security_save_form_data_summary">"Daten in Formularen zur späteren Verwendung merken"</string>
+    <string name="pref_security_show_security_warning">"Sicherheitswarnungen"</string>
+    <string name="pref_security_show_security_warning_summary">"Warnung anzeigen, wenn ein Problem mit der Sicherheit der Website besteht"</string>
+    <string name="pref_security_accept_cookies">"Cookies akzeptieren"</string>
+    <string name="pref_security_accept_cookies_summary">"Speichern und Lesen von \"Cookie\"-Daten zulassen"</string>
+    <!-- no translation found for pref_text_size (3765589440020504007) -->
+    <skip />
+  <string-array name="pref_text_size_choices">
+    <item>"Sehr klein"</item>
+    <item>"Klein"</item>
+    <item>"Normal"</item>
+    <item>"Groß"</item>
+    <item>"Sehr groß"</item>
+  </string-array>
+    <string name="pref_text_size_dialogtitle">"Textgröße"</string>
+    <string name="pref_extras_title">"Erweiterte Einstellungen"</string>
+    <string name="pref_extras_gears_enable">"Gears aktivieren"</string>
+    <string name="pref_extras_gears_enable_summary">"Anwendungen, die die Browserfunktionen erweitern"</string>
+    <string name="pref_extras_gears_settings">"Gears-Einstellungen"</string>
+    <!-- no translation found for pref_plugin_installed (6387683936112106178) -->
+    <skip />
+    <!-- no translation found for pref_plugin_installed_empty_list (6656686482480679665) -->
+    <skip />
+    <string name="pref_extras_gears_settings_summary">"Vom Browser nicht unterstützte Anwendungen"</string>
+    <string name="pref_extras_reset_default">"Auf Standard zurücksetzen"</string>
+    <string name="pref_extras_reset_default_summary">"Alle Browserdaten löschen und alle Einstellungen auf Standardeinstellung zurücksetzen"</string>
+    <string name="pref_extras_reset_default_dlg">"Alle Browserdaten werden gelöscht. Alle Einstellungen werden auf die Standardeinstellung zurückgesetzt."</string>
+    <string name="pref_extras_reset_default_dlg_title">"Auf Standardeinstellung zurücksetzen"</string>
+    <string name="pref_development_title">"Debuggen"</string>
+    <string name="pref_development_viewport">"Use wide viewport"</string>
+    <string name="pref_development_single_column_rendering">"Single column rendering"</string>
+    <string name="pref_development_normal_rendering">"Normal rendering"</string>
+    <string name="pref_development_trace">"Enable tracing"</string>
+    <string name="pref_development_nav_dump">"Enable nav cache dump"</string>
+    <!-- no translation found for pref_development_search_url (7979283099657732298) -->
+    <skip />
+    <string name="pref_development_uastring">"UAString"</string>
+  <string-array name="pref_development_ua_choices">
+    <item>"Android"</item>
+    <item>"Google Desktop"</item>
+    <item>"iPhone"</item>
+  </string-array>
+  <string-array name="pref_development_ua_values">
+    <item>"0"</item>
+    <item>"1"</item>
+    <item>"2"</item>
+  </string-array>
+    <!-- no translation found for pref_default_text_encoding (2689164865300623884) -->
+    <skip />
+    <!-- no translation found for pref_default_text_encoding_choices:0 (7275223955790513818) -->
+    <!-- no translation found for pref_default_text_encoding_choices:1 (2456597866837587140) -->
+    <!-- no translation found for pref_default_text_encoding_choices:2 (7143715548814380950) -->
+    <!-- no translation found for pref_default_text_encoding_choices:3 (5111312120564516587) -->
+    <!-- no translation found for pref_default_text_encoding_choices:4 (6545734186479713946) -->
+    <!-- no translation found for pref_default_text_encoding_dialogtitle (5508255018084978547) -->
+    <skip />
+    <!-- no translation found for pref_default_text_encoding_default (5272126711231936722) -->
+    <skip />
+    <string name="browserFrameRedirect">"Redirect"</string>
+    <string name="browserFrame307Post">"Diese Webseite wird umgeleitet. Sollen Ihre eingegebenen Formulardaten an den neuen Ort gesendet werden?"</string>
+    <string name="browserFrameNetworkErrorLabel">"Datenverbindungsproblem"</string>
+    <string name="browserFrameFileErrorLabel">"Problem mit Datei"</string>
+    <string name="browserFrameFormResubmitLabel">"Bestätigen"</string>
+    <string name="browserFrameFormResubmitMessage">"Die Seite, die Sie anzuzeigen versuchen, enthält Daten, die bereits gesendet wurde (\"POST-DATEN\"). Wenn Sie die Daten erneut senden, wird jede Aktion, die das Formular auf der Seite ausgeführt hat, wiederholt (wie beispielsweise eine Suche oder ein Online-Kauf)."</string>
+    <string name="loadSuspendedTitle">"Keine Netzwerkverbindung"</string>
+    <string name="loadSuspended">"Die Seite wird weiter geladen, nachdem die Verbindung wiederhergestellt wurde."</string>
+    <string name="clear_history">"Verlauf löschen"</string>
+    <string name="browser_history">"Zuletzt besuchte Seiten"</string>
+    <string name="empty_history">"Browserverlauf ist leer."</string>
+    <string name="add_new_bookmark">"Neues Lesezeichen"</string>
+    <string name="no_database">"Keine Datenbank!"</string>
+    <string name="search_hint">"Webadresse eingeben"</string>
+    <string name="search">"Suche"</string>
+    <string name="search_button_text">"Los"</string>
+    <string name="js_dialog_title_prefix">"Die Seite auf"</string>
+    <string name="js_dialog_title_suffix">"zeigt an:"</string>
+    <string name="js_dialog_title_default">"JavaScript"</string>
+    <string name="js_dialog_before_unload">"Von dieser Seite navigieren?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Wählen Sie \"OK\", um fortzufahren, oder wählen Sie \"Abbrechen\", um auf der aktuellen Seite zu bleiben."</string>
+    <string name="attention">"Achtung"</string>
+    <string name="popup_window_attempt">"Diese Website versucht, ein Pop-up-Fenster zu öffnen."</string>
+    <string name="allow">"Zulassen"</string>
+    <string name="block">"Blockieren"</string>
+    <string name="too_many_windows_dialog_title">"Fensterlimit erreicht"</string>
+    <string name="too_many_windows_dialog_message">"Es konnte kein neues Fenster geöffnet werden, da Sie bereits die maximale Anzahl an Fenstern geöffnet haben."</string>
+    <string name="too_many_subwindows_dialog_title">"Pop-up ist bereits geöffnet"</string>
+    <string name="too_many_subwindows_dialog_message">"Es konnte kein neues Pop-up-Fenster geöffnet werden, da nur jeweils ein Fenster geöffnet sein kann."</string>
+    <string name="download_title">"Downloadverlauf"</string>
+    <string name="download_unknown_filename">"&lt;Unbekannt&gt;"</string>
+    <string name="download_menu_open">"Öffnen"</string>
+    <string name="download_menu_clear">"Aus Liste löschen"</string>
+    <string name="download_menu_cancel">"Download abbrechen"</string>
+    <string name="download_menu_cancel_all">"Alle Downloads abbrechen"</string>
+    <string name="download_menu_clear_all">"Liste löschen"</string>
+    <string name="download_clear_dlg_title">"Löschen"</string>
+    <string name="download_clear_dlg_msg">"Alle Elemente werden aus der Liste gelöscht und aus dem Browser-Cache entfernt."</string>
+    <string name="download_cancel_dlg_title">"Downloads abbrechen"</string>
+    <string name="download_cancel_dlg_msg">"Alle <xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> Downloads werden abgebrochen und aus dem Downloadverlauf gelöscht."</string>
+    <string name="download_file_error_dlg_title">"Kein freier Speicher vorhanden"</string>
+    <string name="download_file_error_dlg_msg">"<xliff:g id="FILENAME">%s</xliff:g> konnte nicht heruntergeladen werden."\n"Bereinigen Sie den Speicher Ihres Telefons und versuchen Sie es erneut."</string>
+    <string name="download_failed_generic_dlg_title">"Download war nicht erfolgreich"</string>
+    <string name="download_no_sdcard_dlg_title">"Keine SD-Karte"</string>
+    <string name="download_no_sdcard_dlg_msg">"Zum Download von <xliff:g id="FILENAME">%s</xliff:g> ist eine SD-Karte erforderlich."</string>
+    <!-- no translation found for download_sdcard_busy_dlg_title (6877712666046917741) -->
+    <skip />
+    <!-- no translation found for download_sdcard_busy_dlg_msg (4579003999083645700) -->
+    <skip />
+    <string name="download_no_application">"Es kann keine Anwendung gefunden werden, um diese Datei zu öffnen."</string>
+    <string name="retry">"Wiederholen"</string>
+    <string name="no_downloads">"Downloadverlauf ist leer."</string>
+    <string name="download_error">"Download war nicht erfolgreich."</string>
+    <string name="download_success">"Download von <xliff:g id="FILE">%s</xliff:g> abgeschlossen."</string>
+    <string name="download_running">"Downloadvorgang läuft..."</string>
+    <string name="download_pending">"Download wird gestartet…"</string>
+    <string name="download_pending_network">"Warten auf Datenverbindung..."</string>
+    <string name="download_running_paused">"Warten auf Datenverbindung..."</string>
+    <string name="download_canceled">"Download abgebrochen."</string>
+    <!-- no translation found for download_not_acceptable (282108828207321357) -->
+    <skip />
+    <string name="download_file_error">"Download kann nicht beendet werden, da nicht genügend Speicherplatz vorhanden ist."</string>
+    <string name="download_length_required">"Download kann nicht gestartet werden, da die Größe des Elements nicht bestimmt werden kann."</string>
+    <string name="download_precondition_failed">"Download wurde unterbrochen und kann nicht fortgesetzt werden."</string>
+    <string name="activity_instrumentation_test_runner">"Browser Test Runner"</string>
+  <string-array name="bookmarks">
+    <item>"Google"</item>
+    <item>"http://www.google.com/"</item>
+    <item>"Yahoo!"</item>
+    <item>"http://www.yahoo.com/"</item>
+    <item>"MSN"</item>
+    <item>"http://www.msn.com/"</item>
+    <item>"MySpace"</item>
+    <item>"http://www.myspace.com/"</item>
+    <item>"Facebook"</item>
+    <item>"http://www.facebook.com/"</item>
+    <item>"Wikipedia"</item>
+    <item>"http://www.wikipedia.org/"</item>
+    <item>"eBay"</item>
+    <item>"http://www.ebay.com/"</item>
+    <item>"CNN"</item>
+    <item>"http://www.cnn.com/"</item>
+    <item>"New York Times"</item>
+    <item>"http://www.nytimes.com/"</item>
+    <item>"ESPN"</item>
+    <item>"http://espn.go.com/"</item>
+    <item>"Amazon"</item>
+    <item>"http://www.amazon.com/"</item>
+    <item>"Weather Channel"</item>
+    <item>"http://www.weather.com/"</item>
+    <item>"BBC"</item>
+    <item>"http://www.bbc.co.uk/"</item>
+  </string-array>
+    <!-- no translation found for permlab_readHistoryBookmarks (2090878935052508686) -->
+    <skip />
+    <!-- no translation found for permdesc_readHistoryBookmarks (3198464990003094365) -->
+    <skip />
+    <!-- no translation found for permlab_writeHistoryBookmarks (3617974487656041765) -->
+    <skip />
+    <!-- no translation found for permdesc_writeHistoryBookmarks (2408364750616892343) -->
+    <skip />
+    <!-- no translation found for query_data_message (2662165772252682312) -->
+    <skip />
+    <!-- no translation found for location_message (3273812190303763599) -->
+    <skip />
+    <!-- no translation found for shortcut_message (8474516749978531587) -->
+    <skip />
+    <!-- no translation found for settings_message (6171686603006325199) -->
+    <skip />
+    <!-- no translation found for filepicker_message (3954806995548322454) -->
+    <skip />
+    <!-- no translation found for settings_title (3579144910187265022) -->
+    <skip />
+    <!-- no translation found for privacy_policy (864201179110197308) -->
+    <skip />
+    <!-- no translation found for permission_button_alwaysdeny (3997759797081359571) -->
+    <skip />
+    <!-- no translation found for permission_button_allow (8433538747157349096) -->
+    <skip />
+    <!-- no translation found for permission_button_deny (8238202164838263939) -->
+    <skip />
+    <!-- no translation found for shortcut_button_alwaysdeny (8677418058335584182) -->
+    <skip />
+    <!-- no translation found for shortcut_button_allow (3106634184087569293) -->
+    <skip />
+    <!-- no translation found for shortcut_button_deny (6054910540900054553) -->
+    <skip />
+    <!-- no translation found for settings_button_allow (447817497759509841) -->
+    <skip />
+    <!-- no translation found for settings_button_deny (602496920123085858) -->
+    <skip />
+    <!-- no translation found for filepicker_button_allow (2849120125810490391) -->
+    <skip />
+    <!-- no translation found for filepicker_button_deny (1302975999145835953) -->
+    <skip />
+    <!-- no translation found for remove (7820112494467011374) -->
+    <skip />
+    <!-- no translation found for local_storage (6703332885937279085) -->
+    <skip />
+    <!-- no translation found for allowed (1599514934221911624) -->
+    <skip />
+    <!-- no translation found for denied (7470209521858372968) -->
+    <skip />
+    <!-- no translation found for unrecognized_dialog_message (687399590684283989) -->
+    <skip />
+    <!-- no translation found for default_button (3901922329454578908) -->
+    <skip />
+</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
deleted file mode 100644
index ae010b1..0000000
--- a/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,270 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string name="action">Inicio de sesión</string>
-  <string name="activity_instrumentation_functional_test_runner">Programa de ejecución de pruebas funcionales del explorador</string>
-  <string name="activity_instrumentation_test_runner">Programa de ejecución de pruebas del explorador</string>
-  <string name="add_new_bookmark">Nuevo marcador</string>
-  <string name="allow">Permitir</string>
-  <string name="attention">¡Atención!</string>
-  <string name="back">Atrás</string>
-  <string name="block">Bloquear</string>
-  <string name="bookmark_needs_title">"El marcador debe tener un nombre".</string>
-  <string name="bookmark_needs_url">"El marcador debe tener una ubicación".</string>
-  <string name="bookmark_page">Marcar la última página visualizada</string>
-  <string name="bookmark_saved">Guardada en marcadores.</string>
-  <string name="bookmark_url_not_valid">La dirección URL no es válida.</string>
-  <string name="bookmarks">Marcadores</string>
-  <string name="browserFrame307Post">Esta página Web está siendo redirigida. ¿Desea reenviar los datos introducidos en el formulario a la nueva ubicación?</string>
-  <string name="browserFrameFileErrorLabel">Problema con el archivo</string>
-  <string name="browserFrameFormResubmitLabel">Confirmar</string>
-  <string name="browserFrameFormResubmitMessage">La página que intenta ver contiene datos que ya se han enviado (\"POSTDATA\"). Si reenvía los datos, se repetirá cualquier acción que haya realizado el formulario (como una búsqueda o una compra en línea).</string>
-  <string name="browserFrameNetworkErrorLabel">Problema de conexión de datos</string>
-  <string name="browserFrameRedirect">Redireccionar</string>
-  <string name="browser_bookmarks_page_bookmarks_text">Marcadores</string>
-  <string name="browser_history">Páginas visitadas recientemente</string>
-  <string name="cache_cleared">Caché borrada</string>
-  <string name="cancel">Cancelar</string>
-  <string name="clear">Borrar</string>
-  <string name="clear_history">Borrar historial</string>
-  <string name="close">Cerrar</string>
-  <string name="close_window">Se cerrará esta ventana.</string>
-  <string name="common_name">Nombre común:</string>
-  <string name="contextmenu_add_contact">Agregar contacto</string>
-  <string name="contextmenu_bookmark_thislink">Marcar enlace</string>
-  <string name="contextmenu_copy">Copiar</string>
-  <string name="contextmenu_copylink">Copiar enlace URL</string>
-  <string name="contextmenu_dial_dot">Marcar\u2026</string>
-  <string name="contextmenu_download_image">Guardar imagen</string>
-  <string name="contextmenu_javascript">JavaScript</string>
-  <string name="contextmenu_map">Mapa</string>
-  <string name="contextmenu_openlink">Abrir</string>
-  <string name="contextmenu_openlink_newwindow">Abrir en una ventana nueva</string>
-  <string name="contextmenu_savelink">Guardar enlace</string>
-  <string name="contextmenu_send_mail">Enviar correo electrónico</string>
-  <string name="contextmenu_sharelink">Compartir enlace</string>
-  <string name="contextmenu_view_image">Ver imagen</string>
-  <string name="current_page">Página actual:\u0020</string>
-  <string name="delete">Eliminar</string>
-  <string name="delete_bookmark">Eliminar</string>
-  <string name="delete_bookmark_warning">El marcador \"<xliff:g id="bookmark">%s</xliff:g>\" se eliminará.</string>
-  <string name="do_not_save">Cancelar</string>
-  <string name="done">Listo</string>
-  <string name="download_cancel_dlg_msg">Todas las descargas de <xliff:g id="download_count">%d</xliff:g> se cancelarán y se borrarán del historial de descarga.</string>
-  <string name="download_cancel_dlg_title">Cancelar descargas</string>
-  <string name="download_canceled">Descarga cancelada.</string>
-  <string name="download_clear_dlg_msg">Todos los elementos se borrarán de la lista y se eliminarán de la caché del explorador.</string>
-  <string name="download_clear_dlg_title">Borrar</string>
-  <string name="download_error">Error en la descarga.</string>
-  <string name="download_failed_generic_dlg_title">Error en la descarga</string>
-  <string name="download_file_error">No se ha podido finalizar la descarga. No hay suficiente espacio. </string>
-  <string name="download_file_error_dlg_msg"><xliff:g id="filename">%s</xliff:g> no se ha podido descargar.\nLibere algo de espacio en su teléfono e inténtelo de nuevo.</string>
-  <string name="download_file_error_dlg_title">Sin espacio</string>
-  <string name="download_length_required">No se puede descargar. El tamaño del elemento no se puede determinar.</string>
-  <string name="download_menu_cancel">Cancelar descarga</string>
-  <string name="download_menu_cancel_all">Cancelar todas las descargas</string>
-  <string name="download_menu_clear">Borrar de la lista</string>
-  <string name="download_menu_clear_all">Borrar lista</string>
-  <string name="download_menu_open">Abrir</string>
-  <string name="download_no_application">No se ha encontrado ninguna aplicación al abrir este archivo. </string>
-  <string name="download_no_sdcard_dlg_msg">Se necesita una tarjeta SD para descargar <xliff:g id="filename">%s</xliff:g>.</string>
-  <string name="download_no_sdcard_dlg_title">Ninguna tarjeta SD</string>
-  <string name="download_not_acceptable">No se puede descargar. El contenido que se intenta descargar no es compatible con su teléfono. </string>
-  <string name="download_pending">Iniciando descarga\u2026</string>
-  <string name="download_pending_network">Esperando por conexión de datos\u2026</string>
-  <string name="download_precondition_failed">Descarga interrumpida. No se puede reiniciar. </string>
-  <string name="download_running">Descargando\u2026</string>
-  <string name="download_running_paused">Esperando por conexión de datos\u2026</string>
-  <string name="download_success"><xliff:g id="file">%s</xliff:g> Descarga completa. </string>
-  <string name="download_title">Historial de descargas</string>
-  <string name="download_unknown_filename">&lt;Desconocido&gt;</string>
-  <string name="dump_nav">Volcar caché de navegación</string>
-  <string name="edit_bookmark">Editar marcador</string>
-  <string name="empty_bookmark">"No se puede crear marcador vacío".</string>
-  <string name="empty_history">El historial del explorador está vacío.</string>
-  <string name="expires_on">Caduca el:</string>
-  <string name="find_dot">Encontrado en página</string>
-  <string name="fingerprints">Huellas digitales:</string>
-  <string name="forward">Desvío</string>
-  <string name="goto_dot">Ir a dirección URL</string>
-  <string name="history">Historial</string>
-  <string name="history_picker_view_web_page">Abrir</string>
-  <string name="homepage">Página de inicio</string>
-  <string name="homepage_set">Página de inicio actualizada</string>
-  <string name="http">http://</string>
-  <string name="info_base">Título:\n  <xliff:g id="title">%s1</xliff:g> \n\nURL: \n  <xliff:g id="url">%s2</xliff:g></string>
-  <string name="issued_by">Emitido por:</string>
-  <string name="issued_on">Emitido:</string>
-  <string name="issued_to">Emitido a:</string>
-  <string name="js_dialog_before_unload">¿Salir de esta página?\n\n<xliff:g id="message">%s</xliff:g>\n\nSeleccione Aceptar para continuar, o Cancelar para permanecer en la página actual.</string>
-  <string name="js_dialog_title_default">JavaScript</string>
-  <string name="js_dialog_title_prefix">La página en</string>
-  <string name="js_dialog_title_suffix">dice:</string>
-  <string name="loadSuspended">La página se seguirá cargando tras restablecer la conexión. </string>
-  <string name="loadSuspendedTitle">Sin conexión de red</string>
-  <string name="location">Ubicación</string>
-  <string name="matches_found">Coincidencias encontradas:</string>
-  <string name="md5_fingerprint">Huella digital MD5:</string>
-  <string name="menu_bookmark_page">Marcar página</string>
-  <string name="menu_flip_orientation">Orientación de volteo</string>
-  <string name="menu_preferences">Configuración</string>
-  <string name="menu_use_as_homepage">Establecer como página principal</string>
-  <string name="menu_view_download">Descargas</string>
-  <string name="menu_zoom">Zoom</string>
-  <string name="name">Nombre</string>
-  <string name="new_window">Nueva ventana</string>
-  <string name="next">Siguiente</string>
-  <string name="no_database">¡Ninguna base de datos!</string>
-  <string name="no_downloads">El historial de descarga está vacío.</string>
-  <string name="ok">Aceptar</string>
-  <string name="oma_error_failed_to_download">Incapaz de descargar medios. </string>
-  <string name="oma_error_insufficient_memory">¡Memoria insuficiente! Compruebe su tarjeta SD.</string>
-  <string name="oma_error_invalid_descriptor">Descriptor de descarga no válido.</string>
-  <string name="oma_error_non_acceptable_content">Contenido no compatible.</string>
-  <string name="oma_label_action">Descargar</string>
-  <string name="oma_label_cancel">Salir</string>
-  <string name="oma_label_description">Descripción:</string>
-  <string name="oma_label_download_error">Error de descarga:</string>
-  <string name="oma_label_exit">Salir</string>
-  <string name="oma_label_name">Nombre:</string>
-  <string name="oma_label_proceed">Continuar</string>
-  <string name="oma_label_size">Tamaño:</string>
-  <string name="oma_label_type">Tipo:</string>
-  <string name="oma_label_vendor">Proveedor:</string>
-  <string name="oma_label_want_to_download">¿Desea descargar este contenido?</string>
-  <string name="oma_status_attribute_mismatch">Atributos no coincidentes</string>
-  <string name="oma_status_device_aborted">Teléfono anulado</string>
-  <string name="oma_status_insufficient_memory">Memoria insuficiente</string>
-  <string name="oma_status_invalid_descriptor">Descriptor no válido</string>
-  <string name="oma_status_invalid_version">Versión no válida</string>
-  <string name="oma_status_loader_error">Error de cargador</string>
-  <string name="oma_status_loss_of_service">Pérdida de servicio</string>
-  <string name="oma_status_non_acceptable_content">Contenido inaceptable</string>
-  <string name="oma_status_success">Correcto</string>
-  <string name="oma_warning_one_or_more_types_not_supported">Una o más categorías de contenido no son compatibles.</string>
-  <string name="open_bookmark">Abrir</string>
-  <string name="open_in_new_window">Abrir en una ventana nueva</string>
-  <string name="org_name">Organización:</string>
-  <string name="org_unit">Departamento:</string>
-  <string name="override">Reemplazar</string>
-  <string name="override_message">El marcador existente será sustituido. </string>
-  <string name="page_info">Página de información</string>
-  <string name="page_info_address">Dirección:</string>
-  <string name="page_info_cache_source">Fuente de caché:</string>
-  <string name="page_info_encoding">Codificación:</string>
-  <string name="page_info_expires">Caduca:</string>
-  <string name="page_info_modified">Modificado:</string>
-  <string name="page_info_referring_url">URL de referencia:</string>
-  <string name="page_info_render_mode">Modo de presentación:</string>
-  <string name="page_info_size">Tamaño:</string>
-  <string name="page_info_type">Tipo:</string>
-  <string name="page_info_view">Ver página de información</string>
-  <string name="password">Contraseña</string>
-  <string name="popup_window_attempt">Este sitio está intentando abrir una
-      ventana emergente.</string>
-  <string name="pref_content_autofit">Ajuste automático de páginas</string>
-  <string name="pref_content_autofit_summary">Formatear páginas Web para ajustarse a la pantalla</string>
-  <string name="pref_content_block_popups">Bloquear ventanas emergentes</string>
-  <string name="pref_content_homepage">Configurar página principal</string>
-  <string name="pref_content_javascript">Habilitar JavaScript</string>
-  <string name="pref_content_load_images">Cargar imágenes</string>
-  <string name="pref_content_load_images_summary">Mostrar imágenes en páginas Web</string>
-  <string name="pref_content_open_in_background">Abrir en segundo plano</string>
-  <string name="pref_content_open_in_background_summary">Nueva ventana abierta detrás de la actual</string>
-  <string name="pref_content_title">Configuración del contenido de la página</string>
-  <string name="pref_development_nav_dump">Habilitar volcado de caché de navegación</string>
-  <string name="pref_development_normal_rendering">Presentación normal</string>
-  <string name="pref_development_single_column_rendering">Presentación en una sola columna</string>
-  <string name="pref_development_title">Depuración</string>
-  <string name="pref_development_trace">Habilitar trazado</string>
-  <string name="pref_development_track">Habilitar bola de seguimiento</string>
-  <string name="pref_development_uastring">UAString</string>
-  <string name="pref_development_viewport">Utilizar puerto de vista panorámica</string>
-  <string name="pref_extras_gears_enable">Habilitar Gears</string>
-  <string name="pref_extras_gears_enable_summary">Aplicaciones que amplían la funcionalidad del explorador</string>
-  <string name="pref_extras_gears_settings">Configuración de Gears</string>
-  <string name="pref_extras_gears_settings_summary">Aplicaciones que amplían la funcionalidad del explorador</string>
-  <string name="pref_extras_reset_default">Restablecer a predeterminados</string>
-  <string name="pref_extras_reset_default_dlg">Se borrarán todos los datos del explorador y los configuración retomarán los valores predeterminados de fábrica. </string>
-  <string name="pref_extras_reset_default_dlg_title">Restablecer a predeterminados</string>
-  <string name="pref_extras_reset_default_summary">Borrar todos los datos del explorador y restablecer a los valores predeterminados de fábrica</string>
-  <string name="pref_extras_title">Configuración avanzada</string>
-  <string name="pref_plugin_installed_empty_listxx">No hay ningún plug-in instalado.</string>
-  <string name="pref_plugin_installed_summaryxx">Ver plug-ins instalados actualmente</string>
-  <string name="pref_privacy_clear_cache">Borrar caché</string>
-  <string name="pref_privacy_clear_cache_dlg">Se borrará la caché.</string>
-  <string name="pref_privacy_clear_cache_summary">Eliminar todo el contenido de la página caché</string>
-  <string name="pref_privacy_clear_cookies">Borrar todos los datos de las cookies</string>
-  <string name="pref_privacy_clear_cookies_dlg">Se borrarán todas las cookies. </string>
-  <string name="pref_privacy_clear_cookies_summary">Borrar todas las cookies del explorador</string>
-  <string name="pref_privacy_clear_form_data">Borrar datos del formulario</string>
-  <string name="pref_privacy_clear_form_data_dlg">Se borrarán todos los datos del formulario guardados.</string>
-  <string name="pref_privacy_clear_form_data_summary">Borrar todos los datos del formulario guardados</string>
-  <string name="pref_privacy_clear_history">Borrar historial</string>
-  <string name="pref_privacy_clear_history_dlg">Se borrará el historial de navegación del explorador. </string>
-  <string name="pref_privacy_clear_history_summary">Borrar el historial de navegación del explorador</string>
-  <string name="pref_privacy_clear_passwords">Borrar contraseñas</string>
-  <string name="pref_privacy_clear_passwords_dlg">Se borrarán todas las contraseñas guardadas. </string>
-  <string name="pref_privacy_clear_passwords_summary">Borrar todas las contraseñas guardadas</string>
-  <string name="pref_privacy_title">Configuración de privacidad</string>
-  <string name="pref_security_accept_cookies">Aceptar cookies</string>
-  <string name="pref_security_accept_cookies_summary">Permite a los sitios guardar y leer los datos de la \"cookie\" </string>
-  <string name="pref_security_remember_passwords">Recordar contraseñas</string>
-  <string name="pref_security_remember_passwords_summary">Guardar nombres de usuario y contraseñas de las páginas Web</string>
-  <string name="pref_security_save_form_data">Recordar datos del formulario</string>
-  <string name="pref_security_save_form_data_summary">Recordar los datos introducidos en los formularios para utilizarlos más adelante</string>
-  <string name="pref_security_show_security_warning">Mostrar advertencias de seguridad</string>
-  <string name="pref_security_show_security_warning_summary">Mostrar advertencia si hay algún problema con la seguridad de un sitio</string>
-  <string name="pref_security_title">Configuración de seguridad</string>
-  <string name="pref_text_size">Tamaño del texto</string>
-  <string name="pref_text_size_dialogtitle">Tamaño del texto</string>
-  <string name="pref_text_size_summary">Seleccionar el tamaño del texto en las páginas Web</string>
-  <string name="prev">Ant.</string>
-  <string name="question_mark">\?</string>
-  <string name="reload">Actualizar</string>
-  <string name="remove_bookmark">Eliminar marcador</string>
-  <string name="remove_history_item">Eliminar del historial</string>
-  <string name="replace">Reemplazar</string>
-  <string name="retrieving_creds_dlg_msg">Recuperar la información de acceso\u2026</string>
-  <string name="retry">Reintentar</string>
-  <string name="save">Aceptar</string>
-  <string name="save_to_bookmarks">Marcar enlace</string>
-  <string name="search">Buscar</string>
-  <string name="search_button_text">Ir</string>
-  <string name="search_hint">Escribir dirección Web</string>
-  <string name="search_label">Explorador</string>
-  <string name="security_warning">Advertencia de seguridad</string>
-  <string name="sha1_fingerprint">Huella digital SHA1:</string>
-  <string name="share_page">Compartir página</string>
-  <string name="shortcut_bookmark">Marcador</string>
-  <string name="sign_in_to">Iniciar sesión en <xliff:g id="hostname">%s1</xliff:g> \"<xliff:g id="realm">%s2</xliff:g>\"</string>
-  <string name="ssl_certificate">Certificado de seguridad</string>
-  <string name="ssl_certificate_is_valid">Este certificado es válido.</string>
-  <string name="ssl_continue">Continuar</string>
-  <string name="ssl_expired">Este certificado ha caducado.</string>
-  <string name="ssl_mismatch">El nombre del sitio no corresponde con el nombre del certificado. </string>
-  <string name="ssl_not_yet_valid">Este certificado aún no es válido.</string>
-  <string name="ssl_untrusted">Este certificado no es de una autoridad fiable.</string>
-  <string name="ssl_warnings_header">Hay problemas con el certificado de seguridad de este sitio.</string>
-  <string name="stop">Detener</string>
-  <string name="stopping">Deteniendo\u2026</string>
-  <string name="tab_picker_bookmark">Marcador</string>
-  <string name="tab_picker_new_tab">Nueva ventana</string>
-  <string name="tab_picker_remove_tab">Cerrar</string>
-  <string name="tab_picker_send_url">Compartir enlace</string>
-  <string name="tab_picker_title">Ventanas actuales</string>
-  <string name="tab_picker_view_tab">Ver</string>
-  <string name="too_many_subwindows_dialog_message">No se pudo abrir otra
-      ventana emergente ya que sólo se puede abrir una cada vez.</string>
-  <string name="too_many_subwindows_dialog_title">Ventana emergente ya abierta</string>
-  <string name="too_many_windows_dialog_message">No se pudo abrir otra ventana por haber alcanzado el número máximo de ventanas abiertas.</string>
-  <string name="too_many_windows_dialog_title">Límite de ventanas alcanzado</string>
-  <string name="username">Nombre</string>
-  <string name="validity_period">Validez:</string>
-  <string name="view_certificate">Ver certificado</string>
-  <string name="view_tabs">Vista general de la ventana</string>
-  <string name="view_tabs_condensed">Ventana</string>
-  <string name="visual_history">Historial de la ventana</string>
-  <string name="with">con</string>
-  <string name="zero">0</string>
-</resources>
diff --git a/res/values-fr-rFR/strings.xml b/res/values-fr-rFR/strings.xml
deleted file mode 100644
index 3ddce68..0000000
--- a/res/values-fr-rFR/strings.xml
+++ /dev/null
@@ -1,270 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string name="action">Connexion</string>
-  <string name="activity_instrumentation_functional_test_runner">Exécuteur de test fonctionnel du navigateur</string>
-  <string name="activity_instrumentation_test_runner">Exécuteur de test du navigateur</string>
-  <string name="add_new_bookmark">Nouveau signet</string>
-  <string name="allow">Autoriser</string>
-  <string name="attention">Attention</string>
-  <string name="back">Retour</string>
-  <string name="block">Bloquer</string>
-  <string name="bookmark_needs_title">"Le signet doit avoir un nom."</string>
-  <string name="bookmark_needs_url">"Le signet doit avoir un emplacement."</string>
-  <string name="bookmark_page">Marquer la dernière page affichée</string>
-  <string name="bookmark_saved">Enregistrée dans les signets.</string>
-  <string name="bookmark_url_not_valid">URL non valide.</string>
-  <string name="bookmarks">Signets</string>
-  <string name="browserFrame307Post">Cette page Web est redirigée. Renvoyer vos données de formulaires tapées au nouvel emplacement ?</string>
-  <string name="browserFrameFileErrorLabel">Problème avec le fichier</string>
-  <string name="browserFrameFormResubmitLabel">Confirmer</string>
-  <string name="browserFrameFormResubmitMessage">La page que vous essayer d\'afficher contient des données qui ont été déjà soumises (\"POSTDATA\"). Si vous renvoyez les données, toute action effectuée par le formulaire sur la page (telle qu\'une recherche ou un achat en ligne) sera répétée.</string>
-  <string name="browserFrameNetworkErrorLabel">Problème de connectivité de données</string>
-  <string name="browserFrameRedirect">Rediriger</string>
-  <string name="browser_bookmarks_page_bookmarks_text">Signets</string>
-  <string name="browser_history">Pages récemment visitées</string>
-  <string name="cache_cleared">Cache effacée</string>
-  <string name="cancel">Annuler</string>
-  <string name="clear">Effacer</string>
-  <string name="clear_history">Effacer l\'historique</string>
-  <string name="close">Fermer</string>
-  <string name="close_window">Cette fenêtre sera fermée.</string>
-  <string name="common_name">Nom commun :</string>
-  <string name="contextmenu_add_contact">Ajouter un contact</string>
-  <string name="contextmenu_bookmark_thislink">Lien signet</string>
-  <string name="contextmenu_copy">Copier</string>
-  <string name="contextmenu_copylink">Copier le lien URL</string>
-  <string name="contextmenu_dial_dot">Numéroter\u2026</string>
-  <string name="contextmenu_download_image">Enregistrer l\'image</string>
-  <string name="contextmenu_javascript">JavaScript</string>
-  <string name="contextmenu_map">Carte</string>
-  <string name="contextmenu_openlink">Ouvrir</string>
-  <string name="contextmenu_openlink_newwindow">Ouvrir dans une nouvelle fenêtre</string>
-  <string name="contextmenu_savelink">Enregistrer le lien</string>
-  <string name="contextmenu_send_mail">Envoyer e-mail</string>
-  <string name="contextmenu_sharelink">Partager le lien</string>
-  <string name="contextmenu_view_image">Afficher l\'image</string>
-  <string name="current_page">Page actuelle :\u0020</string>
-  <string name="delete">Supprimer</string>
-  <string name="delete_bookmark">Supprimer</string>
-  <string name="delete_bookmark_warning">Les signets \"<xliff:g id="bookmark">%s</xliff:g>\" seront supprimés.</string>
-  <string name="do_not_save">Annuler</string>
-  <string name="done">Terminé</string>
-  <string name="download_cancel_dlg_msg">Tous les téléchargements <xliff:g id="download_count">%d</xliff:g> seront annulés et effacés de l\'historique des téléchargements.</string>
-  <string name="download_cancel_dlg_title">Annuler les téléchargements</string>
-  <string name="download_canceled">Téléchargement annulé.</string>
-  <string name="download_clear_dlg_msg">Tous les éléments seront effacés de la liste et supprimés de la cache du navigateur.</string>
-  <string name="download_clear_dlg_title">Effacer</string>
-  <string name="download_error">Échec du téléchargement.</string>
-  <string name="download_failed_generic_dlg_title">Échec du téléchargement</string>
-  <string name="download_file_error">Impossible de finir le téléchargement. L\'espace est insuffisant.</string>
-  <string name="download_file_error_dlg_msg"><xliff:g id="filename">%s</xliff:g> n\'a pas pu être téléchargé.\nLibérez de l\'espace sur votre téléphone et essayez à nouveau.</string>
-  <string name="download_file_error_dlg_title">Plus d\'espace</string>
-  <string name="download_length_required">Impossible de télécharger. La taille de l\'élément ne peut pas être déterminée.</string>
-  <string name="download_menu_cancel">Annuler le téléchargement</string>
-  <string name="download_menu_cancel_all">Annuler tous les téléchargements</string>
-  <string name="download_menu_clear">Effacer de la liste</string>
-  <string name="download_menu_clear_all">Effacer la liste</string>
-  <string name="download_menu_open">Ouvrir</string>
-  <string name="download_no_application">Aucune application n\'est trouvée pour ouvrir ce fichier.</string>
-  <string name="download_no_sdcard_dlg_msg">Une carte SD est nécessaire pour télécharger <xliff:g id="filename">%s</xliff:g>.</string>
-  <string name="download_no_sdcard_dlg_title">Pas de carte SD</string>
-  <string name="download_not_acceptable">Impossible de télécharger. Le contenu en cours de téléchargement n\'est pas pris en charge sur le téléphone.</string>
-  <string name="download_pending">Début du téléchargement\u2026</string>
-  <string name="download_pending_network">Attente de la connexion de données\u2026</string>
-  <string name="download_precondition_failed">Téléchargement interrompu. Il ne peut pas être repris.</string>
-  <string name="download_running">Téléchargement\u2026</string>
-  <string name="download_running_paused">Attente de la connexion de données\u2026</string>
-  <string name="download_success"><xliff:g id="file">%s</xliff:g> Téléchargement terminé.</string>
-  <string name="download_title">Historique de téléchargement</string>
-  <string name="download_unknown_filename">&lt;Inconnu&gt;</string>
-  <string name="dump_nav">Décharger la cache de navigation</string>
-  <string name="edit_bookmark">Modifier le signet</string>
-  <string name="empty_bookmark">"Impossible de créer un signet vide."</string>
-  <string name="empty_history">L\'historique du navigateur est vide.</string>
-  <string name="expires_on">Expire le :</string>
-  <string name="find_dot">Rechercher sur la page</string>
-  <string name="fingerprints">Empreintes digitales :</string>
-  <string name="forward">Transférer</string>
-  <string name="goto_dot">Aller à URL</string>
-  <string name="history">Historique</string>
-  <string name="history_picker_view_web_page">Ouvrir</string>
-  <string name="homepage">Page d\'accueil</string>
-  <string name="homepage_set">Page d\'accueil mise à jour</string>
-  <string name="http">http://</string>
-  <string name="info_base">Titre :\n  <xliff:g id="title">%s1</xliff:g> \n\nURL : \n  <xliff:g id="url">%s2</xliff:g></string>
-  <string name="issued_by">Émis par :</string>
-  <string name="issued_on">Émis le :</string>
-  <string name="issued_to">Émis à :</string>
-  <string name="js_dialog_before_unload">Naviguer en quittant cette page ?\n\n<xliff:g id="message">%s</xliff:g>\n\nSélectionner OK pour continuer, ou Annuler pour rester sur la page actuelle.</string>
-  <string name="js_dialog_title_default">JavaScript</string>
-  <string name="js_dialog_title_prefix">La page à</string>
-  <string name="js_dialog_title_suffix">dit :</string>
-  <string name="loadSuspended">La page continuera son chargement après la restauration de la connexion.</string>
-  <string name="loadSuspendedTitle">Pas de connexion réseau</string>
-  <string name="location">Localisation</string>
-  <string name="matches_found">Correspondances trouvées :</string>
-  <string name="md5_fingerprint">Empreinte digitale MD5 :</string>
-  <string name="menu_bookmark_page">Marquer la page</string>
-  <string name="menu_flip_orientation">Retourner l\'orientation</string>
-  <string name="menu_preferences">Paramètres</string>
-  <string name="menu_use_as_homepage">Définir comme page d\'accueil</string>
-  <string name="menu_view_download">Téléchargements</string>
-  <string name="menu_zoom">Zoom</string>
-  <string name="name">Nom</string>
-  <string name="new_window">Nouvelle fenêtre</string>
-  <string name="next">Suivant</string>
-  <string name="no_database">Pas de base de données !</string>
-  <string name="no_downloads">L\'historique de téléchargement est vide.</string>
-  <string name="ok">OK</string>
-  <string name="oma_error_failed_to_download">Impossible de télécharger le média.</string>
-  <string name="oma_error_insufficient_memory">Mémoire insuffisante ! Vérifiez votre carte SD.</string>
-  <string name="oma_error_invalid_descriptor">Descripteur de téléchargement non valide.</string>
-  <string name="oma_error_non_acceptable_content">Contenu non pris en charge.</string>
-  <string name="oma_label_action">Télécharger</string>
-  <string name="oma_label_cancel">Quitter</string>
-  <string name="oma_label_description">Description :</string>
-  <string name="oma_label_download_error">Erreur de téléchargement :</string>
-  <string name="oma_label_exit">Quitter</string>
-  <string name="oma_label_name">Nom :</string>
-  <string name="oma_label_proceed">Continuer</string>
-  <string name="oma_label_size">Taille :</string>
-  <string name="oma_label_type">Type :</string>
-  <string name="oma_label_vendor">Vendeur :</string>
-  <string name="oma_label_want_to_download">Souhaitez-vous télécharger ce contenu ?</string>
-  <string name="oma_status_attribute_mismatch">Non concordance d\'attribut</string>
-  <string name="oma_status_device_aborted">Téléphone abandonné</string>
-  <string name="oma_status_insufficient_memory">Mémoire insuffisante</string>
-  <string name="oma_status_invalid_descriptor">Descripteur non valide</string>
-  <string name="oma_status_invalid_version">Version non valide</string>
-  <string name="oma_status_loader_error">Erreur de chargeur</string>
-  <string name="oma_status_loss_of_service">Perte de service</string>
-  <string name="oma_status_non_acceptable_content">Contenu non acceptable</string>
-  <string name="oma_status_success">Succès</string>
-  <string name="oma_warning_one_or_more_types_not_supported">Une ou plusieurs catégories de contenu ne sont pas prises en charge.</string>
-  <string name="open_bookmark">Ouvrir</string>
-  <string name="open_in_new_window">Ouvrir dans une nouvelle fenêtre</string>
-  <string name="org_name">Organisation :</string>
-  <string name="org_unit">Unité organisationnelle :</string>
-  <string name="override">Remplacer</string>
-  <string name="override_message">Le signet existant sera remplacé.</string>
-  <string name="page_info">Infos page</string>
-  <string name="page_info_address">Adresse :</string>
-  <string name="page_info_cache_source">Source cache :</string>
-  <string name="page_info_encoding">Codage :</string>
-  <string name="page_info_expires">Expire :</string>
-  <string name="page_info_modified">Modifié :</string>
-  <string name="page_info_referring_url">URL référente :</string>
-  <string name="page_info_render_mode">Mode de rendu :</string>
-  <string name="page_info_size">Taille :</string>
-  <string name="page_info_type">Type :</string>
-  <string name="page_info_view">Afficher les infos page</string>
-  <string name="password">Mot de passe</string>
-  <string name="popup_window_attempt">Ce site essaie d\'ouvrir une
-      fenêtre pop-up.</string>
-  <string name="pref_content_autofit">Auto ajuster pages</string>
-  <string name="pref_content_autofit_summary">Ajuster les pages Web à l\'écran</string>
-  <string name="pref_content_block_popups">Bloquer les fenêtres pop-up</string>
-  <string name="pref_content_homepage">Définir la page d\'accueil</string>
-  <string name="pref_content_javascript">Activer JavaScript</string>
-  <string name="pref_content_load_images">Charger les images</string>
-  <string name="pref_content_load_images_summary">Afficher les images sur les pages Web</string>
-  <string name="pref_content_open_in_background">Ouvrir en arrière-plan</string>
-  <string name="pref_content_open_in_background_summary">Les nouvelles fenêtres s\'ouvrent derrière l\'actuelle</string>
-  <string name="pref_content_title">Paramètres de contenu de la page</string>
-  <string name="pref_development_nav_dump">Activer décharge cache nav</string>
-  <string name="pref_development_normal_rendering">Rendu normal</string>
-  <string name="pref_development_single_column_rendering">Rendu en une colonne</string>
-  <string name="pref_development_title">Déboguer</string>
-  <string name="pref_development_trace">Activer le traçage</string>
-  <string name="pref_development_track">Activer la boute de commande</string>
-  <string name="pref_development_uastring">ChaîneUA</string>
-  <string name="pref_development_viewport">Utiliser une fenêtre d\'affichage large</string>
-  <string name="pref_extras_gears_enable">Activer les équipements</string>
-  <string name="pref_extras_gears_enable_summary">Applications étendent la fonctionnalité du navigateur</string>
-  <string name="pref_extras_gears_settings">Paramètre des équipements</string>
-  <string name="pref_extras_gears_settings_summary">Applications étendent la fonctionnalité du navigateur</string>
-  <string name="pref_extras_reset_default">Réinitialiser à défaut</string>
-  <string name="pref_extras_reset_default_dlg">Toutes les données du navigateur seront effacées et les paramètres retourneront aux valeurs par défaut.</string>
-  <string name="pref_extras_reset_default_dlg_title">Réinitialiser à défaut</string>
-  <string name="pref_extras_reset_default_summary">Effacer toutes les données du navigateur et réinitialiser les paramètres aux valeurs par défaut</string>
-  <string name="pref_extras_title">Paramètres avancés</string>
-  <string name="pref_plugin_installed_empty_listxx">Aucun plug-in installé.</string>
-  <string name="pref_plugin_installed_summaryxx">Afficher les plug-ins actuellement installés.</string>
-  <string name="pref_privacy_clear_cache">Effacer la cache</string>
-  <string name="pref_privacy_clear_cache_dlg">La cache va être effacée.</string>
-  <string name="pref_privacy_clear_cache_summary">Supprimer tout le contenu de page en cache</string>
-  <string name="pref_privacy_clear_cookies">Effacer toutes les données de cookies</string>
-  <string name="pref_privacy_clear_cookies_dlg">Tous les cookies vont être effacés.</string>
-  <string name="pref_privacy_clear_cookies_summary">Effacer tous les cookies du navigateur</string>
-  <string name="pref_privacy_clear_form_data">Effacer les données de formulaire</string>
-  <string name="pref_privacy_clear_form_data_dlg">Toutes les données de formulaire enregistrées vont être effacées.</string>
-  <string name="pref_privacy_clear_form_data_summary">Effacer toutes les données de formulaire enregistrées</string>
-  <string name="pref_privacy_clear_history">Effacer l\'historique</string>
-  <string name="pref_privacy_clear_history_dlg">L\'historique de navigation du navigateur sera effacé.</string>
-  <string name="pref_privacy_clear_history_summary">Effacer l\'historique de navigation du navigateur</string>
-  <string name="pref_privacy_clear_passwords">Effacer les mots de passe</string>
-  <string name="pref_privacy_clear_passwords_dlg">Tous les mots de passe enregistrés vont être effacés.</string>
-  <string name="pref_privacy_clear_passwords_summary">Effacer tous les mots de passe enregistrés</string>
-  <string name="pref_privacy_title">Paramètres de vie privée</string>
-  <string name="pref_security_accept_cookies">Accepter les cookies</string>
-  <string name="pref_security_accept_cookies_summary">Permettre aux sites d\'enregistrer et de lire les données de \"cookies\"</string>
-  <string name="pref_security_remember_passwords">Se souvenir des mots de passe</string>
-  <string name="pref_security_remember_passwords_summary">Enregistrer les noms d\'utilisateur et les mots de passe pour les sites Web</string>
-  <string name="pref_security_save_form_data">Se souvenir des données de formulaire</string>
-  <string name="pref_security_save_form_data_summary">Se souvenir des données saisies dans les formulaires pour utilisation ultérieure</string>
-  <string name="pref_security_show_security_warning">Afficher les avertissements de sécurité</string>
-  <string name="pref_security_show_security_warning_summary">Afficher un avertissement en cas de problème de sécurité d\'un site</string>
-  <string name="pref_security_title">Paramètres de sécurité</string>
-  <string name="pref_text_size">Taille du texte</string>
-  <string name="pref_text_size_dialogtitle">Taille du texte</string>
-  <string name="pref_text_size_summary">Sélectionnez la taille du texte sur les pages Web</string>
-  <string name="prev">Préc</string>
-  <string name="question_mark">\?</string>
-  <string name="reload">Actualiser</string>
-  <string name="remove_bookmark">Supprimer le signet</string>
-  <string name="remove_history_item">Supprimer de l\'historique</string>
-  <string name="replace">Remplacer</string>
-  <string name="retrieving_creds_dlg_msg">Récupération des détails de connexion\u2026</string>
-  <string name="retry">Réessayer</string>
-  <string name="save">OK</string>
-  <string name="save_to_bookmarks">Lien signet</string>
-  <string name="search">Recherche</string>
-  <string name="search_button_text">Aller</string>
-  <string name="search_hint">Entrer l\'adresse Web</string>
-  <string name="search_label">Navigateur</string>
-  <string name="security_warning">Avertissement de sécurité</string>
-  <string name="sha1_fingerprint">Empreinte digitale SHA1 :</string>
-  <string name="share_page">Partager page</string>
-  <string name="shortcut_bookmark">Signet</string>
-  <string name="sign_in_to">Connexion à <xliff:g id="hostname">%s1</xliff:g> \"<xliff:g id="realm">%s2</xliff:g>\"</string>
-  <string name="ssl_certificate">Certificat de sécurité</string>
-  <string name="ssl_certificate_is_valid">Ce certificat est valide.</string>
-  <string name="ssl_continue">Continuer</string>
-  <string name="ssl_expired">Ce certificat est expiré.</string>
-  <string name="ssl_mismatch">Le nom du site ne correspond pas au nom sur le certificat.</string>
-  <string name="ssl_not_yet_valid">Ce certificat n\'est pas encore valide.</string>
-  <string name="ssl_untrusted">Ce certificat n\'est pas d\'une autorité de confiance.</string>
-  <string name="ssl_warnings_header">Il y a des problèmes avec le certificat de sécurité de ce site.</string>
-  <string name="stop">Arrêter</string>
-  <string name="stopping">Arrêt\u2026</string>
-  <string name="tab_picker_bookmark">Signet</string>
-  <string name="tab_picker_new_tab">Nouvelle fenêtre</string>
-  <string name="tab_picker_remove_tab">Fermer</string>
-  <string name="tab_picker_send_url">Partager le lien</string>
-  <string name="tab_picker_title">Fenêtre actuelle</string>
-  <string name="tab_picker_view_tab">Afficher</string>
-  <string name="too_many_subwindows_dialog_message">Impossible d\'ouvrir une nouvelle
-      fenêtre pop-up car seulement une peut être ouverte à la fois.</string>
-  <string name="too_many_subwindows_dialog_title">Pop-up déjà ouverte</string>
-  <string name="too_many_windows_dialog_message">Impossible d\'ouvrir une nouvelle fenêtre parce que vous avez déjà ouvert le nombre maximum.</string>
-  <string name="too_many_windows_dialog_title">Limite de fenêtre atteinte</string>
-  <string name="username">Nom</string>
-  <string name="validity_period">Validité :</string>
-  <string name="view_certificate">Afficher le certificat</string>
-  <string name="view_tabs">Aperçu de fenêtre</string>
-  <string name="view_tabs_condensed">Fenêtre</string>
-  <string name="visual_history">Historique de fenêtre</string>
-  <string name="with">avec</string>
-  <string name="zero">0</string>
-</resources>
diff --git a/res/values-it-rIT/strings.xml b/res/values-it-rIT/strings.xml
deleted file mode 100644
index 6420cd6..0000000
--- a/res/values-it-rIT/strings.xml
+++ /dev/null
@@ -1,270 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string name="action">Accedi</string>
-  <string name="activity_instrumentation_functional_test_runner">Prova funzionamento del browser</string>
-  <string name="activity_instrumentation_test_runner">Prova verifica del browser</string>
-  <string name="add_new_bookmark">Nuovo segnalibro</string>
-  <string name="allow">Consenti</string>
-  <string name="attention">Attenzione</string>
-  <string name="back">Indietro</string>
-  <string name="block">Blocca</string>
-  <string name="bookmark_needs_title">"Il segnalibro deve avere un nome."</string>
-  <string name="bookmark_needs_url">"Il segnalibro deve avere un'ubicazione."</string>
-  <string name="bookmark_page">Pagina segnalibri visualizzati di recente</string>
-  <string name="bookmark_saved">Salvato nei segnalibri.</string>
-  <string name="bookmark_url_not_valid">URL non valido.</string>
-  <string name="bookmarks">Segnalibri</string>
-  <string name="browserFrame307Post">Reindirizzamento in corso della pagina Web. Reinviare i dati immessi nel modulo nella nuova ubicazione?</string>
-  <string name="browserFrameFileErrorLabel">Problema con il file</string>
-  <string name="browserFrameFormResubmitLabel">Conferma</string>
-  <string name="browserFrameFormResubmitMessage">La pagina che si desidera visualizzare contiene dati già inviati (\"POSTDATA\"). Se si rinviano i dati, verranno ripetute tutte le azioni sulla pagina, ad esempio ricerca o acquisto online.</string>
-  <string name="browserFrameNetworkErrorLabel">Problema di connessione dati</string>
-  <string name="browserFrameRedirect">Reindirizzamento</string>
-  <string name="browser_bookmarks_page_bookmarks_text">Segnalibri</string>
-  <string name="browser_history">Pagine visitate di recente</string>
-  <string name="cache_cleared">Cache svuotata</string>
-  <string name="cancel">Annulla</string>
-  <string name="clear">Cancella</string>
-  <string name="clear_history">Cancella cronologia</string>
-  <string name="close">Chiudi</string>
-  <string name="close_window">Questa finestra verrà chiusa.</string>
-  <string name="common_name">Nome comune:</string>
-  <string name="contextmenu_add_contact">Aggiungi contatto</string>
-  <string name="contextmenu_bookmark_thislink">Collegamento segnalibro</string>
-  <string name="contextmenu_copy">Copia</string>
-  <string name="contextmenu_copylink">Copia URL collegamento</string>
-  <string name="contextmenu_dial_dot">Componi\u2026</string>
-  <string name="contextmenu_download_image">Salva immagine</string>
-  <string name="contextmenu_javascript">JavaScript</string>
-  <string name="contextmenu_map">Mappa</string>
-  <string name="contextmenu_openlink">Apri</string>
-  <string name="contextmenu_openlink_newwindow">Apri in un'altra finestra</string>
-  <string name="contextmenu_savelink">Salva collegamento</string>
-  <string name="contextmenu_send_mail">Invia messaggio e-mail</string>
-  <string name="contextmenu_sharelink">Condividi collegamento</string>
-  <string name="contextmenu_view_image">Visualizza immagine</string>
-  <string name="current_page">Pagina attuale:\u0020</string>
-  <string name="delete">Elimina</string>
-  <string name="delete_bookmark">Elimina</string>
-  <string name="delete_bookmark_warning">Verrà eliminato il segnalibro \"<xliff:g id="bookmark">%s</xliff:g>\".</string>
-  <string name="do_not_save">Annulla</string>
-  <string name="done">Completato</string>
-  <string name="download_cancel_dlg_msg">Tutti i download <xliff:g id="download_count">%d</xliff:g> verranno annullati ed eliminati dalla cronologia di download.</string>
-  <string name="download_cancel_dlg_title">Annulla download</string>
-  <string name="download_canceled">Download annullato.</string>
-  <string name="download_clear_dlg_msg">Tutti gli elementi verranno cancellati dall'elenco e rimossi dalla cache del browser.</string>
-  <string name="download_clear_dlg_title">Cancella</string>
-  <string name="download_error">Download non riuscito.</string>
-  <string name="download_failed_generic_dlg_title">Download non riuscito</string>
-  <string name="download_file_error">Impossibile completare il download. Spazio insufficiente.</string>
-  <string name="download_file_error_dlg_msg">Impossibile scaricare <xliff:g id="filename">%s</xliff:g>.\nLiberare spazio sul telefono e riprovare.</string>
-  <string name="download_file_error_dlg_title">Spazio insufficiente</string>
-  <string name="download_length_required">Download non riuscito. Impossibile determinare le dimensioni dell'elemento.</string>
-  <string name="download_menu_cancel">Annulla download</string>
-  <string name="download_menu_cancel_all">Annulla tutti i download</string>
-  <string name="download_menu_clear">Cancella dall'elenco</string>
-  <string name="download_menu_clear_all">Cancella elenco</string>
-  <string name="download_menu_open">Apri</string>
-  <string name="download_no_application">Impossibile trovare un'applicazione per l'apertura del file.</string>
-  <string name="download_no_sdcard_dlg_msg">Per scaricare <xliff:g id="filename">%s</xliff:g>, è necessario utilizzare una scheda SD.</string>
-  <string name="download_no_sdcard_dlg_title">Nessuna scheda SD</string>
-  <string name="download_not_acceptable">Download non riuscito. Il contenuto che si sta tentando di scaricare non è supportato dal telefono.</string>
-  <string name="download_pending">Avvio del download in corso\u2026</string>
-  <string name="download_pending_network">In attesa della connessione dati\u2026</string>
-  <string name="download_precondition_failed">Download interrotto. Impossibile ripristinarlo.</string>
-  <string name="download_running">Scaricamento in corso\u2026</string>
-  <string name="download_running_paused">In attesa della connessione dati\u2026</string>
-  <string name="download_success"><xliff:g id="file">%s</xliff:g> download completato.</string>
-  <string name="download_title">Cronologia download</string>
-  <string name="download_unknown_filename">&lt;Sconosciuto&gt;</string>
-  <string name="dump_nav">Elimina cache di navigazione</string>
-  <string name="edit_bookmark">Modifica segnalibro</string>
-  <string name="empty_bookmark">"Impossibile creare un segnalibro vuoto."</string>
-  <string name="empty_history">La cronologia del browser è vuota.</string>
-  <string name="expires_on">Scade il:</string>
-  <string name="find_dot">Trova nella pagina</string>
-  <string name="fingerprints">Impronte digitali:</string>
-  <string name="forward">Inoltra</string>
-  <string name="goto_dot">Vai a URL</string>
-  <string name="history">Cronologia</string>
-  <string name="history_picker_view_web_page">Apri</string>
-  <string name="homepage">Home page</string>
-  <string name="homepage_set">Home page aggiornata</string>
-  <string name="http">http://</string>
-  <string name="info_base">Titolo:\n  <xliff:g id="title">%s1</xliff:g> \n\nURL: \n  <xliff:g id="url">%s2</xliff:g></string>
-  <string name="issued_by">Rilasciato da:</string>
-  <string name="issued_on">Rilasciato il:</string>
-  <string name="issued_to">Rilasciato a:</string>
-  <string name="js_dialog_before_unload">Uscire da questa pagina?\n\n<xliff:g id="message">%s</xliff:g>\n\nScegliere OK per continuare oppure Annulla per restare sulla pagina attuale.</string>
-  <string name="js_dialog_title_default">JavaScript</string>
-  <string name="js_dialog_title_prefix">Nella pagina a</string>
-  <string name="js_dialog_title_suffix">è riportato:</string>
-  <string name="loadSuspended">Il caricamento della pagina continuerà dopo il ripristino della connessione.</string>
-  <string name="loadSuspendedTitle">Nessuna connessione di rete</string>
-  <string name="location">Ubicazione</string>
-  <string name="matches_found">Corrispondenze trovate:</string>
-  <string name="md5_fingerprint">Impronta digitale MD5:</string>
-  <string name="menu_bookmark_page">Aggiungi pagina nei segnalibri</string>
-  <string name="menu_flip_orientation">Capovolgi orientamento</string>
-  <string name="menu_preferences">Impostazioni</string>
-  <string name="menu_use_as_homepage">Imposta come home page</string>
-  <string name="menu_view_download">Download</string>
-  <string name="menu_zoom">Zoom</string>
-  <string name="name">Nome</string>
-  <string name="new_window">Nuova finestra</string>
-  <string name="next">Avanti</string>
-  <string name="no_database">Nessun database</string>
-  <string name="no_downloads">La memoria di download è vuota.</string>
-  <string name="ok">OK</string>
-  <string name="oma_error_failed_to_download">Impossibile scaricare il supporto.</string>
-  <string name="oma_error_insufficient_memory">Memoria insufficiente. Controllare la scheda SD.</string>
-  <string name="oma_error_invalid_descriptor">Descrittore download non valido.</string>
-  <string name="oma_error_non_acceptable_content">Contenuto non supportato.</string>
-  <string name="oma_label_action">Download</string>
-  <string name="oma_label_cancel">Esci</string>
-  <string name="oma_label_description">Descrizione:</string>
-  <string name="oma_label_download_error">Errore di download:</string>
-  <string name="oma_label_exit">Esci</string>
-  <string name="oma_label_name">Nome:</string>
-  <string name="oma_label_proceed">Prosegui</string>
-  <string name="oma_label_size">Dimensione:</string>
-  <string name="oma_label_type">Tipo:</string>
-  <string name="oma_label_vendor">Fornitore:</string>
-  <string name="oma_label_want_to_download">Scaricare questo contenuto?</string>
-  <string name="oma_status_attribute_mismatch">Attributo non corrispondente</string>
-  <string name="oma_status_device_aborted">Telefonata interrotta</string>
-  <string name="oma_status_insufficient_memory">Memoria insufficiente</string>
-  <string name="oma_status_invalid_descriptor">Descrittore non valido</string>
-  <string name="oma_status_invalid_version">Versione non valida</string>
-  <string name="oma_status_loader_error">Errore nel caricatore</string>
-  <string name="oma_status_loss_of_service">Perdita di servizio</string>
-  <string name="oma_status_non_acceptable_content">Contenuto inacettabile</string>
-  <string name="oma_status_success">Riuscito</string>
-  <string name="oma_warning_one_or_more_types_not_supported">Una o più categorie di contenuto non sono supportate.</string>
-  <string name="open_bookmark">Apri</string>
-  <string name="open_in_new_window">Apri in un'altra finestra</string>
-  <string name="org_name">Organizzazione:</string>
-  <string name="org_unit">Unità organizzativa:</string>
-  <string name="override">Sostituisci</string>
-  <string name="override_message">Il segnalibro esistente verrà sostituito.</string>
-  <string name="page_info">Informazioni pagina</string>
-  <string name="page_info_address">Indirizzo:</string>
-  <string name="page_info_cache_source">Origine cache:</string>
-  <string name="page_info_encoding">Codifica:</string>
-  <string name="page_info_expires">Scade:</string>
-  <string name="page_info_modified">Modificato:</string>
-  <string name="page_info_referring_url">URL di riferimento:</string>
-  <string name="page_info_render_mode">Modalità rendering:</string>
-  <string name="page_info_size">Dimensione:</string>
-  <string name="page_info_type">Tipo:</string>
-  <string name="page_info_view">Visualizza informazioni pagina</string>
-  <string name="password">Password</string>
-  <string name="popup_window_attempt">Questo sito sta tentando di aprire una
-      finestra pop-up.</string>
-  <string name="pref_content_autofit">Adatta pagine automaticamente</string>
-  <string name="pref_content_autofit_summary">Formatta pagine Web per adattarle allo schermo</string>
-  <string name="pref_content_block_popups">Blocca finestre pop-up</string>
-  <string name="pref_content_homepage">Imposta home page</string>
-  <string name="pref_content_javascript">Abilita JavaScript</string>
-  <string name="pref_content_load_images">Carica immagini</string>
-  <string name="pref_content_load_images_summary">Visualizza immagini sulle pagine Web</string>
-  <string name="pref_content_open_in_background">Apri in secondo piano</string>
-  <string name="pref_content_open_in_background_summary">Nuove finestre aperte dietro quella corrente</string>
-  <string name="pref_content_title">Impostazioni contenuto pagina</string>
-  <string name="pref_development_nav_dump">Abilita nuova dump cache</string>
-  <string name="pref_development_normal_rendering">Rendering normale</string>
-  <string name="pref_development_single_column_rendering">Rendering singola colonna</string>
-  <string name="pref_development_title">Debug</string>
-  <string name="pref_development_trace">Abilita tracciatura</string>
-  <string name="pref_development_track">Abilita trackball</string>
-  <string name="pref_development_uastring">UAString</string>
-  <string name="pref_development_viewport">Usa visualizzazione ampia</string>
-  <string name="pref_extras_gears_enable">Abilita Gears</string>
-  <string name="pref_extras_gears_enable_summary">Applicazioni che estendono la funzionalità del browser</string>
-  <string name="pref_extras_gears_settings">Impostazioni Gears</string>
-  <string name="pref_extras_gears_settings_summary">Applicazioni che estendono la funzionalità del browser</string>
-  <string name="pref_extras_reset_default">Ripristina predefinito</string>
-  <string name="pref_extras_reset_default_dlg">Verranno cancellati tutti i dati del browser e verranno ripristinati i valori predefiniti.</string>
-  <string name="pref_extras_reset_default_dlg_title">Ripristina predefinito</string>
-  <string name="pref_extras_reset_default_summary">Cancella tutti i dati del browser e ripristina le impostazioni predefinite</string>
-  <string name="pref_extras_title">Impostazioni avanzate</string>
-  <string name="pref_plugin_installed_empty_listxx">Nessun plug-in installato.</string>
-  <string name="pref_plugin_installed_summaryxx">Visualizza plug-in attualmente installati</string>
-  <string name="pref_privacy_clear_cache">Svuota cache</string>
-  <string name="pref_privacy_clear_cache_dlg">La cache verrà svuotata.</string>
-  <string name="pref_privacy_clear_cache_summary">Elimina tutto il contenuto della pagina nella cache</string>
-  <string name="pref_privacy_clear_cookies">Cancella tutti i dati dei cookie</string>
-  <string name="pref_privacy_clear_cookies_dlg">Tutti i cookie verranno cancellati.</string>
-  <string name="pref_privacy_clear_cookies_summary">Cancella tutti i cookie del browser</string>
-  <string name="pref_privacy_clear_form_data">Cancella i dati del modulo</string>
-  <string name="pref_privacy_clear_form_data_dlg">Tutti i dati salvati nel modulo verranno cancellati.</string>
-  <string name="pref_privacy_clear_form_data_summary">Cancella tutti i dati salvati nel modulo</string>
-  <string name="pref_privacy_clear_history">Cancella cronologia</string>
-  <string name="pref_privacy_clear_history_dlg">Verrà cancellata la cronologia di navigazione del browser.</string>
-  <string name="pref_privacy_clear_history_summary">Cancella la cronologia di navigazione del browser</string>
-  <string name="pref_privacy_clear_passwords">Cancella password</string>
-  <string name="pref_privacy_clear_passwords_dlg">Tutte le password salvate verranno cancellate.</string>
-  <string name="pref_privacy_clear_passwords_summary">Cancella tutte le password salvate</string>
-  <string name="pref_privacy_title">Impostazioni privacy</string>
-  <string name="pref_security_accept_cookies">Accetta cookie</string>
-  <string name="pref_security_accept_cookies_summary">Consente ai siti di salvare e leggere i dati dei \"cookie\"</string>
-  <string name="pref_security_remember_passwords">Memorizza password</string>
-  <string name="pref_security_remember_passwords_summary">Salva nomi utente e password per i siti Web</string>
-  <string name="pref_security_save_form_data">Memorizza dati modulo</string>
-  <string name="pref_security_save_form_data_summary">Memorizza i dati immessi nel modulo per utilizzarli in seguito</string>
-  <string name="pref_security_show_security_warning">Mostra avvisi sulla sicurezza</string>
-  <string name="pref_security_show_security_warning_summary">Mostra avviso se si verifica un problema con la sicurezza di un sito</string>
-  <string name="pref_security_title">Impostazioni protezione</string>
-  <string name="pref_text_size">Dimensioni testo</string>
-  <string name="pref_text_size_dialogtitle">Dimensioni testo</string>
-  <string name="pref_text_size_summary">Selezionare la dimensione del testo sulle pagine Web</string>
-  <string name="prev">Prec</string>
-  <string name="question_mark">\?</string>
-  <string name="reload">Aggiorna</string>
-  <string name="remove_bookmark">Elimina segnalibro</string>
-  <string name="remove_history_item">Rimuovi da cronologia</string>
-  <string name="replace">Sostituisci</string>
-  <string name="retrieving_creds_dlg_msg">Recupero in corso dei dettagli di accesso\u2026</string>
-  <string name="retry">Riprova</string>
-  <string name="save">OK</string>
-  <string name="save_to_bookmarks">Collegamento segnalibro</string>
-  <string name="search">Cerca</string>
-  <string name="search_button_text">Vai</string>
-  <string name="search_hint">Immetti indirizzo Web</string>
-  <string name="search_label">Browser</string>
-  <string name="security_warning">Avviso di sicurezza</string>
-  <string name="sha1_fingerprint">Impronta digitale SHA1:</string>
-  <string name="share_page">Condividi pagina</string>
-  <string name="shortcut_bookmark">Segnalibro</string>
-  <string name="sign_in_to">Accedi a <xliff:g id="hostname">%s1</xliff:g> \"<xliff:g id="realm">%s2</xliff:g>\"</string>
-  <string name="ssl_certificate">Certificato di sicurezza</string>
-  <string name="ssl_certificate_is_valid">Questo certificato è valido.</string>
-  <string name="ssl_continue">Continua</string>
-  <string name="ssl_expired">Questo certificato è scaduto.</string>
-  <string name="ssl_mismatch">Il nome del sito non corrisponde a quello del certificato.</string>
-  <string name="ssl_not_yet_valid">Questo certificato non è ancora valido.</string>
-  <string name="ssl_untrusted">Questo certificato non proviene da un'autorità attendibile.</string>
-  <string name="ssl_warnings_header">Si sono verificati problemi con il certificato di sicurezza per questo sito.</string>
-  <string name="stop">Interrompi</string>
-  <string name="stopping">Interruzione in corso\u2026</string>
-  <string name="tab_picker_bookmark">Segnalibro</string>
-  <string name="tab_picker_new_tab">Nuova finestra</string>
-  <string name="tab_picker_remove_tab">Chiudi</string>
-  <string name="tab_picker_send_url">Condividi collegamento</string>
-  <string name="tab_picker_title">Finestre attuali</string>
-  <string name="tab_picker_view_tab">Visualizza</string>
-  <string name="too_many_subwindows_dialog_message">Impossibile aprire una nuova
-      finestra pop-up. È possibile aprire una sola finestra alla volta.</string>
-  <string name="too_many_subwindows_dialog_title">Pop-up già aperta</string>
-  <string name="too_many_windows_dialog_message">Impossibile aprire un'altra finestra. È già stato aperto il numero massimo.</string>
-  <string name="too_many_windows_dialog_title">Limite finestra raggiunto</string>
-  <string name="username">Nome</string>
-  <string name="validity_period">Validità:</string>
-  <string name="view_certificate">Visualizza certificato</string>
-  <string name="view_tabs">Panoramica finestra</string>
-  <string name="view_tabs_condensed">Finestra</string>
-  <string name="visual_history">Cronologia finestre</string>
-  <string name="with">con</string>
-  <string name="zero">0</string>
-</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
new file mode 100644
index 0000000..9511d4b
--- /dev/null
+++ b/res/values-ja/strings.xml
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="sign_in_to">"<xliff:g id="HOSTNAME">%s1</xliff:g>に「<xliff:g id="REALM">%s2</xliff:g>」でログイン"</string>
+    <string name="username">"名前"</string>
+    <string name="password">"パスワード"</string>
+    <string name="action">"ログイン"</string>
+    <string name="cancel">"キャンセル"</string>
+    <string name="ok">"OK"</string>
+    <!-- no translation found for matches_found (4019114285322631887) -->
+    <skip />
+    <!-- no translation found for zero (5187607177868389265) -->
+    <skip />
+    <string name="page_info">"ページ情報"</string>
+    <string name="page_info_view">"ページ情報を表示"</string>
+    <string name="page_info_address">"アドレス:"</string>
+    <string name="ssl_warnings_header">"このサイトのセキュリティ証明書には問題があります。"</string>
+    <string name="ssl_continue">"続行"</string>
+    <string name="security_warning">"セキュリティ警告"</string>
+    <string name="view_certificate">"証明書を表示"</string>
+    <string name="ssl_untrusted">"この証明書は信頼できる認証機関のものではありません。"</string>
+    <string name="ssl_mismatch">"サイト名と証明書上の名前が一致しません。"</string>
+    <string name="ssl_expired">"この証明書は有効期限切れです。"</string>
+    <string name="ssl_not_yet_valid">"この証明書はまだ有効ではありません。"</string>
+    <string name="ssl_certificate">"セキュリティ証明書"</string>
+    <string name="ssl_certificate_is_valid">"この証明書は有効です。"</string>
+    <string name="issued_to">"発行先:"</string>
+    <string name="common_name">"共通名:"</string>
+    <string name="org_name">"組織:"</string>
+    <string name="org_unit">"組織単位:"</string>
+    <string name="issued_by">"発行者:"</string>
+    <string name="validity_period">"有効期間:"</string>
+    <string name="issued_on">"発行日:"</string>
+    <string name="expires_on">"有効期限:"</string>
+    <string name="retrieving_creds_dlg_msg">"ログイン詳細を取得中..."</string>
+    <string name="close">"閉じる"</string>
+    <string name="close_window">"このウィンドウを閉じます。"</string>
+    <string name="stopping">"停止中..."</string>
+    <string name="stop">"停止"</string>
+    <string name="reload">"リフレッシュ"</string>
+    <string name="back">"戻る"</string>
+    <string name="forward">"進む"</string>
+    <string name="save">"OK"</string>
+    <string name="do_not_save">"キャンセル"</string>
+    <string name="location">"場所"</string>
+    <string name="name">"名前"</string>
+    <string name="http">"http://"</string>
+    <!-- no translation found for save_to_bookmarks (4680844117598293907) -->
+    <skip />
+    <string name="edit_bookmark">"ブックマークを編集"</string>
+    <!-- no translation found for create_shortcut_bookmark (9202323987633899835) -->
+    <skip />
+    <string name="open_bookmark">"開く"</string>
+    <string name="remove_bookmark">"ブックマークを削除"</string>
+    <string name="remove_history_item">"履歴から削除"</string>
+    <string name="bookmark_saved">"ブックマークを保存しました。"</string>
+    <string name="bookmark_needs_title">"ブックマークには名前を指定する必要があります。"</string>
+    <string name="bookmark_needs_url">"ブックマークには場所を指定する必要があります。"</string>
+    <string name="empty_bookmark">"空のブックマークは作成できません。"</string>
+    <string name="bookmark_url_not_valid">"無効なURLです。"</string>
+    <string name="delete_bookmark">"削除"</string>
+    <string name="bookmark_page">"最後に表示したページをブックマークする"</string>
+    <string name="current_page">"現在のページ:"</string>
+    <string name="delete_bookmark_warning">"ブックマーク「<xliff:g id="BOOKMARK">%s</xliff:g>」を削除します。"</string>
+    <string name="open_in_new_window">"新しいウィンドウで開く"</string>
+    <string name="new_window">"新しいウィンドウ"</string>
+    <string name="goto_dot">"URLに移動"</string>
+    <string name="find_dot">"このページの検索"</string>
+    <string name="homepage">"ホームページ"</string>
+    <string name="view_tabs">"ウィンドウリスト"</string>
+    <!-- no translation found for view_tabs_condensed (5803955493821945369) -->
+    <skip />
+    <string name="tab_picker_title">"現在のウィンドウ"</string>
+    <string name="tab_picker_view_tab">"表示"</string>
+    <string name="tab_picker_new_tab">"新しいウィンドウ"</string>
+    <string name="tab_picker_remove_tab">"閉じる"</string>
+    <string name="tab_picker_bookmark">"ブックマーク"</string>
+    <string name="tab_picker_send_url">"リンクを共有"</string>
+    <string name="bookmarks">"ブックマーク"</string>
+    <string name="shortcut_bookmark">"ブックマーク"</string>
+    <string name="history">"履歴"</string>
+    <string name="menu_view_download">"ダウンロード"</string>
+    <string name="menu_bookmark_page">"ページをブックマーク"</string>
+    <string name="share_page">"ページを共有"</string>
+    <string name="menu_zoom">"ズーム"</string>
+    <string name="menu_flip_orientation">"画面の向きを変更"</string>
+    <string name="contextmenu_openlink">"開く"</string>
+    <string name="contextmenu_openlink_newwindow">"新しいウィンドウで開く"</string>
+    <string name="contextmenu_bookmark_thislink">"リンクをブックマーク"</string>
+    <string name="contextmenu_savelink">"リンクを保存"</string>
+    <string name="contextmenu_sharelink">"リンクを共有"</string>
+    <string name="contextmenu_copy">"コピー"</string>
+    <string name="contextmenu_copylink">"リンクのURLをコピー"</string>
+    <string name="contextmenu_download_image">"画像を保存"</string>
+    <string name="contextmenu_view_image">"画像を表示"</string>
+    <string name="contextmenu_dial_dot">"発信..."</string>
+    <string name="contextmenu_add_contact">"連絡先を追加"</string>
+    <string name="contextmenu_send_mail">"メールを送信"</string>
+    <string name="contextmenu_map">"地図"</string>
+    <string name="clear">"クリア"</string>
+    <string name="replace">"入れ替え"</string>
+    <string name="browser_bookmarks_page_bookmarks_text">"ブックマーク"</string>
+    <string name="menu_preferences">"設定"</string>
+    <string name="pref_content_title">"ページコンテンツ設定"</string>
+    <string name="pref_content_load_images">"画像のロード"</string>
+    <string name="pref_content_load_images_summary">"ウェブページに画像を表示"</string>
+    <string name="pref_content_block_popups">"ポップアップウィンドウをブロック"</string>
+    <string name="pref_content_javascript">"JavaScriptを有効化"</string>
+    <string name="pref_content_open_in_background">"バックグラウンドで開く"</string>
+    <string name="pref_content_open_in_background_summary">"現在のウィンドウの後ろに新しいウィンドウを開く"</string>
+    <string name="pref_content_homepage">"ホームページ設定"</string>
+    <string name="pref_content_autofit">"ページの自動調整"</string>
+    <string name="pref_content_autofit_summary">"ウェブページの大きさを画面に合わせて表示します"</string>
+    <string name="pref_privacy_title">"プライバシー設定"</string>
+    <string name="pref_privacy_clear_cache">"キャッシュをクリア"</string>
+    <string name="pref_privacy_clear_cache_summary">"キャッシュされたページコンテンツをすべて削除"</string>
+    <string name="pref_privacy_clear_cache_dlg">"キャッシュをクリアします。"</string>
+    <string name="pref_privacy_clear_cookies">"全Cookieデータをクリア"</string>
+    <string name="pref_privacy_clear_cookies_summary">"ブラウザのCookieをすべてクリア"</string>
+    <string name="pref_privacy_clear_cookies_dlg">"Cookieをすべてクリアします。"</string>
+    <string name="pref_privacy_clear_history">"履歴をクリア"</string>
+    <string name="pref_privacy_clear_history_summary">"ブラウザの閲覧履歴をクリア"</string>
+    <string name="pref_privacy_clear_history_dlg">"ブラウザの閲覧履歴をクリアします。"</string>
+    <string name="pref_privacy_clear_form_data">"フォームデータをクリア"</string>
+    <string name="pref_privacy_clear_form_data_summary">"保存されているフォームデータをすべてクリア"</string>
+    <string name="pref_privacy_clear_form_data_dlg">"保存されているフォームデータをすべてクリアします。"</string>
+    <string name="pref_privacy_clear_passwords">"パスワードをクリア"</string>
+    <string name="pref_privacy_clear_passwords_summary">"保存されているパスワードをすべてクリア"</string>
+    <string name="pref_privacy_clear_passwords_dlg">"保存されているパスワードをすべてクリアします。"</string>
+    <string name="pref_security_title">"セキュリティ設定"</string>
+    <string name="pref_security_remember_passwords">"パスワードを保存"</string>
+    <string name="pref_security_remember_passwords_summary">"ウェブサイト用のユーザー名とパスワードを保存"</string>
+    <string name="pref_security_save_form_data">"フォームデータを保存"</string>
+    <string name="pref_security_save_form_data_summary">"フォームに入力したデータを保存して後で再利用する"</string>
+    <string name="pref_security_show_security_warning">"セキュリティ警告を表示"</string>
+    <string name="pref_security_show_security_warning_summary">"サイトの安全性に問題がある場合に警告を表示"</string>
+    <string name="pref_security_accept_cookies">"Cookieの受け入れ"</string>
+    <string name="pref_security_accept_cookies_summary">"サイトによるCookieデータの保存と読み取りを許可します"</string>
+    <!-- no translation found for pref_text_size (3765589440020504007) -->
+    <skip />
+  <string-array name="pref_text_size_choices">
+    <item>"最小"</item>
+    <item>"小"</item>
+    <item>"中"</item>
+    <item>"大"</item>
+    <item>"最大"</item>
+  </string-array>
+    <string name="pref_text_size_dialogtitle">"テキストサイズ"</string>
+    <string name="pref_extras_title">"詳細な設定"</string>
+    <string name="pref_extras_gears_enable">"Gearsを有効化"</string>
+    <string name="pref_extras_gears_enable_summary">"ブラウザの機能を拡張するアプリケーション"</string>
+    <string name="pref_extras_gears_settings">"Gears設定"</string>
+    <!-- no translation found for pref_plugin_installed (6387683936112106178) -->
+    <skip />
+    <string name="pref_plugin_installed_empty_list">"No installed plugins."</string>
+    <string name="pref_extras_gears_settings_summary">"ブラウザの機能を拡張するアプリケーション"</string>
+    <string name="pref_extras_reset_default">"設定のリセット"</string>
+    <string name="pref_extras_reset_default_summary">"全ブラウザデータをクリアし、設定をすべてデフォルトに戻す"</string>
+    <string name="pref_extras_reset_default_dlg">"全ブラウザデータをクリアし、設定をデフォルト値に戻します。"</string>
+    <string name="pref_extras_reset_default_dlg_title">"設定をリセット"</string>
+    <string name="pref_development_title">"デバッグ"</string>
+    <string name="pref_development_viewport">"Use wide viewport"</string>
+    <string name="pref_development_single_column_rendering">"Single column rendering"</string>
+    <string name="pref_development_normal_rendering">"Normal rendering"</string>
+    <string name="pref_development_trace">"Enable tracing"</string>
+    <string name="pref_development_nav_dump">"Enable nav cache dump"</string>
+    <!-- no translation found for pref_development_search_url (7979283099657732298) -->
+    <skip />
+    <string name="pref_development_uastring">"UAString"</string>
+  <string-array name="pref_development_ua_choices">
+    <item>"Android"</item>
+    <item>"Desktop"</item>
+    <item>"iPhone"</item>
+  </string-array>
+  <string-array name="pref_development_ua_values">
+    <item>"0"</item>
+    <item>"1"</item>
+    <item>"2"</item>
+  </string-array>
+    <!-- no translation found for pref_default_text_encoding (2689164865300623884) -->
+    <skip />
+    <!-- no translation found for pref_default_text_encoding_choices:0 (7275223955790513818) -->
+    <!-- no translation found for pref_default_text_encoding_choices:1 (2456597866837587140) -->
+    <!-- no translation found for pref_default_text_encoding_choices:2 (7143715548814380950) -->
+    <!-- no translation found for pref_default_text_encoding_choices:3 (5111312120564516587) -->
+    <!-- no translation found for pref_default_text_encoding_choices:4 (6545734186479713946) -->
+    <!-- no translation found for pref_default_text_encoding_dialogtitle (5508255018084978547) -->
+    <skip />
+    <!-- no translation found for pref_default_text_encoding_default (5272126711231936722) -->
+    <skip />
+    <string name="browserFrameRedirect">"リダイレクト"</string>
+    <string name="browserFrame307Post">"このウェブページはリダイレクトされます。入力したフォームデータをリダイレクト先に送信しますか？"</string>
+    <string name="browserFrameNetworkErrorLabel">"データアクセスエラー"</string>
+    <string name="browserFrameFileErrorLabel">"ファイルに問題があります"</string>
+    <string name="browserFrameFormResubmitLabel">"確認"</string>
+    <string name="browserFrameFormResubmitMessage">"表示しようとしているページには、送信済みのデータ (「POSTDATA」) があります。データを再送すると、以前このページのフォームで実行した操作 (検索やオンライン購入など) が繰り返されます。"</string>
+    <string name="loadSuspendedTitle">"ネットワークに接続していません"</string>
+    <string name="loadSuspended">"再接続時にロードを続行します。"</string>
+    <string name="clear_history">"履歴をクリア"</string>
+    <string name="browser_history">"最近閲覧したページ"</string>
+    <string name="empty_history">"ブラウザ履歴はありません。"</string>
+    <string name="add_new_bookmark">"新しいブックマーク"</string>
+    <string name="no_database">"データベースがありません。"</string>
+    <string name="search_hint">"ウェブアドレスを入力してください"</string>
+    <string name="search">"検索"</string>
+    <string name="search_button_text">"移動"</string>
+    <string name="js_dialog_title_prefix">"ページ"</string>
+    <string name="js_dialog_title_suffix">":"</string>
+    <string name="js_dialog_title_default">"JavaScript"</string>
+    <string name="js_dialog_before_unload">"このページから移動しますか？"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"続行する場合は[OK]、今のページに残る場合は[キャンセル]を選択してください。"</string>
+    <string name="attention">"注意"</string>
+    <string name="popup_window_attempt">"このサイトはポップアップウィンドウを開こうとしています。"</string>
+    <string name="allow">"許可"</string>
+    <string name="block">"ブロック"</string>
+    <string name="too_many_windows_dialog_title">"ウィンドウの数が最大です"</string>
+    <string name="too_many_windows_dialog_message">"既にウィンドウの数が最大なので、新しいウィンドウを開けません。"</string>
+    <string name="too_many_subwindows_dialog_title">"ポップアップが既に開いています"</string>
+    <string name="too_many_subwindows_dialog_message">"一度に開けるポップアップウィンドウは1つだけなので、新しいポップアップウィンドウを開けませんでした。"</string>
+    <string name="download_title">"ダウンロード履歴"</string>
+    <string name="download_unknown_filename">"&lt;不明&gt;"</string>
+    <string name="download_menu_open">"開く"</string>
+    <string name="download_menu_clear">"リストからクリア"</string>
+    <string name="download_menu_cancel">"ダウンロードをキャンセル"</string>
+    <string name="download_menu_cancel_all">"全ダウンロードをキャンセル"</string>
+    <string name="download_menu_clear_all">"リストをクリア"</string>
+    <string name="download_clear_dlg_title">"クリア"</string>
+    <string name="download_clear_dlg_msg">"リストの項目をすべてクリアし、ブラウザのキャッシュから削除します。"</string>
+    <string name="download_cancel_dlg_title">"ダウンロードをキャンセル"</string>
+    <string name="download_cancel_dlg_msg">"全<xliff:g id="DOWNLOAD_COUNT">%d</xliff:g>件のダウンロードをキャンセルし、ダウンロード履歴からクリアします。"</string>
+    <string name="download_file_error_dlg_title">"容量不足です"</string>
+    <string name="download_file_error_dlg_msg">"<xliff:g id="FILENAME">%s</xliff:g>をダウンロードできませんでした。"\n"携帯電話の空き領域を増やしてもう一度試してください。"</string>
+    <string name="download_failed_generic_dlg_title">"ダウンロードに失敗しました"</string>
+    <string name="download_no_sdcard_dlg_title">"SDカードがありません"</string>
+    <string name="download_no_sdcard_dlg_msg">"<xliff:g id="FILENAME">%s</xliff:g>をダウンロードするにはSDカードが必要です。"</string>
+    <!-- no translation found for download_sdcard_busy_dlg_title (6877712666046917741) -->
+    <skip />
+    <!-- no translation found for download_sdcard_busy_dlg_msg (4579003999083645700) -->
+    <skip />
+    <string name="download_no_application">"このファイルを開けるアプリケーションがありません。"</string>
+    <string name="retry">"再試行"</string>
+    <string name="no_downloads">"ダウンロード履歴はありません。"</string>
+    <string name="download_error">"ダウンロードできませんでした。"</string>
+    <string name="download_success">"<xliff:g id="FILE">%s</xliff:g>のダウンロードが終了しました。"</string>
+    <string name="download_running">"ダウンロード中..."</string>
+    <string name="download_pending">"ダウンロードを開始します..."</string>
+    <string name="download_pending_network">"ネットワークに接続しています..."</string>
+    <string name="download_running_paused">"ネットワークに接続しています..."</string>
+    <string name="download_canceled">"ダウンロードをキャンセルしました。"</string>
+    <!-- no translation found for download_not_acceptable (282108828207321357) -->
+    <skip />
+    <string name="download_file_error">"空き容量が不足しているため、ダウンロードを完了できません。"</string>
+    <string name="download_length_required">"項目のサイズを特定できないため、ダウンロードできません。"</string>
+    <string name="download_precondition_failed">"ダウンロードが中断されました。再開できません。"</string>
+    <!-- no translation found for activity_instrumentation_test_runner (8215091309334005029) -->
+    <skip />
+  <string-array name="bookmarks">
+    <item>"Google"</item>
+    <item>"http://www.google.com/"</item>
+    <item>"Yahoo!"</item>
+    <item>"http://www.yahoo.com/"</item>
+    <item>"MSN"</item>
+    <item>"http://www.msn.com/"</item>
+    <item>"MySpace"</item>
+    <item>"http://www.myspace.com/"</item>
+    <item>"Facebook"</item>
+    <item>"http://www.facebook.com/"</item>
+    <item>"ウィキペディア"</item>
+    <item>"http://www.wikipedia.org/"</item>
+    <item>"eBay"</item>
+    <item>"http://www.ebay.com/"</item>
+    <item>"CNN"</item>
+    <item>"http://www.cnn.com/"</item>
+    <item>"New York Times"</item>
+    <item>"http://www.nytimes.com/"</item>
+    <item>"ESPN"</item>
+    <item>"http://espn.go.com/"</item>
+    <item>"Amazon"</item>
+    <item>"http://www.amazon.com/"</item>
+    <item>"Weather Channel"</item>
+    <item>"http://www.weather.com/"</item>
+    <item>"BBC"</item>
+    <item>"http://www.bbc.co.uk/"</item>
+  </string-array>
+    <!-- no translation found for permlab_readHistoryBookmarks (2090878935052508686) -->
+    <skip />
+    <!-- no translation found for permdesc_readHistoryBookmarks (3198464990003094365) -->
+    <skip />
+    <!-- no translation found for permlab_writeHistoryBookmarks (3617974487656041765) -->
+    <skip />
+    <!-- no translation found for permdesc_writeHistoryBookmarks (2408364750616892343) -->
+    <skip />
+    <!-- no translation found for query_data_message (2662165772252682312) -->
+    <skip />
+    <!-- no translation found for location_message (3273812190303763599) -->
+    <skip />
+    <!-- no translation found for shortcut_message (8474516749978531587) -->
+    <skip />
+    <!-- no translation found for settings_message (6171686603006325199) -->
+    <skip />
+    <!-- no translation found for filepicker_message (3954806995548322454) -->
+    <skip />
+    <!-- no translation found for settings_title (3579144910187265022) -->
+    <skip />
+    <!-- no translation found for privacy_policy (864201179110197308) -->
+    <skip />
+    <!-- no translation found for permission_button_alwaysdeny (3997759797081359571) -->
+    <skip />
+    <!-- no translation found for permission_button_allow (8433538747157349096) -->
+    <skip />
+    <!-- no translation found for permission_button_deny (8238202164838263939) -->
+    <skip />
+    <!-- no translation found for shortcut_button_alwaysdeny (8677418058335584182) -->
+    <skip />
+    <!-- no translation found for shortcut_button_allow (3106634184087569293) -->
+    <skip />
+    <!-- no translation found for shortcut_button_deny (6054910540900054553) -->
+    <skip />
+    <!-- no translation found for settings_button_allow (447817497759509841) -->
+    <skip />
+    <!-- no translation found for settings_button_deny (602496920123085858) -->
+    <skip />
+    <!-- no translation found for filepicker_button_allow (2849120125810490391) -->
+    <skip />
+    <!-- no translation found for filepicker_button_deny (1302975999145835953) -->
+    <skip />
+    <!-- no translation found for remove (7820112494467011374) -->
+    <skip />
+    <!-- no translation found for local_storage (6703332885937279085) -->
+    <skip />
+    <!-- no translation found for allowed (1599514934221911624) -->
+    <skip />
+    <!-- no translation found for denied (7470209521858372968) -->
+    <skip />
+    <!-- no translation found for unrecognized_dialog_message (687399590684283989) -->
+    <skip />
+    <!-- no translation found for default_button (3901922329454578908) -->
+    <skip />
+</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
deleted file mode 100644
index fae76b6..0000000
--- a/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,270 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string name="action">登入</string>
-  <string name="activity_instrumentation_functional_test_runner">瀏覽器功能測試執行器</string>
-  <string name="activity_instrumentation_test_runner">瀏覽器測試執行器</string>
-  <string name="add_new_bookmark">新增書籤</string>
-  <string name="allow">允許</string>
-  <string name="attention">注意</string>
-  <string name="back">上一步</string>
-  <string name="block">封鎖</string>
-  <string name="bookmark_needs_title">"必須輸入書籤名稱。"</string>
-  <string name="bookmark_needs_url">"必須輸入書籤位置。"</string>
-  <string name="bookmark_page">將上次檢視的頁面加入書籤</string>
-  <string name="bookmark_saved">儲存到書籤。</string>
-  <string name="bookmark_url_not_valid">URL 無效。</string>
-  <string name="bookmarks">書籤</string>
-  <string name="browserFrame307Post">此網頁已經被重新導向。需要將輸入的表單資料重新傳送到新位置嗎？</string>
-  <string name="browserFrameFileErrorLabel">檔案發生問題</string>
-  <string name="browserFrameFormResubmitLabel">確認</string>
-  <string name="browserFrameFormResubmitMessage">正在嘗試檢視的頁面包含了已經提交的資料 (\"POSTDATA\")。如果需要重新傳送資料，則頁面上之表單所要執行 (例如搜尋或線上購買) 的任何動作將會被重複執行。</string>
-  <string name="browserFrameNetworkErrorLabel">資料連線能力發生問題</string>
-  <string name="browserFrameRedirect">重新導向</string>
-  <string name="browser_bookmarks_page_bookmarks_text">書籤</string>
-  <string name="browser_history">最近造訪的頁面</string>
-  <string name="cache_cleared">快取已經清除</string>
-  <string name="cancel">取消</string>
-  <string name="clear">清除</string>
-  <string name="clear_history">清除記錄</string>
-  <string name="close">關閉</string>
-  <string name="close_window">將會關閉此視窗。</string>
-  <string name="common_name">公用名稱：</string>
-  <string name="contextmenu_add_contact">新增連絡人</string>
-  <string name="contextmenu_bookmark_thislink">書籤連結</string>
-  <string name="contextmenu_copy">複製</string>
-  <string name="contextmenu_copylink">複製 URL 連結</string>
-  <string name="contextmenu_dial_dot">撥打\u2026</string>
-  <string name="contextmenu_download_image">儲存影像</string>
-  <string name="contextmenu_javascript">JavaScript</string>
-  <string name="contextmenu_map">地圖</string>
-  <string name="contextmenu_openlink">開啟</string>
-  <string name="contextmenu_openlink_newwindow">在新視窗中開啟</string>
-  <string name="contextmenu_savelink">儲存連結</string>
-  <string name="contextmenu_send_mail">傳送電子郵件</string>
-  <string name="contextmenu_sharelink">共用連結</string>
-  <string name="contextmenu_view_image">檢視影像</string>
-  <string name="current_page">目前的頁面：\u0020</string>
-  <string name="delete">刪除</string>
-  <string name="delete_bookmark">刪除</string>
-  <string name="delete_bookmark_warning">將會刪除 \"<xliff:g id="bookmark">%s</xliff:g>\" 書籤。</string>
-  <string name="do_not_save">取消</string>
-  <string name="done">完成</string>
-  <string name="download_cancel_dlg_msg">將會取消所有 <xliff:g id="download_count">%d</xliff:g> 的下載，並從下載記錄中清除。</string>
-  <string name="download_cancel_dlg_title">取消下載</string>
-  <string name="download_canceled">下載已經取消。</string>
-  <string name="download_clear_dlg_msg">將會從清單中清除所有的項目，並從瀏覽器快取中移除。</string>
-  <string name="download_clear_dlg_title">清除</string>
-  <string name="download_error">下載失敗。</string>
-  <string name="download_failed_generic_dlg_title">下載失敗</string>
-  <string name="download_file_error">無法完成下載。空間不足。</string>
-  <string name="download_file_error_dlg_msg">無法下載 <xliff:g id="filename">%s</xliff:g>。\n請釋放電話上的部分空間並再試一次。</string>
-  <string name="download_file_error_dlg_title">空間不足</string>
-  <string name="download_length_required">無法下載。無法判斷項目的大小。</string>
-  <string name="download_menu_cancel">取消下載</string>
-  <string name="download_menu_cancel_all">取消所有下載</string>
-  <string name="download_menu_clear">從清單中清除</string>
-  <string name="download_menu_clear_all">清除清單</string>
-  <string name="download_menu_open">開啟</string>
-  <string name="download_no_application">找不到應用程式開啟此檔案。</string>
-  <string name="download_no_sdcard_dlg_msg">需要 SD 卡才能下載 <xliff:g id="filename">%s</xliff:g>。</string>
-  <string name="download_no_sdcard_dlg_title">無 SD 卡</string>
-  <string name="download_not_acceptable">無法下載。電話不支援要下載的內容。</string>
-  <string name="download_pending">開始下載\u2026</string>
-  <string name="download_pending_network">正在等待資料連線\u2026</string>
-  <string name="download_precondition_failed">下載已經中斷。無法繼續。</string>
-  <string name="download_running">正在下載\u2026</string>
-  <string name="download_running_paused">正在等待資料連線\u2026</string>
-  <string name="download_success"><xliff:g id="file">%s</xliff:g> 下載完成。</string>
-  <string name="download_title">下載記錄</string>
-  <string name="download_unknown_filename">&lt;無法辨識&gt;</string>
-  <string name="dump_nav">刪除導覽快取</string>
-  <string name="edit_bookmark">編輯書籤</string>
-  <string name="empty_bookmark">"無法建立空白書籤。"</string>
-  <string name="empty_history">瀏覽器記錄空白。</string>
-  <string name="expires_on">到期日：</string>
-  <string name="find_dot">搜尋頁面</string>
-  <string name="fingerprints">指紋：</string>
-  <string name="forward">下一頁</string>
-  <string name="goto_dot">移至 URL</string>
-  <string name="history">記錄</string>
-  <string name="history_picker_view_web_page">開啟</string>
-  <string name="homepage">首頁</string>
-  <string name="homepage_set">首頁已經更新</string>
-  <string name="http">http://</string>
-  <string name="info_base">標題：\n  <xliff:g id="title">%s1</xliff:g> \n\nURL：\n  <xliff:g id="url">%s2</xliff:g></string>
-  <string name="issued_by">發行者：</string>
-  <string name="issued_on">發行日期：</string>
-  <string name="issued_to">發給：</string>
-  <string name="js_dialog_before_unload">瀏覽此頁面以外的網頁？\n\n<xliff:g id="message">%s</xliff:g>\n\n請選取確定繼續瀏覽，或選取取消停留在目前的頁面。</string>
-  <string name="js_dialog_title_default">JavaScript</string>
-  <string name="js_dialog_title_prefix">頁面</string>
-  <string name="js_dialog_title_suffix">指出：</string>
-  <string name="loadSuspended">此頁面將會在恢復連線之後繼續載入。</string>
-  <string name="loadSuspendedTitle">無網路連線</string>
-  <string name="location">位置</string>
-  <string name="matches_found">找到的符合項目：</string>
-  <string name="md5_fingerprint">MD5 指紋：</string>
-  <string name="menu_bookmark_page">將頁面加入書籤</string>
-  <string name="menu_flip_orientation">翻轉方向</string>
-  <string name="menu_preferences">設定</string>
-  <string name="menu_use_as_homepage">設定為首頁</string>
-  <string name="menu_view_download">下載</string>
-  <string name="menu_zoom">顯示比例</string>
-  <string name="name">名稱</string>
-  <string name="new_window">新增視窗</string>
-  <string name="next">下一步</string>
-  <string name="no_database">無資料庫！</string>
-  <string name="no_downloads">下載記錄空白。</string>
-  <string name="ok">確定</string>
-  <string name="oma_error_failed_to_download">無法下載媒體。</string>
-  <string name="oma_error_insufficient_memory">記憶體不足！請檢查 SD 卡。</string>
-  <string name="oma_error_invalid_descriptor">無效的下載描述符號。</string>
-  <string name="oma_error_non_acceptable_content">不支援此內容。</string>
-  <string name="oma_label_action">下載</string>
-  <string name="oma_label_cancel">結束</string>
-  <string name="oma_label_description">說明：</string>
-  <string name="oma_label_download_error">下載錯誤：</string>
-  <string name="oma_label_exit">結束</string>
-  <string name="oma_label_name">名稱：</string>
-  <string name="oma_label_proceed">繼續</string>
-  <string name="oma_label_size">大小：</string>
-  <string name="oma_label_type">類型：</string>
-  <string name="oma_label_vendor">廠商：</string>
-  <string name="oma_label_want_to_download">是否要下載此內容？</string>
-  <string name="oma_status_attribute_mismatch">屬性不相符</string>
-  <string name="oma_status_device_aborted">電話已經中止</string>
-  <string name="oma_status_insufficient_memory">記憶體不足</string>
-  <string name="oma_status_invalid_descriptor">無效的描述符號</string>
-  <string name="oma_status_invalid_version">無效的版本</string>
-  <string name="oma_status_loader_error">裝載程式錯誤</string>
-  <string name="oma_status_loss_of_service">服務中斷</string>
-  <string name="oma_status_non_acceptable_content">無法接受的內容</string>
-  <string name="oma_status_success">成功</string>
-  <string name="oma_warning_one_or_more_types_not_supported">不支援一或多個內容類別。</string>
-  <string name="open_bookmark">開啟</string>
-  <string name="open_in_new_window">在新視窗中開啟</string>
-  <string name="org_name">組織：</string>
-  <string name="org_unit">組織單位：</string>
-  <string name="override">取代</string>
-  <string name="override_message">將會取代現有書籤。</string>
-  <string name="page_info">頁面資訊</string>
-  <string name="page_info_address">網址：</string>
-  <string name="page_info_cache_source">快取來源：</string>
-  <string name="page_info_encoding">編碼：</string>
-  <string name="page_info_expires">到期日：</string>
-  <string name="page_info_modified">修改日期：</string>
-  <string name="page_info_referring_url">參照 URL：</string>
-  <string name="page_info_render_mode">顯示模式：</string>
-  <string name="page_info_size">大小：</string>
-  <string name="page_info_type">類型：</string>
-  <string name="page_info_view">檢視頁面資訊</string>
-  <string name="password">密碼</string>
-  <string name="popup_window_attempt">網站正在嘗試開啟
-      快顯視窗。</string>
-  <string name="pref_content_autofit">自動調整為符合頁面</string>
-  <string name="pref_content_autofit_summary">將網頁格式化為符合畫面</string>
-  <string name="pref_content_block_popups">攔截快顯視窗</string>
-  <string name="pref_content_homepage">設定首頁</string>
-  <string name="pref_content_javascript">啟用 JavaScript</string>
-  <string name="pref_content_load_images">載入影像</string>
-  <string name="pref_content_load_images_summary">顯示網頁上的影像</string>
-  <string name="pref_content_open_in_background">在背景中開啟</string>
-  <string name="pref_content_open_in_background_summary">在目前的視窗後方開啟新視窗</string>
-  <string name="pref_content_title">頁面內容設定</string>
-  <string name="pref_development_nav_dump">啟用導覽快取刪除</string>
-  <string name="pref_development_normal_rendering">正常顯示</string>
-  <string name="pref_development_single_column_rendering">單一欄位顯示</string>
-  <string name="pref_development_title">偵錯</string>
-  <string name="pref_development_trace">啟用追蹤</string>
-  <string name="pref_development_track">啟用軌跡球</string>
-  <string name="pref_development_uastring">UAString</string>
-  <string name="pref_development_viewport">使用寬視圖</string>
-  <string name="pref_extras_gears_enable">啟用 Gears</string>
-  <string name="pref_extras_gears_enable_summary">擴充瀏覽器功能的應用程式</string>
-  <string name="pref_extras_gears_settings">Gears 設定</string>
-  <string name="pref_extras_gears_settings_summary">擴充瀏覽器功能的應用程式</string>
-  <string name="pref_extras_reset_default">重設成預設值</string>
-  <string name="pref_extras_reset_default_dlg">將會清除所有瀏覽器的資料，且設定也將會還原為預設值。</string>
-  <string name="pref_extras_reset_default_dlg_title">重設成預設值</string>
-  <string name="pref_extras_reset_default_summary">清除所有瀏覽器的資料，並將所有設定重設成預設值</string>
-  <string name="pref_extras_title">進階設定</string>
-  <string name="pref_plugin_installed_empty_listxx">尚未安裝外掛程式。</string>
-  <string name="pref_plugin_installed_summaryxx">檢視目前安裝的外掛程式</string>
-  <string name="pref_privacy_clear_cache">清除快取</string>
-  <string name="pref_privacy_clear_cache_dlg">將會清除快取。</string>
-  <string name="pref_privacy_clear_cache_summary">刪除所有快取的頁面內容</string>
-  <string name="pref_privacy_clear_cookies">清除所有 Cookie 的資料</string>
-  <string name="pref_privacy_clear_cookies_dlg">將會清除所有的 Cookie。</string>
-  <string name="pref_privacy_clear_cookies_summary">清除所有瀏覽器的 Cookie</string>
-  <string name="pref_privacy_clear_form_data">清除表單資料</string>
-  <string name="pref_privacy_clear_form_data_dlg">將會清除所有儲存的表單資料。</string>
-  <string name="pref_privacy_clear_form_data_summary">清除所有儲存的表單資料</string>
-  <string name="pref_privacy_clear_history">清除記錄</string>
-  <string name="pref_privacy_clear_history_dlg">將會清除瀏覽器的導覽記錄。</string>
-  <string name="pref_privacy_clear_history_summary">清除瀏覽器的導覽記錄</string>
-  <string name="pref_privacy_clear_passwords">清除密碼</string>
-  <string name="pref_privacy_clear_passwords_dlg">將會清除所有儲存的密碼。</string>
-  <string name="pref_privacy_clear_passwords_summary">清除所有儲存的密碼</string>
-  <string name="pref_privacy_title">隱私權設定</string>
-  <string name="pref_security_accept_cookies">接受 Cookie</string>
-  <string name="pref_security_accept_cookies_summary">允許網站儲存及讀取 \"Cookie\" 資料</string>
-  <string name="pref_security_remember_passwords">記住密碼</string>
-  <string name="pref_security_remember_passwords_summary">儲存網站的使用者名稱及密碼</string>
-  <string name="pref_security_save_form_data">記住表單資料</string>
-  <string name="pref_security_save_form_data_summary">記住表單中的 I 類型資料，以便稍後使用</string>
-  <string name="pref_security_show_security_warning">顯示安全性警告</string>
-  <string name="pref_security_show_security_warning_summary">如果網站的安全性發生問題，則顯示警告</string>
-  <string name="pref_security_title">安全性設定</string>
-  <string name="pref_text_size">文字大小</string>
-  <string name="pref_text_size_dialogtitle">文字大小</string>
-  <string name="pref_text_size_summary">選取網頁上的文字大小</string>
-  <string name="prev">上一頁</string>
-  <string name="question_mark">\?</string>
-  <string name="reload">重新整理</string>
-  <string name="remove_bookmark">刪除書籤</string>
-  <string name="remove_history_item">從記錄中移除</string>
-  <string name="replace">取代</string>
-  <string name="retrieving_creds_dlg_msg">正在擷取登入的詳細資料\u2026</string>
-  <string name="retry">重試</string>
-  <string name="save">確定</string>
-  <string name="save_to_bookmarks">書籤連結</string>
-  <string name="search">搜尋</string>
-  <string name="search_button_text">移至</string>
-  <string name="search_hint">輸入網址</string>
-  <string name="search_label">瀏覽器</string>
-  <string name="security_warning">安全性警告</string>
-  <string name="sha1_fingerprint">SHA1 指紋：</string>
-  <string name="share_page">共用頁面</string>
-  <string name="shortcut_bookmark">書籤</string>
-  <string name="sign_in_to">登入 <xliff:g id="hostname">%s1</xliff:g> \"<xliff:g id="realm">%s2</xliff:g>\"</string>
-  <string name="ssl_certificate">安全性憑證</string>
-  <string name="ssl_certificate_is_valid">有效的憑證。</string>
-  <string name="ssl_continue">繼續</string>
-  <string name="ssl_expired">此憑證已經過期。</string>
-  <string name="ssl_mismatch">網站名稱與憑證上的名稱不相符。</string>
-  <string name="ssl_not_yet_valid">無效的憑證。</string>
-  <string name="ssl_untrusted">此憑證不是來自信任的授權單位。</string>
-  <string name="ssl_warnings_header">此網站的安全性憑證發生問題。</string>
-  <string name="stop">停止</string>
-  <string name="stopping">正在停止\u2026</string>
-  <string name="tab_picker_bookmark">書籤</string>
-  <string name="tab_picker_new_tab">新增視窗</string>
-  <string name="tab_picker_remove_tab">關閉</string>
-  <string name="tab_picker_send_url">共用連結</string>
-  <string name="tab_picker_title">目前視窗</string>
-  <string name="tab_picker_view_tab">檢視</string>
-  <string name="too_many_subwindows_dialog_message">無法再開啟新的
-      快顯視窗；在任何情況下一次只能開啟一個視窗。</string>
-  <string name="too_many_subwindows_dialog_title">已經開啟快顯視窗</string>
-  <string name="too_many_windows_dialog_message">無法開啟新的視窗；開啟的視窗數量已經達到上限。</string>
-  <string name="too_many_windows_dialog_title">已經達到視窗數量的上限</string>
-  <string name="username">名稱</string>
-  <string name="validity_period">有效性：</string>
-  <string name="view_certificate">檢視憑證</string>
-  <string name="view_tabs">視窗概觀</string>
-  <string name="view_tabs_condensed">視窗</string>
-  <string name="visual_history">視窗記錄</string>
-  <string name="with">含有</string>
-  <string name="zero">0</string>
-</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 71ed099..0c22bc8 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -31,7 +31,14 @@
     
     <color name="white">#ffffffff</color>
     <color name="black">#ff000000</color>
+    <color name="gray">#ffbbbbbb</color>
     
     <color name="translucent_white">#11ffffff</color>
+
+    <!-- Gears Dialog -->
+    <color name="permission_border">#f1cc1d</color>
+    <color name="permission_background">#faefb8</color>
+    <color name="shortcut_border">#e8e8e8</color>
+    <color name="shortcut_background">#f8f8f8</color>
 </resources>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index cb66949..7212135 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -16,99 +16,120 @@
 
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- Sign-in dialog -->
+    <!-- This is used as the title of a dialog which is used to sign in to a secure site.
+            "%s1"is replaced with the host and "%s2" with realm -->
     <string name="sign_in_to">Sign in to <xliff:g id="hostname">%s1</xliff:g> \"<xliff:g id="realm">%s2</xliff:g>\"</string>
+    <!-- Prompt for an input box that allows the user to enter their login name -->
     <string name="username">Name</string>
+    <!-- Prompt for an input box that allows the user to enter their password -->
     <string name="password">Password</string>
+    <!-- The label on the "sign in" button -->
     <string name="action">Sign in</string>
-    <!-- Button label -->
+
+    <!-- Label for a cancel button.  It is used for multiple cancel buttons in different contexts -->
     <string name="cancel">Cancel</string>
-    <!-- Button label -->
+    <!-- Label for a confirm button.  Used in multiple contexts. -->
     <string name="ok">OK</string>
-    <!-- Button label -->
-    <string name="done">Done</string>
-    <!-- Button label -->
-    <string name="prev">Prev</string>
-    <!-- Button label -->
-    <string name="next">Next</string>
-    <string name="matches_found">Matches found:</string>
-    <string name="zero">0</string>
+
+    <!--The find dialog -->
+    <!-- Displayed on the Find Dialog, stating "X matches" where X is the
+            number of matches found in the current page -->
+    <string name="matches_found">\u0020matches</string>
+    <!-- Displayed on the Find Dialog, stating that there are "zero
+            matches" -->
+    <string name="zero">No</string>
     
     <!-- Menu item -->
     <string name="page_info">Page info</string>
+    <!-- Label for a button on an SSL error dialog that allows the user to see
+        Page info screen for the current page -->
     <string name="page_info_view">View page info</string>
     <!-- Page Info dialog strings -->
+    <!-- Noun.  The url for the current page. Displayed on the Page Info
+            screen. -->
     <string name="page_info_address">Address:</string>
-    <string name="page_info_type">Type:</string>
-    <string name="page_info_render_mode">Render mode:</string>
-    <string name="page_info_cache_source">Cache source:</string>
-    <string name="page_info_encoding">Encoding:</string>
-    <string name="page_info_size">Size:</string>
-    <string name="page_info_referring_url">Referring URL:</string>
-    <string name="page_info_modified">Modified:</string>
-    <string name="page_info_expires">Expires:</string>
 
     <!-- SSL Error dialogs -->
     <string name="ssl_warnings_header">There are problems with the security certificate for this site.</string>
+    <!-- Label for a button on an SSL error dialog that lets the user continue
+            and view the page despite the error -->
     <string name="ssl_continue">Continue</string>
+    <!-- Title for an SSL error dialog  -->
     <string name="security_warning">Security warning</string>
+    <!-- Label for a button on an SSL error dialog that lets the user view the
+        certificate -->
     <string name="view_certificate">View certificate</string>
 
+    <!-- Message in an SSL Error dialog -->
     <string name="ssl_untrusted">This certificate is not from a trusted authority.</string>
+    <!-- Message in an SSL Error dialog -->
     <string name="ssl_mismatch">The name of the site does not match the name on the certificate.</string>
+    <!-- Message in an SSL Error dialog -->
     <string name="ssl_expired">This certificate has expired.</string>
+    <!-- Message in an SSL Error dialog -->
     <string name="ssl_not_yet_valid">This certificate is not valid yet.</string>
     
     <!-- SSL Certificate dialogs -->
+    <!-- Title for an SSL Certificate dialog -->
     <string name="ssl_certificate">Security certificate</string>
+    <!-- Message on an SSL Certificate dialog -->
     <string name="ssl_certificate_is_valid">This certificate is valid.</string>
+    <!-- Label for an information field on an SSL Certificate Dialog -->
     <string name="issued_to">Issued to:</string>
+    <!-- Label for an information field on an SSL Certificate Dialog -->
     <string name="common_name">Common name:</string>
+    <!-- Label for an information field on an SSL Certificate Dialog -->
     <string name="org_name">Organization:</string>
+    <!-- Label for an information field on an SSL Certificate Dialog -->
     <string name="org_unit">Organizational unit:</string>
+    <!-- Label for an information field on an SSL Certificate Dialog -->
     <string name="issued_by">Issued by:</string>
+    <!-- Label for an information field on an SSL Certificate Dialog -->
     <string name="validity_period">Validity:</string>
+    <!-- Label for an information field on an SSL Certificate Dialog -->
     <string name="issued_on">Issued on:</string>
+    <!-- Label for an information field on an SSL Certificate Dialog -->
     <string name="expires_on">Expires on:</string>
-    <string name="fingerprints">Fingerprints:</string>
-    <string name="sha1_fingerprint">SHA1 fingerprint:</string>
-    <string name="md5_fingerprint">MD5 fingerprint:</string>
 
     <!-- Dialog that is shown while we are retrieving the login creds from the system -->
     <string name="retrieving_creds_dlg_msg">Retrieving sign-in details\u2026</string>
-    <!-- Menu item -->
+    <!-- Menu item in a context menu for closing a browser window. -->
     <string name="close">Close</string>
-    <!-- Confirmation dialog message -->
+    <!-- Confirmation dialog message stating that a browser window will be closed -->
     <string name="close_window">This window will be closed.</string>
-    <!-- Toast -->
+    <!-- Toast informing the user that loading has stopped for the current page. -->
     <string name="stopping">Stopping\u2026</string>
-    <!-- Menu item -->
+    <!-- Menu item to stop the current page from loading. -->
     <string name="stop">Stop</string>
-    <!-- Menu item -->
+    <!-- Menu item to reload or refresh the current page. -->
     <string name="reload">Refresh</string>
-    <!-- Menu item -->
+    <!-- Menu item to go back to the previous page. -->
     <string name="back">Back</string>
-    <!-- Menu item -->
+    <!-- Menu item to go to the next page (only useful if the user has previously hit back.) -->
     <string name="forward">Forward</string>
-    <!-- Button label -->
+    <!-- Button label to confirm saving a bookmark. -->
     <string name="save">OK</string>
-    <!-- Button label -->
+    <!-- Button label to cancel saving a bookmark. -->
     <string name="do_not_save">Cancel</string>
-    <!-- Field label in Bookmark dialog box -->
+    <!-- Field label in Bookmark dialog box: refers to URL of the page to bookmark -->
     <string name="location">Location</string>
-    <!-- Field label in Bookmark dialog box -->
+    <!-- Field label in Bookmark dialog box: title that the user wishes to use for the bookmark -->
     <string name="name">Name</string>
     <!-- Initial value in Location field in Bookmark dialog box -->
     <string name="http">http://</string>
-    <!-- Menu item -->
-    <string name="save_to_bookmarks">Bookmark link</string>
-    <!-- Menu item -->
+    <!-- Menu item that opens a dialog to save a bookmark, initialized with the current page -->
+    <string name="save_to_bookmarks">Bookmark</string>
+    <!-- Menu item on the bookmarks page, to edit an existing bookmark -->
     <string name="edit_bookmark">Edit bookmark</string>
+    <!-- Context menu item to create a shortcut to the bookmark on the desktop -->
+    <string name="create_shortcut_bookmark">Add shortcut to Home</string>
+    <!-- Context menu item to open the currently highlighted bookmark -->
     <string name="open_bookmark">Open</string>
-    <!-- Menu item -->
+    <!-- Menu item to remove the currently highlighted bookmark-->
     <string name="remove_bookmark">Delete bookmark</string>
-    <!-- Menu item -->
+    <!-- Menu item to remove the currently highlighted history entry from the list of previously visited sites -->
     <string name="remove_history_item">Remove from history</string>
-    <!-- Toast -->
+    <!-- Toast informing the user that their action to save a bookmark has succeeded -->
     <string name="bookmark_saved">Saved to bookmarks.</string>
     <!-- Error that appears in the title of Bookmark dialog when user selects OK with empty Name field -->
     <string name="bookmark_needs_title">"Bookmark must have a name."</string>
@@ -118,107 +139,129 @@
     <string name="empty_bookmark">"Cannot create empty bookmark."</string>
         <!-- Error that appears in the title of Bookmark dialog when user selects OK with invalid URL -->
     <string name="bookmark_url_not_valid">URL is not valid.</string>
-        <!-- Confirmation dialog title -->
+        <!-- Title of a confirmation dialog when the user deletes a bookmark-->
     <string name="delete_bookmark">Delete</string>
-    <!-- Menu item -->
+    <!-- Menu item in the page that displays all bookmarks. It brings up a
+            dialog that allows the user to bookmark the page that the browser is
+            currently on, but is not visible because the bookmarks page is 
+            showing. -->
     <string name="bookmark_page">Bookmark last-viewed page</string>
-    <!-- Summary text under the New Bookmark item on the Bookmarks screen -->
+    <!-- Summary text under the New Bookmark item on the Bookmarks screen.
+            Tells the user that if they select this item, it will bring up a
+            dialog to bookmark the page that the browser is currently viewing,
+            though it is not currently being displayed, since they are viewing
+            the bookmarks screen. -->
     <string name="current_page">Current page:\u0020</string>
-    <!-- Confirmation dialog message -->
+    <!-- Confirmation dialog message confirming that the user wishes to delete
+            the bookmark they selected for deletion -->
     <string name="delete_bookmark_warning">Bookmark \"<xliff:g id="bookmark">%s</xliff:g>\" will be deleted.</string>
-    <string name="info_base">Title:\n  <xliff:g id="title">%s1</xliff:g> \n\nURL: \n  <xliff:g id="url">%s2</xliff:g></string>
-    <!-- Menu item -->
+    <!-- Context Menu item to open the selected link in a new window -->
     <string name="open_in_new_window">Open in new window</string>
-    <!-- Appears in Current windows screen as label on blank + window; user selects this window to open a new browser window -->
+    <!-- Appears in Current windows screen as label on blank + window; user 
+            selects this window to open a new browser window -->
     <string name="new_window">New window</string>
-    <string name="delete">Delete</string>
-    <!-- Menu item -->
+    <!-- Menu item to open a dialog which allows the user to enter a url-->
     <string name="goto_dot">Go to URL</string>
+    <!-- Menu item that opens up a dialog which allows the user to provide a
+            string and search for it on the page. -->
     <string name="find_dot">Find on page</string>
-    <!-- Menu item -->
+    <!-- Menu item to go to the home page, as stored in settings -->
     <string name="homepage">Home page</string>
+    <!-- Menu item which opens a screen which shows all the currently open
+            windows, and also allows them to create a new one. -->
     <string name="view_tabs">Window overview</string>
-    <!-- Menu item -->
-    <string name="view_tabs_condensed">Window</string>
+    <!-- Menu item which opens a screen which shows all the currently open
+            windows, and also allows them to create a new one. This is a shorter
+            alternate version of "view_tabs"-->
+    <string name="view_tabs_condensed">Windows</string>
     <!-- Title of current windows screen; appears in title bar -->
     <string name="tab_picker_title">Current windows</string>
-    <!-- Menu item -->
+    <!-- Context Menu item to view the selected window on the window picker
+            screen -->
     <string name="tab_picker_view_tab">View</string>
-    <!-- Menu item -->
+    <!-- Menu item on the window picker screen to open a new window -->
     <string name="tab_picker_new_tab">New window</string>
-    <!-- Menu item -->
+    <!-- Context Menu item to close the currently selected window -->
     <string name="tab_picker_remove_tab">Close</string>
-    <!-- Menu item -->
+    <!-- Context Menu item to bookmark the currently selected window -->
     <string name="tab_picker_bookmark">Bookmark</string>
-    <!-- Menu item -->
+    <!-- Context Menu item from the bookmarks page to share the selected
+            bookmark  -->
     <string name="tab_picker_send_url">Share link</string>
-    <!-- Menu item -->
+    <!-- Menu item to open the bookmarks page. This is a shorter version that
+            is displayed with an icon -->
     <string name="bookmarks">Bookmarks</string>
+    <!-- Secondary name for the Activity "BrowserBookmarksPage" -->
     <string name="shortcut_bookmark">Bookmark</string>
-    <!-- Menu item -->
+    <!-- Menu item to display the History of previously visited pages -->
     <string name="history">History</string>
-    <string name="visual_history">Window history</string>
-    <string name="menu_use_as_homepage">Set as home page</string>
-    <!-- Menu item -->
+    <!-- Menu item for viewing downloads from the browser -->
     <string name="menu_view_download">Downloads</string>
-    <!-- Menu item -->
+    <!-- Menu item to display the bookmark page.  This is a longer version shown
+            without an icon next to it -->
     <string name="menu_bookmark_page">Bookmark page</string>
     <!-- Menu item -->
     <string name="share_page">Share page</string>
-    <string name="homepage_set">Home page updated</string>
-    <!-- Menu item -->
+    <!-- Menu item to bring up the zoom controls -->
     <string name="menu_zoom">Zoom</string>
-    <!-- Menu item -->
+    <!-- Menu item to flip the orientation of the screen.-->
     <string name="menu_flip_orientation">Flip orientation</string>
-    <!-- Menu item -->
+    <!-- Context Menu item open the currently selected link in the current
+            window.-->
     <string name="contextmenu_openlink">Open</string>
-    <!-- Menu item -->
+    <!-- Context Menu item to open the currently selected link in a new
+            window. -->
     <string name="contextmenu_openlink_newwindow">Open in new window</string>
-    <!-- Menu item -->
+    <!-- Context Menu item to create a bookmark for the url of the currently
+            selected link. -->
     <string name="contextmenu_bookmark_thislink">Bookmark link</string>
-    <!-- Menu item -->
+    <!-- Context Menu item to save the webpage referred to by this link to the
+            SD card (external storage) -->
     <string name="contextmenu_savelink">Save link</string>
-    <!-- Menu item -->
+    <!-- Context Menu item to send the url of the selected link to someone else,
+            via Gmail or another app -->
     <string name="contextmenu_sharelink">Share link</string>
-    <!-- Menu item -->
+    <!-- Context Menu item -->
     <string name="contextmenu_copy">Copy</string>
-    <!-- Menu item -->
+    <!-- Context Menu item to copy the url of the selected link to the
+            clipboard -->
     <string name="contextmenu_copylink">Copy link URL</string>
-    <!-- Menu item -->
+    <!-- Context Menu item to save the image to external storage -->
     <string name="contextmenu_download_image">Save image</string>
-    <!-- Menu item -->
+    <!-- Context Menu item to view the image by itself in the browser -->
     <string name="contextmenu_view_image">View image</string>
-    <!-- Menu item -->
+    <!-- Context Menu item to open the dialer app with the selected phone number
+            -->
     <string name="contextmenu_dial_dot">Dial\u2026</string>
-    <!-- Menu item -->
+    <!-- Context Menu item to add the selected phone number to the address book.
+            -->
     <string name="contextmenu_add_contact">Add contact</string>
-    <!-- Menu item -->
+    <!-- Context Menu item to send an email using the selected email address.-->
     <string name="contextmenu_send_mail">Send email</string>
-    <!-- Menu item -->
+    <!-- Context Menu item to show the currently selected address in the Maps
+            application -->
     <string name="contextmenu_map">Map</string>
-    <!-- Menu item -->
-    <string name="contextmenu_javascript">JavaScript</string>
  
+    <!-- Used as the title of dialogs in the Browser Settings confirming that
+            the user wants to clear (cache, history, or cookie data) -->
     <string name="clear">Clear</string>
-    <string name="cache_cleared">Cache cleared</string>
 
-    <string name="override_message">The existing bookmark will be replaced.</string>
-    <string name="override">Replace</string>
+    <!-- Part of a sentence that says "Replace <url of existing bookmark> with
+            <url of new bookmark>?" -->
     <string name="replace">Replace</string>
-    <string name="with">with</string>
-    <string name="question_mark">\?</string>
 
+    <!-- Title displayed when the bookmarks page is shown -->
     <string name="browser_bookmarks_page_bookmarks_text">Bookmarks</string>
 
-    <string name="history_picker_view_web_page">Open</string>
 
     <!-- Settings screen strings -->
-    <!-- Menu item -->
+    <!-- Menu item to open the Settings screen -->
     <string name="menu_preferences">Settings</string>
     <!-- Settings screen, section title -->
     <string name="pref_content_title">Page content settings</string>
     <!-- Settings label -->
     <string name="pref_content_load_images">Load images</string>
+    <!-- Settings label -->
     <string name="pref_content_load_images_summary">Display images on Web pages</string>
     <!-- Settings label -->
     <string name="pref_content_block_popups">Block pop-up windows</string>
@@ -285,7 +328,7 @@
     <!-- Settings summary -->
     <string name="pref_security_accept_cookies_summary">Allow sites to save and read \"cookie\" data</string>
     <!-- Settings label -->
-    <string name="pref_text_size">Text size</string>
+    <string name="pref_text_size">Set text size</string>
     <!-- Settings text size options; appear in Text size dialog box -->
     <string-array name="pref_text_size_choices">
         <item>Tiny</item>
@@ -294,9 +337,9 @@
         <item>Large</item>
         <item>Huge</item>
     </string-array>
-    <!-- Dialog box title -->
+    <!-- Title of dialog for setting the text size -->
     <string name="pref_text_size_dialogtitle">Text size</string>
-    <string name="pref_text_size_summary">Select the size of text on Web pages</string>
+    <!-- Do not translate -->
     <string-array name="pref_text_size_values">
         <item><xliff:g>SMALLEST</xliff:g></item>
         <item><xliff:g>SMALLER</xliff:g></item>
@@ -313,9 +356,10 @@
     <!-- Settings label -->
     <string name="pref_extras_gears_settings">Gears settings</string>
     <!-- Settings summary -->
+    <string name="pref_plugin_installed">Plugins list</string>
+    <!-- Settings summary -->
+    <string name="pref_plugin_installed_empty_list">No installed plugins.</string>
     <string name="pref_extras_gears_settings_summary">Applications that extend browser functionality</string>
-    <string name="pref_plugin_installed_summaryxx">View currently-installed plugins</string>
-    <string name="pref_plugin_installed_empty_listxx">No installed plugins.</string>
     <!-- Settings label -->
     <string name="pref_extras_reset_default">Reset to default</string>
     <!-- Settings summary -->
@@ -324,29 +368,65 @@
     <string name="pref_extras_reset_default_dlg">All browser data will be cleared and settings will revert to default values.</string>
     <!-- Confirmation dialog title -->
     <string name="pref_extras_reset_default_dlg_title">Reset to default</string>
+    <!-- Title for a group of settings -->
     <string name="pref_development_title">Debug</string>
+    <!-- Do not tranlsate.  Development option -->
     <string name="pref_development_viewport">Use wide viewport</string>
+    <!-- Do not tranlsate.  Development option -->
     <string name="pref_development_single_column_rendering">Single column rendering</string>
+    <!-- Do not tranlsate.  Development option -->
     <string name="pref_development_normal_rendering">Normal rendering</string>
+    <!-- Do not tranlsate.  Development option -->
     <string name="pref_development_trace">Enable tracing</string>
-    <string name="pref_development_track">Enable trackball</string>
+    <!-- Do not tranlsate.  Development option -->
     <string name="pref_development_nav_dump">Enable nav cache dump</string>
+    <!-- Do not tranlsate.  Development option -->
+    <string name="pref_development_search_url">Set search URL</string>
+    <!-- Do not tranlsate.  Development option -->
     <string name="pref_development_uastring">UAString</string>
+    <!-- Do not tranlsate.  Development option -->
     <string-array name="pref_development_ua_choices">
         <item>Android</item>
         <item>Desktop</item>
         <item>iPhone</item>
     </string-array>
+    <!-- Do not tranlsate.  Development option -->
     <string-array name="pref_development_ua_values">
         <item>0</item>
         <item>1</item>
         <item>2</item>
     </string-array>
+    <!-- Settings screen, setting option name -->
+    <string name="pref_default_text_encoding">Set text encoding</string>
+    <!-- Options in the Default encoding dialog box -->
+    <string-array name="pref_default_text_encoding_choices">
+        <item>Latin-1 (ISO-8859-1)</item>
+        <item>Unicode (UTF-8)</item>
+        <item>Japanese (ISO-2022-JP)</item>
+        <item>Japanese (SHIFT_JIS)</item>
+        <item>Japanese (EUC-JP)</item>
+        <!-- TODO: We should add a lot more encodings.  -->
+    </string-array>
+    <!-- Dialog box title -->
+    <string name="pref_default_text_encoding_dialogtitle">Text encoding</string>
+    <!-- Do not translate. Actual encoding values. Must be valid text encodings understandable from WebKit. -->
+    <string-array name="pref_default_text_encoding_values">
+        <item>Latin-1</item>
+        <item>UTF-8</item>
+        <item>ISO-2022-JP</item>
+        <item>SHIFT_JIS</item>
+        <item>EUC-JP</item>
+    </string-array>
+    <string name="pref_default_text_encoding_default">Latin-1</string>
     <!-- Dialog box title -->
     <string name="browserFrameRedirect">Redirect</string>
     <!-- Dialog box message -->
     <string name="browserFrame307Post">This Web page is being redirected. Resend your typed form data to the new location?</string>
+    <!-- Title for a dialog displayed when the browser has a data connectivity
+            problem -->
     <string name="browserFrameNetworkErrorLabel">Data connectivity problem</string>
+    <!-- Title for a dialog displayed when the browser runs into a file label
+            error -->
     <string name="browserFrameFileErrorLabel">Problem with file</string>
     <!-- Dialog box title -->
     <string name="browserFrameFormResubmitLabel">Confirm</string>
@@ -364,29 +444,60 @@
     <string name="empty_history">Browser history is empty.</string>
     <!-- Menu item -->
     <string name="add_new_bookmark">New bookmark</string>
+    <!-- Add bookmark dialog sets its title to this if we have no database.
+            This is an error case -->
     <string name="no_database">No database!</string>
     
+    <!-- This string is for the browser "Go To" UI. -->
+    <!-- Do not translate.  This string is not displayed in UI (no badge is selected for go to). -->
     <string name="search_label">Browser</string>
+    <!-- This string is for the browser "Go To" UI. -->
+    <!-- This is the hint text shown in the Go To widget, before text is entered. -->
     <string name="search_hint">Type Web address</string>
     <!-- Menu item -->
     <string name="search">Search</string>
+    <!-- This string is for the browser "Go To" UI. -->
+    <!-- This is the button label in the "Go To" UI. -->
     <string name="search_button_text">Go</string>
-    
+
+    <!-- Part of the title for a JavaScript dialog.  The full sentence says "The
+            page at <url of current page> says:" followed by the message
+            provided by the page -->
     <string name="js_dialog_title_prefix">The page at</string>
+    <!-- Part of the title for a JavaScript dialog.  The full sentence says "The
+            page at <url of current page> says:" followed by the message
+            provided by the page -->
     <string name="js_dialog_title_suffix">says:</string>
+    <!-- Default title for a javascript dialog -->
     <string name="js_dialog_title_default">JavaScript</string>
+    <!-- Message in a javascript dialog asking if the user wishes to leave the
+             current page -->
     <string name="js_dialog_before_unload">Navigate away from this page?\n\n<xliff:g id="message">%s</xliff:g>\n\nSelect OK to continue, or Cancel to stay on the current page.</string>
 
     <!-- Pop-up window dialog -->
+    <!-- Title for a dialog informing the user that the site is attempting to
+            display a popup window -->
     <string name="attention">Attention</string>
+    <!-- Message for a dialog informing the user that the site is attempting to
+            display a popup window -->
     <string name="popup_window_attempt">This site is attempting to open a
       pop-up window.</string>
+    <!-- Label for a button to allow a particular popup window to open -->
     <string name="allow">Allow</string>
+    <!-- Label for a button to disallow a particular popup from opening -->
     <string name="block">Block</string>
 
+    <!-- Title for a dialog informing the user that they cannot open any more
+            windows because the limit has been reached. -->
     <string name="too_many_windows_dialog_title">Window limit reached</string>
+    <!-- Message in a dialog telling the user that they cannot open any more
+            windows because the limit has been reached. -->
     <string name="too_many_windows_dialog_message">Could not open a new window because you have already opened the maximum number.</string>
+    <!-- Title for a dialog informing the user that they cannot open a subwindow
+            because only one can be open at a time. -->
     <string name="too_many_subwindows_dialog_title">Pop-up already open</string>
+    <!-- Message for a dialog informing the user that they cannot open a
+            subwindow because only one can be open at a time. -->
     <string name="too_many_subwindows_dialog_message">Could not open a new
       pop-up window because only one can be open at any time.</string>
 
@@ -416,12 +527,24 @@
     <string name="download_file_error_dlg_title">Out of space</string>
     <!-- Dialog message -->
     <string name="download_file_error_dlg_msg"><xliff:g id="filename">%s</xliff:g> could not be downloaded.\nFree up some space on your phone and try again.</string>
+    <!-- Title for a dialog informing the user that the download has failed -->
     <string name="download_failed_generic_dlg_title">Download unsuccessful</string>
     <!-- Dialog title -->
     <string name="download_no_sdcard_dlg_title">No SD card</string>
     <!-- Dialog message -->
     <string name="download_no_sdcard_dlg_msg">An SD card is required to download <xliff:g id="filename">%s</xliff:g>.</string>
+    <!-- Title for a dialog informing the user that the SD card used for
+            external storage is busy so they cannot download anything -->
+    <string name="download_sdcard_busy_dlg_title">SD card unavailable</string>
+    <!-- Message for a dialog informing the user that the SD card used for
+            external storage is busy so they cannot download anything.  Informs
+            the user how to enable SD card storage -->
+    <string name="download_sdcard_busy_dlg_msg">The SD card is busy. To allow downloads, go to Home > Settings > SD card &amp; phone storage and clear the \"Use for USB storage\" check box.</string>
+ 
+    <!-- Message for a dialog informing the user that there is no application on
+            the phone that can open the file that was downloaded  -->
     <string name="download_no_application">No application can be found to open this file.</string>
+    <!-- Label for a button to re-attempt downloading a file -->
     <string name="retry">Retry</string>
     <!-- Appears in Download history screen if there is no history -->
     <string name="no_downloads">Download history is empty.</string>
@@ -431,47 +554,43 @@
     <string name="download_success"><xliff:g id="file">%s</xliff:g> Download complete.</string>
     <!-- Appears in Download history screen while an item is being downloaded -->
     <string name="download_running">Downloading\u2026</string>
+    <!-- Message in the list of items which have received download requests
+            telling their status.  This message states that the download has not
+            yet begun -->
     <string name="download_pending">Starting download\u2026</string>
+    <!-- Message in the list of items which have received download requests
+            telling their status.  This message states that the download is
+            waiting for a network connection to continue -->
     <string name="download_pending_network">Waiting for data connection\u2026</string>
+    <!-- Message in the list of items which have received download requests
+            telling their status.  This message states that the download has
+            paused to wait for a network connection -->
     <string name="download_running_paused">Waiting for data connection\u2026</string>
+    <!-- Message in the list of items which have received download requests
+            telling their status.  This message states that the download has
+            been canceled -->
     <string name="download_canceled">Download canceled.</string>
-    <string name="download_not_acceptable">Cannot download. The content being downloaded is not supported on the phone.</string>
+    <!-- Message in the list of items which have received download requests
+            telling their status.  This message states that the download will
+            not happen because the content is not supported by the phone -->
+    <string name="download_not_acceptable">Cannot download. The content is not supported on the phone.</string>
+    <!-- Message in the list of items which have received download requests
+            telling their status.  This message states that the download did not
+            finish because there is not enough storage for the file -->
     <string name="download_file_error">Cannot finish download. There is not enough space.</string>
+    <!-- Message in the list of items which have received download requests
+            telling their status.  This message states that the item cannot be
+            downloaded because it cannot determine the length of the item -->
     <string name="download_length_required">Cannot download. The size of the item cannot be determined.</string>
+    <!-- Message in the list of items which have received download requests
+            telling their status.  This message states that the download was
+            interrupted and cannot be resumed -->
     <string name="download_precondition_failed">Download interrupted. It cannot be resumed.</string>
 
-    <!-- Oma Download Manager. Note: These oma_* messages are no longer used and so not revealed to the end-user-->
-    <string name="oma_label_want_to_download">Do you want to download this content?</string>
-    <string name="oma_label_download_error">Download error:</string>
-    <string name="oma_label_proceed">Proceed</string>
-    <string name="oma_label_action">Download</string>
-    <string name="oma_label_exit">Exit</string>
-    <string name="oma_label_cancel">Exit</string>   
-
-    <string name="oma_label_name">Name:</string>
-    <string name="oma_label_vendor">Vendor:</string>
-    <string name="oma_label_size">Size:</string>
-    <string name="oma_label_type">Type:</string>
-    <string name="oma_label_description">Description:</string>
-
-    <string name="oma_error_insufficient_memory">Insufficient memory! Check your SD card.</string>
-    <string name="oma_error_invalid_descriptor">Invalid download descriptor.</string>
-    <string name="oma_error_non_acceptable_content">Content not supported.</string>
-    <string name="oma_error_failed_to_download">Unable to download media.</string>
-    <string name="oma_warning_one_or_more_types_not_supported">One or more content categories are not supported.</string>
-    <string name="oma_status_success">Success</string>
-    <string name="oma_status_insufficient_memory">Insufficient memory</string>
-    <string name="oma_status_loss_of_service">Loss of service</string>
-    <string name="oma_status_attribute_mismatch">Attribute mismatch</string>
-    <string name="oma_status_invalid_descriptor">Invalid descriptor</string>
-    <string name="oma_status_invalid_version">Invalid version</string>
-    <string name="oma_status_device_aborted">Phone aborted</string>
-    <string name="oma_status_non_acceptable_content">Unacceptable content</string>
-    <string name="oma_status_loader_error">Loader error</string>
-
-
     <string name="activity_instrumentation_test_runner">Browser Test Runner</string>
+    <!-- Do not translate.  Testing only -->
     <string name="activity_instrumentation_functional_test_runner">Browser Functional Test Runner</string>
+    <!-- Do not translate.  Testing only -->
     <string name="dump_nav">Dump navigation cache</string>
 
     <!-- Bookmarks -->
@@ -503,4 +622,63 @@
         <item>BBC</item>
         <item>http://www.bbc.co.uk/</item>
     </string-array>
+
+    <!-- Note that this is the standard search url.  It uses the current locale for language -->
+    <!-- (%1$s) and country (%2$s) and shouldn't need to be replaced by locale or mcc selected -->
+    <!-- resources. -->
+    <!-- Any changes to this (especially in terms of adding/removing the MCC-specific flavors) -->
+    <!-- should be mirrored by changes in apps/GoogleSearch. -->
+    <!-- Do not translate.  This string is an internal URI, not seen in the UI. -->
+    <string name="google_search_base" translatable="false">
+        http://www.google.com/m?hl=%1$s&amp;gl=%2$s&amp;</string>
+
+    <!-- Title of an application permission, listed so the user can choose whether 
+        they want to allow the application to do this. -->
+    <string name="permlab_readHistoryBookmarks">read Browser\'s history and bookmarks</string>
+    <!-- Description of an application permission, listed so the user can choose whether
+        they want to allow the application to do this. -->
+    <string name="permdesc_readHistoryBookmarks">Allows the application to read all 
+        the URLs that the Browser has visited, and all of the Browser\'s bookmarks.</string>
+
+    <!-- Title of an application permission, listed so the user can choose whether 
+        they want to allow the application to do this. -->
+    <string name="permlab_writeHistoryBookmarks">write Browser\'s history and bookmarks</string>
+    <!-- Description of an application permission, listed so the user can choose whether
+        they want to allow the application to do this. -->
+    <string name="permdesc_writeHistoryBookmarks">Allows an application to modify the
+        Browser\'s history or bookmarks stored on your phone. Malicious applications 
+        can use this to erase or modify your Browser\'s data.</string>
+
+    <!-- Gears Dialog -->
+    <string name="query_data_message">The Web site below wants to store information on your computer using Gears.</string>
+    <string name="location_message">The Web site below wants to access information about your location using Gears.</string>
+    <string name="shortcut_message">This Web site wants to create a shortcut on your computer. Do you want to allow this?</string>
+    <string name="settings_message">The table below shows the permissions you have granted to each site that has attempted to use Gears.</string>
+    <string name="filepicker_message">Gears File Picker</string>
+
+    <string name="settings_title">Gears settings</string>
+    <string name="privacy_policy">Read the site\'s privacy policy to see how your location will be used.</string>
+
+    <string name="permission_button_alwaysdeny">Never allow this site</string>
+    <string name="permission_button_allow">Allow</string>
+    <string name="permission_button_deny">Deny</string>
+
+    <string name="shortcut_button_alwaysdeny">Never allow this shortcut</string>
+    <string name="shortcut_button_allow">OK</string>
+    <string name="shortcut_button_deny">Cancel</string>
+
+    <string name="settings_button_allow">Apply</string>
+    <string name="settings_button_deny">Cancel</string>
+
+    <string name="filepicker_button_allow">OK</string>
+    <string name="filepicker_button_deny">Cancel</string>
+
+    <string name="remove">Remove</string>
+    <string name="local_storage">Local storage</string>
+    <string name="allowed">Allowed</string>
+    <string name="denied">Denied</string>
+
+    <string name="unrecognized_dialog_message">Unrecognized dialog type</string>
+    <string name="default_button">OK</string>
+
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 3a5e403..1a5ee1f 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -1,21 +1,21 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-/* //device/apps/common/assets/res/any/styles.xml
-**
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License"); 
-** you may not use this file except in compliance with the License. 
-** You may obtain a copy of the License at 
-**
-**     http://www.apache.org/licenses/LICENSE-2.0 
-**
-** Unless required by applicable law or agreed to in writing, software 
-** distributed under the License is distributed on an "AS IS" BASIS, 
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
-** See the License for the specific language governing permissions and 
-** limitations under the License.
-*/
+/* 
+ *
+ * Copyright 2006,2007,2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
 -->
 <resources>
     <style name="BrowserTheme" parent="@android:Theme.Black">
@@ -35,5 +35,15 @@
         <item name="android:popupBackground">@android:drawable/editbox_dropdown_dark_frame</item>
     </style>
 
+    <style name="gears_button">
+      <item name="android:background">@drawable/gears_button</item>
+    </style>
+
+    <style name="FindDialog">
+        <item name="android:windowEnterAnimation">@anim/find_dialog_enter</item>
+        <item name="android:windowExitAnimation">@anim/find_dialog_exit</item>
+    </style>
+
+
 </resources>
 
diff --git a/res/values/themes.xml b/res/values/themes.xml
new file mode 100644
index 0000000..bb922dd
--- /dev/null
+++ b/res/values/themes.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+    <style name="FindDialogTheme"> 
+        <item name="android:windowFrame">@null</item>
+        <item name="android:windowIsFloating">true</item>
+        <item name="android:windowIsTranslucent">true</item>
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:background">@null</item>
+        <item name="android:windowBackground">@null</item>
+        <item name="android:windowAnimationStyle">@style/FindDialog</item>
+        <item name="android:backgroundDimEnabled">false</item>
+    </style>
+</resources>
diff --git a/res/xml/browser_preferences.xml b/res/xml/browser_preferences.xml
index 08fd835..cd40322 100644
--- a/res/xml/browser_preferences.xml
+++ b/res/xml/browser_preferences.xml
@@ -28,6 +28,14 @@
                 android:entryValues="@array/pref_text_size_values"
                 android:dialogTitle="@string/pref_text_size_dialogtitle" />
 
+        <ListPreference
+                android:key="default_text_encoding"
+                android:title="@string/pref_default_text_encoding"
+                android:defaultValue="@string/pref_default_text_encoding_default"
+                android:entries="@array/pref_default_text_encoding_choices"
+                android:entryValues="@array/pref_default_text_encoding_values"
+                android:dialogTitle="@string/pref_default_text_encoding_dialogtitle" />
+
         <CheckBoxPreference
                 android:key="block_popup_windows"
                 android:defaultValue="true"
@@ -56,8 +64,8 @@
                 android:title="@string/pref_content_open_in_background"
                 android:summary="@string/pref_content_open_in_background_summary" />
 
-        <EditTextPreference
-                android:key="homepage"
+        <com.android.browser.BrowserHomepagePreference
+                android:key="homepage" 
                 android:title="@string/pref_content_homepage"
                 android:singleLine="true" />
 
@@ -140,8 +148,10 @@
     <PreferenceCategory
             android:title="@string/pref_extras_title">
                      
+            <!-- This setting is named "Enable Gears" but is actually
+                 tied to enabling all plugins. -->
             <CheckBoxPreference
-                    android:key="enable_gears"
+                    android:key="enable_plugins"
                     android:defaultValue="true"
                     android:title="@string/pref_extras_gears_enable"
                     android:summary="@string/pref_extras_gears_enable_summary" />
@@ -149,7 +159,7 @@
             <Preference
                     android:key="gears_settings"
                     android:persistent="false"
-                    android:dependency="enable_gears"
+                    android:dependency="enable_plugins"
                     android:title="@string/pref_extras_gears_settings"
                     android:summary="@string/pref_extras_gears_settings_summary" />
 
diff --git a/res/xml/debug_preferences.xml b/res/xml/debug_preferences.xml
index 22b5997..4f55f6b 100644
--- a/res/xml/debug_preferences.xml
+++ b/res/xml/debug_preferences.xml
@@ -50,6 +50,11 @@
             android:defaultValue="false"
             android:title="@string/pref_development_nav_dump" />
 
+        <com.android.browser.BrowserSearchpagePreference
+                android:key="search_url" 
+                android:title="@string/pref_development_search_url"
+                android:singleLine="true" />
+
         <ListPreference
             android:key="user_agent"
             android:title="@string/pref_development_uastring"
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 3fe38e8..ea65a46 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -114,7 +114,8 @@
      */
     boolean save() {
         String title = mTitle.getText().toString().trim();
-        String unfilteredUrl = mAddress.getText().toString();
+        String unfilteredUrl = 
+                BrowserActivity.fixUrl(mAddress.getText().toString());
         boolean emptyTitle = title.length() == 0;
         boolean emptyUrl = unfilteredUrl.trim().length() == 0;
         Resources r = getResources();
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index fc4acfc..fe27f8d 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -62,6 +62,7 @@
 import android.net.http.RequestQueue;
 import android.net.http.SslCertificate;
 import android.net.http.SslError;
+import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Debug;
@@ -75,13 +76,16 @@
 import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.os.SystemProperties;
-import android.pim.DateFormat;
+import android.preference.PreferenceManager;
 import android.provider.Browser;
 import android.provider.Checkin;
 import android.provider.Contacts.Intents.Insert;
 import android.provider.Contacts;
 import android.provider.Downloads;
+import android.provider.MediaStore;
 import android.text.IClipboard;
+import android.text.TextUtils;
+import android.text.format.DateFormat;
 import android.text.util.Regex;
 import android.util.Config;
 import android.util.Log;
@@ -94,7 +98,6 @@
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
-import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.Window;
@@ -142,6 +145,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.Vector;
@@ -179,6 +183,8 @@
     private void setupHomePage() {
         final Runnable getAccount = new Runnable() {
             public void run() {
+                // Lower priority
+                Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
                 // get the default home page
                 String homepage = mSettings.getHomePage();
 
@@ -242,7 +248,9 @@
                 mGls = IGoogleLoginService.Stub.asInterface(service);
                 if (done[0] == false) {
                     done[0] = true;
-                    new Thread(getAccount).start();
+                    Thread account = new Thread(getAccount);
+                    account.setName("GLSAccount");
+                    account.start();
                 }
             }
             public void onServiceDisconnected(ComponentName className) {
@@ -513,6 +521,8 @@
          * as there is a limit of 1Mb (see Asset.h)
          */
         public void run() {
+            // Lower the priority
+            Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
             try {
                 if (pluginsPath == null) {
                     Log.e(TAG, "No plugins path found!");
@@ -598,11 +608,24 @@
         if (copyPluginsFromAssets.newSystemImage())  {
           if (copyPluginsFromAssets.checkIsDifferentVersions()) {
             copyPluginsFromAssets.cleanPluginsDirectory();
-            new Thread(copyPluginsFromAssets).start();
+            Thread copyplugins = new Thread(copyPluginsFromAssets);
+            copyplugins.setName("CopyPlugins");
+            copyplugins.start();
           }
         }
     }
 
+    private class ClearThumbnails extends AsyncTask<File, Void, Void> {
+        @Override
+        public Void doInBackground(File... files) {
+            if (files != null) {
+                for (File f : files) {
+                    f.delete();
+                }
+            }
+            return null;
+        }
+    }
 
     @Override public void onCreate(Bundle icicle) {
         if (Config.LOGV) {
@@ -621,6 +644,9 @@
 
         mResolver = getContentResolver();
 
+        setBaseSearchUrl(PreferenceManager.getDefaultSharedPreferences(this)
+                .getString("search_url", ""));
+
         //
         // start MASF proxy service
         //
@@ -658,10 +684,19 @@
         mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Browser");
 
         if (!mTabControl.restoreState(icicle)) {
+            // clear up the thumbnail directory if we can't restore the state as
+            // none of the files in the directory are referenced any more.
+            new ClearThumbnails().execute(
+                    mTabControl.getThumbnailDir().listFiles());
             final Intent intent = getIntent();
             final Bundle extra = intent.getExtras();
             // Create an initial tab.
-            final TabControl.Tab t = mTabControl.createNewTab();
+            // If the intent is ACTION_VIEW and data is not null, the Browser is
+            // invoked to view the content by another application. In this case,
+            // the tab will be close when exit.
+            final TabControl.Tab t = mTabControl.createNewTab(
+                    Intent.ACTION_VIEW.equals(intent.getAction()) &&
+                    intent.getData() != null);
             mTabControl.setCurrentTab(t);
             // This is one of the only places we call attachTabToContentView
             // without animating from the tab picker.
@@ -722,6 +757,15 @@
 
     @Override
     protected void onNewIntent(Intent intent) {
+        // When a tab is closed on exit, the current tab index is set to -1.
+        // Reset before proceed as Browser requires the current tab to be set.
+        if (mTabControl.getCurrentIndex() == -1) {
+            TabControl.Tab current = mTabControl.getTab(0);
+            mTabControl.setCurrentTab(current);
+            attachTabToContentView(current);
+            mWebView = current.getWebView();
+            resetTitleAndIcon(mWebView);
+        }
         if (mWebView == null) {
             return;
         }
@@ -734,6 +778,7 @@
         }
         if (Intent.ACTION_VIEW.equals(action)
                 || Intent.ACTION_SEARCH.equals(action)
+                || MediaStore.INTENT_ACTION_MEDIA_SEARCH.equals(action)
                 || Intent.ACTION_WEB_SEARCH.equals(action)) {
             String url = getUrlFromIntent(intent);
             if (url == null || url.length() == 0) {
@@ -742,9 +787,10 @@
             if (Intent.ACTION_VIEW.equals(action) && 
                     (flags & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
                 // if FLAG_ACTIVITY_BROUGHT_TO_FRONT flag is on, the url will be
-                // opened in a new tab unless we have reached MAX_TABS and the
-                // url will be opened in the current tab
-                openTabAndShow(url, null);
+                // opened in a new tab unless we have reached MAX_TABS. Then the
+                // url will be opened in the current tab. If a new tab is
+                // created, it will have "true" for exit on close.
+                openTabAndShow(url, null, true);
             } else {
                 if ("about:debug".equals(url)) {
                     mSettings.toggleDebugSettings();
@@ -779,24 +825,39 @@
                     }
                 }
             } else if (Intent.ACTION_SEARCH.equals(action)
+                    || MediaStore.INTENT_ACTION_MEDIA_SEARCH.equals(action)
                     || Intent.ACTION_WEB_SEARCH.equals(action)) {
                 url = intent.getStringExtra(SearchManager.QUERY);
-                mLastEnteredUrl = url;
-                // Don't add Urls, just search terms.
-                // Urls will get added when the page is loaded.
-                if (!Regex.WEB_URL_PATTERN.matcher(url).matches()) {
-                    Browser.updateVisitedHistory(mResolver, url, false);
+                if (url != null) {
+                    mLastEnteredUrl = url;
+                    // Don't add Urls, just search terms.
+                    // Urls will get added when the page is loaded.
+                    if (!Regex.WEB_URL_PATTERN.matcher(url).matches()) {
+                        Browser.updateVisitedHistory(mResolver, url, false);
+                    }
+                    // In general, we shouldn't modify URL from Intent.
+                    // But currently, we get the user-typed URL from search box as well.
+                    url = fixUrl(url);
+                    url = smartUrlFilter(url);
+                    String searchSource = "&source=android-" + GOOGLE_SEARCH_SOURCE_SUGGEST + "&";
+                    if (url.contains(searchSource)) {
+                        String source = null;
+                        final Bundle appData = intent.getBundleExtra(SearchManager.APP_DATA);
+                        if (appData != null) {
+                            source = appData.getString(SearchManager.SOURCE);
+                        }
+                        if (TextUtils.isEmpty(source)) {
+                            source = GOOGLE_SEARCH_SOURCE_UNKNOWN;
+                        }
+                        url = url.replace(searchSource, "&source=android-"+source+"&");
+                    }
                 }
-                // In general, we shouldn't modify URL from Intent.
-                // But currently, we get the user-typed URL from search box as well.
-                url = fixUrl(url);
-                url = smartUrlFilter(url);
             }
         }
         return url;
     }
 
-    private String fixUrl(String inUrl) {
+    /* package */ static String fixUrl(String inUrl) {
         if (inUrl.startsWith("http://") || inUrl.startsWith("https://"))
             return inUrl;
         if (inUrl.startsWith("http:") ||
@@ -970,7 +1031,7 @@
         }
 
         mActivityInPause = true;
-        if (!pauseWebView()) {
+        if (mTabControl.getCurrentIndex() >= 0 && !pauseWebView()) {
             mWakeLock.acquire();
             mHandler.sendMessageDelayed(mHandler
                     .obtainMessage(RELEASE_WAKELOCK), WAKELOCK_TIMEOUT);
@@ -1057,6 +1118,9 @@
             showHttpAuthentication(mHttpAuthHandler, null, null, title,
                     name, password, focusId);
         }
+        if (mFindDialog != null && mFindDialog.isShowing()) {
+            mFindDialog.onConfigurationChanged(newConfig);
+        }
     }
 
     @Override public void onLowMemory() {
@@ -1192,6 +1256,11 @@
         // options selector, so set mCanChord to true so we can access them.
         mCanChord = true;
         int id = item.getItemId();
+        final WebView webView = getTopWindow();
+        final HashMap hrefMap = new HashMap();
+        hrefMap.put("webview", webView);
+        final Message msg = mHandler.obtainMessage(
+                FOCUS_NODE_HREF, id, 0, hrefMap);
         switch (id) {
             // -- Browser context menu
             case R.id.open_context_menu_id:
@@ -1200,21 +1269,9 @@
             case R.id.save_link_context_menu_id:
             case R.id.share_link_context_menu_id:
             case R.id.copy_link_context_menu_id:
-                Message msg = mHandler.obtainMessage(
-                        FOCUS_NODE_HREF, id, 0);
-                WebView webview = getTopWindow();
-                msg.obj = webview;
-                webview.requestFocusNodeHref(msg);
+                webView.requestFocusNodeHref(msg);
                 break;
 
-            case R.id.download_context_menu_id:
-            case R.id.view_image_context_menu_id:
-                Message m = mHandler.obtainMessage(
-                        FOCUS_NODE_HREF, id, 0);
-                WebView w = getTopWindow();
-                m.obj = w;
-                w.requestImageRef(m);
-                break;
             default:
                 // For other context menus
                 return onOptionsItemSelected(item);
@@ -1222,18 +1279,34 @@
         mCanChord = false;
         return true;
     }
-    
+
+    private Bundle createGoogleSearchSourceBundle(String source) {
+        Bundle bundle = new Bundle();
+        bundle.putString(SearchManager.SOURCE, source);
+        return bundle;
+    }
+
     /**
      * Overriding this forces the search key to launch global search.  The difference
      * is the final "true" which requests global search.
      */
     @Override
     public boolean onSearchRequested() {
-        startSearch(null, false, null, true); 
+        startSearch(null, false,
+                createGoogleSearchSourceBundle(GOOGLE_SEARCH_SOURCE_SEARCHKEY), true);
         return true;
     }
 
     @Override
+    public void startSearch(String initialQuery, boolean selectInitialQuery, 
+            Bundle appSearchData, boolean globalSearch) {
+        if (appSearchData == null) {
+            appSearchData = createGoogleSearchSourceBundle(GOOGLE_SEARCH_SOURCE_TYPE);
+        }
+        super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
+    }
+
+    @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (!mCanChord) {
             // The user has already fired a shortcut with this hold down of the
@@ -1244,23 +1317,27 @@
             // -- Main menu
             case R.id.goto_menu_id: {
                 String url = getTopWindow().getUrl();
-                // TODO: Activities are requested to call onSearchRequested, and to override
-                // that function in order to insert custom fields (e.g. the search query).
-                startSearch(mSettings.getHomePage().equals(url) ? null : url, true, null, false);
+                startSearch(mSettings.getHomePage().equals(url) ? null : url, true,
+                        createGoogleSearchSourceBundle(GOOGLE_SEARCH_SOURCE_GOTO), false);
                 }
                 break;
-                
+
             case R.id.search_menu_id:
                 // launch using "global" search, which will bring up the Google search box
-                onSearchRequested(); 
+                startSearch(null, false,
+                        createGoogleSearchSourceBundle(GOOGLE_SEARCH_SOURCE_SEARCHMENU), true);
                 break;
-        
+
             case R.id.bookmarks_menu_id:
                 bookmarksPicker();
                 break;
 
             case R.id.windows_menu_id:
-                tabPicker(true, mTabControl.getCurrentIndex(), false);
+                if (mTabControl.getTabCount() == 1) {
+                    openTabAndShow(mSettings.getHomePage(), null, false);
+                } else {
+                    tabPicker(true, mTabControl.getCurrentIndex(), false);
+                }
                 break;
 
             case R.id.stop_reload_menu_id:
@@ -1299,7 +1376,7 @@
                         indexToShow--;
                     }
                 }
-                removeTabAndShow(currentIndex, indexToShow);
+                switchTabs(currentIndex, indexToShow, true);
                 break;
 
             case R.id.homepage_menu_id:
@@ -1313,39 +1390,21 @@
                 startActivityForResult(intent, PREFERENCES_PAGE);
                 break;
 
-/*
-            Disable Find for version 1.0
             case R.id.find_menu_id:
                 if (null == mFindDialog) {
                     mFindDialog = new FindDialog(this);
-                    FrameLayout.LayoutParams lp = 
-                        new FrameLayout.LayoutParams(
-                        ViewGroup.LayoutParams.FILL_PARENT, 
-                        ViewGroup.LayoutParams.WRAP_CONTENT, 
-                        Gravity.BOTTOM);
-                        mFindDialog.setLayoutParams(lp);
                 }
                 mFindDialog.setWebView(getTopWindow());
-                mContentView.addView(mFindDialog);
                 mFindDialog.show();
-                Animation anim =AnimationUtils.loadAnimation(this,
-                        R.anim.find_dialog_enter);
-                mFindDialog.startAnimation(anim);
                 mMenuState = EMPTY_MENU;
                 break;
-*/
 
             case R.id.page_info_menu_id:
-                showPageInfo(mWebView, false);
+                showPageInfo(mTabControl.getCurrentTab(), false);
                 break;
 
-            case R.id.classic_history_menu_id: {
-                    Intent i = new Intent(this, BrowserHistoryPage.class);
-                    i.putExtra("maxTabsOpen",
-                            mTabControl.getTabCount() >=
-                            TabControl.MAX_TABS);
-                    startActivityForResult(i, CLASSIC_HISTORY_PAGE);
-                }
+            case R.id.classic_history_menu_id:
+                loadHistory();
                 break;
 
             case R.id.bookmark_page_menu_id:
@@ -1448,15 +1507,33 @@
             case R.id.properties_tab_menu_id:
                 if (mTabListener != null && mTabOverview != null) {
                     int pos = mTabOverview.getContextMenuPosition(item);
-                    TabControl.Tab t = mTabControl.getTab(pos);
-                    // Use the tab's data for the page info dialog.
-                    if (t.getWebView() != null) {
-                        showPageInfo(t.getWebView(), false);
-                    }
-                    // FIXME: what should we display if the WebView is null?
+                    showPageInfo(mTabControl.getTab(pos), false);
                 }
                 break;
 
+            case R.id.window_one_menu_id:
+            case R.id.window_two_menu_id:
+            case R.id.window_three_menu_id:
+            case R.id.window_four_menu_id:
+            case R.id.window_five_menu_id:
+            case R.id.window_six_menu_id:
+            case R.id.window_seven_menu_id:
+            case R.id.window_eight_menu_id:
+                {
+                    int menuid = item.getItemId();
+                    for (int id = 0; id < WINDOW_SHORTCUT_ID_ARRAY.length; id++) {
+                        if (WINDOW_SHORTCUT_ID_ARRAY[id] == menuid) {
+                            TabControl.Tab desiredTab = mTabControl.getTab(id);
+                            if (desiredTab != null && 
+                                    desiredTab != mTabControl.getCurrentTab()) {
+                                switchTabs(mTabControl.getCurrentIndex(), id, false);
+                            }
+                            break;
+                        } 
+                    }
+                }
+                break;
+                
             default:
                 if (!super.onOptionsItemSelected(item)) {
                     return false;
@@ -1468,29 +1545,9 @@
     }
 
     public void closeFind() {
-        Animation anim = AnimationUtils.loadAnimation(this,
-                R.anim.find_dialog_exit);
-        mFindDialog.startAnimation(anim);
-        mContentView.removeView(mFindDialog);
-        getTopWindow().requestFocus();
         mMenuState = R.id.MAIN_MENU;
     }
 
-    @Override
-    public boolean dispatchTouchEvent(MotionEvent event) {
-        if (super.dispatchTouchEvent(event)) {
-            return true;
-        } else {
-            // We do not use the Dialog class because it places dialogs in the
-            // middle of the screen.  It would take care of dismissing find if
-            // were using it, but we are doing it manually since we are not.
-            if (mFindDialog != null && mFindDialog.hasFocus()) {
-                mFindDialog.dismiss();
-            }
-            return false;
-        }
-    }
-    
     @Override public boolean onPrepareOptionsMenu(Menu menu)
     {
         // This happens when the user begins to hold down the menu key, so
@@ -1533,14 +1590,11 @@
                 final MenuItem back = menu.findItem(R.id.back_menu_id);
                 back.setVisible(canGoBack);
                 back.setEnabled(canGoBack);
-                final MenuItem close = menu.findItem(R.id.close_menu_id);
-                close.setVisible(!canGoBack);
-                close.setEnabled(!canGoBack);
                 final MenuItem flip = 
                         menu.findItem(R.id.flip_orientation_menu_id);
                 boolean keyboardClosed = 
-                        getResources().getConfiguration().keyboardHidden == 
-                        Configuration.KEYBOARDHIDDEN_YES;
+                        getResources().getConfiguration().hardKeyboardHidden == 
+                        Configuration.HARDKEYBOARDHIDDEN_YES;
                 flip.setEnabled(keyboardClosed);
 
                 boolean isHome = mSettings.getHomePage().equals(w.getUrl());
@@ -1562,6 +1616,19 @@
                         PackageManager.MATCH_DEFAULT_ONLY);
                 menu.findItem(R.id.share_page_menu_id).setVisible(
                         list.size() > 0);
+                
+                // Hide the menu+<window number> items
+                // Can't set visibility in menu xml file b/c when a
+                // group is set visible, all items are set visible.
+                for (int i = 0; i < WINDOW_SHORTCUT_ID_ARRAY.length; i++) {
+                    menu.findItem(WINDOW_SHORTCUT_ID_ARRAY[i]).setVisible(false);
+                }
+
+                // If there is only 1 window, the text will be "New window"
+                final MenuItem windows = menu.findItem(R.id.windows_menu_id);
+                windows.setTitleCondensed(mTabControl.getTabCount() > 1 ?
+                        getString(R.string.view_tabs_condensed) :
+                        getString(R.string.tab_picker_new_tab));
 
                 boolean isNavDump = mSettings.isNavDump();
                 final MenuItem nav = menu.findItem(R.id.dump_nav_menu_id);
@@ -1608,26 +1675,22 @@
         menu.setGroupVisible(R.id.GEO_MENU,
                 type == WebView.HitTestResult.GEO_TYPE);
         menu.setGroupVisible(R.id.IMAGE_MENU,
-                type == WebView.HitTestResult.IMAGE_TYPE ||
-                type == WebView.HitTestResult.IMAGE_ANCHOR_TYPE
+                type == WebView.HitTestResult.IMAGE_TYPE
                 || type == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE);
         menu.setGroupVisible(R.id.ANCHOR_MENU,
-                type == WebView.HitTestResult.ANCHOR_TYPE ||
-                type == WebView.HitTestResult.IMAGE_ANCHOR_TYPE
-                || type == WebView.HitTestResult.SRC_ANCHOR_TYPE
+                type == WebView.HitTestResult.SRC_ANCHOR_TYPE
                 || type == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE);
 
         // Setup custom handling depending on the type
         switch (type) {
             case WebView.HitTestResult.PHONE_TYPE:
-                menu.setHeaderTitle(extra);
+                menu.setHeaderTitle(Uri.decode(extra));
                 menu.findItem(R.id.dial_context_menu_id).setIntent(
                         new Intent(Intent.ACTION_VIEW, Uri
                                 .parse(WebView.SCHEME_TEL + extra)));
-                Intent addIntent = new Intent(Intent.ACTION_INSERT,
-                        Contacts.People.CONTENT_URI);
-                addIntent.putExtra(Insert.FULL_MODE, true);
-                addIntent.putExtra(Insert.PHONE, extra);
+                Intent addIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
+                addIntent.putExtra(Insert.PHONE, Uri.decode(extra));
+                addIntent.setType(Contacts.People.CONTENT_ITEM_TYPE);
                 menu.findItem(R.id.add_contact_context_menu_id).setIntent(
                         addIntent);
                 menu.findItem(R.id.copy_phone_context_menu_id).setOnMenuItemClickListener(
@@ -1653,35 +1716,16 @@
                         new Copy(extra));
                 break;
 
-            case WebView.HitTestResult.ANCHOR_TYPE:
-            case WebView.HitTestResult.IMAGE_ANCHOR_TYPE:
             case WebView.HitTestResult.SRC_ANCHOR_TYPE:
             case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE:
-                mTitleView = (TextView) LayoutInflater.from(this)
+                TextView titleView = (TextView) LayoutInflater.from(this)
                         .inflate(android.R.layout.browser_link_context_header,
                         null);
-                menu.setHeaderView(mTitleView);
+                titleView.setText(extra);
+                menu.setHeaderView(titleView);
                 // decide whether to show the open link in new tab option
                 menu.findItem(R.id.open_newtab_context_menu_id).setVisible(
                         mTabControl.getTabCount() < TabControl.MAX_TABS);
-                if (type == WebView.HitTestResult.ANCHOR_TYPE
-                        || type == WebView.HitTestResult.IMAGE_ANCHOR_TYPE){
-                    menu.findItem(R.id.bookmark_context_menu_id).setVisible(
-                            false);
-                    menu.findItem(R.id.save_link_context_menu_id).setVisible(
-                            false);
-                    menu.findItem(R.id.copy_link_context_menu_id).setVisible(
-                            false);
-                    menu.findItem(R.id.share_link_context_menu_id).setVisible(
-                            false);
-                    mTitleView.setText(R.string.contextmenu_javascript);
-                    break;
-                }
-                Message headerMessage = mHandler.obtainMessage(FOCUS_NODE_HREF,
-                        HEADER_FLAG, 0);
-                headerMessage.obj = webview;
-                webview.requestFocusNodeHref(headerMessage);
-                // decide whether to show the share link option
                 PackageManager pm = getPackageManager();
                 Intent send = new Intent(Intent.ACTION_SEND);
                 send.setType("text/plain");
@@ -1689,12 +1733,14 @@
                         PackageManager.MATCH_DEFAULT_ONLY);
                 menu.findItem(R.id.share_link_context_menu_id).setVisible(
                         list.size() > 0);
-                if (type == WebView.HitTestResult.ANCHOR_TYPE) {
-                    break;
-                }
-                //fall through
+                break;
 
             case WebView.HitTestResult.IMAGE_TYPE:
+                menu.setHeaderTitle(extra);
+                menu.findItem(R.id.view_image_context_menu_id).setIntent(
+                        new Intent(Intent.ACTION_VIEW, Uri.parse(extra)));
+                menu.findItem(R.id.download_context_menu_id).
+                        setOnMenuItemClickListener(new Download(extra));
                 break;
 
             default:
@@ -1793,10 +1839,10 @@
         // Increment the count to indicate that we are in an animation.
         mAnimationCount++;
         // Remove the listener so we don't get any more tab changes.
-        if (mTabOverview != null) {
-            mTabOverview.setListener(null);
-        }
+        mTabOverview.setListener(null);
         mTabListener = null;
+        // Make the menu empty until the animation completes.
+        mMenuState = EMPTY_MENU;
 
     }
 
@@ -1828,7 +1874,8 @@
     // the given Message. If the tab overview is already showing (i.e. this
     // method is called from TabListener.onClick(), the method will animate
     // away from the tab overview.
-    private void openTabAndShow(String url, final Message msg) {
+    private void openTabAndShow(String url, final Message msg,
+            boolean closeOnExit) {
         final boolean newTab = mTabControl.getTabCount() != TabControl.MAX_TABS;
         final TabControl.Tab currentTab = mTabControl.getCurrentTab();
         if (newTab) {
@@ -1856,7 +1903,7 @@
                 }
                 // Animate from the Tab overview after any animations have
                 // finished.
-                sendAnimateFromOverview(mTabControl.createNewTab(),
+                sendAnimateFromOverview(mTabControl.createNewTab(closeOnExit),
                         true, url, delay, msg);
             }
         } else if (url != null) {
@@ -1900,10 +1947,6 @@
     // be displayed to the user.
     private void animateToTabOverview(final int newIndex, final boolean remove,
             final AnimatingView view) {
-        if (mTabOverview == null) {
-            return;
-        }
-
         // Find the view in the ImageGrid allowing for the "New Tab" cell.
         int position = mTabControl.getTabIndex(view.mTab);
         if (!((ImageAdapter) mTabOverview.getAdapter()).maxedOut()) {
@@ -1920,12 +1963,10 @@
         final Animation.AnimationListener l =
                 new Animation.AnimationListener() {
                     public void onAnimationStart(Animation a) {
-                        if (mTabOverview != null) {
-                            mTabOverview.requestFocus();
-                            // Clear the listener so we don't trigger a tab
-                            // selection.
-                            mTabOverview.setListener(null);
-                        }
+                        mTabOverview.requestFocus();
+                        // Clear the listener so we don't trigger a tab
+                        // selection.
+                        mTabOverview.setListener(null);
                     }
                     public void onAnimationRepeat(Animation a) {}
                     public void onAnimationEnd(Animation a) {
@@ -1940,17 +1981,15 @@
                             public void run() {
                                 // Remove the AnimatingView.
                                 mContentView.removeView(view);
-                                if (mTabOverview != null) {
-                                    // Make newIndex visible.
-                                    mTabOverview.setCurrentIndex(newIndex);
-                                    // Restore the listener.
-                                    mTabOverview.setListener(mTabListener);
-                                    // Change the menu to TAB_MENU if the
-                                    // ImageGrid is interactive.
-                                    if (mTabOverview.isLive()) {
-                                        mMenuState = R.id.TAB_MENU;
-                                        mTabOverview.requestFocus();
-                                    }
+                                // Make newIndex visible.
+                                mTabOverview.setCurrentIndex(newIndex);
+                                // Restore the listener.
+                                mTabOverview.setListener(mTabListener);
+                                // Change the menu to TAB_MENU if the
+                                // ImageGrid is interactive.
+                                if (mTabOverview.isLive()) {
+                                    mMenuState = R.id.TAB_MENU;
+                                    mTabOverview.requestFocus();
                                 }
                                 // If a remove was requested, remove the tab.
                                 if (remove) {
@@ -1968,12 +2007,10 @@
                                     if (currentTab != tab) {
                                         mTabControl.setCurrentTab(currentTab);
                                     }
-                                    if (mTabOverview != null) {
-                                        mTabOverview.remove(newIndex);
-                                        // Make the current tab visible.
-                                        mTabOverview.setCurrentIndex(
-                                                mTabControl.getCurrentIndex());
-                                    }
+                                    mTabOverview.remove(newIndex);
+                                    // Make the current tab visible.
+                                    mTabOverview.setCurrentIndex(
+                                            mTabControl.getCurrentIndex());
                                 }
                             }
                         });
@@ -1999,11 +2036,6 @@
     // from.
     private void animateFromTabOverview(final AnimatingView view,
             final boolean newTab, final String url, final Message msg) {
-        // mTabOverview may have been dismissed
-        if (mTabOverview == null) {
-            return;
-        }
-
         // firstVisible is the first visible tab on the screen.  This helps
         // to know which corner of the screen the selected tab is.
         int firstVisible = mTabOverview.getFirstVisiblePosition();
@@ -2025,32 +2057,19 @@
         // Find the view at this location.
         final View v = mTabOverview.getChildAt(location);
 
-        // Use a delay of 1 second in case we get a bad position
-        long delay = 1000;
-        boolean fade = false;
-
         // Wait until the animation completes to load the url.
         final Animation.AnimationListener l =
                 new Animation.AnimationListener() {
                     public void onAnimationStart(Animation a) {}
                     public void onAnimationRepeat(Animation a) {}
                     public void onAnimationEnd(Animation a) {
-                        // The animation is done so allow key events and other
-                        // animations to begin.
-                        mAnimationCount--;
                         mHandler.post(new Runnable() {
                             public void run() {
-                                if (v != null) {
-                                    mContentView.removeView(view);
-                                    mWebView.setVisibility(View.VISIBLE);
-                                    // Make the sub window container visible if
-                                    // there is one.
-                                    if (mTabControl.getCurrentSubWindow() != null) {
-                                        mTabControl.getCurrentTab()
-                                                .getSubWebViewContainer()
-                                                .setVisibility(View.VISIBLE);
-                                    }
-                                }
+                                mContentView.removeView(view);
+                                // Dismiss the tab overview. If the cell at the
+                                // given location is null, set the fade
+                                // parameter to true.
+                                dismissTabOverview(v == null);
                                 if (url != null) {
                                     // Dismiss the subwindow if one exists.
                                     dismissSubWindow(
@@ -2065,6 +2084,12 @@
                                 if (msg != null) {
                                     msg.sendToTarget();
                                 }
+                                // The animation is done and the tab overview is
+                                // gone so allow key events and other animations
+                                // to begin.
+                                mAnimationCount--;
+                                // Reset all the title bar info.
+                                resetTitle();
                             }
                         });
                     }
@@ -2077,32 +2102,42 @@
             view.startAnimation(anim);
             // Make the view VISIBLE during the animation.
             view.setVisibility(View.VISIBLE);
-            // Dismiss the tab overview after the animation completes.
-            delay = anim.getDuration();
         } else {
-            // dismiss mTabOverview and have it fade out just in case we get a
-            // bad location.
-            fade = true;
             // Go ahead and load the url.
             l.onAnimationEnd(null);
         }
-        // Reset all the title bar info.
-        resetTitle();
-        // Dismiss the tab overview either after the animation or after a
-        // second.
-        mHandler.sendMessageDelayed(mHandler.obtainMessage(
-                DISMISS_TAB_OVERVIEW, fade ? 1 : 0, 0), delay);
+    }
+
+    // Dismiss the tab overview applying a fade if needed.
+    private void dismissTabOverview(final boolean fade) {
+        if (fade) {
+            AlphaAnimation anim = new AlphaAnimation(1.0f, 0.0f);
+            anim.setDuration(500);
+            anim.startNow();
+            mTabOverview.startAnimation(anim);
+        }
+        // Just in case there was a problem with animating away from the tab
+        // overview
+        mWebView.setVisibility(View.VISIBLE);
+        // Make the sub window container visible.
+        if (mTabControl.getCurrentSubWindow() != null) {
+            mTabControl.getCurrentTab().getSubWebViewContainer()
+                    .setVisibility(View.VISIBLE);
+        }
+        mContentView.removeView(mTabOverview);
+        mTabOverview.clear();
+        mTabOverview = null;
+        mTabListener = null;
     }
 
     private void openTab(String url) {
         if (mSettings.openInBackground()) {
-            TabControl.Tab t = mTabControl.createNewTab();
+            TabControl.Tab t = mTabControl.createNewTab(false);
             if (t != null) {
-                WebView w = t.getWebView();
-                w.loadUrl(url);
+                t.getWebView().loadUrl(url);
             }
         } else {
-            openTabAndShow(url, null);
+            openTabAndShow(url, null, false);
         }
     }
 
@@ -2118,6 +2153,19 @@
             mText = toCopy;
         }
     }
+    
+    private class Download implements OnMenuItemClickListener {
+        private String mText;
+
+        public boolean onMenuItemClick(MenuItem item) {
+            onDownloadStartNoStream(mText, null, null, null, -1);
+            return true;
+        }
+
+        public Download(String toDownload) {
+            mText = toDownload;
+        }
+    }
 
     private void copy(CharSequence text) {
         try {
@@ -2184,7 +2232,11 @@
         mUrl = url;
         mTitle = title;
 
-        setTitle(buildUrlTitle(url, title));
+        // While the tab overview is animating or being shown, block changes
+        // to the title.
+        if (mAnimationCount == 0 && mTabOverview == null) {
+            setTitle(buildUrlTitle(url, title));
+        }
     }
 
     /**
@@ -2255,6 +2307,11 @@
 
     // Set the favicon in the title bar.
     private void setFavicon(Bitmap icon) {
+        // While the tab overview is animating or being shown, block changes to
+        // the favicon.
+        if (mAnimationCount > 0 || mTabOverview != null) {
+            return;
+        }
         Drawable[] array = new Drawable[2];
         PaintDrawable p = new PaintDrawable(Color.WHITE);
         p.setCornerRadius(3f);
@@ -2294,11 +2351,11 @@
         updateLockIconImage(mLockIconType);
     }
 
-    private void removeTabAndShow(int indexToRemove, int indexToShow) {
+    private void switchTabs(int indexFrom, int indexToShow, boolean remove) {
         int delay = TAB_ANIMATION_DURATION + TAB_OVERVIEW_DELAY;
         // Animate to the tab picker, remove the current tab, then
         // animate away from the tab picker to the parent WebView.
-        tabPicker(false, indexToRemove, true);
+        tabPicker(false, indexFrom, remove);
         // Change to the parent tab
         final TabControl.Tab tab = mTabControl.getTab(indexToShow);
         if (tab != null) {
@@ -2315,13 +2372,25 @@
         if (mWebView.canGoBack()) {
             mWebView.goBack();
         } else {
+            TabControl.Tab self = mTabControl.getCurrentTab();
             // Check to see if we are closing a window that was created by
             // another window. If so, we switch back to that window.
-            TabControl.Tab parent = mTabControl.getCurrentTab().getParentTab();
+            TabControl.Tab parent = self.getParentTab();
             if (parent != null) {
-                removeTabAndShow(mTabControl.getCurrentIndex(),
-                        mTabControl.getTabIndex(parent));
+                switchTabs(mTabControl.getCurrentIndex(),
+                        mTabControl.getTabIndex(parent), true);
             } else {
+                if (self.closeOnExit()) {
+                    if (mTabControl.getTabCount() == 1) {
+                        finish();
+                        return;
+                    }
+                    // call pauseWebView() now, we won't be able to call it in
+                    // onPause() as the mWebView won't be valid.
+                    pauseWebView();
+                    removeTabFromContentView(self);
+                    mTabControl.removeTab(self);
+                }
                 /*
                  * Instead of finishing the activity, simply push this to the back
                  * of the stack and let ActivityManager to choose the foreground
@@ -2352,7 +2421,10 @@
             if (mAnimationCount > 0) {
                 return KeyTracker.State.DONE_TRACKING;
             }
-            if (stage == KeyTracker.Stage.UP) {
+            if (stage == KeyTracker.Stage.LONG_REPEAT) {
+                loadHistory();
+                return KeyTracker.State.DONE_TRACKING;
+            } else if (stage == KeyTracker.Stage.UP) {
                 // FIXME: Currently, we do not have a notion of the
                 // history picker for the subwindow, but maybe we
                 // should?
@@ -2381,14 +2453,12 @@
         if (!handled) {
             switch (keyCode) {
                 case KeyEvent.KEYCODE_SPACE:
-                    if (mMenuState == R.id.MAIN_MENU){
-                        if (event.isShiftPressed()) {
-                            getTopWindow().pageUp(false);
-                        } else {
-                            getTopWindow().pageDown(false);
-                        }
-                        handled = true;
+                    if (event.isShiftPressed()) {
+                        getTopWindow().pageUp(false);
+                    } else {
+                        getTopWindow().pageDown(false);
                     }
+                    handled = true;
                     break;
 
                 default:
@@ -2424,6 +2494,13 @@
         }
     }
 
+    private void loadHistory() {
+        Intent intent = new Intent(this, BrowserHistoryPage.class);
+        intent.putExtra("maxTabsOpen",
+                mTabControl.getTabCount() >= TabControl.MAX_TABS);
+        startActivityForResult(intent, CLASSIC_HISTORY_PAGE);
+    }
+
     // called by a non-UI thread to post the message
     public void postMessage(int what, int arg1, int arg2, Object obj) {
         mHandler.sendMessage(mHandler.obtainMessage(what, arg1, arg2, obj));
@@ -2436,13 +2513,12 @@
     // Message Ids
     private static final int JS_CONFIRM              = 101;
     private static final int FOCUS_NODE_HREF         = 102;
-    private static final int DISMISS_TAB_OVERVIEW    = 103;
-    private static final int CANCEL_CREDS_REQUEST    = 104;
-    private static final int ANIMATE_FROM_OVERVIEW   = 105;
-    private static final int ANIMATE_TO_OVERVIEW     = 106;
-    private static final int OPEN_TAB_AND_SHOW       = 107;
-    private static final int CHECK_MEMORY            = 108;
-    private static final int RELEASE_WAKELOCK        = 109;
+    private static final int CANCEL_CREDS_REQUEST    = 103;
+    private static final int ANIMATE_FROM_OVERVIEW   = 104;
+    private static final int ANIMATE_TO_OVERVIEW     = 105;
+    private static final int OPEN_TAB_AND_SHOW       = 106;
+    private static final int CHECK_MEMORY            = 107;
+    private static final int RELEASE_WAKELOCK        = 108;
 
     // Private handler for handling javascript and saving passwords
     private Handler mHandler = new Handler() {
@@ -2458,37 +2534,6 @@
                     }
                     break;
 
-                case DISMISS_TAB_OVERVIEW:
-                    if (mTabOverview != null) {
-                        if (msg.arg1 == 1) {
-                            AlphaAnimation anim =
-                                    new AlphaAnimation(1.0f, 0.0f);
-                            anim.setDuration(500);
-                            anim.startNow();
-                            mTabOverview.startAnimation(anim);
-                        }
-                        // Just in case there was a problem with animating away
-                        // from the tab overview
-                        mWebView.setVisibility(View.VISIBLE);
-                        // Make the sub window container visible.
-                        if (mTabControl.getCurrentSubWindow() != null) {
-                            mTabControl.getCurrentTab().getSubWebViewContainer()
-                                    .setVisibility(View.VISIBLE);
-                        }
-                        mContentView.removeView(mTabOverview);
-                        mTabOverview.clear();
-                        // XXX: There are checks for mTabOverview throughout
-                        // this file because this message can be received
-                        // before it is expected. This is because we are not
-                        // enforcing the order of animations properly. In order
-                        // to get this right, we would need to rewrite a lot of
-                        // the code to dispatch this messages after all
-                        // animations have completed.
-                        mTabOverview = null;
-                        mTabListener = null;
-                    }
-                    break;
-                    
                 case ANIMATE_FROM_OVERVIEW:
                     final HashMap map = (HashMap) msg.obj;
                     animateFromTabOverview((AnimatingView) map.get("view"),
@@ -2502,7 +2547,7 @@
                     break;
 
                 case OPEN_TAB_AND_SHOW:
-                    openTabAndShow((String) msg.obj, null);
+                    openTabAndShow((String) msg.obj, null, false);
                     break;
 
                 case FOCUS_NODE_HREF:
@@ -2510,18 +2555,16 @@
                     if (url == null || url.length() == 0) {
                         break;
                     }
-                    WebView view = (WebView) msg.obj;
+                    HashMap focusNodeMap = (HashMap) msg.obj;
+                    WebView view = (WebView) focusNodeMap.get("webview");
                     // Only apply the action if the top window did not change.
                     if (getTopWindow() != view) {
                         break;
                     }
                     switch (msg.arg1) {
-                        case HEADER_FLAG:
-                            mTitleView.setText(url);
-                            break;
                         case R.id.open_context_menu_id:
                         case R.id.view_image_context_menu_id:
-                            loadURL(url);
+                            loadURL(getTopWindow(), url);
                             break;
                         case R.id.open_newtab_context_menu_id:
                             openTab(url);
@@ -2546,7 +2589,7 @@
                     break;
 
                 case LOAD_URL:
-                    loadURL((String) msg.obj);
+                    loadURL(getTopWindow(), (String) msg.obj);
                     break;
 
                 case STOP_LOAD:
@@ -2574,9 +2617,6 @@
         }
     };
 
-    private static final int HEADER_FLAG = Integer.MIN_VALUE;
-    private TextView mTitleView = null;
-
     // -------------------------------------------------------------------------
     // WebViewClient implementation.
     //-------------------------------------------------------------------------
@@ -2591,14 +2631,22 @@
         return mWebViewClient;
     }
 
+    private void updateIcon(String url, Bitmap icon) {
+        if (icon != null) {
+            BrowserBookmarksAdapter.updateBookmarkFavicon(mResolver,
+                    url, icon);
+        }
+        setFavicon(icon);
+    }
+
     private final WebViewClient mWebViewClient = new WebViewClient() {
         @Override
         public void onPageStarted(WebView view, String url, Bitmap favicon) {
             resetLockIcon(url);
             setUrlTitle(url, null);
-            // Call onReceivedIcon instead of setFavicon so the bookmark
+            // Call updateIcon instead of setFavicon so the bookmark
             // database can be updated.
-            mWebChromeClient.onReceivedIcon(view, favicon);
+            updateIcon(url, favicon);
 
             if (mSettings.isTracing() == true) {
                 // FIXME: we should save the trace file somewhere other than data.
@@ -2664,8 +2712,6 @@
             // Reset the title and icon in case we stopped a provisional
             // load.
             resetTitleAndIcon(view);
-            // Make the progress full.
-            getWindow().setFeatureInt(Window.FEATURE_PROGRESS, 10000);
 
             // Update the lock icon image only once we are done loading
             updateLockIconImage(mLockIconType);
@@ -2891,6 +2937,7 @@
             if (errorCode != EventHandler.ERROR_LOOKUP &&
                     errorCode != EventHandler.ERROR_CONNECT &&
                     errorCode != EventHandler.ERROR_BAD_URL &&
+                    errorCode != EventHandler.ERROR_UNSUPPORTED_SCHEME &&
                     errorCode != EventHandler.FILE_ERROR) {
                 new AlertDialog.Builder(BrowserActivity.this)
                         .setTitle((errorCode == EventHandler.FILE_NOT_FOUND_ERROR) ?
@@ -3106,7 +3153,7 @@
                 // openTabAndShow will dispatch the message after creating the
                 // new WebView. This will prevent another request from coming
                 // in during the animation.
-                openTabAndShow(null, msg);
+                openTabAndShow(null, msg, false);
                 parent.addChildTab(mTabControl.getCurrentTab());
                 WebView.WebViewTransport transport = 
                     (WebView.WebViewTransport) msg.obj;
@@ -3204,13 +3251,18 @@
                     mTabControl.getCurrentTab().getParentTab();
             if (parent != null) {
                 // JavaScript can only close popup window.
-                removeTabAndShow(currentIndex, mTabControl.getTabIndex(parent));
+                switchTabs(currentIndex, mTabControl.getTabIndex(parent), true);
             }
         }
 
         @Override
         public void onProgressChanged(WebView view, int newProgress) {
-            getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress*100);
+            // Block progress updates to the title bar while the tab overview
+            // is animating or being displayed.
+            if (mAnimationCount == 0 && mTabOverview == null) {
+                getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
+                        newProgress * 100);
+            }
 
             if (newProgress == 100) {
                 // onProgressChanged() is called for sub-frame too while
@@ -3222,7 +3274,7 @@
 
         @Override
         public void onReceivedTitle(WebView view, String title) {
-            String url = view.getUrl();
+            String url = view.getOriginalUrl();
 
             // here, if url is null, we want to reset the title
             setUrlTitle(url, title);
@@ -3245,7 +3297,9 @@
                 Cursor c = mResolver.query(Browser.BOOKMARKS_URI,
                     Browser.HISTORY_PROJECTION, where, selArgs, null);
                 if (c.moveToFirst()) {
-                    Log.d(LOGTAG, "updating cursor");
+                    if (Config.LOGV) {
+                        Log.v(LOGTAG, "updating cursor");
+                    }
                     // Current implementation of database only has one entry per
                     // url.
                     int titleIndex =
@@ -3263,11 +3317,7 @@
 
         @Override
         public void onReceivedIcon(WebView view, Bitmap icon) {
-            if (icon != null) {
-                BrowserBookmarksAdapter.updateBookmarkFavicon(mResolver,
-                        view.getUrl(), icon);
-            }
-            setFavicon(icon);
+            updateIcon(view.getUrl(), icon);
         }
 
         //----------------------------------------------------------------------
@@ -3470,20 +3520,29 @@
      * @param mimetype The mimetype of the content reported by the server
      * @param contentLength The file size reported by the server
      */
-    public void onDownloadStartNoStream(String url, String userAgent,
+    /*package */ void onDownloadStartNoStream(String url, String userAgent,
             String contentDisposition, String mimetype, long contentLength) {
 
         String filename = URLUtil.guessFileName(url,
                 contentDisposition, mimetype);
 
         // Check to see if we have an SDCard
-        if (!Environment.getExternalStorageState().
-                equals(Environment.MEDIA_MOUNTED)) {
-            String msg =
-                getString(R.string.download_no_sdcard_dlg_msg, filename);
+        String status = Environment.getExternalStorageState();
+        if (!status.equals(Environment.MEDIA_MOUNTED)) {
+            int title;
+            String msg;
+
+            // Check to see if the SDCard is busy, same as the music app
+            if (status.equals(Environment.MEDIA_SHARED)) {
+                msg = getString(R.string.download_sdcard_busy_dlg_msg);
+                title = R.string.download_sdcard_busy_dlg_title;
+            } else {
+                msg = getString(R.string.download_no_sdcard_dlg_msg, filename);
+                title = R.string.download_no_sdcard_dlg_title;
+            }
 
             new AlertDialog.Builder(this)
-                .setTitle(R.string.download_no_sdcard_dlg_title)
+                .setTitle(title)
                 .setIcon(R.drawable.ic_dialog_alert)
                 .setMessage(msg)
                 .setPositiveButton(R.string.ok, null)
@@ -3508,9 +3567,15 @@
         if (contentLength > 0) {
             values.put(Downloads.TOTAL_BYTES, contentLength);
         }
-        final Uri contentUri =
-                getContentResolver().insert(Downloads.CONTENT_URI, values);
-        viewDownloads(contentUri);
+        if (mimetype == null) {
+            // We must have long pressed on a link or image to download it. We
+            // are not sure of the mimetype in this case, so do a head request
+            new FetchUrlMimeType(this).execute(values);
+        } else {
+            final Uri contentUri =
+                    getContentResolver().insert(Downloads.CONTENT_URI, values);
+            viewDownloads(contentUri);
+        }
 
     }
 
@@ -3563,29 +3628,38 @@
         } else if (lockIconType == LOCK_ICON_MIXED) {
             d = mMixLockIcon;
         }
-        getWindow().setFeatureDrawable(Window.FEATURE_RIGHT_ICON, d);
+        // If the tab overview is animating or being shown, do not update the
+        // lock icon.
+        if (mAnimationCount == 0 && mTabOverview == null) {
+            getWindow().setFeatureDrawable(Window.FEATURE_RIGHT_ICON, d);
+        }
     }
 
     /**
      * Displays a page-info dialog.
-     * @param view The target web-view.
+     * @param tab The tab to show info about
      * @param fromShowSSLCertificateOnError The flag that indicates whether
      * this dialog was opened from the SSL-certificate-on-error dialog or
      * not. This is important, since we need to know whether to return to
      * the parent dialog or simply dismiss.
      */
-    private void showPageInfo(final WebView view,
+    private void showPageInfo(final TabControl.Tab tab,
                               final boolean fromShowSSLCertificateOnError) {
         final LayoutInflater factory = LayoutInflater
                 .from(this);
 
         final View pageInfoView = factory.inflate(R.layout.page_info, null);
+        
+        final WebView view = tab.getWebView();
 
         String url = null;
         String title = null;
 
-        // Use the cached title and url if this is the current WebView
-        if (view == mWebView) {
+        if (view == null) {
+            url = tab.getUrl();
+            title = tab.getTitle();
+        }else if (view == mWebView) {
+             // Use the cached title and url if this is the current WebView
             url = mUrl;
             title = mTitle;
         } else {
@@ -3603,7 +3677,7 @@
         ((TextView) pageInfoView.findViewById(R.id.address)).setText(url);
         ((TextView) pageInfoView.findViewById(R.id.title)).setText(title);
 
-        mPageInfoView = view;
+        mPageInfoView = tab;
         mPageInfoFromShowSSLCertificateOnError = new Boolean(fromShowSSLCertificateOnError);
 
         AlertDialog.Builder alertDialogBuilder =
@@ -3649,7 +3723,8 @@
 
         // if we have a main top-level page SSL certificate set or a certificate
         // error
-        if (fromShowSSLCertificateOnError || view.getCertificate() != null) {
+        if (fromShowSSLCertificateOnError || 
+                (view != null && view.getCertificate() != null)) {
             // add a 'View Certificate' button
             alertDialogBuilder.setNeutralButton(
                 R.string.view_certificate,
@@ -3671,7 +3746,7 @@
                             // otherwise, display the top-most certificate from
                             // the chain
                             if (view.getCertificate() != null) {
-                                showSSLCertificate(view);
+                                showSSLCertificate(tab);
                             }
                         }
                     }
@@ -3684,9 +3759,9 @@
        /**
      * Displays the main top-level page SSL certificate dialog
      * (accessible from the Page-Info dialog).
-     * @param view The target web-view.
+     * @param tab The tab to show certificate for.
      */
-    private void showSSLCertificate(final WebView view) {
+    private void showSSLCertificate(final TabControl.Tab tab) {
         final View certificateView =
             inflateCertificateView(mWebView.getCertificate());
         if (certificateView == null) {
@@ -3703,7 +3778,7 @@
         ((TextView)ll.findViewById(R.id.success))
             .setText(R.string.ssl_certificate_is_valid);
 
-        mSSLCertificateView = view;
+        mSSLCertificateView = tab;
         mSSLCertificateDialog =
             new AlertDialog.Builder(this)
                 .setTitle(R.string.ssl_certificate).setIcon(
@@ -3716,7 +3791,7 @@
                                 mSSLCertificateDialog = null;
                                 mSSLCertificateView = null;
 
-                                showPageInfo(view, false);
+                                showPageInfo(tab, false);
                             }
                         })
                 .setOnCancelListener(
@@ -3725,7 +3800,7 @@
                                 mSSLCertificateDialog = null;
                                 mSSLCertificateView = null;
 
-                                showPageInfo(view, false);
+                                showPageInfo(tab, false);
                             }
                         })
                 .show();
@@ -3811,7 +3886,8 @@
                                 // need to show the dialog again once the
                                 // user is done exploring the page-info details
 
-                                showPageInfo(view, true);
+                                showPageInfo(mTabControl.getTabFromView(view), 
+                                        true);
                             }
                         })
                 .setOnCancelListener(
@@ -4016,6 +4092,7 @@
                         .show();
             }
         }
+        mTabControl.getCurrentWebView().setNetworkAvailable(up);
     }
 
     @Override
@@ -4030,14 +4107,19 @@
                     if (extras != null && extras.getBoolean("new_window", false)) {
                         openTab(data);
                     } else {
+                        final TabControl.Tab currentTab =
+                                mTabControl.getCurrentTab();
                         // If the Window overview is up and we are not in the
                         // middle of an animation, animate away from it to the
                         // current tab.
                         if (mTabOverview != null && mAnimationCount == 0) {
-                            sendAnimateFromOverview(mTabControl.getCurrentTab(),
-                                    false, data, TAB_OVERVIEW_DELAY, null);
+                            sendAnimateFromOverview(currentTab, false, data,
+                                    TAB_OVERVIEW_DELAY, null);
                         } else {
-                            loadURL(data);
+                            dismissSubWindow(currentTab);
+                            if (data != null && data.length() != 0) {
+                                getTopWindow().loadUrl(data);
+                            }
                         }
                     }
                 }
@@ -4053,7 +4135,7 @@
      * menu to see the download window, or when a download changes state. It
      * shows the download window ontop of the current window.
      */
-    private void viewDownloads(Uri downloadRecord) {
+    /* package */ void viewDownloads(Uri downloadRecord) {
         Intent intent = new Intent(this,
                 BrowserDownloadPage.class);
         intent.setData(downloadRecord);
@@ -4071,30 +4153,41 @@
                 throw new AssertionError();
             }
 
-            mTabControl.removeTab(mTabControl.getTab(position));
+            // Remember the current tab.
+            TabControl.Tab current = mTabControl.getCurrentTab();
+            final TabControl.Tab remove = mTabControl.getTab(position);
+            mTabControl.removeTab(remove);
+            // If we removed the current tab, use the tab at position - 1 if
+            // possible.
+            if (current == remove) {
+                // If the user removes the last tab, act like the New Tab item
+                // was clicked on.
+                if (mTabControl.getTabCount() == 0) {
+                    current = mTabControl.createNewTab(false);
+                    sendAnimateFromOverview(current, true,
+                            mSettings.getHomePage(), TAB_OVERVIEW_DELAY, null);
+                } else {
+                    final int index = position > 0 ? (position - 1) : 0;
+                    current = mTabControl.getTab(index);
+                }
+            }
+
             // The tab overview could have been dismissed before this method is
             // called.
             if (mTabOverview != null) {
                 // Remove the tab and change the index.
-                mTabOverview.remove(position--);
-                mTabOverview.setCurrentIndex(position);
-            } else {
-                position--;
+                mTabOverview.remove(position);
+                mTabOverview.setCurrentIndex(mTabControl.getTabIndex(current));
             }
 
             // FIXME: This isn't really right. We don't have a current WebView
             // since we are switching between tabs and haven't selected a new
             // one. This just prevents a NPE in case the user hits home from the
             // tab switcher.
-            int index = position;
-            if (index == ImageGrid.NEW_TAB) {
-                index = 0;
-            }
-            final TabControl.Tab t = mTabControl.getTab(index);
             // Only the current tab ensures its WebView is non-null. This
             // implies that we are reloading the freed tab.
-            mTabControl.setCurrentTab(t);
-            mWebView = t.getWebView();
+            mTabControl.setCurrentTab(current);
+            mWebView = current.getWebView();
         }
         public void onClick(int index) {
             // Change the tab if necessary.
@@ -4112,13 +4205,10 @@
             // Clear all the data for tab picker so next time it will be
             // recreated.
             mTabControl.wipeAllPickerData();
-            BrowserActivity.this.getWindow().setFeatureInt(
-                    Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
-            BrowserActivity.this.mMenuState = EMPTY_MENU;
 
             // NEW_TAB means that the "New Tab" cell was clicked on.
             if (index == ImageGrid.NEW_TAB) {
-                openTabAndShow(mSettings.getHomePage(), null);
+                openTabAndShow(mSettings.getHomePage(), null, false);
             } else {
                 sendAnimateFromOverview(mTabControl.getTab(index),
                         false, null, 0, null);
@@ -4156,11 +4246,13 @@
         protected void onDraw(Canvas canvas) {
             canvas.save();
             canvas.drawColor(Color.WHITE);
-            canvas.setDrawFilter(sZoomFilter);
-            float scale = getWidth() * mScale;
-            canvas.scale(scale, scale);
-            canvas.translate(-mScrollX, -mScrollY);
-            canvas.drawPicture(mPicture);
+            if (mPicture != null) {
+                canvas.setDrawFilter(sZoomFilter);
+                float scale = getWidth() * mScale;
+                canvas.scale(scale, scale);
+                canvas.translate(-mScrollX, -mScrollY);
+                canvas.drawPicture(mPicture);
+            }
             canvas.restore();
         }
     }
@@ -4219,12 +4311,13 @@
         // set it here to prevent another request to animate from coming in
         // between now and when ANIMATE_TO_OVERVIEW is handled.
         mAnimationCount++;
-        if (stay) {
-            getWindow().setFeatureDrawable(Window.FEATURE_LEFT_ICON, null);
-            getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
-                    Window.PROGRESS_VISIBILITY_OFF);
-            setTitle(R.string.tab_picker_title);
-        }
+        // Always change the title bar to the window overview title while
+        // animating.
+        getWindow().setFeatureDrawable(Window.FEATURE_LEFT_ICON, null);
+        getWindow().setFeatureDrawable(Window.FEATURE_RIGHT_ICON, null);
+        getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
+                Window.PROGRESS_VISIBILITY_OFF);
+        setTitle(R.string.tab_picker_title);
         // Make the menu empty until the animation completes.
         mMenuState = EMPTY_MENU;
     }
@@ -4254,14 +4347,13 @@
         startActivityForResult(intent, BOOKMARKS_PAGE);
     }
 
-    // Called when loading from bookmarks or goto.
-    private void loadURL(String url) {
+    // Called when loading from context menu or LOAD_URL message
+    private void loadURL(WebView view, String url) {
         // In case the user enters nothing.
-        if (url != null && url.length() != 0) {
+        if (url != null && url.length() != 0 && view != null) {
             url = smartUrlFilter(url);
-            WebView w = getTopWindow();
-            if (!mWebViewClient.shouldOverrideUrlLoading(w, url)) {
-                w.loadUrl(url);
+            if (!mWebViewClient.shouldOverrideUrlLoading(view, url)) {
+                view.loadUrl(url);
             }
         }
     }
@@ -4316,21 +4408,23 @@
      * @return Original or modified URL
      *
      */
-    String smartUrlFilter(String inUrl) {
+    String smartUrlFilter(String url) {
 
+        String inUrl = url.trim();
         boolean hasSpace = inUrl.indexOf(' ') != -1;
 
-        if (!hasSpace) {
-            Matcher matcher = ACCEPTED_URI_SCHEMA.matcher(inUrl);
-            if (matcher.matches()) {
-                // force scheme to lowercase
-                String scheme = matcher.group(1);
-                String lcScheme = scheme.toLowerCase();
-                if (!lcScheme.equals(scheme)) {
-                    return lcScheme + matcher.group(2);
-                }
-                return inUrl;
+        Matcher matcher = ACCEPTED_URI_SCHEMA.matcher(inUrl);
+        if (matcher.matches()) {
+            if (hasSpace) {
+                inUrl = inUrl.replace(" ", "%20");
             }
+            // force scheme to lowercase
+            String scheme = matcher.group(1);
+            String lcScheme = scheme.toLowerCase();
+            if (!lcScheme.equals(scheme)) {
+                return lcScheme + matcher.group(2);
+            }
+            return inUrl;
         }
         if (hasSpace) {
             // FIXME: quick search, need to be customized by setting
@@ -4378,6 +4472,33 @@
                 QUERY_PLACE_HOLDER);
     }
 
+    /* package */void setBaseSearchUrl(String url) {
+        if (url == null || url.length() == 0) {
+            /*
+             * get the google search url based on the SIM. Default is US. NOTE:
+             * This code uses resources to optionally select the search Uri,
+             * based on the MCC value from the SIM. The default string will most
+             * likely be fine. It is parameterized to accept info from the
+             * Locale, the language code is the first parameter (%1$s) and the
+             * country code is the second (%2$s). This code must function in the
+             * same way as a similar lookup in
+             * com.android.googlesearch.SuggestionProvider#onCreate(). If you
+             * change either of these functions, change them both. (The same is
+             * true for the underlying resource strings, which are stored in
+             * mcc-specific xml files.)
+             */
+            Locale l = Locale.getDefault();
+            QuickSearch_G = getResources().getString(
+                    R.string.google_search_base, l.getLanguage(),
+                    l.getCountry().toLowerCase())
+                    + "client=ms-"
+                    + SystemProperties.get("ro.com.google.clientid", "unknown")
+                    + "&source=android-" + GOOGLE_SEARCH_SOURCE_SUGGEST + "&q=%s";
+        } else {
+            QuickSearch_G = url;
+        }
+    }
+
     private final static int LOCK_ICON_UNSECURE = 0;
     private final static int LOCK_ICON_SECURE   = 1;
     private final static int LOCK_ICON_MIXED    = 2;
@@ -4458,7 +4579,7 @@
     // As PageInfo has different style for landscape / portrait, we have
     // to re-open it when configuration changed
     private AlertDialog mPageInfoDialog;
-    private WebView mPageInfoView;
+    private TabControl.Tab mPageInfoView;
     // If the Page-Info dialog is launched from the SSL-certificate-on-error
     // dialog, we should not just dismiss it, but should get back to the
     // SSL-certificate-on-error dialog. This flag is used to store this state
@@ -4474,7 +4595,7 @@
     // as SSLCertificate has different style for landscape / portrait, we
     // have to re-open it when configuration changed
     private AlertDialog mSSLCertificateDialog;
-    private WebView mSSLCertificateView;
+    private TabControl.Tab mSSLCertificateView;
 
     // as HttpAuthentication has different style for landscape / portrait, we
     // have to re-open it when configuration changed
@@ -4487,10 +4608,7 @@
                                             ViewGroup.LayoutParams.FILL_PARENT);
     // We may provide UI to customize these
     // Google search from the browser
-    final static String QuickSearch_G =
-            "http://www.google.com/m?client=ms-"
-            + SystemProperties.get("ro.com.google.clientid", "unknown")
-            + "&source=android-chrome&q=%s";
+    static String QuickSearch_G;
     // Wikipedia search
     final static String QuickSearch_W = "http://en.wikipedia.org/w/index.php?search=%s&go=Go";
     // Dictionary search
@@ -4498,7 +4616,20 @@
     // Google Mobile Local search
     final static String QuickSearch_L = "http://www.google.com/m/search?site=local&q=%s&near=mountain+view";
 
-    private final static String QUERY_PLACE_HOLDER = "%s";
+    final static String QUERY_PLACE_HOLDER = "%s";
+
+    // "source" parameter for Google search through search key
+    final static String GOOGLE_SEARCH_SOURCE_SEARCHKEY = "browser-key";
+    // "source" parameter for Google search through search menu
+    final static String GOOGLE_SEARCH_SOURCE_SEARCHMENU = "browser-menu";
+    // "source" parameter for Google search through goto menu
+    final static String GOOGLE_SEARCH_SOURCE_GOTO = "browser-goto";
+    // "source" parameter for Google search through simplily type
+    final static String GOOGLE_SEARCH_SOURCE_TYPE = "browser-type";
+    // "source" parameter for Google search suggested by the browser
+    final static String GOOGLE_SEARCH_SOURCE_SUGGEST = "browser-suggest";
+    // "source" parameter for Google search from unknown source
+    final static String GOOGLE_SEARCH_SOURCE_UNKNOWN = "unknown";
 
     private final static String LOGTAG = "browser";
 
@@ -4516,6 +4647,13 @@
     // overlap. A count of 0 means no animation where a count of > 0 means
     // there are animations in progress.
     private int mAnimationCount;
+    
+    // As the ids are dynamically created, we can't guarantee that they will
+    // be in sequence, so this static array maps ids to a window number.
+    final static private int[] WINDOW_SHORTCUT_ID_ARRAY = 
+    { R.id.window_one_menu_id, R.id.window_two_menu_id, R.id.window_three_menu_id,
+      R.id.window_four_menu_id, R.id.window_five_menu_id, R.id.window_six_menu_id,
+      R.id.window_seven_menu_id, R.id.window_eight_menu_id };
 
     // monitor platform changes
     private IntentFilter mNetworkStateChangedFilter;
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index 3b76e75..479dc0e 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -312,8 +312,21 @@
         if (url == null || favicon == null) {
             return;
         }
-        final String[] selArgs = new String[] { url };
-        final String where = Browser.BookmarkColumns.URL + " == ? AND "
+        // Strip the query.
+        int query = url.indexOf('?');
+        String noQuery = url;
+        if (query != -1) {
+            noQuery = url.substring(0, query);
+        }
+        url = noQuery + '?';
+        // Use noQuery to search for the base url (i.e. if the url is
+        // http://www.yahoo.com/?rs=1, search for http://www.yahoo.com)
+        // Use url to match the base url with other queries (i.e. if the url is
+        // http://www.google.com/m, search for
+        // http://www.google.com/m?some_query)
+        final String[] selArgs = new String[] { noQuery, url };
+        final String where = "(" + Browser.BookmarkColumns.URL + " == ? OR "
+                + Browser.BookmarkColumns.URL + " GLOB ? || '*') AND "
                 + Browser.BookmarkColumns.BOOKMARK + " == 1";
         final String[] projection = new String[] { Browser.BookmarkColumns._ID };
         final Cursor c = cr.query(Browser.BOOKMARKS_URI, projection, where,
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index f938ff9..5c509a8 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -20,6 +20,7 @@
 import android.app.AlertDialog;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -52,6 +53,10 @@
     private AddNewBookmark          mAddHeader;
     private boolean                 mCanceled = false;
     private boolean                 mCreateShortcut;
+    // XXX: There is no public string defining this intent so if Home changes
+    // the value, we have to update this string.
+    private static final String     INSTALL_SHORTCUT =
+            "com.android.launcher.action.INSTALL_SHORTCUT";
     
     private final static String LOGTAG = "browser";
 
@@ -80,6 +85,12 @@
         case R.id.edit_context_menu_id:
             editBookmark(i.position);
             break;
+        case R.id.shortcut_context_menu_id:
+            final Intent send = createShortcutIntent(getUrl(i.position),
+                    getBookmarkTitle(i.position));
+            send.setAction(INSTALL_SHORTCUT);
+            sendBroadcast(send);
+            break;
         case R.id.delete_context_menu_id:
             displayRemoveBookmarkDialog(i.position);
             break;
@@ -191,19 +202,27 @@
                     loadUrl(position);
                 }
             } else {
-                final Intent intent = new Intent();
-                intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_VIEW,
-                        Uri.parse(getUrl(position))));
-                intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getBookmarkTitle(position));
-                intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
-                        Intent.ShortcutIconResource.fromContext(BrowserBookmarksPage.this,
-                                R.drawable.ic_launcher_browser));
+                final Intent intent = createShortcutIntent(getUrl(position),
+                        getBookmarkTitle(position));
                 setResult(RESULT_OK, intent);
                 finish();
             }
         }
     };
 
+    private Intent createShortcutIntent(String url, String title) {
+        final Intent i = new Intent();
+        i.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_VIEW,
+                    Uri.parse(url)));
+        i.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
+        i.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
+                Intent.ShortcutIconResource.fromContext(BrowserBookmarksPage.this,
+                        R.drawable.ic_launcher_browser));
+        // Do not allow duplicate items
+        i.putExtra("duplicate", false);
+        return i;
+    }
+
     private void saveCurrentPage() {
         Intent i = new Intent(BrowserBookmarksPage.this,
                 AddBookmarkPage.class);
@@ -290,7 +309,7 @@
         final int deletePos = position;
         new AlertDialog.Builder(this)
                 .setTitle(R.string.delete_bookmark)
-                .setIcon(R.drawable.ssl_icon)
+                .setIcon(android.R.drawable.ic_dialog_alert)
                 .setMessage(getText(R.string.delete_bookmark_warning).toString().replace(
                         "%s", getBookmarkTitle(deletePos)))
                 .setPositiveButton(R.string.ok, 
diff --git a/src/com/android/browser/BrowserDownloadAdapter.java b/src/com/android/browser/BrowserDownloadAdapter.java
index b3e08f5..0b509ef 100644
--- a/src/com/android/browser/BrowserDownloadAdapter.java
+++ b/src/com/android/browser/BrowserDownloadAdapter.java
@@ -20,7 +20,6 @@
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
-import android.content.Formatter;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
@@ -30,6 +29,7 @@
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.provider.Downloads;
+import android.text.format.Formatter;
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.ProgressBar;
@@ -59,7 +59,7 @@
 
     public BrowserDownloadAdapter(Context context, int layout, Cursor c) {
         super(context, layout, c);
-        mFilenameColumnId = c.getColumnIndexOrThrow(Downloads.FILENAME);
+        mFilenameColumnId = c.getColumnIndexOrThrow(Downloads._DATA);
         mTitleColumnId = c.getColumnIndexOrThrow(Downloads.TITLE);
         mDescColumnId = c.getColumnIndexOrThrow(Downloads.DESCRIPTION);
         mStatusColumnId = c.getColumnIndexOrThrow(Downloads.STATUS);
@@ -213,7 +213,7 @@
                 return R.string.download_file_error;
                 
             case Downloads.STATUS_BAD_REQUEST:
-            case Downloads.STATUS_ERROR:
+            case Downloads.STATUS_UNKNOWN_ERROR:
             default:
                 return R.string.download_error;
         }
diff --git a/src/com/android/browser/BrowserDownloadPage.java b/src/com/android/browser/BrowserDownloadPage.java
index e2b11a6..4397337 100644
--- a/src/com/android/browser/BrowserDownloadPage.java
+++ b/src/com/android/browser/BrowserDownloadPage.java
@@ -75,7 +75,7 @@
         mDownloadCursor = managedQuery(Downloads.CONTENT_URI, 
                 new String [] {"_id", Downloads.TITLE, Downloads.STATUS,
                 Downloads.TOTAL_BYTES, Downloads.CURRENT_BYTES, 
-                Downloads.FILENAME, Downloads.DESCRIPTION, 
+                Downloads._DATA, Downloads.DESCRIPTION, 
                 Downloads.MIMETYPE, Downloads.LAST_MODIFICATION,
                 Downloads.VISIBILITY}, 
                 null, null);
@@ -170,6 +170,7 @@
                     (AdapterView.AdapterContextMenuInfo) menuInfo;
             mDownloadCursor.moveToPosition(info.position);
             mContextMenuPosition = info.position;
+            menu.setHeaderTitle(mDownloadCursor.getString(mTitleColumnId));
             
             MenuInflater inflater = getMenuInflater();
             int status = mDownloadCursor.getInt(mStatusColumnId);
@@ -242,10 +243,7 @@
      * @param id Row id of the download to resume
      */
     private void resumeDownload(final long id) {
-        Uri record = ContentUris.withAppendedId(Downloads.CONTENT_URI, id);
-        ContentValues values = new ContentValues();
-        values.put(Downloads.CONTROL, Downloads.CONTROL_RUN);
-        getContentResolver().update(record, values, null, null);
+        // the relevant functionality doesn't exist in the download manager
     }
     
     /**
@@ -327,7 +325,7 @@
      */
     private void cancelAllDownloads() {
         if (mDownloadCursor.moveToFirst()) {
-            StringBuffer where = new StringBuffer();
+            StringBuilder where = new StringBuilder();
             boolean firstTime = true;
             while (!mDownloadCursor.isAfterLast()) {
                 int status = mDownloadCursor.getInt(mStatusColumnId);
@@ -339,9 +337,9 @@
                     }
                     where.append("( ");
                     where.append(Downloads._ID);
-                    where.append(" = ");
+                    where.append(" = '");
                     where.append(mDownloadCursor.getLong(mIdColumnId));
-                    where.append(" )");
+                    where.append("' )");
                 }
                 mDownloadCursor.moveToNext();
             }
@@ -372,7 +370,7 @@
      */
     private void clearAllDownloads() {
         if (mDownloadCursor.moveToFirst()) {
-            StringBuffer where = new StringBuffer();
+            StringBuilder where = new StringBuilder();
             boolean firstTime = true;
             while (!mDownloadCursor.isAfterLast()) {
                 int status = mDownloadCursor.getInt(mStatusColumnId);
@@ -384,9 +382,9 @@
                     }
                     where.append("( ");
                     where.append(Downloads._ID);
-                    where.append(" = ");
+                    where.append(" = '");
                     where.append(mDownloadCursor.getLong(mIdColumnId));
-                    where.append(" )");
+                    where.append("' )");
                 }
                 mDownloadCursor.moveToNext();
             }
@@ -402,7 +400,7 @@
      */
     private void openCurrentDownload() {
         int filenameColumnId = 
-                mDownloadCursor.getColumnIndexOrThrow(Downloads.FILENAME);
+                mDownloadCursor.getColumnIndexOrThrow(Downloads._DATA);
         String filename = mDownloadCursor.getString(filenameColumnId);
         int mimetypeColumnId =
                 mDownloadCursor.getColumnIndexOrThrow(Downloads.MIMETYPE);
diff --git a/src/com/android/browser/BrowserHomepagePreference.java b/src/com/android/browser/BrowserHomepagePreference.java
new file mode 100644
index 0000000..bc21143
--- /dev/null
+++ b/src/com/android/browser/BrowserHomepagePreference.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.preference.EditTextPreference;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.text.util.Regex;
+import android.util.AttributeSet;
+
+public class BrowserHomepagePreference extends EditTextPreference implements
+        TextWatcher {
+
+    public BrowserHomepagePreference(Context context, AttributeSet attrs,
+            int defStyle) {
+        super(context, attrs, defStyle);
+        getEditText().addTextChangedListener(this);
+    }
+
+    public BrowserHomepagePreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        getEditText().addTextChangedListener(this);
+    }
+
+    public BrowserHomepagePreference(Context context) {
+        super(context);
+        getEditText().addTextChangedListener(this);
+    }
+
+    public void afterTextChanged(Editable s) {
+        AlertDialog dialog = (AlertDialog) getDialog();
+        // This callback is called before the dialog has been fully constructed
+        if (dialog != null) {
+            dialog.getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(
+                    Regex.WEB_URL_PATTERN.matcher(s.toString()).matches());
+        }
+    }
+
+    public void beforeTextChanged(CharSequence s, int start, int count,
+            int after) {
+    }
+
+    public void onTextChanged(CharSequence s, int start, int before, int count) {
+    }
+}
diff --git a/src/com/android/browser/BrowserPreferencesPage.java b/src/com/android/browser/BrowserPreferencesPage.java
index b8bc495..b23f750 100644
--- a/src/com/android/browser/BrowserPreferencesPage.java
+++ b/src/com/android/browser/BrowserPreferencesPage.java
@@ -51,6 +51,9 @@
                 getPreferenceScreen().getSharedPreferences()
                 .getString(BrowserSettings.PREF_TEXT_SIZE, null)) );
         
+        e = findPreference(BrowserSettings.PREF_DEFAULT_TEXT_ENCODING);
+        e.setOnPreferenceChangeListener(this);
+        
         if (BrowserSettings.getInstance().showDebugSettings()) {
             addPreferencesFromResource(R.xml.debug_preferences);
         }
@@ -76,30 +79,36 @@
             }
         } else if (pref.getKey().equals(BrowserSettings.PREF_HOMEPAGE)) {
             String value = (String) objValue;
-            
-            if (value.length() > 0) {
-                Uri path = Uri.parse(value);
-                if (path.getScheme() == null) {
-                    value = "http://"+value;
-                    
-                    pref.setSummary(value);
-                    
-                    // Update through the EditText control as it has a cached copy
-                    // of the string and it will handle persisting the value
-                    ((EditTextPreference)(pref)).setText(value);
-                    
-                    // as we update the value above, we need to return false
-                    // here so that setText() is not called by EditTextPref 
-                    // with the old value.
-                    return false;
-                }
+            boolean needUpdate = value.indexOf(' ') != -1;
+            if (needUpdate) {
+                value = value.trim().replace(" ", "%20");
             }
-            
+            Uri path = Uri.parse(value);
+            if (path.getScheme() == null) {
+                value = "http://" + value;
+                needUpdate = true;
+            }
+            // Set the summary value.
             pref.setSummary(value);
-            return true;
+            if (needUpdate) {
+                // Update through the EditText control as it has a cached copy
+                // of the string and it will handle persisting the value
+                ((EditTextPreference) pref).setText(value);
+
+                // as we update the value above, we need to return false
+                // here so that setText() is not called by EditTextPref
+                // with the old value.
+                return false;
+            } else {
+                return true;
+            }
         } else if (pref.getKey().equals(BrowserSettings.PREF_TEXT_SIZE)) {
             pref.setSummary(getVisualTextSizeName((String) objValue));
             return true;
+        } else if (pref.getKey().equals(
+                BrowserSettings.PREF_DEFAULT_TEXT_ENCODING)) {
+            pref.setSummary((String) objValue);
+            return true;
         }
         
         return false;
diff --git a/src/com/android/browser/BrowserProvider.java b/src/com/android/browser/BrowserProvider.java
index 4f456e7..7aa5bb2 100644
--- a/src/com/android/browser/BrowserProvider.java
+++ b/src/com/android/browser/BrowserProvider.java
@@ -30,6 +30,7 @@
 import android.database.sqlite.SQLiteOpenHelper;
 import android.database.sqlite.SQLiteDatabase;
 import android.net.Uri;
+import android.os.SystemProperties;
 import android.provider.Browser;
 import android.util.Log;
 import android.text.util.Regex;
@@ -101,6 +102,45 @@
 
     public BrowserProvider() {
     }
+  
+
+    private static CharSequence replaceSystemPropertyInString(CharSequence srcString) {
+        StringBuffer sb = new StringBuffer();
+        int lastCharLoc = 0;
+        for (int i = 0; i < srcString.length(); ++i) {
+            char c = srcString.charAt(i);
+            if (c == '{') {
+                sb.append(srcString.subSequence(lastCharLoc, i));
+                lastCharLoc = i;
+          inner:
+                for (int j = i; j < srcString.length(); ++j) {
+                    char k = srcString.charAt(j);
+                    if (k == '}') {
+                        String propertyKeyValue = srcString.subSequence(i + 1, j).toString();
+                        // See if the propertyKeyValue specifies a default value
+                        int defaultOffset = propertyKeyValue.indexOf(':');
+                        if (defaultOffset == -1) {
+                            sb.append(SystemProperties.get(propertyKeyValue));
+                        } else {
+                            String propertyKey = propertyKeyValue.substring(0, defaultOffset);
+                            String defaultValue = 
+                                    propertyKeyValue.substring(defaultOffset + 1, 
+                                                               propertyKeyValue.length());
+                            sb.append(SystemProperties.get(propertyKey, defaultValue));
+                        }
+                        lastCharLoc = j + 1;
+                        i = j;
+                        break inner;
+                    }
+                }
+            }
+        }
+        if (srcString.length() - lastCharLoc > 0) {
+            // Put on the tail, if there is one
+            sb.append(srcString.subSequence(lastCharLoc, srcString.length()));
+        }
+        return sb;
+    }
 
     private static class DatabaseHelper extends SQLiteOpenHelper {
         private Context mContext;
@@ -129,9 +169,10 @@
             int size = bookmarks.length;
             try {
                 for (int i = 0; i < size; i = i + 2) {
+                    CharSequence bookmarkDestination = replaceSystemPropertyInString(bookmarks[i + 1]);
                     db.execSQL("INSERT INTO bookmarks (title, url, visits, " +
                             "date, created, bookmark)" + " VALUES('" +
-                            bookmarks[i] + "', '" + bookmarks[i + 1] + 
+                            bookmarks[i] + "', '" + bookmarkDestination + 
                             "', 0, 0, 0, 1);");
                 }
             } catch (ArrayIndexOutOfBoundsException e) {
@@ -401,12 +442,18 @@
                 myArgs = null;
             } else {
                 String like = selectionArgs[0] + "%";
-                SUGGEST_ARGS[0] = "http://" + like;
-                SUGGEST_ARGS[1] = "http://www." + like;
-                SUGGEST_ARGS[2] = "https://" + like;
-                SUGGEST_ARGS[3] = "https://www." + like;
-                myArgs = SUGGEST_ARGS;
-                suggestSelection = SUGGEST_SELECTION;
+                if (selectionArgs[0].startsWith("http")) {
+                    myArgs = new String[1];
+                    myArgs[0] = like;
+                    suggestSelection = selection;
+                } else {
+                    SUGGEST_ARGS[0] = "http://" + like;
+                    SUGGEST_ARGS[1] = "http://www." + like;
+                    SUGGEST_ARGS[2] = "https://" + like;
+                    SUGGEST_ARGS[3] = "https://www." + like;
+                    myArgs = SUGGEST_ARGS;
+                    suggestSelection = SUGGEST_SELECTION;
+                }
             }
             // Suggestions are always performed with the default sort order:
             // date ASC.
diff --git a/src/com/android/browser/BrowserSearchpagePreference.java b/src/com/android/browser/BrowserSearchpagePreference.java
new file mode 100644
index 0000000..09e8993
--- /dev/null
+++ b/src/com/android/browser/BrowserSearchpagePreference.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.preference.EditTextPreference;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.text.util.Regex;
+import android.util.AttributeSet;
+
+public class BrowserSearchpagePreference extends EditTextPreference implements
+        TextWatcher {
+
+    public BrowserSearchpagePreference(Context context, AttributeSet attrs,
+            int defStyle) {
+        super(context, attrs, defStyle);
+        getEditText().addTextChangedListener(this);
+    }
+
+    public BrowserSearchpagePreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        getEditText().addTextChangedListener(this);
+    }
+
+    public BrowserSearchpagePreference(Context context) {
+        super(context);
+        getEditText().addTextChangedListener(this);
+    }
+
+    public void afterTextChanged(Editable s) {
+        AlertDialog dialog = (AlertDialog) getDialog();
+        // This callback is called before the dialog has been fully constructed
+        if (dialog != null) {
+            String string = s.toString();
+            int length = string.length();
+            int first = length > 0 ? string
+                    .indexOf(BrowserActivity.QUERY_PLACE_HOLDER) : -1;
+            int last = length > 0 ? string
+                    .lastIndexOf(BrowserActivity.QUERY_PLACE_HOLDER) : -1;
+            dialog.getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(
+                    length == 0 || (first > 0 && first == last));
+        }
+    }
+
+    public void beforeTextChanged(CharSequence s, int start, int count,
+            int after) {
+    }
+
+    public void onTextChanged(CharSequence s, int start, int before, int count) {
+    }
+}
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index b19c02e..6164e38 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -22,6 +22,7 @@
 import android.content.pm.ActivityInfo;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
+import android.os.SystemProperties;
 import android.view.WindowManager;
 import android.webkit.CacheManager;
 import android.webkit.CookieManager;
@@ -63,7 +64,8 @@
     private boolean saveFormData = true;
     private boolean openInBackground = false;
     private String defaultTextEncodingName;
-    private String homeUrl = "http://www.google.com/m";
+    private String homeUrl = "http://www.google.com/m?client=ms-" + 
+        SystemProperties.get("ro.com.google.clientid", "unknown");
     private boolean loginInitialized = false;
     private int orientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
     private boolean autoFitPage = true;
@@ -102,7 +104,17 @@
     public final static String PREF_DEBUG_SETTINGS = "debug_menu";
     public final static String PREF_GEARS_SETTINGS = "gears_settings";
     public final static String PREF_TEXT_SIZE = "text_size";
-    
+    public final static String PREF_DEFAULT_TEXT_ENCODING =
+            "default_text_encoding";
+
+    private static final String DESKTOP_USERAGENT = "Mozilla/5.0 (Macintosh; " +
+            "U; Intel Mac OS X 10_5_5; en-us) AppleWebKit/525.18 (KHTML, " +
+            "like Gecko) Version/3.1.2 Safari/525.20.1";
+
+    private static final String IPHONE_USERAGENT = "Mozilla/5.0 (iPhone; U; " +
+            "CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit/525.18.1 " +
+            "(KHTML, like Gecko) Version/3.1.1 Mobile/5G77 Safari/525.20";
+
     // Value to truncate strings when adding them to a TextView within
     // a ListView
     public final static int MAX_TEXTVIEW_LEN = 80;
@@ -134,7 +146,14 @@
             WebSettings s = mSettings;
 
             s.setLayoutAlgorithm(b.layoutAlgorithm);
-            s.setUserAgent(b.userAgent);
+            if (b.userAgent == 0) {
+                // use the default ua string
+                s.setUserAgentString(null);
+            } else if (b.userAgent == 1) {
+                s.setUserAgentString(DESKTOP_USERAGENT);
+            } else if (b.userAgent == 2) {
+                s.setUserAgentString(IPHONE_USERAGENT);
+            }
             s.setUseWideViewPort(b.useWideViewPort);
             s.setLoadsImagesAutomatically(b.loadsImagesAutomatically);
             s.setJavaScriptEnabled(b.javaScriptEnabled);
@@ -157,6 +176,8 @@
             s.setNeedInitialFocus(false);
             // Browser supports multiple windows
             s.setSupportMultipleWindows(true);
+            // Turn off file access
+            s.setAllowFileAccess(false);
         }
     }
    
@@ -218,6 +239,9 @@
         } else {
             layoutAlgorithm = WebSettings.LayoutAlgorithm.NORMAL;
         }
+        defaultTextEncodingName =
+                p.getString(PREF_DEFAULT_TEXT_ENCODING,
+                        defaultTextEncodingName);
         
         showDebugSettings = 
                 p.getBoolean(PREF_DEBUG_SETTINGS, showDebugSettings);
@@ -244,6 +268,8 @@
             navDump = p.getBoolean("enable_nav_dump", navDump);
             doFlick = p.getBoolean("enable_flick", doFlick);
             userAgent = Integer.parseInt(p.getString("user_agent", "0"));
+            mTabControl.getBrowserActivity().setBaseSearchUrl(
+                    p.getString("search_url", ""));
         }
         update();
     }
@@ -398,10 +424,6 @@
         ContentResolver resolver = context.getContentResolver();
         Browser.clearHistory(resolver);
         Browser.clearSearches(resolver);
-        // Delete back-forward list
-        if (mTabControl != null) {
-            mTabControl.clearHistory();
-        }
     }
 
     /* package */ void clearFormData(Context context) {
diff --git a/src/com/android/browser/FakeWebView.java b/src/com/android/browser/FakeWebView.java
index 200f86a..7997672 100644
--- a/src/com/android/browser/FakeWebView.java
+++ b/src/com/android/browser/FakeWebView.java
@@ -70,12 +70,14 @@
                 final WebView w = mTab.getTopWindow();
                 if (w != null) {
                     Picture p = w.capturePicture();
-                    canvas.save();
-                    float scale = getWidth() * w.getScale() / w.getWidth();
-                    canvas.scale(scale, scale);
-                    canvas.translate(-w.getScrollX(), -w.getScrollY());
-                    canvas.drawPicture(p);
-                    canvas.restore();
+                    if (p != null) {
+                        canvas.save();
+                        float scale = getWidth() * w.getScale() / w.getWidth();
+                        canvas.scale(scale, scale);
+                        canvas.translate(-w.getScrollX(), -w.getScrollY());
+                        canvas.drawPicture(p);
+                        canvas.restore();
+                    }
                 }
             }
         }
diff --git a/src/com/android/browser/FetchUrlMimeType.java b/src/com/android/browser/FetchUrlMimeType.java
new file mode 100644
index 0000000..8578643
--- /dev/null
+++ b/src/com/android/browser/FetchUrlMimeType.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.content.ContentValues;
+import android.net.Uri;
+import android.net.http.AndroidHttpClient;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.Header;
+import org.apache.http.client.methods.HttpHead;
+
+import java.io.IOException;
+
+import android.os.AsyncTask;
+import android.provider.Downloads;
+import android.webkit.MimeTypeMap;
+import android.webkit.URLUtil;
+
+/**
+ * This class is used to pull down the http headers of a given URL so that
+ * we can analyse the mimetype and make any correction needed before we give
+ * the URL to the download manager. The ContentValues class holds the
+ * content that would be provided to the download manager, so that on
+ * completion of checking the mimetype, we can issue the download to
+ * the download manager.
+ * This operation is needed when the user long-clicks on a link or image and
+ * we don't know the mimetype. If the user just clicks on the link, we will
+ * do the same steps of correcting the mimetype down in
+ * android.os.webkit.LoadListener rather than handling it here.
+ *
+ */
+class FetchUrlMimeType extends AsyncTask<ContentValues, String, String> {
+
+    BrowserActivity mActivity;
+    ContentValues mValues;
+
+    public FetchUrlMimeType(BrowserActivity activity) {
+        mActivity = activity;
+    }
+
+    @Override
+    public String doInBackground(ContentValues... values) {
+        mValues = values[0];
+
+        // Check to make sure we have a URI to download
+        String uri = mValues.getAsString(Downloads.URI);
+        if (uri == null || uri.length() == 0) {
+            return null;
+        }
+
+        // User agent is likely to be null, though the AndroidHttpClient
+        // seems ok with that.
+        AndroidHttpClient client = AndroidHttpClient.newInstance(
+                mValues.getAsString(Downloads.USER_AGENT));
+        HttpHead request = new HttpHead(uri);
+
+        String cookie = mValues.getAsString(Downloads.COOKIE_DATA);
+        if (cookie != null && cookie.length() > 0) {
+            request.addHeader("Cookie", cookie);
+        }
+
+        String referer = mValues.getAsString(Downloads.REFERER);
+        if (referer != null && referer.length() > 0) {
+            request.addHeader("Referer", referer);
+        }
+
+        HttpResponse response;
+        Boolean succeeded = true;
+        String mimeType = null;
+        try {
+            response = client.execute(request);
+            // We could get a redirect here, but if we do lets let
+            // the download manager take care of it, and thus trust that
+            // the server sends the right mimetype
+            if (response.getStatusLine().getStatusCode() == 200) {
+                Header header = response.getFirstHeader("Content-Type");
+                if (header != null) {
+                    mimeType = header.getValue();
+                    final int semicolonIndex = mimeType.indexOf(';');
+                    if (semicolonIndex != -1) {
+                        mimeType = mimeType.substring(0, semicolonIndex);
+                    }
+                }
+            }
+        } catch (IllegalArgumentException ex) {
+            request.abort();
+        } catch (IOException ex) {
+            request.abort();
+        } finally {
+            client.close();
+        }
+
+        return mimeType;
+    }
+
+   @Override
+    public void onPostExecute(String mimeType) {
+       if (mimeType != null) {
+           String url = mValues.getAsString(Downloads.URI);
+           if (mimeType.equalsIgnoreCase("text/plain") ||
+                   mimeType.equalsIgnoreCase("application/octet-stream")) {
+               String newMimeType =
+                       MimeTypeMap.getSingleton().getMimeTypeFromExtension(
+                           MimeTypeMap.getFileExtensionFromUrl(url));
+               if (newMimeType != null) {
+                   mValues.put(Downloads.MIMETYPE, newMimeType);
+               }
+           }
+           String filename = URLUtil.guessFileName(url,
+                   null, mimeType);
+           mValues.put(Downloads.FILENAME_HINT, filename);
+       }
+
+       // Start the download
+       final Uri contentUri =
+           mActivity.getContentResolver().insert(Downloads.CONTENT_URI, mValues);
+       mActivity.viewDownloads(contentUri);
+    }
+
+}
diff --git a/src/com/android/browser/FindDialog.java b/src/com/android/browser/FindDialog.java
index 42447e3..2b26784 100644
--- a/src/com/android/browser/FindDialog.java
+++ b/src/com/android/browser/FindDialog.java
@@ -16,22 +16,24 @@
 
 package com.android.browser;
 
+import android.app.Dialog;
+import android.content.res.Configuration;
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.text.Editable;
 import android.text.Spannable;
 import android.text.TextWatcher;
+import android.view.Gravity;
 import android.view.KeyEvent;
-import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.LayoutInflater;
+import android.view.Window;
 import android.webkit.WebView;
 import android.widget.EditText;
-import android.widget.LinearLayout;
 import android.widget.TextView;
 
-/* package */ class FindDialog extends LinearLayout implements TextWatcher {
+/* package */ class FindDialog extends Dialog implements TextWatcher {
     private WebView         mWebView;
     private TextView        mMatches;
     private BrowserActivity mBrowserActivity;
@@ -41,10 +43,7 @@
     private EditText        mEditText;
     private View            mNextButton;
     private View            mPrevButton;
-
-    // Tags for messages to be sent to the handler.
-    private final static int FIND_RESPONSE  = 0;
-    private final static int NUM_FOUND      = 1;
+    private View            mMatchesView;
 
     private View.OnClickListener mFindListener = new View.OnClickListener() {
         public void onClick(View v) {
@@ -65,26 +64,7 @@
             if (mWebView == null) {
                 throw new AssertionError("No WebView for FindDialog::onClick");
             }
-            // Find is disabled for version 1.0, so find methods on WebView are
-            // currently private.
-            //mWebView.findPrevious(mEditText.getText().toString(),
-            //        mFindHandler.obtainMessage(FIND_RESPONSE));
-        }
-    };
-    
-    private Handler mFindHandler = new Handler() {
-        public void handleMessage(Message msg) {
-            if (NUM_FOUND == msg.what) {
-                mMatches.setText(Integer.toString(msg.arg1));
-                if (0 == msg.arg1) {
-                    disableButtons();
-                } else {
-                    mPrevButton.setFocusable(true);
-                    mNextButton.setFocusable(true);
-                    mPrevButton.setEnabled(true);
-                    mNextButton.setEnabled(true);
-                }
-            }
+            mWebView.findNext(false);
         }
     };
     
@@ -95,20 +75,35 @@
         mNextButton.setFocusable(false);
     }
 
-    public void setWebView(WebView webview) {
+    /* package */ void setWebView(WebView webview) {
         mWebView = webview;
     }
 
     /* package */ FindDialog(BrowserActivity context) {
-        super(context);
+        super(context, R.style.FindDialogTheme);
         mBrowserActivity = context;
-        LayoutInflater factory = LayoutInflater.from(context);
-        factory.inflate(R.layout.browser_find, this);
-        
-        setLayoutParams(new ViewGroup.LayoutParams(
-                ViewGroup.LayoutParams.FILL_PARENT,
-                ViewGroup.LayoutParams.WRAP_CONTENT));
-        
+        setCanceledOnTouchOutside(true);
+    }
+
+    /* package */ void onConfigurationChanged(Configuration newConfig) {
+        // FIXME: Would like to call mWebView.findAll again, so that the
+        // matches would refresh, but the new picture has not yet been
+        // created, so it is too soon.
+        mEditText.getText().clear();
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        Window theWindow = getWindow();
+        theWindow.setGravity(Gravity.BOTTOM|Gravity.FILL_HORIZONTAL);
+
+        setContentView(R.layout.browser_find);
+
+        theWindow.setLayout(ViewGroup.LayoutParams.FILL_PARENT,
+                ViewGroup.LayoutParams.WRAP_CONTENT);
+
         mEditText = (EditText) findViewById(R.id.edit);
         
         View button = findViewById(R.id.next);
@@ -124,47 +119,21 @@
         mOk = button;
         
         mMatches = (TextView) findViewById(R.id.matches);
+        mMatchesView = findViewById(R.id.matches_view);
         disableButtons();
     }
     
     public void dismiss() {
+        super.dismiss();
         mBrowserActivity.closeFind();
-        // If the nav buttons are highlighted, then there are matches
-        // highlighted in the WebView, and they should be cleared.
-        if (mPrevButton.isEnabled()) {
-            // Find is disabled for version 1.0, so find methods on WebView are
-            // currently private.
-            //mWebView.clearMatches();
-        }
+        mWebView.clearMatches();
     }
     
     @Override
     public boolean dispatchKeyEvent(KeyEvent event) {
-        // Make up and down find previous/next
         int code = event.getKeyCode();
         boolean up = event.getAction() == KeyEvent.ACTION_UP;
         switch (code) {
-            case KeyEvent.KEYCODE_BACK:
-                if (up) {
-                    dismiss();
-                }
-                return true;
-            case KeyEvent.KEYCODE_DPAD_UP:
-                if (event.getMetaState() != 0) {
-                    break;
-                }
-                if (up) {
-                    mFindPreviousListener.onClick(null);
-                }
-                return true;
-            case KeyEvent.KEYCODE_DPAD_DOWN:
-                if (event.getMetaState() != 0) {
-                    break;
-                }
-                if (up) {
-                    mFindListener.onClick(null);
-                }
-                return true;
             case KeyEvent.KEYCODE_DPAD_CENTER:
             case KeyEvent.KEYCODE_ENTER:
                 if (!mEditText.hasFocus()) {
@@ -179,26 +148,16 @@
         }
         return super.dispatchKeyEvent(event);
     }
-    
-    @Override
-    public boolean dispatchTouchEvent(MotionEvent ev) {
-        super.dispatchTouchEvent(ev);
-        // Return true so that BrowserActivity thinks we handled it and does
-        // not dismiss us.
-        return true;
-    }
 
     private void findNext() {
         if (mWebView == null) {
             throw new AssertionError("No WebView for FindDialog::findNext");
         }
-        // Find is disabled for version 1.0, so find methods on WebView are
-        // currently private.
-        //mWebView.findNext(mEditText.getText().toString(),
-        //        mFindHandler.obtainMessage(FIND_RESPONSE));
+        mWebView.findNext(true);
     }
     
     public void show() {
+        super.show();
         mEditText.requestFocus();
         mEditText.setText("");
         Spannable span = (Spannable) mEditText.getText();
@@ -219,22 +178,30 @@
                               int start, 
                               int before, 
                               int count) {
+        if (mWebView == null) {
+            throw new AssertionError(
+                    "No WebView for FindDialog::onTextChanged");
+        }
         CharSequence find = mEditText.getText();
         if (0 == find.length()) {
             disableButtons();
-            // Find is disabled for version 1.0, so find methods on WebView are
-            // currently private.
-            //mWebView.clearMatches();
-            mMatches.setText(R.string.zero);
+            mWebView.clearMatches();
+            mMatchesView.setVisibility(View.INVISIBLE);
         } else {
-            if (mWebView == null) {
-                throw new AssertionError(
-                        "No WebView for FindDialog::onTextChanged");
+            mMatchesView.setVisibility(View.VISIBLE);
+            int found = mWebView.findAll(find.toString());
+            mMatches.setText(Integer.toString(found));
+            if (found < 2) {
+                disableButtons();
+                if (found == 0) {
+                    mMatches.setText(R.string.zero);
+                }
+            } else {
+                mPrevButton.setFocusable(true);
+                mNextButton.setFocusable(true);
+                mPrevButton.setEnabled(true);
+                mNextButton.setEnabled(true);
             }
-            // Find is disabled for version 1.0, so find methods on WebView are
-            // currently private.
-            //mWebView.findAll(find.toString(),
-            //        mFindHandler.obtainMessage(NUM_FOUND));
         }
     }
 
diff --git a/src/com/android/browser/GearsBaseDialog.java b/src/com/android/browser/GearsBaseDialog.java
new file mode 100644
index 0000000..c930dc8
--- /dev/null
+++ b/src/com/android/browser/GearsBaseDialog.java
@@ -0,0 +1,336 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.Handler;
+import android.util.Log;
+import android.view.InflateException;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.lang.ClassCastException;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * Base dialog class for gears
+ */
+class GearsBaseDialog {
+
+  private static final String TAG = "GearsNativeDialog";
+  protected Handler mHandler;
+  protected Activity mActivity;
+  protected String mDialogArguments;
+
+  private Bitmap mIcon;
+  private final int MAX_ICON_SIZE = 64;
+  protected int mChoosenIconSize;
+
+  // Dialog closing types
+  public static final int CANCEL = 0;
+  public static final int ALWAYS_DENY = 1;
+  public static final int ALLOW = 2;
+  public static final int DENY = 3;
+  public static final int NEW_ICON = 4;
+  public static final int UPDATE_ICON = 5;
+  public static final int REQUEST_ICON = 6;
+  public static final int PAUSE_REQUEST_ICON = 7;
+
+  protected final String LOCAL_DATA_STRING = "localData";
+  protected final String LOCAL_STORAGE_STRING = "localStorage";
+  protected final String LOCATION_DATA_STRING = "locationData";
+
+  protected String mGearsVersion = "UNDEFINED";
+  protected boolean mDebug = false;
+
+  public GearsBaseDialog(Activity activity, Handler handler, String arguments) {
+    mActivity = activity;
+    mHandler = handler;
+    mDialogArguments = arguments;
+  }
+
+  Resources getResources() {
+    return mActivity.getResources();
+  }
+
+  Object getSystemService(String name) {
+    return mActivity.getSystemService(name);
+  }
+
+  View findViewById(int id) {
+    return mActivity.findViewById(id);
+  }
+
+  private String getString(int id) {
+    return mActivity.getString(id);
+  }
+
+  public void setDebug(boolean debug) {
+    mDebug = debug;
+  }
+
+  public void setGearsVersion(String version) {
+    mGearsVersion = version;
+  }
+
+  public String closeDialog(int closingType) {
+    return null;
+  }
+
+  /*
+   * Utility methods for setting up the dialogs elements
+   */
+
+  /**
+   * Inflate a given layout in a view (which has to be
+   * a ViewGroup, e.g. LinearLayout).
+   * This is used to share the basic dialog outline among
+   * the different dialog types.
+   */
+  void inflate(int layout, int viewID) {
+    LayoutInflater inflater = (LayoutInflater) getSystemService(
+        Context.LAYOUT_INFLATER_SERVICE);
+    View view = findViewById(viewID);
+    if (view != null) {
+      try {
+        ViewGroup viewGroup = (ViewGroup) view;
+        inflater.inflate(layout, viewGroup);
+      } catch (ClassCastException e) {
+        String msg = "exception, the view (" + view + ")";
+        msg += " is not a ViewGroup";
+        Log.e(TAG, msg, e);
+      } catch (InflateException e) {
+        Log.e(TAG, "exception while inflating the layout", e);
+      }
+    } else {
+      String msg = "problem, trying to inflate a non-existent view";
+      msg += " (" + viewID + ")";
+      Log.e(TAG, msg);
+    }
+  }
+
+  /**
+   * Button setup.
+   * Set the button's text and its listener. If the text resource's id
+   * is 0, makes the button invisible.
+   */
+  void setupButton(int buttonRscID,
+                   int rscString,
+                   View.OnClickListener listener) {
+    View view = findViewById(buttonRscID);
+    if (view == null) {
+      return;
+    }
+    Button button = (Button) view;
+
+    if (rscString == 0) {
+      button.setVisibility(View.GONE);
+    } else {
+      CharSequence text = getString(rscString);
+      button.setText(text);
+      button.setOnClickListener(listener);
+    }
+  }
+
+  /**
+   * Utility method to setup the three dialog buttons.
+   */
+  void setupButtons(int alwaysDenyRsc, int allowRsc, int denyRsc) {
+    setupButton(R.id.button_alwaysdeny, alwaysDenyRsc,
+                new Button.OnClickListener() {
+                  public void onClick(View v) {
+                    mHandler.sendEmptyMessage(ALWAYS_DENY);
+                  }
+                });
+
+    setupButton(R.id.button_allow, allowRsc,
+                new Button.OnClickListener() {
+                  public void onClick(View v) {
+                    mHandler.sendEmptyMessage(ALLOW);
+                  }
+                });
+
+    setupButton(R.id.button_deny, denyRsc,
+                new Button.OnClickListener() {
+                  public void onClick(View v) {
+                    mHandler.sendEmptyMessage(DENY);
+                  }
+                });
+  }
+
+  /**
+   * Utility method to set elements' text indicated in
+   * the dialogs' arguments.
+   */
+  void setLabel(JSONObject json, String name, int rsc) {
+    try {
+      if (json.has(name)) {
+        String text = json.getString(name);
+        View view = findViewById(rsc);
+        if (view != null && text != null) {
+          TextView textView = (TextView) view;
+          textView.setText(text);
+          textView.setVisibility(View.VISIBLE);
+        }
+      }
+    } catch (JSONException e) {
+      Log.e(TAG, "json exception", e);
+    }
+  }
+
+  /**
+   * Utility class to download an icon in the background.
+   * Once done ask the UI thread to update the icon.
+   */
+  class IconDownload implements Runnable {
+    private String mUrlString;
+
+    IconDownload(String url) {
+      mUrlString = url;
+    }
+
+    public void run() {
+      if (mUrlString == null) {
+        return;
+      }
+      try {
+        URL url = new URL(mUrlString);
+        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+        connection.setDoInput(true);
+        connection.connect();
+        int length = connection.getContentLength();
+        InputStream is = connection.getInputStream();
+        Bitmap customIcon = BitmapFactory.decodeStream(is);
+        if (customIcon != null) {
+          mIcon = customIcon;
+          mHandler.sendEmptyMessage(UPDATE_ICON);
+        }
+      } catch (ClassCastException e) {
+        Log.e(TAG, "Class cast exception (" + mUrlString + ")", e);
+      } catch (MalformedURLException e) {
+        Log.e(TAG, "Malformed url (" + mUrlString + ") ", e);
+      } catch (IOException e) {
+        Log.e(TAG, "Exception downloading icon (" + mUrlString + ") ", e);
+      }
+    }
+  }
+
+  /**
+   * Utility method to update the icon.
+   * Called on the UI thread.
+   */
+  public void updateIcon() {
+    if (mIcon == null) {
+      return;
+    }
+    View view = findViewById(R.id.origin_icon);
+    if (view != null) {
+      ImageView imageView = (ImageView) view;
+      imageView.setMaxHeight(MAX_ICON_SIZE);
+      imageView.setMaxWidth(MAX_ICON_SIZE);
+      imageView.setScaleType(ImageView.ScaleType.FIT_XY);
+      imageView.setImageBitmap(mIcon);
+      imageView.setVisibility(View.VISIBLE);
+    }
+  }
+
+  /**
+   * Utility method to download an icon from a url and set
+   * it to the GUI element R.id.origin_icon.
+   * It is used both in the shortcut dialog and the
+   * permission dialog.
+   * The actual download is done in the background via
+   * IconDownload; once the icon is downlowded the UI is updated
+   * via updateIcon().
+   * The icon size is included in the layout with the choosen
+   * size, although not displayed, to limit text reflow once
+   * the icon is received.
+   */
+  void downloadIcon(String url) {
+    if (url == null) {
+      return;
+    }
+    View view = findViewById(R.id.origin_icon);
+    if (view != null) {
+      view.setMinimumWidth(mChoosenIconSize);
+      view.setMinimumHeight(mChoosenIconSize);
+      view.setVisibility(View.INVISIBLE);
+    }
+    Thread thread = new Thread(new IconDownload(url));
+    thread.start();
+  }
+
+  /**
+   * Utility method that get the dialogMessage
+   * and icon and ask the setupDialog(message,icon)
+   * method to set the values.
+   */
+  public void setupDialog() {
+    TextView dialogMessage = null;
+    ImageView icon = null;
+
+    View view = findViewById(R.id.dialog_message);
+    if (view != null) {
+      dialogMessage = (TextView) view;
+    }
+
+    View iconView = findViewById(R.id.icon);
+    if (iconView != null) {
+      icon = (ImageView) iconView;
+    }
+
+    if ((dialogMessage != null) && (icon != null)) {
+      setupDialog(dialogMessage, icon);
+      dialogMessage.setVisibility(View.VISIBLE);
+    }
+  }
+
+  /*
+   * Set the message and icon of the dialog
+   */
+  public void setupDialog(TextView message, ImageView icon) {
+    message.setText(R.string.unrecognized_dialog_message);
+    icon.setImageResource(R.drawable.gears_icon_48x48);
+    message.setVisibility(View.VISIBLE);
+  }
+
+  /**
+   * Setup the dialog
+   * By default, just display a simple message.
+   */
+  public void setup() {
+    setupButtons(0, 0, R.string.default_button);
+    setupDialog();
+  }
+
+
+}
diff --git a/src/com/android/browser/GearsDialog.java b/src/com/android/browser/GearsDialog.java
index fd9e762..62a8aaa 100644
--- a/src/com/android/browser/GearsDialog.java
+++ b/src/com/android/browser/GearsDialog.java
@@ -48,6 +48,8 @@
   private String htmlContent;
   private String dialogArguments;
 
+  private boolean dismissed = false;
+
   @Override
   public void onCreate(Bundle icicle) {
     super.onCreate(icicle);
@@ -66,14 +68,24 @@
   }
 
   @Override
+  public void onDestroy() {
+    super.onDestroy();
+    // In case we reach this point without
+    // notifying GearsDialogService, we do it now.
+    if (!dismissed) {
+      notifyEndOfDialog();
+    }
+  }
+
+  @Override
   public void onConfigurationChanged(Configuration newConfig) {
     super.onConfigurationChanged(newConfig);
     Intent i = getIntent();
     boolean inSettings = i.getBooleanExtra("inSettings", false);
     // If we are called from the settings, we
-    // dismiss ourselve upon upon rotation
+    // dismiss ourselve upon rotation
     if (inSettings) {
-      GearsDialogService.signalFinishedDialog();
+      notifyEndOfDialog();
       finish();
     }
   }
@@ -88,10 +100,22 @@
     webview.loadDataWithBaseURL("", htmlContent, "text/html", "", "");
   }
 
+  /**
+   * Signal to GearsDialogService that we are done.
+   */
+  private void notifyEndOfDialog() {
+    GearsDialogService.signalFinishedDialog();
+    dismissed = true;
+  }
+
+  /**
+   * Intercepts the back key to immediately notify
+   * GearsDialogService that we are done.
+   */
   public boolean dispatchKeyEvent(KeyEvent event) {
     if (event.getKeyCode() ==  KeyEvent.KEYCODE_BACK && event.isDown()) {
-      GearsDialogService.signalFinishedDialog();
-     }
+      notifyEndOfDialog();
+    }
     return super.dispatchKeyEvent(event);
   }
 
@@ -110,7 +134,7 @@
    */
   public void closeDialog(String results) {
     GearsDialogService.closeDialog(results);
-    GearsDialogService.signalFinishedDialog();
+    notifyEndOfDialog();
     finish();
   }
 
diff --git a/src/com/android/browser/GearsFilePickerDialog.java b/src/com/android/browser/GearsFilePickerDialog.java
new file mode 100644
index 0000000..4a3c0ed
--- /dev/null
+++ b/src/com/android/browser/GearsFilePickerDialog.java
@@ -0,0 +1,629 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Environment;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.provider.MediaStore;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.GridView;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Vector;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+
+/**
+ * Gears FilePicker dialog
+ */
+class GearsFilePickerDialog extends GearsBaseDialog
+  implements View.OnTouchListener {
+
+  private static final String TAG = "Gears FilePicker";
+  private static Bitmap mDirectoryIcon;
+  private static Bitmap mDefaultIcon;
+  private static Bitmap mImageIcon;
+  private static Bitmap mBackIcon;
+  private static ImagesLoad mImagesLoader;
+  private FilePickerAdapter mAdapter;
+
+  public GearsFilePickerDialog(Activity activity,
+                               Handler handler,
+                               String arguments) {
+    super (activity, handler, arguments);
+    mAdapter = new FilePickerAdapter(activity);
+  }
+
+  public void setup() {
+    inflate(R.layout.gears_dialog_filepicker, R.id.panel_content);
+    setupButtons(0,
+                 R.string.filepicker_button_allow,
+                 R.string.filepicker_button_deny);
+    setupDialog();
+    GridView view = (GridView) findViewById(R.id.files_list);
+    view.setAdapter(mAdapter);
+    view.setOnTouchListener(this);
+
+    mImagesLoader = new ImagesLoad(mAdapter);
+    mImagesLoader.setAdapterView(view);
+    Thread thread = new Thread(mImagesLoader);
+    thread.start();
+  }
+
+  public void setupDialog(TextView message, ImageView icon) {
+    message.setText(R.string.filepicker_message);
+    message.setTextSize(24);
+    icon.setImageResource(R.drawable.gears_icon_48x48);
+  }
+
+  public boolean onTouch(View v, MotionEvent event) {
+    mImagesLoader.pauseIconRequest();
+    return false;
+  }
+
+  /**
+   * Utility class to load and generate thumbnails
+   * for image files
+   */
+  class ImagesLoad implements Runnable {
+    private Map mImagesMap;
+    private Vector mImagesPath;
+    private BaseAdapter mAdapter;
+    private AdapterView mAdapterView;
+    private Vector<FilePickerElement> mElements;
+    private Handler mLoaderHandler;
+
+    ImagesLoad(BaseAdapter adapter) {
+      mAdapter = adapter;
+    }
+
+    public void signalChanges() {
+      Message message = mHandler.obtainMessage(GearsBaseDialog.NEW_ICON,
+                                               mAdapter);
+      mHandler.sendMessage(message);
+    }
+
+    /**
+     * TODO: use the same thumbnails as the photo app
+     * (bug: http://b/issue?id=1497927)
+     */
+    public String getThumbnailPath(String path) {
+      File f = new File(path);
+      String myPath = f.getParent() + "/.thumbnails";
+      File d = new File(myPath);
+      if (!d.exists()) {
+        d.mkdirs();
+      }
+      return myPath + "/" + f.getName();
+    }
+
+    public boolean saveImage(String path, Bitmap image) {
+      boolean ret = false;
+      try {
+        FileOutputStream outStream = new FileOutputStream(path);
+        ret = image.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
+      } catch (IOException e) {
+        Log.e(TAG, "IOException ", e);
+      }
+      return ret;
+    }
+
+    public Bitmap generateImage(FilePickerElement elem) {
+      String path = elem.getPath();
+      Bitmap finalImage = null;
+      try {
+        String thumbnailPath = getThumbnailPath(path);
+        File thumbnail = new File(thumbnailPath);
+        if (thumbnail.exists()) {
+          finalImage = BitmapFactory.decodeFile(thumbnailPath);
+          if (finalImage != null) {
+            return finalImage;
+          }
+        }
+        BitmapFactory.Options options = new BitmapFactory.Options();
+        options.inJustDecodeBounds = true;
+        BitmapFactory.decodeFile(path, options);
+
+        int width = options.outWidth;
+        int height = options.outHeight;
+        int size = 128;
+        int sampleSize = 1;
+        if (width > size || height > size) {
+          sampleSize = 2;
+          while ((width / sampleSize > size)
+                 || (height / sampleSize > size)) {
+            sampleSize += 2;
+          }
+        }
+        options.inJustDecodeBounds = false;
+        options.inSampleSize = sampleSize;
+        Bitmap originalImage = BitmapFactory.decodeFile(path, options);
+        if (originalImage == null) {
+          return null;
+        }
+        finalImage = Bitmap.createScaledBitmap(originalImage, size, size, true);
+        if (saveImage(thumbnailPath, finalImage)) {
+          if (mDebug) {
+            Log.v(TAG, "Saved thumbnail for file " + path);
+          }
+        } else {
+          Log.e(TAG, "Could NOT Save thumbnail for file " + path);
+        }
+        originalImage.recycle();
+      } catch (java.lang.OutOfMemoryError e) {
+        Log.e(TAG, "Intercepted OOM ", e);
+      }
+      return finalImage;
+    }
+
+    public void pauseIconRequest() {
+      Message message = Message.obtain(mLoaderHandler,
+                                       GearsBaseDialog.PAUSE_REQUEST_ICON);
+      mLoaderHandler.sendMessageAtFrontOfQueue(message);
+    }
+    public void postIconRequest(FilePickerElement item, int position) {
+      if (item == null) {
+        return;
+      }
+      Message message = mLoaderHandler.obtainMessage(
+          GearsBaseDialog.REQUEST_ICON, position, 0, item);
+      mLoaderHandler.sendMessage(message);
+    }
+
+    public void generateIcon(FilePickerElement elem) {
+      if (elem.isImage()) {
+        if (elem.getThumbnail() == null) {
+          Bitmap image = generateImage(elem);
+          if (image != null) {
+            elem.setThumbnail(image);
+          }
+        }
+      }
+    }
+
+    public void setAdapterView(AdapterView view) {
+      mAdapterView = view;
+    }
+
+    public void run() {
+      Looper.prepare();
+      mLoaderHandler = new Handler() {
+        public void handleMessage(Message msg) {
+          int visibleElements = 10;
+          if (msg.what == GearsBaseDialog.PAUSE_REQUEST_ICON) {
+            try {
+              // We are busy (likely) scrolling the view,
+              // so we just pause the loading.
+              Thread.sleep(1000);
+              mLoaderHandler.removeMessages(
+                  GearsBaseDialog.PAUSE_REQUEST_ICON);
+            } catch (InterruptedException e) {
+              Log.e(TAG, "InterruptedException ", e);
+            }
+          } else if (msg.what == GearsBaseDialog.REQUEST_ICON) {
+            try {
+              Thread.sleep(10);
+            } catch (InterruptedException e) {
+              Log.e(TAG, "InterruptedException ", e);
+            }
+            FilePickerElement elem = (FilePickerElement) msg.obj;
+            int firstVisiblePosition = mAdapterView.getFirstVisiblePosition();
+            // If the elements are not visible, we slow down the update
+            // TODO: replace this by a low-priority thread
+            if ((msg.arg1 < firstVisiblePosition - visibleElements)
+                && msg.arg1 > firstVisiblePosition + visibleElements) {
+              try {
+                Thread.sleep(100);
+              } catch (InterruptedException e) {
+              }
+            }
+            generateIcon(elem);
+            signalChanges();
+          }
+        }
+      };
+      Looper.loop();
+    }
+  }
+
+  /**
+   * Utility class representing an element displayed in the
+   * file picker, associated with an icon and/or thumbnail
+   */
+  class FilePickerElement {
+    private File mPath;
+    private String mName;
+    private Bitmap mIcon;
+    private boolean mIsSelected;
+    private Vector mChildren;
+    private FilePickerElement mParent;
+    private boolean mIsParent;
+    private BaseAdapter mAdapter;
+    private String mExtension;
+    private Bitmap mThumbnail;
+    private boolean mIsImage;
+
+    public FilePickerElement(String name, BaseAdapter adapter) {
+      this(name, adapter, null);
+    }
+
+    public FilePickerElement(String path, String name, BaseAdapter adapter) {
+      this(path, name, adapter, null);
+    }
+
+    public FilePickerElement(String name,
+                             BaseAdapter adapter,
+                             FilePickerElement parent) {
+      mName = name;
+      mAdapter = adapter;
+      mParent = parent;
+      mIsSelected = false;
+      mChildren = null;
+    }
+
+    public FilePickerElement(String path,
+                             String name,
+                             BaseAdapter adapter,
+                             FilePickerElement parent) {
+      mPath = new File(path);
+      mName = name;
+      mIsSelected = false;
+      mChildren = null;
+      mParent = parent;
+      mAdapter = adapter;
+      mExtension = null;
+
+      setIcons();
+    }
+
+    public void setIcons() {
+      if (mPath.isDirectory()) {
+        if (mDirectoryIcon == null) {
+          mDirectoryIcon = BitmapFactory.decodeResource(
+              getResources(), R.drawable.gears_folder);
+        }
+        mIcon = mDirectoryIcon;
+
+      } else {
+        if (isImage()) {
+          if (mImageIcon == null) {
+            mImageIcon = BitmapFactory.decodeResource(
+                getResources(), R.drawable.gears_file_image);
+          }
+          mIcon = mImageIcon;
+        } else if (isAudio()) {
+          mIcon = BitmapFactory.decodeResource(
+              getResources(), R.drawable.gears_file_audio);
+        } else if (isVideo()) {
+          mIcon = BitmapFactory.decodeResource(
+              getResources(), R.drawable.gears_file_video);
+        } else {
+          if (mDefaultIcon == null) {
+            mDefaultIcon = BitmapFactory.decodeResource(
+                getResources(), R.drawable.gears_file_unknown);
+          }
+          mIcon = mDefaultIcon;
+        }
+      }
+      if (mBackIcon == null) {
+        mBackIcon = BitmapFactory.decodeResource(getResources(),
+                                                 R.drawable.gears_back);
+      }
+    }
+
+    public boolean isImage() {
+      if (mIsImage) return mIsImage;
+      String extension = getExtension();
+      if (extension != null) {
+        if (extension.equalsIgnoreCase("jpg") ||
+            extension.equalsIgnoreCase("jpeg") ||
+            extension.equalsIgnoreCase("png") ||
+            extension.equalsIgnoreCase("gif")) {
+          mIsImage = true;
+          return true;
+        }
+      }
+      return false;
+    }
+
+    public boolean isAudio() {
+      String extension = getExtension();
+      if (extension != null) {
+        if (extension.equalsIgnoreCase("mp3") ||
+            extension.equalsIgnoreCase("wav") ||
+            extension.equalsIgnoreCase("aac")) {
+          return true;
+        }
+      }
+      return false;
+    }
+
+    public boolean isVideo() {
+      String extension = getExtension();
+      if (extension != null) {
+        if (extension.equalsIgnoreCase("mpg") ||
+            extension.equalsIgnoreCase("mpeg") ||
+            extension.equalsIgnoreCase("mpe") ||
+            extension.equalsIgnoreCase("divx") ||
+            extension.equalsIgnoreCase("3gpp") ||
+            extension.equalsIgnoreCase("avi")) {
+          return true;
+        }
+      }
+      return false;
+    }
+
+    public void setParent(boolean isParent) {
+      mIsParent = isParent;
+    }
+
+    public boolean isDirectory() {
+      return mPath.isDirectory();
+    }
+
+    public String getExtension() {
+      if (isDirectory()) {
+        return null;
+      }
+      if (mExtension == null) {
+        String path = getPath();
+        int index = path.lastIndexOf(".");
+        if ((index != -1) && (index != path.length() - 1)){
+          // if we find a dot that is not the last character
+          mExtension = path.substring(index+1);
+          return mExtension;
+        }
+      }
+      return mExtension;
+    }
+
+    public void refresh() {
+      mChildren = null;
+      Vector children = getChildren();
+      for (int i = 0; i < children.size(); i++) {
+        FilePickerElement elem = (FilePickerElement) children.get(i);
+        mImagesLoader.postIconRequest(elem, i);
+      }
+    }
+
+    public Vector getChildren() {
+      if (isDirectory()) {
+        if (mChildren == null) {
+          mChildren = new Vector();
+          File[] files = mPath.listFiles();
+          if (mParent != null) {
+            mChildren.add(mParent);
+            mParent.setParent(true);
+          }
+          for (int i = 0; i < files.length; i++) {
+            String name = files[i].getName();
+            String fpath = files[i].getPath();
+            if (!name.startsWith(".")) { // hide dotfiles
+              FilePickerElement elem = new FilePickerElement(fpath, name,
+                                                             mAdapter, this);
+              elem.setParent(false);
+              mChildren.add(elem);
+            }
+          }
+        }
+      }
+      return mChildren;
+    }
+
+    public FilePickerElement getChild(int position) {
+      Vector children = getChildren();
+      if (children != null) {
+        return (FilePickerElement) children.get(position);
+      }
+      return null;
+    }
+
+    public Bitmap getIcon(int position) {
+      if (mIsParent) {
+        return mBackIcon;
+      }
+      if (isImage()) {
+        if (mThumbnail != null) {
+          return mThumbnail;
+        } else {
+          mImagesLoader.postIconRequest(this, position);
+        }
+      }
+      return mIcon;
+    }
+
+    public Bitmap getThumbnail() {
+      return mThumbnail;
+    }
+
+    public void setThumbnail(Bitmap icon) {
+      mThumbnail = icon;
+    }
+
+    public String getName() {
+      return mName;
+    }
+
+    public String getPath() {
+      return mPath.getPath();
+    }
+
+    public void toggleSelection() {
+      mIsSelected = !mIsSelected;
+    }
+
+    public boolean isSelected() {
+      return mIsSelected;
+    }
+
+  }
+
+  /**
+   * Adapter for the GridView
+   */
+  class FilePickerAdapter extends BaseAdapter {
+    private Context mContext;
+    private Map mImagesMap;
+    private Map mImagesSelected;
+
+    private Vector mImages;
+    private Vector<FilePickerElement> mFiles;
+
+    private FilePickerElement mRootElement;
+    private FilePickerElement mCurrentElement;
+
+    public FilePickerAdapter(Context context) {
+      mContext = context;
+      mImages = new Vector();
+      mFiles = new Vector();
+
+      mImagesMap = Collections.synchronizedMap(new HashMap());
+      mImagesSelected = new HashMap();
+
+      Uri requests[] = { MediaStore.Images.Media.INTERNAL_CONTENT_URI,
+                         MediaStore.Images.Media.EXTERNAL_CONTENT_URI };
+
+      String sdCardPath = Environment.getExternalStorageDirectory().getPath();
+      mRootElement = new FilePickerElement(sdCardPath, "SD Card", this);
+      mCurrentElement = mRootElement;
+    }
+
+    public void addImage(String path) {
+      mImages.add(path);
+      Bitmap image = BitmapFactory.decodeResource(
+          getResources(), R.drawable.gears_file_unknown);
+      mImagesMap.put(path, image);
+      mImagesSelected.put(path, Boolean.FALSE);
+    }
+
+    public int getCount() {
+      Vector elems = mCurrentElement.getChildren();
+      return elems.size();
+    }
+
+    public Object getItem(int position) {
+      return position;
+    }
+
+    public long getItemId(int position) {
+      return position;
+    }
+
+    public Vector selectedElements() {
+      if (mCurrentElement == null) {
+        return null;
+      }
+      Vector children = mCurrentElement.getChildren();
+      Vector ret = new Vector();
+      for (int i = 0; i < children.size(); i++) {
+        FilePickerElement elem = (FilePickerElement) children.get(i);
+        if (elem.isSelected()) {
+          ret.add(elem);
+        }
+      }
+      return ret;
+    }
+
+    public View getView(int position, View convertView, ViewGroup parent) {
+      View cell = convertView;
+      if (cell == null) {
+        LayoutInflater inflater = (LayoutInflater) getSystemService(
+            Context.LAYOUT_INFLATER_SERVICE);
+        cell = inflater.inflate(R.layout.gears_dialog_filepicker_cell, null);
+      }
+      ImageView imageView = (ImageView) cell.findViewById(R.id.icon);
+      TextView textView = (TextView) cell.findViewById(R.id.name);
+      FilePickerElement elem = mCurrentElement.getChild(position);
+      if (elem == null) {
+        String message = "Could not get elem " + position;
+        message += " for " + mCurrentElement.getPath();
+        Log.e(TAG, message);
+        return null;
+      }
+      String path = elem.getPath();
+      textView.setText(elem.getName());
+
+      View.OnClickListener listener = new View.OnClickListener() {
+        public void onClick(View view) {
+          int pos = (Integer) view.getTag();
+          FilePickerElement elem = mCurrentElement.getChild(pos);
+          if (elem.isDirectory()) {
+            mCurrentElement = elem;
+            mCurrentElement.refresh();
+          } else {
+            elem.toggleSelection();
+          }
+          notifyDataSetChanged();
+        }
+      };
+      imageView.setOnClickListener(listener);
+      cell.setLayoutParams(new GridView.LayoutParams(96, 96));
+
+      imageView.setTag(position);
+
+      if (elem.isSelected()) {
+        cell.setBackgroundColor(Color.LTGRAY);
+      } else {
+        cell.setBackgroundColor(Color.WHITE);
+      }
+      Bitmap bmp = elem.getIcon(position);
+      if (bmp != null) {
+        imageView.setImageBitmap(bmp);
+      }
+
+      return cell;
+    }
+  }
+
+  private String selectedFiles() {
+    Vector selection = mAdapter.selectedElements();
+    JSONArray jsonSelection = new JSONArray();
+    if (selection != null) {
+      for (int i = 0; i < selection.size(); i++) {
+        FilePickerElement elem = (FilePickerElement) selection.get(i);
+        jsonSelection.put(elem.getPath());
+      }
+    }
+    return jsonSelection.toString();
+  }
+
+  public String closeDialog(int closingType) {
+    return selectedFiles();
+  }
+}
diff --git a/src/com/android/browser/GearsNativeDialog.java b/src/com/android/browser/GearsNativeDialog.java
new file mode 100644
index 0000000..c8ae741
--- /dev/null
+++ b/src/com/android/browser/GearsNativeDialog.java
@@ -0,0 +1,274 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Config;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.Window;
+import android.widget.BaseAdapter;
+
+import android.webkit.gears.NativeDialog;
+
+import com.android.browser.GearsBaseDialog;
+import com.android.browser.GearsPermissionsDialog;
+import com.android.browser.GearsSettingsDialog;
+import com.android.browser.GearsShortcutDialog;
+import com.android.browser.GearsFilePickerDialog;
+
+/**
+ * Native dialog Activity used by gears
+ * TODO: rename in GearsNativeDialogActivity
+ * @hide
+ */
+public class GearsNativeDialog extends Activity {
+
+  private static final String TAG = "GearsNativeDialog";
+
+  private String mDialogArguments;
+
+  private String mGearsVersion = null;
+
+  private boolean mDebug = false;
+
+  private int mDialogType;
+  private final int SETTINGS_DIALOG = 1;
+  private final int PERMISSION_DIALOG = 2;
+  private final int SHORTCUT_DIALOG = 3;
+  private final int LOCATION_DIALOG = 4;
+  private final int FILEPICKER_DIALOG = 5;
+
+  private final String VERSION_STRING = "version";
+  private final String SETTINGS_DIALOG_STRING = "settings_dialog";
+  private final String PERMISSION_DIALOG_STRING = "permissions_dialog";
+  private final String SHORTCUT_DIALOG_STRING = "shortcuts_dialog";
+  private final String LOCATION_DIALOG_STRING = "locations_dialog";
+  private final String FILEPICKER_DIALOG_STRING = "filepicker_dialog";
+
+  private boolean mDialogDismissed = false;
+
+  GearsBaseDialog dialog;
+
+  // Handler for callbacks to the UI thread
+  final Handler mHandler = new Handler() {
+    public void handleMessage(Message msg) {
+      if (msg.what == GearsBaseDialog.NEW_ICON) {
+        BaseAdapter adapter = (BaseAdapter) msg.obj;
+        adapter.notifyDataSetChanged();
+      } else if (msg.what == GearsBaseDialog.UPDATE_ICON) {
+        dialog.updateIcon();
+      } else if (msg.what == GearsBaseDialog.ALWAYS_DENY) {
+        closeDialog(GearsBaseDialog.ALWAYS_DENY);
+      } else if (msg.what == GearsBaseDialog.ALLOW) {
+        closeDialog(GearsBaseDialog.ALLOW);
+      } else if (msg.what == GearsBaseDialog.DENY) {
+        closeDialog(GearsBaseDialog.DENY);
+      }
+      super.handleMessage(msg);
+    }
+  };
+
+  @Override
+  public void onCreate(Bundle icicle) {
+    super.onCreate(icicle);
+    requestWindowFeature(Window.FEATURE_NO_TITLE);
+    setContentView(R.layout.gears_dialog);
+    getArguments();
+
+    switch (mDialogType) {
+      case SETTINGS_DIALOG:
+        dialog = new GearsSettingsDialog(this, mHandler, mDialogArguments);
+        dialog.setGearsVersion(mGearsVersion);
+        break;
+      case PERMISSION_DIALOG:
+        dialog = new GearsPermissionsDialog(this, mHandler, mDialogArguments);
+        break;
+      case SHORTCUT_DIALOG:
+        dialog = new GearsShortcutDialog(this, mHandler, mDialogArguments);
+        break;
+      case LOCATION_DIALOG:
+        dialog = new GearsPermissionsDialog(this, mHandler, mDialogArguments);
+        break;
+      case FILEPICKER_DIALOG:
+        dialog = new GearsFilePickerDialog(this, mHandler, mDialogArguments);
+        break;
+      default:
+        dialog = new GearsBaseDialog(this, mHandler, mDialogArguments);
+    }
+    dialog.setDebug(mDebug);
+    dialog.setup();
+  }
+
+  /**
+   * Get the arguments for the dialog
+   *
+   * The dialog needs a json string as an argument, as
+   * well as a dialogType. In debug mode the arguments
+   * are mocked.
+   */
+  private void getArguments() {
+    if (mDebug) {
+      mDialogType = FILEPICKER_DIALOG +1;
+      mockArguments();
+
+      return;
+    }
+
+    Intent intent = getIntent();
+    mDialogArguments = intent.getStringExtra("dialogArguments");
+    String dialogTypeString = intent.getStringExtra("dialogType");
+    if (dialogTypeString == null) {
+      return;
+    }
+
+    if (Config.LOGV) {
+      Log.v(TAG, "dialogtype: " + dialogTypeString);
+    }
+
+    if (dialogTypeString.equalsIgnoreCase(SETTINGS_DIALOG_STRING)) {
+      mDialogType = SETTINGS_DIALOG;
+      mGearsVersion = intent.getStringExtra(VERSION_STRING);
+    } else if (dialogTypeString.equalsIgnoreCase(PERMISSION_DIALOG_STRING)) {
+      mDialogType = PERMISSION_DIALOG;
+    } else if (dialogTypeString.equalsIgnoreCase(SHORTCUT_DIALOG_STRING)) {
+      mDialogType = SHORTCUT_DIALOG;
+    } else if (dialogTypeString.equalsIgnoreCase(LOCATION_DIALOG_STRING)) {
+      mDialogType = LOCATION_DIALOG;
+    } else if (dialogTypeString.equalsIgnoreCase(FILEPICKER_DIALOG_STRING)) {
+      mDialogType = FILEPICKER_DIALOG;
+    }
+  }
+
+  /**
+   * Utility method for debugging the dialog.
+   *
+   * Set mock arguments.
+   */
+  private void mockArguments() {
+    String argumentsShortcuts = "{ locale: \"en-US\","
+        + "name: \"My Application\", link: \"http://www.google.com/\","
+        + "description: \"This application does things does things!\","
+        + "icon16x16: \"http://google-gears.googlecode.com/"
+        + "svn/trunk/gears/test/manual/shortcuts/16.png\","
+        + "icon32x32: \"http://google-gears.googlecode.com/"
+        + "svn/trunk/gears/test/manual/shortcuts/32.png\","
+        + "icon48x48: \"http://google-gears.googlecode.com/"
+        + "svn/trunk/gears/test/manual/shortcuts/48.png\","
+        + "icon128x128: \"http://google-gears.googlecode.com/"
+        + "svn/trunk/gears/test/manual/shortcuts/128.png\"}";
+
+    String argumentsPermissions = "{ locale: \"en-US\", "
+        + "origin: \"http://www.google.com\", dialogType: \"localData\","
+        + "customIcon: \"http://google-gears.googlecode.com/"
+        + "svn/trunk/gears/test/manual/shortcuts/32.png\","
+        + "customName: \"My Application\","
+        + "customMessage: \"Press the button to enable my "
+        + "application to run offline!\" };";
+
+    String argumentsLocation = "{ locale: \"en-US\", "
+        + "origin: \"http://www.google.com\", dialogType: \"locationData\","
+        + "customIcon: \"http://google-gears.googlecode.com/"
+        + "svn/trunk/gears/test/manual/shortcuts/32.png\","
+        + "customName: \"My Application\","
+        + "customMessage: \"Press the button to enable my "
+        + "application to run offline!\" };";
+
+    String argumentsSettings = "{ locale: \"en-US\", permissions: [ { "
+        + "name: \"http://www.google.com\", "
+        + "localStorage: { permissionState: 1 }, "
+        + "locationData: { permissionState: 0 } }, "
+        + "{ name: \"http://www.aaronboodman.com\", "
+        + "localStorage: { permissionState: 1 }, "
+        + "locationData: { permissionState: 2 } }, "
+        + "{ name: \"http://www.evil.org\", "
+        + "localStorage: { permissionState: 2 }, "
+        + "locationData: { permissionState: 2 } } ] }";
+
+    switch (mDialogType) {
+      case SHORTCUT_DIALOG:
+        mDialogArguments = argumentsShortcuts;
+        break;
+      case PERMISSION_DIALOG:
+        mDialogArguments = argumentsPermissions;
+        break;
+      case LOCATION_DIALOG:
+        mDialogArguments = argumentsLocation;
+        break;
+      case SETTINGS_DIALOG:
+        mDialogArguments = argumentsSettings;
+    }
+  }
+
+  /**
+   * Close the dialog and set the return string value.
+   */
+  private void closeDialog(int closingType) {
+    String ret = dialog.closeDialog(closingType);
+
+    if (mDebug) {
+      Log.v(TAG, "closeDialog ret value: " + ret);
+    }
+
+    NativeDialog.closeDialog(ret);
+    notifyEndOfDialog();
+    finish();
+  }
+
+  @Override
+  public void onDestroy() {
+    super.onDestroy();
+    // In case we reach this point without
+    // notifying NativeDialog, we do it now.
+    if (!mDialogDismissed) {
+      notifyEndOfDialog();
+    }
+  }
+
+  @Override
+  public void onPause(){
+    super.onPause();
+    if (!mDialogDismissed) {
+      closeDialog(GearsBaseDialog.CANCEL);
+    }
+  }
+
+  /**
+   * Signal to NativeDialog that we are done.
+   */
+  private void notifyEndOfDialog() {
+    NativeDialog.signalFinishedDialog();
+    mDialogDismissed = true;
+  }
+
+  /**
+   * Intercepts the back key to immediately notify
+   * NativeDialog that we are done.
+   */
+  public boolean dispatchKeyEvent(KeyEvent event) {
+    if (event.getKeyCode() ==  KeyEvent.KEYCODE_BACK && event.isDown()) {
+      closeDialog(GearsBaseDialog.CANCEL);
+    }
+    return super.dispatchKeyEvent(event);
+  }
+
+}
diff --git a/src/com/android/browser/GearsPermissions.java b/src/com/android/browser/GearsPermissions.java
new file mode 100644
index 0000000..cd46324
--- /dev/null
+++ b/src/com/android/browser/GearsPermissions.java
@@ -0,0 +1,196 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.util.Log;
+
+import java.util.HashMap;
+import java.util.Iterator;
+
+/**
+ * The permission mechanism works the following way:
+ *
+ * PermissionType allows to define a type of permission
+ *   (e.g. localStorage/locationData), storing a name and a set of
+ *   resource ids corresponding to the GUI resources.
+ *
+ * Permission defines an actual permission instance, with a type and a value.
+ *
+ * OriginPermissions holds an origin with a set of Permission objects
+ */
+class GearsPermissions {
+
+  private static final String TAG = "GearsPermissions";
+
+  /**
+   * Defines a type of permission
+   *
+   * Store the permission's name (used in the json result)
+   * Graphically, each permission is a label followed by two radio buttons.
+   * We store the resources ids here.
+   */
+  public static class PermissionType {
+    public static final int PERMISSION_NOT_SET = 0;
+    public static final int PERMISSION_ALLOWED = 1;
+    public static final int PERMISSION_DENIED = 2;
+
+    String mName;
+    int mRowRsc;
+    int mAllowedButtonRsc;
+    int mDeniedButtonRsc;
+
+    PermissionType(String name) {
+      mName = name;
+    }
+
+    public void setResources(int rowRsc, int allowedButtonRsc,
+        int deniedButtonRsc) {
+      mRowRsc = rowRsc;
+      mAllowedButtonRsc = allowedButtonRsc;
+      mDeniedButtonRsc = deniedButtonRsc;
+    }
+
+    public int getRowRsc() {
+      return mRowRsc;
+    }
+
+    public int getAllowedButtonRsc() {
+      return mAllowedButtonRsc;
+    }
+
+    public int getDeniedButtonRsc() {
+      return mDeniedButtonRsc;
+    }
+
+    public String getName() {
+      return mName;
+    }
+
+  }
+
+  /**
+   * Simple class to store an instance of a permission
+   *
+   * i.e. a permission type and a value
+   * Value can be either PERMISSION_NOT_SET,
+   * PERMISSION_ALLOWED or PERMISSION_DENIED
+   * (defined in PermissionType).
+   */
+  public static class Permission {
+    PermissionType mType;
+    int mValue;
+
+    Permission(PermissionType type, int value) {
+      mType = type;
+      mValue = value;
+    }
+
+    Permission(PermissionType type) {
+      mType = type;
+      mValue = 0;
+    }
+
+    public PermissionType getType() {
+      return mType;
+    }
+
+    public void setValue(int value) {
+      mValue = value;
+    }
+
+    public int getValue() {
+      return mValue;
+    }
+  }
+
+  /**
+   * Interface used by the GearsNativeDialog implementation
+   * to listen to changes in the permissions.
+   */
+  public interface PermissionsChangesListener {
+    public boolean setPermission(PermissionType type, int perm);
+  }
+
+  /**
+   * Holds the model for an origin -- each origin has a set of
+   * permissions.
+   */
+  public static class OriginPermissions {
+    HashMap<PermissionType, Permission> mPermissions;
+    String mOrigin;
+    public static PermissionsChangesListener mListener;
+
+    public static void setListener(PermissionsChangesListener listener) {
+      mListener = listener;
+    }
+
+    OriginPermissions(String anOrigin) {
+      mOrigin = anOrigin;
+      mPermissions = new HashMap<PermissionType, Permission>();
+    }
+
+    OriginPermissions(OriginPermissions perms) {
+      mOrigin = perms.getOrigin();
+      mPermissions = new HashMap<PermissionType, Permission>();
+      HashMap<PermissionType, Permission> permissions = perms.getPermissions();
+      Iterator<PermissionType> iterator = permissions.keySet().iterator();
+      while (iterator.hasNext()) {
+        Permission permission = permissions.get(iterator.next());
+        int value = permission.getValue();
+        setPermission(permission.getType(), value);
+      }
+    }
+
+    public String getOrigin() {
+      return mOrigin;
+    }
+
+    public HashMap<PermissionType, Permission> getPermissions() {
+      return mPermissions;
+    }
+
+    public int getPermission(PermissionType type) {
+      return mPermissions.get(type).getValue();
+    }
+
+    public void setPermission(PermissionType type, int perm) {
+      if (mPermissions.get(type) == null) {
+        Permission permission = new Permission(type, perm);
+        mPermissions.put(type, permission);
+        return;
+      }
+
+      if (mListener != null) {
+        mListener.setPermission(type, perm);
+      }
+
+      mPermissions.get(type).setValue(perm);
+    }
+
+    public void print() {
+      Log.v(TAG, "Permissions for " + mOrigin);
+      Iterator<PermissionType> iterator = mPermissions.keySet().iterator();
+      while (iterator.hasNext()) {
+        Permission permission = mPermissions.get(iterator.next());
+        String name = permission.getType().getName();
+        int value = permission.getValue();
+        Log.v(TAG, "  " + name + ": " + value);
+      }
+    }
+  }
+
+}
diff --git a/src/com/android/browser/GearsPermissionsDialog.java b/src/com/android/browser/GearsPermissionsDialog.java
new file mode 100644
index 0000000..b57ab0b
--- /dev/null
+++ b/src/com/android/browser/GearsPermissionsDialog.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.Activity;
+import android.os.Handler;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * Gears permission dialog
+ */
+class GearsPermissionsDialog extends GearsBaseDialog {
+
+  private static final String TAG = "GearsPermissionsDialog";
+
+  private String mDialogType;
+
+  public GearsPermissionsDialog(Activity activity,
+                                Handler handler,
+                                String arguments) {
+    super (activity, handler, arguments);
+  }
+
+  public void setup() {
+    inflate(R.layout.gears_dialog_permission, R.id.panel_content);
+    setupButtons(R.string.permission_button_alwaysdeny,
+                 R.string.permission_button_allow,
+                 R.string.permission_button_deny);
+
+    View contentBorder = findViewById(R.id.content_border);
+    if (contentBorder != null) {
+      contentBorder.setBackgroundResource(R.color.permission_border);
+    }
+    View contentBackground = findViewById(R.id.content_background);
+    if (contentBackground != null) {
+      contentBackground.setBackgroundResource(R.color.permission_background);
+    }
+
+    try {
+      JSONObject json = new JSONObject(mDialogArguments);
+
+      if (json.has("dialogType")) {
+        mDialogType = json.getString("dialogType");
+        setupDialog();
+      }
+
+      if (!json.has("customName")) {
+        setLabel(json, "origin", R.id.origin_title);
+        View titleView = findViewById(R.id.origin_title);
+        if (titleView != null) {
+          TextView title = (TextView) titleView;
+          title.setGravity(Gravity.CENTER);
+        }
+      } else {
+        setLabel(json, "customName", R.id.origin_title);
+        setLabel(json, "origin", R.id.origin_subtitle);
+        setLabel(json, "customMessage", R.id.origin_message);
+      }
+
+      if (json.has("customIcon")) {
+        String iconUrl = json.getString("customIcon");
+        mChoosenIconSize = 32;
+        downloadIcon(iconUrl);
+      }
+
+    } catch (JSONException e) {
+      Log.e(TAG, "JSON exception ", e);
+    }
+  }
+
+  public void setupDialog(TextView message, ImageView icon) {
+    if (mDialogType.equalsIgnoreCase(LOCAL_DATA_STRING)) {
+      message.setText(R.string.query_data_message);
+      icon.setImageResource(R.drawable.gears_local_data);
+    } else if (mDialogType.equalsIgnoreCase(LOCATION_DATA_STRING)) {
+      message.setText(R.string.location_message);
+      icon.setImageResource(R.drawable.gears_location_data);
+      View privacyPolicyLabel = findViewById(R.id.privacy_policy_label);
+      if (privacyPolicyLabel != null) {
+        privacyPolicyLabel.setVisibility(View.VISIBLE);
+      }
+    }
+  }
+
+  public String closeDialog(int closingType) {
+    String ret = null;
+    switch (closingType) {
+      case ALWAYS_DENY:
+        ret = "{\"allow\": false, \"permanently\": true }";
+        break;
+      case ALLOW:
+        ret = "{\"allow\": true, \"permanently\": true }";
+        break;
+      case DENY:
+        ret = "{\"allow\": false, \"permanently\": false }";
+        break;
+    }
+    return ret;
+  }
+
+}
diff --git a/src/com/android/browser/GearsSettingsDialog.java b/src/com/android/browser/GearsSettingsDialog.java
new file mode 100644
index 0000000..dead4f2
--- /dev/null
+++ b/src/com/android/browser/GearsSettingsDialog.java
@@ -0,0 +1,500 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.Handler;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.CompoundButton;
+import android.widget.ImageView;
+import android.widget.ListAdapter;
+import android.widget.ListView;
+import android.widget.RadioButton;
+import android.widget.TextView;
+
+import com.android.browser.GearsPermissions.OriginPermissions;
+import com.android.browser.GearsPermissions.PermissionsChangesListener;
+import com.android.browser.GearsPermissions.PermissionType;
+
+import java.util.Vector;
+import java.util.List;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * Gears Settings dialog
+ */
+class GearsSettingsDialog extends GearsBaseDialog
+    implements PermissionsChangesListener {
+
+  private static final String TAG = "GearsPermissionsDialog";
+  private Vector<OriginPermissions> mSitesPermissions = null;
+  private Vector<OriginPermissions> mOriginalPermissions = null;
+  private Vector<OriginPermissions> mCurrentPermissions = null;
+
+  private Vector<PermissionType> mPermissions;
+
+  // We declare the permissions globally to simplify the code
+  private final PermissionType LOCAL_STORAGE =
+      new PermissionType(LOCAL_STORAGE_STRING);
+  private final PermissionType LOCATION_DATA =
+      new PermissionType(LOCATION_DATA_STRING);
+
+  private boolean mChanges = false;
+
+
+  public GearsSettingsDialog(Activity activity,
+                             Handler handler,
+                             String arguments) {
+    super (activity, handler, arguments);
+  }
+
+  public void setup() {
+    // First let's add the permissions' resources
+    LOCAL_STORAGE.setResources(R.id.local_storage_choice,
+       R.id.local_storage_allowed,
+       R.id.local_storage_denied);
+
+    LOCATION_DATA.setResources(R.id.location_data_choice,
+       R.id.location_data_allowed,
+       R.id.location_data_denied);
+
+    // add the permissions to the list of permissions.
+    mPermissions = new Vector<PermissionType>();
+    mPermissions.add(LOCAL_STORAGE);
+    mPermissions.add(LOCATION_DATA);
+    OriginPermissions.setListener(this);
+
+
+    inflate(R.layout.gears_dialog_settings, R.id.panel_content);
+    setupDialog();
+    setupButtons(0,
+                 R.string.settings_button_allow,
+                 R.string.settings_button_deny);
+
+    // by default disable the allow button (it will get enabled if
+    // something is changed by the user)
+    View buttonView = findViewById(R.id.button_allow);
+    if (buttonView != null) {
+      Button button = (Button) buttonView;
+      button.setEnabled(false);
+    }
+
+    View gearsVersionView = findViewById(R.id.gears_version);
+    if (gearsVersionView != null) {
+      TextView gearsVersion = (TextView) gearsVersionView;
+      gearsVersion.setText(mGearsVersion);
+    }
+
+    // We manage the permissions using three vectors, mSitesPermissions,
+    // mOriginalPermissions and mCurrentPermissions.
+    // The dialog's arguments are parsed and a list of permissions is
+    // generated and stored in those three vectors.
+    // mOriginalPermissions is a separate copy and will not be modified;
+    // mSitesPermissions contains the current permissions _only_ --
+    // if an origin is removed, it is also removed from mSitesPermissions.
+    // Finally, mCurrentPermissions contains the current permissions and
+    // is a clone of mSitesPermissions, but removed sites aren't removed,
+    // their permissions are simply set to PERMISSION_NOT_SET. This
+    // allows us to easily generate the final difference between the
+    // original permissions and the final permissions, while directly
+    // using mSitesPermissions for the listView adapter (SettingsAdapter).
+
+    mSitesPermissions = new Vector<OriginPermissions>();
+    mOriginalPermissions = new Vector<OriginPermissions>();
+
+    try {
+      JSONObject json = new JSONObject(mDialogArguments);
+      if (json.has("permissions")) {
+        JSONArray jsonArray = json.getJSONArray("permissions");
+        for (int i = 0; i < jsonArray.length(); i++) {
+          JSONObject infos = jsonArray.getJSONObject(i);
+          String name = null;
+          int localStorage = PermissionType.PERMISSION_NOT_SET;
+          int locationData = PermissionType.PERMISSION_NOT_SET;
+          if (infos.has("name")) {
+            name = infos.getString("name");
+          }
+          if (infos.has(LOCAL_STORAGE_STRING)) {
+            JSONObject perm = infos.getJSONObject(LOCAL_STORAGE_STRING);
+            if (perm.has("permissionState")) {
+              localStorage = perm.getInt("permissionState");
+            }
+          }
+          if (infos.has(LOCATION_DATA_STRING)) {
+            JSONObject perm = infos.getJSONObject(LOCATION_DATA_STRING);
+            if (perm.has("permissionState")) {
+              locationData = perm.getInt("permissionState");
+            }
+          }
+          OriginPermissions perms = new OriginPermissions(name);
+          perms.setPermission(LOCAL_STORAGE, localStorage);
+          perms.setPermission(LOCATION_DATA, locationData);
+
+          mSitesPermissions.add(perms);
+          mOriginalPermissions.add(new OriginPermissions(perms));
+        }
+      }
+    } catch (JSONException e) {
+      Log.e(TAG, "JSON exception ", e);
+    }
+    mCurrentPermissions = (Vector<OriginPermissions>)mSitesPermissions.clone();
+
+    View listView = findViewById(R.id.sites_list);
+    if (listView != null) {
+      ListView list = (ListView) listView;
+      list.setAdapter(new SettingsAdapter(mActivity, mSitesPermissions));
+    }
+    if (mDebug) {
+      printPermissions();
+    }
+  }
+
+  public void setupDialog() {
+    View dialogTitleView = findViewById(R.id.dialog_title);
+    if (dialogTitleView != null) {
+      TextView dialogTitle = (TextView) dialogTitleView;
+      dialogTitle.setText(R.string.settings_title);
+      dialogTitle.setVisibility(View.VISIBLE);
+    }
+    View dialogSubtitleView = findViewById(R.id.dialog_subtitle);
+    if (dialogSubtitleView != null) {
+      TextView dialogSubtitle = (TextView) dialogSubtitleView;
+      dialogSubtitle.setText(R.string.settings_message);
+      dialogSubtitle.setVisibility(View.VISIBLE);
+    }
+    View iconView = findViewById(R.id.icon);
+    if (iconView != null) {
+      ImageView icon = (ImageView) iconView;
+      icon.setImageResource(R.drawable.gears_icon_32x32);
+    }
+  }
+
+  /**
+   * GearsPermissions.PermissionsChangesListener delegate
+   */
+  public boolean setPermission(PermissionType type, int perm) {
+    if (mChanges == false) {
+      signalChanges();
+    }
+    return mChanges;
+  }
+
+  /**
+   * Controller class for binding the model (OriginPermissions) with
+   * the UI.
+   */
+  class PermissionController {
+    final static int ALLOWED_BUTTON = 1;
+    final static int DENIED_BUTTON = 2;
+    private int mButtonType;
+    private PermissionType mPermissionType;
+    private OriginPermissions mPermissions;
+
+    PermissionController(PermissionType permissionType, int buttonType,
+        OriginPermissions permissions) {
+      mPermissionType = permissionType;
+      mButtonType = buttonType;
+      mPermissions = permissions;
+    }
+
+    public boolean isChecked() {
+      boolean checked = false;
+
+      switch (mButtonType) {
+        case ALLOWED_BUTTON:
+          if (mPermissions.getPermission(mPermissionType) ==
+              PermissionType.PERMISSION_ALLOWED) {
+            checked = true;
+          } break;
+        case DENIED_BUTTON:
+          if (mPermissions.getPermission(mPermissionType) ==
+              PermissionType.PERMISSION_DENIED) {
+            checked = true;
+          }
+      }
+      return checked;
+    }
+
+    public String print() {
+        return printType() + " for " + mPermissions.getOrigin();
+    }
+
+    private String printType() {
+      switch (mButtonType) {
+        case ALLOWED_BUTTON:
+          return "ALLOWED_BUTTON";
+        case DENIED_BUTTON:
+          return "DENIED_BUTTON";
+      }
+      return "UNKNOWN BUTTON";
+    }
+
+    public void changed(boolean isChecked) {
+      if (isChecked == isChecked()) {
+        return; // already set
+      }
+
+      switch (mButtonType) {
+        case ALLOWED_BUTTON:
+          mPermissions.setPermission(mPermissionType,
+              PermissionType.PERMISSION_ALLOWED);
+          break;
+        case DENIED_BUTTON:
+          mPermissions.setPermission(mPermissionType,
+              PermissionType.PERMISSION_DENIED);
+          break;
+      }
+    }
+  }
+
+
+
+  /**
+   * Adapter class for the list view in the settings dialog
+   *
+   * Every row in the settings dialog display the permissions
+   * for a given origin. For every type of permission
+   * (location, local data...) there is two radio buttons to
+   * authorize or deny the permission.
+   * A remove button is also present to let the user remove
+   * all the authorization of an origin in one step.
+   */
+  class SettingsAdapter extends ArrayAdapter {
+    private Activity mContext;
+    private List mItems;
+
+    SettingsAdapter(Activity context, List items) {
+      super(context, R.layout.gears_dialog_settings_row, items);
+      mContext = context;
+      mItems = items;
+    }
+
+    /*
+     * setup the necessary listeners for the radiobuttons
+     * When the buttons are clicked the permissions change.
+     */
+    private void createAndSetButtonListener(View buttonView,
+        OriginPermissions perms, PermissionType permissionType,
+        int buttonType) {
+      if (buttonView == null) {
+        return;
+      }
+      RadioButton button = (RadioButton) buttonView;
+
+      button.setOnCheckedChangeListener(null);
+      PermissionController p = new PermissionController(permissionType,
+          buttonType, perms);
+      button.setTag(p);
+
+      CompoundButton.OnCheckedChangeListener listener =
+          new CompoundButton.OnCheckedChangeListener() {
+        public void onCheckedChanged(CompoundButton buttonView,
+            boolean isChecked) {
+          PermissionController perm = (PermissionController)buttonView.getTag();
+          perm.changed(isChecked);
+        }
+      };
+
+      button.setOnCheckedChangeListener(listener);
+
+      if (p.isChecked() != button.isChecked()) {
+        button.setChecked(p.isChecked());
+      }
+    }
+
+    /*
+     * setup the remove button for an origin: each row has a global
+     * remove button in addition to the radio buttons controlling the
+     * permissions.
+     */
+    private void setRemoveButton(Button button, OriginPermissions perms) {
+      Button.OnClickListener listener = new Button.OnClickListener() {
+        public void onClick(View buttonView) {
+          if (mChanges == false) {
+            signalChanges();
+          }
+          OriginPermissions perm = (OriginPermissions) buttonView.getTag();
+          perm.setPermission(LOCAL_STORAGE, PermissionType.PERMISSION_NOT_SET);
+          perm.setPermission(LOCATION_DATA, PermissionType.PERMISSION_NOT_SET);
+          mSitesPermissions.remove(perm);
+
+          View view = findViewById(R.id.sites_list);
+          if (view != null) {
+            ListView listView = (ListView) view;
+            ListAdapter listAdapter = listView.getAdapter();
+            if (listAdapter != null) {
+              SettingsAdapter settingsAdapter = (SettingsAdapter) listAdapter;
+              settingsAdapter.notifyDataSetChanged();
+            }
+          }
+        }
+      };
+      button.setTag(perms);
+      button.setOnClickListener(listener);
+    }
+
+    public View getView(int position, View convertView, ViewGroup parent) {
+      View row = convertView;
+      if (row == null) { // no cached view, we create one
+        LayoutInflater inflater = (LayoutInflater) getSystemService(
+            Context.LAYOUT_INFLATER_SERVICE);
+        row = inflater.inflate(R.layout.gears_dialog_settings_row, null);
+      }
+
+      OriginPermissions perms = (OriginPermissions) mItems.get(position);
+
+      View nameView = row.findViewById(R.id.origin_name);
+      if (nameView != null) {
+        TextView originName = (TextView) nameView;
+        originName.setText(perms.getOrigin());
+      }
+
+      View removeButtonView = row.findViewById(R.id.origin_remove);
+      if (removeButtonView != null) {
+        Button removeButton = (Button) removeButtonView;
+        setRemoveButton(removeButton, perms);
+      }
+
+      for (int i = 0; i < mPermissions.size(); i++) {
+        PermissionType type = mPermissions.get(i);
+        int rowRsc = type.getRowRsc();
+        int allowedButtonRsc = type.getAllowedButtonRsc();
+        int deniedButtonRsc = type.getDeniedButtonRsc();
+
+        View rowView = row.findViewById(rowRsc);
+        if (rowView != null) {
+          int perm = perms.getPermission(type);
+          if (perm != PermissionType.PERMISSION_NOT_SET) {
+            createAndSetButtonListener(row.findViewById(allowedButtonRsc),
+                perms, type, PermissionController.ALLOWED_BUTTON);
+            createAndSetButtonListener(row.findViewById(deniedButtonRsc),
+                perms, type, PermissionController.DENIED_BUTTON);
+            rowView.setVisibility(View.VISIBLE);
+          } else {
+            rowView.setVisibility(View.GONE);
+          }
+        }
+      }
+
+      return row;
+    }
+  }
+
+  /**
+   * Utility method used in debug mode to print the list of
+   * permissions (original values and current values).
+   */
+  public void printPermissions() {
+    Log.v(TAG, "Original Permissions: ");
+    for (int i = 0; i < mOriginalPermissions.size(); i++) {
+      OriginPermissions p = mOriginalPermissions.get(i);
+      p.print();
+    }
+    Log.v(TAG, "Current Permissions: ");
+    for (int i = 0; i < mSitesPermissions.size(); i++) {
+      OriginPermissions p = mSitesPermissions.get(i);
+      p.print();
+    }
+  }
+
+  /**
+   * Utility method used by the settings dialog, signaling
+   * the user the settings have been modified.
+   * We reflect this by enabling the Allow button (disabled
+   * by default).
+   */
+  public void signalChanges() {
+    View view = findViewById(R.id.button_allow);
+    if (view != null) {
+      Button button = (Button) view;
+      button.setEnabled(true);
+    }
+    mChanges = true;
+  }
+
+  /**
+   * Computes the difference between the original permissions and the
+   * current ones. Returns a json-formatted string.
+   * It is used by the Settings dialog.
+   */
+  public String computeDiff(boolean modif) {
+    String ret = null;
+    try {
+      JSONObject results = new JSONObject();
+      JSONArray permissions = new JSONArray();
+
+      for (int i = 0; modif && i < mOriginalPermissions.size(); i++) {
+        OriginPermissions original = mOriginalPermissions.get(i);
+        OriginPermissions current = mCurrentPermissions.get(i);
+        JSONObject permission = new JSONObject();
+        boolean modifications = false;
+
+        for (int j = 0; j < mPermissions.size(); j++) {
+          PermissionType type = mPermissions.get(j);
+
+          if (current.getPermission(type) != original.getPermission(type)) {
+            JSONObject state = new JSONObject();
+            state.put("permissionState", current.getPermission(type));
+            permission.put(type.getName(), state);
+            modifications = true;
+          }
+        }
+
+        if (modifications) {
+          permission.put("name", current.getOrigin());
+          permissions.put(permission);
+        }
+      }
+      results.put("modifiedOrigins", permissions);
+      ret = results.toString();
+    } catch (JSONException e) {
+      Log.e(TAG, "JSON exception ", e);
+    }
+    return ret;
+  }
+
+  public String closeDialog(int closingType) {
+    String ret = null;
+    switch (closingType) {
+      case ALWAYS_DENY:
+        ret = "{\"allow\": false }";
+        break;
+      case ALLOW:
+        ret = computeDiff(true);
+        break;
+      case DENY:
+        ret = computeDiff(false);
+        break;
+    }
+
+    if (mDebug) {
+      printPermissions();
+    }
+
+    return ret;
+  }
+
+}
diff --git a/src/com/android/browser/GearsShortcutDialog.java b/src/com/android/browser/GearsShortcutDialog.java
new file mode 100644
index 0000000..deede12
--- /dev/null
+++ b/src/com/android/browser/GearsShortcutDialog.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.Activity;
+import android.os.Handler;
+import android.util.Log;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * Gears Shortcut dialog
+ */
+class GearsShortcutDialog extends GearsBaseDialog {
+
+  private static final String TAG = "GearsPermissionsDialog";
+
+  private final String ICON_16 = "icon16x16";
+  private final String ICON_32 = "icon32x32";
+  private final String ICON_48 = "icon48x48";
+  private final String ICON_128 = "icon128x128";
+
+  public GearsShortcutDialog(Activity activity,
+                             Handler handler,
+                             String arguments) {
+    super (activity, handler, arguments);
+  }
+
+  public void setup() {
+    inflate(R.layout.gears_dialog_permission, R.id.panel_content);
+    setupButtons(R.string.shortcut_button_alwaysdeny,
+                 R.string.shortcut_button_allow,
+                 R.string.shortcut_button_deny);
+
+    View contentBorder = findViewById(R.id.content_border);
+    if (contentBorder != null) {
+      contentBorder.setBackgroundResource(R.color.shortcut_border);
+    }
+    View contentBackground = findViewById(R.id.content_background);
+    if (contentBackground != null) {
+      contentBackground.setBackgroundResource(R.color.shortcut_background);
+    }
+
+    try {
+      JSONObject json = new JSONObject(mDialogArguments);
+
+      String iconUrl = pickIconToRender(json);
+      if (iconUrl != null) {
+        downloadIcon(iconUrl);
+      }
+
+      setupDialog();
+
+      setLabel(json, "name", R.id.origin_title);
+      setLabel(json, "link", R.id.origin_subtitle);
+      setLabel(json, "description", R.id.origin_message);
+    } catch (JSONException e) {
+      Log.e(TAG, "JSON exception", e);
+    }
+  }
+
+  public void setupDialog(TextView message, ImageView icon) {
+    message.setText(R.string.shortcut_message);
+    icon.setImageResource(R.drawable.gears_icon_48x48);
+  }
+
+  /**
+   * Utility method to validate an icon url. Used in the
+   * shortcut dialog.
+   */
+  boolean validIcon(JSONObject json, String name) {
+    try {
+      if (json.has(name)) {
+        String str = json.getString(name);
+        if (str.length() > 0) {
+          return true;
+        }
+      }
+    } catch (JSONException e) {
+      Log.e(TAG, "JSON exception", e);
+    }
+    return false;
+  }
+
+
+  /**
+   * Utility method to pick the best indicated icon
+   * from the dialogs' arguments. Used in the
+   * shortcut dialog.
+   */
+  String pickIconToRender(JSONObject json) {
+    try {
+      if (validIcon(json, ICON_48)) { // ideal size
+        mChoosenIconSize = 48;
+        return json.getString(ICON_48);
+      } else if (validIcon(json, ICON_32)) {
+        mChoosenIconSize = 32;
+        return json.getString(ICON_32);
+      } else if (validIcon(json, ICON_128)) {
+        mChoosenIconSize = 128;
+        return json.getString(ICON_128);
+      } else if (validIcon(json, ICON_16)) {
+        mChoosenIconSize = 16;
+        return json.getString(ICON_16);
+      }
+    } catch (JSONException e) {
+      Log.e(TAG, "JSON exception", e);
+    }
+    mChoosenIconSize = 0;
+    return null;
+  }
+
+  public String closeDialog(int closingType) {
+    String ret = null;
+    switch (closingType) {
+      case ALWAYS_DENY:
+        ret = "{\"allow\": false, \"permanently\": true }";
+        break;
+      case ALLOW:
+        ret = "{\"allow\": true, \"locations\": 0 }";
+        break;
+      case DENY:
+        ret = null;
+        break;
+    }
+    return ret;
+  }
+
+}
diff --git a/src/com/android/browser/ImageAdapter.java b/src/com/android/browser/ImageAdapter.java
index e6eaa75..b4c1209 100644
--- a/src/com/android/browser/ImageAdapter.java
+++ b/src/com/android/browser/ImageAdapter.java
@@ -17,18 +17,20 @@
 package com.android.browser;
 
 import android.app.AlertDialog;
+import android.content.Context;
 import android.content.DialogInterface;
+import android.content.res.Configuration;
+import android.content.res.Resources;
 import android.database.DataSetObserver;
 import android.graphics.Color;
 import android.view.KeyEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.LayoutInflater;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
 import android.webkit.WebView;
-import android.widget.*;
+import android.widget.ImageView;
+import android.widget.ListAdapter;
+import android.widget.TextView;
 
 import java.util.ArrayList;
 
@@ -38,31 +40,25 @@
 public class ImageAdapter implements ListAdapter {
     
     ArrayList<TabControl.Tab> mItems;  // Items shown in the grid
-    ArrayList<DataSetObserver> mDataObservers; // Data change listeners
-    Context mContext;  // Context to use to inflate views
-    boolean mMaxedOut;
-    boolean mLandScape;
-    ImageGrid mImageGrid;
-    boolean mIsLive;
+    private ArrayList<DataSetObserver> mDataObservers; // Data change listeners
+    private Context mContext;  // Context to use to inflate views
+    private boolean mMaxedOut;
+    private ImageGrid mImageGrid;
+    private boolean mIsLive;
+    private int mTabHeight;
 
-    ImageAdapter(Context context, ImageGrid grid,
-            ArrayList<TabControl.Tab> items, boolean live) {
+    ImageAdapter(Context context, ImageGrid grid, boolean live) {
         mContext = context;
         mIsLive = live;
-        if (items == null) {
-            mItems = new ArrayList<TabControl.Tab>();
-        } else {
-            mItems = items;
-            if (items.size() == TabControl.MAX_TABS) {
-                mMaxedOut = true;
-            }
-        }
+        mItems = new ArrayList<TabControl.Tab>();
         mImageGrid = grid;
         mDataObservers = new ArrayList<DataSetObserver>();
-        mLandScape = context.getResources().getConfiguration().orientation ==
-                Configuration.ORIENTATION_LANDSCAPE;
     }
-    
+
+    void heightChanged(int newHeight) {
+        mTabHeight = newHeight;
+    }
+
     /**
      *  Whether the adapter is at its limit, determined by TabControl.MAX_TABS
      *
@@ -197,9 +193,9 @@
             TabControl.Tab t = mItems.get(position);
             img.setTab(t);
             tv.setText(t.getTitle());
-            // Do not put the 'X' for a single tab or if the tab picker isn't
-            // "live" (meaning the user cannot click on a tab)
-            if (mItems.size() == 1 || !mIsLive) {
+            // Do not put the 'X' if the tab picker isn't "live" (meaning the
+            // user cannot click on a tab)
+            if (!mIsLive) {
                 close.setVisibility(View.GONE);
             } else {
                 close.setVisibility(View.VISIBLE);
@@ -218,10 +214,9 @@
             tv.setText(R.string.new_window);
             close.setVisibility(View.GONE);
         }
-        if (mLandScape) {
-            ViewGroup.LayoutParams lp = img.getLayoutParams();
-            lp.width = 225;
-            lp.height = 120;
+        ViewGroup.LayoutParams lp = img.getLayoutParams();
+        if (lp.height != mTabHeight) {
+            lp.height = mTabHeight;
             img.requestLayout();
         }
         return v;
@@ -245,7 +240,7 @@
                 };
         new AlertDialog.Builder(mContext)
                 .setTitle(R.string.close)
-                .setIcon(R.drawable.ssl_icon)
+                .setIcon(android.R.drawable.ic_dialog_alert)
                 .setMessage(R.string.close_window)
                 .setPositiveButton(R.string.ok, confirm)
                 .setNegativeButton(R.string.cancel, null)
@@ -257,7 +252,6 @@
      */
     public void registerDataSetObserver(DataSetObserver observer) {
         mDataObservers.add(observer);
-
     }
 
     /* (non-Javadoc)
@@ -272,9 +266,8 @@
      */
     public void unregisterDataSetObserver(DataSetObserver observer) {
         mDataObservers.remove(observer);
-
     }
-    
+
     /**
      * Notify all the observers that a change has happened.
      */
diff --git a/src/com/android/browser/ImageGrid.java b/src/com/android/browser/ImageGrid.java
index e0a5c89..9eccb16 100644
--- a/src/com/android/browser/ImageGrid.java
+++ b/src/com/android/browser/ImageGrid.java
@@ -39,6 +39,7 @@
     private Listener     mListener;
     private ImageAdapter mAdapter;
     private boolean      mIsLive;
+    private static final int SPACING = 10;
     public static final int CANCEL  = -99;
     public static final int NEW_TAB = -1;
 
@@ -58,23 +59,18 @@
             setOnItemClickListener(this);
             setOnCreateContextMenuListener(this);
         }
-        if (Config.DEBUG && l == null) {
-            throw new AssertionError();
-        }
         mListener = l;
 
-        mAdapter = new ImageAdapter(context, this, null, live);
+        mAdapter = new ImageAdapter(context, this, live);
         setAdapter(mAdapter);
 
-        // android.R.color.window_background seems to return transparent?
-//        setBackgroundColor(android.R.color.window_background);
         setBackgroundColor(0xFF000000);
 
-        setPadding(0, 10, 0, 10);
-        setVerticalSpacing(10);
-        setHorizontalSpacing(10);
+        setVerticalSpacing(SPACING);
+        setHorizontalSpacing(SPACING);
         setNumColumns(2);
         setStretchMode(GridView.STRETCH_COLUMN_WIDTH);
+        setSelector(android.R.drawable.gallery_thumb);
     }
 
     @Override
@@ -189,11 +185,6 @@
                 position--;
             }
             menu.setHeaderTitle(mAdapter.mItems.get(position).getTitle());
-
-            // If we only have one active tab left, don't add the remove option
-            if (mAdapter.mItems.size() <= 1) {
-                menu.findItem(R.id.remove_tab_menu_id).setVisible(false);
-            }
         }
     }
 
@@ -212,10 +203,13 @@
     
     @Override
     protected void onSizeChanged(int w, int h, int oldw, int oldh) {
-        // Called when our orientation changes.  Replace the adapter with one
-        // that has the appropriate dimensions.
-        mAdapter = new ImageAdapter(mContext, this, mAdapter.mItems, mIsLive);
-        setAdapter(mAdapter);
+        // Called when our orientation changes. Tell the adapter about the new
+        // size. Compute the individual tab height by taking the grid height
+        // and subtracting the SPACING. Then subtract the list padding twice
+        // (once for each tab on screen) and divide the remaining height by 2.
+        int tabHeight = (h - SPACING
+                - 2 * (getListPaddingTop() + getListPaddingBottom())) / 2;
+        mAdapter.heightChanged(tabHeight);
         super.onSizeChanged(w, h, oldw, oldh);
     }
 
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index 66adf3c..01ef3a8 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -35,6 +35,7 @@
 import android.widget.FrameLayout;
 import android.widget.ImageButton;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Vector;
 
@@ -169,9 +170,12 @@
         // children.
         private Vector<Tab> mChildTabs;
 
+        private Boolean mCloseOnExit;
+
         // Construct a new tab
-        private Tab(WebView w) {
+        private Tab(WebView w, boolean closeOnExit) {
             mMainView = w;
+            mCloseOnExit = closeOnExit;
         }
 
         /**
@@ -236,6 +240,17 @@
 
         private void setParentTab(Tab parent) {
             mParentTab = parent;
+            // This tab may have been freed due to low memory. If that is the
+            // case, the parent tab index is already saved. If we are changing
+            // that index (most likely due to removing the parent tab) we must
+            // update the parent tab index in the saved Bundle.
+            if (mSavedState != null) {
+                if (parent == null) {
+                    mSavedState.remove(PARENTTAB);
+                } else {
+                    mSavedState.putInt(PARENTTAB, getTabIndex(parent));
+                }
+            }
         }
         
         /**
@@ -273,8 +288,20 @@
         public Tab getParentTab() {
             return mParentTab;
         }
+
+        /**
+         * Return whether this tab should be closed when it is backing out of
+         * the first page.
+         * @return TRUE if this tab should be closed when exit.
+         */
+        public boolean closeOnExit() {
+            return mCloseOnExit;
+        }
     };
 
+    // Directory to store thumbnails for each WebView.
+    private final File mThumbnailDir;
+
     /**
      * Construct a new TabControl object that interfaces with the given
      * BrowserActivity instance.
@@ -286,6 +313,15 @@
         mInflateService =
                 ((LayoutInflater) activity.getSystemService(
                         Context.LAYOUT_INFLATER_SERVICE));
+        mThumbnailDir = activity.getDir("thumbnails", 0);
+    }
+
+    File getThumbnailDir() {
+        return mThumbnailDir;
+    }
+
+    BrowserActivity getBrowserActivity() {
+        return mActivity;
     }
 
     /**
@@ -368,7 +404,7 @@
      * @return The newly createTab or null if we have reached the maximum
      *         number of open tabs.
      */
-    Tab createNewTab() {
+    Tab createNewTab(boolean closeOnExit) {
         int size = mTabs.size();
         // Return false if we have maxed out on tabs
         if (MAX_TABS == size) {
@@ -382,7 +418,7 @@
         final BrowserSettings s = BrowserSettings.getInstance();
         s.addObserver(w.getSettings()).update(s, null);
         // Create a new tab and add it to the tab list
-        Tab t = new Tab(w);
+        Tab t = new Tab(w, closeOnExit);
         mTabs.add(t);
         return t;
     }
@@ -418,6 +454,26 @@
         
         // Remove it from our list of tabs.
         mTabs.remove(t);
+
+        // The tab indices have shifted, update all the saved state so we point
+        // to the correct index.
+        for (Tab tab : mTabs) {
+            if (tab.mChildTabs != null) {
+                for (Tab child : tab.mChildTabs) {
+                    child.setParentTab(tab);
+                }
+            }
+        }
+
+
+        // This tab may have been pushed in to the background and then closed.
+        // If the saved state contains a picture file, delete the file.
+        if (t.mSavedState != null) {
+            if (t.mSavedState.containsKey("picture")) {
+                new File(t.mSavedState.getString("picture")).delete();
+            }
+        }
+
         // Remove it from the queue of viewed tabs.
         mTabQueue.remove(t);
         mCurrentTab = -1;
@@ -473,6 +529,8 @@
     private static final String CURRTAB = "currentTab";
     private static final String CURRURL = "currentUrl";
     private static final String CURRTITLE = "currentTitle";
+    private static final String CLOSEONEXIT = "closeonexit";
+    private static final String PARENTTAB = "parentTab";
 
     /**
      * Save the state of all the Tabs.
@@ -506,7 +564,7 @@
             final int currentTab = inState.getInt(CURRTAB, -1);
             for (int i = 0; i < numTabs; i++) {
                 if (i == currentTab) {
-                    Tab t = createNewTab();
+                    Tab t = createNewTab(false);
                     // Me must set the current tab before restoring the state
                     // so that all the client classes are set.
                     setCurrentTab(t);
@@ -518,7 +576,7 @@
                 } else {
                     // Create a new tab and don't restore the state yet, add it
                     // to the tab list
-                    Tab t = new Tab(null);
+                    Tab t = new Tab(null, false);
                     t.mSavedState = inState.getBundle(WEBVIEW + i);
                     if (t.mSavedState != null) {
                         t.mUrl = t.mSavedState.getString(CURRURL);
@@ -528,6 +586,21 @@
                     mTabQueue.add(t);
                 }
             }
+            // Rebuild the tree of tabs. Do this after all tabs have been
+            // created/restored so that the parent tab exists.
+            for (int i = 0; i < numTabs; i++) {
+                final Bundle b = inState.getBundle(WEBVIEW + i);
+                final Tab t = getTab(i);
+                if (b != null && t != null) {
+                    final int parentIndex = b.getInt(PARENTTAB, -1);
+                    if (parentIndex != -1) {
+                        final Tab parent = getTab(parentIndex);
+                        if (parent != null) {
+                            parent.addChildTab(t);
+                        }
+                    }
+                }
+            }
         }
         return true;
     }
@@ -801,9 +874,16 @@
             }
             final Bundle b = new Bundle();
             final WebBackForwardList list = w.saveState(b);
+            if (list != null) {
+                final File f = new File(mThumbnailDir, w.hashCode()
+                        + "_pic.save");
+                if (w.savePicture(b, f)) {
+                    b.putString("picture", f.getPath());
+                }
+            }
 
             // Store some extra info for displaying the tab in the picker.
-            final WebHistoryItem item = 
+            final WebHistoryItem item =
                     list != null ? list.getCurrentItem() : null;
             populatePickerData(t, item);
             if (t.mUrl != null) {
@@ -812,6 +892,12 @@
             if (t.mTitle != null) {
                 b.putString(CURRTITLE, t.mTitle);
             }
+            b.putBoolean(CLOSEONEXIT, t.mCloseOnExit);
+
+            // Remember the parent tab so the relationship can be restored.
+            if (t.mParentTab != null) {
+                b.putInt(PARENTTAB, getTabIndex(t.mParentTab));
+            }
 
             // Remember the saved state.
             t.mSavedState = b;
@@ -832,9 +918,15 @@
         if (list == null) {
             return false;
         }
+        if (b.containsKey("picture")) {
+            final File f = new File(b.getString("picture"));
+            w.restorePicture(b, f);
+            f.delete();
+        }
         t.mSavedState = null;
         t.mUrl = null;
         t.mTitle = null;
+        t.mCloseOnExit = b.getBoolean(CLOSEONEXIT);
         return true;
     }
 }
