// CSS helper functionsCSS = {    // Adds a class to an element.    AddClass: function (e, c) {        if (!e.className.match(new RegExp("\\b" + c + "\\b", "i")))            e.className += (e.className ? " " : "") + c;    },    // Removes a class from an element.    RemoveClass: function (e, c) {        e.className = e.className.replace(new RegExp(" \\b" + c + "\\b|\\b" + c + "\\b ?", "gi"), "");    }};// Functions for handling tabs.Tabs = {    // Changes to the tab with the specified ID.    GoTo: function (contentId, skipReplace) {        // This variable will be true if a tab for the specified        // content ID was found.        var foundTab = false;        // Get the TOC element.        var toc = document.getElementById("toc");        if (toc) {            var lis = toc.getElementsByTagName("li");            for (var j = 0; j < lis.length; j++) {                var li = lis[j];                // Give the current tab link the class "current" and                // remove the class from any other TOC links.                var anchors = li.getElementsByTagName("a");                for (var k = 0; k < anchors.length; k++) {                    if (anchors[k].hash == "#" + contentId) {                        CSS.AddClass(li, "current");                        foundTab = true;                        break;                    } else {                        CSS.RemoveClass(li, "current");                    }                }            }        }        // Show the content with the specified ID.        var divsToHide = [];        var divs = document.getElementsByTagName("div");        for (var i = 0; i < divs.length; i++) {            var div = divs[i];            if (div.className.match(/\bcontent\b/i)) {                if (div.id == "_" + contentId)                    div.style.display = "block";                else                    divsToHide.push(div);            }        }        // Hide the other content boxes.        for (var i = 0; i < divsToHide.length; i++)            divsToHide[i].style.display = "none";        // Change the address bar.        if (!skipReplace) window.location.replace("#" + contentId);    },    OnClickHandler: function (e) {        // Stop the event (to stop it from scrolling or        // making an entry in the history).        if (!e) e = window.event;        if (e.preventDefault) e.preventDefault(); else e.returnValue = false;        // Get the name of the anchor of the link that was clicked.        Tabs.GoTo(this.hash.substring(1));    },    Init: function () {        if (!document.getElementsByTagName) return;        // Attach an onclick event to all the anchor links on the page.        var tocs = document.getElementById("toc");        var anchors = tocs.getElementsByTagName("a");        for (var i = 0; i < anchors.length; i++) {            var a = anchors[i];            if(a.hash)                a.onclick = Tabs.OnClickHandler;        }        var contentId;        if (window.location.hash) contentId = window.location.hash.substring(1);if( contentId == undefined ) contentId=anchors[0].hash.replace("#","");        var divs = document.getElementsByTagName("div");        for (var i = 0; i < divs.length; i++) {            var div = divs[i];            if (div.className.match(/\bcontent\b/i)) {                if (!contentId) contentId = div.id;                div.id = "_" + div.id;            }        }        if (contentId) Tabs.GoTo(contentId, true);    }};// Hook up the OnLoad event to the tab initialization function.window.onload = Tabs.Init;// Hide the content while waiting for the onload event to trigger.var contentId = window.location.hash || "#Introduction";//var contentId = window.location.hash || "8mb";if (document.createStyleSheet) {    var style = document.createStyleSheet();    style.addRule("div.content", "display: none;");    style.addRule("div" + contentId, "display: block;");} else {    var head = document.getElementsByTagName("head")[0];    if (head) {        var style = document.createElement("style");        style.setAttribute("type", "text/css");        style.appendChild(document.createTextNode("div.content { display: none; }"));		style.appendChild(document.createTextNode("div" + contentId + " { display: block; }"));        head.appendChild(style);    }}