home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Picture It! 7.0 / PI2_CD1.ISO / pip / pi7 / 1033 / 256.chm / help_script_pi7.js < prev    next >
Encoding:
JavaScript  |  2002-07-09  |  16.8 KB  |  694 lines

  1. /**********************************************************************
  2.     Javascript functions for HTML Help for Picture It! Publishing
  3.     Author: Chris Sanders (csand)
  4.     Microsoft Corporation, All Rights Reserved, 1999-2002
  5.  
  6.     Note: These functions are designed for PROC topics which have
  7.     subtopic_choice radio buttons.
  8.     
  9.     Note: These functions are for IE4+ browsers.
  10.     
  11.     Note: Cannot use less-than or greater-than symbols
  12.     in the javascript or the MSXML2.5 parser will screw up.
  13.     (this may not be true for MSXML3.0, but I have not checked)
  14. **********************************************************************/
  15.  
  16. // Global variables
  17. var g_strSubtopicChoiceContext = ""
  18. var g_strCurrentContext = ""
  19. var g_arrContextElements = new Array('INSTRUCTIONS','MORE_INFO','LINK','MOVIE_LINK') // the classNames of the elements that may have context
  20. var g_strCurrentIdeaNum = ""
  21. var g_arrIdeaArrow = new Array('arrowrightblue.gif','arrowdownred.gif')
  22.  
  23.  
  24. //************************************************************
  25. //  Functions for PROC pages
  26. //************************************************************
  27.  
  28. function onPageLoad( strTemplate )
  29. {
  30.     if (strTemplate == 'PROC')
  31.     {
  32.         hideContextContent() //start with all context content is hidden
  33.  
  34.         if ( existsSubtopicChoiceForm() )
  35.         {
  36.             resetSubtopicChoiceForm()
  37.         }
  38.         
  39.         showContextContent() //always show content appropriate for the context
  40.     }
  41. }
  42. function setCurrentContext()
  43. {
  44.     g_strCurrentContext = getSubtopicChoiceContext()
  45. }
  46. function getCurrentContext()
  47. {
  48.     setCurrentContext()
  49.     return g_strCurrentContext
  50. }
  51.  
  52. function setSubtopicChoiceContext( strContext )
  53. {
  54.     g_strSubtopicChoiceContext = strContext
  55. }
  56. function getSubtopicChoiceContext()
  57. {
  58.     return g_strSubtopicChoiceContext
  59. }
  60. function existsSubtopicChoiceForm()
  61. {
  62.     return document.SubtopicChoiceForm
  63. }
  64. function hasTheContext( strElementContext, strCurrentContext )
  65. {
  66.     // Does this element have the current context
  67.  
  68.     var arrElementContext = strElementContext.split(",")
  69.     
  70.     for (var i = 0; i < arrElementContext.length; i++)
  71.     {
  72.         if ( arrElementContext[i] == strCurrentContext )
  73.         {
  74.             return true
  75.         }
  76.     }
  77.     return false
  78. }
  79. function getElementContext( oElement )
  80. {
  81.     //The context is contained in the id attribute
  82.     var strContext = ( oElement.id ) ? oElement.id : ""
  83.     return strContext
  84. }
  85. function clickedSubtopicChoice( strContext )
  86. {
  87.     setSubtopicChoiceContext( strContext ) // remember the context
  88.     hideContextContent()  // first, hide all context content
  89.     showContextContent()  // then, show all context content dependent on the new context
  90. }
  91. function resetSubtopicChoiceForm()
  92. {
  93.     //set the subtopic_choice context to nothing
  94.      setSubtopicChoiceContext( "" )
  95.      
  96.      if ( existsSubtopicChoiceForm() )
  97.      {
  98.          //uncheck all subtopic_choice radio elements
  99.          var oRadioGroup = document.SubtopicChoiceForm.SUBTOPIC_CHOICE
  100.          for (var i = 0; i < oRadioGroup.length; i++)
  101.          {
  102.              oRadioGroup[i].checked = false
  103.          }
  104.      }
  105. }
  106.  
  107. function isContextElement(oElement)
  108. {
  109.     // Is oElement an element that has context
  110.     for (var i=0; i < g_arrContextElements.length; i++)
  111.     {
  112.         if ( oElement.className == g_arrContextElements[i] )
  113.         {
  114.             return true
  115.         }
  116.     }
  117.     return false
  118. }
  119. function showContextContent()
  120. {
  121.     // Display all elements appropriate for the context
  122.     var oElement
  123.     var oLinksElement
  124.     var oMovieLinksElement
  125.     
  126.     //First, make sure that the current context is up-to-date
  127.     setCurrentContext()
  128.  
  129.     //Loop through all of the elements on the page
  130.     for (var i = 0; i != document.all.length; i++)
  131.     {
  132.         oElement = document.all[i]
  133.         
  134.         if (oElement.className == 'LINKS')
  135.             oLinksElement = oElement
  136.         else if (oElement.className == 'MOVIE_LINKS')
  137.             oMovieLinksElement = oElement
  138.         
  139.         if (isContextElement(oElement))
  140.         {
  141.             if (hasTheContext(getElementContext(oElement),g_strCurrentContext))
  142.             {
  143.                 if (oElement.className == 'LINK')
  144.                 {
  145.                     oLinksElement.style.display = '' // display the related LINKS container
  146.                 }
  147.                 else if (oElement.className == 'MOVIE_LINK')
  148.                 {
  149.                     oMovieLinksElement.style.display = '' // display the related MOVIE_LINKS container
  150.                 }
  151.                 oElement.style.display = '' // display the element
  152.             }
  153.             else
  154.             {
  155.                 oElement.style.display = 'none' // hide the element
  156.             }
  157.         }
  158.     }
  159. }
  160. function hideContextContent()
  161. {
  162.     // Hide all elements that have context
  163.     var oElement
  164.     
  165.     //First, make sure that the current context is up-to-date
  166.     setCurrentContext()
  167.     
  168.     //Loop through all of the elements on the page
  169.     for (var i = 0; i != document.all.length; i++)
  170.     {
  171.         oElement = document.all[i]
  172.         
  173.         if ( (isContextElement(oElement)) || (oElement.className == 'LINKS') || (oElement.className == 'MOVIE_LINKS') )
  174.         {
  175.             oElement.style.display = 'none' // hide the element
  176.         }
  177.     }
  178. }
  179.  
  180. //************************************************************
  181. //  Functions for other pages
  182. //************************************************************
  183.  
  184. function toggleNext(oElement, strClassName)
  185. {
  186.     if (strClassName == 'GLOSSARY_DEF')
  187.     {
  188.         toggleGlossary(oElement)
  189.     }
  190.     else
  191.     {
  192.         //find the strClassName element associated with oElement
  193.         //(it should be the next strClassName element in the source index hierarchy)
  194.         //and toggle it
  195.         for (var i = oElement.sourceIndex; i != document.all.length; i++)
  196.         {
  197.             oElement = document.all[i]
  198.             
  199.             if (oElement.tagName == "img")
  200.             {
  201.                 toggleArrow(oElement.sourceIndex)
  202.             }
  203.             if (oElement.className == strClassName)
  204.             {
  205.                 toggleSI(oElement.sourceIndex)
  206.                 break
  207.             }
  208.         }
  209.     }
  210. }
  211. function toggleSI(intSI) {
  212.     //toggle the element at this source index
  213.     
  214.     if (document.all[intSI].style.display == 'none')
  215.     {
  216.         document.all[intSI].style.display = ''
  217.     }
  218.     else
  219.     {
  220.         document.all[intSI].style.display = 'none'
  221.     }
  222. }
  223. function toggleArrow(intSI) {
  224.     //toggle the img element at this source index
  225.     
  226.     var strCurrentImg, intCursor
  227.     strCurrentImg = document.all[intSI].src
  228.     intCursor = strCurrentImg.lastIndexOf('/')
  229.     
  230.     if (intCursor != -1)
  231.     {
  232.         strCurrentImg = strCurrentImg.substr(intCursor+1)
  233.     }
  234.     
  235.     if (strCurrentImg == g_arrIdeaArrow[0])
  236.     {
  237.         document.all[intSI].src = g_arrIdeaArrow[1]
  238.     }
  239.     else if (strCurrentImg == g_arrIdeaArrow[1])
  240.     {
  241.         document.all[intSI].src = g_arrIdeaArrow[0]
  242.     }
  243. }
  244. function toggleIdea(oElement)
  245. {
  246.     // oElement is the IDEA_CATEGORY SPAN element that contains first an <IMG> element and then Text
  247.     // First, hide any open IDEAS DIV element
  248.     // Second, the IMG for the clicked IDEA_CATEGORY must be changed to the clicked state
  249.     // Third, the corresponding IDEAS DIV must be shown
  250.     
  251.     var intSI
  252.     var oElem
  253.     
  254.     // close any open IDEAS
  255.     if (g_strCurrentIdeaNum != "")
  256.     {
  257.         // there is an IDEA_CATEGORY currently selected
  258.         intSI = document.all[getCurrentIcatID()].sourceIndex + 1  // the source index of the associated IMG element
  259.         toggleArrow(intSI)  // toggle the IMG to the unselected state
  260.         oElem = eval( "document.all." + getCurrentIdeasID() )
  261.         oElem.style.display = 'none'  // close the associated IDEA
  262.     }
  263.     
  264.     // open new IDEAS as appropriate
  265.     if (g_strCurrentIdeaNum != getIdeaNumber(oElement.id))
  266.     {
  267.         // a new IDEA_CATEGORY was selected
  268.         setCurrentIdea(oElement.id)  // remember this new idea number
  269.         intSI = oElement.sourceIndex + 1  // the source index of the associated IMG element
  270.         toggleArrow(intSI)  // toggle the image to the selected state
  271.         oElem = eval( "document.all." + getCurrentIdeasID() )
  272.         oElem.style.display = ''  // open the associated IDEAS
  273.     }
  274.     else
  275.     {
  276.         // the open IDEA_CATEGORY was reselected
  277.         g_strCurrentIdeaNum = "" // remember that there are no ideas currently selected
  278.     }
  279. }
  280. function getCurrentIdeasID()
  281. {
  282.     return ('ideas_' + g_strCurrentIdeaNum)
  283. }
  284. function getCurrentIcatID()
  285. {
  286.     return ('icat_' + g_strCurrentIdeaNum)
  287. }
  288. function getIdeaNumber(strID)
  289. {
  290.     return strID.substring( strID.indexOf('_')+1, strID.length )
  291. }
  292. function setCurrentIdea(strID)
  293. {
  294.     g_strCurrentIdeaNum = getIdeaNumber(strID)
  295. }
  296. function doLearnMore(strHREF)
  297. {
  298.     // jump to the help topic page indicated by the HREF
  299.     if (strHREF != '')
  300.     {
  301.         window.location = strHREF;
  302.     }
  303.  
  304. }
  305. function openMovieWindow(fn)
  306. {
  307.     var X, Y, sl, a, ra, link, filename;
  308.     var subDir = "movies/";
  309.     
  310.     filename = fn;
  311.     ra = /:/;
  312.     a = location.href.search(ra);
  313.     if (a == 2)
  314.         X = 14;
  315.     else
  316.         X = 7;
  317.     sl = "\\";
  318.     Y = location.href.lastIndexOf(sl) + 1;
  319.  
  320.     do {
  321.         link = 'file:///' + location.href.substring(X, Y) + subDir + filename;
  322.         filename = window.showModalDialog(link,'',"dialogWidth:570px;dialogHeight:530px;center=yes");
  323.     } while (filename.indexOf('.htm') != -1)
  324.     
  325. }
  326. function openLocalFile(fn)
  327. {
  328.     var X, Y, sl, a, ra, link, oWindow;
  329.     
  330.     ra = /:/;
  331.     a = location.href.search(ra);
  332.     if (a == 2)
  333.         X = 14;
  334.     else
  335.         X = 7;
  336.     sl = "\\";
  337.     Y = location.href.lastIndexOf(sl) + 1;
  338.  
  339.     link = 'file:///' + location.href.substring(X, Y) + fn;
  340.     oWindow = window.open(link,'LocalWin','width=500,height=500,resizable');
  341.     
  342. }
  343.  
  344. //************************************************************
  345. //  Glossary Popup
  346. //************************************************************
  347.  
  348. function toggleGlossary(oElement)
  349. {
  350.     //IE4+ browsers only
  351.  
  352.     var strGlossaryPopupDIV = "<div id='popupWindow' style='visibility:hidden; position:absolute; " +
  353.         "top:0px; left:0px; background-color:#FFFFFF; " + 
  354.         "border:solid 1 #325580'></div>";
  355.  
  356.     if (!(document.all.popupWindow))
  357.     {
  358.         //insert the popup div in the doc body
  359.         document.body.insertAdjacentHTML('beforeEnd', strGlossaryPopupDIV);
  360.     }
  361.     
  362.     if (document.all.popupWindow.style.visibility == 'hidden')
  363.     {
  364.         //let's make it visible with the proper content and in the proper position
  365.         showGlossary(oElement)
  366.         
  367.         //allow click in doc body to hide the glossary
  368.         document.body.onmousedown = hideGlossary
  369.     }
  370.     else
  371.     {
  372.         //it is visible so this must be a call to hide it
  373.         hideGlossary()
  374.     }
  375. }
  376. function hideGlossary()
  377. {
  378.     document.all.popupWindow.style.visibility = 'hidden';
  379.     document.body.onclick = doNothing
  380. }
  381. function doNothing()
  382. {}
  383. function showGlossary(oElement)
  384. {
  385.     //IE4+ browsers only
  386.     
  387.     var oPopup = document.all.popupWindow;
  388.  
  389.     oPopup.style.height = 0;
  390.     oPopup.style.width = 200;
  391.      oPopup.style.padding = 4;
  392.     oPopup.style.fontsize = 10;
  393.     oPopup.innerHTML = '\t'+ getGlossaryText(oElement);
  394.  
  395.     oPopup.style.backgroundColor="#FFFF99";
  396.  
  397.     positionGlossaryPopup(oElement);
  398.  
  399.     oPopup.style.visibility = "visible";
  400.     
  401. }
  402. function positionGlossaryPopup(oElement)
  403. {
  404.     //IE4+ browsers only
  405.     
  406.     var popupWindow = document.all.popupWindow
  407.     
  408.     var pageBottom = document.body.scrollTop + document.body.clientHeight;
  409.     var popHeight = popupWindow.offsetHeight;
  410.  
  411.     var ieX;
  412.     var ieY;
  413.  
  414.     if (oElement.offsetParent.tagName.toLowerCase() == 'body')
  415.     {
  416.         ieX = oElement.offsetLeft;
  417.         ieY = ((oElement.offsetTop) + (oElement.offsetHeight) + 1);
  418.     }
  419.     else if (oElement.offsetParent.offsetParent.tagName.toLowerCase() == 'body')
  420.     {
  421.         ieX = ((oElement.offsetLeft) + (oElement.offsetParent.offsetLeft));
  422.         ieY = ((oElement.offsetHeight) + (oElement.offsetTop) + (oElement.offsetParent.offsetTop) + (1));
  423.     }
  424.     else if (oElement.offsetParent.offsetParent.offsetParent.tagName.toLowerCase() == 'body')
  425.     {
  426.         ieX = ((oElement.offsetLeft) + (oElement.offsetParent.offsetLeft) + (oElement.offsetParent.offsetParent.offsetLeft));
  427.         ieY = ((oElement.offsetHeight) + (oElement.offsetTop) + (oElement.offsetParent.offsetTop) + (oElement.offsetParent.offsetParent.offsetTop) + (1));
  428.     }
  429.     else
  430.     {
  431.         ieX = window.event.clientX;
  432.         ieY = window.event.clientY + document.body.scrollTop;
  433.     }
  434.  
  435.      var rightlimit = ieX + popupWindow.offsetWidth;
  436.     if (rightlimit >= document.body.clientWidth)
  437.     {
  438.         ieX -= (rightlimit - document.body.clientWidth);
  439.     }
  440.     
  441.     try{
  442.         popupWindow.style.height = popHeight - 2 * (parseInt(popupWindow.style.borderWidth));
  443.     }
  444.     catch (e) {}
  445.     
  446.     if (popHeight + ieY >= pageBottom)
  447.     {
  448.         if (popHeight <= pageBottom)
  449.         {
  450.             ieY = pageBottom - popHeight;
  451.         }
  452.         else
  453.         {
  454.             ieY = 0;
  455.         }
  456.     }
  457.     popupWindow.style.left = ieX;
  458.     popupWindow.style.top = ieY;
  459.     
  460. }
  461. function getGlossaryText(oClickedElement)
  462. {
  463.     //IE4+ browsers only
  464.     
  465.     //find the strClassName element associated with oElement
  466.     //(it should be the next strClassName element in the source index hierarchy)
  467.     //and get its content
  468.     
  469.     var oElement
  470.     var strText
  471.     var strHTML
  472.     
  473.     strHTML = "<b>" + oClickedElement.innerText + "</b>"
  474.     strHTML += "<p>"
  475.     
  476.     for (var i = oClickedElement.sourceIndex; i != document.all.length; i++)
  477.     {
  478.         oElement = document.all[i]
  479.             
  480.         if (oElement.className == 'GLOSSARY_DEF')
  481.         {
  482.             strText = oElement.innerText
  483.             break
  484.         }
  485.     }
  486.     
  487.     //capitalize the first alphabetic char
  488.     var strFirstChar
  489.     for (var i = 0; i != strText.length; i++)
  490.     {
  491.         var strFirstChar = strText.substr(i,1)
  492.         if (strFirstChar != " ")
  493.         {
  494.             var strRest = strText.substr(i+1)
  495.             strText = strFirstChar.toUpperCase() + strRest
  496.             break
  497.         }
  498.     }
  499.     
  500.     strHTML += strText + "</p>"
  501.  
  502.     return strHTML
  503. }
  504. //************************************************************
  505.  
  506. /**********************************************************************
  507.     Generic Cross Browser Code
  508. **********************************************************************/
  509.  
  510. var isIE4 = true;
  511. var isNav4 = false;
  512. var isNav6 = false;
  513.  
  514. function blur( oElement )
  515. {
  516.     oElement.blur()
  517. }
  518.  
  519. function existsForm( name )
  520. {
  521.     if ( typeof document.forms[name] == "object" )
  522.         return true
  523.     else
  524.         return false
  525. }
  526. function getElementById( strId )
  527. {
  528.     if (isNav6)
  529.     {
  530.         return document.getElementById( strId );
  531.     }
  532.     else if (isIE4)
  533.     {
  534.         return document.all[strId]
  535.     }
  536.     else
  537.     {
  538.         return null
  539.     }
  540. }
  541.  
  542. function getStyleBySelector( selector )
  543. {
  544.     if (!isNav6)
  545.     {
  546.         return null;
  547.     }
  548.     var sheetList = document.styleSheets;
  549.     var ruleList;
  550.     var i, j;
  551.  
  552.     /* look through stylesheets in reverse order that
  553.        they appear in the document */
  554.     for (i=sheetList.length-1; i >= 0; i--)
  555.     {
  556.         ruleList = sheetList[i].cssRules;
  557.         for (j=0; j<ruleList.length; j++)
  558.         {
  559.             if (ruleList[j].type == CSSRule.STYLE_RULE && ruleList[j].selectorText == selector)
  560.             {
  561.                 return ruleList[j].style;
  562.             }   
  563.         }
  564.     }
  565.     return null;
  566. }
  567. function getStylePropertyById( strId, strProperty )
  568. {
  569.     if (isNav6)
  570.     {
  571.         var styleObject = document.getElementById( strId );
  572.         if (styleObject != null)
  573.         {
  574.             styleObject = styleObject.style;
  575.             if (styleObject[strProperty])
  576.             {
  577.                 return styleObject[ strProperty ];
  578.             }
  579.         }
  580.         styleObject = getStyleBySelector( "#" + strId );
  581.         return (styleObject != null) ?
  582.             styleObject[strProperty] :
  583.             null;
  584.     }
  585.     else if (isIE4)
  586.     {
  587.         return document.all[strId].style[strProperty];
  588.     }
  589.     else
  590.     {
  591.         return ""
  592.     }
  593. }
  594.  
  595. function setStylePropertyById( strId, strProperty, strValue )
  596. {
  597.     if (isNav6)
  598.     {
  599.         var styleObject = document.getElementById( strId );
  600.         if (styleObject != null)
  601.         {
  602.             styleObject = styleObject.style;
  603.             styleObject[ strProperty ] = strValue;
  604.         }
  605.     }
  606.     else if (isIE4)
  607.     {
  608.          document.all[strId].style[strProperty] = strValue;
  609.     }
  610.     else
  611.     {}    //so Nav4 won't return error
  612. }
  613.  
  614. function setStylePropertyByElement( oElement, strProperty, strValue )
  615. {
  616.     if (isNav6)
  617.     {
  618.         var styleObject = oElement;
  619.         if (styleObject != null)
  620.         {
  621.             styleObject = styleObject.style;
  622.             styleObject[ strProperty ] = strValue;
  623.         }
  624.     }
  625.     else if (isIE4)
  626.     {
  627.          oElement.style[strProperty] = strValue;
  628.     }
  629.     else
  630.     {}    //so Nav4 won't return error
  631. }
  632.  
  633. function toggleElementDisplay( element, strStyle )
  634. {
  635.     var strID
  636.     
  637.     //get the element id
  638.     if (typeof element == "object")
  639.     {
  640.         strID = element.id    
  641.     }
  642.     else if (typeof element == "string")
  643.     {
  644.         strID = element
  645.     }
  646.     
  647.     if ((strID != "") && (strID != null))
  648.     {
  649.         if (isIE4 || isNav6)
  650.         {
  651.             if ( getStylePropertyById( strID,'display')=='none' )
  652.             {
  653.                 setStylePropertyById( strID, 'display', strStyle ) //show the element
  654.             }
  655.             else
  656.             {
  657.                 setStylePropertyById( strID, 'display', 'none' ) //hide the element
  658.             }
  659.         }
  660.     }
  661. }
  662.  
  663. function toggleImg( element, strImg1, strImg2 )
  664. {
  665.     var oElement;
  666.     
  667.     //get the element id
  668.     if (typeof element == "object")
  669.     {
  670.         oElement = element;
  671.     }
  672.     else if (typeof element == "string")
  673.     {
  674.         oElement = getElementById( element );
  675.     }
  676.     
  677.     if (oElement != null)
  678.     {
  679.         var strSrc = oElement.src;
  680.         if ( strSrc.indexOf(strImg1) > -1 )
  681.         {
  682.             oElement.src = strImg2;
  683.         }
  684.         else
  685.         {
  686.             oElement.src = strImg1;
  687.         }
  688.     }
  689. }
  690.  
  691. /**********************************************************************
  692.     End Generic Cross-Browser Code
  693. **********************************************************************/
  694.