// Copyright (c) 2000-2003 Quadralay Corporation. All rights reserved. // function WWHIndex_Object() { this.mbPanelInitialized = false; this.mPanelAnchor = null; this.mPanelTabTitle = WWHFrame.WWHJavaScript.mMessages.mTabsIndexLabel; this.mPanelTabIndex = -1; this.mPanelFilename = ((WWHFrame.WWHBrowser.mBrowser == 1) ? "panelfni.htm" : "panelfsi.htm"); this.mInitIndex = 0; this.mOptions = new WWHIndexOptions_Object(); this.mTopEntry = new WWHIndexEntry_Object(false, -1, null); this.mMaxLevel = 0; this.mEntryCount = 0; this.mSeeAlsoArray = new Array(); this.mSectionIndex = 0; this.mbThresholdExceeded = null; this.mSectionCache = new WWHSectionCache_Object(); this.mIterator = new WWHIndexIterator_Object(); this.mHTMLSegment = new WWHStringBuffer_Object(); this.mEventString = WWHPopup_EventString(); this.mClickedEntry = null; this.fInitHeadHTML = WWHIndex_InitHeadHTML; this.fInitBodyHTML = WWHIndex_InitBodyHTML; this.fInitLoadBookIndex = WWHIndex_InitLoadBookIndex; this.fAddSeeAlsoEntry = WWHIndex_AddSeeAlsoEntry; this.fProcessSeeAlsoEntries = WWHIndex_ProcessSeeAlsoEntries; this.fNavigationHeadHTML = WWHIndex_NavigationHeadHTML; this.fNavigationBodyHTML = WWHIndex_NavigationBodyHTML; this.fHeadHTML = WWHIndex_HeadHTML; this.fStartHTMLSegments = WWHIndex_StartHTMLSegments; this.fAdvanceHTMLSegment = WWHIndex_AdvanceHTMLSegment; this.fGetHTMLSegment = WWHIndex_GetHTMLSegment; this.fEndHTMLSegments = WWHIndex_EndHTMLSegments; this.fPanelNavigationLoaded = WWHIndex_PanelNavigationLoaded; this.fPanelViewLoaded = WWHIndex_PanelViewLoaded; this.fHoverTextTranslate = WWHIndex_HoverTextTranslate; this.fHoverTextFormat = WWHIndex_HoverTextFormat; this.fGetPopupAction = WWHIndex_GetPopupAction; this.fThresholdExceeded = WWHIndex_ThresholdExceeded; this.fGetSectionNavigation = WWHIndex_GetSectionNavigation; this.fDisplaySection = WWHIndex_DisplaySection; this.fSelectionListHeadHTML = WWHIndex_SelectionListHeadHTML; this.fSelectionListBodyHTML = WWHIndex_SelectionListBodyHTML; this.fSelectionListLoaded = WWHIndex_SelectionListLoaded; this.fDisplayLink = WWHIndex_DisplayLink; this.fGetEntry = WWHIndex_GetEntry; this.fClickedEntry = WWHIndex_ClickedEntry; this.fClickedSeeAlsoEntry = WWHIndex_ClickedSeeAlsoEntry; // Set options // WWHJavaScriptSettings_Index_DisplayOptions(this.mOptions); } function WWHIndex_InitHeadHTML() { var InitHeadHTML = ""; return InitHeadHTML; } function WWHIndex_InitBodyHTML() { var VarHTML = new WWHStringBuffer_Object(); var VarBookList = WWHFrame.WWHHelp.mBooks.mBookList; var VarParameters; // Workaround Safari reload bug // VarParameters = ""; if (WWHFrame.WWHBrowser.mBrowser == 5) // Shorthhand for Safari { VarParameters = "?" + (new Date() * 1); } // Display initializing message // VarHTML.fAppend("

" + WWHFrame.WWHJavaScript.mMessages.mInitializingMessage + "

