<!--{{{-->
<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]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.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]];}

#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 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

.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:0em 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 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

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

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

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 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 0em;}
.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 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 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 0em 14em;}

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

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

.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:0em 0.25em; padding:0em 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:0px 3px 0px 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 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

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

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.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 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 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 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<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>>
Aparato circulatorio

El sistema circulatorio es la estructura anatómica que comprende conjuntamente tanto al sistema cardiovascular que conduce y hace circular la sangre, como al sistema linfático que conduce la linfa.
Tipos de sistemas circulatorios

Existen dos tipos de sistemas circulatorios:
Sistema circulatorio cerrado: Consiste en una serie de vasos sanguíneos por los que, sin salir de ellos, viaja la sangre. El material transportado por la sangre llega a los tejidos a través de difusión. Es característico de anélidos, moluscos cefalópodos y vertebrados.
Sistema circulatorio abierto: La sangre bombeada por el corazón viaja a través de vasos sanguíneos, con lo que la sangre irriga directamente a las células, regresando luego por distintos mecanismos. Este tipo de sistema se presenta en los artrópodos y en los moluscos no cefalópodos
Sistema cardiovascular en humanos

División en circuitos
Esta realiza aparentemente en dos circuitos a partir del corazón:

Circulación mayor o circulación somática o general. El recorrido de la sangre comienza en el ventrículo izquierdo del corazón, cargada de oxígeno, y se extiende por la arteria aorta y sus ramas arteriales hasta el sistema capilar, donde se forman las venas que contienen sangre pobre en oxígeno. Desembocan en una de las dos venas cavas (superior e inferior) que drenan en la aurícula derecha del corazón.

Circulación menor o circulación pulmonar o central. La sangre pobre en oxígeno parte desde el ventrículo derecho del corazón por la arteria pulmonar que se bifurca en sendos troncos para cada uno de ambos pulmones. En los capilares alveolares pulmonares la sangre se oxigena a través de un proceso conocido como hematosis y se reconduce por las cuatro venas pulmonares que drenan la sangre rica en oxígeno, en la aurícula izquierda del corazón.

Circulación sanguínea. Ni el circuito general ni el pulmonar lo son realmente ya que la sangre aunque parte del corazón y regresa a éste lo hace a cavidades distintas. El círculo verdadero se cierra cuando la sangre pasa de la aurícula izquierda al ventrículo izquierdo. Esto explica que se describiese antes la circulación pulmonar por el médico Miguel Servet que la circulación general por William Harvey. El círculo completo es: ventrículo izquierdo - arteria aorta - arterias y capilares sistémicos - venas cavas - aurícula derecha - ventrículo derecho - arteria pulmonar - arterias y capilares pulmonares - venas pulmonares - aurícula izquierda y finalmente ventrículo izquierdo, donde se inició el circuito. Es interesante reseñar que cuando se descubrió la circulación todavía no se podían observar los capilares y se pensaba que la sangre se consumía en los tejidos.

Circulación portal. Es un subtipo de la circulación general originado de venas procedentes de un sistema capilar, que vuelve a formar capilares en el hígado, al final de su trayecto. Existen dos sistemas porta en el cuerpo humano:
Sistema porta hepático: Las venas originadas en los capilares del tracto digestivo desde el estómago hasta el recto que transportan los productos de la digestión, se transforman de nuevo en capilares en los sinusoides hepáticos del hígado, para formar de nuevo venas que desembocan en la circulación sistémica a través de las venas suprahepáticas a la vena cava inferior.
Sistema porta hipofisario: La arteria hipofisaria superior procedente de la carótida interna, se ramifica en una primera red de capilares situados en la eminencia media. De estos capilares se forman las venas hipofisarias que descienden por el tallo hipofisario y originan una segunda red de capilares en la adenohipófisis que drenan en la vena yugular interna.


EL CORAZON

El corazón (término de un derivado popular del latín cor, cordis) en anatomía, es el órgano principal del sistema circulatorio. Es un órgano muscular, una bomba aspirante e impelente, que aspira desde las aurículas o entradas de la sangre que circula por las venas, y la impulsa desde los ventrículos hacia las arterias. Entre estos dos se encuentra una válvula que hace que la dirección de la circulación sea la adecuada. El corazón es un órgano musculoso y cónico situado en la cavidad torácica, que funciona como una bomba, impulsando la sangre a todo el cuerpo. Un poco más grande que un puño, está dividido en cuatro cavidades: dos superiores, llamadas aurículas, y dos inferiores, llamadas ventrículos. El corazón impulsa la sangre mediante los movimientos de sístole y diástole.

Sístole es una contracción que usa el corazón para expulsar la sangre, ya sea de una aurícula o de un ventrículo.
Diástole es una relajación que usa el corazón para relajar los ventrículos o las aurículas y recibir la sangre.
El término cardíaco hace referencia al corazón en idioma griego καρδια kardia.

Anatomía del corazón

El corazón es un órgano mutuo hueco cuya función es de bombear la sangre a través de los vasos sanguíneos del organismo. Se sitúa en la parte inferior del mediastino medio en donde está rodeado por una membrana fibrosa gruesa llamada pericardio. Esta envuelto laxamente por el saco pericárdico que es un saco seroso de doble pared que encierra al corazón. El pericardio esta formado por un capa Parietal y una capa visceral. Rodeando a la capa de pericardio parietal está la fibrosa, formado por tejido conectivo y adiposo. La capa serosa del pericardio interior secreta líquido pericárdico que lubrica la superficie del corazón, para aislarlo y evitar la fricción mecánica que sufre durante la contracción. Las capas fibrosas externas lo protegen y separan.

El corazón se compone de tres tipos de músculo cardíaco principalmente:
Músculo auricular.
Músculo ventricular.
Fibras musculares excitadoras y conductoras especializadas.
Estos se pueden agrupar en dos grupos, músculos de la contracción y músculos de la excitación. A los músculos de la contracción se les encuentran: músculo auricular y músculo ventricular; a los músculos de la excitación se encuentra: fibras musculares excitadoras y conductoras especializadas.

Localización anatómica

El corazón se localiza en la parte inferior del mediastino medio, entre el segundo y quinto espacio intercostal, izquierdo. El corazón está situado de forma oblicua: aproximadamente dos tercios a la izquierda del plano medio y un tercio a la derecha. El corazón tiene forma de una pirámide inclinada con el vértice en el “suelo” en sentido anterior izquierdo; la base, opuesta a la punta, en sentido posterior y 3 lados: la cara diafragmática, sobre la que descansa la pirámide, la cara esternocostal, anterior y la cara pulmonar hacia la izquierda.

Estructura del corazón

De dentro a fuera el corazón presenta las siguientes capas:
El endocardio, una membrana serosa de endotelio y tejido conectivo de revestimiento interno, con la cual entra en contacto la sangre. Incluye fibras elásticas y de colágeno, vasos sanguíneos y fibras musculares especializadas, las cuales se denominan Fibras de Purkinje. En su estructura encontramos las trabéculas carnosas, que dan resistencia para aumentar la contracción del corazón.
El miocardio, el músculo cardíaco propiamente dicho; encargado de impulsar la sangre por el cuerpo mediante su contracción. Encontramos también en esta capa tejido conectivo, capilares sanguíneos, capilares linfáticos y fibras nerviosas.
El epicardio, es una capa fina serosa mesotelial que envuelve al corazón llevando consigo capilares y fibras nerviosas. Esta capa se considera parte del pericardio seroso.

Morfología cardíaca

El corazón es del tamaño de un puño de un individuo, se divide en cuatro cavidades, dos superiores o atrios oaurículas y dos inferiores o ventrículos. Los atrios reciben la sangre del sistema venoso, pasan a los ventrículos y desde ahí salen a la circulación arterial.
El atrio y el ventrículo derecho forman lo que clásicamente se denomina el corazón derecho. Recibe la sangre que proviene de todo el cuerpo, que desemboca en el atrio derecho a través de las venas cavas superior e inferior. Esta sangre, baja en oxígeno, llega al ventrículo derecho, desde donde es enviada a la circulación pulmonar por la arteria pulmonar. Dado que la resistencia de la circulación pulmonar es menor que la sistémica, la fuerza que el ventrículo debe realizar es menor, razón por la cual su tamaño muscular es considerablemente menor al del ventrículo izquierdo.

