blob: 9edc2a6a508ebcb50359e3a635ad2c54059ac833 [file] [log] [blame]
registerEventHandler(window, 'load', getInstanceDelegate(this, "LoadPage"));
registerEventHandler(window, 'unload', getInstanceDelegate(this, "Window_Unload"));
registerEventHandler(window, 'beforeprint', getInstanceDelegate(this, "set_to_print"));
registerEventHandler(window, 'afterprint', getInstanceDelegate(this, "reset_form"));
var scrollPos = 0;
var inheritedMembers;
var protectedMembers;
var netcfMembersOnly;
var netXnaMembersOnly;
// Initialize array of section states
var sectionStates = new Array();
var sectionStatesInitialized = false;
//Hide sample source in select element
function HideSelect()
{
var selectTags = document.getElementsByTagName("SELECT");
var spanEles = document.getElementsByTagName("span");
var i = 10;
var m;
if (selectTags.length != null || selectTags.length >0)
{
for (n=0; n<selectTags.length; n++)
{
var lan = selectTags(n).getAttribute("id").substr("10");
//hide the first select that is on
switch (lan.toLowerCase())
{
case "visualbasic":
//alert(lan);
for (m=0; m<spanEles.length; m++)
{
if (spanEles[m].getAttribute("codeLanguage") == "VisualBasic" && spanEles[m].style.display != "none" && n <i)
i = n;
}
break;
case "visualbasicdeclaration":
for (m=0; m<spanEles.length; m++)
{
if (spanEles[m].getAttribute("codeLanguage") == "VisualBasicDeclaration" && spanEles[m].style.display != "none" && n < i)
i = n;
}
break;
case "visualbasicusage":
//alert(lan);
for (m=0; m<spanEles.length; m++)
{
if (spanEles[m].getAttribute("codeLanguage") == "VisualBasicUsage" && spanEles[m].style.display != "none" && n <i)
i = n;
}
break;
case "csharp":
for (m=0; m<spanEles.length; m++)
{
if (spanEles[m].getAttribute("codeLanguage") == "CSharp" && spanEles[m].style.display != "none" && n < i)
i = n;
}
break;
case "managedcplusplus":
for (m=0; m<spanEles.length; m++)
{
if (spanEles[m].getAttribute("codeLanguage") == "ManagedCPlusPlus" && spanEles[m].style.display != "none" && n < i)
i = n;
}
break;
case "jsharp":
for (m=0; m<spanEles.length; m++)
{
if (spanEles[m].getAttribute("codeLanguage") == "JSharp" && spanEles[m].style.display != "none" && n < i)
i = n;
}
break;
case "jscript":
for (m=0; m<spanEles.length; m++)
{
if (spanEles[m].getAttribute("codeLanguage") == "JScript" && spanEles[m].style.display != "none" && n < i)
i = n;
}
break;
case "xaml":
//alert(lan);
for (m=0; m<spanEles.length; m++)
{
if (spanEles[m].getAttribute("codeLanguage") == "XAML" && spanEles[m].style.display != "none" && n <i)
i = n;
}
break;
case "javascript":
//alert(lan);
for (m=0; m<spanEles.length; m++)
{
if (spanEles[m].getAttribute("codeLanguage") == "JavaScript" && spanEles[m].style.display != "none" && n <i)
i = n;
}
break;
case "fsharp":
for (m=0; m<spanEles.length; m++)
{
if (spanEles[m].getAttribute("codeLanguage") == "FSharp" && spanEles[m].style.display != "none" && n < i)
i = n;
}
break;
}
}
if (i != 10)
selectTags(i).style.visibility = "hidden";
}
else{ alert("Not found!");}
}
function UnHideSelect()
{
var selectTags = document.getElementsByTagName("SELECT");
var n;
//un-hide all the select sections
if (selectTags.length != null || selectTags.length >0)
{
for (n=0; n<selectTags.length; n++)
selectTags(n).style.visibility = "visible";
}
}
function InitSectionStates()
{
sectionStatesInitialized = true;
if (globals == null) globals = GetGlobals();
// SectionStates has the format:
//
// firstSectionId:state;secondSectionId:state;thirdSectionId:state; ... ;lastSectionId:state
//
// where state is either "e" (expanded) or "c" (collapsed)
// get the SectionStates from the previous topics
var states = Load("SectionStates");
var start = 0;
var end;
var section;
var state;
var allCollapsed = false;
// copy the previous section states to the sectionStates array for the current page
if (states != null && states != "")
{
allCollapsed = true;
while (start < states.length)
{
end = states.indexOf(":", start);
section = states.substring(start, end);
start = end + 1;
end = states.indexOf(";", start);
if (end == -1) end = states.length;
state = states.substring(start, end);
sectionStates[section] = state;
allCollapsed = allCollapsed && (state == "c");
start = end + 1;
}
}
// now set the state for any section ids in the current document that weren't in previous
var imgElements = document.getElementsByName("toggleSwitch");
var i;
for (i = 0; i < imgElements.length; ++i)
sectionStates[imgElements[i].id] = GetInitialSectionState(imgElements[i].id, allCollapsed);
}
function GetInitialSectionState(itemId, allCollapsed)
{
// if the global state is "allCollapsed", set all section states to collapsed
if (allCollapsed) return "c";
// generic <section> node ids begin with "sectionToggle", so the same id can refer to different sections in different topics
// we don't want to persist their state; set it to expanded
if (itemId.indexOf("sectionToggle", 0) == 0) return "e";
// the default state for new section ids is expanded
if (sectionStates[itemId] == null) return "e";
// otherwise, persist the passed in state
return sectionStates[itemId];
}
var noReentry = false;
function OnLoadImage(eventObj)
{
if (noReentry) return;
if (!sectionStatesInitialized)
InitSectionStates();
var elem;
if(document.all) elem = eventObj.srcElement;
else elem = eventObj.target;
if ((sectionStates[elem.id] == "e"))
ExpandSection(elem);
else
CollapseSection(elem);
}
/*
**********
********** Begin
**********
*/
var docSettings;
var mainSection;
function LoadPage()
{
// If not initialized, grab the DTE.Globals object
if (globals == null)
globals = GetGlobals();
// docSettings has settings for the current document,
// which include persistent and non-persistent keys for checkbox filters and expand/collapse section states
// persistKeys is an array of the checkbox ids to persist
if (docSettings == null)
{
docSettings = new Array();
persistKeys = new Array();
}
if (!sectionStatesInitialized)
InitSectionStates();
var imgElements = document.getElementsByName("toggleSwitch");
for (i = 0; i < imgElements.length; i++)
{
if ((sectionStates[imgElements[i].id] == "e"))
ExpandSection(imgElements[i]);
else
CollapseSection(imgElements[i]);
}
SetCollapseAll();
// split screen
mainSection = document.getElementById("mainSection");
if (!mainSection)
mainSection = document.getElementById("mainSectionMHS");
var screen = new SplitScreen('header', mainSection.id);
// init devlang filter checkboxes
SetupDevlangsFilter();
// init memberlist filter checkboxes for protected, inherited, etc
SetupMemberOptionsFilter();
// init memberlist platforms filter checkboxes, e.g. .Net Framework, CompactFramework, XNA, Silverlight, etc.
SetupMemberFrameworksFilter();
// removes blank target from in the self links for Microsoft Help System
RemoveTargetBlank();
// set gardien image to the bottom of header or Microsoft Help System
SetBackground('headerBottom');
// vs70.js did this to allow up/down arrow scrolling, I think
try { mainSection.setActive(); } catch(e) { }
//set the scroll position
try{mainSection.scrollTop = scrollPos;}
catch(e){}
}
function Window_Unload()
{
// for each key in persistArray, write the key/value pair to globals
for (var i = 0; i < persistKeys.length; i++)
Save(persistKeys[i],docSettings[persistKeys[i]]);
// save the expand/collapse section states
SaveSections();
}
// removes blank target from in the self links for Microsoft Help System
function RemoveTargetBlank() {
var elems = document.getElementsByTagName("a");
for (var i = 0; i < elems.length; i++) {
if (elems[i].getAttribute("target") == "_blank" &&
elems[i].getAttribute("href", 2).indexOf("#", 0) == 0)
elems[i].removeAttribute("target");
}
}
function set_to_print()
{
//breaks out of divs to print
var i;
if (window.text)document.all.text.style.height = "auto";
for (i=0; i < document.all.length; i++)
{
if (document.all[i].tagName == "body")
{
document.all[i].scroll = "yes";
}
if (document.all[i].id == "header")
{
document.all[i].style.margin = "0px 0px 0px 0px";
document.all[i].style.width = "100%";
}
if (document.all[i].id == mainSection.id)
{
document.all[i].style.overflow = "visible";
document.all[i].style.top = "5px";
document.all[i].style.width = "100%";
document.all[i].style.padding = "0px 10px 0px 30px";
}
}
}
function reset_form()
{
//returns to the div nonscrolling region after print
document.location.reload();
}
/*
**********
********** End
**********
*/
/*
**********
********** Begin Language Filtering
**********
*/
var devlangsMenu;
var devlangsDropdown;
var memberOptionsMenu;
var memberOptionsDropdown;
var memberFrameworksMenu;
var memberFrameworksDropdown;
var dropdowns = new Array();
// initialize the devlang filter dropdown menu
function SetupDevlangsFilter()
{
var divNode = document.getElementById('devlangsMenu');
if (divNode == null)
return;
var checkboxNodes = divNode.getElementsByTagName("input");
if (checkboxNodes.length == 1)
{
// only one checkbox, so we don't need a menu
// get the devlang and use it to display the correct devlang spans
// a one-checkbox setting like this is NOT persisted, nor is it set from the persisted globals
var checkboxData = checkboxNodes[0].getAttribute('data');
var dataSplits = checkboxData.split(',');
var devlang = "";
if (dataSplits.length > 1)
devlang = dataSplits[1];
styleSheetHandler(devlang);
}
else
{
// setup the dropdown menu
devlangsMenu = new CheckboxMenu("devlangsMenu", docSettings, persistKeys, globals);
devlangsDropdown = new Dropdown('devlangsDropdown', 'devlangsMenu', 'header');
dropdowns.push(devlangsDropdown);
// update the label of the dropdown menu
SetDropdownMenuLabel(devlangsMenu, devlangsDropdown);
// toggle the document's display docSettings
codeBlockHandler();
styleSheetHandler("");
}
}
// called onclick in a devlang filter checkbox
// tasks to perform at this event are:
// toggle the check state of the checkbox that was clicked
// update the user's devlang preference, based on devlang checkbox states
// update stylesheet based on user's devlang preference
// show/hide snippets/syntax based on user's devlang preference
//
function SetLanguage(checkbox)
{
// toggle the check state of the checkbox that was clicked
devlangsMenu.ToggleCheckState(checkbox.id);
// update the label of the dropdown menu
SetDropdownMenuLabel(devlangsMenu, devlangsDropdown);
// update the display of the document's items that are dependent on the devlang setting
codeBlockHandler();
styleSheetHandler("");
}
/*
**********
********** End Language Filtering
**********
*/
/*
**********
********** Begin Members Options Filtering
**********
*/
// initialize the memberlist dropdown menu for protected, inherited, etc
function SetupMemberOptionsFilter()
{
if (document.getElementById('memberOptionsMenu') != null) {
memberOptionsMenu = new CheckboxMenu("memberOptionsMenu", docSettings, persistKeys, globals);
memberOptionsDropdown = new Dropdown('memberOptionsDropdown', 'memberOptionsMenu', 'header');
dropdowns.push(memberOptionsDropdown);
// update the label of the dropdown menu
SetDropdownMenuLabel(memberOptionsMenu, memberOptionsDropdown);
// show/hide memberlist rows based on the current docSettings
memberlistHandler();
}
}
// sets the background to an element for Microsoft Help 3 system
function SetBackground(id) {
var elem = document.getElementById(id);
if (elem) {
var img = document.getElementById(id + "Image");
if (img) {
elem.setAttribute("background", img.getAttribute("src"));
}
}
}
function SetupMemberFrameworksFilter()
{
if (document.getElementById('memberFrameworksMenu') != null)
{
memberFrameworksMenu = new CheckboxMenu("memberFrameworksMenu", docSettings, persistKeys, globals);
memberFrameworksDropdown = new Dropdown('memberFrameworksDropdown', 'memberFrameworksMenu', 'header');
dropdowns.push(memberFrameworksDropdown);
// update the label of the dropdown menu
SetDropdownMenuLabel(memberFrameworksMenu, memberFrameworksDropdown);
// show/hide memberlist rows based on the current docSettings
memberlistHandler();
}
}
function SetMemberOptions(checkbox, groupName)
{
var checkboxGroup = new Array();
if (groupName == "vis")
{
if (document.getElementById('PublicCheckbox') != null)
checkboxGroup.push('PublicCheckbox');
if (document.getElementById('ProtectedCheckbox') != null)
checkboxGroup.push('ProtectedCheckbox');
}
else if (groupName == "decl")
{
if (document.getElementById('DeclaredCheckbox') != null)
checkboxGroup.push('DeclaredCheckbox');
if (document.getElementById('InheritedCheckbox') != null)
checkboxGroup.push('InheritedCheckbox');
}
// toggle the check state of the checkbox that was clicked
memberOptionsMenu.ToggleGroupCheckState(checkbox.id, checkboxGroup);
// update the label of the dropdown menu
SetDropdownMenuLabel(memberOptionsMenu, memberOptionsDropdown);
// update the display of the document's items that are dependent on the member options settings
memberlistHandler();
}
function SetMemberFrameworks(checkbox)
{
// toggle the check state of the checkbox that was clicked
memberFrameworksMenu.ToggleCheckState(checkbox.id);
// update the label of the dropdown menu
SetDropdownMenuLabel(memberFrameworksMenu, memberFrameworksDropdown);
// update the display of the document's items that are dependent on the member platforms settings
memberlistHandler();
}
function DisplayFilteredMembers()
{
var iAllMembers = document.getElementsByTagName("tr");
var i;
for(i = 0; i < iAllMembers.length; ++i)
{
if (((iAllMembers[i].notSupportedOnXna == "true") && (netXnaMembersOnly == "on")) ||
((iAllMembers[i].getAttribute("name") == "inheritedMember") && (inheritedMembers == "off")) ||
((iAllMembers[i].getAttribute("notSupportedOn") == "netcf") && (netcfMembersOnly == "on")))
iAllMembers[i].style.display = "none";
else
iAllMembers[i].style.display = "";
}
// protected members are in separate collapseable sections in vs2005, so expand or collapse the sections
ExpandCollapseProtectedMemberSections();
}
function ExpandCollapseProtectedMemberSections()
{
var imgElements = document.getElementsByName("toggleSwitch");
var i;
// Family
for(i = 0; i < imgElements.length; ++i)
{
if(imgElements[i].id.indexOf("protected", 0) == 0)
{
if ((sectionStates[imgElements[i].id] == "e" && protectedMembers == "off") ||
(sectionStates[imgElements[i].id] == "c" && protectedMembers == "on"))
{
ExpandCollapse(imgElements[i]);
}
}
}
}
/*
**********
********** End Members Options Filtering
**********
*/
/*
**********
********** Begin Expand/Collapse
**********
*/
// expand or collapse a section
function ExpandCollapse(imageItem)
{
if (sectionStates[imageItem.id] == "e")
CollapseSection(imageItem);
else
ExpandSection(imageItem);
SetCollapseAll();
}
// expand or collapse all sections
function ExpandCollapseAll(imageItem)
{
var collapseAllImage = document.getElementById("collapseAllImage");
var expandAllImage = document.getElementById("expandAllImage");
if (imageItem == null || collapseAllImage == null || expandAllImage == null) return;
noReentry = true; // Prevent entry to OnLoadImage
var imgElements = document.getElementsByName("toggleSwitch");
var i;
var collapseAll = (imageItem.src == collapseAllImage.src);
if (collapseAll)
{
imageItem.src = expandAllImage.src;
imageItem.alt = expandAllImage.alt;
for (i = 0; i < imgElements.length; ++i)
{
CollapseSection(imgElements[i]);
}
}
else
{
imageItem.src = collapseAllImage.src;
imageItem.alt = collapseAllImage.alt;
for (i = 0; i < imgElements.length; ++i)
{
ExpandSection(imgElements[i]);
}
}
SetAllSectionStates(collapseAll);
SetToggleAllLabel(collapseAll);
noReentry = false;
}
function ExpandCollapse_CheckKey(imageItem, eventObj)
{
if(eventObj.keyCode == 13)
ExpandCollapse(imageItem);
}
function ExpandCollapseAll_CheckKey(imageItem, eventObj)
{
if(eventObj.keyCode == 13)
ExpandCollapseAll(imageItem);
}
function SetAllSectionStates(collapsed)
{
for (var sectionId in sectionStates)
sectionStates[sectionId] = (collapsed) ? "c" : "e";
}
function ExpandSection(imageItem)
{
noReentry = true; // Prevent re-entry to OnLoadImage
try
{
var collapseImage = document.getElementById("collapseImage");
imageItem.src = collapseImage.src;
imageItem.alt = collapseImage.alt;
imageItem.parentNode.parentNode.nextSibling.style.display = "";
sectionStates[imageItem.id] = "e";
}
catch (e)
{
}
noReentry = false;
}
function CollapseSection(imageItem)
{
noReentry = true; // Prevent re-entry to OnLoadImage
var expandImage = document.getElementById("expandImage");
imageItem.src = expandImage.src;
imageItem.alt = expandImage.alt;
imageItem.parentNode.parentNode.nextSibling.style.display = "none";
sectionStates[imageItem.id] = "c";
noReentry = false;
}
function AllCollapsed()
{
var imgElements = document.getElementsByName("toggleSwitch");
var allCollapsed = true;
var i;
for (i = 0; i < imgElements.length; i++) allCollapsed = allCollapsed && (sectionStates[imgElements[i].id] == "c");
return allCollapsed;
}
function SetCollapseAll()
{
var imageElement = document.getElementById("toggleAllImage");
if (imageElement == null) return;
var allCollapsed = AllCollapsed();
if (allCollapsed)
{
var expandAllImage = document.getElementById("expandAllImage");
if (expandAllImage == null) return;
imageElement.src = expandAllImage.src;
imageElement.alt = expandAllImage.alt;
}
else
{
var collapseAllImage = document.getElementById("collapseAllImage");
if (collapseAllImage == null) return;
imageElement.src = collapseAllImage.src;
imageElement.alt = collapseAllImage.alt;
}
SetToggleAllLabel(allCollapsed);
}
function SetToggleAllLabel(allCollapsed)
{
var collapseLabelElement = document.getElementById("collapseAllLabel");
var expandLabelElement = document.getElementById("expandAllLabel");
if (collapseLabelElement == null || expandLabelElement == null) return;
if (allCollapsed)
{
collapseLabelElement.style.display = "none";
expandLabelElement.style.display = "inline";
}
else
{
collapseLabelElement.style.display = "inline";
expandLabelElement.style.display = "none";
}
}
function SaveSections()
{
try
{
var states = "";
for (var sectionId in sectionStates) states += sectionId + ":" + sectionStates[sectionId] + ";";
Save("SectionStates", states.substring(0, states.length - 1));
}
catch (e)
{
}
}
function OpenSection(imageItem)
{
if (sectionStates[imageItem.id] == "c") ExpandCollapse(imageItem);
}
/*
**********
********** End Expand/Collapse
**********
*/
/*
**********
********** Begin Copy Code
**********
*/
function CopyCode(key)
{
var trElements = document.getElementsByTagName("tr");
var i;
for(i = 0; i < trElements.length; ++i)
{
if(key.parentNode.parentNode.parentNode == trElements[i].parentNode)
{
if (window.clipboardData)
{
// the IE-manner
window.clipboardData.setData("Text", trElements[i].innerText);
}
else if (window.netscape)
{
// Gives unrestricted access to browser APIs using XPConnect
try
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
}
catch(e)
{
alert("Universal Connect was refused, cannot copy to " +
"clipboard. Go to about:config and set " +
"signed.applets.codebase_principal_support to true to " +
"enable clipboard support.");
return;
}
// Creates an instance of nsIClipboard
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
if (!clip) return;
// Creates an instance of nsITransferable
var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
if (!trans) return;
// register the data flavor
trans.addDataFlavor('text/unicode');
// Create object to hold the data
var str = new Object();
// Creates an instance of nsISupportsString
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
//Assigns the data to be copied
var copytext = trElements[i].textContent;
str.data = copytext;
// Add data objects to transferable
trans.setTransferData("text/unicode",str,copytext.length*2);
var clipid = Components.interfaces.nsIClipboard;
if (!clip) return false;
// Transfer the data to clipboard
clip.setData(trans,null,clipid.kGlobalClipboard);
}
}
}
}
function ChangeCopyCodeIcon(key)
{
var i;
var imageElements = document.getElementsByName("ccImage")
for(i=0; i<imageElements.length; ++i)
{
if(imageElements[i].parentNode == key)
{
if(imageElements[i].src == copyImage.src)
{
imageElements[i].src = copyHoverImage.src;
imageElements[i].alt = copyHoverImage.alt;
key.className = 'copyCodeOnHover';
}
else
{
imageElements[i].src = copyImage.src;
imageElements[i].alt = copyImage.alt;
key.className = 'copyCode';
}
}
}
}
function CopyCode_CheckKey(key, eventObj)
{
if(eventObj.keyCode == 13)
CopyCode(key);
}
/*
**********
********** End Copy Code
**********
*/
/*
**********
********** Begin Maintain Scroll Position
**********
*/
function loadAll(){
try
{
scrollPos = allHistory.getAttribute("Scroll");
}
catch(e){}
}
function saveAll(){
try
{
allHistory.setAttribute("Scroll", mainSection.scrollTop);
}
catch(e){}
}
/*
**********
********** End Maintain Scroll Position
**********
*/
/*
**********
********** Begin Send Mail
**********
*/
function formatMailToLink(anchor)
{
var release = "Release: " + anchor.doc_Release;
var topicId = "Topic ID: " + anchor.doc_TopicID;
var topicTitle = "Topic Title: " + anchor.doc_TopicTitle;
var url = "URL: " + document.URL;
var browser = "Browser: " + window.navigator.userAgent;
var crlf = "%0d%0a";
var body = release + crlf + topicId + crlf + topicTitle + crlf + url + crlf + browser + crlf + crlf + "Comments:" + crlf + crlf;
anchor.href = anchor.href + "&body=" + body;
}
/*
**********
********** End Send Mail
**********
*/
/*
**********
********** Begin Persistence
**********
*/
var globals;
// get global vars from persistent store
function GetGlobals()
{
var tmp;
// Try to get VS implementation
try { tmp = window.external.Globals; }
catch (e) { tmp = null; }
// Try to get DExplore implementation
try { if (tmp == null) tmp = window.external.GetObject("DTE", "").Globals; }
catch (e) { tmp = null; }
return tmp;
}
function Load(key)
{
try
{
return globals.VariableExists(key) ? globals.VariableValue(key) : null;
}
catch (e)
{
return null;
}
}
function Save(key, value)
{
try
{
globals.VariableValue(key) = value;
globals.VariablePersists(key) = true;
}
catch (e)
{
}
}
/*
**********
********** End Persistence
**********
*/
/* This is the part for Glossary popups */
// The method is called when the user positions the mouse cursor over a glossary term in a document.
// Current implementation assumes the existence of an associative array (g_glossary).
// The keys of the array correspond to the argument passed to this function.
var bGlossary=true;
var oDialog;
var oTimeout="";
var oTimein="";
var iTimein=.5;
var iTimeout=30;
var oLastNode;
var oNode;
var bInit=false;
var aTerms=new Array();
// Called from mouseover and when the contextmenu behavior fires oncontextopen.
function clearDef(eventObj){
if(eventObj){
var elem;
if(document.all) elem = eventObj.toElement;
else elem = eventObj.relatedTarget;
if(elem!=null || elem!="undefined"){
if(typeof(oTimein)=="number"){
window.clearTimeout(oTimein);
}
if(oDialog.dlg_status==true){
hideDef();
}
}
}
}
function hideDef(eventObj){
window.clearTimeout(oTimeout);
oTimeout="";
oDialog.style.display="none";
oDialog.dlg_status=false;
}
function showDef(oSource){
if(bInit==false){
glossaryInit();
bInit=true;
}
if(bGlossary==true){
if(typeof(arguments[0])=="object"){
oNode=oSource;
}
else{
if(document.all) oNode = eventObj.srcElement;
else oNode = eventObj.target;
}
var bStatus=oDialog.dlg_status; // BUGBUG: oDialog is null.
if((oLastNode!=oNode)||(bStatus==false)){
if((typeof(oTimein)=="number")&& eventObj){
var elem;
if(document.all) elem = eventObj.fromElement;
else elem = eventObj.relatedTarget;
if( elem != null || elem != "undefined")
window.clearTimeout(oTimein);
}
oTimein=window.setTimeout("openDialog(oNode)",iTimein*1000);
}
}
}
function glossaryInit(){
oDialog=fnCreateDialog(150,50);
}
function navigateTerm(eventObj){
var oNode;
if(document.all) oNode = eventObj.srcElement;
else oNode = eventObj.target;
var iTermID=oNode.termID;
if(oNode!=aTerms[iTermID]){
var iAbsTop=getAbsoluteTop(aTerms[iTermID]);
if(iAbsTop<document.body.scrollTop){
window.scrollTo(document.body.scrollLeft,getAbsoluteTop(aTerms[iTermID]));
}
openDialog(aTerms[iTermID]);
}
}
function disableGlossary(eventObj){
if(bGlossary==true){
if(document.all) eventObj.srcElement.innerText="Enable Automatic Glossary";
else eventObj.target.innerText="Enable Automatic Glossary";
bGlossary=false;
hideDef();
}
else{
if(document.all) eventObj.srcElement.innerText="Disable Automatic Glossary";
else eventObj.target.innerText="Disable Automatic Glossary";
bGlossary=true;
}
}
function openGlossary(){
}
function fnSetMenus(eventObj){
var oNode;
if(document.all) oNode = eventObj.srcElement;
else oNode = eventObj.target;
var oMenu=oNode.createMenu("SPAN","G_RID");
var oSubItem1=oNode.createMenuItem("Glossary",fnStub,oMenu,true);
document.body.createMenuItem("Open External Glossary",openGlossary,oSubItem1.subMenu);
document.body.createMenuItem("Disable Automatic Glossary",disableGlossary,oSubItem1.subMenu);
for(var i=0;i<aTerms.length;i++){
var oItem=document.body.createMenuItem(aTerms[i].innerText,navigateTerm,oMenu);
oItem.termID=i;
}
}
// This is a bogus stub. It should be sniffed out rather than added in.
function fnStub(){
}
function fnAttachMenus(aTips){
// This walk is only necessary for the context menu.
var aTips=document.getElementsByTagName("SPAN");
for(var i=0;i<aTips.length;i++){
var oNode=aTips[i];
if(oNode.getAttribute("G_RID")){
var sTerm=oNode.getAttribute("G_RID");
if(typeof(g_glossary[sTerm])=="string"){
// Removed client-side scripting to add events. This entire process should be singled out for IE 5 and later .. and, its only for the context menu.
aTerms[aTerms.length]=oNode;
}
}
}
if(oBD.majorVer>=5){
document.body.addBehavior(gsContextMenuPath);
document.body.onbehaviorready="fnSetMenus()";
document.body.oncontextopen="clearDef()";
}
}
// Called by showDef. The showDef function sniffs for initialization.
function openDialog(oNode,x,y){
var bStatus=oDialog.dlg_status; // BUGBUG: This code assumes that oDialog has been initialized
if(bStatus==false){
oDialog.dlg_status=true;
oDialog.style.display="block";
}
else{
if(typeof(oTimeout)=="number"){
window.clearTimeout(oTimeout);
}
}
var sTerm=oNode.getAttribute("G_RID");
var oDef=oNode.children(0);
var sDef=oDef.text;
sDef=sDef.substr(4,sDef.length-7); //Strips the html comment markers from the definition.
oDialog.innerHTML=sDef
//oDialog.innerHTML=g_glossary[sTerm];
var iScrollLeft=document.body.scrollLeft;
var iScrollTop=document.body.scrollTop;
var iOffsetLeft=getAbsoluteLeft(oNode)// - iScrollLeft;
var iOffsetWidth=oNode.offsetWidth;
var oParent=oNode.parentNode;
var iOffsetParentLeft=getAbsoluteLeft(oParent);
var iOffsetTop=getAbsoluteTop(oNode); //- iScrollTop;
var iOffsetDialogWidth=oDialog.offsetWidth;
if((iOffsetLeft + iOffsetWidth) > (iOffsetParentLeft + oParent.offsetWidth)){
iOffsetLeft=iOffsetParentLeft;
if(iOffsetLeft - iOffsetDialogWidth>0){
iOffsetTop+=oNode.offsetHeight;
}
}
var iLeft=0;
var iTop=0;
if((iOffsetLeft + iOffsetWidth - iScrollLeft + iOffsetDialogWidth) < document.body.offsetWidth ){
iLeft=iOffsetLeft + iOffsetWidth;
}
else{
if(iOffsetLeft - iOffsetDialogWidth>0){
iLeft=iOffsetLeft - iOffsetDialogWidth;
}
else{
iLeft=iOffsetParentLeft;
}
}
if(iOffsetTop - iScrollTop<oDialog.offsetHeight){
iTop=iOffsetTop + oNode.offsetHeight;
}
else{
iTop=iOffsetTop - oDialog.offsetHeight;
}
oDialog.style.top=iTop;
oDialog.style.left=iLeft;
oTimeout=window.setTimeout("hideDef()",iTimeout*1000);
}
function getAbsoluteTop(oNode){
var oCurrentNode=oNode;
var iTop=0;
while(oCurrentNode.tagName!="BODY"){
iTop+=oCurrentNode.offsetTop;
oCurrentNode=oCurrentNode.offsetParent;
}
return iTop;
}
function getAbsoluteLeft(oNode){
var oCurrentNode=oNode;
var iLeft=0;
while(oCurrentNode.tagName!="BODY"){
iLeft+=oCurrentNode.offsetLeft;
oCurrentNode=oCurrentNode.offsetParent;
}
return iLeft;
}
function fnCreateDialog(iWidth,iHeight){
document.body.insertAdjacentHTML("BeforeEnd","<DIV></DIV>");
oNewDialog=document.body.children(document.body.children.length-1);
oNewDialog.className="clsTooltip";
oNewDialog.style.width=iWidth;
oNewDialog.dlg_status=false;
return oNewDialog;
}
function sendfeedback(subject, id,alias){
var rExp = /\"/gi;
var url = location.href;
// Need to replace the double quotes with single quotes for the mailto to work.
var rExpSingleQuotes = /\'\'"/gi;
var title = document.getElementsByTagName("TITLE")[0].innerText.replace(rExp, "''");
location.href = "mailto:" + alias + "?subject=" + subject + title + "&body=Topic%20ID:%20" + id + "%0d%0aURL:%20" + url + "%0d%0a%0d%0aComments:%20";
}