diff --git a/.gitignore b/.gitignore
index 6b44da956590a17c07f936d76227a3fdc2ddba8a..a67826d271424536013a3b7df887d810e20b9328 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,5 @@ bjcp-2015-styleguide-de.xml
 bjcp-2015-styleguide-orig.xml
 bjcp-2015-styleguide-de.html
 bjcp-2015-styleguide-orig.html
-web/edit.html
 cache/
 orig/
diff --git a/web/bjcp-styleguide-new.css b/web/bjcp-styleguide-new.css
deleted file mode 100644
index cdd6f3f4d8da4c3548ab6c1db0e52e26614022c3..0000000000000000000000000000000000000000
--- a/web/bjcp-styleguide-new.css
+++ /dev/null
@@ -1,328 +0,0 @@
-
-styleguide { 
-  font-family: Helvetica, Arial, Geneva, sans-serif;
-}
-
-styleguide chapter p, styleguide chapter h1, styleguide chapter h2, styleguide chapter h3, styleguide chapter h4, styleguide chapter ol, styleguide chapter ul, styleguide chapter table {
-    margin-left: 1em;
-}
-
-/* the following rules are copied from standard html rules */
-
-styleguide p {
-    display: block;
-    margin-block-start: 1em;
-    margin-block-end: 1em;
-    margin-inline-start: 0px;
-    margin-inline-end: 0px;
-}
-
-styleguide h2 {
-    display: block;
-    font-size: 1.5em;
-    margin-block-start: 0.83em;
-    margin-block-end: 0.83em;
-    margin-inline-start: 0px;
-    margin-inline-end: 0px;
-    font-weight: bold;
-}
-
-styleguide h3 {
-    display: block;
-    font-size: 1.17em;
-    margin-block-start: 1em;
-    margin-block-end: 1em;
-    margin-inline-start: 0px;
-    margin-inline-end: 0px;
-    font-weight: bold;
-}
-
-styleguide h4 {
-    display: block;
-    margin-block-start: 1.33em;
-    margin-block-end: 1.33em;
-    margin-inline-start: 0px;
-    margin-inline-end: 0px;
-    font-weight: bold;
-}
-
-styleguide ol {
-    display: block;
-    list-style-type: decimal;
-    margin-block-start: 1em;
-    margin-block-end: 1em;
-    margin-inline-start: 0px;
-    margin-inline-end: 0px;
-    padding-inline-start: 40px;
-}
-
-styleguide ul {
-    display: block;
-    list-style-type: disc;
-    margin-block-start: 1em;
-    margin-block-end: 1em;
-    margin-inline-start: 0px;
-    margin-inline-end: 0px;
-    padding-inline-start: 40px;
-}
-
-styleguide li {
-    display: list-item;
-    text-align: -webkit-match-parent;
-}
-
-styleguide table {
-    white-space: normal;
-    line-height: normal;
-    font-weight: normal;
-    font-size: medium;
-    font-variant-ligatures: normal;
-    font-variant-caps: normal;
-    font-variant-east-asian: normal;
-    font-variant-position: normal;
-    font-style: normal;
-    color: -webkit-text;
-    text-align: start;
-    display: table;
-    border-collapse: separate;
-    -webkit-border-horizontal-spacing: 2px;
-    -webkit-border-vertical-spacing: 2px;
-    border-top-color: gray;
-}
-
-styleguide tbody {
-    display: table-row-group;
-    vertical-align: middle;
-    border-top-color: inherit;
-    border-right-color: inherit;
-    border-bottom-color: inherit;
-    border-left-color: inherit;
-}
-
-styleguide tr {
-    display: table-row;
-    vertical-align: inherit;
-    border-top-color: inherit;
-    border-right-color: inherit;
-    border-bottom-color: inherit;
-    border-left-color: inherit;
-}
-
-styleguide td {
-    display: table-cell;
-    vertical-align: inherit;
-}
-
-/* end of copied css */
-
-
-styleguide p.list-item {
-  list-style-type: decimal;
-}
-
-styleguide category, styleguide subcategory {
-  margin-top:1em;
-  margin-bottom:1em;
-  margin-left:0em;
-  display: list-item;
-  list-style-position: inside;
-}
-
-styleguide p {
-    margin-top:1em;
-}
-
-styleguide b {
-  font-weight: bold;
-}
-
-styleguide i {
-  font-style: italic;
-}
-
-styleguide u {
-  text-decoration: underline;
-}
-
-styleguide category:before, styleguide subcategory:before {
-  content: attr(id);
-}
-styleguide name {
-  display: inline-block;
-  margin-bottom:1em;
-}
-styleguide description {
-  margin-left:1em;
-  display: block;
-}
-styleguide description p {
-  margin-top: 0;
-}
-
-styleguide overall-impression:before {
-  content: "Overall Impression: ";
-}
-styleguide aroma:before {
-  content: "Aroma: ";
-}
-styleguide appearance:before {
-  content: "Appearance: ";
-}
-styleguide flavor:before {
-  content: "Flavor: ";
-}
-styleguide mouthfeel:before {
-  content: "Mouthfeel: ";
-}
-styleguide comments:before {
-  content: "Comments: ";
-}
-styleguide history:before {
-  content: "History: ";
-}
-styleguide characteristic-ingredients:before {
-  content: "Characteristic Ingredients: ";
-}
-styleguide style-comparison:before {
-  content: "Style Comparison: ";
-}
-styleguide entry-instructions:before {
-  content: "Entry Instructions: ";
-}
-styleguide specs:before {
-  content: "Vital Statistics: ";
-}
-styleguide commercial-examples:before {
-  content: "Commercial Examples: ";
-}
-styleguide tags:before {
-  content: "Tags: ";
-}
-styleguide strength-classifications:before {
-  content: "Strength Classifications: ";
-}
-
-styleguide[lang="de"] overall-impression:before {
-  content: "Gesamteindruck: ";
-}
-styleguide aroma:before {
-  content: "Geruch: ";
-}
-styleguide appearance:before {
-  content: "Erscheinungsbild: ";
-}
-styleguide flavor:before {
-  content: "Geschmack: ";
-}
-styleguide mouthfeel:before {
-  content: "Mundgefühl: ";
-}
-styleguide comments:before {
-  content: "Kommentierung: ";
-}
-styleguide history:before {
-  content: "Geschichte: ";
-}
-styleguide characteristic-ingredients:before {
-  content: "Charakteristische Zutaten: ";
-}
-styleguide style-comparison:before {
-  content: "Stilvergleich: ";
-}
-styleguide entry-instructions:before {
-  content: "Einreichungshinweise: ";
-}
-styleguide specs:before {
-  content: "Technische Daten: ";
-}
-styleguide commercial-examples:before {
-  content: "Kommerzielle Beispiele: ";
-}
-styleguide tags:before {
-  content: "Tags: ";
-}
-styleguide strength-classifications:before {
-  content: "Stärkeklassifikation: ";
-}
-
-styleguide overall-impression,
-styleguide aroma,
-styleguide appearance,
-styleguide flavor,
-styleguide mouthfeel,
-styleguide comments,
-styleguide history,
-styleguide characteristic-ingredients,
-styleguide style-comparison,
-styleguide specs,
-styleguide entry-instructions,
-styleguide commercial-examples,
-styleguide tags,
-styleguide strength-classifications {
-  position: relative;
-  margin-left: 1em;
-  display: block;
-}
-styleguide overall-impression:before,
-styleguide aroma:before,
-styleguide appearance:before,
-styleguide flavor:before,
-styleguide mouthfeel:before,
-styleguide comments:before,
-styleguide history:before,
-styleguide characteristic-ingredients:before,
-styleguide style-comparison:before,
-styleguide specs:before,
-styleguide entry-instructions:before,
-styleguide commercial-examples:before,
-styleguide tags:before,
-styleguide strength-classifications:before {
-  font-weight: bold;
-}
-
-styleguide specs {
-    display: block;
-    padding: 1px;
-}
-styleguide specs * {
-    font-size: 0.8em;
-    width: 100px;
-}
-
-styleguide specs ibu:before {
-  content: "IBU: " attr(min) " – " attr(max);
-}
-styleguide specs srm:before {
-  content: "SRM: " attr(min) " – " attr(max);
-}
-styleguide specs og:before {
-  content: "OG: " attr(min) " – " attr(max);
-}
-styleguide specs fg:before {
-  content: "FG: " attr(min) " – " attr(max);
-}
-styleguide specs abv:before {
-  content: "ABV: " attr(min) " – " attr(max) "%";
-}
-styleguide specs ibu, styleguide specs srm, styleguide specs og, styleguide specs fg, styleguide specs abv {
-  border: solid 1px black;
-  width: 110px;
-  padding: 1px;
-  display: inline-block;
-}
-/*
-styleguide specs div {
-  display: inline-block;
-}
-styleguide specs div * {
-  padding: 1px 4px;
-  border: 1px solid;
-  display: inline-block;
-  width: 9em;
-}
-*/
-
-
-
-
-
diff --git a/web/edit-new.css b/web/edit-new.css
deleted file mode 100644
index 8ff349d575ffe921cc8703da396a4feb439efef4..0000000000000000000000000000000000000000
--- a/web/edit-new.css
+++ /dev/null
@@ -1,129 +0,0 @@
-
-.pell-content{
-  border-bottom: 1px solid black;
-}
-
-div#editor button[title="save"],
-div#editor button[title="cancel"] {
-  width: 70px;
-}
-div#editor {
-  display: none;
-  position: fixed;
-  width: 100%;
-  top: 0; 
-  left: 0;
-  right: 0;
-  text-align: center;
-  font-family: Helvetica, Arial, Geneva, sans-serif;
-}
-div#editor-inner {
-    background-color: white;
-    pointer-events: all;
-  text-align: left;
-  margin: 50 auto;
-  padding: 5px;
-  width: 80%;
-  z-index: 2;
-  border: 2px solid black;
-  background: #ddd;
-}
-div#editor-inner input {
-  background: white;
-}
-div#markup {
-  font-family: courier;
-}
-div#original {
-    margin:10px;
-}
-
-nav, *[onclick] {
-  cursor: pointer;
-}
-
-styleguide[orig="true"] * {
-  display:none;
-}
-
-
-
-
-
-
-
-styleguide category:before, styleguide subcategory:before {
-    white-space: pre;
-    content: "    " attr(id);
-}
-
-styleguide name {
-    display: inline-block;
-    margin-bottom:1em;
-}
-
-styleguide chapter, styleguide category, styleguide subcategory {
-    margin-top:1em;
-    margin-bottom:1em;
-    margin-left:0em;
-    display: block;
-}
-styleguide category.collapsed, styleguide subcategory.collapsed {
-    height: 1.3em;
-    overflow: hidden;
-}
-styleguide chapter.collapsed {
-    height: 1.3em;
-    overflow: hidden;
-    padding: 0px;
-}
-styleguide category.collapsed subcategory, styleguide subcategory.collapsed subcategory {
-    display: none;
-}
-
-styleguide name {
-    margin-left:1em;
-}
-
-styleguide h2 {
-    margin-top: 0px;
-    margin-bottom: 0px;
-}
-
-styleguide h2 { font-size: large; }
-styleguide h3 { font-size: medium; }
-styleguide h4 { font-size: small; }
-
-styleguide nav {
-    display:inline-block;
-    position: absolute;
-    left:5px;
-    overflow: hidden;
-    margin-left:0em;
-    width:20px;
-    height:18px;
-    transform: rotate(0deg);
-    transition: -webkit-transform 0.3s cubic-bezier(0.19, 1, 0.22, 1);
-    transition: transform 0.3s cubic-bezier(0.19, 1, 0.22, 1);
-    background-position: center;
-    background-size: 0.75rem auto;
-    background-repeat: no-repeat;
-    background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 320 512%27%3E%3Cpath fill=%27%23003f57%27 d=%27M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z%27/%3E%3C/svg%3E");
-}
-
-styleguide chapter.collapsed nav, styleguide category.collapsed nav, styleguide subcategory.collapsed nav {
-    transform: rotate(-90deg);
-}
-
-styleguide *[source="original"] {
-    background-color: #ffd0d0;
-}
-styleguide *[source="lang-file"] {
-    background-color: #dfffdf;
-}
-styleguide *[source="this-session"] {
-    background-color: #b0ffb0;
-}
-styleguide nav:not([todo="0"]) {
-    background-color: #ffb0b0;
-}
diff --git a/web/edit-new.js b/web/edit-new.js
deleted file mode 100644
index 53f691c3e529583cd70588b9d106e7eeb11a8e95..0000000000000000000000000000000000000000
--- a/web/edit-new.js
+++ /dev/null
@@ -1,231 +0,0 @@
-
-const editor = document.getElementById("editor");
-const pell = window.pell;
-const pelleditor = document.getElementById("pelleditor");
-const original = document.getElementById("original");
-const markup = document.getElementById("markup");
-const render = document.getElementById("render");
-const author = document.getElementById("author");
-const editstyleid = document.getElementById("editstyleid");
-const editstylename = document.getElementById("editstylename");
-const editelemname = document.getElementById("editelemname");
-const lastdate = document.getElementById("lastdate");
-const lastauthor = document.getElementById("lastauthor");
-
-var edit_id;
-var edit_element;
-var element_name;
-
-pell.init({
-    element: pelleditor,
-    defaultParagraphSeparator: "p",
-    actions: [
-	'bold',
-	'italic',
-	'underline',
-	{
-	    name: 'link',
-	    result: () => {
-		const idref = window.prompt('Enter the target category ID');
-		if (idref) {
-		    var selection = document.getSelection();
-		    if (selection == "") {
-			text = window.prompt('Enter visible link text');
-			pell.exec('insertHTML', '<a href="#' + idref + '">' + text + '</a>');
-		    } else {
-			pell.exec('createLink', "#" + idref);
-		    }
-		}
-	    }
-	},
-	{
-	    name: 'save',
-	    icon: '<div style="background-color:pink;">save</div>',
-	    title: 'save',
-	    result: () => {
-
-		text = pelleditor.content.innerHTML;
-		text = text.replace(/&nbsp;/g, " ");
-		if (element_name != "description") {
-		    text = text.replace(/<p>/g, " ");
-		    text = text.replace(/<\/p>/g, " ");
-		}
-		text = text.replace(/<br>/g, " ");
-		text = text.replace(/\n/g,"");
-		text = text.replace(/  */g, " ");
-		text = text.replace(/^ */,"");
-		text = text.replace(/ *$/,"");
-		
-		var xhr = new XMLHttpRequest();
-		
-		xhr.onreadystatechange = function() {
-		    if (xhr.readyState === 4) {
-			editor.style.display = "none";
-			edit_element.innerHTML = text;
-			edit_element.setAttribute("date", "today");
-			edit_element.setAttribute("author", "you");
-			edit_element.setAttribute("addr", "local");
-			edit_element.setAttribute("source", "this-session");
-		    }
-		}
-		
-		user = author.value;
-		xhr.open('POST', "save.cgi?id=" + edit_id + "&elem=" + element_name + "&user=" + user, true);
-		xhr.setRequestHeader('Content-Type','text/xml; charset=UTF-8');
-		xhr.responseType = "text";
-		xhr.send(text);
-	    }
-	},
-	{
-	    name: 'cancel',
-	    icon: '<div style="background-color:pink;">cancel</div>',
-	    title: 'cancel',
-	    result: () => {
-		editor.style.display = "none";
-	    }
-	},
-    ],
-    onChange: (html) => {
-	text = html;
-	text = text.replace(/&nbsp;/g, " ");
-	if (element_name != "description") {
-	    text = text.replace(/<p>/g, " ");
-	    text = text.replace(/<\/p>/g, " ");
-	}
-	text = text.replace(/<br>/g, " ");
-	text = text.replace(/  */g, " ");
-	text = text.replace(/^ */,"");
-	text = text.replace(/ *$/,"");
-	if (markup) {
-	    markup.innerText = text;
-	}
-	if (render) {
-	    render.innerHTML = text;
-	}
-    }
-})
-
-
-
-var styleguide;
-var styleuide_orig;
-var styleguide_node;
-
-
-
-// load styleguide and trigger rendering
-var xhr1 = new XMLHttpRequest();
-xhr1.onreadystatechange = function() {
-    if (xhr1.readyState === 4) {
-	styleguide = xhr1.responseXML.querySelector("styleguide");
-	renderStyleguide(styleguide);
-    }
-}
-xhr1.open('GET', document.querySelector('link[rel="styleguide"]').href, true);
-xhr1.setRequestHeader('Content-Type','text/xml; charset=UTF-8');
-xhr1.responseType = "document";
-xhr1.send();
-
-// load styleguide_orig
-var xhr2 = new XMLHttpRequest();
-xhr2.onreadystatechange = function() {
-    if (xhr2.readyState === 4) {
-	styleguide_orig = xhr2.responseXML.querySelector("styleguide");
-    }
-}
-xhr2.open('GET', document.querySelector('link[rel="styleguide-orig"]').href, true);
-xhr2.setRequestHeader('Content-Type','text/xml; charset=UTF-8');
-xhr2.responseType = "document";
-xhr2.send();
-
-
-function recalcTodo() {
-    var parts = styleguide_node.querySelectorAll("chapter, category, subcategory");
-    for (var i = 0; i < parts.length; i++) {
-	var nav = parts[i].getElementsByTagName("nav")[0];
-	var originals = parts[i].querySelectorAll('*[source="original"]');
-	nav.setAttribute("todo", originals.length);
-    }
-}
-
-function renderStyleguide(styleguide) {
-
-    styleguide_node = document.importNode(styleguide, true);
-    var editor = document.querySelector("div[id='editor']");
-    editor.parentNode.insertBefore(styleguide_node, editor);
-
-    var parts = styleguide_node.querySelectorAll("name, description, overall-impression, aroma, appearance, flavor, mouthfeel, comments, history, characteristic-ingredients, style-comparison, entry-instructions, commercial-examples");
-    for (var i = 0; i < parts.length; i++) {
-	parts[i].addEventListener("click", function() {
-	    edit_element = this;
-	    edit_id = edit_element.parentNode.getAttribute("id");
-	    element_name = edit_element.tagName.toLowerCase();
-	    orig_record = styleguide_orig.querySelector("*[id='" + edit_id + "']");
-	    orig_element = orig_record.querySelector(element_name);
-	    orig_record_name = orig_record.querySelector("name").childNodes[0].nodeValue;
-	    editlastdate = edit_element.getAttribute("date");
-	    editlastauthor = edit_element.getAttribute("author");
-	    text = edit_element.innerHTML;
-	    text = text.replace(/^ */,"");
-	    text = text.replace(/ *$/,"");
-	    text = text.replace(/  */g, " ");
-	    if (element_name != "description") {
-		text = text.replace(/<p>/g, " ");
-		text = text.replace(/<\/p>/g, " ");
-	    }
-	    pelleditor.content.innerHTML = text;
-	    if (lastdate && lastauthor) {
-		text = "last updated by " + lastauthor + " on " + lastdate;
-	    } else {
-		text = ""
-	    }
-	    editstyleid.innerText = edit_id ? edit_id : "-";
-	    editstylename.innerText = orig_record_name ? orig_record_name : "-";
-	    editelemname.innerText = element_name ? element_name : "-";
-	    lastdate.innerText = editlastdate ? editlastdate : "original";
-	    lastauthor.innerText = editlastauthor ? editlastauthor : "original";
-	    if (orig_element) {
-		original.innerHTML = orig_element.innerHTML;
-	    }
-	    if (markup) {
-		markup.innerText = edit_element.innerHTML;
-	    }
-	    if (render) {
-		render.innerHTML = edit_element.innerHTML;
-	    }
-	    editor.style.display = "block";
-	    pelleditor.content.focus();
-	});
-    }
-
-    var parts = styleguide_node.querySelectorAll("chapter, category, subcategory");
-    for (var i = 0; i < parts.length; i++) {
-
-	var nav = document.createElement("nav");
-	parts[i].insertBefore(nav, parts[i].childNodes[0]);
-    
-	nav.addEventListener("dblclick", function() {
-	    if (this.parentNode.classList.contains("collapsed")) {
-		var parts = document.querySelectorAll("category, subcategory");
-		for (var i = 0; i < parts.length; i++) {
-		    parts[i].classList.remove("collapsed");
-		}
-	    } else {
-		var parts = document.querySelectorAll("category, subcategory");
-		for (var i = 0; i < parts.length; i++) {
-		    parts[i].classList.add("collapsed");
-		}
-	    }
-	});
-
-	nav.addEventListener("click", function() {
-	    this.parentNode.classList.toggle("collapsed");
-	});
-
-	parts[i].classList.add("collapsed");
-
-    }
-
-    recalcTodo();
-}
-
diff --git a/web/edit.css b/web/edit.css
index 3631c81b335f07422f7b2057ed1c00833c7111a0..8ff349d575ffe921cc8703da396a4feb439efef4 100644
--- a/web/edit.css
+++ b/web/edit.css
@@ -38,11 +38,11 @@ div#original {
     margin:10px;
 }
 