El atrio izquierdo y el ventrículo izquierdo forman el llamado corazón izquierdo. Recibe la sangre de la circulación pulmonar, que desemboca a través de las cuatro venas pulmonares a la porción superior de la aurícula izquierda. Esta sangre está oxigenada y proviene de los pulmones. El ventrículo izquierdo la envía por la arteria aorta para distribuirla por todo el organismo.
El tejido que separa el corazón derecho del izquierdo se denomina septo o tabique. Funcionalmente, se divide en dos partes no separadas: la superior o tabique interatrial, y la inferior o tabique interventricular. Este último es especialmente importante, ya que por él discurre el fascículo de His, que permite llevar el impulso a las partes más bajas del corazón.

Válvulas cardíacas 

Las válvulas cardíacas son las estructuras que separan unas cavidades de otras, evitando que exista reflujo retrógrado. Están situadas en torno a los orificios atrioventriculares (o aurículo-ventriculares) y entre los ventrículos y las arterias de salida. Son las siguientes cuatro:

La válvula tricúspide, que separa la aurícula derecha del ventrículo derecho.
La válvula pulmonar, que separa el ventrículo derecho de la arteria pulmonar.
La válvula mitral o bicúspide, que separa la aurícula izquierda del ventrículo izquierdo.
La válvula aórtica, que separa el ventrículo izquierdo de la arteria aorta.

Fisiología del músculo cardiaco 

Ciclo cardíaco
 
Cada latido del corazón lleva consigo una secuencia de eventos que en conjunto forman el ciclo cardíaco, constando principalmente de tres etapas: sístole atrial, sístole ventrícular y diástole. El ciclo cardíaco hace que el corazón alterne entre una contracción y una relajación aproximadamente 72 veces por minuto, es decir el ciclo cardíaco dura unos 0,8 segundos.

Para que exista paso de sangre de una cavidad a otra del corazón, la presión de la cavidad impulsora ha de ser siempre mayor que la de la cavidad receptora.
Durante la sístole auricular, las aurículas se contraen y proyectan la sangre hacia los ventrículos, si bien este paso de sangre es esencialmente pasivo, por lo que la contracción auricular participa poco en condiciones de reposo, sí que cobra importancia durante el ejercicio físico. Una vez que la sangre ha sido expulsada de las aurículas, las válvulas atrioventriculares entre las aurículas y los ventrículos se cierran. Esto evita el reflujo de sangre hacia las aurículas. El cierre de estas válvulas produce el sonido familiar del latido del corazón. Dura aproximadamente 0,1 s. En este momento el volumen ventricular es máximo, denominándose volumen de fin de diástole o telediastólico.

La sístole ventricular implica la contracción de los ventrículos expulsando la sangre hacia el aparato circulatorio. En esta fase se contrae primeramente la pared del ventrículo sin que haya paso de sangre porque hay que vencer la elevada presión de la aorta o de la arteria pulmonar; cuando esto se produzca tendrá lugar la eyección, la cual ocurre en dos fases, una rápida y otra lenta. Una vez que la sangre es expulsada, las dos válvulas sigmoideas, la válvula pulmonar en la derecha y la válvula aórtica en la izquierda, se cierran. Dura aprox. 0,3 s.Hay que decir que los ventrículos nunca se vacían del todo, quedando siempre sangre que forma el volumen de fin de sístolo o telesistólico.

Por último la diástole es la relajación de todas las partes del corazón para permitir la llegada de nueva sangre. Dura aprox. 0,4 s. En el proceso se pueden escuchar dos ruidos:
Primer ruido cardiaco: cierre de válvulas tricuspide y mitral.
Segundo ruido cardiaco:cierre de válvulas sigmoideas (válvulas pulmonares y aortas).
Ambos ruidos se producen debido al cierre súbito de las válvulas, sin embargo no es el cierre lo que produce el ruido, sino la reverberación de la sangre adyacente y la vibración de las paredes del corazón y vasos cercanos. La propagación de esta vibración da como resultado la capacidad para auscultar dichos ruidos.
Este movimiento se produce unas 70 a 80 veces por minuto.
La expulsión rítmica de la sangre provoca el pulso que se puede palpar en las arterias radiales, carótidas, femorales, etc.
Si se observa el tiempo de contracción y de relajación se verá que las atrios están en reposo aprox. 0,7 s y los ventrículos unos 0,5 s. Eso quiere decir que el corazón pasa más tiempo en reposo que en trabajo.
En la fisiología del corazón, cabe destacar, que sus células se despolarizan por sí mismas dando lugar a un potencial de acción, que resulta en una contracción del músculo cardíaco. Por otra parte, las células del músculo cardíaco se "comunican" de manera que el potencial de acción se propaga por todas ellas, de tal manera que ocurre la contracción del corazón. El músculo del corazón jamás se tetaniza (los cardiomiocitos tienen alta refractariedad, es por eso que no hay tétanos)
El nodo sinusal tiene actividad marcapasos, esto significa que genera ondas lentas en el resto del tejido sinusal.

Corazón y venas principales.

El músculo cardíaco es miogénico. Esto quiere decir que, a diferencia del músculo esquelético, que necesita de un estímulo consciente o reflejo, el músculo cardiaco se excita a sí mismo. Las contracciones rítmicas se producen espontáneamente, así como su frecuencia puede ser afectada por las influencias nerviosas u hormonales, como el ejercicio físico o la percepción de un peligro.
La estimulación del corazón está coordinada por el sistema nervioso autónomo, tanto por parte del sistema nervioso simpático (aumentando el ritmo y fuerza de contracción) como del parasimpático (reduce el ritmo y fuerza cardiacos).
La secuencia de las contracciones está producida por la despolarización (inversión de la polaridad eléctrica de la membrana debido al paso de iones activos a través de ella) del nodo sinusal o nodo de Keith-Flack (nodus sinuatrialis), situado en la pared superior de la aurícula derecha. La corriente eléctrica producida, del orden del microvoltio, se transmite a lo largo de las aurículas y pasa a los ventrículos por el nodo auriculoventricular (nodo AV) situado en la unión entre los dos ventrículos, formado por fibras especializadas. El nodo AV sirve para filtrar la actividad demasiado rápida de las aurículas. Del nodo AV se transmite la corriente al fascículo de His, que la distribuye a los dos ventrículos, terminando como red de Purkinje.

Este sistema de conducción eléctrico explica la regularidad del ritmo cardíaco y asegura la coordinación de las contracciones auriculoventriculares. Esta actividad eléctrica puede ser analizada con electrodos situados en la superficie de la piel, llamándose a esta prueba electrocardiograma o EKG.

Datos curiosos 

El corazón bombea solamente el 70 por ciento de la sangre que se encuentra en las auriculas y en los ventrículos.
La presión que crea el corazón humano al latir, es suficiente para lanzar la sangre a 10 metros de altura.[cita requerida]
Existen sensores en nuestro sistema circulatorio que se encargan de "sentir (o recibir las sensaciones de)" las presiones, es por esto que se llaman barorreceptores. En el corazón tenemos barorreceptores de presión baja, localizados en las paredes del atrio y en vasos pulmonares, estos son sensibles a la distensión de las paredes. Por ejemplo si disminuye el llenado normal de los vasos pulmonares y atrios entonces habrá una señal (que llega al tronco encefálico) que le avise al sistema nervioso que debe aumentar la actividad simpática y la secreción de Hormona antidiurética para así compensar esa "baja de volumen" que había. También hay barorreceptores en el cayado aórtico y en el seno carotídeo que, según se produzca una disminución o un aumento de la presión sanguínea se estimularán el sistema nervioso simpático o parasimpático respectivamente para así restablecer el cambio de la presión (retroalimentación negativa).
Durante el desarrollo intrauterino del humano, estructuras que cumplen la función del corazón aparecen entre las semanas 4 y 5 pero, al no disponer el embrión de un sistema nervioso en funcionamiento, este funciona de manera automática, y sus latidos tienen una frecuencia de 160 lat/min. Esta frecuencia aumenta hasta la semana 8 a 10. En el último trimestre, cuando el sistema nervioso ya es funcional, la frecuencia disminuye. En esta etapa se produce un control parasimpático del ritmo cardíaco.
Casi todo el mundo tiene el corazón en el centro (entre los pulmones) pero hay una pequeña proporción de la población (0.01%) que tiene el corazón inclinado hacia la derecha.

