The Alveolar Gas Equation \n!~PAO2 = (~FiO2 * (~Patm - ~Ph2o)) - (~PaCO2 / 0.8)\n\nAlveolar to arterial (A-a) Oxygen Gradient Equation\n!A-a gradient = ~PAO2 - ~PaO2\n\nIt is normal for the A-a gradient to be less than 10 mmHg.\nThe A-a gradient changes with age, a quick estimation of an age adjusted A-a gradient can be calculated\nNormal A-a gradient (age adjusted) = (age in years/4) + 4
|pH|pO2|pCO2|~HCO3-|~SaO2|\n|7.40|95|40|23|100|\n\n<<slider chkslider nl_abg Normal "Normal ABG Values">>
I have developed A.nesthesia C.ase L.earning S.essions as a way to teach clinical problem solving in the field of anesthesiology. This web site will present a new case each week. These cases will be commonly encountered cases that pose questions on how to manage these cases as well as address many complications that can develop in this medical specialty. When relevant articles are available, I will include links for further reading. I hope you find this helpful.
<<option chkGenerateAnRssFeed>> GenerateAnRssFeed\n<<option chkOpenInNewWindow>> OpenLinksInNewWindow\n<<option chkSaveEmptyTemplate>> SaveEmptyTemplate\n<<option chkToggleLinks>> Clicking on links to tiddlers that are already open causes them to close\n^^(override with Control or other modifier key)^^\n<<option chkHttpReadOnly>> HideEditingFeatures when viewed over HTTP\n<<option chkForceMinorUpdate>> Treat edits as MinorChanges by preserving date and time\n^^(override with Shift key when clicking 'done' or by pressing Ctrl-Shift-Enter^^\n<<option chkConfirmDelete>> ConfirmBeforeDeleting\nMaximum number of lines in a tiddler edit box: <<option txtMaxEditRows>>\nFolder name for backup files: <<option txtBackupFolder>>\n\n<<option chkSinglePageMode>> Display one tiddler at a time
[[Link|http:www. ]]
COPD - Chronic Obstructive Pulomonary Disease
67 year old female presents to the pre-operative holding area scheduled to undergo [[endoscopic sinus surgery]]. She appears older than her stated age with a 80 [[pack-year]] smoking history, Moderate [[COPD]] requiring 2 l/min home oxygen, [[hypertension]], and [[hyperlipidemia]].\n\n<<slider chkTestSlider PE1 Vitals "Vital Signs and PE">><<slider chkTestSlider Labs1 Laboratory "Lab Values">><<slider chkTestSlider Tests1.1 CXR "Chest X-ray">><<slider chkTestSlider Tests1.2 EKG "EKG">>\n----\nWhat are you concerned about from an anesthesiology standpoint about this case presentation?\n\nAre you ready to proceed to the operating room with this patient?\n\n\n\n\n
A 35-year-old male with a history of smoking and hypertension is admitted to the hospital with substernal chest pain and shortness of breath. There is no radiation of the pain or diaphoresis. He smokes 1-2 ppd for the past 10 years and occasionally uses alcohol. He denies any additional medical problems. Prior to this hospital admission, he played basketball 3-4 times per week without any problems. He is currently taking HCTZ for his hypertension with adequate control. He denies medication allergies and has undergone an uneventful exploratory laparotomy 3 years ago.\n\n<<slider chkTestSlider2 PE2 Vitals "Vital Signs and PE">><<slider chkTestSlider2 Labs2 Laboratory "Lab Values">><<slider chkTestSlider2 Tests2.1 CXR "Chest X-ray">><<slider chkTestSlider2 Tests2.2 EKG "EKG">>\n\n----\n\n<<slider holdvar answer2.1 "What is concerning to you about this patients presentation?">>\n\n<<slider holdvar answer2.2 "If this picture is not the result of cardiac ischemia, what else might be occurring?">>\n\n<<slider holdvar answer2.3 "What are the causes of pericardial effusions and tamponade?">>\n\nIn all these cases, there is Pericarditis (i.e. inflammation of the pericardial tissue). This inflammation results in fluid release and build up in the pericardial sac. Pericarditis only rarely leads to actual Cardiac Tamponade.\n\n<<slider holdvar answer2.4 "What is the treatment for cardiac tamponade?">>\n\n<<slider holdvar answer2.5 "What monitors would you use in the OR for this patient?">>\n\n<<slider holdvar answer2.6 "What are the hemodynamic problems of pericardial tamponade?">>\n\n<<slider holdvar answer2.7 "How would you induce this patient for anesthesia?">>
62 year-old male arrived in preadmission testing for an elective adrenalectomy scheduled for tomorrow. His past medical history is significant for recent diagnosis of poorly controlled hypertension and palpitations for which he is currently taking clonidine. He denies any allergies to medications and has no prior anesthetic complications. He is active playing tennis 3x per week without problems. Remainder of his systems review is negative.\n\n<<slider chkTestSlider3 PE3 Vitals "Vital Signs and PE">><<slider chkTestSlider3 Labs3 Laboratory "Lab Values">><<slider chkTestSlider3 Tests3.1 CXR "Chest X-ray">><<slider chkTestSlider3 Tests3.2 EKG "EKG">><<slider chkTestSlider3 Tests3.3 "Stress Echo" "Cardiac Stress Test">>\n----\n\n<<slider chkanswer3 answer3.1 "How do patients with this disease process typically present?">>\n\n<<slider chkanswer3 answer3.2 "What preoperative preparation is required for patients with pheochromocytomas?">>\n\n<<slider chkanswer3 answer3.3 "What are the anesthetic options for management of this patient?">>\n\n<<slider chkanswer3 answer3.4 "What are the potential postoperative problems in these patients?">>
28 year-old female for elective sterilization (laproscopic tubal ligation). Pre-operative history includes a remote history of abdominal pain and recent joint and back pain. Occasionally she complains of sternal chest pain, which presents either at rest or with exertion.\n\n<<slider chkslider4 PE4 Vitals "Physical Exam and Vital Signs">>\n\n\n<<slider chkslider4 answer4.1 "What is concerning about this case and what is the likely diagnosis?">>\n\n<<slider chkslider4 answer4.2 "What is the common clinical features of this disease?">>\n\n<<slider chkslider4 answer4.3 "What complications can occur with this disease during the perioperative period?">>\n\n<<slider chkslider4 answer4.4 "What additional pre-operative labs might be useful in this patient population?">>\n\n<<slider chkslider4 answer4.5 "What pre-operative optimization strategies are there for this disease?">>\n\n<<slider chkslider4 answer4.6 "What intraoperative choices/considerations are needed?">>\n\n<<slider chkslider4 answer4.7 "What postoperative considerations must we keep in mind?">>
A 46 year-old male with a history of hypertension, gastroesophageal reflux disease (GERD), and obstructive sleep apnea presents for UPPP. On questioning, he states he is a ~non-smoker who is relatively active with daily tasks, however, is not in any reqular exercise program. He uses CPAP while sleeping, but feels it is not benefiting him.\n\n<<slider chkslider5 PE5 "Vitals" "Physical Exam and Vital Signs">><<slider chkslider5 Labs5 "Labs">><<slider chkslider5 Tests5.1 "EKG">>\n\n\n<<slider chkslider5.1 answer5.1 "What is the incidence of difficult ventilation, difficult direct laryngoscopy & difficult intubation?">>\n\n<<slider chkslider5.2 answer5.2 "What does Mallampati classification tell us">>\n\n<<slider chkslider5.3 answer5.3 "What makes up a complete airway evaluation according to the 2003 ASA Difficult Airway Guidelines?">>\n\n<<slider chkslider5.4 answer5.4 "What are the intubation choices for this patient?">>\n\n<<slider chkslider5.5 answer5.5 "How do you anesthetize the airway?">>\n\n<<slider chkslider5.6 answer5.6 "Case goes uneventfully, now its 1 am that evening, the pt returns emergently with blood pooring out of his mouth. How do you secure his airway?">>
[[Surgical Specialty]]\n[[Disease]]\nComplication
config.options.chkSinglePageMode=true;
/***\nJust some bits and pieces\n***/\n//{{{\nconfig.messages.messageClose.text = "X"; // default is "close"\nconfig.views.wikified.defaultText = ""; // default is "The tiddler '%0' doesn't yet exist. Double-click to create it"\nconfig.options.chkHttpReadOnly = false; // Enable editing so that visitors can experiment with it\n//}}}
/***\n''ConfirmExitPlugin for ~TiddlyWiki version 1.2.x and 2.0''\n(http://www.tiddlytools.com/#ConfirmExitPlugin)\n\n^^source: http://groups.google.com/group/TiddlyWikiDev/msg/e969118b48d14420^^\n***/\n//{{{\nconfig.messages.confirmExit = "There are unsaved changes in TiddlyWiki."\nwindow.onbeforeunload = function(e){if(store&&store.isDirty&&store.isDirty())return config.messages.confirmExit;};\n//}}}
[img[wiki_images/C&L.png]]\n\nReference:\nLevack ID, Masson AH. [[Difficult tracheal intubation in obstetrics|http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=4003742&query_hl=12&itool=pubmed_docsum]]. Anaesthesia. 1985 Apr;40(4):384. \n\n\n
[[Tachycardia]]\n[[Bradycardia]]\n[[Hypertension]]\n[[Hypotension]]\n[[Hypoxemia]]\n[[Hypercarbia]]\n[[Delayed Emergence]]\n
[[NewCase]]
[[Cardiac]]\n[[Pulmonary]]\n[[Neurologic]]\n[[Gastrointestinal]]\n[[Hepatic]]\n[[Endocrine]]\n[[Renal]]\n[[Musculoskeletal]]\n[[Immunologic]]\n[[Integument]]
<!---\n| Name:|~TagglyTaggingEditTemplate |\n| Version:|1.1 (12-Jan-2006)|\n| Source:|http://simonbaird.com/mptw/#TagglyTaggingEditTemplate|\n| Purpose:|See TagglyTagging for more info|\n| Requires:|You need the CSS in TagglyTaggingStyles to make it look right|\n--->\n<!--{{{-->\n<div class="toolbar" macro="toolbar +saveTiddler closeOthers -cancelTiddler deleteTiddler"></div>\n<div class="title" macro="view title"></div>\n<div class="editLabel">Title</div><div class="editor" macro="edit title"></div>\n<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>\n<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>\n<div class="editor" macro="edit text"></div>\n<br/>\n<!--}}}-->
!Definition:\nNormal intracranial pressure is less than 15 mmHg. Due to the rigidity of the cranial vault, small changes or intracranial contents can quickly increase ICP (Monro-Kelly Doctrine).\n\n!Treatment of Elevated ICP:\n\n\n
Welcome to your brand new [[MonkeyPirateTiddlyWiki|http://simonbaird.com/mptw/]]. This is the standard empty [[TiddlyWiki|http://www.tiddlywiki.com/]] (version <<version>>) preconfigured with a few bits and pieces from MPTW, in particular the layout, the colours, and the popular [[TagglyTagging|http://simonbaird.com/mptw/#TagglyTagging]]. If you're new to ~TagglyTagging then try the (slightly out-of-date) [[FAQ|http://simonbaird.com/mptw1/#TagglyTaggingFAQ]] and [[Tutorial|http://simonbaird.com/mptw1/#TagglyTaggingTutorial]].\n\nTo get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:\n* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)\n* MainMenu: The menu (usually on the left)\n* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened\nYou'll also need to enter your username for signing your edits: <<option txtUserName>>\n\nTo create your own tiddlers, click 'new tiddler' in the right sidebar. To edit a tiddler click the 'edit' button in the tiddler's toolbar. To save all your tiddlers click 'save changes' in the right sidebar.\n\nUse this to import tiddlers from another TiddlyWiki. You can use a local file (click Browse...) or type the url of an online TiddlyWiki.\n<<importTiddlers inline>>\n
This is a test where a patients blood is drawn and passed through an electrical current. This process seperates the different types of hemoglobins present in the blood. Infant, adult and diseased hemoglobin responds differently to this electrical charge and moves at a different rate through a gel. This test is used to make a diagnosis of what type of hemoglobinopathy is present. Patients with sickle cell disease and sickle cell trait behave differently with this test as do people with thalassemias.
/***\nTo use, add {{{[[HorizontalMainMenuStyles]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also HorizontalMainMenu and PageTemplate.\n***/\n/*{{{*/\n\n#topMenu br {display:none; }\n#topMenu { background: #39a; }\n#topMenu { padding:2px; }\n#topMenu .button, #topMenu .tiddlyLink {\n margin-left:0.5em; margin-right:0.5em;\n padding-left:3px; padding-right:3px;\n color:white; font-size:115%;\n}\n#topMenu .button:hover, #topMenu .tiddlyLink:hover { background:#178;}\n\n#displayArea { margin: 1em 15.7em 0em 1em; } /* so we use the freed up space */\n\n/* just in case want some QuickOpenTags in your topMenu */\n#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }\n#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }\n#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }\n\n\n/*}}}*/
!Definition: \n*Perioperative Hypertension is defined as an elevation in blood pressure of more than 20% from a patient's baseline blood pressure.\n\n!Causes of Hypertension\n*Pre-existing Hypertension\n**Essential Hypertension\n**Autonomic Dysreflexia\n**Renovascular Hypertension\n**~Pre-Eclampsia/Eclampsia\n*Excessive Catecholamines\n**Pain\n**Laryngoscopy\n**Anesthetic Emergence\n**Reflex Hypertension from medication withdrawl\n**[[Pheochromocytoma|Case #3]]\n*Misc perioperative causes of Hypertension\n**[[Hypoxemia]]\n**Hypercarbia\n**[[Elevated ICP]]\n**Volume Overload\n**Inadvertant Vaspopressor Administration\n**Bladder Distension \n
!Definition:\nHypoxemia is a fall of arterial oxygen saturation of more than 5% from baseline or an absolute oxygen saturation of less than 90%. From arterial blood samples, hypoxemia is defined as a arterial blood oxygen concentration of less than 60 mmHg.\n\n!Causes of Hypoxemia:\nThere are 5 recognized categories that lead to hypoxemia.\n----\n!Normal [[A-a Gradient]]\n*Low Inspired ~FiO2\n**Low atmospheric oxygen tension (high altitudes)\n**Low inspired oxygen delivery relative to patient's oxygen requirement\n**[[Diffusional Hypoxemia]]\n*Alveolar Hypoventilation\n**Inadequate [[Minute Ventilation]]\n----\n!Increased [[A-a Gradient]]\n*V/Q Mismatch\n*Shunt\n*Difusion Abnormality
/***\n''Import Tiddlers Plugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#ImportTiddlersPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nWhen many people share and edit copies of the same TiddlyWiki document, the ability to quickly collect all these changes back into a single, updated document that can then be redistributed to the entire group is very important. This plugin lets you selectively combine tiddlers from any two TiddlyWiki documents. It can also be very useful when moving your own tiddlers from document to document (e.g., when upgrading to the latest version of TiddlyWiki, or 'pre-loading' your favorite stylesheets into a new 'empty' TiddlyWiki document.)\n\n!!!!!Inline interface (live)\n<<<\n<<importTiddlers inline>>\n<<<\n!!!!!Macro Syntax\n<<<\n{{{<<importTiddlers>>}}}\ncreates "import tiddlers" link. click to show/hide import control panel\n\n{{{<<importTiddlers inline>>}}}\ncreates import control panel directly in tiddler content\n\n{{{<<importTiddlers filter source quiet ask>>}}}\nnon-interactive 'automatic' import.\n''filter'' determines which tiddlers will be automatically selected for importing. Use one of the following keywords:\n>''"new"'' retrieves only tiddlers that are found in the import source document, but do not yet exist in the destination document\n>''"changes"'' retrieves only tiddlers that exist in both documents for which the import source tiddler is newer than the existing tiddler\n>''"updates"'' retrieves both ''new'' and ''changed'' tiddlers (this is the default action when none is specified)\n>''"all"'' retrieves ALL tiddlers from the import source document, even if they have not been changed.\n''source'' is the location of the imported document. It can be either a local document or an URL:\n>filename is any local path/file, in whatever format your system requires\n>URL is any remote web location that starts with "http://" or "https://"\n''"quiet"'' (optional)\n>supresses all status message during the import processing (e.g., "opening local file...", "found NN tiddlers..." etc). Note that if ANY tiddlers are actualy imported, a final information message will still be displayed (along with the ImportedTiddlers report), even when 'quiet' is specified. This ensures that changes to your document cannot occur without any visible indication at all.\n''"ask"'' (optional)\n>adds interactive confirmation. A browser message box (OK/Cancel) is displayed for each tiddler that will be imported, so that you can manually bypass any tiddlers that you do not want to import.\n\n''Special tag values: importReplace and importPublic''\n\nBy adding these special tags to an existing tiddler, you can precisely control whether or not to allow updates to that tiddler as well as decide which tiddlers in your document can be automatically imported by others.\n*''For maximum safety, the default action is to prevent existing tiddlers from being unintentionally overwritten by incoming tiddlers.'' To allow an existing tiddler to be overwritten by an imported tiddler, you must tag the existing tiddler with ''<<tag importReplace>>''\n*''For maximum privacy, the default action for //outgoing// tiddlers is to NOT automatically share your tiddlers with others.'' To allow a tiddler in your document to be shared via auto-import actions by others, you must tag it with ''<<tag importPublic>>''\n//Note: these tags are only applied when using the auto-import processing. When using the interactive control panel, all tiddlers in the imported document are available in the listbox, regardless of their tag values.//\n<<<\n!!!!!Interactive Usage\n<<<\nWhen used interactively, a control panel is displayed consisting of an "import source document" filename input (text field plus a ''[Browse...]'' button), a listbox of available tiddlers, a "differences only" checkbox, an "add tags" input field and four push buttons: ''[open]'', ''[select all]'', ''[import]'' and ''[close]''.\n\nPress ''[browse]'' to select a TiddlyWiki document file to import. You can also type in the path/filename or a remote document URL (starting with http://)and press ''[open]''. //Note: There may be some delay to permit the browser time to access and load the document before updating the listbox with the titles of all tiddlers that are available to be imported.//\n\nSelect one or more titles from the listbox (hold CTRL or SHIFT while clicking to add/remove the highlight from individual list items). You can press ''[select all]'' to quickly highlight all tiddler titles in the list. Use the ''[-]'', ''[+]'', or ''[=]'' links to adjust the listbox size so you can view more (or less) tiddler titles at one time. When you have chosen the tiddlers you want to import and entered any extra tags, press ''[import]'' to begin copying them to the current TiddlyWiki document.\n\n''Differences Only:''\n\nThe "differences only" checkbox allows you to filter the list so that you only see tiddlers that either A) don't exist in the current document, or B) have a different date/time stamp (indicating that the tiddler has been changed in some way). This makes it very quick and easy to find and import just the updated tiddlers you are interested in.\n\n''Import Tagging:''\n\nTiddlers that have been imported can be automatically tagged, so they will be easier to find later on, after they have been added to your document. New tags are entered into the "add tags" input field, and then //added// to the existing tags for each tiddler as it is imported.\n\n''Skip, Rename, Merge, or Replace:''\n\nWhen importing a tiddler whose title is identical to one that already exists, the import process pauses and the tiddler title is displayed in an input field, along with four push buttons: ''[skip]'', ''[rename]'', ''[merge]'' and ''[replace]''.\n\nTo bypass importing this tiddler, press ''[skip]''. To import the tiddler with a different name (so that both the tiddlers will exist when the import is done), enter a new title in the input field and then press ''[rename]''. Press ''[merge]'' to combine the content from both tiddlers into a single tiddler. Press ''[replace]'' to overwrite the existing tiddler with the imported one, discarding the previous tiddler content.\n\n//Note: if both the title ''and'' modification date/////time match, the imported tiddler is assumed to be identical to the existing one, and will be automatically skipped (i.e., not imported) without asking.//\n\n''Import Report History''\n\nWhen tiddlers are imported, a report is generated into ImportedTiddlers, indicating when the latest import was performed, the number of tiddlers successfully imported, from what location, and by whom. It also includes a list with the title, date and author of each tiddler that was imported.\n\nWhen the import process is completed, the ImportedTiddlers report is automatically displayed for your review. If more tiddlers are subsequently imported, a new report is //added// to ImportedTiddlers, above the previous report (i.e., at the top of the tiddler), so that a reverse-chronological history of imports is maintained.\n\nIf a cumulative record is not desired, the ImportedTiddlers report may be deleted at any time. A new ImportedTiddlers report will be created the next time tiddlers are imported.\n\nNote: You can prevent the ImportedTiddlers report from being generated for any given import activity by clearing the "create a report" checkbox before beginning the import processing.\n\n<<<\n!!!!!Installation\n<<<\ncopy/paste the following tiddlers into your document:\n''ImportTiddlersPlugin'' (tagged with <<tag systemConfig>>)\n\ncreate/edit ''SideBarOptions'': (sidebar menu items) \n^^Add "< < ImportTiddlers > >" macro^^\n\n''Quick Installation Tip #1:''\nIf you are using an unmodified version of TiddlyWiki (core release version <<version>>), you can get a new, empty TiddlyWiki with the Import Tiddlers plugin pre-installed (''[[download from here|TW+ImportExport.html]]''), and then simply import all your content from your old document into this new, empty document.\n<<<\n!!!!!Revision History\n<<<\n''2006.02.10 [2.5.2]''\ncorrected unintended global variable in importReport().\n''2006.02.05 [2.5.1]''\nmoved globals from window.* to config.macros.importTiddlers.* to avoid FireFox 1.5.0.1 crash bug when referencing globals\n''2006.01.18 [2.5.0]''\nadded checkbox for "create a report". Default is to create/update the ImportedTiddlers report. Clear the checkbox to skip this step.\n''2006.01.15 [2.4.1]''\nadded "importPublic" tag and inverted default so that auto sharing is NOT done unless tagged with importPublic\n''2006.01.15 [2.4.0]''\nAdded support for tagging individual tiddlers with importSkip, importReplace, and/or importPrivate to control which tiddlers can be overwritten or shared with others when using auto-import macro syntax. Defaults are to SKIP overwriting existing tiddlers with imported tiddlers, and ALLOW your tiddlers to be auto-imported by others.\n''2006.01.15 [2.3.2]''\nAdded "ask" parameter to confirm each tiddler before importing (for use with auto-importing)\n''2006.01.15 [2.3.1]''\nStrip TW core scripts from import source content and load just the storeArea into the hidden IFRAME. Makes loading more efficient by reducing the document size and by preventing the import document from executing its TW initialization (including plugins). Seems to resolve the "Found 0 tiddlers" problem. Also, when importing local documents, use convertUTF8ToUnicode() to convert the file contents so support international characters sets.\n''2006.01.12 [2.3.0]''\nReorganized code to use callback function for loading import files to support event-driven I/O via an ASYNCHRONOUS XMLHttpRequest. Let's processing continue while waiting for remote hosts to respond to URL requests. Added non-interactive 'batch' macro mode, using parameters to specify which tiddlers to import, and from what document source. Improved error messages and diagnostics, plus an optional 'quiet' switch for batch mode to eliminate //most// feedback.\n''2006.01.11 [2.2.0]''\nAdded "[by tags]" to list of tiddlers, based on code submitted by BradleyMeck\n''2006.01.09 [2.1.1]''\nWhen a URL is typed in, and then the "open" button is pressed, it generates both an onChange event for the file input and a click event for open button. This results in multiple XMLHttpRequest()'s which seem to jam things up quite a bit. I removed the onChange handling for file input field. To open a file (local or URL), you must now explicitly press the "open" button in the control panel.\n''2006.01.08 [2.1.0]''\nIMPORT FROM ANYWHERE!!! re-write getImportedTiddlers() logic to either read a local file (using local I/O), OR... read a remote file, using a combination of XML and an iframe to permit cross-domain reading of DOM elements. Adapted from example code and techniques courtesy of Jonny LeRoy.\n''2006.01.06 [2.0.2]''\nWhen refreshing list contents, fixed check for tiddlerExists() when "show differences only" is selected, so that imported tiddlers that don't exist in the current file will be recognized as differences and included in the list.\n''2006.01.04 [2.0.1]''\nWhen "show differences only" is NOT checked, import all tiddlers that have been selected even when they have a matching title and date.\n''2005.12.27 [2.0.0]''\nUpdate for TW2.0\nDefer initial panel creation and only register a notification function when panel first is created\n''2005.12.22 [1.3.1]''\ntweak formatting in importReport() and add 'discard report' link to output\n''2005.12.03 [1.3.0]''\nDynamically create/remove importPanel as needed to ensure only one instance of interface elements exists, even if there are multiple instances of macro embedding. Also, dynamically create/recreate importFrame each time an external TW document is loaded for importation (reduces DOM overhead and ensures a 'fresh' frame for each document)\n''2005.11.29 [1.2.1]''\nfixed formatting of 'detail info' in importReport()\n''2005.11.11 [1.2.0]''\nadded 'inline' param to embed controls in a tiddler\n''2005.11.09 [1.1.0]''\nonly load HTML and CSS the first time the macro handler is called. Allows for redundant placement of the macro without creating multiple instances of controls with the same ID's.\n''2005.10.25 [1.0.5]''\nfixed typo in importReport() that prevented reports from being generated\n''2005.10.09 [1.0.4]''\ncombined documentation with plugin code instead of using separate tiddlers\n''2005.08.05 [1.0.3]''\nmoved CSS and HTML definitions into plugin code instead of using separate tiddlers\n''2005.07.27 [1.0.2]''\ncore update 1.2.29: custom overlayStyleSheet() replaced with new core setStylesheet()\n''2005.07.23 [1.0.1]''\nadded parameter checks and corrected addNotification() usage\n''2005.07.20 [1.0.0]''\nInitial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n\n// // Version\n//{{{\nversion.extensions.importTiddlers = {major: 2, minor: 5, revision: 2, date: new Date(2006,2,10)};\n//}}}\n\n// // 1.2.x compatibility\n//{{{\nif (!window.story) window.story=window;\nif (!store.getTiddler) store.getTiddler=function(title){return store.tiddlers[title]}\nif (!store.addTiddler) store.addTiddler=function(tiddler){store.tiddlers[tiddler.title]=tiddler}\nif (!store.deleteTiddler) store.deleteTiddler=function(title){delete store.tiddlers[title]}\n//}}}\n\n// // IE needs explicit global scoping for functions/vars called from browser events\n//{{{\nwindow.onClickImportButton=onClickImportButton;\nwindow.loadImportFile=loadImportFile;\nwindow.refreshImportList=refreshImportList;\n//}}}\n\n// // default cookie/option values\n//{{{\nif (!config.options.chkImportReport) config.options.chkImportReport=true;\n//}}}\n\n\n// // ''MACRO DEFINITION''\n\n//{{{\nconfig.macros.importTiddlers = { };\nconfig.macros.importTiddlers = {\n label: "import tiddlers",\n prompt: "Copy tiddlers from another document",\n src: "", // path/filename or URL of document to import\n inbound: null, // hash-indexed array of tiddlers from other document\n tags: "", // text of tags added to imported tiddlers\n listsize: 10, // # of lines to show in imported tiddler list\n diffs: true, // show differences option (toggle)\n index: 0, // current processing index in import list\n sort: "" // sort order for imported tiddler listbox\n};\n\nconfig.macros.importTiddlers.handler = function(place,macroName,params) {\n // LINK WITH FLOATING PANEL\n if (!params[0]) {\n createTiddlyButton(place,this.label,this.prompt,onClickImportMenu);\n return;\n }\n // INLINE TIDDLER CONTENT\n if (params[0]=="inline") {\n createImportPanel(place);\n document.getElementById("importPanel").style.position="static";\n document.getElementById("importPanel").style.display="block";\n return;\n }\n // NON-INTERACTIVE BATCH MODE\n switch (params[0]) {\n case 'all':\n case 'new':\n case 'changes':\n case 'updates':\n var filter=params.shift();\n break;\n default:\n var filter="updates";\n break;\n } \n if (!params[0]||!params[0].length) return; // filename is required\n config.macros.importTiddlers.src=params.shift();\n var quiet=(params[0]=="quiet"); if (quiet) params.shift();\n var ask=(params[0]=="ask"); if (ask) params.shift();\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n // load storeArea from a hidden IFRAME, then apply import rules and add/replace tiddlers\n loadImportFile(config.macros.importTiddlers.src,filter,quiet,ask,autoImportTiddlers);\n}\n//}}}\n\n// // ''READ TIDDLERS FROM ANOTHER DOCUMENT''\n\n//{{{\nfunction loadImportFile(src,filter,quiet,ask,callback) {\n if (!quiet) clearMessage();\n // LOCAL FILE\n if ((src.substr(0,7)!="http://")&&(src.substr(0,8)!="https://")) {\n if (!quiet) displayMessage("Opening local document: "+ src);\n var txt=loadFile(src);\n if(!txt) { if (!quiet) displayMessage("Could not open local document: "+src); }\n else {\n var s="<html><body>"+txt.substr(txt.indexOf('<div id="storeArea">'));\n if (!quiet) displayMessage(txt.length+" bytes in document. ("+s.length+" bytes used for tiddler storage)");\n config.macros.importTiddlers.inbound = readImportedTiddlers(convertUTF8ToUnicode(s));\n var count=config.macros.importTiddlers.inbound?config.macros.importTiddlers.inbound.length:0;\n if (!quiet) displayMessage("Found "+count+" tiddlers in "+src);\n if (callback) callback(src,filter,quiet,ask);\n }\n return;\n }\n // REMOTE FILE\n var x; // XML object\n try {x = new XMLHttpRequest()}\n catch(e) {\n try {x = new ActiveXObject("Msxml2.XMLHTTP")}\n catch (e) {\n try {x = new ActiveXObject("Microsoft.XMLHTTP")}\n catch (e) { return }\n }\n }\n x.onreadystatechange = function() {\n if (x.readyState == 4) {\n if (x.status == 200) {\n var sa="<html><body>"+x.responseText.substr(x.responseText.indexOf('<div id="storeArea">'));\n if (!quiet) displayMessage(x.responseText.length+" bytes in document. ("+sa.length+" bytes used for tiddler storage)");\n config.macros.importTiddlers.inbound = readImportedTiddlers(sa);\n var count=config.macros.importTiddlers.inbound?config.macros.importTiddlers.inbound.length:0;\n if (!quiet) displayMessage("Found "+count+" tiddlers in "+src);\n if (callback) callback(src,filter,quiet,ask);\n }\n else\n if (!quiet) displayMessage("Could not open remote document:"+ src+" (error="+x.status+")");\n }\n }\n if (document.location.protocol=="file:") { // UniversalBrowserRead only works from a local file context\n try {netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead')}\n catch (e) { if (!quiet) displayMessage(e.description?e.description:e.toString()); }\n }\n if (!quiet) displayMessage("Opening remote document: "+ src);\n try {\n var url=src+(src.indexOf('?')<0?'?':'&')+'nocache='+Math.random();\n x.open("GET",url,true);\n x.overrideMimeType('text/html');\n x.send(null);\n }\n catch (e) {\n if (!quiet) {\n displayMessage("Could not open remote document: "+src);\n displayMessage(e.description?e.description:e.toString());\n }\n }\n}\n\nfunction readImportedTiddlers(txt)\n{\n var importedTiddlers = [];\n // create frame\n var f=document.getElementById("importFrame");\n if (f) document.body.removeChild(f);\n f=document.createElement("iframe");\n f.id="importFrame";\n f.style.width="0px"; f.style.height="0px"; f.style.border="0px";\n document.body.appendChild(f);\n // get document\n var d=f.document;\n if (f.contentDocument) d=f.contentDocument; // For NS6\n else if (f.contentWindow) d=f.contentWindow.document; // For IE5.5 and IE6\n // load source into document\n d.open(); d.writeln(txt); d.close();\n // read tiddler DIVs from storeArea DOM element \n var importStore = [];\n var importStoreArea = d.getElementById("storeArea");\n if (!importStoreArea || !(importStore=importStoreArea.childNodes) || (importStore.length==0)) { return null; }\n importStoreArea.normalize();\n for(var t = 0; t < importStore.length; t++) {\n var e = importStore[t];\n var title = null;\n if(e.getAttribute)\n title = e.getAttribute("tiddler");\n if(!title && e.id && (e.id.substr(0,5) == "store"))\n title = e.id.substr(5);\n if(title && title != "") {\n var theImported = new Tiddler();\n theImported.loadFromDiv(e,title);\n importedTiddlers.push(theImported);\n }\n }\n return importedTiddlers;\n}\n//}}}\n\n// // ''NON-INTERACTIVE IMPORT''\n\n// // import all/new/changed tiddlers into store, replacing or adding tiddlers as needed\n//{{{\nfunction autoImportTiddlers(src,filter,quiet,ask)\n{\n var count=0;\n if (config.macros.importTiddlers.inbound) for (t=0;t<config.macros.importTiddlers.inbound.length;t++) {\n var theImported = config.macros.importTiddlers.inbound[t];\n var theExisting = store.getTiddler(theImported.title);\n\n // only import tiddlers if tagged with "importPublic"\n if (theImported.tags && theImported.tags.find("importPublic")==null)\n { config.macros.importTiddlers.inbound[t].status=""; continue; } // status=="" means don't show in report\n\n // never import the "ImportedTiddlers" history from the other document...\n if (theImported.title=='ImportedTiddlers')\n { config.macros.importTiddlers.inbound[t].status=""; continue; } // status=="" means don't show in report\n\n // check existing tiddler for importReplace, or systemConfig tags\n config.macros.importTiddlers.inbound[t].status="added"; // default - add any tiddlers not filtered out\n if (store.tiddlerExists(theImported.title)) {\n config.macros.importTiddlers.inbound[t].status="replaced";\n if (!theExisting.tags||(theExisting.tags.find("importReplace")==null))\n { config.macros.importTiddlers.inbound[t].status="not imported - tiddler already exists (use importReplace to allow changes)"; continue; }\n if ((theExisting.tags.find("systemConfig")!=null)||(theImported.tags.find("systemConfig")!=null))\n config.macros.importTiddlers.inbound[t].status+=" - WARNING: an active systemConfig plugin has been added or updated";\n }\n\n // apply the all/new/changes/updates filter \n if (filter!="all") {\n if ((filter=="new") && store.tiddlerExists(theImported.title))\n { config.macros.importTiddlers.inbound[t].status="not imported - tiddler already exists"; continue; }\n if ((filter=="changes") && !store.tiddlerExists(theImported.title))\n { config.macros.importTiddlers.inbound[t].status="not imported - new tiddler"; continue; }\n if (store.tiddlerExists(theImported.title) && ((theExisting.modified.getTime()-theImported.modified.getTime())>=0))\n { config.macros.importTiddlers.inbound[t].status="not imported - tiddler is unchanged"; continue; }\n }\n\n // get confirmation if required\n if (ask && !confirm("Import "+(theExisting?"updated":"new")+" tiddler '"+theImported.title+"'\snfrom "+src))\n { config.macros.importTiddlers.inbound[t].status="skipped - cancelled by user"; continue; }\n\n // DO THE IMPORT!!\n store.addTiddler(theImported); count++;\n }\n importReport(quiet); // generate a report (as needed) and display it if not 'quiet'\n if (count) store.setDirty(true); \n // always show final message when tiddlers were actually imported\n if (!quiet||count) displayMessage("Imported "+count+" tiddler"+(count!=1?"s":"")+" from "+src);\n}\n//}}}\n\n// // ''REPORT GENERATOR''\n\n//{{{\nfunction importReport(quiet)\n{\n if (!config.macros.importTiddlers.inbound) return;\n // DEBUG alert('importReport: start');\n\n // if import was not completed, the Ask panel will still be open... close it now.\n var askpanel=document.getElementById('importAskPanel'); if (askpanel) askpanel.style.display='none'; \n // get the alphasorted list of tiddlers\n var tiddlers = config.macros.importTiddlers.inbound;\n tiddlers.sort(function (a,b) {if(a['title'] == b['title']) return(0); else return (a['title'] < b['title']) ? -1 : +1; });\n // gather the statistics\n var count=tiddlers.length;\n var added=0; var replaced=0; var renamed=0; var skipped=0; var merged=0;\n for (var t=0; t<count; t++)\n if (tiddlers[t].status)\n {\n if (tiddlers[t].status=='added') added++;\n if (tiddlers[t].status.substr(0,7)=='skipped') skipped++;\n if (tiddlers[t].status.substr(0,6)=='rename') renamed++;\n if (tiddlers[t].status.substr(0,7)=='replace') replaced++;\n if (tiddlers[t].status.substr(0,6)=='merged') merged++;\n }\n var omitted=count-(added+replaced+renamed+skipped+merged);\n // DEBUG alert('stats done: '+count+' total, '+added+' added, '+skipped+' skipped, '+renamed+' renamed, '+replaced+' replaced, '+merged+' merged');\n // skip the report if nothing was imported\n if (added+replaced+renamed+merged==0) return;\n // skip the report if not desired by user\n if (!config.options.chkImportReport) {\n // reset status flags\n for (var t=0; t<count; t++) config.macros.importTiddlers.inbound[t].status="";\n // refresh display since tiddlers have been imported\n store.notifyAll();\n // quick message area summary report\n var msg=(added+replaced+renamed+merged)+' of '+count+' tiddler'+((count!=1)?'s':"");\n msg+=' imported from '+config.macros.importTiddlers.src.replace(/\s\s/g,'/')\n displayMessage(msg);\n return;\n }\n // create the report tiddler (if not already present)\n var tiddler = store.getTiddler('ImportedTiddlers');\n if (!tiddler) // create new report tiddler if it doesn't exist\n {\n tiddler = new Tiddler();\n tiddler.title = 'ImportedTiddlers';\n tiddler.text = "";\n }\n // format the report header\n var now = new Date();\n var newText = "";\n newText += "On "+now.toLocaleString()+", "+config.options.txtUserName+" imported tiddlers from\sn";\n newText += "[["+config.macros.importTiddlers.src+"|"+config.macros.importTiddlers.src+"]]:\sn";\n newText += "<"+"<"+"<\sn";\n newText += "Out of "+count+" tiddler"+((count!=1)?"s ":" ")+" in {{{"+config.macros.importTiddlers.src.replace(/\s\s/g,'/')+"}}}:\sn";\n if (added+renamed>0)\n newText += (added+renamed)+" new tiddler"+(((added+renamed)!=1)?"s were":" was")+" added to your document.\sn";\n if (merged>0)\n newText += merged+" tiddler"+((merged!=1)?"s were":" was")+" merged with "+((merged!=1)?"":"an ")+"existing tiddler"+((merged!=1)?"s":"")+".\sn"; \n if (replaced>0)\n newText += replaced+" existing tiddler"+((replaced!=1)?"s were":" was")+" replaced.\sn"; \n if (skipped>0)\n newText += skipped+" tiddler"+((skipped!=1)?"s were":" was")+" skipped after asking.\sn"; \n if (omitted>0)\n newText += omitted+" tiddler"+((omitted!=1)?"s":"")+((omitted!=1)?" were":" was")+" not imported.\sn";\n if (config.macros.importTiddlers.tags!="")\n newText += "imported tiddlers were tagged with: \s""+config.macros.importTiddlers.tags+"\s"\sn";\n // output the tiddler detail and reset status flags\n for (var t=0; t<count; t++)\n if (tiddlers[t].status!="")\n {\n newText += "#["+"["+tiddlers[t].title+"]"+"]";\n newText += ((tiddlers[t].status!="added")?("^^\sn"+tiddlers[t].status+"^^"):"")+"\sn";\n config.macros.importTiddlers.inbound[t].status="";\n }\n newText += "<"+"<"+"<\sn";\n // output 'discard report' link\n newText += "<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n newText += "onclick=\s"story.closeTiddler('"+tiddler.title+"'); store.deleteTiddler('"+tiddler.title+"');\s" ";\n newText += "value=\s"discard report\s"></html>";\n // update the ImportedTiddlers content and show the tiddler\n tiddler.text = newText+((tiddler.text!="")?'\sn----\sn':"")+tiddler.text;\n tiddler.modifier = config.options.txtUserName;\n tiddler.modified = new Date();\n store.addTiddler(tiddler);\n if (!quiet) story.displayTiddler(null,"ImportedTiddlers",1,null,null,false);\n story.refreshTiddler("ImportedTiddlers",1,true);\n // refresh the display\n store.notifyAll();\n}\n//}}}\n\n// // ''INTERFACE DEFINITION''\n\n// // Handle link click to create/show/hide control panel\n//{{{\nfunction onClickImportMenu(e)\n{\n if (!e) var e = window.event;\n var parent=resolveTarget(e).parentNode;\n var panel = document.getElementById("importPanel");\n if (panel==undefined || panel.parentNode!=parent)\n panel=createImportPanel(parent);\n var isOpen = panel.style.display=="block";\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n panel.style.display = isOpen ? "none" : "block" ;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n//}}}\n\n// // Create control panel: HTML, CSS, register for notification\n//{{{\nfunction createImportPanel(place) {\n var panel=document.getElementById("importPanel");\n if (panel) { panel.parentNode.removeChild(panel); }\n setStylesheet(config.macros.importTiddlers.css,"importTiddlers");\n panel=createTiddlyElement(place,"span","importPanel",null,null)\n panel.innerHTML=config.macros.importTiddlers.html;\n store.addNotification(null,refreshImportList); // refresh listbox after every tiddler change\n return panel;\n}\n//}}}\n\n// // CSS\n//{{{\nconfig.macros.importTiddlers.css = '\s\n#importPanel {\s\n display: none; position:absolute; z-index:11; width:30em; right:105%; top:3em;\s\n padding: 0.5em; margin:0em; text-align:left; font-size: 8pt;\s\n background-color: #eee; color:#000000; \s\n border:1px solid black; border-bottom-width: 3px; border-right-width: 3px; -moz-border-radius:1em;\s\n}\s\n#importPanel input { width: 100%; margin: 1px; font-size:8pt; }\s\n#importPanel select { width: 100%; margin: 1px; font-size:8pt; }\s\n#importPanel .importButton { padding: 0em; margin: 0px; font-size:8pt; }\s\n#importPanel .importListButton { padding:0em 0.25em 0em 0.25em; color: #000000; display:inline }\s\n#importAskPanel { display:none; margin:0.5em 0em 0em 0em; }\s\n';\n//}}}\n\n// // HTML\n//{{{\nconfig.macros.importTiddlers.html = '\s\nimport from source document:\s\n<input type="file" id="fileImportSource" size=46\s\n onKeyUp="config.macros.importTiddlers.src=this.value"\s\n onChange="config.macros.importTiddlers.src=this.value;">\s\n<span style="float:left; padding:1px; white-space:nowrap">\s\n <input type=checkbox id="chkImportDiffsOnly" checked style="height:1em; width:auto"\s\n onClick="config.macros.importTiddlers.diffs=this.checked; refreshImportList();">show differences only \s\n <input type=checkbox id="chkImportReport" checked style="height:1em; width:auto"\s\n onClick="config.options[\s'chkImportReport\s']=this.checked;">create a report\s\n</span>\s\n<span style="float:right; padding:1px; white-space:nowrap">\s\n <a href="JavaScript:;" id="importSmaller" class="importListButton"\s\n onclick="onClickImportButton(this)" title="reduce list size">–</a>\s\n <a href="JavaScript:;" id="importLarger" class="importListButton"\s\n onclick="onClickImportButton(this)" title="increase list size">+</a>\s\n <a href="JavaScript:;" id="importMaximize" class="importListButton"\s\n onclick="onClickImportButton(this)" title="maximize/restore list size">=</a>\s\n</span>\s\n<select id="importList" size=1 multiple\s\n onchange="setTimeout(\s'refreshImportList(\s'+this.selectedIndex+\s')\s',1)">\s\n <!-- NOTE: delay refresh so list is updated AFTER onchange event is handled -->\s\n</select>\s\nadd tags:\s\n<input type=text id="txtImportTags" size=15 onKeyUp="config.macros.importTiddlers.tags=this.value" autocomplete=off>\s\n<div align=center>\s\n <input type=button id="importOpen" class="importButton" style="width:23%" value="open"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importSelectAll" class="importButton" style="width:23%" value="select all"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importStart" class="importButton" style="width:23%" value="import"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importClose" class="importButton" style="width:23%" value="close"\s\n onclick="onClickImportButton(this)">\s\n</div>\s\n<div id="importAskPanel">\s\n tiddler already exists:\s\n <input type=text id="importNewTitle" size=15 autocomplete=off">\s\n <div align=center>\s\n <input type=button id="importSkip" class="importButton" style="width:23%" value="skip"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importRename" class="importButton" style="width:23%" value="rename"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importMerge" class="importButton" style="width:23%" value="merge"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importReplace" class="importButton" style="width:23%" value="replace"\s\n onclick="onClickImportButton(this)">\s\n </div>\s\n</div>\s\n';\n//}}}\n\n// // refresh listbox\n//{{{\nfunction refreshImportList(selectedIndex)\n{\n var theList = document.getElementById("importList");\n if (!theList) return;\n // if nothing to show, reset list content and size\n if (!config.macros.importTiddlers.inbound) \n {\n while (theList.length > 0) { theList.options[0] = null; }\n theList.options[0]=new Option('please open a document...',"",false,false);\n theList.size=1; // show one line only\n return;\n }\n // get the sort order\n if (!selectedIndex) selectedIndex=0;\n if (selectedIndex==0) config.macros.importTiddlers.sort='title'; // heading\n if (selectedIndex==1) config.macros.importTiddlers.sort='title';\n if (selectedIndex==2) config.macros.importTiddlers.sort='modified';\n if (selectedIndex==3) config.macros.importTiddlers.sort='tags';\n if (selectedIndex>3) return; // heading or tiddler item, no refresh needed\n\n // get the alphasorted list of tiddlers (optionally, filter out unchanged tiddlers)\n var tiddlers = [];\n for (t=0;t<config.macros.importTiddlers.inbound.length;t++)\n {\n // don't import tiddler if title/date/time match (i.e., no changes)\n if ( config.macros.importTiddlers.diffs\n && store.tiddlerExists(config.macros.importTiddlers.inbound[t].title)\n && (config.macros.importTiddlers.inbound[t].modified-store.getTiddler(config.macros.importTiddlers.inbound[t].title).modified==0))\n continue;\n tiddlers.push(config.macros.importTiddlers.inbound[t]);\n }\n tiddlers.sort(function (a,b) {if(a['title'] == b['title']) return(0); else return (a['title'] < b['title']) ? -1 : +1; });\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n // add heading and control items to list\n var i=0;\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n theList.options[i++]=new Option('Select tiddlers to import',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="title" )?">":indent)+' [by title]',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="modified")?">":indent)+' [by date]',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="tags")?">":indent)+' [by tags]',"",false,false);\n theList.options[i++]=new Option(tiddlers.length+' tiddler'+((tiddlers.length!=1)?'s are ':' is ')+(config.macros.importTiddlers.diffs?'different':'in the document'),"",false,false);\n // output the tiddler list\n switch(config.macros.importTiddlers.sort)\n {\n case "title":\n for(var t = 0; t < tiddlers.length; t++)\n theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);\n break;\n case "modified":\n // sort descending for newest date first\n tiddlers.sort(function (a,b) {if(a['modified'] == b['modified']) return(0); else return (a['modified'] > b['modified']) ? -1 : +1; });\n var lastSection = "";\n for(var t = 0; t < tiddlers.length; t++) {\n var tiddler = tiddlers[t];\n var theSection = tiddler.modified.toLocaleDateString();\n if (theSection != lastSection) {\n theList.options[i++] = new Option(theSection,"",false,false);\n lastSection = theSection;\n }\n theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);\n }\n break;\n case "tags":\n var theTitles = {}; // all tiddler titles, hash indexed by tag value\n var theTags = new Array();\n for(var t=0; t<tiddlers.length; t++) {\n var title=tiddlers[t].title;\n var tags=tiddlers[t].tags;\n for(var s=0; s<tags.length; s++) {\n if (theTitles[tags[s]]==undefined) { theTags.push(tags[s]); theTitles[tags[s]]=new Array(); }\n theTitles[tags[s]].push(title);\n }\n }\n theTags.sort();\n for(var tagindex=0; tagindex<theTags.length; tagindex++) {\n var theTag=theTags[tagindex];\n theList.options[i++]=new Option(theTag,"",false,false);\n for(var t=0; t<theTitles[theTag].length; t++)\n theList.options[i++]=new Option(indent+indent+theTitles[theTag][t],theTitles[theTag][t],false,false);\n }\n break;\n }\n theList.selectedIndex=selectedIndex; // select current control item\n if (theList.size<config.macros.importTiddlers.listsize) theList.size=config.macros.importTiddlers.listsize;\n if (theList.size>theList.options.length) theList.size=theList.options.length;\n}\n//}}}\n\n// // Control interactions\n//{{{\nfunction onClickImportButton(which)\n{\n // DEBUG alert(which.id);\n var theList = document.getElementById('importList');\n if (!theList) return;\n var thePanel = document.getElementById('importPanel');\n var theAskPanel = document.getElementById('importAskPanel');\n var theNewTitle = document.getElementById('importNewTitle');\n switch (which.id)\n {\n case 'fileImportSource':\n case 'importOpen': // load import source into hidden frame\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n refreshImportList(); // reset/resize the listbox\n if (config.macros.importTiddlers.src=="") break;\n // Load document into hidden iframe so we can read it's DOM and fill the list\n loadImportFile(config.macros.importTiddlers.src,"all",null,null,function(src,filter,quiet,ask){window.refreshImportList(0);});\n break;\n case 'importSelectAll': // select all tiddler list items (i.e., not headings)\n importReport(); // if an import was in progress, generate a report\n for (var t = 0; t < theList.options.length; t++)\n theList.options[t].selected=(theList.options[t].value!="");\n break;\n case 'importStart': // initiate the import processing\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.index=0;\n config.macros.importTiddlers.index=importTiddlers(0);\n importStopped();\n break;\n case 'importClose': // unload imported tiddlers or hide the import control panel\n // if imported tiddlers not loaded, close the import control panel\n if (!config.macros.importTiddlers.inbound) { thePanel.style.display='none'; break; }\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n refreshImportList(); // reset/resize the listbox\n break;\n case 'importSkip': // don't import the tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n theImported.status='skipped after asking'; // mark item as skipped\n theAskPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index+1); // resume with NEXT item\n importStopped();\n break;\n case 'importRename': // change name of imported tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n theImported.status = 'renamed from '+theImported.title; // mark item as renamed\n theImported.set(theNewTitle.value,null,null,null,null); // change the tiddler title\n theItem.value = theNewTitle.value; // change the listbox item text\n theItem.text = theNewTitle.value; // change the listbox item text\n theAskPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with THIS item\n importStopped();\n break;\n case 'importMerge': // join existing and imported tiddler content\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theItem.value);\n var theText = theExisting.text+'\sn----\sn^^merged from: [['+config.macros.importTiddlers.src+'#'+theItem.value+'|'+config.macros.importTiddlers.src+'#'+theItem.value+']]^^\sn^^'+theImported.modified.toLocaleString()+' by '+theImported.modifier+'^^\sn'+theImported.text;\n var theDate = new Date();\n var theTags = theExisting.getTags()+' '+theImported.getTags();\n theImported.set(null,theText,null,theDate,theTags);\n theImported.status = 'merged with '+theExisting.title; // mark item as merged\n theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY hh:mm:ss");\n theImported.status += ' by '+theExisting.modifier;\n theAskPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with this item\n importStopped();\n break;\n case 'importReplace': // substitute imported tiddler for existing tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theItem.value);\n theImported.status = 'replaces '+theExisting.title; // mark item for replace\n theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY hh:mm:ss");\n theImported.status += ' by '+theExisting.modifier;\n theAskPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with THIS item\n importStopped();\n break;\n case 'importSmaller': // decrease current listbox size, minimum=5\n if (theList.options.length==1) break;\n theList.size-=(theList.size>5)?1:0;\n config.macros.importTiddlers.listsize=theList.size;\n break;\n case 'importLarger': // increase current listbox size, maximum=number of items in list\n if (theList.options.length==1) break;\n theList.size+=(theList.size<theList.options.length)?1:0;\n config.macros.importTiddlers.listsize=theList.size;\n break;\n case 'importMaximize': // toggle listbox size between current and maximum\n if (theList.options.length==1) break;\n theList.size=(theList.size==theList.options.length)?config.macros.importTiddlers.listsize:theList.options.length;\n break;\n }\n}\n//}}}\n\n// // re-entrant processing for handling import with interactive collision prompting\n//{{{\nfunction importTiddlers(startIndex)\n{\n if (!config.macros.importTiddlers.inbound) return -1;\n\n var theList = document.getElementById('importList');\n if (!theList) return;\n // if starting new import, reset import status flags\n if (startIndex==0)\n for (var t=0;t<config.macros.importTiddlers.inbound.length;t++)\n config.macros.importTiddlers.inbound[t].status="";\n for (var i=startIndex; i<theList.options.length; i++)\n {\n // if list item is not selected or is a heading (i.e., has no value), skip it\n if ((!theList.options[i].selected) || ((t=theList.options[i].value)==""))\n continue;\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==t) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theImported.title);\n // avoid redundant import for tiddlers that are listed multiple times (when 'by tags')\n if (theImported.status=="added")\n continue;\n // don't import the "ImportedTiddlers" history from the other document...\n if (theImported.title=='ImportedTiddlers')\n continue;\n // don't import tiddler if title/date/time match (i.e., no changes)\n if (config.macros.importTiddlers.diffs && theExisting && ((theImported.modified-theExisting.modified)==0))\n continue;\n // if tiddler exists and import not marked for replace or merge, stop importing\n if (theExisting && (theImported.status.substr(0,7)!="replace") && (theImported.status.substr(0,5)!="merge"))\n return i;\n // append importation tags (if any)\n if (config.macros.importTiddlers.tags!="")\n theImported.set(null,null,null,null,theImported.getTags()+' '+config.macros.importTiddlers.tags)\n // set the status to 'added' (if not already set by the 'ask the user' UI)\n theImported.status=(theImported.status=="")?'added':theImported.status;\n // do the import!\n store.addTiddler(theImported);\n store.setDirty(true);\n }\n return(-1); // signals that we really finished the entire list\n}\n//}}}\n\n//{{{\nfunction importStopped()\n{\n var theList = document.getElementById('importList');\n var theNewTitle = document.getElementById('importNewTitle');\n if (!theList) return;\n if (config.macros.importTiddlers.index==-1)\n importReport(); // import finished... generate the report\n else\n {\n // DEBUG alert('import stopped at: '+config.macros.importTiddlers.index);\n // import collision... show the ask panel and set the title edit field\n document.getElementById('importAskPanel').style.display='block';\n theNewTitle.value=theList.options[config.macros.importTiddlers.index].value;\n }\n}\n//}}}\n\n
!Chemistries\n|''Na''|''K''|''Cl''|''HCO~~3~~^^-^^''|''BUN''|''Cr''|''Glu''|\n|140|3.5|100|26|19|1.0|100|\n\n\n!Complete Blood Count\n|''WBC''|''~HbG''|''Hct''|''Plt''|\n|5.4|15|45|280|\n
!Chemistries\n|''Na''|''K''|''Cl''|''HCO~~3~~^^-^^''|''BUN''|''Cr''|''Glu''|\n|140|3.2|96|29|25|1.1|96|\n\n\n!Complete Blood Count\n|''WBC''|''~HbG''|''Hct''|''Plt''|\n|5.8|16.2|48.6|253|\n
!Chemistries\n|''Na''|''K''|''Cl''|''HCO~~3~~^^-^^''|''BUN''|''Cr''|''Glu''|\n|143|4.2|103|19|25|0.8|96|\n\n\n!Complete Blood Count\n|''WBC''|''~HbG''|''Hct''|''Plt''|\n|8.8|14.1|42.3|279|\n
!Chemistries\n|''Na''|''K''|''Cl''|''HCO~~3~~^^-^^''|''BUN''|''Cr''|''Glu''|\n|140|5.0|103|24|24|1.1|87|\n\n\n!Complete Blood Count\n|''WBC''|''~HbG''|''Hct''|''Plt''|\n|6.8|13|39|307|\n
!Chemistries\n|''Na''|''K''|''Cl''|''HCO~~3~~^^-^^''|''BUN''|''Cr''|''Glu''|\n|140|3.5|100|26|19|1.0|100|\n\n\n!Complete Blood Count\n|''WBC''|''~HbG''|''Hct''|''Plt''|\n|5.4|15|45|280|\n
[[Category]]\n[[DDx]]\n[[About]]
[img[wiki_images/mallampati.png]]\n\nPicture actually depicts the Samsoon and Young’s Modification of the Mallampati Classification. Dr. Mallampati only described the first three grades.\n\nThis classification scheme was designed to predict what view of the cords would be present with DL. It was assumed that the size of the base of the tongue might block the opening of the laryngeal inlet or change its angle to a more acute one making passage of a ETT difficult.\n \nReference:\nMallampati SR, Gatt SP, Gugino LD, Desai SP, Waraksa B, Freiberger D, Liu PL: [[A clinical sign to predict difficult tracheal intubation: A prospective study|http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=4027773&query_hl=6&itool=pubmed_docsum]]. Can Anaesth Soc J 1985; 32:429-34.
<html> \n<!-- Mindjet Map Viewer Control Start --> \n<object id="viewer" height="600" width="100%" \ncodeBase=" http://www.mindjet.com/viewer/eng/MjMmViewer.cab"classid="clsid:4C57C98A-E582-46E4-8FD8-5EBDC94CEA39"> \n<param name="Image" \nvalue="http://www.cognitivecontortions.com/MindMaps/Hypotension_ddx.mmap"/> \n</object> \n<!-- Mindjet Map Viewer Control End --> \n</html>
Minute Ventilation (MV) is the volume of air moved in one minute. MV is dependant on both the respiratory rate (RR) as well as the tidal volume (TV).\n!MV = RR * TV
/***\n| ''Name'' |NewFromTemplateMacro|\n| ''Version'' |0.1|\n| ''Source'' |[[Rich Carrillo|http://www.kultofbubb.net/tiddlywiki/]]|\n| ''Author'' |[[RichCarrillo|RichCarrillo@yahoo.com]]|\n| ''Type'' |Macro|\n| ''Required'' |TiddlyWiki 2.0+|\n| ''License'' ||\n\n!Revision History\n20060216 0.2 Added "New Here" functionality - SimonBaird, http://simonbaird.com/mptw/#NewFromTemplateMacro\n20060113 0.1 First release\n\n!Description\nUsing this macro will create a pop-up that lists anything tagged with TiddlerTemplates. Choosing an item off this list will create a new Tiddler. This new Tiddler will have the same contents as the template. The title will be NEW<template title> and it's tags will be the same as the template, but with the TiddlerTemplates tag stripped off.\n!Installation\nImport (or copy the contents of) this Tiddler into your Wiki.\nTag it with systemConfg, Save and Refresh.\n\n!Syntax\nOne parameter. "here" means also add the current tiddler as a tag.\n\nI've included some example templates. Copy over all Tiddlers tagged with TiddlerTemplates to get you started.\n\n!Example\n<<newFromTemplate>>\n\n!Credits\nMost of this code is adaptions of TiddlyWiki core functions. I took a close look at PopupMacro and WikiBar's Templater Add-on for help.\n\n!Roadmap - ToDo list\n*Let users pass the button label, tooltip and template tag as parameters.\n*Create a standalone button (no popup) that is keyed directly to a template tiddler\n*Make copying over of Tags and Title optional (like in WikiBar templates)\n*More error catching and reporting\n*Use named parameters\n*Combine with NewHere in some way. Maybe make this into a toolbar command so it's more like NewHereFromTemplate. I'd like to be able to be in a Project tiddler and have a "New Task Here" or "New Reminder Here" type of commands available.\n\n!Code\n***/\n//{{{\n\nvar dropdownchar = (document.all?"▼":"▾") // the fat one is the only one that works in IE\n\n// default settings\nconfig.macros.newFromTemplate = \n{\n label: "New...",\n tooltip: "Create a tiddler from a Template",\n templateTag: "TiddlerTemplates",\n\n newherelabel: "new here"+dropdownchar // or new... here??\n\n\n}\n\n\n\n\n\nconfig.macros.newFromTemplate.handler = function(place,macroName,params,wikifier,paramString,callingTiddler)\n{\n var newHereMode = (params[0] && params[0] == "here");\n\n var onClickTemplateButton = function(event) {\n\n if (!event) var event = window.event;\n\n var tag = this.getAttribute("tag");\n\n // error out if no tiddlers are tagged as temlates\n var templateList = store.getTaggedTiddlers(tag);\n if(!templateList) {\n alert('No templates found! Add the tag '+tag+' to a tiddler you would like to use as a template');\n return;\n };\n\n var popup = Popup.create(templateButton);\n\n // pull the titles out of the tiddlers retured by getTaggedTiddlers\n var templateTitles = [];\n var li,r;\n for(r=0;r<templateList.length;r++)\n if(templateList[r].title != templateTitles)\n templateTitles.push(templateList[r].title);\n\n // for each one of the titles create a new TiddlyButton inthe popup\n for(r=0; r<templateTitles.length; r++)\n {\n var templateListItem = createTiddlyButton(createTiddlyElement(popup,"li"),templateTitles[r],null,onClickTemplateTitle);\n templateListItem.setAttribute("templateTitle",templateTitles[r]);\n templateListItem.setAttribute("templateTag",tag);\n }\n\n Popup.show(popup,true);\n event.cancelBubble = true;\n if (event.stopPropagation) event.stopPropagation();\n \n return false;\n }\n\n var t=document.getElementById('tiddler'+callingTiddler.title); //??\n\n var onClickTemplateTitle = function(event)\n{\n var title = this.getAttribute("templateTitle");\n var templateTag = this.getAttribute("templateTag");\n\n// get the template and extract its info\n var template = store.getTiddler(title);\n var newTitle = "New"+template.title;\n var newTags = template.getTags();\n\n if (newHereMode)\n newTags += " " + String.encodeTiddlyLink(callingTiddler.title);\n\n var newText = template.text;\n \n// create new tiddler\n story.displayTiddler(newHereMode?t:null,newTitle,DEFAULT_EDIT_TEMPLATE);\n\n// grab the new Tiddlers text edit box\n var tiddlerTextArea = getTiddlerEditField(newTitle,"text");\n var tiddlerTagArea = getTiddlerEditField(newTitle,"tags");\n\n// Stuff template info into newly created tiddler\n tiddlerTextArea.value=newText;\n tiddlerTagArea.value=newTags;\n story.setTiddlerTag(newTitle,templateTag,-1);\n story.focusTiddler(newTitle,"text");\n return false;\n}\n\n var getTiddlerEditField = function(title,field)\n{\n var tiddler = document.getElementById("tiddler" + title);\n if(tiddler != null)\n {\n var children = tiddler.getElementsByTagName("*")\n var e = null;\n for (var t=0; t<children.length; t++)\n {\n var c = children[t];\n if(c.tagName.toLowerCase() == "input" || c.tagName.toLowerCase() == "textarea")\n {\n if(!e)\n e = c;\n if(c.getAttribute("edit") == field)\n e = c;\n }\n }\n if(e)\n {\n return e;\n }\n }\n}\n\n var templateButton = createTiddlyButton(place,newHereMode?this.newherelabel:this.label,this.tooltip,onClickTemplateButton,null,null,null);\n templateButton.setAttribute("tag",this.templateTag);\n}\n\n//}}}\n
/***\n|Name|NewHereCommand|\n|Source|http://simonbaird.com/mptw/#NewHereCommand|\n|Version|1.0|\n\nCode originally by ArphenLin. Small tweak by SimonBaird\nhttp://aiddlywiki.sourceforge.net/NewHere_demo.html#NewHereCommand\nTo use this you must edit your ViewTemplate and add newHere to the toolbar div, eg\n{{{<div class='toolbar' macro='toolbar ... newHere'></div>}}}\n***/\n\n//{{{\n\nconfig.commands.newHere = {\n text: 'new here',\n tooltip: 'Create a new tiddler tagged as this tiddler',\n handler: function(e,src,title) {\n if (!readOnly) {\n clearMessage();\n var t=document.getElementById('tiddler'+title);\n story.displayTiddler(t,config.macros.newTiddler.title,DEFAULT_EDIT_TEMPLATE);\n story.setTiddlerTag(config.macros.newTiddler.title, title, 0);\n story.focusTiddler(config.macros.newTiddler.title,"title");\n return false;\n }\n }\n};\n\n//}}}
afebrile, HR 90 /min, RR 13 /min, BP 185/94 mmHg, SaO2 92% on 2 l/min nasal cannula, weight 55 kg, height 5'4".\nChest: Coarse BS bilaterally\nCV: RRR, 2/5 murmur\nAbdomen: benign\nNeuro: grossly intact
T 35 C, HR 105, BP 89/42, RR 26/min O2 Sat 96% on 4 l/min NC\nGen: He appears anxious and in good shape\nNeck: FROM, mild JVD\nChest: Bibasilar crackles\nCV: Tachy with RR, no murmur or gallop
T 37.5 HR 113 RR 16 BP 184/110 SaO2 98% RA\nGen: anxious appearing, mild diaphoresis\nChest: CTA bilaterally\nCV: Tachy with RR\nAbd: benign\nNeuro: intact
General appearance: a well-dressed female who appears her stated age, mildly over-weight in no distress.\n\nVitals: T 37◦C, HR 98 /min, RR 16 /min, BP 140/60, SaO2 98%, Weight 86 kg\n
T 37.1, P 93, R 16, BP 150/91\nheight 5'10" weight 114 kg\n\nChest: CTA bilateral \nCV: RRR, no murmur\nNeck: short, thick, limited extension due to posterior fat pad\nDentition: full, no loose, no chipped\nOral: MP III, TM 5cm
<!---\nI've just tweaked my gradient colours and the topMenu bit. See HorizontalMainMenu.\n--->\n<!--{{{-->\n<div class='header' macro='gradient vert #000 #069'>\n<div class='headerShadow'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n<div class='headerForeground'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> \n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n<div id='topMenu' refresh='content' tiddler='MainMenu'></div>\n</div>\n<div id='sidebar'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>\n<!--}}}-->\n
In patients with Sickle Cell Disease, it is useful to know how many of their peripheral red blood cells are diseased, or prone to sickling. A peripheral blood smear allows pathologists to appreciate the percentage of cells that are either sickled or prone to sickle if adverse conditions are present. If the sickling percentage is too great, these patients may benefit from an exchange transfusion to dilute the percentage of diseased red blood cells prior to subjecting them to an elective operation.
[[Asthma]]\n[[COPD]]\n[[Sleep Apnea]]\n[[Cystic Fibrosis]]
/***\n| Name:|QuickOpenTagPlugin|\n| Purpose:|Makes tag links into a Taggly style open tag plus a normal style drop down menu|\n| Creator:|SimonBaird|\n| Source:|http://simonbaird.com/mptw/#QuickOpenTagPlugin|\n| Requires:|TW 2.x|\n| Version|1.1 (7-Feb-06)|\n\n!History\n* Version 1.1 (07/02/2006)\n** Fix Firefox 1.5.0.1 crashes\n** Updated by ~BidiX[at]~BidiX.info\n* Version 1.0 (?/01/2006)\n** First release\n\n***/\n//{{{\n\n//⊻ ⊽ ⋁ ▼ \n\nwindow.createTagButton_orig_mptw = createTagButton;\nwindow.createTagButton = function(place,tag,excludeTiddler) {\n var sp = createTiddlyElement(place,"span",null,"quickopentag");\n createTiddlyLink(sp,tag,true,"button");\n var theTag = createTiddlyButton(sp,config.macros.miniTag.dropdownchar,config.views.wikified.tag.tooltip.format([tag]),onClickTag);\n theTag.setAttribute("tag",tag);\n if(excludeTiddler)\n theTag.setAttribute("tiddler",excludeTiddler);\n return(theTag);\n};\n\nconfig.macros.miniTag = {handler:function(place,macroName,params,wikifier,paramString,tiddler) {\n var tagged = store.getTaggedTiddlers(tiddler.title);\n if (tagged.length > 0) {\n var theTag = createTiddlyButton(place,config.macros.miniTag.dropdownchar,config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);\n theTag.setAttribute("tag",tiddler.title);\n theTag.className = "miniTag";\n }\n}};\n\nconfig.macros.miniTag.dropdownchar = (document.all?"▼":"▾"); // the fat one is the only one that works in IE\n\nconfig.macros.allTags.handler = function(place,macroName,params)\n{\n var tags = store.getTags();\n var theDateList = createTiddlyElement(place,"ul",null,null,null);\n if(tags.length === 0)\n createTiddlyElement(theDateList,"li",null,"listTitle",this.noTags);\n for (var t=0; t<tags.length; t++)\n {\n var theListItem =createTiddlyElement(theDateList,"li",null,null,null);\n var theLink = createTiddlyLink(theListItem,tags[t][0],true);\n var theCount = " (" + tags[t][1] + ")";\n theLink.appendChild(document.createTextNode(theCount));\n\n var theDropDownBtn = createTiddlyButton(theListItem," "+config.macros.miniTag.dropdownchar,this.tooltip.format([tags[t][0]]),onClickTag);\n theDropDownBtn.setAttribute("tag",tags[t][0]);\n }\n};\n\n\nsetStylesheet(\n ".quickopentag { margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }\sn"+\n ".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }\sn"+\n ".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}\sn"+\n "a.miniTag {font-size:150%;}\sn"+\n "",\n"QuickOpenTagStyles");\n\n//}}}\n\n/***\n<html>⊻ ⊽ ⋁ ▼ ▾</html>\n***/\n
Newly released red blood cells from the bone marrow are called reticulocytes. These immature RBC's circulate in the blood stream for 1-2 days while they mature into fully mature red blood cells. In a normal situation, where RBC's are turning over as they live out their 21 day lifecycle, the reticulocyte count is 1 - 2% of all the RBC's in a peripheral blood sample. As more blood cells become distroyed or otherwise lost, such as in Sickle Cell Disease, if the bone marrow is able to compensate by releasing more immature red blood cells, the Reticulocyte count becomes greater than 1 - 2%.\n\nThis test can be useful to determine if the bone marrow is able to respond to an anemia by increasing the production of red blood cells. It can also be useful to assess if iron is necessary during this time of increased cell production.
/***\nThis CSS by DaveBirss.\n***/\n/*{{{*/\n\n.tabSelected {\n background: #fff;\n}\n\n.tabUnselected {\n background: #eee;\n}\n\n#sidebar {\n color: #000;\n}\n\n#sidebarOptions {\n background: #fff;\n}\n\n#sidebarOptions .button {\n color: #999;\n}\n\n#sidebarOptions .button:hover {\n color: #000;\n background: #fff;\n border-color:white;\n}\n\n#sidebarOptions .button:active {\n color: #000;\n background: #fff;\n}\n\n#sidebarOptions .sliderPanel {\n background: transparent;\n}\n\n#sidebarOptions .sliderPanel A {\n color: #999;\n}\n\n#sidebarOptions .sliderPanel A:hover {\n color: #000;\n background: #fff;\n}\n\n#sidebarOptions .sliderPanel A:active {\n color: #000;\n background: #fff;\n}\n\n.sidebarSubHeading {\n color: #000;\n}\n\n#sidebarTabs {`\n background: #fff\n}\n\n#sidebarTabs .tabSelected {\n color: #000;\n background: #fff;\n border-top: solid 1px #ccc;\n border-left: solid 1px #ccc;\n border-right: solid 1px #ccc;\n border-bottom: none;\n}\n\n#sidebarTabs .tabUnselected {\n color: #999;\n background: #eee;\n border-top: solid 1px #ccc;\n border-left: solid 1px #ccc;\n border-right: solid 1px #ccc;\n border-bottom: none;\n}\n\n#sidebarTabs .tabContents {\n background: #fff;\n}\n\n\n#sidebarTabs .txtMoreTab .tabSelected {\n background: #fff;\n}\n\n#sidebarTabs .txtMoreTab .tabUnselected {\n background: #eee;\n}\n\n#sidebarTabs .txtMoreTab .tabContents {\n background: #fff;\n}\n\n#sidebarTabs .tabContents .tiddlyLink {\n color: #999;\n}\n\n#sidebarTabs .tabContents .tiddlyLink:hover {\n background: #fff;\n color: #000;\n}\n\n#sidebarTabs .tabContents {\n color: #000;\n}\n\n#sidebarTabs .button {\n color: #666;\n}\n\n#sidebarTabs .tabContents .button:hover {\n color: #000;\n background: #fff;\n}\n\n/*}}}*/
/***\n''Single Page Mode Plugin for TiddlyWiki version 2.0 or above''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#SinglePageModePlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nNormally, as you click on the links in TiddlyWiki, more and more tiddlers are displayed on the page. The order of this tiddler display depends upon when and where you have clicked. Some people like this non-linear method of reading the document, while others have reported that when many tiddlers have been opened, it can get somewhat confusing.\n\n!!!!!Usage\n<<<\nSinglePageMode allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one item displayed at a time. You can select a checkbox in the AdvancedOptions tiddler to enable this behavior or revert to the standard TiddlyWiki multiple tiddler display behavior.\n\nWhen SinglePageMode is enabled, the title of the current tiddler is automatically displayed in the browser window's titlebar and the browser's location URL is updated with a 'permalink' for the current tiddler so that it is easier to create a browser 'bookmark' for the current tiddler.\n\n//Note: This feature currently effects ALL tiddler display behavior, including features that normally result in multiple tiddlers being displayed, such as the results of searches or the initial DefaultTiddlers shown when the document is loaded. //\n<<<\n!!!!!Configuration\n<<<\nWhen installed, this plugin automatically adds a checkbox in the AdvancedOptions tiddler so you can enable/disable the plugin behavior. You can also use the following ''control panel'' checkbox to change the current plugin handling:\n\n<<option chkSinglePageMode>> Display one tiddler at a time\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''SinglePageModePlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for SinglePageMode handling^^\n\nWhen installed, this plugin automatically adds a checkbox in the AdvancedOptions tiddler so you can enable/disable this behavior. However, if you have customized your AdvancedOptions, you will need to manually add ''"<< {{{option chkSinglePageMode}}} >> display one tiddler at a time"'' to your customized tiddler.\n<<<\n!!!!!Revision History\n<<<\n''2006.02.04 [2.1.1]''\nmoved global variable declarations to config.* to avoid FireFox 1.5.0.1 crash bug when assigning to globals\n''2005.12.27 [2.1.0]''\nhijack displayTiddlers() so that SPM can be suspended during startup while displaying the DefaultTiddlers (or #hash list) \nalso, corrected initialization for undefined SPM flag to "false", so default behavior is to display multiple tiddlers\n''2005.12.27 [2.0.0]''\nUpdate for TW2.0\n''2005.11.24 [1.1.2]''\nWhen the back and forward buttons are used, the page now changes to match the URL. Based on code added by Clint Checketts\n''2005.10.14 [1.1.1]''\npermalink creation now calls encodeTiddlyLink() to handle tiddler titles with spaces in them\n''2005.10.14 [1.1.0]''\nadded automatic setting of window title and location bar ('auto-permalink').\nfeature suggestion by David Dickens.\n''2005.10.09 [1.0.1]''\ncombined documentation and code in a single tiddler\n''2005.08.15 [1.0.0]''\nInitial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\nSupport for BACK/FORWARD buttons adapted from code developed by Clint Checketts\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.SinglePageMode= {major: 2, minor: 1, revision: 1, date: new Date(2006,2,4)};\n\nif (config.options.chkSinglePageMode==undefined)\n config.options.chkSinglePageMode=false;\n\nconfig.shadowTiddlers.AdvancedOptions\n += "\sn<<option chkSinglePageMode>> Display one tiddler at a time";\n\nconfig.SPMTimer = 0;\nconfig.lastURL = window.location.hash;\nfunction checkLastURL()\n{\n if (!config.options.chkSinglePageMode)\n { window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }\n if (config.lastURL == window.location.hash)\n return;\n var tiddlerName = convertUTF8ToUnicode(decodeURI(window.location.hash.substr(1)));\n tiddlerName=tiddlerName.replace(/\s[\s[/,"").replace(/\s]\s]/,""); // strip any [[ ]] bracketing\n if (tiddlerName.length) story.displayTiddler(null,tiddlerName,1,null,null);\n}\n\nStory.prototype.coreDisplayTiddler=Story.prototype.displayTiddler;\nStory.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)\n{\n if (config.options.chkSinglePageMode) {\n window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));\n config.lastURL = window.location.hash;\n document.title = wikifyPlain("SiteTitle") + " - " + title;\n story.closeAllTiddlers();\n if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);\n }\n this.coreDisplayTiddler(srcElement,title,template,animate,slowly)\n}\n\nStory.prototype.coreDisplayTiddlers=Story.prototype.displayTiddlers;\nStory.prototype.displayTiddlers = function(srcElement,titles,template,unused1,unused2,animate,slowly)\n{\n // suspend single-page mode when displaying multiple tiddlers\n var save=config.options.chkSinglePageMode;\n config.options.chkSinglePageMode=false;\n this.coreDisplayTiddlers(srcElement,titles,template,unused1,unused2,animate,slowly);\n config.options.chkSinglePageMode=save;\n}\n//}}}
[img[wiki_images/home_logo.png][http://www.cognitivecontortions.com]]\nA.nesthesia C.ase L.earning S.essions
/***\nCosmetic fixes that probably should be included in a future TW...\n***/\n/*{{{*/\n.viewer .listTitle { list-style-type:none; margin-left:-2em; }\n.editorFooter .button { padding-top: 0px; padding-bottom:0px; }\n/*}}}*/\n/***\nImportant stuff. See TagglyTaggingStyles and HorizontalMainMenuStyles\n***/\n/*{{{*/\n[[TagglyTaggingStyles]]\n[[HorizontalMainMenuStyles]]\n/*}}}*/\n/***\nClint's fix for weird IE behaviours\n***/\n/*{{{*/\nbody {position:static;}\n.tagClear{margin-top:1em;clear:both;}\n/*}}}*/\n/***\nJust colours, fonts, tweaks etc. See SideBarWhiteAndGrey\n***/\n/*{{{*/\nbody {background:#eee; }\na{ color: #069; }\na:hover{ background: #069; color: #fff; }\n.popup { background: #178; border: 1px solid #069; }\n.headerForeground a { color: #6fc;}\n.headerShadow { left: 2px; top: 2px; }\n.title { padding:0px; margin:0px; }\n.siteSubtitle { padding:0px; margin:0px; padding-left:1.5em; }\n.subtitle { font-size:90%; color:#ccc; padding-left:0.25em; }\nh1,h2,h3,h4,h5 { color: #000; background: transparent; }\n.title {color:black; font-size:2em;}\n.shadow .title {color:#999; }\n.viewer pre { background-color:#f8f8ff; border-color:#ddf}\n.viewer { padding-top:0px; }\n#sidebarOptions { border:1px #ccc solid; }\n.tiddler {\n border-bottom:1px solid #ccc; border-right:1px solid #ccc; padding-bottom:1em; margin-bottom:1em; \n background:#fff; padding-right:1.5em; }\n#messageArea { background-color:#bde; border-color:#8ab; border-width:4px; border-style:dotted; font-size:90%; }\n#messageArea .button { text-decoration:none; font-weight:bold; background:transparent; border:0px; }\n#messageArea .button:hover {background: #acd; }\n[[SideBarWhiteAndGrey]]\n#adsense { margin: 1em 15.7em 0em 1em; border:1px solid #ddd; background:#f8f8f8; text-align:center;margin-bottom:1em;overflow:hidden;padding:0.5em;} \n/*}}}*/\n
[[Burn Surgery]]\n[[Cardiac Surgery]]\n[[General Surgery]]\n[[Gynecological Surgery]]\n[[Neurosurgery]]\n[[Obstetrics]]\n[[Otolaryngology]]\n[[Orthopedic Surgery]]\n[[Out of the OR]]\n[[Out Patient Surgery]]\n[[Pediatric Surgery]]\n[[Plastic Surgery]]\n[[Thoracic Surgery]]\n[[Transplant Surgery]]\n[[Trauma Surgery]]\n[[Urology]]
/***\n|Name|TagglyListPlugin|\n|Created by|SimonBaird|\n|Location|http://simonbaird.com/mptw/#TagglyListPlugin|\n|Version|1.1 20-jan-06|\n|Requires|See TagglyTagging|\n***/\n\n/***\n!Setup and config\n***/\n//{{{\n\nconfig.macros.tagglyList = {};\nconfig.macros.tagglyListByTag = {};\nconfig.macros.tagglyListControl = {};\nconfig.macros.tagglyListWithSort = {};\nconfig.macros.hideSomeTags = {};\n\n// change this to your preference\nconfig.macros.tagglyListWithSort.maxCols = 6;\n\nconfig.macros.tagglyList.label = "Tagged as %0:";\n\n// the default sort options. set these to your preference\nconfig.macros.tagglyListWithSort.defaults = {\n sortBy:"title", // title|created|modified\n sortOrder: "asc", // asc|desc\n hideState: "show", // show|hide\n groupState: "nogroup", // nogroup|group\n numCols: 1\n};\n\n// these tags will be ignored by the grouped view\nconfig.macros.tagglyListByTag.excludeTheseTags = [\n "systemConfig"\n];\n\nconfig.macros.tagglyListControl.tags = {\n title:"sortByTitle", \n modified: "sortByModified", \n created: "sortByCreated",\n asc:"sortAsc", \n desc:"sortDesc",\n hide:"hideTagged", \n show:"showTagged",\n nogroup:"noGroupByTag",\n group:"groupByTag",\n cols1:"list1Cols",\n cols2:"list2Cols",\n cols3:"list3Cols",\n cols4:"list4Cols",\n cols5:"list5Cols",\n cols6:"list6Cols",\n cols7:"list7Cols",\n cols8:"list8Cols",\n cols9:"list9Cols" \n}\n\n// note: should match config.macros.tagglyListControl.tags\nconfig.macros.hideSomeTags.tagsToHide = [\n "sortByTitle",\n "sortByCreated",\n "sortByModified",\n "sortDesc",\n "sortAsc",\n "hideTagged",\n "showTagged",\n "noGroupByTag",\n "groupByTag",\n "list1Cols",\n "list2Cols",\n "list3Cols",\n "list4Cols",\n "list5Cols",\n "list6Cols",\n "list7Cols",\n "list8Cols",\n "list9Cols"\n];\n\n\n//}}}\n/***\n\n!Utils\n***/\n//{{{\n// from Eric\nfunction isTagged(title,tag) {\n var t=store.getTiddler(title); if (!t) return false;\n return (t.tags.find(tag)!=null);\n}\n\n// from Eric\nfunction toggleTag(title,tag) {\n var t=store.getTiddler(title); if (!t || !t.tags) return;\n if (t.tags.find(tag)==null) t.tags.push(tag);\n else t.tags.splice(t.tags.find(tag),1);\n}\n\nfunction addTag(title,tag) {\n var t=store.getTiddler(title); if (!t || !t.tags) return;\n t.tags.push(tag);\n}\n\nfunction removeTag(title,tag) {\n var t=store.getTiddler(title); if (!t || !t.tags) return;\n if (t.tags.find(tag)!=null) t.tags.splice(t.tags.find(tag),1);\n}\n\n// from Udo\nArray.prototype.indexOf = function(item) {\n for (var i = 0; i < this.length; i++) {\n if (this[i] == item) {\n return i;\n }\n }\n return -1;\n};\nArray.prototype.contains = function(item) {\n return (this.indexOf(item) >= 0);\n}\n//}}}\n/***\n\n!tagglyList\ndisplays a list of tagged tiddlers. \nparameters are sortField and sortOrder\n***/\n//{{{\n\n// not used at the moment...\nfunction sortedListOfOtherTags(tiddler,thisTag) {\n var list = tiddler.tags.concat(); // so we are working on a clone..\n for (var i=0;i<config.macros.hideSomeTags.tagsToHide.length;i++) {\n if (list.find(config.macros.hideSomeTags.tagsToHide[i]) != null)\n list.splice(list.find(config.macros.hideSomeTags.tagsToHide[i]),1); // remove hidden ones\n }\n for (var i=0;i<config.macros.tagglyListByTag.excludeTheseTags.length;i++) {\n if (list.find(config.macros.tagglyListByTag.excludeTheseTags[i]) != null)\n list.splice(list.find(config.macros.tagglyListByTag.excludeTheseTags[i]),1); // remove excluded ones\n }\n list.splice(list.find(thisTag),1); // remove thisTag\n return '[[' + list.sort().join("]] [[") + ']]';\n}\n\nfunction sortHelper(a,b) {\n if (a == b) return 0;\n else if (a < b) return -1;\n else return +1;\n}\n\nconfig.macros.tagglyListByTag.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n\n var sortBy = params[0] ? params[0] : "title"; \n var sortOrder = params[1] ? params[1] : "asc";\n\n var result = store.getTaggedTiddlers(tiddler.title,sortBy);\n\n if (sortOrder == "desc")\n result = result.reverse();\n\n var leftOvers = []\n for (var i=0;i<result.length;i++) {\n leftOvers.push(result[i].title);\n }\n\n var allTagsHolder = {};\n for (var i=0;i<result.length;i++) {\n for (var j=0;j<result[i].tags.length;j++) {\n\n if ( \n result[i].tags[j] != tiddler.title // not this tiddler\n && config.macros.hideSomeTags.tagsToHide.find(result[i].tags[j]) == null // not a hidden one\n && config.macros.tagglyListByTag.excludeTheseTags.find(result[i].tags[j]) == null // not excluded\n ) {\n if (!allTagsHolder[result[i].tags[j]])\n allTagsHolder[result[i].tags[j]] = "";\n allTagsHolder[result[i].tags[j]] += "**[["+result[i].title+"]]\sn";\n\n if (leftOvers.find(result[i].title) != null)\n leftOvers.splice(leftOvers.find(result[i].title),1); // remove from leftovers. at the end it will contain the leftovers...\n }\n }\n }\n\n\n var allTags = [];\n for (var t in allTagsHolder)\n allTags.push(t);\n\n allTags.sort(function(a,b) {\n var tidA = store.getTiddler(a);\n var tidB = store.getTiddler(b);\n if (sortBy == "title") return sortHelper(a,b);\n else if (!tidA && !tidB) return 0;\n else if (!tidA) return -1;\n else if (!tidB) return +1;\n else return sortHelper(tidA[sortBy],tidB[sortBy]);\n });\n\n if (sortOrder == "desc")\n allTags.reverse();\n\n var markup = "";\n for (var i=0;i<allTags.length;i++)\n markup += "*[["+allTags[i]+"]]\sn" + allTagsHolder[allTags[i]];\n\n for (var i=0;i<leftOvers.length;i++)\n markup += "*[["+leftOvers[i]+"]]\sn";\n\n wikify(markup,place);\n}\n\nconfig.macros.tagglyList.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n var sortBy = params[0] ? params[0] : "title"; \n var sortOrder = params[1] ? params[1] : "asc";\n var numCols = params[2] ? params[2] : 1;\n\n var result = store.getTaggedTiddlers(tiddler.title,sortBy);\n if (sortOrder == "desc")\n result = result.reverse();\n\n var listSize = result.length;\n var colSize = listSize/numCols;\n var remainder = listSize % numCols;\n\n var upperColsize;\n var lowerColsize;\n if (colSize != Math.floor(colSize)) {\n // it's not an exact fit so..\n lowerColsize = Math.floor(colSize);\n upperColsize = Math.floor(colSize) + 1;\n }\n else {\n lowerColsize = colSize;\n upperColsize = colSize;\n }\n\n var markup = "";\n var c=0;\n\n var newTaggedTable = createTiddlyElement(place,"table");\n var newTaggedBody = createTiddlyElement(newTaggedTable,"tbody");\n var newTaggedTr = createTiddlyElement(newTaggedBody,"tr");\n\n for (var j=0;j<numCols;j++) {\n var foo = "";\n var thisSize;\n\n if (j<remainder)\n thisSize = upperColsize;\n else\n thisSize = lowerColsize;\n\n for (var i=0;i<thisSize;i++) \n foo += ( "*[[" + result[c++].title + "]]\sn"); // was using splitList.shift() but didn't work in IE;\n\n var newTd = createTiddlyElement(newTaggedTr,"td",null,"tagglyTagging");\n wikify(foo,newTd);\n\n }\n\n};\n\n/* snip for later.....\n //var groupBy = params[3] ? params[3] : "t.title.substr(0,1)";\n //var groupBy = params[3] ? params[3] : "sortedListOfOtherTags(t,tiddler.title)";\n //var groupBy = params[3] ? params[3] : "t.modified";\n var groupBy = null; // for now. groupBy here is working but disabled for now.\n\n var prevGroup = "";\n var thisGroup = "";\n\n if (groupBy) {\n result.sort(function(a,b) {\n var t = a; var aSortVal = eval(groupBy); var aSortVal2 = eval("t".sortBy);\n var t = b; var bSortVal = eval(groupBy); var bSortVal2 = eval("t".sortBy);\n var t = b; var bSortVal2 = eval(groupBy);\n return (aSortVal == bSortVal ?\n (aSortVal2 == bSortVal2 ? 0 : (aSortVal2 < bSortVal2 ? -1 : +1)) // yuck\n : (aSortVal < bSortVal ? -1 : +1));\n });\n }\n\n if (groupBy) {\n thisGroup = eval(groupBy);\n if (thisGroup != prevGroup)\n markup += "*[["+thisGroup+']]\sn';\n markup += "**[["+t.title+']]\sn';\n prevGroup = thisGroup;\n }\n\n\n\n*/\n\n\n//}}}\n\n/***\n\n!tagglyListControl\nUse to make the sort control buttons\n***/\n//{{{\n\nfunction getSortBy(title) {\n var tiddler = store.getTiddler(title);\n var defaultVal = config.macros.tagglyListWithSort.defaults.sortBy;\n if (!tiddler) return defaultVal;\n var usetags = config.macros.tagglyListControl.tags;\n if (tiddler.tags.contains(usetags["title"])) return "title";\n else if (tiddler.tags.contains(usetags["modified"])) return "modified";\n else if (tiddler.tags.contains(usetags["created"])) return "created";\n else return defaultVal;\n}\n\nfunction getSortOrder(title) {\n var tiddler = store.getTiddler(title);\n var defaultVal = config.macros.tagglyListWithSort.defaults.sortOrder;\n if (!tiddler) return defaultVal;\n var usetags = config.macros.tagglyListControl.tags;\n if (tiddler.tags.contains(usetags["asc"])) return "asc";\n else if (tiddler.tags.contains(usetags["desc"])) return "desc";\n else return defaultVal;\n}\n\nfunction getHideState(title) {\n var tiddler = store.getTiddler(title);\n var defaultVal = config.macros.tagglyListWithSort.defaults.hideState;\n if (!tiddler) return defaultVal;\n var usetags = config.macros.tagglyListControl.tags;\n if (tiddler.tags.contains(usetags["hide"])) return "hide";\n else if (tiddler.tags.contains(usetags["show"])) return "show";\n else return defaultVal;\n}\n\nfunction getGroupState(title) {\n var tiddler = store.getTiddler(title);\n var defaultVal = config.macros.tagglyListWithSort.defaults.groupState;\n if (!tiddler) return defaultVal;\n var usetags = config.macros.tagglyListControl.tags;\n if (tiddler.tags.contains(usetags["group"])) return "group";\n else if (tiddler.tags.contains(usetags["nogroup"])) return "nogroup";\n else return defaultVal;\n}\n\nfunction getNumCols(title) {\n var tiddler = store.getTiddler(title);\n var defaultVal = config.macros.tagglyListWithSort.defaults.numCols; // an int\n if (!tiddler) return defaultVal;\n var usetags = config.macros.tagglyListControl.tags;\n for (var i=1;i<=config.macros.tagglyListWithSort.maxCols;i++)\n if (tiddler.tags.contains(usetags["cols"+i])) return i;\n return defaultVal;\n}\n\n\nfunction getSortLabel(title,which) {\n // TODO. the strings here should be definable in config\n var by = getSortBy(title);\n var order = getSortOrder(title);\n var hide = getHideState(title);\n var group = getGroupState(title);\n if (which == "hide") return (hide == "show" ? "−" : "+"); // 0x25b8;\n else if (which == "group") return (group == "group" ? "normal" : "grouped");\n else if (which == "cols") return "cols±"; // ±\n else if (by == which) return which + (order == "asc" ? "↓" : "↑"); // ↑ ↓\n else return which;\n}\n\nfunction handleSortClick(title,which) {\n var currentSortBy = getSortBy(title);\n var currentSortOrder = getSortOrder(title);\n var currentHideState = getHideState(title);\n var currentGroupState = getGroupState(title);\n var currentNumCols = getNumCols(title);\n\n var tags = config.macros.tagglyListControl.tags;\n\n // if it doesn't exist, lets create it..\n if (!store.getTiddler(title))\n store.saveTiddler(title,title,"",config.options.txtUserName,new Date(),null);\n\n if (which == "hide") {\n // toggle hide state\n var newHideState = (currentHideState == "hide" ? "show" : "hide");\n removeTag(title,tags[currentHideState]);\n if (newHideState != config.macros.tagglyListWithSort.defaults.hideState)\n toggleTag(title,tags[newHideState]);\n }\n else if (which == "group") {\n // toggle hide state\n var newGroupState = (currentGroupState == "group" ? "nogroup" : "group");\n removeTag(title,tags[currentGroupState]);\n if (newGroupState != config.macros.tagglyListWithSort.defaults.groupState)\n toggleTag(title,tags[newGroupState]);\n }\n else if (which == "cols") {\n // toggle num cols\n var newNumCols = currentNumCols + 1; // confusing. currentNumCols is an int\n if (newNumCols > config.macros.tagglyListWithSort.maxCols || newNumCols > store.getTaggedTiddlers(title).length)\n newNumCols = 1;\n removeTag(title,tags["cols"+currentNumCols]);\n if (("cols"+newNumCols) != config.macros.tagglyListWithSort.defaults.groupState)\n toggleTag(title,tags["cols"+newNumCols]);\n }\n else if (currentSortBy == which) {\n // toggle sort order\n var newSortOrder = (currentSortOrder == "asc" ? "desc" : "asc");\n removeTag(title,tags[currentSortOrder]);\n if (newSortOrder != config.macros.tagglyListWithSort.defaults.sortOrder)\n toggleTag(title,tags[newSortOrder]);\n }\n else {\n // change sortBy only\n removeTag(title,tags["title"]);\n removeTag(title,tags["created"]);\n removeTag(title,tags["modified"]);\n\n if (which != config.macros.tagglyListWithSort.defaults.sortBy)\n toggleTag(title,tags[which]);\n }\n\n store.setDirty(true); // save is required now.\n story.refreshTiddler(title,false,true); // force=true\n}\n\nconfig.macros.tagglyListControl.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n var onclick = function(e) {\n if (!e) var e = window.event;\n handleSortClick(tiddler.title,params[0]);\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return false;\n };\n createTiddlyButton(place,getSortLabel(tiddler.title,params[0]),"Click to change sort options",onclick,params[0]=="hide"?"hidebutton":"button");\n}\n//}}}\n/***\n\n!tagglyListWithSort\nput it all together..\n***/\n//{{{\nconfig.macros.tagglyListWithSort.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n if (tiddler && store.getTaggedTiddlers(tiddler.title).length > 0)\n wikify(\n "<<tagglyListControl hide>>"+\n (getHideState(tiddler.title) != "hide" ? \n '<html><span class="tagglyLabel">'+config.macros.tagglyList.label.format([tiddler.title])+' </span></html>'+\n "<<tagglyListControl title>><<tagglyListControl modified>><<tagglyListControl created>><<tagglyListControl cols>><<tagglyListControl group>>\sn" + \n "<<tagglyList" + (getGroupState(tiddler.title)=="group"?"ByTag ":" ") + getSortBy(tiddler.title)+" "+getSortOrder(tiddler.title)+" "+getNumCols(tiddler.title)+">>" // hacky\n // + \sn----\sn" +\n //"<<tagglyList "+getSortBy(tiddler.title)+" "+getSortOrder(tiddler.title)+">>"\n : ""),\n place,null,tiddler);\n}\n\n//}}}\n/***\n\n!hideSomeTags\nSo we don't see the sort tags.\n(note, they are still there when you edit. Will that be too annoying?\n***/\n//{{{\n\n// based on tags.handler\nconfig.macros.hideSomeTags.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n var theList = createTiddlyElement(place,"ul");\n if(params[0] && store.tiddlerExists[params[0]])\n tiddler = store.getTiddler(params[0]);\n var lingo = config.views.wikified.tag;\n var prompt = tiddler.tags.length == 0 ? lingo.labelNoTags : lingo.labelTags;\n createTiddlyElement(theList,"li",null,"listTitle",prompt.format([tiddler.title]));\n for(var t=0; t<tiddler.tags.length; t++)\n if (!this.tagsToHide.contains(tiddler.tags[t])) // this is the only difference from tags.handler...\n createTagButton(createTiddlyElement(theList,"li"),tiddler.tags[t],tiddler.title);\n\n}\n\n//}}}\n/***\n\n!Refresh everything when we save a tiddler. So the tagged lists never get stale. Is this too slow???\n***/\n//{{{\n\nfunction refreshAllVisible() {\n story.forEachTiddler(function(title,element) {\n story.refreshTiddler(title,false,true);\n });\n}\n\nstory.saveTiddler_orig_mptw = story.saveTiddler;\nstory.saveTiddler = function(title,minorUpdate) {\n var result = this.saveTiddler_orig_mptw(title,minorUpdate);\n refreshAllVisible();\n return result;\n}\n\nstore.removeTiddler_orig_mptw = store.removeTiddler;\nstore.removeTiddler = function(title) {\n this.removeTiddler_orig_mptw(title);\n refreshAllVisible();\n}\n\n//}}}\n\n// // <html>▸▾−±</html>
/***\nTo use, add {{{[[TagglyTaggingStyles]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also ViewTemplate, EditTemplate and TagglyTagging.\n***/\n/*{{{*/\n.tagglyTagged li.listTitle { display:none;}\n.tagglyTagged li { display: inline; font-size:90%; }\n.tagglyTagged ul { margin:0px; padding:0px; }\n.tagglyTagging { padding-top:0.5em; }\n.tagglyTagging li.listTitle { display:none;}\n.tagglyTagging ul { margin-top:0px; padding-top:0.5em; padding-left:2em; margin-bottom:0px; padding-bottom:0px; }\n\n/* .tagglyTagging .tghide { display:inline; } */\n\n.tagglyTagging { vertical-align: top; margin:0px; padding:0px; }\n.tagglyTagging table { margin:0px; padding:0px; }\n\n\n.tagglyTagging .button { display:none; margin-left:3px; margin-right:3px; }\n.tagglyTagging .button, .hidebutton { color:#aaa; font-size:90%; border:0px; padding-left:0.3em;padding-right:0.3em;}\n.tagglyTagging .button:hover, .hidebutton:hover { background:#eee; color:#888; }\n.selected .tagglyTagging .button { display:inline; }\n\n.tagglyLabel { color:#aaa; font-size:90%; }\n\n.tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }\n.tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}\n.tagglyTagging ul ul li {margin-left:0.5em; }\n\n.editLabel { font-size:90%; padding-top:0.5em; }\n/*}}}*/\n
[img[wiki_images/copd_cxr.jpg]]\n
[img[wiki_images/copd_ekg.png]]
[img[wiki_images/tamponade_cxr.jpg]]
[img[wiki_images/tamponade_ekg.jpg]]\n\n<<slider holdvar answer2.8 Interpretation "Interpretation of this EKG">>
[img[wiki_images/cxr_nl.jpg]]
[img[wiki_images/ekg_lbbb.gif]]
[img[wiki_images/secho_nl1.png]]\n[img[wiki_images/secho_nl2.png]]
[img[wiki_images/lvh_ekg.gif]]
/***\n''TextAreaPlugin for TiddlyWiki version 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#TextAreaPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nThis plugin 'hijacks' the TW core function, ''Story.prototype.focusTiddler()'', so it can add special 'keyDown' handlers to adjust several behaviors associated with the textarea control used in the tiddler editor. Specifically, it:\n* Adds text search INSIDE of edit fields.^^\nUse ~CTRL-F for "Find" (prompts for search text), and ~CTRL-G for "Find Next" (uses previous search text)^^\n* Enables TAB characters to be entered into field content^^\n(instead of moving to next field)^^\n* Option to set cursor at top of edit field instead of auto-selecting contents^^\n(see configuration section for checkbox)^^\n!!!!!Configuration\n<<<\n<<option chkDisableAutoSelect>> place cursor at start of textarea instead of pre-selecting content\n<<option chkDisableEscapeKey>> don't cancel editor when ''escape'' key is pressed\n<<option chkTextAreaExtensions>> add control-f (find), control-g (find again) and allow TABs as input in textarea\n<<<\n!!!!!Installation\n<<<\nImport (or copy/paste) the following tiddlers into your document:\n''TextAreaPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2006.02.14 [1.1.0]''\nadded option for chkDisableEscapeKey (default is standard action)\n''2006.01.22 [1.0.1]''\nonly add extra key processing for TEXTAREA elements (not other edit fields).\nadded option to enable/disable textarea keydown extensions (default is "standard keys" only)\n''2006.01.22 [1.0.0]''\nMoved from temporary "System Tweaks" tiddler into 'real' TextAreaPlugin tiddler.\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.textAreaPlugin= {major: 1, minor: 1, revision: 0, date: new Date(2006,2,14)};\n//}}}\n\n//{{{\nif (!config.options.chkDisableAutoSelect) config.options.chkDisableAutoSelect=false; // default to standard action\nif (!config.options.chkTextAreaExtensions) config.options.chkTextAreaExtensions=false; // default to standard action\nif (!config.options.chkDisableEscapeKey) config.options.chkDisableEscapeKey=false; // default to standard action\n\n// Focus a specified tiddler. Attempts to focus the specified field, otherwise the first edit field it finds\nStory.prototype.focusTiddler = function(title,field)\n{\n var tiddler = document.getElementById(this.idPrefix + title);\n if(tiddler != null)\n {\n var children = tiddler.getElementsByTagName("*")\n var e = null;\n for (var t=0; t<children.length; t++)\n {\n var c = children[t];\n if(c.tagName.toLowerCase() == "input" || c.tagName.toLowerCase() == "textarea")\n {\n if(!e)\n e = c;\n if(c.getAttribute("edit") == field)\n e = c;\n }\n }\n if(e)\n {\n e.focus();\n e.select(); // select entire contents\n\n // TWEAK: add TAB and "find" key handlers\n if (config.options.chkTextAreaExtensions) // add extra key handlers\n addKeyDownHandlers(e);\n\n // TWEAK: option to NOT autoselect contents\n if (config.options.chkDisableAutoSelect) // set cursor to start of field content\n if (e.setSelectionRange) e.setSelectionRange(0,0); // for FF\n else if (e.createTextRange) { var r=e.createTextRange(); r.collapse(true); r.select(); } // for IE\n\n }\n }\n\n tiddler.onkeypress = function(e) {\n if (!e) var e = window.event;\n clearMessage();\n var consume = false;\n switch(e.keyCode)\n {\n case 13: // Ctrl-Enter\n case 10: // Ctrl-Enter on IE PC\n case 77: // Ctrl-Enter is "M" on some platforms\n if(e.ctrlKey)\n {\n story.blurTiddler(this.title);\n config.macros.toolbar.invokeCommand(this,"defaultCommand",e);\n consume = true;\n }\n break;\n case 27: // Escape\n if (config.options.chkDisableEscapeKey) break; // ignore ESCAPE if option is set\n story.blurTiddler(this.title);\n config.macros.toolbar.invokeCommand(this,"cancelCommand",e);\n consume = true;\n break;\n }\n e.cancelBubble = consume;\n if(consume)\n if (e.stopPropagation) e.stopPropagation();\n return(!consume);\n };\n}\n//}}}\n\n//{{{\nfunction addKeyDownHandlers(e)\n{\n // exit if not textarea or element doesn't allow selections\n if (e.tagName.toLowerCase()!="textarea" || !e.setSelectionRange) return;\n\n // utility function: exits keydown handler and prevents browser from processing the keystroke\n var processed=function(ev) { ev.cancelBubble=true; if (ev.stopPropagation) ev.stopPropagation(); return false; }\n\n // capture keypress in edit field\n e.onkeydown = function(ev) { if (!ev) var ev=window.event;\n\n // process TAB\n if (!ev.shiftKey && ev.keyCode==9) { \n // replace current selection with a TAB character\n var start=e.selectionStart; var end=e.selectionEnd;\n e.value=e.value.substr(0,start)+String.fromCharCode(9)+e.value.substr(end);\n // update insertion point, scroll it into view\n e.setSelectionRange(start+1,start+1);\n var linecount=e.value.split('\sn').length;\n var thisline=e.value.substr(0,e.selectionStart).split('\sn').length-1;\n e.scrollTop=Math.floor((thisline-e.rows/2)*e.scrollHeight/linecount);\n return processed(ev);\n }\n\n // process CTRL-F (find matching text) or CTRL-G (find next match)\n if (ev.ctrlKey && (ev.keyCode==70||ev.keyCode==71)) {\n // if ctrl-f or no previous search, prompt for search text (default to previous text or current selection)... if no search text, exit\n if (ev.keyCode==70||!e.find||!e.find.length)\n { var f=prompt("find:",e.find?e.find:e.value.substring(e.selectionStart,e.selectionEnd)); e.focus(); e.find=f?f:e.find; }\n if (!e.find||!e.find.length) return processed(ev);\n // do case-insensitive match with 'wraparound'... if not found, alert and exit \n var newstart=e.value.toLowerCase().indexOf(e.find.toLowerCase(),e.selectionStart+1);\n if (newstart==-1) newstart=e.value.toLowerCase().indexOf(e.find.toLowerCase());\n if (newstart==-1) { alert("'"+e.find+"' not found"); e.focus(); return processed(ev); }\n // set new selection, scroll it into view, and report line position in status bar\n e.setSelectionRange(newstart,newstart+e.find.length);\n var linecount=e.value.split('\sn').length;\n var thisline=e.value.substr(0,e.selectionStart).split('\sn').length;\n e.scrollTop=Math.floor((thisline-1-e.rows/2)*e.scrollHeight/linecount);\n window.status="line: "+thisline+"/"+linecount;\n return processed(ev);\n }\n }\n}\n//}}}\n
/***\nExamples:\n\n|Code|Description|Example|h\n|{{{<<toggleTag>>}}}|Toggles the default tag (checked) in this tiddler|<<toggleTag>>|\n|{{{<<toggleTag TagName>>}}}|Toggles the TagName tag in this tiddler|<<toggleTag TagName>>|\n|{{{<<toggleTag TagName TiddlerName>>}}}|Toggles the TagName tag in the TiddlerName tiddler|<<toggleTag TagName TiddlerName>>|\n|{{{<<toggleTag TagName TiddlerName nolabel>>Click me}}}|Same but hide the label|<<toggleTag TagName TiddlerName nolabel>>Click me|\n(Note if TiddlerName does exist it will be silently created)\n***/\n//{{{\n\n\n// This function contributed by Eric Shulman\nfunction toggleTag(title,tag) {\n var t=store.getTiddler(title); if (!t || !t.tags) return;\n if (t.tags.find(tag)==null) t.tags.push(tag)\n else t.tags.splice(t.tags.find(tag),1)\n}\n\n// This function contributed by Eric Shulman\nfunction isTagged(title,tag) {\n var t=store.getTiddler(title); if (!t) return false;\n return (t.tags.find(tag)!=null);\n}\n\nconfig.macros.toggleTag = {};\nconfig.views.wikified.toggleTag = {fulllabel: "[[%0]] [[%1]]", shortlabel: "[[%0]]", nolabel: "" };\n\nconfig.macros.toggleTag.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n if(tiddler instanceof Tiddler) {\n var tag = (params[0] && params[0] != '.') ? params[0] : "checked";\n var title = (params[1] && params[1] != '.') ? params[1] : tiddler.title;\n var hidelabel = params[2]?true:false;\n\n var onclick = function(e) {\n if (!e) var e = window.event;\n if (!store.getTiddler(title))\n store.saveTiddler(title,title,"",config.options.txtUserName,new Date(),null);\n toggleTag(title,tag);\n\n store.setDirty(true); // so TW knows it has to save now\n\n story.forEachTiddler(function(title,element) {\n story.refreshTiddler(title,false,true)\n });\n\n return false;\n };\n\n var lingo = config.views.wikified.toggleTag;\n\n // this part also contributed by Eric Shulman\n var c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick=onclick;\n place.appendChild(c);\n c.checked=isTagged(title,tag);\n\n if (!hidelabel) {\n var label = (title!=tiddler.title)?lingo.fulllabel:lingo.shortlabel;\n wikify(label.format([tag,title]),place);\n }\n }\n}\n\n//}}}\n
<!---\n| Name:|~TagglyTaggingViewTemplate |\n| Version:|1.2 (16-Jan-2006)|\n| Source:|http://simonbaird.com/mptw/#TagglyTaggingViewTemplate|\n| Purpose:|See TagglyTagging for more info|\n| Requires:|You need the CSS in TagglyTaggingStyles to make it look right|\n!History\n* 16-Jan-06, version 1.2, added tagglyListWithSort\n* 12-Jan-06, version 1.1, first version\n!Notes\nRemove the miniTag if you don't like it or you don't use QuickOpenTagPlugin\n--->\n<!--{{{-->\n<div class="toolbar"><span macro='toolbar -closeTiddler closeOthers \n+editTiddler references jump refresh'></span> \n<span macro="newFromTemplate here"></span></div> \n\n<div class="tagglyTagged" macro="hideSomeTags"></div>\n<div><span class="title" macro="view title"></span><span class="miniTag" macro="miniTag"></span></div>\n<div class='subtitle'>Updated <span macro='view modified date [[DD MMM, YYYY]]'></span></div>\n<div class="viewer" macro="view text wikified"></div>\n<div class="tagglyTagging" macro="tagglyListWithSort"></div>\n<!--}}}-->\n
A relatively young patient who presents with signs and symptoms of ischemia is concerning. The first thing to rule out on this patient is an ischemic picture. Given his current activity level without an ischemic history this may not be the case, however, his current presentation certainly might be an acute MI.
This is a classic presentation of someone in pericardial tamponade with hemodynamic compromise.
Dressler's syndrome (Pericarditis that occurs after a heart attack or after heart bypass surgery) Renal failure \nUremic Pericarditis \nTrauma/Injury \nNeoplastic (cancer) Pericarditis \nInfectious Pericarditis \nRheumatic Fever \nViral Pericarditis \nTuberculous Pericarditis \nRadiation induced Pericarditis \nSystemic Lupus Erythematosus \nHypothyroidism \nRheumatoid Arthritis \n
The treatment of cardiac tamponade is to drain the fluid that has accumulated in the pericardial space. This can either be done with a needle under echo guidance or in the operating room through a subzyphoid incision. In this situation, it might be advisable to first drain some of the fluid before proceeding to the OR.
Standard ASA monitors along with at least an arterial line prior to anesthetic induction is mandatory. In addition, the placement of large bore intravenous access is necessary in order to administer fluid rapidly if the patient’s preload decreases.
The problem with the accumulation of fluid in the pericardial space is that it causes pressure on the right atrium and right ventricle impairing venous return from the body. This results in a decreased cardiac output and with continued accumulation of fluid, there can be pressure on the left side of the heart as well.
When considering the induction of general anesthesia for a pericardial effusion, be gentle. Avoid medications that are strong cardiac depressants or vasodilators. Cardiac depressant medications will further decrease cardiac output and may lead to arrest. Vasodilators lead to a further reduction in preload that will be excentuated in these patients. The goal for anesthetic induction is to keep these patients fast, full and tight (increased heart rate, increased filling pressures and vasoconstricted). These are patients that should not be run bone dry but instead volume repleat prior to induction. As I mentioned above, the treatment for this patient might be to first remove some of the pericardial fluid with a needle and stabilize his hemodynamics prior to proceeding with a general anesthetic and definitive procedure.
This EKG demonstrates electrical aleterans which occurs in the presence of a significant pericardial effusion. This results from a changing electrical access as the heart floats in excess pericardial fluids. We can see a change in the amplitude of the QRS complex when the heart is either closer or farther away from the EKG leads.
Symptoms of Pheochromocytomas:\n- Headache\n- Diaphoresis\n- Palpitations\n- Orthostatic hypotension\n- \nSigns of Pheochromocytomas:\n- Hypertension – often difficult to control\n- Flushing\n- Mental Status Changes\n\nLaboratory Changes Associated with Pheochromocytomas:\n- Hyperglycemia\n- Weight Loss\n- Elevated Urinary Catecholamines, Metanephrines, and Vanillymandelic Acid (VMA)\n
The two clinically concerning issues in patients with pheochromocytomas include hypertension and intravascular volume status. These patients tend to present with very elevated blood pressure and a resulting intravascular volume contracted state. Preoperatively, the control of hypertension and the normalization of intravascular volume are the primary aims.\n\nThe control of hypertension is accomplished with alpha-adrenergic blocking agents. The common agent of choice is the long acting alpha-antagonist phenoxibenzamine. This needs to be administered a week or more prior to surgery in order to obtain adequate control of blood pressure. Once the alpha-blocking aspect is controlled, the addition of a beta-blocker for heart rate control may be added. If a beta-blocker is administered prior to alpha-blockade, these patients are at risk for a hypertensive crisis with unopposed alpha-activity.\n\nFor acute control of blood pressure, the addition of short acting agents administered via the iv route can be added such as nitroglycerine, nitroprusside, or phentolamine.\n\nIn addition to controlling the blood pressure, the restoration of intravascular volume can be addressed.\n
Due to the relativly small number of pheochromocytoma cases, there are no randomized, controlled studies looking at different anesthetic regimes for these patients. One the blood pressure and intravascular volume is stabilized, your choices are either general anesthesia or combined general and regional anesthesia depending on the surgical approach to this problem (open vs. laparoscopic). Epidural anesthesia has not been show to result in better control of hemodynamic responses or complications when compared with general anesthesia. \n\nWith general anesthesia, you want to be careful to avoid agents with intrinsic sympathetic activity such as ketamine or etomidate due to already elevated levels of catecholamines in these patients. In addition, patients with elevated catecholamine levels maintained with halothane are more likely to develop cardiac arrythmias (typically PVC’s).\n\nSome have argued the use of a high narcotic anesthesia is better than an increase in volatile agents due to the reduction in cardiac depressant activity. I feel the use of agents to control hemodynamics is much more important that using either narcotic or volatiles to blunt sympathetic responses. The issue with these patients is unregulated sympathetic hyperactivity that is unlikely to be impacted by either high narcotic or volatile agents.\n
The most common problem in these patients is hypotension due to the high doses of antihypertensive agents (which are long acting) and the removal of the high catecholamine levels with the removal of the tumor. This is often well controlled with volume expansion and rarely requires inotropic support. \n\nAnother potential postoperative problem can be recurrence of hypertension. If this is difficult to control or very elevated, there should be suspicion for residual tumor or tumor located at another site.\n
This clinical scenario depicts some of the classic history from someone suffering from a hemoglobinopathy such as Sickle Cell Anemia.\n\n~Pre-Operative Diagnosis: \nSickle Cell Anemia – a group of hemoglobinopathies including sickle cell disease (HbS) and beta-thalassemia. HbS occurs in 1 in 300 to 1 in 400 African-American patients. *Mutation in the 6th postition of the beta-globulin gene substituting a valine for a glutamic acid.\n*Sickle Cell Trait – Occurs in 8% of ~African-American Population\n
!Sickle Cell Disease\n\n!Clinical Features:\n*Patients often are young\n*Present with Anemia\n*Develop obstructive or hemolytic jaundice (gall stones)\n*Due to sludging of red cells, can develop bone/joint pain, chest pain (pulmonary infarctions), auto-splenectomies, non-healing leg ulcers, priapism\n*May have lymphadenopathy\n\nMore severe presentations may occur\n!Sickle Cell Crisis\n**Acute sickling of RBC’s leading to organ infarctions\n**Acute anemia due to hemolysis\n**Acute sequestration of RBC’s leading to more profound anemia\n**Aplasitic crisis potential\n!Acute chest syndrome\n**Fever\n**Cough\n**Hypoxemia\n**Tachypnea
In patients with Sickle Cell Disease, one needs to be concerned with inducing <<slider chkslider4.1 sickling "red blood cell sickling">> during the perioperative period. This can easily occur in the operating room or post-operaitve recovery area. \n\nThings that can induce sickling of red blood cells\n*Hypoxia\n*Dehydration\n*Hypothermia\n*Acidosis\n*Overtransfusion\n*Hypotension\n
!~Pre-Operative Labs for Sickle Cell Patients:\n*Hematocrit\n*<<slider chkslider4.5 [[Reticulocyte count]] "Reticulocyte count">>\n*<<slider chkslider4.5 [[Peripheral Blood Smear]] "Peripheral Blood Smear">>\n*<<slider chkslider4.5 [[Hemoglobin electrophoresis]] "Hemoglobin electrophoresis">>\n*Chem 7 – high proportion of patients can have renal infarctions
!~Pre-Operative Optimization for Sickle Cell Disease"\n*Avoid dehydration\n*Correct anemia if Hbg < 7 g/ 100 ml (Hct 25-30% optimal for these pts)\n*Consider exchange blood transfusions (decrease the sickle component to <40%), most procedures can be done without exchange transfusion. Transfusions to HbG 10 g/100 ml is as effective as exchange transfusion. May be beneficial in high risk operations (cardiac, thoracic or major vascular)\n
!Intraoperative Anesthetic Considerations:\n*Regional and General are adequate\n*Avoid prolonged tourniquets \n*Pre-oxygenate\n*Hyperventilate to prevent acidosis\n*Keep Warm\n*Hydrated\n\n
!~Post-Operative Considerations in Sickle Cell Disease:\n*Avoid respiratory depression\n*Supplemental Oxygen for 24 hours\n*Maintain hydration\n*Maintain normothermia\n*High risk for pneumonia – leading cause of perioperative morbidity\n*Sickle Crisis (Rx)\n**Bed rest\n**Hydration\n**Sodium Bicarbonate\n**Supplemental Oxygen\n**Prophylaxis or treatment antibiotics\n**Analgesics\n**Blood Transfusions\n \n
Difficult Visualization with DL 12-13%\nDifficult Ventilation 0.01% - 2%\nDifficult Intubation 0.05% - 0.35%
!Mallampati Classification\n<<slider chkslider5.2 [[Mallampati Classification]] "Image">>\n\nIn 210 Patients; Mallampati Class relationship to <<slider chkslider5.2 [[Cormack & Lehane Laryngeal Grade]] "Cormack & Lehane Laryngeal View">>\n\n|!|C&L Grade I|C&L Grade II|C&L Grade III|C&L Grade IV|\n|!Class I airway|59.5%|14.3%||\n|!Class II airway|5.7%|6.7%|4.7%|1.9%|\n|!Class III airway||0.5%|4.3%|2.4%|\n
[[2003 ASA Difficult Airway Guidelines|http://www.asahq.org/publicationsAndServices/Difficult%20Airway.pdf]]\n\n!Components of a Complete Airway Evaluation\n\n•Teeth:\n**Upper Incisor Size\n**Maxillary Incisor relation to Mandibular Incisors\n**Ability to Prognath the Mandible\n**Mouth Opening - 5 - 6 cm \n\n•Oral Pharynx:\n**Tongue to Oral Cavity Size Compareson (MP)\n**Pallet Arch and Width\n \n•Mandibular Space\n**Thyromental Distance \n**Thyromental Compliance\n\n•Neck:\n**ROM of neck\n**Width of neck\n**Length of neck\n
•Awake Laryngoscopy to assess intubation view\n•Blind Nasal\n•Awake FOB - Nasal or Oral\n•Asleep Direct Laryngoscopy\n•Asleep FOB - Nasal or Oral\n•Asleep with LMA and Aintree Intubating Catheter\n•Retrograde - Emergency \n•Fast Trach - Emergency/Elective\n
•Antisialogue\n•Topical Anesthesia \n**Spray\n**Nebulized Lidocaine\n•Nerve Blocks\n**Lingual Nerve branch of the Glossopharyngeal Nerve Block – displace the tongue medially using a Macintosh Laryngoscope blade and a 25 gauge spinal needle to access the cul-de-sac made by the anterior tonsilar piller and the base of the tongue. Deposit 1-2 cc of local anesthesia just in the submucosal area. This blocks the Posterior 2/3 of the tongue as well as the hypopharynx down to the pharyngeal side of the epiglottis.\n**Superior Laryngeal Nerve Block – Anatomic landmarks are the cornu of the hyoid bone and the superior boarder of the thyroid cartledge. This block covers the superior larynx above the vocal cords and paralyses the cricothyroideus muscle. Inject 2-3 cc of local anesthesia.\n**Trasnstracheal Anesthesia – Puncture the cricothyroid membrane with a 20 G needle, asperate to insure position and the rapidly inject 3-4 cc of local anesthesia. This is likely to general a cough reflex which will distribute the local anesthesia to the underside of the vocal cords as well as into the trachea.\n
This patient is in need of some form of awake intubation. Due to the amount of blood both in his stomach as well as in his upper airway the choices are small and difficult. After topicallizing his nose and mouth as best as you can, you options include a blind nasal intubation and a retrograde intubation (possiblly fiberoptically assisted).
<<tabs txtMainTab Timeline Timeline TabTimeline All 'All tiddlers' TabAll Tags 'All tags' TabTags More 'More lists' TabMore>>
This procedure is performed on patients with chronic sinus conditions that are not responsive to medical management. Some patients with chronic sinusitis can develop nasal polyps. There is a link between asthma, nasal polyps, and a sensitivity to asprin or NSAIDS. Patients who are exposed to Asprin or NSAIDS may develop worsening asthma as well as an increase in nasal polyps. These patients may benefit from a course of steroids prior to undergoing sinus surgery. The sinus are prone to bleeding with an increase in blood loss when patients have active inflamation. \n\nControl of sinus inflamation with antibiotics or nasal decongestants may help decrease blood loss. In addition one needs to control perioperative hypertension and may modify the anesthetic to prevent vasocongestion of the nasal mucosa to limit bleeding.\n\nPost-operatively, many of the patients who undergo endoscopic sinus surgery or other endoscopic surgery will have both nasal passages packed in an attempt to decrease blood loss. A recent article suggested more apneic episodes in patients who undergo endoscopic surgery with post-operative nasal packing [[[link to article|http://www.anesthesia-analgesia.org/cgi/content/full/102/2/615]]]. This is something to keep in mind since packing of the nares results in an alteration of pateints breathing patterns.
|pH|pO2|pCO2|~HCO3-|~SaO2|\n|7.40|95|40|23|100|
Quantification of a smoking history is done in pack-years. This is the number of packs of cigarettes smoked each day mulitiplied by the number of years the patient has been smoking.\n\nFor example, a 50 year old who smokes 1.5 packs each day and has been smoking since they were 20 years old (30 years) has a 45 pack-year smoking history.
[img[wiki_images/sickle_cell.bmp]]
β-HCG is human chorionic gonatotropin hormone, or the hormone of pregnacy. This hormone is produced by the cells of a fertilized egg as it implants into the uterine wall. The hormone can be detected as early as 8-9 days in the maternal serum following conception. It is the common serum marker to determine if a female patient is pregant.\n\n[img[wiki_images/beta_hcg.gif]]\nGraph depecting rise and fall of β-HCG in maternal serum during pregnancy.