\n"); // Load index data // this.mInitIndex = 0; for (MaxIndex = VarBookList.length, Index = 0 ; Index < MaxIndex ; Index++) { // Reference Index data // VarHTML.fAppend("\n"); // Load Index data for current book // VarHTML.fAppend("\n"); } return VarHTML.fGetBuffer(); } function WWHIndex_InitLoadBookIndex(ParamAddIndexEntriesFunc) { var VarMaxIndex; var VarIndex; // Load Index // ParamAddIndexEntriesFunc(this.mTopEntry); // Increment init book index // this.mInitIndex++; // Check if done // if (this.mInitIndex == WWHFrame.WWHHelp.mBooks.mBookList.length) { // Process see also entries to set up links between source and target // Do this before the top level hashes are cleared by the sort children call // this.fProcessSeeAlsoEntries(); // Sort top level entries // if (this.mTopEntry.mChildrenSortArray == null) { WWHIndexEntry_SortChildren(this.mTopEntry); } // Assign section indices // for (VarMaxIndex = this.mTopEntry.mChildrenSortArray.length, VarIndex = 0 ; VarIndex < VarMaxIndex ; VarIndex++) { this.mTopEntry.mChildrenSortArray[VarIndex].mSectionIndex = VarIndex; } // Panel is initialized // this.mbPanelInitialized = true; } } function WWHIndex_AddSeeAlsoEntry(ParamEntry) { this.mSeeAlsoArray[this.mSeeAlsoArray.length] = ParamEntry; } function WWHIndex_ProcessSeeAlsoEntries() { var VarMaxIndex; var VarIndex; var VarEntry; var VarSeeAlsoGroupEntry; var VarSeeAlsoEntry; // Set see also references // for (VarMaxIndex = this.mSeeAlsoArray.length, VarIndex = 0 ; VarIndex < VarMaxIndex ; VarIndex++) { // Access entry // VarEntry = this.mSeeAlsoArray[VarIndex]; // Access group entry // VarSeeAlsoGroupEntry = this.mTopEntry.mChildren[VarEntry.mSeeAlsoGroupKey + "~"]; if ((typeof(VarSeeAlsoGroupEntry) != "undefined") && (VarSeeAlsoGroupEntry != null) && (VarSeeAlsoGroupEntry.mChildren != null)) { // Access see also entry // VarSeeAlsoEntry = VarSeeAlsoGroupEntry.mChildren[VarEntry.mSeeAlsoKey + "~"]; if ((typeof(VarSeeAlsoEntry) != "undefined") && (VarSeeAlsoEntry != null)) { // Setup links between source and destination // // See if target entry is already tagged // if (typeof(VarSeeAlsoEntry.mSeeAlsoTargetName) == "undefined") { // Update target entry // VarSeeAlsoEntry.mSeeAlsoTargetName = "s" + VarIndex; } // Update source entry // VarEntry.mSeeAlsoTargetName = VarSeeAlsoEntry.mSeeAlsoTargetName; VarEntry.mSeeAlsoTargetGroupID = VarSeeAlsoGroupEntry.mGroupID; } } } // Clear see also array // this.mSeeAlsoArray = null; } function WWHIndex_NavigationHeadHTML() { var HTML = new WWHStringBuffer_Object(); // Generate style section // HTML.fAppend("\n"); return HTML.fGetBuffer(); } function WWHIndex_NavigationBodyHTML() { var HTML = new WWHStringBuffer_Object(); var VarCacheKey; // Define accessor functions to reduce file size // HTML.fAppend("\n"); // Display navigation shortcuts // if (this.fThresholdExceeded()) { VarCacheKey = this.mSectionIndex; } else { VarCacheKey = -1; } // Calculate section navigation if not already cached // if (typeof(this.mSectionCache[VarCacheKey]) == "undefined") { this.mSectionCache[VarCacheKey] = this.fGetSectionNavigation(); } // Display section selection // HTML.fAppend(this.mSectionCache[VarCacheKey]); HTML.fAppend("

 

\n"); return HTML.fGetBuffer(); } function WWHIndex_HeadHTML() { var HTML = new WWHStringBuffer_Object(); var MaxLevel; var Level; // Generate style section // HTML.fAppend("\n"); return HTML.fGetBuffer(); } function WWHIndex_StartHTMLSegments() { var HTML = new WWHStringBuffer_Object(); // Setup iterator for display // if (this.fThresholdExceeded()) { this.mIterator.fReset(this.mSectionIndex); } else { this.mIterator.fReset(-1); } // Define accessor functions to reduce file size // HTML.fAppend("\n"); return HTML.fGetBuffer(); } function WWHIndex_AdvanceHTMLSegment() { var MaxHTMLSegmentSize = WWHFrame.WWHJavaScript.mMaxHTMLSegmentSize; var mbAccessible = WWHFrame.WWHHelp.mbAccessible; var BaseEntryInfo = ""; var Entry; var EntryAnchorName; var VarAccessibilityTitle = ""; var MaxIndex; var Index; var VarParentEntry; var EntryPrefix; var EntrySuffix; var EntryInfo; // Add index in top entry to entry info if IteratorScope != TopEntry // if (this.fThresholdExceeded()) { BaseEntryInfo += this.mSectionIndex; } this.mHTMLSegment.fReset(); while ((this.mHTMLSegment.fSize() < MaxHTMLSegmentSize) && (this.mIterator.fAdvance())) { Entry = this.mIterator.mEntry; // Insert breaks between sections // if (Entry.mbGroup) { // Emit spacing, if necessary // if (this.mHTMLSegment.fSize() == 0) { // No spacing // } else { // Emit a space // this.mHTMLSegment.fAppend("

 