[img[https://www.nlm.nih.gov/medlineplus/spanish/ency/images/ency/fullsize/19612.jpg]]
/***
|Name:|CloseOnCancelPlugin|
|Description:|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|
|Version:|3.0.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|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 (!store.tiddlerExists(title) && !store.isShadowTiddler(title))
			story.closeTiddler(title,true);
	 	return false;
	}

});

//}}}

Aparato digestivo

El aparato digestivo es el conjunto de órganos (boca, faringe, esófago, estómago, intestino delgado e intestino grueso) encargados del proceso de la digestión, es decir, la transformación de los alimentos para que puedan ser absorbidos y utilizados por las células del organismo.
La función que realiza es la de transporte (alimentos), secreción (jugos digestivos), absorción (nutrientes) y excreción (mediante el proceso de defecación).
El proceso de la digestión es el mismo en todos los animales monogástricos: transformar los glúcidos, lípidos y proteínas en unidades más sencillas, gracias a las enzimas digestivas, para que puedan ser absorbidas y transportadas por la sangre.

Descripción y funciones

El aparato digestivo es un largo tubo, con importantes glándulas asociadas, siendo su función la transformación de las complejas moléculas de los alimentos en sustancias simples y fácilmente utilizables por el organismo.
Desde la boca hasta el ano, el tubo digestivo mide unos once metros de longitud. En la boca ya empieza propiamente la digestión. Los dientes trituran los alimentos y las secreciones de las glándulas salivales los humedecen e inician su descomposición química. Luego, el bolo alimenticio cruza la faringe, sigue por el esófago y llega al estómago, una bolsa muscular de litro y medio de capacidad, en condiciones normales, cuya mucosa segrega el potente jugo gástrico, en el estómago, el alimento es agitado hasta convertirse en una papilla llamada quimo.
A la salida del estómago, el tubo digestivo se prolonga con el intestino delgado, de unos cinco metros de largo, aunque muy replegado sobre sí mismo. En su primera porción o duodeno recibe secreciones de las glándulas intestinales, la bilis y los jugos del páncreas. Todas estas secreciones contienen una gran cantidad de enzimas que degradan los alimentos y los transforman en sustancias solubles simples.
El tubo digestivo continúa por el intestino grueso, de algo más de metro y medio de longitud. Su porción final es el recto, que termina en el ano, por donde se evacuan al exterior los restos indigeribles de los alimentos.
Estructura del tubo digestivo
El tubo digestivo, es un órgano llamado también conducto alimentario o tracto gastrointestinal presenta una sistematización prototípica, comienza en la boca y se extiende hasta el ano. Su longitud en el hombre es de 10 a 12 metros, siendo seis o siete veces la longitud total del cuerpo. En su trayecto a lo largo del tronco del cuerpo, discurre por delante de la columna vertebral. Comienza en la cara, desciende luego por el cuello, atraviesa las tres grandes cavidades del cuerpo: torácica, abdominal y pélvica. En el cuello está en relación con el conducto respiratorio, en el tórax se sitúa en el mediastino posterior entre los dos pulmones y el corazón, y en el abdomen y pelvis se relaciona con los diferentes órganos del aparato genitourinario. El tubo digestivo procede embriológicamente del endodermo, al igual que el aparato respiratorio. El tubo digestivo y las glándulas anexas (glándulas salivales, hígado y páncreas), forman el aparato digestivo. Histológicamente está formado por cuatro capas concéntricas que son de adentro hacia afuera:
Capa interna o mucosa (donde pueden encontrarse glándulas secretoras de moco y HCl vasos linfáticos y algunos nódulos linfoides). Incluye una capa muscular interna o muscularis mucosae compuesta de una capa circular interna y una longitudinal externa de músculo liso.
Capa submucosa compuesta de tejido conectivo denso irregular fibroelástico. La capa submucosa contiene el llamado plexo submucoso de Meissner, que es un componente del sistema nervioso entérico y controla la motilidad de la mucosa y en menor grado la de la submucosa, y las actividades secretorias de las glándulas
Capa muscular externa compuesta, al igual que la muscularis mucosae, por una capa circular interna y otra longitudinal externa de músculo liso (excepto en el esófago, donde hay músculo estriado). Esta capa muscular tiene a su cargo los movimientos peristálticos que desplazan el contenido de la luz a lo largo del tubo digestivo. Entre sus dos capas se encuentra otro componente del sistema nervioso entérico, el plexo mientérico de Auerbach, que regula la actividad de esta capa.
Capa serosa o adventicia. Se denomina según la región del tubo digestivo que reviste, como serosa si es intraperitoneal o adventicia si es retroperitoneal. La adventicia está conformada por un tejido conectivo laxo. La serosa aparece cuando el tubo digestivo ingresa al abdomen, y la adventicia pasa a ser reemplazada por el peritoneo.
Los plexos submucoso y mientérico constituyen el sistema nervioso entérico que se distribuye a lo largo de todo el tubo digestivo, desde el esófago hasta el ano. Por debajo del diafragma, existe una cuarta capa llamada serosa, formada por el peritoneo. El bolo alimenticio pasa a través del tubo digestivo y se desplaza así, con ayuda tanto de secreciones como de movimiento peristáltico que es la elongación o estiramiento de las fibras longitudinales y el movimiento para afuera y hacia adentro de las fibras circulares. A través de éstos el bolo alimenticio puede llegar a la válvula cardial que conecta directamente con el estómago. Si el nivel de corte es favorable, se puede ver los mesos. El peritoneo puede presentar subserosa desarrollada, en especial en la zona del intestino grueso, donde aparecen los apéndices epiploicos. Según el sector del tubo digestivo, la capa muscular de la mucosa puede tener sólo músculo longitudinal o longitudinal y circular. La mucosa puede presentar criptas y vellosidades, la submucosa puede presentar pliegues permanentes o pliegues funcionales. El pliegue funcional de la submucosa es posible de estirar, no así la válvula connivente. El grosor de la pared cambia según el lugar anatómico, al igual que la superficie, que puede ser lisa o no. El epitelio que puede presentarse es un plano pluriestratificado no cornificado o un prismático simple con microvellosidades. En las criptas de la mucosa desembocan glándulas. Éstas pueden ser de la mucosa o de la submucosa. En tanto, una vellosidad es el solevantamiento permanente de la mucosa. Si el pliegue es acompañado por la submucosa, entonces el pliegue es de la submucosa. El pliegue de la mucosa y submucosa es llamado válvula connivente o pliegue de Kerckring. La válvula connivente puede mantener la presencia de vellosidades. La válvula connivente es perpendicular al tubo digestivo, y solo se presenta en el intestino delgado.

Descripción anatómica

El esófago es un conducto o músculo membranoso que se extiende desde la faringe hasta el estómago. De los incisivos al cardias (porción donde el esófago se continua con el estómago) hay unos 40 cm. El esófago empieza en el cuello, atraviesa todo el tórax y pasa al abdomen a través del orificio esofágico del diafragma. Habitualmente es una cavidad virtual. (es decir que sus paredes se encuentran unidas y solo se abren cuando pasa el bolo alimenticio). El esófago alcanza a medir 25 cm y tiene una estructura formada por dos capas de músculos, que permiten la contracción y relajación en sentido descendente del esófago. Estas ondas reciben el nombre de movimientos peristálticos y son las que provocan el avance del alimento hacia el estómago.

El estómago es un órgano en el que se acumula comida.Varia de forma según el estado de repleción (cantidad de contenido alimenticio presente en la cavidad gástrica) en que se halla, habitualmente tiene forma de J. Consta de varias partes que son : fundus, cuerpo, antro y píloro. Su borde menos extenso se denomina curvatura menor y la otra, curvatura mayor. El cardias es el límite entre el esófago y el estómago y el píloro es el límite entre estómago y el intestino delgado . En un individuo mide aproximadamente 25cm del cardias al píloro y el diámetro transverso es de 12cm. Es el encargado de hacer la transformación química ya que los jugos gástricos transforman el bolo alimenticio que anteriormente había sido transformado mecánicamente (desde la boca). En su interior encontramos principalmente dos tipos de células, las células parietales, las cuales secretan el ácido clorhídrico (HCL) y el factor intrínseco, una glucoproteina utilizada en la absorción de vitamina B12 en el intestino delgado; además contiene las células principales u Oxínticas las cuales secretan pepsinógeno, precursor enzimático que se activa con el HCL formando 3 pepsinas cada uno. La secreción de jugo gástrico está regulada tanto por el sistema nervioso como el sistema endocrino, proceso en el que actúan: la gastrina, la colecistoquinina (CCK), la secretina y el péptido inhibidor gástrico (PIG).
En el Estomago se realiza la digestión de:
Proteínas (principalmente pepsina).
Lípidos
NO ocurre la digestión de Carbohidratos.
Otras funciones del estomago son la eliminación de la flora bacteriana que viene con los alimentos por acción del ácido clorhídrico.

El intestino delgado se inicia en el duodeno (tras el píloro) y termina en la válvula ileocecal, por la que se une a la primera parte del intestino grueso. Su longitud es variable y su calibre disminuye progresivamente desde su origen hasta la válvula ileocecal y mide de 6 a 7 metros de longitud. El duodeno, que forma parte del intestino delgado, mide unos 25 - 30 cm de longitud; el intestino delgado consta de una parte próxima o yeyuno y una distal o íleon; el límite entre las dos porciones no es muy aparente. El duodeno se une al yeyuno después de los 30cm a partir del píloro. El yeyuno-ìleon es una parte del intestino delgado que se caracteriza por presentar unos extremos relativamente fijos: El primero que se origina en el duodeno y el segundo se limita con la válvula ileocecal y primera porción del ciego. Su calibre disminuye lenta pero progresivamente en dirección al intestino grueso. El límite entre el yeyuno y el íleon no es apreciable. El intestino delgado presenta numerosas vellosidades intestinales que aumentan la superficie de absorción intestinal de los nutrientes y de las proteínas. Al intestino delgado, principalmente al duodeno, se vierten una diversidad de secreciones, como la bilis y el jugo pancreático.
En el intestino delgado, principalmente en el duodeno se realiza la digestión de proteínas, lípidos, ácidos nucleicos, y carbohidratos.

El intestino grueso se inicia a partir de la válvula ileocecal en un fondo de saco denominado ciego de donde sale el apéndice vermiforme y termina en el recto. Desde el ciego al recto describe una serie de curvas, formando un marco en cuyo centro están las asas del yeyuno íleon. Su longitud es variable, entre 120 y 160 cm, y su calibre disminuye progresivamente, siendo la porción más estrecha la región donde se une con el recto o unión rectosigmoidea donde su diámetro no suele sobrepasar los 3 cm, mientras que el ciego es de 6 o 7 cm. Tras el ciego, la del intestino grueso es denominada como colon ascendente con una longitud de 15cm, para dar origen a la tercera porción que es el colon transverso con una longitud media de 50cm, originándose una cuarta porción que es el colon descendente con 10cm de longitud. Por último se diferencia el colon sigmoideo, recto y ano. El recto es la parte terminal del tubo digestivo.

El páncreas es una glándula íntimamente relacionada con el duodeno, es de origen mixto, segrega hormonas a la sangre para controlar los azúcares y jugo pancreatico que se vierte al intestino a través del conducto pancreático, e interviene y facilita la digestión , sus secreciones son de gran importancia en la digestión de los alimentos.

El hígado es la mayor víscera del cuerpo. Pesa 1500 gramos. Consta de dos lóbulos. Las vías biliares son las vías excretoras del hígado, por ellas la bilis es conducida al duodeno. normalmente salen dos conductos: derecho e izquierdo, que confluyen entre sí formando un conducto único. El conducto hepático, recibe un conducto más fino, el conducto cístico, que proviene de la vesícula biliar alojada en la cara visceral de hígado. De la reunión de los conductos cístico y el hepático se forma el colédoco, que desciende al duodeno, en la que desemboca junto con el conducto excretor del páncreas. La vesícula biliar es un reservorio musculo membranoso puesto en derivación sobre las vías biliares principales. Contiene unos 50-60 cm³ de bilis. Es de forma ovalada o ligeramente piriforme y su diámetro mayor es de unos 8 a 10 cm.

El bazo, por sus principales funciones se debería considerar un órgano del sistema circulatorio, pero por su gran capacidad de absorción de nutrientes por via sanguínea, se le puede sumar a los aparatos anexos del aparato digestivo . Su tamaño depende de la cantidad de sangre que contenga.

[img[http://upload.wikimedia.org/wikipedia/commons/c/cf/Digestive_system_diagram_es.svg]]
Diabetes Mellitus

La diabetes mellitus (DM) o diabetes sacarina es un grupo de trastornos metabólicos,2 que afecta a diferentes órganos y tejidos , dura toda la vida y se caracteriza por un aumento de los niveles de glucosa en la sangre: hiperglicemia.3 Es causada por varios trastornos, incluyendo la baja producción de la hormona insulina, secretada por las células β del páncreas, o por su inadecuado uso por parte del cuerpo,4 5 que repercutirá en el metabolismo de los carbohidratos, lípidos y proteínas.
Los síntomas principales de la diabetes mellitus son emisión excesiva de orina (poliuria), aumento anormal de la necesidad de comer (polifagia), incremento de la sed (polidipsia), y pérdida de peso sin razón aparente.6 La Organización Mundial de la Salud reconoce tres formas de diabetes mellitus: tipo 1, tipo 2 y diabetes gestacional (ocurre durante el embarazo),5 cada una con diferentes causas y con distinta incidencia. Varios procesos patológicos están involucrados en el desarrollo de la diabetes, le confieren un carácter autoinmune, característico de la DM tipo 1, hereditario y resistencia del cuerpo a la acción de la insulina, como ocurre en la DM tipo 2.
Para el 2000, se estimó que alrededor de 171 millones de personas eran diabéticos en el mundo y que llegarán a 370 millones en 2030.7 Este padecimiento causa diversas complicaciones, dañando frecuentemente a ojos, riñones, nervios y vasos sanguíneos. Sus complicaciones agudas (hipoglucemia, cetoacidosis, coma hiperosmolar no cetósico) son consecuencia de un control inadecuado de la enfermedad mientras sus complicaciones crónicas (cardiovasculares, nefropatías, retinopatías, neuropatías y daños microvasculares) son consecuencia del progreso de la enfermedad. El Día Mundial de la Diabetes se conmemora el 14 de noviembre.

[img[http://images.google.com.pe/imgres?imgurl=http://www.magon.cu/websites/vectores/images/diabetes.jpg&imgrefurl=http://www.magon.cu/websites/vectores/pages/semana_diabetes_ss.html&usg=__n9vO1d3kjcR39iTLKVtxRLg4DuQ=&h=285&w=380&sz=79&hl=es&start=8&um=1&tbnid=dKOzJLchQt8zeM:&tbnh=92&tbnw=123&prev=/images%3Fq%3Ddiabetes%2Bmellitus%26hl%3Des%26rlz%3D1G1GGLQ_ESPE292%26sa%3DN%26um%3D1]]


Insuficiencia renal

La insuficiencia renal (o fallo renal) es la condición en la cual los riñones dejan de funcionar correctamente. Fisiológicamente, la insuficiencia renal se describe como una disminución en la filtracion de la sangre tasa de filtración glomerular (TFG). Clínicamente, esto se manifiesta en una creatinina del suero elevada.
Todavía no se entienden bien muchos de los factores que influyen en la velocidad con que se produce la insuficiencia renal o falla en los riñones. Los investigadores todavía se encuentran estudiando el efecto de la proteína en la alimentación y las concentraciones de colesterol en la sangre para la función renal.

Clasificación 

La insuficiencia renal se puede dividir ampliamente en dos categorías, insuficiencia renal aguda e insuficiencia renal crónica.

Algunos problemas de los riñones ocurren rápidamente, como un accidente que causa lesiones renales, la pérdida de mucha sangre que puede causar insuficiencia renal repentina, o algunos medicamentos o sustancias venenosas que pueden hacer que los riñones dejen de funcionar. Esta baja repentina de la función renal se llama insuficiencia renal aguda.
La insuficiencia renal aguda (IRA) es, como su nombre implica, una pérdida rápidamente progresiva de la función renal, generalmente caracterizada por la oliguria, una producción disminuida de la orina, (cuantificada como menos de 400 ml por día en adultos,1 menos de 0,5 mL/kg/h en niños, o menos de 1 mL/kg/h en infantes), desequilibrios del agua y de los fluidos corporales, y desorden del electrolito. Una causa subyacente debe ser identificada para detener el progreso, y la diálisis puede ser necesaria por el tiempo requerido para tratar estas causas fundamentales.
La insuficiencia renal aguda puede llevar a la pérdida permanente de la función renal. Pero si los riñones no sufren un daño grave, esa insuficiencia puede contrarrestarse.

La insuficiencia renal crónica (IRC) es la condición que se produce por el daño permanente e irreversible de la función de los riñones secundario a cualquier causa. A nivel mundial, las causas más frecuentes (pero no las únicas) de Enfermedad Renal Crónica son: la diabetes, la hipertensión, las enfermedades obstructivas de las vías urinarias (como cálculos, tumores, etc.). Puede ser la complicación de una gran cantidad de enfermedades del riñón, tales como nefropatía por IgA (enfermedad de Berger), enfermedades inflamatorias de los riñones (llamadas en conjunto glomerulonefritis), pielonefritis crónica y retención urinaria, y el uso de medicamentos tóxicos para el riñón (especialmente medios de contraste y algunos antibióticos). La insuficiencia renal terminal(IRT)o(ESRF) es la última consecuencia, en la cual generalmente la diálisis se requiere hasta que se encuentre un donante para un trasplante renal.
En la mayoría de los casos, la función renal se deteriora lentamente a lo largo de varios años y da inicialmente pocos síntomas, permitiendo que el paciente no sienta muchas cosas a pesar de tener anemia e incluso tener altos niveles de toxinas en la sangre. Cuando el paciente se siente mal, generalmente estamos ante casos muy avanzados de la enfermedad en los cuales la mayoría de las veces se hace necesario iniciar prontamente una terapia para reemplazar la función del riñón, la diálisis.
Cualquier persona puede sufrir de enfermedad renal, pero los de más alto riesgo son los diabéticos, los hipertensos y los familiares de personas que sufren de enfermedad renal. Como en la enfermedad renal no se producen síntomas (los riñones no duelen como las personas suelen creer, solo en caso de cálculos), las personas en riesgo que mencionamos antes deben hacerse estudios para detectar la enfermedad, los básicos son un parcial de orina y la creatinina.
Si se detecta la enfermedad tempranamente puede reducirse la velocidad con la que el daño progresa, retrasando la necesidad de iniciar las terapias de reemplazo de la función renal y preparando mejor al paciente para cuando sea necesario su inicio. Las terapias de reemplazo renal son la hemodiálisis, la diálisis peritoneal, y el trasplante renal.

[img[http://upload.wikimedia.org/wikipedia/commons/a/ad/SPpiechart.png]]
/***
|Name:|ExtentTagButtonPlugin|
|Description:|Adds a New tiddler button in the tag drop down|
|Version:|3.2 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|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;
}

//}}}

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>>

See also [[MPTW]].
/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.1 ($Rev: 3919 $)|
|Date:|$Date: 2008-03-13 02:03:12 +1000 (Thu, 13 Mar 2008) $|
|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>}}}
***/
//{{{

window.hideWhenLastTest = false;

window.removeElementWhen = function(test,place) {
	window.hideWhenLastTest = test;
	if (test) {
		removeChildren(place);
		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);
	}}

});

