home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 1999 June / maximum-cd-1999-06.iso / Fireworks 2 / data1.cab / Program_Files / Settings / HTML_Code / Generic / slices.htt < prev   
Encoding:
Text File  |  1999-03-01  |  31.3 KB  |  1,015 lines

  1. // Fireworks Generic HTML & JavaScript for sliced output.
  2. // Version 2.0 10FEB99
  3.  
  4.  
  5. // To export HTML without comments change the value of variable doComments to "false".
  6. var doComments=true;
  7.  
  8. // When doComments is set to "true" the WRITE_HTML_COMMENT and WRITE_JS_COMMENT functions
  9. // include HTML and JavaScript comments in the exported file.
  10. function WRITE_HTML_COMMENT(str) {
  11.     if (doComments) WRITE_HTML("<!--"+str+"-->\n");
  12. }
  13.  
  14. function WRITE_JS_COMMENT(str) {
  15.     if (doComments) WRITE_HTML("/* "+str+" */\n");
  16. }
  17.  
  18. // Write general comments for copying and pasting Fireworks-generated code into existing HTML documents.
  19. WRITE_HTML_COMMENT("To put this html into an existing HTML document, you must copy the JavaScript and");
  20. WRITE_HTML_COMMENT("paste it in a specific location within the destination HTML document. You must then copy");
  21. WRITE_HTML_COMMENT("and paste the table in a different location.");
  22. WRITE_HTML("\n");
  23.  
  24.  
  25. WRITE_HTML("<html>\n");
  26. WRITE_HTML("\n");
  27.  
  28. WRITE_HTML("<head>\n");
  29. WRITE_HTML("\n");
  30.  
  31. // Use Base Name from export dialog as document title.
  32. WRITE_HTML("<title>", exportDoc.filename, "</title>\n");
  33. WRITE_HTML("\n");
  34.  
  35. // Write Meta tags.
  36. WRITE_HTML("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=");
  37. var charSet = App.getPref("HtmlCharSet");
  38. if (charSet == "") charSet = "iso-8859-1";
  39. WRITE_HTML(charSet + "\">\n"); 
  40. WRITE_HTML("<meta name=\"description\" content=\"Fireworks Splice HTML\">\n");
  41. WRITE_HTML("\n");
  42.  
  43. // Write HTML target and date created.
  44. var d = new Date();
  45. WRITE_HTML("<!-- Fireworks 2.0  Generic target.  \n    Created ", d, " -->\n");
  46. WRITE_HTML("\n");
  47.  
  48. // Declare variables for processing Behaviors.    
  49. var kActionStatusMessage = 1;
  50. var kActionSwapImage = 2;
  51. var kActionRadioGroup = 3;
  52.  
  53. var kEventMouseOver = 0;
  54. var kEventOnClick = 1;
  55. var kEventMouseOut = 2;
  56.  
  57. var hasGroup = false;
  58. var hasDownGroup = false;
  59. var hasStatusMessage = false;
  60. var hasStatusHotspot = false;
  61. var hasSwap = false;
  62.  
  63. // Function CellName determines the name for the image in a particular table cell.
  64. // Cellname is based off of the slice name if one was specified. Otherwise the
  65. // Base file name from the export dialog is used.
  66. function CellName(row, col) {
  67.     var cellName = "N" + exportDoc.imagename + "_" + (row+1) + "_" + (col+1);
  68.     var curSlice = slices[row][col];
  69.     if (curSlice && curSlice.getFrameFileName(0)) {
  70.         cellName = curSlice.getFrameFileName(0).toString();
  71.         curSlice.setFrameFileName(0, cellName);
  72.         // remove illegal characters
  73.         cellName = cellName.replace(/\W/g, "");
  74.         // if it starts with a number, add N to the front.
  75.         if (cellName == "") cellName = "N" + exportDoc.imagename + "_" + (row+1) + "_" + (col+1);
  76.         if (cellName.search(/\d/) == 0) {
  77.             cellName = "N"+cellName;
  78.         }
  79.     }
  80.     return(cellName);
  81. }
  82.  
  83. // Determine and process Behaviors in the document.
  84. function ProcessBehavior(theCurBehaviors, displayStatusMessage) {
  85.     
  86.     // Declare variable for processing Behaviors.
  87.     var gotJavascript = false;
  88.  
  89.     var overStat = false;
  90.     var hitStat = false;
  91.     var outStat = false;
  92.     var curRestore = false;
  93.     var numRestore = 0;
  94.     var eraseStatOnRestore = false;
  95.  
  96.     var groupName = false;
  97.     
  98.     // Determine if this set of Behaviors includes a toggle group name.
  99.     for (var i=0; i<theCurBehaviors.numberOfBehaviors; i++) {
  100.         var curBehavior = theCurBehaviors[i];
  101.         if (curBehavior.action == kActionRadioGroup) {
  102.             groupName = curBehavior.groupName;
  103.         }
  104.     }
  105.     var swapImageOver = "";
  106.     var swapImageClick = "";
  107.     var swapImageOut = "";
  108.  
  109.     // Translate Behaviors into JavaScript.
  110.     for (var i=0; i<theCurBehaviors.numberOfBehaviors; i++) {
  111.         var curBehavior = theCurBehaviors[i];
  112.         var curSwap = "";  
  113.         curRestore = false;
  114.         var swapRow = 0;
  115.         var swapCol = 0;
  116.         var swapFrame = 0; 
  117.         
  118.         // Translate Swap Image Behaviors into JavaScript.
  119.         if (curBehavior.action == kActionSwapImage) {
  120.             gotJavascript = true;
  121.             curRestore = curBehavior.restoreOnMouseout;
  122.             swapRow = curBehavior.targetRowNum;
  123.             swapCol = curBehavior.targetColumnNum;
  124.             swapFrame = curBehavior.targetFrameNum; 
  125.             var fileName;
  126.             if (curBehavior.hasHref) {
  127.                 fileName = curBehavior.href;
  128.             } else {
  129.                 fileName = slices.imagesDirPath + slices[swapRow][swapCol].getFrameFileName(swapFrame) + slices[swapRow][swapCol].imageSuffix;
  130.             }
  131.             
  132.             var cellName = CellName(swapRow,swapCol);
  133.  
  134.             curSwap += "'" +cellName +"','";
  135.             curSwap += fileName +"'";
  136.             if (curBehavior.event == kEventOnClick) {
  137.                 /* Need click file */
  138.                 if (slices[swapRow][swapCol].getFrameFileName(3) && swapFrame == 2) {
  139.                     fileName = slices.imagesDirPath + slices[swapRow][swapCol].getFrameFileName(3) + slices[swapRow][swapCol].imageSuffix;
  140.                 }
  141.                 curSwap += ",'" + fileName + "'";
  142.             }
  143.         }
  144.         
  145.         // Translate Status Bar Message Behavior into JavaScript.
  146.         if (curBehavior.action == kActionStatusMessage) {
  147.             gotJavascript = true;
  148.             var statMsg = curBehavior.statusText;
  149.             var curStat = "";
  150.             curStat = displayStatusMessage+"('" + statMsg + "');";
  151.             if (curBehavior.restoreOnMouseout) eraseStatOnRestore=true;
  152.  
  153.             if (curBehavior.event == kEventMouseOver) {
  154.                 javaOver += curStat;
  155.                 overStat = true;
  156.             }    
  157.             if (curBehavior.event == kEventOnClick) {
  158.                 javaClick += curStat;
  159.                 hitStat = true;
  160.             }    
  161.             if (curBehavior.event == kEventMouseOut) {
  162.                 javaOut += curStat;
  163.                 outStat = true;
  164.             }
  165.             continue;
  166.         }
  167.         
  168.         
  169.         if (groupName) {
  170.         
  171.             // If swap images are part of a group, translate swap image behaviors into JavaScript.
  172.             if (curBehavior.event == kEventMouseOver) {
  173.                 if (curSwap) {
  174.                     if (swapImageOver) swapImageOver += ",";
  175.                     swapImageOver += curSwap;
  176.                 }
  177.             }
  178.             if (curBehavior.event == kEventMouseOut) {
  179.                 if (curSwap) {
  180.                     if (swapImageOut) swapImageOut += ",";
  181.                     swapImageOut += curSwap;
  182.                 }
  183.             }
  184.             if (curBehavior.event == kEventOnClick) {
  185.                 if (curSwap) {
  186.                     tag = ");"; 
  187.                     javaClick += "GrpDown('" + groupName + "'," + curSwap + tag;
  188.                 }
  189.             }
  190.             if (curRestore) numRestore++;
  191.         } else {
  192.  
  193.             // If swap images are not part of a group, translate swap image behaviors into JavaScript.
  194.             if (curBehavior.event == kEventMouseOver) {
  195.                 if (curSwap) {
  196.                     javaOver += "di20(" + curSwap + ");";
  197.                 }
  198.             }    
  199.             if (curBehavior.event == kEventOnClick) {
  200.                 if (curSwap) {
  201.                     javaClick += "di20(" + curSwap + ");";
  202.                 }
  203.             }    
  204.             if (curBehavior.event == kEventMouseOut) {
  205.                 if (curSwap) {
  206.                     javaOut += "di20(" + curSwap + ");";
  207.                 }
  208.             }
  209.             var origFileName = slices[swapRow][swapCol].getFrameFileName(0);
  210.             if (curRestore) {
  211.                 javaOut += "di20('" + CellName(swapRow,swapCol) + "','";
  212.                 javaOut += slices.imagesDirPath + origFileName + slices[swapRow][swapCol].imageSuffix + "');"
  213.             }
  214.         }        
  215.     }
  216.  
  217.     // Final processing for swap images and toggle groups.
  218.     if (groupName) {
  219.         if (swapImageOver) {
  220.             tag = ");"; 
  221.             javaOver += "GrpSwap('" + groupName + "'," + swapImageOver + tag;
  222.         }    
  223.         if (swapImageOut) {
  224.             tag = ");"; 
  225.             javaOut += "GrpSwap('" + groupName + "'," + swapImageOut + tag;
  226.         }
  227.         if (numRestore >= 1) {
  228.             javaOut += "GrpRestore('" + groupName + "');" ;
  229.         }    
  230.     }
  231.     
  232.     // Erase status bar message onMouseOut.
  233.     if (eraseStatOnRestore) {
  234.         javaOut += displayStatusMessage+"(' ');" ;
  235.         outStat = true;
  236.     }
  237.     
  238.     // Status bar messages require a return value in Netscape. 
  239.     // Put return at end of JavaScript.
  240.     var ret = "return document.MM_returnValue";
  241.     if (overStat) javaOver += ret;
  242.     if (outStat) javaOut += ret;
  243.     if (hitStat) javaClick += ret;
  244.     return(gotJavascript);
  245. }
  246.  
  247. // Check for radio groups with the initially selected flag.
  248. function CheckForInits(thisGrpName, theCurBehaviors) {
  249.     var groupName = false;
  250.     for (var i=0; i<theCurBehaviors.numberOfBehaviors; i++) {
  251.         var curBehavior = theCurBehaviors[i];
  252.         if (curBehavior.action == kActionRadioGroup && 
  253.             curBehavior.groupChecked) {
  254.             if (thisGrpName == curBehavior.groupName) {
  255.                 groupName = curBehavior.groupName;
  256.                 break;
  257.             }
  258.         }
  259.     } 
  260.     if (!groupName) return;
  261.  
  262.     var swapImageOver = "";
  263.  
  264.     // If toggle group with initial state specified, search for swap image
  265.     // behaviors that will be required to switch it to its initial state.
  266.     for (var i=0; i<theCurBehaviors.numberOfBehaviors; i++) {
  267.         var curBehavior = theCurBehaviors[i];
  268.         var curSwap = "";  
  269.         curRestore = false;
  270.         var swapRow = 0;
  271.         var swapCol = 0;
  272.         var swapFrame = 0; 
  273.         if (curBehavior.action == kActionSwapImage) {
  274.             swapRow = curBehavior.targetRowNum;
  275.             swapCol = curBehavior.targetColumnNum;
  276.             swapFrame = curBehavior.targetFrameNum; 
  277.             var fileName;
  278.             if (curBehavior.hasHref) {
  279.                 fileName = curBehavior.href;
  280.             } else {
  281.                 fileName = slices.imagesDirPath + slices[swapRow][swapCol].getFrameFileName(swapFrame) + slices[swapRow][swapCol].imageSuffix;
  282.             }
  283.             
  284.             var cellName = CellName(swapRow,swapCol);
  285.  
  286.             curSwap += "'" +cellName +"','";
  287.             curSwap += fileName +"'";
  288.             if (curBehavior.event == kEventOnClick) {
  289.                 /* Need click file */
  290.                 if (slices[swapRow][swapCol].getFrameFileName(3) && swapFrame == 2) {
  291.                     fileName = slices.imagesDirPath + slices[swapRow][swapCol].getFrameFileName(3) + slices[swapRow][swapCol].imageSuffix;
  292.                 }
  293.                 curSwap += ",'" + fileName + "'";
  294.             }
  295.         }
  296.         if (curBehavior.event == kEventMouseOver) {
  297.             if (curSwap) {
  298.                 if (swapImageOver) swapImageOver += ",";
  299.                 swapImageOver += curSwap;
  300.             }
  301.         }
  302.     }
  303.  
  304.     // Set initial state.
  305.     var initCmd = "";
  306.     if (swapImageOver != "") {
  307.         initCmd = "GrpSwap('" + groupName + "'," + swapImageOver + ");";
  308.     }
  309.     groupInits[groupName] = initCmd;
  310. }
  311.  
  312. // Write comment for start of JavaScript copy/paste section.
  313. WRITE_HTML_COMMENT("------------------ BEGIN COPYING THE JAVASCRIPT SECTION HERE -----------------");
  314. WRITE_HTML("\n");
  315.  
  316. // Begin Script. Hide Script from non-javascript-enabled browsers.
  317. WRITE_HTML("<script language=\"JavaScript\">\n");
  318. WRITE_HTML("<!-- hide this script from non-javascript-enabled browsers\n");
  319. WRITE_HTML("\n");
  320.  
  321. // Find and declare all images used in Behaviors.
  322. WRITE_HTML("if (document.images) {\n")
  323.  
  324.     function DoFile(curBeh) {
  325.         var swapRow = curBeh.targetRowNum;
  326.         var swapCol = curBeh.targetColumnNum;
  327.         var swapFrame = curBeh.targetFrameNum; 
  328.         var fileName = slices[swapRow][swapCol].getFrameFileName(0);
  329.         if (curBeh.hasTargetFrame && swapFrame > 0) {
  330.             var frame = swapFrame + 1;
  331.             fileName = fileName + "_F" + frame;
  332.             slices[swapRow][swapCol].setFrameFileName(swapFrame, fileName);
  333.             slices[swapRow][swapCol].isSwapped = true;
  334.         } 
  335.     }
  336.  
  337.     // Build a list of toggle groups in array groups.
  338.     var groups = new Array;
  339.     var groupInits = new Array;
  340.     function AddGroup(name) {
  341.         var i;
  342.         for (i=0; i<groups.length; i++) {
  343.             if (groups[i] == name) return;
  344.         }
  345.         groups[i] = name;
  346.         groupInits[name] = "";
  347.     }
  348.  
  349.     // Examine all behaviors to determine what groups and actions are present. 
  350.     // Determine which files to pre-cache.
  351.     for (var curRow = 0; curRow < slices.numRows; curRow++) {
  352.         for (var curCol = 0; curCol < slices.numColumns; curCol++) {
  353.             if (slices[curRow][curCol].skipCell) continue;
  354.             if (slices[curRow][curCol].behaviors.numberOfBehaviors > 0) {
  355.                 var behaviors = slices[curRow][curCol].behaviors;
  356.                 for (var i=0; i<behaviors.numberOfBehaviors; i++) {
  357.                     var curBehavior = behaviors[i];
  358.                     if (curBehavior.action == kActionSwapImage) {
  359.                         DoFile(curBehavior);
  360.                         hasSwap = true;
  361.                     }
  362.                     if (curBehavior.action == kActionStatusMessage) {
  363.                         hasStatusMessage = true;
  364.                         if (slices[curRow][curCol].hasImagemap) {
  365.                             hasStatusHotspot = true;
  366.                         }
  367.                     }
  368.                 }
  369.                 for (var i=0; i<behaviors.numberOfBehaviors; i++) {
  370.                     var curBehavior = behaviors[i];
  371.                     if (curBehavior.action == kActionRadioGroup) {
  372.                         hasGroup=true;
  373.                         if (curBehavior.event == kEventOnClick) {
  374.                             hasDownGroup = true;
  375.                         }
  376.                         AddGroup(curBehavior.groupName);
  377.                         CheckForInits(curBehavior.groupName, behaviors);
  378.                     }
  379.                 }
  380.             }
  381.             var imagemap = slices[curRow][curCol].imagemap;
  382.             for (var j=0; j < imagemap.numberOfURLs; j++) {
  383.                 var curImagemap = imagemap[j];
  384.                 var behaviors = curImagemap.behaviors;
  385.                 for (var i=0; i<behaviors.numberOfBehaviors; i++) {
  386.                     var curBehavior = behaviors[i];
  387.                     if (curBehavior.action == kActionSwapImage) {
  388.                         DoFile(curBehavior);
  389.                         hasSwap = true;
  390.                     }
  391.                     if (curBehavior.action == kActionStatusMessage) {
  392.                         hasStatusHotspot = true;
  393.                     }
  394.                 }
  395.                 for (var i=0; i<behaviors.numberOfBehaviors; i++) {
  396.                     var curBehavior = behaviors[i];
  397.                     if (curBehavior.action == kActionRadioGroup) {
  398.                         hasGroup=true;
  399.                         if (curBehavior.event == kEventOnClick) {
  400.                             hasDownGroup = true;
  401.                         }
  402.                         AddGroup(curBehavior.groupName);
  403.                         CheckForInits(curBehavior.groupName, behaviors);
  404.                     }
  405.                 }
  406.             }
  407.         }
  408.     }
  409.     
  410.     // Write precache function.
  411.     for (var curRow = 0; curRow < slices.numRows; curRow++) {
  412.         for (var curCol = 0; curCol < slices.numColumns; curCol++) {
  413.             if (slices[curRow][curCol].skipCell) continue;
  414.             var cellName = CellName(curRow,curCol);
  415.             var curFile = slices[curRow][curCol].getFrameFileName(0);
  416.             for (var curFrame = 0; curFrame < exportDoc.numFrames; curFrame++) {                
  417.                 var curFile = slices[curRow][curCol].getFrameFileName(curFrame);
  418.                 if (!curFile) continue;
  419.                 if (curFrame == 0 && !slices[curRow][curCol].isSwapped) continue;
  420.                 // Declare and name each image and specify width and height. Ex: I_02_02_F2= new Image(47, 16);
  421.                 WRITE_HTML(cellName, "_F", curFrame+1, 
  422.                     " = new Image(", slices[curRow][curCol].width, "," , slices[curRow][curCol].height,"); ");
  423.                 // Write image source. Ex: I_02_02_F2.src = "File_02_02_F2.gif";
  424.                 WRITE_HTML(cellName, "_F", curFrame+1, 
  425.                     ".src = \"", slices.imagesDirPath, curFile, slices[curRow][curCol].imageSuffix,"\";\n");
  426.             }
  427.         }
  428.     }        
  429. WRITE_HTML("}\n");
  430. WRITE_HTML("\n");
  431.  
  432.  
  433. /*--------------------------  JavaScript functions used in the HTML -----------------*/
  434.  
  435. /* Function dm executes status bar messages. */
  436. function dm(msgStr) {
  437.     window.status = msgStr;
  438.     document.MM_returnValue = true;
  439. }
  440.  
  441. /* Function dmim executes browser detection when image map hotspots have status bar messages. */
  442. function dmim(msgStr) {
  443.   document.MM_returnValue = false;
  444.   var showMsg = navigator.userAgent != "Mozilla/4.0 (compatible; MSIE 4.0; Mac_PowerPC)";
  445.   if (showMsg) {
  446.      window.status = msgStr;
  447.      document.MM_returnValue = true;
  448.   }
  449. }
  450.  
  451. /* Function di20 executes image swaps. */
  452. function di20(id,newSrc){
  453.     var theImage = FWFindImage(document, id, 0);
  454.     if (theImage) theImage.src=newSrc;
  455. }
  456.  
  457. /* Function FWFindImage locates an image which may be in a CSS layer. This allows the user
  458.    to move images between layers in an html editor without breaking behaviors. */
  459. function FWFindImage(doc, name, j)
  460. {
  461.     var theImage=false;
  462.     if (doc.images) {
  463.         theImage = doc.images[name];
  464.     }
  465.     if (theImage) return theImage;
  466.     if (doc.layers) {
  467.         for (j=0; j<doc.layers.length; j++) {
  468.             theImage = FWFindImage(doc.layers[j].document, name, 0);
  469.             if (theImage) return(theImage);
  470.         }
  471.     }
  472.     return(false);
  473. }
  474.  
  475. /* Function setCookie creates a browser cookie for tracking and setting button states. */  
  476. function setCookie(name, value) {
  477.    document.cookie = name + "=" + escape(value)
  478. }
  479.  
  480. /* Function getCookie reads a browser cookie for setting button states. */  
  481. function getCookie(Name) {
  482.     var search = Name + "="
  483.     var retVal = "";
  484.     if (document.cookie.length > 0) { // if there are any cookies
  485.          offset = document.cookie.indexOf(search);
  486.          if (offset != -1) { // if cookie exists 
  487.              // set index of beginning of value
  488.              end = document.cookie.indexOf(";", offset) 
  489.              // set index of end of cookie value
  490.              offset += search.length 
  491.              if (end == -1) 
  492.                 end = document.cookie.length;
  493.              retVal = unescape(document.cookie.substring(offset, end)) ;
  494.          } 
  495.     }
  496.     return(retVal);
  497. }
  498.  
  499. /* Function InitGrp checks for a cookie for the current toggle group and uses that information
  500.    to set the current down button state. */  
  501. function InitGrp(grp) {
  502.     var cmd = false; if (getCookie) cmd = getCookie(grp);
  503.     if (cmd) {
  504.         eval("GrpDown("+cmd+")");
  505.         eval("GrpRestore("+cmd+")");
  506.     }
  507. }
  508.  
  509. /* Function FindGroup locates toggle group information in the current document and
  510.    creates it if it has not already been declared. */
  511. function FindGroup(grp, imageName) {
  512.     var img = FWFindImage(document, imageName, 0);
  513.     if (!img) return(false);
  514.     var docGroup = eval("document.FWG_"+grp);
  515.     if (!docGroup) {
  516.         docGroup = new Object;
  517.         eval("document.FWG_"+grp+" = docGroup");
  518.         docGroup.theImages = new Array;
  519.     }
  520.     if (img) {
  521.         var i;
  522.         for (i=0; i<docGroup.theImages.length; i++) {
  523.             if (docGroup.theImages[i] == img) break;
  524.         }
  525.         docGroup.theImages[i] = img; 
  526.         if (!img.atRestSrc) {
  527.             img.atRestSrc = img.src;
  528.             img.initialSrc = img.src;
  529.         }
  530.     }
  531.     return(docGroup);
  532. }
  533.  
  534. /* Function GrpDown sets appropriate image to the down state. */
  535. function GrpDown(grp,imageName,downSrc,downOver){
  536.     if(!downOver) downOver = downSrc;
  537.     var cmd = "'" + grp + "','" + imageName    + "','" + downSrc + "','" + downOver + "'";
  538.     setCookie(grp, cmd);
  539.     var docGroup = FindGroup(grp, imageName, false);
  540.     if (!docGroup || !downSrc) return;
  541.     obj = FWFindImage(document,imageName,0);
  542.     var theImages = docGroup.theImages;
  543.     if (theImages) {
  544.         for (i=0; i<theImages.length; i++) {
  545.             var curImg = theImages[i];
  546.             if (curImg && curImg != obj) {
  547.                 curImg.atRestSrc = curImg.initialSrc;
  548.                 curImg.isDown = false; obj.downOver = false
  549.                 curImg.src = curImg.initialSrc;
  550.             }
  551.         }
  552.     }
  553.     obj.atRestSrc = downSrc; obj.downOver = downOver
  554.     obj.src = downOver; obj.isDown = true;
  555. }
  556.  
  557. /* Function GrpSwap swaps one or more images and restores all other images in the group
  558.    to their default state. */
  559. function GrpSwap(grp){
  560.     var i,j=0,newSrc,objName;
  561.     var docGroup = false;
  562.     for (i=1; i < (GrpSwap.arguments.length-1); i+=2) {
  563.         objName = GrpSwap.arguments[i];
  564.         newSrc = GrpSwap.arguments[i+1];
  565.         docGroup = FindGroup(grp, objName);
  566.         if (!docGroup) continue;
  567.         obj = FWFindImage(document,objName,0);
  568.         if (!obj) continue;
  569.         if (obj.isDown) {
  570.             if (obj.downOver) { 
  571.                 obj.src = obj.downOver;
  572.             }
  573.         } else {
  574.             obj.src = newSrc;
  575.             obj.atRestSrc = obj.initialSrc;
  576.         }
  577.         obj.skipMe = true;
  578.         j++;
  579.     }
  580.     if (!docGroup) return;
  581.     theImages = docGroup.theImages;
  582.     if (theImages) {
  583.         for (i=0; i<theImages.length; i++) {
  584.             var curImg = theImages[i];
  585.             if (curImg.atRestSrc && !curImg.skipMe) {
  586.                 curImg.src = curImg.atRestSrc;
  587.             }
  588.             curImg.skipMe = false;
  589.         }
  590.     }
  591. }
  592.  
  593. /* Function GrpRestore sets all images in the group to their default states. */
  594. function GrpRestore(grp){
  595.     var docGroup = eval("document.FWG_"+grp);if (!docGroup) return;
  596.     theImages = docGroup.theImages;
  597.     if (theImages) {
  598.         for (i=0; i<theImages.length; i++) {
  599.             var curImg = theImages[i];
  600.             if (curImg.atRestSrc) {
  601.                 curImg.src = curImg.atRestSrc;
  602.             }
  603.         }
  604.     }
  605. }
  606.  
  607. /*----------------- END JavaScript functions used in the HTML -----------------*/
  608.  
  609. // Write out only the JavaScript functions needed for the HTML.
  610.  
  611. // Write function dm if document includes status bar messages.
  612. if (hasStatusMessage) {
  613.     WRITE_JS_COMMENT("Function that displays status bar messages.")
  614.     WRITE_HTML(dm);
  615.     WRITE_HTML("\n");
  616. }
  617.  
  618. // Write function dmim if document includes image map hotspots with status bar messages.
  619. if (hasStatusHotspot) {
  620.     WRITE_JS_COMMENT("Function that displays hotspot status bar messages.")
  621.     WRITE_HTML(dmim);
  622.     WRITE_HTML("\n");
  623. }
  624.  
  625. // Write function di20 if document includes swap image behaviors.
  626. if (hasSwap) {
  627.     WRITE_JS_COMMENT("Function that swaps images.")
  628.     WRITE_HTML(di20);
  629.     WRITE_HTML("\n");
  630. }
  631.  
  632. // Write FWFindImage if document includes toggle group or swap image behaviors so
  633. // that images may be moved between CSS layers in an HTML editor.
  634. if (hasSwap || hasGroup) {
  635.     WRITE_JS_COMMENT("Functions that track and set toggle group button states.")
  636.     WRITE_HTML(FWFindImage);
  637.     WRITE_HTML("\n");
  638. }
  639.  
  640. // Write the following functions for toggle group behaviors and tracking.
  641. if (hasGroup) {
  642.     WRITE_HTML(setCookie);
  643.     WRITE_HTML(getCookie);
  644.     WRITE_HTML(InitGrp);
  645.     WRITE_HTML(FindGroup);
  646.     WRITE_HTML(GrpDown);
  647.     WRITE_HTML(GrpSwap);
  648.     WRITE_HTML(GrpRestore);
  649.     WRITE_HTML("\n");
  650. }
  651.  
  652. // Stop hiding script from non-javascript-enabled browsers. End script.
  653. WRITE_HTML("// stop hiding -->\n");
  654. WRITE_HTML("</script>\n");
  655. WRITE_HTML("\n");
  656.  
  657. // End JavaScript copy/paste section.
  658. WRITE_HTML_COMMENT("------------------------ STOP COPYING THE JAVASCRIPT HERE ------------------------");
  659. WRITE_HTML("\n");
  660.  
  661. // Close head tag.
  662. WRITE_HTML("</head>\n");
  663. WRITE_HTML("\n");
  664.  
  665. // Begin body tag. Set background color to Fireworks document canvas color.
  666. WRITE_HTML("<body bgcolor=\"#", exportDoc.backgroundColor.toString(16), "\" " );
  667.  
  668. // Write onLoad function to initialize toggle group.
  669. if (hasGroup) {
  670.     WRITE_HTML("onload=\"");
  671.     for (i=0; i<groups.length; i++) {
  672.         if (groupInits[groups[i]]) {
  673.             WRITE_HTML(groupInits[groups[i]]);
  674.         }
  675.         WRITE_HTML("InitGrp('" + groups[i] + "');");
  676.     }
  677.     WRITE_HTML("\"");
  678. }
  679. WRITE_HTML( ">\n");
  680. WRITE_HTML("\n");
  681.  
  682. // Write comment for start of table copy/paste section.
  683. WRITE_HTML_COMMENT("The following section is an HTML table which reassembles the sliced image in a browser.");
  684. WRITE_HTML_COMMENT("Copy the table section including the opening and closing table tags, and paste the data where");
  685. WRITE_HTML_COMMENT("you want the reassembled image to appear in the destination document. ");
  686. WRITE_HTML("\n");
  687. WRITE_HTML_COMMENT("------------------------ BEGIN COPYING THE TABLE HERE --------------------------");
  688. WRITE_HTML("\n");
  689.  
  690. WRITE_HTML_COMMENT(" Image with table ");
  691. WRITE_HTML("\n");
  692.  
  693.     // Begin table.
  694. WRITE_HTML( "<table ");
  695.  
  696. // If the Fireworks document's canvas is not transparent and the Include undefined slices checkbox
  697. // is off, give the table a background color based on the FIreworks document's canvas color.
  698. if (!exportDoc.backgroundIsTransparent && slices.doSkipUndefined) {
  699.     WRITE_HTML("bgcolor=\"#", exportDoc.backgroundColor, "\"");
  700. WRITE_HTML("border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"",
  701.         exportDoc.width, "\">\n");
  702.  
  703.     var curCol;
  704.     var curRow;
  705.     var downIndex = 0;
  706.     
  707. // If shims have been specified, write shim row.    
  708.     if (slices.doShimEdges) {
  709.         WRITE_HTML("\n  <tr>");
  710.         WRITE_HTML_COMMENT(" Shim row, height 1. ");
  711.         for (curCol = 0; curCol < slices.numColumns; curCol++) {
  712.             WRITE_HTML("   <td><img src=\"", slices.shimPath, "\" width=\"", 
  713.                 slices[0][curCol].cellWidth, "\" height=\"1\" border=\"0\"></td>\n"); 
  714.         }
  715.         WRITE_HTML("   <td><img src=\"", slices.shimPath, "\" width=\"1", 
  716.             "\" height=\"1\" border=\"0\"></td>\n"); 
  717.         WRITE_HTML("  </tr>\n");
  718.         WRITE_HTML("\n");
  719.     }
  720.  
  721. // Write table rows.
  722.     for (curRow = 0; curRow < slices.numRows; curRow++) {
  723.         WRITE_HTML("  <tr>");
  724.         WRITE_HTML_COMMENT(" row "+(curRow+1)+" ");
  725.         for (curCol = 0; curCol < slices.numColumns; curCol++) {
  726.             var curSlice = slices[curRow][curCol];
  727.             if (curSlice.skipCell) continue; 
  728.  
  729.             // Write rowspan and colspan if necessary. Ex: rowspan="1" colspan="3"
  730.             WRITE_HTML("   <td");
  731.             if (curSlice.rowSpan > 1) {
  732.                 WRITE_HTML(" rowspan=\"", curSlice.rowSpan,"\"");
  733.             }
  734.             if (curSlice.columnSpan>1) {
  735.                 WRITE_HTML(" colspan=\"", curSlice.columnSpan, "\"");
  736.             }
  737.             WRITE_HTML(">");
  738.  
  739.             // Write HTML text from slices set to "Text (No Image)"
  740.             if (!curSlice.hasImage) {
  741.                 // no image, just dump out html text.
  742.                 WRITE_HTML(curSlice.htmlText, "</td>\n");
  743.                 continue;
  744.             }
  745.  
  746.             // If current slice is not defined by a slice object and Export Undefined
  747.             // Slices is not checked, don't output an image and if Shims are specified 
  748.             // place a shim image in the current cell.
  749.             if (curSlice.isUndefined && slices.doSkipUndefined) {
  750.                 if (slices.doShimInternal || slices.doShimEdges) {
  751.                     WRITE_HTML("<img src=\"",
  752.                         slices.shimPath, "\" width=\"", curSlice.width, "\" height=\"", 
  753.                         curSlice.height, "\" border=\"0\">"); 
  754.                 }
  755.                 WRITE_HTML("</td>\n");
  756.                 // Tell Fireworks to not write the image file. Setting the filename to "" forces 
  757.                 // Fireworks to not generate the image.
  758.                 var q;
  759.                 for (q=0; q<exportDoc.numFrames; q++) {
  760.                     curSlice.setFrameFileName(q, "");
  761.                 }    
  762.                 continue;
  763.             }
  764.  
  765.             // Write link if slice has URL attached.
  766.             var href = "href=\"#\"";
  767.             var hasHref = curSlice.hasHref;
  768.             var abortHref = false;
  769.             if (curSlice.hasHref) {
  770.                 href = "href=\"";
  771.                 href += curSlice.href;
  772.                 href += "\"";
  773.                 if (curSlice.hasTargetText) {
  774.                     href += " target=\"";
  775.                     href += curSlice.targetText;
  776.                     href += "\"";
  777.                 }
  778.                 
  779.                 // If exporting demo HTML, ignore the URL and replace with none.
  780.                 if (slices.doDemoHTML && curSlice.getFrameFileName(2)) {                    
  781.                     hasHref = false;
  782.                     href = "href= \"#\"";
  783.                 }
  784.             }
  785.  
  786.             // Initialize variables for rollover and swap image behaviors.
  787.             var javaOver = "";
  788.             var javaOut = "";
  789.             var javaClick = "";
  790.             var cellName = CellName(curRow, curCol);
  791.             var anchorTagOpen = false;
  792.  
  793.             // If the slice has image map hotspots and has a url attached to it,
  794.             // ignore the url here and move it into the image map.
  795.             if (curSlice.hasImage && curSlice.hasImagemap) {
  796.                 abortHref = true;  // we will put the href in the imagemaps.
  797.             }
  798.  
  799.             // Write rollover and swap image events.
  800.             if (!abortHref) {
  801.                 var behaviors = curSlice.behaviors;
  802.                 var gotJavascript = ProcessBehavior(behaviors, "dm");
  803.  
  804.                 if ( gotJavascript || curSlice.hasHref) {
  805.                       WRITE_HTML("<a ");
  806.                     anchorTagOpen = true;
  807.                     WRITE_HTML(href);
  808.  
  809.                     if (javaOut != "") {
  810.                         WRITE_HTML(" onMouseOut=\"", javaOut, "\" ");
  811.                     }
  812.                     if (javaOver != "") {
  813.                         WRITE_HTML(" onMouseOver=\"", javaOver, "\" ");
  814.                     }
  815.                     if (javaClick != "") {
  816.                         WRITE_HTML(" onClick=\"", javaClick, "\" ");
  817.                     }
  818.                     WRITE_HTML(">");
  819.                 }
  820.             }
  821.  
  822.             // Place image.
  823.             if (curSlice.hasImage) {
  824.                 var imageName = curSlice.getFrameFileName(0); 
  825.                 var altText = "";
  826.                 if (curSlice.hasAltText) {
  827.                     altText = curSlice.altText;
  828.                 } else {
  829.                     altText = exportDoc.altText;
  830.                 }
  831.                 
  832.                 // Assemble info for image tag.
  833.                 // Ex: <img name="N_03_02" src="File_03_02.gif" width="79" height="71" border="0"
  834.                 WRITE_HTML("<img name=\"", cellName, "\" src=\"",
  835.                     slices.imagesDirPath, imageName, curSlice.imageSuffix, "\" width=\"",
  836.                     curSlice.width,"\" height=\"", curSlice.height, "\" border=\"0\"");
  837.                 
  838.                 // Write image map name.
  839.                 // Ex: usemap="#base_r1_c2"
  840.                 if (curSlice.hasImagemap) {     
  841.                     WRITE_HTML(" usemap=\"#", imageName, "\""); 
  842.                 }
  843.                 
  844.                 // Write alt text.
  845.                 if (altText != "") {
  846.                     WRITE_HTML(" alt=\"", altText, "\"");
  847.                 }
  848.                 WRITE_HTML(">");    
  849.             }
  850.  
  851.             if (anchorTagOpen) {
  852.                 WRITE_HTML("</a>");    
  853.             }
  854.             WRITE_HTML("</td>\n");    
  855.         }
  856.         
  857.         // Place shim in rightmost column of table.
  858.         if (slices.doShimEdges) {
  859.             /* Write the 1 pixel transparent shim. */
  860.             WRITE_HTML("   <td><img src=\"",
  861.                 slices.shimPath, "\" width=\"1\" height=\"", 
  862.                 slices[curRow][0].cellHeight, "\" border=\"0\"></td>\n"); 
  863.         }
  864.         WRITE_HTML("  </tr>\n");
  865.         WRITE_HTML("\n");
  866.     }        
  867.  
  868. // Close table.
  869. WRITE_HTML("</table>\n");
  870.  
  871.     // Traverse all slices and generate any image maps needed.
  872.     for (curRow = 0; curRow < slices.numRows; curRow++) {
  873.         for (curCol = 0; curCol < slices.numColumns; curCol++) {
  874.             var curSlice = slices[curRow][curCol];
  875.             if (curSlice.skipCell) continue; 
  876.             if (curSlice.hasImagemap) {
  877.                 
  878.                 // Write the image map.
  879.                 WRITE_HTML("\n<map name=\"", curSlice.getFrameFileName(0), "\">\n");
  880.  
  881.                 var i = 0;
  882.                 var imagemap = curSlice.imagemap;
  883.                 while (i < imagemap.numberOfURLs) {
  884.                     var curImagemap = imagemap[i];
  885.  
  886.                     var behaviors = curImagemap.behaviors;
  887.  
  888.                     if (behaviors.numberOfBehaviors==0) {
  889.                         behaviors = curSlice.behaviors;
  890.                     }
  891.                      var javaOver = "";
  892.                     var javaOut = "";
  893.                     var javaClick = "";
  894.                     var gotJavascript = ProcessBehavior(behaviors, "dmim");
  895.     
  896.                     // Write the area tag with shape definitions.
  897.                     WRITE_HTML("<area shape=\"");
  898.                     WRITE_HTML(curImagemap.shape); // Shapes are rect poly and circle
  899.                     WRITE_HTML("\" coords=\"");
  900.                     for (var j=0; j<curImagemap.numCoords; j++) {
  901.                         if (j>0) WRITE_HTML(",");
  902.                         // polygon has n coords.
  903.                         // rect has 2 coords, topLeft, and botomRight.
  904.                         // circle has one coord, center; plus radius.
  905.                         WRITE_HTML((curImagemap.xCoord(j)-curSlice.left), ",", (curImagemap.yCoord(j)-curSlice.top)); 
  906.                     }
  907.                     if (curImagemap.shape == "circle") {
  908.                         // Write the radius for circle hotspots.
  909.                         WRITE_HTML(", ", curImagemap.radius);
  910.                     }
  911.                     WRITE_HTML("\"");
  912.                     var href = " href=\"#\"";
  913.                     if (curImagemap.hasHref) {
  914.                         href = " href=\"";
  915.                         href += curImagemap.href;
  916.                         href += "\"";
  917.                         if (curImagemap.hasTargetText) {
  918.                             href += " target=\"";
  919.                             href += curImagemap.targetText;
  920.                             href += "\"";
  921.                         }
  922.                     }
  923.  
  924.                     WRITE_HTML(href);
  925.                     
  926.                     // Write alt text for hotspot.
  927.                     var altText = "";
  928.                     if (curImagemap.hasAltText) {
  929.                         altText = curImagemap.altText;
  930.                     } else {
  931.                         altText = exportDoc.altText;
  932.                     }
  933.  
  934.                     if (altText!="") {
  935.                         WRITE_HTML(" title=\"", altText, "\"");
  936.                         WRITE_HTML(" alt=\"", altText, "\"");
  937.                     }
  938.  
  939.                     // Write rollover and swap image behaviors.
  940.                     if (javaOut != "") {
  941.                         WRITE_HTML(" onMouseOut=\"", javaOut, "\" ");
  942.                     }
  943.                     if (javaOver != "") {
  944.                         WRITE_HTML(" onMouseOver=\"", javaOver, "\" ");
  945.                     }
  946.                     if (javaClick != "") {
  947.                         WRITE_HTML(" onClick=\"", javaClick, "\" ");
  948.                     }
  949.  
  950.                     WRITE_HTML(" >\n");
  951.                     i++;
  952.                 } 
  953.                 behaviors = slices[curRow][curCol].behaviors;
  954.                  var javaOver = "";
  955.                 var javaOut = "";
  956.                 var javaClick = "";
  957.                 var gotJavascript = ProcessBehavior(behaviors,"dmim");
  958.                 
  959.                 // If the current slice had a URL attached, it was moved and written here.
  960.                 if (gotJavascript || curSlice.hasHref) {
  961.                     WRITE_HTML("<area shape=\"rect\" coords=\"0,0, ", curSlice.width, ",", curSlice.height, "\" ");
  962.                     var href="#";
  963.                     if (curSlice.hasHref) {
  964.                         href = curSlice.href;
  965.                     }
  966.                     WRITE_HTML("href=\"", href, "\"");
  967.  
  968.                     if (curSlice.hasTargetText) {
  969.                         WRITE_HTML("\n  target=\"", slices[curRow][curCol].targetText, "\"");
  970.                     }
  971.                     if (javaOut != "") {
  972.                         WRITE_HTML(" onMouseOut=\"", javaOut, "\" ");
  973.                     }
  974.                     if (javaOver != "") {
  975.                         WRITE_HTML(" onMouseOver=\"", javaOver, "\" ");
  976.                     }
  977.                     if (javaClick != "") {
  978.                         WRITE_HTML(" onClick=\"", javaClick, "\" ");
  979.                     }
  980.                     var altText = "";
  981.                     if (curSlice.hasAltText) {
  982.                         altText = curSlice.altText;
  983.                     } else {
  984.                         altText = exportDoc.altText;
  985.                     }
  986.                     if (altText!="") {
  987.                         WRITE_HTML(" title=\"", altText, "\"");
  988.                         WRITE_HTML(" alt=\"", altText, "\"");
  989.                     }
  990.                     WRITE_HTML(">\n");
  991.                 }    
  992.  
  993.                 WRITE_HTML("</map>\n")
  994.                 WRITE_HTML("\n");
  995.             }
  996.         }
  997.     }
  998.  
  999. WRITE_HTML("\n");
  1000.  
  1001. // End table copy/paste section.
  1002. WRITE_HTML_COMMENT("   This table was automatically created with Macromedia Fireworks 2.0   ");
  1003. WRITE_HTML_COMMENT("   http://www.macromedia.com   ");
  1004. WRITE_HTML("\n");
  1005.  
  1006. WRITE_HTML_COMMENT("------------------------- STOP COPYING THE TABLE HERE -------------------------");
  1007.  
  1008. WRITE_HTML("\n");
  1009. WRITE_HTML("</body>\n");
  1010.  
  1011. WRITE_HTML("\n");
  1012. WRITE_HTML("</html>\n");
  1013. WRITE_HTML("\n");
  1014.