\n"); } } // Display the entry // // See if entry needs a named anchor target // if (typeof(Entry.mSeeAlsoTargetName) == "string") { EntryAnchorName = " name=\"sa" + Entry.mSeeAlsoTargetName + "\""; } else { EntryAnchorName = ""; } // Determine accessibility title // if (mbAccessible) { VarAccessibilityTitle = ""; for (MaxIndex = this.mIterator.mParentStack.length, Index = 0 ; Index < MaxIndex ; Index++) { VarParentEntry = this.mIterator.mParentStack[Index]; if ((VarParentEntry == this.mTopEntry) || (VarParentEntry.mbGroup)) { // Nothing to do // } else { VarAccessibilityTitle += VarParentEntry.mText + WWHFrame.WWHHelp.mMessages.mAccessibilityListSeparator + " "; } } VarAccessibilityTitle += Entry.mText; VarAccessibilityTitle = WWHStringUtilities_EscapeHTML(VarAccessibilityTitle); VarAccessibilityTitle = " title=\"" + VarAccessibilityTitle + "\""; } // Determine entry type // if (Entry.mbGroup) { EntryPrefix = ""; EntrySuffix = ""; } else if (typeof(Entry.mSeeAlsoKey) == "string") { if (typeof(Entry.mSeeAlsoTargetName) == "string") { // Use position stack for link info // EntryInfo = BaseEntryInfo; for (MaxIndex = this.mIterator.mPositionStack.length, Index = 0 ; Index < MaxIndex ; Index++) { if (EntryInfo.length > 0) { EntryInfo += ":"; } EntryInfo += this.mIterator.mPositionStack[Index]; } EntryPrefix = ""; EntrySuffix = ""; } else { EntryPrefix = ""; EntrySuffix = ""; } } else if (Entry.mBookLinks != null) { // Use position stack for link info // EntryInfo = BaseEntryInfo; for (MaxIndex = this.mIterator.mPositionStack.length, Index = 0 ; Index < MaxIndex ; Index++) { if (EntryInfo.length > 0) { EntryInfo += ":"; } EntryInfo += this.mIterator.mPositionStack[Index]; } EntryPrefix = ""; EntrySuffix = ""; } else if (EntryAnchorName.length > 0) { EntryPrefix = ""; EntrySuffix = ""; } else { EntryPrefix = ""; EntrySuffix = ""; } this.mHTMLSegment.fAppend("

" + EntryPrefix + Entry.mText + EntrySuffix + "

