// PrecisionDiscovery.com © Copyright 2008 All Rights Reserved | Phone. 877-987-4545 

/*
This is a software product.
All Copyright statements must always remain in place in all files at all times
*******  PLEASE NOTE: DO NOT USE, IT MUST BE LICENSED FOR ALL USE  ******* 
*/


    // base size constaints: bytes, megabytes, gigabytes, etc
    var sizeScale = 1024;
    var mb = sizeScale * sizeScale;
    var gb = sizeScale * mb;
    var tb = sizeScale * gb;
    var pb = sizeScale * tb;
    var eb = sizeScale * pb;

    // media size constants: cd, dvd, dual sided dvd, etc
    var cd = Math.ceil(700 * mb);
    var dvd1 = Math.ceil(4.7 * gb);
    var dvd2 = Math.ceil(2 * dvd1);
    var br1 = 25 * gb;
    var br2 = 50 * gb;

    var sizeArray = new Array();
    sizeArray['mb'] = mb;
    sizeArray['gb'] = gb;
    sizeArray['tb'] = tb;
    sizeArray['pb'] = pb;
    sizeArray['eb'] = eb;
    sizeArray['cd'] = cd;
    sizeArray['dvd1'] = dvd1;
    sizeArray['dvd2'] = dvd2;
    sizeArray['br1'] = br1;
    sizeArray['br2'] = br2;

    // file type constants
    var pagesPerEmail = 2;
    var pagesPerSpreadsheet = 50;
    var pagesPerWordDocument = 8;
    var pagesPerPowerpoint = 14
    var pagesPerBankersBox = 2500;
    var printedPagesPerByte = 75000 / gb;

    var pagesPerDocument = 7;
    var bytesPerPage = 37000;

    var ppScale = 1024;
    var ppToMb = 75;
    var ppToGb = ppToMb * ppScale;
    var ppToTb = ppToGb * ppScale;

    function calc(form, inputValue, inputUnits, outputUnits, field) {
      inputValue = clean(inputValue);
      if (inputValue.match(/[^0-9.]/)) {
        writeError("The 'quanity' field may contain only numbers, optionally formatted with commas and a decimal point.");
        return;
      }
      // this is a simple override. if the input is not in bytes,
      // then treat "printed pages" as regular pages when converting
      // from left to right.
      if(!sizeArray[inputUnits] && outputUnits == "printed_pages") {
        outputUnits = "pages";
      }

      // if input == output, just output input
      if (inputUnits == outputUnits) {
        writeOutput(inputValue);
        return;
      }

      // special rule for converting specific document types
      // to "documents".
      if((inputUnits == "emails" || inputUnits == "word_documents" || inputUnits == "presentations" || inputUnits == "spreadsheets") && outputUnits == "documents") {
        writeOutput(inputValue);
        return;
      }

      writeError("");
      var result = 0;
      if(inputUnits == "pages") {
        if(outputUnits == "documents") {
          result = inputValue / pagesPerDocument;
        } else if(outputUnits == "bankers_boxes") {
          result = inputValue / pagesPerBankersBox
        } else {
          result = inputValue * bytesPerPage / sizeArray[outputUnits];
        }
      } else if(inputUnits == "documents") {
        if(outputUnits == "pages") {
          result = inputValue * pagesPerDocument;
        } else if(outputUnits == "bankers_boxes") {
          result = inputValue * pagesPerDocument / pagesPerBankersBox;
        } else {
          result = inputValue * pagesPerDocument * bytesPerPage / sizeArray[outputUnits];
        }
      } else if(inputUnits == "bankers_boxes") {
        if(outputUnits == "pages") {
          result = inputValue * pagesPerBankersBox;
        } else if(outputUnits == "documents") {
          result = inputValue * pagesPerBankersBox / pagesPerDocument;
        } else {
          result = inputValue * pagesPerBankersBox * bytesPerPage / sizeArray[outputUnits];
        }
      } else if(inputUnits == "emails") {
        if(outputUnits == "pages") {
          result = inputValue * pagesPerEmail;
        } else if(outputUnits == "documents") {
          result = inputValue * pagesPerEmail / pagesPerDocument;
        } else if(outputUnits == "bankers_boxes") {
          result = inputValue * pagesPerEmail / pagesPerBankersBox;
        } else {
          result = inputValue * pagesPerEmail * bytesPerPage / sizeArray[outputUnits];
        }
      } else if(inputUnits == "spreadsheets") {
        if(outputUnits == "pages") {
          result = inputValue * pagesPerSpreadsheet;
        } else if(outputUnits == "documents") {
          result = inputValue * pagesPerSpreadsheet / pagesPerDocument;
        } else if(outputUnits == "bankers_boxes") {
          result = inputValue * pagesPerSpreadsheet / pagesPerBankersBox;
        } else {
          result = inputValue * pagesPerSpreadsheet * bytesPerPage / sizeArray[outputUnits];
        }
      } else if(inputUnits == "presentations") {
        if(outputUnits == "pages") {
          result = inputValue * pagesPerPowerpoint;
        } else if(outputUnits == "documents") {
          result = inputValue * pagesPerPowerpoint / pagesPerDocument;
        } else if(outputUnits == "bankers_boxes") {
          result = inputValue * pagesPerPowerpoint / pagesPerBankersBox;
        } else {
          result = inputValue * pagesPerPowerpoint * bytesPerPage / sizeArray[outputUnits];
        }
      } else if(inputUnits == "word_documents") {
        if(outputUnits == "pages") {
          result = inputValue * pagesPerWordDocument;
        } else if(outputUnits == "documents") {
          result = inputValue * pagesPerWordDocument / pagesPerDocument;
        } else if(outputUnits == "bankers_boxes") {
          result = inputValue * pagesPerWordDocument / pagesPerBankersBox;
        } else {
          result = inputValue * pagesPerWordDocument * bytesPerPage / sizeArray[outputUnits];
        }
      } else {
        if(outputUnits == "pages") {
          result = inputValue * sizeArray[inputUnits] / bytesPerPage;
        } else if(outputUnits == "printed_pages") {
          result = inputValue * sizeArray[inputUnits] * printedPagesPerByte;
        } else if(outputUnits == "documents") {
          result = inputValue * sizeArray[inputUnits] / bytesPerPage / pagesPerDocument;
        } else if(outputUnits == "bankers_boxes") {
          result = inputValue * sizeArray[inputUnits] * printedPagesPerByte / pagesPerBankersBox;
        } else {
          result = inputValue * sizeArray[inputUnits] / sizeArray[outputUnits];
        }
      }
      writeOutput(result);
    }

    function clean(val) {
      return val.replace(/,/g, "").replace(/^\s+/, "").replace(/\s+$/, "");
    }

    function writeOutput(val) {
      document.getElementById("output").innerHTML = addCommas(Math.ceil(val));
    }

    function writeError(val) {
      document.getElementById("errorField").innerHTML = val;
    }

    function addCommas(nStr) {
      nStr += '';
      x = nStr.split('.');
      x1 = x[0];
      x2 = x.length > 1 ? '.' + x[1] : '';
      var rgx = /(\d+)(\d{3})/;
      while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
      }
      return x1 + x2;
    }