-*[onclick] {
+nav, *[onclick] {
   cursor: pointer;
 }
 
-*[orig='true'] {
+styleguide[orig="true"] * {
   display:none;
 }
 
diff --git a/web/edit-new.html b/web/edit.html
similarity index 100%
rename from web/edit-new.html
rename to web/edit.html
diff --git a/web/edit.js b/web/edit.js
index 185a9dd062c73ced406656434e29fb9153829381..53f691c3e529583cd70588b9d106e7eeb11a8e95 100644
--- a/web/edit.js
+++ b/web/edit.js
@@ -1,5 +1,4 @@
 
-const body = document.getElementsByTagName("body")[0];
 const editor = document.getElementById("editor");
 const pell = window.pell;
 const pelleditor = document.getElementById("pelleditor");
@@ -13,8 +12,9 @@ const editelemname = document.getElementById("editelemname");
 const lastdate = document.getElementById("lastdate");
 const lastauthor = document.getElementById("lastauthor");
 
-var editelem;
-var tagname;
+var edit_id;
+var edit_element;
+var element_name;
 
 pell.init({
     element: pelleditor,
@@ -43,7 +43,37 @@ pell.init({
 	    icon: '<div style="background-color:pink;">save</div>',
 	    title: 'save',
 	    result: () => {
-		dosave();
+
+		text = pelleditor.content.innerHTML;
+		text = text.replace(/&nbsp;/g, " ");
+		if (element_name != "description") {
+		    text = text.replace(/<p>/g, " ");
+		    text = text.replace(/<\/p>/g, " ");
+		}
+		text = text.replace(/<br>/g, " ");
+		text = text.replace(/\n/g,"");
+		text = text.replace(/  */g, " ");
+		text = text.replace(/^ */,"");
+		text = text.replace(/ *$/,"");
+		
+		var xhr = new XMLHttpRequest();
+		
+		xhr.onreadystatechange = function() {
+		    if (xhr.readyState === 4) {
+			editor.style.display = "none";
+			edit_element.innerHTML = text;
+			edit_element.setAttribute("date", "today");
+			edit_element.setAttribute("author", "you");
+			edit_element.setAttribute("addr", "local");
+			edit_element.setAttribute("source", "this-session");
+		    }
+		}
+		
+		user = author.value;
+		xhr.open('POST', "save.cgi?id=" + edit_id + "&elem=" + element_name + "&user=" + user, true);
+		xhr.setRequestHeader('Content-Type','text/xml; charset=UTF-8');
+		xhr.responseType = "text";
+		xhr.send(text);
 	    }
 	},
 	{
@@ -51,140 +81,151 @@ pell.init({
 	    icon: '<div style="background-color:pink;">cancel</div>',
 	    title: 'cancel',
 	    result: () => {
-		docancel();
+		editor.style.display = "none";
 	    }
 	},
     ],
     onChange: (html) => {
-	x = html;
-	x = x.replace(/&nbsp;/g, " ");
-	if (tagname != "description") {
-	    x = x.replace(/<p>/g, " ");
-	    x = x.replace(/<\/p>/g, " ");
+	text = html;
+	text = text.replace(/&nbsp;/g, " ");
+	if (element_name != "description") {
+	    text = text.replace(/<p>/g, " ");
+	    text = text.replace(/<\/p>/g, " ");
 	}
-	x = x.replace(/<br>/g, " ");
-	x = x.replace(/  */g, " ");
-	x = x.replace(/^ */,"");
-	x = x.replace(/ *$/,"");
+	text = text.replace(/<br>/g, " ");
+	text = text.replace(/  */g, " ");
+	text = text.replace(/^ */,"");
+	text = text.replace(/ *$/,"");
 	if (markup) {
-	    markup.innerText = x;
+	    markup.innerText = text;
 	}
 	if (render) {
-	    render.innerHTML = x;
+	    render.innerHTML = text;
 	}
     }
 })
 
-function doedit(elem) {
-    editid = elem.parentNode.getAttribute("id");
-    editname = elem.parentNode.getElementsByTagName("name")[1].innerText;
-    editelem = elem;
-    tagname = elem.tagName.toLowerCase();
-    editlastdate = elem.getAttribute("date");
-    editlastauthor = elem.getAttribute("author");
-    t = elem.innerHTML;
-    t = t.replace(/^ */,"");
-    t = t.replace(/ *$/,"");
-    t = t.replace(/  */g, " ");
-    if (tagname != "description") {
-	t = t.replace(/<p>/g, " ");
-	t = t.replace(/<\/p>/g, " ");
-    }
-    pelleditor.content.innerHTML = t;
-    origelem = elem.nextSibling;
-    if (lastdate && lastauthor) {
-	text = "last updated by " + lastauthor + " on " + lastdate;
-    } else {
-	text = ""
-    }
-    editstyleid.innerText = editid ? editid : "-";
-    editstylename.innerText = editname ? editname : "-";
-    editelemname.innerText = tagname ? tagname : "-";
-    lastdate.innerText = editlastdate ? editlastdate : "original";
-    lastauthor.innerText = editlastauthor ? editlastauthor : "original";
-    if (origelem) {
-	original.innerHTML = origelem.innerHTML;
-    }
-    if (markup) {
-	markup.innerText = elem.innerHTML;
-    }
-    if (render) {
-	render.innerHTML = elem.innerHTML;
-    }
-    editor.style.display = "block";
-    pelleditor.content.focus();
-    
-}
 
-function docancel() {
-    editor.style.display = "none";
-}
 
-function dosave() {
+var styleguide;
+var styleuide_orig;
+var styleguide_node;
 
-    x = pelleditor.content.innerHTML;
-    x = x.replace(/&nbsp;/g, " ");
-    if (tagname != "description") {
-	x = x.replace(/<p>/g, " ");
-	x = x.replace(/<\/p>/g, " ");
-    }
-    x = x.replace(/<br>/g, " ");
-    x = x.replace(/\n/g,"");
-    x = x.replace(/  */g, " ");
-    x = x.replace(/^ */,"");
-    x = x.replace(/ *$/,"");
-
-    var xhr = new XMLHttpRequest();
-
-    xhr.onreadystatechange = function() {
-	if (xhr.readyState === 4) {
-	    editor.style.display = "none";
-	    editelem.innerHTML = x;
-	    editelem.setAttribute("date", "today");
-	    editelem.setAttribute("author", "you");
-	    editelem.setAttribute("addr", "local");
-	    editelem.setAttribute("source", "this-session");
-	}
-    }
 
-    user = author.value;
-    xhr.open('POST', "save.cgi?id=" + editid + "&elem=" + tagname + "&user=" + user, true);
-    xhr.setRequestHeader('Content-Type','text/xml; charset=UTF-8');
-    xhr.responseType = "text";
-    xhr.send(x);
 
+// load styleguide and trigger rendering
+var xhr1 = new XMLHttpRequest();
+xhr1.onreadystatechange = function() {
+    if (xhr1.readyState === 4) {
+	styleguide = xhr1.responseXML.querySelector("styleguide");
+	renderStyleguide(styleguide);
+    }
+}
+xhr1.open('GET', document.querySelector('link[rel="styleguide"]').href, true);
+xhr1.setRequestHeader('Content-Type','text/xml; charset=UTF-8');
+xhr1.responseType = "document";
+xhr1.send();
+
+// load styleguide_orig
+var xhr2 = new XMLHttpRequest();
+xhr2.onreadystatechange = function() {
+    if (xhr2.readyState === 4) {
+	styleguide_orig = xhr2.responseXML.querySelector("styleguide");
+    }
+}
+xhr2.open('GET', document.querySelector('link[rel="styleguide-orig"]').href, true);
+xhr2.setRequestHeader('Content-Type','text/xml; charset=UTF-8');
+xhr2.responseType = "document";
+xhr2.send();
+
+
+function recalcTodo() {
+    var parts = styleguide_node.querySelectorAll("chapter, category, subcategory");
+    for (var i = 0; i < parts.length; i++) {
+	var nav = parts[i].getElementsByTagName("nav")[0];
+	var originals = parts[i].querySelectorAll('*[source="original"]');
+	nav.setAttribute("todo", originals.length);
+    }
 }
 
+function renderStyleguide(styleguide) {
+
+    styleguide_node = document.importNode(styleguide, true);
+    var editor = document.querySelector("div[id='editor']");
+    editor.parentNode.insertBefore(styleguide_node, editor);
+
+    var parts = styleguide_node.querySelectorAll("name, description, overall-impression, aroma, appearance, flavor, mouthfeel, comments, history, characteristic-ingredients, style-comparison, entry-instructions, commercial-examples");
+    for (var i = 0; i < parts.length; i++) {
+	parts[i].addEventListener("click", function() {
+	    edit_element = this;
+	    edit_id = edit_element.parentNode.getAttribute("id");
+	    element_name = edit_element.tagName.toLowerCase();
+	    orig_record = styleguide_orig.querySelector("*[id='" + edit_id + "']");
+	    orig_element = orig_record.querySelector(element_name);
+	    orig_record_name = orig_record.querySelector("name").childNodes[0].nodeValue;
+	    editlastdate = edit_element.getAttribute("date");
+	    editlastauthor = edit_element.getAttribute("author");
+	    text = edit_element.innerHTML;
+	    text = text.replace(/^ */,"");
+	    text = text.replace(/ *$/,"");
+	    text = text.replace(/  */g, " ");
+	    if (element_name != "description") {
+		text = text.replace(/<p>/g, " ");
+		text = text.replace(/<\/p>/g, " ");
+	    }
+	    pelleditor.content.innerHTML = text;
+	    if (lastdate && lastauthor) {
+		text = "last updated by " + lastauthor + " on " + lastdate;
+	    } else {
+		text = ""
+	    }
+	    editstyleid.innerText = edit_id ? edit_id : "-";
+	    editstylename.innerText = orig_record_name ? orig_record_name : "-";
+	    editelemname.innerText = element_name ? element_name : "-";
+	    lastdate.innerText = editlastdate ? editlastdate : "original";
+	    lastauthor.innerText = editlastauthor ? editlastauthor : "original";
+	    if (orig_element) {
+		original.innerHTML = orig_element.innerHTML;
+	    }
+	    if (markup) {
+		markup.innerText = edit_element.innerHTML;
+	    }
+	    if (render) {
+		render.innerHTML = edit_element.innerHTML;
+	    }
+	    editor.style.display = "block";
+	    pelleditor.content.focus();
+	});
+    }
 
+    var parts = styleguide_node.querySelectorAll("chapter, category, subcategory");
+    for (var i = 0; i < parts.length; i++) {
 
-
-var l = document.querySelectorAll("chapter, category, subcategory");
-for (var i = 0; i < l.length; i++) {
-
-    nav = document.createElement("nav");
-    l[i].insertBefore(nav, l[i].childNodes[0]);
+	var nav = document.createElement("nav");
+	parts[i].insertBefore(nav, parts[i].childNodes[0]);
     
-    nav.addEventListener("dblclick", function() {
-	if (this.parentNode.classList.contains("collapsed")) {
-	    var l = document.querySelectorAll("category, subcategory");
-	    for (var i = 0; i < l.length; i++) {
-		l[i].classList.remove("collapsed");
-	    }
-	} else {
-	    var l = document.querySelectorAll("category, subcategory");
-	    for (var i = 0; i < l.length; i++) {
-		l[i].classList.add("collapsed");
+	nav.addEventListener("dblclick", function() {
+	    if (this.parentNode.classList.contains("collapsed")) {
+		var parts = document.querySelectorAll("category, subcategory");
+		for (var i = 0; i < parts.length; i++) {
+		    parts[i].classList.remove("collapsed");
+		}
+	    } else {
+		var parts = document.querySelectorAll("category, subcategory");
+		for (var i = 0; i < parts.length; i++) {
+		    parts[i].classList.add("collapsed");
+		}
 	    }
-	}
-    });
+	});
 
-    l[i].classList.add("collapsed");
+	nav.addEventListener("click", function() {
+	    this.parentNode.classList.toggle("collapsed");
+	});
 
-    var o = l[i].querySelectorAll('*[source="original"]');
-    nav.setAttribute("todo",o.length);
+	parts[i].classList.add("collapsed");
+
+    }
 
-    nav.addEventListener("click", function() {
-	this.parentNode.classList.toggle("collapsed");
-    });
+    recalcTodo();
 }