--- a/options.js
+++ b/options.js
@@ -17,57 +17,197 @@
 
 document.addEventListener("DOMContentLoaded", onLoadPage, false);
 
+var urlRules = {
+    inc: [],
+    exc: []
+};
+
+var urlExcludeRules = [];
+
 function onLoadPage(event)
 {
     /* Load options from local storage */
-    
+    console.log("ONLOADPAGE");
     chrome.storage.local.get(null,
-    function(object)
-    {
-        checkboxes = ["options-autosave",
-                      "options-showsubmenu",
-                      "options-httpsalso", 
-                      "options-notify"];
+    function(object) {
+        var i, t;
+        var checkboxes = ["options-autosave",
+                          "options-showsubmenu",
+                          "options-httpsalso", 
+                          "options-notify"];
         for (i = 0; i < checkboxes.length; i++) {
-            document.getElementById(checkboxes[i].checked = object[checkboxes[i]]);
-        }
+            console.log(checkboxes[i] + " will be " + object[checkboxes[i]]);
+            document.getElementById(checkboxes[i]).checked =
+                object[checkboxes[i]];
+        }
+        var keys = ["options-url-include", "options-url-exclude"];
+        var sks = ["inc", "exc"];
+        for (t = 0; t < 2; t++) {
+            var key = keys[t];
+            var sk = sks[t];
+            if (key in object) {
+                for (i = 0; i < object[key].length; i++) {
+                    urlRules[sk].push(object[key][i]);
+                }
+            }
+        }
+        updateRulesTables();
     });
-    
-    /* Add listener for click on show warning checkbox */
-    
-    document.getElementById("options-autosave").addEventListener("click", onClickAutosave, false);
-    
-    /* Add listener for click on save button */
-    
-    document.getElementById("options-save-button").addEventListener("click", onClickSave,false);
+
+    document.getElementById("include-button-add").addEventListener(
+        "click", onClickIncludeAdd, false);
+    document.getElementById("include-button-delete").addEventListener(
+        "click", onClickIncludeDelete, false);
+    document.getElementById("exclude-button-add").addEventListener(
+        "click", onClickExcludeAdd, false);
+    document.getElementById("exclude-button-delete").addEventListener(
+        "click", onClickExcludeDelete, false);
+
+    document.getElementById("options-autosave").addEventListener(
+        "click", onClickAutosave, false);
+    
+    document.getElementById("options-save-button").addEventListener(
+        "click", onClickSave, false);
+
+    document.removeEventListener("DOMContentLoaded", onLoadPage, false);
+}
+
+function updateRulesTables()
+{
+    var i, t;
+    var caption = "Include rules";
+    var keys = ["options-url-include", "options-url-exclude"];
+    var sks = ["inc", "exc"];
+    for (t = 0; t < 2; t++) {
+        var key = keys[t];
+        var sk = sks[t];
+        var html = '<caption>' + caption + '</caption>\n' +
+            '<tr><th>' + 
+            '<input id="ckb-' + sk + '-all" type="checkbox"/>' +
+            '</th><th>Name</th><th>Pattern</th>' +
+            '<th>PatternType</th></tr>';
+        for (i = 0; i < urlRules[sk].length; i++) {
+            html += '<tr><td>'+
+                '<input id="ckb-' + sk + '-' + i + '" type="checkbox"/>' +
+                '</td>';
+            html += '<td>' + urlRules[sk][i][0] + '</td>';
+            html += '<td>' + urlRules[sk][i][1] + '</td>';
+            html += '<td>' + urlRules[sk][i][2] + '</td></tr>';
+        }
+        if (urlRules[sk].length == 0) {
+            html += '<tr><td>'+
+                '<input id="ckb-' + sk + '-0" type="checkbox"/></td>';
+            html += '<td> </td><td> </td><td> </td></tr>';
+        }
+        console.log("Elt for key "+key + " is " + document.getElementById(key));
+        console.log("html is " + html);
+        document.getElementById(key).innerHTML = html;
+        caption = "Exclude rules";
+    }
+
+    document.getElementById("ckb-inc-all").addEventListener(
+        "click",  onClickIncludeSelectAll, false);
+    document.getElementById("ckb-exc-all").addEventListener(
+        "click",  onClickExcludeSelectAll, false);
+}
+
+function onClickRuleAdd(key, sk)
+{
+    var name = document.getElementById(key + "-input-name").value;
+    var val = document.getElementById(key + "-input-value").value;
+    var tp = document.getElementById(key + "-select-type").value;
+    console.log('onClickRuleAdd: urlRules['+ sk +'].push(['+ name + ', ' + val +
+                ', ' + tp + '])')
+    urlRules[sk].push([name, val, tp]);
+    onClickSave();
+}
+function onClickRuleDelete(sk)
+{
+    var i;
+    var newlist = [];
+    for (i = 0; i < urlRules[sk].length; i++) {
+        var id = 'ckb-' + sk + '-' + i;
+        if (! document.getElementById(id).checked) {
+            newlist.push(urlRules[sk][i]);
+        }
+    }
+    urlRules[sk] = newlist;
+    onClickSave();
+}
+function onClickRuleSelectAll(sk)
+{
+    var i;
+    var ck = document.getElementById('ckb-' + sk + '-all').checked;
+    for (i = 0; i < urlRules[sk].length; i++) {
+        document.getElementById('ckb-' + sk + '-' + i).checked = ck;
+    }
+}
+
+function onClickIncludeAdd(event)
+{
+    onClickRuleAdd('include', 'inc');
+}
+function onClickIncludeDelete(event)
+{
+    onClickRuleDelete('inc');
+}
+function onClickIncludeSelectAll(event)
+{
+    onClickRuleSelectAll('inc');
+}
+function onClickExcludeAdd(event)
+{
+    onClickRuleAdd('exclude', 'exc');
+}
+function onClickExcludeDelete(event)
+{
+    onClickRuleDelete('exc');
+}
+function onClickExcludeSelectAll(event)
+{
+    onClickRuleSelectAll('exc');
 }
 
 /* Enable or Disable options */
 function onClickAutosave(event)
 {
-    document.getElementById("options-httpsalso").disabled = !document.getElementById("options-autosave").checked;
+    document.getElementById("options-httpsalso").disabled =
+        !document.getElementById("options-autosave").checked;
 }
 
 /* Save options */
 function onClickSave(event)
 {
-    /* Save options to local storage */
-    
-    chrome.storage.local.set(
-    {
-        "options-showsubmenu": document.getElementById("options-showsubmenu").checked,
-        "options-autosave": document.getElementById("options-autosave").checked,
-        "options-httpsalso": document.getElementById("options-httpsalso").checked,
-        "options-notify": document.getElementById("options-notify").checked,
-    });
+    var checkboxnames = ["options-autosave",
+                         "options-showsubmenu",
+                         "options-httpsalso", 
+                         "options-notify"];
+    var i, t;
+    var opts = {};
+    
+    for (i = 0; i < checkboxnames.length; i++) {
+        opts[checkboxnames[i]] =
+            document.getElementById(checkboxnames[i]).checked;
+    }
+    var keys = ["options-url-include", "options-url-exclude"];
+    var sks = ["inc", "exc"];
+    for (t = 0; t < 2; t++) {
+        var key = keys[t];
+        var sk = sks[t];
+        opts[key] = [];
+        for (i = 0; i < urlRules[sk].length; i++) {
+            opts[key].push(urlRules[sk][i]);
+        }
+    }
+    
+    chrome.storage.local.set(opts);
     
     /* Display saved status for short period */
-    
-    document.getElementById("options-save-status").style.setProperty("visibility","visible","");
-    
-    setTimeout(function()
-    {
-        document.getElementById("options-save-status").style.setProperty("visibility","hidden","");
-    }
-    ,1000);
-}
+    document.getElementById("options-save-status").style.setProperty(
+        "visibility", "visible", "");
+    
+    setTimeout(function() {
+        document.getElementById("options-save-status").style.setProperty(
+            "visibility", "hidden", "");
+    }, 1000);
+}