\n"); } return (this.mHTMLSegment.fSize() > 0); } function WWHIndex_GetHTMLSegment() { return this.mHTMLSegment.fGetBuffer(); } function WWHIndex_EndHTMLSegments() { return ""; } function WWHIndex_PanelNavigationLoaded() { // Restore focus // WWHFrame.WWHHelp.fFocus("WWHPanelNavigationFrame", "in" + this.mSectionIndex); } function WWHIndex_PanelViewLoaded() { } function WWHIndex_HoverTextTranslate(ParamEntryInfo) { var Entry; // Locate specified entry // Entry = this.fGetEntry(ParamEntryInfo); return Entry.mText; } function WWHIndex_HoverTextFormat(ParamWidth, ParamTextID, ParamText) { var FormattedText = ""; var ForegroundColor = WWHFrame.WWHJavaScript.mSettings.mHoverText.mForegroundColor; var BackgroundColor = WWHFrame.WWHJavaScript.mSettings.mHoverText.mBackgroundColor; var BorderColor = WWHFrame.WWHJavaScript.mSettings.mHoverText.mBorderColor; var ImageDir = WWHFrame.WWHHelp.mHelpURLPrefix + "wwhelp/wwhimpl/common/images"; var ReqSpacer1w2h = "\"\""; var ReqSpacer2w1h = "\"\""; var ReqSpacer1w7h = "\"\""; var ReqSpacer5w1h = "\"\""; var Spacer1w2h = ReqSpacer1w2h; var Spacer2w1h = ReqSpacer2w1h; var Spacer1w7h = ReqSpacer1w7h; var Spacer5w1h = ReqSpacer5w1h; var StyleAtttribute; // Set style attribute to insure small image height // StyleAttribute = " style=\"font-size: 1px; line-height: 1px;\""; FormattedText += ""; FormattedText += " "; FormattedText += " " + Spacer1w2h + ""; FormattedText += " "; FormattedText += " "; FormattedText += " " + Spacer2w1h + ""; FormattedText += " " + Spacer1w7h + ""; FormattedText += " " + Spacer2w1h + ""; FormattedText += " "; FormattedText += " "; FormattedText += " "; FormattedText += " "; FormattedText += " "; FormattedText += " "; FormattedText += " "; FormattedText += " "; FormattedText += " "; FormattedText += " " + Spacer2w1h + ""; FormattedText += " " + Spacer1w7h + ""; FormattedText += " " + Spacer2w1h + ""; FormattedText += " "; FormattedText += " "; FormattedText += " " + Spacer1w2h + ""; FormattedText += " "; FormattedText += "
" + ReqSpacer2w1h + "" + ReqSpacer5w1h + "" + ParamText + "" + ReqSpacer5w1h + "" + ReqSpacer2w1h + "
"; return FormattedText; } function WWHIndex_GetPopupAction(ParamEntryInfo) { var PopupAction = ""; if (WWHFrame.WWHJavaScript.mSettings.mHoverText.mbEnabled) { PopupAction += " onmouseover=\"fS('" + ParamEntryInfo + "', " + this.mEventString + ");\""; PopupAction += " onmouseout=\"fH();\""; } return PopupAction; } function WWHIndex_ThresholdExceeded() { if (this.mbThresholdExceeded == null) { if ((WWHFrame.WWHHelp.mbAccessible) || ((this.mOptions.mThreshold > 0) && (this.mEntryCount > this.mOptions.mThreshold))) { this.mbThresholdExceeded = true; } else { this.mbThresholdExceeded = false; } } return this.mbThresholdExceeded; } function WWHIndex_GetSectionNavigation() { var SectionNavHTML = ""; var SectionArray; var MaxIndex; var Index; SectionNavHTML += "

"; // Calculate section selection // SectionArray = this.mTopEntry.mChildrenSortArray; for (MaxIndex = SectionArray.length, Index = 0 ; Index < MaxIndex ; Index++) { // Add spacers if necessary // if (Index > 0) { SectionNavHTML += this.mOptions.mSeperator; } // Display section with or without link as necessary // if ((this.fThresholdExceeded()) && (Index == this.mSectionIndex)) // Currently being displayed { SectionNavHTML += "" + SectionArray[Index].mText + ""; } else if ((SectionArray[Index].mChildren == null) && // Always display group (SectionArray[Index].mChildrenSortArray == null)) // SortArray null before sort, hash null after { SectionNavHTML += SectionArray[Index].mText; } else { SectionNavHTML += "" + SectionArray[Index].mText + ""; } } SectionNavHTML += "

"; return SectionNavHTML; } function WWHIndex_DisplaySection(ParamSectionIndex) { // Set section // this.mSectionIndex = ParamSectionIndex; if (this.fThresholdExceeded()) { // Reload panel // WWHFrame.WWHJavaScript.mPanels.fClearScrollPosition(); WWHFrame.WWHJavaScript.mPanels.fReloadPanel(); } else { // Focus current section // WWHFrame.WWHHelp.fFocus("WWHPanelNavigationFrame", "in" + this.mSectionIndex); // Whole index already visible, just jump to the specified entry // this.mPanelAnchor = "section" + this.mSectionIndex; // Workaround for IE/FireFox problems // if (WWHFrame.WWHBrowser.mbSupportsFocus) { WWHFrame.WWHBrowser.mbSupportsFocus = false; WWHFrame.WWHJavaScript.mPanels.fJumpToAnchor(); WWHFrame.WWHBrowser.mbSupportsFocus = true; } WWHFrame.WWHJavaScript.mPanels.fJumpToAnchor(); } } function WWHIndex_SelectionListHeadHTML() { var HTML = new WWHStringBuffer_Object(); var Level; HTML.fAppend("\n"); return HTML.fGetBuffer(); } function WWHIndex_SelectionListBodyHTML() { var HTML = new WWHStringBuffer_Object(); var BookList = WWHFrame.WWHHelp.mBooks.mBookList; var EntryClass; var MaxBookIndex; var BookIndex; var BookListEntry; var LinkArray; var MaxLinkIndex; var LinkIndex; var Parts; var PrevLinkFileIndex; var LinkFileIndex; var LinkAnchor; var VarAccessibilityTitle; var NumberedLinkCounter; var DocumentURL; if (this.mClickedEntry != null) { // Display multiple entry message // HTML.fAppend("

"); HTML.fAppend(WWHFrame.WWHJavaScript.mMessages.mIndexSelectMessage1 + " "); HTML.fAppend(WWHFrame.WWHJavaScript.mMessages.mIndexSelectMessage2); HTML.fAppend("

\n"); // Display text of entry clicked // HTML.fAppend("

" + this.mClickedEntry.mText + "

\n"); // Determine level at which to display entries // if (BookList.length == 1) { EntryClass = "l1"; } else { EntryClass = "l2"; } // Display each book's link for this entry // for (MaxBookIndex = BookList.length, BookIndex = 0 ; BookIndex < MaxBookIndex ; BookIndex++) { if (typeof(this.mClickedEntry.mBookLinks[BookIndex]) != "undefined") { BookListEntry = BookList[BookIndex]; // Write the book's title, if necessary // if (BookList.length > 1) { HTML.fAppend("

 

\n"); HTML.fAppend("

" + BookListEntry.mTitle + ""); } // Sort link array to group files with anchors // // Use for loop to copy entries to workaround bug/problem in IE 5.0 on Windows // LinkArray = new Array(); for (MaxLinkIndex = this.mClickedEntry.mBookLinks[BookIndex].length, LinkIndex = 0 ; LinkIndex < MaxLinkIndex ; LinkIndex++) { LinkArray[LinkIndex] = this.mClickedEntry.mBookLinks[BookIndex][LinkIndex]; } LinkArray = LinkArray.sort(); // Now display file links // PrevLinkFileIndex = null; for (MaxLinkIndex = LinkArray.length, LinkIndex = 0 ; LinkIndex < MaxLinkIndex ; LinkIndex++) { // Determine link file index and anchor // Parts = LinkArray[LinkIndex].split("#"); LinkFileIndex = parseInt(Parts[0]); LinkAnchor = null; if (Parts.length > 1) { if (Parts[1].length > 0) { LinkAnchor = Parts[1]; } } // Determine if all links for a single document have been processed // if ((PrevLinkFileIndex == null) || (LinkFileIndex != PrevLinkFileIndex)) { NumberedLinkCounter = 1; // Determine title for accessibility // if (WWHFrame.WWHHelp.mbAccessible) { VarAccessibilityTitle = WWHStringUtilities_FormatMessage(WWHFrame.WWHJavaScript.mMessages.mAccessibilityIndexEntry, BookListEntry.mFiles.fFileIndexToTitle(LinkFileIndex), BookListEntry.mTitle); VarAccessibilityTitle = WWHStringUtilities_EscapeHTML(VarAccessibilityTitle); VarAccessibilityTitle = " title=\"" + VarAccessibilityTitle + "\""; } HTML.fAppend("

\n"); // Build up absolute link URL // DocumentURL = WWHFrame.WWHHelp.fGetBookIndexFileIndexURL(BookIndex, LinkFileIndex, LinkAnchor); DocumentURL = WWHStringUtilities_EscapeURLForJavaScriptAnchor(DocumentURL); // Handle "double-indirection" issue // DocumentURL = WWHStringUtilities_SearchReplace(DocumentURL, "%", "%25"); HTML.fAppend("

"); HTML.fAppend(""); HTML.fAppend(BookListEntry.mFiles.fFileIndexToTitle(LinkFileIndex) + ""); } else { NumberedLinkCounter += 1; // Determine title for accessibility // if (WWHFrame.WWHHelp.mbAccessible) { VarAccessibilityTitle = WWHStringUtilities_FormatMessage(WWHFrame.WWHJavaScript.mMessages.mAccessibilityIndexSecondEntry, BookListEntry.mFiles.fFileIndexToTitle(LinkFileIndex), BookListEntry.mTitle, NumberedLinkCounter); VarAccessibilityTitle = WWHStringUtilities_EscapeHTML(VarAccessibilityTitle); VarAccessibilityTitle = " title=\"" + VarAccessibilityTitle + "\""; } // Build up absolute link URL // DocumentURL = WWHFrame.WWHHelp.fGetBookIndexFileIndexURL(BookIndex, LinkFileIndex, LinkAnchor); DocumentURL = WWHStringUtilities_EscapeURLForJavaScriptAnchor(DocumentURL); // Handle "double-indirection" issue // DocumentURL = WWHStringUtilities_SearchReplace(DocumentURL, "%", "%25"); HTML.fAppend(", "); HTML.fAppend(""); HTML.fAppend(NumberedLinkCounter + ""); } PrevLinkFileIndex = LinkFileIndex; } HTML.fAppend("

