<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
!Wind snelheid + CO2 Concentratie
Klik voor selecteren van een locatie.
<html><iframe height=400 width=600 align=middle src="http://earth.nullschool.net/#current/chem/surface/level/overlay=co2sc/orthographic=-315.66,37.26,247/loc=5.9955900,51.1973160"></iframe></html>
__Bron__: http://earth.nullschool.net
!Wat is de energie ambitie van Nederland? 

!!Nationaal Energieakkoord voor 2020/2023 dd 2014
Doelstelling van het [[Energie-akkoord | http://www.energieakkoordser.nl/energieakkoord.aspx]]  is:
* een gezamelijke aanvullende 100 PJ aan energiebesparing te realiseren voor alle sectoren, met [[ bedrijfsspecifieke afspraken voor de grote industrie | http://www.energieakkoordser.nl/nieuws/2015/afspraken-energieakkoord-energie-efficientie-industrie.aspx]]
* 14% duurzame energie in 2020
* 16% duurrzame energie in 2023
* 15000 extra banen

!! Nationaal actieplan 2020 dd 2010 conform Europese Richtlijn 2009/28/EG 
De ontwikkeling van duurzame warmte "bruto finaal duurzaam energetisch gebruik" volgens het nationaal actieplan is weergegeven in onderstaande grafiek. 

<html>
<DIV align=center><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/31130072"></DIV>
</html>
Bron: [[Nationaal actieplan voor energie uit hernieuwbare bronnen | http://ec.europa.eu/energy/renewables/action_plan_en.htm ]]

''Aardwarmte'' (exclusief lage temperatuurverwarming warmtepompen) zal middels diepe geothermie in 2020 een bijdrage leveren van 11 PJ.

''Thermische zonne-energie'' uit huishoudens en de dienstensector levert in 2020 een bijdrage van 1 PJ.

''Warmtepompen'' leveren in 2020 16 PJ. Deze bijdrage is opgebouwd uit 4,9 PJ aerothermisch, 10,1 PJ geothermisch (WKO en bodemwarmtewisselaars) en 0,5 PJ hydrothermisch.

''Bio-energie'' levert in 2020 een bijdrage aan de warmtevoorziening van 64 PJ. 
Belangrijk punt van aandacht hierbij is de definitie voor warmte uit biomassa. Artikel 2, lid f van de Richtlijn voor hernieuwbare energie definieert bruto-eindverbruik van energie als ‘de energiegrondstoffen die geleverd worden aan industrie, …’. Daarmee is bepaald dat de rapportage van warmte uit biomassa op input-basis dient te geschieden.
Ook is binnen de categorie warmte uit bio-energie het zogenaamde groen gas (voor gasnetvoeding) opgenomen.
Aandeel van de verschillende soorten biomassa is als volgt: 
#27 PJ van de warmte uit bio-energie komt in 2020 uit vaste biomassa. Voor vaste biomassa is een relatief beperkte groei voorzien; de bijdrage voor vaste biomassa in 2005 was 23 PJ. 
#Biogas levert naar verwachting in 2020 een directe bijdrage van 12 PJ aan de directe warmtevoorziening 
#De verwachting is dat de bijdrage van biovloeistoffen aan de warmtevoorziening nihil is. 
#Nederland verwacht een significante bijdrage van directe invoeding van biogas in het aardgasnet (‘groen gas’), zijnde 24 PJ in 2020. Omdat dit gas naar verwachting veel gebruikt wordt in de warmtevoorziening, is er voor gekozen om dat op deze plaats (in plaats van biovloeistoffen) zichtbaar te maken. 

Binnen de warmtevoorziening worden stadsverwarming en biomassa in huishoudens onderscheiden;
#Stadsverwarming betreft alle biomassa die gebruikt wordt voor warmte uit wkk installaties. Deze neemt toe van 17 PJ in 2005 tot 31 PJ in 2020. 
#Biomassa in huishoudens betreft de kachels voor huishoudelijk gebruik (geen wkk installaties) De verwachting hiervan is dat deze bijdrage constant blijft tussen 2005 en 2020, zijnde 6,6 PJ 

!Wat is de Status van deze ambitie anno 2015?
De [[ nationale energie verkenning 2015 | https://www.rijksoverheid.nl/binaries/rijksoverheid/documenten/rapporten/2015/10/09/nationale-energieverkenning-2015/nationale-energieverkenning-2015.pdf]] geeft de status weer van de realisatie van de nationale ambitie tot dusver en geeft een prognose naar 2020 en 2030. 
> [[Gegevens in tabelweergave |  https://www.ecn.nl/fileadmin/ecn/corp/img/News/nev/Tabellenbijlage_NEV_2015_-_Versie_1.1__oktober_2015.xlsx ]]
|Thema | Doel | Prognose |h
|''Aandeel herniewbare energie'' | | |
|2020 | 14% | @@color:#ff0000;''12,4%''@@ |
|2030 | 16% | @@color:#00cc00;''16%''@@ |
|''Energiebesparing'' | |
|Richtlijn energie-efficientie (2014-2020) | 480 PJ | @@color:#00cc00;''540 PJ''@@ |
|Energiebesparingstempo (% per jaar) | 1,5% | @@color:#00cc00;''1,5%''@@ |
|extra Energiebesparing in 2020 | 100 PJ | @@color:#ff0000;''55 PJ''@@ |
|''Reductie van broeikasgassen'' ||
|Niet-ETS sectoren (2020 t.o.v 2005) | -16% | @@color:#00cc00;''-25%''@@ |
|Jaarlijkse toename werkgelegenheid (voltijdsbanen) | 15000 | @@color:#00cc00;''15000''@@ |

![[Aangekondigde extra maatregelen | https://www.rijksoverheid.nl/binaries/rijksoverheid/documenten/kamerstukken/2015/10/09/kamerbrief-nationale-energieverkenning-2015/kamerbrief-nationale-energieverkenning-2015.pdf]]
* Verhoging SDE-subsidie naar 8 miljard in 2016 
* Per 1 januari 2016 een nieuwe subsidieregeling voor kleinschalige hernieuwbare warmteopties. Dit zijn opties zoals zonneboilers, biomassaketels en warmtepompen.
* Versterken omgevingsmanagement met gebiedscoordinator
* Innovatieprogramma monomestvergisting
* Bekijken van innovatiemogelijkheden diepe geothermie
* Verlaging tarief van de energiebelasting locale duurzaam opgewekt
!Wat is Aardwarmte/geothermie?
|<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/31121652" width="304" /></html>|vertical-align:top;padding:1em;<html>Aardwarmte is een vorm van duurzame energie die in Nederland goed kan worden geproduceerd. Warm water van 45-120°C wordt opgepompt uit watervoerende aardlagen op 1,5 tot 4 kilometer diepte en gebruikt voor de verwarming van woningen of kassen zonder warmtepomp. Een doublet geeft warmte aan meer dan 1000 woningen. Voor het project in Den Haag zijn dit bijvoorbeeld 4000 woningen.</html>|

!Beschrijving potentieel kaart
De getoonde kaarten zijn aardwarmte potentie kaarten in GJ/(ha.jaar). Deze kaarten gaan er van uit dat 33% van alle warmte die in de doorlatende lagen van de bodem aanwezig is  (''tussen 1500 en 4000 meter'') in een periode van 300 jaar totaal onttrokken wordt. Voor gebouwde omgeving is hierbij uitgegaan van een minimum productie temperatuur van 65 °C en een retour temperatuur van 40 °C, en voor de glastuinbouw is uitgegaan van een minimum temperatuur van 45°C en een retour temperatuur van 25°C. [<<cite kramers2012 bibliography:Bibliography>>]

__Referenties__: 
*<<bibliography>>
*[[ThermoGIS van TNO|http://www.thermogis.nl/thermogis.html]]; Met dit geothermisch informatiesysteem  kan iedereen een schat aan informatie op het gebied van aardwarmte in Nederland online raadplegen. Het systeem toont bijvoorbeeld de eigenschappen van de geschikte lagen in de ondergrond op elke plaats in Nederland: is er een goed doorlatende laag aanwezig, en wat is de temperatuur, wat is de diepte? Met een muisklik kan een fysische en economische simulatie worden gestart van een geothermisch doublet (twee boringen) op de gekozen locatie. ThermoGISTM bevat temperatuur- en doorlaatbaarheidskaarten. 

!Hoe bereken ik het geothermische vermogen en de jaarlijkse warmte productie?
Het geproduceerde thermische vermogen kan men globaal berekenen met:

>$W = \rho c_w Q(T_{productie}-T_{retour})$


Met $c_w$ = 4200 J/(kg.°C) en  $\rho$ = 1000 kg/m³ de dichtheid van water en Q het debiet van het opgepompte water.

$T_{productie}$ neemt vanaf 10°C net onder het oppervlak  toe met ongeveer 30°C per  km  diepte 


Hieronder berekenen we twee voorbeelden; 

__Glastuinbouw__
>$T_{retour}$ = 25°C
>$T_{productie}$ = 75°C
>Q= 150 m³/uur
>W» 8 MW
Uitgaande van 5000 draaiuren per jaar is dit » 0.14 PJ/jaar


__Woningen__
>$T_{retour}$ = 40°C
>$T_{productie}$ = 75°C
>Q= 150 m³/uur
>W»6 MW 
Uitgaande van 5000 draaiuren per jaar is dit 0.11 PJ/jaar. Met een warmte gebruik van 25 GJ of 800 m³ gas per jaar per gallerij woning levert dit aardwarmte doublet voor ongeveer 4000 woningen warmte.

!Wat is de Ambitie van Nederland?
De doelstelling van Nederland is 14% duurzame energie in 2020 en 16% duurzame energie in 2023. 
De huidige realisatie van duurzame energie is te vinden op [[Hernieuwbare energie; eindverbruik @CBSStatline | http://statline.cbs.nl/Statweb/publication/?DM=SLNL&PA=83109ned&D1=0-1,4-5&D2=a&D3=a&D4=23-25&HDR=T&STB=G2,G1,G3&VW=T]]

!Hoe kom ik verder?
*[[Data: Geothermisch informatie systeem ThermoGIS |http://www.thermogis.nl/thermogis.html]]
*[[Data: Boringen, Seismiek, Vergunningen| http://www.nlog.nl/nl/geothermalEnergy/geothermalEnergy.html]]
*[[Data: WarmteAtlas, warmte vraag en warmte potentie | http://www.warmteatlas.nl ]]
*[[Rapport: Potentieel Geothermie Zeeland | https://www.zeeuwsbodemvenster.nl/sites/zl-bodemvenster/files/management_samenvatting_geothermie_zeeland.pdf]]
*[[Rapport: Potentieel Geothermie Trias Noord-Brabant |  http://docplayer.nl/12661405-Samenvatting-geothermische-energie-uit-trias-aquifers-in-de-ondergrond-van-noord-brabant.html]]
*[[Rapport: Potentieel Geothermie Limburg | http://www.onderzoeksbanklimburg.nl/onderzoek/potentieelstudie-geothermie]]
*[[Rapport: Potentieel Geothermie Utrecht | http://docplayer.nl/4000196-Haalbaarheidsonderzoek-geothermie-in-de-slochteren-formatie-provincie-utrecht-petrofysisch-onderzoek-fase-1.html]]
*[[Rapport: Potentieel Geothermie Arnhem | Nijmegen | https://issuu.com/iftechnology/docs/20151012_rapport_kansen_geothermie_]]
*[[Techniek: Bijvangst van gas of olie | http://www.energiek2020.nu/fileadmin/user_upload/energiek2020/docs/Aardwarmte/Aardwarmte_Ammerlaan_en_Duijvestijn.pdf]]
*[[Techniek: Materialenkeuze |https://www.kasalsenergiebron.nl/duurzame-energie/aardwarmte/ik-heb-al-een-bron/kennisagenda-aardwarmte/nieuws/alternatieve-materialen-aardwarmte-bebuizing-beschikbaar-maar-duur/]]
*[[Wet en regelgeving: Geothermie | http://www.nlog.nl/nl/home/geothermy.html]]
*[[Financieel: Innovatie subsidies duurzame energie | http://www.rvo.nl/subsidies-regelingen/regelingen-topsector-energie-tse ]]
*[[Financieel: SEI Garantie faciliteit aardwarmte | http://www.rvo.nl/subsidies-regelingen/risicos-dekken-voor-aardwarmte ]]
*[[Financieel: SDE Subsidie duurzame energie | http://www.rvo.nl/subsidies-regelingen/geothermie-sde-2015]]
*[[Branche Info: Platform geothermie | http://www.geothermie.nl/]]
*[[Branche Info: Kas als energiebron | http://www.kasalsenergiebron.nl/duurzame-energie/]]
*[[Internationaal: Geothermal ERA NET | http://www.geothermaleranet.is/ ]]
                         
!Wat is ondiepe aardwarmte/geothermie?
|<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/31121652" width="304" /></html>|vertical-align:top;padding:1em;<html>Aardwarmte is een vorm van duurzame energie die in Nederland goed kan worden geproduceerd. Warm water van 25-55°C kan worden opgepompt uit watervoerende aardlagen op 500 tot 1500 m diepte en gebruikt voor de verwarming van lage temperatuur woningen of kassen (met het nieuwe telen) met of zonder een warmtepomp. Een doublet op deze diepte vraagt een veel kleinere investering en geeft warmte af aan een kleinere groep woningen of een kleinere kas. </html>|

!Beschrijving potentieel kaart
Er zijn geen kaarten digitaal beschikbaar.
Wel zijn er kaarten in rapporten beschikbaar met potentieel goede aquifers op deze diepten.


!Hoe bereken ik het geothermische vermogen en de jaarlijkse warmte productie?
De gewonnen thermische energie kan men globaal berekenen met:

>$W = \rho c_w Q(T_{productie}-T_{retour})$


Met $c_w$ = 4200 J/(kg.°C) en  $\rho$ = 1000 kg/m³ de dichtheid van water en Q het debiet van het opgepompte water.

$T_{productie}$ neemt vanaf 10°C net onder het oppervlak  toe met ongeveer 30°C per  km  diepte 


Hieronder berekenen we twee voorbeelden; 

__Glastuinbouw__
>$T_{retour}$ = 25°C
>$T_{productie}$ = 40°C
>Q= 50 m³/uur
>W= MW
Uitgaande van 4000 draaiuren per jaar is dit » 12.6 TJ/jaar


__Woningen__
>$T_{retour}$ = 25°C
>$T_{productie}$ = 40°C
>Q= 50 m³/uur
>W»6 MW 
Uitgaande van 4000 draaiuren per jaar is dit 12.6 TJ/jaar. Met een warmte gebruik van 30 GJ of 1000 m³ gas per jaar per rijtjes woning levert dit aardwarmte doublet voor ongeveer 400 woningen warmte.

!Hoe kom ik verder?
*[[Rapport: Potentieel kansen voor ondiepe geothermie (500-1500 m diepte)| https://www.publicspaceinfo.nl/bibliotheek/kansen-voor-ondiepe-geothermie-voor-de-glastuinbou/]]
*[[Data: Boringen, Seismiek, Vergunningen| http://www.nlog.nl/nl/geothermalEnergy/geothermalEnergy.html]]
*[[Data: WarmteAtlas, warmte vraag en warmte potentie | http://www.warmteatlas.nl ]]
*[[Techniek: Bijvangst van gas of olie | http://www.energiek2020.nu/fileadmin/user_upload/energiek2020/docs/Aardwarmte/Aardwarmte_Ammerlaan_en_Duijvestijn.pdf]]
*[[Wet en regelgeving: Geothermie | http://www.nlog.nl/nl/home/geothermy.html]]
*[[Financieel: TSE Innovatie subsidies duurzame energie | http://www.rvo.nl/subsidies-regelingen/regelingen-topsector-energie-tse ]]
*[[Financieel: SEI Garantie faciliteit aardwarmte | http://www.rvo.nl/subsidies-regelingen/risicos-dekken-voor-aardwarmte ]]
*[[Financieel: SDE Subsidie duurzame energie | http://www.rvo.nl/subsidies-regelingen/geothermie-sde-2015]]
*[[Branche Info: Platform geothermie | http://www.geothermie.nl/]]
*[[Branche Info: Kas als energiebron | http://www.kasalsenergiebron.nl/duurzame-energie/]]
                                                          
!Wat is Aquathermie
|<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/60283891/Aquathermie.jpg" width="500" /></html>|vertical-align:top;padding:1em;<html>Oppervlaktewater is – naast wind, zon en biomassa – een potentieel belangrijke duurzame energiebron voor Nederland. Uit een verkenning in opdracht van de Unie van Waterschappen en Rijkswaterstaat blijkt dat deze bron kan voorzien in ± 12% van de nationale warmtevraag en 54% van de koudevraag. In het waterrijke noorden westen en midden van het land loopt de potentie op tot meer dan 25% van de warmtevraag, vooral in de dichtbebouwde regio’s. Daarmee vormt deze bron een bijdrage in het streven van gemeenten naar aardgasloze wijken. Het oppervlaktewater van sloten en kanalen kan in combinatie met warmte en koude opslagsystemen (WKO) worden ingezet voor het duurzaam verwarmen en/of koelen van gebouwen. Het water van “diepe” plassen kan worden ingezet voor het duurzaam koelen van gebouwen. In de smart polder worden kunstwerken (met name gemalen) voorzien van warmtewisselaars waarmee deze ingezet kunnen worden voor het leveren van primaire koude of warmte.</html>|


!Beschrijving Techniek
TEO (Thermische Energie Oppervlaktewater) maakt gebruik van de temperatuurverschillen van het oppervlaktewater in de loop van de seizoenen (zie afbeelding boven). In de zomer kan met warm oppervlaktewater het grondwater in een Warmte- en Koudeopslag –installatie (WKO) worden opgewarmd. Deze warmte kan in het koude seizoen worden benut om met behulp van een warmtepomp gebouwen te verwarmen. In de winter kan juist koude worden opgeslagen. Deze koude is dan een bron voor duurzame koeling. In sommige gevallen kan zonder WKO direct warmte of koude worden geleverd, bijvoorbeeld bij koude winning uit diepe plassen. Er zijn 3 techniek concepten volgens IF Technology.

!!Concepten energie uit het watersysteem
I.	''Waterlopen & plassen''
Het oppervlaktewater van sloten en kanalen kan in combinatie met warmte en koude opslagsystemen (WKO) worden ingezet voor het duurzaam verwarmen en/of koelen van gebouwen. Hiervoor zal een pompinstallatie in de nabijheid van de afnemer worden geplaatst waarmee met een klein temperatuursverschil (3 tot 6oC) energie uit het water wordt gewonnen. Door deze pompinstallatie slim te integreren in het bestaande watersysteem kunnen voordelen worden behaald in waterkwaliteit (doorspoeling en afkoeling)
II.	''Diepe plassen''
Het water van “diepe”plassen kan worden ingezet voor het duurzaam koelen van gebouwen. Het koude water uit de diepe van een plas blijft geïsoleerd en biedt hiermee een duurzame bron van koeling.
III.	''Gemalen''
In de smart polder worden kunstwerken (met name gemalen) voorzien van warmtewisselaars waarmee deze ingezet kunnen worden voor het leveren van primaire koude of warmte. Hiermee kan met een kleine investering een zeer hoog koel of verwarming vermogen worden gecreëerd. Voorwaarde is wel dat er afnemers van warmte of koude in de nabijheid van een gemaal aanwezig zijn.

!Beschrijving potentieel kaarten
!!Potentiële voorraad 
De hoeveelheid energie die in het natuurlijk watersysteem zit en in theorie benut kan worden. 

!!Technisch winbaar potentieel
De potentiële voorraad die op basis van de huidige technische mogelijkheden uit een waterlichaam kan worden gewonnen.
De beschikbare opslagcapaciteit van de ondergrond voor de toepassing van energieopslag vormt hierin een bepalende factor. Als deze kleiner is dan de potentiële energielevering uit het watersysteem, beperkt dit het potentieel.
__Rekenregels__:
Potentiële energievoorraad < Capaciteit ondergrond, Potentiële energievoorraadleidend; 
Potentiële energievoorraad > Capaciteit ondergrond, Capaciteit ondergrondleidend. 

!!Economisch winbaar potentieel
Het technisch potentieel gecorrigeerd voor financiële haalbaarheidaspecten,
__Rekenregels__:
-Er geldt een minimaal vereiste energievraag/-aanbod van 1.000 GJ/ha/j
-De energievrager bevindt zich voldoende nabij het watersysteem (< 1 km)
-De grootte van de energievraag in combinatie met de grootte van het technisch potentieel levert een geschiktheidswaardering:

<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/60283981/Aquathermie_Technisch_Potentieel.jpg" width="500" /></html>


!!Economisch  winbaar potentieel – koude / warmte levering uit waterlopen en plassen
<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/60283971/Aquathermie_WaterlopenPlassen_Economisch_Potentieel.jpg" width="300" /></html>

!!Economisch  winbaar potentieel - Koude levering uit diepeplassen
<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/60284151/Aquathermie_DiepePlassen_Koude_Economisch_Potentieel.jpg" width="300" /></html>

!!Economisch  winbaar potentieel - Warmtelevering uit gemalen
<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/60283991/Aquathermie_Gemalen_Warmte_Economisch_Potentieel.jpg" width="300" /></html>

!!Economisch  winbaar potentieel - Koude levering uit gemalen
<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/60283961/Aquathermie_Gemalen_Koude_Economisch_Potentieel.jpg" width="300" /></html>

!De berekening energiepotentielen van de verschillende concepten
!!Concept I: Waterlopen en plassen
__Uitgangspunten koudewinning (winterperiode)__
>winterperiode Tw ≤ 10 °C
>ca. 3 maanden, 2000 vollastuur
>maximale opwarming 3 °C
>energie opslaan in WKO
>In zomer inzetten voor koeling

__Uitgangspunten warmtewinning (zomerperiode)__
>Zomerperiode Tw ≥ 15 °C
>ca. 3 maanden, 2000 vollastuur
>maximale afkoeling 3 °C
>energie opslaan in WKO
>In winter inzetten voor verwarming met warmtepomp

__De berekening potentiële energievoorraad voor stilstaand water en plassen__: 
Formule:
>Vermogen $Pt [kW] = (A * Z_{jaar}* dT) / 1000 = 0,03 * A $
>$Z_{jaar}= 10 [W / m2 °C] $
>Energie $Qt[GJ/jaar] = Pt * 2.000 (uur) * 0,0036 (per/Ha)$
>A:oppervlak waterloop of plas;
>$Z_{jaar}: Zelfkoelingsgetal water  (W / m2 °C);$
>Pt: thermisch vermogen (kW);
>Energie Qt: energiehoeveelheid [GJ/jaar]. 
Note: Potentie voor warmte en koude is vergelijkbaar

__Berekening potentiële energievoorraad voor stromend water__:
Formule:
>Thermisch Vermogen uit stroming $ Pt [kW] =qwl* dT* ρ_{water}* C_{water} $
>Thermisch Vermogen $ Pt [kW] = b * d * 0,25/0,75 * 3 * 998 * 4,185 $
>Langzaam stromend water: Snelheid vw= 0,25 m/s (KRW normering < 0,50 m/s)
>Snel stromend water: Snelheid vw= 0,75 m/s (KRW normering > 0,50 m/s)
>Langzaam stromend water:  Thermisch Vermogen $Pt [kW] = b * d*3.132$
>Snelstromend water: Thermisch Vermogen $Pt [kW] = b * d*9.397$
>Water oppervlakte: Thermische Vermogen $ Pt [kW] = (A * Z_{jaar}* dT) / 1000 = 0,03 * A $
>(deze is verwaarloosbaar ten opzichte van Pt stroming)
>Energie $Qt[GJ/jaar] = Pt * 2.000 (uur) * 0,0036 (per/Ha)$
Note: warmte of koude is vergelijkbaar

__Berekening economisch winbaar potentieel__:
>energievraag warmte/koude (GJ/ha)
>levering waterlopen en plassen (GJ/9ha)
>opslag capaciteit (WKO) in bodem (GJ/9ha)

!!Concept II. Diepe Plassen
__Uitgangspunten koudelevering__:
>Plassen dieper dan 18 meter
>Thermocline op 10 meter
>Tw = 6-8 °C
>maximale opwarming dT 8 °C
>1000 vollastuurkoeling
>In zomer inzetten voor koeling

__Berekening technisch winbaar potentieel__
>Energie $Qt[GJ/jaar] = 0,2761 * h * A * 0,5 * dT* 1,16$
>Energie $Qt[GJ/jaar]= 1,28 * h * A* 0,0036$
>Thermisch Vermogen $Pt [kW] = Qt/ 1.000$
>h:diepte waterplas vanaf 10 meter diepte tot debodem (m), geldt voor waterplassen dieper dan 18 meter.

__Berekening economisch winbaar potentieel__
>Afnemers < 1000 GJ/ha vallen af
>Totale vraag binnen 1 km

!!Concept III. Gemalen
__Uitgangspunten koudewinning (winterperiode)__
>Max. capaciteit gemaal * 1:15 = debiet
>winterperiode Tw=<10oC
>ca. 3 maanden, 2000 vollastuur
>maximale opwarming 3 oC
>energie opslaan in WKO
>In zomer inzetten voor directe koeling

__Uitgangspunten warmtewinning__
>Max. capaciteit polder/boezem gemaal * 1/20
>Max. capaciteit inlaat gemaal * 1/1
(continu in zomer)
>Zomerperiode Tw => 15 °C
>ca. 3 maanden, 2000 vollastuur
>maximale afkoeling 3 °C
>energie opslaan in WKO
>In winter inzetten voor verwarming met warmtepomp

__Berekening potentiële energievoorraad__
>Thermisch Vermogen $Pt [kWt] =q_{gemaal} * dT* ρ_{water}* C_{water}* F_{inzet} $
>Koude Vermogen $Pt [kW] = q_{gemaal} * 3 * 998 * 4,185 * (1/15) = q_{gemaal} * 835 $
>Warmte Vermogen $Pt [kW] = q_{gemaal} * 3 * 998 * 4,185 * (1/20) = q_{gemaal} * 626 $
>Warmte inlaat gemaal $ Pt [kW] = q_{gemaal} * 12.530$
>Energie Qt[GJ/jaar] = Pt * 2.000 (uur) * 0,0036 (per/Ha)
>q_{gemaal}: maximaal debiet  van het gemaal (m3/s)
$F_inzet$: factor inzet gemaal (%);

__Aannames berekening economisch winbaar potentieel__
>Afnemers < 1000 GJ/ha vallen af
>Totale vraag binnen 1 km
>Kleinste: koudelevering of opslag

__Bron__: Landelijke verkenning warmte en koude uit het watersysteem, IF Technology Onderzoek potentieel warmte-koudeopslag Waterschappen 2016,  In opdracht van de Unie van Waterschappen en Rijkswaterstaat 



!Hoe kom ik verder?
!Overzicht 
Een overzicht van de gemeentelijke gebiedsindeling  vind u hier.
[[Gebiedsindeling|http://statline.cbs.nl/StatWeb/publication/?VW=T&DM=SLNL&PA=72014NED&D1=0-1,7-8,19-24,33-34&D2=a&HD=110706-1033&HDR=T&STB=G1]]

!Gemeente Attributen WarmteAtlas

Volgende Energie attributen zijn beschikbaar per Gemeente voor Jaartal 2015
* WMS Service WarmteAtlas: http://rvo.b3p.nl/geoserver/WarmteAtlas/wms?
* WFS Service WarmteAtlas: http://rvo.b3p.nl/geoserver/WarmteAtlas/wfs?

|Beschrijving | Kaartnaam |  Code | Detail Niveau | Eenheid |Jaar| WMS-service|DownloadLink|h
|Gemeente Code |GemeenteEnergieCodes|GM_CODE |Gemeente||2015|WarmteAtlas|[[Bron CBS en Kadaster | https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015  ]]|
|Gemeente Naam|GemeenteEnergieCodes|GM_NAAM |Gemeente||2015|WarmteAtlas|[[Bron CBS en Kadaster | https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015  ]]|
|Bevolkingsdichtheid|GemeenteEnergieCodes|BEV_DICHTH |Gemeente|Inwoners/km2|2015|WarmteAtlas|[[Bron CBS en Kadaster | https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015  ]]|
|Oppervlakte Land|GemeenteEnergieCodes|OPP_LAND |Gemeente|ha|2015|WarmteAtlas|[[Bron CBS en Kadaster| https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015  ]]|
|Oppervlakte Bos|GemeenteEnergieCodes|OPP_BOS |Gemeente|ha|2015|WarmteAtlas|[[Bron CBS en kadaster| https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015 ]]|
|Oppervlakte Water|GemeenteEnergieCodes|OPP_WATER|Gemeente|ha|2015|WarmteAtlas|[[Bron CBS en kadaster| https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015 ]]|
|Aantal inwoners|GemeenteEnergieCodes|AANT_INW|Gemeente| |2015|WarmteAtlas|[[Bron CBS en kadaster | https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015 ]]|
|Aantal huishoudens |GemeenteEnergieCodes|AANT_HH|Gemeente| |2015|WarmteAtlas|[[Bron CBS en kadaster| https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015 ]]|
|Gemiddeld Huishoudens Grootte |GemeenteEnergieCodes|GEM_HH_GR|Gemeente| |2015|WarmteAtlas|[[Bron CBS en kadaster | https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015 ]]|
|Percentage Koopwoningen |GemeenteEnergieCodes|P_KOOPWON|Gemeente| |2015|WarmteAtlas|[[Bron CBS en kadster| https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Percentage Huurwoningen |GemeenteEnergieCodes|P_HUURWON|Gemeente| |2015|WarmteAtlas|[[Bron CBS en kadaster | https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Percentage Leegstand |GemeenteEnergieCodes|P_LEEGSW|Gemeente| |2015|WarmteAtlas|[[Bron CBS en kadaster| https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Percentage Woningen bouwjaar tot 2000 |GemeenteEnergieCodes|P_WONT2000 |Gemeente| |2015|WarmteAtlas|[[Bron CBS en kadaster | https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015 ]]|
|Percentage Woningen bouwjaar vanaf 2000|GemeenteEnergieCodes|P_WONV2000|Gemeente| |2015|WarmteAtlas|[[Bron CBS en kadaster | https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Aantal Autos |GemeenteEnergieCodes|AUTO_TOT|Gemeente| |2015|WarmteAtlas|[[Bron CBS en kadaster| https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Aantal Autos per Huishouden|GemeenteEnergieCodes|AUTO_HH|Gemeente| |2015|WarmteAtlas|[[Bron CBS en kadaster | https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015  ]]|
|Percentage Stadsverwarming |GemeenteEnergieCodes|P_STADVERW |Gemeente| |2015|WarmteAtlas|[[Bron CBS en kadaster| https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Gas gebruik Huishoudens Totaal |GemeenteEnergieCodes|HH_GAS_TJ |Gemeente|TJ/jaar|2015|WarmteAtlas|[[Bron CBS | http://statline.cbs.nl/StatWeb/selection/?DM=SLNL&PA=82538NED&VW=T]]|
|Gas gebruik Utiliteitsbouw Totaal|GemeenteEnergieCodes|UTB_GAS_TJ |Gemeente|TJ/jaar|2015|WarmteAtlas|[[Bron CBS | ]http://statline.cbs.nl/StatWeb/selection/?DM=SLNL&PA=82538NED&VW=T]]|
|Gas gebruik Landbouw (mn Glastuinbouw) Totaal| GemeenteEnergieCodes|LB_GAS_TJ|Gemeente|TJ/jaar|2015|WarmteAtlas|[[Bron CBS | http://statline.cbs.nl/StatWeb/selection/?DM=SLNL&PA=82538NED&VW=T]]|
|Gas gebruik Industrie Totaal|GemeenteEnergieCodes|IND_GAS_TJ|Gemeente|TJ/jaar|2015|WarmteAtlas|[[Bron CBS | http://statline.cbs.nl/StatWeb/selection/?DM=SLNL&PA=82538NED&VW=T]]|
|Elektriciteits gebruik Huishoudens Totaal| GemeenteEnergieCodes|HH_EL_TJ |Gemeente|TJ/jaar|2015|WarmteAtlas|[[Bron CBS | http://statline.cbs.nl/StatWeb/selection/?DM=SLNL&PA=82538NED&VW=T]]|
|Elektriciteits gebruik Utiliteitsbouw Totaal| GemeenteEnergieCodes|UTB_EL_TJ |Gemeente|TJ/jaar|2015|WarmteAtlas|[[Bron CBS | http://statline.cbs.nl/StatWeb/selection/?DM=SLNL&PA=82538NED&VW=T]]|
|Elektriciteits gebruik Landbouw (mn Glastuinbouw) Totaal|GemeenteEnergieCodes|LB_EL_TJ|Gemeente|TJ/jaar|2015|WarmteAtlas|[[Bron CBS | http://statline.cbs.nl/StatWeb/selection/?DM=SLNL&PA=82538NED&VW=T]]|
|Elektriciteits gebruik Industrie Totaal|GemeenteEnergieCodes|IND_EL_TJ| Gemeente|TJ/jaar|2015|WarmteAtlas|[[Bron CBS | http://statline.cbs.nl/StatWeb/selection/?DM=SLNL&PA=82538NED&VW=T]]|
|Kans Aardwarmte Krijt reservoir |GemeenteEnergieCodes|GT_KRIJT |Gemeente|Kans|2015|WarmteAtlas|[[Bron NLOG | http://nlog.nl/cmis/browser?id=workspace%3A//SpacesStore/76cf70ff-2498-4e77-b9f6-7e5c8707953e]]|
|Kans Aardwarmte Trias reservoir |GemeenteEnergieCodes|GT_TRIAS |Gemeente|Kans|2015|WarmteAtlas|[[Bron NLOG | http://nlog.nl/cmis/browser?id=workspace%3A//SpacesStore/24fb53ff-83eb-45af-b9f2-e7b4ae31c0c2]]|
|Kans Aardwarmte Slochteren reservoir |GemeenteEnergieCodes|GT_SLOCHT |Gemeente|Kans|2015|WarmteAtlas|[[Bron NLOG | http://nlog.nl/cmis/browser?id=workspace%3A//SpacesStore/fcfbc93b-ca40-43f3-8a96-9298d44d1c70]]|
|Potentieel SnoeiAfval per opp|GemeenteEnergieCodes|HT_SNOEI_OPP |Gemeente|GJ/(ha.jaar)|2015|WarmteAtlas|[[Bron RVO | Hout ]]|
|Potentieel Houtafval Bos per opp|GemeenteEnergieCodes|HT_BOS_OPP|Gemeente|GJ/(ha.jaar)|2015|WarmteAtlas|[[Bron RVO | Hout ]]|
|Potentieel Houtachtigen Totaal per opp |GemeenteEnergieCodes|HT_TOT_OPP |Gemeente|GJ/(ha.jaar)|2015|WarmteAtlas|[[Bron RVO | Hout ]]|
|Potentieel Biogas uit GFT per opp  |GemeenteEnergieCodes|BG_GFT_OPP |Gemeente|GJ/(ha.jaar)|2015|WarmteAtlas|[[Bron RVO | Biogas ]]|
|Potentieel Biogas uit reststromen Akkerbouw per opp|GemeenteEnergieCodes|BG_AKKER_OPP |Gemeente|GJ/(ha.jaar)|2015|WarmteAtlas|[[Bron RVO | Biogas ]]|
|Potentieel Biogas uit reststromen Gras en GroenVoederGewassen per opp|GemeenteEnergieCodes|BG_GRSGV_OPP |Gemeente|GJ/(ha.jaar)|2015|WarmteAtlas|[[Bron RVO | Biogas ]]|
|Potentieel Biogas uit Mest per opp |GemeenteEnergieCodes |BG_MSTVL_OPP |Gemeente|GJ/(ha.jaar)|2015|WarmteAtlas|[[Bron RVO | Biogas ]]|
|Potentieel Biogas Totaal per opp |GemeenteEnergieCodes|BG_TOT_OPP |Gemeente|GJ/(ha.jaar)|2015|WarmteAtlas|[[Bron RVO | Biogas ]]|
|Potentieel Houtachtigen Totaal |GemeenteEnergieCodes|HT_TOT_TJ |Gemeente|TJ/jaar|2015|WarmteAtlas|[[Bron RVO | Hout ]]|
|Potentieel Biogas Totaal |GemeenteEnergieCodes|BG_TOT_TJ |Gemeente|TJ/jaar|2015|WarmteAtlas|[[Bron RVO | Biogas ]]|

!Thema's
Thema beschrijvingen die beschikbaar zijn op gemeente niveau:
/***
|''Name:''|BibTeXPlugin|
|''Description:''|Very incomplete BibTeX implementation to work with bibliographic references|
|''Author:''|Paulo Soares|
|''Version:''|1.5|
|''Date:''|2010-11-11|
|''Source:''|http://www.math.ist.utl.pt/~psoares/addons.html|
|''Overrides''|Story.prototype.refreshTiddler|
|''Documentation:''|[[BibTeXPlugin Documentation|BibTeXPluginDoc]]|
|''License:''|[[Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.5.0|
***/
//{{{
if(!version.extensions.BibTeXPlugin) { //# ensure that the plugin is only installed once
version.extensions.BibTeXPlugin = {installed: true};

(function($) {
config.macros.cite = {
  noReference: "(??)",
  refreshTiddler: Story.prototype.refreshTiddler
};

config.macros.cite.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
  var pos, cmb = config.macros.bibliography;
  if(params.length==0) return;
  var entry = params[0];
  var args = paramString.parseParams(null,null,false);
  var title = getParam(args,"bibliography",null);
  if(title) {
    this.biblioTiddler = title;
  } else {title = this.biblioTiddler;}
  title = getParam(args,"thisBibliography",title);
  var format = getParam(args,"format",null);
  if(format) {
    this.format = format;
  } else {format = this.format;}
  format = getParam(args,"thisFormat",format);
  var argsArray = paramString.readMacroParams();
  var showAll = ($.inArray('showAll',argsArray) > -1);
  if(title && store.tiddlerExists(title)) var bib = cmb.extractEntry(title, entry);
  if(bib.content) {
    var entries = this.entries;
    if($.inArray(entry, entries)==-1) this.entries.push(entry);
    entries = this.entries;
    pos = $.inArray(entry, entries)+1;
    var author = cmb.processNames(bib.content.extract("author"), showAll);
    var year = bib.content.extract("year");
    var citation = format.replace("author", author);
    citation = citation.replace("year", year);
    citation = citation.replace("number", pos);
    wikify(citation, place);
  } else {
    wikify(this.noReference, place);
  }
}

Story.prototype.refreshTiddler = function(title,template,force){
  config.macros.cite.biblioTiddler = null;
  config.macros.cite.format = "author (year)";
  config.macros.cite.entries = [];
  var tiddler = config.macros.cite.refreshTiddler.apply(this,arguments);
  return tiddler;
}

config.macros.bibliography = {
   article: {fields: ["author", "year", "title", "journal", "volume", "pages"], format: "author (year). title. //journal// ''volume'', pages."},
   book: {fields: ["author", "year", "title", "publisher"], format: "author (year). //title//. publisher."},
   inproceedings: {fields: ["author", "year", "title", "editor", "booktitle", "pages", "publisher"], format: "author (year). title. In editor //booktitle//, pages. publisher."},
   incollection: {fields: ["author", "year", "title", "editor", "booktitle", "pages", "publisher"], format: "author (year). title. In editor //booktitle//, pages. publisher."},
   techreport: {fields: ["author", "year", "title", "institution"], format: "author (year). title. Technical report, institution."},
   manual: {fields: ["author", "year", "title", "organization"], format: "author (year). //title//. organization."},
   unpublished: {fields: ["author", "year", "title"], format: "author (year). //title//. Unpublished."}
};

config.macros.bibliography.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
        var cmc = config.macros.cite;
	var title = (cmc.biblioTiddler) ? cmc.biblioTiddler : params[0];
	if(!title || !store.tiddlerExists(title)) return;
        var argsArray = paramString.readMacroParams();
	var i, entryText;
	var entries = [];
	if($.inArray('showAll',argsArray) > -1) {
		entryText = this.extractAllEntries(title);
		for(i=0; i<entryText.length; i++) {
			entries[entries.length] = this.processEntry(entryText[i], i);
		}
	} else {
		for(i=0; i<cmc.entries.length; i++){
			entryText = this.extractEntry(title, cmc.entries[i]);
			if(entryText) {
                                entries[entries.length] = this.processEntry(entryText, i);
			}
		}
	}
	entries.sort();
        wikify(entries[0] , place);
	for (i=1; i < entries.length; i++) {
		wikify("\n\n" + entries[i] , place);
	}
	return true;
}

config.macros.bibliography.processNames = function(names, showAll) {
	var i, authors = names.split(" and ");
	var entry = authors[0];
	var numAuthors = authors.length;
	var fullEntry = entry;
	if (numAuthors==2) {
		entry += " and " + authors[1];
		fullEntry = entry;
	}
	if (numAuthors>2) {
		fullEntry = entry;
		for (i=1; i < numAuthors; i++) {
			if (i==numAuthors-1) {fullEntry += " and "} else {fullEntry += ", "};
			fullEntry += authors[i];
		}
		if(showAll) {entry = fullEntry;} else {entry += " et al.";}
	}
	return entry;
}

config.macros.bibliography.processEntry = function(entry, pos) {
  var field, text=entry.content;
  var fields={};
  fields.number = pos+1;
  var type = this[entry.type];
  var output = type.format;
  for(var i=0; i<type.fields.length; i++){
    field = type.fields[i];
    switch(field){
    case "author":
      fields.author = this.processNames(text.extract("author"), true);
      break;
    case "title":
      var url = text.extract("url");
      fields.title = text.extract("title");
      fields.title = (url=='') ? fields.title : "[[" + fields.title + "|" + url + "]]";
      break;
    case "editor":
      var editor = text.extract("editor");
      fields.editor = (editor=='') ? editor : this.processNames(editor,true) + " (Eds.), ";
      break;
    default:
      fields[field] = text.extract(field);
    }
    output = output.replace(field, fields[field]);
  }
  return output;
}

config.macros.bibliography.extractEntry = function(title,entry) {
    var bib = {type: null, content: null};
    var text = store.getTiddlerText(title);
    var re = new RegExp('\\s*@(\\w+?)\\{\\s*' + entry + '\\s*,\\s*(.[^@]+)\\}','mi');
    var field = text.match(re);
    if(field) {
        bib.type = field[1].toLowerCase();
        bib.content = field[2];
    }
    return bib;
}

config.macros.bibliography.extractAllEntries = function(title) {
    var bib, field, entries = [];
    var text = store.getTiddlerText(title);
    var bibs = text.match(/\s*@(\w+?)\{\s*(.[^@]+)\}/mgi);
    for(var i=0; i<bibs.length; i++){
        field=bibs[i].match(/\s*@(\w+?)\{\s*(.[^@]+)\}/mi);
        bib = {type: null, content: null};
        if(field) {
            bib.type = field[1].toLowerCase();
            bib.content = field[2];
            if(bib.type!='string' && bib.type!='preamble' && bib.type!='comment') entries.push(bib);
        }
    }
    return entries;
}

config.macros.bibliography.extractField = function(field) {
    var text = "";
    var re = new RegExp('\\s*'+field+'\\s*=\\s*[\\{|"]\\s*(.+?)\\s*[\\}|"]','mi');
    var fieldText = this.match(re);
    if(fieldText){
        text = fieldText[1].replace(/\{|\}/g,'');
        if(field!='url') text = text.replace(/-+/g,"—");
    }
    return text;
}

String.prototype.extract = config.macros.bibliography.extractField;

config.shadowTiddlers.BibTeXPluginDoc="The documentation is available [[here.|http://www.math.ist.utl.pt/~psoares/addons.html#BibTeXPluginDoc]]";
})(jQuery)
}
//}}}
{{{
@TECHREPORT{VAB2009,
  author = {Vereniging Afvalbedrijven},
  title = {Milieuverslag gft-afval 2009},
  institution = {Vereniging Afvalbedrijven},
  year = {2009},
  comment = {=100*0,6*36/1000 'Nm3 biogas/ton*percentage methaan*GJ/Nm3 methaan},
  url = {http://www.gft-afval.nl/download/milieuverslagen/VerenigingAfvalbedrijven_Milieuverslag_gft-afval2009.pdf}
}

@TECHREPORT{NREL2010,
  author = {Jalalzadeh-Azar, Ali; Saur, Genevieve; Lopez, Anthony},
  title = {Biogas Resources Characterization},
  institution = {NREL National renewable},
  year = {2010},
  comment = {0,0223 GJ/Nm3 biogas},
  owner = {DIJKSHOORNL},
  timestamp = {2013.10.18},
  url = {http://www.nrel.gov/docs/fy10osti/48057.pdf}
}

@TECHREPORT{WUR2007,
  author = {Spijker, J.H. and Elbersen, H.W. and de Jong, J.J. and van den Berg,
	C.A. and Niemeijer, C.M.},
  title = {Biomassa voor energie uit de nederlandse natuur},
  institution = {WUR Wageningen Universiteit},
  year = {2007},
  comment = {217000 ton ds is 3.7 PJ op 369000 ha},
  owner = {DIJKSHOORNL},
  timestamp = {2013.10.18},
  url = {http://www2.alterra.wur.nl/webdocs/pdffiles/alterrarapporten/alterrarapport1616.pdf}
}

@TECHREPORT{IF2011,
  author = {Willemsen,A.; Dijkshoorn, L.; van Wees, J.D.; Heler, R.},
  title = {Diepe geothermie 2050; Een visie voor 20% duurzame energie voor Nederland},
  institution = {Agentschap NL; IF Techbology; Ecofys; TNO},
  year = {2011},
  owner = {DIJKSHOORNL},
  timestamp = {2013.10.18},
  url = {http://www.agentschapnl.nl/sites/default/files/bijlagen/Rapportage%20-%20Visie%20diepe%20geothermie%202050.pdf}
}

@TECHREPORT{IF2012,
  author = {Buik, N.A.},
  title = {Meer druk op geothermie; Juridische aspecten, Techniek en Kosten,
	en Verzekerbaarheid},
  institution = {IF Technologie},
  year = {2012},
  comment = {Putstimulatie},
  keywords = {aardwarmte, geothermie},
  owner = {dijkshoornl},
  timestamp = {2013.10.24},
  url = {http://www.energiek2020.nu/fileadmin/user_upload/energiek2020/docs/Aardwarmte/Putstimulatie_Geothermie_-_DLV.pdf}
}

@TECHREPORT{IFKema2012,
  author = {Hellebrand, Koen; Post, Ronald Jan; in 't Groen, Bart},
  title = {Kansen voor ondiepe geothermie in de tuinbouw},
  institution = {IF Technologie, DLV, Kema},
  year = {2012},
  comment = {Potentieel Geothermie 0-1000 m diepte},
  keywords = {aardwarmte},
  owner = {dijkshoornl},
  timestamp = {2013.10.24},
  url = {http://www.energiek2020.nu/onderzoeken/detail/rapport-kansen-voor-ondiepe-geothermie/}
}

@TECHREPORT{Muylaert2010,
  author = {Muylaert, Koenraad and Sanders, Johan},
  title = {Inventarisatie Aquatische Biomassa: Vergelijking tussen algen en landbouwgewassen},
  institution = {Katholieke Universiteit Leuven en Wageningen Universiteit},
  year = {2010},
  keywords = {biogas, biobased economy, biomassa},
  owner = {dijkshoornl},
  timestamp = {2013.10.24},
  url = {http://library.wur.nl/WebQuery/edepot/163456}
}

@TECHREPORT{AgentschapNL2011,
  author = {AgentschapNL},
  title = {Voorbeeld woningen 2011 Bestaande bouw},
  institution = {Agentschap NL},
  year = {2011},
  keywords = {huishoudens},
  owner = {dijkshoornl},
  timestamp = {2013.10.24},
  url = {http://www.agentschapnl.nl/sites/default/files/bijlagen/4.%20Brochure%20Voorbeeldwoningen%202011%20bestaande%20bouw.pdf}
}

@ARTICLE{Kramers2012,
  author = {Kramers, L; van Wees, J.D.; Pluymakers, M.P.D; Kronimus, A.; Boxem, T.},
  title = {Direct heat resource assessment and subsurface information systems for geothermal aquifers; the Dutch perspective},
  journal = {Netherlands Journal of Geosciences- Geologie en Mijnbouw},
  year = {2012},
  volume = {91-4},
  pages = {637-649},
  keywords = {aardwarmte, potentieel},
  owner = {dijkshoornl},
  timestamp = {2013.10.25},
  url = {http://www.thermogis.nl/downloads/Kramers-NJG-91-4-12.pdf}
}
!Wat is biovergisting?
|<html><img src="https://www.pleio.nl/file/download/31122692" width="304" alt="Vergistings schema" /></html>|vertical-align:top;padding:1em;<html>In Nederland hebben meerdere boerenbedrijven een mestvergister. Vergisten is de biologische omzetting van organisch afval materiaal waarbij biogas ontstaat, dat grotendeels bestaat uit methaangas en kooldioxide. Het wordt bijvoorbeeld toegepast als brandstof in motoren voor de productie van elektriciteit en warmte of kan worden omgewerkt tot aardgas kwaliteit. Het residu uit de vergisters wordt gebruikt of verkocht als bemesting, en bevat vezels die mogelijk geschikt zijn voor de papierindustrie.</html>|

|<html><img src="https://www.pleio.nl/file/download/31122732" alt="Vergister (Bron: Larenstein)" width="304" height="228" /></html>|vertical-align:top;padding:1em;<html>Op de foto staat en vergistingsinstallatie met daarop de groene silo die is gevuld met mest en co-substraat, rubberen bol bovenop is de gas opslag, de container op de voorgrond is de warmtekracht installatie en de bak aan de rechter kant is de toevoer van het co-substraat.</html>|

!Beschrijving potentieel kaarten
!!Mestkaart
De mestkaart presenteert de hoeveelheid biogas uit vloeibare mest uitgedrukt in GJ per hectare land voor elke gemeente; 

Mestvolume gevens per gemeente (CBS statline) zijn hiervoor omgerekend naar GJ per hectare land voor elke gemeente met onderstaande formule:
>@@color:red;BG_MEST_OPP@@ = [30 (Nm3 biogas )/(ton mest) * 60% (aandeel methaan in biogas) * 0.036 GJ/(Nm3 methaan)]/ (ha land)

!!GFT kaart
Deze kaart presenteert de hoeveelheid biogas uit Groente, Fruit en Tuin afval uitgedrukt in GJ per hectare land voor elke gemeente; 
Voor de conversie is gebruik gemaakt van (<<cite VAB2009 bibliography:Bibliography>>) 
>BG_GFT_OPP = [100 (Nm3 biogas )/(ton GFT) * 60% (aandeel methaan in biogas) * 0.036 GJ/(Nm3 methaan)]/ (ha land)
De gegevens over Groente, Fruit en Tuinafval worden verzameld door het CBS, en zijn terug te vinden in CBSStatline.

!!Akker en Grasland kaart
De kaart presenteert Bio Restfractie van akkerbouw en grasland in GJ per hectare land voor elke gemeente.
In onderstaande figuur (<<cite Muylaert2010 bibliography:Bibliography>>)  zijn de akkerbouw gewassen ingedeeld in verschillende componenten. Alleen de Bio Restcomponent is verwerkt en opgezet in de biogas potentie kaart van akkerbouw en grasland. De andere componenten kunnen beter ingezet worden voor andere zaken, zoals voedsel.

<html><div align="center">
<img src="https://www.pleio.nl/file/download/31122642" alt="Akkerbouw en Grasland"  vspace="1" hspace="1"/>
</div></html>

Voor de potentie kaart is deze Bio Rest component voor ieder gewas vermenigvuldigd met het akkerbouw areaal van dit gewas (CBS gegevens), daarna is deze totale beschikbaar energie voor alle gewassen opgetelt en vervolgens gedeelt door het totale oppervlakte land van de gemeente. Dit resulteert dus in een Bio Rest  in GJ per hectare land voor elke gemeente.

__Bron__:
*<<bibliography>>

!Hoe wordt biomassa verwerkt?
Biomassa bestaat uit verschillende componenten die na scheiding ieder een aparte toepassing kunnen krijgen. Hierdoor krijgt het gebruik van de biomassa een veel groter effect en een veel hogere economische waarde dan wanneer de biomassa zonder scheiding in componenten was ingezet.
In ongescheiden vorm kunnen we biomassa(reststromen) zonder problemen inzetten in voeding, in diervoeding, in biogasfermentaties en in verbrandingstoepassingen. Echter, voor hoogwaardige toepassingen zoals transportbrandstoffen en de (bulk)chemie, moeten de goede uitgangscomponenten worden gescheiden van de overige componenten. Daartoe dient bioraffinage, hetgeen door de overheid als een sleuteltechnologie wordt gezien.


''Bioraffinage'' (gericht op optimale waardebenutting) houdt in dat uit een landbouwproduct eerst de stoffen of materialen worden geïsoleerd die kunnen worden ingezet in hoogwaardige producten. Bioraffinage is eigenlijk een verzamelnaam voor een aantal sleuteltechnologieën: 
*''mechanische'' scheidingstechnologie: extractie, persen, filtratie, centrifugeren, pervaporatie, etc.
*''biochemische of biotechnologische'' synthese: fermentatie of vergisting met gebruik van enzymen, gisten, schimmels, bacteriën en algenproductie
*''thermochemische'' synthese: vergassen, hydrothermal upgrading, torrefractie en pyrolyse

Reststromen die overblijven na bioraffinage, kunnen worden omgezet in warmte of elektriciteit. Op deze manier levert het landbouwproduct meer op voor de producenten dan wanneer het hele product alleen wordt gebruikt voor de productie van elektriciteit of warmte.
Daarnaast worden Micro-organismen en enzymen als katalysator in de industriele productieprocessen gebruikt (witte biotechnologie), waardoor de warmtevraag afneemt. De productie van antibiotica met deze nieuwe biotechnologie is bijvoorbeeld 50 procent energiezuiniger en ook het raffinageproces kan in de toekomst veel energiezuiniger.

Aangezien biomassa en biogas ook wordt gebruikt voor elektriciteits productie gaat nog veel "duurzame" restwarmte verloren.

!Voorbeelden van biovergisting zijn:
#Vergisting van mest op boerenbedrijven. Soms worden hier producten zoals verhakselde mais aan toegevoegd om de methaangas opbrengst te verhogen. Dit wordt co-vergisting genoemd. 
#Vergisting van alleen biorestanten van akkerbouw en grasland komt ook voor
#Vergisting van rioolslib bij rioolwater zuiveringsbedrijven. De gasopbrengst is ruim voldoende om de hele installatie van energie te voorzien
#Vergisting van het ‘groen’afval(gft) uit huishoudens
#Vergisting van restafval uit de voedings en genotsmiddelen industrie.

!Hoe bereken ik de jaarlijkse warmte en elektriciteits productie uit mest van 1 koe?
Een melkkoe levert 20 m³ mest. Deze 20 m³ mest levert ongeveer 500 m³ biogas. Dit biogas kan op 2 manieren worden ingezet; het kan opgewerkt worden tot aardgas kwaliteit of kan worden verstookt met behulp van een warmte/kracht koppeling(WKK). Een WKK is een gasmotor gekoppeld aan een generator die stroom levert waarbij de ontstane warmte ook wordt benut om zo een hoger rendement te krijgen. In biogas zit slechts 74% methaangas, het brandbare bestanddeel van aardgas, waardoor de totale productie uit komt op ruim 370 m³ aardgas. Vergeleken met het gemiddelde aardgas gebruik van een Nederlands huishouden van 1750 m³ per jaar zijn 5 koeien aldus voldoende voor 1 huis.

Wanneer het biogas wordt verstookt in een WKK installatie levert 1 m³ biogas 4 kWh warmte en 2 kWh elektriciteit op. 

!Wat is de Ambitie van Nederland?
De doelstelling van Nederland is 14% duurzame energie in 2020 en 16% duurzame energie in 2023. 
De huidige realisatie van duurzame energie is te vinden op [[Hernieuwbare energie; eindverbruik @CBSStatline | http://statline.cbs.nl/Statweb/publication/?DM=SLNL&PA=83109ned&D1=0-1,4-5&D2=a&D3=a&D4=23-25&HDR=T&STB=G2,G1,G3&VW=T]]

!Hoe kom ik verder?
*[[Data: WarmteAtlas,biogas potentie | http://www.warmteatlas.nl ]]
*[[Data: DANK Digitale Atlas Natuurlijk Kapitaal | http://www.nationaalgeoregister.nl ]]
*[[Techniek: Biogas uit gras | https://www.rvo.nl/sites/default/files/2014/04/Vergisting-van-grassen-Eindrapport.pdf]]
*[[Wet en regelgeving|http://www.rijksoverheid.nl/documenten-en-publicaties/kamerstukken/2014/01/27/kamerbrief-met-ovezicht-mestvergisters.html]]
*[[Financieel: SDE Subsidie duurzame energie | http://www.rvo.nl/subsidies-regelingen/biomassa-sde-2015]]
*[[Financieel: Techno-Economische Evaluatie Model | http://ecp-biomass.eu/node/128 ]]
*[[Branche Info en Techniek: PPS Groen Gas Nederland | http://www.groengas.nl/]]
*[[Markt: afval vraag en aanbod | http://www.deafvalmarkt.nl/nl/home/]]
*[[Markt: Orgaworld | http://orgaworld.nl/organisch-afval-tot-waarde-brengen]]
*[[Markt: Huismans Swillgasser vergisting keukenafval bij van der valk in Cuijk| http://www.swillgasser.nl/nl/de-techniek/ ]]
*[[Markt: Host monomestvergister 300 koeien | http://www.host.nl/nl/biogasinstallaties/microferm/]]
*[[Internationaal: ERA NET bioenergy | http://www.eranetbioenergy.net/ ]]

!Referenties
<<bibliography>>
!Overzicht
Een gemeente is opgebouwd uit wijken en een wijk bestaat uit buurten.
Een overzicht van de gebiedsindeling in Nederland vind u hier.
[[Gebiedsindeling|http://statline.cbs.nl/StatWeb/publication/?VW=T&DM=SLNL&PA=72014NED&D1=0-1,7-8,19-24,33-34&D2=a&HD=110706-1033&HDR=T&STB=G1]]

!Buurt Attributen WarmteAtlas
Volgende Energie Attributen zijn beschikbaar per Buurt voor het Jaartal 2015.
* WMS Service ~WarmteAtlas: http://rvo.b3p.nl/geoserver/WarmteAtlas/wms?
* WFS Service ~WarmteAtlas: http://rvo.b3p.nl/geoserver/WarmteAtlas/wfs?
* ~KaartLaagnaam: ''~BuurtEnergieCode'' (alle buurten)
* ~KaartLaagnaam: ''~WoonKernen'' (buurten met > 20 inwoners/ha die potentieel hebben voor een warmtenet indien een warmtebron aanwezig is)

|Beschrijving|Kaart Naam|Attribuut Naam|Detail Niveau|Eenheid|WMS en WFS service|Bron|h
|Buurt Code|BuurtEnergieCode|BU_CODE|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Buurt Naam|BuurtEnergieCode|BU_NAAM|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|~GemeenteNaam|BuurtEnergieCode|GM_NAAM|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Aantal huishoudens|BuurtEnergieCode|AANTAL_HH|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Aantal inwoners|BuurtEnergieCode|AANT_INW|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Aantal Autos|BuurtEnergieCode|AUTO_HH|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Aantal Autos per Huishouden|BuurtEnergieCode|AUTO_TOT|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Bevolkings dichtheid|BuurtEnergieCode|BEV_DICHTH|Buurt|inwoners/km2|WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Gemiddeld Huishoudens Grootte|BuurtEnergieCode|GEM_HH_GR|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Gasgebruik per Inwoner|BuurtEnergieCode|HH_GAS_INW|Buurt|GJ/inwoner|WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Elektriciteitsgebruik per Inwoner|BuurtEnergieCode|HH_EL_INW|Buurt|GJ/inwoner|WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|~CO2emissie Gas Bewoner|BuurtEnergieCode|HH_C_INW|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Totaal Huishoudelijk Gasgebruik|BuurtEnergieCode|HH_GAS_TJ|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Totaal Huishoudelijk Elektriciteitsgebruik|BuurtEnergieCode|HH_EL_TJ|Buurt|TJ/jaar|WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Gasgebruik Huishoudens per opp|BuurtEnergieCode|HH_GAS_OPP|Buurt|GJ/(ha.jaar)|WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Potentieel Koude Opslag door gesloten bodemsystemen|BuurtEnergieCode|GS_KOUD|Buurt|GJ/(ha.jaar)|WarmteAtlas|[[Bron RVO | Bodemopslag warmte en koude ]]|
|Potentieel Warmte Opslag door gesloten bodemsystemen|BuurtEnergieCode|GS_WARM|Buurt|GJ/(ha.jaar)|WarmteAtlas|[[Bron RVO | Bodemopslag warmte en koude ]]|
|Potentieel Koude Opslag door open bodemsystemen|BuurtEnergieCode|OS_KOUD|Buurt|GJ/(ha.jaar)|WarmteAtlas|[[Bron RVO | Bodemopslag warmte en koude ]]|
|Potentieel Warmte Opslag door open bodemsystemen|BuurtEnergieCode|OS_WARM|Buurt|GJ/(ha.jaar)|WarmteAtlas|[[Bron RVO | Bodemopslag warmte en koude ]]|
|Kans Aardwarmte Krijt-Jura reservoir |BuurtEnergieCodes|GT_KRIJT |Buurt|Kans|WarmteAtlas|[[Bron NLOG | http://nlog.nl/cmis/browser?id=workspace%3A//SpacesStore/76cf70ff-2498-4e77-b9f6-7e5c8707953e]]|
|Kans Aardwarmte Trias reservoir |BuurtEnergieCodes|GT_TRIAS |Buurt|Kans|WarmteAtlas|[[Bron NLOG | http://nlog.nl/cmis/browser?id=workspace%3A//SpacesStore/24fb53ff-83eb-45af-b9f2-e7b4ae31c0c2]]|
|Kans Aardwarmte Slochteren reservoir |BuurtEnergieCodes|GT_SLOCHT |Buurt|Kans|WarmteAtlas|[[Bron NLOG | http://nlog.nl/cmis/browser?id=workspace%3A//SpacesStore/fcfbc93b-ca40-43f3-8a96-9298d44d1c70]]|
|Lage Temperatuur Condens ~RestWarmte uit ~KoelProcessen pe rBuurt Oppervlak|BuurtEnergieCode|LT_WA_OPP|Buurt|GJ/(ha.jaar)|WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Totaal Lage Temperatuur Condens ~RestWarmte uit ~KoelProcessen|BuurtEnergieCode|LT_WA_TJ|Buurt|TJ/jaar|WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Oppervlakte Totaal|BuurtEnergieCode|OPP_LAND|Buurt|ha|WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Oppervlakte Land|BuurtEnergieCode|OPP_TOT|Buurt|ha|WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Oppervlakte Water|BuurtEnergieCode|OPP_WATER|Buurt|ha|WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Percentage Huur Corporaties|BuurtEnergieCode|P_HUURCORP|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Percentage Overige Verhuurders|BuurtEnergieCode|P_HUUROVVH|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Percentage Huurwoningen|BuurtEnergieCode|P_HUURWON|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Percentage Koopwoningen|BuurtEnergieCode|P_KOOPWON|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Percentage Leegstand|BuurtEnergieCode|P_LEEGSW|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Percentage Stadsverwarming|BuurtEnergieCode|P_STADVERW|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Percentage Woningen bouwjaar tot 2000|BuurtEnergieCode|P_WONT2000|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Percentage Woningen bouwjaar vanaf 2000|BuurtEnergieCode|P_WONV2000|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Aantal Woningen|BuurtEnergieCode|WONINGEN|Buurt||WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|
|Gemiddelde ~WoningWaarde|BuurtEnergieCode|WOZ|Buurt|x1000euro|WarmteAtlas|[[Bron CBS en Kadaster|https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische%20data/wijk-en-buurtkaart-2015]]|



!Thema's
Thema beschrijvingen van data die beschikbaar zijn op buurt niveau
Gegevens die beschikbaar zijn op buurt niveau:
/***
|Name:|CloseOnCancelPlugin|
|Description:|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|
|Version:|3.0.1a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#CloseOnCancelPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.commands.cancelTiddler,{

  handler_mptw_orig_closeUnsaved: config.commands.cancelTiddler.handler,

  handler: function(event,src,title) {
    this.handler_mptw_orig_closeUnsaved(event,src,title);
    if (!story.isDirty(title) && !store.tiddlerExists(title) && !store.isShadowTiddler(title))
      story.closeTiddler(title,true);
    return false;
  }

});

//}}}
Name: MptwSmoke
Background: #fff
Foreground: #000
PrimaryPale: #aaa
PrimaryLight: #777
PrimaryMid: #111
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

!! Beschrijving potentieel kaart

De kaart geeft een inschatting van de totale hoeveelheid warmte die vrijkomt bij koelinstallaties van supermarkten, slachthuizen, vrieshuizen. 
Meer info over de methodiek en de toepassing van deze warmte is beschreven in onderstaand rapport.

!! Meer info:
[[ Restwarmte uit Koelinstallaties | https://www.kwa.nl/files/2018001/raw/a220079574b978f72e029dd22be0f2af.pdf]]
<<tabs tabsClass
Layout "Layout Templates" SystemLayout
System "System Tiddlers" SystemTiddlers
Style "StyleSheet" [[StyleSheet]]
Publish "Templates and macros for publishing" PublishTiddlers
Options "Personal Preferences" SystemOptions
Plugins "Installed Plugins" SystemPlugins
Shadows "Hidden System Pages" ShadowPages
Bibliography "Reference" [[Bibliography]]
Example "LorumIpsum" [[LorumIpsum]]
Intro "Starter" [[WelcomeToTiddlyspot]]
>>
!Welke energie-gerelateerde WMS-services, WFS-services en open data bestaan er Nationaal?

>Een korte uitleg over hoe informatie uit een WMS-service in een viewer of in excel gebruikt kan worden, staat beschreven in volgende presentatie (inclusief voorbeeld excel en >voorbeeld webviewer).
>* [[Presentatie: Intro gebruik van energiewebservices in viewer en excel | https://www.pleio.nl/file/download/41356202]]
>* [[Download voorbeeld viewer | https://www.pleio.nl/file/download/34777972]]
>* [[Download voorbeeld excel | https://www.pleio.nl/file/download/41356112]]

Een wms-service bestaat uit verschillende kaartlagen, en elke kaartlaag kan verschillende attributen bevatten.

Voor de wfs-service vervang 'wms' in onderstaande services door 'wfs'

| Servicenaam Energie | WMS url |h
|WarmteAtlas |http://rvo.b3p.nl/geoserver/WarmteAtlas/wms? |
|CBSEnergieData|http://rvo.b3p.nl/geoserver/CBSEnergieData/wms? |
|Omgevingswarmte |https://geodata.nationaalgeoregister.nl/wko/wms? |
|Reststromen |https://geodata.nationaalgeoregister.nl/reststromen/wms? |
|Waterschapservices |http://maps.waterschapservices.nl/inspire/wms? |
|BAG (Basis Administratie Gebouwen) |http://geodata.nationaalgeoregister.nl/bag/wms? |
|Aardwarmtevergunningen | http://www.nlog.nl/arcgis/services/nlog/gdw_ng_licence_earthheat_utm/MapServer/WMSServer? |
|NEA (Nationale Energie Atlas) |http://geodata.nationaalgeoregister.nl/neainfolagenkadaster/wms? |


| Servicenaam Achtergrond | WMS url |h
|Luchtfoto |https://geodata1.nationaalgeoregister.nl/luchtfoto/wms?   |
|BGT (Basisregistratie Grootschalige Topografie) |https://geodata.nationaalgeoregister.nl/brpgewaspercelen/wms?|
|AHN (Algemene hoogte kaart Nederland) |https://geodata.nationaalgeoregister.nl/ahn1/wms? |
|BestuurlijkeGrenzen |https://geodata.nationaalgeoregister.nl/bestuurlijkegrenzen/wms?|

! Overige relevante wms-services
*  [[Geofysische- Data NLOG (seismiek, boringen, platforms) | http://www.nlog.nl/node/567]]


!Welke Attribuut gegevens bevatten de kaartlagen in de verschillende services?
!!EnergieInfo: Vraag en Potentieel per Regio 2015
|Beschrijving | Kaartnaam |   Detail Niveau | Eenheid| WMS-service|DownloadLink|h
|Bevolkingsdichtheid|GemeenteEnergieInfo|Gemeente|Inwoners/km2|WarmteAtlas||
|Aantal inwoners|GemeenteEnergieInfo|Gemeente| |WarmteAtlas||
|CO2emissie Gas Bewoner|GemeenteEnergieInfo|Gemeente|kg/inwoner|WarmteAtlas||
|Gas gebruik Huishoudens per opp|GemeenteEnergieInfo|Gemeente|GJ/(ha.jaar)|WarmteAtlas||
|Gas gebruik Utiliteitsbouw per opp|GemeenteEnergieInfo|Gemeente|GJ/(ha.jaar)|WarmteAtlas||
|Gas gebruik Glastuinbouw per opp|GemeenteEnergieInfo|Gemeente|GJ/(ha.jaar)|WarmteAtlas||
|Gas gebruik Huishoudens Totaal|GemeenteEnergieInfo|Gemeente|GJ/jaar|WarmteAtlas||
|Gas gebruik Utiliteitsbouw Totaal|GemeenteEnergieInfo|Gemeente|GJ/jaar|WarmteAtlas||
|Gas gebruik Glastuinbouw Totaal|GemeenteEnergieInfo|Gemeente|GJ/jaar|WarmteAtlas||
|Potentieel Bodemopslag warmte/koude | GemeenteEnergieInfo|Gemeente|GJ/(ha.jaar)|WarmteAtlas||
|Potentieel Aardwarmte | GemeenteEnergieInfo|Gemeente|Kans|WarmteAtlas||
|Potentieel Biogas | GemeenteEnergieInfo|Gemeente|GJ/(ha.jaar)|WarmteAtlas||
|Potentieel Houtafval|GemeenteEnergieInfo|Gemeente|GJ/(ha.jaar)|WarmteAtlas||
|Potentieel Biogas | GemeenteEnergieInfo|Gemeente|GJ/(ha.jaar)|WarmteAtlas||
|Potentieel Houtafval|GemeenteEnergieInfo|Gemeente|GJ/(ha.jaar)|WarmteAtlas||
|Bevolkingsdichtheid|BuurtEnergieInfo|Buurt|Inwoners/km2|WarmteAtlas||
|Aantal inwoners|BuurtEnergieInfo|Buurt| |WarmteAtlas||
|CO2emissie Gas Bewoner|BuurtEnergieInfo|Buurt|kg/inwoner|WarmteAtlas||
|Gas gebruik Huishoudens per opp|BuurtEnergieInfo|Buurt|GJ/(ha.jaar)|WarmteAtlas||
|Gas gebruik Utiliteitsbouw per opp|BuurtEnergieInfo|Buurt|GJ/(ha.jaar)|WarmteAtlas||
|Gas gebruik Glastuinbouw per opp|BuurtEnergieInfo|Buurt|GJ/(ha.jaar)|WarmteAtlas||
|Gas gebruik Huishoudens Totaal|BuurtEnergieInfo|Buurt|GJ/jaar|WarmteAtlas||
|Gas gebruik Utiliteitsbouw Totaal|BuurtEnergieInfo|Buurt|GJ/jaar|WarmteAtlas||
|Gas gebruik Glastuinbouw Totaal|BuurtEnergieInfo|Buurt|GJ/jaar|WarmteAtlas||
|Potentieel Bodemopslag warmte/koude |BuurtEnergieInfo|Buurt|GJ/(ha.jaar)|WarmteAtlas||
|Potentieel Aardwarmte |BuurtEnergieInfo|Buurt|Kans|WarmteAtlas||

!!CO2 emissies 2015
|Beschrijving | Kaartnaam | Eenheid |  Detail Niveau |WMS-service|DownloadLink|h
|CO2 emissies door Gas gebruik Huishoudens | CO2emissieGasBewoner | kg/inwoner | Buurt|WarmteAtlas||
|CO2 emissies Industrie | CO2emissieIndustrie |kg| Bedrijfslocatie|WarmteAtlas||

!!Locaties
|Beschrijving | Kaartnaam | Eenheid |  Detail Niveau | Jaar| Extra Attributen|WMS-service|DownloadLink|h
|Ligging Glastuinbouw |Glastuinbouw | |Polygoon|2010|Oppervlak|WarmteAtlas||
|Ligging Bedrijfsterreinen| | | |2010|Oppervlak|WarmteAtlas||
|Ligging Woonkernen > 20 inw/ha| | |Buurt|2014|zie BuurtEnergieInfo|WarmteAtlas||
|Ligging Grote Industrie |GroteIndustrie| |  |2013|CO2 emissie 1990, 2005, 2013 en Indicatie Energievraag |WarmteAtlas||
|Hoogte Grote Gebouwen > 5000 m3|GroteGebouwen| m |Polygoon| |Omtrek, Hoogte, Status, Type, GrondOppervlakte|WarmteAtlas||
|Ligging Gebouwen|Pand | |Pand|2016|Bouwjaar, Gebruiksdoel, GebruiksOppervlakte|BAG||
|Ligging Percelen | | |Polygoon|?||BRP||
|EnergieLabel (nog niet beschikbaar)| | |Gebouw|2016|EnergieIndex|?EnergieLabel||
|Ligging zuiveringsinstallaties |US.EnvironmentalManagementFacility | |Locatie |2016| |Waterschapservices|[[link | http://maps.waterschapservices.nl/www/download/data/Afvalwaterleiding_nl.xml]]|
|Ligging afvalwater leidingen |Inspire.Sewerpipe | |Lijn|2016| |Waterschapservices|[[link | http://maps.waterschapservices.nl/www/download/data/Afvalwaterleiding_nl.xml]]|

Komt nog:
* Interferentiegebieden WKO
* Natura2000
* Boorvrijezone's


!!EnergieInfrastructuur
|Beschrijving | Kaartnaam | Eenheid |  Detail Niveau | Jaar|WMS-service|DownloadLink|h
|Warmtenetten|WarmteNetten| |Buurt|2014|WarmteAtlas||
|Gasnetten Enexis|GasNettenEnexis| |1m|-|WarmteAtlas||
|Gasnetten Stedin|GasNettenStedin| ||-|WarmteAtlas||



!!EnergieLevering 2015
|Beschrijving | Kaartnaam | Eenheid |  Detail Niveau r|WMS-service|DownloadLink|h
|Gemiddeld Gas gebruik per Woning |GasPerWoning | m3/jaar | Wijk,Buurt, PC4,PC6|CBSEnergieData||
|Gemiddeld Gas gebruik per Bedrijf (Industrie, Ubouw en Glastuinbouw)|GasPerBedrijf |m3/jaar|Wijk,Buurt,PC4,(PC6)|CBSEnergieData||

!!EnergieBesparingsInfo 2016
|Beschrijving | Kaartnaam | Eenheid |  Detail Niveau | Jaar|WMS-service|DownloadLink|h
|Potentiele NOM-woningen: RijtjesWoningen 1950-1980 Wooncooperatie |Potentiele Nul op de Meter pandcontouren| |Pand|NEA||
|Procentueel eigendom woningen: particlulier, part. verhuur, woningcorporatie, overig |Bezitsverhouding woningen per postcode | |PC6|NEA||

!!Energie Potentieel (Theoretisch)
|Beschrijving | Kaartnaam | Eenheid |  Detail Niveau | Jaar|WMS-service|DownloadLink|h
|Potentieel Koude/Warmte opslag open systemen| |GJ/(ha.jaar)|Buurt, Gemeente||Omgevingswarmte||
|Potentieel Koude/Warmte opslag gesloten systemen| |GJ/(ha.jaar)|Buurt,Gemeente||Omgevingswarmte||
|Potentieel Aardwarmte Krijt en Jura reservoirs|AardwarmteKrijtJura |Kans |Polygonen||WarmteAtlas||
|Potentieel Aardwarmte Trias reservoirs|AardwarmteTrias |Kans |Polygonen||WarmteAtlas||
|Potentieel Biogas Restfractie akkerbouw en grasland|biogasakkerbouw |GJ/(ha.jaar)|Gemeente|2014|Reststromen||
|Potentieel Biogas uit Vloeibare mest|biogasvloeibaremest |GJ/(ha.jaar)|Gemeente|2015|Reststromen||
|Potentieel Biogas uit GFT afval |biogasgft |GJ/(ha.jaar) |Gemeente |2015|Reststromen||
|Potentieel biogas totaal|totaalpotentieelbiogas|GJ/(ha.jaar) |Gemeente |2015|Reststromen||
|Potentieel houtachtige biomassa snoeiafval|huishoudelijkhoutensnoeiafval|GJ/(ha.jaar) |Gemeente |2015|Reststromen||
|Potentieel houtachtige biomassa bos|houtachtigebiomassabos |GJ/(ha.jaar)|Gemeente|2015|Reststromen||
|Totaal potentieel houtachtige biomassa |totaalpotentieelhoutachtigebiomassa|GJ/(ha.jaar)|Gemeente|2015|Reststromen||


!Waar kan ik de geografische gegevens over energie vraag en energie potentieel downloaden?
* [[Opendata Overheid; | https://data.overheid.nl/data/]]
[[Home]]
zie [[ Nationaal Georegister | http://www.nationaalgeoregister.nl]]
zie [[ Open Data Overheid | http//:data.overheid.nl ]]


Voor de nationale monitoring van broeikasgasemissies in het kader van het klimaatverdrag (UNFCCC) en de monitoring op bedrijfsniveau ten behoeve van de Europese CO2-emissiehandel is het voorgeschreven dat er een nationale lijst van gedefinieerde energiedragers en standaard CO2-emissiefactoren is vastgesteld. Deze lijst dient uit te gaan van de IPCC lijst met default CO2-emissiefactoren, maar dient nationale waarden te bevatten waar de nationale
situatie afwijkt. Deze lijst zal in Nederland ook worden gebruikt in het (e-)MJV, omdat de MJV’s worden gebruikt voor de nationale monitoring en omdat de gegevens over CO2-emissiehandel ook in het e-MJV zullen worden ingevuld.

!Meer info
[[Lijst met energiedragers | https://www.rvo.nl/sites/default/files/2013/10/Vreuls%202005%20NL%20Energiedragerslijst.pdf]]
Behorende bij de [[WarmteAtlas | http://rvo.b3p.nl/viewer/app/Warmteatlas/v2]]
/***
|Name:|ExtentTagButtonPlugin|
|Description:|Adds a New tiddler button in the tag drop down|
|Version:|3.2a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#ExtendTagButtonPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{

window.onClickTag_mptw_orig = window.onClickTag;
window.onClickTag = function(e) {
  window.onClickTag_mptw_orig.apply(this,arguments);
  var tag = this.getAttribute("tag");
  var title = this.getAttribute("tiddler");
  // Thanks Saq, you're a genius :)
  var popup = Popup.stack[Popup.stack.length-1].popup;
  createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
  wikify("<<newTiddler label:'New tiddler' tag:'"+tag+"'>>",createTiddlyElement(popup,"li"));
  return false;
}

//}}}
!Welke energie-gerelateerde WMS en WFS-services bestaan er Nationaal?

| Servicenaam Energie | WMS url |h
|WarmteAtlas | http://agentschapnl.kaartenbalie.nl/cgi-bin/mapserv?map=/srv/maps/agentschapnl/RVO_WarmteAtlas.map&version=1.0.0 |
|BAG (Basis Administratie Gebouwen) |http://geodata.nationaalgeoregister.nl/bag/wms? |


| Servicenaam Achtergrond | WMS url |h
|Luchtfoto |https://geodata1.nationaalgeoregister.nl/luchtfoto/wms?request=GetCapabilities    |
|BGT (Basisregistratie Grootschalige Topografie) |https://geodata.nationaalgeoregister.nl/brpgewaspercelen/wms?request=GetCapabilities|
|AHN (Algemene hoogte kaart Nederland) |https://geodata.nationaalgeoregister.nl/ahn1/wms?request=GetCapabilities |

!Welke kaarten bevat de WarmteAtlas WMS en WFS service?
| Beschrijving kaarten | Eenheid | Servicenaam| Kaartnaam | Toelichting | Detail Niveau | Attributen |h
|Ligging Bedrijfsterreinen |  |WarmteAtlas | BBG_IND24 ||Polygoon |  |
|Ligging Industrie (CO2 emissie ) |  |WarmteAtlas | C02_emissie_Industrie |[[Industrie]] |Locatie| |
|Ligging Utiliteitsbouw |  |WarmteAtlas | UBOUW |[[Utiliteitsbouw]] |Locatie| |
|Ligging Panden | |BAG | //pand// ||Polygoon | |
|Ligging Glastuinbouw | |WarmteAtlas | BBG_GTB50 |[[Glastuinbouw]]|Polygoon | |
|Ligging Woonkernen ||WarmteAtlas  | //Woonkernen// |[[Huishoudens]] |Polygoon | |
|Warmte Vraag Woningen | GJ/(ha.jaar) |WarmteAtlas | HH_WA_OPP_BRT |[[Huishoudens]]|Buurt|  [[klik voor meer info | WarmteAtlas Attributen]] |
|Potentieel Koude uit open WKO systemen| GJ/(ha.jaar) |WarmteAtlas | GS_KOUD |[[Bodemopslag warmte en koude]]	|Buurt | [[klik voor meer info | WarmteAtlas Attributen]]|
|Potentieel Warmte uit open WKO systemen| GJ/(ha.jaar) |WarmteAtlas | GS_WARM |[[Bodemopslag warmte en koude]]	|Buurt | [[klik voor meer info | WarmteAtlas Attributen]]|
|Potentieel Koude uit gesloten WKO systemen| GJ/(ha.jaar) |WarmteAtlas | OS_KOUD |[[Bodemopslag warmte en koude]]	|Buurt | [[klik voor meer info | WarmteAtlas Attributen]]|
|Potentieel Warmte uit gesloten WKO systemen| GJ/(ha.jaar) |WarmteAtlas | OS_KOUD |[[Bodemopslag warmte en koude]]	|Buurt | [[klik voor meer info | WarmteAtlas Attributen]]|
|Potentieel Aardwarmte uit reservoirs | GJ/(ha.jaar) |WarmteAtlas | GT_GTB |[[Aardwarmte]] |Buurt, Gemeente| [[klik voor meer info | WarmteAtlas Attributen]]|
|Potentieel Diepe Geothermie (5500 m) | GJ/(ha.jaar) |WarmteAtlas | GT_5500  |[[Geothermie:Diep]] |Buurt, Gemeente| [[klik voor meer info | WarmteAtlas Attributen]]|
|Potentieel Diepe Geothermie (7500 m) | GJ/(ha.jaar) |WarmteAtlas | GT_7500  |[[Geothermie:Diep]] |Buurt, Gemeente| [[klik voor meer info | WarmteAtlas Attributen]]|
|Potentieel Biogas uit Mest | GJ/(ha.jaar) |WarmteAtlas | BG_MEST_OPP |[[Biogas]] |Gemeente | [[klik voor meer info | WarmteAtlas Attributen]]|
|Potentieel Biogas uit Groente, Fruit en Tuin afval | GJ/(ha.jaar) |WarmteAtlas | BG_GFT_OPP |[[Biogas]] |Gemeente | [[klik voor meer info | WarmteAtlas Attributen]] |
|Potentieel Biogas uit Akkerbouw reststromen| GJ/(ha.jaar) |WarmteAtlas | BG_AKKER_OPP |[[Biogas]] |Gemeente | [[klik voor meer info | WarmteAtlas Attributen]] |
|Potentieel Biogas totaal| GJ/(ha.jaar) |WarmteAtlas | BG_TOT_OPP |[[Biogas]] |Gemeente | [[klik voor meer info | WarmteAtlas Attributen]] |
|Potentieel Hout uit Bos reststromen| GJ/(ha.jaar) |WarmteAtlas | HT_BOS_OPP |[[Hout]] |Gemeente | [[klik voor meer info | WarmteAtlas Attributen]] |
|Potentieel Huishoudelijk Snoeiafval| GJ/(ha.jaar) |WarmteAtlas | HT_SNOEI_OPP |[[Hout]] |Gemeente | [[klik voor meer info | WarmteAtlas Attributen]] |
|Potentieel Hout totaal| GJ/(ha.jaar) |WarmteAtlas | HT_TOT_OPP |[[Biogas]] |Gemeente | [[klik voor meer info | WarmteAtlas Attributen]] |

!Hoe gebruik ik WMS en WFS-services?
Een korte uitleg over hoe informatie uit een WMS-service in een viewer of in excel gebruikt kan worden, staat beschreven in volgende presentatie (inclusief voorbeeld excel en voorbeeld webviewer).
* [[Presentatie: Intro gebruik van energiewebservices in viewer en excel | https://www.pleio.nl/file/download/41356202]]
* [[Download voorbeeld viewer | https://www.pleio.nl/file/download/34777972]]
* [[Download voorbeeld excel | https://www.pleio.nl/file/download/41356112]]

!Waar kan ik de geografische gegevens over energie vraag en energie potentieel downloaden?
* [[OpenWarmteAtlas_PleiO(PleinOverheid)|https://www.pleio.nl/file/group/47826/all#33614302]]
* [[Opendata Overheid | https://data.overheid.nl/data/dataset?q=energiebronnen]]
* [[Nationaal Georegister | http://www.nationaal.georegister.nl]]
/***
|Name|FontSizePlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#FontSizePlugin|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Resize tiddler text on the fly. The text size is remembered between sessions by use of a cookie.
You can customize the maximum and minimum allowed sizes.
(only affects tiddler content text, not any other text)

Also, you can load a TW file with a font-size specified in the url.
Eg: http://tw.lewcid.org/#font:110

!Demo:
Try using the font-size buttons in the sidebar, or in the MainMenu above.

!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Then put {{{<<fontSize "font-size:">>}}} in your SideBarOptions tiddler, or anywhere else that you might like.

!Usage
{{{<<fontSize>>}}} results in <<fontSize>>
{{{<<fontSize font-size: >>}}} results in <<fontSize font-size:>>

!Customizing:
The buttons and prefix text are wrapped in a span with class fontResizer, for easy css styling.
To change the default font-size, and the maximum and minimum font-size allowed, edit the config.fontSize.settings section of the code below.

!Notes:
This plugin assumes that the initial font-size is 100% and then increases or decreases the size by 10%. This stepsize of 10% can also be customized.

!History:
*27-07-06, version 1.0 : prevented double clicks from triggering editing of containing tiddler.
*25-07-06,  version 0.9

!Code
***/

//{{{
config.fontSize={};

//configuration settings
config.fontSize.settings =
{
            defaultSize : 100,  // all sizes in %
            maxSize : 200,
            minSize : 40,
            stepSize : 10
};

//startup code
var fontSettings = config.fontSize.settings;

if (!config.options.txtFontSize)
            {config.options.txtFontSize = fontSettings.defaultSize;
            saveOptionCookie("txtFontSize");}
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
setStylesheet("#contentWrapper .fontResizer .button {display:inline;font-size:105%; font-weight:bold; margin:0 1px; padding: 0 3px; text-align:center !important;}\n .fontResizer {margin:0 0.5em;}","fontResizerButtonStyles");

//macro
config.macros.fontSize={};
config.macros.fontSize.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{

               var sp = createTiddlyElement(place,"span",null,"fontResizer");
               sp.ondblclick=this.onDblClick;
               if (params[0])
                           createTiddlyText(sp,params[0]);
               createTiddlyButton(sp,"+","increase font-size",this.incFont);
               createTiddlyButton(sp,"=","reset font-size",this.resetFont);
               createTiddlyButton(sp,"–","decrease font-size",this.decFont);
}

config.macros.fontSize.onDblClick = function (e)
{
             if (!e) var e = window.event;
             e.cancelBubble = true;
             if (e.stopPropagation) e.stopPropagation();
             return false;
}

config.macros.fontSize.setFont = function ()
{
               saveOptionCookie("txtFontSize");
               setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
}

config.macros.fontSize.incFont=function()
{
               if (config.options.txtFontSize < fontSettings.maxSize)
                  config.options.txtFontSize = (config.options.txtFontSize*1)+fontSettings.stepSize;
               config.macros.fontSize.setFont();
}

config.macros.fontSize.decFont=function()
{

               if (config.options.txtFontSize > fontSettings.minSize)
                  config.options.txtFontSize = (config.options.txtFontSize*1) - fontSettings.stepSize;
               config.macros.fontSize.setFont();
}

config.macros.fontSize.resetFont=function()
{

               config.options.txtFontSize=fontSettings.defaultSize;
               config.macros.fontSize.setFont();
}

config.paramifiers.font =
{
               onstart: function(v)
                  {
                   config.options.txtFontSize = v;
                   config.macros.fontSize.setFont();
                  }
};
//}}}
! Beschrijving GasLeidingenKaart

Netbeheerder Enexis en Stedin stellen hun data dd 2016 ter beschikking.

Andere netbeheerders met Regionale GasNetten zijn Alliander en Delta.

!Attribuut kleuren
* Te vervangen leidingen (grijsgietijzer)
* Oudere Leidingen (> 30 jaar)
* Recentere Leidingen (<= 30 jaar)

! Ligging Gasleidingen
! Meer info
* 
Gebiedsindeling in Nederland:
''Nederland'' bestaat uit ''provincies''. ''Provincies'' bestaan uit ''COROP''-gebieden. ''COROP''-gebieden bestaan uit ''gemeentes''. ''Gemeentes'' bestaan uit ''wijken''. ''Wijken'' bestaan uit ''buurten''.
Een overzicht van de gebiedsindeling in Nederland vind u hier:
[[Gebiedsindeling (CBS)|http://statline.cbs.nl/StatWeb/publication/?VW=T&DM=SLNL&PA=72014NED&D1=0-1,7-8,19-24,33-34&D2=a&HD=110706-1033&HDR=T&STB=G1]]

Hieronder staat het gebieds niveau waarover informatie in deze energiewiki bekend is.
!Wat is diepe geothermie?
|<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/31121652" width="304" /></html>|vertical-align:top;padding:1em;<html>Diepe Geothermie boort naar een diepte met hogere temperaturen en minder doorlatende gesteenten. Om toch water te produceren moet de bodem eerst "gefract" worden. Hierbij ontstaan spleten waardoor het geinjecteerde water kan stromen en kan opwarmen om daarna weer opgepompt te worden.</html>|

!Beschrijving potentieel kaarten diepe geothermie
De getoonde kaarten zijn diepe geothermie potentie kaarten in GJ/(ha.jaar). In deze kaart is de hoeveelheid warmte, in gigajoule per hectare per jaar, weergegeven wat 30 jaar lang gewonnen wordt op een diepte van 5,5 km en respectivelijk 7,5 km [<<cite IF2011 bibliography:Bibliography>>]. Deze kaart is afgeleid van de temperaturenkaart van 5 km diepte. De temperaturenkaart is gemaakt aan de hand van temperatuur- en warmteflux metingen van diepe olie- en gasboringen in Nederland, en zijn via een geologisch lagenmodel geėxtrapoleerd naar respectivelijk 5 en 7,5 km diepte. 


__Bron__: 
<<bibliography>>

!Hoe zijn de potentieel kaarten berekend?
Voor het maken van deze kaart is de temperaturenkaart van 5 km diepte geėxtrapoleerd naar respectivelijk 5,5 km en 7,5 km diepte. De temperaturen zijn vervolgens gebruikt voor het bepalen van de hoeveelheid warmte wat zich op deze diepte bevindt, de zogenaamde heat in place (HIP). Dit is de maximum theoretische hoeveelheid warmte die kan worden onttrokken. Dit is berekend aan de hand van onderstaande formule.

>$HIP=(\rho_w ~ C_w \phi) + ((\phi~ c_R ~\rho_R))h~ (T_{RES}-T_0)~ 10^{-9}$
Waarbij
>$\phi$ = Porositeit = 1 %
>$C_w$ = Warmtecapaciteit van het water [J/(kg.C] = 3.772
>$C_R$ = Warmtecapaciteit van het gesteente [J/(kg.C] = 1.000
>$\rho_w$ = Dichtheid van het water [kg/m3] = 1042
>$\rho_R$ = Dichtheid van het gesteente [kg/m3] = 2600
>$T_{RES}$ = Reservoir temperatuur [C]
>$T_{0}$ = Retour temperatuur [C] = 80
>h = Dikte reservoir [m] = 500

Niet alle theoretisch aanwezige warmte kan worden gewonnen. Vanwege fysieke, geologische en economische redenen kan maar een fractie van de HIP worden gewonnen. Voor deze kaart van 5,5 km is een recovery factor van 1% gedurende 30 jaar aangenomen (TNO, 2010, persoonlijke communicatie). Deze hoeveelheid warmte is vervolgens gedeeld door een gemiddelde looptijd van een project van 30 jaar. 

De hoeveelheid warmte die kan worden onttrokken hangt van allerlei factoren af. De meest belangrijke is de doorlatendheid van het gesteente; hoe doorlatender, hoe meer water onttrokken kan worden. Dit is een locatiespecifieke gesteente-eigenschap. In de kaart is deze echter constant gehouden in de vorm van de recovery factor van 1% over 30 jaar. De kennis van de gesteentes in Nederland die zich op deze dieptes bevinden is namelijk beperkt. Het gevolg is dat de recovery factor op verschillende locaties in werkelijkheid hoger of lager kan liggen. Hierdoor kan mogelijk meer, maar wellicht ook minder, warmte worden onttrokken dan in de kaart voor een bepaalde locatie is aangegeven. Andere onzekerheden hebben te maken met de extrapolatie van de temperatuur naar deze dieptes.
!Wat is de Ambitie Nederland?
 De doelstelling van Nederland is 14% duurzame energie in 2020 en 16% duurzame energie in 2023. 
De huidige realisatie van duurzame energie is te vinden op [[Hernieuwbare energie; eindverbruik @CBSStatline | http://statline.cbs.nl/Statweb/publication/?DM=SLNL&PA=83109ned&D1=0-1,4-5&D2=a&D3=a&D4=23-25&HDR=T&STB=G2,G1,G3&VW=T]]

!Hoe kom ik verder?
*[[Data: Boringen, Seismiek, Vergunningen| http://www.nlog.nl/nl/geothermalEnergy/geothermalEnergy.html]]
*[[Data: WarmteAtlas, warmte vraag en warmte potentie | http://www.warmteatlas.nl ]]
*[[Rapport: Eerste inschatting van geothermisch potentieel van breuken en breukzones Krijtkalk en Kolenkalk (Dinantien) Zuid-Nederland en Vlaanderen | https://subsites.vito.be/SiteCollectionDocuments/VITO/Geothermie/Documents/GEOHEATAPP_Activiteit_2_breukenpotentieel.pdf]]
*[[Rapport: Kansen voor diepe geothermie bij industriële processen | http://www.rvo.nl/sites/default/files/2015/03/Definitief_Rapport%20diepe%20geothermie%20bij%20industrie.pdf]]
*[[Wet en regelgeving: Geothermie | http://www.nlog.nl/nl/home/geothermy.html]]
*[[Financieel: TSE Innovatie subsidies duurzame energie | http://www.rvo.nl/subsidies-regelingen/regelingen-topsector-energie-tse ]]
*[[Financieel: SDE Subsidie duurzame energie | http://www.rvo.nl/subsidies-regelingen/geothermie-sde-2015]]
*[[Branche Info: Platform geothermie | http://www.geothermie.nl/]]
*[[Branche Info: Kas als energiebron | http://www.kasalsenergiebron.nl/duurzame-energie/]]
!Hoe groot is het Energie gebruik in de glastuinbouw?
Een gemiddeld glastuinbouwbedrijf heeft een verbruik van 30 m^^3^^ aardgas per m^^2^^. Nederland heeft ongeveer 10000 ha glastuinbouw.

Totaal energie gebruik glastuinbouw = 10000 ha x 10000 m^^2^^/ha x 30 m^^3^^gas/m^^2^^ x 31.65 MJ/m^^3^^ = 95 PJ.

!Beschrijving kaart Glastuinbouw
De gegevens van de kaart Glastuinbouw zijn afkomstig van het [[Bestand Bodem Gebruik (BBG) 2012 | https://data.overheid.nl/data/dataset/bestand-bodemgebruik-2012-shape-file]]

!Wat is de Ambitie van Nederland?
De ministerraad heeft de kabinetsinzet voor het Klimaatakkoord vastgesteld. Het doel is om in de zomer van 2018 tot afspraken op hoofdlijnen te komen over de wijze waarop Nederland de CO2-uitstoot met 49% terugdringt in 2030. Deze afspraken zullen vervolgens in de 2e helft van 2018  worden uitgewerkt in concrete programma's. De uitvoering van het Klimaatakkoord begint in 2019.

De CO2-emissieruimte voor de glastuinbouw is afgesproken in het [[CO2-convenant|https://www.rijksoverheid.nl/documenten/kamerstukken/2012/02/01/c02-convenant-glastuinbouw]] door de glastuinbouwsector en de ministeries van EZ, Financiën en I&M. De emissieruimte voor de hele sector, inclusief de bedrijven in het EU-ETS voor 2013, is gebaseerd op de gemiddelde uitstoot in de periode 2010-2012 en bedraagt 7,5 Mton. In de periode van 2013 t/m 2020 daalt de emissieruimte jaarlijks lineair naar 6,2 Mton in 2020. De emissieruimte voor het CO2-sectorsysteem bestaat uit de emissieruimte voor de hele sector verminderd met de emissieruimte van de bedrijven in het ETS. Deze emissieruimte bedraagt voor 2013 4,7 Mton en voor 2014 4,6 Mton en is voor deze jaren beperkt tot de teelt gerelateerde emissie. Vanaf 2015 tellen de emissies door de WKK voor aan het net geleverde elektriciteit ook mee. De emissieruimte voor het CO2-sectorsysteem voor een bepaald jaar wordt in de [[Staatscourant|https://www.google.nl/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwjFnqW6ts3OAhUnLsAKHbi5BE4QFggeMAA&url=https%3A%2F%2Fzoek.officielebekendmakingen.nl%2Fstcrt-2016-23451.pdf&usg=AFQjCNFqRoyJ28I2JR1Ox326FvatKyqV0g&cad=rja]] gepubliceerd: De hoeveelheid CO2-emissies, bedoeld in artikel 15.51, eerste lid, van de Wet milieubeheer, wordt voor het kalenderjaar ''2016'' vastgesteld op ''6,2 megaton CO2-emissies''.
Uit de [[evaluatie| https://www.rijksoverheid.nl/documenten/rapporten/2017/05/01/evaluatie-co2-sturing-glastuinbouw-2011-2016]] in 2017 blijkt dat de inspanningsverplichtingen tot en met 2016 zijn nagekomen en de regelgeving, voor het lineair afnemen van de CO2-emissieruimte voor de glastuinbouw in de periode 2014-2020 naar 6,2 Mton, is gerealiseerd.

LTO Glaskracht Nederland heeft in 2017 de energievisie [[ ‘Klimaatneutrale glastuinbouw 2040’ |https://www.kasalsenergiebron.nl/content/user_upload/LTO_Glaskracht_-_Energievisie_glastuinbouw.pdf]]opgesteld. LTO Glaskracht heeft de ambitie om de energievoorziening van de Nederlandse glastuinbouw in de toekomst volledig klimaatneutraal te maken.  

Het systeem zorgt er voor dat glastuinbouwbedrijven een belastingvoordeel houden als zij onder deze CO2-emissieruimte blijven.

Als de warmte extern komt van een ander glastuinbouwbedrijf of industrie dat zelf ook onder de CO2-regeling valt of onder het Europese ETS-systeem, hoeft de afnemende partij de gerelateerde CO2-emissie niet op te geven. Dat wordt al opgegeven door het warmteleverende bedrijf.

!Hoe kan ik energie besparen?
Een gemiddeld glastuinbouwbedrijf heeft een verbruik van 30 m^^3^^ aardgas per m^^2^^. Met dubbel glas en optimale regeltechnieken van het [[nieuwe telen|https://www.kasalsenergiebron.nl/besparen/het-nieuwe-telen/]] kan het verbruik reeds gereduceerd worden tot 10 m^^3^^ per m^^2^^.
> [[Voorbeeld: Venlo Energy Kas | https://www.kasalsenergiebron.nl/nieuws/tomatenteelt-met-10-m3-aardgas-mogelijk/]]

Met het gebruik van restwamte van een Industrie of het goed intern cascaderen van warmte naar een lage temperatuur kas, wordt het totale energie gebruik gereduceerd.
> [[voorbeeld: WarmCo | http://www.warmco.nl/]]

!Meer info
*[[Financieel/Wet en Regelgeving: CO2-sector systeem | http://www.rvo.nl/onderwerpen/agrarisch-ondernemen/agrarische-administratie-en-registratie/co2-regeling-voor-de-glastuinbouw]]
*[[Financieel: Subsidie Investeringen energie glastuinbouw | http://www.rvo.nl/subsidies-regelingen/investeringen-energie-glastuinbouw-2016]]
*[[Financieel: MKB Innovatiestimulering regio en topsectoren: Haalbaarheidstudies| http://www.rvo.nl/subsidies-regelingen/mkb-innovatiestimulering-regio-en-topsectoren-mit]]
*[[Financieel: Garantstelling Landbouw| http://www.rvo.nl/subsidies-regelingen/garantstelling-landbouw/2016]]
*[[Financieel: MIA en Vamill Investeringsaftrek| http://www.rvo.nl/subsidies-regelingen/mia-en-vamil]]
*[[Financieel: EIA Investeringsaftrek | http://www.rvo.nl/subsidies-regelingen/energie-investeringsaftrek-eia]]
*[[Financieel: POP3 Platteland Ontwikkelingen | http://www.rvo.nl/onderwerpen/agrarisch-ondernemen/gemeenschappelijk-landbouwbeleid/plattelandsontwikkeling]]
*[[Branche Info: Kas als energiebron | http://www.kasalsenergiebron.nl/]]
*[[Branche Info: LTO Glaskracht | https://www.ltoglaskrachtnederland.nl/]]
*[[Borgstellingskrediet voor de landbouw (BL) |https://www.rvo.nl/subsidies-regelingen/borgstellingskrediet-voor-de-landbouw-bl]]
/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.2a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}

Warning: the showWhen and hideWhen macros will blindly eval paramString.
This could be used to execute harmful javascript from a tiddler.

(TODO: Make some effort to sanitize paramString. Perhaps disallow the equals sign?)
***/
//{{{

window.hideWhenLastTest = false;

window.removeElementWhen = function(test,place) {
  window.hideWhenLastTest = test;
  if (test) {
    jQuery(place).empty()
    place.parentNode.removeChild(place);
  }
};

merge(config.macros,{

  hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( eval(paramString), place );
  }},

  showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( !eval(paramString), place );
  }},

  hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( tiddler.tags.containsAll(params), place );
  }},

  showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( !tiddler.tags.containsAll(params), place );
  }},

  hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( tiddler.tags.containsAny(params), place );
  }},

  showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( !tiddler.tags.containsAny(params), place );
  }},

  hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( tiddler.tags.containsAll(params), place );
  }},

  showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( !tiddler.tags.containsAll(params), place );
  }},

  hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place );
  }},

  showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place );
  }},

  hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( tiddler.title == params[0], place );
  }},

  showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( tiddler.title != params[0], place );
  }},

  'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( !window.hideWhenLastTest, place );
  }}

});

//}}}
!Wat is hoge temperatuur warmte opslag

!Status NL
!!MTO: Midden temperatuur opslag (30C)
Hiervan draait er een al jaren: Namelijk Heerlen. 

!!HTO: Hoge temperatuur opslag (>50C)
Er zijn in Nederland 2 HTO projecten geweest die niet meer actief zijn. Hier was bovengrond niet goed afgestemd met de ondergrond.

Ook juridisch is hoge temperatuur warmteopslag om een aantal redenen niet vanzelfsprekend. Ten eerste is de infiltratietemperatuur hoger dan toegestaan, ten tweede kan niet worden voldaan aan de eis van een energiebalans (altijd netto warmteverlies) en ten derde zijn de waterkwaliteitseffecten relatief groot, niet alleen door de grote temperatuur-veranderingen, maar ook als gevolg van de noodzakelijke waterbehandeling. HTO is daarom alleen mogelijk door af te wijken van het beleid in de vorm van een pilot-project.

!Meer info
* [[Meer met bodemenergie: Hogetemperatuur opslag | http://soilpedia.nl/Bikiwiki%20documenten/Meer%20met%20Bodemenergie/Rapport%206%20Hogetemperatuuropslag%20Meer%20met%20Bodemenergie.pdf ]]
* [[HTO Hoge temperatuur opslag in de ondiepe ondergrond | http://geothermie.nl/fileadmin/user_upload/documents/bestanden/NOPG/TNO_rapport__HTO_publieke_deel_2013.pdf ]]
!Intro

Het jaarlijkse Nederlandse eindverbruik van energie bestaat voor ongeveer 50 procent uit warmte, 30 procent uit transport en 20 procent uit elektriciteit[1]. Voor de productie van deze energie genereert Nederland ongeveer 40 procent aan extra niet gebruikte restwarmte. De energiehuishouding kan dus veel efficiënter en duurzamer worden ingericht dan nu het geval is.

De WarmteAtlas Nederland van het Nationaal Expertisecentrum Warmte (NEW) brengt hiervoor de kansen in kaart. De WarmteAtlas is een digitale, geografische kaart met daarop aangegeven warmteaanbod en –vraag in Nederland. Aan de aanbodkant vindt u (potentiële) geschikte locaties van diepe geothermie, WKO, biomassa en restwarmte. Aan de vraagkant geeft de kaart een overzicht van de warmtevraag van huishoudens, industrie, glastuinbouw en utiliteitsbouw. Met dit instrument wil het NEW een bijdrage leveren aan de verduurzaming van de Nederlandse warmtehuishouding.

!De [[WarmteAtlas | http://www.warmteatlas.nl]]
•Is een inspiratiebron voor nieuwe warmteprojecten.
•Is bruikbaar binnen alle sectoren: Gebouwde Omgeving, Glastuinbouw, Industrie en Energie.
•Stimuleert de synergie tussen ruimtelijke planning en energie op provinciaal en gemeentelijk niveau.
•Geeft snel inzicht in de lokale warmtevraag en in de aanwezigheid en kwaliteit van duurzame restwarmtebronnen.
•Groeit door het weergeven van gerealiseerde duurzame warmtebenuttingsprojecten.
•Streeft naar een actueel beeld van alle warmtevraag en –aanbod.

<html><IMG width=600 src="https://www.pleio.nl/file/download/46343862"></html>">
http://www.warmteatlas.nl

!Hoe gebruikt u de [[WarmteAtlas | http://www.warmteatlas.nl]]?
De WarmteAtlas biedt maatwerk; u kunt de kaart zodanig inrichten, dat uw eigen situatie/wensen zichtbaar worden in het kaartvenster. Er zijn verschillende toepassingen waaruit u kunt kiezen:
U kunt direct inzoomen met het muiswieltje. Ook kunt u onderaan of recht met zoeken naar een adres zoomen 
Vervolgens kunt u in de rechterbalk met "KAARTEN" de gewenste themakaart aanvinken (x). Indien gewenst kan met een muisklik op het themakaartnaam , meer uitleg verkregen worden via deze energiewiki, bijvoorbeeld:

* Hoe zijn de kaarten gemaakt en wat zijn de brongegevens?
* Wat is de doelstelling/ambitie van Nederland?
* Waar vind ik een belangengroep?
* Hoe kom ik verder?
* Waar vind ik aanvullende informatie over subsidies, rapporten, data, tools...?

!! Doelgroep en toepassing
De WarmteAtlas Nederland is bestemd voor iedereen die duurzame warmteprojecten wil starten, zoals: gemeenten, projectontwikkelaars, ingenieursbureaus, universiteiten, nationale en regionale overheden, brancheverenigingen en andere geïnteresseerden.

Om een succesvolle transitie naar een duurzame warmte- en koudevoorziening te bevorderen en te versnellen zet de overheid in samenspraak met marktpartijen een aantal instrumenten in.
De WarmteAtlas van Nederland is één van deze instrumenten. Synergie is bereikt door de krachten te bundelen van nationale en provinciale overheden, samen met marktpartijen, energiebedrijven en onderzoeksinstituten. Enkele provincies, gemeenten en energiebedrijven zijn al gestart met de detaillering van lokale warmtekaarten.
Voor de presentatie van de WarmteAtlas heeft het NEW gekozen voor de opensource webviewer ‘Flamingo’. Deze webviewer is in opdracht van het IPO ontwikkeld met als doel de digitale samenwerking te vergroten.

!!! Icoontjes

<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/46342912"></html> Met het icoontjes kunt direct in of uitzoomen. Ook met het muiswieltje is dit direct mogelijk. Daarnaast kunt u onderaan zoeken en inzoomen naar een adres.

<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/46342822"></html> Het vraagteken icoontje vraagt u toestemming om in te zoomen naar uw locatie.

<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/46342242"></html> Met de meetlat kunt u de afstand berekenen die een warmtenet zou moeten overbruggen tussen warmte vraag en potentieel aanbod. Een enkele muisklik start afstand, en een dubbele muisklik sluit de afstand.

<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/46342862"></html> Dit icoon maakt het u mogelijk om een oppervlakte op de kaart te tekenen en te berekenen. Een dubbele klik met de muis sluit het oppervlak.

<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/46342712"></html> Met het i-icoontje en een muisklik kunt u de brongegevens van de aangevinkte kaarten in de rechterbalk in detail opvragen.

<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/46343292"></html> Met dit icoontje gaat u naar google streetmap.

<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/46342642"></html> Geeft de mogelijkheid om een Bookmark van uw samengestelde kaart te mailen of door te sturen met andere sociale media zoals twitter, linkedin, google, facebook.

<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/60569031"></html> Geeft de mogelijkheid om de geselecteerde lagen te downloaden in de formaten; geojson,  csv, excel en shape.

<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/46343252"></html> Met de printknop kunt u een afbeelding maken van de kaart om deze vervolgens de printen of te kopiëren met de printknop. 

<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/60569041"></html> Met deze knop kunt u een andere WMS service zichtbaar maken. Meer info over beschikbare wms-services vindt u in de [[nationaal georegister | http://www.nationaalgeoregister.nl ]]

!!! Thema kaarten
In de rechterbalk met tabblad "KAARTEN" kunt u de gewenste themakaarten aanvinken [x]. Indien gewenst kan met een muisklik op het themakaartnaam, ook meer uitleg verkregen worden, bijvoorbeeld:

* Hoe zijn de kaarten gemaakt en wat zijn de brongegevens?
* Wat is de doelstelling/ambitie van Nederland?
* Waar vind ik een belangengroep?
* Hoe kom ik verder?
* Waar vind ik aanvullende informatie over subsidies, rapporten, data, tools...?
* Waar kan ik data downloaden?

Meer concreet voor het kaartthema woningen:

* Hoe investeer ik het beste in mijn woning om energie te besparen?
* Zijn er thermoscans gemaakt van daken?
* Waar vind ik andere gedetailleerde GIS-kaarten?

U kunt uit verschillende thema’s over energie potentieel kiezen, zoals omgevingswarmte, aardwarmte, diepe geothermie of biomassa. Daarnaast is de warmtevraag per sector  weergegeven. Let hier vooral ook op de gewenste temperatuur!

Op detailniveau zijn na inzoomen nauwkeurig de geografische gegevens zien, zoals ligging van glastuinbouw, woningen, gebouwen of luchtfoto’s. Hierbij verschijnt rechts de legenda automatisch in de legenda-tab. 

!!! Legende

<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/46342782"></html>
''Warmteatlas: Legende per kaartlaag''

!!! Zoeken
In de rechter tab of onderaan de kaart kunt u naar een bepaald adres of postcode zoeken en inzoomen.

<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/46343322"></html>
''Warmteatlas: Zoeken in de  kaartlaag''

!!! Filteren
Verder kunt u hier ook filteren op type industrie.

<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/46342692"></html>
''Warmteatlas: Filters''

Help ons Nederland te verduurzamen.
Heeft u suggesties voor verbetering van de WarmteAtlas Nederland of mist u bepaalde zaken in de WarmteAtlas?  of heeft u verdere vragen, opmerkingen of suggesties over duurzame warmte toepassingen? 
Stuur dan een e-mail naar [[Nationaal Expertise Centrum Warmte (NEW)| mailto:NEW@rvo.nl]]

!!! Dit is een publicatie van:
> RVO | Slachthuisstraat 51 | Postbus 965 | 6040 AZ | Roermond | T +31 (0)88 602 70 00 | www.rvo.nl | dd oktober 2016 | Publicatie-nr. 2NECW1106 

!Disclaimer
Aan het deze EnergieWiki behorende bij de [[WarmteAtlas | http://www.warmteatlas.nl]] kunnen geen rechten worden ontleend. Hoewel dit met de groots mogelijke zorg is samengesteld kan RVO.nl (ex AgentschapNL) geen enkele aansprakelijkheid aanvaarden voor schade als gevolg van eventuele onjuistheden en/of uitvoering of gebruik op basis van de getoonde resultaten.
!Beschrijving kaarten
!!Houtachtige biomassa uit Bos per hectare land per jaar
Er is ongeveer 0.01 GJ/(ha.jaar) aan resthout beschikbaar uit Bos [<<cite WUR2007 bibliography:Bibliography>>]. Dit is vermenigvuldigd met het aandeel Bos areaal per gemeente en gedeeld door het totale land areaal  van de gemeente.
>HT_BOS_OPP GJ/(ha_land.jaar) = 0.01 GJ/(ha_bos.jaar) * (ha_Bos) / (ha_land gemeente)

__Bron__:<<bibliography>>

!!Hout en snoei afval per hectare land per jaar


!Beschrijving verwerkings technieken
!!Bij en meestook van hout of 'groene' kolen
De eerste optie voor het verbranden van biomassa is door bij- en meestook in grote kolen centrales.

Biomassa, blokjes gemaakt van snoeihout, houtafval en afval bevat nog veel vocht, het transport is lastig en de kwaliteit is wisselend. Het is niet eenvoudig een goed vuur te maken met biomassa, ook niet als het wordt meegestookt in kolencentrales, de totale efficientie gaat ermee enorm omlaag.

|<html><img src="https://www.pleio.nl/file/download/31130002" alt="Torrefactie(Bron:  © FOTO JASPER LENSSELINK ECN)" width="200"  /></html>|vertical-align:top;padding:1em;<html>Door biomassa te onderwerpen aan ’torrefactie’, ontstaan "groene kolen" die nog maar weinig vocht bevatten, waterafstotend zijn en minder volumineus zijn. Daardoor past het in conventionele energie centrales die al voor kolen bestaan. Verder heeft het een hogere energiedichtheid en is het is makkelijker te transporteren en je kunt het buiten opslaan. Bij torrefactie wordt biomassa zonder gebruik van zuurstof tot 200 ą 300 graden verhit met het gas dat vrijkomt bij het proces. Zo ontstaat een bros materiaal, dat makkelijk te vermalen en samen te persen is en waarvan de productie weinig energie kost en geen afval achterlaat.</html>|

!!Pellet-, en Houtkachels
|<html><img src="https://www.pleio.nl/file/download/31130492" alt="PelletHoutkachel"s(Bron:  Larentstein)" width="200"  /></html>|vertical-align:top;padding:1em;<html>De tweede optie voor het verbranden van biomassa is in de zogenaamde pelletkachels. Deze kachels worden gestookt met pellets. Deze pellets zijn geperste brokken die kunnen bestaan uit verschillende soorten biomassa of uit combinaties van verschillende soorten. Enkele voorbeelden van pellets zijn geperste brokken van houtsnippers, gras, gerst en/of tarwe. Deze pelletkachels kunnen worden ingezet als alternatief voor de oude open haard voor de verwarming van vertrekken. Tevens kunnen deze pallets worden geintegreerd met de cv installatie voor zowel de verwarming van vertrekken als voor warm water.</html>|

!!Vergassing
Vergassing is een thermisch proces waarbij de brandstof(bijvoorbeeld biomassa of groene kolen) onder zuurstofarme omstandigheden onvolledig wordt verbrand, waarbij stookgas vrijkomt. Dit gas kan vervolgens worden verwerkt tot biogas.
Deze techniek is in de 19e eeuw ontwikkeld om stadsgas uit steenkool te halen, in de Tweede Wereldoorlog is vergassing toegepast om het gebrek aan benzine op te vangen. Later is deze techniek door de beschikbaarheid aan fossiele brandstoffen weer uit de belangstelling verdwenen. Na de oliecrisis van 1973 is de belangstelling voor energie uit biomassa weer gegroeid. 

Vergassing is het onvolledig verbranden van (bio)massa. Dit wordt behaald door de (bio)massa bij hoge temperatuur te verbranden in een zuurstofarme omgeving. De hoeveelheid zuurstof is dusdanig geregeld dat de verbranding genoeg hitte oplevert om het proces gaande te houden. De (bio)massa zal hierbij ontleden tot o.a. H2, CO en CH4, as en teer. Het gevormde gas kan na reiniging worden gebruikt in een warmtekrachtkoppeling of brandstofcel om energie op te wekken.

Het vergassingsproces verloopt in verschillende stappen:
#''Drogen'' - Door de hitte in de vergasser verdampt het water in de biomassa, waardoor het droogt en geschikt word voor de verdere processen. 
#''Pyrolyse'' - Onder hoge temperatuur en nagenoeg zuurstofloze omstandigheden worden de moleculen in de biomassa gekraakt, waarbij vluchtige gassen en kool ontstaan. 
#''Oxidatie'' - Bij dit exotherme proces worden de vluchtige gassen en kool deels verbrand met zuurstof tot onder andere CO, H2, CO2 en waterdamp. Dit proces produceert de hitte die nodig is bij de andere processen. 
#''Reductie'' - Dit endotherme proces vormt uit de bij Oxidatie gevormde gassen brandbare gassen zoals CH4 en H2. 

Bij verschillende temperaturen word een verschillend gas geproduceerd:
#''<1000°C:'' ''Productgas'', dit gas bestaat naast CO2 en H2O voornamelijk uit CO, H2, CH4, andere koolwaterstoffen en teer.
>Toepassingen van product gas zijn: 
>o Elektriciteits en warmte productie 
>o SNG Synthetic Natural Gas 
#''>1200°C:'' ''Biosyngas'', dit gas bestaat naast CO2 en H2O compleet uit H2 en CO, zonder teer. Dit gas is nagenoeg gelijk aan zijn fossiele equivalent Syngas, en kan voor dezelfde toepassingen worden gebruikt. 
>Toepassingen van (bio)syngas zijn: 
>o Fisher Troph diesel productie 
>o Methanol productie 
>o Ammoniak productie 
>o Waterstof productie 

!Duurzame productie
 De doelstelling van Nederland is 14% duurzame energie in 2020 en 16% duurzame energie in 2023. 
De huidige realisatie van duurzame energie is te vinden op [[Hernieuwbare energie; eindverbruik @CBSStatline | http://statline.cbs.nl/Statweb/publication/?DM=SLNL&PA=83109ned&D1=0-1,4-5&D2=a&D3=a&D4=23-25&HDR=T&STB=G2,G1,G3&VW=T]]

!Meer info
*[[Data: WarmteAtlas, hout potentie | http://www.warmteatlas.nl ]]
*[[Data: DANK Digitale Atlas Natuurlijk Kapitaal | http://www.nationaalgeoregister.nl ]]
<<top>>
<<jump j '' top>>
<<closeAll>><<renameButton c>>
/***
|Name|HoverMenuPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#HoverMenuPlugin|
|Version|1.11|
|Requires|~TW2.x|
!Description:
Provides a hovering menu on the edge of the screen for commonly used commands, that scrolls with the page.

!Demo:
Observe the hovering menu on the right edge of the screen.

!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
To customize your HoverMenu, edit the HoverMenu shadow tiddler.

To customize whether the menu sticks to the right or left edge of the screen, and its start position, edit the HoverMenu configuration settings part of the code below. It's well documented, so don't be scared!

The menu has an id of hoverMenu, in case you want to style the buttons in it using css.

!Notes:
Since the default HoverMenu contains buttons for toggling the side bar and jumping to the top of the screen and to open tiddlers, the ToggleSideBarMacro, JumpMacro and the JumpToTopMacro are included in this tiddler, so you dont need to install them separately. Having them installed separately as well could lead to complications.

If you dont intend to use these three macros at all, feel free to remove those sections of code in this tiddler.

!To Do:
* rework code to allow multiple hovering menus in different positions, horizontal etc.
* incorporate code for keyboard shortcuts that correspond to the buttons in the hovermenu

!History:
*03-08-06, ver 1.1.2: compatibility fix with SelectThemePlugin
*03-08-06,  ver 1.11: fixed error with button tooltips
*27-07-06, ver 1.1 : added JumpMacro to hoverMenu
*23-07-06

!Code
***/

/***
start HoverMenu plugin code
***/
//{{{
config.hoverMenu={};
//}}}

/***
HoverMenu configuration settings
***/
//{{{
config.hoverMenu.settings={
               align: 'left',    //align menu to right or left side of screen, possible values are 'right' and 'left'               
               x: 10,              // horizontal distance of menu from side of screen, increase to your liking.
               y: 158            //vertical distance of menu from top of screen at start, increase or decrease to your liking
               };
//}}}

//{{{
//continue HoverMenu plugin code
config.hoverMenu.handler=function()
{              
               if (!document.getElementById("hoverMenu"))
               {
               var theMenu = createTiddlyElement(document.getElementById("contentWrapper"), "div","hoverMenu");
               theMenu.setAttribute("refresh","content");
               theMenu.setAttribute("tiddler","HoverMenu");
               var menuContent = store.getTiddlerText("HoverMenu");
               wikify(menuContent,theMenu);
              }

	       var Xloc = this.settings.x;
	       Yloc =this.settings.y;
	       var ns = (navigator.appName.indexOf("Netscape") != -1);
	       function SetMenu(id)
                        {
		        var GetElements=document.getElementById?document.getElementById(id):document.all?document.all[id]:document.layers[id];
		        if(document.layers)GetElements.style=GetElements;
		        GetElements.sP=function(x,y){this.style[config.hoverMenu.settings.align]=x +"px";this.style.top=y +"px";};
		        GetElements.x = Xloc;
		        GetElements.y = findScrollY();
		        GetElements.y += Yloc;
		        return GetElements;
	                }
               window.LoCate_XY=function()
                        {
		        var pY =  findScrollY();
                        ftlObj.y += (pY + Yloc - ftlObj.y)/15;
		        ftlObj.sP(ftlObj.x, ftlObj.y);
		        setTimeout("LoCate_XY()", 10);
	                }
               ftlObj = SetMenu("hoverMenu");
	       LoCate_XY();
};

window.old_lewcid_hovermenu_restart = restart;
restart = function()
{
               window.old_lewcid_hovermenu_restart();
               config.hoverMenu.handler();
};

setStylesheet(
"#hoverMenu .imgLink, #hoverMenu .imgLink:hover {border:none; padding:0px; float:right; margin-bottom:2px; margin-top:0px;}\n"+
"#hoverMenu  .button, #hoverMenu  .tiddlyLink {border:none; background:#FF0000;; color:#FFFFFF; padding:0 5px; float:right; margin-bottom:4px;}\n"+
"#hoverMenu .button:hover, #hoverMenu .tiddlyLink:hover {font-weight:bold; border:none; color:#FF0000; background:#FFFFFF; padding:0 5px; float:right; margin-bottom:4px;}\n"+
"#hoverMenu .button {width:100%; text-align:center}"+
"#hoverMenu { position:absolute; width:7px;}\n"+
"\n","hoverMenuStyles");


config.macros.renameButton={};
config.macros.renameButton.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{

               if (place.lastChild.tagName!="BR")
                     {
                      place.lastChild.firstChild.data = params[0];
                      if (params[1]) {place.lastChild.title = params[1];}
                     }
};

config.shadowTiddlers["HoverMenu"]="<<top>>\n<<toggleSideBar>><<renameButton '>' >>\n<<jump j '' top>>\n<<saveChanges>><<renameButton s 'Save TiddlyWiki'>>\n<<newTiddler>><<renameButton n>>\n";
//}}}
//end HoverMenu plugin code

//Start ToggleSideBarMacro code
//{{{
config.macros.toggleSideBar={};

config.macros.toggleSideBar.settings={
         styleHide :  "#sidebar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 1em;}\n"+"",
         styleShow : " ",
         arrow1: "«",
         arrow2: "»"
};

config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
          var tooltip= params[1]||'toggle sidebar';
          var mode = (params[2] && params[2]=="hide")? "hide":"show";
          var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
          var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
          var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
          if (mode == "hide")
             { 
             (document.getElementById("sidebar")).setAttribute("toggle","hide");
              setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");
             }
};

config.macros.toggleSideBar.onToggleSideBar = function(){
          var sidebar = document.getElementById("sidebar");
          var settings = config.macros.toggleSideBar.settings;
          if (sidebar.getAttribute("toggle")=='hide')
             {
              setStylesheet(settings.styleShow,"ToggleSideBarStyles");
              sidebar.setAttribute("toggle","show");
              this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
              }
          else
              {    
               setStylesheet(settings.styleHide,"ToggleSideBarStyles");
               sidebar.setAttribute("toggle","hide");
               this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
              }

     return false;
}

setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 1px;}\n","ToggleSideBarButtonStyles");
//}}}
//end ToggleSideBarMacro code

//start JumpToTopMacro code
//{{{
config.macros.top={};
config.macros.top.handler=function(place,macroName)
{
               createTiddlyButton(place,"^","jump to top",this.onclick);
}
config.macros.top.onclick=function()
{
               window.scrollTo(0,0);
};

config.commands.top =
{
               text:" ^ ",
               tooltip:"jump to top"
};

config.commands.top.handler = function(event,src,title)
{
               window.scrollTo(0,0);
}
//}}}
//end JumpToStartMacro code

//start JumpMacro code
//{{{
config.macros.jump= {};
config.macros.jump.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
        var label = (params[0] && params[0]!=".")? params[0]: 'jump';
        var tooltip = (params[1] && params[1]!=".")? params[1]: 'jump to an open tiddler';
        var top = (params[2] && params[2]=='top') ? true: false;        

        var btn =createTiddlyButton(place,label,tooltip,this.onclick);
        if (top==true)
              btn.setAttribute("top","true")
}

config.macros.jump.onclick = function(e)
{
        if (!e) var e = window.event;
        var theTarget = resolveTarget(e);
        var top = theTarget.getAttribute("top");
	var popup = Popup.create(this);
	if(popup)
		{
                 if(top=="true")
                                {createTiddlyButton(createTiddlyElement(popup,"li"),'Top ↑','Top of TW',config.macros.jump.top);
                                 createTiddlyElement(popup,"hr");}
		
		story.forEachTiddler(function(title,element) {
			createTiddlyLink(createTiddlyElement(popup,"li"),title,true);
			});
                }
	Popup.show(popup,false);
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	return false;
}

config.macros.jump.top = function()
{
       window.scrollTo(0,0);
}
//}}}
//end JumpMacro code

//utility functions
//{{{
Popup.show = function(unused,slowly)
{
	var curr = Popup.stack[Popup.stack.length-1];
	var rootLeft = findPosX(curr.root);
	var rootTop = findPosY(curr.root);
	var rootHeight = curr.root.offsetHeight;
	var popupLeft = rootLeft;
	var popupTop = rootTop + rootHeight;
	var popupWidth = curr.popup.offsetWidth;
	var winWidth = findWindowWidth();
        if (isChild(curr.root,'hoverMenu'))
              var x = config.hoverMenu.settings.x;
        else
              var x = 0;
	if(popupLeft + popupWidth+x > winWidth)
		popupLeft = winWidth - popupWidth -x;
        if (isChild(curr.root,'hoverMenu'))
  	        {curr.popup.style.left= x + "px";}
        else
                curr.popup.style.left = popupLeft + "px";
	curr.popup.style.top = popupTop + "px";
	curr.popup.style.display = "block";
	addClass(curr.root,"highlight");
	if(config.options.chkAnimate)
		anim.startAnimating(new Scroller(curr.popup,slowly));
	else
		window.scrollTo(0,ensureVisible(curr.popup));
}

window.isChild = function(e,parentId) {
        while (e != null) {
                var parent = document.getElementById(parentId);
                if (parent == e) return true;
                e = e.parentNode;
                }
        return false;
};
//}}}
!Hoe groot is het Energie gebruik van een woning?
Status finaal energie gebruik per sector is te vinden in de [[nationale energiebalans @CBSStatline | https://opendata.cbs.nl/statline/#/CBS/nl/dataset/83140NED/table?ts=1527256886315]]

In onderstaande grafieken is de ontwikkeling van het gas- en elektriciteitsverbruik per type woning tussen 2010 en 2016 weergeven. 
|<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/58857161" width="504" /></html>|
|<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/58857201" width="504" /></html>|

Het verbruik van gas en elektriciteit door huishoudens in 2016 was 9,2 procent lager dan in 2012. Het aardgasverbruik van huishoudens is gelijk aan de aardgasleveringen van het openbare net aan huishoudens. Die daalden met 12,0 procent. Wanneer het aardgasverbruik voor klimaateffecten wordt gecorrigeerd daalde het aardgasverbruik van huishoudens met 10,7 procent.
__Bron__: CBS [[Energieverbruik van particuliere huishoudens | https://www.cbs.nl/nl-nl/achtergrond/2018/14/energieverbruik-van-particuliere-huishoudens]]


!Beschrijving warmte kaart huishoudens

__Bron__: CBS statline; De gemiddelde Gas en elektriciteits gegevens van 2015 per woning per gemeente, wijk en buurt. De gemiddelde Gas en elektriciteits gegevens van 2014 per woning per PC6


!Wat is de Ambitie van Nederland?

De opgave om de nationale broeikasgasuitstoot in 2030 met 49% terug te dringen ten opzichte van 1990 is het centrale doel van [[het Klimaatakkoord| https://www.klimaatakkoord.nl/]].

Om 49% reductie te realiseren, zijn de indicatieve, sectorale opgaven uit het Regeerakkoord en de bestaande afspraken uit het Energieakkoord het uitgangspunt. De gebouwde omgeving is goed voor ruim 30% van het totale energieverbruik in Nederland. Hiervoor wordt circa 90% aardgas gebruikt. Richting 2050 zal de gebouwde omgeving volledig CO2-arm moeten zijn. Om 49% CO2-reductie in 2030 te realiseren, dient de gebouwde omgeving substantieel bij te dragen. 

|Sector | Mton CO2-eq 2016 |Opgave klimaatakkoord CO2-eq Mton per 2030 |
|Gebouwde omgeving | 24.7 | 15.3 |

Bron: Brief minister Eric Wiebes, Economische Zaken en Klimaat, d.d. 26 april 2018 
Bron: [[Emissieregistratie | http://www.emissieregistratie.nl/erpubliek/erpub/international/broeikasgassen.aspx]]

Als de gebouwde omgeving in 2050 CO2-arm moet zijn, betekent dit dat er gemiddeld 200.000 woningen en andere gebouwen per jaar aardgasvrij gemaakt moeten worden tot 2050.

Nieuwbouwwoningen moeten per 1 juli 2018 aardgasvrij zijn. Het gaat om alle nieuwbouwwoningen die op of na 1 juli 2018 worden ingediend voor een omgevingsvergunning.

De Wet Voortgang Energietransitie (Wet VET) vormt de basis voor het verbod op aardgas in nieuwbouw. De Tweede Kamer heeft via een amendement op het wetsvoorstel Voortgang Energietransitie (Wetsvoorstel VET) de gasaansluitplicht voor kleingebruikers bij nieuwbouw geschrapt. De wetgeving biedt wel ruimte aan het college van B&W om bij zwaarwegende redenen van algemeen belang uitzonderingen te maken en toch in een gasaansluiting te voorzien (“Nee, tenzij”). In een ministeriële regeling wordt uitgewerkt wat onder zwaarwegende redenen van algemeen belang wordt verstaan.

Doelstelling van het [[Energie-akkoord | http://www.energieakkoordser.nl/~/media/files/energieakkoord/overzicht-belangrijkste-maatregelen-energieakkoord.ashx]]  is een gezamelijke 100 PJ aan energiebesparing te realiseren voor alle sectoren, met de volgende ambities voor woningen:
>In 2020 hebben de huizen van woningcorporaties gemiddeld energielabel B 
>In 2020 heeft het overgrote deel (80%) van woningen van particuliere verhuurders energielabel C
>In 2030 heeft het gemiddelde koophuis het energielabel A
>In 2050 wonen alle burgers energieneutraal

De huidige EPC eis voor nieuwe woningen is aangescherpt van 0.8 naar 0.6(2011) naar 0.4(2015).


!Hoe kan ik energie besparen?
Mogelijke besparingsmaatregelen voor de verschillende type woningen worden besproken in:
* [[Voorbeeld woningen bestaande bouw 2011|http://www.rvo.nl/sites/default/files/bijlagen/4.%20Brochure%20Voorbeeldwoningen%202011%20bestaande%20bouw.pdf]]
* [[Energie Besparingsverkenner RVO | https://energiebesparingsverkenner.rvo.nl/#]]
* [[Isolatie Info | https://www.isolatie.net/]]


!Extra info
Thermogrammen (Dakscan) van de volgende Steden
#<html><A href="http://dakscan.nl/userfiles/dsgmaps/amsterdam/index.html">Amsterdam</A></html>
#<html><A href="http://bp.amstelveen.nl/geoservices/thermisch/index.html">Amstelveen</A></html>
#<html><A href="http://dakwacht.redirect2.nl/dakscan_nijmegen">Nijmegen</A></html>
#<html><A href="http://dakscan.nl/userfiles/dsgmaps/eemnes/index.html">Eemnes</A></html>
#<html><A href="http://dakscan.nl/userfiles/dsgmaps/landsmeer/index.html">Landsmeer</A></html>
#<html><A href="http://dakscan.nl/userfiles/dsgmaps/venray/index.html">Venray</A></html>


!Subsidies
* [[Energie subsidie wijzer | http://www.energiesubsidiewijzer.nl/]]
* [[STEP Stimuleringsregeling energieprestatie huursector | http://www.rvo.nl/subsidies-regelingen/stimuleringsregeling-energieprestatie-huursector-step ]]
!Wat is het energie Verbruik Industrie?
Finaal energieverbruik industrie in 2015 en 2017
|<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/60403801/FinaalEnergieGebruikIndustrie.jpg" width="504" /></html>|
__Bron__: CBSStatline 2018

Het finaal energieverbruik voor warmte in de industrie is ongeveer even groot als in de gebouwde omgeving en betreft vooral warmte voor processen. Minder dan de helft van dit verbruik in de industrie bestaat uit aardgas verstookt in eigen ketels. In de industrie komt ook veel warmte uit het verbranden van aardolieproducten en wordt warmte geleverd door derden. Warmte geleverd door derden kan ook een WKK-installatie zijn op eigen terrein die door een andere partij wordt geëxploiteerd.
			
*Grote industrie van de sectoren basis metaal, glas, steenbakkerijen hebben een hoge temperatuur vraag en produceren vaak hoge temperatuur restwarmte en reststoom.
*Grote industrie van de sectoren papier, voeding en genotsmiddelen en brouwerijen hebben een stoom en warm water vraag, en produceren vaak lage temperatuur restwarmte.
*De raffinage en de chemische industrie zit daartussen in. 
*Energie verwerkende en producerende industrie, zoals enerzijds de Energie centrales voor Elektriciteits productie met 33% steenkool x 94.6 kg CO2/GJ en anderzijds de Raffinage en organische basis industrie voor de productie van Nederlandse, Belgische en Duitse transportbrandstoffen met 75-80% aardolie x 73.3 kg CO2/GJ produceren gezamenlijk een groot deel van de nationale CO2 emissies. [[Emissiefactor in 2018 | https://www.rvo.nl/sites/default/files/2018/03/Nederlandse%20energiedragerlijst%202018.pdf]] staat op RVO.NL website. 

!Beschrijving kaart
De nieuwe wms/wfs-kaart ligging industrie en CO2 emissies bevat de CO2 emissie gegevens van de [[nationale emissie registratie | http://www.emissieregistratie.nl]], en bevat de energievraag gegevens uit de database van de grote verbrandings-installaties > 50 MW  "Industrial Emissions Directive (2010/75/EU)".

In Nederland gebruiken we 3150 PJ primair energieverbruik in 2017 aan energie uit olie, kolen en gas en duurzame bronnen. Deze energie wordt gebruikt voor de productie van elektriciteit en warmte, als brandstof voor transport en als grondstof, 1869 PJ finaal energieverbruik voor alle  eindgebruikers van energie en 574 PJ voor alle bedrijvigheid en industrie. De [[Monitoring warmte 2015 |https://www.cbs.nl/nl-nl/publicatie/2017/15/monitoring-warmte-2015]] van ECN/CBS blijkt uit ruim de helft finaal energieverbruik naar warmtevoorziening. Dit is de grootste verbruiker van energie in Nederland. Besparen, verduurzamen van energie en efficiënt gebruik van fossiele brandstoffen voor de warmtevoorziening hebben dan ook een grote impact op het totale energiegebruik en de CO2-uitstoot.

De industrie heeft veel proceswarmte nodig, vooral de chemie en farmaceutische industrie, voedings-, genotmiddelen industrie  en metaalindustrie. Het grootste deel van de warmtevraag ligt hier tussen 250 en 500 °C. Ook is er een aanzienlijke warmtevraag boven de 1000 °C. Vooral in de metaalindustrie, waar 70% van de warmtevraag op dit temperatuurniveau ligt.

!Finaal energieverbruik energie intensieve industrie in 2017
|!Finaal energieverbruik |!Voedings-, genotmiddelen industrie |!Papier- en grafische industrie |!Chemie en farmaceutische industrie |!Bouwmaterialen industrie |!Basis metaal industrie |
|Totaal energiedragers (PJ) | 87 | 25 | 284 | 27 | 52 |
|Aardgas (%) | 53 | 29 | 21 | 72 | 25 |
|Kool en koolproducten (%)| 2 | 0 | 0 | 7 | 34 |
|Aardoliegrondstoffen en producten (%) | 0 | 0 | 39 | 2 | 0 |
|Afval en andere energiebronnen (%) | 0 | 0 | 1 | 0 | 2 |
|Elektriciteit (%) | 29 | 36 | 16 | 16 | 33 |
|Warmte (%) | 15 | 29 | 24 | 1 | 6  |
|Totaal hernieuwbare energie (%) | 1 | 6 | 0 | 2 | 0 |
__Bron__: CBSStatline 2018

!Hoe bereken ik een maximale theoretische restwarmte op basis van CO2 emissie
Onderstaande berekeningsmethode geeft een eerste inschatting van de warmtevraag van het bedrijf. Hierbij dient wel opgemerkt te worden dat ervan uitgegaan is dat het totale verkoop van energie aan derden buiten het bedrijf verwaarloosbaar is.

@@color:orange;
>''$MJ_{warmte}/kgCO_2 = 1000 * EF / (%steenkool * 94.6 kg/GJ_{totaalfossiel}+%aardolie * 73.3 kg/GJ_{totaalfossiel}+%aardgas * 56.8 kg/GJ_{totaalfossiel})$''
@@ 
:Met ER = 90%, EF is Efficiëntie Factor voor omrekenen fossiele energie (FE) naar warmtevraag

! Visie industrie 2050
In 2050 zien wij een Nederland voor ons met een bloeiende, circulaire en mondiaal toonaangevende industrie, waar de uitstoot van broeikasgassen nagenoeg nul is. Waar uit biomassa (naast voedsel en veevoer) CO2, reststromen, en -gassen:  grondstof of brandstof voor onder andere de chemie of brandstof voor de lucht- of zeevaart wordt gemaakt. Waar fabrieken duurzame elektriciteit, geothermie, groen gas en groene waterstof gebruiken voor hun
energiebehoefte. Waar de industrie helpt om de schommelingen in elektriciteitsproductie van zon- en windparken op te vangen. En waar we restwarmte hergebruiken in de industrie en, benutten voor woonwijken of de glastuinbouw. Hierdoor, - en met behulp van vergaande digitalisering - zijn waardeketens en productiemethoden fundamenteel veranderd; – we maken duurzame producten met duurzame processen.

!Ambitie 2030
De ambitie is dat productie van Nederlandse bedrijven plaatsvindt in installaties die behoren tot de 10% meest CO2-efficiënte installaties in de Europese industrie. Daarbij wordt het instrumentarium zo ingericht dat het behalen van de indicatieve doelstelling van 14,3 Mton effectief geborgd wordt.

Vanaf 1992 heeft de overheid in het kader van het energiebesparingsbeleid met een groot aantal sectoren een meerjarenafspraak gemaakt over de verbetering van de energie-efficiency. De meerjarenafspraken energie-efficiency zijn overeenkomsten tussen de overheid en bedrijven, instellingen en gemeenten. 

Zo zijn er:
* Meerjarenafspraak energie-efficiency 2001-2020: MJA3, waarbij gemeenten en niet-ETS-ondernemingen kunnen toetreden. 
* Meerjarenafspraak energie-efficiency ETS-ondernemingen: MEE (ondernemingen waarvoor deelname aan het Europese systeem van handel in broeikasgasemmissierechten (Emission Trading Scheme = ETS) verplicht is.) 

De belangrijkste afspraken binnen de convenanten zijn: 
Bedrijven spannen zich in om een gezamenlijke doelstelling te bereiken van 30 procent energie-efficiencyverbetering tussen 2005 en 2020. 
Brancheorganisaties stellen een zogeheten routekaart voor de sector op die inzicht biedt in kansen voor de lange termijn en is gericht op innovatieve trajecten voor energie-efficiencyverbeteringen. 

De energie-intensieve industrie heeft een akkoord gesloten dat zal leiden tot een extra energiebesparing van 9 petajoule (PJ) in 2020. |https://www.rijksoverheid.nl/documenten/regelingen/2017/04/24/addendum-meerjarenafspraak-energie-efficientie-ets-ondernemingen-mee]]

Het [[Energieakkoord | http://www.energieakkoordser.nl/energieakkoord.aspx ]] is een initiatief van de SER en moest zorgen voor een inhaalslag van Nederland voor duurzame groei. Doelstelling van het Energie-akkoord   op energiebesparing is een gezamenlijke in 2020 100 PJ aan besparing te realiseren voor alle sectoren, met [[ bedrijfsspecifieke afspraken voor de grote industrie | https://www.energieakkoordser.nl/nieuws/2015/afspraken-energieakkoord-energie-efficientie-industrie.aspx]]

Het [[Klimaatakkoord| https://www.klimaatakkoord.nl ]] is een initiatief van het kabinet en bouwt voort op het Energieakkoord. Het is een uitwerking van het Klimaatakkoord van Parijs. Daar heeft Nederland samen met 194 andere landen toegezegd te zorgen dat de aarde in 2050 niet meer dan 2 graden is opgewarmd.  Het Klimaatakkoord heeft één centraal doel: CO2-reductie. De ambitie is dat de Nederlandse CO2-uitstoot in 2030 fors terugdringt naar ten minste 49 procent ten opzichte van 1990. Bedrijven en organisaties in de sector Industrie willen de uitstoot van het broeikasgas CO2 verminderen: 14,3 miljard kilogram minder in 2030 additioneel aan het bestaand beleid (5,1 Mton). De ambitie is een bloeiende, circulaire en mondiaal toonaangevende industrie, waar de uitstoot van broeikasgassen in 2050 zelfs bijna nul is. Waar uit biomassa, CO2 en reststromen de grondstoffen worden gehaald voor onder andere de chemie en de brandstoffen voor de lucht- en zeevaart.

!Verduurzaming
De industrie treft maatregelen met directe effecten aan de eigen schoorsteen (scope 1). Daar wordt ook op gestuurd in het kader van de indicatieve opgave van de industrie. Daarnaast is klimaatwinst te behalen met de verduurzaming en reductie van warmte en toename van elektriciteitsinname en het leveren van restwarmte (of CO2) aan bijvoorbeeld de gebouwde omgeving of de glastuinbouw (scope 2 maatregelen). Ook kunnen keten-effecten als duurzaam grondstoffengebruik bijdragen aan de verduurzaming van de industrie (scope 3 maatregelen). 

In het voorlopig hoofdlijnen klimaatakkoord is onderstaande indicatie opgenomen van door de
industrie voorgestelde maatregelen.

|!Technologie |!Inschatting vermeden ~CO2eq in 2030 in Mton |!Gemiddelde kosten in €/ton ~CO2 bovenop ETS in €/ton |!Scope 2 en 3 |
|Procesefficiency | 6 | 0–50 |Ca 3 Mton besparing op aardgas door levering van restwarmte |
|Lachgas en F-gassen | 2 | 0–30 | |
|Elektrificatie en groene waterstof | 4 | 70-150 ||
|Recycling, CCU en biobased chemie | 1 | 10–150 |Ca 2 Mton CO2 voor de glastuinbouw 1 à 2 Mton CCU en recycling die buitenlandse emissies voorkomen |
|CCS | 7 | 50–70 ||
|Totaal (opgave + bestaand beleid)| 20 | 6 à 7 Mton |

De indicatieve indeling van maatregelen (inzet op o.a. procesefficiency, CCS, elektrificatie/groene waterstof en circulariteit) is geen blauwdruk voor de transitie maar de inzet van een adaptief proces. Hierbij is sprake van grote verschillen in kosten per technologie. De inschatting is dat de industrie tot 2030 in Nederland cumulatief voor € 9 tot 15 miljard zal moeten investeren waarmee direct of indirect wordt bijgedragen aan het
realiseren van de klimaatdoelstellingen.

Onderstaande grafiek geeft een indicatie hoe het reductiepad zich volgens de industrie kan ontwikkelen tot 2030.
|<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/60403811/CO2ReductiepadIndustrie2030_Navigant.jpg" width="600" /></html>|
__Bron__: [[ Navigant (2018) Onderbouwing investering en emmissierechten industrie 2030, 11 oktober 2018 | https://www.klimaatakkoord.nl/documenten/publicaties/2019/01/08/achtergrondnotitie-industrie-onderbouwing-kosten-klimaattransitie]]

"Ruimte en infrastructuur"
De industrie speelt een belangrijke rol in de klimaat- en energietransitie als geheel en ook in het energiesysteem. De kabinetsperspectief op de Nationale Omgevingsvisie stelt over de industrie onder andere: “De havengebieden en industriële clusters van grootverbruikers aan de kust moeten maximaal energie besparen, transformeren naar nieuwe hernieuwbare energiebronnen en kunnen een schakelrol vervullen in de energietransitie, met aanlanding,
benutting, omzetting en opslag van de windenergie op zee en het beschikbaar maken van de vrijkomende restwarmte voor de omliggende gebouwde omgeving.” Ook bij de industrie zijn veel combinaties met andere opgaven relevant, bijvoorbeeld met de gebouwde omgeving en de tuinbouw als het gaat om het benutten van restwarmte en CCU. Voorts is er ook een vraag naar gelijkstroomvoorzieningen.
|<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/60403821/Hoofdnet_Infrastructuur_IndustrieClusters_WindopZee.jpg" width="600" /></html>|
__Bron__:[[Gasunie nov 2018 | https://www.gasunie.nl/nieuws/waterstof-coalitie-concrete-plannen-voor-een-vliegende-start-van]]

''Energie efficiëntie''
Tools:
* [[Industriële warmtepomp tool voor kostenraming warmtepomp met restwarmte| http://tools.industrialheatpumps.nl/warmtepompwijzer/EN_index.html]]
* [[Stoom tool voor kosten raming reststoom en stoomtransport| http://www.rvo.nl/stoom-tool-new]]
* [[Restwarmte benutting binnen de proces industrie | http://www1.eere.energy.gov/manufacturing/intensiveprocesses/pdfs/waste_heat_recovery.pdf]]
* [[Restwarmte benutting bij bedrijven met koelinstallaties | http://www.rvo.nl/node/8088 ]]

''Elektrificatie'' of ''Power2heat''
Elektrificatie van warmteprocessen in de industrie biedt een belangrijke kans tot verduurzaming van de industriële productie (mits er voldoende opwek van hernieuwbare elektriciteit is).
Tot 2030 wordt verwacht dat een aantal elektrificatietechnologieën een relevante impact kan hebben. Door innovaties kan dat perspectief na 2030 zelfs sterk toenemen. Elektrische boilers
bieden de mogelijkheid tot een flexibele inzet, omdat deze snel op en af te regelen zijn, terwijl andere elektrificatietechnieken een hogere CO2-reductie en energie-efficiency bieden en bij voorkeur volcontinu worden gebruikt.

__Meer info__:[[Rapport: Electrification in the Industry, Berenschot| https://www.berenschot.nl/publish/pages/5182/electrification_in_the_dutch_process_industry_-_final_report.pdf]]

''Groene waterstof''
Waterstof productie middels elektrolyse.
In water worden twee elektroden gedompeld: de kathode en de anode. Tussen deze elektroden wordt een elektrische spanning aangebracht. Er zal waterstofgas ontstaan aan de kathode (positief geladen deeltjes) en zuurstofgas aan de anode (negatief geladen deeltjes): 

>$2 H_2O ⟶ 2 H_2 + O_2$
Bij de verbranding hiervan ontstaat weer water volgens de reactie: 

Bij de verbranding hiervan ontstaat weer water volgens de reactie: 
>$2 H_2 + O_2 ⟶ 2 H_2O$
 
De [[Waterstof Coalitie | https://www.gasunie.nl/nieuws/waterstof-coalitie-concrete-plannen-voor-een-vliegende-start-van]], een groep van 27 milieuorganisaties, kennisinstellingen, overheden en bedrijven, waaronder ook Gasunie, is een [[concreet voorstel | https://storage.googleapis.com/planet4-netherlands-stateless/2018/11/61798793-coalitie-waterstof-vier-pijlers.pdf ]] neergelegd bij de onderhandelingstafels voor het Klimaatakkoord. De coalitie wil zich sterk maken voor de ontwikkeling van drie á vier Gigawatt conversiecapaciteit voor groene waterstof in 2030. De waterstof moet gemaakt gaan worden via grote elektrolysers van honderd megawatt of meer – een omvang die nu nog ongekend is. De elektrolysers moeten aan de kust komen, waar groene stroom van de Noordzeewind aan land komt. Met deze conversiecapaciteit aan de kust kan de industrie haar processen verduurzamen en CO2-vrij maken.

Aan de kust is er een grote potentiële vraag naar waterstof voor industriële toepassingen (circa 125 tot 213 PJ). Het industriecluster Chemelot ligt niet aan de kust maar kent een potentiële vraag naar waterstof  van circa 25 tot 40 PJ.

''Blauwe waterstof''
Waterstofproductie uit gas met CO2 opslag. De zogenaamde blauwe waterstof kan verkregen worden door het ontleden van aardgas naar waterstof en CO2, waarbij vervolgens de CO2 ondergronds offshore opgeslagen zal worden.
Stoomreforming (kortweg reforming genoemd) is een chemisch proces waarbij een koolwaterstof in aanwezigheid van stoom en/of zuurstofgas en eventueel een katalysator wordt omgezet in een waterstofrijk gasmengsel, ook wel reformaat genoemd. 
De meeste toegepaste reformeringstechniek, tevens de meest toegepaste methode om waterstofgas te maken, is stoomreforming van aardgas. Hierbij wordt aardgas samengevoegd met stoom bij een temperatuur van 850°C en een druk van 25 bar: 
>$ CH_4   +   2 H_2O   ⟶   CO_2   +   4 H_2 $
Feitelijk vindt de reactie plaats in twee stappen, die beide evenwichtsreacties zijn: 
>$ CH_4   +   H_2O   ⇌   CO   +   3 H_2 $
>$ CO   +   H_2O   ⇌   CO_2   +   H_2 $
Deze laatste is de zogenaamde water-gas-shift-reactie. 

Voor de zuurstof inzet van stoomreforming  is in principe een zuurstof  fabriek nodig die zuurstof geconcentreerd uit de lucht haalt, tenzij de zuurstof wordt gebruikt die bij een nabije elektrolyse installatie vrijkomt. 
Het totale rendement op onderwaarde van de waterstof productie middels stoomreforming is 82%, inbegrepen de energie voor de zuurstofinzet van de zuurstoffabriek in de ATR. Bij inzet van zuurstof uit elektrolyse vervalt die energie-input, dus wordt het rendement 85%. Op de bovenste verbrandingswaarde is het rendement hoger namenlijk 88%, omdat bij verbranding van waterstof relatief meer condensatiewarmte vrijkomt dan bij aardgas.
Een extra voordeel is dat bij pre-combustion capture de CO2 vrijkomt onder hoge druk; dit kan direct worden getransporteerd en geïnjecteerd in gasvelden

''CCS-Afvang en opslag $CO_2$''
Afvang, transport en opslag van door de industrie geproduceerde CO2 (CCS) wordt door de industrie en door de Rijksoverheid gezien als noodzakelijke activiteit om de 2030-doelstelling te behalen53. Afvang en transport kunnen bovendien dienen als opmaat naar hergebruik van koolstof (CCU). Afgevangen CO2 kan in de toekomst bijdragen (bijvoorbeeld in combinatie met groene waterstof) aan de ontwikkeling van synthetische grond- en brandstoffen (bijvoorbeeld Steel2chemicals) en de mogelijkheid om negatieve emissies te realiseren (naast andere opties die negatieve emissies kunnen helpen realiseren). De beoogde opschaling past in het doel dat
de Nederlandse industrie in 2050 nagenoeg klimaatneutraal produceert. CCU maakt naar verwachting dan een belangrijk deel uit van de industriële productie, door CO2 als grondstof te hergebruiken in bijvoorbeeld bouwmaterialen of plastics.

Het rendement op onderwaarde is 82%, inbegrepen de energie voor de zuurstofinzet in de ATR. Bij inzet van zuurstof uit elektrolyse vervalt die energie-input, dus wordt het rendement 85%. 

''CCU''
* Hergebruik groene kort cyclische CO2 afvang vanuit biomassa of vanuit de lucht voor methanol productie als basis van transport brandstoffen, chemicaliën en kunststoffen. 
* Hergebruik fossiele CO2 afvang in de glastuinbouw voor stimulatie van groeiprocessen.

''Verduurzaming Energie Vraag''
Het gebruik van duurzame bronnen zoals [[Biomassa | Hout]], biofuell, [[Biogas]], [[Zonnewarmte]], [[Geothermie:Diep]]
__Meer info__: [[Rapport: Kansen voor diepe geothermie bij industriële processen | http://www.rvo.nl/sites/default/files/2015/03/Definitief_Rapport%20diepe%20geothermie%20bij%20industrie.pdf]]


!Transitie in Grondstofketen 
|<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/44871272" width="504" /></html>|vertical-align:top;padding:1em;<html>Grondstofketen Olie naar Materialen</html>|
|<html><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/44871252" width="504" /></html>|vertical-align:top;padding:1em;<html>Grondstofketen Bio-based Materialen</html>|
|<html><iframe width="854" height="480" src="https://www.youtube.com/embed/PlDIUIZF5Dc" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe></html>|vertical-align:top;padding:1em;<html>Chemport Europe Noord Nederland</html>|


!!Gross Energy Requirement GER-waarde materialen en CO2 lijst
GER-waarde staat voor 'Gross Energy Requirement': een maat voor de bruto energie-inhoud van een stof, uitgedrukt in primaire energie. Primaire energie is de energie-inhoud van energiebronnen in hun natuurlijke vorm, voordat enige technische omzetting heeft plaatsgevonden. 
* [[GER-waarden en CO2-lijst - februari 2018.xlsx | https://www.rvo.nl/file/ger-waarden-en-co2-lijst-februari-2018xlsx-0 ]]

!!Recycling
''Metaal''
Op dit moment worden warmgewalste balken (zoals HE- en IPE-profielen) voor 51% hergebruikt. Dat kan op ‘bouwdeelniveau’, als onderdeel van een nieuwe constructie, en op ‘gebouwniveau’, als blijvende component van een constructie die zich opmaakt voor een ‘tweede leven’.(bron: www.bouwenmetstaal.nl). ''Hergebruik op locatie'' levert een ''CO2 reductie'' van bijna ''100%''.

De productie van staal uit ruwijzer, op basis van ijzererts, gebeurt in een oxystaalfabriek (zoals bij Tatasteel in IJmuiden). Bij dit proces wordt ook schroot ingezet (tot 15-20%) . Zowel de slak als het hoogovengas, cokesovengas en het gas dat bij de staalfabricage vrijkomt, wordt hergebruikt. Met deze gassen wordt elektriciteit en stoom opgewekt. De GER-waarde (primair energie gebruik) van lichtgelegeerd primair staal is 30.9 MJ/kg (2.3 kg CO2-eq/kg), terwijl de ''recycling van lichtgelegeerd staal uit schroot'' slechts 8.7 MJ/kg (0.42 kg CO2-eq/kg) is. Dat is aldus een ''CO2-eq reductie'' van ongeveer ''80%''. Ook de reststroom (ijzeroxides) uit de waterzuivering gaat weer terug de processen in. 

[[HIsarna demo | https://www.tatasteel.nl/nl/innovatie/HIsarna]] te Tatasteel Ijmuiden  met een capaciteit van 60 kton vloeibaar ruwijzer per jaar, is een compleet ''nieuwe technologie'' om staal uit ijzererts te maken. Deze bestaat uit een reactor waar bovenin ijzererts wordt ingevoerd. Het erts wordt bij een hoge temperatuur vloeibaar gemaakt in een cycloon en druppelt op de bodem van de reactor waar steenkoolpoeder wordt geïnjecteerd. Het koolpoeder reageert met de gesmolten erts waarbij vloeibaar ruwijzer ontstaat als basismateriaal voor de productie van hoogwaardig staal. Het gas dat HIsarna uitstoot, is geconcentreerd CO2. De technologie maakt een aantal voorbewerkingsstappen overbodig en stelt minder strikte eisen aan de kwaliteit van de grondstoffen. Dit resulteert in een enorme efficiëntieverhoging. Het verlaagt het energieverbruik, heeft een ''CO2-emissie reductie'' van ''20%'' en verlaagt de uitstoot van fijnstof, zwaveldioxide en stikstofdioxide met 60% tot 80%. Doordat de HIsarna installatie hooggeconcentreerd CO2 produceert, is het zeer geschikt voor CO2-afvang en -opslag (CCS) of -gebruik (CCU), zonder een kostbaar gasscheidingsproces. De combinatie van HIsarna en CO2-opslag zou kunnen leiden tot een totale CO2-beperking van 80% in het staalproductieproces. 

* [[ Routekaart 2030 VNMI branchevereniging metallurgische industrie | https://www.vnmi.nl/index.php?page=24]]

''Kunststof''
* [[ GER-waarde berekeningen voor de verschillende kunststoffen en recyclaten.| http://nrk.nl/Content/Files/file/RKI%20VT%20voorbeeldberekeningen2007.pdf]]
* [[ Kunststof inzamelaars| http://www.nrkrecycling.nl/inzamelaar/wie-zamelt-wat-in]]
* [[ Leveranciers gerecycled granulaat | http://www.nrkrecycling.nl/leverancier/leveranciers-regranulaat]]
* [[ Leveranciers gerecycled compounds | http://www.nrkrecycling.nl/leverancier/leveranciers-compounds]]
* [[ Leveranciers gerecycled regranulaat | http://www.nrkrecycling.nl/leverancier/leveranciers-regranulaat]]
* [[ Leveranciers gerecycled maalgoed | http://www.nrkrecycling.nl/leverancier/leveranciers-maalgoed]]
* [[ Voorbeelden producten van gerecycled kunststof | http://www.nrkrecycling.nl/recycling/producten-van-gerecyclede-kunststof]]
* [[ nieuws | http://www.nrkrecycling.nl/nieuws/nieuwsberichten ]]

''Papier''
 De GER-waarde (primair energie gebruik) van houtvrij grafisch papier is 51 MJ/kg (1.2 kg CO2-eq/kg), terwijl de ''recycling van oud papier tot papier''  slechts 26 MJ/kg (0.9 kg CO2-eq/kg) is. Dat is aldus een ''CO2-eq reductie'' van ongeveer ''25%''.

83% van het papier dat in Nederland wordt geproduceerd heeft oud papier als grondstof. Papiervezels kunnen tot 7 maal hergebruikt worden. Ook wat betreft het inzamelen van papier is Nederland wereldwijd één van de toppers: 85% van het papier wordt gescheiden ingezameld. Jaarlijks (2015) wordt in Nederland 921 kton huishoudelijk oud papier en karton opgehaald.  De  papier sector is 100% FSC- en PEFC-gecertificeerd.

* [[ Routekaart 2030 VNP branchevereniging papier industrie | https://www.vnmi.nl/index.php?page=24]]

!Meer info
* [[MJA en MEE afspraken| http://www.rvo.nl/subsidies-regelingen/meerjarenafspraken-energie-efficiency]]
* [[Nieuws over energie van de chemische industrie| http://www.spice3.eu]]
* [[Supply-Chain Initiatives Database | http://www.iipnetwork.org/databases/supply-chain ]]
* [[Industrial Efficiency Policy Database | http://iepd.iipnetwork.org/ ]]
* [[Industrial Efficiency Technology Database | http://ietd.iipnetwork.org/]]
* [[C2E2: Copenhagen Centre of Energie Efficiency | http://kms.energyefficiencycentre.org/advanced-search ]]


/***
|Name:|InstantTimestampPlugin|
|Description:|A handy way to insert timestamps in your tiddler content|
|Version:|1.0.10a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#InstantTimestampPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Usage
If you enter {ts} in your tiddler content (without the spaces) it will be replaced with a timestamp when you save the tiddler. Full list of formats:
* {ts} or {t} -> timestamp
* {ds} or {d} -> datestamp
* !ts or !t at start of line -> !!timestamp
* !ds or !d at start of line -> !!datestamp
(I added the extra ! since that's how I like it. Remove it from translations below if required)
!!Notes
* Change the timeFormat and dateFormat below to suit your preference.
* See also http://mptw2.tiddlyspot.com/#AutoCorrectPlugin
* You could invent other translations and add them to the translations array below.
***/
//{{{

config.InstantTimestamp = {

  // adjust to suit
  timeFormat: 'DD/0MM/YY 0hh:0mm',
  dateFormat: 'DD/0MM/YY',

  translations: [
    [/^!ts?$/img,  "'!!{{ts{'+now.formatString(config.InstantTimestamp.timeFormat)+'}}}'"],
    [/^!ds?$/img,  "'!!{{ds{'+now.formatString(config.InstantTimestamp.dateFormat)+'}}}'"],

    // thanks Adapted Cat
    [/\{ts?\}(?!\}\})/ig,"'{{ts{'+now.formatString(config.InstantTimestamp.timeFormat)+'}}}'"],
    [/\{ds?\}(?!\}\})/ig,"'{{ds{'+now.formatString(config.InstantTimestamp.dateFormat)+'}}}'"]

  ],

  excludeTags: [
    "noAutoCorrect",
    "noTimestamp",
    "html",
    "CSS",
    "css",
    "systemConfig",
    "systemConfigDisabled",
    "zsystemConfig",
    "Plugins",
    "Plugin",
    "plugins",
    "plugin",
    "javascript",
    "code",
    "systemTheme",
    "systemPalette"
  ],

  excludeTiddlers: [
    "StyleSheet",
    "StyleSheetLayout",
    "StyleSheetColors",
    "StyleSheetPrint"
    // more?
  ]

};

TiddlyWiki.prototype.saveTiddler_mptw_instanttimestamp = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {

  tags = tags ? tags : []; // just in case tags is null
  tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;
  var conf = config.InstantTimestamp;

  if ( !tags.containsAny(conf.excludeTags) && !conf.excludeTiddlers.contains(newTitle) ) {

    var now = new Date();
    var trans = conf.translations;
    for (var i=0;i<trans.length;i++) {
      newBody = newBody.replace(trans[i][0], eval(trans[i][1]));
    }
  }

  // TODO: use apply() instead of naming all args?
  return this.saveTiddler_mptw_instanttimestamp(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created);
}

// you can override these in StyleSheet
setStylesheet(".ts,.ds { font-style:italic; }","instantTimestampStyles");

//}}}
Indeling van de verschillende kaarten op het gebieds(detail)niveau waarom informatie gegeven wordt.
/***
|Name:|LessBackupsPlugin|
|Description:|Intelligently limit the number of backup files you create|
|Version:|3.0.1a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#LessBackupsPlugin|
|Author:|Simon Baird|
|Email:|simon.baird@gmail.com|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Description
You end up with just backup one per year, per month, per weekday, per hour, minute, and second.  So total number won't exceed about 200 or so. Can be reduced by commenting out the seconds/minutes/hours line from modes array
!!Notes
Works in IE and Firefox only.  Algorithm by Daniel Baird. IE specific code by by Saq Imtiaz.
***/
//{{{

var MINS  = 60 * 1000;
var HOURS = 60 * MINS;
var DAYS  = 24 * HOURS;

if (!config.lessBackups) {
  config.lessBackups = {
    // comment out the ones you don't want or set config.lessBackups.modes in your 'tweaks' plugin
    modes: [
      ["YYYY",  365*DAYS], // one per year for ever
      ["MMM",   31*DAYS],  // one per month
      ["ddd",   7*DAYS],   // one per weekday
      //["d0DD",  1*DAYS],   // one per day of month
      ["h0hh",  24*HOURS], // one per hour
      ["m0mm",  1*HOURS],  // one per minute
      ["s0ss",  1*MINS],   // one per second
      ["latest",0]         // always keep last version. (leave this).
    ]
  };
}

window.getSpecialBackupPath = function(backupPath) {

  var now = new Date();

  var modes = config.lessBackups.modes;

  for (var i=0;i<modes.length;i++) {

    // the filename we will try
    var specialBackupPath = backupPath.replace(/(\.)([0-9]+\.[0-9]+)(\.html)$/,
        '$1'+now.formatString(modes[i][0]).toLowerCase()+'$3')

    // open the file
    try {
      if (config.browser.isIE) {
        var fsobject = new ActiveXObject("Scripting.FileSystemObject")
        var fileExists  = fsobject.FileExists(specialBackupPath);
        if (fileExists) {
          var fileObject = fsobject.GetFile(specialBackupPath);
          var modDate = new Date(fileObject.DateLastModified).valueOf();
        }
      }
      else {
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
        file.initWithPath(specialBackupPath);
        var fileExists = file.exists();
        if (fileExists) {
          var modDate = file.lastModifiedTime;
        }
      }
    }
    catch(e) {
      // give up
      return backupPath;
    }

    // expiry is used to tell if it's an 'old' one. Eg, if the month is June and there is a
    // June file on disk that's more than an month old then it must be stale so overwrite
    // note that "latest" should be always written because the expiration period is zero (see above)
    var expiry = new Date(modDate + modes[i][1]);
    if (!fileExists || now > expiry)
      return specialBackupPath;
  }
}

// hijack the core function
window.getBackupPath_mptw_orig = window.getBackupPath;
window.getBackupPath = function(localPath) {
  return getSpecialBackupPath(getBackupPath_mptw_orig(localPath));
}

//}}}
/***
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Version:''|1.1.0|
|''Date:''|mar 17, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#LoadRemoteFileHijack|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
***/
//{{{
version.extensions.LoadRemoteFileThroughProxy = {
 major: 1, minor: 1, revision: 0, 
 date: new Date("mar 17, 2007"), 
 source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};

if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};

bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
{
 if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){ 
 url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
 }
 return bidix.core.loadRemoteFile(url,callback,params);
}
//}}}
Aenean eros arcu, condimentum nec, dapibus ut, tincidunt sit amet, urna. Quisque viverra, eros sed imperdiet iaculis, est risus facilisis quam, id malesuada arcu nulla luctus urna. Nullam et est. Vestibulum velit sem, faucibus cursus, dapibus vestibulum, pellentesque et, urna. Donec luctus. Donec lectus. Aliquam eget eros facilisis tortor feugiat sollicitudin. Integer lobortis vulputate sapien. Sed iaculis erat ac nunc. Etiam eu enim. Mauris ipsum urna, rhoncus at, bibendum sit amet, euismod eget, dolor. Mauris fermentum quam vitae ligula. Vestibulum in libero feugiat justo dictum consectetuer. Vestibulum euismod purus eget elit. Nunc sed massa porta elit bibendum posuere. Nunc pulvinar justo sit amet odio. In sed est. Phasellus ornare elementum nulla. Nulla ipsum neque, cursus a, viverra a, imperdiet at, enim. Quisque facilisis, diam sed accumsan suscipit, odio arcu hendrerit dolor, quis aliquet massa nulla nec sem.
citeren:<<cite dijkshoorn2011 bibliography:Bibliography>>
!heading 1
!!heading 2
!!!heading3
----
<<tag button>>
This is a link to a [[StyleSheet]] tiddler.
points
*point1
*point2
order
#first
#secund
> This is a blockquote
> This is a blockquote
> This is a blockquote
''bold''
"bold"
''bold''
__underline__
//italic//
gewoon^^super^^
|>|>|>| !This is a header |h
|column1|column2|column3|
|row2| row2 |row2|
|column1|column2|column3|
|row2| row2 |row2|
|column1|column2|column3|
|row2| row2 |row2|

|sortable|k
|!Name |!Salary |!Extension |!Performance |!File Size |!Start date |h
|ZBloggs, Fred | €12000.00 |1353 |+1.2 |74.2Kb |Aug 19, 2003 21:34:00 |
|ABloggs, Fred |€12000.00 |1353 |1.2 |3350b |09/18/2003 |
|CBloggs, Fred |€12000 |1353 |1.200 |55.2Kb |August 18, 2003 |
|DBloggs, Fred |€12000.00 |1353 |1.2 |2100b |07/18/2003 |
|Bloggs, Fred |€12000.00 |1353 |01.20 |6.156Mb |08/17/2003 05:43 |
|Turvey, Kevin |€191200.00 |2342 |-33 |1b |02/05/1979 |
|Mbogo, Arnold |€32010.12 |2755 |-21.673 |1.2Gb |09/08/1998 |

|<html><img src="http://img480.imageshack.us/img480/7203/ParliamentHouseBudapest.jpg" /></html>|vertical-align:top;padding:1em;<html>This HTML example uses a picture from a remote server as a link to a larger picture that is on a different remote server.<p>test</p></html> |

|<html><a class='picture'> <object><param name="movie" value="http://www.youtube.com/v/72NI-P1zP1Y&hl=en_US&feature=player_embedded&version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/72NI-P1zP1Y&hl=en_US&feature=player_embedded&version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always"></embed></object></a></html>| <html><p class='kader'>This HTML example uses a picture from a remote server as a link to a larger picture that is on a different remote server.</p><p class='kader'> test</p></html> |

|vertical-align:top;padding:1em;This HTML example uses a picture from a remote server as a link to a larger picture that is on a different remote server.|<html><a href="http://img480.imageshack.us/img480/6435/CastleOnDanube.jpg" target="_blank"><img src="https://www.pleio.nl/file/download/31102322" border="0" alt="Free Image Hosting at www.ImageShack.us" /></a></html>|


|vertical-align:top;padding:1em;This HTML example uses a picture from a remote server as a link to a larger picture that is on a different remote server.|<html><div align="center"> <object width="240"><param name="movie" value="http://www.youtube.com/v/72NI-P1zP1Y&hl=en_US&feature=player_embedded&version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/72NI-P1zP1Y&hl=en_US&feature=player_embedded&version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="240" ></embed></object></div></html>|

<<photoGallery sequence:"!" height:200 time:2000 labels:SubTitles numbers start:5000
pictures/Aardwarmte.jpg
pictures/WKO.jpg
>>
<<cite Coda:97 showAll>>, <<cite Coda:97>>, <<cite Gew:92>>, <<cite GelMen:96>>, <<cite Ste:03>>
!References
<<bibliography>>
 <<fontSize>><<tag VraagSectoren>> <<tag Gebieden>> <<tag Potentieel>>  <<tag Kaarten>> [[Data]]
<<tiddler ToggleFullScreen with: '>' '<'>><<search>><<tiddler ToggleFullScreen##ON>> 
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-17961273-3', 'auto');
var uri = window.location.href.split("#")[0];
var hash = window.location.href.split("#")[1];
 ga('send',{'hitType': 'pageview','title': 'energiewiki','location':uri, 'page': hash});
</script>
/***
|''Name:''|MathSVGPlugin|
|''Description:''|This plugin translates a subset of the LaTeX math notation to MathML with a customisable  image fallback when MathML is not supported. It also provides an easy way to produce mathematical SVG graphics with dynamical features and animation.|
|''Version:''|1.4.5|
|''Date:''|2011-04-27|
|''Source:''|http://www.math.ist.utl.pt/~psoares/MathSVG.html|
|''Author:''|Paulo Soares|
|''License:''|[[GNU Lesser General Public License|http://www.gnu.org/licences/lgpl.html]]|
|''~CoreVersion:''|2.5.0|
!Original copyright notice
{{{
ASCIIMathML.js
==============
Version 2.1 Oct 8, 2008, (c) Peter Jipsen http://www.chapman.edu/~jipsen
This version extends ASCIIMathML.js with LaTeXMathML.js and ASCIIsvg.js.
Latest version at http://www.chapman.edu/~jipsen/mathml/ASCIIMathML.js
If you use it on a webpage, please send the URL to jipsen@chapman.edu

The LaTeXMathML modifications were made by Douglas Woodall, June 2006.
(for details see header on the LaTeXMathML part in middle of file)
Extensive clean-up and improvements by Paulo Soares, Oct 2007.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or (at
your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT 
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 
(at http://www.gnu.org/licences/lgpl.html) for more details.
}}}
!~MathSVG code (minified)
***/
//{{{
Math.sec=function(a){return 1/Math.cos(a)};Math.csc=function(a){return 1/Math.sin(a)};Math.cot=function(a){return 1/Math.tan(a)};Math.asec=function(a){return Math.acos(1/a)};Math.acsc=function(a){return Math.asin(1/a)};Math.acot=function(a){return Math.atan(1/a)};Math.sinh=function(a){return(Math.exp(a)-Math.exp(-a))/2};Math.cosh=function(a){return(Math.exp(a)+Math.exp(-a))/2};Math.tanh=function(a){return(Math.exp(a)-Math.exp(-a))/(Math.exp(a)+Math.exp(-a))};Math.sech=function(a){return 1/Math.cosh(a)};Math.csch=function(a){return 1/Math.sinh(a)};Math.coth=function(a){return 1/Math.tanh(a)};Math.asinh=function(a){return Math.log(a+Math.sqrt(a*a+1))};Math.acosh=function(a){return Math.log(a+Math.sqrt(a*a-1))};Math.atanh=function(a){return Math.log((1+a)/(1-a))/2};Math.sech=function(a){return 1/Math.cosh(a)};Math.csch=function(a){return 1/Math.sinh(a)};Math.coth=function(a){return 1/Math.tanh(a)};Math.asech=function(a){return Math.acosh(1/a)};Math.acsch=function(a){return Math.asinh(1/a)};Math.acoth=function(a){return Math.atanh(1/a)};Math.sign=function(a){return(a===0?0:(a<0?-1:1))};Math.step=function(a,c,b){return(a<0?(b?b:0):(c?c:1))};Math.root=function(a,b){return Math.pow(a,1/b)};Math.factorial=function(b){if(b===0){return 1}if(b<0){if((b%1)===0){return}if(b>-1){return Math.factorial(b+1)/(b+1)}return -Math.PI/(Math.factorial(-1-b)*Math.sin(Math.PI*b))}var a=b;if((b%1)===0){while(b>1){b=b-1;a=a*b}}else{a=Math.exp((b+0.5)*Math.log(b+1)-b-b*(0.1121105+b*0.08106103)/(1.452342+b*(2.410858+b)))}return a};Math.Gamma=function(a){return Math.factorial(a-1)};Math.Beta=function(a,b){return Math.Gamma(a)*Math.Gamma(b)/Math.Gamma(a+b)};Math.C=function(a,b){var c=1/((a+1)*Math.Beta(b+1,a-b+1));return c};Math.truncate=function(a,c){var b=c||0;return Math.floor(a*Math.pow(10,b))/Math.pow(10,b)};Math.randomString=function(a,g){var f=(g||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz").split("");var e=[],c=Math.random;var d=f.length;for(var b=0;b<a;b++){e[b]=f[0|c()*d]}return e.join("")};Math.runif=function(d,c,f){var e=f||0;return Math.truncate((c+Math.pow(10,-e)-d)*Math.random()+d,e)};Math.rnormal=function(a,b){a=a||0;b=b||1;var d=0,c=0;while(d*c===0){d=Math.random();c=Math.random()}return b*(Math.sqrt(-2*Math.log(d))*Math.cos(2*Math.PI*c))+a};(function(){var a=jQuery.fn.attr,b="http://www.w3.org/2000/svg";jQuery.fn.attr=function(m,l){var g=this.length;if(!g){return this}for(var f=0;f<g;f++){var c=this[f];if(c.namespaceURI===b){if(l!==undefined){c.setAttribute(m,l)}else{if($.isArray(m)){var d=m.length,e={};while(d--){var k=m[d];var h=c.getAttribute(k);if(h||h==="0"){h=isNaN(h)?h:h-0}e[k]=h}return e}else{if(typeof m==="object"){for(v in m){c.setAttribute(v,m[v])}}else{var h=c.getAttribute(m);if(h||h==="0"){h=isNaN(h)?h:h-0}return h}}}}else{return a.apply(this,arguments)}}return this}}());var MSVG=function($){var cal=["\uD835\uDC9C","\u212C","\uD835\uDC9E","\uD835\uDC9F","\u2130","\u2131","\uD835\uDCA2","\u210B","\u2110","\uD835\uDCA5","\uD835\uDCA6","\u2112","\u2133","\uD835\uDCA9","\uD835\uDCAA","\uD835\uDCAB","\uD835\uDCAC","\u211B","\uD835\uDCAE","\uD835\uDCAF","\uD835\uDCB0","\uD835\uDCB1","\uD835\uDCB2","\uD835\uDCB3","\uD835\uDCB4","\uD835\uDCB5","\uD835\uDCB6","\uD835\uDCB7","\uD835\uDCB8","\uD835\uDCB9","\u212F","\uD835\uDCBB","\u210A","\uD835\uDCBD","\uD835\uDCBE","\uD835\uDCBF","\uD835\uDCC0","\uD835\uDCC1","\uD835\uDCC2","\uD835\uDCC3","\u2134","\uD835\uDCC5","\uD835\uDCC6","\uD835\uDCC7","\uD835\uDCC8","\uD835\uDCC9","\uD835\uDCCA","\uD835\uDCCB","\uD835\uDCCC","\uD835\uDCCD","\uD835\uDCCE","\uD835\uDCCF"];var frk=["\uD835\uDD04","\uD835\uDD05","\u212D","\uD835\uDD07","\uD835\uDD08","\uD835\uDD09","\uD835\uDD0A","\u210C","\u2111","\uD835\uDD0D","\uD835\uDD0E","\uD835\uDD0F","\uD835\uDD10","\uD835\uDD11","\uD835\uDD12","\uD835\uDD13","\uD835\uDD14","\u211C","\uD835\uDD16","\uD835\uDD17","\uD835\uDD18","\uD835\uDD19","\uD835\uDD1A","\uD835\uDD1B","\uD835\uDD1C","\u2128","\uD835\uDD1E","\uD835\uDD1F","\uD835\uDD20","\uD835\uDD21","\uD835\uDD22","\uD835\uDD23","\uD835\uDD24","\uD835\uDD25","\uD835\uDD26","\uD835\uDD27","\uD835\uDD28","\uD835\uDD29","\uD835\uDD2A","\uD835\uDD2B","\uD835\uDD2C","\uD835\uDD2D","\uD835\uDD2E","\uD835\uDD2F","\uD835\uDD30","\uD835\uDD31","\uD835\uDD32","\uD835\uDD33","\uD835\uDD34","\uD835\uDD35","\uD835\uDD36","\uD835\uDD37"];var bbb=["\uD835\uDD38","\uD835\uDD39","\u2102","\uD835\uDD3B","\uD835\uDD3C","\uD835\uDD3D","\uD835\uDD3E","\u210D","\uD835\uDD40","\uD835\uDD41","\uD835\uDD42","\uD835\uDD43","\uD835\uDD44","\u2115","\uD835\uDD46","\u2119","\u211A","\u211D","\uD835\uDD4A","\uD835\uDD4B","\uD835\uDD4C","\uD835\uDD4D","\uD835\uDD4E","\uD835\uDD4F","\uD835\uDD50","\u2124","\uD835\uDD52","\uD835\uDD53","\uD835\uDD54","\uD835\uDD55","\uD835\uDD56","\uD835\uDD57","\uD835\uDD58","\uD835\uDD59","\uD835\uDD5A","\uD835\uDD5B","\uD835\uDD5C","\uD835\uDD5D","\uD835\uDD5E","\uD835\uDD5F","\uD835\uDD60","\uD835\uDD61","\uD835\uDD62","\uD835\uDD63","\uD835\uDD64","\uD835\uDD65","\uD835\uDD66","\uD835\uDD67","\uD835\uDD68","\uD835\uDD69","\uD835\uDD6A","\uD835\uDD6B"];var CONST=0,UNARY=1,BINARY=2,INFIX=3,LEFTBRACKET=4,RIGHTBRACKET=5,SPACE=6,UNDEROVER=7,DEFINITION=8,LEFTRIGHT=9,TEXT=10,BIG=11,STRETCHY=13,MATRIX=14;var symbols=[{input:"\\varepsilon",tag:"mi",output:"\u025B",ttype:CONST},{input:"\\varsigma",tag:"mi",output:"\u03C2",ttype:CONST},{input:"\\vartheta",tag:"mi",output:"\u03D1",ttype:CONST},{input:"\\varphi",tag:"mi",output:"\u03D5",ttype:CONST},{input:"\\varpi",tag:"mi",output:"\u03D6",ttype:CONST},{input:"\\varrho",tag:"mi",output:"\u03F1",ttype:CONST},{input:"\\alpha",tag:"mi",output:"\u03B1",ttype:CONST},{input:"\\beta",tag:"mi",output:"\u03B2",ttype:CONST},{input:"\\gamma",tag:"mi",output:"\u03B3",ttype:CONST},{input:"\\delta",tag:"mi",output:"\u03B4",ttype:CONST},{input:"\\epsilon",tag:"mi",output:"\u03B5",ttype:CONST},{input:"\\zeta",tag:"mi",output:"\u03B6",ttype:CONST},{input:"\\eta",tag:"mi",output:"\u03B7",ttype:CONST},{input:"\\theta",tag:"mi",output:"\u03B8",ttype:CONST},{input:"\\iota",tag:"mi",output:"\u03B9",ttype:CONST},{input:"\\kappa",tag:"mi",output:"\u03BA",ttype:CONST},{input:"\\lambda",tag:"mi",output:"\u03BB",ttype:CONST},{input:"\\mu",tag:"mi",output:"\u03BC",ttype:CONST},{input:"\\nu",tag:"mi",output:"\u03BD",ttype:CONST},{input:"\\xi",tag:"mi",output:"\u03BE",ttype:CONST},{input:"\\omicron",tag:"mi",output:"\u03BF",ttype:CONST},{input:"\\pi",tag:"mi",output:"\u03C0",ttype:CONST},{input:"\\rho",tag:"mi",output:"\u03C1",ttype:CONST},{input:"\\sigma",tag:"mi",output:"\u03C3",ttype:CONST},{input:"\\tau",tag:"mi",output:"\u03C4",ttype:CONST},{input:"\\upsilon",tag:"mi",output:"\u03C5",ttype:CONST},{input:"\\phi",tag:"mi",output:"\u03C6",ttype:CONST},{input:"\\chi",tag:"mi",output:"\u03C7",ttype:CONST},{input:"\\psi",tag:"mi",output:"\u03C8",ttype:CONST},{input:"\\omega",tag:"mi",output:"\u03C9",ttype:CONST},{input:"\\Alpha",tag:"mo",output:"\u0391",ttype:CONST},{input:"\\Beta",tag:"mo",output:"\u0392",ttype:CONST},{input:"\\Gamma",tag:"mo",output:"\u0393",ttype:CONST},{input:"\\Delta",tag:"mo",output:"\u0394",ttype:CONST},{input:"\\Epsilon",tag:"mo",output:"\u0395",ttype:CONST},{input:"\\Zeta",tag:"mo",output:"\u0396",ttype:CONST},{input:"\\Eta",tag:"mo",output:"\u0397",ttype:CONST},{input:"\\Theta",tag:"mo",output:"\u0398",ttype:CONST},{input:"\\Iota",tag:"mo",output:"\u0399",ttype:CONST},{input:"\\Kappa",tag:"mo",output:"\u039A",ttype:CONST},{input:"\\Lambda",tag:"mo",output:"\u039B",ttype:CONST},{input:"\\Mu",tag:"mo",output:"\u039C",ttype:CONST},{input:"\\Nu",tag:"mo",output:"\u039D",ttype:CONST},{input:"\\Xi",tag:"mo",output:"\u039E",ttype:CONST},{input:"\\Omicron",tag:"mo",output:"\u039F",ttype:CONST},{input:"\\Pi",tag:"mo",output:"\u03A0",ttype:CONST},{input:"\\Rho",tag:"mo",output:"\u03A1",ttype:CONST},{input:"\\Sigma",tag:"mo",output:"\u03A3",ttype:CONST},{input:"\\Tau",tag:"mo",output:"\u03A4",ttype:CONST},{input:"\\Upsilon",tag:"mo",output:"\u03A5",ttype:CONST},{input:"\\Phi",tag:"mo",output:"\u03A6",ttype:CONST},{input:"\\Chi",tag:"mo",output:"\u03A7",ttype:CONST},{input:"\\Psi",tag:"mo",output:"\u03A8",ttype:CONST},{input:"\\Omega",tag:"mo",output:"\u03A9",ttype:CONST},{input:"\\frac12",tag:"mo",output:"\u00BD",ttype:CONST},{input:"\\frac14",tag:"mo",output:"\u00BC",ttype:CONST},{input:"\\frac34",tag:"mo",output:"\u00BE",ttype:CONST},{input:"\\frac13",tag:"mo",output:"\u2153",ttype:CONST},{input:"\\frac23",tag:"mo",output:"\u2154",ttype:CONST},{input:"\\frac15",tag:"mo",output:"\u2155",ttype:CONST},{input:"\\frac25",tag:"mo",output:"\u2156",ttype:CONST},{input:"\\frac35",tag:"mo",output:"\u2157",ttype:CONST},{input:"\\frac45",tag:"mo",output:"\u2158",ttype:CONST},{input:"\\frac16",tag:"mo",output:"\u2159",ttype:CONST},{input:"\\frac56",tag:"mo",output:"\u215A",ttype:CONST},{input:"\\frac18",tag:"mo",output:"\u215B",ttype:CONST},{input:"\\frac38",tag:"mo",output:"\u215C",ttype:CONST},{input:"\\frac58",tag:"mo",output:"\u215D",ttype:CONST},{input:"\\frac78",tag:"mo",output:"\u215E",ttype:CONST},{input:"\\pm",tag:"mo",output:"\u00B1",ttype:CONST},{input:"\\mp",tag:"mo",output:"\u2213",ttype:CONST},{input:"\\triangleleft",tag:"mo",output:"\u22B2",ttype:CONST},{input:"\\triangleright",tag:"mo",output:"\u22B3",ttype:CONST},{input:"\\cdot",tag:"mo",output:"\u22C5",ttype:CONST},{input:"\\star",tag:"mo",output:"\u22C6",ttype:CONST},{input:"\\ast",tag:"mo",output:"\u002A",ttype:CONST},{input:"\\times",tag:"mo",output:"\u00D7",ttype:CONST},{input:"\\div",tag:"mo",output:"\u00F7",ttype:CONST},{input:"\\circ",tag:"mo",output:"\u2218",ttype:CONST},{input:"\\bullet",tag:"mo",output:"\u2022",ttype:CONST},{input:"\\oplus",tag:"mo",output:"\u2295",ttype:CONST},{input:"\\ominus",tag:"mo",output:"\u2296",ttype:CONST},{input:"\\otimes",tag:"mo",output:"\u2297",ttype:CONST},{input:"\\bigcirc",tag:"mo",output:"\u25CB",ttype:CONST},{input:"\\oslash",tag:"mo",output:"\u2298",ttype:CONST},{input:"\\odot",tag:"mo",output:"\u2299",ttype:CONST},{input:"\\land",tag:"mo",output:"\u2227",ttype:CONST},{input:"\\wedge",tag:"mo",output:"\u2227",ttype:CONST},{input:"\\lor",tag:"mo",output:"\u2228",ttype:CONST},{input:"\\vee",tag:"mo",output:"\u2228",ttype:CONST},{input:"\\cap",tag:"mo",output:"\u2229",ttype:CONST},{input:"\\cup",tag:"mo",output:"\u222A",ttype:CONST},{input:"\\sqcap",tag:"mo",output:"\u2293",ttype:CONST},{input:"\\sqcup",tag:"mo",output:"\u2294",ttype:CONST},{input:"\\uplus",tag:"mo",output:"\u228E",ttype:CONST},{input:"\\amalg",tag:"mo",output:"\u2210",ttype:CONST},{input:"\\bigtriangleup",tag:"mo",output:"\u25B3",ttype:CONST},{input:"\\bigtriangledown",tag:"mo",output:"\u25BD",ttype:CONST},{input:"\\dag",tag:"mo",output:"\u2020",ttype:CONST},{input:"\\dagger",tag:"mo",output:"\u2020",ttype:CONST},{input:"\\ddag",tag:"mo",output:"\u2021",ttype:CONST},{input:"\\ddagger",tag:"mo",output:"\u2021",ttype:CONST},{input:"\\lhd",tag:"mo",output:"\u22B2",ttype:CONST},{input:"\\rhd",tag:"mo",output:"\u22B3",ttype:CONST},{input:"\\unlhd",tag:"mo",output:"\u22B4",ttype:CONST},{input:"\\unrhd",tag:"mo",output:"\u22B5",ttype:CONST},{input:"\\sum",tag:"mo",output:"\u2211",ttype:UNDEROVER},{input:"\\prod",tag:"mo",output:"\u220F",ttype:UNDEROVER},{input:"\\bigcap",tag:"mo",output:"\u22C2",ttype:UNDEROVER},{input:"\\bigcup",tag:"mo",output:"\u22C3",ttype:UNDEROVER},{input:"\\bigwedge",tag:"mo",output:"\u22C0",ttype:UNDEROVER},{input:"\\bigvee",tag:"mo",output:"\u22C1",ttype:UNDEROVER},{input:"\\bigsqcap",tag:"mo",output:"\u2A05",ttype:UNDEROVER},{input:"\\bigsqcup",tag:"mo",output:"\u2A06",ttype:UNDEROVER},{input:"\\coprod",tag:"mo",output:"\u2210",ttype:UNDEROVER},{input:"\\bigoplus",tag:"mo",output:"\u2A01",ttype:UNDEROVER},{input:"\\bigotimes",tag:"mo",output:"\u2A02",ttype:UNDEROVER},{input:"\\bigodot",tag:"mo",output:"\u2A00",ttype:UNDEROVER},{input:"\\biguplus",tag:"mo",output:"\u2A04",ttype:UNDEROVER},{input:"\\int",tag:"mo",output:"\u222B",ttype:CONST},{input:"\\oint",tag:"mo",output:"\u222E",ttype:CONST},{input:":=",tag:"mo",output:":=",ttype:CONST},{input:"\\lt",tag:"mo",output:"<",ttype:CONST},{input:"\\gt",tag:"mo",output:">",ttype:CONST},{input:"\\ne",tag:"mo",output:"\u2260",ttype:CONST},{input:"\\neq",tag:"mo",output:"\u2260",ttype:CONST},{input:"\\le",tag:"mo",output:"\u2264",ttype:CONST},{input:"\\leq",tag:"mo",output:"\u2264",ttype:CONST},{input:"\\leqslant",tag:"mo",output:"\u2264",ttype:CONST},{input:"\\ge",tag:"mo",output:"\u2265",ttype:CONST},{input:"\\geq",tag:"mo",output:"\u2265",ttype:CONST},{input:"\\geqslant",tag:"mo",output:"\u2265",ttype:CONST},{input:"\\equiv",tag:"mo",output:"\u2261",ttype:CONST},{input:"\\ll",tag:"mo",output:"\u226A",ttype:CONST},{input:"\\gg",tag:"mo",output:"\u226B",ttype:CONST},{input:"\\doteq",tag:"mo",output:"\u2250",ttype:CONST},{input:"\\prec",tag:"mo",output:"\u227A",ttype:CONST},{input:"\\succ",tag:"mo",output:"\u227B",ttype:CONST},{input:"\\preceq",tag:"mo",output:"\u227C",ttype:CONST},{input:"\\succeq",tag:"mo",output:"\u227D",ttype:CONST},{input:"\\subset",tag:"mo",output:"\u2282",ttype:CONST},{input:"\\supset",tag:"mo",output:"\u2283",ttype:CONST},{input:"\\subseteq",tag:"mo",output:"\u2286",ttype:CONST},{input:"\\supseteq",tag:"mo",output:"\u2287",ttype:CONST},{input:"\\sqsubset",tag:"mo",output:"\u228F",ttype:CONST},{input:"\\sqsupset",tag:"mo",output:"\u2290",ttype:CONST},{input:"\\sqsubseteq",tag:"mo",output:"\u2291",ttype:CONST},{input:"\\sqsupseteq",tag:"mo",output:"\u2292",ttype:CONST},{input:"\\sim",tag:"mo",output:"\u223C",ttype:CONST},{input:"\\simeq",tag:"mo",output:"\u2243",ttype:CONST},{input:"\\approx",tag:"mo",output:"\u2248",ttype:CONST},{input:"\\cong",tag:"mo",output:"\u2245",ttype:CONST},{input:"\\Join",tag:"mo",output:"\u22C8",ttype:CONST},{input:"\\bowtie",tag:"mo",output:"\u22C8",ttype:CONST},{input:"\\in",tag:"mo",output:"\u2208",ttype:CONST},{input:"\\ni",tag:"mo",output:"\u220B",ttype:CONST},{input:"\\owns",tag:"mo",output:"\u220B",ttype:CONST},{input:"\\propto",tag:"mo",output:"\u221D",ttype:CONST},{input:"\\vdash",tag:"mo",output:"\u22A2",ttype:CONST},{input:"\\dashv",tag:"mo",output:"\u22A3",ttype:CONST},{input:"\\models",tag:"mo",output:"\u22A8",ttype:CONST},{input:"\\perp",tag:"mo",output:"\u22A5",ttype:CONST},{input:"\\smile",tag:"mo",output:"\u2323",ttype:CONST},{input:"\\frown",tag:"mo",output:"\u2322",ttype:CONST},{input:"\\asymp",tag:"mo",output:"\u224D",ttype:CONST},{input:"\\notin",tag:"mo",output:"\u2209",ttype:CONST},{input:"\\begin{eqnarray}",output:"X",ttype:MATRIX,invisible:true},{input:"\\begin{array}",output:"X",ttype:MATRIX,invisible:true},{input:"\\\\",output:"}&{",ttype:DEFINITION},{input:"\\end{eqnarray}",output:"}}",ttype:DEFINITION},{input:"\\end{array}",output:"}}",ttype:DEFINITION},{input:"\\big",tag:"mo",output:"X",atval:"1.2",ttype:BIG},{input:"\\Big",tag:"mo",output:"X",atval:"1.8",ttype:BIG},{input:"\\bigg",tag:"mo",output:"X",atval:"2.3",ttype:BIG},{input:"\\Bigg",tag:"mo",output:"X",atval:"2.9",ttype:BIG},{input:"\\left",tag:"mo",output:"X",ttype:LEFTBRACKET},{input:"\\right",tag:"mo",output:"X",ttype:RIGHTBRACKET},{input:"{",output:"{",ttype:LEFTBRACKET,invisible:true},{input:"}",output:"}",ttype:RIGHTBRACKET,invisible:true},{input:"(",tag:"mo",output:"(",atval:"1",ttype:STRETCHY},{input:"[",tag:"mo",output:"[",atval:"1",ttype:STRETCHY},{input:"\\lbrack",tag:"mo",output:"[",atval:"1",ttype:STRETCHY},{input:"\\{",tag:"mo",output:"{",atval:"1",ttype:STRETCHY},{input:"\\lbrace",tag:"mo",output:"{",atval:"1",ttype:STRETCHY},{input:"\\langle",tag:"mo",output:"\u2329",atval:"1",ttype:STRETCHY},{input:"\\lfloor",tag:"mo",output:"\u230A",atval:"1",ttype:STRETCHY},{input:"\\lceil",tag:"mo",output:"\u2308",atval:"1",ttype:STRETCHY},{input:")",tag:"mo",output:")",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"]",tag:"mo",output:"]",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"\\rbrack",tag:"mo",output:"]",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"\\}",tag:"mo",output:"}",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"\\rbrace",tag:"mo",output:"}",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"\\rangle",tag:"mo",output:"\u232A",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"\\rfloor",tag:"mo",output:"\u230B",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"\\rceil",tag:"mo",output:"\u2309",rtag:"mi",atval:"1",ttype:STRETCHY},{input:"|",tag:"mo",output:"\u2223",atval:"1",ttype:STRETCHY},{input:"\\|",tag:"mo",output:"\u2225",atval:"1",ttype:STRETCHY},{input:"\\vert",tag:"mo",output:"\u2223",atval:"1",ttype:STRETCHY},{input:"\\Vert",tag:"mo",output:"\u2225",atval:"1",ttype:STRETCHY},{input:"\\mid",tag:"mo",output:"\u2223",atval:"1",ttype:STRETCHY},{input:"\\parallel",tag:"mo",output:"\u2225",atval:"1",ttype:STRETCHY},{input:"/",tag:"mo",output:"/",atval:"1.01",ttype:STRETCHY},{input:"\\backslash",tag:"mo",output:"\u2216",atval:"1",ttype:STRETCHY},{input:"\\setminus",tag:"mo",output:"\\",ttype:CONST},{input:"\\!",tag:"mspace",atname:"width",atval:"-0.167em",ttype:SPACE},{input:"\\,",tag:"mspace",atname:"width",atval:"0.167em",ttype:SPACE},{input:"\\>",tag:"mspace",atname:"width",atval:"0.222em",ttype:SPACE},{input:"\\:",tag:"mspace",atname:"width",atval:"0.222em",ttype:SPACE},{input:"\\;",tag:"mspace",atname:"width",atval:"0.278em",ttype:SPACE},{input:"~",tag:"mspace",atname:"width",atval:"0.333em",ttype:SPACE},{input:"\\quad",tag:"mspace",atname:"width",atval:"1em",ttype:SPACE},{input:"\\qquad",tag:"mspace",atname:"width",atval:"2em",ttype:SPACE},{input:"\\prime",tag:"mo",output:"\u2032",ttype:CONST},{input:"'",tag:"mo",output:"\u02B9",ttype:CONST},{input:"''",tag:"mo",output:"\u02BA",ttype:CONST},{input:"'''",tag:"mo",output:"\u2034",ttype:CONST},{input:"''''",tag:"mo",output:"\u2057",ttype:CONST},{input:"\\ldots",tag:"mo",output:"\u2026",ttype:CONST},{input:"\\cdots",tag:"mo",output:"\u22EF",ttype:CONST},{input:"\\vdots",tag:"mo",output:"\u22EE",ttype:CONST},{input:"\\ddots",tag:"mo",output:"\u22F1",ttype:CONST},{input:"\\forall",tag:"mo",output:"\u2200",ttype:CONST},{input:"\\exists",tag:"mo",output:"\u2203",ttype:CONST},{input:"\\Re",tag:"mo",output:"\u211C",ttype:CONST},{input:"\\Im",tag:"mo",output:"\u2111",ttype:CONST},{input:"\\aleph",tag:"mo",output:"\u2135",ttype:CONST},{input:"\\hbar",tag:"mo",output:"\u210F",ttype:CONST},{input:"\\ell",tag:"mo",output:"\u2113",ttype:CONST},{input:"\\wp",tag:"mo",output:"\u2118",ttype:CONST},{input:"\\emptyset",tag:"mo",output:"\u2205",ttype:CONST},{input:"\\infty",tag:"mo",output:"\u221E",ttype:CONST},{input:"\\surd",tag:"mo",output:"\\sqrt{}",ttype:DEFINITION},{input:"\\partial",tag:"mo",output:"\u2202",ttype:CONST},{input:"\\nabla",tag:"mo",output:"\u2207",ttype:CONST},{input:"\\triangle",tag:"mo",output:"\u25B3",ttype:CONST},{input:"\\therefore",tag:"mo",output:"\u2234",ttype:CONST},{input:"\\angle",tag:"mo",output:"\u2220",ttype:CONST},{input:"\\diamond",tag:"mo",output:"\u22C4",ttype:CONST},{input:"\\Diamond",tag:"mo",output:"\u25C7",ttype:CONST},{input:"\\neg",tag:"mo",output:"\u00AC",ttype:CONST},{input:"\\lnot",tag:"mo",output:"\u00AC",ttype:CONST},{input:"\\bot",tag:"mo",output:"\u22A5",ttype:CONST},{input:"\\top",tag:"mo",output:"\u22A4",ttype:CONST},{input:"\\square",tag:"mo",output:"\u25AB",ttype:CONST},{input:"\\Box",tag:"mo",output:"\u25A1",ttype:CONST},{input:"\\wr",tag:"mo",output:"\u2240",ttype:CONST},{input:"\\arccos",tag:"mi",output:"arccos",ttype:UNARY,func:true},{input:"\\arcsin",tag:"mi",output:"arcsin",ttype:UNARY,func:true},{input:"\\arctan",tag:"mi",output:"arctan",ttype:UNARY,func:true},{input:"\\arg",tag:"mi",output:"arg",ttype:UNARY,func:true},{input:"\\cos",tag:"mi",output:"cos",ttype:UNARY,func:true},{input:"\\cosh",tag:"mi",output:"cosh",ttype:UNARY,func:true},{input:"\\cot",tag:"mi",output:"cot",ttype:UNARY,func:true},{input:"\\coth",tag:"mi",output:"coth",ttype:UNARY,func:true},{input:"\\csc",tag:"mi",output:"csc",ttype:UNARY,func:true},{input:"\\deg",tag:"mi",output:"deg",ttype:UNARY,func:true},{input:"\\det",tag:"mi",output:"det",ttype:UNARY,func:true},{input:"\\dim",tag:"mi",output:"dim",ttype:UNARY,func:true},{input:"\\exp",tag:"mi",output:"exp",ttype:UNARY,func:true},{input:"\\gcd",tag:"mi",output:"gcd",ttype:UNARY,func:true},{input:"\\hom",tag:"mi",output:"hom",ttype:UNARY,func:true},{input:"\\inf",tag:"mo",output:"inf",ttype:UNDEROVER},{input:"\\ker",tag:"mi",output:"ker",ttype:UNARY,func:true},{input:"\\lg",tag:"mi",output:"lg",ttype:UNARY,func:true},{input:"\\lim",tag:"mo",output:"lim",ttype:UNDEROVER},{input:"\\liminf",tag:"mo",output:"liminf",ttype:UNDEROVER},{input:"\\limsup",tag:"mo",output:"limsup",ttype:UNDEROVER},{input:"\\ln",tag:"mi",output:"ln",ttype:UNARY,func:true},{input:"\\log",tag:"mi",output:"log",ttype:UNARY,func:true},{input:"\\max",tag:"mo",output:"max",ttype:UNDEROVER},{input:"\\min",tag:"mo",output:"min",ttype:UNDEROVER},{input:"\\Pr",tag:"mi",output:"Pr",ttype:UNARY,func:true},{input:"\\sec",tag:"mi",output:"sec",ttype:UNARY,func:true},{input:"\\sin",tag:"mi",output:"sin",ttype:UNARY,func:true},{input:"\\sinh",tag:"mi",output:"sinh",ttype:UNARY,func:true},{input:"\\sup",tag:"mo",output:"sup",ttype:UNDEROVER},{input:"\\tan",tag:"mi",output:"tan",ttype:UNARY,func:true},{input:"\\tanh",tag:"mi",output:"tanh",ttype:UNARY,func:true},{input:"\\gets",tag:"mo",output:"\u2190",ttype:CONST},{input:"\\leftarrow",tag:"mo",output:"\u2190",ttype:CONST},{input:"\\to",tag:"mo",output:"\u2192",ttype:CONST},{input:"\\rightarrow",tag:"mo",output:"\u2192",ttype:CONST},{input:"\\leftrightarrow",tag:"mo",output:"\u2194",ttype:CONST},{input:"\\uparrow",tag:"mo",output:"\u2191",ttype:CONST},{input:"\\downarrow",tag:"mo",output:"\u2193",ttype:CONST},{input:"\\updownarrow",tag:"mo",output:"\u2195",ttype:CONST},{input:"\\Leftarrow",tag:"mo",output:"\u21D0",ttype:CONST},{input:"\\Rightarrow",tag:"mo",output:"\u21D2",ttype:CONST},{input:"\\Leftrightarrow",tag:"mo",output:"\u21D4",ttype:CONST},{input:"\\iff",tag:"mo",output:"~\\Longleftrightarrow~",ttype:DEFINITION},{input:"\\Uparrow",tag:"mo",output:"\u21D1",ttype:CONST},{input:"\\Downarrow",tag:"mo",output:"\u21D3",ttype:CONST},{input:"\\Updownarrow",tag:"mo",output:"\u21D5",ttype:CONST},{input:"\\mapsto",tag:"mo",output:"\u21A6",ttype:CONST},{input:"\\longleftarrow",tag:"mo",output:"\u27F5",ttype:CONST},{input:"\\longrightarrow",tag:"mo",output:"\u27F6",ttype:CONST},{input:"\\longleftrightarrow",tag:"mo",output:"\u27F7",ttype:CONST},{input:"\\Longleftarrow",tag:"mo",output:"\u27F8",ttype:CONST},{input:"\\Longrightarrow",tag:"mo",output:"\u27F9",ttype:CONST},{input:"\\Longleftrightarrow",tag:"mo",output:"\u27FA",ttype:CONST},{input:"\\longmapsto",tag:"mo",output:"\u27FC",ttype:CONST},{input:"\\sqrt",tag:"msqrt",output:"sqrt",ttype:UNARY},{input:"\\root",tag:"mroot",output:"root",ttype:BINARY},{input:"\\frac",tag:"mfrac",output:"/",ttype:BINARY},{input:"\\bfrac",tag:"mfrac",output:"/",ttype:BINARY},{input:"\\stackrel",tag:"mover",output:"stackrel",ttype:BINARY},{input:"\\atop",tag:"mfrac",output:"",ttype:INFIX},{input:"\\choose",tag:"mfrac",output:"",ttype:INFIX},{input:"\\over",tag:"mfrac",output:"/",ttype:INFIX},{input:"_",tag:"msub",output:"_",ttype:INFIX},{input:"^",tag:"msup",output:"^",ttype:INFIX},{input:"\\mbox",tag:"mtext",output:"mbox",ttype:TEXT},{input:"\\acute",tag:"mover",output:"\u00B4",ttype:UNARY,acc:true},{input:"\\grave",tag:"mover",output:"\u0060",ttype:UNARY,acc:true},{input:"\\breve",tag:"mover",output:"\u02D8",ttype:UNARY,acc:true},{input:"\\check",tag:"mover",output:"\u02C7",ttype:UNARY,acc:true},{input:"\\dot",tag:"mover",output:".",ttype:UNARY,acc:true},{input:"\\ddot",tag:"mover",output:"..",ttype:UNARY,acc:true},{input:"\\mathring",tag:"mover",output:"\u00B0",ttype:UNARY,acc:true},{input:"\\vec",tag:"mover",output:"\u2192",ttype:UNARY,acc:true},{input:"\\overrightarrow",tag:"mover",output:"\u2192",ttype:UNARY,acc:true},{input:"\\overleftarrow",tag:"mover",output:"\u2190",ttype:UNARY,acc:true},{input:"\\hat",tag:"mover",output:"\u005E",ttype:UNARY,acc:true},{input:"\\widehat",tag:"mover",output:"\u0302",ttype:UNARY,acc:true},{input:"\\tilde",tag:"mover",output:"~",ttype:UNARY,acc:true},{input:"\\widetilde",tag:"mover",output:"\u02DC",ttype:UNARY,acc:true},{input:"\\bar",tag:"mover",output:"\u203E",ttype:UNARY,acc:true},{input:"\\overbrace",tag:"mover",output:"\u23B4",ttype:UNARY,acc:true},{input:"\\overline",tag:"mover",output:"\u00AF",ttype:UNARY,acc:true},{input:"\\underbrace",tag:"munder",output:"\u23B5",ttype:UNARY,acc:true},{input:"\\underline",tag:"munder",output:"\u00AF",ttype:UNARY,acc:true},{input:"\\displaystyle",tag:"mstyle",atname:"displaystyle",atval:"true",ttype:UNARY},{input:"\\textstyle",tag:"mstyle",atname:"displaystyle",atval:"false",ttype:UNARY},{input:"\\scriptstyle",tag:"mstyle",atname:"scriptlevel",atval:"1",ttype:UNARY},{input:"\\scriptscriptstyle",tag:"mstyle",atname:"scriptlevel",atval:"2",ttype:UNARY},{input:"\\mathrm",tag:"mtext",output:"text",ttype:TEXT},{input:"\\textrm",tag:"mtext",output:"text",ttype:TEXT},{input:"\\mathbf",tag:"mstyle",atname:"mathvariant",atval:"bold",ttype:UNARY},{input:"\\textbf",tag:"mstyle",atname:"mathvariant",atval:"bold",ttype:UNARY},{input:"\\mathit",tag:"mstyle",atname:"mathvariant",atval:"italic",ttype:UNARY},{input:"\\textit",tag:"mstyle",atname:"mathvariant",atval:"italic",ttype:UNARY},{input:"\\mathtt",tag:"mstyle",atname:"mathvariant",atval:"monospace",ttype:UNARY},{input:"\\texttt",tag:"mstyle",atname:"mathvariant",atval:"monospace",ttype:UNARY},{input:"\\mathsf",tag:"mstyle",atname:"mathvariant",atval:"sans-serif",ttype:UNARY},{input:"\\mathbb",tag:"mstyle",atname:"mathvariant",atval:"double-struck",ttype:UNARY,codes:bbb},{input:"\\mathcal",tag:"mstyle",atname:"mathvariant",atval:"script",ttype:UNARY,codes:cal},{input:"\\mathfrak",tag:"mstyle",atname:"mathvariant",atval:"fraktur",ttype:UNARY,codes:frk}];var names=[];var mathVariant="italic";if(!document.createElementNS){document.createElementNS=function(link,type){return this.createElement(type)}}function compareNames(x,y){if(x.input>y.input){return 1}else{return -1}}function refreshSymbols(){var len=symbols.length;symbols.sort(compareNames);for(var i=0;i<len;i++){names[i]=symbols[i].input}}function strim(str,n){return $.trim(str.slice(n))}function createElementXHTML(elType){return document.createElementNS("http://www.w3.org/1999/xhtml",elType)}function position(str,n){var pos=$.inArray(str,names.slice(n));if(pos<0){var narr=names.concat([str]);narr.sort();pos=$.inArray(str,narr.slice(n))}return n+pos}function getSymbol(str){var k=0;var j=0;var mk;var st;var tagst;var match="";var more=true;var sLen=str.length;for(var i=1;i<=sLen&&more;i++){st=str.slice(0,i);j=k;k=position(st,j);if(k<names.length&&str.slice(0,names[k].length)==names[k]){match=names[k];mk=k;i=match.length}more=k<names.length&&str.slice(0,names[k].length)>=names[k]}if(match!==""){return symbols[mk]}k=1;st=str.slice(0,1);if("0"<=st&&st<="9"){tagst="mn"}else{tagst=(("A">st||st>"Z")&&("a">st||st>"z")?"mo":"mi")}return{input:st,tag:tagst,output:st,ttype:CONST}}function parseSexpr(str){var symbol,node,result,result2,i,st,newFrag=document.createDocumentFragment();var ch,newst,text="";symbol=getSymbol(str);if(symbol===null||symbol.ttype==RIGHTBRACKET){return[null,str,null]}if(symbol.ttype==DEFINITION){str=symbol.output+strim(str,symbol.input.length);symbol=getSymbol(str);if(symbol===null||symbol.ttype==RIGHTBRACKET){return[null,str,null]}}if(symbol.ttype==CONST&&symbol.tag=="mi"&&str!=""){while(symbol.ttype==CONST&&symbol.tag=="mi"&&str!=""){text+=symbol.output;str=strim(str,symbol.input.length);symbol=getSymbol(str)}node=createMmlNode("mi",document.createTextNode(text));node.setAttribute("mathvariant",mathVariant);return[node,str,"mi"]}else{str=strim(str,symbol.input.length)}switch(symbol.ttype){case SPACE:node=createMmlNode(symbol.tag);node.setAttribute(symbol.atname,symbol.atval);return[node,str,symbol.tag];case UNDEROVER:return[createMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag];case CONST:node=createMmlNode(symbol.tag,document.createTextNode(symbol.output));return[node,str,symbol.tag];case STRETCHY:node=createMmlNode(symbol.tag,document.createTextNode(symbol.output));if(symbol.input=="|"||symbol.input=="\\vert"||symbol.input=="\\|"||symbol.input=="\\Vert"){node.setAttribute("lspace","0em");node.setAttribute("rspace","0em")}node.setAttribute("maxsize",symbol.atval);if(symbol.rtag!==null){return[node,str,symbol.rtag]}else{return[node,str,symbol.tag]}break;case BIG:var atval=symbol.atval;symbol=getSymbol(str);if(symbol===null){return[null,str,null]}str=strim(str,symbol.input.length);node=createMmlNode(symbol.tag,document.createTextNode(symbol.output));node.setAttribute("minsize",atval);node.setAttribute("maxsize",atval);return[node,str,symbol.tag];case LEFTBRACKET:if(symbol.input=="\\left"){symbol=getSymbol(str);if(symbol!==null){if(symbol.input=="."){symbol.invisible=true}str=strim(str,symbol.input.length)}}result=parseExpr(str,true,false);if(symbol===null||(typeof symbol.invisible=="boolean"&&symbol.invisible)){node=createMmlNode("mrow",result[0])}else{node=createMmlNode("mo",document.createTextNode(symbol.output));node=createMmlNode("mrow",node);node.appendChild(result[0])}return[node,result[1],result[2]];case MATRIX:if(symbol.input=="\\begin{array}"){var mask="";symbol=getSymbol(str);str=$.trim(str);if(symbol===null){mask="l"}else{str=strim(str,symbol.input.length);if(symbol.input!="{"){mask="l"}else{do{symbol=getSymbol(str);if(symbol!==null){str=strim(str,symbol.input.length);if(symbol.input!="}"){mask=mask+symbol.input}}}while(symbol!==null&&symbol.input!==""&&symbol.input!="}")}}result=parseExpr("{"+str,true,true);node=createMmlNode("mtable",result[0]);mask=mask.replace(/l/g,"left ");mask=mask.replace(/r/g,"right ");mask=mask.replace(/c/g,"center ");node.setAttribute("columnalign",mask);node.setAttribute("displaystyle","false");return[node,result[1],null]}else{result=parseExpr("{"+str,true,true);node=createMmlNode("mtable",result[0]);node.setAttribute("columnalign","right center left");node.setAttribute("displaystyle","true");node=createMmlNode("mrow",node);return[node,result[1],null]}break;case TEXT:if(str.charAt(0)=="{"){i=str.indexOf("}")}else{i=0}if(i==-1){i=str.length}st=str.slice(1,i);node=createMmlNode(symbol.tag,document.createTextNode(st));newFrag.appendChild(node);str=strim(str,i+1);return[createMmlNode("mrow",newFrag),str,null];case UNARY:if(symbol.atname=="mathvariant"){mathVariant=symbol.atval}result=parseSexpr(str);if(result[0]===null){return[createMmlNode(symbol.tag,document.createTextNode(symbol.output)),str]}if(typeof symbol.func=="boolean"&&symbol.func){st=str.charAt(0);if(st=="^"||st=="_"||st==","){return[createMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag]}else{node=createMmlNode("mrow",createMmlNode(symbol.tag,document.createTextNode(symbol.output)));node.appendChild(result[0]);return[node,result[1],symbol.tag]}}if(symbol.input=="\\sqrt"){return[createMmlNode(symbol.tag,result[0]),result[1],symbol.tag]}else{if(typeof symbol.acc=="boolean"&&symbol.acc){node=createMmlNode(symbol.tag,result[0]);var output=symbol.output;var node1=createMmlNode("mo",document.createTextNode(output));if(symbol.input=="\\vec"||symbol.input=="\\check"){node1.setAttribute("maxsize","1.2")}if(symbol.input=="\\underbrace"||symbol.input=="\\underline"){node1.setAttribute("accentunder","true")}else{node1.setAttribute("accent","true")}node.appendChild(node1);if(symbol.input=="\\overbrace"||symbol.input=="\\underbrace"){node.ttype=UNDEROVER}return[node,result[1],symbol.tag]}else{if(typeof symbol.codes!="undefined"){for(i=0;i<result[0].childNodes.length;i++){if(result[0].childNodes[i].nodeName=="mi"||result[0].nodeName=="mi"){st=(result[0].nodeName=="mi"?result[0].firstChild.nodeValue:result[0].childNodes[i].firstChild.nodeValue);newst="";for(var j=0;j<st.length;j++){ch=st.charCodeAt(j);if(ch>64&&ch<91){newst=newst+symbol.codes[ch-65]}else{if(ch>96&&ch<123){newst=newst+symbol.codes[ch-71]}}}if(result[0].nodeName=="mi"){result[0]=createMmlNode("mo").appendChild(document.createTextNode(newst))}else{result[0].replaceChild(createMmlNode("mo").appendChild(document.createTextNode(newst)),result[0].childNodes[i])}}}}node=createMmlNode(symbol.tag,result[0]);node.setAttribute(symbol.atname,symbol.atval);if(symbol.input=="\\scriptstyle"||symbol.input=="\\scriptscriptstyle"){node.setAttribute("displaystyle","false")}return[node,result[1],symbol.tag]}}break;case BINARY:result=parseSexpr(str);if(result[0]===null){return[createMmlNode("mo",document.createTextNode(symbol.input)),str,null]}result2=parseSexpr(result[1]);if(result2[0]===null){return[createMmlNode("mo",document.createTextNode(symbol.input)),str,null]}if(symbol.input=="\\root"||symbol.input=="\\stackrel"){newFrag.appendChild(result2[0])}newFrag.appendChild(result[0]);if(symbol.input=="\\frac"||symbol.input=="\\bfrac"){newFrag.appendChild(result2[0])}node=createMmlNode(symbol.tag,newFrag);if(symbol.input=="\\bfrac"){node.setAttribute("bevelled","true")}return[node,result2[1],symbol.tag];case INFIX:str=strim(str,symbol.input.length);return[createMmlNode("mo",document.createTextNode(symbol.output)),str,symbol.tag];default:return[createMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag]}}function parseIexpr(str){var symbol,sym1,sym2,node,result,tag,underover;sym1=getSymbol(str);result=parseSexpr(str);node=result[0];str=result[1];tag=result[2];symbol=getSymbol(str);if(symbol.ttype==INFIX){str=strim(str,symbol.input.length);result=parseSexpr(str);if(result[0]===null){result[0]=createMmlNode("mo",document.createTextNode("\u25A1"))}str=result[1];tag=result[2];if(symbol.input=="_"||symbol.input=="^"){sym2=getSymbol(str);tag=null;underover=((sym1.ttype==UNDEROVER)||(node.ttype==UNDEROVER));if((symbol.input=="_"&&sym2.input=="^")||(symbol.input=="^"&&sym2.input=="_")){str=strim(str,sym2.input.length);var res2=parseSexpr(str);str=res2[1];tag=res2[2];node=createMmlNode((underover?"munderover":"msubsup"),node);if(symbol.input=="_"){node.appendChild(result[0]);node.appendChild(res2[0])}else{node.appendChild(res2[0]);node.appendChild(result[0])}}else{if(symbol.input=="_"){node=createMmlNode((underover?"munder":"msub"),node);node.appendChild(result[0])}else{node=createMmlNode((underover?"mover":"msup"),node);node.appendChild(result[0])}}node=createMmlNode("mrow",node)}else{node=createMmlNode(symbol.tag,node);if(symbol.input=="\\atop"||symbol.input=="\\choose"){node.setAttribute("linethickness","0ex")}node.appendChild(result[0]);if(symbol.input=="\\choose"){node=createMmlNode("mfenced",node)}}}return[node,str,tag]}function parseExpr(str,rightbracket,matrix){var symbol,node,result,i,tag,newFrag=document.createDocumentFragment();do{str=$.trim(str);result=parseIexpr(str);node=result[0];str=result[1];tag=result[2];symbol=getSymbol(str);if(node){if((tag=="mn"||tag=="mi")&&symbol!==null&&typeof symbol.func=="boolean"&&symbol.func){var space=createMmlNode("mspace");space.setAttribute("width","0.167em");node=createMmlNode("mrow",node);node.appendChild(space)}if(tag=="mstyle"){mathVariant="italic"}newFrag.appendChild(node)}}while((symbol.ttype!=RIGHTBRACKET)&&symbol!==null&&symbol.output!=="");tag=null;if(symbol.ttype==RIGHTBRACKET){if(symbol.input=="\\right"){str=strim(str,symbol.input.length);symbol=getSymbol(str);if(symbol!==null&&symbol.input=="."){symbol.invisible=true}if(symbol!==null){tag=symbol.rtag}}if(symbol!==null){str=strim(str,symbol.input.length)}var len=newFrag.childNodes.length;if(matrix&&len>0&&newFrag.childNodes[len-1].nodeName=="mrow"){var pos=[];var m=newFrag.childNodes.length;for(i=0;matrix&&i<m;i=i+2){pos[i]=[];node=newFrag.childNodes[i];for(var j=0;j<node.childNodes.length;j++){if(node.childNodes[j].firstChild&&node.childNodes[j].firstChild.nodeValue=="&"){pos[i][pos[i].length]=j}}}var row,frag,n,k,table=document.createDocumentFragment();for(i=0;i<m;i=i+2){row=document.createDocumentFragment();frag=document.createDocumentFragment();node=newFrag.firstChild;n=node.childNodes.length;k=0;for(j=0;j<n;j++){if(typeof pos[i][k]!="undefined"&&j==pos[i][k]){node.removeChild(node.firstChild);row.appendChild(createMmlNode("mtd",frag));k++}else{frag.appendChild(node.firstChild)}}row.appendChild(createMmlNode("mtd",frag));if(newFrag.childNodes.length>2){newFrag.removeChild(newFrag.firstChild);newFrag.removeChild(newFrag.firstChild)}table.appendChild(createMmlNode("mtr",row))}return[table,str]}if(typeof symbol.invisible!="boolean"||!symbol.invisible){node=createMmlNode("mo",document.createTextNode(symbol.output));newFrag.appendChild(node)}}return[newFrag,str,tag]}function createMmlNode(t,frag){var node=document.createElementNS("http://www.w3.org/1998/Math/MathML",t);if(frag){$(node).append(frag)}return node}var SVG,canvas;var collection=[];function createSVGElement(elType){return document.createElementNS("http://www.w3.org/2000/svg",elType)}function getSVGElement(id,el){var res={node:null,newEl:false};if(id){id=SVG.id+"_"+id;res.node=$("#"+id)[0]}if(!res.node){res.node=createSVGElement(el);if(id){res.node.id=id}res.newEl=true}return res}function openGroup(id,clear){var newEl=getSVGElement(id,"g");appendSVG(newEl);canvas=$("#"+SVG.id+"_"+id)[0];if(clear){$(canvas).empty()}}function closeGroup(){canvas=$("#"+SVG.id+"_Canvas")[0]}function appendSVG(elmt){if(elmt.newEl){$(canvas).append(elmt.node)}}function addButton(parent,text,title,func,id){var node=createElementXHTML("span");node.className="svgButton";node.title=title;node.onclick=func;if(id){node.id=id}$(node).append(text);$(node).css({paddingRight:"0.5em",paddingLeft:"0.5em",fontSize:"1em",fontFamily:"monospace",background:"blue",color:"yellow",cursor:"pointer"});$(node).mouseover(function(){$(this).css({background:"yellow",color:"blue"})});$(node).mouseout(function(){$(this).css({background:"blue",color:"yellow"})});$(parent).append(node);return parent}function pictureAttributes(){this.id=null;this.stroke="blue";this.strokewidth=1;this.strokeopacity=1;this.strokedasharray="none";this.fill="none";this.fillopacity=1;this.fixed=false;this.fontstyle="normal";this.fontfamily="serif";this.fontweight="normal";this.fontsize=12;this.fontstroke="none";this.fontstrokewidth=1;this.fontstrokeopacity=1;this.fontstrokedasharray="none";this.fontfill="black";this.fontfillopacity=1;this.sector=false;this.largearc=0;this.marker="o";this.orient="auto";this.size=8;this.units="userSpaceOnUse";this.markerstroke="blue";this.markerstrokewidth=1;this.markerstrokeopacity=1;this.markerstrokedasharray="none";this.markerfill="none";this.markerfillopacity=1;this.sweep=0;this.rx=0;this.ry=0;this.closed=false;this.curve="";this.direction=[1,0];this.ticklabels="";this.pos="";this.points=200;this.backgroundcolor="none";this.backgroundopacity=1}function pictureObject(){this.id=null;this.src="";this.width=320;this.height=null;this.factor=1;this.xmin=-5;this.xmax=5;this.ymin=null;this.ymax=null;this.xunitlength=null;this.yunitlength=null;this.origin=[0,0];this.mouse=[null,null];this.coords="cartesian";this.drag=null;this.pan=true;this.locked=false;this.attr=new pictureAttributes()}function drawPicture(){$(canvas).empty();$("#"+SVG.id+" .svgMarker").remove();SVG.attr=new pictureAttributes();try{this.code=function(){with(Math){eval(SVG.src)}}();this.code=null}catch(err){var errstr;if(typeof err=="object"){errstr=err.name+" "+err.message+" "+err.number+" "+err.description}else{errstr=err}alert(errstr+"\n"+SVG.src)}collection[SVG.id]=SVG}function setOptions(atr){for(var i in atr){SVG.attr[i]=atr[i]}}function getOptions(attr,options,prefix){var pref=prefix||"";if(typeof attr=="string"){return(options[pref+attr]==undefined?SVG.attr[pref+attr]:options[pref+attr])}else{var i,newAttr={},len=attr.length,item;for(i=0;i<len;i++){item=attr[i];newAttr[item]=options[pref+item]==undefined?SVG.attr[pref+item]:options[pref+item]}return newAttr}}function setAction(evt,fn,id){if(!$.isFunction(fn)){return}var node=id?$("#"+SVG.id+"_"+id):$("#"+SVG.id);$(node).bind(evt,fn)}function getAngle(p){p=p||[0,0];var res=Math.atan2(SVG.mouse[1]-p[1],SVG.mouse[0]-p[0]);res=(res<0)?res+2*Math.PI:res;return res}function getDistance(p){p=p||[0,0];return Math.sqrt(Math.pow(SVG.mouse[0]-p[0],2)+Math.pow(SVG.mouse[1]-p[1],2))}function updateButton(){var obj=$("#SVGtoolbar #SVGupdateButton");if(obj.text()=="Edit"){obj.text("Update");obj.attr("title","Update picture");$("#SVGsrc").val(SVG.src).css("display","block")}else{SVG.src=$("#SVGsrc").val();drawPicture()}}function closeEditor(){$("#SVGtoolbar").slideUp();$("#SVGsrc").val("");SVG.locked=false}function switchTo(evt){var name=evt.currentTarget.id;if(SVG.id==name||SVG.locked){return false}SVG=collection[name];canvas=$("#"+SVG.id+"_Canvas")[0];return false}function onWheel(evt){if(SVG.locked){return false}evt=evt||window.event;var factor=1;evt.preventDefault();evt.stopPropagation();if(evt.wheelDelta){factor=(evt.wheelDelta>0)?0.8:1.25}else{if(evt.detail){factor=(evt.detail<0)?0.8:1.25}}if(evt.altKey){resize(factor)}else{zoom(factor)}return false}function onClick(evt){if(SVG.locked){return false}if(evt.button===0){if(evt.shiftKey){$("#SVGtoolbar #SVGupdateButton").text("Update");$("#SVGsrc").val(SVG.src);$("#SVGtoolbar").css({top:evt.pageY,left:evt.pageX}).slideDown();SVG.locked=true;evt.stopImmediatePropagation()}else{if(SVG.pan){SVG.drag=[evt.clientX,evt.clientY];document.body.style.cursor="move"}}}return false}function onDrop(evt){if(SVG.drag==null){return false}document.body.style.cursor="default";var xlen=(SVG.drag[0]-evt.clientX)/SVG.xunitlength;var ylen=(-SVG.drag[1]+evt.clientY)/SVG.yunitlength;SVG.drag=null;if(xlen!=0||ylen!=0){setScales([SVG.xmin+xlen,SVG.xmax+xlen,SVG.ymin+ylen,SVG.ymax+ylen])}return false}function setScales(scales){if(scales){SVG.xmin=scales[0];SVG.xmax=scales[1];SVG.ymin=scales[2];SVG.ymax=scales[3]}SVG.xunitlength=SVG.width/(SVG.xmax-SVG.xmin);SVG.yunitlength=SVG.height/(SVG.ymax-SVG.ymin);SVG.origin=[-SVG.xmin*SVG.xunitlength,-SVG.ymin*SVG.yunitlength];drawPicture()}function getScales(scales){scales=scales||[];var res=[null,null,null,null,0];if(scales.length==0){res[0]=SVG.xmin;res[1]=SVG.xmax}if(scales.length>1){if(typeof scales[0]=="number"&&typeof scales[1]=="number"&&scales[1]>scales[0]){res[0]=scales[0];res[1]=scales[1];res[4]=4}else{res[0]=SVG.xmin;res[1]=SVG.xmax}}if(scales.length==4){if(typeof scales[2]=="number"&&typeof scales[3]=="number"&&scales[3]>scales[2]){res[2]=scales[2];res[3]=scales[3];res[4]+=8}}return res}function resize(factor){SVG.factor=(SVG.factor*factor).toFixed(3);SVG.width/=factor;SVG.height/=factor;var picture=$("#"+SVG.id);picture.attr("width",SVG.width);picture.attr("height",SVG.height);var parent=picture[0].parentNode;if(parent.nodeName=="DIV"){parent.style.width=SVG.width+"px";parent.style.height=SVG.height+"px"}var node=$("#"+SVG.id+"ClipPath")[0].firstChild;$(node).attr("d","M0,0 "+SVG.width+",0 "+SVG.width+","+SVG.height+" 0,"+SVG.height);setScales()}function zoom(factor,center){var px,py;if(center){px=(SVG.xmax+SVG.xmin)*0.5;py=(SVG.ymax+SVG.ymin)*0.5}else{px=SVG.mouse[0];py=SVG.mouse[1]}SVG.factor=(SVG.factor*factor).toFixed(3);var dx=(SVG.xmax-SVG.xmin)*factor;var dy=(SVG.ymax-SVG.ymin)*factor;var xmin=(1-factor)*px+factor*SVG.xmin;var ymin=(1-factor)*py+factor*SVG.ymin;setScales([xmin,xmin+dx,ymin,ymin+dy])}function updateCartesianCoord(){if(!SVG.locked){$("#"+SVG.id+"_Coords").text("("+SVG.mouse[0].toFixed(2)+", "+SVG.mouse[1].toFixed(2)+")")}return false}function updatePolarCoord(){if(!SVG.locked){$("#"+SVG.id+"_Coords").text("("+getDistance().toFixed(2)+", "+getAngle().toFixed(2)+")")}return false}function getPosition(evt){var a=[null,null];var off=$(evt.currentTarget.parentNode).offset();a[0]=(evt.pageX-off.left-SVG.origin[0])/SVG.xunitlength;a[1]=(SVG.height-SVG.origin[1]-evt.pageY+off.top)/SVG.yunitlength;return a}function updatePosition(evt){SVG.mouse=getPosition(evt);return false}function removeCoord(){$("#"+SVG.id+"_Coords").text("");return false}function tracker(pos,options){options=options||{};var coords=options.coords||SVG.coords;var func=(coords=="polar")?updatePolarCoord:updateCartesianCoord;options.id="Coords";options.fixed=true;text(pos,"",options);setAction("mousemove",func);setAction("mouseout",removeCoord)}function exportSVG(){var svg="<?xml version='1.0' encoding='UTF-8' standalone='no'?>\n";svg+=$("#"+SVG.id).parent().html();svg=svg.replace(/&nbsp;/g,"");svg=svg.replace(/><(?!\/)/g,">\n<");$("#SVGtoolbar #SVGupdateButton").text("Edit").attr("title","Edit script");$("#SVGsrc").val(svg).css("display","block")}function toSVG(p){var x=p[0]*SVG.xunitlength+SVG.origin[0];var y=SVG.height-p[1]*SVG.yunitlength-SVG.origin[1];return[x,y]}function toSVGPair(p){var q=toSVG(p);return q[0]+" "+q[1]}function setStrokeAndFill(node,options,prefix){var attributes=["stroke","strokewidth","strokedasharray","strokeopacity","fill","fillopacity"];var attr=getOptions(attributes,options,prefix);var elem=$(node);elem.attr("stroke",attr.stroke);elem.attr("stroke-width",attr.strokewidth/SVG.factor);elem.attr("stroke-dasharray",attr.strokedasharray);elem.attr("stroke-opacity",attr.strokeopacity);elem.attr("fill",attr.fill);elem.attr("fill-opacity",attr.fillopacity)}function button(p,q,txt,action,options){options=options||{};options.id=(options.id||Math.randomString(8));rect(p,q,options);setAction("click",action,options.id);options.fill=null;options.fillopacity=1;options.id+="_t";text([(p[0]+q[0])*0.5,(p[1]+q[1])*0.5],txt,options);setAction("click",action,options.id)}function setMarkers(obj,options){var markerChars="o*sSx+<>|";var attributes=["marker","size","units","orient","markerstroke","markerstrokewidth","markerstrokeopacity"];var attr=getOptions(attributes,options);var node,node2,i,id,pos=["marker-start","marker-mid","marker-end"];var lim=attr.marker.length;for(i=0;i<lim;i++){var type=attr.marker.charAt(i);if(type=="-"||markerChars.indexOf(type)<0){continue}id=(options.id||Math.randomString(8))+"Marker_"+markerChars.indexOf(type);node=$("#"+SVG.id+"_"+id);if(node.length===0){node=$(getSVGElement(id,"marker").node);node.attr("class","svgMarker");node.attr("viewBox","0 0 10 10");node.attr("refX",5);node.attr("refY",5);node.attr("orient",attr.orient);node.attr("markerUnits",attr.units);switch(type){case"*":case"o":node2=$(createSVGElement("circle"));node2.attr("cx",5);node2.attr("cy",5);node2.attr("r",4);break;case">":node2=$(createSVGElement("path"));node2.attr("d","M0 0 L10 5 L0 10 z");node.attr("refX",10);break;case"<":node2=$(createSVGElement("path"));node2.attr("d","M10 0 L10 10 L0 5 z");node.attr("refX",0);break;case"x":node2=$(createSVGElement("path"));node2.attr("d","M0 0 L10 10 M0 10 L10 0");break;case"+":node2=$(createSVGElement("path"));node2.attr("d","M5 0 L5 10 M0 5 L10 5");break;case"|":node2=$(createSVGElement("path"));node2.attr("d","M5 0 L5 10");break;case"S":case"s":node2=$(createSVGElement("rect"));node2.attr("x",0);node2.attr("y",0);node2.attr("width",10);node2.attr("height",10)}setStrokeAndFill(node2,options,"marker");node2.attr("stroke-width",attr.markerstrokewidth);if("*<>S".indexOf(type)>-1){node2.attr("fill",attr.markerstroke);node2.attr("fill-opacity",attr.markerstrokeopacity)}node.append(node2);$("#"+SVG.id+"_Defs").append(node)}node.attr("markerWidth",attr.size/SVG.factor);node.attr("markerHeight",attr.size/SVG.factor);$(obj).attr(pos[i],"url(#"+SVG.id+"_"+id+")")}}function setLabels(p,options){var i,point=[0,0],pos;var label=(typeof options.label=="string")?[options.label]:options.label;var labelpos=getOptions("pos",options);labelpos=(typeof labelpos=="string")?[labelpos]:labelpos;var poslen=labelpos.length;var size=options.size||SVG.attr.size;var dx=(0.5*size/SVG.xunitlength)/SVG.factor;var dy=(0.5*size/SVG.yunitlength)/SVG.factor;for(i=0;i<label.length;i++){options.isLabel="_label"+i;point[0]=p[i][0];point[1]=p[i][1];pos=(poslen>i)?labelpos[i].toUpperCase():pos;if(/E/.test(pos)){point[0]+=dx}if(/W/.test(pos)){point[0]-=dx}if(/N/.test(pos)){point[1]+=dy}if(/S/.test(pos)){point[1]-=dy}options.pos=pos;text(point,label[i],options)}}function line(p,q,options){options=options||{};options.closed=false;options.curve="";path([p,q],options)}function dot(p,options){options=options||{};var direction=getOptions("direction",options);var q=[p[0]+direction[0]/SVG.xunitlength,p[1]+direction[1]/SVG.yunitlength];var st="M"+toSVGPair(p)+" "+toSVGPair(q);var elmt=getSVGElement(options.id,"path");var elem=$(elmt.node);elem.attr("d",st);elem.attr("stroke","none");setMarkers(elem,options);appendSVG(elmt);if(options.label){setLabels([p],options)}}function path(list,options,append){options=options||{};var i,elmt=getSVGElement(options.id,"path");var attr=getOptions(["curve","closed"],options);var len=list.length;if(len>0){var node=$(elmt.node);var st=(append&&!elmt.newEl)?elmt.node.getAttribute("d"):"";st+="M"+toSVGPair(list[0])+" "+attr.curve;for(i=1;i<len;i++){st+=toSVGPair(list[i])+" "}if(attr.closed){st+="Z"}node.attr("d",st);setStrokeAndFill(node,options);if(options.marker){setMarkers(node,options)}appendSVG(elmt);if(options.label){setLabels(list,options)}}}function rotate(id,angle,options){if(!id||!angle){return}var node=$("#"+SVG.id+"_"+id)[0];if(node){options=options||{};var center=options.center?toSVG(options.center):SVG.origin;angle=-angle*180/Math.PI;var transform=node.getAttribute("transform")||"";transform="rotate("+angle+" "+center+") "+(options.replace?"":transform);$(node).attr("transform",transform)}}function translate(id,delta,options){if(!id||!delta){return}var node=$("#"+SVG.id+"_"+id)[0];if(node){options=options||{};delta=toSVG(delta);var transform=node.getAttribute("transform")||"";transform="translate("+(delta[0]-SVG.origin[0])+"  "+(SVG.origin[1]+delta[1]-SVG.height)+") "+(options.replace?"":transform);$(node).attr("transform",transform)}}function curve(list,options){options=options||{};options.curve=options.curve||"T";path(list,options)}function circle(center,radius,options){ellipse(center,radius,radius,options)}function loop(p,options){options=options||{};var d=options.direction||[1,0];options.curve="C";options.closed=false;path([p,[p[0]+d[0],p[1]+d[1]],[p[0]-d[1],p[1]+d[0]],p],options)}function arc(options){options=options||{};var start=options.start;var end=options.end;var center=options.center;var startangle=options.startangle;var endangle=options.endangle;var st="M",elmt=getSVGElement(options.id,"path");var attr=getOptions(["largearc","sweep","closed","sector"],options);var radius=options.radius;if(center!=null&&startangle!=null&&endangle!=null&&radius!=null){start=[radius*Math.cos(startangle)+center[0],radius*Math.sin(startangle)+center[1]];end=[radius*Math.cos(endangle)+center[0],radius*Math.sin(endangle)+center[1]]}if(start==null||end==null){return}if(!radius){var v=[end[0]-start[0],end[1]-start[1]];radius=Math.sqrt(v[0]*v[0]+v[1]*v[1])}if(attr.sector){st+=toSVGPair(center)+" "}st+=toSVGPair(start)+" A"+radius*SVG.xunitlength+","+radius*SVG.yunitlength+" 0 "+attr.largearc+","+attr.sweep+" "+toSVGPair(end);if(attr.sector||attr.closed){st+=" z"}var node=$(elmt.node);node.attr("d",st);setStrokeAndFill(node,options);if(options.marker){setMarkers(node,options)}appendSVG(elmt);if(options.label){setLabels([start,end],options)}}function sector(options){if(!options.center||!options.startangle||!options.endangle||!options.radius){return}options.sector=true;arc(options)}function ellipse(center,rx,ry,options){options=options||{};var elmt=getSVGElement(options.id,"ellipse");center=toSVG(center);var node=$(elmt.node);node.attr("cx",center[0]);node.attr("cy",center[1]);node.attr("rx",rx*SVG.xunitlength);node.attr("ry",ry*SVG.yunitlength);setStrokeAndFill(node,options);appendSVG(elmt)}function polygon(list,options){options=options||{};options.closed=true;path(list,options)}function rect(p,q,options){options=options||{};var elmt=getSVGElement(options.id,"rect");var attr=getOptions(["rx","ry"],options);var node=$(elmt.node);node.attr("x",toSVG(p)[0]);node.attr("y",toSVG(q)[1]);node.attr("width",(q[0]-p[0])*SVG.xunitlength);node.attr("height",(q[1]-p[1])*SVG.yunitlength);node.attr("rx",attr.rx*SVG.xunitlength);node.attr("ry",attr.ry*SVG.yunitlength);setStrokeAndFill(node,options);appendSVG(elmt)}function text(p,st,options){options=options||{};var id=options.id;var attr=getOptions(["fontstyle","fontfamily","fontweight","fontfill","fontsize","fixed","pos"],options);if(id&&options.isLabel){id+=options.isLabel}var pos=attr.pos.toUpperCase();if(!attr.fixed){attr.fontsize/=SVG.factor}var elem,node,dx,dy,latex=false,str=$.trim(st.toString()),q=toSVG(p);if(str.charAt(0)=="$"){str=str.substr(1,str.length-2);latex=true}if(latex){if(p[0]>SVG.xmax||p[0]<SVG.xmin||p[1]>SVG.ymax||p[1]<SVG.ymin){return}node=createElementXHTML("div");node.style.position="absolute";node.style.left="-1000px";node.style.top="-1000px";$("body").append(node);var math=MSVG.parseMath(str,true,attr.fontsize+"px",attr.fontfill);var mathNode=$(node);mathNode.append($(math).clone());dx=-node.offsetWidth/2;dy=-node.offsetHeight/2;if(/N/.test(pos)){dy=-node.offsetHeight}if(/S/.test(pos)){dy=0}if(/E/.test(pos)){dx=0}if(/W/.test(pos)){dx=-node.offsetWidth}var width=mathNode.width(),height=mathNode.height();mathNode.remove();q[0]+=dx;q[1]+=dy;var elmt=getSVGElement(id,"foreignObject");elem=$(elmt.node);elem.empty().append(math);elem.attr("width",width);elem.attr("height",height)}else{var baseline="middle",textanchor="middle";if(/E/.test(pos)){textanchor="start"}if(/W/.test(pos)){textanchor="end"}if(/N/.test(pos)){baseline="text-after-edge"}if(/S/.test(pos)){baseline="text-before-edge"}var elmt=getSVGElement(id,"text");elem=$(elmt.node);elem.empty().text(str);elem.attr("font-style",attr.fontstyle);elem.attr("font-family",attr.fontfamily);elem.attr("font-weight",attr.fontweight);elem.attr("font-size",attr.fontsize);elem.attr("text-anchor",textanchor);elem.attr("dominant-baseline",baseline);setStrokeAndFill(elem,options,"font")}elem.attr("x",q[0]);elem.attr("y",q[1]);appendSVG(elmt)}function image(url,options){options=options||{};var elmt=getSVGElement(options.id,"image");var elem=$(elmt.node);var height=options.height?options.height/SVG.factor:SVG.height;var width=options.width?options.width/SVG.factor:SVG.width;var origin=toSVG(options.origin||[SVG.xmin,SVG.ymin]);var pos=(options.pos||"").toUpperCase();var x=origin[0]-width*0.5;var y=origin[1]-height*0.5;if(/N/.test(pos)){y-=height*0.5}if(/S/.test(pos)){y+=height*0.5}if(/E/.test(pos)){x+=width*0.5}if(/W/.test(pos)){x-=width*0.5}elem.attr("x",x);elem.attr("y",y);elem.attr("width",width);elem.attr("height",height);elem.attr("preserveAspectRatio","none");elmt.node.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",url);appendSVG(elmt)}function grid(options){options=options||{};var dx,dy,x,y,k;var orig=options.origin||[0,0];var id=options.id||"Grid";options.stroke=options.stroke||"grey";options.strokewidth=(options.strokewidth||SVG.attr.strokewidth*0.5);var coords=options.coords||SVG.coords;var lim=getScales(options.scales);openGroup(id,true);lim[2]=(typeof lim[2]=="number")?lim[2]:SVG.ymin;lim[3]=(typeof lim[3]=="number")?lim[3]:SVG.ymax;if(coords=="polar"){dx=options.dx||1;dy=options.dy||3;var limit=Math.max(Math.abs(lim[0]),Math.abs(lim[1]),Math.abs(lim[2]),Math.abs(lim[3]));for(x=dx;x<limit;x+=dx){circle(orig,x,options)}if(dy>1){for(y=1;y<dy;y++){k=Math.tan(y*Math.PI/(2*dy));line([lim[0],(lim[0]-orig[0])*k+orig[1]],[SVG.xmax,(lim[1]-orig[0])*k+orig[1]],options);line([lim[0],-(lim[0]-orig[0])*k+orig[1]],[SVG.xmax,-(lim[1]-orig[0])*k+orig[1]],options)}}}else{dx=options.dx||1;dy=options.dy||dx;for(x=orig[0];x<SVG.xmax;x+=dx){if(x>lim[0]&&x<lim[1]){line([x,lim[2]],[x,lim[3]],options)}}for(x=orig[0]-dx;x>SVG.xmin;x-=dx){if(x>lim[0]&&x<lim[1]){line([x,lim[2]],[x,lim[3]],options)}}for(y=orig[1];y<SVG.ymax;y+=dy){if(y>lim[2]&&y<lim[3]){line([lim[0],y],[lim[1],y],options)}}for(y=orig[1]-dy;y>SVG.ymin;y-=dy){if(y>lim[2]&&y<lim[3]){line([lim[0],y],[lim[1],y],options)}}}closeGroup()}function axes(options){options=options||{};options.marker="-|"+(options.marker?options.marker.charAt(0):"-");var i,x,y,start,stop,label;var dx=options.dx||1;var dy=options.dy||dx;var id=options.id||"Axes";var fontsize=getOptions("fontsize",options);var coords=options.coords||SVG.coords;var orig=(coords=="polar")?[0,0]:(options.origin||[0,0]);var ddx=options.decx||Math.max(0,-Math.floor(Math.log(dx)/Math.log(10)));var ddy=options.decy||Math.max(0,-Math.floor(Math.log(dy)/Math.log(10)));options.stroke=options.stroke||"black";options.strokewidth=(options.strokewidth||SVG.attr.strokewidth*0.5);options.markerstroke=options.stroke;options.markerstrokewidth=options.strokewidth;openGroup(id,true);var lim=getScales(options.scales);lim[2]=lim[2]||SVG.ymin;lim[3]=lim[3]||SVG.ymax;if($.isArray(options.xticks)){var xticks=options.xticks.sort();var list2=[[lim[0],orig[1]]];label=[""];for(i=0;i<xticks.length;i++){list2.push([xticks[i],orig[1]]);label.push(String(xticks[i].toFixed(ddx)))}list2.push([lim[1],orig[1]]);label.push("")}else{var list1=[],label1=[];var list2=[],label2=[];start=SVG.xmin+0.25*dx;stop=SVG.xmax-0.25*dx;i=1;var cand,leftExit=0,rightExit=0;while(leftExit*rightExit==0){cand=orig[0]+i*dx;if(cand>start){if(cand<stop){list1.push([cand,orig[1]]);label1.push(String(cand.toFixed(ddx)))}else{rightExit=1}}cand=orig[0]-i*dx;if(cand<stop){if(cand>start){list2.push([cand,orig[1]]);label=(coords=="polar")?"":cand.toFixed(ddx);label2.push(String(label))}else{leftExit=1}}i++}list1.push([lim[1],orig[1]]);label1.push("");list2.push([lim[0],orig[1]]);label2.push("");list2.reverse();list2=list2.concat(list1);label2.reverse();label=label2.concat(label1)}if(options.ticklabels!=false){options.label=label;options.pos="S"}path(list2,options);if($.isArray(options.yticks)){var yticks=options.yticks.sort();var list2=[[orig[0],lim[2]]];label=[""];for(i=0;i<yticks.length;i++){list2.push([orig[0],yticks[i]]);label.push(String(yticks[i].toFixed(ddy)))}list2.push([orig[0],lim[3]]);label.push("")}else{list1=[],label1=[];list2=[];label2=[];start=SVG.ymin+0.25*dy;stop=SVG.ymax-0.25*dy;i=1;leftExit=0;rightExit=0;while(leftExit*rightExit==0){cand=orig[1]+i*dy;if(cand>start){if(cand<stop){list1.push([orig[0],cand]);label1.push(String(cand.toFixed(ddy)))}else{rightExit=1}}cand=orig[1]-i*dy;if(cand<stop){if(cand>start){list2.push([orig[0],cand]);label=(coords=="polar")?"":cand.toFixed(ddy);label2.push(String(label))}else{leftExit=1}}i++}list1.push([orig[0],lim[3]]);label1.push("");list2.push([orig[0],lim[2]]);label2.push("");list2.reverse();list2=list2.concat(list1);label2.reverse();label=label2.concat(label1)}if(options.ticklabels!=false){options.label=label;options.pos="W"}options.stroke=options.markerstroke;path(list2,options);closeGroup()}function list(fun,tmin,tmax,options){var inc=(tmax-tmin)/getOptions("points",options);if(inc<=0||fun.length==0){return}var t,pth,g=[],xt,yt;for(t=1;t>=0;t--){if($.isFunction(fun[t])){g[t]=fun[t]}else{if(typeof fun[t]=="string"){with(Math){eval("g["+t+"] = function(x){return "+fun[t]+"}")}}else{return}}}if(g.length<2){return}pth=[];for(t=tmin;t<=tmax;t+=inc){xt=g[0](t);yt=g[1](t);if(isFinite(xt)&&isFinite(yt)){pth[pth.length]=[xt,yt]}}return pth}function plot(fun,options){options=options||{};var append,pth,steps=options.steps||[];var n_steps=steps.length;options.closed=false;options.curve="";var xmin=(options.min==null)?SVG.xmin:Math.max(SVG.xmin,options.min);var xmax=(options.max==null)?SVG.xmax:Math.min(SVG.xmax,options.max);if(n_steps===0){pth=list(["x",fun],xmin,xmax,options);if(pth){path(pth,options)}}else{options.id=options.id||Math.randomString(6);steps.sort();var steps_a=[];steps_a.push(xmin);for(i=0;i<n_steps;i++){if(steps[i]>xmin&&steps[i]<xmax){steps_a.push(steps[i])}}steps_a.push(xmax);n_steps=steps_a.length-1;for(i=0;i<n_steps;i++){xmax=steps_a[i+1];xmin=steps_a[i];pth=list(["x",fun],xmin,xmax,options);append=(i>0);if(pth){path(pth,options,append)}}}}function area(fun1,fun2,options){options=options||{};options.curve="";options.closed=true;var xmin=(options.min==null)?SVG.xmin:options.min;var xmax=(options.max==null)?SVG.xmax:options.max;var pth1=list(["x",fun1],xmin,xmax,options);var pth2=list(["x",fun2],xmin,xmax,options);if(pth1&&pth2){pth1=pth1.concat(pth2.reverse());path(pth1,options)}}function polarPlot(fun,options){var g1,g2;if(typeof fun=="string"){with(Math){eval("g1 = function(x){return ("+fun+")*cos(x)}");eval("g2 = function(x){return ("+fun+")*sin(x)}")}}else{if($.isFunction(fun)){with(Math){eval("g1 = function(x){return fun(x)*cos(x)}");eval("g2 = function(x){return fun(x)*sin(x)}")}}}parametricPlot(g1,g2,options)}function parametricPlot(fun1,fun2,options){options=options||{};options.closed=false;options.curve="";var xmin=(options.min==null)?0:options.min;var xmax=(options.max==null)?2*Math.PI:options.max;var pth=list([fun1,fun2],xmin,xmax,options);if(pth){path(pth,options)}}function slopeField(fun,options){options=options||{};var g=fun;if(typeof fun=="string"){with(Math){eval("g = function(x,y){return "+fun+"}")}}var gxy,x,y,u,v,dz;var dx=(options.dx==null)?1:options.dx;var dy=(options.dy==null)?1:options.dy;dz=Math.sqrt(dx*dx+dy*dy)/6;var xmin=Math.ceil(SVG.xmin/dx);var ymin=Math.ceil(SVG.ymin/dy);for(x=xmin;x<=SVG.xmax;x+=dx){for(y=ymin;y<=SVG.ymax;y+=dy){gxy=g(x,y);if(!isNaN(gxy)){if(Math.abs(gxy)=="Infinity"){u=0;v=dz}else{u=dz/Math.sqrt(1+gxy*gxy);v=gxy*u}line([x-u,y-v],[x+u,y+v],options)}}}}return{showFormulaOnMouseOver:false,latexImages:false,latexConverter:"http://chart.apis.google.com/chart?cht=tx&chs=1x0&chf=bg,s,FFFFFF00&chco=000000&chl=",mathColor:"",mathFontSize:"",mathFontFamily:"",define:function(oldstr,newstr){if(MSVG.latexImages){return}if((typeof oldstr)=="string"){oldstr=[oldstr];newstr=[newstr]}var i,len=oldstr.length;if(len!=newstr.length){return}for(i=0;i<len;i++){symbols=symbols.concat([{input:"\\"+oldstr[i],tag:"mo",output:newstr[i],ttype:DEFINITION}])}refreshSymbols()},parseMath:function(str,displaystyle,size,color){if(str===null){return null}str=str.replace(/_([^\{])/gm,"_{$1}");str=str.replace(/\^([^\{])/gm,"^{$1}");var frag=parseExpr(str.replace(/^\s+/g,""),false,false)[0];var node=createMmlNode("mstyle",frag);$(node).attr({displaystyle:displaystyle,mathcolor:color||MSVG.mathColor,mathsize:size||MSVG.mathFontSize,fontfamily:MSVG.mathFontFamily});node=createMmlNode("math",node);if(MSVG.showFormulaOnMouseOver){$(node).attr({title:str.replace(/\s+/g," ")})}return node},parseMathExternal:function(str,displaystyle,size,color){if(str===null){return null}var node=createElementXHTML("img");var snip=MSVG.latexConverter+str;$(node).attr({src:snip});if(MSVG.showFormulaOnMouseOver){$(node).attr({title:str.replace(/\s+/g," ")})}return node},generic:function(){if(!$.browser.mozilla){MSVG.latexImages=true}if(MSVG.latexImages){MSVG.parseMath=MSVG.parseMathExternal}else{refreshSymbols()}if(!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")){MSVG.initPictures=MSVG.removePictures}},removePictures:function(obj){var pictures=obj?$(obj):$(".SVGgraph");$(pictures).each(function(){var that=$(this);this.id=null;that.empty();that.css({color:"red",background:"yellow"});that.text("Missing picture: your  browser does not support inline SVG");window.setTimeout(function(){that.remove()},10000)})},initPictures:function(obj){var options,scales,qnode,node,node2,status,elem;var pictures=obj?$(obj):$(".SVGgraph");$(pictures).each(function(){var that=$(this);status=0;SVG=new pictureObject();options=$(this).attr("options");that.removeAttr("id");if(options){with(Math){eval("options={"+options+"}")}setOptions(options)}else{options={}}if(options.pan==false){SVG.pan=false}SVG.coords=options.coords||SVG.coords;SVG.src=$.trim($(this).text());that.empty();if(typeof options.width=="number"&&options.width>0){SVG.width=options.width;status+=1}if(typeof options.height=="number"&&options.height>0){SVG.height=options.height;status+=2}var scales=getScales(options.scales);SVG.xmin=scales[0];SVG.xmax=scales[1];SVG.ymin=scales[2];SVG.ymax=scales[3];status+=scales[4];SVG.height=options.height;if(status%4!=0){SVG.width=options.width}if(!SVG.width){SVG.width=1.6*SVG.height}else{if(!SVG.height){SVG.height=0.625*SVG.width}}if(status<8){SVG.ymax=0.5*SVG.height*(SVG.xmax-SVG.xmin)/SVG.width;SVG.ymin=-SVG.ymax}else{if(status<12){SVG.xmax=0.5*SVG.width*(SVG.ymax-SVG.ymin)/SVG.height;SVG.xmin=-SVG.xmax}}if(status==12||status==13){SVG.height=SVG.width*(SVG.ymax-SVG.ymin)/(SVG.xmax-SVG.xmin)}else{if(status==14){SVG.width=SVG.height*(SVG.xmax-SVG.xmin)/(SVG.ymax-SVG.ymin)}}SVG.id=options.id||Math.randomString(16);qnode=createSVGElement("svg");elem=$(qnode);qnode.id=SVG.id;elem.attr("xmlns","http://www.w3.org/2000/svg");elem.attr("xmlns:ev","http://www.w3.org/2001/xml-events");elem.attr("xmlns:xlink","http://www.w3.org/1999/xlink");elem.attr("version","1.1");elem.attr("baseProfile","full");if(options.border){elem.attr("style","border:"+options.border)}node=createSVGElement("clipPath");node.id=SVG.id+"ClipPath";node2=createSVGElement("path");$(node).append(node2);elem.attr("clip-path","url(#"+SVG.id+"ClipPath)");node2=createSVGElement("defs");node2.id=SVG.id+"_Defs";$(node2).append(node);$(qnode).append(node2);node2=createSVGElement("g");node2.id=SVG.id+"_Canvas";$(qnode).append(node2);that.append(qnode);this.style.position="relative";if(!(this.nodeName=="SPAN")){setAction("mousemove",updatePosition);if(SVG.pan){setAction("mouseup",onDrop)}if(window.addEventListener){var evt=$.browser.mozilla?"DOMMouseScroll":"mousewheel";qnode.addEventListener(evt,onWheel,false)}}setAction("mousedown",onClick);setAction("mouseover",switchTo);canvas=$("#"+SVG.id+"_Canvas")[0];resize(1)});if(pictures.length>0&&$("#SVGtoolbar").length===0){node=createElementXHTML("span");node.id="SVGtoolbar";node.style.position="absolute";node.style.textAlign="left";node.style.zIndex=10;node=addButton(node,"X","Close editor",closeEditor);node=addButton(node,"Update","Update picture",updateButton,"SVGupdateButton");node=addButton(node,"SVG","View SVG code",exportSVG);node=addButton(node,"-","Zoom out",function(){zoom(1.25,true)});node=addButton(node,"+","Zoom in",function(){zoom(0.8,true)});node=addButton(node,"\u2191","Enlarge picture",function(){resize(0.8)});node=addButton(node,"\u2193","Reduce picture",function(){resize(1.25)});$(node).append("<br />");node2=createElementXHTML("textarea");$(node2).attr({id:"SVGsrc",rows:8,cols:60});$(node).append(node2);$(node).hide();$("body").append(node)}}}}(jQuery);
//}}}
/***
!~TiddlyWiki formatters
***/
//{{{
if(!version.extensions.MathSVGPlugin) { //# ensure that the plugin is only installed once
version.extensions.MathSVGPlugin = {installed: true};
MSVG.generic();

config.formatterHelpers.MathSVGHelper = function(z) {
  if(z.tiddler && MSVG.noMathTag && jQuery.inArray(MSVG.noMathTag,z.tiddler.tags)>-1) return;
  this.lookaheadRegExp.lastIndex = z.matchStart;
  var lookaheadMatch = this.lookaheadRegExp.exec(z.source);
  if(lookaheadMatch){
    var eq = MSVG.parseMath(lookaheadMatch[1],this.displaystyle);
    if(this.displaystyle){
      var node = createTiddlyElement(z.output,"div");
      node.style.textAlign='center';
      node.appendChild(eq);
      z.output.appendChild(node);
    } else {z.output.appendChild(eq);}
    z.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
  }
}

config.formatters.push( {
  name: "clatex",
  match: "\\$\\$",
  lookaheadRegExp: /\$\$((?:.|\n)*?)\$\$/mg,
  displaystyle: true,
  handler: config.formatterHelpers.MathSVGHelper
})

config.formatters.push( {
  name: "clatex2",
  match: "\\\\\\\[",
  lookaheadRegExp: /\\\[((?:.|\n)*?)\\\]/mg,
  displaystyle: true,
  handler: config.formatterHelpers.MathSVGHelper
})

config.formatters.push( {
  name: "latex",
  match: "\\$",
  lookaheadRegExp: /\$((?:.|\n)*?)\$/mg,
  displaystyle: false,
  handler: config.formatterHelpers.MathSVGHelper
})

config.formatters.push( {
  name: "latex2",
  match: "\\\\\\\(",
  lookaheadRegExp: /\\\(((?:.|\n)*?)\\\)/mg,
  displaystyle: false,
  handler: config.formatterHelpers.MathSVGHelper
})

config.formatters.push( {
  name: "graph",
  match: "<div",
  lookaheadRegExp: /<div.+SVGgraph.+?>((?:.|\n)*?)<\/div>/mg,
  handler: function(z){
    if(z.tiddler && MSVG.noSvgTag && jQuery.inArray(MSVG.noSvgTag,z.tiddler.tags)>-1) return;
    this.lookaheadRegExp.lastIndex = z.matchStart;
    var lookaheadMatch = this.lookaheadRegExp.exec(z.source);
    if(lookaheadMatch){
      var text = lookaheadMatch[0].replace('<div','<div id="currentGraph"');
      jQuery(z.output).append(text);
      MSVG.initPictures("#currentGraph");
      z.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
    }
  }
})

config.formatters.push( {
  name: "inlineGraph",
  match: "<span",
  lookaheadRegExp: /<span.+SVGgraph.+?>((?:.|\n)*?)<\/span>/mg,
  handler: function(z){
    if(z.tiddler && MSVG.noSvgTag && jQuery.inArray(MSVG.noSvgTag,z.tiddler.tags)>-1) return;
    this.lookaheadRegExp.lastIndex = z.matchStart;
    var lookaheadMatch = this.lookaheadRegExp.exec(z.source);
    if(lookaheadMatch){
      var text = lookaheadMatch[0].replace('<span','<span id="currentGraph"');
      jQuery(z.output).append(text);
      MSVG.initPictures("#currentGraph");
      z.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
    }
  }
})

}
//}}}
Name: MptwBlack
Background: #000
Foreground: #fff
PrimaryPale: #333
PrimaryLight: #555
PrimaryMid: #888
PrimaryDark: #aaa
SecondaryPale: #111
SecondaryLight: #222
SecondaryMid: #555
SecondaryDark: #888
TertiaryPale: #222
TertiaryLight: #666
TertiaryMid: #888
TertiaryDark: #aaa
Error: #300

Name: MptwBlue
Background: #fff
Foreground: #000
PrimaryPale: #cdf
PrimaryLight: #57c
PrimaryMid: #114
PrimaryDark: #012
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

//{{{
// Pretty sure this is incomplete and experimental
// TODO: Fix it or remove it.

(function($){

merge(config.macros,{
  mptwCollapse: {
    handler: function(place,macroName,params) {
      createTiddlyButton(place, params[0] == '+' ? '\u25AD' : '\u25AC', 'collapse/uncollapse', function(){
        $(story.findContainingTiddler(place)).toggleClass('collapsed');
      });
    }
  }
});

/* this doesn't work unless you have a modified ViewTempate */
config.shadowTiddlers["MptwCollapsePluginStyles"] = ""
  +".collapsed .uncollapsedView { display:none;       }"
  +".collapsedView              { display:none;       }"
  +".collapsed .collapsedView   { display:block;      }"
  +".tiddler.collapsed          { padding-bottom:1em; }"
  +".tiddler.collapsed .title   { font-size:100%;     }"
;

store.addNotification("MptwCollapsePluginStyles",refreshStyles);

})(jQuery);

//}}}
/***
|Name:|MptwConfigPlugin|
|Description:|Miscellaneous tweaks used by MPTW|
|Version:|1.0a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#MptwConfigPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#MptwConfigPlugin|
!!Note: instead of editing this you should put overrides in MptwUserConfigPlugin
***/
//{{{
var originalReadOnly = readOnly;
var originalShowBackstage = showBackstage;

config.options.chkHttpReadOnly = false;  // means web visitors can experiment with your site by clicking edit
readOnly = false;                        // needed because the above doesn't work any more post 2.1 (??)
showBackstage = true;                    // show backstage for same reason

config.options.chkInsertTabs = true;     // tab inserts a tab when editing a tiddler
config.views.wikified.defaultText = "";  // don't need message when a tiddler doesn't exist
config.views.editor.defaultText = "";    // don't need message when creating a new tiddler

config.options.chkSaveBackups = true;         // do save backups
config.options.txtBackupFolder = 'twbackup';  // put backups in a backups folder

config.options.chkAutoSave = (window.location.protocol == "file:"); // do autosave if we're in local file

config.mptwVersion = "2.7.4";

config.macros.mptwVersion={handler:function(place){wikify(config.mptwVersion,place);}};

if (config.options.txtTheme == '')
  config.options.txtTheme = 'MptwTheme';

// add to default GettingStarted
config.shadowTiddlers.GettingStarted += "\n\nSee also [[MPTW]].";

// add select theme and palette controls in default OptionsPanel
config.shadowTiddlers.OptionsPanel = config.shadowTiddlers.OptionsPanel.replace(/(\n\-\-\-\-\nAlso see \[\[AdvancedOptions\]\])/, "{{select{<<selectTheme>>\n<<selectPalette>>}}}$1");

// these are used by ViewTemplate
config.mptwDateFormat = 'DD/MM/YY';
config.mptwJournalFormat = 'Journal DD/MM/YY';

//}}}
Name: MptwGreen
Background: #fff
Foreground: #000
PrimaryPale: #9b9
PrimaryLight: #385
PrimaryMid: #031
PrimaryDark: #020
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

Name: MptwRed
Background: #fff
Foreground: #000
PrimaryPale: #eaa
PrimaryLight: #c55
PrimaryMid: #711
PrimaryDark: #500
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

|Name|MptwRounded|
|Description|Mptw Theme with some rounded corners (Firefox only)|
|ViewTemplate|MptwTheme##ViewTemplate|
|EditTemplate|MptwTheme##EditTemplate|
|PageTemplate|MptwTheme##PageTemplate|
|StyleSheet|##StyleSheet|

!StyleSheet
/*{{{*/

[[MptwTheme##StyleSheet]]

.tiddler,
.sliderPanel,
.button,
.tiddlyLink,
.tabContents
{ -moz-border-radius: 1em; }

.tab {
	-moz-border-radius-topleft: 0.5em;
	-moz-border-radius-topright: 0.5em;
}
#topMenu {
	-moz-border-radius-bottomleft: 2em;
	-moz-border-radius-bottomright: 2em;
}

/*}}}*/

Name: MptwSmoke
Background: #fff
Foreground: #000
PrimaryPale: #aaa
PrimaryLight: #777
PrimaryMid: #111
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

|Name|MptwStandardTheme|
|Description|Mptw Theme including custom PageLayout|
|PageTemplate|##PageTemplate|
|ViewTemplate|##ViewTemplate|
|EditTemplate|##EditTemplate|
|StyleSheet|##StyleSheet|

http://mptw.tiddlyspot.com/#MptwTheme ($Rev: 1829 $)

!PageTemplate
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
	<div class='headerShadow'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	</div>
	<div class='headerForeground'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	</div>
</div>
<!-- horizontal MainMenu -->
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
<!-- original MainMenu menu -->
<!-- <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> -->
<div id='sidebar'>
	<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
	<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->

!ViewTemplate
<!--{{{-->
<div class="uncollapsedView">
[[MptwTheme##ViewTemplateToolbar]]

<div class="tagglyTagged" macro="tags"></div>

<div class='titleContainer'>
	<span class='title' macro='view title'></span>
	<span macro="miniTag"></span>
</div>

<div class='subtitle'>
	(updated <span macro='view modified date {{config.mptwDateFormat?config.mptwDateFormat:"MM/0DD/YY"}}'></span>
	by <span macro='view modifier link'></span>)
	<!--
	(<span macro='message views.wikified.createdPrompt'></span>
	<span macro='view created date {{config.mptwDateFormat?config.mptwDateFormat:"MM/0DD/YY"}}'></span>)
	-->
</div>

<div macro="showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')">
	<div class='viewer'><pre macro='view text'></pre></div>
</div>
<div macro="else">
	<div class='viewer' macro='view text wikified'></div>
</div>

<div class="tagglyTagging" macro="tagglyTagging"></div>
</div>
<div class="collapsedView">
	<span class='toolbar'>
		<span macro='toolbar closeTiddler'></span>
		<span macro='mptwCollapse +'></span>
	</span>
	<span class='title' macro='view title'></span>
</div>

<!--}}}-->

!ViewTemplateToolbar
<!--{{{-->
<div class='toolbar'>
	<span macro="showWhenTagged systemConfig">
		<span macro="toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'"></span>
	</span>
	<span macro="showWhenTagged systemTheme"><span macro="applyTheme"></span></span>
	<span macro="showWhenTagged systemPalette"><span macro="applyPalette"></span></span>
	<span macro="showWhen tiddler.tags.contains('css') || tiddler.title == 'StyleSheet'"><span macro="refreshAll"></span></span>
	<span style="padding:1em;"></span>
	<span macro='toolbar closeTiddler closeOthers +editTiddler deleteTiddler > fields syncing permalink references jump'></span> <span macro='newHere label:"new here"'></span>
	<span macro='newJournalHere {{config.mptwJournalFormat?config.mptwJournalFormat:"MM/0DD/YY"}}'></span>
	<!--span macro='mptwCollapse -'></span-->
</div>
<!--}}}-->

!EditTemplate
<!--{{{-->
<div class="toolbar" macro="toolbar +saveTiddler saveCloseTiddler closeOthers -cancelTiddler cancelCloseTiddler deleteTiddler"></div>
<div class="title" macro="view title"></div>
<div class="editLabel">Title</div><div class="editor" macro="edit title"></div>
<div macro='annotations'></div>
<div class="editLabel">Content</div><div class="editor" macro="edit text"></div>
<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>
<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>
<!--}}}-->

!StyleSheet
/*{{{*/

/* a contrasting background so I can see where one tiddler ends and the other begins */
body {
	background: [[ColorPalette::TertiaryLight]];
}

/* sexy colours and font for the header */
.headerForeground {
	color: [[ColorPalette::PrimaryPale]];
}
.headerShadow, .headerShadow a {
	color: [[ColorPalette::PrimaryMid]];
}

/* separate the top menu parts */
.headerForeground, .headerShadow {
	padding: 1em 1em 0;
}

.headerForeground, .headerShadow {
	font-family: 'Trebuchet MS', sans-serif;
	font-weight:bold;
}
.headerForeground .siteSubtitle {
	color: [[ColorPalette::PrimaryLight]];
}
.headerShadow .siteSubtitle {
	color: [[ColorPalette::PrimaryMid]];
}

/* make shadow go and down right instead of up and left */
.headerShadow {
	left: 1px;
	top: 1px;
}

/* prefer monospace for editing */
.editor textarea, .editor input {
	font-family: 'Consolas', monospace;
	background-color:[[ColorPalette::TertiaryPale]];
}


/* sexy tiddler titles */
.title {
	font-size: 250%;
	color: [[ColorPalette::PrimaryLight]];
	font-family: 'Trebuchet MS', sans-serif;
}

/* more subtle tiddler subtitle */
.subtitle {
	padding:0px;
	margin:0px;
	padding-left:1em;
	font-size: 90%;
	color: [[ColorPalette::TertiaryMid]];
}
.subtitle .tiddlyLink {
	color: [[ColorPalette::TertiaryMid]];
}

/* a little bit of extra whitespace */
.viewer {
	padding-bottom:3px;
}

/* don't want any background color for headings */
h1,h2,h3,h4,h5,h6 {
	background-color: transparent;
	color: [[ColorPalette::Foreground]];
}

/* give tiddlers 3d style border and explicit background */
.tiddler {
	background: [[ColorPalette::Background]];
	border-right: 2px [[ColorPalette::TertiaryMid]] solid;
	border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;
	margin-bottom: 1em;
	padding:1em 2em 2em 1.5em;
}

/* make options slider look nicer */
#sidebarOptions .sliderPanel {
	border:solid 1px [[ColorPalette::PrimaryLight]];
}

/* the borders look wrong with the body background */
#sidebar .button {
	border-style: none;
}

/* this means you can put line breaks in SidebarOptions for readability */
#sidebarOptions br {
	display:none;
}
/* undo the above in OptionsPanel */
#sidebarOptions .sliderPanel br {
	display:inline;
}

/* horizontal main menu stuff */
#displayArea {
	margin: 1em 15.7em 0em 1.5em; /* use the freed up space */
}
#topMenu br {
	display: none;
}
#topMenu {
	background: [[ColorPalette::PrimaryMid]];
	color:[[ColorPalette::PrimaryPale]];
}
#topMenu {
	padding:2px;
}
#topMenu .button, #topMenu .tiddlyLink, #topMenu a {
	margin-left: 0.5em;
	margin-right: 0.5em;
	padding-left: 3px;
	padding-right: 3px;
	color: [[ColorPalette::PrimaryPale]];
	font-size: 115%;
}
#topMenu .button:hover, #topMenu .tiddlyLink:hover {
	background: [[ColorPalette::PrimaryDark]];
}

/* make 2.2 act like 2.1 with the invisible buttons */
.toolbar {
	visibility:hidden;
}
.selected .toolbar {
	visibility:visible;
}

/* experimental. this is a little borked in IE7 with the button 
 * borders but worth it I think for the extra screen realestate */
.toolbar { float:right; }

/* fix for TaggerPlugin. from sb56637. improved by FND */
.popup li .tagger a {
   display:inline;
}

/* makes theme selector look a little better */
#sidebarOptions .sliderPanel .select .button {
  padding:0.5em;
  display:block;
}
#sidebarOptions .sliderPanel .select br {
	display:none;
}

/* make it print a little cleaner */
@media print {
	#topMenu {
		display: none ! important;
	}
	/* not sure if we need all the importants */
	.tiddler {
		border-style: none ! important;
		margin:0px ! important;
		padding:0px ! important;
		padding-bottom:2em ! important;
	}
	.tagglyTagging .button, .tagglyTagging .hidebutton {
		display: none ! important;
	}
	.headerShadow {
		visibility: hidden ! important;
	}
	.tagglyTagged .quickopentag, .tagged .quickopentag {
		border-style: none ! important;
	}
	.quickopentag a.button, .miniTag {
		display: none ! important;
	}
}

/* get user styles specified in StyleSheet */
[[StyleSheet]]

/*}}}*/


Name: MptwTeal
Background: #fff
Foreground: #000
PrimaryPale: #B5D1DF
PrimaryLight: #618FA9
PrimaryMid: #1a3844
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #f8f8f8
TertiaryLight: #bbb
TertiaryMid: #999
TertiaryDark: #888
Error: #f88
|Name|MptwTheme|
|Description|Mptw Theme including custom PageLayout|
|PageTemplate|##PageTemplate|
|ViewTemplate|##ViewTemplate|
|EditTemplate|##EditTemplate|
|StyleSheet|##StyleSheet|

http://mptw.tiddlyspot.com/#MptwTheme ($Rev: 1829 $)

!PageTemplate
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
	<div class='headerShadow'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	</div>
	<div class='headerForeground'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	</div>
</div>
<!-- horizontal MainMenu -->
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
<!-- original MainMenu menu -->
<!-- <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> -->
<div id='sidebar'>
	<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
	<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->

!ViewTemplate
<!--{{{-->
<div class="uncollapsedView">
[[MptwTheme##ViewTemplateToolbar]]

<div class="tagglyTagged" macro="tags"></div>

<div class='titleContainer'>
	<span class='title' macro='view title'></span>
	<span macro="miniTag"></span>
</div>

<div class='subtitle'>
	(updated <span macro='view modified date {{config.mptwDateFormat?config.mptwDateFormat:"MM/0DD/YY"}}'></span>
	by <span macro='view modifier link'></span>)
	<!--
	(<span macro='message views.wikified.createdPrompt'></span>
	<span macro='view created date {{config.mptwDateFormat?config.mptwDateFormat:"MM/0DD/YY"}}'></span>)
	-->
</div>

<div macro="showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')">
	<div class='viewer'><pre macro='view text'></pre></div>
</div>
<div macro="else">
	<div class='viewer' macro='view text wikified'></div>
</div>

<div class="tagglyTagging" macro="tagglyTagging"></div>
</div>
<div class="collapsedView">
	<span class='toolbar'>
		<span macro='toolbar closeTiddler'></span>
		<span macro='mptwCollapse +'></span>
	</span>
	<span class='title' macro='view title'></span>
</div>

<!--}}}-->

!ViewTemplateToolbar
<!--{{{-->
<div class='toolbar'>
	<span macro="showWhenTagged systemConfig">
		<span macro="toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'"></span>
	</span>
	<span macro="showWhenTagged systemTheme"><span macro="applyTheme"></span></span>
	<span macro="showWhenTagged systemPalette"><span macro="applyPalette"></span></span>
	<span macro="showWhen tiddler.tags.contains('css') || tiddler.title == 'StyleSheet'"><span macro="refreshAll"></span></span>
	<span style="padding:1em;"></span>
	<span macro='toolbar closeTiddler closeOthers +editTiddler deleteTiddler > fields syncing permalink references jump'></span> <span macro='newHere label:"new here"'></span>
	<span macro='newJournalHere {{config.mptwJournalFormat?config.mptwJournalFormat:"MM/0DD/YY"}}'></span>
	<!--span macro='mptwCollapse -'></span-->
</div>
<!--}}}-->

!EditTemplate
<!--{{{-->
<div class="toolbar" macro="toolbar +saveTiddler saveCloseTiddler closeOthers -cancelTiddler cancelCloseTiddler deleteTiddler"></div>
<div class="title" macro="view title"></div>
<div class="editLabel">Title</div><div class="editor" macro="edit title"></div>
<div macro='annotations'></div>
<div class="editLabel">Content</div><div class="editor" macro="edit text"></div>
<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>
<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>
<!--}}}-->

!StyleSheet
/*{{{*/

/* a contrasting background so I can see where one tiddler ends and the other begins */
body {
	background: [[ColorPalette::TertiaryLight]];
}

/* sexy colours and font for the header */
.headerForeground {
	color: [[ColorPalette::PrimaryPale]];
}
.headerShadow, .headerShadow a {
	color: [[ColorPalette::PrimaryMid]];
}

/* separate the top menu parts */
.headerForeground, .headerShadow {
	padding: 1em 1em 0;
}

.headerForeground, .headerShadow {
	font-family: 'Trebuchet MS', sans-serif;
	font-weight:bold;
}
.headerForeground .siteSubtitle {
	color: [[ColorPalette::PrimaryLight]];
}
.headerShadow .siteSubtitle {
	color: [[ColorPalette::PrimaryMid]];
}

/* make shadow go and down right instead of up and left */
.headerShadow {
	left: 1px;
	top: 1px;
}

/* prefer monospace for editing */
.editor textarea, .editor input {
	font-family: 'Consolas', monospace;
	background-color:[[ColorPalette::TertiaryPale]];
}


/* sexy tiddler titles */
.title {
	font-size: 250%;
	color: [[ColorPalette::PrimaryLight]];
	font-family: 'Trebuchet MS', sans-serif;
}

/* more subtle tiddler subtitle */
.subtitle {
	padding:0px;
	margin:0px;
	padding-left:1em;
	font-size: 90%;
	color: [[ColorPalette::TertiaryMid]];
}
.subtitle .tiddlyLink {
	color: [[ColorPalette::TertiaryMid]];
}

/* a little bit of extra whitespace */
.viewer {
	padding-bottom:3px;
}

/* don't want any background color for headings */
h1,h2,h3,h4,h5,h6 {
	background-color: transparent;
	color: [[ColorPalette::Foreground]];
}

/* give tiddlers 3d style border and explicit background */
.tiddler {
	background: [[ColorPalette::Background]];
	border-right: 2px [[ColorPalette::TertiaryMid]] solid;
	border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;
	margin-bottom: 1em;
	padding:1em 2em 2em 1.5em;
}

/* make options slider look nicer */
#sidebarOptions .sliderPanel {
	border:solid 1px [[ColorPalette::PrimaryLight]];
}

/* the borders look wrong with the body background */
#sidebar .button {
	border-style: none;
}

/* this means you can put line breaks in SidebarOptions for readability */
#sidebarOptions br {
	display:none;
}
/* undo the above in OptionsPanel */
#sidebarOptions .sliderPanel br {
	display:inline;
}

/* horizontal main menu stuff */
#displayArea {
	margin: 1em 15.7em 0em 1.5em; /* use the freed up space */
}
#topMenu br {
	display: none;
}
#topMenu {
	background: [[ColorPalette::PrimaryMid]];
	color:[[ColorPalette::PrimaryPale]];
}
#topMenu {
	padding:2px;
}
#topMenu .button, #topMenu .tiddlyLink, #topMenu a {
	margin-left: 0.5em;
	margin-right: 0.5em;
	padding-left: 3px;
	padding-right: 3px;
	color: [[ColorPalette::PrimaryPale]];
	font-size: 115%;
}
#topMenu .button:hover, #topMenu .tiddlyLink:hover {
	background: [[ColorPalette::PrimaryDark]];
}

/* make 2.2 act like 2.1 with the invisible buttons */
.toolbar {
	visibility:hidden;
}
.selected .toolbar {
	visibility:visible;
}

/* experimental. this is a little borked in IE7 with the button 
 * borders but worth it I think for the extra screen realestate */
.toolbar { float:right; }

/* fix for TaggerPlugin. from sb56637. improved by FND */
.popup li .tagger a {
   display:inline;
}

/* makes theme selector look a little better */
#sidebarOptions .sliderPanel .select .button {
  padding:0.5em;
  display:block;
}
#sidebarOptions .sliderPanel .select br {
	display:none;
}

/* make it print a little cleaner */
@media print {
	#topMenu {
		display: none ! important;
	}
	/* not sure if we need all the importants */
	.tiddler {
		border-style: none ! important;
		margin:0px ! important;
		padding:0px ! important;
		padding-bottom:2em ! important;
	}
	.tagglyTagging .button, .tagglyTagging .hidebutton {
		display: none ! important;
	}
	.headerShadow {
		visibility: hidden ! important;
	}
	.tagglyTagged .quickopentag, .tagged .quickopentag {
		border-style: none ! important;
	}
	.quickopentag a.button, .miniTag {
		display: none ! important;
	}
}

/* get user styles specified in StyleSheet */
[[StyleSheet]]

/*}}}*/

|Name|MptwTrim|
|Description|Mptw Theme with a reduced header to increase useful space|
|ViewTemplate|MptwTheme##ViewTemplate|
|EditTemplate|MptwTheme##EditTemplate|
|StyleSheet|MptwTheme##StyleSheet|
|PageTemplate|##PageTemplate|

!PageTemplate
<!--{{{-->

<!-- horizontal MainMenu -->
<div id='topMenu' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<span refresh='content' tiddler='SiteTitle' style="padding-left:1em;font-weight:bold;"></span>:
<span refresh='content' tiddler='MainMenu'></span>
</div>
<div id='sidebar'>
	<div id='sidebarOptions'>
		<div refresh='content' tiddler='SideBarOptions'></div>
		<div style="margin-left:0.1em;"
			macro='slider chkTabSliderPanel SideBarTabs {{"tabs \u00bb"}} "Show Timeline, All, Tags, etc"'></div>
	</div>
</div>
<div id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>
</div>

/***
|Description:|A place to put your config tweaks so they aren't overwritten when you upgrade MPTW|
See http://www.tiddlywiki.org/wiki/Configuration_Options for other options you can set. In some cases where there are clashes with other plugins it might help to rename this to zzMptwUserConfigPlugin so it gets executed last.
***/
//{{{

// example: set your preferred date format
//config.mptwDateFormat = 'MM/0DD/YY';
//config.mptwJournalFormat = 'Journal MM/0DD/YY';

// example: set the theme you want to start with
//config.options.txtTheme = 'MptwRoundTheme';

// example: switch off autosave, switch on backups and set a backup folder
//config.options.chkSaveBackups = true;
//config.options.chkAutoSave = false;
//config.options.txtBackupFolder = 'backups';

// uncomment to disable 'new means new' functionality for the new journal macro
//config.newMeansNewForJournalsToo = false;

//}}}
/***
|Name:|NewHerePlugin|
|Description:|Creates the new here and new journal macros|
|Version:|3.0a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#NewHerePlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.macros, {
  newHere: {
    handler: function(place,macroName,params,wikifier,paramString,tiddler) {
      wikify("<<newTiddler "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
    }
  },
  newJournalHere: {
    handler: function(place,macroName,params,wikifier,paramString,tiddler) {
      wikify("<<newJournal "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
    }
  }
});

//}}}
/***
|Name:|NewMeansNewPlugin|
|Description:|If 'New Tiddler' already exists then create 'New Tiddler (1)' and so on|
|Version:|1.1.1a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/empty.html#NewMeansNewPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Note: I think this should be in the core
***/
//{{{

// change this or set config.newMeansNewForJournalsToo it in MptwUuserConfigPlugin
if (config.newMeansNewForJournalsToo == undefined) config.newMeansNewForJournalsToo = true;

String.prototype.getNextFreeName = function() {
  numberRegExp = / \(([0-9]+)\)$/;
  var match = numberRegExp.exec(this);
  if (match) {
  var num = parseInt(match[1]) + 1;
    return this.replace(numberRegExp," ("+num+")");
  }
  else {
    return this + " (1)";
  }
}

config.macros.newTiddler.checkForUnsaved = function(newName) {
  var r = false;
  story.forEachTiddler(function(title,element) {
    if (title == newName)
      r = true;
  });
  return r;
}

config.macros.newTiddler.getName = function(newName) {
  while (store.getTiddler(newName) || config.macros.newTiddler.checkForUnsaved(newName))
    newName = newName.getNextFreeName();
  return newName;
}


config.macros.newTiddler.onClickNewTiddler = function()
{
  var title = this.getAttribute("newTitle");
  if(this.getAttribute("isJournal") == "true") {
    title = new Date().formatString(title.trim());
  }

  // ---- these three lines should be the only difference between this and the core onClickNewTiddler
  if (config.newMeansNewForJournalsToo || this.getAttribute("isJournal") != "true")
    title = config.macros.newTiddler.getName(title);

  var params = this.getAttribute("params");
  var tags = params ? params.split("|") : [];
  var focus = this.getAttribute("newFocus");
  var template = this.getAttribute("newTemplate");
  var customFields = this.getAttribute("customFields");
  if(!customFields && !store.isShadowTiddler(title))
    customFields = String.encodeHashMap(config.defaultCustomFields);
  story.displayTiddler(null,title,template,false,null,null);
  var tiddlerElem = story.getTiddler(title);
  if(customFields)
    story.addCustomFields(tiddlerElem,customFields);
  var text = this.getAttribute("newText");
  if(typeof text == "string")
    story.getTiddlerField(title,"text").value = text.format([title]);
  for(var t=0;t<tags.length;t++)
    story.setTiddlerTag(title,tags[t],+1);
  story.focusTiddler(title,focus);
  return false;
};

//}}}
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordInputType = "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");

merge(config.macros.option.types, {
	'pas': {
		elementType: "input",
		valueField: "value",
		eventName: "onkeyup",
		className: "pasOptionInput",
		typeValue: config.macros.option.passwordInputType,
		create: function(place,type,opt,className,desc) {
			// password field
			config.macros.option.genericCreate(place,'pas',opt,className,desc);
			// checkbox linked with this password "save this password on this computer"
			config.macros.option.genericCreate(place,'chk','chk'+opt,className,desc);			
			// text savePasswordCheckboxLabel
			place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));
		},
		onChange: config.macros.option.genericOnChange
	}
});

merge(config.optionHandlers['chk'], {
	get: function(name) {
		// is there an option linked with this chk ?
		var opt = name.substr(3);
		if (config.options[opt]) 
			saveOptionCookie(opt);
		return config.options[name] ? "true" : "false";
	}
});

merge(config.optionHandlers, {
	'pas': {
 		get: function(name) {
			if (config.options["chk"+name]) {
				return encodeCookie(config.options[name].toString());
			} else {
				return "";
			}
		},
		set: function(name,value) {config.options[name] = decodeCookie(value);}
	}
});

// need to reload options to load passwordOptions
loadOptionsCookie();

/*
if (!config.options['pasPassword'])
	config.options['pasPassword'] = '';

merge(config.optionsDesc,{
		pasPassword: "Test password"
	});
*/
//}}}
/***
|''Name:''|PhotoGalleryPlugin|
|''Description:''|A photo gallery with optional subtitles|
|''Author:''|Paulo Soares|
|''Version:''|1.3.0|
|''Date:''|2011-04-25|
|''Source:''|http://www.math.ist.utl.pt/~psoares/addons.html|
|''Documentation:''|See the examples|
|''License:''|[[Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.5.0|
***/
//{{{
if(!version.extensions.photoGalleryPlugin) { //# ensure that the plugin is only installed once
version.extensions.photoGalleryPlugin = {installed: true};

(function($) {
config.macros.photoGallery = {};

config.macros.photoGallery.handler= function(place,macroName,params,wikifier,paramString,tiddler) {
  var i, args = paramString.parseParams(null,null,false);
  this.url = getParam(args,"url","*");
  this.sequence = getParam(args,"sequence",null);
  var height = getParam(args,"height",null);
  var width = getParam(args,"width",null);
  this.time = parseFloat(getParam(args,"time",0));
  this.start = parseFloat(getParam(args,"start",-1));
  this.labels = getParam(args,"labels",null);
  this.numbers = ($.inArray('numbers',paramString.readMacroParams()) > -1);
  if(!this.sequence){return false;}
  if(this.sequence=="!"){
    var lines = paramString.split("\n");
    if(lines.length>1){
      lines.pop();
      lines.shift();
    } else {return false;}
    this.sequence = lines;
  } else {
    this.sequence = this.parseSequence(this.sequence);
  }
  this.nImages = this.sequence.length;
  this.current = 0;
  if(!store.tiddlerExists(this.labels)) this.labels = null;
  if(this.labels) this.labelsArray = store.getTiddlerText(this.labels).split("\n");
  var pictureHolder = document.createElement('center');
  var image=pictureHolder.appendChild(document.createElement('img'));
  image.src = this.url.replace("*",this.sequence[0]);
  image.id = 'pgObject';
  if(height) image.height = height;
  if(width) image.width = width;
  image.className = "photoGallery";
  place.appendChild(pictureHolder);
  var navBar = createTiddlyElement(pictureHolder,"div");
  createTiddlyButton(navBar,"«","",this.firstImage);
  createTiddlyButton(navBar,"‹","",this.previousImage);
  if(this.time>0) {
    createTiddlyButton(navBar,"►",null,this.auto,null,"pgPlay");
  }
  createTiddlyButton(navBar,"›","",this.nextImage);
  createTiddlyButton(navBar,"»","",this.lastImage);
  if(this.labels) createTiddlyElement(pictureHolder,"div","pgLabel","",this.labelsArray[0]);
  if(this.numbers) createTiddlyElement(navBar,"span","pgCounter","","1/"+this.nImages);
  if(this.time>0 && this.start>-1) setTimeout(this.auto,this.start);
}

config.macros.photoGallery.parseSequence = function(seq) {
  var list = seq.split(","), res = [], limits, i, j;
  for (i=0; i<list.length; i++){
    if(list[i].indexOf("-") == -1){
      res.push(parseInt(list[i]));
    } else {
      limits = list[i].split("-");
      if(limits[0]>limits[1]){
        for(j=parseInt(limits[0]); j>=parseInt(limits[1]); j--){
          res.push(j); 
        }
      } else {
        for(j=parseInt(limits[0]); j<=parseInt(limits[1]); j++){
          res.push(j); 
        }
      }
    }
  }
  return res;
}

config.macros.photoGallery.auto = function() {
  var cm = config.macros.photoGallery;
  if(cm.autoAdvance) {
    clearInterval(cm.autoAdvance);
    cm.autoAdvance = null;
    $("#pgPlay").text('►');
  } else {
    if(cm.time>0) {
      cm.autoAdvance = setInterval(cm.nextImage, cm.time);
      $("#pgPlay").text('■');
    }
  }
}

config.macros.photoGallery.jump = function(step) {
  var target;
  switch (step) {
  case "f":
    target=0;
    break;
  case "l":
    target=this.nImages-1;
    break;
  case "n":
    target = (this.current == this.nImages-1) ? 0 : this.current+1; 
    break;
  case "p":
    target = (this.current == 0) ? this.nImages-1 : this.current-1; 
  }
  this.current = target;
  $("#pgObject").attr("src",this.url.replace("*",this.sequence[target]))
  if(this.numbers) $("#pgCounter").text((target+1) + '/'+ this.nImages);
  if(this.labels) $("#pgLabel").text(this.labelsArray[target]);
}

config.macros.photoGallery.nextImage = function(){config.macros.photoGallery.jump('n');}
config.macros.photoGallery.previousImage = function(){config.macros.photoGallery.jump('p');}
config.macros.photoGallery.lastImage = function(){config.macros.photoGallery.jump('l');}
config.macros.photoGallery.firstImage = function(){config.macros.photoGallery.jump('f');}
})(jQuery)
}
//}}}
|!Hoogte/Diepte (m)|>|>|>|!Warmte productie|!Stroom productie|
|~|<55 °C|55-120 °C|120-240 °C|>240 °C|~|
|hoger dan +50 | | | | |[[Windstroom]] |
|+2 tot +45 | |[[Zonnewarmte]] |[[Zonnewarmte]] |[[Hout]] en [[Zonnewarmte]]  |[[Hout]] en [[Zonnestroom]] en [[Waterkracht]]|
|+0 tot +2 || ||[[Biogas]] |[[Biogas]] en [[Waterkracht]]|
|0 tot-250 |[[WarmteKoudeOpslag]] en [[Aquathermie]] | | | | |
|-500 tot -1500 |[[Aardwarmte:Ondiep]] | | | ||
|-1500 tot -4000 | |[[Aardwarmte]] | | | |
|dieper dan - 4000 | | | [[Geothermie:Diep]]| |[[Geothermie:Diep]] |
/***
|Name:|PrettyDatesPlugin|
|Description:|Provides a new date format ('pppp') that displays times such as '2 days ago'|
|Version:|1.0a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#PrettyDatesPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Notes
* If you want to you can rename this plugin. :) Some suggestions: LastUpdatedPlugin, RelativeDatesPlugin, SmartDatesPlugin, SexyDatesPlugin.
* Inspired by http://ejohn.org/files/pretty.js
***/
//{{{
Date.prototype.prettyDate = function() {
  var diff = (((new Date()).getTime() - this.getTime()) / 1000);
  var day_diff = Math.floor(diff / 86400);

  if (isNaN(day_diff))      return "";
  else if (diff < 0)        return "in the future";
  else if (diff < 60)       return "just now";
  else if (diff < 120)      return "1 minute ago";
  else if (diff < 3600)     return Math.floor(diff/60) + " minutes ago";
  else if (diff < 7200)     return "1 hour ago";
  else if (diff < 86400)    return Math.floor(diff/3600) + " hours ago";
  else if (day_diff == 1)   return "Yesterday";
  else if (day_diff < 7)    return day_diff + " days ago";
  else if (day_diff < 14)   return  "a week ago";
  else if (day_diff < 31)   return Math.ceil(day_diff/7) + " weeks ago";
  else if (day_diff < 62)   return "a month ago";
  else if (day_diff < 365)  return "about " + Math.ceil(day_diff/31) + " months ago";
  else if (day_diff < 730)  return "a year ago";
  else                      return Math.ceil(day_diff/365) + " years ago";
}

Date.prototype.formatString_orig_mptw = Date.prototype.formatString;

Date.prototype.formatString = function(template) {
  return this.formatString_orig_mptw(template).replace(/pppp/,this.prettyDate());
}

// for MPTW. otherwise edit your ViewTemplate as required.
// config.mptwDateFormat = 'pppp (DD/MM/YY)';
config.mptwDateFormat = 'pppp';

//}}}
/***
|Name:|QuickOpenTagPlugin|
|Description:|Changes tag links to make it easier to open tags as tiddlers|
|Version:|3.0.1a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#QuickOpenTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
config.quickOpenTag = {

  dropdownChar: (document.all ? "\u25bc" : "\u25be"), // the little one doesn't work in IE?

  createTagButton: function(place,tag,excludeTiddler) {
    // little hack so we can do this: <<tag PrettyTagName|RealTagName>>
    var splitTag = tag.split("|");
    var pretty = tag;
    if (splitTag.length == 2) {
      tag = splitTag[1];
      pretty = splitTag[0];
    }

    var sp = createTiddlyElement(place,"span",null,"quickopentag");
    createTiddlyText(createTiddlyLink(sp,tag,false),pretty);

    var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,
                        config.views.wikified.tag.tooltip.format([tag]),onClickTag);
    theTag.setAttribute("tag",tag);
    if (excludeTiddler)
      theTag.setAttribute("tiddler",excludeTiddler);
        return(theTag);
  },

  miniTagHandler: function(place,macroName,params,wikifier,paramString,tiddler) {
    var tagged = store.getTaggedTiddlers(tiddler.title);
    if (tagged.length > 0) {
      var theTag = createTiddlyButton(place,config.quickOpenTag.dropdownChar,
                          config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);
      theTag.setAttribute("tag",tiddler.title);
      theTag.className = "miniTag";
    }
  },

  allTagsHandler: function(place,macroName,params) {
    var tags = store.getTags(params[0]);
    var filter = params[1]; // new feature
    var ul = createTiddlyElement(place,"ul");
    if(tags.length == 0)
      createTiddlyElement(ul,"li",null,"listTitle",this.noTags);
    for(var t=0; t<tags.length; t++) {
      var title = tags[t][0];
      if (!filter || (title.match(new RegExp('^'+filter)))) {
        var info = getTiddlyLinkInfo(title);
        var theListItem =createTiddlyElement(ul,"li");
        var theLink = createTiddlyLink(theListItem,tags[t][0],true);
        var theCount = " (" + tags[t][1] + ")";
        theLink.appendChild(document.createTextNode(theCount));
        var theDropDownBtn = createTiddlyButton(theListItem," " +
          config.quickOpenTag.dropdownChar,this.tooltip.format([tags[t][0]]),onClickTag);
        theDropDownBtn.setAttribute("tag",tags[t][0]);
      }
    }
  },

  // todo fix these up a bit
  styles: [
"/*{{{*/",
"/* created by QuickOpenTagPlugin */",
".tagglyTagged .quickopentag, .tagged .quickopentag ",
" { margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }",
".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }",
".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}",
"/* extra specificity to make it work right */",
"#displayArea .viewer .quickopentag a.button, ",
"#displayArea .viewer .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink ",
" { border:0px solid black; }",
"#displayArea .viewer .quickopentag a.button, ",
"#mainMenu .quickopentag a.button ",
" { margin-left:0px; padding-left:2px; }",
"#displayArea .viewer .quickopentag a.tiddlyLink, ",
"#mainMenu .quickopentag a.tiddlyLink ",
" { margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }",
"a.miniTag {font-size:150%;} ",
"#mainMenu .quickopentag a.button ",
" /* looks better in right justified main menus */",
" { margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }",
"#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }",
"#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }",
"#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }",
"/*}}}*/",
    ""].join("\n"),

  init: function() {
    // we fully replace these builtins. can't hijack them easily
    window.createTagButton = this.createTagButton;
    config.macros.allTags.handler = this.allTagsHandler;
    config.macros.miniTag = { handler: this.miniTagHandler };
    config.shadowTiddlers["QuickOpenTagStyles"] = this.styles;
    store.addNotification("QuickOpenTagStyles",refreshStyles);
  }
}

config.quickOpenTag.init();

//}}}
/***
|Name:|RenameTagsPlugin|
|Description:|Allows you to easily rename or delete tags across multiple tiddlers|
|Version:|3.1|
|Date:|17-Jun-2013|
|Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
Rename a tag and you will be prompted to rename it in all its tagged tiddlers.
***/
//{{{
config.renameTags = {

  prompts: {
    rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",
    remove: "Remove the tag '%0' from %1 tidder%2?"
  },

  removeTag: function(tag,tiddlers) {
    store.suspendNotifications();
    for (var i=0;i<tiddlers.length;i++) {
      store.setTiddlerTag(tiddlers[i].title,false,tag);
    }
    store.resumeNotifications();
    store.notifyAll();
  },

  renameTag: function(oldTag,newTag,tiddlers) {
    store.suspendNotifications();
    for (var i=0;i<tiddlers.length;i++) {
      var title = tiddlers[i].title;
      store.setTiddlerTag(title, false, oldTag); // remove old
      store.setTiddlerTag(title, true, newTag);  // add new
      store.getTiddler(title).modified = new Date(); // touch modified date
    }
    store.resumeNotifications();
    store.notifyAll();
  },

  storeMethods: {

    saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,

    saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created,creator) {
      if (title != newTitle) {
        var tagged = this.getTaggedTiddlers(title);
        if (tagged.length > 0) {
          // then we are renaming a tag
          if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))
            config.renameTags.renameTag(title,newTitle,tagged);

          if (!this.tiddlerExists(title) && newBody == "")
            // dont create unwanted tiddler
            return null;
        }
      }
      return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created,creator);
    },

    removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,

    removeTiddler: function(title) {
      var tagged = this.getTaggedTiddlers(title);
      if (tagged.length > 0)
        if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))
          config.renameTags.removeTag(title,tagged);
      return this.removeTiddler_orig_renameTags(title);
    }

  },

  init: function() {
    merge(TiddlyWiki.prototype,this.storeMethods);
  }
}

config.renameTags.init();

//}}}
!Restwarmte potentieel uit datacenters

!!Wat is de warmte uit datacenters
Datacenters verbruiken elektriciteit voor het primaire proces, dataopslag en verwerking. Deze elektriciteit wordt bijna volledig omgezet in warmte die moet worden gekoeld. Dit gebeurt met diverse technieken uiteenlopend van eenvoudig ventilatie met buitenlucht tot actieve koeling met koelmachines, WKO en adiabatische koeling. Bij al deze technieken gaat de “rest” warmte verloren naar de omgeving. Maar deze warmte kan worden “gewonnen” met een warmtewisselaar voor het leveren van warmte aan afnemers via een warmtenet.
!!Hoe werkt dit? 
De restwarmte uit datacenters komt vrij op een relatief lage temperatuur. Doorgaans worden datacenters gekoeld op 20-25 °C. De warmte is daarmee geschikt voor lage temperatuurnetten. Die hebben minder energieverliezen dan hoge temperatuurnetten, maar in de meeste gevallen zijn wel warmtepompen nodig voor opwaardering van de warmte bij afnemers.
De energie-uitwisseling werkt twee kanten op; koude wordt geleverd aan het datacenter en warmte aan de warmtevrager. De kracht van de uitwisseling is dat beide partijen er baat bij hebben. Een systeem van warmte-uitwisseling bestaat uit de volgende bouwstenen: koeling, verwarming, infrastructuur en warmtebuffer. 

''Koeling'':  Datacenters nemen koude af en hebben warmte van 20-25 graden °C beschikbaar. Ze zijn geschikt voor warmte-uitwisseling als ze een watergekoeld systeem hebben.
''Verwarming'': Als warmtevragers gebruik maken van een lage temperatuur afgiftesysteem, bijvoorbeeld vloerverwarming, kan de warmte direct worden ingezet. Anders wordt een warmtepomp ingezet om de warmte op te waarderen.
''Infrastructuur'': Bestaat uit geïsoleerde waterleidingen; er is altijd een warmte-en een koudeleiding. Het debiet en temperatuurverschil tussen deze leidingen wordt bepaald door de hoeveelheid energie die wordt uitgewisseld.
''Warmtebuffer'': Kan fluctuaties in warmtevraag (en –aanbod, maar dat is bij datacenters niet relevant) opvangen en zo zorgen dat meer warmte nuttig gebruikt kan worden. Een uitwisseling zonder buffer wordt een directe koppeling genoemd en met buffer een warmtenet. Een conventionele buffer bestaat uit een WKO-systeem met een warmte en koude put. Regeneratie* is een vereiste bij warmtebuffers.
 Grafie moet nog doen
Warmtelevering met een WKO kent drie typen. Bij directe levering wordt geen WKO gebruikt, bij een indirecte koppeling wordt alle warmte uitgewisseld via de WKO en bij een lage temperatuur warmtenet wordt direct warmte geleverd uit het net en zorgt de WKO alleen voor het balanceren van het systeem.

Bron:[[Berenschot | https://www.rvo.nl/sites/default/files/2018/03/Restwarmte-uit-datacenters.pdf]]

!!Beschrijving potentieel kaart
De kaart is ontwikkeld om datacenters te helpen met verduurzaming en is onder andere bedoeld voor gemeenten om inzicht te geven waar de kansrijke locaties zich bevinden, maar ook voor initiatiefnemers van verduurzamingsprojecten, zoals ontwikkelaars, corporaties en eindgebruikers.
De kansenkaart is opgesteld als een nationale verkenning naar het potentieel. Hierbij is landelijk dekkende data gebruikt om een zo compleet mogelijk beeld te geven.
Bij het bepalen van het realistisch potentieel is niet alleen gekeken naar het aanbod van restwarmte van datacenters, maar is nadrukkelijk ook de nabijheid van vraag naar warmte meegenomen. Bij een datacenter dat niet in de buurt staat van warmtevraag is aangenomen dat het geen realistisch potentieel heeft, omdat de kosten voor het transporteren van de warmte naar verder weggelegen warmtevraag de businesscase onhaalbaar maakt (in verband met de hoge kosten voor een warmtenet). Datacenters staan op specifieke locaties en bieden daarom lokaal kansen. 
Om tot het realistisch potentieel te komen, is een GIS-analyse uitgevoerd van de 114 grootste commerciële datacenters in Nederland (groter dan 400 m2) in combinatie met nabijgelegen kansrijke warmtevragers. Uit de inventarisatie is naar voren gekomen dat het realistische potentieel voor restwarmte van huidige datacenters 6,3 PJ is, wat resulteert in een potentiële CO2-reductie van 410 kton. Dit komt overeen met 12% van de opgave van 3,4 Mton van de Klimaattafel Gebouwde Omgeving. Specifiek is gekeken naar vier sectoren voor de afname van (opgewaardeerde) datacenter restwarmte:
*''Bestaande woning- en utiliteitsbouw'': restwarmte uit datacenters kan worden ingezet voor het dekken van de verwarmingsvraag van 120.000 woningequivalenten in de bestaande bouw (op basis van een gestandaardiseerd warmteverbruik per woning van 40 GJ/jaar). Dit potentieel aantal woningen wordt uiteraard groter als de warmtevraag in de bestaande bouw in de toekomst afneemt door betere isolatie.
*''Nieuwbouwwijken'': voor nieuwbouw geldt dat 135.000 woningequivalenten verwarmd zouden kunnen worden met restwarmte uit bestaande datacenters (uitgaande van een warmtevraag van 11 GJ per nieuwbouwwoning en op basis van nieuwbouwplannen zoals die nu voor een aantal gemeenten bekend zijn (inclusief Amsterdam; zie www.nieuwekaartnl.nl)). De nieuwbouw zou als vliegwiel kunnen fungeren voor het realiseren van uitwisseling van warmte uit datacenters. Hier liggen kansen, omdat de keuze voor het type energie-infrastructuur (elektriciteits-, gas- of warmtenet) nog open ligt. Daarnaast leent de nieuwbouw zich, door goede isolatie, direct voor het gebruik van lage temperatuur restwarmte.
*''Glastuinbouw'': met veel gebruik van warmte op lage temperatuur is de glastuinbouw ook interessant. In deze sector zou in 5,2% van de warmtevraag voorzien kunnen worden door restwarmte uit bestaande datacenters. Aandachtspunt hierbij is wel dat naast levering van warmte ook de levering van CO2 moet worden geregeld en opnieuw gekeken moet worden naar de elektriciteitsvoorziening als WKK’s worden vervangen.
*''Zwembaden'': tenslotte zijn zwembaden een interessante afnemer van datacenter restwarmte, gezien de lage benodigde temperatuur. Hier geldt dat bestaande datacenters in 7,1% van de warmtevraag zouden kunnen voorzien.
Relatief veel (54%) van de totaal beschikbare warmte uit datacenters behoort tot het realistisch (of economisch rendabel) potentieel. Dit komt omdat veel van de datacenters gebouwd zijn in de buurt van de gebouwde omgeving, waardoor kosten van warmtenetinfrastructuur beperkt kunnen blijven. Restwarmte van hyperscale datacenters kan ook op langere afstand gebruikt worden voor het voorzien in warmtevraag (al dan niet in combinatie met andere warmtebronnen). Deze mogelijkheid zou naar schatting op termijn nog een aanzienlijke extra hoeveelheid kton CO2-reductie kunnen bijdragen ten gunste van het nu berekende realistisch potentieel. Een voorbeeld hiervan zijn de plannen om een warmteleiding tussen de Eemshaven en de stad Groningen aan te leggen.
Samenvattend ziet het realistisch potentieel van restwarmtebenutting uit huidige datacenters er nu als volgt uit:
| !Sector | !Realistisch potentieel in PJ | !Percentage van de warmtevraag| !Potentiële ~CO2-reductie [kton]|
| Gebouwde omgeving (350 PJ) | 4,7 | 1,3 | 305 |
| Nieuwbouw (7,7 PJ) | 1,5 | 19,5 | 97 |
| Glastuinbouw (50 PJ) | 2,6 | 5,2 | 169 |
| Zwembaden (5,76 PJ) | 0,4 | 7,1 | 26 |
| Totaal realistisch potentieel | 6,3 | 1,6 | 409 |
Bron:[[Berenschot en If technology | https://www.rvo.nl/sites/default/files/2018/11/Warmte%20uit%20datacenters%20-%20november%202018.pdf]]

!!Hoe bereken ik dit? 
Een gemiddelde omvang (energievraag) is bepaald aan de hand van CBS. Op basis van een gemiddelde omvang of energievraag is een “standaard” business case opgesteld waarin de investeringskosten (CAPEX) en de operationele kosten (OPEX) worden berekend om tot een eenvoudige terugverdientijd te komen ten opzichte van de referentie aardgas. Vervolgens is de afstand tussen het project en het datacenter geoptimaliseerd om tot een terugverdientijd tekomen van 5 jaar.
Op basis van deze afstand kan met GIS een zoekstraal voor elk datacenter worden bepaald waarbinnen de potententiele rendabele afnemers gezocht moeten worden. Van deze afnemers kan worden aangenomen dat het rendabel is (terugverdientijd rond de 5 jaar afhankelijk van de afwijking ten opzichte van de standaard omvang en lokale omstandigheden) om een warmteleiding aan te leggen en warmte te leveren vanuit het datacenter. Voor de drie varianten kan vervolgens het huidige en het toekomstige potentieel worden berekend door deze voor alle datacenters op te tellen. Datacenters waarbinnen de zoekstraal van het huidige of toekomstige potentieel geen afnemers bevinden hebben geen potentie voor het leveren van warmte en vallen daarmee af. De warmtevraag of het aanbod zijn limiterend voor de potentie, een datacenter kan niet meer warmte leveren dan dat er energievraag is en vice versa.

Grafiek moet nog doen. 

!!Hoe kom ik verder?
[[Rapportage kansenkaart Warmte uit Datacenters | https://www.rvo.nl/sites/default/files/2018/11/Rapportage%20kansenkaart%20warmte%20uit%20datacenters.pdf]]
[[Restwarmte uit datacenters Succesvoorbeelden van nutig hergebruik van lage temperatuur restwarmte | https://www.rvo.nl/sites/default/files/2018/03/Restwarmte-uit-datacenters.pdf]]
[[Warmte uit datacenters | https://www.rvo.nl/sites/default/files/2018/11/Warmte%20uit%20datacenters%20-%20november%202018.pdf]]
/***
|Name:|SaveCloseTiddlerPlugin|
|Description:|Provides two extra toolbar commands, saveCloseTiddler and cancelCloseTiddler|
|Version:|3.0a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#SaveCloseTiddlerPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
To use these add them to the commands in ToolbarCommands under EditToolbar,
or in the MptwTheme tiddler under EditTemplate.
***/
//{{{
merge(config.commands,{

  saveCloseTiddler: {
    text: 'done/close',
    tooltip: 'Save changes to this tiddler and close it',
    handler: function(ev,src,title) {
      var closeTitle = title;
      var newTitle = story.saveTiddler(title,ev.shiftKey);
      if (newTitle)
        closeTitle = newTitle;
      return config.commands.closeTiddler.handler(ev,src,closeTitle);
    }
  },

  cancelCloseTiddler: {
    text: 'cancel/close',
    tooltip: 'Undo changes to this tiddler and close it',
    handler: function(ev,src,title) {
      // the same as closeTiddler now actually
      return config.commands.closeTiddler.handler(ev,src,title);
    }
  }

});

//}}}
/***
|Name:|SelectThemePlugin|
|Description:|Lets you easily switch theme and palette|
|Version:|1.0.1a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#SelectThemePlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Notes
* Borrows largely from ThemeSwitcherPlugin by Martin Budden http://www.martinswiki.com/#ThemeSwitcherPlugin
* Theme is cookie based. But set a default by setting config.options.txtTheme in MptwConfigPlugin (for example)
* Palette is not cookie based. It actually overwrites your ColorPalette tiddler when you select a palette, so beware.
!Usage
* {{{<<selectTheme>>}}} makes a dropdown selector
* {{{<<selectPalette>>}}} makes a dropdown selector
* {{{<<applyTheme>>}}} applies the current tiddler as a theme
* {{{<<applyPalette>>}}} applies the current tiddler as a palette
* {{{<<applyTheme TiddlerName>>}}} applies TiddlerName as a theme
* {{{<<applyPalette TiddlerName>>}}} applies TiddlerName as a palette
***/
//{{{

config.macros.selectTheme = {
  label: {
    selectTheme:"select theme",
    selectPalette:"select palette"
  },
  prompt: {
    selectTheme:"Select the current theme",
    selectPalette:"Select the current palette"
  },
  tags: {
    selectTheme:'systemTheme',
    selectPalette:'systemPalette'
  }
};

config.macros.selectTheme.handler = function(place,macroName)
{
  var btn = createTiddlyButton(place,this.label[macroName],this.prompt[macroName],this.onClick);
  // want to handle palettes and themes with same code. use mode attribute to distinguish
  btn.setAttribute('mode',macroName);
};

config.macros.selectTheme.onClick = function(ev)
{
  var e = ev ? ev : window.event;
  var popup = Popup.create(this);
  var mode = this.getAttribute('mode');
  var tiddlers = store.getTaggedTiddlers(config.macros.selectTheme.tags[mode]);
  // for default
  if (mode == "selectPalette") {
    var btn = createTiddlyButton(createTiddlyElement(popup,'li'),"(default)","default color palette",config.macros.selectTheme.onClickTheme);
    btn.setAttribute('theme',"(default)");
    btn.setAttribute('mode',mode);
  }
  for(var i=0; i<tiddlers.length; i++) {
    var t = tiddlers[i].title;
    var name = store.getTiddlerSlice(t,'Name');
    var desc = store.getTiddlerSlice(t,'Description');
    var btn = createTiddlyButton(createTiddlyElement(popup,'li'), name?name:t, desc?desc:config.macros.selectTheme.label['mode'], config.macros.selectTheme.onClickTheme);
    btn.setAttribute('theme',t);
    btn.setAttribute('mode',mode);
  }
  Popup.show();
  return stopEvent(e);
};

config.macros.selectTheme.onClickTheme = function(ev)
{
  var mode = this.getAttribute('mode');
  var theme = this.getAttribute('theme');
  if (mode == 'selectTheme')
    story.switchTheme(theme);
  else // selectPalette
    config.macros.selectTheme.updatePalette(theme);
  return false;
};

config.macros.selectTheme.updatePalette = function(title)
{
  if (title != "") {
    store.deleteTiddler("ColorPalette");
    if (title != "(default)")
      store.saveTiddler("ColorPalette","ColorPalette",store.getTiddlerText(title),
          config.options.txtUserName,undefined,"");
    refreshAll();
    if(config.options.chkAutoSave)
      saveChanges(true);
  }
};

config.macros.applyTheme = {
  label: "apply",
  prompt: "apply this theme or palette" // i'm lazy
};

config.macros.applyTheme.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
  var useTiddler = params[0] ? params[0] : tiddler.title;
  var btn = createTiddlyButton(place,this.label,this.prompt,config.macros.selectTheme.onClickTheme);
  btn.setAttribute('theme',useTiddler);
  btn.setAttribute('mode',macroName=="applyTheme"?"selectTheme":"selectPalette"); // a bit untidy here
}

config.macros.selectPalette = config.macros.selectTheme;
config.macros.applyPalette = config.macros.applyTheme;

config.macros.refreshAll = { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
  createTiddlyButton(place,"refresh","refresh layout and styles",function() { refreshAll(); });
}};

//}}}
bij de [[EnergieAtlas | http://www.warmteatlas.nl]]
EnergieWiki
|>|>|!PageTemplate|
|>|>|[[SiteTitle]] - [[SiteSubtitle]]|
|[[MainMenu]]|[[DefaultTiddlers]]<br><br>[[ViewTemplate]]<br><br>[[EditTemplate]]|[[SideBarOptions]]|
|~|~|[[OptionsPanel]]<br>AdvancedOptions|
|~|~|SideBarTabs|
|>|>|[[SiteUrl]] - [[HoverMenu]]|
/***
|''Name:''|TableSortingPlugin|
|''Description:''|Dynamically sort tables by clicking on column headers|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#TableSortingPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.02|
|''Date:''|25-01-2008|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|
!!Usage:
* Make sure your table has a header row
** {{{|Name|Phone Number|Address|h}}}<br> Note the /h/ that denote a header row 
* Give the table a class of 'sortable'
** {{{
|sortable|k
|Name|Phone Number|Address|h
}}}<br>Note the /k/ that denotes a class name being assigned to the table.
* To disallow sorting by a column, place {{{<<nosort>>}}} in it's header
* To automatically sort a table by a column, place {{{<<autosort>>}}} in the header for that column
** Or to sort automatically but in reverse order, use {{{<<autosort reverse>>}}}

!!Example:
|sortable|k
|Name |Salary |Extension |Performance |File Size |Start date |h
|ZBloggs, Fred |€12000.00 |1353 |+1.2 |74.2Kb |Aug 19, 2003 21:34:00 |
|ABloggs, Fred |€12000.00 |1353 |1.2 |3350b |09/18/2003 |
|CBloggs, Fred |€12000 |1353 |1.200 |55.2Kb |August 18, 2003 |
|DBloggs, Fred |€12000.00 |1353 |1.2 |2100b |07/18/2003 |
|Bloggs, Fred |€12000.00 |1353 |01.20 |6.156Mb |08/17/2003 05:43 |
|Turvey, Kevin |€191200.00 |2342 |-33 |1b |02/05/1979 |
|Mbogo, Arnold |€32010.12 |2755 |-21.673 |1.2Gb |09/08/1998 |
|Shakespeare, Bill |£122000.00|3211 |6 |33.22Gb |12/11/1961 |
|Shakespeare, Hamlet |£9000 |9005 |-8 |3Gb |01/01/2002 |
|Fitz, Marvin |€3300.30 |5554 |+5 |4Kb |05/22/1995 |

***/
// /%
//!BEGIN-PLUGIN-CODE
config.tableSorting = {
	
	darrow: "\u2193",
	
	uarrow: "\u2191",
	
	getText : function (o) {
		var p = o.cells[SORT_INDEX];
		return p.innerText || p.textContent || '';
	},
	
	sortTable : function (o,rev) {
		SORT_INDEX = o.getAttribute("index");
		var c = config.tableSorting;
		var T = findRelated(o.parentNode,"TABLE");
		if(T.tBodies[0].rows.length<=1) 
			return;
		var itm = "";
		var i = 0;
		while (itm == "" && i < T.tBodies[0].rows.length) {
			itm = c.getText(T.tBodies[0].rows[i]).trim();
			i++;
		}
		if (itm == "") 
			return; 	
		var r = [];
		var S = o.getElementsByTagName("span")[0];		
		c.fn = c.sortAlpha; 
		if(!isNaN(Date.parse(itm)))
			c.fn = c.sortDate; 
		else if(itm.match(/^[$|£|€|\+|\-]{0,1}\d*\.{0,1}\d+$/)) 
			c.fn = c.sortNumber; 
		else if(itm.match(/^\d*\.{0,1}\d+[K|M|G]{0,1}b$/)) 
			c.fn = c.sortFile; 
		for(i=0; i<T.tBodies[0].rows.length; i++) {
			 r[i]=T.tBodies[0].rows[i]; 
		} 
		r.sort(c.reSort);
		if(S.firstChild.nodeValue==c.darrow || rev) {
			r.reverse();
			S.firstChild.nodeValue=c.uarrow;
		} 
		else 
			S.firstChild.nodeValue=c.darrow;
		var thead = T.getElementsByTagName('thead')[0]; 
		var headers = thead.rows[thead.rows.length-1].cells;
		for(var k=0; k<headers.length; k++) {
			if(!hasClass(headers[k],"nosort"))
				addClass(headers[k].getElementsByTagName("span")[0],"hidden");
		}
		removeClass(S,"hidden");
		for(i=0; i<r.length; i++) { 
			T.tBodies[0].appendChild(r[i]);
			c.stripe(r[i],i);
			for(var j=0; j<r[i].cells.length;j++){
				removeClass(r[i].cells[j],"sortedCol");
			}
			addClass(r[i].cells[SORT_INDEX],"sortedCol");
		}
	},
	
	stripe : function (e,i){
		var cl = ["oddRow","evenRow"];
		i&1? cl.reverse() : cl;
		removeClass(e,cl[1]);
		addClass(e,cl[0]);
	},
	
	sortNumber : function(v) {
		var x = parseFloat(this.getText(v).replace(/[^0-9.-]/g,''));
		return isNaN(x)? 0: x;
	},
	
	sortDate : function(v) {
		return Date.parse(this.getText(v));
	},

	sortAlpha : function(v) {
		return this.getText(v).toLowerCase();
	},
	
	sortFile : function(v) { 		
		var j, q = config.messages.sizeTemplates, s = this.getText(v);
		for (var i=0; i<q.length; i++) {
			if ((j = s.toLowerCase().indexOf(q[i].template.replace("%0\u00a0","").toLowerCase())) != -1)
				return q[i].unit * s.substr(0,j);
		}
		return parseFloat(s);
	},
	
	reSort : function(a,b){
		var c = config.tableSorting;
		var aa = c.fn(a);
		var bb = c.fn(b);
		return ((aa==bb)? 0 : ((aa<bb)? -1:1));
	}
};

Story.prototype.tSort_refreshTiddler = Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function(title,template,force,customFields,defaultText){
	var elem = this.tSort_refreshTiddler.apply(this,arguments);
	if(elem){
		var tables = elem.getElementsByTagName("TABLE");
		var c = config.tableSorting;
		for(var i=0; i<tables.length; i++){
			if(hasClass(tables[i],"sortable")){
				var x = null, rev, table = tables[i], thead = table.getElementsByTagName('thead')[0], headers = thead.rows[thead.rows.length-1].cells;
				for (var j=0; j<headers.length; j++){
					var h = headers[j];
					if (hasClass(h,"nosort"))
						continue;
					h.setAttribute("index",j);
					h.onclick = function(){c.sortTable(this); return false;};
					h.ondblclick = stopEvent;
					if(h.getElementsByTagName("span").length == 0)
						createTiddlyElement(h,"span",null,"hidden",c.uarrow); 
					if(!x && hasClass(h,"autosort")) {
						x = j;
						rev = hasClass(h,"reverse");
					}
				}
				if(x)
					c.sortTable(headers[x],rev);		
			}
		}
	}
	return elem; 
};

setStylesheet("table.sortable span.hidden {visibility:hidden;}\n"+
	"table.sortable thead {cursor:pointer;}\n"+
	"table.sortable .nosort {cursor:default;}\n"+
	"table.sortable td.sortedCol {background:#ffc;}","TableSortingPluginStyles");

function stopEvent(e){
	var ev = e? e : window.event;
	ev.cancelBubble = true;
	if (ev.stopPropagation) ev.stopPropagation();
	return false;	
}	

config.macros.nosort={
	handler : function(place){
		addClass(place,"nosort");
	}	
};

config.macros.autosort={
	handler : function(place,m,p,w,pS){
		addClass(place,"autosort"+" "+pS);		
	}	
};
//!END-PLUGIN-CODE
// %/
/***
|Name:|TagglyTaggingPlugin|
|Description:|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|
|Version:|3.3.2a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#TagglyTaggingPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Notes
See http://mptw.tiddlyspot.com/#TagglyTagging
***/
//{{{

merge(String.prototype,{

  parseTagExpr: function(debug) {

    if (this.trim() == "")
      return "(true)";

    var anyLogicOp = /(!|&&|\|\||\(|\))/g;
    var singleLogicOp = /^(!|&&|\|\||\(|\))$/;

    var spaced = this.
      // because square brackets in templates are no good
      // this means you can use [(With Spaces)] instead of [[With Spaces]]
      replace(/\[\(/g," [[").
      replace(/\)\]/g,"]] ").
      // space things out so we can use readBracketedList. tricky eh?
      replace(anyLogicOp," $1 ");

    var expr = "";

    var tokens = spaced.readBracketedList(false); // false means don't uniq the list. nice one JR!

    for (var i=0;i<tokens.length;i++)
      if (tokens[i].match(singleLogicOp))
        expr += tokens[i];
      else
        expr += "tiddler.tags.contains('%0')".format([tokens[i].replace(/'/,"\\'")]); // fix single quote bug. still have round bracket bug i think

    if (debug)
      alert(expr);

    return '('+expr+')';
  }

});

merge(TiddlyWiki.prototype,{
  getTiddlersByTagExpr: function(tagExpr,sortField) {

    var result = [];

    var expr = tagExpr.parseTagExpr();

    store.forEachTiddler(function(title,tiddler) {
      if (eval(expr))
        result.push(tiddler);
    });

    if(!sortField)
      sortField = "title";

    result.sort(function(a,b) {return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);});

    return result;
  }
});

config.taggly = {

  // for translations
  lingo: {
    labels: {
      asc:        "\u2191", // down arrow
      desc:       "\u2193", // up arrow
      title:      "title",
      modified:   "modified",
      created:    "created",
      show:       "+",
      hide:       "-",
      normal:     "normal",
      group:      "group",
      commas:     "commas",
      sitemap:    "sitemap",
      numCols:    "cols\u00b1", // plus minus sign
      label:      "Tagged as '%0':",
      exprLabel:  "Matching tag expression '%0':",
      excerpts:   "excerpts",
      descr:      "descr",
      slices:     "slices",
      contents:   "contents",
      sliders:    "sliders",
      noexcerpts: "title only",
      noneFound:  "(none)"
    },

    tooltips: {
      title:      "Click to sort by title",
      modified:   "Click to sort by modified date",
      created:    "Click to sort by created date",
      show:       "Click to show tagging list",
      hide:       "Click to hide tagging list",
      normal:     "Click to show a normal ungrouped list",
      group:      "Click to show list grouped by tag",
      sitemap:    "Click to show a sitemap style list",
      commas:     "Click to show a comma separated list",
      numCols:    "Click to change number of columns",
      excerpts:   "Click to show excerpts",
      descr:      "Click to show the description slice",
      slices:     "Click to show all slices",
      contents:   "Click to show entire tiddler contents",
      sliders:    "Click to show tiddler contents in sliders",
      noexcerpts: "Click to show entire title only"
    },

    tooDeepMessage: "* //sitemap too deep...//"
  },

  config: {
    showTaggingCounts: true,
    listOpts: {
      // the first one will be the default
      sortBy:     ["title","modified","created"],
      sortOrder:  ["asc","desc"],
      hideState:  ["show","hide"],
      listMode:   ["normal","group","sitemap","commas"],
      numCols:    ["1","2","3","4","5","6"],
      excerpts:   ["noexcerpts","excerpts","descr","slices","contents","sliders"]
    },
    valuePrefix: "taggly.",
    excludeTags: ["excludeLists","excludeTagging"],
    excerptSize: 50,
    excerptMarker: "/%"+"%/",
    siteMapDepthLimit: 25
  },

  getTagglyOpt: function(title,opt) {
    var val = store.getValue(title,this.config.valuePrefix+opt);
    return val ? val : this.config.listOpts[opt][0];
  },

  setTagglyOpt: function(title,opt,value) {
    // create it silently if it doesn't exist
    if (!store.tiddlerExists(title)) {
      store.saveTiddler(title,title,config.views.editor.defaultText.format([title]),config.options.txtUserName,new Date(),"");

      // <<tagglyTagging expr:"...">> creates a tiddler to store its display settings
      // Make those tiddlers less noticeable by tagging as excludeSearch and excludeLists
      // Because we don't want to hide real tags, check that they aren't actually tags before doing so
      // Also tag them as tagglyExpression for manageability
      // (contributed by RA)
      if (!store.getTaggedTiddlers(title).length) {
        store.setTiddlerTag(title,true,"excludeSearch");
        store.setTiddlerTag(title,true,"excludeLists");
        store.setTiddlerTag(title,true,"tagglyExpression");
      }
    }

    // if value is default then remove it to save space
    return store.setValue(title, this.config.valuePrefix+opt, value == this.config.listOpts[opt][0] ? null : value);
  },

  getNextValue: function(title,opt) {
    var current = this.getTagglyOpt(title,opt);
    var pos = this.config.listOpts[opt].indexOf(current);
    // supposed to automagically don't let cols cycle up past the number of items
    // currently broken in some situations, eg when using an expression
    // lets fix it later when we rewrite for jquery
    // the columns thing should be jquery table manipulation probably
    var limit = (opt == "numCols" ? store.getTaggedTiddlers(title).length : this.config.listOpts[opt].length);
    var newPos = (pos + 1) % limit;
    return this.config.listOpts[opt][newPos];
  },

  toggleTagglyOpt: function(title,opt) {
    var newVal = this.getNextValue(title,opt);
    this.setTagglyOpt(title,opt,newVal);
  },

  createListControl: function(place,title,type) {
    var lingo = config.taggly.lingo;
    var label;
    var tooltip;
    var onclick;

    if ((type == "title" || type == "modified" || type == "created")) {
      // "special" controls. a little tricky. derived from sortOrder and sortBy
      label = lingo.labels[type];
      tooltip = lingo.tooltips[type];

      if (this.getTagglyOpt(title,"sortBy") == type) {
        label += lingo.labels[this.getTagglyOpt(title,"sortOrder")];
        onclick = function() {
          config.taggly.toggleTagglyOpt(title,"sortOrder");
          return false;
        }
      }
      else {
        onclick = function() {
          config.taggly.setTagglyOpt(title,"sortBy",type);
          config.taggly.setTagglyOpt(title,"sortOrder",config.taggly.config.listOpts.sortOrder[0]);
          return false;
        }
      }
    }
    else {
      // "regular" controls, nice and simple
      label = lingo.labels[type == "numCols" ? type : this.getNextValue(title,type)];
      tooltip = lingo.tooltips[type == "numCols" ? type : this.getNextValue(title,type)];
      onclick = function() {
        config.taggly.toggleTagglyOpt(title,type);
        return false;
      }
    }

    // hide button because commas don't have columns
    if (!(this.getTagglyOpt(title,"listMode") == "commas" && type == "numCols"))
      createTiddlyButton(place,label,tooltip,onclick,type == "hideState" ? "hidebutton" : "button");
  },

  makeColumns: function(orig,numCols) {
    var listSize = orig.length;
    var colSize = listSize/numCols;
    var remainder = listSize % numCols;

    var upperColsize = colSize;
    var lowerColsize = colSize;

    if (colSize != Math.floor(colSize)) {
      // it's not an exact fit so..
      upperColsize = Math.floor(colSize) + 1;
      lowerColsize = Math.floor(colSize);
    }

    var output = [];
    var c = 0;
    for (var j=0;j<numCols;j++) {
      var singleCol = [];
      var thisSize = j < remainder ? upperColsize : lowerColsize;
      for (var i=0;i<thisSize;i++)
        singleCol.push(orig[c++]);
      output.push(singleCol);
    }

    return output;
  },

  drawTable: function(place,columns,theClass) {
    var newTable = createTiddlyElement(place,"table",null,theClass);
    var newTbody = createTiddlyElement(newTable,"tbody");
    var newTr = createTiddlyElement(newTbody,"tr");
    for (var j=0;j<columns.length;j++) {
      var colOutput = "";
      for (var i=0;i<columns[j].length;i++)
        colOutput += columns[j][i];
      var newTd = createTiddlyElement(newTr,"td",null,"tagglyTagging"); // todo should not need this class
      wikify(colOutput,newTd);
    }
    return newTable;
  },

  createTagglyList: function(place,title,isTagExpr) {
    switch(this.getTagglyOpt(title,"listMode")) {
      case "group":  return this.createTagglyListGrouped(place,title,isTagExpr); break;
      case "normal": return this.createTagglyListNormal(place,title,false,isTagExpr); break;
      case "commas": return this.createTagglyListNormal(place,title,true,isTagExpr); break;
      case "sitemap":return this.createTagglyListSiteMap(place,title,isTagExpr); break;
    }
  },

  getTaggingCount: function(title,isTagExpr) {
    // thanks to Doug Edmunds
    if (this.config.showTaggingCounts) {
      var tagCount = config.taggly.getTiddlers(title,'title',isTagExpr).length;
      if (tagCount > 0)
        return " ("+tagCount+")";
    }
    return "";
  },

  getTiddlers: function(titleOrExpr,sortBy,isTagExpr) {
    return isTagExpr ? store.getTiddlersByTagExpr(titleOrExpr,sortBy) : store.getTaggedTiddlers(titleOrExpr,sortBy);
  },

  getExcerpt: function(inTiddlerTitle,title,indent) {
    if (!indent)
      indent = 1;

    var displayMode = this.getTagglyOpt(inTiddlerTitle,"excerpts");
    var t = store.getTiddler(title);

    if (t && displayMode == "excerpts") {
      var text = t.text.replace(/\n/," ");
      var marker = text.indexOf(this.config.excerptMarker);
      if (marker != -1) {
        return " {{excerpt{<nowiki>" + text.substr(0,marker) + "</nowiki>}}}";
      }
      else if (text.length < this.config.excerptSize) {
        return " {{excerpt{<nowiki>" + t.text + "</nowiki>}}}";
      }
      else {
        return " {{excerpt{<nowiki>" + t.text.substr(0,this.config.excerptSize) + "..." + "</nowiki>}}}";
      }
    }
    else if (t && displayMode == "contents") {
      return "\n{{contents indent"+indent+"{\n" + t.text + "\n}}}";
    }
    else if (t && displayMode == "sliders") {
      return "<slider slide>\n{{contents{\n" + t.text + "\n}}}\n</slider>";
    }
    else if (t && displayMode == "descr") {
      var descr = store.getTiddlerSlice(title,'Description');
      return descr ? " {{excerpt{" + descr  + "}}}" : "";
    }
    else if (t && displayMode == "slices") {
      var result = "";
      var slices = store.calcAllSlices(title);
      for (var s in slices)
        result += "|%0|<nowiki>%1</nowiki>|\n".format([s,slices[s]]);
      return result ? "\n{{excerpt excerptIndent{\n" + result  + "}}}" : "";
    }
    return "";
  },

  notHidden: function(t,inTiddler) {
    if (typeof t == "string")
      t = store.getTiddler(t);
    return (!t || !t.tags.containsAny(this.config.excludeTags) ||
        (inTiddler && this.config.excludeTags.contains(inTiddler)));
  },

  // this is for normal and commas mode
  createTagglyListNormal: function(place,title,useCommas,isTagExpr) {

    var list = config.taggly.getTiddlers(title,this.getTagglyOpt(title,"sortBy"),isTagExpr);

    if (this.getTagglyOpt(title,"sortOrder") == "desc")
      list = list.reverse();

    var output = [];
    var first = true;
    for (var i=0;i<list.length;i++) {
      if (this.notHidden(list[i],title)) {
        var countString = this.getTaggingCount(list[i].title);
        var excerpt = this.getExcerpt(title,list[i].title);
        if (useCommas)
          output.push((first ? "" : ", ") + "[[" + list[i].title + "]]" + countString + excerpt);
        else
          output.push("*[[" + list[i].title + "]]" + countString + excerpt + "\n");

        first = false;
      }
    }

    return this.drawTable(place,
      this.makeColumns(output,useCommas ? 1 : parseInt(this.getTagglyOpt(title,"numCols"))),
      useCommas ? "commas" : "normal");
  },

  // this is for the "grouped" mode
  createTagglyListGrouped: function(place,title,isTagExpr) {
    var sortBy = this.getTagglyOpt(title,"sortBy");
    var sortOrder = this.getTagglyOpt(title,"sortOrder");

    var list = config.taggly.getTiddlers(title,sortBy,isTagExpr);

    if (sortOrder == "desc")
      list = list.reverse();

    var leftOvers = []
    for (var i=0;i<list.length;i++)
      leftOvers.push(list[i].title);

    var allTagsHolder = {};
    for (var i=0;i<list.length;i++) {
      for (var j=0;j<list[i].tags.length;j++) {

        if (list[i].tags[j] != title) { // not this tiddler

          if (this.notHidden(list[i].tags[j],title)) {

            if (!allTagsHolder[list[i].tags[j]])
              allTagsHolder[list[i].tags[j]] = "";

            if (this.notHidden(list[i],title)) {
              allTagsHolder[list[i].tags[j]] += "**[["+list[i].title+"]]"
                    + this.getTaggingCount(list[i].title) + this.getExcerpt(title,list[i].title) + "\n";

              leftOvers.setItem(list[i].title,-1); // remove from leftovers. at the end it will contain the leftovers

            }
          }
        }
      }
    }

    var allTags = [];
    for (var t in allTagsHolder)
      allTags.push(t);

    var sortHelper = function(a,b) {
      if (a == b) return 0;
      if (a < b) return -1;
      return 1;
    };

    allTags.sort(function(a,b) {
      var tidA = store.getTiddler(a);
      var tidB = store.getTiddler(b);
      if (sortBy == "title") return sortHelper(a,b);
      else if (!tidA && !tidB) return 0;
      else if (!tidA) return -1;
      else if (!tidB) return +1;
      else return sortHelper(tidA[sortBy],tidB[sortBy]);
    });

    var leftOverOutput = "";
    for (var i=0;i<leftOvers.length;i++)
      if (this.notHidden(leftOvers[i],title))
        leftOverOutput += "*[["+leftOvers[i]+"]]" + this.getTaggingCount(leftOvers[i]) + this.getExcerpt(title,leftOvers[i]) + "\n";

    var output = [];

    if (sortOrder == "desc")
      allTags.reverse();
    else if (leftOverOutput != "")
      // leftovers first...
      output.push(leftOverOutput);

    for (var i=0;i<allTags.length;i++)
      if (allTagsHolder[allTags[i]] != "")
        output.push("*[["+allTags[i]+"]]" + this.getTaggingCount(allTags[i]) + this.getExcerpt(title,allTags[i]) + "\n" + allTagsHolder[allTags[i]]);

    if (sortOrder == "desc" && leftOverOutput != "")
      // leftovers last...
      output.push(leftOverOutput);

    return this.drawTable(place,
        this.makeColumns(output,parseInt(this.getTagglyOpt(title,"numCols"))),
        "grouped");

  },

  // used to build site map
  treeTraverse: function(title,depth,sortBy,sortOrder,isTagExpr) {

    var list = config.taggly.getTiddlers(title,sortBy,isTagExpr);

    if (sortOrder == "desc")
      list.reverse();

    var indent = "";
    for (var j=0;j<depth;j++)
      indent += "*"

    var childOutput = "";

    if (depth > this.config.siteMapDepthLimit)
      childOutput += indent + this.lingo.tooDeepMessage + "\n";
    else
      for (var i=0;i<list.length;i++)
        if (list[i].title != title)
          if (this.notHidden(list[i].title,this.config.inTiddler))
            childOutput += this.treeTraverse(list[i].title,depth+1,sortBy,sortOrder,false);

    if (depth == 0)
      return childOutput;
    else
      return indent + "[["+title+"]]" + this.getTaggingCount(title) + this.getExcerpt(this.config.inTiddler,title,depth) + "\n" + childOutput;
  },

  // this if for the site map mode
  createTagglyListSiteMap: function(place,title,isTagExpr) {
    this.config.inTiddler = title; // nasty. should pass it in to traverse probably
    var output = this.treeTraverse(title,0,this.getTagglyOpt(title,"sortBy"),this.getTagglyOpt(title,"sortOrder"),isTagExpr);
    return this.drawTable(place,
        this.makeColumns(output.split(/(?=^\*\[)/m),parseInt(this.getTagglyOpt(title,"numCols"))), // regexp magic
        "sitemap"
        );
  },

  macros: {
    tagglyTagging: {
      handler: function (place,macroName,params,wikifier,paramString,tiddler) {
        var parsedParams = paramString.parseParams("tag",null,true);
        var refreshContainer = createTiddlyElement(place,"div");

        // do some refresh magic to make it keep the list fresh - thanks Saq
        refreshContainer.setAttribute("refresh","macro");
        refreshContainer.setAttribute("macroName",macroName);

        var tag = getParam(parsedParams,"tag");
        var expr = getParam(parsedParams,"expr");

        if (expr) {
          refreshContainer.setAttribute("isTagExpr","true");
          refreshContainer.setAttribute("title",expr);
          refreshContainer.setAttribute("showEmpty","true");
        }
        else {
          refreshContainer.setAttribute("isTagExpr","false");
          if (tag) {
                refreshContainer.setAttribute("title",tag);
            refreshContainer.setAttribute("showEmpty","true");
          }
          else {
                refreshContainer.setAttribute("title",tiddler.title);
            refreshContainer.setAttribute("showEmpty","false");
          }
        }
        this.refresh(refreshContainer);
      },

      refresh: function(place) {
        var title = place.getAttribute("title");
        var isTagExpr = place.getAttribute("isTagExpr") == "true";
        var showEmpty = place.getAttribute("showEmpty") == "true";
        jQuery(place).empty()
        jQuery(place).addClass("tagglyTagging");
        var countFound = config.taggly.getTiddlers(title,'title',isTagExpr).length
        if (countFound > 0 || showEmpty) {
          var lingo = config.taggly.lingo;
          config.taggly.createListControl(place,title,"hideState");
          if (config.taggly.getTagglyOpt(title,"hideState") == "show") {
            createTiddlyElement(place,"span",null,"tagglyLabel",
                isTagExpr ? lingo.labels.exprLabel.format([title]) : lingo.labels.label.format([title]));
            config.taggly.createListControl(place,title,"title");
            config.taggly.createListControl(place,title,"modified");
            config.taggly.createListControl(place,title,"created");
            config.taggly.createListControl(place,title,"listMode");
            config.taggly.createListControl(place,title,"excerpts");
            config.taggly.createListControl(place,title,"numCols");
            config.taggly.createTagglyList(place,title,isTagExpr);
            if (countFound == 0 && showEmpty)
              createTiddlyElement(place,"div",null,"tagglyNoneFound",lingo.labels.noneFound);
          }
        }
      }
    }
  },

  // todo fix these up a bit
  styles: [
"/*{{{*/",
"/* created by TagglyTaggingPlugin */",
".tagglyTagging { padding-top:0.5em; }",
".tagglyTagging li.listTitle { display:none; }",
".tagglyTagging ul {",
" margin-top:0px; padding-top:0.5em; padding-left:2em;",
" margin-bottom:0px; padding-bottom:0px;",
"}",
".tagglyTagging { vertical-align: top; margin:0px; padding:0px; }",
".tagglyTagging table { margin:0px; padding:0px; }",
".tagglyTagging .button { visibility:hidden; margin-left:3px; margin-right:3px; }",
".tagglyTagging .button, .tagglyTagging .hidebutton {",
" color:[[ColorPalette::TertiaryLight]]; font-size:90%;",
" border:0px; padding-left:0.3em;padding-right:0.3em;",
"}",
".tagglyTagging .button:hover, .hidebutton:hover, ",
".tagglyTagging .button:active, .hidebutton:active  {",
" border:0px; background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]];",
"}",
".selected .tagglyTagging .button { visibility:visible; }",
".tagglyTagging .hidebutton { color:[[ColorPalette::Background]]; }",
".selected .tagglyTagging .hidebutton { color:[[ColorPalette::TertiaryLight]] }",
".tagglyLabel { color:[[ColorPalette::TertiaryMid]]; font-size:90%; }",
".tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }",
".tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}",
".tagglyTagging ul ul li {margin-left:0.5em; }",
".editLabel { font-size:90%; padding-top:0.5em; }",
".tagglyTagging .commas { padding-left:1.8em; }",
"/* not technically tagglytagging but will put them here anyway */",
".tagglyTagged li.listTitle { display:none; }",
".tagglyTagged li { display: inline; font-size:90%; }",
".tagglyTagged ul { margin:0px; padding:0px; }",
".excerpt { color:[[ColorPalette::TertiaryDark]]; }",
".excerptIndent { margin-left:4em; }",
"div.tagglyTagging table,",
"div.tagglyTagging table tr,",
"td.tagglyTagging",
" {border-style:none!important; }",
".tagglyTagging .contents { border-bottom:2px solid [[ColorPalette::TertiaryPale]]; padding:0 1em 1em 0.5em;",
"  margin-bottom:0.5em; }",
".tagglyTagging .indent1  { margin-left:3em;  }",
".tagglyTagging .indent2  { margin-left:4em;  }",
".tagglyTagging .indent3  { margin-left:5em;  }",
".tagglyTagging .indent4  { margin-left:6em;  }",
".tagglyTagging .indent5  { margin-left:7em;  }",
".tagglyTagging .indent6  { margin-left:8em;  }",
".tagglyTagging .indent7  { margin-left:9em;  }",
".tagglyTagging .indent8  { margin-left:10em; }",
".tagglyTagging .indent9  { margin-left:11em; }",
".tagglyTagging .indent10 { margin-left:12em; }",
".tagglyNoneFound { margin-left:2em; color:[[ColorPalette::TertiaryMid]]; font-size:90%; font-style:italic; }",
"/*}}}*/",
    ""].join("\n"),

  init: function() {
    merge(config.macros,this.macros);
    config.shadowTiddlers["TagglyTaggingStyles"] = this.styles;
    store.addNotification("TagglyTaggingStyles",refreshStyles);
  }
};

config.taggly.init();

//}}}

/***
InlineSlidersPlugin
By Saq Imtiaz
http://tw.lewcid.org/sandbox/#InlineSlidersPlugin

// syntax adjusted to not clash with NestedSlidersPlugin
// added + syntax to start open instead of closed

***/
//{{{
config.formatters.unshift( {
  name: "inlinesliders",
  // match: "\\+\\+\\+\\+|\\<slider",
  match: "\\<slider",
  // lookaheadRegExp: /(?:\+\+\+\+|<slider) (.*?)(?:>?)\n((?:.|\n)*?)\n(?:====|<\/slider>)/mg,
  lookaheadRegExp: /(?:<slider)(\+?) (.*?)(?:>)\n((?:.|\n)*?)\n(?:<\/slider>)/mg,
  handler: function(w) {
    this.lookaheadRegExp.lastIndex = w.matchStart;
    var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
    if(lookaheadMatch && lookaheadMatch.index == w.matchStart ) {
      var btn = createTiddlyButton(w.output,lookaheadMatch[2] + " "+"\u00BB",lookaheadMatch[2],this.onClickSlider,"button sliderButton");
      var panel = createTiddlyElement(w.output,"div",null,"sliderPanel");
      panel.style.display = (lookaheadMatch[1] == '+' ? "block" : "none");
      wikify(lookaheadMatch[3],panel);
      w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
    }
   },
   onClickSlider : function(e) {
    if(!e) var e = window.event;
    var n = this.nextSibling;
    n.style.display = (n.style.display=="none") ? "block" : "none";
    return false;
  }
});

//}}}
<html><i class="icon-pencil"></i></html>
/%
!info
|Name|ToggleFullScreen|
|Source|http://www.TiddlyTools.com/#ToggleFullScreen|
|Version|2.1.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|Create a link that shows/hides sidebars and page headers|
Usage
<<<
{{{
<<tiddler ToggleFullScreen>>
<<tiddler ToggleFullScreen with: label altlabel>>
}}}
embeds a command link into content, where:
*''label'' (optional, default={{{fullscreen}}})<br>command text
*''altlabel'' (optional, default={{{restore}}})<br>alternative command text shown when full screen is enabled
You can also enable/disable full screen immediately (without clicking a command link) by embedding the one of the following directly in your content:
{{{
<<tiddler ToggleFullScreen##ON>>
<<tiddler ToggleFullScreen##OFF>>
}}}
<<<
Example
<<<
{{{<<tiddler ToggleFullScreen with: fullscreen restore>>}}}
<<tiddler ToggleFullScreen##show with: fullscreen restore>>
<<<
Revisions
<<<
2011.05.13 2.1.0 refactored code and restored "##ON" and "#OFF" usage
2010.xx.xx 2.0.1 converted to transclusion
2008.10.13 1.1.3 re-written to support bookmarklet usage
2008.01.20 1.0.0 created (inline script)
<<<
!end

!code
<<tiddler {{
window.setFullScreen = function(fs) {
	var co=config.options; var cm=config.macros;
	cm.option.propagateOption('chkFullScreen','checked',fs,'input');

	var showmm=!fs && co.chkShowLeftSidebar!==false;
	var showsb=!fs && co.chkShowRightSidebar!==false;
	var showcrumbs=!fs && co.chkShowBreadcrumbs!==false
		&& cm.breadcrumbs && cm.breadcrumbs.crumbs.length;
	var showstorymenu=!fs;

	var da=document.getElementById('displayArea');
	var cw=document.getElementById('contentWrapper');
	var mm=document.getElementById('mainMenu');
	var sb=document.getElementById('sidebar');
	var sm=document.getElementById('storyMenu');
	var bc=document.getElementById('breadCrumbs');

	if (cw){ // toggle page header
		var elems=cw.getElementsByTagName('*');
		for (var i=0; i<elems.length; i++) if (hasClass(elems[i],'header')) 
			{ elems[i].style.display=fs?'none':'block'; break; }
	}
	if (mm) { // toggle MainMenu
		mm.style.display=showmm?'block':'none';
		da.style.marginLeft=showmm?(co.txtDisplayAreaLeftMargin||''):'1em';
	}
	if (sb) { // toggle sidebar
		sb.style.display=showsb?'block':'none';
		da.style.marginRight=showsb?(co.txtDisplayAreaRightMargin||''):'1em';
	}
	if (sm) sm.style.display=showstorymenu?'block':'none';	// toggle StoryMenu
	if (bc) bc.style.display=showcrumbs?'block':'none';	// toggle BreadCrumbsPlugin

	var b=document.getElementById('restoreFromFullscreenButton'); if (b) removeNode(b);
	if (fs) { 
		setStylesheet(store.getTiddlerText('ToggleFullScreen##styles'),'fullScreenStyles');
		var b=createTiddlyElement(null,'span','restoreFromFullscreenButton','selected');
		b.innerHTML='&loz;';
		b.title='RESTORE: redisplay page header, menu and sidebar';
		b.onclick=function(ev){return window.setFullScreen(false);};
		document.body.insertBefore(b,null);
	}
	return false;
};
'';}}>>
!end

!styles
#restoreFromFullscreenButton {
	position:fixed; top:.3em; right:.3em; z-index:10001;
	cursor:pointer; font-size:8pt; color:ButtonText !important;
	border:2px outset ButtonFace; padding:0px 3px;
	background-color:ButtonFace; -moz-appearance:button;
}
!end

!ON
<<tiddler ToggleFullScreen##code>><<tiddler {{window.setFullScreen(true);'';}}>>
!end

!OFF
<<tiddler ToggleFullScreen##code>><<tiddler {{window.setFullScreen(false);'';}}>>
!end

!show
<<tiddler ToggleFullScreen##code>><html><nowiki>
<a href='javascript:;' title="FULLSCREEN: toggle sidebars and page header"
onmouseover="
	this.href='javascript:void(eval(decodeURIComponent(%22(function(){try{('
	+encodeURIComponent(encodeURIComponent(this.onclick))
	+')()}catch(e){alert(e.description?e.description:e.toString())}})()%22)))';"
onclick="
	window.setFullScreen(!config.options.chkFullScreen); // toggle setting
	this.innerHTML=!config.options.chkFullScreen?'$1':'$2'; // set command text
	return false;
">$1</a></html>
!end

%/<<tiddler {{var src='ToggleFullScreen'; src+(tiddler&&tiddler.title==src?'##info':'##show');}}
with:	{{'$'+'1'!='$1'?'$1':'fullscreen'}}
	{{'$'+'2'!='$2'?'$2':'restore'}}>>
/***
|Name:|ToggleTagPlugin|
|Description:|Makes a checkbox which toggles a tag in a tiddler|
|Version:|3.1.0a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#ToggleTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Usage
{{{<<toggleTag }}}//{{{TagName TiddlerName LabelText}}}//{{{>>}}}
* TagName - the tag to be toggled, default value "checked"
* TiddlerName - the tiddler to toggle the tag in, default value the current tiddler
* LabelText - the text (gets wikified) to put next to the check box, default value is '{{{[[TagName]]}}}' or '{{{[[TagName]] [[TiddlerName]]}}}'
(If a parameter is '.' then the default will be used)
* TouchMod flag - if non empty then touch the tiddlers mod date. Note, can set config.toggleTagAlwaysTouchModDate to always touch mod date
!!Examples
|Code|Description|Example|h
|{{{<<toggleTag>>}}}|Toggles the default tag (checked) in this tiddler|<<toggleTag>>|
|{{{<<toggleTag TagName>>}}}|Toggles the TagName tag in this tiddler|<<toggleTag TagName>>|
|{{{<<toggleTag TagName TiddlerName>>}}}|Toggles the TagName tag in the TiddlerName tiddler|<<toggleTag TagName TiddlerName>>|
|{{{<<toggleTag TagName TiddlerName 'click me'>>}}}|Same but with custom label|<<toggleTag TagName TiddlerName 'click me'>>|
|{{{<<toggleTag . . 'click me'>>}}}|dot means use default value|<<toggleTag . . 'click me'>>|
!!Notes
* If TiddlerName doesn't exist it will be silently created
* Set label to '-' to specify no label
* See also http://mgtd-alpha.tiddlyspot.com/#ToggleTag2
!!Known issues
* Doesn't smoothly handle the case where you toggle a tag in a tiddler that is current open for editing
* Should convert to use named params
***/
//{{{

if (config.toggleTagAlwaysTouchModDate == undefined) config.toggleTagAlwaysTouchModDate = false;

merge(config.macros,{

  toggleTag: {

    createIfRequired: true,
    shortLabel: "[[%0]]",
    longLabel: "[[%0]] [[%1]]",

    handler: function(place,macroName,params,wikifier,paramString,tiddler) {
      var tiddlerTitle = tiddler ? tiddler.title : '';
      var tag   = (params[0] && params[0] != '.') ? params[0] : "checked";
      var title = (params[1] && params[1] != '.') ? params[1] : tiddlerTitle;
      var defaultLabel = (title == tiddlerTitle ? this.shortLabel : this.longLabel);
      var label = (params[2] && params[2] != '.') ? params[2] : defaultLabel;
      var touchMod = (params[3] && params[3] != '.') ? params[3] : "";
      label = (label == '-' ? '' : label); // dash means no label
      var theTiddler = (title == tiddlerTitle ? tiddler : store.getTiddler(title));
      var cb = createTiddlyCheckbox(place, label.format([tag,title]), theTiddler && theTiddler.isTagged(tag), function(e) {
        if (!store.tiddlerExists(title)) {
          if (config.macros.toggleTag.createIfRequired) {
            var content = store.getTiddlerText(title); // just in case it's a shadow
            store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);
          }
          else
            return false;
        }
        if ((touchMod != "" || config.toggleTagAlwaysTouchModDate) && theTiddler)
            theTiddler.modified = new Date();
        store.setTiddlerTag(title,this.checked,tag);
        return true;
      });
    }
  }
});

//}}}

/***
Description: Contains the stuff you need to use Tiddlyspot
Note, you also need UploadPlugin, PasswordOptionPlugin and LoadRemoteFileThroughProxy
from http://tiddlywiki.bidix.info for a complete working Tiddlyspot site.
***/
//{{{

// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'energiewiki';

// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)
window.showBackstage = true; // show backstage too

// disable autosave in d3
if (window.location.protocol != "file:")
	config.options.chkGTDLazyAutoSave = false;

// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
	SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
	SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
	OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
	DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[WelcomeToTiddlyspot]] ");
	MainMenu = MainMenu.replace(/^/,"[[WelcomeToTiddlyspot]] ");
}

// create some shadow tiddler content
merge(config.shadowTiddlers,{

'TspotControls':[
 "| tiddlyspot password:|<<option pasUploadPassword>>|",
 "| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<br>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",
 "| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[blog|http://tiddlyspot.blogspot.com/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"
].join("\n"),

'TspotOptions':[
 "tiddlyspot password:",
 "<<option pasUploadPassword>>",
 ""
].join("\n"),

'TspotSidebar':[
 "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"
].join("\n"),

'WelcomeToTiddlyspot':[
 "This document is a ~TiddlyWiki from tiddlyspot.com.  A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below.  Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
 "<<tiddler TspotControls>>",
 "See also GettingStarted.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick.  You can make changes and save them locally without being connected to the Internet.  When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]].  Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help.  If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site.  Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."
].join("\n")

});
//}}}
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 26/04/2019 21:46:49 | RVO | [[/|http://energiewiki.tiddlyspot.com/#C.Buurt]] | [[store.cgi|http://energiewiki.tiddlyspot.com/store.cgi]] | . | [[index.html | http://energiewiki.tiddlyspot.com/index.html]] | . |
| 27/04/2019 00:12:46 | RVO | [[/|http://energiewiki.tiddlyspot.com/#B.Gemeente]] | [[store.cgi|http://energiewiki.tiddlyspot.com/store.cgi]] | . | [[index.html | http://energiewiki.tiddlyspot.com/index.html]] | . |
| 27/04/2019 08:08:46 | RVO | [[/|http://energiewiki.tiddlyspot.com/#Huishoudens]] | [[store.cgi|http://energiewiki.tiddlyspot.com/store.cgi]] | . | [[index.html | http://energiewiki.tiddlyspot.com/index.html]] | . | failed |
| 27/04/2019 08:09:21 | RVO | [[/|http://energiewiki.tiddlyspot.com/#Huishoudens]] | [[store.cgi|http://energiewiki.tiddlyspot.com/store.cgi]] | . | [[index.html | http://energiewiki.tiddlyspot.com/index.html]] | . |
| 27/04/2019 09:30:12 | RVO | [[/|http://energiewiki.tiddlyspot.com/]] | [[store.cgi|http://energiewiki.tiddlyspot.com/store.cgi]] | . | [[index.html | http://energiewiki.tiddlyspot.com/index.html]] | . | failed |
| 27/04/2019 09:30:36 | RVO | [[/|http://energiewiki.tiddlyspot.com/]] | [[store.cgi|http://energiewiki.tiddlyspot.com/store.cgi]] | . | [[index.html | http://energiewiki.tiddlyspot.com/index.html]] | . | ok |
| 27/04/2019 09:48:31 | RVO | [[/|http://energiewiki.tiddlyspot.com/]] | [[store.cgi|http://energiewiki.tiddlyspot.com/store.cgi]] | . | [[index.html | http://energiewiki.tiddlyspot.com/index.html]] | . |
| 14/05/2019 07:54:28 | RVO | [[/|http://energiewiki.tiddlyspot.com/]] | [[store.cgi|http://energiewiki.tiddlyspot.com/store.cgi]] | . | [[index.html | http://energiewiki.tiddlyspot.com/index.html]] | . | ok |
| 14/05/2019 08:18:06 | RVO | [[/|http://energiewiki.tiddlyspot.com/]] | [[store.cgi|http://energiewiki.tiddlyspot.com/store.cgi]] | . | [[index.html | http://energiewiki.tiddlyspot.com/index.html]] | . |
| 08/07/2019 12:58:42 | RVO | [[/|http://energiewiki.tiddlyspot.com/#Aquathermie]] | [[store.cgi|http://energiewiki.tiddlyspot.com/store.cgi]] | . | [[index.html | http://energiewiki.tiddlyspot.com/index.html]] | . |
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.3|
|''Date:''|Feb 24, 2008|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 3,
	date: new Date("Feb 24, 2008"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'
};

//
// Environment
//

if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false;	// true to activate both in Plugin and UploadService
	
//
// Upload Macro
//

config.macros.upload = {
// default values
	defaultBackupDir: '',	//no backup
	defaultStoreScript: "store.php",
	defaultToFilename: "index.html",
	defaultUploadDir: ".",
	authenticateUser: true	// UploadService Authenticate User
};
	
config.macros.upload.label = {
	promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
	promptParamMacro: "Save and Upload this TiddlyWiki in %0",
	saveLabel: "save to web", 
	saveToDisk: "save to disk",
	uploadLabel: "upload"	
};

config.macros.upload.messages = {
	noStoreUrl: "No store URL in parmeters or options",
	usernameOrPasswordMissing: "Username or password missing"
};

config.macros.upload.handler = function(place,macroName,params) {
	if (readOnly)
		return;
	var label;
	if (document.location.toString().substr(0,4) == "http") 
		label = this.label.saveLabel;
	else
		label = this.label.uploadLabel;
	var prompt;
	if (params[0]) {
		prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0], 
			(params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]);
	} else {
		prompt = this.label.promptOption;
	}
	createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey);
};

config.macros.upload.action = function(params)
{
		// for missing macro parameter set value from options
		if (!params) params = {};
		var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl;
		var toFilename = params[1] ? params[1] : config.options.txtUploadFilename;
		var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir;
		var uploadDir = params[3] ? params[3] : config.options.txtUploadDir;
		var username = params[4] ? params[4] : config.options.txtUploadUserName;
		var password = config.options.pasUploadPassword; // for security reason no password as macro parameter	
		// for still missing parameter set default value
		if ((!storeUrl) && (document.location.toString().substr(0,4) == "http")) 
			storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript;
		if (storeUrl.substr(0,4) != "http")
			storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl;
		if (!toFilename)
			toFilename = bidix.basename(window.location.toString());
		if (!toFilename)
			toFilename = config.macros.upload.defaultToFilename;
		if (!uploadDir)
			uploadDir = config.macros.upload.defaultUploadDir;
		if (!backupDir)
			backupDir = config.macros.upload.defaultBackupDir;
		// report error if still missing
		if (!storeUrl) {
			alert(config.macros.upload.messages.noStoreUrl);
			clearMessage();
			return false;
		}
		if (config.macros.upload.authenticateUser && (!username || !password)) {
			alert(config.macros.upload.messages.usernameOrPasswordMissing);
			clearMessage();
			return false;
		}
		bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password); 
		return false; 
};

config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir) 
{
	if (!storeUrl)
		return null;
		var dest = bidix.dirname(storeUrl);
		if (uploadDir && uploadDir != '.')
			dest = dest + '/' + uploadDir;
		dest = dest + '/' + toFilename;
	return dest;
};

//
// uploadOptions Macro
//

config.macros.uploadOptions = {
	handler: function(place,macroName,params) {
		var wizard = new Wizard();
		wizard.createWizard(place,this.wizardTitle);
		wizard.addStep(this.step1Title,this.step1Html);
		var markList = wizard.getElement("markList");
		var listWrapper = document.createElement("div");
		markList.parentNode.insertBefore(listWrapper,markList);
		wizard.setValue("listWrapper",listWrapper);
		this.refreshOptions(listWrapper,false);
		var uploadCaption;
		if (document.location.toString().substr(0,4) == "http") 
			uploadCaption = config.macros.upload.label.saveLabel;
		else
			uploadCaption = config.macros.upload.label.uploadLabel;
		
		wizard.setButtons([
				{caption: uploadCaption, tooltip: config.macros.upload.label.promptOption, 
					onClick: config.macros.upload.action},
				{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel}
				
			]);
	},
	options: [
		"txtUploadUserName",
		"pasUploadPassword",
		"txtUploadStoreUrl",
		"txtUploadDir",
		"txtUploadFilename",
		"txtUploadBackupDir",
		"chkUploadLog",
		"txtUploadLogMaxLine"		
	],
	refreshOptions: function(listWrapper) {
		var opts = [];
		for(i=0; i<this.options.length; i++) {
			var opt = {};
			opts.push();
			opt.option = "";
			n = this.options[i];
			opt.name = n;
			opt.lowlight = !config.optionsDesc[n];
			opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n];
			opts.push(opt);
		}
		var listview = ListView.create(listWrapper,opts,this.listViewTemplate);
		for(n=0; n<opts.length; n++) {
			var type = opts[n].name.substr(0,3);
			var h = config.macros.option.types[type];
			if (h && h.create) {
				h.create(opts[n].colElements['option'],type,opts[n].name,opts[n].name,"no");
			}
		}
		
	},
	onCancel: function(e)
	{
		backstage.switchTab(null);
		return false;
	},
	
	wizardTitle: "Upload with options",
	step1Title: "These options are saved in cookies in your browser",
	step1Html: "<input type='hidden' name='markList'></input><br>",
	cancelButton: "Cancel",
	cancelButtonPrompt: "Cancel prompt",
	listViewTemplate: {
		columns: [
			{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
			{name: 'Option', field: 'option', title: "Option", type: 'String'},
			{name: 'Name', field: 'name', title: "Name", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'} 
			]}
};

//
// upload functions
//

if (!bidix.upload) bidix.upload = {};

if (!bidix.upload.messages) bidix.upload.messages = {
	//from saving
	invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki",
	backupSaved: "Backup saved",
	backupFailed: "Failed to upload backup file",
	rssSaved: "RSS feed uploaded",
	rssFailed: "Failed to upload RSS feed file",
	emptySaved: "Empty template uploaded",
	emptyFailed: "Failed to upload empty template file",
	mainSaved: "Main TiddlyWiki file uploaded",
	mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not been saved",
	//specific upload
	loadOriginalHttpPostError: "Can't get original file",
	aboutToSaveOnHttpPost: 'About to upload on %0 ...',
	storePhpNotFound: "The store script '%0' was not found."
};

bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password)
{
	var callback = function(status,uploadParams,original,url,xhr) {
		if (!status) {
			displayMessage(bidix.upload.messages.loadOriginalHttpPostError);
			return;
		}
		if (bidix.debugMode) 
			alert(original.substr(0,500)+"\n...");
		// Locate the storeArea div's 
		var posDiv = locateStoreArea(original);
		if((posDiv[0] == -1) || (posDiv[1] == -1)) {
			alert(config.messages.invalidFileError.format([localPath]));
			return;
		}
		bidix.upload.uploadRss(uploadParams,original,posDiv);
	};
	
	if(onlyIfDirty && !store.isDirty())
		return;
	clearMessage();
	// save on localdisk ?
	if (document.location.toString().substr(0,4) == "file") {
		var path = document.location.toString();
		var localPath = getLocalPath(path);
		saveChanges();
	}
	// get original
	var uploadParams = new Array(storeUrl,toFilename,uploadDir,backupDir,username,password);
	var originalPath = document.location.toString();
	// If url is a directory : add index.html
	if (originalPath.charAt(originalPath.length-1) == "/")
		originalPath = originalPath + "index.html";
	var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
	var log = new bidix.UploadLog();
	log.startUpload(storeUrl, dest, uploadDir,  backupDir);
	displayMessage(bidix.upload.messages.aboutToSaveOnHttpPost.format([dest]));
	if (bidix.debugMode) 
		alert("about to execute Http - GET on "+originalPath);
	var r = doHttp("GET",originalPath,null,null,username,password,callback,uploadParams,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

bidix.upload.uploadRss = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		if(status) {
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+destfile);
			bidix.upload.uploadMain(params[0],params[1],params[2]);
		} else {
			displayMessage(bidix.upload.messages.rssFailed);			
		}
	};
	// do uploadRss
	if(config.options.chkGenerateAnRssFeed) {
		var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
		var rssUploadParams = new Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
		var rssString = generateRss();
		// no UnicodeToUTF8 conversion needed when location is "file" !!!
		if (document.location.toString().substr(0,4) != "file")
			rssString = convertUnicodeToUTF8(rssString);	
		bidix.upload.httpUpload(rssUploadParams,rssString,callback,Array(uploadParams,original,posDiv));
	} else {
		bidix.upload.uploadMain(uploadParams,original,posDiv);
	}
};

bidix.upload.uploadMain = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		var log = new bidix.UploadLog();
		if(status) {
			// if backupDir specified
			if ((params[3]) && (responseText.indexOf("backupfile:") > -1))  {
				var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
				displayMessage(bidix.upload.messages.backupSaved,bidix.dirname(url)+'/'+backupfile);
			}
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.mainSaved,bidix.dirname(url)+'/'+destfile);
			store.setDirty(false);
			log.endUpload("ok");
		} else {
			alert(bidix.upload.messages.mainFailed);
			displayMessage(bidix.upload.messages.mainFailed);
			log.endUpload("failed");			
		}
	};
	// do uploadMain
	var revised = bidix.upload.updateOriginal(original,posDiv);
	bidix.upload.httpUpload(uploadParams,revised,callback,uploadParams);
};

bidix.upload.httpUpload = function(uploadParams,data,callback,params)
{
	var localCallback = function(status,params,responseText,url,xhr) {
		url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
		if (xhr.status == 404)
			alert(bidix.upload.messages.storePhpNotFound.format([url]));
		if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
			alert(responseText);
			if (responseText.indexOf("Debug mode") >= 0 )
				responseText = responseText.substring(responseText.indexOf("\n\n")+2);
		} else if (responseText.charAt(0) != '0') 
			alert(responseText);
		if (responseText.charAt(0) != '0')
			status = null;
		callback(status,params,responseText,url,xhr);
	};
	// do httpUpload
	var boundary = "---------------------------"+"AaB03x";	
	var uploadFormName = "UploadPlugin";
	// compose headers data
	var sheader = "";
	sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
	sheader += uploadFormName +"\"\r\n\r\n";
	sheader += "backupDir="+uploadParams[3] +
				";user=" + uploadParams[4] +
				";password=" + uploadParams[5] +
				";uploaddir=" + uploadParams[2];
	if (bidix.debugMode)
		sheader += ";debug=1";
	sheader += ";;\r\n"; 
	sheader += "\r\n" + "--" + boundary + "\r\n";
	sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n";
	sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n";
	sheader += "Content-Length: " + data.length + "\r\n\r\n";
	// compose trailer data
	var strailer = new String();
	strailer = "\r\n--" + boundary + "--\r\n";
	data = sheader + data + strailer;
	if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... ");
	var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; ;charset=UTF-8; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal = function(original, posDiv)
{
	if (!posDiv)
		posDiv = locateStoreArea(original);
	if((posDiv[0] == -1) || (posDiv[1] == -1)) {
		alert(config.messages.invalidFileError.format([localPath]));
		return;
	}
	var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" +
				store.allTiddlersAsHtml() + "\n" +
				original.substr(posDiv[1]);
	var newSiteTitle = getPageTitle().htmlEncode();
	revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
	revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
	revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
	revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
	revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
	return revised;
};

//
// UploadLog
// 
// config.options.chkUploadLog :
//		false : no logging
//		true : logging
// config.options.txtUploadLogMaxLine :
//		-1 : no limit
//      0 :  no Log lines but UploadLog is still in place
//		n :  the last n lines are only kept
//		NaN : no limit (-1)

bidix.UploadLog = function() {
	if (!config.options.chkUploadLog) 
		return; // this.tiddler = null
	this.tiddler = store.getTiddler("UploadLog");
	if (!this.tiddler) {
		this.tiddler = new Tiddler();
		this.tiddler.title = "UploadLog";
		this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |";
		this.tiddler.created = new Date();
		this.tiddler.modifier = config.options.txtUserName;
		this.tiddler.modified = new Date();
		store.addTiddler(this.tiddler);
	}
	return this;
};

bidix.UploadLog.prototype.addText = function(text) {
	if (!this.tiddler)
		return;
	// retrieve maxLine when we need it
	var maxLine = parseInt(config.options.txtUploadLogMaxLine,10);
	if (isNaN(maxLine))
		maxLine = -1;
	// add text
	if (maxLine != 0) 
		this.tiddler.text = this.tiddler.text + text;
	// Trunck to maxLine
	if (maxLine >= 0) {
		var textArray = this.tiddler.text.split('\n');
		if (textArray.length > maxLine + 1)
			textArray.splice(1,textArray.length-1-maxLine);
			this.tiddler.text = textArray.join('\n');		
	}
	// update tiddler fields
	this.tiddler.modifier = config.options.txtUserName;
	this.tiddler.modified = new Date();
	store.addTiddler(this.tiddler);
	// refresh and notifiy for immediate update
	story.refreshTiddler(this.tiddler.title);
	store.notify(this.tiddler.title, true);
};

bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir,  backupDir) {
	if (!this.tiddler)
		return;
	var now = new Date();
	var text = "\n| ";
	var filename = bidix.basename(document.location.toString());
	if (!filename) filename = '/';
	text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
	text += config.options.txtUserName + " | ";
	text += "[["+filename+"|"+location + "]] |";
	text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
	text += uploadDir + " | ";
	text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
	text += backupDir + " |";
	this.addText(text);
};

bidix.UploadLog.prototype.endUpload = function(status) {
	if (!this.tiddler)
		return;
	this.addText(" "+status+" |");
};

//
// Utilities
// 

bidix.checkPlugin = function(plugin, major, minor, revision) {
	var ext = version.extensions[plugin];
	if (!
		(ext  && 
			((ext.major > major) || 
			((ext.major == major) && (ext.minor > minor))  ||
			((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) {
			// write error in PluginManager
			if (pluginInfo)
				pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision);
			eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined"
	}
};

bidix.dirname = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(0, lastpos);
	} else {
		return filePath.substring(0, filePath.lastIndexOf("\\"));
	}
};

bidix.basename = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("#")) != -1) 
		filePath = filePath.substring(0, lastpos);
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(lastpos + 1);
	} else
		return filePath.substring(filePath.lastIndexOf("\\")+1);
};

bidix.initOption = function(name,value) {
	if (!config.options[name])
		config.options[name] = value;
};

//
// Initializations
//

// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);

// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles");

//optionsDesc
merge(config.optionsDesc,{
	txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
	txtUploadFilename: "Filename of the uploaded file (default: in index.html)",
	txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))",
	txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))",
	txtUploadUserName: "Upload Username",
	pasUploadPassword: "Upload Password",
	chkUploadLog: "do Logging in UploadLog (default: true)",
	txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"
});

// Options Initializations
bidix.initOption('txtUploadStoreUrl','');
bidix.initOption('txtUploadFilename','');
bidix.initOption('txtUploadDir','');
bidix.initOption('txtUploadBackupDir','');
bidix.initOption('txtUploadUserName','');
bidix.initOption('pasUploadPassword','');
bidix.initOption('chkUploadLog',true);
bidix.initOption('txtUploadLogMaxLine','10');


// Backstage
merge(config.tasks,{
	uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'}
});
config.backstageTasks.push("uploadOptions");


//}}}

!Beschrijving kaarten 

!!Geografische ligging Utiliteitsbouw
Op de Activiteiten kaart van de u-bouw staan de volgende gegevens 
| Aantal | Type |h
| 333|RWZI |
| 290|kantoren met meer dan 500 werknemers |
| 220|koelhuizen |
| 1325|onderwijs instituten en scholen |
| 3133|supermarkten en warenhuizen met meer dan 10 werknemers |
| 533|ziekenhuizen en zorginstellingen |
| 496|zwembaden |

Bron: Lisa en Bridgis.

De grootteklasse van een bedrijf geeft het aantal werknemers weer, wat een indicatie is voor de totale warmtevraag. Deze worden zichtbaar na muis klik op het bedrijf.
1 = 0 personen
2 = 1 persoon
3 = 2-4 personen
4 = 5-9 personen
5 = 10-19 personen
6 = 20-49 personen
7 = 50-99 personen
8 = 100-199 personen
9 = 200-499 personen
10= 500-799 personen
11= 800-1000 personen
12= >1000 personen

!!Warmte gebruik Utiliteitskaart
De kaart is de totale warmte vraag per hectare land per jaar in (GJ/(ha.jaar)) van de aanwezige Utiliteitsbouw per buurt. Niet van alle buurten in Nederland zijn gegevens beschikbaar.

Bron: Alliander

!Energie gebruik
Status finaal energie gebruik per sector is te vinden in de [[nationale energiebalans @CBSStatline | http://statline.cbs.nl/Statweb/publication/?DM=SLNL&PA=70846NED&D1=0-1%2c8%2c24-25%2c34-37&D2=20&D3=6-7%2c27%2c32-33&D4=17-18&VW=T]]

Hieronder staat een overzicht van het gemiddelde energie gebruik per type Utiliteitsbouw.($1 MJ=10^6 J$)
<html><DIV align=center><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/31576632"></DIV></html>
Bron: Meijer Energie & Milieumanagement B.V., 2008                                                                                               

!Energie besparing
Mogelijke besparingsmaatregelen voor utiliteitsbouw worden besproken in:
*  [[Energie besparingsverkenner | http://www.rvo.nl/onderwerpen/duurzaam-ondernemen/gebouwen/duurzame-gebouwen/gebouwfasen/beheer-en-onderhoud/gebouwgebonden-energie/energiebesparingsverkenner-utiliteitsbouw]]
* [[Isolatie Info | https://www.isolatie.net/]]
!Meer info
* [[Energievebruik in de Utiliteits sector | ftp://ftp.ecn.nl/pub/www/library/report/2014/v14011.pdf]]
Een overzicht van het type energievraag voor de verschillende sectoren:
|!Sector|>|>|>|!Warmtevraag|!Stroomvraag|
|~|<55 C|55-120 C|120-240 C|>240 C|~|
|[[Huishoudens]] | x | | | | x |
|[[Utiliteitsbouw]] | x | ||| x |
|[[Glastuinbouw]] | x | || | x |
|[[Industrie]] |  x | x | x | x | x |
! WMS en WFS Attributen

Behorende bij WarmteAtlas WMS en WFS-service: 
> http://agentschapnl.kaartenbalie.nl/cgi-bin/mapserv?map=/srv/maps/agentschapnl/RVO_WarmteAtlas.map&

|	Attribuutnaam	|	Beschrijving	|	Eenheid	|	Toelichting	|	Gebiedsindeling	|h
|	''@@color: green;Statistiek @@''		|		|		|		|		|
|	ROWID	|		|		|		|		|
|	PK_UID	|		|		|		|		|
|	GWBCODE	|	Gemeente code	|		|		|	Gemeente, Buurt	|
|	PROVINCIE	|	provincie naam	|		|		|	Gemeente	|
|	GEMNAAM	|	Gemeente naam	|		|		|	Gemeente	|
|	GWBNAAM	|	Gemeente of Buurt naam	|		|		|	Gemeente, Buurt	|
|	GWB	|	G=Gemeente, B=Buurt	|		|		|	Gemeente, Buurt	|
|	OPP_TOT	|	Oppervlakte totaal	|	ha	|		|	Gemeente, Buurt	|
|	OPP_LAND	|	Oppervlakte land	|	ha	|		|	Gemeente, Buurt	|
|	OPP_WATER	|	Oppervlakte water	|	ha	|		|	Gemeente, Buurt	|
|	AANT_INW	|	aantal inwoners	|		|		|	Gemeente, Buurt	|
|	WONINGEN	|	aantal woningen	|		|		|	Gemeente, Buurt	|
|	AANT_HH	|	Aantal huishoudens	|		|		|	Gemeente, Buurt	|
|	GEM_HH_GR	|	Gemiddelde huishoudens grootte	|		|		|	Gemeente, Buurt	|
|	BEV_DICHTH	|	Bevolkings dichtheid	|	aantal/km2	|		|	Gemeente, Buurt	|
|	WON_OPP	|	Aantal woningen per oppervlakte	|	aantal/ha	|		|	Gemeente, Buurt	|
|	AUTO_OPP	|	Aantal auto's per oppervlakte	|	aantal/ha	|		|	Gemeente, Buurt	|
|	''@@color: red;ENERGIE VRAAG@@''	|		|		|		|	Gemeente	|
|	HH_EL_OPP	|	Huishoudelijk Elektriciteits verbruik per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|		|	Gemeente, Buurt	|
|	HH_GAS_OPP	|	Huishoudelijk gas verbruik per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Huishoudens]]	|	Gemeente, Buurt	|
|	HH_WA_OPP	|	Huishoudelijk warmte verbruik per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Huishoudens]]	|	Gemeente, Buurt	|
|	HH_EL_HH	|	Huishoudelijk Elektriciteits verbruik per huishouden	|	GJ/(ha.jaar)	|	[[Huishoudens]]	|	Gemeente	|
|	HH_WA_HH	|	Huishoudelijk warmte verbruik per huishouden	|	GJ/(ha.jaar)	|	[[Huishoudens]]	|	Gemeente	|
|	HH_WA_C_IN	|	CO2 emissie door Huishoudelijk warmte verbruik per inwoner	|	GJ/(ha.jaar)	|	[[Huishoudens]]	|	Gemeente	|
|	HH_EL_C_IN	|	CO2 emissie door Huishoudelijk elektriciteits verbruik per inwoner	|	GJ/(ha.jaar)	|	[[Huishoudens]]	|	Gemeente	|
|	HH_C_INW	|	Totaal CO2 emissie door huishoudelijk warmte en elektriciteits verbruik	|	GJ/(ha.jaar)	|	[[Huishoudens]]	|	Gemeente	|
|	WON_STV	|	Aantal aangesloten woningen op stadsverwarming	|		|	[[Huishoudens]]	|	Gemeente, Buurt	|
|	UTB_GAS_OP	|	Utiliteitsbouw Gas verbruik per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Utiliteitsbouw]]	|	Gemeente	|
|	UTB_WA_OPP	|	Utiliteitsbouw Warmte verbruik per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Utiliteitsbouw]]	|	Gemeente	|
|	UTB_EL_OPP	|	Utiliteitsbouw Elektriciteits verbruik per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Utiliteitsbouw]]	|	Gemeente	|
|	GTB_WA_OPP	|	Glastuinbouw Warmte verbruik per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Glastuinbouw]]	|	Gemeente	|
|	GTB_GAS_OP	|	Glastuinbouw Gas verbruik per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Glastuinbouw]]	|	Gemeente	|
|	GTB_EL_OPP	|	Glastuinbouw Elektrictieits vper OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Glastuinbouw]]	|	Gemeente	|
|	LB_EL_TJ	|	Land, akkerbouw, tuinbouw en veelteelt Elektriciteits verbruik	|	TJ/jaar	|	[[Landbouw en Veeteelt]]	|	Gemeente	|
|	IN_EL_TJ	|	Industrie elektriciteitsverbruik (incl delftstoffen)	|	TJ/jaar	|	[[Industrie]]	|	Gemeente	|
|	EP_EL_TJ	|	Energie sector elektriciteits verbruik	|	TJ/jaar	|	[[Energie]]	|	Gemeente	|
|	UTB_EL_TJ	|	Utiliteitsbouw elektriciteits verbruik	|	TJ/jaar	|	[[Utiliteitsbouw]]	|	Gemeente	|
|	HH_EL_TJ	|	Huishoudens elektriciteits verbruik	|	TJ/jaar	|	[[Huishoudens]]	|	Gemeente	|
|	TOT_EL_FI0	|	Totaal elektriciteits verbruik (Huishoudens, Industrie, Utiliteit en Land, akker, tuinbouw)	|	TJ/jaar	|		|	Gemeente	|
|	LB_GAS_TJ	|	Land, akkerbouw, tuinbouw en veelteelt gas verbruik	|	TJ/jaar	|	[[Landbouw en Veeteelt]]	|	Gemeente	|
|	IN_GAS_TJ	|	Industrie gas verbruik (incl delftstoffen)	|	TJ/jaar	|	[[Industrie]]	|	Gemeente	|
|	EP_GAS_TJ	|	Energie sector gas verbruik	|	TJ/jaar	|	[[Energie]]	|	Gemeente	|
|	UTB_GAS_TJ	|	Utiliteitsbouw gas verbruik	|	TJ/jaar	|	[[Utiliteitsbouw]]	|	Gemeente	|
|	HH_GAS_TJ	|	Huishoudens gas verbruik	|	TJ/jaar	|	[[Huishoudens]]	|	Gemeente	|
|	TOT_GAS_F0	|	Totaal gas verbruik (Huishoudens, Industrie, Utiliteit en Land, akker, tuinbouw)	|	TJ/jaar	|		|	Gemeente	|
|	TOT_TJ	|	Totaal gas en elektriciteits gebruik  (Huishoudens, Industrie, Utiliteit en Land, akker, tuinbouw)	|	TJ/jaar	|		|	Gemeente	|
|	''@@color: green;THEORETISCH POTENTIEEL@@''	|		|		|		|	Gemeente	|
|	GS_koud	|	Potentieel bodemopslag capaciteit voor koude uit vertikale warmtewisselaars voor warmtepompen per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Bodemopslag warmte en koude]]	|	Gemeente, Buurt	|
|	GS_warm	|	Potentieel bodemopslag capaciteit voor warmte uit  vertikale warmte wisselaars voor  warmtepompen per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Bodemopslag warmte en koude]]	|	Gemeente, Buurt	|
|	OS_koud	|	Potentieel bodemopslag capaciteit voor koude uit  open systeem (WKO) voor warmtepompen per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Bodemopslag warmte en koude]]	|	Gemeente, Buurt	|
|	OS_warm	|	Potentieel bodemopslag capaciteit voor warmte uit  open systeem (WKO) voor warmtepompen per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Bodemopslag warmte en koude]]	|	Gemeente, Buurt	|
|	GT_5500	|	Potentieel diepe geothermie op 5500 m diepte (175C productie en 80C retour) per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Geothermie:Diep]]	|	Gemeente, Buurt	|
|	GT_7500	|	Potentieel diepe geothermie op 7500 m diepte (225C productie en 80C retour) per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Geothermie:Diep]]	|	Gemeente, Buurt	|
|	GT_GBT	|	Kans geothermie glastuinbouw op 1500 - 5000 m diepte (45C-120C productie en 25C retour) per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Aardwarmte]]	|	Gemeente, Buurt	|
|	BG_AKKER_O	|	Potentieel biogas restafval akkerbouw per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Biogas]]	|	Gemeente	|
|	BG_MSTVL_O	|	Potentieel biogas vloeibaar mest per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Biogas]]	|	Gemeente	|
|	BG_GFT_OPP	|	Potentieel biogas GFT per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Biogas]]	|	Gemeente	|
|	BG_TOT_OPP	|	Potentieel biogas totaal per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Biogas]]	|	Gemeente	|
|	HH_SNOEI_O	|	Huishoudelijke snoeiafval per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Hout]]	|	Gemeente	|
|	HT_BOS_OPP	|	Potentieel hout uit bos per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Hout]]	|	Gemeente	|
|	HT_TOT_OPP	|	Totaal potentieel hout per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|	[[Hout]]	|	Gemeente	|
|	BIO_OLIEN	|	Potentieel Olien uit biorestanten akkerbouw per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|		|	Gemeente	|
|	BIO_PROTEI	|	Potentieel proteinen uit biorestanten akkerbouw per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|		|	Gemeente	|
|	BIO_SUIKER	|	Potentieel Suikers  uit biorestanten akkerbouw per OPP_LAND en per jaar	|	GJ/(ha.jaar)	|		|	Gemeente	|
!Wat is warmte-koude opslag?
!!Warmte en koude opslag (open systeem)
|vertical-align:top;padding:1em;<html><img src="https://www.pleio.nl/file/download/31102232" width="400" alt="Warmte-, en Koude opslag" /></html>|vertical-align:top;padding:1em;<html>Grondwater heeft in Nederland een constante temperatuur van 11 °C en de bodem is een ideale "thermos" om (zonne)warmte in te bewaren. Hierdoor kan het "koele" grondwater in de zomer worden gebruikt om woningen (passief) te koelen. Het opgewarmte grondwater wordt in de bodem opgeslaan om dit gedurende de koude winterdagen weer op te pompen en middels een warmtepomp op te waarderen tot een temperatuur van 50°C. Dit is voldoende voor het verwarmen van een woning met vloerverwarming.  Toepassing van de warmtepompen in de koudere winterdagen kost ongeveer 1/5 de van de totale energievraag. Daardoor worden in de praktijk energiebesparingen gerealiseerd van 40% bij verwarmen en 80% bij koelen. Dit verschil impliceert dat het grootste potentieel voor verduurzaming ligt bij open systemen in gebouwen met een grote koelvraag in de zomer; kantoren, supermarkten, ICT, koelhuizen, glastuinbouw. Deze zijn momenteel rendabel vanaf ongeveer 2500 m² oppervlakte, of vanaf ongeveer 100 woningen. Het grondwater komt maximaal van 250 meter diepte. Omdat het oppompen de kwaliteit en de stand van het grondwater kan veranderen is een vergunning Grondwaterwet nodig.</html>|

!!Vertikale warmtewisselaar (gesloten systeem)
|vertical-align:top;padding:1em;<html><img src="https://www.pleio.nl/file/download/31101122" width="400" alt="Vertikale warmtewisselaar" /></html>|vertical-align:top;padding:1em;<html>Een gesloten vertikaal bodemsysteem is een gesloten systeem dat warmte of koude aan de bodem onttrekt via gesloten lussen in boorgaten, meestal niet dieper dan 150 m. Deze lussen hebben een gering contactoppervlak met de bodem, waardoor vele boringen noodzakelijk zijn. Een voordeel is dat er geen vergunning nodig is daar er geen grondwater wordt opgepompt. Voor verwarmen wordt een warmtepomp gebruikt die de temperatuur verhoogt van 11 graden Celsius naar circa 50 graden Celsius. De energiebesparing bij gesloten systemen varieert van 25 tot 40%. Andere warmtebronnen voor warmtepompen zijn buitenlucht, ventilatielucht uit de bodem, oppervlaktewater en afvalwater.</html>|

!Wat is de Ambitie van Nederland?
De doelstelling van Nederland is 14% duurzame energie in 2020 en 16% duurzame energie in 2023. 
De huidige realisatie van duurzame energie is te vinden op [[Hernieuwbare energie; eindverbruik @CBSStatline | http://statline.cbs.nl/Statweb/publication/?DM=SLNL&PA=7516&D1=0-1&D2=a&D3=1-2&D4=22-23&VW=T]]

!Beschrijving potentieel kaarten
!!Potentieel warmte en koude opslag (open systeem)
De kaart geeft de maximale theoretische warmte of koude die de bodem kan opslaan en leveren tot een maximale diepte van 250 meter beneden maaiveld in GJ/(ha.jaar).

!!Potentieel kaart voor Vertikale warmtewisselaar (gesloten systeem)
In deze kaarten is de hoeveelheid koude of warmte weergegeven, uitgedrukt in gigajoules per hectare per jaar (GJ/ha per jaar), die middels een gesloten systeem gewonnen kan worden.

Bovenstaande kaarten (voor wko en vertikale warmtewisselaars) zijn gebaseerd op de ''bodemgegevens'' van het [[Nationaal Hydrologisch Instrumentarium (NHI)|http://www.nhi.nu/]] en ''grondwaterstandgegevens'' van TNO [[(REGIS II)|http://www.dinoloket.nl/]].
__Bron__: [[IF Technology | http://www.Iftechnology.nl]]

!Hoe zijn de potentieel kaarten berekend?
!!Warmte en koude opslag kaarten
Om te berekenen hoeveel warmte of koude per hectare per jaar de ondergrond maximaal kan leveren, zijn de volgende randvoorwaarden gebruikt. De randvoorwaarden maken het mogelijk om de energiehoeveelheden in de verschillende delen van Nederland met elkaar te vergelijken: 
Uitgegaan wordt van een doubletsysteem waarbij ’s zomers uit één koude bron wordt onttrokken en in één warme bron wordt geļnfiltreerd. ’s Winters gebeurt dit visa versa. 
Open systemen maken alleen gebruik van de zandpakketten in de ondergrond tot een maximale diepte van 250 meter beneden maaiveld. Voor de berekeningen is de totale beschikbare dikte (de verschillende pakketten opgeteld) meegenomen. 
De filters kunnen over 80% van de totale dikte van het pakket geplaatst worden. 
De bodem boven de gemiddelde grondwaterstand (REGIS) wordt niet meegenomen in de berekening. 
Uitgegaan wordt van een energiebalans. Het bodemenergiesysteem onttrekt evenveel warmte als koude aan de bodem. 
De onderlinge systemen hebben geen thermische interactie met elkaar. Dit houdt in dat tussen de verschillende bronnen minimaal twee maal de thermische straal zit. (zie figuur) 

<HTML><DIV align=left><IMG hspace=1 vspace=1 src="https://www.pleio.nl/file/download/31102322" width=200></DIV></HTML>

>$W = rcwQ(T_{productie}-T_{retour})$

Met cw = 4200 J/(kg.°C) , r= 1000 kg/m³ de dichtheid van water en ''(Tproductie-Tretour) ongeveer 6°C''.


In de berekeningen is uitgegaan van een maximale filterlengte van 80% van de totale pakketdikte. Van het pakket kan de helft (50%) voor koude- en de andere helft voor warmteopslag benut worden, per helft is uitgegaan van een maximaal benutbaar oppervlakte van 70%. Op basis van deze gegevens kan de een formule opgezet worden die de energiehoeveelheid per m³ bodem (en grondwater) berekend:

Bij het berekenen van de hoeveelheid energie is uitgegaan van de totale dikte van alle aanwezige pakketten. In de praktijk kan een pakket uitgesloten zijn voor de toepassing van open systemen. Een voorbeeld hiervan zijn de grondwaterbeschermingsgebieden. Met deze juridische en beleidsmatige beperkingen is geen rekening gehouden in de warmtekaart. 

>$W = rcwQ(T_{productie}-T_{retour})(0.28f)$ met f de porositeit=30%

In de berekening wordt uitgegaan van een doubletsysteem. Er bestaan echter meerdere typen open bodemenergiesystemen. Deze systemen kunnen een ander effectief gebruik van de ondergrond hebben. Verder is in de berekeningen uitgegaan dat 80% van de pakketdikte voor het filter gebruikt wordt. In de praktijk kan echter door aanwezigheid van lokale kleilagen (gestuwd gebied) minder filter geplaatst worden.

!!Berekening kaart warmte en koude middels Vertikale warmtewisselaar
Voor het berekenen van de energiehoeveelheid zijn enkele randvoorwaarden gebruikt. Door deze randvoorwaarden is het mogelijk om de energiehoeveelheden in de verschillende delen van Nederland met elkaar te vergelijken. Het gaat om de volgende randvoorwaarden: 
*Uitgegaan wordt van een onderlinge lusafstand van 10 m. Dit komt neer op 100 lussen per hectare. 
*De maximale diepte per lus waarmee gerekend is, is 150 meter beneden maaiveld. 
*Voor het berekenen van de energielevering van de ondergrond is uitgegaan van een standaard woning met 1.500 uur aan warmtevraag (6,4 MWh), bestaande uit 800 uur aan ruimteverwarming en 700 uur aan tapwaterverwarming, en 600 uur aan koudevraag (1,3 MWh). De kengetallen zijn gebaseerd op de NEN 5128 en de referentiewoning van AgentschapNL. 
Met behulp van het rekenprogramma EED¹ is bepaald wat de ondergrond per hectare kan leveren. Gekeken is naar drie typen ondergrond: Zand onder de grondwaterstand. Zand onder de grondwaterstand levert per meter bodemlus 11,0 GJ/ha warmte en 3,2 GJ/ha koude. Klei onder grondwaterstand. Klei onder de grondwaterstand levert per meter bodemlus 10,0 GJ/ha warmte en 3,0 GJ/ha koude. Zand boven de grondwaterstand. Door de afwezigheid van water is de energielevering van zand boven de grondwaterstand lager dan van zand onder de grondwaterstand. Dit zand levert 7,6 GJ/ha per meter bodemlus warmte en 2,2 GJ/ha per meter bodemlus koude. 

Met deze gegevens van de ondergrond kan vervolgens de energiehoeveelheid per hectare worden berekend.

Uitgegaan is dat de ondergrond bestaat uit zand en kleilagen. Naast het zand en klei in de ondergrond kunnen ook andere grondsoorten voorkomen (veen, leem). Deze grondsoorten hebben andere warmtegeleiding en -capaciteitsgetallen, waardoor de energiehoeveelheid beschikbaar in de ondergrond in de praktijk kan variėren. Deze grondsoorten komen echter in beperkte mate in de Nederlandse ondergrond voor waardoor het effect op de totale energiehoeveelheid te verwaarlozen is. 

De maximale diepte is nu beperkt tot 150 meter beneden maaiveld. Het is mogelijk dat in de toekomst de bodemlussen tot grotere diepte gerealiseerd kunnen worden. Hierdoor zal de beschikbare energiehoeveelheid die uit de ondergrond gehaald kan worden toenemen. 
¹ EED; Earth Energy Designer, ontwikkeld door onder andere Lund University in Zweden. 

!Wat is de Ambitie van Nederland?
De doelstelling van Nederland is 14% duurzame energie in 2020 en 16% duurzame energie in 2023. 
De huidige realisatie van duurzame energie is te vinden op [[Hernieuwbare energie; eindverbruik @CBSStatline | http://statline.cbs.nl/Statweb/publication/?DM=SLNL&PA=83109ned&D1=0-1,4-5&D2=a&D3=a&D4=23-25&HDR=T&STB=G2,G1,G3&VW=T]]

!Hoe kom ik verder?
>[[Warmte en Koude opslag |http://www.rwsleefomgeving.nl/onderwerpen/bodem-ondergrond/bodemenergie/]] 
>[[Thermische Opslag rendementen van WKO en HTO | http://docplayer.nl/13912312-Thermisch-opslagrendement.html ]]
>[[Wet en regelgeving | http://www.rwsleefomgeving.nl/onderwerpen/bodem-ondergrond/bodemenergie/wet-regelgeving/]]
>[[Financieel: ISDE Subsidie Duurzame Energie | http://www.rvo.nl/subsidies-regelingen/investeringssubsidie-duurzame-energie]]
>[[Project: TU Eindhoven | https://www.tue.nl/universiteit/over-de-universiteit/duurzaamheid/campus-en-bedrijfsvoering/energie/warmte-koude-opslag/]]
>[[Project: Beijum Groningen ZonneCollector met WarmteOpslag (sinds 1983) | https://pure.tue.nl/ws/files/50218236/304623.pdf]]
Naast het transporteren van Warmte door [[Warmtenetten]], kan warmte ook getransporteerd worden per schip, trein of vrachtwagen. 

!Meer info
**[[Rapport: Restwarmtebenutting via mobiele warmte | http://www.dwa.nl/wp-content/uploads/2012/07/Restwarmtebenutting-middels-mobiele-warmte.pdf]]
!Beschrijving Warmtenetkaart

Deze kaart geeft alle buurten weer waarin een aantal woningen zijn aangesloten op een warmtenet.

!Attributen
* Aantal Woningen 
* Aantal Woningen op Warmtenet
* Buurt
* Gemeente
* Provincie
* Jaar

zie [[OpenEnergieGeoData]]


/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.1.6 (2012-04-19)|
|''Summary:''|Search your TiddlyWiki with advanced search features such as result lists, tiddler preview, result ranking, search filters, combined searches and many more.|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin|
|''Twitter:''|[[@abego|https://twitter.com/#!/abego]]|
|''GitHub:''|https://github.com/abego/YourSearchPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''License:''|[[BSD open source license|http://www.abego-software.de/legal/apl-v10.html]]|
!About YourSearch
YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!

For more information see [[Help|YourSearch Help]].
!Compatibility
This plugin requires TiddlyWiki 2.1. 
Check the [[archive|http://tiddlywiki.abego-software.de/archive]] for ~YourSearchPlugins supporting older versions of TiddlyWiki.
!Source Code
***/
/***
This plugin's source code is compressed (and hidden). 
Use this [[link|http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/2.1.6/YourSearchPlugin-2.1.6-src.js]] to get the readable source code.
***/
///%
if(!version.extensions.YourSearchPlugin){version.extensions.YourSearchPlugin={major:2,minor:1,revision:6,source:"http://tiddlywiki.abego-software.de/#YourSearchPlugin",licence:"[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",copyright:"Copyright (c) abego Software GmbH, 2005-2012 (www.abego-software.de)"};if(!window.abego){window.abego={}}if(!Array.forEach){Array.forEach=function(c,e,d){for(var b=0,a=c.length;b<a;b++){e.call(d,c[b],b,c)}};Array.prototype.forEach=function(d,c){for(var b=0,a=this.length;b<a;b++){d.call(c,this[b],b,this)}}}abego.toInt=function(b,a){if(!b){return a}var c=parseInt(b);return(c==NaN)?a:c};abego.createEllipsis=function(a){var b=createTiddlyElement(a,"span");b.innerHTML="&hellip;"};abego.shallowCopy=function(b){if(!b){return b}var a={};for(var c in b){a[c]=b[c]}return a};abego.copyOptions=function(a){return !a?{}:abego.shallowCopy(a)};abego.countStrings=function(d,c){if(!c){return 0}var a=c.length;var f=0;var e=0;while(true){var b=d.indexOf(c,e);if(b<0){return f}f++;e=b+a}return f};abego.getBracedText=function(j,e,a){if(!e){e=0}var k=/\{([^\}]*)\}/gm;k.lastIndex=e;var d=k.exec(j);if(d){var l=d[1];var b=abego.countStrings(l,"{");if(!b){if(a){a.lastIndex=k.lastIndex}return l}var g=j.length;for(var f=k.lastIndex;f<g&&b;f++){var h=j.charAt(f);if(h=="{"){b++}else{if(h=="}"){b--}}}if(!b){if(a){a.lastIndex=f-1}return j.substring(d.index+1,f-1)}}};abego.select=function(d,c,b,a){if(!a){a=[]}d.forEach(function(e){if(c.call(b,e)){a.push(e)}});return a};abego.consumeEvent=function(a){if(a.stopPropagation){a.stopPropagation()}if(a.preventDefault){a.preventDefault()}a.cancelBubble=true;a.returnValue=true};abego.TiddlerFilterTerm=function(d,b){if(!b){b={}}var c=d;if(!b.textIsRegExp){c=d.escapeRegExp();if(b.fullWordMatch){c="\\b"+c+"\\b"}}var a=new RegExp(c,"m"+(b.caseSensitive?"":"i"));this.tester=new abego.MultiFieldRegExpTester(a,b.fields,b.withExtendedFields)};abego.TiddlerFilterTerm.prototype.test=function(a){return this.tester.test(a)};abego.parseNewTiddlerCommandLine=function(c){var a=/(.*?)\.(?:\s+|$)([^#]*)(#.*)?/.exec(c);if(!a){a=/([^#]*)()(#.*)?/.exec(c)}if(a){var d;if(a[3]){var b=a[3].replace(/#/g,"");d=b.parseParams("tag")}else{d=[[]]}var e=a[2]?a[2].trim():"";d.push({name:"text",value:e});d[0].text=[e];return{title:a[1].trim(),params:d}}else{return{title:c.trim(),params:[[]]}}};abego.parseTiddlerFilterTerm=function(queryText,offset,options){var re=/\s*(?:(?:\{([^\}]*)\})|(?:(=)|([#%!])|(?:(\w+)\s*\:(?!\/\/))|(?:(?:("(?:(?:\\")|[^"])+")|(?:\/((?:(?:\\\/)|[^\/])+)\/)|(\w+\:\/\/[^\s]+)|([^\s\)\-\"]+)))))/mg;var shortCuts={"!":"title","%":"text","#":"tags"};var fieldNames={};var fullWordMatch=false;re.lastIndex=offset;while(true){var i=re.lastIndex;var m=re.exec(queryText);if(!m||m.index!=i){throw"Word or String literal expected"}if(m[1]){var lastIndexRef={};var code=abego.getBracedText(queryText,0,lastIndexRef);if(!code){throw"Invalid {...} syntax"}var f=Function("tiddler","return ("+code+");");return{func:f,lastIndex:lastIndexRef.lastIndex,markRE:null}}if(m[2]){fullWordMatch=true}else{if(m[3]){fieldNames[shortCuts[m[3]]]=1}else{if(m[4]){fieldNames[m[4]]=1}else{var textIsRegExp=m[6];var text=m[5]?window.eval(m[5]):m[6]?m[6]:m[7]?m[7]:m[8];options=abego.copyOptions(options);options.fullWordMatch=fullWordMatch;options.textIsRegExp=textIsRegExp;var fields=[];for(var n in fieldNames){fields.push(n)}if(fields.length==0){options.fields=options.defaultFields}else{options.fields=fields;options.withExtendedFields=false}var term=new abego.TiddlerFilterTerm(text,options);var markREText=textIsRegExp?text:text.escapeRegExp();if(markREText&&fullWordMatch){markREText="\\b"+markREText+"\\b"}return{func:function(tiddler){return term.test(tiddler)},lastIndex:re.lastIndex,markRE:markREText?"(?:"+markREText+")":null}}}}}};abego.BoolExp=function(i,c,j){this.s=i;var h=j&&j.defaultOperationIs_OR;var e=/\s*\)/g;var f=/\s*(?:(and|\&\&)|(or|\|\|))/gi;var b=/\s*(\-|not)?(\s*\()?/gi;var a;var d=function(p){b.lastIndex=p;var l=b.exec(i);var o=false;var k=null;if(l&&l.index==p){p+=l[0].length;o=l[1];if(l[2]){var n=a(p);e.lastIndex=n.lastIndex;if(!e.exec(i)){throw"Missing ')'"}k={func:n.func,lastIndex:e.lastIndex,markRE:n.markRE}}}if(!k){k=c(i,p,j)}if(o){k.func=(function(m){return function(q){return !m(q)}})(k.func);k.markRE=null}return k};a=function(s){var n=d(s);while(true){var p=n.lastIndex;f.lastIndex=p;var k=f.exec(i);var o;var q;if(k&&k.index==p){o=!k[1];q=d(f.lastIndex)}else{try{q=d(p)}catch(r){return n}o=h}n.func=(function(t,m,l){return l?function(u){return t(u)||m(u)}:function(u){return t(u)&&m(u)}})(n.func,q.func,o);n.lastIndex=q.lastIndex;if(!n.markRE){n.markRE=q.markRE}else{if(q.markRE){n.markRE=n.markRE+"|"+q.markRE}}}};var g=a(0);this.evalFunc=g.func;if(g.markRE){this.markRegExp=new RegExp(g.markRE,j.caseSensitive?"mg":"img")}};abego.BoolExp.prototype.exec=function(){return this.evalFunc.apply(this,arguments)};abego.BoolExp.prototype.getMarkRegExp=function(){return this.markRegExp};abego.BoolExp.prototype.toString=function(){return this.s};abego.MultiFieldRegExpTester=function(b,a,c){this.re=b;this.fields=a?a:["title","text","tags"];this.withExtendedFields=c};abego.MultiFieldRegExpTester.prototype.test=function(b){var d=this.re;for(var a=0;a<this.fields.length;a++){var c=store.getValue(b,this.fields[a]);if(typeof c=="string"&&d.test(c)){return this.fields[a]}}if(this.withExtendedFields){return store.forEachField(b,function(e,g,f){return typeof f=="string"&&d.test(f)?g:null},true)}return null};abego.TiddlerQuery=function(b,a,d,c,e){if(d){this.regExp=new RegExp(b,a?"mg":"img");this.tester=new abego.MultiFieldRegExpTester(this.regExp,c,e)}else{this.expr=new abego.BoolExp(b,abego.parseTiddlerFilterTerm,{defaultFields:c,caseSensitive:a,withExtendedFields:e})}this.getQueryText=function(){return b};this.getUseRegExp=function(){return d};this.getCaseSensitive=function(){return a};this.getDefaultFields=function(){return c};this.getWithExtendedFields=function(){return e}};abego.TiddlerQuery.prototype.test=function(a){if(!a){return false}if(this.regExp){return this.tester.test(a)}return this.expr.exec(a)};abego.TiddlerQuery.prototype.filter=function(a){return abego.select(a,this.test,this)};abego.TiddlerQuery.prototype.getMarkRegExp=function(){if(this.regExp){return"".search(this.regExp)>=0?null:this.regExp}return this.expr.getMarkRegExp()};abego.TiddlerQuery.prototype.toString=function(){return(this.regExp?this.regExp:this.expr).toString()};abego.PageWiseRenderer=function(){this.firstIndexOnPage=0};merge(abego.PageWiseRenderer.prototype,{setItems:function(a){this.items=a;this.setFirstIndexOnPage(0)},getMaxPagesInNavigation:function(){return 10},getItemsCount:function(a){return this.items?this.items.length:0},getCurrentPageIndex:function(){return Math.floor(this.firstIndexOnPage/this.getItemsPerPage())},getLastPageIndex:function(){return Math.floor((this.getItemsCount()-1)/this.getItemsPerPage())},setFirstIndexOnPage:function(a){this.firstIndexOnPage=Math.min(Math.max(0,a),this.getItemsCount()-1)},getFirstIndexOnPage:function(){this.firstIndexOnPage=Math.floor(this.firstIndexOnPage/this.getItemsPerPage())*this.getItemsPerPage();return this.firstIndexOnPage},getLastIndexOnPage:function(){return Math.min(this.getFirstIndexOnPage()+this.getItemsPerPage()-1,this.getItemsCount()-1)},onPageChanged:function(a,b){},renderPage:function(a){if(a.beginRendering){a.beginRendering(this)}try{if(this.getItemsCount()){var d=this.getLastIndexOnPage();var c=-1;for(var b=this.getFirstIndexOnPage();b<=d;b++){c++;a.render(this,this.items[b],b,c)}}}finally{if(a.endRendering){a.endRendering(this)}}},addPageNavigation:function(c){if(!this.getItemsCount()){return}var k=this;var g=function(n){if(!n){n=window.event}abego.consumeEvent(n);var i=abego.toInt(this.getAttribute("page"),0);var m=k.getCurrentPageIndex();if(i==m){return}var l=i*k.getItemsPerPage();k.setFirstIndexOnPage(l);k.onPageChanged(i,m)};var e;var h=this.getCurrentPageIndex();var f=this.getLastPageIndex();if(h>0){e=createTiddlyButton(c,"Previous","Go to previous page (Shortcut: Alt-'<')",g,"prev");e.setAttribute("page",(h-1).toString());e.setAttribute("accessKey","<")}for(var d=-this.getMaxPagesInNavigation();d<this.getMaxPagesInNavigation();d++){var b=h+d;if(b<0){continue}if(b>f){break}var a=(d+h+1).toString();var j=b==h?"currentPage":"otherPage";e=createTiddlyButton(c,a,"Go to page %0".format([a]),g,j);e.setAttribute("page",(b).toString())}if(h<f){e=createTiddlyButton(c,"Next","Go to next page (Shortcut: Alt-'>')",g,"next");e.setAttribute("page",(h+1).toString());e.setAttribute("accessKey",">")}}});abego.LimitedTextRenderer=function(){var l=40;var c=4;var k=function(p,z,v){var q=p.length;if(q==0){p.push({start:z,end:v});return}var u=0;for(;u<q;u++){var w=p[u];if(w.start<=v&&z<=w.end){var o;var s=u+1;for(;s<q;s++){o=p[s];if(o.start>v||z>w.end){break}}var x=z;var y=v;for(var t=u;t<s;t++){o=p[t];x=Math.min(x,o.start);y=Math.max(y,o.end)}p.splice(u,s-u,{start:x,end:y});return}if(w.start>v){break}}p.splice(u,0,{start:z,end:v})};var d=function(n){var q=0;for(var p=0;p<n.length;p++){var o=n[p];q+=o.end-o.start}return q};var b=function(n){return(n>="a"&&n<="z")||(n>="A"&&n<="Z")||n=="_"};var f=function(p,r){if(!b(p[r])){return null}for(var o=r-1;o>=0&&b(p[o]);o--){}var q=o+1;var t=p.length;for(o=r+1;o<t&&b(p[o]);o++){}return{start:q,end:o}};var a=function(o,q,p){var n;if(p){n=f(o,q)}else{if(q<=0){return q}n=f(o,q-1)}if(!n){return q}if(p){if(n.start>=q-c){return n.start}if(n.end<=q+c){return n.end}}else{if(n.end<=q+c){return n.end}if(n.start>=q-c){return n.start}}return q};var j=function(r,q){var n=[];if(q){var u=0;do{q.lastIndex=u;var o=q.exec(r);if(o){if(u<o.index){var p=r.substring(u,o.index);n.push({text:p})}n.push({text:o[0],isMatch:true});u=o.index+o[0].length}else{n.push({text:r.substr(u)});break}}while(true)}else{n.push({text:r})}return n};var i=function(p){var n=0;for(var o=0;o<p.length;o++){if(p[o].isMatch){n++}}return n};var h=function(v,u,q,t,o){var w=Math.max(Math.floor(o/(t+1)),l);var n=Math.max(w-(q-u),0);var r=Math.min(Math.floor(q+n/3),v.length);var p=Math.max(r-w,0);p=a(v,p,true);r=a(v,r,false);return{start:p,end:r}};var m=function(r,y,o){var n=[];var v=i(r);var u=0;for(var p=0;p<r.length;p++){var x=r[p];var w=x.text;if(x.isMatch){var q=h(y,u,u+w.length,v,o);k(n,q.start,q.end)}u+=w.length}return n};var g=function(t,p,o){var n=o-d(p);while(n>0){if(p.length==0){k(p,0,a(t,o,false));return}else{var q=p[0];var v;var r;if(q.start==0){v=q.end;if(p.length>1){r=p[1].start}else{k(p,v,a(t,v+n,false));return}}else{v=0;r=q.start}var u=Math.min(r,v+n);k(p,v,u);n-=(u-v)}}};var e=function(p,x,w,n,o){if(n.length==0){return}var u=function(z,I,D,F,C){var H;var G;var E=0;var B=0;var A=0;for(;B<D.length;B++){H=D[B];G=H.text;if(F<E+G.length){A=F-E;break}E+=G.length}var y=C-F;for(;B<D.length&&y>0;B++){H=D[B];G=H.text.substr(A);A=0;if(G.length>y){G=G.substr(0,y)}if(H.isMatch){createTiddlyElement(z,"span",null,"marked",G)}else{createTiddlyText(z,G)}y-=G.length}if(C<I.length){abego.createEllipsis(z)}};if(n[0].start>0){abego.createEllipsis(p)}var q=o;for(var r=0;r<n.length&&q>0;r++){var t=n[r];var v=Math.min(t.end-t.start,q);u(p,x,w,t.start,t.start+v);q-=v}};this.render=function(p,q,o,t){if(q.length<o){o=q.length}var r=j(q,t);var n=m(r,q,o);g(q,n,o);e(p,q,r,n,o)}};(function(){function alertAndThrow(msg){alert(msg);throw msg}if(version.major<2||(version.major==2&&version.minor<1)){alertAndThrow("YourSearchPlugin requires TiddlyWiki 2.1 or newer.\n\nCheck the archive for YourSearch plugins\nsupporting older versions of TiddlyWiki.\n\nArchive: http://tiddlywiki.abego-software.de/archive")}abego.YourSearch={};var lastResults=undefined;var lastQuery=undefined;var setLastResults=function(array){lastResults=array};var getLastResults=function(){return lastResults?lastResults:[]};var getLastResultsCount=function(){return lastResults?lastResults.length:0};var matchInTitleWeight=4;var precisionInTitleWeight=10;var matchInTagsWeight=2;var getMatchCount=function(s,re){var m=s.match(re);return m?m.length:0};var standardRankFunction=function(tiddler,query){var markRE=query.getMarkRegExp();if(!markRE){return 1}var matchesInTitle=tiddler.title.match(markRE);var nMatchesInTitle=matchesInTitle?matchesInTitle.length:0;var nMatchesInTags=getMatchCount(tiddler.getTags(),markRE);var lengthOfMatchesInTitle=matchesInTitle?matchesInTitle.join("").length:0;var precisionInTitle=tiddler.title.length>0?lengthOfMatchesInTitle/tiddler.title.length:0;var rank=nMatchesInTitle*matchInTitleWeight+nMatchesInTags*matchInTagsWeight+precisionInTitle*precisionInTitleWeight+1;return rank};var findMatches=function(store,searchText,caseSensitive,useRegExp,sortField,excludeTag){lastQuery=null;var candidates=store.reverseLookup("tags",excludeTag,false);try{var defaultFields=[];if(config.options.chkSearchInTitle){defaultFields.push("title")}if(config.options.chkSearchInText){defaultFields.push("text")}if(config.options.chkSearchInTags){defaultFields.push("tags")}lastQuery=new abego.TiddlerQuery(searchText,caseSensitive,useRegExp,defaultFields,config.options.chkSearchExtendedFields)}catch(e){return[]}var results=lastQuery.filter(candidates);var rankFunction=abego.YourSearch.getRankFunction();for(var i=0;i<results.length;i++){var tiddler=results[i];var rank=rankFunction(tiddler,lastQuery);tiddler.searchRank=rank}if(!sortField){sortField="title"}var sortFunction=function(a,b){var searchRankDiff=a.searchRank-b.searchRank;if(searchRankDiff==0){if(a[sortField]==b[sortField]){return(0)}else{return(a[sortField]<b[sortField])?-1:+1}}else{return(searchRankDiff>0)?-1:+1}};results.sort(sortFunction);return results};var maxCharsInTitle=80;var maxCharsInTags=50;var maxCharsInText=250;var maxCharsInField=50;var itemsPerPageDefault=25;var itemsPerPageWithPreviewDefault=10;var yourSearchResultID="yourSearchResult";var yourSearchResultItemsID="yourSearchResultItems";var lastSearchText=null;var resultElement=null;var searchInputField=null;var searchButton=null;var lastNewTiddlerButton=null;var initStylesheet=function(){if(version.extensions.YourSearchPlugin.styleSheetInited){return}version.extensions.YourSearchPlugin.styleSheetInited=true;setStylesheet(store.getTiddlerText("YourSearchStyleSheet"),"yourSearch")};var isResultOpen=function(){return resultElement!=null&&resultElement.parentNode==document.body};var closeResult=function(){if(isResultOpen()){document.body.removeChild(resultElement)}};var closeResultAndDisplayTiddler=function(e){closeResult();var title=this.getAttribute("tiddlyLink");if(title){var withHilite=this.getAttribute("withHilite");var oldHighlightHack=highlightHack;if(withHilite&&withHilite=="true"&&lastQuery){highlightHack=lastQuery.getMarkRegExp()}story.displayTiddler(this,title);highlightHack=oldHighlightHack}return(false)};var adjustResultPositionAndSize=function(){if(!searchInputField){return}var root=searchInputField;var rootLeft=findPosX(root);var rootTop=findPosY(root);var rootHeight=root.offsetHeight;var popupLeft=rootLeft;var popupTop=rootTop+rootHeight;var winWidth=findWindowWidth();if(winWidth<resultElement.offsetWidth){resultElement.style.width=(winWidth-100)+"px";winWidth=findWindowWidth()}var popupWidth=resultElement.offsetWidth;if(popupLeft+popupWidth>winWidth){popupLeft=winWidth-popupWidth-30}if(popupLeft<0){popupLeft=0}resultElement.style.left=popupLeft+"px";resultElement.style.top=popupTop+"px";resultElement.style.display="block"};var scrollVisible=function(){if(resultElement){window.scrollTo(0,ensureVisible(resultElement))}if(searchInputField){window.scrollTo(0,ensureVisible(searchInputField))}};var ensureResultIsDisplayedNicely=function(){adjustResultPositionAndSize();scrollVisible()};var indexInPage=undefined;var currentTiddler=undefined;var pager=new abego.PageWiseRenderer();var MyItemRenderer=function(parent){this.itemHtml=store.getTiddlerText("YourSearchItemTemplate");if(!this.itemHtml){alertAndThrow("YourSearchItemTemplate not found")}this.place=document.getElementById(yourSearchResultItemsID);if(!this.place){this.place=createTiddlyElement(parent,"div",yourSearchResultItemsID)}};merge(MyItemRenderer.prototype,{render:function(pager,object,index,indexOnPage){indexInPage=indexOnPage;currentTiddler=object;var item=createTiddlyElement(this.place,"div",null,"yourSearchItem");item.innerHTML=this.itemHtml;applyHtmlMacros(item,null);refreshElements(item,null)},endRendering:function(pager){currentTiddler=null}});var refreshResult=function(){if(!resultElement||!searchInputField){return}var html=store.getTiddlerText("YourSearchResultTemplate");if(!html){html="<b>Tiddler YourSearchResultTemplate not found</b>"}resultElement.innerHTML=html;applyHtmlMacros(resultElement,null);refreshElements(resultElement,null);var itemRenderer=new MyItemRenderer(resultElement);pager.renderPage(itemRenderer);ensureResultIsDisplayedNicely()};pager.getItemsPerPage=function(){var n=(config.options.chkPreviewText)?abego.toInt(config.options.txtItemsPerPageWithPreview,itemsPerPageWithPreviewDefault):abego.toInt(config.options.txtItemsPerPage,itemsPerPageDefault);return(n>0)?n:1};pager.onPageChanged=function(){refreshResult()};var reopenResultIfApplicable=function(){if(searchInputField==null||!config.options.chkUseYourSearch){return}if((searchInputField.value==lastSearchText)&&lastSearchText&&!isResultOpen()){if(resultElement&&(resultElement.parentNode!=document.body)){document.body.appendChild(resultElement);ensureResultIsDisplayedNicely()}else{abego.YourSearch.onShowResult(true)}}};var invalidateResult=function(){closeResult();resultElement=null;lastSearchText=null};var isDescendantOrSelf=function(self,e){while(e!=null){if(self==e){return true}e=e.parentNode}return false};var onDocumentClick=function(e){if(e.target==searchInputField){return}if(e.target==searchButton){return}if(resultElement&&isDescendantOrSelf(resultElement,e.target)){return}closeResult()};var onDocumentKeyup=function(e){if(e.keyCode==27){closeResult()}};addEvent(document,"click",onDocumentClick);addEvent(document,"keyup",onDocumentKeyup);var myStorySearch=function(text,useCaseSensitive,useRegExp){lastSearchText=text;setLastResults(findMatches(store,text,useCaseSensitive,useRegExp,"title","excludeSearch"));abego.YourSearch.onShowResult()};var myMacroSearchHandler=function(place,macroName,params,wikifier,paramString,tiddler){initStylesheet();lastSearchText="";var searchTimeout=null;var doSearch=function(txt){if(config.options.chkUseYourSearch){myStorySearch(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch)}else{story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch)}lastSearchText=txt.value};var clickHandler=function(e){doSearch(searchInputField);return false};var keyHandler=function(e){if(!e){e=window.event}searchInputField=this;switch(e.keyCode){case 13:if(e.ctrlKey&&lastNewTiddlerButton&&isResultOpen()){lastNewTiddlerButton.onclick.apply(lastNewTiddlerButton,[e])}else{doSearch(this)}break;case 27:if(isResultOpen()){closeResult()}else{this.value="";clearMessage()}break}if(String.fromCharCode(e.keyCode)==this.accessKey||e.altKey){reopenResultIfApplicable()}if(this.value.length<3&&searchTimeout){clearTimeout(searchTimeout)}if(this.value.length>2){if(this.value!=lastSearchText){if(!config.options.chkUseYourSearch||config.options.chkSearchAsYouType){if(searchTimeout){clearTimeout(searchTimeout)}var txt=this;searchTimeout=setTimeout(function(){doSearch(txt)},500)}}else{if(searchTimeout){clearTimeout(searchTimeout)}}}if(this.value.length==0){closeResult()}};var focusHandler=function(e){this.select();clearMessage();reopenResultIfApplicable()};var args=paramString.parseParams("list",null,true);var buttonAtRight=getFlag(args,"buttonAtRight");var sizeTextbox=getParam(args,"sizeTextbox",this.sizeTextbox);var txt=createTiddlyElement(null,"input",null,"txtOptionInput searchField",null);if(params[0]){txt.value=params[0]}txt.onkeyup=keyHandler;txt.onfocus=focusHandler;txt.setAttribute("size",sizeTextbox);txt.setAttribute("accessKey",this.accessKey);txt.setAttribute("autocomplete","off");if(config.browser.isSafari){txt.setAttribute("type","search");txt.setAttribute("results","5")}else{if(!config.browser.isIE){txt.setAttribute("type","text")}}var btn=createTiddlyButton(null,this.label,this.prompt,clickHandler);if(place){if(!buttonAtRight){place.appendChild(btn)}place.appendChild(txt);if(buttonAtRight){place.appendChild(btn)}}searchInputField=txt;searchButton=btn};var openAllFoundTiddlers=function(){closeResult();var results=getLastResults();var n=results.length;if(n){var titles=[];for(var i=0;i<n;i++){titles.push(results[i].title)}story.displayTiddlers(null,titles)}};var createOptionWithRefresh=function(place,optionParams,wikifier,tiddler){invokeMacro(place,"option",optionParams,wikifier,tiddler);var elem=place.lastChild;var oldOnClick=elem.onclick;elem.onclick=function(e){var result=oldOnClick.apply(this,arguments);refreshResult();return result};return elem};var removeTextDecoration=function(s){var removeThis=["''","{{{","}}}","//","<<<","/***","***/"];var reText="";for(var i=0;i<removeThis.length;i++){if(i!=0){reText+="|"}reText+="("+removeThis[i].escapeRegExp()+")"}return s.replace(new RegExp(reText,"mg"),"").trim()};var getShortCutNumber=function(){var i=indexInPage;return(i>=0&&i<=9)?(i<9?(i+1):0):-1};var limitedTextRenderer=new abego.LimitedTextRenderer();var renderLimitedText=function(place,s,maxLen){limitedTextRenderer.render(place,s,maxLen,lastQuery.getMarkRegExp())};var oldTiddlyWikiSaveTiddler=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(title,newTitle,newBody,modifier,modified,tags,fields){oldTiddlyWikiSaveTiddler.apply(this,arguments);invalidateResult()};var oldTiddlyWikiRemoveTiddler=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(title){oldTiddlyWikiRemoveTiddler.apply(this,arguments);invalidateResult()};config.macros.yourSearch={label:"yourSearch",prompt:"Gives access to the current/last YourSearch result",handler:function(place,macroName,params,wikifier,paramString,tiddler){if(params.length==0){return}var name=params[0];var func=config.macros.yourSearch.funcs[name];if(func){func(place,macroName,params,wikifier,paramString,tiddler)}},tests:{"true":function(){return true},"false":function(){return false},found:function(){return getLastResultsCount()>0},previewText:function(){return config.options.chkPreviewText}},funcs:{itemRange:function(place){if(getLastResultsCount()){var lastIndex=pager.getLastIndexOnPage();var s="%0 - %1".format([pager.getFirstIndexOnPage()+1,lastIndex+1]);createTiddlyText(place,s)}},count:function(place){createTiddlyText(place,getLastResultsCount().toString())},query:function(place){if(lastQuery){createTiddlyText(place,lastQuery.toString())}},version:function(place){var t="YourSearch %0.%1.%2".format([version.extensions.YourSearchPlugin.major,version.extensions.YourSearchPlugin.minor,version.extensions.YourSearchPlugin.revision]);var e=createTiddlyElement(place,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#YourSearchPlugin");e.innerHTML='<font color="black" face="Arial, Helvetica, sans-serif">'+t+"<font>"},copyright:function(place){var e=createTiddlyElement(place,"a");e.setAttribute("href","http://www.abego-software.de");e.innerHTML='<font color="black" face="Arial, Helvetica, sans-serif">&copy; 2005-2008 <b><font color="red">abego</font></b> Software<font>'},newTiddlerButton:function(place){if(lastQuery){var r=abego.parseNewTiddlerCommandLine(lastQuery.getQueryText());var btn=config.macros.newTiddler.createNewTiddlerButton(place,r.title,r.params,"new tiddler","Create a new tiddler based on search text. (Shortcut: Ctrl-Enter; Separators: '.', '#')",null,"text");var oldOnClick=btn.onclick;btn.onclick=function(){closeResult();oldOnClick.apply(this,arguments)};lastNewTiddlerButton=btn}},linkButton:function(place,macroName,params,wikifier,paramString,tiddler){if(params<2){return}var tiddlyLink=params[1];var text=params<3?tiddlyLink:params[2];var tooltip=params<4?text:params[3];var accessKey=params<5?null:params[4];var btn=createTiddlyButton(place,text,tooltip,closeResultAndDisplayTiddler,null,null,accessKey);btn.setAttribute("tiddlyLink",tiddlyLink)},closeButton:function(place,macroName,params,wikifier,paramString,tiddler){createTiddlyButton(place,"close","Close the Search Results (Shortcut: ESC)",closeResult)},openAllButton:function(place,macroName,params,wikifier,paramString,tiddler){var n=getLastResultsCount();if(n==0){return}var title=n==1?"open tiddler":"open all %0 tiddlers".format([n]);var button=createTiddlyButton(place,title,"Open all found tiddlers (Shortcut: Alt-O)",openAllFoundTiddlers);button.setAttribute("accessKey","O")},naviBar:function(place,macroName,params,wikifier,paramString,tiddler){pager.addPageNavigation(place)},"if":function(place,macroName,params,wikifier,paramString,tiddler){if(params.length<2){return}var testName=params[1];var negate=(testName=="not");if(negate){if(params.length<3){return}testName=params[2]}var test=config.macros.yourSearch.tests[testName];var showIt=false;try{if(test){showIt=test(place,macroName,params,wikifier,paramString,tiddler)!=negate}else{showIt=(!eval(testName))==negate}}catch(ex){}if(!showIt){place.style.display="none"}},chkPreviewText:function(place,macroName,params,wikifier,paramString,tiddler){var elem=createOptionWithRefresh(place,"chkPreviewText",wikifier,tiddler);elem.setAttribute("accessKey","P");elem.title="Show text preview of found tiddlers (Shortcut: Alt-P)";return elem}}};config.macros.foundTiddler={label:"foundTiddler",prompt:"Provides information on the tiddler currently processed on the YourSearch result page",handler:function(place,macroName,params,wikifier,paramString,tiddler){var name=params[0];var func=config.macros.foundTiddler.funcs[name];if(func){func(place,macroName,params,wikifier,paramString,tiddler)}},funcs:{title:function(place,macroName,params,wikifier,paramString,tiddler){if(!currentTiddler){return}var shortcutNumber=getShortCutNumber();var tooltip=shortcutNumber>=0?"Open tiddler (Shortcut: Alt-%0)".format([shortcutNumber.toString()]):"Open tiddler";var btn=createTiddlyButton(place,null,tooltip,closeResultAndDisplayTiddler,null);btn.setAttribute("tiddlyLink",currentTiddler.title);btn.setAttribute("withHilite","true");renderLimitedText(btn,currentTiddler.title,maxCharsInTitle);if(shortcutNumber>=0){btn.setAttribute("accessKey",shortcutNumber.toString())}},tags:function(place,macroName,params,wikifier,paramString,tiddler){if(!currentTiddler){return}renderLimitedText(place,currentTiddler.getTags(),maxCharsInTags)},text:function(place,macroName,params,wikifier,paramString,tiddler){if(!currentTiddler){return}renderLimitedText(place,removeTextDecoration(currentTiddler.text),maxCharsInText)},field:function(place,macroName,params,wikifier,paramString,tiddler){if(!currentTiddler){return}var name=params[1];var len=params.length>2?abego.toInt(params[2],maxCharsInField):maxCharsInField;var v=store.getValue(currentTiddler,name);if(v){renderLimitedText(place,removeTextDecoration(v),len)}},number:function(place,macroName,params,wikifier,paramString,tiddler){var numberToDisplay=getShortCutNumber();if(numberToDisplay>=0){var text="%0)".format([numberToDisplay.toString()]);createTiddlyElement(place,"span",null,"shortcutNumber",text)}}}};var opts={chkUseYourSearch:true,chkPreviewText:true,chkSearchAsYouType:true,chkSearchInTitle:true,chkSearchInText:true,chkSearchInTags:true,chkSearchExtendedFields:true,txtItemsPerPage:itemsPerPageDefault,txtItemsPerPageWithPreview:itemsPerPageWithPreviewDefault};for(var n in opts){if(config.options[n]==undefined){config.options[n]=opts[n]}}config.shadowTiddlers.AdvancedOptions+="\n<<option chkUseYourSearch>> Use 'Your Search' //([[more options|YourSearch Options]]) ([[help|YourSearch Help]])// ";config.shadowTiddlers["YourSearch Help"]="!Field Search\nWith the Field Search you can restrict your search to certain fields of a tiddler, e.g only search the tags or only the titles. The general form is //fieldname//'':''//textToSearch// (e.g. {{{title:intro}}}). In addition one-character shortcuts are also supported for the standard fields {{{title}}}, {{{text}}} and {{{tags}}}:\n|!What you want|!What you type|!Example|\n|Search ''titles only''|start word with ''!''|{{{!jonny}}} (shortcut for {{{title:jonny}}})|\n|Search ''contents/text only''|start word with ''%''|{{{%football}}} (shortcut for {{{text:football}}})|\n|Search ''tags only''|start word with ''#''|{{{#Plugin}}} (shortcut for {{{tags:Plugin}}})|\n\nUsing this feature you may also search the extended fields (\"Metadata\") introduced with TiddlyWiki 2.1, e.g. use {{{priority:1}}} to find all tiddlers with the priority field set to \"1\".\n\nYou may search a word in more than one field. E.g. {{{!#Plugin}}} (or {{{title:tags:Plugin}}} in the \"long form\") finds tiddlers containing \"Plugin\" either in the title or in the tags (but does not look for \"Plugin\" in the text). \n\n!Boolean Search\nThe Boolean Search is useful when searching for multiple words.\n|!What you want|!What you type|!Example|\n|''All words'' must exist|List of words|{{{jonny jeremy}}} (or {{{jonny and jeremy}}})|\n|''At least one word'' must exist|Separate words by ''or''|{{{jonny or jeremy}}}|\n|A word ''must not exist''|Start word with ''-''|{{{-jonny}}} (or {{{not jonny}}})|\n\n''Note:'' When you specify two words, separated with a space, YourSearch finds all tiddlers that contain both words, but not necessarily next to each other. If you want to find a sequence of word, e.g. '{{{John Brown}}}', you need to put the words into quotes. I.e. you type: {{{\"john brown\"}}}.\n\nUsing parenthesis you may change the default \"left to right\" evaluation of the boolean search. E.g. {{{not (jonny or jeremy)}}} finds all tiddlers that contain neither \"jonny\" nor \"jeremy. In contrast to this {{{not jonny or jeremy}}} (i.e. without parenthesis) finds all tiddlers that either don't contain \"jonny\" or that contain \"jeremy\".\n\n!'Exact Word' Search\nBy default a search result all matches that 'contain' the searched text. E.g. if you search for {{{Task}}} you will get all tiddlers containing 'Task', but also '~CompletedTask', '~TaskForce' etc.\n\nIf you only want to get the tiddlers that contain 'exactly the word' you need to prefix it with a '='. E.g. typing '=Task' will find the tiddlers that contain the word 'Task', ignoring words that just contain 'Task' as a substring.\n\n!~CaseSensitiveSearch and ~RegExpSearch\nThe standard search options ~CaseSensitiveSearch and ~RegExpSearch are fully supported by YourSearch. However when ''~RegExpSearch'' is on Filtered and Boolean Search are disabled.\n\nIn addition you may do a \"regular expression\" search even with the ''~RegExpSearch'' set to false by directly entering the regular expression into the search field, framed with {{{/.../}}}. \n\nExample: {{{/m[ae][iy]er/}}} will find all tiddlers that contain either \"maier\", \"mayer\", \"meier\" or \"meyer\".\n\n!~JavaScript Expression Filtering\nIf you are familiar with JavaScript programming and know some TiddlyWiki internals you may also use JavaScript expression for the search. Just enter a JavaScript boolean expression into the search field, framed with {{{ { ... } }}}. In the code refer to the variable tiddler and evaluate to {{{true}}} when the given tiddler should be included in the result. \n\nExample: {{{ { tiddler.modified > new Date(\"Jul 4, 2005\")} }}} returns all tiddler modified after July 4th, 2005.\n\n!Combined Search\nYou are free to combine the various search options. \n\n''Examples''\n|!What you type|!Result|\n|{{{!jonny !jeremy -%football}}}|all tiddlers with both {{{jonny}}} and {{{jeremy}}} in its titles, but no {{{football}}} in content.|\n|{{{#=Task}}}|All tiddlers tagged with 'Task' (the exact word). Tags named '~CompletedTask', '~TaskForce' etc. are not considered.|\n\n!Access Keys\nYou are encouraged to use the access keys (also called \"shortcut\" keys) for the most frequently used operations. For quick reference these shortcuts are also mentioned in the tooltip for the various buttons etc.\n\n|!Key|!Operation|\n|{{{Alt-F}}}|''The most important keystroke'': It moves the cursor to the search input field so you can directly start typing your query. Pressing {{{Alt-F}}} will also display the previous search result. This way you can quickly display multiple tiddlers using \"Press {{{Alt-F}}}. Select tiddler.\" sequences.|\n|{{{ESC}}}|Closes the [[YourSearch Result]]. When the [[YourSearch Result]] is already closed and the cursor is in the search input field the field's content is cleared so you start a new query.|\n|{{{Alt-1}}}, {{{Alt-2}}},... |Pressing these keys opens the first, second etc. tiddler from the result list.|\n|{{{Alt-O}}}|Opens all found tiddlers.|\n|{{{Alt-P}}}|Toggles the 'Preview Text' mode.|\n|{{{Alt-'<'}}}, {{{Alt-'>'}}}|Displays the previous or next page in the [[YourSearch Result]].|\n|{{{Return}}}|When you have turned off the 'as you type' search mode pressing the {{{Return}}} key actually starts the search (as does pressing the 'search' button).|\n\n//If some of these shortcuts don't work for you check your browser if you have other extensions installed that already \"use\" these shortcuts.//";config.shadowTiddlers["YourSearch Options"]="|>|!YourSearch Options|\n|>|<<option chkUseYourSearch>> Use 'Your Search'|\n|!|<<option chkPreviewText>> Show Text Preview|\n|!|<<option chkSearchAsYouType>> 'Search As You Type' Mode (No RETURN required to start search)|\n|!|Default Search Filter:<<option chkSearchInTitle>>Title ('!')     <<option chkSearchInText>>Text ('%')     <<option chkSearchInTags>>Tags ('#')    <<option chkSearchExtendedFields>>Extended Fields<html><br><font size=\"-2\">The fields of a tiddlers that are searched when you don't explicitly specify a filter in the search text <br>(Explictly specify fields using one or more '!', '%', '#' or 'fieldname:' prefix before the word/text to find).</font></html>|\n|!|Number of items on search result page: <<option txtItemsPerPage>>|\n|!|Number of items on search result page with preview text: <<option txtItemsPerPageWithPreview>>|\n";config.shadowTiddlers.YourSearchStyleSheet="/***\n!~YourSearchResult Stylesheet\n***/\n/*{{{*/\n.yourSearchResult {\n\tposition: absolute;\n\twidth: 800px;\n\n\tpadding: 0.2em;\n\tlist-style: none;\n\tmargin: 0;\n\n\tbackground: #ffd;\n\tborder: 1px solid DarkGray;\n}\n\n/*}}}*/\n/***\n!!Summary Section\n***/\n/*{{{*/\n.yourSearchResult .summary {\n\tborder-bottom-width: thin;\n\tborder-bottom-style: solid;\n\tborder-bottom-color: #999999;\n\tpadding-bottom: 4px;\n}\n\n.yourSearchRange, .yourSearchCount, .yourSearchQuery   {\n\tfont-weight: bold;\n}\n\n.yourSearchResult .summary .button {\n\tfont-size: 10px;\n\n\tpadding-left: 0.3em;\n\tpadding-right: 0.3em;\n}\n\n.yourSearchResult .summary .chkBoxLabel {\n\tfont-size: 10px;\n\n\tpadding-right: 0.3em;\n}\n\n/*}}}*/\n/***\n!!Items Area\n***/\n/*{{{*/\n.yourSearchResult .marked {\n\tbackground: none;\n\tfont-weight: bold;\n}\n\n.yourSearchItem {\n\tmargin-top: 2px;\n}\n\n.yourSearchNumber {\n\tcolor: #808080;\n}\n\n\n.yourSearchTags {\n\tcolor: #008000;\n}\n\n.yourSearchText {\n\tcolor: #808080;\n\tmargin-bottom: 6px;\n}\n\n/*}}}*/\n/***\n!!Footer\n***/\n/*{{{*/\n.yourSearchFooter {\n\tmargin-top: 8px;\n\tborder-top-width: thin;\n\tborder-top-style: solid;\n\tborder-top-color: #999999;\n}\n\n.yourSearchFooter a:hover{\n\tbackground: none;\n\tcolor: none;\n}\n/*}}}*/\n/***\n!!Navigation Bar\n***/\n/*{{{*/\n.yourSearchNaviBar a {\n\tfont-size: 16px;\n\tmargin-left: 4px;\n\tmargin-right: 4px;\n\tcolor: black;\n\ttext-decoration: underline;\n}\n\n.yourSearchNaviBar a:hover {\n\tbackground-color: none;\n}\n\n.yourSearchNaviBar .prev {\n\tfont-weight: bold;\n\tcolor: blue;\n}\n\n.yourSearchNaviBar .currentPage {\n\tcolor: #FF0000;\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\n\n.yourSearchNaviBar .next {\n\tfont-weight: bold;\n\tcolor: blue;\n}\n/*}}}*/\n";config.shadowTiddlers.YourSearchResultTemplate='<!--\n{{{\n-->\n<span macro="yourSearch if found">\n<!-- The Summary Header ============================================ -->\n<table class="summary" border="0" width="100%" cellspacing="0" cellpadding="0"><tbody>\n  <tr>\n\t<td align="left">\n\t\tYourSearch Result <span class="yourSearchRange" macro="yourSearch itemRange"></span>\n\t\t&nbsp;of&nbsp;<span class="yourSearchCount" macro="yourSearch count"></span>\n\t\tfor&nbsp;<span class="yourSearchQuery" macro="yourSearch query"></span>\n\t</td>\n\t<td class="yourSearchButtons" align="right">\n\t\t<span macro="yourSearch chkPreviewText"></span><span class="chkBoxLabel">preview text</span>\n\t\t<span macro="yourSearch newTiddlerButton"></span>\n\t\t<span macro="yourSearch openAllButton"></span>\n\t\t<span macro="yourSearch linkButton \'YourSearch Options\' options \'Configure YourSearch\'"></span>\n\t\t<span macro="yourSearch linkButton \'YourSearch Help\' help \'Get help how to use YourSearch\'"></span>\n\t\t<span macro="yourSearch closeButton"></span>\n\t</td>\n  </tr>\n</tbody></table>\n\n<!-- The List of Found Tiddlers ============================================ -->\n<div id="yourSearchResultItems" itemsPerPage="25" itemsPerPageWithPreview="10"></div>\n\n<!-- The Footer (with the Navigation) ============================================ -->\n<table class="yourSearchFooter" border="0" width="100%" cellspacing="0" cellpadding="0"><tbody>\n  <tr>\n\t<td align="left">\n\t\tResult page: <span class="yourSearchNaviBar" macro="yourSearch naviBar"></span>\n\t</td>\n\t<td align="right"><span macro="yourSearch version"></span>, <span macro="yourSearch copyright"></span>\n\t</td>\n  </tr>\n</tbody></table>\n<!-- end of the \'tiddlers found\' case =========================================== -->\n</span>\n\n\n<!-- The "No tiddlers found" case =========================================== -->\n<span macro="yourSearch if not found">\n<table class="summary" border="0" width="100%" cellspacing="0" cellpadding="0"><tbody>\n  <tr>\n\t<td align="left">\n\t\tYourSearch Result: No tiddlers found for <span class="yourSearchQuery" macro="yourSearch query"></span>.\n\t</td>\n\t<td class="yourSearchButtons" align="right">\n\t\t<span macro="yourSearch newTiddlerButton"></span>\n\t\t<span macro="yourSearch linkButton \'YourSearch Options\' options \'Configure YourSearch\'"></span>\n\t\t<span macro="yourSearch linkButton \'YourSearch Help\' help \'Get help how to use YourSearch\'"></span>\n\t\t<span macro="yourSearch closeButton"></span>\n\t</td>\n  </tr>\n</tbody></table>\n</span>\n\n\n<!--\n}}}\n-->\n';config.shadowTiddlers.YourSearchItemTemplate="<!--\n{{{\n-->\n<span class='yourSearchNumber' macro='foundTiddler number'></span>\n<span class='yourSearchTitle' macro='foundTiddler title'/></span>&nbsp;-&nbsp;\n<span class='yourSearchTags' macro='foundTiddler field tags 50'/></span>\n<span macro=\"yourSearch if previewText\"><div class='yourSearchText' macro='foundTiddler field text 250'/></div></span>\n<!--\n}}}\n-->";config.shadowTiddlers.YourSearch="<<tiddler [[YourSearch Help]]>>";config.shadowTiddlers["YourSearch Result"]="The popup-like window displaying the result of a YourSearch query.";config.macros.search.handler=myMacroSearchHandler;var checkForOtherHijacker=function(){if(config.macros.search.handler!=myMacroSearchHandler){alert("Message from YourSearchPlugin:\n\n\nAnother plugin has disabled the 'Your Search' features.\n\n\nYou may disable the other plugin or change the load order of \nthe plugins (by changing the names of the tiddlers)\nto enable the 'Your Search' features.")}};setTimeout(checkForOtherHijacker,5000);abego.YourSearch.getStandardRankFunction=function(){return standardRankFunction};abego.YourSearch.getRankFunction=function(){return abego.YourSearch.getStandardRankFunction()};abego.YourSearch.getCurrentTiddler=function(){return currentTiddler};abego.YourSearch.closeResult=function(){closeResult()};abego.YourSearch.getFoundTiddlers=function(){return lastResults};abego.YourSearch.getQuery=function(){return lastQuery};abego.YourSearch.onShowResult=function(useOldResult){highlightHack=lastQuery?lastQuery.getMarkRegExp():null;if(!useOldResult){pager.setItems(getLastResults())}if(!resultElement){resultElement=createTiddlyElement(document.body,"div",yourSearchResultID,"yourSearchResult")}else{if(resultElement.parentNode!=document.body){document.body.appendChild(resultElement)}}refreshResult();highlightHack=null}})()};
//%/
Er is geen kaart beschikbaar.

!Wat is de Ambitie van Nederland?
De doelstelling van Nederland is 14% duurzame energie in 2020 en 16% duurzame energie in 2023. 
De huidige realisatie van duurzame energie is te vinden op [[Hernieuwbare energie; eindverbruik @CBSStatline | http://statline.cbs.nl/Statweb/publication/?DM=SLNL&PA=83109ned&D1=0-1,4-5&D2=a&D3=a&D4=23-25&HDR=T&STB=G2,G1,G3&VW=T]]

!Meer info
[[Inventarisatie zonthermische systemen |http://www.zonne-energie-wageningen.nl/wp-content/uploads/2013/07/Rapport-inventarisatie-zonthermisch_mei-2013.pdf]]

<html><script> var uri = window.location.href.split("#")[0];
var hash = window.location.href.split("#")[1];
 ga('send',{'hitType': 'pageview','title': 'energiewiki','location':uri, 'page': hash});</script></html>

* <html><a href="http://www.warmteatlas.nl" target='_blank' onClick="ga('send', 'pageview','/Test/WarmteAtlas');"> Zie WarmteAtlas</a></html>
 
// your desired UserName
config.options.txtUserName = "RVO";
config.options.txtTheme = 'MptwTrimTheme';