Index: moodle/lib/javascript-static.js
--- moodle/lib/javascript-static.js Base (1.141)
+++ moodle/lib/javascript-static.js Locally Modified (Based On 1.141)
@@ -1221,6 +1221,10 @@
 
     YAHOO.util.Event.preventDefault(event);
 
+    if (M.help_content.instance !== null) {       
+        var id = '#' + args.id;        
+        M.help_content.instance.load_from_openpopup(event, args);
+    } else {        
     var fullurl = args.url;
     if (!args.url.match(/https?:\/\//)) {
         fullurl = M.cfg.wwwroot + args.url;
@@ -1236,6 +1240,7 @@
     windowobj.focus();
     return false;
 }
+}
 
 /* This is only used on a few help pages. */
 emoticons_help = {
@@ -1460,3 +1465,133 @@
         item.style.display = "none";
     }
 }
+
+M.help_content = {
+    instance : null,
+    init : function(Y) {                
+        Y.use('overlay', 'io', 'event-mouseenter', 'node', "*", function(Y) {
+
+            var help_content_overlay = {
+                overlay : null,
+                init : function() {
+                    var xy = Y.one('#helpcontent').getXY(); 
+
+                    // Create an overlay from markup
+                    this.overlay = new Y.Overlay({
+                        srcNode : "#helpcontent",
+                        contentBox: '#helpcontent',
+                        width:'400px',
+                        xy:[xy[0] + 200, xy[1] + 300]
+                    });
+                    this.overlay.render();
+                    this.overlay.hide();
+
+                    Y.on("click", Y.bind(this.overlay.show, this.overlay), "#show");
+                    Y.on("click", Y.bind(this.overlay.hide, this.overlay), "#hide");
+                    
+                    var menuButton = Y.one(".helplink"),
+                    overlaycontent = this;
+
+                    var boundingBox = this.overlay.get("boundingBox");
+
+                    //  Hide the menu if the user clicks outside of its content 
+                    boundingBox.get("ownerDocument").on("mousedown", function (event) {
+                        var oTarget = event.target;
+
+                        if (!oTarget.compareTo(menuButton) &&
+                            !menuButton.contains(oTarget) &&
+                            !oTarget.compareTo(boundingBox) &&
+                            !boundingBox.contains(oTarget)) {
+                            overlaycontent.overlay.hide();
+                        }
+                    });                    
+                },
+                
+                load_from_openpopup : function(event, node) {
+                    var spinner = document.createElement('img');
+                    spinner.src = M.cfg.loadingicon;
+                    this.overlay.set('bodyContent', spinner);
+
+                    var positionX = 0;
+                    var positionY = 0;
+
+                    if (event.pageX && !Y.UA.chrome) {
+                        positionX = event.pageX;
+                        positionY = event.pageY;
+                    } else if (!event.pageX && !Y.UA.chrome) {
+                        positionX = document.getElementById(node['id']).offsetLeft + 200;
+                        positionY = document.getElementById(node['id']).offsetTop + 500;
+                    } else { //chrome browser
+                        positionX = event.clientX + document.body.scrollLeft ;
+                        positionY = document.body.scrollTop;
+                        if (event.clientX > document.body.scrollTop) {
+                            positionY += event.clientY;
+                        }
+                    }
+
+                    if (Y.UA.chrome) {
+                        positionX = event.clientX + document.body.scrollLeft ;
+                        positionY = document.body.scrollTop;
+                        if (event.clientX > document.body.scrollTop) {
+                            positionY += event.clientY;
+                        }                        
+                    }
+
+                    var contentwidth = parseInt(this.overlay.get('width'));
+                    var overlayalign = 'right';
+                    if (document.getElementById('page').offsetWidth <= (positionX + contentwidth )) {
+                        overlayalign = 'left';                        
+                    }
+
+                    var WidgetPositionAlign = Y.WidgetPositionAlign;
+                    if (overlayalign == 'right') {
+                        this.overlay.set("align", {node:"#" + node['id'],
+                          points:[WidgetPositionAlign.TL, WidgetPositionAlign.RC]});
+                    } else {
+                        this.overlay.set("align", {node:"#" + node['id'],
+                          points:[WidgetPositionAlign.TR, WidgetPositionAlign.LC]});
+                    }
+                    
+                    var fullurl = node.url;
+                    if (!node.url.match(/https?:\/\//)) {
+                        fullurl = M.cfg.wwwroot + node.url;
+                    }
+                    
+                    var ajaxurl = fullurl + '&ajax=1';
+                    thishelpcontent = this;
+                    
+                    var cfg = {
+                        method: 'get',
+                        on: {
+                            success: function(id, o, node) {
+                                thishelpcontent.load_from_openpopup_callback(o.responseText);                                
+                            },
+                            failure: function(id, o, node) {
+                                var debuginfo = o.statusText;
+                                if (M.cfg.developerdebug) {
+                                    o.statusText += ' (' + ajaxurl + ')';
+                                }                                
+                                thishelpcontent.load_from_openpopup_callback('bodyContent',debuginfo);
+                            }
+                        }
+                    };
+                    
+                    var conn = Y.io(ajaxurl, cfg);
+                    this.overlay.show();
+                },
+                
+                load_from_openpopup_callback : function(content) {                                                            
+                    this.overlay.setStdModContent(Y.WidgetStdMod.BODY, content, Y.WidgetStdMod.REPLACE);
+                },
+                
+                hideContent : function() {
+                    help = this;
+                    help.overlay.hide();
+                }                
+            }
+            help_content_overlay.init();
+            M.help_content.instance = help_content_overlay;
+            
+        });
+    }
+}
Index: moodle/lib/outputactions.php
--- moodle/lib/outputactions.php Base (1.10)
+++ moodle/lib/outputactions.php Locally Modified (Based On 1.10)
@@ -143,8 +143,15 @@
                 $this->params[$var] = $params[$var];
             }
         }
