techtonik               Sat Jul 30 15:26:45 2005 EDT

  Modified files:              
    /phpdoc/htmlhelp/suppfiles/html     _script.js 
  Log:
  * give more time for clipboard copy operations to complete
  
http://cvs.php.net/diff.php/phpdoc/htmlhelp/suppfiles/html/_script.js?r1=1.9&r2=1.10&ty=u
Index: phpdoc/htmlhelp/suppfiles/html/_script.js
diff -u phpdoc/htmlhelp/suppfiles/html/_script.js:1.9 
phpdoc/htmlhelp/suppfiles/html/_script.js:1.10
--- phpdoc/htmlhelp/suppfiles/html/_script.js:1.9       Tue Jun 14 10:47:47 2005
+++ phpdoc/htmlhelp/suppfiles/html/_script.js   Sat Jul 30 15:26:43 2005
@@ -1,537 +1,537 @@
-// $Id: _script.js,v 1.9 2005/06/14 14:47:47 techtonik Exp $
-// 
=============================================================================
-// Preference handling
-
-// Handle all the preferences, including online functions custom
-// context menus, and skins [this is called from php_manual_prefs.js]
-function prefHandler()
-{
-    // Find out what file stores the skin JS code
-    switch (prefs_skin) {
-        
-        // Internal low skin
-        case "Low":
-            skin_js_file = '_skin_lo.js';
-            break;
-        
-        // Internal high skin
-        case "High":
-            skin_js_file = '_skin_hi.js';
-            break;
-        
-        // An external skin with full path (escape it just
-        // to make sure that paths with spaces and other
-        // unusual chars will work - and turn back : to
-        // it's original form)
-        default:
-            //escaped_skin = escape(prefs_skin);
-            //escaped_skin = escaped_skin.replace(/%3A/, ':')
-            skin_js_file = "file:///" + prefs_skin;
-            break;
-    }
-
-    // Load in the skin JS code
-    document.write('<script src="' + skin_js_file + '"><'+ '/script>');
-    
-    // OnContextMenu is only supported in IE5+ so do
-    // not try to support the context menu otherwise
-    if (ie_version_major >= 5) {
-    
-        // Write out context menu for the first time into it's div
-        document.write('<div id="contextMenu">');
-        contextMenuRewrite(true);
-        document.write('</div>');
-        
-        // Assign our own event handlers to document events [5+]
-        document.oncontextmenu = contextMenu;
-        document.onclick       = contextMenuCloseTimeout;
-        window.onblur          = contextMenuCloseTimeout;
-    }
-}
-
-// 
=============================================================================
-// CHM path detection - Thanks to Pete Lees and Jeff Hall for this code
-
-// Get the path and name of the CHM file and assign values
-function getCHMFile()
-{
-    var a, X, Y, Z;
-    a = location.href.search(/:/);
-    Y = location.href.lastIndexOf("::");
-    if (a == 4) {  // file: or http:
-        Y = location.href.lastIndexOf("/");
-        chmfile_page = unescape(location.href.substring(Y+1));
-        if (location.href.substring(0,4) == "file") {
-            chmfile_path = unescape(location.href.substring(8, Y+1));
-        }
-    }
-    else {
-        if (a == 2) X = 14; // mk:@MSITStore:
-        if (a == 7) X = 7;  // ms-its:
-        chmfile_fullname = unescape(location.href.substring(X, Y));
-        Z = chmfile_fullname.lastIndexOf("\\");
-        chmfile_path = unescape(chmfile_fullname.substring(0, Z+1));
-        chmfile_name = unescape(chmfile_fullname.substring(Z+1));
-        chmfile_page = unescape(location.href.substring(Y+3));
-    }
-
-    // RAQ : Wednesday, 16 March 2005 01:56 pm : If this page has been loaded 
because
-    //       the notes were selected from the search results, then remove the 
hash.
-    if (location.hash == '#userNotes')
-        chmfile_page = chmfile_page.substring(0, 
chmfile_page.lastIndexOf('#'));
-
-    //alert(
-    // "_script\n\n" +
-    // "location\n"+
-    // "location.hash = '" + location.hash + "'\n" +
-    // "location.host = '" + location.host + "'\n" +
-    // "location.hostname = '" + location.hostname + "'\n" +
-    // "location.href = '" + location.href + "'\n" +
-    // "location.pathname = '" + location.pathname + "'\n" +
-    // "location.port = '" + location.port + "'\n" +
-    // "location.protocol = '" + location.protocol + "'\n" +
-    // "location.search = '" + location.search + "'\n\n" +
-    // "chmfile\n"+
-    // "chmfile_name = '" + chmfile_name + "'\n" +
-    // "chmfile_path = '" + chmfile_path + "'\n" +
-    // "chmfile_page = '" + chmfile_page + "'\n"
-    // );
- 
-}
-
-// 
=============================================================================
-// Page display and online functions code
-
-// Go online to see this page in an external window [called when a user
-// clicks on the "this page oline" link]
-function thisPageOnline()
-{
-    if (!prefs_online) {
-        alert("You are in offline mode.\nThis functionality is not available");
-    } else {
-        window.open(prefs_mirror + 'manual/' + this_lang + '/' + 
this_page_php);
-    }
-}
-
-// Report bug on this manual page, using GET method URL tricks
-// [called when a user clicks on the "report bug on this page" link]
-function bugOnPage()
-{
-    if (!prefs_online) {
-        alert("You are in offline mode.\nThis functionality is not available");
-    } else {
-        window.open(
-            "http://bugs.php.net/report.php?"; +
-            escape("in[php_version]") + "=earlier&" +
-            escape("in[bug_type]") + "=Documentation%20problem&" +
-            escape("in[php_os]") + "=windows&" +
-            escape("in[sdesc]") + "=" + escape("[chm] bug on " + this_page) + 
"&" +
-            escape("in[ldesc]") + "=" + escape("I have found a bug on page " +
-                this_page + "\n[chm date: " + this_date + "]...\n")
-        );
-    }
-}
-
-// 
=============================================================================
-// Handle user notes from an external CHM file
-
-// Copy user notes text from aan invisible IFRAME to a visible
-// DIV tag's content area [this is called from displayNotes()
-// which is defined in every HTML page to fix an old IE bug]
-function _displayNotes()
-{
-    // Get the element from the "all" collection
-    element = document.all['pageNotes'];
-    
-    // If we have that element, copy notes here [4+]
-    if (element) {
-        element.innerHTML = parent.nbuff.document.body.innerHTML;
-        // RAQ : Wednesday, 16 March 2005 01:58 pm : Bring the notes into view
-        //       if the hash has been supplied
-        if (location.hash == '#userNotes')
-            {
-            setTimeout('element.scrollIntoView(true);',200);
-            }
-    } else {
-        alert("Error in user note inclusion");
-    }
-}
-
-// Load the user notes HTML file indirectly via a list
-// of available user note files [a workaround for a bug
-// affecting several IE 5.5 and IE 6 installations]
-function loadNotes()
-{
-    document.write('<script src="ms-its:' +
-    chmfile_path + 'php_manual_notes.chm::/_filelist.js"></script>');
-}
-
-// Prints out the inline frame for the notes HTML file
-function notesIframe()
-{
-    // Notes buffer for user notes to display on this page
-    document.write(
-        '<iframe name="nbuff" style="display:none" src="ms-its:' +
-        chmfile_path + 'php_manual_notes.chm::/' + chmfile_page +
-        '"></iframe>'
-    );
-}
-
-// 
=============================================================================
-// Context menu code
-
-// Rewrite context menu according to the current environment. The only 
parameter
-// indicates that this is the first display or not. [called once from
-// prefHandler() and then every time before a context menu needs to be 
displayed]
-function contextMenuRewrite(first)
-{
-    // Set selection to null value (we will check
-    // if there is a current selection now)
-    context_selrange = null;
-    
-    // Our menu layer is invisible initially
-    menuHTML = '<table width="150" cellspacing="2" cellpadding="0">';
-    
-    // Write out a table row for all menu points
-    for (i in prefs_context_names) {
-    
-        // Label and abstract implementation
-        label = prefs_context_names[i];
-        impl  = prefs_context_values[i];
-        
-        // Special display items start with an underscore
-        if (impl.substring(0,1) == "_") {
-    
-            // Find the special printout needed
-            switch (impl) {
-            
-                // Menu separator
-                case "_Separator_":
-                    menuHTML +=
-                        '<tr><td bgcolor="#000000"><img src="_pixel.gif" ' +
-                        'width="100%" height="1"></td></tr>';
-                    break;
-                    
-                // Google search box (only printed in online mode)
-                case "_GoogleSearch_":
-                    if (prefs_online) {
-                        menuHTML +=
-'<tr><td style="background-color: #f5f5f5;"><form 
action="http://www.google.com/search"; class="thin"' +
-'onsubmit="contextMenuClose()" method="GET" target="_blank">' +
-'<img src="_google.gif" align="absmiddle" alt="Google"><input type="text" 
name="q" ' +
-'style="width:120px;"></form></td></tr>';
-                    }
-                    break;
-    
-                // Alltheweb search box (only printed in online mode)
-                case "_ATWSearch_":
-                    if (prefs_online) {
-                        menuHTML +=
-'<tr><td style="background-color: #f5f5f5;"><form 
action="http://www.alltheweb.com/search"; class="thin"' +
-'onsubmit="contextMenuClose()" method="GET" target="_blank">' +
-'<img src="_atw.gif" align="absmiddle" alt="AlltheWeb"><input name="cat" 
type="hidden" value="web">' +
-'<input type="text" name="query" style="width:120px;"></form></td></tr>';
-                    }
-                    break;
-                    
-                // This should not be accessed in any valid situation, but
-                // is here to at least print out something in case of error...
-                default:
-                    menuHTML += contextLink(i, label);
-                    break;
-    
-            }
-        }
-        
-        // Special functions that may need to be printed out conditionally
-        else if (impl.substring(impl.length-2) == "()") {
-    
-            // Do something depending on function name
-            switch (impl.substring(0, impl.length-2)) {
-    
-                // Copy selection
-                case "copySelection":
-                    // For the first time there is actually no document... [4+]
-                    if (document.selection && !first) {
-                        context_selrange = document.selection.createRange();
-                        if (context_selrange.text.length > 0) {
-                            menuHTML += contextLink(i, label);
-                        }
-                    }
-                    break;
-                    
-                // Google or AlltheWeb search for selection (need to be in 
online mode)
-                case "searchSelGoogle":
-                case "searchSelATW":
-                    // For the first time there is actually no document... [4+]
-                    if (document.selection && !first) {
-                        context_selrange = document.selection.createRange();
-                        if (context_selrange.text.length > 0 && prefs_online) {
-                            menuHTML += contextLink(i, label);
-                        }
-                    }
-                    break;
-
-                // Misc functions like print() and selectAll()
-                default:
-                    menuHTML += contextLink(i, label);
-                    break;
-            }
-        }
-        
-        // Not a special display or function,
-        // so simply print out the line for this item
-        else { menuHTML += contextLink(i, label); }
-    }
-    
-    // End table
-    menuHTML += '</table>';
-    
-    // We do not have this element if this is the first run, but we
-    // need to rewrite the element content if it's not the first time
-    if (first) { document.write(menuHTML); }
-    else {
-        document.all['contextMenu'].innerHTML = menuHTML;
-    }
-}
-
-// Write out one context menu link table row [called from contextMenuRewrite()]
-function contextLink (number, label)
-{
-    return '<tr><td nowrap 
onmouseover="this.style.backgroundColor=\'#c0c0c0\';" ' +
-           'onmouseout="this.style.backgroundColor=\'#f5f5f5\';" ' +
-           'onclick="contextParse(' + number + ')" ' +
-           'style="cursor:hand; background-color: #f5f5f5;"><p 
class="context">' +
-           label + '</p></td></tr>';
-}
-
-// Parse the jump string, and do appropriate action [called when the user
-// clicks on a table row in the context menu]
-function contextParse(i)
-{
-    var control = prefs_context_values[i];
-    
-    // If the control string ends in (), then it is
-    // a function, not a file name
-    if (control.substring(control.length-2) == "()") {
-       
-        // Switch by function name
-        switch (control.substring(0, control.length-2)) {
-           
-            // Print out this page
-            case "print":
-                print();
-                break;
-                
-            // Copy the selection from the current document
-            case "copySelection":
-                if (context_selrange != null) {                
-                    context_selrange.execCommand("Copy"); // [4+]
-                }
-                break;
-            
-            // Search for the selected text on Google
-            case "searchSelGoogle":
-                sel = contextGetSelection();
-                if (sel != '') { window.open('http://www.google.com/search?q=' 
+ escape(sel));  }
-                break;
-            
-            // Search for the selected text on AlltheWeb
-            case "searchSelATW":
-                sel = contextGetSelection();
-                if (sel != '') { 
window.open('http://www.alltheweb.com/search?cat=web&query=' + escape(sel));  }
-                break;
-                
-            // Go back and forward in history
-            case "back": history.back(); break;
-            case "forward": history.forward(); break;
-
-            // Refresh page dispplay
-            case "refresh": window.location.reload(true); break;
-            
-            // Select all text in the document [4+]
-            case "selectAll": document.body.createTextRange().select(); break;
-
-            // View source of current page (not working!!)
-            // case "viewSource": window.location = "view-source:" + 
window.location.href; break;
-
-            // This should never be accessed, but here to alert if there is an 
error
-            default:
-                alert('This context menu function is not supported');
-                break;
-        }
-    }
-    
-    // If this is not a "function call", then jump
-    // to that page in the CHM or outside of it
-    else {
-        // Link with protocol
-        if (control.indexOf(":") > 0) {
-            window.open(control);
-        }
-        
-        // Link without protocol
-        else {
-            location = control;
-        }
-    }
-}
-
-// Returns the current selection [called when a context menu
-// item is clicked involving an operation on a selection]
-function contextGetSelection()
-{
-    // Test if anything is selected [4+]
-    if (context_selrange != null && context_selrange.text.length > 0) {
-        return context_selrange.text;
-    } else {
-        alert("Nothing is selected");
-        return "";
-    }
-}
-
-// Handle mousedown events in a document [called when a mouse click
-// is issued on a document]
-function contextMenu(e)
-{
-    // Close context menu, if it was open before
-    contextMenuClose();
-    
-    // We enable the original context menu with the CTRL key if
-    // then user selected to override it
-    if (event.ctrlKey && prefs_context_override) {
-        return true;
-    }
-    
-    // We also enable the original one, if it is not overriden
-    // and the user have not pressed the CTRL key
-    else if (!event.ctrlKey && !prefs_context_override) {
-        return true;
-    }
-    
-    // Otherwise (overriden or overriden+CTRL) we display our menu
-    else {
-        
-        // Rewrite contents of context menu
-        contextMenuRewrite(false);
-
-        // IE6+ is in standard compliant mode because of our !DOCTYPE
-        // [ 
http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/doctype.asp ]
-        // so we need to use the "html" tag instead of the "body" to measure 
scrolled distance.
-        // For older browsers, we need to use the body.
-        if (ie_version_major >= 6) { delement = document.body.parentElement; }
-        else { delement = document.body; }         
-
-        // Find out if menu would be outside the window
-        rightedge  = delement.clientWidth - event.clientX;
-        bottomedge = delement.clientHeight - event.clientY;
-        
-        // Shortcut for the context menu
-        cmenu = document.all['contextMenu'];
-
-        // Place menu to the right position, not to extend the window size
-        if (rightedge < cmenu.offsetWidth) {
-            cmenu.style.left = delement.scrollLeft + event.clientX - 
cmenu.offsetWidth;
-        } else {
-            cmenu.style.left = delement.scrollLeft + event.clientX;
-        }
-
-        if (bottomedge < cmenu.offsetHeight) {
-            cmenu.style.top = delement.scrollTop + event.clientY - 
cmenu.offsetHeight;
-        } else {
-            cmenu.style.top = delement.scrollTop + event.clientY;
-        }
-        
-        // Show menu
-        cmenu.style.visibility = "visible";
-        return false;
-    }
-}
-
-
-// Closes the context menu [called when the time is out]
-function contextMenuClose()
-{
-    // Hide context menu
-    document.all['contextMenu'].style.visibility = "hidden";
-}
-
-// Sets timeout for menu close [called by document onclick event]
-function contextMenuCloseTimeout()
-{
-    // Support for form focus event (form in context menu)
-    if (document.activeElement.tagName != 'INPUT') {
-        setTimeout('contextMenuClose()', 100);
-    }
-}
-
-// 
=============================================================================
-// Example clipboard copy links
-
-// Copy an example from a HTML container with id "example_" + number [called
-// when a user clicks on that copy link]
-function copyExample(number)
-{
-    // moveToElementText is only supported in IE5 and up
-    if (ie_version_major < 5) {
-        alert("Example copy is not supported in this browser");
-    } else {
-        BodyRange = document.body.createTextRange();
-        BodyRange.moveToElementText(document.all['example_' + number]);
-        BodyRange.execCommand("Copy");
-    }
-}
-
-// 
=============================================================================
-// Default skin functions
-
-// Display the page without online functions if they are disabled
-function defaultDisplayPage() {
-
-    // Do not display online functions links if they are disabled
-    if (!prefs_online) {
-        document.all['navOnline'].style.display = 'none';
-    }
-
-    // Show page container
-    document.all['pageContent'].style.display = 'block';
-}
-
-// 
=============================================================================
-// Main JS program flow
-
-// Default vars for all the pages [generated]
-this_lang = 'LANGUAGE_HERE';
-this_date = 'DATE_HERE';
-
-// Vars for online menu of this particular page
-this_page     = 
location.pathname.substring(location.pathname.lastIndexOf("/")+1);
-this_page_php = this_page.substring(0, this_page.lastIndexOf(".")) + '.php';
-if (this_page_php == '_index.php') {
-  this_page_php = 'index.php';
-}
-
-// Create the chmfile vars for this HTML page
-chmfile_fullname = "";
-chmfile_name     = "";
-chmfile_path     = "";
-chmfile_page     = "";
-getCHMFile();
-
-// Default values for preferences (no online functions, no
-// special context menu, low skin)
-prefs_online           = false;
-prefs_context_override = false;
-prefs_skin             = "Low";
-
-// Support for selection sensitive context menus
-context_selrange = null;
-
-// Find out major and minor IE version number
-var ie_version_start = navigator.appVersion.indexOf("MSIE");
-var ie_version_end = navigator.appVersion.indexOf(".", ie_version_start);
-ie_version_major = parseInt(navigator.appVersion.substring(ie_version_start+5, 
ie_version_end));
-ie_version_minor = parseInt(navigator.appMinorVersion);
-
-// Get the preferences file from outside
-document.write('<script src="' + chmfile_path + 'php_manual_prefs.js"><'+ 
'/script>');
+// $Id: _script.js,v 1.10 2005/07/30 19:26:43 techtonik Exp $
+// 
=============================================================================
+// Preference handling
+
+// Handle all the preferences, including online functions custom
+// context menus, and skins [this is called from php_manual_prefs.js]
+function prefHandler()
+{
+    // Find out what file stores the skin JS code
+    switch (prefs_skin) {
+        
+        // Internal low skin
+        case "Low":
+            skin_js_file = '_skin_lo.js';
+            break;
+        
+        // Internal high skin
+        case "High":
+            skin_js_file = '_skin_hi.js';
+            break;
+        
+        // An external skin with full path (escape it just
+        // to make sure that paths with spaces and other
+        // unusual chars will work - and turn back : to
+        // it's original form)
+        default:
+            //escaped_skin = escape(prefs_skin);
+            //escaped_skin = escaped_skin.replace(/%3A/, ':')
+            skin_js_file = "file:///" + prefs_skin;
+            break;
+    }
+
+    // Load in the skin JS code
+    document.write('<script src="' + skin_js_file + '"><'+ '/script>');
+    
+    // OnContextMenu is only supported in IE5+ so do
+    // not try to support the context menu otherwise
+    if (ie_version_major >= 5) {
+    
+        // Write out context menu for the first time into it's div
+        document.write('<div id="contextMenu">');
+        contextMenuRewrite(true);
+        document.write('</div>');
+        
+        // Assign our own event handlers to document events [5+]
+        document.oncontextmenu = contextMenu;
+        document.onclick       = contextMenuCloseTimeout;
+        window.onblur          = contextMenuCloseTimeout;
+    }
+}
+
+// 
=============================================================================
+// CHM path detection - Thanks to Pete Lees and Jeff Hall for this code
+
+// Get the path and name of the CHM file and assign values
+function getCHMFile()
+{
+    var a, X, Y, Z;
+    a = location.href.search(/:/);
+    Y = location.href.lastIndexOf("::");
+    if (a == 4) {  // file: or http:
+        Y = location.href.lastIndexOf("/");
+        chmfile_page = unescape(location.href.substring(Y+1));
+        if (location.href.substring(0,4) == "file") {
+            chmfile_path = unescape(location.href.substring(8, Y+1));
+        }
+    }
+    else {
+        if (a == 2) X = 14; // mk:@MSITStore:
+        if (a == 7) X = 7;  // ms-its:
+        chmfile_fullname = unescape(location.href.substring(X, Y));
+        Z = chmfile_fullname.lastIndexOf("\\");
+        chmfile_path = unescape(chmfile_fullname.substring(0, Z+1));
+        chmfile_name = unescape(chmfile_fullname.substring(Z+1));
+        chmfile_page = unescape(location.href.substring(Y+3));
+    }
+
+    // RAQ : Wednesday, 16 March 2005 01:56 pm : If this page has been loaded 
because
+    //       the notes were selected from the search results, then remove the 
hash.
+    if (location.hash == '#userNotes')
+        chmfile_page = chmfile_page.substring(0, 
chmfile_page.lastIndexOf('#'));
+
+    //alert(
+    // "_script\n\n" +
+    // "location\n"+
+    // "location.hash = '" + location.hash + "'\n" +
+    // "location.host = '" + location.host + "'\n" +
+    // "location.hostname = '" + location.hostname + "'\n" +
+    // "location.href = '" + location.href + "'\n" +
+    // "location.pathname = '" + location.pathname + "'\n" +
+    // "location.port = '" + location.port + "'\n" +
+    // "location.protocol = '" + location.protocol + "'\n" +
+    // "location.search = '" + location.search + "'\n\n" +
+    // "chmfile\n"+
+    // "chmfile_name = '" + chmfile_name + "'\n" +
+    // "chmfile_path = '" + chmfile_path + "'\n" +
+    // "chmfile_page = '" + chmfile_page + "'\n"
+    // );
+ 
+}
+
+// 
=============================================================================
+// Page display and online functions code
+
+// Go online to see this page in an external window [called when a user
+// clicks on the "this page oline" link]
+function thisPageOnline()
+{
+    if (!prefs_online) {
+        alert("You are in offline mode.\nThis functionality is not available");
+    } else {
+        window.open(prefs_mirror + 'manual/' + this_lang + '/' + 
this_page_php);
+    }
+}
+
+// Report bug on this manual page, using GET method URL tricks
+// [called when a user clicks on the "report bug on this page" link]
+function bugOnPage()
+{
+    if (!prefs_online) {
+        alert("You are in offline mode.\nThis functionality is not available");
+    } else {
+        window.open(
+            "http://bugs.php.net/report.php?"; +
+            escape("in[php_version]") + "=earlier&" +
+            escape("in[bug_type]") + "=Documentation%20problem&" +
+            escape("in[php_os]") + "=windows&" +
+            escape("in[sdesc]") + "=" + escape("[chm] bug on " + this_page) + 
"&" +
+            escape("in[ldesc]") + "=" + escape("I have found a bug on page " +
+                this_page + "\n[chm date: " + this_date + "]...\n")
+        );
+    }
+}
+
+// 
=============================================================================
+// Handle user notes from an external CHM file
+
+// Copy user notes text from aan invisible IFRAME to a visible
+// DIV tag's content area [this is called from displayNotes()
+// which is defined in every HTML page to fix an old IE bug]
+function _displayNotes()
+{
+    // Get the element from the "all" collection
+    element = document.all['pageNotes'];
+    
+    // If we have that element, copy notes here [4+]
+    if (element) {
+        element.innerHTML = parent.nbuff.document.body.innerHTML;
+        // RAQ : Wednesday, 16 March 2005 01:58 pm : Bring the notes into view
+        //       if the hash has been supplied
+        if (location.hash == '#userNotes')
+            {
+            setTimeout('element.scrollIntoView(true);',200);
+            }
+    } else {
+        alert("Error in user note inclusion");
+    }
+}
+
+// Load the user notes HTML file indirectly via a list
+// of available user note files [a workaround for a bug
+// affecting several IE 5.5 and IE 6 installations]
+function loadNotes()
+{
+    document.write('<script src="ms-its:' +
+    chmfile_path + 'php_manual_notes.chm::/_filelist.js"></script>');
+}
+
+// Prints out the inline frame for the notes HTML file
+function notesIframe()
+{
+    // Notes buffer for user notes to display on this page
+    document.write(
+        '<iframe name="nbuff" style="display:none" src="ms-its:' +
+        chmfile_path + 'php_manual_notes.chm::/' + chmfile_page +
+        '"></iframe>'
+    );
+}
+
+// 
=============================================================================
+// Context menu code
+
+// Rewrite context menu according to the current environment. The only 
parameter
+// indicates that this is the first display or not. [called once from
+// prefHandler() and then every time before a context menu needs to be 
displayed]
+function contextMenuRewrite(first)
+{
+    // Set selection to null value (we will check
+    // if there is a current selection now)
+    context_selrange = null;
+    
+    // Our menu layer is invisible initially
+    menuHTML = '<table width="150" cellspacing="2" cellpadding="0">';
+    
+    // Write out a table row for all menu points
+    for (i in prefs_context_names) {
+    
+        // Label and abstract implementation
+        label = prefs_context_names[i];
+        impl  = prefs_context_values[i];
+        
+        // Special display items start with an underscore
+        if (impl.substring(0,1) == "_") {
+    
+            // Find the special printout needed
+            switch (impl) {
+            
+                // Menu separator
+                case "_Separator_":
+                    menuHTML +=
+                        '<tr><td bgcolor="#000000"><img src="_pixel.gif" ' +
+                        'width="100%" height="1"></td></tr>';
+                    break;
+                    
+                // Google search box (only printed in online mode)
+                case "_GoogleSearch_":
+                    if (prefs_online) {
+                        menuHTML +=
+'<tr><td style="background-color: #f5f5f5;"><form 
action="http://www.google.com/search"; class="thin"' +
+'onsubmit="contextMenuClose()" method="GET" target="_blank">' +
+'<img src="_google.gif" align="absmiddle" alt="Google"><input type="text" 
name="q" ' +
+'style="width:120px;"></form></td></tr>';
+                    }
+                    break;
+    
+                // Alltheweb search box (only printed in online mode)
+                case "_ATWSearch_":
+                    if (prefs_online) {
+                        menuHTML +=
+'<tr><td style="background-color: #f5f5f5;"><form 
action="http://www.alltheweb.com/search"; class="thin"' +
+'onsubmit="contextMenuClose()" method="GET" target="_blank">' +
+'<img src="_atw.gif" align="absmiddle" alt="AlltheWeb"><input name="cat" 
type="hidden" value="web">' +
+'<input type="text" name="query" style="width:120px;"></form></td></tr>';
+                    }
+                    break;
+                    
+                // This should not be accessed in any valid situation, but
+                // is here to at least print out something in case of error...
+                default:
+                    menuHTML += contextLink(i, label);
+                    break;
+    
+            }
+        }
+        
+        // Special functions that may need to be printed out conditionally
+        else if (impl.substring(impl.length-2) == "()") {
+    
+            // Do something depending on function name
+            switch (impl.substring(0, impl.length-2)) {
+    
+                // Copy selection
+                case "copySelection":
+                    // For the first time there is actually no document... [4+]
+                    if (document.selection && !first) {
+                        context_selrange = document.selection.createRange();
+                        if (context_selrange.text.length > 0) {
+                            menuHTML += contextLink(i, label);
+                        }
+                    }
+                    break;
+                    
+                // Google or AlltheWeb search for selection (need to be in 
online mode)
+                case "searchSelGoogle":
+                case "searchSelATW":
+                    // For the first time there is actually no document... [4+]
+                    if (document.selection && !first) {
+                        context_selrange = document.selection.createRange();
+                        if (context_selrange.text.length > 0 && prefs_online) {
+                            menuHTML += contextLink(i, label);
+                        }
+                    }
+                    break;
+
+                // Misc functions like print() and selectAll()
+                default:
+                    menuHTML += contextLink(i, label);
+                    break;
+            }
+        }
+        
+        // Not a special display or function,
+        // so simply print out the line for this item
+        else { menuHTML += contextLink(i, label); }
+    }
+    
+    // End table
+    menuHTML += '</table>';
+    
+    // We do not have this element if this is the first run, but we
+    // need to rewrite the element content if it's not the first time
+    if (first) { document.write(menuHTML); }
+    else {
+        document.all['contextMenu'].innerHTML = menuHTML;
+    }
+}
+
+// Write out one context menu link table row [called from contextMenuRewrite()]
+function contextLink (number, label)
+{
+    return '<tr><td nowrap 
onmouseover="this.style.backgroundColor=\'#c0c0c0\';" ' +
+           'onmouseout="this.style.backgroundColor=\'#f5f5f5\';" ' +
+           'onclick="contextParse(' + number + ')" ' +
+           'style="cursor:hand; background-color: #f5f5f5;"><p 
class="context">' +
+           label + '</p></td></tr>';
+}
+
+// Parse the jump string, and do appropriate action [called when the user
+// clicks on a table row in the context menu]
+function contextParse(i)
+{
+    var control = prefs_context_values[i];
+    
+    // If the control string ends in (), then it is
+    // a function, not a file name
+    if (control.substring(control.length-2) == "()") {
+       
+        // Switch by function name
+        switch (control.substring(0, control.length-2)) {
+           
+            // Print out this page
+            case "print":
+                print();
+                break;
+                
+            // Copy the selection from the current document
+            case "copySelection":
+                if (context_selrange != null) {                
+                    context_selrange.execCommand("Copy"); // [4+]
+                }
+                break;
+            
+            // Search for the selected text on Google
+            case "searchSelGoogle":
+                sel = contextGetSelection();
+                if (sel != '') { window.open('http://www.google.com/search?q=' 
+ escape(sel));  }
+                break;
+            
+            // Search for the selected text on AlltheWeb
+            case "searchSelATW":
+                sel = contextGetSelection();
+                if (sel != '') { 
window.open('http://www.alltheweb.com/search?cat=web&query=' + escape(sel));  }
+                break;
+                
+            // Go back and forward in history
+            case "back": history.back(); break;
+            case "forward": history.forward(); break;
+
+            // Refresh page dispplay
+            case "refresh": window.location.reload(true); break;
+            
+            // Select all text in the document [4+]
+            case "selectAll": document.body.createTextRange().select(); break;
+
+            // View source of current page (not working!!)
+            // case "viewSource": window.location = "view-source:" + 
window.location.href; break;
+
+            // This should never be accessed, but here to alert if there is an 
error
+            default:
+                alert('This context menu function is not supported');
+                break;
+        }
+    }
+    
+    // If this is not a "function call", then jump
+    // to that page in the CHM or outside of it
+    else {
+        // Link with protocol
+        if (control.indexOf(":") > 0) {
+            window.open(control);
+        }
+        
+        // Link without protocol
+        else {
+            location = control;
+        }
+    }
+}
+
+// Returns the current selection [called when a context menu
+// item is clicked involving an operation on a selection]
+function contextGetSelection()
+{
+    // Test if anything is selected [4+]
+    if (context_selrange != null && context_selrange.text.length > 0) {
+        return context_selrange.text;
+    } else {
+        alert("Nothing is selected");
+        return "";
+    }
+}
+
+// Handle mousedown events in a document [called when a mouse click
+// is issued on a document]
+function contextMenu(e)
+{
+    // Close context menu, if it was open before
+    contextMenuClose();
+    
+    // We enable the original context menu with the CTRL key if
+    // then user selected to override it
+    if (event.ctrlKey && prefs_context_override) {
+        return true;
+    }
+    
+    // We also enable the original one, if it is not overriden
+    // and the user have not pressed the CTRL key
+    else if (!event.ctrlKey && !prefs_context_override) {
+        return true;
+    }
+    
+    // Otherwise (overriden or overriden+CTRL) we display our menu
+    else {
+        
+        // Rewrite contents of context menu
+        contextMenuRewrite(false);
+
+        // IE6+ is in standard compliant mode because of our !DOCTYPE
+        // [ 
http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/doctype.asp ]
+        // so we need to use the "html" tag instead of the "body" to measure 
scrolled distance.
+        // For older browsers, we need to use the body.
+        if (ie_version_major >= 6) { delement = document.body.parentElement; }
+        else { delement = document.body; }         
+
+        // Find out if menu would be outside the window
+        rightedge  = delement.clientWidth - event.clientX;
+        bottomedge = delement.clientHeight - event.clientY;
+        
+        // Shortcut for the context menu
+        cmenu = document.all['contextMenu'];
+
+        // Place menu to the right position, not to extend the window size
+        if (rightedge < cmenu.offsetWidth) {
+            cmenu.style.left = delement.scrollLeft + event.clientX - 
cmenu.offsetWidth;
+        } else {
+            cmenu.style.left = delement.scrollLeft + event.clientX;
+        }
+
+        if (bottomedge < cmenu.offsetHeight) {
+            cmenu.style.top = delement.scrollTop + event.clientY - 
cmenu.offsetHeight;
+        } else {
+            cmenu.style.top = delement.scrollTop + event.clientY;
+        }
+        
+        // Show menu
+        cmenu.style.visibility = "visible";
+        return false;
+    }
+}
+
+
+// Closes the context menu [called when the time is out]
+function contextMenuClose()
+{
+    // Hide context menu
+    document.all['contextMenu'].style.visibility = "hidden";
+}
+
+// Sets timeout for menu close [called by document onclick event]
+function contextMenuCloseTimeout()
+{
+    // Support for form focus event (form in context menu)
+    if (document.activeElement.tagName != 'INPUT') {
+        setTimeout('contextMenuClose()', 200);
+    }
+}
+
+// 
=============================================================================
+// Example clipboard copy links
+
+// Copy an example from a HTML container with id "example_" + number [called
+// when a user clicks on that copy link]
+function copyExample(number)
+{
+    // moveToElementText is only supported in IE5 and up
+    if (ie_version_major < 5) {
+        alert("Example copy is not supported in this browser");
+    } else {
+        BodyRange = document.body.createTextRange();
+        BodyRange.moveToElementText(document.all['example_' + number]);
+        BodyRange.execCommand("Copy");
+    }
+}
+
+// 
=============================================================================
+// Default skin functions
+
+// Display the page without online functions if they are disabled
+function defaultDisplayPage() {
+
+    // Do not display online functions links if they are disabled
+    if (!prefs_online) {
+        document.all['navOnline'].style.display = 'none';
+    }
+
+    // Show page container
+    document.all['pageContent'].style.display = 'block';
+}
+
+// 
=============================================================================
+// Main JS program flow
+
+// Default vars for all the pages [generated]
+this_lang = 'LANGUAGE_HERE';
+this_date = 'DATE_HERE';
+
+// Vars for online menu of this particular page
+this_page     = 
location.pathname.substring(location.pathname.lastIndexOf("/")+1);
+this_page_php = this_page.substring(0, this_page.lastIndexOf(".")) + '.php';
+if (this_page_php == '_index.php') {
+  this_page_php = 'index.php';
+}
+
+// Create the chmfile vars for this HTML page
+chmfile_fullname = "";
+chmfile_name     = "";
+chmfile_path     = "";
+chmfile_page     = "";
+getCHMFile();
+
+// Default values for preferences (no online functions, no
+// special context menu, low skin)
+prefs_online           = false;
+prefs_context_override = false;
+prefs_skin             = "Low";
+
+// Support for selection sensitive context menus
+context_selrange = null;
+
+// Find out major and minor IE version number
+var ie_version_start = navigator.appVersion.indexOf("MSIE");
+var ie_version_end = navigator.appVersion.indexOf(".", ie_version_start);
+ie_version_major = parseInt(navigator.appVersion.substring(ie_version_start+5, 
ie_version_end));
+ie_version_minor = parseInt(navigator.appMinorVersion);
+
+// Get the preferences file from outside
+document.write('<script src="' + chmfile_path + 'php_manual_prefs.js"><'+ 
'/script>');

Reply via email to