home *** CD-ROM | disk | FTP | other *** search
/ The X-Files: Unrestricted Access / XFUA1.iso / The X-Files Unrestricted Access / data1.cab / Browser / browser / main.js < prev    next >
Encoding:
JavaScript  |  1998-02-17  |  143.1 KB  |  5,582 lines

  1. //---------------------------------------------------------------
  2. // Written by David Frenkiel for ByronPreiss Multimedia, NY, NY.
  3. //
  4. // All obvious copyrights assumed
  5. //---------------------------------------------------------------
  6.  
  7. var everythingLoaded = false;
  8.  
  9. function init() {
  10.  
  11.  
  12. //    DeleteCookie(setUpdatesCookieName, "/");
  13. //    DeleteCookie(commCookieName, "/");
  14. //    return;
  15.  
  16.     // display everything after all is loaded
  17.     mainWindow.style.visibility = "visible";
  18.  
  19.     everythingLoaded = true;
  20.  
  21.     setUpdates();
  22.  
  23.     if(newUpdates.length > 0)
  24.         newupShow();
  25.  
  26.     commGetPrefs();
  27.  
  28.     setTimeout("updateCheckUpdates()", 10000);
  29.  
  30.     setTimeout("initShowClock()", 2000);
  31.  
  32.     loadingImgDiv.outerHTML = "";
  33.  
  34.     closeButton.style.visibility = "visible";
  35.     mainCtrlImg.style.visibility = "visible";
  36.     mediaCtrlLayer.style.visibility = "visible";
  37. }
  38.  
  39.  
  40. var mediaFolder = null;
  41. var localMediaPath = "media";
  42.  
  43. function setMediaFolder(location) {
  44.  
  45.     if(location == "local")
  46.         mediaFolder = localMediaPath;
  47.     else
  48.         mediaFolder = mediaPath;
  49. }
  50.  
  51. var textFocused = false;
  52.  
  53. function doTextFocus() {
  54.     textFocused = true;
  55. }
  56.  
  57. function doTextBlur() {
  58.     textFocused = false;
  59. }
  60.  
  61. document.onmouseover = focusAll;
  62.  
  63. function focusAll() {
  64.  
  65.     if(!textFocused)
  66.         tempDiv.focus();
  67. }
  68.  
  69.  
  70.  
  71. //===================================================
  72.  
  73.  
  74. //**************************
  75. // updates functionality
  76. //**************************
  77.  
  78. var setUpdatesCookieName = "XFUA:Updates";
  79. var setUpdatesArray = new Array();
  80. var setUpdatesCookieArray = null;
  81. var setUpdatesCookieCount = 0;
  82. var newUpdates = new Array();
  83.  
  84. //DeleteCookie(setUpdatesCookieName, "/");
  85.  
  86. function setUpdates() {
  87.     var len;
  88.     var len, updatesName, i, j;
  89.     var updatesCookieCount, found;
  90.  
  91.     setUpdatesGetCookie();
  92.  
  93.     tagList.sortAscending = true;
  94.     tagList.Sort = "update";
  95.     tagList.caseSensitive = false;
  96.  
  97.     tagList.filter = "category=\"update\"";
  98.  
  99.     tagList.Reset();
  100.  
  101.     if(tagList.recordset.recordCount <= 0) {
  102.  
  103.         // (bug in tdc) reset tabular data control
  104.         tagList.DataURL = "tags.txt";
  105.  
  106.         tagList.Reset();
  107.     }
  108.  
  109.     len = tagList.recordset.recordCount;
  110.  
  111.     if(len > 0) {
  112.  
  113.         tagList.recordset.moveFirst();
  114.  
  115.         for(i = 0; i < len; i++) {
  116.             updatesName = tagList.recordset("update") + "";
  117.  
  118.             found = false;
  119.  
  120.             for(j = 0; j < setUpdatesCookieCount; j++) {
  121.                 if(setUpdatesCookieArray[j] == updatesName) {
  122.                     found = true;
  123.                     break;
  124.                 }
  125.             }
  126.  
  127.             if(!found)
  128.                 newUpdates[newUpdates.length] = updatesName;
  129.  
  130.             setUpdatesArray[setUpdatesArray.length] = updatesName;
  131.  
  132.             tagList.recordset.moveNext();
  133.         }
  134.     }
  135.  
  136.     resetUpdatesCookie();
  137. }
  138.  
  139.  
  140.  
  141. function setUpdatesGetCookie() {
  142.     var updatesCookie;
  143.  
  144.     updatesCookie = GetCookie(setUpdatesCookieName);
  145.  
  146.     if(updatesCookie != null) {
  147.         setUpdatesCookieArray = updatesCookie.split(";");
  148.         setUpdatesCookieCount = setUpdatesCookieArray.length - 1;
  149.     }
  150. }
  151.  
  152.  
  153. function resetUpdatesCookie() {
  154.     var expdate = new Date();
  155.     var val = "", i, j, found = false;
  156.     var len, name;
  157.  
  158.     len = setUpdatesArray.length;
  159.  
  160.     for(i = 0; i < setUpdatesCookieCount; i++) {
  161.  
  162.         name = setUpdatesCookieArray[i]
  163.  
  164.         found = false;
  165.  
  166.         for(j = 0; j < len; j++) {
  167.             if(setUpdatesArray[j] == name) {
  168.                 found = true;
  169.                 break;
  170.             }
  171.         }
  172.  
  173.         if(found)
  174.             val += name + ";"
  175.     }
  176.  
  177.     len = newUpdates.length;
  178.  
  179.     for(j = 0; j < len; j++)
  180.         val += newUpdates[j] + ";";
  181.  
  182.  
  183.     expdate.setTime(expdate.getTime() + (100 * 365 * 24 * 60 * 60 * 1000));
  184.  
  185.     SetCookie(setUpdatesCookieName, val, expdate, "/");
  186. }
  187.  
  188.  
  189. //==================================================
  190.  
  191. var atmosphereCurrent = "browser";
  192. var atmosphereState = "play";
  193. var atmosphereOn = true;
  194.  
  195. function setAtmosphere() {
  196.     var wavFile;
  197.     var type = "browser";
  198.     var zIndex = 0;
  199.  
  200.     if(survDragWin.style.visibility == "visible") {
  201.  
  202.         if(survDragWin.style.zIndex > zIndex) {
  203.             type = "surv";
  204.             zIndex = survDragWin.style.zIndex;
  205.         }
  206.     }
  207.  
  208.     if(searchDragWin.style.visibility == "visible") {
  209.  
  210.         if(searchDragWin.style.zIndex > zIndex) {
  211.             type = "search";
  212.             zIndex = searchDragWin.style.zIndex;
  213.         }
  214.     }
  215.  
  216.     if(commDragWin.style.visibility == "visible") {
  217.  
  218.         if(commDragWin.style.zIndex > zIndex) {
  219.             type = "comm";
  220.             zIndex = commDragWin.style.zIndex;
  221.         }
  222.     }
  223.  
  224.     switch(type) {
  225.         case "browser":
  226.             wavFile = "browser.wav";
  227.             break;
  228.  
  229.         case "search":
  230.             wavFile = "search.wav";
  231.             break;
  232.  
  233.         case "surv":
  234.             wavFile = "surv.wav";
  235.             break;
  236.  
  237.         case "comm":
  238.             wavFile = "comm.wav";
  239.             break;
  240.     }
  241.  
  242.  
  243.     var atmoLen = atmosphereAudio.FileName.length;
  244.     var atmoLastIndex = atmosphereAudio.FileName.lastIndexOf("\\");
  245.  
  246.     if(atmoLastIndex == -1)
  247.         atmoLastIndex = -1;
  248.  
  249.     var atmoFileName = atmosphereAudio.FileName.substring(atmoLastIndex + 1, atmoLen);
  250.  
  251.     if(atmoFileName == wavFile)
  252.         return;
  253.  
  254.     if(atmosphereState == "play" && atmosphereOn)
  255.  
  256.         atmosphereDiv.innerHTML = "<object id=atmosphereAudio CLASSID='CLSID:05589FA1-C356-11CE-BF01-00AA0055595A'>" +
  257.                                   "<param name='FileName' VALUE='" + wavFile + "'>" +
  258.                                   "<param name='ShowControls' VALUE='false'>" +
  259.                                   "<param name='ShowDisplay' VALUE='false'>" +
  260.                                   "<param name='BorderStyle' VALUE='0'>" +
  261.                                   "<param name='AutoStart' VALUE='1'>" +
  262.                                   "<param name='PlayCount' VALUE='0'>" +
  263.                                   "</object>";
  264.  
  265.     else
  266.  
  267.         atmosphereDiv.innerHTML = "<object id=atmosphereAudio CLASSID='CLSID:05589FA1-C356-11CE-BF01-00AA0055595A'>" +
  268.                                   "<param name='FileName' VALUE='" + wavFile + "'>" +
  269.                                   "<param name='ShowControls' VALUE='false'>" +
  270.                                   "<param name='ShowDisplay' VALUE='false'>" +
  271.                                   "<param name='BorderStyle' VALUE='0'>" +
  272.                                   "<param name='AutoStart' VALUE='0'>" +
  273.                                   "<param name='PlayCount' VALUE='0'>" +
  274.                                   "</object>";
  275.  
  276. }
  277.  
  278. function atmospherePlay() {
  279.  
  280.     if(atmosphereOn)
  281.         atmosphereAudio.Run();
  282.  
  283.     atmosphereState = "play";
  284. }
  285.  
  286. function atmosphereStop(disable) {
  287.     atmosphereAudio.Stop();
  288.  
  289.     if(disable == false)
  290.         atmosphereState = "stop";
  291. }
  292.  
  293.  
  294. function enableAtmosphere() {
  295.     atmosphereOn = true;
  296.  
  297.     if(atmosphereState == "play")
  298.         atmosphereAudio.Run();
  299. }
  300.  
  301. function disableAtmosphere() {
  302.     atmosphereOn = false;
  303.  
  304.     if(atmosphereState == "play")
  305.         atmosphereStop(true);
  306. }
  307.  
  308. //==================================================
  309.  
  310. function quit() {
  311.     document.title = "XFUA: Quit";
  312.     event.cancelBubble = true;
  313.     event.returnValue = false;
  314. }
  315.  
  316.  
  317. window.onerror = doError;
  318.  
  319. function doError(errCode, descr) {
  320. //    alert("Script error: " + errCode);
  321.     event.cancelBubble = true;
  322.     event.returnValue = false;
  323.     return true;
  324. }
  325.  
  326.  
  327. document.onkeydown = doKeyPress;
  328.  
  329. function doKeyPress() {
  330.     var zIndex = 0;
  331.     var theWin = "";
  332.     var theKey = null;
  333.  
  334.     if(event.keyCode == 93) {
  335.         alert("\"View Source\" not available");
  336.         return;
  337.     }
  338.  
  339.     if(event.srcElement.id == "keywrdText") {
  340.         if(event.keyCode == 13) {
  341.             flashGoButton2();
  342.             setTimeout("doKeywordSearch()", 10);
  343.         }
  344.     }
  345.  
  346.     else if(event.keyCode == 115 || event.keyCode == 83) {
  347.         if(atmosphereOn)
  348.             disableAtmosphere();
  349.         else
  350.             enableAtmosphere();
  351.     }
  352.  
  353.     else {
  354.  
  355.         switch(event.keyCode) {
  356.  
  357.             case 36:
  358.                 theKey = "home";
  359.                 break;
  360.  
  361.             case 35:
  362.                 theKey = "end";
  363.                 break;
  364.  
  365.             case 38:
  366.                 theKey = "up";
  367.                 break;
  368.  
  369.             case 40:
  370.                 theKey = "down";
  371.                 break;
  372.  
  373.             case 13:
  374.                 theKey = "ret";
  375.                 break;
  376.  
  377.             case 33:
  378.                 theKey = "pgup";
  379.                 break;
  380.  
  381.             case 34:
  382.                 theKey = "pgdn";
  383.                 break;
  384.  
  385.             default:
  386.                 theKey = null;
  387.         }
  388.  
  389.         if(theKey == null)
  390.             return;
  391.  
  392.         if(caseDragWin.style.visibility == "visible") {
  393.  
  394.             if(caseDragWin.style.zIndex > zIndex) {
  395.                 zIndex = caseDragWin.style.zIndex;
  396.                 theWin = "case";
  397.             }
  398.         }
  399.  
  400.         if(dossierDragWin.style.visibility == "visible") {
  401.  
  402.             if(dossierDragWin.style.zIndex > zIndex) {
  403.                 zIndex = dossierDragWin.style.zIndex;
  404.                 theWin = "dossier";
  405.             }
  406.         }
  407.  
  408.         if(searchDragWin.style.visibility == "visible") {
  409.  
  410.             if(searchDragWin.style.zIndex > zIndex) {
  411.                 zIndex = searchDragWin.style.zIndex;
  412.                 theWin = "search";
  413.             }
  414.         }
  415.  
  416.         if(textDragWin.style.visibility == "visible") {
  417.  
  418.             if(textDragWin.style.zIndex > zIndex) {
  419.                 zIndex = textDragWin.style.zIndex;
  420.                 theWin = "text";
  421.             }
  422.         }
  423.  
  424.         if(theWin != "")
  425.             eval(theWin + "KeyPress('" + theKey + "')");
  426.     }
  427. }
  428.  
  429. //========================================
  430.  
  431. //************************************
  432. // media icon captions
  433. //************************************
  434.  
  435. var caseCaption = new Image();
  436. var dossierCaption = new Image();
  437. var stillsCaption = new Image();
  438. var docsCaption = new Image();
  439. var videoCaption = new Image();
  440. var audioCaption = new Image();
  441. var textCaption = new Image();
  442. var qtvrCaption = new Image();
  443.  
  444. //========================================
  445.  
  446. //*****************************
  447. // Clock functions
  448. //*****************************
  449.  
  450. var dg0 = new Image();
  451. var dg1 = new Image();
  452. var dg2 = new Image();
  453. var dg3 = new Image();
  454. var dg4 = new Image();
  455. var dg5 = new Image();
  456. var dg6 = new Image();
  457. var dg7 = new Image();
  458. var dg8 = new Image();
  459. var dg9 = new Image();
  460. var dgam = new Image();
  461. var dgpm = new Image();
  462.  
  463. function initShowClock() {
  464.     showClock();
  465.     clockLayer.style.visibility = "visible";
  466. }
  467.  
  468. function showClock() {
  469.  
  470.     var hr1 = 0;
  471.     var hr2 = 0;
  472.     var min1 = 0;
  473.     var min2 = 0;
  474.     var sec1 = 0;
  475.     var sec2 = 0;
  476.     var date = new Date();
  477.  
  478.     var secs = date.getSeconds();
  479.     var mins = date.getMinutes();
  480.     var hrs = date.getHours();
  481.  
  482.     var ampm = "am";
  483.  
  484.     if(hrs >= 12) {
  485.         ampm = "pm";
  486.         hrs -= 12;
  487.     }
  488.  
  489.     if(hrs == 0)
  490.         hrs = 12;
  491.  
  492.     sec2 = secs % 10;
  493.     sec1 = (secs - sec2) / 10;
  494.  
  495.     min2 = mins % 10;
  496.     min1 = (mins - min2) / 10;
  497.  
  498.     hr2 = hrs % 10;
  499.     hr1 = (hrs - hr2) / 10;
  500.  
  501.  
  502.     document.hr1.src = eval("dg" + hr1 + ".src");
  503.     document.hr2.src = eval("dg" + hr2 + ".src");
  504.     document.min1.src = eval("dg" + min1 + ".src");
  505.     document.min2.src = eval("dg" + min2 + ".src");
  506.     document.sec1.src = eval("dg" + sec1 + ".src");
  507.     document.sec2.src = eval("dg" + sec2 + ".src");
  508.     document.ampm.src = eval("dg" + ampm + ".src");
  509.  
  510.     setTimeout("showClock()", 1000);
  511. }
  512.  
  513.  
  514. function setMainCtrl(cmd) {
  515.  
  516.     if(!everythingLoaded)
  517.         return;
  518.  
  519.     switch(cmd) {
  520.  
  521.         case "main":
  522.             mainCtrlImg.src = mainImg.src;
  523.             break;
  524.  
  525.         case "srch":
  526.             mainCtrlImg.src = srchImg.src;
  527.             break;
  528.  
  529.         case "surv":
  530.             mainCtrlImg.src = survImg.src;
  531.             break;
  532.  
  533.         case "comm":
  534.             mainCtrlImg.src = commImg.src;
  535.             break;
  536.  
  537.         case "book":
  538.             mainCtrlImg.src = bookImg.src;
  539.             break;
  540.  
  541.         case "hist":
  542.             mainCtrlImg.src = histImg.src;
  543.             break;
  544.  
  545.         case "help":
  546.             mainCtrlImg.src = helpImg.src;
  547.             break;
  548.     }
  549. }
  550.  
  551.  
  552.  
  553. function openWindow(winId) {
  554.  
  555.     if(!everythingLoaded)
  556.         return;
  557.  
  558.     switch(winId) {
  559.  
  560.         case "srch":
  561.             focusWin(searchDragWin);
  562.             setAtmosphere();
  563.             break;
  564.  
  565.         case "hist":
  566.             showHistory("generalHistory", "History");
  567.             break;
  568.  
  569.         case "surv":
  570.             if(!survInitComplete)
  571.                 survInit();
  572.  
  573.             focusWin(survDragWin);
  574.             setAtmosphere();
  575.  
  576.             break;
  577.  
  578.         case "comm":
  579. //            if(!commInitComplete)
  580.                 commInit();
  581.  
  582.             focusWin(commDragWin);
  583.             setAtmosphere();
  584.  
  585.             break;
  586.  
  587.         case "book":
  588.             showBookmarks();
  589.             break;
  590.  
  591.         case "help":
  592.             genHelpShow();
  593.             break;
  594.     }
  595. }
  596.  
  597.  
  598.  
  599.  
  600. var generalHistory = new Array();
  601.  
  602.  
  603.  
  604.  
  605.  
  606. //=========================================================
  607.  
  608. //*******************************
  609. // Functions for media icons
  610. //*******************************
  611.  
  612. function doMediaOnClick() {
  613.  
  614.     switch(event.srcElement.id) {
  615.  
  616.         case "caseIcon":
  617.             focusWin(caseDragWin, false);
  618.             break;
  619.  
  620.         case "dossierIcon":
  621.             focusWin(dossierDragWin, false);
  622.             break;
  623.  
  624.         case "videoIcon":
  625.             focusWin(videoDragWin, false);
  626.             break;
  627.  
  628.         case "audioIcon":
  629.             focusWin(audioDragWin, false);
  630.             break;
  631.  
  632.         case "qtvrIcon":
  633.             focusWin(qtvrDragWin, false);
  634.             break;
  635.  
  636.         case "docsIcon":
  637.             focusWin(docsDragWin, false);
  638.             break;
  639.  
  640.         case "textIcon":
  641.             focusWin(textDragWin, false);
  642.             break;
  643.  
  644.         case "stillsIcon":
  645.             focusWin(stillsDragWin, false);
  646.             break;
  647.     }
  648. }
  649.  
  650. function setIconState(icon, state) {
  651.     var imgName, imgPrefix, iconObj, imgSuffix;
  652.  
  653.     iconObj = eval(icon);
  654.     imgName = iconObj.src;
  655.     imgPrefix = imgName.substring(0, imgName.length - 5);
  656.  
  657.     switch(state) {
  658.  
  659.         case "active":
  660.             imgSuffix = "u.jpg";
  661.             break;
  662.  
  663.         case "lit":
  664.             imgSuffix = "r.jpg";
  665.             break;
  666.  
  667.         default:
  668.             imgSuffix = "i.jpg";
  669.             break;
  670.     }
  671.  
  672.     iconObj.name = state;
  673.     iconObj.src = imgPrefix + imgSuffix;
  674. }
  675.  
  676. //========================================================
  677.  
  678. //************************************
  679. // Window drag functionality
  680. //************************************
  681.  
  682. var curElement;
  683. var diffX, diffY;
  684. var topWindow = 1;
  685.  
  686. //document.ondragstart = doDragStart;
  687. //document.onmousedown = doMouseDown;
  688. document.onmousemove = doDragMouseMove;
  689. //document.onmouseup = doDragOnMouseUp;
  690.  
  691. function doDragOnMouseUp() {
  692.     var newleft = 0, newTop = 0;
  693.  
  694.     if(curElement == null)
  695.         return;
  696.  
  697.     newleft = event.x - diffX;
  698.  
  699.     curElement.style.pixelLeft = newleft;
  700.  
  701.     newtop = event.y - diffY;
  702.  
  703.     curElement.style.pixelTop = newtop;
  704.  
  705.     curElement = null;
  706.  
  707.     windowDragImg.style.visibility = "hidden";
  708.  
  709. //    event.returnValue = false;
  710. //    event.cancelBubble = true;
  711. }
  712.  
  713. function doDragMouseMove() {
  714.  
  715.     if((event.button == 1) && (curElement != null)) {
  716.  
  717.         windowDragImg.style.left = event.x - 16;
  718.         windowDragImg.style.top = event.y - 16;
  719.  
  720. //        newleft = event.clientX - diffX;
  721.  
  722. //        curElement.style.pixelLeft = newleft;
  723.  
  724. //        newtop = event.clientY - diffY;
  725.  
  726. //        curElement.style.pixelTop = newtop;
  727.  
  728.         event.returnValue = false;
  729.         event.cancelBubble = true;
  730.  
  731.         tempDiv.innerHTML = event.x;
  732. //        tempDiv.innerHTML = "";
  733.     }
  734. }
  735.  
  736. function doDragStart() {
  737.  
  738.     // Don't do default drag operation.
  739. //    if ("DIV" == event.srcElement.tagName)
  740.       event.returnValue = false;
  741. }
  742.  
  743. function doDragMouseDown() {
  744.     var parent, prefix;
  745.  
  746.     if(event.srcElement.id.indexOf("Drag") < 0)
  747.         return;
  748.  
  749.     parent = event.srcElement;
  750.  
  751.     while(parent.id.indexOf("DragWin") < 0)
  752.         parent = parent.parentElement;
  753.  
  754.     if ((event.button == 1)) {
  755.  
  756.         if(event.offsetX > parent.clientWidth - 25) {
  757.  
  758.             prefix = parent.id.substring(0, parent.id.indexOf("DragWin"));
  759.  
  760.             if(eval(prefix + "Close()")) {
  761.                 parent.style.visibility = "hidden";
  762.                 setAtmosphere();
  763.             }
  764.         }
  765.  
  766.  
  767.         else {
  768.  
  769.             windowDragImg.style.left = event.x - 16;
  770.             windowDragImg.style.top = event.y - 16;
  771.             windowDragImg.style.visibility = "visible";
  772.  
  773.             curElement = parent;
  774.  
  775.             diffX =  event.clientX - curElement.style.pixelLeft;
  776.             diffY = event.clientY - curElement.style.pixelTop;
  777.  
  778.             focusWin(curElement);
  779.         }
  780.  
  781.         event.returnValue = false;
  782.         event.cancelBubble = true;
  783.     }
  784. }
  785.  
  786. var oldTitleSpan = null;
  787.  
  788.  
  789. function focusWin(divId, makeVisible) {
  790.     var id = divId.id;
  791.     var titleSpan, theWin = null, icon;
  792.  
  793.     if(makeVisible == false) {
  794.         if(divId.style.visibility != "visible")
  795.             return;
  796.     }
  797.     else
  798.         divId.style.visibility = "visible";
  799.  
  800.     if(divId.style.zIndex < topWindow) {
  801.         topWindow++;
  802.         divId.style.zIndex = topWindow;
  803.     }
  804.  
  805.  
  806.     titleSpan = eval(id.substring(0, id.length - 7) + "TitleDrag");
  807.  
  808.     if(oldTitleSpan != null)
  809.         oldTitleSpan.style.color = "#6699FF";
  810.  
  811.     if(titleSpan.style.color != "red")
  812.         titleSpan.style.color = "red";
  813.  
  814.     oldTitleSpan = titleSpan;
  815.  
  816.     theWin = mainCtrlImg;
  817.   
  818.     if(stillsDragWin.style.visibility == "visible") {
  819.         setIconState("stillsIcon", "active");
  820.  
  821.         if(stillsDragWin.style.zIndex > theWin.style.zIndex)
  822.             theWin = stillsDragWin;
  823.     }
  824.  
  825.     if(docsDragWin.style.visibility == "visible") {
  826.         setIconState("docsIcon", "active");
  827.  
  828.         if(docsDragWin.style.zIndex > theWin.style.zIndex)
  829.             theWin = docsDragWin;
  830.     }
  831.  
  832.     if(qtvrDragWin.style.visibility == "visible") {
  833.         setIconState("qtvrIcon", "active");
  834.  
  835.         if(qtvrDragWin.style.zIndex > theWin.style.zIndex)
  836.             theWin = qtvrDragWin;
  837.     }
  838.  
  839.     if(videoDragWin.style.visibility == "visible") {
  840.         setIconState("videoIcon", "active");
  841.  
  842.         if(videoDragWin.style.zIndex > theWin.style.zIndex)
  843.             theWin = videoDragWin;
  844.     }
  845.  
  846.     if(audioDragWin.style.visibility == "visible") {
  847.         setIconState("audioIcon", "active");
  848.  
  849.         if(audioDragWin.style.zIndex > theWin.style.zIndex)
  850.             theWin = audioDragWin;
  851.     }
  852.  
  853.     if(textDragWin.style.visibility == "visible") {
  854.         setIconState("textIcon", "active");
  855.  
  856.         if(textDragWin.style.zIndex > theWin.style.zIndex)
  857.             theWin = textDragWin;
  858.     }
  859.  
  860.     if(caseDragWin.style.visibility == "visible") {
  861.         setIconState("caseIcon", "active");
  862.  
  863.         if(caseDragWin.style.zIndex > theWin.style.zIndex)
  864.             theWin = caseDragWin;
  865.     }
  866.  
  867.     if(dossierDragWin.style.visibility == "visible") {
  868.         setIconState("dossierIcon", "active");
  869.  
  870.         if(dossierDragWin.style.zIndex > theWin.style.zIndex)
  871.             theWin = dossierDragWin;
  872.     }
  873.  
  874.     icon = id.substring(0, id.length - 7);
  875.  
  876.     if(icon == "case" || icon == "dossier" || icon == "video" ||
  877.        icon == "audio" || icon == "stills" || icon == "qtvr" ||
  878.        icon == "text" || icon == "docs")
  879.  
  880.         setIconState(icon + "Icon", "lit");
  881.  
  882. }
  883.  
  884. //===========================================================
  885.  
  886. //*******************************
  887. // Eliminate selection
  888. //*******************************
  889.  
  890. function doSelectStart() {
  891.  
  892.     if(event.srcElement.tagName != "INPUT") {
  893.         event.returnValue = false;
  894.         event.cancelBubble = true;
  895.         return true;
  896.     }
  897. }
  898.  
  899. document.onselectstart = doSelectStart;
  900.  
  901. //=============================================================
  902.  
  903. //****************************************
  904. // General rollover button functionality
  905. //****************************************
  906.  
  907. function mouseOver(anElem) {
  908.     var srcImg, parent, imgType, elem;
  909.  
  910.     if(anElem == null)
  911.         elem = event.srcElement;
  912.     else
  913.         elem = anElem;
  914.  
  915.  
  916.  
  917.     if(elem.name == null)
  918.         return;
  919.  
  920.     if(elem.name == "roll" || elem.name.indexOf("scroller") >= 0 || elem.name == "three") {
  921.  
  922.         srcImg = elem.src;
  923.  
  924.         if(elem.name == "three")
  925.             if(srcImg.indexOf("_i.jpg") >= 0 || srcImg.indexOf("_s.jpg") >= 0)
  926.                 return;
  927.  
  928.         imgType = srcImg.substring(srcImg.length - 3, srcImg.length);
  929.  
  930.         srcImg = srcImg.substring(0, srcImg.length - 5) + "r." + imgType;
  931.  
  932.         elem.src = srcImg;
  933.  
  934.         if(anElem == null) {
  935. //            event.returnValue = false;
  936. //            event.cancelBubble = true;
  937.         }
  938.  
  939.         if(elem.name == "scroller") {
  940.             parent = elem.parentElement.id;
  941.  
  942.             eval(parent + "ScrollOn('" + elem.id + "')");
  943.         }
  944.     }
  945.  
  946.     else if(elem.name == "survCastImg") {
  947.  
  948.         if(elem.filters(1).enabled == 0)
  949.             elem.filters(0).enabled = 1;
  950.  
  951.         if(anElem == null) {
  952. //            event.returnValue = false;
  953. //            event.cancelBubble = true;
  954.         }
  955.     }
  956.  
  957.     else if(elem.name.indexOf("survThumbImg") >= 0) {
  958.  
  959.         elem.filters(0).enabled = 1;
  960.  
  961.         if(anElem == null) {
  962. //            event.returnValue = false;
  963. //            event.cancelBubble = true;
  964.         }
  965.     }
  966. }
  967.  
  968.  
  969. function setScrollerState(scrollerId, enabled, type) {
  970.  
  971.     if(enabled)
  972.         scrollerId.name = type;
  973.  
  974.     else {
  975.         scrollerId.name = "noscroll";
  976.         scrollerId.src = scrollerId.src.substring(0, scrollerId.src.length - 5) + "u.jpg";
  977.     }
  978. }
  979.  
  980.  
  981. function mouseOut(anElem) {
  982.     var srcImg, parent, imgType, elem;
  983.  
  984.     if(anElem == null)
  985.         elem = event.srcElement;
  986.     else
  987.         elem = anElem;
  988.  
  989.     if(elem.name == null)
  990.         return;
  991.  
  992.     if(elem.name == "roll" || elem.name.indexOf("scroller") >= 0 || elem.name == "three") {
  993.  
  994.         srcImg = elem.src;
  995.  
  996.         if(elem.name == "three")
  997.             if(srcImg.indexOf("_i.jpg") >= 0 || srcImg.indexOf("_s.jpg") >= 0)
  998.                 return;
  999.  
  1000.         imgType = srcImg.substring(srcImg.length - 3, srcImg.length);
  1001.  
  1002.         srcImg = srcImg.substring(0, srcImg.length - 5) + "u." + imgType;
  1003.  
  1004.         elem.src = srcImg;
  1005.  
  1006.         if(anElem == null) {
  1007.             event.returnValue = false;
  1008.             event.cancelBubble = true;
  1009.         }
  1010.  
  1011.         if(elem.name == "scroller") {
  1012.             parent = elem.parentElement.id;
  1013.  
  1014.             eval(parent + "ScrollOff('" + elem.id + "')");
  1015.         }
  1016.     }
  1017.  
  1018.     else if(elem.name == "survCastImg" || elem.name.indexOf("survThumbImg") >= 0) {
  1019.  
  1020.         elem.filters(0).enabled = 0;
  1021.  
  1022.         if(anElem == null) {
  1023.             event.returnValue = false;
  1024.             event.cancelBubble = true;
  1025.         }
  1026.     }
  1027. }
  1028.  
  1029. function onClick() {
  1030.     var parent, prefix;
  1031.  
  1032.     parent = event.srcElement;
  1033.  
  1034.     while(parent.id.indexOf("DragWin") < 0)
  1035.         parent = parent.parentElement;
  1036.  
  1037.     prefix = parent.id.substring(0, parent.id.indexOf("DragWin"));
  1038.  
  1039.     focusWin(parent);
  1040.  
  1041.     if(event.srcElement.name == null)
  1042.         return;
  1043.  
  1044.     if(event.srcElement.name == "roll" || event.srcElement.name == "three") {
  1045.         if(event.srcElement.name == "three")
  1046.             if(event.srcElement.src.indexOf("_i.jpg") >= 0 || event.srcElement.src.indexOf("_s.jpg") >= 0)
  1047.                 return;
  1048.  
  1049.         eval(prefix + "OnClick('" + event.srcElement.id + "')");
  1050.     }
  1051.  
  1052.     else if(event.srcElement.name == "survCastImg") {
  1053.         event.srcElement.filters(0).enabled = 0;
  1054.         event.srcElement.filters(1).enabled = 1;
  1055.  
  1056.         eval(prefix + "OnClick('" + event.srcElement.id + "')");
  1057.     }
  1058.  
  1059.     else if(event.srcElement.name.indexOf("survThumbImg") >= 0 || event.srcElement.name == "survQtvrImg") {
  1060.         eval(prefix + "OnClick('" + event.srcElement.id + "')");
  1061.     }
  1062.  
  1063.     else if(event.srcElement.name == "cscroller") {
  1064.         eval(prefix + "ScrollOn('" + event.srcElement.id + "')");
  1065.     }
  1066.  
  1067.     event.returnValue = false;
  1068.     event.cancelBubble = true;
  1069. }
  1070.  
  1071. //===========================================================
  1072.  
  1073. //*******************************************
  1074. // Function for stills window
  1075. //*******************************************
  1076.  
  1077. var stillsState = 1;
  1078. var stillsCurrentFile = null;
  1079. var stillsHistory = new Array();
  1080. var stillsHistoryIndex = 0;
  1081. var stillsBookmark = null;
  1082.  
  1083. function stillsLoadImg(filename) {
  1084.  
  1085.     if(stillsState == 1)
  1086.         stillsImg1.src = filename;
  1087.     else
  1088.         stillsImg2.src = filename;
  1089. }
  1090.  
  1091. function stillsShowImg() {
  1092.  
  1093.     if(stillsState == 1) {
  1094.         stillsImg1.style.visibility = "visible";
  1095.         stillsImg2.style.visibility = "hidden";
  1096.         stillsState = 2;
  1097.     }
  1098.  
  1099.     else {
  1100.         stillsImg1.style.visibility = "hidden";
  1101.         stillsImg2.style.visibility = "visible";
  1102.         stillsState = 1;
  1103.     }
  1104.  
  1105.     focusWin(stillsDragWin);
  1106. }
  1107.  
  1108. function stillsClose() {
  1109.     stillsCurrentFile = null;
  1110.     setIconState(stillsIcon, "inactive");
  1111.  
  1112.     return(true);
  1113. }
  1114.  
  1115. function stillsOnClick(imgId) {
  1116.     switch(imgId) {
  1117.  
  1118.         case "case":
  1119.             omw(stillsBookmark.substring(0, 4));
  1120.             break;
  1121.  
  1122.         case "back":
  1123.             if(stillsHistoryIndex > 0) {
  1124.                 stillsHistoryIndex--;
  1125.                 showMediaFromHistory(stillsHistory, stillsHistoryIndex);
  1126.             }
  1127.             break;
  1128.  
  1129.         case "fwd":
  1130.             if(stillsHistoryIndex < stillsHistory.length - 1) {
  1131.                 stillsHistoryIndex++;
  1132.                 showMediaFromHistory(stillsHistory, stillsHistoryIndex);
  1133.             }
  1134.             break;
  1135.  
  1136.         case "book":
  1137.             appendBookmark(stillsBookmark);
  1138.             break;
  1139.  
  1140.         case "hist":
  1141.             showHistory("stillsHistory", "Stills History");
  1142.             break;
  1143.  
  1144.         case "help":
  1145.             helpShow("stills");
  1146.             break;
  1147.     }
  1148. }
  1149.  
  1150.  
  1151. //===========================================================
  1152.  
  1153. //*******************************************
  1154. // Functions for document viewer window
  1155. //*******************************************
  1156.  
  1157. var docsCurrentFile = null;
  1158. var docsHistory = new Array();
  1159. var docsHistoryIndex = 0;
  1160. var docsBookmark = null;
  1161.  
  1162. function docsClose() {
  1163.     docsCurrentFile = null;
  1164.     docsDiv.innerHTML = "";
  1165.     setIconState(docsIcon, "inactive");
  1166.  
  1167.     return(true);
  1168. }
  1169.  
  1170. function docsOnClick(imgId) {
  1171.     switch(imgId) {
  1172.  
  1173.         case "case":
  1174.             omw(docsBookmark.substring(0, 4));
  1175.             break;
  1176.  
  1177.         case "back":
  1178.             if(docsHistoryIndex > 0) {
  1179.                 docsHistoryIndex--;
  1180.                 showMediaFromHistory(docsHistory, docsHistoryIndex);
  1181.             }
  1182.             break;
  1183.  
  1184.         case "fwd":
  1185.             if(docsHistoryIndex < docsHistory.length - 1) {
  1186.                 docsHistoryIndex++;
  1187.                 showMediaFromHistory(docsHistory, docsHistoryIndex);
  1188.             }
  1189.             break;
  1190.  
  1191.         case "book":
  1192.             appendBookmark(docsBookmark);
  1193.             break;
  1194.  
  1195.         case "hist":
  1196.             showHistory("docsHistory", "Documents History");
  1197.             break;
  1198.  
  1199.         case "help":
  1200.             helpShow("docs");
  1201.             break;
  1202.     }
  1203. }
  1204.  
  1205. function docsLoadImg(filePath, filename) {
  1206.  
  1207. //    docview.reloadImage(filePath + "/" + filename);
  1208.  
  1209.     docsDiv.style.visibility = "hidden";
  1210.  
  1211.     docsDiv.innerHTML = "<applet id=docview codebase='" + mediaFolder + "' code=DocView.class width=370 height=200>" +
  1212.                         "<param name='cabbase' value='classes.cab'>" +
  1213.                         "<param name=imagesource value='" + filePath + "/" + filename + "'></applet>"
  1214.  
  1215.     docsThumbDiv.innerHTML = "<center><img height=87 src='" + mediaFolder + "/" + filePath + "/thumbs_u/" + filename + "'></center>";
  1216.  
  1217.     docsDiv.style.visibility = "visible";
  1218. }
  1219.  
  1220.  
  1221. //===========================================================
  1222.  
  1223. //*******************************************
  1224. // Functions for qtvr window
  1225. //*******************************************
  1226.  
  1227. var qtvrCurrentFile = null;
  1228. var qtvrHistory = new Array();
  1229. var qtvrHistoryIndex = 0;
  1230. var qtvrBookmark = null;
  1231.  
  1232. function qtvrClose() {
  1233.     qtvrCurrentFile = null;
  1234.     setIconState(qtvrIcon, "inactive");
  1235.  
  1236.     qtvrDivOuter.style.visibility = "hidden";
  1237.  
  1238.     return(true);
  1239. }
  1240.  
  1241. function qtvrOnClick(imgId) {
  1242.     switch(imgId) {
  1243.  
  1244.         case "case":
  1245.             omw(qtvrBookmark.substring(0, 4));
  1246.             break;
  1247.  
  1248.         case "back":
  1249.             if(qtvrHistoryIndex > 0) {
  1250.                 qtvrHistoryIndex--;
  1251.                 showMediaFromHistory(qtvrHistory, qtvrHistoryIndex);
  1252.             }
  1253.             break;
  1254.  
  1255.         case "fwd":
  1256.             if(qtvrHistoryIndex < qtvrHistory.length - 1) {
  1257.                 qtvrHistoryIndex++;
  1258.                 showMediaFromHistory(qtvrHistory, qtvrHistoryIndex);
  1259.             }
  1260.             break;
  1261.  
  1262.         case "book":
  1263.             appendBookmark(qtvrBookmark);
  1264.             break;
  1265.  
  1266.         case "hist":
  1267.             showHistory("qtvrHistory", "3D Evidence History");
  1268.             break;
  1269.  
  1270.         case "help":
  1271.             helpShow("qtvr");
  1272.             break;
  1273.     }
  1274. }
  1275.  
  1276. function qtvrLoad(filePath, caseNum, filename) {
  1277.     var height = 240, nodes;
  1278.  
  1279.     tagList.filter = "caseNum=\"" + caseNum + "\"" +
  1280.                      "&mediaType=\"qtvr\"&filename=\"" + filename + "\"";
  1281.  
  1282.     tagList.Reset();
  1283.  
  1284.     if(tagList.recordset.recordCount <= 0) {
  1285.  
  1286.         // (bug in tdc) reset tabular data control
  1287.         tagList.DataURL = "tags.txt";
  1288.  
  1289.         tagList.Reset();
  1290.     }
  1291.  
  1292.     if(tagList.recordset.recordCount > 0) {
  1293.         nodes = tagList.recordset("qtvrCount") + "";
  1294.         if(parseInt(nodes) > 0)
  1295.             height = 200;
  1296.     }
  1297.  
  1298.     qtvrFrame.document.open();
  1299.  
  1300.     qtvrFrame.document.write("<body bgcolor=#000000 onLoad=\"qtvrDiv.style.visibility = 'visible'\">" +
  1301.  
  1302.                          "<div id=qtvrDiv style='visibility:hidden; width:320; height:" + height + "'>" +
  1303.  
  1304.                          "<embed id=qtvrEmbed pluginspage=plugin.htm width=320 height=" +
  1305.                           height + " src='" + filePath + "' style='visibility:visible'>" +
  1306.  
  1307.                          "</div></body>");
  1308.  
  1309.     qtvrFrame.document.close();
  1310.  
  1311.     qtvrDivOuter.style.visibility = "visible";
  1312. }
  1313.  
  1314. //=====================================================
  1315.  
  1316. //*************************************
  1317. // Functions for list boxes
  1318. //*************************************
  1319.  
  1320. var currentList = null;
  1321. var currentListHead = null;
  1322. var currentListBody = null;
  1323.  
  1324. function doListMouseDown() {
  1325.     var index, i = 0, total;
  1326.  
  1327.     if(currentListHead != null)
  1328.         return;
  1329.  
  1330.     currentListBody = null;
  1331.     currentListHead = event.srcElement;
  1332.  
  1333.     index = currentListHead.sourceIndex;
  1334.  
  1335.     total = document.all.length;
  1336.  
  1337.     while(index + i < total) {
  1338.         if(document.all(index + i).id == "listBody") {
  1339.             currentListBody = document.all(index + i);
  1340.  
  1341.             currentList = currentListBody.parentElement;
  1342.             currentList.style.zIndex = 1;
  1343.  
  1344.             currentListBody.style.visibility = "visible";
  1345.             break;
  1346.         }
  1347.  
  1348.         i++;
  1349.     }
  1350.  
  1351.     event.returnValue = false;
  1352.     event.cancelBubble = true;
  1353. }
  1354.  
  1355. function doListMouseUp() {
  1356.     currentListBody.style.visibility = "hidden";
  1357.     currentList.style.zIndex = 0;
  1358.  
  1359.     if(event.srcElement.id == "listItem" && event.srcElement.innerHTML != "") {
  1360.         currentListHead.innerHTML = event.srcElement.innerHTML;
  1361.         listChanged(currentListHead);
  1362.     }
  1363.  
  1364.     currentListHead = null;
  1365.     currentListBody = null;
  1366.     currentList = null;
  1367.  
  1368. //    event.returnValue = false;
  1369. //    event.cancelBubble = true;
  1370. }
  1371.  
  1372.  
  1373. function listChanged(listHead) {
  1374.     if(listHead.id == "mainListHead") {
  1375.  
  1376.         switch(listHead.innerHTML) {
  1377.  
  1378.             case "Case Files":
  1379.                 caseListBox.style.visibility = "visible";
  1380.                 evidListBox.style.visibility = "hidden";
  1381.                 dossierListBox.style.visibility = "hidden";
  1382.                 break;
  1383.  
  1384.             case "Dossiers":
  1385.                 caseListBox.style.visibility = "hidden";
  1386.                 evidListBox.style.visibility = "hidden";
  1387.                 dossierListBox.style.visibility = "visible";
  1388.                 break;
  1389.  
  1390.             case "Evidence":
  1391.                 caseListBox.style.visibility = "hidden";
  1392.                 evidListBox.style.visibility = "visible";
  1393.                 dossierListBox.style.visibility = "hidden";
  1394.                 break;
  1395.         }
  1396.     }
  1397. }
  1398.  
  1399.  
  1400. document.onmouseup = onMouseUp;
  1401.  
  1402. function onMouseUp() {
  1403.     if(currentListBody != null) {
  1404.         currentList.style.zIndex = 0;
  1405.         currentListBody.style.visibility = "hidden";
  1406.  
  1407.         currentListHead = null;
  1408.         currentListBody = null;
  1409.         currentList = null;
  1410.  
  1411. //        event.returnValue = false;
  1412. //        event.cancelBubble = true;
  1413.     }
  1414. }
  1415.  
  1416.  
  1417.  
  1418.  
  1419. //=============================================
  1420.  
  1421. //*************************
  1422. // Scroll functions
  1423. //*************************
  1424.  
  1425. function doScrollUp(scrollDiv, inc) {
  1426.     var retVal = false;
  1427.  
  1428.     if(inc == null)
  1429.         inc = 20;
  1430.  
  1431.     var style = eval(scrollDiv + ".style");
  1432.  
  1433.     if(style.pixelTop < 0)
  1434.         retVal = true;
  1435.  
  1436.     var newTop = style.pixelTop + inc;
  1437.  
  1438.     if(newTop >= 0)
  1439.         newTop = 0;
  1440.  
  1441.     style.pixelTop = newTop;
  1442.  
  1443.     return(retVal);
  1444. }
  1445.  
  1446. function doScrollDown(scrollDiv, inc) {
  1447.     var retVal = false;
  1448.  
  1449.     if(inc == null)
  1450.         inc = 20;
  1451.  
  1452.     var list = eval(scrollDiv);
  1453.     var parent = eval(scrollDiv + ".parentElement");
  1454.     var min = parent.clientHeight - list.clientHeight;
  1455.  
  1456.     if(list.style.pixelTop > min)
  1457.         retVal = true;
  1458.  
  1459.     var newTop = list.style.pixelTop - inc;
  1460.  
  1461.     if(newTop < min)
  1462.         newTop = min;
  1463.  
  1464.     list.style.pixelTop = newTop;
  1465.  
  1466.     return(retVal);
  1467. }
  1468.  
  1469.  
  1470. function doScrollLeft(scrollDiv) {
  1471.     var style = eval(scrollDiv + ".style");
  1472.     var newLeft = style.pixelLeft + 20;
  1473.  
  1474.     if(newLeft >= 0)
  1475.         newLeft = 0;
  1476.  
  1477.     style.pixelLeft = newLeft;
  1478.  
  1479.     if(newLeft == 0)
  1480.         return(false);
  1481.     else
  1482.         return(true);
  1483. }
  1484.  
  1485. function doScrollRight(scrollDiv) {
  1486.     var list = eval(scrollDiv);
  1487.     var parent = eval(scrollDiv + ".parentElement");
  1488.     var min = parent.clientWidth - list.scrollWidth;
  1489.     var newLeft = list.style.pixelLeft - 20;
  1490.  
  1491.     if(newLeft < min)
  1492.         newLeft = min;
  1493.  
  1494.     list.style.pixelLeft = newLeft;
  1495.  
  1496.     if(newLeft == min)
  1497.         return(false);
  1498.     else
  1499.         return(true);
  1500. }
  1501.  
  1502.  
  1503. function scrollBottom(scrollDiv) {
  1504.     var list = eval(scrollDiv);
  1505.     var parent = eval(scrollDiv + ".parentElement");
  1506.     var min = parent.clientHeight - list.clientHeight;
  1507.  
  1508.     list.style.pixelTop = min;
  1509. }
  1510.  
  1511. function scrollTop(scrollDiv) {
  1512.     var style = eval(scrollDiv + ".style");
  1513.  
  1514.     style.pixelTop = 0;
  1515. }
  1516.  
  1517.  
  1518.  
  1519. //===============================================
  1520.  
  1521. //*********************************
  1522. // Functions for search window
  1523. //*********************************
  1524.  
  1525. var resultsListDiv = null;
  1526. var searchScrollTimer = null;
  1527. var oldFilter = null;
  1528. var searchLastIndex = 0;
  1529. var currentSortColumn;
  1530. var currentFilter;
  1531.  
  1532. function searchClose() {
  1533. //    setAtmosphere();
  1534.  
  1535.     resultsListDiv = null;
  1536.  
  1537.     keywrdText.value = "";
  1538.  
  1539.     scrollDown.style.visibility = "hidden";
  1540.     scrollUp.style.visibility = "hidden";
  1541.  
  1542.     alphaResultsListDiv.style.visibility = "hidden";
  1543.     caseResultsListDiv.style.visibility = "hidden";
  1544.     dateResultsListDiv.style.visibility = "hidden";
  1545.     geoResultsListDiv.style.visibility = "hidden";
  1546.     filterDiv.style.visibility = "hidden";
  1547.  
  1548.     return(true);
  1549. }
  1550.  
  1551. function searchKeyPress(key) {
  1552.     var pageHeight;
  1553.  
  1554.     if(resultsListDiv == null)
  1555.         return;
  1556.  
  1557.     pageHeight = eval(resultsListDiv + ".clientHeight");
  1558.  
  1559.     if(key == "ret") {
  1560.         flashGoButton1();
  1561.         setTimeout("doSearch()", 10);
  1562.     }
  1563.  
  1564.     else if(key == "home") {
  1565.         setScrollerState(scrollUp, false, "scroller");
  1566.         setScrollerState(scrollDown, true, "scroller");
  1567.         scrollTop("resultsList");
  1568.     }
  1569.  
  1570.     else if(key == "end") {
  1571.         setScrollerState(scrollUp, true, "scroller");
  1572.         setScrollerState(scrollDown, false, "scroller");
  1573.         scrollBottom("resultsList");
  1574.     }
  1575.  
  1576.     else if(key == "up") {
  1577.         if(doScrollUp("resultsList", 27))
  1578.             setScrollerState(scrollDown, true, "scroller");
  1579.  
  1580.         else
  1581.             setScrollerState(scrollUp, false, "scroller");
  1582.     }
  1583.  
  1584.     else if(key == "down") {
  1585.         if(doScrollDown("resultsList", 27))
  1586.             setScrollerState(scrollUp, true, "scroller");
  1587.  
  1588.         else
  1589.             setScrollerState(scrollDown, false, "scroller");
  1590.     }
  1591.  
  1592.     else if(key == "pgup") {
  1593.         if(doScrollUp("resultsList", pageHeight))
  1594.             setScrollerState(scrollDown, true, "scroller");
  1595.  
  1596.         else
  1597.             setScrollerState(scrollUp, false, "scroller");
  1598.     }
  1599.  
  1600.     else if(key == "pgdn") {
  1601.         if(doScrollDown("resultsList", pageHeight))
  1602.             setScrollerState(scrollUp, true, "scroller");
  1603.  
  1604.         else
  1605.             setScrollerState(scrollDown, false, "scroller");
  1606.     }
  1607. }
  1608.  
  1609. function searchOnClick(imgId) {
  1610.  
  1611.     switch(imgId) {
  1612.         case "scrollUp":
  1613.             doScrollUp("resultsList");
  1614.             break;
  1615.  
  1616.         case "scrollDown":
  1617.             doScrollDown("resultsList");
  1618.             break;
  1619.  
  1620.         case "doSearchBut":
  1621.             doSearch();
  1622.             break;
  1623.  
  1624.         case "doKeywordSearchBut":
  1625.             doKeywordSearch();
  1626.             break;
  1627.  
  1628.         case "east":
  1629.             searchDoSubsort("geoEast");
  1630.             break;
  1631.  
  1632.         case "west":
  1633.             searchDoSubsort("geoWest");
  1634.             break;
  1635.     }
  1636. }
  1637.  
  1638.  
  1639. function Region(left, top, right, bottom, value) {
  1640.     this.left = left;
  1641.     this.top = top;
  1642.     this.right = right;
  1643.     this.bottom = bottom;
  1644.     this.value = value;
  1645. }
  1646.  
  1647. var alphaPos = new Array(new Region(7,3,18,15, "a"),
  1648.                          new Region(28,3,40,15, "b"),
  1649.                          new Region(50,3,61,15, "c"),
  1650.                          new Region(70,3,82,15, "d"),
  1651.                          new Region(93,3,105,15, "e"),
  1652.                          new Region(116,3,127,15, "f"),
  1653.                          new Region(137,3,147,15, "g"),
  1654.                          new Region(157,3,170,15, "h"),
  1655.                          new Region(180,3,190,15, "i"),
  1656.                          new Region(201,3,212,15, "j"),
  1657.                          new Region(224,3,235,15, "k"),
  1658.                          new Region(246,3,256,15, "l"),
  1659.                          new Region(267,3,278,15, "m"),
  1660.  
  1661.                          new Region(1,26,10,37, "n"),
  1662.                          new Region(21,26,31,37, "o"),
  1663.                          new Region(43,26,54,37, "p"),
  1664.                          new Region(64,26,75,37, "q"),
  1665.                          new Region(87,26,97,37, "r"),
  1666.                          new Region(109,26,119,37, "s"),
  1667.                          new Region(130,26,140,37, "t"),
  1668.                          new Region(151,26,161,37, "u"),
  1669.                          new Region(173,26,185,37, "v"),
  1670.                          new Region(194,26,206,37, "w"),
  1671.                          new Region(217,26,228,37, "x"),
  1672.                          new Region(239,26,249,37, "y"),
  1673.                          new Region(261,26,270,37, "z"),
  1674.                          new Region(278,26,290,37, "#"));
  1675.  
  1676.  
  1677.  
  1678. var datePos = new Array(new Region(9,10,46,30, "1992"),
  1679.                         new Region(47,10,84,30, "1993"),
  1680.                         new Region(87,10,124,30, "1994"),
  1681.                         new Region(127,10,164,30, "1995"),
  1682.                         new Region(166,10,203,30, "1996"),
  1683.                         new Region(204,10,240,30, "1997"),
  1684.                         new Region(245,10,274,30, "1998"));
  1685.  
  1686. var geoPos = new Array(new Region(1,1,70,110, "w"),
  1687.                        new Region(70,1,140,110, "mw"),
  1688.                        new Region(140,1,190,110, "e"));
  1689.  
  1690.  
  1691. function searchDoSubsort(type) {
  1692.     var i, l, r, t, b, x, y;
  1693.     var filter, filterSuffix = "";
  1694.  
  1695.     x = event.offsetX;
  1696.     y = event.offsetY;
  1697.  
  1698.     if(type == "alpha") {
  1699.         for(i = 0; i < alphaPos.length; i++) {
  1700.  
  1701.             l = alphaPos[i].left;
  1702.             t = alphaPos[i].top;
  1703.             r = alphaPos[i].right;
  1704.             b = alphaPos[i].bottom;
  1705.  
  1706.             if(x >= l && x <= r && y >= t && y <= b) {
  1707.  
  1708.                 if(alphaPos[i].value == "#")
  1709.                     filter = oldFilter + "&title<\"a\"";
  1710.  
  1711.                 else
  1712.                     filter = oldFilter + "&title=\"" + alphaPos[i].value + "*\"";
  1713.  
  1714.                 queryTagList(filter);
  1715.                 break;
  1716.             }
  1717.         }
  1718.     }
  1719.  
  1720.     else if(type == "date") {
  1721.         for(i = 0; i < datePos.length; i++) {
  1722.  
  1723.             l = datePos[i].left;
  1724.             t = datePos[i].top;
  1725.             r = datePos[i].right;
  1726.             b = datePos[i].bottom;
  1727.  
  1728.             if(x >= l && x <= r && y >= t && y <= b) {
  1729.  
  1730.                 switch(datePos[i].value) {
  1731.                     case "1992":
  1732.                         date.src = "controls/search/sch92up.jpg";
  1733.                         filterSuffix = "caseNum=\"1x00\"";
  1734.                         break;
  1735.  
  1736.                     case "1993":
  1737.                         date.src = "controls/search/sch93up.jpg";
  1738.                         filterSuffix = "caseNum>\"1x00\"&caseNum<\"1x12\"";
  1739.                         break;
  1740.  
  1741.                     case "1994":
  1742.                         date.src = "controls/search/sch94up.jpg";
  1743.                         filterSuffix = "caseNum>\"1x11\"&caseNum<\"2x12\"";
  1744.                         break;
  1745.  
  1746.                     case "1995":
  1747.                         date.src = "controls/search/sch95up.jpg";
  1748.                         filterSuffix = "caseNum>\"2x11\"&caseNum<\"3x12\"";
  1749.                         break;
  1750.  
  1751.                     case "1996":
  1752.                         date.src = "controls/search/sch96up.jpg";
  1753.                         filterSuffix = "caseNum>\"3x11\"&caseNum<\"4x11\"";
  1754.                         break;
  1755.  
  1756.                     case "1997":
  1757.                         date.src = "controls/search/sch97up.jpg";
  1758.                         filterSuffix = "caseNum>\"4x10\"&caseNum<\"5x07\"";
  1759.                         break;
  1760.  
  1761.                     case "1998":
  1762.                         date.src = "controls/search/sch98up.jpg";
  1763.                         filterSuffix = "caseNum>\"5x06\"";
  1764.                         break;
  1765.  
  1766.                     default:
  1767.                         filterSuffix = "caseNum>\"0x00\"";
  1768.                         break;
  1769.                 }
  1770.  
  1771.                 filter = oldFilter + "&" + filterSuffix;
  1772.  
  1773.                 tagList.Sort = "caseNum";
  1774.  
  1775.                 queryTagList(filter);
  1776.                 break;
  1777.             }
  1778.         }
  1779.     }
  1780.  
  1781.     else if(type == "geo") {
  1782.         for(i = 0; i < geoPos.length; i++) {
  1783.  
  1784.             l = geoPos[i].left;
  1785.             t = geoPos[i].top;
  1786.             r = geoPos[i].right;
  1787.             b = geoPos[i].bottom;
  1788.  
  1789.             if(x >= l && x <= r && y >= t && y <= b) {
  1790.  
  1791.                 filter = oldFilter + "®ion=\"" + geoPos[i].value + "\"";
  1792.  
  1793. //                alert(filter);
  1794.  
  1795.                 queryTagList(filter);
  1796.                 break;
  1797.             }
  1798.         }
  1799.     }
  1800.  
  1801.     else if(type == "geoWest") {
  1802.         filter = oldFilter + "®ion=\"ar\"";
  1803.  
  1804.         queryTagList(filter);
  1805.     }
  1806.  
  1807.     else if(type == "geoEast") {
  1808.         filter = oldFilter + "®ion=\"eu\"";
  1809.  
  1810.         queryTagList(filter);
  1811.     }
  1812. }
  1813.  
  1814. function geoOnMouseMove() {
  1815.     var x = event.offsetX;
  1816.     var y = event.offsetY;
  1817.  
  1818.     if(x < 70)
  1819.         geoMap.src = "controls/search/schmw_r.jpg";
  1820.  
  1821.     else if(x < 140)
  1822.         geoMap.src = "controls/search/schmm_r.jpg";
  1823.  
  1824.     else
  1825.         geoMap.src = "controls/search/schme_r.jpg";
  1826. }
  1827.  
  1828.  
  1829. function geoOnMouseOut() {
  1830.     geoMap.src = "controls/search/schmap.jpg";
  1831. }
  1832.  
  1833. function setSortColumn(isKeyword) {
  1834.     var sortColumn, sortMethod;
  1835.  
  1836.     if(isKeyword)
  1837.         sortMethod = "By Case File";
  1838.     else
  1839.         sortMethod = sortListHead.innerHTML;
  1840.  
  1841.  
  1842.     switch(sortMethod) {
  1843.         case "Alphabetical":
  1844.             filterDiv.innerHTML = "<img id=alpha onClick=searchDoSubsort('alpha') src=controls/search/alphabet.jpg>";
  1845.  
  1846.             filterDiv.style.visibility = "visible";
  1847.             scrollUp.style.top = 60;
  1848.  
  1849.             alphaResultsListDiv.style.visibility = "visible";
  1850.             caseResultsListDiv.style.visibility = "hidden";
  1851.             dateResultsListDiv.style.visibility = "hidden";
  1852.             geoResultsListDiv.style.visibility = "hidden";
  1853.  
  1854.             caseResultsListDiv.innerHTML = "";
  1855.             dateResultsListDiv.innerHTML = "";
  1856.             geoResultsListDiv.innerHTML = "";
  1857.  
  1858.             resultsListDiv = "alphaResultsListDiv";
  1859.  
  1860.             sortColumn = "title";
  1861.             break;
  1862.  
  1863.         case "By Case File":
  1864.             filterDiv.style.visibility = "hidden";
  1865.             scrollUp.style.top = 10;
  1866.  
  1867.             alphaResultsListDiv.style.visibility = "hidden";
  1868.             caseResultsListDiv.style.visibility = "visible";
  1869.             dateResultsListDiv.style.visibility = "hidden";
  1870.             geoResultsListDiv.style.visibility = "hidden";
  1871.  
  1872.             alphaResultsListDiv.innerHTML = "";
  1873.             dateResultsListDiv.innerHTML = "";
  1874.             geoResultsListDiv.innerHTML = "";
  1875.  
  1876.             resultsListDiv = "caseResultsListDiv";
  1877.  
  1878.             sortColumn = "caseNum";
  1879.             break;
  1880.  
  1881.         case "Chronological":
  1882.             filterDiv.innerHTML = "<img id=date onClick=searchDoSubsort('date') src=controls/search/date.jpg>";
  1883.             filterDiv.style.visibility = "visible";
  1884.             scrollUp.style.top = 60;
  1885.  
  1886.             alphaResultsListDiv.style.visibility = "hidden";
  1887.             caseResultsListDiv.style.visibility = "hidden";
  1888.             dateResultsListDiv.style.visibility = "visible";
  1889.             geoResultsListDiv.style.visibility = "hidden";
  1890.  
  1891.             caseResultsListDiv.innerHTML = "";
  1892.             alphaResultsListDiv.innerHTML = "";
  1893.             geoResultsListDiv.innerHTML = "";
  1894.  
  1895.             resultsListDiv = "dateResultsListDiv";
  1896.  
  1897.             sortColumn = "caseNum";
  1898.             break;
  1899.  
  1900.         case "Geographical":
  1901.  
  1902.  
  1903.             filterDiv.innerHTML = "<img id=west name=roll src=controls/search/schal_u.jpg style='position:absolute; left:0; top:10'>" +
  1904.                                   "<img id=geoMap onClick=searchDoSubsort('geo') onMouseOut=geoOnMouseOut() onMouseMove=geoOnMouseMove() src=controls/search/schmap.jpg style='position:absolute; left:30; top:0'>" +
  1905.                                   "<img id=east name=roll src=controls/search/scheu_u.jpg style='position:absolute; left:235; top:10'>";
  1906.  
  1907.  
  1908.  
  1909.             filterDiv.style.visibility = "visible";
  1910.             scrollUp.style.top = 125;
  1911.  
  1912.             alphaResultsListDiv.style.visibility = "hidden";
  1913.             caseResultsListDiv.style.visibility = "hidden";
  1914.             dateResultsListDiv.style.visibility = "hidden";
  1915.             geoResultsListDiv.style.visibility = "visible";
  1916.  
  1917.             caseResultsListDiv.innerHTML = "";
  1918.             alphaResultsListDiv.innerHTML = "";
  1919.             dateResultsListDiv.innerHTML = "";
  1920.  
  1921.             resultsListDiv = "geoResultsListDiv";
  1922.  
  1923.             sortColumn = "region";
  1924.             break;
  1925.     }
  1926.  
  1927.     return(sortColumn);
  1928. }
  1929.  
  1930.  
  1931. function doSearch() {
  1932.  
  1933.     document.body.style.cursor = "wait";
  1934.     search.style.cursor = "wait";
  1935.  
  1936.     setTimeout("doSearchAux()", 10);
  1937. }
  1938.  
  1939.  
  1940. function doSearchAux() {
  1941.     var category, type, sortColumn;
  1942.  
  1943.     switch(mainListHead.innerHTML) {
  1944.         case "Case Files":
  1945.             category = "case";
  1946.             type = caseListHead.innerHTML;
  1947.             break;
  1948.  
  1949.         case "Dossiers":
  1950.             category = "dossier";
  1951.             type = dossierListHead.innerHTML;
  1952.             break;
  1953.  
  1954.         case "Evidence":
  1955.             category = "evid";
  1956.             type = evidListHead.innerHTML;
  1957.             break;
  1958.     }
  1959.  
  1960.     sortColumn = setSortColumn(false);
  1961.  
  1962.     tagList.sortAscending = true;
  1963.     tagList.Sort = sortColumn;
  1964.     tagList.caseSensitive = false;
  1965.  
  1966.     oldFilter = "category=\"" + category + "\"&type=\"" + type + "\"";
  1967.  
  1968.     queryTagList(oldFilter);
  1969. }
  1970.  
  1971. var auxLen;
  1972.  
  1973. function queryTagList(filter) {
  1974.  
  1975.     tagList.filter = filter;
  1976.  
  1977.     tagList.Reset();
  1978.  
  1979.     displayResults(0);
  1980. }
  1981.  
  1982.  
  1983. function flashGoButton2() {
  1984.     doKeywordSearchBut.src = "controls/search/go_r.jpg";
  1985.     setTimeout("unflashGoButton2()", 1000);
  1986. }
  1987.  
  1988. function unflashGoButton2() {
  1989.     doKeywordSearchBut.src = "controls/search/go_u.jpg";
  1990. }
  1991.  
  1992. function flashGoButton1() {
  1993.     doSearchBut.src = "controls/search/go_r.jpg";
  1994.     setTimeout("unflashGoButton1()", 1000);
  1995. }
  1996.  
  1997. function unflashGoButton1() {
  1998.     doSearchBut.src = "controls/search/go_u.jpg";
  1999. }
  2000.  
  2001. function doKeywordSearch() {
  2002.     document.body.style.cursor = "wait";
  2003.     search.style.cursor = "wait";
  2004.  
  2005.     setTimeout("doKeywordSearchAux()", 10);
  2006. }
  2007.  
  2008.  
  2009. function trim(str) {
  2010.     var i;
  2011.  
  2012.     for(i = 0; i < str.length; i++) {
  2013.  
  2014.         if(str.charAt(i) == " ") {
  2015.  
  2016.             if(i == str.length - 1)
  2017.                 str = "";
  2018.  
  2019.             continue;
  2020.         }
  2021.  
  2022.         else {
  2023.             str = str.substring(i, str.length);
  2024.             break;
  2025.         }
  2026.     }
  2027.  
  2028.     for(i = str.length - 1; i >= 0; i--) {
  2029.  
  2030.         if(str.charAt(i) == " ")
  2031.             continue;
  2032.  
  2033.         else {
  2034.             str = str.substring(0, i + 1);
  2035.             break;
  2036.         }
  2037.     }
  2038.  
  2039.     return(str);
  2040. }
  2041.  
  2042.  
  2043. function doKeywordSearchAux() {
  2044.     var keyword, filter, keywordArray, boolean, i;
  2045.     var keyLen, doand, sortColumn;
  2046.  
  2047.     keyword = trim(keywrdText.value.toLowerCase());
  2048.  
  2049.  
  2050.     if(keyword == "") {
  2051.         document.body.style.cursor = "auto";
  2052.         search.style.cursor = "auto";
  2053.  
  2054.         return;
  2055.     }
  2056.  
  2057.     if(radioAll.src.indexOf("_c") >= 0)
  2058.         boolean = "&";
  2059.     else
  2060.         boolean = "|";
  2061.  
  2062.     filter = "";
  2063.     doand = false;
  2064.  
  2065.     keywordArray = keyword.toLowerCase().split(' ');
  2066.     keyLen = keywordArray.length;
  2067.  
  2068.     for(i = 0; i < keyLen; i++) {
  2069.         if(doand) {
  2070.             filter += boolean;
  2071.             doand = false;
  2072.         }
  2073.  
  2074.         if(keywordArray[i] != "") {
  2075.             doand = true;
  2076.             filter += "title=\"*" + keywordArray[i] + "*\"";
  2077.         }
  2078.     }
  2079.  
  2080.     if(filter == "")
  2081.         return;
  2082.  
  2083.     sortColumn = setSortColumn(true);
  2084.  
  2085.     tagList.sortAscending = true;
  2086.     tagList.Sort = sortColumn;
  2087.     tagList.caseSensitive = false;
  2088.  
  2089.     tagList.filter = filter;
  2090.  
  2091.     tagList.Reset();
  2092.  
  2093.     oldFilter = filter;
  2094.  
  2095.     displayResults(0);
  2096. }
  2097.  
  2098.  
  2099. var searchPreviousIndex = 0;
  2100.  
  2101. function displayResults(index) {
  2102.     var len, i, icon, str, mediaType, resultsDiv;
  2103.  
  2104.     searchPreviousIndex = index;
  2105.  
  2106.     // save all the tdc info
  2107.     currentSortColumn = tagList.Sort;
  2108.     currentFilter = tagList.filter;
  2109.  
  2110.     resultsDiv = eval(resultsListDiv);
  2111.  
  2112.     if(tagList.recordset.recordCount <= 0) {
  2113.  
  2114.         // (bug in tdc) reset tabular data control
  2115.         tagList.DataURL = "tags.txt";
  2116.  
  2117.         tagList.UseHeader = "TRUE";
  2118.         tagList.FieldDelim = ",";
  2119.         tagList.TextQualifier = '"';
  2120.  
  2121.         tagList.Reset();
  2122.     }
  2123.  
  2124.     len = tagList.recordset.recordCount - index;
  2125.  
  2126.     if(len <= 0)
  2127.         resultsDiv.innerHTML = "<div id=resultsList style='position:absolute; left:0; top:0'>" +
  2128.                                    "<br><br><center>The search returned no results.<br>Try another search criteria.</center></div>";
  2129.  
  2130.     else {
  2131.         tagList.recordset.moveFirst();
  2132.  
  2133.         if(index > 0)
  2134.             tagList.recordset.move(index);
  2135.  
  2136.         str = "<div id=resultsList style='position:absolute; left:0; top:0'>"
  2137.         str += "<table id=resultsListTable cellpadding=0 border=0 cellspacing=0 onClick=tableClick() style='cursor:hand; font:8pt courier'>"
  2138.  
  2139.         if(index > 0)
  2140.             str += "<tr id='back'><td><img src=controls/search/more.jpg></td><td><span style='color:#FF0000'>...Back...</span></td></tr>";
  2141.  
  2142.         for(i = 0; i < len; i++) {
  2143.  
  2144.             if(i > 24) {
  2145.                 searchLastIndex = index + i;
  2146.                 str += "<tr id='more'><td><img src=controls/search/more.jpg></td><td><span style='color:#FF0000'>...More...</span></td></tr>";
  2147.                 break;
  2148.             }
  2149.  
  2150.             mediaType = tagList.recordset("mediaType");
  2151.  
  2152.             icon = getIcon(mediaType);
  2153.  
  2154.             str += "<tr id=" + (i + index) + "><td><img border=0 src=controls/search/" + icon + "></td>";
  2155.  
  2156.             str += "<td>" + tagList.recordset("title") + "</td></tr>";
  2157.  
  2158.             tagList.recordset.moveNext();
  2159.         }
  2160.  
  2161.         str += "</table></div>";
  2162.  
  2163.         resultsDiv.innerHTML = str;
  2164.     }
  2165.  
  2166.     setScrollers(resultsDiv);
  2167.  
  2168.     setScrollerState(scrollUp, false, "scroller");
  2169.     setScrollerState(scrollDown, true, "scroller");
  2170.  
  2171.     document.body.style.cursor = "auto";
  2172.     search.style.cursor = "auto";
  2173. }
  2174.  
  2175. function setScrollers() {
  2176.     var resultsDiv = eval(resultsListDiv);
  2177.  
  2178.     if(resultsList.clientHeight == 0) {
  2179.         setTimeout("setScrollers()", 100);
  2180.         return;
  2181.     }
  2182.  
  2183.     if(resultsDiv.clientHeight >= resultsList.clientHeight) {
  2184.         scrollDown.style.visibility = "hidden";
  2185.         scrollUp.style.visibility = "hidden";
  2186.     }
  2187.  
  2188.     else {
  2189.         scrollDown.style.visibility = "visible";
  2190.         scrollUp.style.visibility = "visible";
  2191.     }
  2192. }
  2193.  
  2194. function tableClick() {
  2195.     var parent = event.srcElement, i = 0;
  2196.     var mediaType, caseNum, filename, title, location, update;
  2197.  
  2198.     while(parent.tagName != "TR")
  2199.         parent = parent.parentElement;
  2200.  
  2201.  
  2202.     tagList.Sort = currentSortColumn;
  2203.  
  2204.     if(tagList.filter != currentFilter) {
  2205.         tagList.filter = currentFilter;
  2206.  
  2207.         tagList.Reset();
  2208.     }
  2209.  
  2210.  
  2211.     if(parent.id == "more") {
  2212.         displayResults(searchLastIndex);
  2213.         event.cancelBubble = true;
  2214.         event.returnValue = false;
  2215.         return;
  2216.     }
  2217.  
  2218.     else if(parent.id == "back") {
  2219.  
  2220.         searchPreviousIndex -= 25;
  2221.  
  2222.         displayResults(searchPreviousIndex);
  2223.         event.cancelBubble = true;
  2224.         event.returnValue = false;
  2225.         return;
  2226.     }
  2227.  
  2228.     if(tagList.recordset.recordCount <= 0) {
  2229.  
  2230.         // (bug in tdc) reset tabular data control
  2231.         tagList.DataURL = "tags.txt";
  2232.  
  2233.         tagList.Reset();
  2234.     }
  2235.  
  2236.     if(tagList.recordset.recordCount <= 0) {
  2237. //        alert("Record not found.");
  2238.         return;
  2239.     }
  2240.  
  2241.     tagList.recordset.moveFirst();
  2242.  
  2243.     tagList.recordset.move(parent.id);
  2244.  
  2245.     mediaType = tagList.recordset("mediaType");
  2246.     caseNum = tagList.recordset("caseNum");
  2247.     filename = tagList.recordset("filename");
  2248.     title = tagList.recordset("title");
  2249.     update = tagList.recordset("update") + "";
  2250.  
  2251.     if(update == "")
  2252.         location = "cd";
  2253.     else
  2254.         location = "local";
  2255.  
  2256.     event.cancelBubble = true;
  2257.     event.returnValue = false;
  2258.  
  2259.     showMedia(mediaType, caseNum, title, filename, location, true, true);
  2260. }
  2261.  
  2262. function searchScrollOn(scrollerId) {
  2263.  
  2264.     switch(scrollerId) {
  2265.         case "scrollUp":
  2266.             if(doScrollUp("resultsList", 27)) {
  2267.                 setScrollerState(scrollDown, true, "scroller");
  2268.                 searchScrollTimer = setTimeout("searchScrollOn('scrollUp')", 100);
  2269.             }
  2270.             else
  2271.                 setScrollerState(scrollUp, false, "scroller");
  2272.  
  2273.             break;
  2274.  
  2275.         case "scrollDown":
  2276.             if(doScrollDown("resultsList", 27)) {
  2277.                 setScrollerState(scrollUp, true, "scroller");
  2278.                 searchScrollTimer = setTimeout("searchScrollOn('scrollDown')", 100);
  2279.             }
  2280.             else
  2281.                 setScrollerState(scrollDown, false, "scroller");
  2282.  
  2283.             break;
  2284.     }
  2285. }
  2286.  
  2287. function searchScrollOff(scrollerId) {
  2288.     clearTimeout(searchScrollTimer);
  2289. }
  2290.  
  2291.  
  2292. function searchRadio(cmd) {
  2293.     var radioButton = event.srcElement;
  2294.     var temp;
  2295.  
  2296.     if(radioButton.src.indexOf("_u") >= 0) {
  2297.        temp = radioAll.src;
  2298.        radioAll.src = radioAny.src;
  2299.        radioAny.src = temp;
  2300.     }
  2301. }
  2302.  
  2303.  
  2304. //====================================================
  2305.  
  2306. //***************************************
  2307. // General functions for media windows
  2308. //***************************************
  2309.  
  2310. function omw(label) {
  2311.     var splitArray, record, caseNum, mediaType, filename;
  2312.     var filename, update, location, title, i;
  2313.  
  2314.     if(label.toLowerCase() == "na" || label.toLowerCase() == "")
  2315.         return;
  2316.  
  2317.     splitArray = label.split(":");
  2318.     len = splitArray.length;
  2319.  
  2320.     // deal with extra colons in label (for glossary items)
  2321.     if(len > 3) {
  2322.         for(i = 3; i < len; i++)
  2323.             splitArray[2] += ":" + splitArray[i];
  2324.     }
  2325.  
  2326.     caseNum = splitArray[0];
  2327.  
  2328.     if(len == 1) {
  2329.         mediaType = "case";
  2330.         filename = "";
  2331.         tagList.filter = "category=\"case\"&caseNum=\"" + caseNum + "\"";
  2332.     }
  2333.  
  2334.     else if(len == 2) {
  2335.         mediaType = "dossier";
  2336.         filename = splitArray[1];
  2337.  
  2338.         tagList.filter = "category=\"dossier\"&caseNum=\"" + caseNum +
  2339.                          "\"&filename=\"" + filename + "\"";
  2340.     }
  2341.  
  2342.     else {
  2343.         mediaType = splitArray[1];
  2344.         filename = splitArray[2];
  2345.  
  2346.         if(mediaType == "gloss") {
  2347.  
  2348.             showMedia("gloss", caseNum, filename, filename, "", true, false);
  2349.             return;
  2350.         }
  2351.  
  2352.         else
  2353.             tagList.filter = "category=\"evid\"&caseNum=\"" + caseNum + "\"" +
  2354.                              "&mediaType=\"" + mediaType + "\"" +
  2355.                              "&filename=\"" + filename + "\"";
  2356.     }
  2357.  
  2358.     tagList.Sort = "title; update";
  2359.  
  2360.     tagList.Reset();
  2361.  
  2362.     if(tagList.recordset.recordCount <= 0) {
  2363.  
  2364.         // (bug in tdc) reset tabular data control
  2365.         tagList.DataURL = "tags.txt";
  2366.  
  2367.         tagList.Reset();
  2368.     }
  2369.  
  2370.     if(tagList.recordset.recordCount <= 0) {
  2371. //        alert("Record not found.");
  2372.         return;
  2373.     }
  2374.  
  2375.     tagList.recordset.moveLast();
  2376.     title = tagList.recordset("title");
  2377.     update = tagList.recordset("update") + "";
  2378.  
  2379.     if(update == "")
  2380.         location = "cd";
  2381.     else
  2382.         location = "local";
  2383.  
  2384.     showMedia(mediaType, caseNum, title, filename, location, true, false);
  2385.  
  2386.     event.cancelBubble = true;
  2387.     event.returnValue = false;
  2388. }
  2389.  
  2390.  
  2391.  
  2392. function showMediaFromHistory(historyArray, index) {
  2393.  
  2394.     var mediaType, caseNum, filename, title, location;
  2395.  
  2396.     mediaType = historyArray[index].mediaType;
  2397.     caseNum = historyArray[index].caseNum;
  2398.     filename = historyArray[index].filename;
  2399.     title = historyArray[index].title;
  2400.     location = historyArray[index].location;
  2401.  
  2402.     showMedia(mediaType, caseNum, title, filename, location, false, false);
  2403. }
  2404.  
  2405.  
  2406. function strReplace(str, oldText, newText) {
  2407.     var index = 0;
  2408.  
  2409.     while((index = str.indexOf(oldText, index)) >= 0) {
  2410.  
  2411.         str = str.substring(0, index) + newText + str.substring(index + oldText.length, str.length);
  2412.  
  2413.         index += newText.length;
  2414.     }
  2415.  
  2416.     return str;
  2417. }
  2418.  
  2419. function showMedia(mediaType, caseNum, title, filename, location, addToHistory, isSearch) {
  2420.  
  2421.     document.body.style.cursor = "wait";
  2422.     search.style.cursor = "wait";
  2423.  
  2424.     if(isSearch)
  2425.         resultsListTable.style.cursor = "wait";
  2426.  
  2427.     title = title + "";
  2428.  
  2429.     title = strReplace(title, "\"", "\\\"");
  2430.  
  2431.     setTimeout("showMediaActual(\"" + mediaType + "\", \"" + caseNum + "\", \"" + title + "\", \"" + filename + "\", \"" + location + "\", " + addToHistory + ", " + isSearch + ")", 10);
  2432. }
  2433.  
  2434. function showMediaActual(mediaType, caseNum, title, filename, location, addToHistory, isSearch) {
  2435.     var filepath, histObj, head;
  2436.  
  2437.     setMediaFolder(location);
  2438.  
  2439.     if(addToHistory)
  2440.         histObj = new historyObj(mediaType + "", caseNum + "", title + "", filename + "", location + "");
  2441.     
  2442.     if(mediaType == "case") {
  2443.  
  2444.         filepath = caseNum + "/" + caseNum + ".htm";
  2445.  
  2446.         if(filepath != caseCurrentFile) {
  2447.  
  2448.             if(addToHistory) {
  2449.                 caseHistoryIndex = caseHistory.length;
  2450.                 caseHistory[caseHistoryIndex] = histObj;
  2451.  
  2452.                 generalHistory[generalHistory.length] = histObj;
  2453.             }
  2454.  
  2455.             caseCurrentFile = filepath;
  2456.  
  2457.             caseBookmark = caseNum;
  2458.  
  2459.             caseTitleDrag.innerHTML = title;
  2460.  
  2461.             setScrollerState(caseScrollUp, false, "scroller");
  2462.             setScrollerState(caseScrollDown, true, "scroller");
  2463.  
  2464.             loadDiv(caseFileDiv, "caseFile", mediaFolder + "/" + filepath, "", "caseCallBack()");
  2465.         }
  2466.     }
  2467.  
  2468.     else if(mediaType == "dossier") {
  2469.  
  2470.         filepath = caseNum + "/dossiers/" + filename + ".htm";
  2471.         head = "<img src='" + mediaFolder + "/" + caseNum + "/dossiers/" + filename + ".jpg'><br>";
  2472.  
  2473.         if(filepath != dossierCurrentFile) {
  2474.  
  2475.             if(addToHistory) {
  2476.                 dossierHistoryIndex = dossierHistory.length;
  2477.                 dossierHistory[dossierHistoryIndex] = histObj;
  2478.  
  2479.                 generalHistory[generalHistory.length] = histObj;
  2480.             }
  2481.  
  2482.             dossierCurrentFile = filepath;
  2483.  
  2484.             dossierBookmark = caseNum + ":" + filename;
  2485.  
  2486.             dossierTitleDrag.innerHTML = title;
  2487.  
  2488.             setScrollerState(dossierScrollUp, false, "scroller");
  2489.             setScrollerState(dossierScrollDown, true, "scroller");
  2490.  
  2491.             loadDiv(dossierDiv, "dossierFile", mediaFolder + "/" + filepath, head, "dossierCallBack()");
  2492.         }
  2493.     }
  2494.  
  2495.     else if(mediaType == "still") {
  2496.         filepath = caseNum + "/stills/" + filename;
  2497.  
  2498.         if(filepath != stillsCurrentFile) {
  2499.  
  2500.             if(addToHistory) {
  2501.                 stillsHistoryIndex = stillsHistory.length;
  2502.                 stillsHistory[stillsHistoryIndex] = histObj;
  2503.  
  2504.                 generalHistory[generalHistory.length] = histObj;
  2505.             }
  2506.  
  2507.             stillsCurrentFile = filepath;
  2508.  
  2509.             stillsBookmark = caseNum + ":still:" + filename;
  2510.  
  2511.             stillsTitleDrag.innerHTML = title;
  2512.  
  2513.             stillsLoadImg(mediaFolder + "/" + filepath);
  2514.         }
  2515.  
  2516. //        focusWin(stillsDragWin);
  2517.     }
  2518.  
  2519.     else if(mediaType == "doc") {
  2520.  
  2521.         filepath = caseNum + "/docs/" + filename;
  2522.  
  2523.         if(filepath != docsCurrentFile) {
  2524.  
  2525.             if(addToHistory) {
  2526.                 docsHistoryIndex = docsHistory.length;
  2527.                 docsHistory[docsHistoryIndex] = histObj;
  2528.  
  2529.                 generalHistory[generalHistory.length] = histObj;
  2530.             }
  2531.  
  2532.             docsCurrentFile = filepath;
  2533.  
  2534.             docsBookmark = caseNum + ":doc:" + filename;
  2535.  
  2536.             docsTitleDrag.innerHTML = title;
  2537.  
  2538.             docsLoadImg(caseNum + "/docs", filename);
  2539.         }
  2540.  
  2541.         focusWin(docsDragWin);
  2542.     }
  2543.  
  2544.     else if(mediaType == "text") {
  2545.  
  2546.         filepath = caseNum + "/text/" + filename;
  2547.  
  2548.         if(filepath != textCurrentFile) {
  2549.  
  2550.             if(addToHistory) {
  2551.                 textHistoryIndex = textHistory.length;
  2552.                 textHistory[textHistoryIndex] = histObj;
  2553.  
  2554.                 generalHistory[generalHistory.length] = histObj;
  2555.             }
  2556.  
  2557.             textCurrentFile = filepath;
  2558.  
  2559.             textBookmark = caseNum + ":text:" + filename;
  2560.  
  2561.             textTitleDrag.innerHTML = title;
  2562.  
  2563.             textLoad(filepath);
  2564.         }
  2565.  
  2566.         focusWin(textDragWin);
  2567.     }
  2568.  
  2569.     else if(mediaType == "qtvr") {
  2570.         filepath = caseNum + "/qtvr/" + filename;
  2571.  
  2572.         if(filepath != qtvrCurrentFile) {
  2573.  
  2574.             if(addToHistory) {
  2575.                 qtvrHistoryIndex = qtvrHistory.length;
  2576.                 qtvrHistory[qtvrHistoryIndex] = histObj;
  2577.  
  2578.                 generalHistory[generalHistory.length] = histObj;
  2579.             }
  2580.  
  2581.             qtvrCurrentFile = filepath;
  2582.  
  2583.             qtvrBookmark = caseNum + ":qtvr:" + filename;
  2584.  
  2585.             qtvrTitleDrag.innerHTML = title;
  2586.  
  2587.             qtvrLoad(mediaFolder + "/" + filepath, caseNum, filename);
  2588.         }
  2589.  
  2590.         focusWin(qtvrDragWin);
  2591.     }
  2592.  
  2593.     else if(mediaType == "video") {
  2594.         filepath = caseNum + "/video/" + filename;
  2595.  
  2596.         if(filepath != videoCurrentFile) {
  2597.  
  2598.             if(addToHistory) {
  2599.                 videoHistoryIndex = videoHistory.length;
  2600.                 videoHistory[videoHistoryIndex] = histObj;
  2601.  
  2602.                 generalHistory[generalHistory.length] = histObj;
  2603.             }
  2604.  
  2605.             videoCurrentFile = filepath;
  2606.  
  2607.             videoBookmark = caseNum + ":video:" + filename;
  2608.  
  2609.             videoTitleDrag.innerHTML = title;
  2610.  
  2611.             videoLoad(mediaFolder + "/" + filepath);
  2612.         }
  2613.  
  2614.         focusWin(videoDragWin);
  2615.     }
  2616.  
  2617.     else if(mediaType == "audio") {
  2618.         filepath = caseNum + "/audio/" + filename;
  2619.  
  2620.         if(filepath != audioCurrentFile) {
  2621.  
  2622.             if(addToHistory) {
  2623.                 audioHistoryIndex = audioHistory.length;
  2624.                 audioHistory[audioHistoryIndex] = histObj;
  2625.  
  2626.                 generalHistory[generalHistory.length] = histObj;
  2627.             }
  2628.  
  2629.             audioCurrentFile = filepath;
  2630.  
  2631.             audioBookmark = caseNum + ":audio:" + filename;
  2632.  
  2633.             audioTitleDrag.innerHTML = title;
  2634.  
  2635.             audioLoad(mediaFolder + "/" + filepath);
  2636.         }
  2637.  
  2638.         focusWin(audioDragWin);
  2639.     }
  2640.  
  2641.     else if(mediaType == "gloss") {
  2642.  
  2643.         if(filename != glossCurrentFile) {
  2644.  
  2645.             if(addToHistory) {
  2646.                 glossHistoryIndex = glossHistory.length;
  2647.                 glossHistory[glossHistoryIndex] = histObj;
  2648.  
  2649.                 generalHistory[generalHistory.length] = histObj;
  2650.             }
  2651.  
  2652.             glossCurrentFile = filename;
  2653.         }
  2654.  
  2655.         glossShowDefinition(caseNum, filename);
  2656.     }
  2657.  
  2658.     if(addToHistory)
  2659.         updateHistory();
  2660.  
  2661.     document.body.style.cursor = "auto";
  2662.     search.style.cursor = "auto";
  2663.  
  2664.     if(isSearch)
  2665.         resultsListTable.style.cursor = "hand";
  2666. }
  2667.  
  2668.  
  2669. //====================================================
  2670.  
  2671. //**********************************
  2672. // Functions for history window
  2673. //**********************************
  2674.  
  2675. function historyObj(mediaType, caseNum, title, filename, location) {
  2676.     this.mediaType = mediaType;
  2677.     this.caseNum = caseNum;
  2678.     this.title = title;
  2679.     this.filename = filename;
  2680.     this.location = location;
  2681. }
  2682.  
  2683. function historyClose() {
  2684.     return(true);
  2685. }
  2686.  
  2687. function historyOnClick(imgId) {
  2688.  
  2689.     switch(imgId) {
  2690.         case "historyScrollUp":
  2691.             doScrollUp("historyList");
  2692.             break;
  2693.  
  2694.         case "historyScrollDown":
  2695.             doScrollDown("historyList");
  2696.             break;
  2697.     }
  2698. }
  2699.  
  2700. var historyScrollTimer = null;
  2701.  
  2702. function historyScrollOn(scrollerId) {
  2703.  
  2704.     switch(scrollerId) {
  2705.         case "historyScrollUp":
  2706.             doScrollUp("historyList");
  2707.             historyScrollTimer = setTimeout("historyScrollOn('historyScrollUp')", 100);
  2708.             break;
  2709.  
  2710.         case "historyScrollDown":
  2711.             doScrollDown("historyList");
  2712.             historyScrollTimer = setTimeout("historyScrollOn('historyScrollDown')", 100);
  2713.             break;
  2714.     }
  2715. }
  2716.  
  2717.  
  2718. function historyScrollOff(scrollerId) {
  2719.     clearTimeout(historyScrollTimer);
  2720. }
  2721.  
  2722. var currentHistoryArray = null;
  2723. var currentHistoryTitle = null;
  2724.  
  2725. function updateHistory() {
  2726.     if(historyDragWin.style.visibility == "visible")
  2727.         showHistory(currentHistoryArray, currentHistoryTitle);
  2728. }
  2729.  
  2730.  
  2731. function getIcon(mediaType) {
  2732.     var icon;
  2733.  
  2734.     if(mediaType == "case")
  2735.         icon = "case.jpg";
  2736.  
  2737.     else if(mediaType == "dossier")
  2738.         icon = "char.jpg";
  2739.  
  2740.     else if(mediaType == "audio")
  2741.         icon = "audio.jpg";
  2742.  
  2743.     else if(mediaType == "doc")
  2744.         icon = "document.jpg";
  2745.  
  2746.     else if(mediaType == "qtvr")
  2747.         icon = "evidence.jpg";
  2748.  
  2749.     else if(mediaType == "still")
  2750.         icon = "photo.jpg";
  2751.  
  2752.     else if(mediaType == "text")
  2753.         icon = "text.jpg";
  2754.  
  2755.     else if(mediaType == "video")
  2756.         icon = "video.jpg";
  2757.  
  2758.     else if(mediaType == "gloss")
  2759.         icon = "gloss.jpg";
  2760.  
  2761.     return(icon);
  2762. }
  2763.  
  2764. function showHistory(hist, title) {
  2765.     var i, icon, str, mediaType;
  2766.     var len, historyArray;
  2767.  
  2768.     currentHistoryTitle = title;
  2769.     currentHistoryArray = hist;
  2770.     historyArray = eval(hist);
  2771.  
  2772.     len = historyArray.length;
  2773.  
  2774.     historyTitleDrag.innerHTML = title;
  2775.  
  2776.     if(len <= 0)
  2777.         historyDiv.innerHTML = "<div id=historyList style='position:absolute; left:0; top:0'>" +
  2778.                                    "<br><br><center>There is nothing in the history list.</center></div>";
  2779.  
  2780.     else {
  2781.  
  2782.         str = "<div id=historyList style='position:absolute; left:0; top:0'>"
  2783.         str += "<table cellpadding=0 border=0 cellspacing=0 onClick=historyClick() style='cursor:hand; font:8pt courier'>"
  2784.  
  2785.         for(i = len - 1; i >= 0; i--) {
  2786.  
  2787.             mediaType = historyArray[i].mediaType;
  2788.  
  2789.             icon = getIcon(mediaType);
  2790.  
  2791.             str += "<tr id=" + i + "><td><img border=0 src=controls/search/" + icon + "></td>";
  2792.  
  2793.             str += "<td>" + historyArray[i].title + "</td></tr>";
  2794.         }
  2795.  
  2796.         str += "</table></div>";
  2797.  
  2798.         historyDiv.innerHTML = str;
  2799.     }
  2800.  
  2801.     if(historyDiv.clientHeight >= historyList.clientHeight) {
  2802.         historyScrollDown.style.visibility = "hidden";
  2803.         historyScrollUp.style.visibility = "hidden";
  2804.     }
  2805.  
  2806.     else {
  2807.         historyScrollDown.style.visibility = "visible";
  2808.         historyScrollUp.style.visibility = "visible";
  2809.     }
  2810.  
  2811.     focusWin(historyDragWin);
  2812. }
  2813.  
  2814. function historyClick() {
  2815.  
  2816.     var parent = event.srcElement;
  2817.     var mediaType, caseNum, filename, title, location, historyArray;
  2818.  
  2819.     while(parent.tagName != "TR")
  2820.         parent = parent.parentElement;
  2821.  
  2822.     historyArray = eval(currentHistoryArray);
  2823.  
  2824.     mediaType = historyArray[parent.id].mediaType;
  2825.     caseNum = historyArray[parent.id].caseNum;
  2826.     filename = historyArray[parent.id].filename;
  2827.     title = historyArray[parent.id].title;
  2828.     location = historyArray[parent.id].location;
  2829.  
  2830.     showMedia(mediaType, caseNum, title, filename, location, false, false);
  2831. }
  2832.  
  2833.  
  2834.  
  2835. //====================================================
  2836.  
  2837. //**********************************
  2838. // Functions for new updates window
  2839. //**********************************
  2840.  
  2841. var newupScrollTimer = null;
  2842.  
  2843. function newupClose() {
  2844.     return(true);
  2845. }
  2846.  
  2847. function newupOnClick(imgId) {
  2848. }
  2849.  
  2850. function newupScrollOn(scrollerId) {
  2851.  
  2852.     switch(scrollerId) {
  2853.         case "newupScrollUp":
  2854.             doScrollUp("newupDivInner");
  2855.             newupScrollTimer = setTimeout("newupScrollOn('newupScrollUp')", 100);
  2856.             break;
  2857.  
  2858.         case "newupScrollDown":
  2859.             doScrollDown("newupDivInner");
  2860.             newupScrollTimer = setTimeout("newupScrollOn('newupScrollDown')", 100);
  2861.             break;
  2862.     }
  2863. }
  2864.  
  2865. function newupScrollOff(scrollerId) {
  2866.     clearTimeout(newupScrollTimer);
  2867. }
  2868.  
  2869. function newupShow() {
  2870.     var i, icon, str, label;
  2871.     var len, j, caseNum, title, mediaType, filename;
  2872.  
  2873.     tagList.sortAscending = true;
  2874.     tagList.Sort = "title";
  2875.     tagList.caseSensitive = false;
  2876.  
  2877.     str = "<div id=newupDivInner style='position:absolute; left:0; top:0'>" +
  2878.           "<table cellpadding=0 border=0 cellspacing=0 onClick=newupClick() style='cursor:hand'>";
  2879.  
  2880.     for(i = 0; i < newUpdates.length; i++) {
  2881.  
  2882.         tagList.filter = "update=\"" + newUpdates[i] + "\"&category<>\"update\"";
  2883.  
  2884.         tagList.Reset();
  2885.  
  2886.         if(tagList.recordset.recordCount <= 0) {
  2887.  
  2888.             // (bug in tdc) reset tabular data control
  2889.             tagList.DataURL = "tags.txt";
  2890.  
  2891.             tagList.Reset();
  2892.         }
  2893.  
  2894.         len = tagList.recordset.recordCount;
  2895.  
  2896.         if(len > 0) {
  2897.  
  2898.             tagList.recordset.moveFirst();
  2899.  
  2900.             for(j = 0; j < len; j++) {
  2901.  
  2902.                 caseNum = tagList.recordset("caseNum") + "";
  2903.                 title = tagList.recordset("title") + "";
  2904.                 mediaType = tagList.recordset("mediaType") + "";
  2905.                 filename = tagList.recordset("filename") + "";
  2906.  
  2907.                 icon = getIcon(mediaType);
  2908.  
  2909.                 if(mediaType == "case")
  2910.                     label = caseNum;
  2911.  
  2912.                 else if(mediaType == "dossier")
  2913.                     label = caseNum + ":" + filename;
  2914.  
  2915.                 else
  2916.                     label = caseNum + ":" + mediaType + ":" + filename;
  2917.  
  2918.                 str += "<tr id=" + label + "><td><img border=0 src=controls/search/" + icon + "></td>" +
  2919.                        "<td>" + title + "</td></tr>";
  2920.  
  2921.                 tagList.recordset.moveNext();
  2922.             }
  2923.         }
  2924.     }
  2925.  
  2926.     str += "</table></div>";
  2927.  
  2928.     newupDiv.innerHTML = str;
  2929.  
  2930.     if(newupDiv.clientHeight >= newupDivInner.clientHeight) {
  2931.         newupScrollDown.style.visibility = "hidden";
  2932.         newupScrollUp.style.visibility = "hidden";
  2933.     }
  2934.  
  2935.     else {
  2936.         newupScrollDown.style.visibility = "visible";
  2937.         newupScrollUp.style.visibility = "visible";
  2938.     }
  2939.  
  2940.     focusWin(newupDragWin);
  2941. }
  2942.  
  2943. function newupClick() {
  2944.     var parent = event.srcElement;
  2945.  
  2946.     while(parent.tagName != "TR")
  2947.         parent = parent.parentElement;
  2948.  
  2949.     omw(parent.id);
  2950. }
  2951.  
  2952.  
  2953.  
  2954.  
  2955. //=====================================================
  2956.  
  2957. //*********************************
  2958. // Functions for video window
  2959. //*********************************
  2960.  
  2961. var videoCurrentFile = null;
  2962. var videoHistory = new Array();
  2963. var videoHistoryIndex = 0;
  2964. var videoBookmark = null;
  2965. var videoCurrentState = null;
  2966.  
  2967. function videoStateChange(oldState, newState) {
  2968.     videoCurrentState = newState;
  2969.  
  2970.     if(newState == 0)
  2971.         atmospherePlay();
  2972.  
  2973.     else if(newState == 2)
  2974.         if(atmosphereState == "play")
  2975.             atmosphereStop(false);
  2976. }
  2977.  
  2978.  
  2979. function videoError() {
  2980.  
  2981.     videoDragWin.style.visibility = "hidden";
  2982.  
  2983.     videoCurrentFile = null;
  2984.  
  2985.     setIconState(videoIcon, "inactive");
  2986. }
  2987.  
  2988. function videoClose() {
  2989.  
  2990.     if(videoWin.ReadyState == 1)
  2991.         return(false);
  2992.  
  2993.     videoWin.stop();
  2994.     videoCurrentFile = null;
  2995.     videoWin.style.visibility = "hidden";
  2996.  
  2997.     setIconState(videoIcon, "inactive");
  2998.  
  2999.     return(true);
  3000. }
  3001.  
  3002. function videoOnClick(imgId) {
  3003.     switch(imgId) {
  3004.  
  3005.         case "case":
  3006.             omw(videoBookmark.substring(0, 4));
  3007.             break;
  3008.  
  3009.         case "back":
  3010.             if(videoHistoryIndex > 0) {
  3011.                 videoHistoryIndex--;
  3012.                 showMediaFromHistory(videoHistory, videoHistoryIndex);
  3013.             }
  3014.             break;
  3015.  
  3016.         case "fwd":
  3017.             if(videoHistoryIndex < videoHistory.length - 1) {
  3018.                 videoHistoryIndex++;
  3019.                 showMediaFromHistory(videoHistory, videoHistoryIndex);
  3020.             }
  3021.             break;
  3022.  
  3023.         case "book":
  3024.             appendBookmark(videoBookmark);
  3025.             break;
  3026.  
  3027.         case "hist":
  3028.             showHistory("videoHistory", "Video History");
  3029.             break;
  3030.  
  3031.         case "help":
  3032.             helpShow("video");
  3033.             break;
  3034.     }
  3035. }
  3036.  
  3037. function videoLoad(filePath) {
  3038.  
  3039.     atmosphereStop();
  3040.  
  3041.     videoDiv.style.visibility = "hidden";
  3042.  
  3043.  
  3044.     videoDiv.innerHTML = "<object id=videoWin CLASSID='CLSID:05589FA1-C356-11CE-BF01-00AA0055595A' " +
  3045.                          "width=320 height=240 style='position:absolute; top:0; left:0'>" +
  3046.                          "<param name='FileName' VALUE='" + filePath + "'>" +
  3047.                          "<param name='ShowControls' VALUE='false'>" +
  3048.                          "<param name='ShowDisplay' VALUE='false'>" +
  3049.                          "<param name='BorderStyle' VALUE='0'>" +
  3050.                          "<param name='AutoStart' VALUE='1'>" +
  3051.                          "</object>";
  3052.  
  3053.     videoDiv.style.visibility = "visible";
  3054.     videoWin.style.visibility = "visible";
  3055. }
  3056.  
  3057.  
  3058. //=====================================================
  3059.  
  3060. //*********************************
  3061. // Functions for case file window
  3062. //*********************************
  3063.  
  3064. var caseHistory = new Array();
  3065. var caseHistoryIndex = 0;
  3066. var caseCurrentFile = null;
  3067. var caseBookmark = null;
  3068.  
  3069. function caseClose() {
  3070.     caseCurrentFile = null;
  3071.     setIconState(caseIcon, "inactive");
  3072.     return(true);
  3073. }
  3074.  
  3075.  
  3076. function caseKeyPress(key) {
  3077.  
  3078.     var pageHeight = caseFileDiv.clientHeight;
  3079.  
  3080.     if(key == "home") {
  3081.         scrollTop("caseFile");
  3082.         setScrollerState(caseScrollUp, false, "scroller");
  3083.         setScrollerState(caseScrollDown, true, "scroller");
  3084.     }
  3085.  
  3086.     else if(key == "end") {
  3087.         scrollBottom("caseFile");
  3088.         setScrollerState(caseScrollUp, true, "scroller");
  3089.         setScrollerState(caseScrollDown, false, "scroller");
  3090.     }
  3091.  
  3092.     else if(key == "up") {
  3093.         if(doScrollUp("caseFile", 20))
  3094.             setScrollerState(caseScrollDown, true, "scroller");
  3095.  
  3096.         else
  3097.             setScrollerState(caseScrollUp, false, "scroller");
  3098.     }
  3099.  
  3100.     else if(key == "down") {
  3101.         if(doScrollDown("caseFile", 20))
  3102.             setScrollerState(caseScrollUp, true, "scroller");
  3103.  
  3104.         else
  3105.             setScrollerState(caseScrollDown, false, "scroller");
  3106.     }
  3107.  
  3108.     else if(key == "pgup") {
  3109.  
  3110.         if(doScrollUp("caseFile", pageHeight))
  3111.             setScrollerState(caseScrollDown, true, "scroller");
  3112.  
  3113.         else
  3114.             setScrollerState(caseScrollUp, false, "scroller");
  3115.     }
  3116.  
  3117.     else if(key == "pgdn") {
  3118.  
  3119.         if(doScrollDown("caseFile", pageHeight))
  3120.             setScrollerState(caseScrollUp, true, "scroller");
  3121.  
  3122.         else
  3123.             setScrollerState(caseScrollDown, false, "scroller");
  3124.     }
  3125. }
  3126.  
  3127.  
  3128. function caseOnClick(imgId) {
  3129.  
  3130.     switch(imgId) {
  3131.  
  3132.         case "case":
  3133.             break;
  3134.  
  3135.         case "back":
  3136.             if(caseHistoryIndex > 0) {
  3137.                 caseHistoryIndex--;
  3138.                 showMediaFromHistory(caseHistory, caseHistoryIndex);
  3139.             }
  3140.             break;
  3141.  
  3142.         case "fwd":
  3143.             if(caseHistoryIndex < caseHistory.length - 1) {
  3144.                 caseHistoryIndex++;
  3145.                 showMediaFromHistory(caseHistory, caseHistoryIndex);
  3146.             }
  3147.             break;
  3148.  
  3149.         case "book":
  3150.             appendBookmark(caseBookmark);
  3151.             break;
  3152.  
  3153.         case "hist":
  3154.             showHistory("caseHistory", "Case Files History");
  3155.             break;
  3156.  
  3157.         case "help":
  3158.             helpShow("case");
  3159.             break;
  3160.     }
  3161. }
  3162.  
  3163.  
  3164.  
  3165. function caseCallBack() {
  3166.  
  3167.     if(caseFileDiv.clientHeight >= caseFile.clientHeight) {
  3168.         caseScrollDown.style.visibility = "hidden";
  3169.         caseScrollUp.style.visibility = "hidden";
  3170.     }
  3171.  
  3172.     else {
  3173.         caseScrollDown.style.visibility = "visible";
  3174.         caseScrollUp.style.visibility = "visible";
  3175.     }
  3176.  
  3177.     focusWin(caseDragWin);
  3178. }
  3179.  
  3180. var caseScrollTimer = null;
  3181.  
  3182. function caseScrollOn(scrollerId) {
  3183.  
  3184.     switch(scrollerId) {
  3185.         case "caseScrollUp":
  3186.  
  3187.             if(doScrollUp("caseFile")) {
  3188.                 setScrollerState(caseScrollDown, true, "scroller");
  3189.                 caseScrollTimer = setTimeout("caseScrollOn('caseScrollUp')", 100);
  3190.             }
  3191.  
  3192.             else
  3193.                 setScrollerState(caseScrollUp, false, "scroller");
  3194.  
  3195.             break;
  3196.  
  3197.         case "caseScrollDown":
  3198.             if(doScrollDown("caseFile")) {
  3199.                 setScrollerState(caseScrollUp, true, "scroller");
  3200.                 caseScrollTimer = setTimeout("caseScrollOn('caseScrollDown')", 100);
  3201.             }
  3202.  
  3203.             else
  3204.                 setScrollerState(caseScrollDown, false, "scroller");
  3205.  
  3206.             break;
  3207.     }
  3208. }
  3209.  
  3210. function caseScrollOff(scrollerId) {
  3211.     clearTimeout(caseScrollTimer);
  3212. }
  3213.  
  3214.  
  3215. //=====================================================
  3216.  
  3217. //*********************************
  3218. // Functions for dossier window
  3219. //*********************************
  3220.  
  3221. var dossierHistory = new Array();
  3222. var dossierCurrentFile = null;
  3223. var dossierHistoryIndex = 0;
  3224. var dossierBookmark = null;
  3225.  
  3226. function dossierClose() {
  3227.     dossierCurrentFile = null;
  3228.     setIconState(dossierIcon, "inactive");
  3229.     return(true);
  3230. }
  3231.  
  3232. function dossierKeyPress(key) {
  3233.     var pageHeight = dossierDiv.clientHeight;
  3234.  
  3235.     if(key == "home") {
  3236.         scrollTop("dossierFile");
  3237.         setScrollerState(dossierScrollUp, false, "scroller");
  3238.         setScrollerState(dossierScrollDown, true, "scroller");
  3239.     }
  3240.  
  3241.     else if(key == "end") {
  3242.         scrollBottom("dossierFile");
  3243.         setScrollerState(dossierScrollUp, true, "scroller");
  3244.         setScrollerState(dossierScrollDown, false, "scroller");
  3245.     }
  3246.  
  3247.     else if(key == "up") {
  3248.         if(doScrollUp("dossierFile", 20))
  3249.             setScrollerState(dossierScrollDown, true, "scroller");
  3250.  
  3251.         else
  3252.             setScrollerState(dossierScrollUp, false, "scroller");
  3253.     }
  3254.  
  3255.     else if(key == "down") {
  3256.         if(doScrollDown("dossierFile", 20))
  3257.             setScrollerState(dossierScrollUp, true, "scroller");
  3258.  
  3259.         else
  3260.             setScrollerState(dossierScrollDown, false, "scroller");
  3261.     }
  3262.  
  3263.     else if(key == "pgup") {
  3264.         if(doScrollUp("dossierFile", pageHeight))
  3265.             setScrollerState(dossierScrollDown, true, "scroller");
  3266.  
  3267.         else
  3268.             setScrollerState(dossierScrollUp, false, "scroller");
  3269.     }
  3270.  
  3271.     else if(key == "pgdn") {
  3272.         if(doScrollDown("dossierFile", pageHeight))
  3273.             setScrollerState(dossierScrollUp, true, "scroller");
  3274.  
  3275.         else
  3276.             setScrollerState(dossierScrollDown, false, "scroller");
  3277.     }
  3278. }
  3279.  
  3280.  
  3281. function dossierOnClick(imgId) {
  3282.  
  3283.     switch(imgId) {
  3284.         case "dossierScrollUp":
  3285.             doScrollUp("dossierFile");
  3286.             break;
  3287.  
  3288.         case "dossierScrollDown":
  3289.             doScrollDown("dossierFile");
  3290.             break;
  3291.  
  3292.         case "case":
  3293.             omw(dossierBookmark.substring(0, 4));
  3294.             break;
  3295.  
  3296.         case "back":
  3297.             if(dossierHistoryIndex > 0) {
  3298.                 dossierHistoryIndex--;
  3299.                 showMediaFromHistory(dossierHistory, dossierHistoryIndex);
  3300.             }
  3301.             break;
  3302.  
  3303.         case "fwd":
  3304.             if(dossierHistoryIndex < dossierHistory.length - 1) {
  3305.                 dossierHistoryIndex++;
  3306.                 showMediaFromHistory(dossierHistory, dossierHistoryIndex);
  3307.             }
  3308.             break;
  3309.  
  3310.         case "hist":
  3311.             showHistory("dossierHistory", "Dossiers History");
  3312.             break;
  3313.  
  3314.         case "book":
  3315.             appendBookmark(dossierBookmark);
  3316.             break;
  3317.  
  3318.         case "help":
  3319.             helpShow("dossier");
  3320.             break;
  3321.     }
  3322. }
  3323.  
  3324. function dossierCallBack() {
  3325.  
  3326.     if(dossierDiv.clientHeight >= dossierFile.clientHeight) {
  3327.         dossierScrollDown.style.visibility = "hidden";
  3328.         dossierScrollUp.style.visibility = "hidden";
  3329.     }
  3330.  
  3331.     else {
  3332.         dossierScrollDown.style.visibility = "visible";
  3333.         dossierScrollUp.style.visibility = "visible";
  3334.     }
  3335.  
  3336.     focusWin(dossierDragWin);
  3337. }
  3338.  
  3339. var dossierScrollTimer = null;
  3340.  
  3341.  
  3342.  
  3343. function dossierScrollOn(scrollerId) {
  3344.  
  3345.     switch(scrollerId) {
  3346.         case "dossierScrollUp":
  3347.  
  3348.             if(doScrollUp("dossierFile")) {
  3349.                 setScrollerState(dossierScrollDown, true, "scroller");
  3350.                 dossierScrollTimer = setTimeout("dossierScrollOn('dossierScrollUp')", 50);
  3351.             }
  3352.             else
  3353.                 setScrollerState(dossierScrollUp, false, "scroller");
  3354.  
  3355.             break;
  3356.  
  3357.         case "dossierScrollDown":
  3358.  
  3359.             if(doScrollDown("dossierFile")) {
  3360.                 setScrollerState(dossierScrollUp, true, "scroller");
  3361.                 dossierScrollTimer = setTimeout("dossierScrollOn('dossierScrollDown')", 50);
  3362.             }
  3363.             else
  3364.                 setScrollerState(dossierScrollDown, false, "scroller");
  3365.  
  3366.             break;
  3367.     }
  3368. }
  3369.  
  3370. function dossierScrollOff(scrollerId) {
  3371.     clearTimeout(dossierScrollTimer);
  3372. }
  3373.  
  3374.  
  3375. //=====================================================
  3376.  
  3377. //*********************************
  3378. // Functions for comm window
  3379. //*********************************
  3380.  
  3381. var commHistory = new Array();
  3382. var commCurrentFile = null;
  3383. var commHistoryIndex = 0;
  3384. var commBookmark = null;
  3385. var commInitComplete = false;
  3386. var commUpdatePeriod;
  3387. var commUpdateLastChecked;
  3388. var commCookieName = "XFUA:Comm";
  3389.  
  3390. function commInit() {
  3391.  
  3392.     commLoadPage("comm.htm", true);
  3393.  
  3394.     commInitComplete = true;
  3395. }
  3396.  
  3397. function commClose() {
  3398.     commCurrentFile = null;
  3399. //    setAtmosphere();
  3400.     return(true);
  3401. }
  3402.  
  3403.  
  3404. function commLoadPage(url, addToHistory) {
  3405.     commFrame.location = url;
  3406.  
  3407.     if(addToHistory) {
  3408.         commHistoryIndex = commHistory.length;
  3409.         commHistory[commHistoryIndex] = url;
  3410.     }
  3411. }
  3412.  
  3413. function commXfuaClick(x, y) {
  3414.  
  3415.     if(x < 295 && y < 26)
  3416.         commLoadPage("updates.htm", true);
  3417.  
  3418.     else if(x > 38 && x < 176 && y > 40 && y < 63)
  3419.         commLoadPage("http://www.xfua.com/main.html", true);
  3420.  
  3421.     else if(x > 133 && x < 359 && y > 82 && y < 107)
  3422.         commLoadPage("http://www.xfua.com/help.html", true);
  3423.  
  3424.     else if(x > 201 && x < 396 && y > 120 && y < 146)
  3425.         commShowPrefs();
  3426. }
  3427.  
  3428. function commGetPrefs() {
  3429.     var cookie = GetCookie(commCookieName);
  3430.     var cookieArray;
  3431.  
  3432.     if(cookie != null) {
  3433.         cookieArray = cookie.split(";");
  3434.  
  3435.         commUpdatePeriod = cookieArray[0];
  3436.         commUpdateLastChecked = cookieArray[1];
  3437.     }
  3438.  
  3439.     else {
  3440.         commUpdatePeriod = "never";
  3441.         commUpdateLastChecked = "0";
  3442.         commSetPrefs();
  3443.     }
  3444. }
  3445.  
  3446. function commSetPrefs() {
  3447.     var expdate = new Date();
  3448.     var label;
  3449.  
  3450.     label = commUpdatePeriod + ";" + commUpdateLastChecked;
  3451.  
  3452.     expdate.setTime(expdate.getTime() + (100 * 365 * 24 * 60 * 60 * 1000));
  3453.  
  3454.     SetCookie(commCookieName, label, expdate, "/");
  3455. }
  3456.  
  3457. function commShowPrefs() {
  3458.     commUpdatePrefs = "never";
  3459.  
  3460.     commLoadPage("prefs.htm", false);
  3461. }
  3462.  
  3463.  
  3464. function commClosePrefs(action, newPref) {
  3465.  
  3466.     commLoadPage("comm.htm", false);
  3467.  
  3468.     if(action == "ok") {
  3469.         commUpdatePeriod = newPref;
  3470.         commSetPrefs();
  3471.     }
  3472. }
  3473.  
  3474.  
  3475. function commOnClick(imgId) {
  3476.  
  3477.     switch(imgId) {
  3478.         case "commScrollUp":
  3479.             doScrollUp("commFile");
  3480.             break;
  3481.  
  3482.         case "commScrollDown":
  3483.             doScrollDown("commFile");
  3484.             break;
  3485.  
  3486.         case "home":
  3487.             commInit();
  3488.             break;
  3489.  
  3490.         case "help":
  3491.             helpShow("comm");
  3492.             break;
  3493.     }
  3494. }
  3495.  
  3496. function commCallBack() {
  3497.  
  3498.     if(commDiv.clientHeight >= commFile.clientHeight) {
  3499.         commScrollDown.style.visibility = "hidden";
  3500.         commScrollUp.style.visibility = "hidden";
  3501.     }
  3502.  
  3503.     else {
  3504.         commScrollDown.style.visibility = "visible";
  3505.         commScrollUp.style.visibility = "visible";
  3506.     }
  3507. }
  3508.  
  3509. var commScrollTimer = null;
  3510.  
  3511. function commScrollOn(scrollerId) {
  3512.  
  3513.     switch(scrollerId) {
  3514.         case "commScrollUp":
  3515.             doScrollUp("commFile");
  3516.             commScrollTimer = setTimeout("commScrollOn('commScrollUp')", 50);
  3517.             break;
  3518.  
  3519.         case "commScrollDown":
  3520.             doScrollDown("commFile");
  3521.             commScrollTimer = setTimeout("commScrollOn('commScrollDown')", 50);
  3522.             break;
  3523.     }
  3524. }
  3525.  
  3526. function commScrollOff(scrollerId) {
  3527.     clearTimeout(commScrollTimer);
  3528. }
  3529.  
  3530.  
  3531.  
  3532.  
  3533.  
  3534. //========================================================
  3535.  
  3536. //************************************
  3537. // Temporary iframe for sourcing divs
  3538. //************************************
  3539.  
  3540. var currentDiv = null;
  3541. var currentInnerDiv = null;
  3542. var currentCallBack = null;
  3543. var currentHeadText = null;
  3544.  
  3545. function loadDiv(divId, innerDivId, filename, headText, callBack) {
  3546.     currentDiv = divId;
  3547.     currentInnerDiv = innerDivId;
  3548.     currentCallBack = callBack;
  3549.     currentHeadText = headText;
  3550.  
  3551.     tempFrame.location = filename;
  3552. }
  3553.  
  3554. function tempFrameOnLoad() {
  3555.  
  3556.     if(currentDiv == null)
  3557.         return;
  3558.  
  3559.     if(currentHeadText == "")
  3560.         currentDiv.innerHTML = "<div id=" + currentInnerDiv + " style='position:absolute; left:0; top:0'>" +
  3561.                                tempFrame.document.body.innerHTML +
  3562.                                "</div>";
  3563.  
  3564.     else
  3565.         currentDiv.innerHTML = "<div id=" + currentInnerDiv + " style='position:absolute; left:0; top:0'>" +
  3566.                                currentHeadText + tempFrame.document.body.innerHTML +
  3567.                                "</div>";
  3568.  
  3569.     currentDiv = null;
  3570.     currentInnerDiv = null;
  3571.  
  3572.     if(currentCallBack != null)
  3573.         eval(currentCallBack);
  3574.  
  3575.     tempFrame.document.body.innerHTML = "";
  3576.     currentCallBack = null;
  3577. }
  3578.  
  3579.  
  3580. //=====================================================
  3581.  
  3582. //*********************************
  3583. // Functions for audio window
  3584. //*********************************
  3585.  
  3586. var audioCurrentFile = null;
  3587. var audioHistory = new Array();
  3588. var audioHistoryIndex = 0;
  3589. var audioBookmark = null;
  3590. var audioCurrentState = null;
  3591.  
  3592. function audioStateChange(oldState, newState) {
  3593.     audioCurrentState = newState;
  3594.  
  3595.     if(newState == 0)
  3596.         atmospherePlay();
  3597.  
  3598.     else if(newState == 2)
  3599.         if(atmosphereState == "play")
  3600.             atmosphereStop(false);
  3601. }
  3602.  
  3603. function audioError() {
  3604.  
  3605.     audioDragWin.style.visibilty = "hidden";
  3606.  
  3607.     audioCurrentFile = null;
  3608.  
  3609.     setIconState(audioIcon, "inactive");
  3610. }
  3611.  
  3612. function audioClose() {
  3613.  
  3614.     if(audioWin.ReadyState == 1)
  3615.         return(false);
  3616.  
  3617.     audioWin.stop();
  3618.     audioCurrentFile = null;
  3619.  
  3620.     audioWin.style.visibility = "hidden";
  3621.  
  3622.     setIconState(audioIcon, "inactive");
  3623.  
  3624.     return(true);
  3625. }
  3626.  
  3627.  
  3628. function audioOnClick(imgId) {
  3629.     switch(imgId) {
  3630.  
  3631.         case "case":
  3632.             omw(audioBookmark.substring(0, 4));
  3633.             break;
  3634.  
  3635.         case "back":
  3636.             if(audioHistoryIndex > 0) {
  3637.                 audioHistoryIndex--;
  3638.                 showMediaFromHistory(audioHistory, audioHistoryIndex);
  3639.             }
  3640.             break;
  3641.  
  3642.         case "fwd":
  3643.             if(audioHistoryIndex < audioHistory.length - 1) {
  3644.                 audioHistoryIndex++;
  3645.                 showMediaFromHistory(audioHistory, audioHistoryIndex);
  3646.             }
  3647.             break;
  3648.  
  3649.         case "book":
  3650.             appendBookmark(audioBookmark);
  3651.             break;
  3652.  
  3653.         case "hist":
  3654.             showHistory("audioHistory", "Audio History");
  3655.             break;
  3656.  
  3657.         case "help":
  3658.             helpShow("audio");
  3659.             break;
  3660.     }
  3661. }
  3662.  
  3663. function audioLoad(filePath) {
  3664.     atmosphereStop();
  3665.  
  3666.     audioDiv.innerHTML = "<object id=audioWin CLASSID='CLSID:05589FA1-C356-11CE-BF01-00AA0055595A' " +
  3667.                          "width=175 height=190 style='position:absolute; top:0; left:0'>" +
  3668.                          "<param name='FileName' VALUE='" + filePath + "'>" +
  3669.                          "<param name='ShowControls' VALUE='false'>" +
  3670.                          "<param name='ShowDisplay' VALUE='false'>" +
  3671.                          "<param name='BorderStyle' VALUE='0'>" +
  3672.                          "<param name='AutoStart' VALUE='1'>" +
  3673.                          "</object>";
  3674. }
  3675.  
  3676. //===================================================================
  3677.  
  3678. //*************************************
  3679. // Functions for maintaining bookmarks
  3680. //*************************************
  3681.  
  3682. var bookmarksName = "XFUA:Bookmarks";
  3683. var bookmarksArray;
  3684. var bookmarksCount = 0;
  3685.  
  3686. function appendBookmark(label) {
  3687.     var expdate = new Date();
  3688.     var val;
  3689.  
  3690.     if(label == "" || label == null) {
  3691. //        alert("Bookmark Failed");
  3692.         return;
  3693.     }
  3694.  
  3695.     val = GetCookie(bookmarksName);
  3696.  
  3697.     if(val == null)
  3698.         val = "";
  3699.  
  3700.     expdate.setTime(expdate.getTime() + (100 * 365 * 24 * 60 * 60 * 1000)); // 1 hr from now
  3701.  
  3702.     SetCookie(bookmarksName, label + ";" + val, expdate, "/");
  3703.  
  3704.  
  3705.     if(bookDragWin.style.visibility == "visible")
  3706.         showBookmarks();
  3707. }
  3708.  
  3709.  
  3710. function deleteBookmarks() {
  3711.     DeleteCookie(bookmarksName, "/");
  3712. }
  3713.  
  3714.  
  3715. function bookClose() {
  3716.     var i, checkId, newBookmarks = "";
  3717.     var expdate = new Date(), count = 0;
  3718.  
  3719.     for(i = 0; i < bookmarksCount; i++) {
  3720.  
  3721.         checkId = eval("check_" + i);
  3722.  
  3723.         // if bookmark not checked then add to new set of bookmarks
  3724.         if(checkId.src.indexOf("_c.jpg") < 0) {
  3725.             count++;
  3726.  
  3727.             newBookmarks += bookmarksArray[i] + ";";
  3728.         }
  3729.     }
  3730.  
  3731.     if(count != bookmarksCount) {
  3732.         expdate.setTime(expdate.getTime() + (100 * 365 * 24 * 60 * 60 * 1000)); // 1 hr from now
  3733.  
  3734.         SetCookie(bookmarksName, newBookmarks, expdate, "/");
  3735.     }
  3736.  
  3737.     return(true);
  3738. }
  3739.  
  3740.  
  3741. function bookOnClick(imgId) {
  3742.  
  3743.     switch(imgId) {
  3744.         case "bookScrollUp":
  3745.             doScrollUp("bookList");
  3746.             break;
  3747.  
  3748.         case "bookScrollDown":
  3749.             doScrollDown("bookList");
  3750.             break;
  3751.     }
  3752. }
  3753.  
  3754. function bookCallBack() {
  3755.  
  3756.     if(bookDiv.clientHeight >= bookList.clientHeight) {
  3757.         bookScrollDown.style.visibility = "hidden";
  3758.         bookScrollUp.style.visibility = "hidden";
  3759.     }
  3760.  
  3761.     else {
  3762.         bookScrollDown.style.visibility = "visible";
  3763.         bookScrollUp.style.visibility = "visible";
  3764.     }
  3765. }
  3766.  
  3767. var bookScrollTimer = null;
  3768.  
  3769. function bookScrollOn(scrollerId) {
  3770.  
  3771.     switch(scrollerId) {
  3772.         case "bookScrollUp":
  3773.             doScrollUp("bookList");
  3774.             bookScrollTimer = setTimeout("bookScrollOn('bookScrollUp')", 100);
  3775.             break;
  3776.  
  3777.         case "bookScrollDown":
  3778.             doScrollDown("bookList");
  3779.             bookScrollTimer = setTimeout("bookScrollOn('bookScrollDown')", 100);
  3780.             break;
  3781.     }
  3782. }
  3783.  
  3784.  
  3785. function bookScrollOff(scrollerId) {
  3786.     clearTimeout(bookScrollTimer);
  3787. }
  3788.  
  3789.  
  3790. function bookClick() {
  3791.  
  3792.     var parent = event.srcElement;
  3793.     var label, suffix;
  3794.  
  3795.     if(parent.name == "check") {
  3796.  
  3797.         if(parent.src.indexOf("_u.jpg") >= 0)
  3798.             suffix = "c.jpg";
  3799.         else
  3800.             suffix = "u.jpg";
  3801.  
  3802.         parent.src = parent.src.substring(0, parent.src.length - 5) + suffix;
  3803.     }
  3804.  
  3805.     else {
  3806.  
  3807.         while(parent.tagName != "TR")
  3808.             parent = parent.parentElement;
  3809.  
  3810.         label = bookmarksArray[parent.id];
  3811.  
  3812.         omw(label);
  3813.     }
  3814. }
  3815.  
  3816. function parseBookmarks() {
  3817.     var bookmarks;
  3818.  
  3819.     bookmarks = GetCookie(bookmarksName);
  3820.  
  3821.     if(bookmarks == null) {
  3822.         bookmarksCount = 0;
  3823.         return false;
  3824.     }
  3825.  
  3826.     bookmarksArray = bookmarks.split(";");
  3827.  
  3828.     bookmarksCount = bookmarksArray.length - 1;
  3829.  
  3830.     return true;
  3831. }
  3832.  
  3833. function showBookmarks() {
  3834.     var i, icon, str, mediaType;
  3835.     var len, splitArray, splitLen;
  3836.     var record, caseNum, title, filename;
  3837.  
  3838.     if(!parseBookmarks())
  3839.         bookDiv.innerHTML = "<div id=bookList style='position:absolute; left:0; top:0'>" +
  3840.                                    "<br><br><center>There is nothing in the bookmarks list.</center></div>";
  3841.  
  3842.     else {
  3843.  
  3844.         len = bookmarksCount;
  3845.  
  3846.         str = "<div id=bookList style='position:absolute; left:0; top:0'>"
  3847.         str += "<table width=270 cellpadding=0 border=0 cellspacing=0 onClick=bookClick() style='cursor:hand; font:8pt courier'>"
  3848.  
  3849.         for(i = 0; i < len; i++) {
  3850.  
  3851.             splitArray = bookmarksArray[i].split(":");
  3852.             splitLen = splitArray.length;
  3853.  
  3854.             caseNum = splitArray[0];
  3855.  
  3856.             if(splitLen == 1) {
  3857.                 mediaType = "case";
  3858.                 filename = "";
  3859.                 tagList.filter = "category=\"case\"&caseNum=\"" + caseNum + "\"";
  3860.             }
  3861.  
  3862.             else if(splitLen == 2) {
  3863.                 mediaType = "dossier";
  3864.                 filename = splitArray[1];
  3865.  
  3866.                 tagList.filter = "category=\"dossier\"&caseNum=\"" + caseNum +
  3867.                                  "\"&filename=\"" + filename + "\"";
  3868.             }
  3869.  
  3870.             else {
  3871.                 mediaType = splitArray[1];
  3872.                 filename = splitArray[2];
  3873.  
  3874.                 tagList.filter = "category=\"evid\"&caseNum=\"" + caseNum + "\"" +
  3875.                                  "&mediaType=\"" + mediaType + "\"" +
  3876.                                  "&filename=\"" + filename + "\"";
  3877.             }
  3878.  
  3879.             tagList.Reset();
  3880.  
  3881.             if(tagList.recordset.recordCount <= 0) {
  3882.  
  3883.                 // (bug in tdc) reset tabular data control
  3884.                 tagList.DataURL = "tags.txt";
  3885.  
  3886.                 tagList.Reset();
  3887.             }
  3888.  
  3889.             if(tagList.recordset.recordCount > 0) {
  3890.                 tagList.recordset.moveFirst();
  3891.                 title = tagList.recordset("title");
  3892.             }
  3893.  
  3894.             else
  3895.                 title = "Missing Record";
  3896.  
  3897.             icon = getIcon(mediaType);
  3898.  
  3899.             str += "<tr id=" + i + "><td><img border=0 src=controls/search/" + icon + "></td>";
  3900.  
  3901.             str += "<td>" + title + "</td>";
  3902.  
  3903.             str += "<td align=right><img id=check_" + i + " name=check src=controls/media/radior_u.jpg></td></tr>";
  3904.         }
  3905.  
  3906.         str += "</table></div>";
  3907.  
  3908.         bookDiv.innerHTML = str;
  3909.     }
  3910.  
  3911.     if(bookDiv.clientHeight >= bookList.clientHeight) {
  3912.         bookScrollDown.style.visibility = "hidden";
  3913.         bookScrollUp.style.visibility = "hidden";
  3914.     }
  3915.  
  3916.     else {
  3917.         bookScrollDown.style.visibility = "visible";
  3918.         bookScrollUp.style.visibility = "visible";
  3919.     }
  3920.  
  3921.     focusWin(bookDragWin);
  3922. }
  3923.  
  3924.  
  3925.  
  3926. //========================================================================
  3927.  
  3928. //**************************************
  3929. // Functions for surveillance window
  3930. //**************************************
  3931.  
  3932. var survScrollTimer = null;
  3933. var survInitComplete = false;
  3934. var survCastArray = new Array("fox", "dana", "w_skinne", "csm", "d_throat", "x", "krycek",
  3935.                               "byers", "langly", "frohike", "s_mulder", "m_mulder",
  3936.                               "m_scully", "m_covarr", "assassin", "s_blevin");
  3937. var survCurrentChar = null;
  3938. var survQtvrCurrentThumb;
  3939. var survStartRec = 0;
  3940. var survCurrentThumbsCount = 0;
  3941. var survMediaArray;
  3942. var survMediaArrayIndex = 0;
  3943. var survHasMedia, survHasQtvr;
  3944. var survLastRec = 0;
  3945. var survGridArray;
  3946. var survGridArrayIndex;
  3947.  
  3948. function survAVStateChange(oldState, newState) {
  3949.  
  3950.     if(newState == 0)
  3951.         atmospherePlay();
  3952.  
  3953.     else if(newState == 2)
  3954.         if(atmosphereState == "play")
  3955.             atmosphereStop(false);
  3956. }
  3957.  
  3958. function survScrollOn(scrollerId) {
  3959.  
  3960.     switch(scrollerId) {
  3961.         case "survCastScrollUp":
  3962.  
  3963.             if(doScrollUp("survCastDivInner")) {
  3964.                 setScrollerState(survCastScrollDown, true, "scroller");
  3965.                 survScrollTimer = setTimeout("survScrollOn('survCastScrollUp')", 100);
  3966.             }
  3967.  
  3968.             else
  3969.                 setScrollerState(survCastScrollUp, false, "scroller");
  3970.  
  3971.             break;
  3972.  
  3973.         case "survCastScrollDown":
  3974.  
  3975.             if(doScrollDown("survCastDivInner")) {
  3976.                 setScrollerState(survCastScrollUp, true, "scroller");
  3977.                 survScrollTimer = setTimeout("survScrollOn('survCastScrollDown')", 100);
  3978.             }
  3979.  
  3980.             else
  3981.                 setScrollerState(survCastScrollDown, false, "scroller");
  3982.  
  3983.             break;
  3984.  
  3985.  
  3986.         case "survMediaScrollUp":
  3987.  
  3988.             if(survGridArrayIndex > 0) {
  3989.                 survGridArrayIndex--;
  3990.                 survStartRec = survGridArray[survGridArrayIndex];
  3991.                 survShowThumbs();
  3992.             }
  3993.  
  3994.             break;
  3995.  
  3996.         case "survMediaScrollDown":
  3997.  
  3998.             survGridArrayIndex++;
  3999.             survStartRec = survGridArray[survGridArrayIndex];
  4000.  
  4001.             survShowThumbs();
  4002.             break;
  4003.  
  4004.  
  4005.         case "survQtvrScrollRight":
  4006.  
  4007.             if(doScrollRight("survQtvrDivInner")) {
  4008.                 setScrollerState(survQtvrScrollLeft, true, "scroller");
  4009.                 survScrollTimer = setTimeout("survScrollOn('survQtvrScrollRight')", 100);
  4010.             }
  4011.  
  4012.             else
  4013.                 setScrollerState(survQtvrScrollRight, false, "scroller");
  4014.  
  4015.             break;
  4016.  
  4017.         case "survQtvrScrollLeft":
  4018.  
  4019.             if(doScrollLeft("survQtvrDivInner")) {
  4020.                 setScrollerState(survQtvrScrollRight, true, "scroller");
  4021.                 survScrollTimer = setTimeout("survScrollOn('survQtvrScrollLeft')", 100);
  4022.             }
  4023.  
  4024.             else
  4025.                 setScrollerState(survQtvrScrollLeft, false, "scroller");
  4026.  
  4027.             break;
  4028.     }
  4029. }
  4030.  
  4031. function survScrollOff(scrollerId) {
  4032.     clearTimeout(survScrollTimer);
  4033. }
  4034.  
  4035.  
  4036.  
  4037. function survInit() {
  4038.     var str, i, img;
  4039.  
  4040.     str = "<div id=survCastDivInner style='position:absolute; left:0' top:0'>";
  4041.  
  4042.     for(i = 0; i < survCastArray.length; i++)
  4043.         str += "<img vspace=3 name=survCastImg src=controls/surv/heads/" + survCastArray[i] + ".jpg id=cast" + survCastArray[i] + " style='filter:light(enabled=0) invert(enabled=0)'><br>";
  4044.  
  4045.     str += "</div>";
  4046.  
  4047.     survCastDiv.innerHTML = str;
  4048.  
  4049.     for(i = 0; i < survCastArray.length; i++) {
  4050.  
  4051.         img = eval("cast" + survCastArray[i]);
  4052.  
  4053.         img.filters(0).addAmbient(255,255,255,100);
  4054.         img.filters(0).addAmbient(255,255,255,100);
  4055.         img.filters(0).addAmbient(255,255,255,120);
  4056.     }
  4057.  
  4058.     survCastScrollUp.style.visibility = "visible";
  4059.     survCastScrollDown.style.visibility = "visible";
  4060.  
  4061.     survInitComplete = true;
  4062. }
  4063.  
  4064. function survClose() {
  4065.     var oldChar;
  4066.  
  4067.     survWriteFrame("");
  4068.  
  4069.     survTextDiv.innerHTML = "";
  4070.  
  4071.     survQtvrDiv.style.visibility = "hidden";
  4072.     survQtvrScrollLeft.style.visibility = "hidden";
  4073.     survQtvrScrollRight.style.visibility = "hidden";
  4074.     survMediaForwd.style.visibility = "hidden";
  4075.     survMediaBack.style.visibility = "hidden";
  4076.     survMediaClose.style.visibility = "hidden";
  4077.     survMediaScrollUp.style.visibility = "hidden";
  4078.     survMediaScrollDown.style.visibility = "hidden";
  4079.     survTextDiv.style.visibility = "hidden";
  4080.     survCaseImg.style.visibility = "hidden";
  4081.  
  4082.     survLockImg.style.visibility = "hidden";
  4083.     survDossierImg.style.visibility = "hidden";
  4084.     survVideoImg.style.visibility = "hidden";
  4085.  
  4086.     scrollTop("survCastDivInner");
  4087.  
  4088.     if(survCurrentChar != null) {
  4089.         oldChar = eval("cast" + survCurrentChar);
  4090.         oldChar.filters(0).enabled = 0;
  4091.         oldChar.filters(1).enabled = 0;
  4092.         survCurrentChar = null;
  4093.     }
  4094.  
  4095. //    setAtmosphere();
  4096.  
  4097.     return(true);
  4098. }
  4099.  
  4100. function survShowDossier() {
  4101.  
  4102.     if(survCurrentChar == "m_covarr")
  4103.         omw("3x24:m_covarr");
  4104.     
  4105.     else if(survCurrentChar == "assassin")
  4106.           omw("2x16:assassin");
  4107.  
  4108.     else
  4109.         omw("1x00:" + survCurrentChar);
  4110. }
  4111.  
  4112. function survFrameOnClick() {
  4113.  
  4114. //    alert(event.srcElement.id);
  4115.  
  4116. }
  4117.  
  4118.  
  4119. function survShowCaseFile() {
  4120.     var caseNum;
  4121.  
  4122.     survTagList.recordset.moveFirst();
  4123.     survTagList.recordset.move(survMediaArray[survMediaArrayIndex]);
  4124.  
  4125.     caseNum = survTagList.recordset("caseNum") + "";
  4126.  
  4127.     omw(caseNum);
  4128. }
  4129.  
  4130. function survOnClick(imgId) {
  4131.     var srcElem;
  4132.  
  4133.     if(imgId.indexOf("cast") >= 0)
  4134.         survCompileThumbs(imgId);
  4135.  
  4136.     else if(imgId == "survLockImg")
  4137.         survShowThumbs();
  4138.  
  4139.     else if(imgId == "survVideoImg")
  4140.         survShowQtvr();
  4141.  
  4142.     else if(imgId == "survCaseImg")
  4143.         survShowCaseFile();
  4144.  
  4145.     else if(imgId == "survDossierImg")
  4146.         survShowDossier();
  4147.  
  4148.     else if(imgId == "survMediaForwd") {
  4149.         if(survMediaArrayIndex < survMediaArray.length - 1) {
  4150.             survMediaArrayIndex++;
  4151.             survShowMedia(survMediaArrayIndex);
  4152.             survSetArrowStates();
  4153.         }
  4154.     }
  4155.  
  4156.     else if(imgId == "survMediaBack") {
  4157.         if(survMediaArrayIndex > 0) {
  4158.             survMediaArrayIndex--;
  4159.             survShowMedia(survMediaArrayIndex);
  4160.             survSetArrowStates();
  4161.         }
  4162.     }
  4163.  
  4164.     else if(imgId == "survMediaClose")
  4165.         survShowThumbs();
  4166.  
  4167.     else if(imgId.indexOf("thumb") >= 0)
  4168.         survShowMedia(imgId.substring(5, imgId.length));
  4169.  
  4170.     else if(imgId.indexOf("qtvr") >= 0)
  4171.         survChangeQtvr(imgId);
  4172. }
  4173.  
  4174.  
  4175. function survSetArrowStates() {
  4176.     var imgPrefix;
  4177.     var imgSuffix;
  4178.  
  4179.     imgPrefix = survMediaForwd.src.substring(0, survMediaForwd.src.length - 5);
  4180.  
  4181.     if(survMediaArrayIndex >= survMediaArray.length - 1)
  4182.         imgSuffix = "i.jpg";
  4183.     else
  4184.         imgSuffix = "u.jpg";
  4185.  
  4186.     survMediaForwd.src = imgPrefix + imgSuffix;
  4187.  
  4188.  
  4189.     imgPrefix = survMediaBack.src.substring(0, survMediaBack.src.length - 5);
  4190.  
  4191.     if(survMediaArrayIndex < 1)
  4192.         imgSuffix = "i.jpg";
  4193.     else
  4194.         imgSuffix = "u.jpg";
  4195.  
  4196.     survMediaBack.src = imgPrefix + imgSuffix;
  4197. }
  4198.  
  4199.  
  4200. function survShowMedia(index) {
  4201.     document.body.style.cursor = "wait";
  4202.     surv.style.cursor = "wait";
  4203.  
  4204.     survMediaScrollUp.style.visibility = "hidden";
  4205.     survMediaScrollDown.style.visibility = "hidden";
  4206.  
  4207.     setTimeout("survShowMediaActual('" + index + "')", 10);
  4208. }
  4209.  
  4210. function survShowMediaActual(index) {
  4211.     var caseNum, mediaType, filename, mediaFile, title, location;
  4212.  
  4213.     survCaseImg.style.visibility = "visible";
  4214.     survCaseImg.src = survCaseImg.src.substring(0, survCaseImg.src.length - 5) + "u.jpg";
  4215.  
  4216.     survMediaArrayIndex = index;
  4217.  
  4218.     survSetArrowStates();
  4219.  
  4220.     survTagList.recordset.moveFirst();
  4221.     survTagList.recordset.move(survMediaArray[index]);
  4222.  
  4223.     caseNum = survTagList.recordset("caseNum") + "";
  4224.     mediaType = survTagList.recordset("mediaType") + "";
  4225.     filename = survTagList.recordset("filename") + "";
  4226.     title = survTagList.recordset("title") + "";
  4227.     location = survTagList.recordset("location") + "";
  4228.  
  4229.     survMediaForwd.style.visibility = "visible";
  4230.     survMediaBack.style.visibility = "visible";
  4231.     survMediaClose.style.visibility = "visible";
  4232.  
  4233.     survTextDiv.innerHTML = "<div align=right>" + title + "</div>";
  4234.  
  4235.     if(mediaType == "doc")
  4236.         mediaType = "docs";
  4237.     else if(mediaType == "still")
  4238.         mediaType = "stills";
  4239.  
  4240.     setMediaFolder(location);
  4241.  
  4242.     mediaFile = mediaFolder + "/" + caseNum + "/" + mediaType + "/" + filename;
  4243.  
  4244.     if(mediaType == "stills")
  4245.         survWriteFrame("<img src='" + mediaFile + "'>");
  4246.  
  4247.     else if(mediaType == "qtvr") {
  4248.         survDisplayQtvr(mediaFile, 1, 240);
  4249.     }
  4250.  
  4251.     else if(mediaType == "video" || mediaType == "audio") {
  4252.  
  4253.         atmosphereStop();
  4254.  
  4255.         survWriteFrame("<script language=jscript for=survAV event='StateChange(oldState, newState)'>" +
  4256.                        "parent.survAVStateChange(oldState, newState);" +
  4257.                        "</script>" +
  4258.  
  4259.                        "<object id=survAV CLASSID='CLSID:05589FA1-C356-11CE-BF01-00AA0055595A' " +
  4260.                        "width=320 height=240 style='position:absolute; top:0; left:0'>" +
  4261.                        "<param name='FileName' VALUE='" + mediaFile + "'>" +
  4262.                        "<param name='ShowControls' VALUE='false'>" +
  4263.                        "<param name='ShowDisplay' VALUE='false'>" +
  4264.                        "<param name='BorderStyle' VALUE='0'>" +
  4265.                        "<param name='AutoStart' VALUE='1'>" +
  4266.                        "</object>");
  4267.     }
  4268.  
  4269.     else if(mediaType == "docs") {
  4270.  
  4271.         survWriteFrame("<applet id=docview codebase='" + mediaFolder + "' code=DocView.class width=320 height=240>" +
  4272.                        "<param name='cabbase' value='classes.cab'>" +
  4273.                        "<param name=imagesource value='" + caseNum + "/docs/" + filename + "'></applet>");
  4274.     }
  4275.  
  4276.     else if(mediaType == "text") {
  4277.  
  4278.         survWriteFrame("<applet id=textView codebase='" + mediaFolder + "' code=TextView.class width=320 height=240>" +
  4279.                        "<param name='cabbase' value='classes.cab'>" +
  4280.                        "<param name=shortwait value=50>" +
  4281.                        "<param name=longwait value=2000>" +
  4282.                        "<param name=textfile value='" + caseNum + "/text/" + filename + "'></applet>");
  4283.     }
  4284.  
  4285.     document.body.style.cursor = "auto";
  4286.     surv.style.cursor = "auto";
  4287.  
  4288. }
  4289.  
  4290.  
  4291.  
  4292. function survChangeQtvr(thumbId) {
  4293.     var qtvrIndex, qtvrNode, splitArray, caseNum, mediaType, filename, qtvrFile, location;
  4294.  
  4295.     if(thumbId == survQtvrCurrentThumb)
  4296.         return;
  4297.  
  4298.     splitArray = thumbId.split("_");
  4299.  
  4300.     qtvrIndex = splitArray[1];
  4301.     qtvrNode = parseInt(splitArray[2]);
  4302.  
  4303.     survTagList.recordset.moveFirst();
  4304.     survTagList.recordset.move(qtvrIndex);
  4305.  
  4306.     caseNum = survTagList.recordset("caseNum") + "";
  4307.     mediaType = survTagList.recordset("mediaType") + "";
  4308.     filename = survTagList.recordset("filename") + "";
  4309.     location = survTagList.recordset("location") + "";
  4310.  
  4311.     setMediaFolder(location);
  4312.  
  4313.     qtvrFile = mediaFolder + "/" + caseNum + "/qtvr/" + filename;
  4314.  
  4315.     survDisplayQtvr(qtvrFile, qtvrNode, 200);
  4316.  
  4317.     survQtvrCurrentThumb = thumbId;
  4318. }
  4319.  
  4320.  
  4321. function survDisplayQtvr(filename, node, height) {
  4322.  
  4323.     survWriteFrame("<embed pluginspage=plugin.htm id=survQtvrWin node=" + node + " src='" + filename +
  4324.                    "' controller=false width=320 height=" + height + ">");
  4325. }
  4326.  
  4327. function survShowQtvr() {
  4328.  
  4329.     survMediaFrame.document.open();
  4330.     survMediaFrame.document.write("<body bgcolor=#000000 text=#6699FF><center>Accessing Database</center></body>");
  4331.     survMediaFrame.document.close();
  4332.  
  4333.     survSetControls();
  4334.     survMediaScrollUp.style.visibility = "hidden";
  4335.     survMediaScrollDown.style.visibility = "hidden";
  4336.     survMediaForwd.style.visibility = "hidden";
  4337.     survMediaBack.style.visibility = "hidden";
  4338.     survMediaClose.style.visibility = "hidden";
  4339.     survTextDiv.style.visibility = "hidden";
  4340.     survCaseImg.style.visibility = "hidden";
  4341.  
  4342.     survVideoImg.src = survVideoImg.src.substring(0, survVideoImg.src.length - 5) + "s.jpg";
  4343.  
  4344.     setTimeout("survShowQtvrAux()", 10);
  4345. }
  4346.  
  4347. function survShowQtvrAux() {
  4348.     var str = "", first = true, i, j;
  4349.     var len, caseNum, mediaType, filename, qtvrFile, thumbFile, location;
  4350.     var qtvrCount, thumbCount = 0, divWidth;
  4351.     var qtvrSplitArray;
  4352.  
  4353.     len = survTagList.recordset.recordCount;
  4354.  
  4355.     if(len > 0) {
  4356.  
  4357.  
  4358.         survTagList.recordset.moveFirst();
  4359.  
  4360.         for(i = 0; i < len; i++) {
  4361.  
  4362.             caseNum = survTagList.recordset("caseNum") + "";
  4363.             mediaType = survTagList.recordset("mediaType") + "";
  4364.             filename = survTagList.recordset("filename") + "";
  4365.             title = survTagList.recordset("title") + "";
  4366.             location = survTagList.recordset("location") + "";
  4367.             qtvrCount = survTagList.recordset("qtvrCount") + "";
  4368.  
  4369.             if(mediaType == "qtvr") {
  4370.  
  4371.                 if(qtvrCount == "") {
  4372.                     survTagList.recordset.moveNext();
  4373.                     continue;
  4374.                 }
  4375.  
  4376.                 qtvrSplitArray = qtvrCount.split(',');
  4377.  
  4378.                 if(qtvrSplitArray[0] == "0") {
  4379.                     survTagList.recordset.moveNext();
  4380.                     continue;
  4381.                 }
  4382.             }
  4383.             else {
  4384.                 survTagList.recordset.moveNext();
  4385.                 continue;
  4386.             }
  4387.  
  4388.             setMediaFolder(location);
  4389.  
  4390.             if(first) {
  4391.                 first = false;
  4392.  
  4393.                 survQtvrCurrentThumb = "qtvr_" + i + "_" + qtvrSplitArray[0];
  4394.  
  4395.                 qtvrFile = mediaFolder + "/" + caseNum + "/qtvr/" + filename;
  4396.  
  4397.                 survDisplayQtvr(qtvrFile, 1, 200);
  4398.             }
  4399.  
  4400.             for(j = 0; j < qtvrSplitArray.length; j++) {
  4401.                 thumbFile = mediaFolder + "/" + caseNum + "/qtvr/thumbs_u/" + filename.substring(0, filename.length - 4) + qtvrSplitArray[j] + ".jpg";
  4402.                 str = "<img name=survQtvrImg hspace=1 id=qtvr_" + i + "_" + qtvrSplitArray[j] + " src='" + thumbFile + "'>" + str;
  4403.  
  4404.                 thumbCount++;
  4405.             }
  4406.  
  4407.             survTagList.recordset.moveNext();
  4408.         }
  4409.  
  4410.         divWidth = thumbCount * 76;
  4411.  
  4412.         survQtvrDiv.innerHTML = "<div id=survQtvrDivInner style='position:absolute; left:0; top:0; height:46; width:" + divWidth + "'>" + str + "</div>";
  4413.  
  4414.         survQtvrDivInner.style.pixelLeft = survQtvrDiv.clientWidth - survQtvrDivInner.clientWidth;
  4415.  
  4416.         if(survQtvrDiv.clientWidth >= survQtvrDivInner.clientWidth) {
  4417.             survQtvrScrollLeft.style.visibility = "hidden";
  4418.             survQtvrScrollRight.style.visibility = "hidden";
  4419.         }
  4420.  
  4421.         else {
  4422.             survQtvrScrollLeft.style.visibility = "visible";
  4423.             survQtvrScrollRight.style.visibility = "visible";
  4424.         }
  4425.  
  4426. //        survMediaDiv.style.visibility = "visible";
  4427.         survQtvrDiv.style.visibility = "visible";
  4428.     }
  4429. }
  4430.  
  4431.  
  4432. function survCompileThumbs(srcElem) {
  4433.     var oldChar, len, i, mediaType;
  4434.  
  4435.     newChar = srcElem.substring(4, srcElem.length);
  4436.  
  4437.     if(survCurrentChar != null) {
  4438.  
  4439.         if(survCurrentChar == newChar)
  4440.             return;
  4441.  
  4442.         oldChar = eval("cast" + survCurrentChar);
  4443.         oldChar.filters(0).enabled = 0;
  4444.         oldChar.filters(1).enabled = 0;
  4445.     }
  4446.  
  4447.     survWriteFrame("");
  4448.  
  4449.     survStartRec = 0;
  4450.  
  4451.     survGridArray = new Array();
  4452.     survGridArray[0] = 0;
  4453.     survGridArrayIndex = 0;
  4454.  
  4455.     survQtvrDiv.style.visibility = "hidden";
  4456.     survQtvrScrollLeft.style.visibility = "hidden";
  4457.     survQtvrScrollRight.style.visibility = "hidden";
  4458.     survMediaForwd.style.visibility = "hidden";
  4459.     survMediaBack.style.visibility = "hidden";
  4460.     survMediaClose.style.visibility = "hidden";
  4461.     survMediaScrollUp.style.visibility = "hidden";
  4462.     survMediaScrollDown.style.visibility = "hidden";
  4463.     survTextDiv.style.visibility = "hidden";
  4464.     survCaseImg.style.visibility = "hidden";
  4465.  
  4466.     survCurrentChar = newChar;
  4467.  
  4468.     survDossierImg.src = survDossierImg.src.substring(0, survDossierImg.src.length - 5) + "u.jpg";
  4469.  
  4470.  
  4471.     survTagList.sortAscending = true;
  4472.     survTagList.Sort = "title";
  4473.     survTagList.caseSensitive = false;
  4474.  
  4475.     survTagList.filter = "category=\"evid\"&mediaType=\"qtvr\"&qtvrCount>0&surv=\"*" + survCurrentChar + "*\"";
  4476.  
  4477.     if(survCurrentChar == "x")
  4478.         survTagList.filter += "&surv<>\"*fox*\"";
  4479.  
  4480.     survTagList.Reset();
  4481.  
  4482.     if(survTagList.recordset.recordCount <= 0) {
  4483.  
  4484.         // (bug in tdc) reset tabular data control
  4485.         survTagList.DataURL = "tags.txt";
  4486.  
  4487.         survTagList.Reset();
  4488.     }
  4489.  
  4490.     if(survTagList.recordset.recordCount > 0)
  4491.         survHasQtvr = true;
  4492.     else
  4493.         survHasQtvr = false;
  4494.  
  4495.     survHasMedia = true;
  4496.  
  4497.     survTagList.filter = "category=\"evid\"&surv=\"*" + survCurrentChar + "*\"";
  4498.  
  4499.     if(survCurrentChar == "x")
  4500.         survTagList.filter += "&surv<>\"*fox*\"";
  4501.  
  4502.     survTagList.Reset();
  4503.  
  4504.     if(survTagList.recordset.recordCount <= 0) {
  4505.  
  4506.         // (bug in tdc) reset tabular data control
  4507.         survTagList.DataURL = "tags.txt";
  4508.  
  4509.         survTagList.Reset();
  4510.     }
  4511.  
  4512.     if(survTagList.recordset.recordCount == 0)
  4513.         survHasMedia = false;
  4514.  
  4515.     survSetControls();
  4516. }
  4517.  
  4518. function survThumbClick(elem) {
  4519.     var index;
  4520.  
  4521.     if(elem.name == null)
  4522.         return;
  4523.  
  4524.     if(elem.name.indexOf("survThumbImg") < 0)
  4525.         return;
  4526.  
  4527.     index = elem.name.substring(13, elem.name.length);
  4528.  
  4529.     survShowMedia(index);
  4530. }
  4531.  
  4532. function survShowText(elem) {
  4533.     var index, title;
  4534.  
  4535.     if(elem.name == null)
  4536.         return;
  4537.  
  4538.     if(elem.name.indexOf("survThumbImg") < 0)
  4539.         return;
  4540.  
  4541.     index = elem.name.substring(13, elem.name.length);
  4542.  
  4543.     survTagList.recordset.moveFirst();
  4544.     survTagList.recordset.move(survMediaArray[index]);
  4545.  
  4546.     title = survTagList.recordset("title") + "";
  4547.  
  4548.     survTextDiv.innerHTML = "<div align=right>" + title + "</div>";
  4549. }
  4550.  
  4551.  
  4552. function survSetControls() {
  4553.     if(survHasMedia)
  4554.         survLockImg.src = survLockImg.src.substring(0, survLockImg.src.length - 5) + "u.jpg";
  4555.     else
  4556.         survLockImg.src = survLockImg.src.substring(0, survLockImg.src.length - 5) + "i.jpg";
  4557.  
  4558.     if(survHasQtvr)
  4559.         survVideoImg.src = survVideoImg.src.substring(0, survVideoImg.src.length - 5) + "u.jpg";
  4560.     else
  4561.         survVideoImg.src = survVideoImg.src.substring(0, survVideoImg.src.length - 5) + "i.jpg";
  4562.  
  4563.     survLockImg.style.visibility = "visible";
  4564.     survVideoImg.style.visibility = "visible";
  4565.     survDossierImg.style.visibility = "visible";
  4566. }
  4567.  
  4568. function survWriteFrame(str, doThumbs) {
  4569.  
  4570.     survMediaFrame.document.open();
  4571.  
  4572.     if(doThumbs == true) {
  4573.         survMediaFrame.document.write("<script language=jscript>");
  4574.  
  4575.         survMediaFrame.document.write("document.onmouseover = mouseOver;");
  4576.         survMediaFrame.document.write("function mouseOver() {");
  4577.         survMediaFrame.document.write("    parent.mouseOver(event.srcElement);");
  4578.         survMediaFrame.document.write("    parent.survShowText(event.srcElement);");
  4579.         survMediaFrame.document.write("}");
  4580.  
  4581.         survMediaFrame.document.write("document.onmouseout = mouseOut;");
  4582.         survMediaFrame.document.write("function mouseOut() {");
  4583.         survMediaFrame.document.write("    parent.mouseOut(event.srcElement);");
  4584.         survMediaFrame.document.write("    parent.survShowText('');");
  4585.         survMediaFrame.document.write("}");
  4586.  
  4587.         survMediaFrame.document.write("document.onclick = onClick;");
  4588.         survMediaFrame.document.write("function onClick() {");
  4589.         survMediaFrame.document.write("    parent.survThumbClick(event.srcElement);");
  4590.         survMediaFrame.document.write("}");
  4591.  
  4592.         survMediaFrame.document.write("</script>");
  4593.     }
  4594.  
  4595.     survMediaFrame.document.write("<body bgcolor=#000000 onLoad=\"survMediaFrameDiv.style.visibility = 'visible'\">");
  4596.  
  4597.     survMediaFrame.document.write("<div id=survMediaFrameDiv style='visibility:hidden'>");
  4598.  
  4599.     survMediaFrame.document.write(str);
  4600.  
  4601.     survMediaFrame.document.write("</div></body>");
  4602.     survMediaFrame.document.close();
  4603. }
  4604.  
  4605.  
  4606. function survShowThumbs() {
  4607.  
  4608.     survMediaFrame.document.open();
  4609.     survMediaFrame.document.write("<body bgcolor=#000000 text=#6699FF><center>Accessing Database</center></body>");
  4610.     survMediaFrame.document.close();
  4611.  
  4612.     survQtvrDiv.style.visibility = "hidden";
  4613.     survMediaForwd.style.visibility = "hidden";
  4614.     survMediaBack.style.visibility = "hidden";
  4615.     survMediaClose.style.visibility = "hidden";
  4616.     survQtvrScrollLeft.style.visibility = "hidden";
  4617.     survQtvrScrollRight.style.visibility = "hidden";
  4618.     survCaseImg.style.visibility = "hidden";
  4619.  
  4620.     survTextDiv.innerHTML = "";
  4621.  
  4622.     setTimeout("survShowThumbsAux()", 10);
  4623. }
  4624.  
  4625. function survShowThumbsAux() {
  4626.     var thumbFile, img, str = "";
  4627.     var len, i, caseNum, mediaType, filename, thumbIndex = 0;
  4628.     var qtvrCount, location, moreThumbs = false, lastIndex;
  4629.  
  4630.     survTagList.recordset.moveFirst();
  4631.     len = survTagList.recordset.recordCount - survStartRec;
  4632.  
  4633.     survMediaArray = new Array();
  4634.     survMediaArrayIndex = 0;
  4635.  
  4636.     if(len > 0) {
  4637.  
  4638.         survTagList.recordset.move(survStartRec);
  4639.  
  4640.         survSetControls();
  4641.  
  4642.         survCaseImg.src = survCaseImg.src.substring(0, survCaseImg.src.length - 5) + "i.jpg";
  4643.  
  4644.         survLockImg.src = survLockImg.src.substring(0, survLockImg.src.length - 5) + "s.jpg";
  4645.  
  4646.         moreThumbs = false;
  4647.  
  4648.         for(i = 0; i < len; i++) {
  4649.  
  4650.             if(thumbIndex == 16) {
  4651.                 moreThumbs = true;
  4652.                 break;
  4653.             }
  4654.  
  4655.             caseNum = survTagList.recordset("caseNum") + "";
  4656.             mediaType = survTagList.recordset("mediaType") + "";
  4657.             filename = survTagList.recordset("filename") + "";
  4658.             title = survTagList.recordset("title") + "";
  4659.             location = survTagList.recordset("location") + "";
  4660.             qtvrCount = parseInt(survTagList.recordset("qtvrCount") + "");
  4661.  
  4662.             if(mediaType == "qtvr" && qtvrCount > 0) {
  4663.                 survTagList.recordset.moveNext();
  4664.                 continue;
  4665.             }
  4666.  
  4667.             if(mediaType == "doc")
  4668.                 mediaType = "docs";
  4669.             else if(mediaType == "still")
  4670.                 mediaType = "stills";
  4671.  
  4672.             if(location == "")
  4673.                 location = "cd";
  4674.             else
  4675.                 location = "local";
  4676.  
  4677.             setMediaFolder(location);
  4678.  
  4679.             if(mediaType == "docs") {
  4680.  
  4681.                 if(title.toLowerCase().indexOf("autopsy") >= 0)
  4682.                     thumbFile = mediaFolder + "/1x00/docs/thumbs_s/autopsy.jpg";
  4683.  
  4684.                 else
  4685.                     thumbFile = mediaFolder + "/" + caseNum + "/" + mediaType + "/thumbs_s/" +
  4686.                                 filename.substring(0, filename.length - 3) + "jpg";
  4687.             }
  4688.  
  4689.             else if(mediaType == "audio")
  4690.                 thumbFile = mediaFolder + "/1x00/audio/thumbs_u/audio.jpg";
  4691.  
  4692.             else if(mediaType == "text")
  4693.                 thumbFile = mediaFolder + "/1x00/text/thumbs_u/text.jpg";
  4694.  
  4695.             else
  4696.                 thumbFile = mediaFolder + "/" + caseNum + "/" + mediaType + "/thumbs_u/" +
  4697.                             filename.substring(0, filename.length - 3) + "jpg";
  4698.  
  4699.             str += "<img name=survThumbImg_" + thumbIndex + " id=thumb" + thumbIndex + " src='" + thumbFile + "' style='filter:light(enabled=0)'>";
  4700.  
  4701.             if((thumbIndex + 1) % 4 == 0)
  4702.                 str += "<br><img src=controls/surv/gridmid.jpg><br>";
  4703.  
  4704.             else
  4705.                 str += "<img hspace=1 src=controls/surv/gridside.jpg>";
  4706.  
  4707.             survMediaArray[thumbIndex] = i + survStartRec;
  4708.  
  4709.             thumbIndex++;
  4710.  
  4711.             survTagList.recordset.moveNext();
  4712.         }
  4713.  
  4714.         lastIndex = i;
  4715.  
  4716.         survGridArray[survGridArrayIndex + 1] = i + 1 + survStartRec;
  4717.  
  4718.         survCurrentThumbsCount = thumbIndex;
  4719.  
  4720.         survWriteFrame(str, true);
  4721.  
  4722.         for(i = 0; i < survCurrentThumbsCount; i++) {
  4723.  
  4724.             img = eval("survMediaFrame.thumb" + i);
  4725.  
  4726.             img.filters[0].addAmbient(255,255,255,100);
  4727.             img.filters[0].addAmbient(255,255,255,100);
  4728.             img.filters[0].addAmbient(255,255,255,120);
  4729.         }
  4730.  
  4731.         survTextDiv.style.visibility = "visible";
  4732.  
  4733.         survMediaScrollDown.style.visibility = "visible";
  4734.         survMediaScrollUp.style.visibility = "visible";
  4735.  
  4736.         if(moreThumbs) {
  4737.  
  4738.             moreThumbs = false;
  4739.  
  4740.             for(i = lastIndex; i < len; i++) {
  4741.  
  4742.                 mediaType = survTagList.recordset("mediaType") + "";
  4743.                 qtvrCount = parseInt(survTagList.recordset("qtvrCount") + "");
  4744.  
  4745.                 if(mediaType != "qtvr" || (mediaType == "qtvr" && qtvrCount == 0)) {
  4746.                     moreThumbs = true;
  4747.                     break;
  4748.                 }
  4749.  
  4750.                 survTagList.recordset.moveNext();
  4751.             }
  4752.         }
  4753.  
  4754.         if(moreThumbs)
  4755.             setScrollerState(survMediaScrollDown, true, "cscroller");
  4756.         else
  4757.             setScrollerState(survMediaScrollDown, false, "cscroller");
  4758.  
  4759.         if(survStartRec >= 16)
  4760.             setScrollerState(survMediaScrollUp, true, "cscroller");
  4761.         else
  4762.             setScrollerState(survMediaScrollUp, false, "cscroller");
  4763.     }
  4764. }
  4765.  
  4766.  
  4767. //========================================================================
  4768.  
  4769. //**************************************
  4770. // Functions for glossary window
  4771. //**************************************
  4772.  
  4773. var glossHistory = new Array();
  4774. var glossHistoryIndex = 0;
  4775. var glossCurrentFile = null;
  4776.  
  4777. function glossOnClick(imgId) {
  4778.     switch(imgId) {
  4779.  
  4780.         case "back":
  4781.             if(glossHistoryIndex > 0) {
  4782.                 glossHistoryIndex--;
  4783.                 showMediaFromHistory(glossHistory, glossHistoryIndex);
  4784.             }
  4785.             break;
  4786.  
  4787.         case "fwd":
  4788.             if(glossHistoryIndex < glossHistory.length - 1) {
  4789.                 glossHistoryIndex++;
  4790.                 showMediaFromHistory(glossHistory, glossHistoryIndex);
  4791.             }
  4792.             break;
  4793.  
  4794.         case "help":
  4795.             helpShow("glossary");
  4796.             break;
  4797.     }
  4798. }
  4799.  
  4800. function glossShowDefinition(caseNum, term) {
  4801.     var str = "", len, also1, also2, alsoTerm;
  4802.  
  4803.     glossaryList.sortAscending = true;
  4804.     glossaryList.Sort = "term";
  4805.     glossaryList.caseSensitive = false;
  4806.  
  4807.     glossaryList.filter = "caseNum=\"" + caseNum + "\"&term=\"" + term + "\"";
  4808.  
  4809.     glossaryList.Reset();
  4810.  
  4811.     if(glossaryList.recordset.recordCount <= 0) {
  4812.  
  4813.         // (bug in tdc) reset tabular data control
  4814.         glossaryList.DataURL = "glossary.txt";
  4815.  
  4816.         glossaryList.Reset();
  4817.     }
  4818.  
  4819.     len = glossaryList.recordset.recordCount;
  4820.  
  4821.     if(len > 0) {
  4822.  
  4823.         glossaryList.recordset.moveFirst();
  4824.         str = "<b>" + term + ":</b> " + glossaryList.recordset("definition") + "<br>";
  4825.  
  4826.         also1 = glossaryList.recordset("also1") + "";
  4827.         also2 = glossaryList.recordset("also2") + "";
  4828.  
  4829.         if(also1 != "") {
  4830.  
  4831.             alsoTerm = also1.substring(also1.lastIndexOf(":") + 1, also1.length);
  4832.  
  4833.             str += "<p>See also: <span style='color:#00FF00; text-decoration:underline; cursor:hand' onClick=\"omw('" + also1 + "')\">" +
  4834.                    alsoTerm + "</span>";
  4835.  
  4836.             if(also2 != "") {
  4837.                 alsoTerm = also2.substring(also2.lastIndexOf(":") + 1, also2.length);
  4838.  
  4839.                 str += ", <span style='color:#00FF00; text-decoration:underline; cursor:hand' onClick=\"omw('" + also2 + "')\">" +
  4840.                        alsoTerm + "</span>";
  4841.             }
  4842.         }
  4843.  
  4844.     }
  4845.     else
  4846.         str = "Could not find the definition of \"" + term + "\" in the database.";
  4847.  
  4848.     glossDiv.innerHTML = str;
  4849.  
  4850.     focusWin(glossDragWin);
  4851. }
  4852.  
  4853.  
  4854. function glossClose() {
  4855.     return(true);
  4856. }
  4857.  
  4858.  
  4859. //========================================================================
  4860.  
  4861. //**************************************
  4862. // Functions for general help window
  4863. //**************************************
  4864.  
  4865. var genHelpScrollTimer = null;
  4866. var genHelpInit = false;
  4867.  
  4868. function genHelpScrollOn(scrollerId) {
  4869.  
  4870.     switch(scrollerId) {
  4871.         case "genHelpLeftScrollUp":
  4872.             doScrollUp("genHelpLeftDivInner");
  4873.             genHelpScrollTimer = setTimeout("genHelpScrollOn('genHelpLeftScrollUp')", 100);
  4874.             break;
  4875.  
  4876.         case "genHelpLeftScrollDown":
  4877.             doScrollDown("genHelpLeftDivInner");
  4878.             genHelpScrollTimer = setTimeout("genHelpScrollOn('genHelpLeftScrollDown')", 100);
  4879.             break;
  4880.  
  4881.         case "genHelpRightScrollUp":
  4882.             doScrollUp("genHelpRightDivInner");
  4883.             genHelpScrollTimer = setTimeout("genHelpScrollOn('genHelpRightScrollUp')", 100);
  4884.             break;
  4885.  
  4886.         case "genHelpRightScrollDown":
  4887.             doScrollDown("genHelpRightDivInner");
  4888.             genHelpScrollTimer = setTimeout("genHelpScrollOn('genHelpRightScrollDown')", 100);
  4889.             break;
  4890.     }
  4891. }
  4892.  
  4893. function genHelpScrollOff(scrollerId) {
  4894.     clearTimeout(genHelpScrollTimer);
  4895. }
  4896.  
  4897. function genHelpOnClick(imgId) {
  4898. }
  4899.  
  4900. function genHelpShowTopics() {
  4901.     var len, i, str;
  4902.  
  4903.     helpList.sortAscending = true;
  4904.     helpList.Sort = "topic";
  4905.     helpList.caseSensitive = false;
  4906.  
  4907.     helpList.filter = "type=\"general\"";
  4908.  
  4909.     helpList.Reset();
  4910.  
  4911.     if(helpList.recordset.recordCount <= 0) {
  4912.  
  4913.         // (bug in tdc) reset tabular data control
  4914.         helpList.DataURL = "help.txt";
  4915.  
  4916.         helpList.Reset();
  4917.     }
  4918.  
  4919.     len = helpList.recordset.recordCount;
  4920.  
  4921.     str = "<div id=genHelpLeftDivInner style='position:absolute; left:0; top:0'>";
  4922.  
  4923.     if(len > 0) {
  4924.         helpList.recordset.moveFirst();
  4925.  
  4926.         for(i = 0; i < len; i++) {
  4927.             str += "<span style='color:#6699FF; cursor:hand' onmouseover=this.style.color='red' onmouseout=this.style.color='#6699FF'>" + helpList.recordset("topic") + "</span><br>";
  4928.             helpList.recordset.moveNext();
  4929.         }
  4930.     }
  4931.  
  4932.     else
  4933.         str += "No help";
  4934.  
  4935.     str += "</div>";
  4936.  
  4937.     genHelpLeftDiv.innerHTML = str;
  4938.  
  4939.     if(genHelpLeftDiv.clientHeight >= genHelpLeftDivInner.clientHeight) {
  4940.         genHelpLeftScrollDown.style.visibility = "hidden";
  4941.         genHelpLeftScrollUp.style.visibility = "hidden";
  4942.     }
  4943.  
  4944.     else {
  4945.         genHelpLeftScrollDown.style.visibility = "visible";
  4946.         genHelpLeftScrollUp.style.visibility = "visible";
  4947.     }
  4948. }
  4949.  
  4950. function genHelpClick() {
  4951.     var topic;
  4952.  
  4953.     if(event.srcElement.tagName != "SPAN")
  4954.         return;
  4955.  
  4956.     topic = event.srcElement.innerHTML;
  4957.  
  4958.     ghst(topic);
  4959. }
  4960.  
  4961. function ghst(topic) {
  4962.     var str, len;
  4963.  
  4964.     helpList.sortAscending = true;
  4965.     helpList.Sort = "topic";
  4966.     helpList.caseSensitive = false;
  4967.  
  4968.     helpList.filter = "type=\"general\"&topic=\"" + topic + "\"";
  4969.  
  4970.     helpList.Reset();
  4971.  
  4972.     if(helpList.recordset.recordCount <= 0) {
  4973.  
  4974.         // (bug in tdc) reset tabular data control
  4975.         helpList.DataURL = "help.txt";
  4976.  
  4977.         helpList.Reset();
  4978.     }
  4979.  
  4980.     len = helpList.recordset.recordCount;
  4981.  
  4982.     str = "<div id=genHelpRightDivInner style='position:absolute; left:0; top:0'>";
  4983.  
  4984.     if(len > 0) {
  4985.         helpList.recordset.moveFirst();
  4986.  
  4987.         str += helpList.recordset("content");
  4988.     }
  4989.  
  4990.     else
  4991.         str += "No help";
  4992.  
  4993.     str += "</div>";
  4994.  
  4995.     genHelpRightDiv.innerHTML = str;
  4996.  
  4997.     if(genHelpRightDiv.clientHeight >= genHelpRightDivInner.clientHeight) {
  4998.         genHelpRightScrollDown.style.visibility = "hidden";
  4999.         genHelpRightScrollUp.style.visibility = "hidden";
  5000.     }
  5001.  
  5002.     else {
  5003.         genHelpRightScrollDown.style.visibility = "visible";
  5004.         genHelpRightScrollUp.style.visibility = "visible";
  5005.     }
  5006. }
  5007.  
  5008. function genHelpShow() {
  5009.  
  5010.     if(!genHelpInit) {
  5011.         genHelpInit = true;
  5012.         genHelpShowTopics();
  5013.     }
  5014.  
  5015.     genHelpDragWin.style.visibility = "visible";
  5016.     focusWin(genHelpDragWin);
  5017. }
  5018.  
  5019. function genHelpClose() {
  5020.     return(true);
  5021. }
  5022.  
  5023.  
  5024.  
  5025.  
  5026.  
  5027.  
  5028. //========================================================================
  5029.  
  5030. //**************************************
  5031. // Functions for media help window
  5032. //**************************************
  5033.  
  5034. var helpScrollTimer = null;
  5035.  
  5036. function helpScrollOn(scrollerId) {
  5037.  
  5038.     switch(scrollerId) {
  5039.         case "helpScrollUp":
  5040.             doScrollUp("helpDivInner");
  5041.             helpScrollTimer = setTimeout("helpScrollOn('helpScrollUp')", 100);
  5042.             break;
  5043.  
  5044.         case "helpScrollDown":
  5045.             doScrollDown("helpDivInner");
  5046.             helpScrollTimer = setTimeout("helpScrollOn('helpScrollDown')", 100);
  5047.             break;
  5048.     }
  5049. }
  5050.  
  5051. function helpScrollOff(scrollerId) {
  5052.     clearTimeout(helpScrollTimer);
  5053. }
  5054.  
  5055. function helpOnClick(imgId) {
  5056. }
  5057.  
  5058. function helpShow(windowName) {
  5059.     var len, i, str;
  5060.  
  5061.     helpList.sortAscending = true;
  5062.     helpList.Sort = "topic";
  5063.     helpList.caseSensitive = false;
  5064.  
  5065.     helpList.filter = "type=\"window\"&topic=\"" + windowName + "\"";
  5066.  
  5067.     helpList.Reset();
  5068.  
  5069.     if(helpList.recordset.recordCount <= 0) {
  5070.  
  5071.         // (bug in tdc) reset tabular data control
  5072.         helpList.DataURL = "help.txt";
  5073.  
  5074.         helpList.Reset();
  5075.     }
  5076.  
  5077.     len = helpList.recordset.recordCount;
  5078.  
  5079.     str = "<div id=helpDivInner style='position:absolute; left:0; top:0'>";
  5080.  
  5081.     if(len > 0) {
  5082.         helpList.recordset.moveFirst();
  5083.  
  5084.         str += helpList.recordset("content");
  5085.     }
  5086.  
  5087.     else
  5088.         str += "No help";
  5089.  
  5090.     str += "</div>";
  5091.  
  5092.     helpDiv.innerHTML = str;
  5093.  
  5094.     if(helpDiv.clientHeight >= helpDivInner.clientHeight) {
  5095.         helpScrollDown.style.visibility = "hidden";
  5096.         helpScrollUp.style.visibility = "hidden";
  5097.     }
  5098.  
  5099.     else {
  5100.         helpScrollDown.style.visibility = "visible";
  5101.         helpScrollUp.style.visibility = "visible";
  5102.     }
  5103.  
  5104.     helpDragWin.style.visibility = "visible";
  5105.     focusWin(helpDragWin);
  5106.  
  5107. }
  5108.  
  5109.  
  5110. function helpClose() {
  5111.     return(true);
  5112. }
  5113.  
  5114.  
  5115.  
  5116.  
  5117.  
  5118. //=====================================================
  5119.  
  5120. //*********************************
  5121. // Functions for text window
  5122. //*********************************
  5123.  
  5124. var textCurrentFile = null;
  5125. var textHistory = new Array();
  5126. var textHistoryIndex = 0;
  5127. var textBookmark = null;
  5128.  
  5129. var textScrollTimer = null;
  5130.  
  5131. function textScrollOn(scrollerId) {
  5132.  
  5133.     if(!textView.isTextDone())
  5134.         return;
  5135.  
  5136.     switch(scrollerId) {
  5137.         case "textScrollUp":
  5138.  
  5139.             if(textView.scrollUp()) {
  5140.                 setScrollerState(textScrollDown, true, "scroller");
  5141.                 textScrollTimer = setTimeout("textScrollOn('textScrollUp')", 100);
  5142.             }
  5143.  
  5144.             else
  5145.                 setScrollerState(textScrollUp, false, "scroller");
  5146.  
  5147.             break;
  5148.  
  5149.         case "textScrollDown":
  5150.  
  5151.             if(textView.scrollDown()) {
  5152.                 setScrollerState(textScrollUp, true, "scroller");
  5153.                 textScrollTimer = setTimeout("textScrollOn('textScrollDown')", 100);
  5154.             }
  5155.  
  5156.             else
  5157.                 setScrollerState(textScrollDown, false, "scroller");
  5158.  
  5159.             break;
  5160.     }
  5161. }
  5162.  
  5163. function textScrollOff(scrollerId) {
  5164.     clearTimeout(textScrollTimer);
  5165. }
  5166.  
  5167.  
  5168. function textClose() {
  5169.     textCurrentFile = null;
  5170.     textDiv.innerHTML = "";
  5171.     setIconState(textIcon, "inactive");
  5172.  
  5173.     return(true);
  5174. }
  5175.  
  5176. function textOnClick(imgId) {
  5177.     switch(imgId) {
  5178.  
  5179.         case "case":
  5180.             omw(textBookmark.substring(0, 4));
  5181.             break;
  5182.  
  5183.         case "back":
  5184.             if(textHistoryIndex > 0) {
  5185.                 textHistoryIndex--;
  5186.                 showMediaFromHistory(textHistory, textHistoryIndex);
  5187.             }
  5188.             break;
  5189.  
  5190.         case "fwd":
  5191.             if(textHistoryIndex < textHistory.length - 1) {
  5192.                 textHistoryIndex++;
  5193.                 showMediaFromHistory(textHistory, textHistoryIndex);
  5194.             }
  5195.             break;
  5196.  
  5197.         case "book":
  5198.             appendBookmark(textBookmark);
  5199.             break;
  5200.  
  5201.         case "hist":
  5202.             showHistory("textHistory", "Text History");
  5203.             break;
  5204.  
  5205.         case "help":
  5206.             helpShow("text");
  5207.             break;
  5208.     }
  5209. }
  5210.  
  5211. function textLoad(filePath) {
  5212.  
  5213.     textDiv.style.visibility = "hidden";
  5214.  
  5215.     textDiv.innerHTML = "<applet id=textView codebase='" + mediaFolder + "' code=TextView.class width=420 height=270>" +
  5216.                         "<param name='cabbase' value='classes.cab'>" +
  5217.                         "<param name=shortwait value=10>" +
  5218.                         "<param name=longwait value=2000>" +
  5219.                         "<param name=textfile value='" + filePath + "'></applet>";
  5220.  
  5221.     textDiv.style.visibility = "visible";
  5222.  
  5223.     setScrollerState(textScrollUp, true, "scroller");
  5224.     setScrollerState(textScrollDown, false, "scroller");
  5225. }
  5226.  
  5227. function textKeyPress(key) {
  5228.  
  5229.     if(key == "home") {
  5230.         textView.home();
  5231.  
  5232.         setScrollerState(textScrollUp, false, "scroller");
  5233.         setScrollerState(textScrollDown, true, "scroller");
  5234.     }
  5235.  
  5236.     else if(key == "end") {
  5237.         textView.end();
  5238.  
  5239.         setScrollerState(textScrollUp, true, "scroller");
  5240.         setScrollerState(textScrollDown, false, "scroller");
  5241.     }
  5242.  
  5243.     else if(key == "up") {
  5244.         if(textView.scrollUp())
  5245.             setScrollerState(textScrollDown, true, "scroller");
  5246.  
  5247.         else
  5248.             setScrollerState(textScrollUp, false, "scroller");
  5249.     }
  5250.  
  5251.     else if(key == "down") {
  5252.         if(textView.scrollDown())
  5253.             setScrollerState(textScrollUp, true, "scroller");
  5254.  
  5255.         else
  5256.             setScrollerState(textScrollDown, false, "scroller");
  5257.     }
  5258.  
  5259.     else if(key == "pgup") {
  5260.  
  5261.         if(textView.pageUp())
  5262.             setScrollerState(textScrollDown, true, "scroller");
  5263.  
  5264.         else
  5265.             setScrollerState(textScrollUp, false, "scroller");
  5266.     }
  5267.  
  5268.     else if(key == "pgdn") {
  5269.  
  5270.         if(textView.pageDown())
  5271.             setScrollerState(textScrollUp, true, "scroller");
  5272.  
  5273.         else
  5274.             setScrollerState(textScrollDown, false, "scroller");
  5275.     }
  5276. }
  5277.  
  5278.  
  5279.  
  5280.  
  5281. //========================================================================
  5282.  
  5283. //**************************************
  5284. // Functions for updates window
  5285. //**************************************
  5286.  
  5287. var updateScrollTimer = null;
  5288. var updateArray;
  5289. var updateCurrentType;
  5290. var updateInitComplete = false;
  5291.  
  5292. function updateObj(type, name, title, updateDir, size) {
  5293.     this.type = type;
  5294.     this.name = name;
  5295.     this.title = title;
  5296.     this.updateDir = updateDir;
  5297.     this.size = size;
  5298. }
  5299.  
  5300.  
  5301. function updateCreateArray() {
  5302.     var i, count, splitArray;
  5303.  
  5304.     count = updateFrame.dataObj.getCount();
  5305.  
  5306.     updateArray = new Array();
  5307.  
  5308.     for(i = 0; i < count; i++) {
  5309.         splitArray = updateFrame.dataObj.getData(i).split("\",\"");
  5310.  
  5311.         splitArray[0] = splitArray[0].substring(1, splitArray[0].length);
  5312.         splitArray[4] = splitArray[4].substring(0, splitArray[4].length - 1);
  5313.  
  5314.         updateArray[updateArray.length] = 
  5315.             new updateObj(splitArray[0], splitArray[1], splitArray[2], splitArray[3], splitArray[4]);
  5316.     }
  5317.  
  5318.     updateShow();
  5319. }
  5320.  
  5321. function updateDataLoaded() {
  5322.     updateCreateArray();
  5323. }
  5324.  
  5325.  
  5326. function updateDoLoad(type) {
  5327.  
  5328.     updateDragWin.style.visibility = "visible";
  5329.     updateDiv.innerHTML = "<center><br><br><br>Checking for new updates. Please wait.</center>";
  5330.     focusWin(updateDragWin);
  5331.  
  5332.     updateCurrentType = type;
  5333.  
  5334.     if(updateInitComplete)
  5335.         updateShow();
  5336.  
  5337.     else
  5338.         updateFrame.location = "dataapp.htm";
  5339. }
  5340.  
  5341.  
  5342. function updateScrollOn(scrollerId) {
  5343.  
  5344.     switch(scrollerId) {
  5345.         case "updateScrollUp":
  5346.             doScrollUp("updateDivInner");
  5347.             updateScrollTimer = setTimeout("updateScrollOn('updateScrollUp')", 100);
  5348.             break;
  5349.  
  5350.         case "updateScrollDown":
  5351.             doScrollDown("updateDivInner");
  5352.             updateScrollTimer = setTimeout("updateScrollOn('updateScrollDown')", 100);
  5353.             break;
  5354.     }
  5355. }
  5356.  
  5357. function updateScrollOff(scrollerId) {
  5358.     clearTimeout(updateScrollTimer);
  5359. }
  5360.  
  5361. function updateOnClick(imgId) {
  5362.  
  5363.     switch(imgId) {
  5364.  
  5365.         case "case":
  5366. //            updateDoLoad("all");
  5367.             break;
  5368.  
  5369.         case "help":
  5370.             helpShow("updates");
  5371.             break;
  5372.     }
  5373. }
  5374.  
  5375. function updateShow() {
  5376.  
  5377.     var len, i, str, size, count = 0, j, found;
  5378.  
  5379.     setUpdatesGetCookie();
  5380.  
  5381.     len = updateArray.length;
  5382.  
  5383.     str = "<div id=updateDivInner style='position:absolute; left:0; top:0'>" +
  5384.           "<center><img src=controls/comm/top.jpg></center><br>";
  5385.  
  5386.     if(len > 0) {
  5387.  
  5388.         str += "<center><table width=490 cellpadding=0 border=0 cellspacing=0 onClick=updateTableClick() style='cursor:hand'>"
  5389.  
  5390.         str += "<tr id=head><td width=120 rowspan=2><img src=controls/comm/updtitle.jpg></td><td rowspan=2><img src=controls/comm/size.jpg></td>" +
  5391.                "<td align=center colspan=3><img src=controls/comm/down.jpg></td></tr>" +
  5392.                "<tr id=head><td><img src=controls/comm/28down.jpg></td><td><img src=controls/comm/56down.jpg></td>" +
  5393.                "<td><img src=controls/comm/128down.jpg></td></tr>";
  5394.  
  5395.         for(i = 0; i < len; i++) {
  5396.  
  5397.             if(updateCurrentType == "updates") {
  5398.  
  5399.                 if(updateArray[i].type != "update")
  5400.                     continue;
  5401.  
  5402.                 else {
  5403.                     found = false;
  5404.  
  5405.                     for(j = 0; j < setUpdatesCookieCount; j++) {
  5406.                         if(setUpdatesCookieArray[j] == updateArray[i].name) {
  5407.                             found = true;
  5408.                             break;
  5409.                         }
  5410.                     }
  5411.  
  5412.                     if(found)
  5413.                         continue;
  5414.                 }
  5415.             }
  5416.  
  5417.             count++;
  5418.  
  5419.             size = updateArray[i].size;
  5420.  
  5421.             str += "<tr id=head><td colspan=5><img src=controls/comm/line.jpg></td></tr>";
  5422.  
  5423.             str += "<tr id=" + i + "><td>" + updateArray[i].title + "</td>" +
  5424.                    "<td>" + size + "</td>" +
  5425.                    "<td>" + Math.round(size / (2880 * 60)) + " Min</td>" +
  5426.                    "<td>" + Math.round(size / (5660 * 60)) + " Min</td>" +
  5427.                    "<td>" + Math.round(size / (12800 * 60)) + " Min</td></tr>";
  5428.         }
  5429.  
  5430.         str += "</table></center></div>";
  5431.     }
  5432.  
  5433.     if(count == 0)
  5434.         str += "<center>There are currently no updates to download.</center></div>";
  5435.  
  5436.     updateDiv.innerHTML = str;
  5437.  
  5438.     if(updateDiv.clientHeight >= updateDivInner.clientHeight) {
  5439.         updateScrollDown.style.visibility = "hidden";
  5440.         updateScrollUp.style.visibility = "hidden";
  5441.     }
  5442.  
  5443.     else {
  5444.         updateScrollDown.style.visibility = "visible";
  5445.         updateScrollUp.style.visibility = "visible";
  5446.     }
  5447.  
  5448.     updateDragWin.style.visibility = "visible";
  5449.     focusWin(updateDragWin);
  5450.  
  5451.     updateInitComplete = true;
  5452.  
  5453. }
  5454.  
  5455. function updateCancel() {
  5456.     updateShow();
  5457. }
  5458.  
  5459. function updateTableClick() {
  5460.     var parent = event.srcElement;
  5461.     var updateDir, title, str;
  5462.  
  5463.     while(parent.tagName != "TR")
  5464.         parent = parent.parentElement;
  5465.  
  5466.     if(parent.id != "head") {
  5467.  
  5468.         updateDir = updateArray[parent.id].updateDir;
  5469.         title = updateArray[parent.id].title;
  5470.  
  5471.         str = "<br><br>You have selected the update, \"" + title + ".\"" +
  5472.               "<br><br>To initiate installation click the blue button or click " +
  5473.               "cancel to return to the list.<br><br><br>";
  5474.  
  5475.         str += "<center><OBJECT CLASSID='clsid:4E330863-6A11-11D0-BFD8-006097237877' HEIGHT=31 WIDTH=88 " +
  5476.                "CODEBASE='http://www.installfromtheweb.com/install/iftwclix.exe#Version=2,0,197,10911'>" +
  5477.                "<PARAM NAME='WIS' VALUE='http://www.xfua.com/updates/" + updateDir + "/update.rrf'>" +
  5478.                "<embed src='http://www.xfua.com/updates/" + updateDir + "/update.rrf' width=88 " +
  5479.                "height=31 pluginspage=http://WWW.INSTALLFROMTHEWEB.COM/CLIENT></embed></OBJECT></center>";
  5480.  
  5481.  
  5482. /*
  5483. <OBJECT CLASSID="clsid:4E330863-6A11-11D0-BFD8-006097237877" HEIGHT=31 WIDTH=88
  5484. CODEBASE="http://www.installfromtheweb.com/install/iftwclix.exe#Version=2,0,197,10911">
  5485. <PARAM NAME="WIS" VALUE="http://www.installshield.com/product/iftw/iftweval/10911/IFTW2Eval.rrf">
  5486. <EMBED SRC="http://www.installshield.com/product/iftw/iftweval/10911/IFTW2Eval.rrf" WIDTH=88 HEIGHT=31
  5487. PLUGINSPAGE=HTTP://WWW.INSTALLFROMTHEWEB.COM/CLIENT/DEFAULT.ASP></EMBED></OBJECT> 
  5488. */
  5489.  
  5490.         str += "<br>After the installation process has completed you must close the browser and " +
  5491.                "restart it to load the new assets.<br>";
  5492.  
  5493.         str += "<br><br><center><img onClick=updateCancel() id=cancel src=controls/comm/cancel.jpg></center>"
  5494.  
  5495.  
  5496.  
  5497.         updateDiv.innerHTML = str;
  5498.  
  5499. //        updateFrame.location = "http://www.xfua.com/updates/" + filename;
  5500.     }
  5501.  
  5502. //    event.cancelBubble = true;
  5503. //    event.returnValue = false;
  5504. }
  5505.  
  5506.  
  5507.  
  5508. function updateClose() {
  5509.     return(true);
  5510. }
  5511.  
  5512.  
  5513.  
  5514. function updateCheckUpdates() {
  5515.     var oneDay = 1000 * 60 * 60 * 24;
  5516.     var oneWeek = oneDay * 7;
  5517.     var oneMonth = oneDay * 30;
  5518.     var doCheck = false;
  5519.     var timeNow, dateNow = new Date();
  5520.     var lastChecked = parseInt(commUpdateLastChecked);
  5521.  
  5522.     timeNow = dateNow.getTime();
  5523.  
  5524.     if(commUpdatePeriod == "day") {
  5525.         if(timeNow - lastChecked > oneDay)
  5526.             doCheck = true;
  5527.     }
  5528.  
  5529.     else if(commUpdatePeriod == "week") {
  5530.         if(timeNow - lastChecked > oneWeek)
  5531.             doCheck = true;
  5532.     }
  5533.  
  5534.     else if(commUpdatePeriod == "month") {
  5535.         if(timeNow - lastChecked > oneMonth)
  5536.             doCheck = true;
  5537.     }
  5538.  
  5539.     if(doCheck) {
  5540.         commUpdateLastChecked = timeNow + "";
  5541.         commSetPrefs();
  5542.         updateDoLoad("updates"); 
  5543.     }
  5544.  
  5545.     setTimeout("updateCheckUpdates()", 10000);
  5546. }
  5547.  
  5548. function mediaMouseOver() {
  5549.     var id = event.srcElement.id;
  5550.     var img, prefix;
  5551.  
  5552.     if(id.indexOf("Icon") < 0)
  5553.         return;
  5554.  
  5555.     prefix = id.substring(0, id.length - 4);
  5556.  
  5557.     img = eval(prefix + "Caption");
  5558.  
  5559.     mediaCaptionImg.src = img.src;
  5560.  
  5561.     mediaCaptionImg.style.visibility = "visible";
  5562.     mediaCaptionImg.style.top = mediaCaptionTop;
  5563.     mediaCaptionImg.style.left = mediaCaptionArray[prefix];
  5564. }
  5565.  
  5566. function mediaMouseOut() {
  5567.  
  5568. //    if(event.srcElement.id == "mediaCtrlLayer")
  5569.         mediaCaptionImg.style.visibility = "hidden";
  5570. }
  5571.  
  5572.  
  5573.  
  5574.  
  5575.  
  5576.  
  5577. //function temponclick() {
  5578. //    alert(event.x + ", " + event.y);
  5579. //}
  5580.  
  5581.  
  5582.