-        parent::__construct($event, 'openpopup', array('url' => $url->out(false), 'name' => $name, 'options' => $this->get_js_options($params)));
+
+        
+        //new popup_action('click', $url, array('id'=>$id))
+        $attributes = array('url' => $url->out(false), 'name' => $name, 'options' => $this->get_js_options($params));
+        if (array_key_exists('id', $params)) {
+                $attributes['id'] = $params['id'];
     }
+        parent::__construct($event, 'openpopup', $attributes);
+    }
 
     /**
      * Returns a string of concatenated option->value pairs used by JS to call the popup window,
Index: moodle/lib/outputrenderers.php
--- moodle/lib/outputrenderers.php Base (1.187)
+++ moodle/lib/outputrenderers.php Locally Modified (Based On 1.187)
@@ -623,6 +623,10 @@
 
         $output = $this->container_end_all(true);
 
+        $helpcontent_body = html_writer::tag('div',  '<button class="closehelpbutton" type="button" id="hide"><img src="'.$this->pix_url('t/delete').'" alt="close" /></button>', array('class'=>'helpcontent_body'));
+        $output .= html_writer::tag('div', $helpcontent_body, array('id'=>'helpcontent', 'class'=>'yui3-overlay-loading'));       
+        $this->page->requires->js_init_call('M.help_content.init');
+        
         $footer = $this->opencontainers->pop('header/footer');
 
         if (debugging() and $DB and $DB->is_transaction_started()) {
@@ -1460,7 +1464,7 @@
         $attributes = array('href'=>$url, 'title'=>$title);
         $id = html_writer::random_id('helpicon');
         $attributes['id'] = $id;
-        $this->add_action_handler(new popup_action('click', $url), $id);
+        $this->add_action_handler(new popup_action('click', $url, 'popup', array('id'=>$id)), $id);
         $output = html_writer::tag('a', $output, $attributes);
 
         // and finally span
@@ -1523,7 +1527,7 @@
         $attributes = array('href'=>$url, 'title'=>$title);
         $id = html_writer::random_id('helpicon');
         $attributes['id'] = $id;
-        $this->add_action_handler(new popup_action('click', $url), $id);
+        $this->add_action_handler(new popup_action('click', $url, 'popup', array('id'=>$id)), $id);
         $output = html_writer::tag('a', $output, $attributes);
 
         // and finally span
Index: moodle/lib/outputrequirementslib.php
--- moodle/lib/outputrequirementslib.php Base (1.23)
+++ moodle/lib/outputrequirementslib.php Locally Modified (Based On 1.23)
@@ -249,7 +249,6 @@
         $this->string_for_js('confirmation', 'admin');
         $this->string_for_js('cancel', 'moodle');
         $this->string_for_js('yes', 'moodle');
-        $this->js_init_call('M.util.init_help_icons');
 
         if ($page->pagelayout === 'frametop') {
             $this->js_init_call('M.util.init_frametop');
Index: moodle/theme/base/style/core.css
--- moodle/theme/base/style/core.css Base (1.19)
+++ moodle/theme/base/style/core.css Locally Modified (Based On 1.19)
@@ -535,3 +535,14 @@
  * Web Service
  */
 #webservice-doc-generator td {text-align: left;border: 0px solid black;}
+
+
+/**
+ * Help Content (pop-up)
+ */
+#helpcontent{ background-color: yellow; z-index: 10; }
+#show { margin-left:5px; padding:0; }
+#hide { float: right; }
+.closehelpbutton { border: none; background: none; }
+.yui3-js-enabled .yui3-overlay-loading { top:-1000em; left:-1000em; position:absolute; display: none; }
+.yui3-widget-bd { float: none; clear: both; margin: 1em;}
