<html>
  <head>

    <script>
      var bookcount = "0";
      var book = [];
      var path = [];
      var plowest = [];
      var phighest = [];
      var porigin = [];
      var lowest = [];
      var highest = [];
      var origin = [];
      var prefix = [];
      var suffix = [];
      var padding = [];
    </script>

    <script src="viewer.js"></script>

    <script>
      function Pad(book, page) {
        var pad = padding[book];
        if (pad != "") {
          while (String(page).length < pad) {
            page = "0" + page;
          }
        }
        return page;
      }

      function ToRoman(num) {
        var sign = "";
        if (num < 0) {
          sign = "-";
          num = -num;
        }
        var result = "";
        if (num == 0) {
          result = "0";
        } else if (num < 4000) {
          var ref = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'];
          var xis = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
          for (var x = 0; x<ref.length; x++) {
            while(num >= xis[x]) {
              result = result + ref[x];
              num = num - xis[x];
            }
          }
        }
        return sign + result.toLowerCase();
      }

      var imageFiles = "";

      function NewBook() {
        if (bookcount == 0) {
          return;
        }

        // hide the download button if book pages are on a different server

        var i = document.myform.book.selectedIndex;
        if (path[i].indexOf(":") == -1) { // it is not on a different server
          Show("downloadspan");
        } else { // we can't download from another server
          Hide("downloadspan");
        }

        // treat a book of pdf files different from a book of jpeg files

        var suffix4 = suffix[i].substr(suffix[i].length - 4).toLowerCase();
        var suffix5 = suffix[i].substr(suffix[i].length - 5).toLowerCase();
        if (suffix4 == ".jpg" || suffix5 == "jpeg" || suffix4 == "gif" ||
            suffix4 == "png" || suffix4 == "bmp") {
          imageFiles = true;
          Show("jpgspan");
          Show("magnifyspan");
          Hide("pdfspan");
        } else {
          imageFiles = false;
          Show("pdfspan");
          Hide("jpgspan");
          Hide("magnifyspan");
        }

        // generate the page dropdown list

        var html = "<select name='page' onchange='NewPage();'>";
        if (plowest[i] != "" && phighest[i] != "") {
          for (var j=Number(plowest[i]); j<=Number(phighest[i]); j++) {
            html += "<option value='" + prefix[i] + Pad(i, j) + suffix[i] + "'>" + ToRoman(j-(plowest[i]-porigin[i])) + "</option>";
          }
        }
        if (lowest[i] != "" && highest[i] != "") {
          for (var j=Number(lowest[i]); j<=Number(highest[i]); j++) {
            html += "<option value='" + prefix[i] + Pad(i, j) + suffix[i] + "'>" + (j-(lowest[i]-origin[i])) + "</option>";
          }
        }
        html += "</select>";
        document.getElementById("pagespan").innerHTML = html;
        NewPage();
      }

      function NewPage() {

        if (imageFiles) {

          // put up a please-stand-by page

          window.frames.myimage.document.getElementById('frameimage').src = "wait.jpg"

          // need to do a delay, otherwise stand-by message doesn't get displayed

          setTimeout(NewPageContinued, 10);

        } else {
          NewPageContinued();
        }
      }

      function NewPageContinued() {

        // enable or disable the NEXT and PREV buttons as appropriate

        var index = document.myform.page.selectedIndex;
        if (index >= document.myform.page.length-1) {
          document.myform.next.disabled = true;
        } else {
          document.myform.next.disabled = false;
        }
        if (index == 0) {
          document.myform.prev.disabled = true;
        } else {
          document.myform.prev.disabled = false;
        }

        // display the new page

        var i = document.myform.book.selectedIndex;
        fileName = 
          path[i] + "/" +
          document.myform.page[document.myform.page.selectedIndex].value;
        if (imageFiles) {
          window.frames.myimage.document.getElementById('frameimage').src = fileName;
        } else {
          document.getElementById('pdfspan').innerHTML = 
            "<iframe src='" + fileName + "' width='100%' height='89%'></iframe>";
        }
      }

      function Prev() {
        var index = document.myform.page.selectedIndex;
        if (index > 0) {
          index--;
        }
        document.myform.page.selectedIndex = index;
        NewPage();
      }

      function Next() {
        var index = document.myform.page.selectedIndex;
        if (index < document.myform.page.length-1) {
          index++;
        }
        document.myform.page.selectedIndex = index;
        NewPage();
      }

      function PrinterFriendly() {
        var i = document.myform.book.selectedIndex;
        var page = path[i] + "/" + document.myform.page[document.myform.page.selectedIndex].value;
        var wind = window.open(page, '_blank');
        wind.focus();
      }

      function Download() {
        var i = document.myform.book.selectedIndex;
        var page = path[i] + "/" + document.myform.page[document.myform.page.selectedIndex].value;
        document.location =
          "http://stevemorse.org/viewer/downloadimage.php?file=" + page;
      }

      var scaleExponent = 0;

      var factor = Math.pow(2, 0.5);

      function Magnify() {
        scaleExponent++;
        ShowScale();
        var height = window.frames.myimage.document.getElementById('frameimage').height;
        var width = window.frames.myimage.document.getElementById('frameimage').width;
        window.frames.myimage.document.getElementById('frameimage').height = factor * height;
        window.frames.myimage.document.getElementById('frameimage').width = factor * width;
      }

      function Reduce() {
        scaleExponent--;
        ShowScale();
        var height = window.frames.myimage.document.getElementById('frameimage').height;
        var width = window.frames.myimage.document.getElementById('frameimage').width;
        window.frames.myimage.document.getElementById('frameimage').height = height / factor;
        window.frames.myimage.document.getElementById('frameimage').width = width / factor;
      }

      function ShowScale() {
        // use this in place of ShowScaleFactor() if you want to see a relative scale number
        document.getElementById('scale').innerHTML = scaleExponent;
        return;
      }

      function ShowScaleFactor() {
        // use this in place of ShowScaleExponent() if you want to see the scale multiplying factor
        var scale = "x ";
        if (scaleExponent < 0) {
          scale += "1/";
        }
        scale += Math.pow(factor,Math.abs(scaleExponent));
        document.getElementById('scale').innerHTML = scale;
      }

      function GetParameter(parameter) {

        // convert query string to array of individual arguments
        var query = GetQueryString();
        var arglist = query.split("&");

        // process each argument
        for (var j in arglist) {
          var equalSign = arglist[j].indexOf("=");
          var leftSide = (equalSign == -1) ? arglist[j] : arglist[j].substr(0, equalSign);
          if (leftSide == parameter) {
            var rightSide = (equalSign == -1) ? "" : arglist[j].substr(equalSign+1);
            return unescape(rightSide);
          }
        }
        return "";
      }

      function GetQueryString() {
        var url = document.location.toString();
        var questionmarkPosition = url.indexOf("?");
        return (questionmarkPosition == -1) ? "" : url.substr(questionmarkPosition+1);
      }

      function Hide(id) { // removes space taken up by element
        var object = document.getElementById(id);
        object.style.display = "none";
      }

      function Show(id) { // makes space for element
        var object = document.getElementById(id);
        object.style.display = "";
      }

      function Init() {
        var width = isNaN(window.innerWidth) ? window.clientWidth : window.innerWidth;
        var height = isNaN(window.innerHeight) ? window.clientHeight : window.innerHeight;
        var iframe = document.getElementById("iframe");
        iframe.width = .97*width;
        iframe.height = height - 100;

        NewBook();
        if (bookcount == 0) { // js file not found
          return;
        }
        var bookName = GetParameter("bookname");
        var pageNumber = GetParameter("pagenumber");
        if (bookName != "") {
          for (var i=0; i<document.myform.book.length; i++) {
            if (document.myform.book[i].text == bookName) {
              document.myform.book.selectedIndex = i;
              NewBook();
              break;
            }
          }
          if (pageNumber != "") {
            for (var i=0; i<document.myform.page.length; i++) {
              if (document.myform.page[i].text == pageNumber) {
                document.myform.page.selectedIndex = i;
                NewPage();
                break;
              }
            }
          }
        }
      ShowScale();
      }

    </script>

  </head>
  <body onload="Init();">
    <center>
      <form name="myform">

        Book:
        <select name="book" onchange="NewBook();">
          <script>
            for (var i=0; i<bookcount; i++) {
              document.write("<option>" + book[i] + "</option>");
            }
          </script>
        </select>

        &nbsp;&nbsp;&nbsp;

        Page:
        <input type="button" name="prev" value="Prev" onclick="Prev();">
        <span id="pagespan"><select name=page"><option></option></select></span>
        <input type="button" name="next" value="Next" onclick="Next();">

        <span id="magnifyspan">
          &nbsp;&nbsp;&nbsp;
          <input type='button' value='Reduce' onclick='Reduce();'>
          <span id="scale"></span>
          <input type='button' value='Enlarge' onclick='Magnify();'>
        </span>

        &nbsp;&nbsp;&nbsp;
        <input type="button" name="printer" value="Printer Friendly" onclick="PrinterFriendly();">
        <span id="downloadspan">
          <input type="button" name="download" value="Download Page" onclick="Download();">
        </span>

      </form>
      <span id="jpgspan">
        <iframe
          name='myimage'
          id = 'iframe'
          src='viewerframe.html'
          srcdoc='<html><body><center><img name="frameimage" id="frameimage"></center></body></html>'
          xsrc='javascript:"<html><body><center><img name=\"frameimage\" id=\"frameimage\"></center></body></html>"'
          xwidth='97%' xheight='89%'></iframe>
      </span>
      <span id="pdfspan">
      </span>
    </center>

    <font size='2'>
      <br>
      this tool was created using Stephen P Morse's <a href='http://stevemorse.org/viewer/createviewer.html'>One-Step Viewer generator</a>
    </font>
   </body>
 </html>