//}}}

/***
|Name:|InstantTimestampPlugin|
|Description:|A handy way to insert timestamps in your tiddler content|
|Version:|1.0.10 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|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");

//}}}

/***
|Name:|LessBackupsPlugin|
|Description:|Intelligently limit the number of backup files you create|
|Version:|3.0.1 ($Rev: 2320 $)|
|Date:|$Date: 2007-06-18 22:37:46 +1000 (Mon, 18 Jun 2007) $|
|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);
}
//}}}
MPTW is a distribution or edition of TiddlyWiki that includes a standard TiddlyWiki core packaged with some plugins designed to improve usability and provide a better way to organise your information. For more information see http://mptw.tiddlyspot.com/.
[[Digestivo]] [[Cardiologia]] [[Respiratorio]] [[Renal]] [[Reproductor Masculino]] [[Reproductor Femenino]] [[Enfermedades]]
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

This is in progress. Help appreciated.


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

/***
|Name:|MptwConfigPlugin|
|Description:|Miscellaneous tweaks used by MPTW|
|Version:|1.0 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|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.5.3";

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|MptwStandard|
|Description|Mptw Theme with the default TiddlyWiki PageLayout and Styles|
|ViewTemplate|MptwTheme##ViewTemplate|
|EditTemplate|MptwTheme##EditTemplate|
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
<!--{{{-->
[[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>

<!--}}}-->

!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>
</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 1em; /* 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>

For upgrading. See [[ImportTiddlers]].
URL: http://mptw.tiddlyspot.com/upgrade.html
/***
|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.0 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|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.1 ($Rev: 2263 $)|
|Date:|$Date: 2007-06-13 04:22:32 +1000 (Wed, 13 Jun 2007) $|
|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() {
       var 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;
};

//}}}

/***
|''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:|PrettyDatesPlugin|
|Description:|Provides a new date format ('pppp') that displays times such as '2 days ago'|
|Version:|1.0 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|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.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|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();

//}}}

Aparato excretor

El aparato excretor es un conjunto de órganos encargados de la eliminación de los residuos nitrogenados del metabolismo, conocidos por la medicina como orina; que lo conforman la urea y la creatinina. Su arquitectura se compone de estructuras que filtran los fluidos corporales (líquido celomático, hemolinfa, sangre). En los invertebrados la unidad básica de filtración es el nefridio, mientras que en los vertebrados es la nefrona o nefrón. El aparato urinario humano se compone, fundamentalmente, de dos partes que son:
Los órganos secretores: los riñones, que producen la orina y desempeñan otras funciones
La vía excretora, que recoge la orina y la expulsa al exterior.
Está formado por un conjunto de conductos que son:
Los uréteres, que conducen la orina desde los riñones a la vejiga urinaria.
La vejiga urinaria, receptáculo donde se acumula la orina.
La uretra, conducto por el que sale la orina hacia el exterior, siendo de corta longitud en la mujer y más larga en el hombre denominada uretra peneana.

Histoanatomía del aparato urinario

La parte inicial y de mayor importancia que se encarga de la filtración de tejidos y ciertos fluidos, así como la eliminación de toxinas son los riñones que son órganos con forma de frijol, ubicados en el retroperitoneo sobre la pared abdominal posterior. El borde lateral es convexo y el medial es cóncavo. Sobre éste encontramos el hilio renal que conecta con el seno renal, una cavidad intrínseca en la que se sitúan los cálices renales. Los riñones del latín renis y del griego nefros, pesan alrededor de 150 g, y llegan a medir en el individuo adulto hasta 3×6×12 cm (espesor, anchura y longitud), aunque hay una decreción de tamaño al llegar a la tercera edad. Este órgano es de vital importancia en la vida humana, y se utiliza ampliamente desde la etapa fetal hasta la expiración del individuo para su propia manutención. Excreta agua, productos nitrogenados, sales inorgánicas, ácido úrico, venenos y dióxido de carbono, como resultado del catabolismo proteico, regulando así la osmolaridad de los fluidos corporales, el balance de electrolitos, y de pH. En el riñón se produce la eritropoyetina, estimulando así la formación de eritrocitos en la médula ósea, además de producir renina, calcitrol y prostaglandinas.

Estructura del riñón 

Todo el riñón está cubierto por una cápsula de tejido conectivo colagenoso denso denominada como cápsula nefrótica, y sobre su borde medial se encuentra una incisura denominada hilio renal en donde podemos apreciar la salida de estructuras vitales como la arteria y vena renales y el uréter. La corteza presenta un aspecto rojizo oscuro granulado y rodea completamente a la médula renal enviando prolongaciones denominadas columnas renales que se injertan en toda la profundidad medular. La médula renal presenta el doble de espesor que la corteza y unas estructuras de color rojizo muy claro con forma de pirámides, denominadas pirámides renales, que se separan por las columnas renales. Las papilas renales se distribuyen cada una dentro de un cáliz menor en forma de embudo, tomando en cuenta que cada riñón humano posee 8 a 18 pirámides renales, existiendo también de 8 a 18 cálices menores, y de 2 a 3 cálices mayores.
Desde un punto de vista histológico, en un corte sagital del órgano observaremos que el parénquima (porción celular) está compuesto por una corteza y una médula. En la médula aparecen unas estriaciones organizadas en forma piramidal. Estas pirámides son las denominadas Pirámides de Malpighi(o renales) que presentan un vértice orientado hacia los cálices (papilas).

Funcionamiento del riñón

La principal función del riñón es formar la orina. Esto se logra del siguiente modo: en primer lugar, la sangre que llega al riñón pasa del glomérulo al espacio de Bowman, filtrándose. El líquido formado es idéntico al plasma, excepto que prácticamente carece de proteínas plasmáticas. En segundo lugar, el líquido filtrado ingresa en un sistema de túbulos donde el agua y algunas sustancias específicas son reabsorbidas y/o secretadas, hecho que cambia la composición y concentración del líquido. Finalmente, el líquido modificado es excretado luego de salir del riñón por las papilas y de atravesar las vías urinarias.

Vías urinarias 

El viaje de la orina pasa desde las papilas renales hacia los cálices menores, y de ahí a los cálices mayores, la pelvis renal y mediante el uréter llegan a la vejiga en donde sirve de reservorio para la orina, con una capacidad normal de 500 ml, alcanzando su capacidad máxima de 1 L . De la vejiga atraviesa la uretra por donde es expulsada hacia el exterior del organismo, alcanzando una velocidad de 30 a 35 km/h cuando la vejiga se encuentra llena en su capacidad promedio, y cuando está en su máximo reservorio es expulsada a unos 50 km/h . Al atravesar la uretra peneana (en el varón) cabe mencionar que la orina es expulsada a mayor velocidad alcanzando en su cúspide máxima hasta unos 75 km/h, siendo proporcionada estas características expulsivas por la estructura de dicha uretra.

La vejiga y los uréteres están revestidos por un epitelio de transición que sólo aparece en el recorrido de las vías urinarias excretoras, denominado en urología como urotelio. En el uréter encontramos 3 túnicas denominadas como Túnica Mucosa, Túnica Muscular y la Túnica Adventicia.

Inervación del sistema urinario

Las fibras nerviosas alcanzan el riñón siguiendo el plexo renal. Hay una red de fibras nerviosas que siguen con la arteria renal desde la aorta hasta el riñón. En el plexo renal, también puede haber cuerpos de células ganglionares; deben considerarse células emigradas de los ganglios aórtico y celiaco. La mayor parte de las fibras del plexo renal corresponden a la porción simpática del sistema vegetativo y provienen de las células de los ganglios celiaco y aórtico. En el plexo renal hay un número menor de fibras parasimpáticas. Provienen del nervio vago, cuyas fibras, para alcanzarlo, atraviesan el plexo celíaco sin interrupción.
Las fibras nerviosas del plexo renal siguen las paredes arteriales y penetran en la sustancia del riñón. Penetran en los glomérulos para constituir en ellos amplias redes perivasculares. También pueden inervar el epitelio de los tubos contorneados, el epitelio de transición de la pelvis, y las paredes de arterias y venas.

Como tanto los riñones trasplantados, que carecen de inervación, como los riñones in situ desprovistos de sus nervios, funcionan de forma prácticamente normal, se podría decir que las funciones renales no dependen fundamentalmente de mecanismos nerviosos. Sin embargo, éstos la controlan hasta cierto punto. Es muy probable que la mayor parte de esta acción se ejerza por vía de las fibras simpáticas que terminan en los 
vasos sanguíneos.

Impulsos aferentes siguen por los nervios del plexo renal, pues la sección de las fibras de este plexo suprime el dolor de origen renal. A lo largo del uréter hay fibras simpáticas y fibras parasimpáticas, pero no parecen guardar relación particular con los movimientos peristálticos normales que se producen en la musculatura del conducto, ya que tales movimientos continúan cuando dichos nervios han sido cortados. Algunos de estos nervios llevan impulsos aferentes.

La vejiga está inervada tanto por fibras simpáticas como por fibras parasimpáticas. Las parasimpáticas provienen de la porción sacra. Los ganglios terminales a los cuales van a parar dichas fibras se hallan en la propia pared vesical; por lo tanto, en cortes de vejiga, un estudiante puede alguna vez encontrar células ganglionares.

[img[http://www.juntadeandalucia.es/averroes/~29701428/salud/nuevima/renal7.gif]]
/***
|Name:|RenameTagsPlugin|
|Description:|Allows you to easily rename or delete tags across multiple tiddlers|
|Version:|3.0 ($Rev: 5501 $)|
|Date:|$Date: 2008-06-10 23:11:55 +1000 (Tue, 10 Jun 2008) $|
|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++) {
			store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old
			store.setTiddlerTag(tiddlers[i].title,true,newTag);  // add new
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	storeMethods: {

		saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,

		saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {
			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);
		},

		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();

//}}}


Aparato reproductor femenino

Partes internas del sistema reproductor femenino

El aparato reproductor femenino es el sistema sexual femenino. Junto con el masculino, es uno de los encargados de garantizar la reproducción humana. Ambos se componen de las gónadas, órganos sexuales donde se forman los gametos y producen las hormonas sexuales, las vías genitales y los genitales externos.

Partes del aparato reproductor femenino

El sistema reproductor femenino está compuesto por:

Órganos internos

Ovarios: son los órganos productores de gametos femeninos u ovocitos, de tamaño variado según la cavidad, y la edad; a diferencia de los testículos, están situados en la cavidad abdominal. El proceso de formación de los óvulos, o gametos femeninos, se llama ovulogénesis y se realiza en unas cavidades o folículos cuyas paredes están cubiertas de células que protegen y nutren el óvulo. Cada folículo contiene un solo óvulo, que madura cada 28 días, aproximadamente. La ovulogénesis es periódica, a diferencia de la espermatogénesis, que es continua.
Los ovarios también producen estrógenos y progesteronas, hormonas que regulan el desarrollo de los caracteres sexuales secundarios, como la aparición de vello o el desarrollo de las mamas, y preparan el organismo para un posible embarazo.
Tubos uterinos o Trompas de Falopio: conductos de entre 10 a 13 cm que comunican los ovarios con el útero y tienen como función llevar el óvulo hasta él para que se produzca la fecundación. En raras ocasiones el embrión se puede desarrollar en una de las trompas, produciéndose un embarazo ectópico. El orificio de apertura de la trompa al útero se llama ostium tubárico.

Útero: órgano hueco y musculoso en el que se desarrollará el feto. La pared interior del útero es el endometrio, el cual presenta cambios cíclicos mensuales relacionados con el efecto de hormonas producidas en el ovario, los estrógenos.

Vagina: es el canal que comunica con el exterior, conducto por donde entrarán los espermatozoides. Su función es recibir el pene durante el coito y dar salida al bebé durante el parto.
La irrigación sanguínea de los genitales internos está dada fundamentalmente por la arteria uterina, rama de la arteria hipogástrica y la arteria ovárica, rama de la aorta.
La inervación está dada por fibras simpáticas del plexo celíaco y por fibras parasimpáticas provenientes del nervio pélvico.

Órganos externos

Región externa del aparato reproductor femenino
En conjunto se conocen como la vulva y están compuestos por:

Clítoris: Órgano eréctil y altamente erógeno de la mujer y se considera homólogo al pene masculino, concretamente al glande.

Labios: En número de dos a cada lado, los labios mayores y los labios menores, pliegues de piel salientes, de tamaño variables, constituidas por glándulas sebáceas y sudoríparas e inervados.

Monte de Venus: Una almohadilla adiposa en la cara anterior de la sínfisis púbica, cubierto de vello púbico y provista de glándulas sebáceas y sudoríparas.

Vestíbulo vulvar: Un área en forma de almendra perforado por seis orificios, el meato de la uretra, el orificio vaginal, las glándulas de Bartolino y las glándulas parauretrales de Skene.
La forma y apariencia de los órganos sexuales femeninos varía considerablemente de una mujer a otra.

[img[http://upload.wikimedia.org/wikipedia/commons/6/6a/Female_reproductive_system_lateral_nolabel.png]]
Aparato reproductor masculino

El aparato reproductor masculino, junto con el femenino, es uno de los encargados de garantizar la procreación humana.

Se puede nombrar con los siguientes términos:
Aparato reproductivo masculino.
Aparato genital masculino.
Sistema reproductor masculino.
Sistema genital masculino.
Los órganos reproductores internos son aquellos que se encuentran en la cavidad abdominal o púbico, por lo tanto los órganos externos se encuentran fuera de ésta, aunque estén cubiertos por tejido o piel (Ejemplo: el pene y los testículos).
Está compuesto por órganos internos y externos En los seres humanos, el sistema reproductor produce, almacena, nutre y libera las células reproductoras (óvulos y espermatozoides).

Órganos internos

Epidídimo
El epidídimo, también llamado gavón, es un tubo estrecho y alargado, situado en la parte posterior superior del testículo; conecta los conductos deferentes al reverso de cada testículo. Está constituido por la reunión y apelotonamiento de los conductos seminíferos. Se distingue una cabeza, cuerpo y cola que continúa con el conducto deferente. Tiene aproximadamente 5 cm de longitud por 12 mm de ancho. Está presente en todos los mamíferos machos.

Conducto deferente
Los conductos deferentes o vasos deferentes constituyen parte de la anatomía masculina de algunas especies, incluyendo la humana. Son un par de tubos musculares rodeados de músculo liso, cada uno de 30 cm aproximadamente, que conectan el epidídimo con los conductos eyaculatorios intermediando el recorrido del semen entre éstos.
Durante la eyaculación los tubos lisos se contraen, enviando el semen a los conductos eyaculatorios y luego a la uretra, desde donde es expulsado al exterior. La vasectomía es un método de anticoncepción en el cual los vasos deferentes son cortados. Una variación moderna, que también es popularmente conocida como vasectomía aunque no incluye cortar los conductos consiste en colocar un material que obstruya el paso del semen a través de aquéllos.
Una de las consecuencias de la fibrosis quística es la ausencia de los vasos deferentes, dejando infértil al 100% de los varones que la sufren.
Vesículas seminales
Secretan un liquido alcalino viscoso que neutraliza el ambiente ácido de la uretra. En condiciones normales el liquido contribuye alrededor del 60% del semen. Las vesículas o glándulas seminales son unas glándulas productoras de aproximadamente el 3% del volumen del líquido seminal situadas en la excavación pélvica. Detrás de la vejiga urinaria, delante del recto e inmediatamente por encima de la base de la próstata, con la que están unidas por su extremo inferior.

Conducto eyaculador
Los conductos eyaculatorios constituyen parte de la anatomía masculina; cada varón tiene dos de ellos. Comienzan al final de los vasos deferentes y terminan en la uretra. Durante la eyaculación, el semen pasa a través de estos conductos y es posteriormente expulsado del cuerpo a través del pene.

Próstata
La próstata es un órgano glandular del aparato genitourinario, exclusivo de los hombres, con forma de castaña, localizada enfrente del recto, debajo y a la salida de la vejiga urinaria. Contiene células que producen parte del líquido seminal que protege y nutre a los espermatozoides contenidos en el semen.

Uretra
La uretra es el conducto por el que discurre la orina desde la vejiga urinaria hasta el exterior del cuerpo durante la micción. La función de la uretra es excretora en ambos sexos y también cumple una función reproductiva en el hombre al permitir el paso del semen desde las vesículas seminales que abocan a la próstata hasta el exterior.

Glándulas bulbouretrales
Las glándulas bulbouretrales, también conocidas como glándulas de Cowper, son dos glándulas que se encuentran debajo de la próstata y su función es secretar un líquido alcalino que lubrica y neutraliza la acidez de la uretra antes del paso del semen en la eyaculación. Este líquido puede contener espermatozoides (generalmente arrastrados), por lo cual la práctica de retirar el pene de la vagina antes de la eyaculación no es un método anticonceptivo efectivo.

Cuerpo esponjoso
El cuerpo esponjoso es la más pequeña de las tres columnas de tejido eréctil que se encuentran en el interior del pene (las otras dos son los cuerpos cavernosos). Está ubicado en la parte inferior del miembro viril.
Su función es la de evitar que, durante la erección, se comprima la uretra (conducto por el cual son expulsados tanto el semen como la orina). Cuando el pene se encuentra en dicho estado, contiene solamente el 10% de la sangre; los cuerpos cavernosos absorben el 90% de la misma.
El glande (también conocido como cabeza del pene) es la última porción y la parte más ancha del cuerpo esponjoso; presenta una forma cónica.
Cuerpo cavernoso
Los cuerpos cavernosos constituyen un par de columnas de tejido eréctil situadas en la parte superior del pene, que se llenan de sangre durante las erecciones.

[img[http://upload.wikimedia.org/wikipedia/commons/2/2e/Male_reproductive_system_lateral_nolabel.png]]
Aparato respiratorio

El aparato respiratorio generalmente incluye tubos, como los bronquios, usados para cargar aire en los pulmones, donde ocurre el intercambio gaseoso. El diafragma como todo músculo puede contraerse y relajarse. Al relajarse los pulmones al contar con espacio se expanden para llenarse de aire y al contraerse el mismo es expulsado. Estos sistemas respiratorios varían de acuerdo al organismo.
En humanos y otros mamíferos, el sistema respiratorio consiste en vías aéreas, pulmones y músculos respiratorios que medían en el movimiento del aire tanto adentro como afuera del cuerpo. Intercambio de gases: es el intercambio de oxígeno y dióxido de carbono, del animal con su medio. Dentro del sistema alveolar de los pulmones, las moléculas de oxigeno y dióxido de carbono se intercambian pasivamente, por difusión, entre el entorno gaseoso y la sangre. Así, el sistema respiratorio facilita la oxigenación con la remoción concomitante del dióxido de carbono -y otros gases que son desechos del metabolismo- de la circulación.
El sistema también ayuda a mantener el balance entre ácidos y bases en el cuerpo a través de la eficiente remoción de dióxido de carbono de la sangre.

El hombre utiliza respiración pulmonar y cutánea, la cual le permite respirar por cortos períodos debajo del agua. Su aparato respiratorio consta de:
Sistema de conducción: fosas nasales, boca, faringe, laringe, tráquea, bronquios principales, bronquios lobares, bronquios segmentarios y bronquiolos.
Sistema de intercambio: conductos y los sacos alveolares. El espacio muerto anatómico, o zona no respiratoria (no hay intercambios gaseosos) del árbol bronquial incluye las 16 primeras generaciones bronquiales, siendo su volumen de unos 150 ml.
Microporos cutáneos: le permiten respirar aún sin hacer uso de los pulmones.
La función del aparato respiratorio consiste en desplazar volúmenes de aire desde la atmósfera a los pulmones y viceversa. Lo anterior es posible gracias a un proceso conocido como ventilación. La ventilación es un proceso cíclico y consta de dos etapas: la inspiración, que es la entrada de aire a los pulmones, y la espiración, que es la salida. La inspiración es un fenómeno activo, caracterizado por el aumento del volumen torácico que provoca una presión intrapulmonar negativa y determina el desplazamiento de aire desde el exterior hacia los pulmones. La contracción de los músculos inspiratorios principales, diafragma e intercostales externos, es la responsable de este proceso. Una vez que la presión intrapulmonar iguala a la atmosférica, la inspiración se detiene y entonces, gracias a la fuerza elástica de la caja torácica, esta se retrae, generando una presión positiva que supera a la atmosférica y determinando la salida de aire desde los pulmones. En condiciones normales la respiración es un proceso pasivo. Los músculos respiratorios activos son capaces de disminuir aún más el volumen intratorácico y aumentar la cantidad de aire que se desplaza al exterior, lo que ocurre en la espiración forzada. Mientras este ciclo ventilario ocurre, en los sacos alveolares, los gases contenidos en el aire que participan en el intercambio gaseoso, oxígeno y dióxido de carbono, difunden a favor de su gradiente de concentración, de lo que resulta la oxigenación y detoxificación de la sangre. El volumen de aire que entra y sale del pulmón por minuto, tiene cierta sincronía con el sistema cardiovascular y el ritmo circadiano (como disminución de la frecuencia de inhalación/exhalación durante la noche y en estado de vigilia/sueño). Variando entre 6 a 80 litros (dependiendo de la demanda). Se debe tener cuidado con los peligros que implica la ventilación pulmonar ya que junto con el aire también entran partículas sólidas que puede obstruir y/o intoxicar al organismo. Las de mayor tamaño son atrapadas por los vellos y el material mucoso de la nariz y del tracto respiratorio, que luego son extraídas por el movimiento ciliar hasta que son tragadas, escupidas o estornudadas. A nivel bronquial, por carecer de cilios, se emplean macrófagos y fagocitos para la limpieza de partículas.

Adaptación a alturas
Siempre vamos a tener una fracción inspirada de oxígeno de 21% (FiO2) porque la composición de la atmósfera es constante pero a medida que va aumentando la altura irá bajando la presión atmósférica y por lo tanto la presión de oxígeno que inspiramos.
Generalmente sucede que nos apunamos si subimos una montaña muy alta, eso es porque el organismo aún no se acostumbra a tanto cambio de presiones, se habla entonces de una hipoxia de alturas, cuyas consecuencias son:
Inmediatas
Hay taquicardia y aumento del gasto cardíaco, aumento de la resistencia de la arteria pulmonar, hiperventilación (que si es excesiva puede llevar a una alcalosis respiratoria), cambios mentales, el aumento de la frecuencia cardíaca y aumento de la presión arterial es por aumento del tono adrenérgico.
Crónicas
Aumento de la masa de glóbulos rojos, aumento del p50, compensación renal de la alcalosis respiratoria, aumento de la densidad de capilares musculares y aumento del número de mitocondrias y sus enzimas oxidativas.

Definición de los órganos

Vía Nasal: Consiste en dos amplias cavidades cuya función es permitir la entrada del aire, el cual se humedece, filtra y calienta a una determinada temperatura a través de unas estructuras llamadas pituitarias.

Faringe: es un conducto muscular, membranoso que ayuda a que el aire se vierta hacia las vías aéreas inferiores.

Epiglotis: es una tapa que impide que los alimentos entren en la laringe y en la tráquea al tragar. También marca el límite entre la orofaringe y la laringofaringe.

Laringe: es un conducto cuya función principal es la filtración del aire inspirado. Además, permite el paso de aire hacia la tráquea y los pulmones y se cierra para no permitir el paso de comida durante la deglución si la propia no la ha deseado y tiene la función de órgano fonador, es decir, produce el sonido.

Tráquea: Brinda una vía abierta al aire inhalado y exhalado desde los pulmones.

Bronquio: Conducir el aire que va desde la tráquea hasta los bronquiolos.

Bronquiolo: Conducir el aire que va desde los bronquios pasando por los bronquiolos y terminando en los alvéolos.

Alvéolo: Permite el intercambio gaseoso, es decir, en su interior la sangre elimina el dióxido de carbono y recoge oxígeno.

Pulmones: La función de los pulmones es realizar el intercambio gaseoso con la sangre, por ello los alvéolos están en estrecho contacto con capilares.

Músculos intercostales: La función principal de los músculos respiratorios es la de movilizar un volumen de aire que sirva para, tras un intercambio gaseoso apropiado, aportar oxígeno a los diferentes tejidos.

Diafragma: Músculo estriado que separa la cavidad toráxica (pulmones, mediastino, etc.) de la cavidad abdominal (intestinos, estómago, hígado, etc.). Interviene en la respiración, descendiendo la presión dentro de la cavidad toráxica y aumentando el volumen durante la inhalación y aumentando la presión y disminuyendo el volumen durante la exhalación. Este proceso se lleva a cabo, principalmente, mediante la contracción y relajación del diafragma.

Las vías nasales se conforman de:
Células sensitivas.
Nervio olfativo.
Pituitaria.
Cornetes.
Fosas nasales.

Espirometria

PaO2: Presión arterial de oxígeno. Medida en mmHg o kPa (equivalencias en SI)
PaCO2: Presión arterial de dioxido de carbono
PACO2: Presión alveolar de dioxido de carbono
Presión alveolar de anhídrido carbónico (PACO2)= 0,863 VCO2/VA
Diferencia o gradiente alvéolo-arterial de carbónico. Normalmente es cero ya que PACO2 = PaCO2
Diferencia o gradiente alvéolo-arterial de oxígeno = PAO2-PaO2×D (A-a) O2
PAO2: Presión alveolar de oxígeno
Presión alveolar de oxígeno (PAO2)= PiO2- PaCO2/R
PiO2: Presión inspiratoria de oxígeno
A nivel del mar esto supone: [(760-47)×FiO2]
R= Cociente respiratorio, aprox 0,8 (relación entre consumo de O2 (VO2) y producción de CO2 (VCO2))
FiO2= Fracción inspiratoria de oxigeno (aprox 21%, a nivel del mar)

Para calcular los valores normales de la D (A-a) O2, en función de la edad se puede emplear la siguiente ecuación : D (A-a) O2= 2,5 + (0,21 × edad). En el nivel del mar, la presión parcial ejercida por el contenido de vapor de agua es de 47 mm Hg. y la del dióxido de carbono es de 40 mm Hg., lo que hace que la presión del aire alveolar seco sea de 713 mm Hg. (760 - 47 = 713).
VA= Ventilación alveolar, es la diferencia entre la ventilación pulmonar y la ventilación del espacio muerto.

Conceptos

Hipoxemia : disminución de la PaO2 < 80 mmHg
Hipoxia : disminución de la PaO2 a nivel celular
Insuficiencia respiratoria: disminución de la presión parcial de oxígeno (PaO2) por debajo de 60 mmHg a nivel del mar. Dos tipos:
Parcial: disminución de la PaO2 con PaCO2 normal o baja
Global: disminución de PaO2 y aumento de PaCO2 (acidosis respiratoria)
aparato respiratorio

Composición del aire seco 
Oxígeno	21%
Nitrógeno	78%
Anhídrido carbónico	0,03%
Argón y helio	0,92%
Vapor de agua	0%
Composición del aire alveolar [editar]
Oxígeno	16%
Nitrógeno	77%
Anhídrido carbónico	5%	Vapor de agua	2%

[img[http://ebsco.smartimagebase.com/imagescooked/29128W.jpg]]
/***
|Name:|SaveCloseTiddlerPlugin|
|Description:|Provides two extra toolbar commands, saveCloseTiddler and cancelCloseTiddler|
|Version:|3.0 ($Rev: 5502 $)|
|Date:|$Date: 2008-06-10 23:31:39 +1000 (Tue, 10 Jun 2008) $|
|Source:|http://mptw.tiddlyspot.com/#SaveCloseTiddlerPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
To use these you must add them to the tool bar in your 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.1 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|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(); });
}};

//}}}

Apuntes de medicina y otros
R@M()N
<<allTags excludeLists>>
<<tabs txtMoreTab "Tags" "All Tags" TabAllTags "Miss" "Missing tiddlers" TabMoreMissing "Orph" "Orphaned tiddlers" TabMoreOrphans "Shad" "Shadowed tiddlers" TabMoreShadowed>>
<<allTags excludeLists [a-z]>>
/***
|Name:|TagglyTaggingPlugin|
|Description:|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|
|Version:|3.3.1 ($Rev: 9828 $)|
|Date:|$Date: 2009-06-03 21:38:41 +1000 (Wed, 03 Jun 2009) $|
|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;
		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";
				removeChildren(place);
				addClass(place,"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;
	}
});

//}}}

/***
|Name:|ToggleTagPlugin|
|Description:|Makes a checkbox which toggles a tag in a tiddler|
|Version:|3.1.0 ($Rev: 4907 $)|
|Date:|$Date: 2008-05-13 03:15:46 +1000 (Tue, 13 May 2008) $|
|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 = 'ramon2009';

// 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,{

'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"),

'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"),

'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"),

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

});
//}}}
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 28/10/2009 19:29:30 | YourName | [[/|http://ramon2009.tiddlyspot.com/]] | [[store.cgi|http://ramon2009.tiddlyspot.com/store.cgi]] | . | [[index.html | http://ramon2009.tiddlyspot.com/index.html]] | . |
| 28/10/2009 19:29:30 | YourName | [[/|http://ramon2009.tiddlyspot.com/]] | [[store.cgi|http://ramon2009.tiddlyspot.com/store.cgi]] | . | [[index.html | http://ramon2009.tiddlyspot.com/index.html]] | . |
| 28/10/2009 19:29:31 | YourName | [[/|http://ramon2009.tiddlyspot.com/]] | [[store.cgi|http://ramon2009.tiddlyspot.com/store.cgi]] | . | [[index.html | http://ramon2009.tiddlyspot.com/index.html]] | . |
| 28/10/2009 19:29:32 | YourName | [[/|http://ramon2009.tiddlyspot.com/]] | [[store.cgi|http://ramon2009.tiddlyspot.com/store.cgi]] | . | [[index.html | http://ramon2009.tiddlyspot.com/index.html]] | . |
| 28/10/2009 19:29:32 | YourName | [[/|http://ramon2009.tiddlyspot.com/]] | [[store.cgi|http://ramon2009.tiddlyspot.com/store.cgi]] | . | [[index.html | http://ramon2009.tiddlyspot.com/index.html]] | . |
| 28/10/2009 19:29:33 | YourName | [[/|http://ramon2009.tiddlyspot.com/]] | [[store.cgi|http://ramon2009.tiddlyspot.com/store.cgi]] | . | [[index.html | http://ramon2009.tiddlyspot.com/index.html]] | . |
| 28/10/2009 19:36:48 | YourName | [[index.html|http://ramon2009.tiddlyspot.com/index.html]] | [[store.cgi|http://ramon2009.tiddlyspot.com/store.cgi]] | . | [[index.html | http://ramon2009.tiddlyspot.com/index.html]] | . |
| 28/10/2009 19:39:22 | YourName | [[index.html|http://ramon2009.tiddlyspot.com/index.html]] | [[store.cgi|http://ramon2009.tiddlyspot.com/store.cgi]] | . | [[index.html | http://ramon2009.tiddlyspot.com/index.html]] | . |
| 28/10/2009 20:59:32 | YourName | [[index.html|http://ramon2009.tiddlyspot.com/index.html]] | [[store.cgi|http://ramon2009.tiddlyspot.com/store.cgi]] | . | [[index.html | http://ramon2009.tiddlyspot.com/index.html]] | . |
| 29/10/2009 14:56:02 | Ramon | [[/|http://ramon2009.tiddlyspot.com/#%5B%5BReproductor%20Femenino%5D%5D]] | [[store.cgi|http://ramon2009.tiddlyspot.com/store.cgi]] | . | [[index.html | http://ramon2009.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");


//}}}