\n"); } } } return HTML.fGetBuffer(); } function WWHIndex_SelectionListLoaded() { // Move focus to document selection list // WWHFrame.WWHHelp.fFocus("WWHDocumentFrame", "indexselect"); } function WWHIndex_DisplayLink(ParamURL) { WWHFrame.WWHHelp.fSetDocumentHREF(ParamURL, false); } function WWHIndex_GetEntry(ParamEntryInfo) { var Entry = null; var EntryInfoParts; var MaxIndex; var Index; // Locate specified entry // Entry = this.mTopEntry; EntryInfoParts = ParamEntryInfo.split(":"); for (MaxIndex = EntryInfoParts.length, Index = 0 ; Index < MaxIndex ; Index++) { Entry = Entry.mChildrenSortArray[EntryInfoParts[Index]]; } return Entry; } function WWHIndex_ClickedEntry(ParamEntryInfo) { var Entry; var BookCount; var BookIndex; var BookListEntry; var Parts; var LinkFileIndex; var LinkAnchor; var DocumentURL; // Locate specified entry // Entry = this.fGetEntry(ParamEntryInfo); // Display target document or selection list // BookCount = 0; for (BookIndex in Entry.mBookLinks) { BookCount++; } // See if this is a single entry // if ((BookCount == 1) && (Entry.mBookLinks[BookIndex].length == 1)) { BookListEntry = WWHFrame.WWHHelp.mBooks.mBookList[BookIndex]; // Determine link file index and anchor // Parts = Entry.mBookLinks[BookIndex][0].split("#"); LinkFileIndex = parseInt(Parts[0]); LinkAnchor = null; if (Parts.length > 1) { if (Parts[1].length > 0) { LinkAnchor = Parts[1]; } } // Set Document // DocumentURL = WWHFrame.WWHHelp.fGetBookIndexFileIndexURL(BookIndex, LinkFileIndex, LinkAnchor); } else { // Display selection list // this.mClickedEntry = Entry; DocumentURL = WWHFrame.WWHHelp.mBaseURL + "wwhelp/wwhimpl/js/html/indexsel.htm"; } this.fDisplayLink(DocumentURL); } function WWHIndex_ClickedSeeAlsoEntry(ParamEntryInfo) { var Entry; var TargetSectionIndex; var MaxIndex; var Index; // Locate specified entry // Entry = this.fGetEntry(ParamEntryInfo); // Confirm entry has target information // if ((typeof(Entry.mSeeAlsoTargetName) == "string") && (typeof(Entry.mSeeAlsoTargetGroupID) == "number")) { // Determine if we need to jump to another page // TargetSectionIndex = -1; for (MaxIndex = this.mTopEntry.mChildrenSortArray.length, Index = 0 ; Index < MaxIndex ; Index++) { if (this.mTopEntry.mChildrenSortArray[Index].mGroupID == Entry.mSeeAlsoTargetGroupID) { TargetSectionIndex = Index; // Exit for loop // Index = MaxIndex; } } // Confirm the target entry was located // if (TargetSectionIndex != -1) { // Set target entry // this.mPanelAnchor = "sa" + Entry.mSeeAlsoTargetName; // Change navigation bar? // if ((this.fThresholdExceeded()) && (TargetSectionIndex != this.mSectionIndex)) { // Need to switch to proper section // this.fDisplaySection(TargetSectionIndex); } else { // Focus current section // WWHFrame.WWHHelp.fFocus("WWHPanelNavigationFrame", "in" + this.mSectionIndex); // We're on the right page, so just jump to the correct entry // WWHFrame.WWHJavaScript.mPanels.fJumpToAnchor(); } } } } function WWHIndexIterator_Object() { this.mIteratorScope = null; this.mEntry = null; this.mParentStack = new Array(); this.mPositionStack = new Array(); this.fReset = WWHIndexIterator_Reset; this.fAdvance = WWHIndexIterator_Advance; } function WWHIndexIterator_Reset(ParamIndex) { if (ParamIndex == -1) // Iterate buckets as well! { this.mIteratorScope = WWHFrame.WWHIndex.mTopEntry; } else if ((WWHFrame.WWHIndex.mTopEntry.mChildrenSortArray != null) && (WWHFrame.WWHIndex.mTopEntry.mChildrenSortArray.length > 0)) { this.mIteratorScope = WWHFrame.WWHIndex.mTopEntry.mChildrenSortArray[ParamIndex]; } else { this.mIteratorScope = null; } this.mEntry = this.mIteratorScope; this.mParentStack.length = 0; this.mPositionStack.length = 0; } function WWHIndexIterator_Advance() { var ParentEntry; var StackTop; // Advance to the next visible entry // if (this.mEntry != null) { // Check for children // if (this.mEntry.mChildren != null) { // Determine sort order if necessary // if (this.mEntry.mChildrenSortArray == null) { WWHIndexEntry_SortChildren(this.mEntry); } } // Process children // if ((this.mEntry.mChildrenSortArray != null) && (this.mEntry.mChildrenSortArray.length > 0)) { this.mParentStack[this.mParentStack.length] = this.mEntry; this.mPositionStack[this.mPositionStack.length] = 0; this.mEntry = this.mEntry.mChildrenSortArray[0]; } // If we've reached the iterator scope, we're done // else if (this.mEntry == this.mIteratorScope) { this.mEntry = null; } else { ParentEntry = this.mParentStack[this.mParentStack.length - 1]; this.mEntry = null; // Find next child of parent entry // while (ParentEntry != null) { // Increment position // StackTop = this.mPositionStack.length - 1; this.mPositionStack[StackTop]++; // Confirm this is a valid entry // if (this.mPositionStack[StackTop] < ParentEntry.mChildrenSortArray.length) { // Return the parent's next child // this.mEntry = ParentEntry.mChildrenSortArray[this.mPositionStack[StackTop]]; // Signal break from loop // ParentEntry = null; } else { // Last child of parent, try up a level // if (ParentEntry == this.mIteratorScope) { ParentEntry = null; } else { this.mParentStack.length--; this.mPositionStack.length--; ParentEntry = this.mParentStack[this.mParentStack.length - 1]; } } } } } return (this.mEntry != null); } function WWHIndexEntry_Object(bParamGroupHeading, ParamBookIndex, ParamText, ParamLinks, ParamSeeAlsoKey, ParamSeeAlsoGroupKey) { if (bParamGroupHeading) { this.mbGroup = true; this.mGroupID = WWHFrame.WWHIndex.mEntryCount; } else { this.mbGroup = false; } this.mText = ParamText; this.mBookLinks = null; this.mChildren = null; this.mChildrenSortArray = null; if (typeof(ParamSeeAlsoKey) == "string") { this.mSeeAlsoKey = ParamSeeAlsoKey; } if (typeof(ParamSeeAlsoGroupKey) == "string") { this.mSeeAlsoGroupKey = ParamSeeAlsoGroupKey; } this.fAddEntry = WWHIndexEntry_AddEntry; this.fA = WWHIndexEntry_AddEntry; // Bump entry count if not the top level node // if (ParamBookIndex != -1) { WWHFrame.WWHIndex.mEntryCount++; } // Add links // if ((typeof(ParamLinks) != "undefined") && (ParamLinks != null)) { this.mBookLinks = new WWHIndexEntryBookHash_Object(); this.mBookLinks[ParamBookIndex] = ParamLinks; } } function WWHIndexEntry_GetKey(ParamGroupTag, ParamText, ParamSort) { var VarKey = null; if ((typeof(ParamText) != "undefined") && (ParamText != null) && (ParamText.length > 0)) { if ((typeof(ParamGroupTag) != "undefined") && (ParamGroupTag != null) && (ParamGroupTag.length > 0)) { if (VarKey == null) { VarKey = ""; } VarKey += ParamGroupTag; } if ((typeof(ParamSort) != "undefined") && (ParamSort != null) && (ParamSort.length > 0) && (ParamSort != ParamText)) { if (VarKey == null) { VarKey = ""; } VarKey += ":" + ParamSort; } if (VarKey == null) { VarKey = ""; } VarKey += ":" + ParamText; } return VarKey; } function WWHIndexEntry_AddEntry(ParamText, ParamLinks, ParamSort, ParamGroupTag, ParamSeeAlso, ParamSeeAlsoSort, ParamSeeAlsoGroup, ParamSeeAlsoGroupSort, ParamSeeAlsoGroupTag) { var bVarGroupHeading; var Links; var VarKey; var VarSeeAlsoKey; var VarSeeAlsoGroupKey; var BookIndex; var ChildEntry; var BookLinks; var MaxIndex; var Index; // See if this is a group heading // if ((typeof(ParamGroupTag) != "undefined") && (ParamGroupTag != null) && (ParamGroupTag.length > 0)) { bVarGroupHeading = true; } // Set links if entries exist // if ((typeof(ParamLinks) != "undefined") && (ParamLinks != null) && (ParamLinks.length > 0)) { Links = ParamLinks; } else { Links = null; } // See if this object has any children // if (this.mChildren == null) { this.mChildren = new WWHIndexEntryHash_Object(); } // Define keys // VarKey = WWHIndexEntry_GetKey(ParamGroupTag, ParamText, ParamSort); VarSeeAlsoKey = WWHIndexEntry_GetKey(null, ParamSeeAlso, ParamSeeAlsoSort); VarSeeAlsoGroupKey = WWHIndexEntry_GetKey(ParamSeeAlsoGroupTag, ParamSeeAlsoGroup, ParamSeeAlsoGroupSort); // Access entry, creating it if it doesn't exist // BookIndex = WWHFrame.WWHIndex.mInitIndex; ChildEntry = this.mChildren[VarKey + "~"]; if (typeof(ChildEntry) == "undefined") { ChildEntry = new WWHIndexEntry_Object(bVarGroupHeading, BookIndex, ParamText, Links, VarSeeAlsoKey, VarSeeAlsoGroupKey); this.mChildren[VarKey + "~"] = ChildEntry; // Add entry to see also collection if it is a see also entry // if (typeof(VarSeeAlsoKey) == "string") { WWHFrame.WWHIndex.fAddSeeAlsoEntry(ChildEntry); } } else // Child entry exists, update with new information { // Add book links // if (Links != null) { if (ChildEntry.mBookLinks == null) { ChildEntry.mBookLinks = new WWHIndexEntryBookHash_Object(); } if (typeof(ChildEntry.mBookLinks[BookIndex]) == "undefined") { ChildEntry.mBookLinks[BookIndex] = Links; } else { // Append new links // BookLinks = ChildEntry.mBookLinks[BookIndex]; for (MaxIndex = Links.length, Index = 0 ; Index < MaxIndex ; Index++) { BookLinks[BookLinks.length] = Links[Index]; } } } } return ChildEntry; } function WWHIndexEntry_SortChildren(ParamEntry) { var UnsortedArray; var KeyHash = new Object(); var SortedArray; var VarKey; var VarKeyTrimmed; var VarKeyUpperCase; var VarSortKey; var MaxIndex; var Index; // Accumulate hash keys // UnsortedArray = new Array(); for (VarKey in ParamEntry.mChildren) { VarKeyTrimmed = VarKey.substring(1, VarKey.length - 1); VarKeyUpperCase = VarKeyTrimmed.toUpperCase(); VarSortKey = VarKeyUpperCase + ":" + VarKey; UnsortedArray[UnsortedArray.length] = VarSortKey; KeyHash[VarSortKey] = VarKey; } // Insure array exists // if (UnsortedArray.length > 0) { // Sort array // SortedArray = UnsortedArray.sort(); // Replace sort keys with entries // for (MaxIndex = SortedArray.length, Index = 0 ; Index < MaxIndex ; Index++) { VarSortKey = SortedArray[Index]; if ((typeof(KeyHash[VarSortKey]) != "undefined") && (KeyHash[VarSortKey] != null)) { VarKey = KeyHash[VarSortKey]; SortedArray[Index] = ParamEntry.mChildren[VarKey]; } } } else { // No children, possible error occurred? // SortedArray = new Array(); } // Set children sort array // Clear hash table as it is no longer needed // ParamEntry.mChildrenSortArray = SortedArray; ParamEntry.mChildren = null; } function WWHIndexEntryHash_Object() { } function WWHIndexEntryBookHash_Object() { } function WWHSectionCache_Object() { } function WWHIndexOptions_Object() { this.mThreshold = 0; this.fSetThreshold = WWHIndexOptions_SetThreshold; this.fSetSeperator = WWHIndexOptions_SetSeperator; } function WWHIndexOptions_SetThreshold(ParamThreshold) { this.mThreshold = ParamThreshold; } function WWHIndexOptions_SetSeperator(ParamSeperator) { this.mSeperator = ParamSeperator; }