web.vablet.com Open in urlscan Pro
20.115.111.71  Public Scan

Submitted URL: https://url2563.vablet.com/ls/click?upn=5ZZaTPmZiLIdyDxS8jQASu6oufntIBIwn2sOjUCDgFATDJ4t6RT2jXrKjW4wwX8AL5mi_7OhTBrFjUuWys6...
Effective URL: https://web.vablet.com/Viewer?em=eric.mutema@nhs.net&rvc=BSHv64OWWqwx49IYtSprMTS0EKopWERRPaaH5J5i/Q4Mi8zMVCdBPSRI1cpmpa...
Submission: On January 16 via manual from GB — Scanned from DE

Form analysis 1 forms found in the DOM

POST ./Viewer?em=eric.mutema%40nhs.net&rvc=BSHv64OWWqwx49IYtSprMTS0EKopWERRPaaH5J5i%2fQ4Mi8zMVCdBPSRI1cpmpaxuuferYuc0Kx6UXWTtks55Iw%3d%3d

<form method="post" action="./Viewer?em=eric.mutema%40nhs.net&amp;rvc=BSHv64OWWqwx49IYtSprMTS0EKopWERRPaaH5J5i%2fQ4Mi8zMVCdBPSRI1cpmpaxuuferYuc0Kx6UXWTtks55Iw%3d%3d" id="mainForm" enctype="multipart/form-data" autocomplete="off">
  <div class="aspNetHidden">
    <input type="hidden" name="MainContent_scriptManager1_HiddenField" id="MainContent_scriptManager1_HiddenField" value="">
    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="">
    <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="">
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
      value="wmz0fLhBD9OYNLyvJKH0MHIIuepN/lYX88jf19w57ZBRoRccK5Lg0yEcLaY4AQCAgKskD2caVUgOhJFR3beGIt6Gq+hfsIbS09TJ1qzV8o/i1zIlFRpA7Q0NEjQ85r0oQorCWDa68Q/+fLqPIj7g0zJfZPs3VLXyKtxBEdYB2SeSfAZEBUvoN1Mm6u9X7pid/0ooVxuXmMv78z49xHASbLlsgYzQxS1PIDXkLSN+HrR5KB4b">
  </div>
  <script type="text/javascript">
    //<![CDATA[
    var theForm = document.forms['mainForm'];
    if (!theForm) {
      theForm = document.mainForm;
    }

    function __doPostBack(eventTarget, eventArgument) {
      if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
      }
    }
    //]]>
  </script>
  <script src="/WebResource.axd?d=TT9IypJS2R297I38802pdeIqankbAVZWIRkhsl68KJbLYaFLzI5w8C2I5oeybSc3sC96krxMlzsLqNSzoPohHgtZhwQ1&amp;t=638372843137062973" type="text/javascript"></script>
  <script src="/ScriptResource.axd?d=ieOiVdi_JEtNZbQu4vbTI86ix9V6MA5bgLR-yFDqeORqTFoArR2XuuSdO2g_KGkwnhNywReAkXBHlkcOAl-uJvNIw2eKEzp2CupWyXEg1bXKE7uX0&amp;t=ffffffffec54f2d7" type="text/javascript"></script>
  <script src="/ScriptResource.axd?d=z7QuHpzLCOCB-euXjGpi8YYupX9y0FELJWEPuUBK-h_h7KKYgyzL8ijcaR7NDh9ob7SDC6-8pEKrad24nOP2VQDMIr5ZDvZcAIW8GUWr4aIWhYPfROWwM-mqQ1A1OPwUNRpehw2&amp;t=ffffffffec54f2d7" type="text/javascript"></script>
  <script src="Ajax/VabletWebAjax.asmx/js" type="text/javascript"></script>
  <div class="aspNetHidden">
    <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="2AA4A978">
  </div>
  <!-- BEGIN LOGO -->
  <div class="logo display-none">
    <nav class="navbar navbar-inverse navbar-fixed-top 
            
        ">
      <div class="container-fluid">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <img src="/Assets/img/vablet/admin-console-vablet-welcome.png" alt="Vablet Logo" class="vablet-navbar-logo" style="height: 50px;display:none;">
        </div>
        <div class="collapse navbar-collapse" id="myNavbar">
          <ul class="nav navbar-nav navbar-right">
            <li class="navbar-right_deviceBtn"><a href="#" data-toggle="collapse" data-target=".navbar-collapse.in" onclick="javascript: btnHome_Click();"><i class="fa fa-home"></i> Home</a></li>
            <li class="navbar-right_emailMediaBtn"><a href="#" data-toggle="collapse" data-target=".navbar-collapse.in" onclick="javascript: forwardEmail();"><i class="fa fa-share"></i> Forward</a></li>
            <li class=""><a href="#" id="liMyProfile" data-toggle="collapse" data-target=".navbar-collapse.in" onclick="javascript: openProfile();"><i class="fa fa-user"></i> My Profile</a></li>
            <li class="navbar-right_deviceBtn"><a href="#" data-toggle="collapse" data-target=".navbar-collapse.in" onclick="javascript: openMessageCenter();"><i class="fa fa-envelope"></i> Message </a></li>
            <li class="navbar-right_deviceBtn"><a href="#" data-toggle="collapse" data-target=".navbar-collapse.in" onclick="javascript: openReport();"><i class="fa fa-bar-chart-o"></i> Report</a></li>
            <li class="navbar-right_deviceBtn"><a href="#" data-toggle="collapse" data-target=".navbar-collapse.in" onclick="javascript: openSearch();"><i class="fa fa-search"></i> Search</a></li>
            <li class="navbar-right_deviceBtn dropdown dropdown-extended"><a href="#" data-toggle="collapse" data-target=".navbar-collapse.in" onclick="javascript: openFilter();"><i class="fa fa-filter"></i> Media Type</a></li>
            <li class="navbar-right_deviceBtn"><a href="#" data-toggle="collapse" data-target=".navbar-collapse.in" onclick="javascript: openFavorite();"><i class="fa fa-star"></i> Favorites</a></li>
            <li class="navbar-right_deviceBtn"><a href="#" data-toggle="collapse" data-target=".navbar-collapse.in" onclick="javascript: logout();"><i class="fa fa-sign-out"></i> Log Out</a></li>
          </ul>
        </div>
      </div>
    </nav>
  </div>
  <!-- END LOGO -->
  <!-- BEGIN LOGIN -->
  <div class="content">
    <script type="text/javascript">
      //<![CDATA[
      Sys.WebForms.PageRequestManager._initialize('ctl00$MainContent$scriptManager1', 'mainForm', [], [], [], 90, 'ctl00');
      //]]>
    </script>
    <script src="/Assets/plugins/jquery.gridster/jquery.gridster.js"></script>
    <script src="/Assets/plugins/summernote/summernote.js" type="text/javascript"></script>
    <script src="/Assets/plugins/nivo-lightbox/nivo-lightbox.js"></script>
    <script src="/Assets/plugins/bootstrap-toastr/toastr.min.js" type="text/javascript"></script>
    <script src="/Assets/plugins/bootstrap-switch/js/bootstrap-switch.min.js" type="text/javascript"></script>
    <script src="/Assets/plugins/material-floating-button/mfb.js"></script>
    <script src="/Assets/plugins/material-floating-button/modernizr.touch.js"></script>
    <script src="/Assets/plugins/jszip/jszip.js" type="text/javascript"></script>
    <script src="/Assets/plugins/jszip/jszip-utils.js" type="text/javascript"></script>
    <script src="/Assets/plugins/typeahead.bundle.js" type="text/javascript"></script>
    <script src="/Assets/plugins/plyr/plyr.js"></script>
    <script src="/Assets/plugins/lightgallery2/lightgallery.umd.js"></script>
    <script src="captureEngineHelper.js"></script>
    <script>
      window.onerror = function(msg, url, lineNo, columnNo, error) {
        var isIE = /*@cc_on!@*/ false || !!document.documentMode;
        if (isIE) {
          openVabletWebNotAvailable();
        } else {
          var string = msg.toLowerCase();
          var substring = 'script error';
          var message = ['Message: ' + msg, 'URL: ' + url, 'Line: ' + lineNo, 'Column: ' + columnNo, 'Error object: ' + JSON.stringify(error)].join(' - ');
          if (string.indexOf(substring) > -1) {
            console.log('Script Error: ' + message);
          } else {
            console.log(message);
          }
          return false;
        }
      };
      (function() {
        if (typeof window === 'undefined') {
          return;
        }
        try {
          var ce = new window.CustomEvent('test', {
            cancelable: true
          });
          ce.preventDefault();
          if (ce.defaultPrevented !== true) {
            // IE has problems with .preventDefault() on custom events
            // http://stackoverflow.com/questions/23349191
            throw new Error('Could not prevent default');
          }
        } catch (e) {
          var CustomEvent = function(event, params) {
            var evt, origPrevent;
            params = params || {
              bubbles: false,
              cancelable: false,
              detail: undefined
            };
            evt = document.createEvent('CustomEvent');
            evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
            origPrevent = evt.preventDefault;
            evt.preventDefault = function() {
              origPrevent.call(this);
              try {
                Object.defineProperty(this, 'defaultPrevented', {
                  get: function() {
                    return true;
                  }
                });
              } catch (e) {
                this.defaultPrevented = true;
              }
            };
            return evt;
          };
          CustomEvent.prototype = window.Event.prototype;
          window.CustomEvent = CustomEvent; // expose definition to window
        }
      })();
    </script>
    <!-- load css -->
    <link href="https://vjs.zencdn.net/7.11.4/video-js.css" rel="stylesheet">
    <link rel="stylesheet" href="/Assets/plugins/videojs/videojs.record.min.css">
    <!-- load script -->
    <script src="https://vjs.zencdn.net/7.11.4/video.min.js"></script>
    <script src="https://www.WebRTC-Experiment.com/RecordRTC.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/webrtc-adapter/8.1.0/adapter.min.js"></script>
    <script src="/Assets/plugins/videojs/videojs.record.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/signature_pad@4.0.0/dist/signature_pad.umd.min.js"></script>
    <link type="text/css" href="/Assets/plugins/material-floating-button/mfb.css" rel="stylesheet">
    <link type="text/css" href="/Assets/plugins/jquery.gridster/jquery.gridster.css" rel="stylesheet">
    <link type="text/css" href="/Assets/plugins/summernote/summernote.css" rel="stylesheet">
    <link type="text/css" href="/Assets/plugins/bootstrap-toastr/toastr.min.css" rel="stylesheet">
    <link type="text/css" href="/Assets/plugins/nivo-lightbox/nivo-lightbox.css" rel="stylesheet">
    <link type="text/css" href="/Assets/plugins/nivo-lightbox/themes/default/default.css" rel="stylesheet">
    <link type="text/css" href="/Assets/plugins/bootstrap-switch/css/bootstrap-switch.min.css" rel="stylesheet" media="screen">
    <link rel="stylesheet" href="/Assets/plugins/plyr/plyr.css">
    <link type="text/css" rel="stylesheet" href="/Assets/plugins/lightgallery2/css/lightgallery-bundle.css">
    <link href="https://vjs.zencdn.net/7.20.3/video-js.css" rel="stylesheet">
    <script src="https://vjs.zencdn.net/7.20.3/video.min.js"></script>
    <script src="/Assets/plugins/videojs-watermark-with-text/videojs-watermark-with-text.js"></script>
    <link href="/Assets/plugins/videojs-watermark-with-text/videojs-watermark-with-text.css" rel="stylesheet">
    <style type="text/css">
      .gridtext {
        margin-top: 150px;
        width: 180px;
        margin-left: -20px;
        word-wrap: break-word;
        overflow: hidden;
        display: -webkit-box;
        -webkit-line-clamp: 4;
        -webkit-box-orient: vertical;
      }

      .gridtextmobile {
        /*margin-top: 55px;
            width: 55px;*/
        word-wrap: break-word;
        font-size: 12px;
        overflow: hidden;
        display: -webkit-box;
        -webkit-line-clamp: 3;
        -webkit-box-orient: vertical;
      }

      .gridCheckbox {
        /*margin-left: -20px !important;*/
        float: left;
        /*overflow: hidden;*/
        /*display: -webkit-box;
            -webkit-line-clamp: 4;
            -webkit-box-orient: vertical;*/
        width: 1.3em;
        height: 1.3em;
        background-color: white;
        border-radius: 50%;
        vertical-align: middle;
        border: 1px solid #ddd;
        /*-webkit-appearance: none;*/
        outline: none;
        cursor: pointer;
      }

      .gridCheckbox:checked {
        background-color: gray;
      }

      .star {
        /*margin-right: -20px !important;*/
        margin-top: -15px !important;
        float: right;
        overflow: hidden;
        display: -webkit-box;
        -webkit-line-clamp: 4;
        -webkit-box-orient: vertical;
        visibility: hidden;
        font-size: 30px;
        color: #1b6199;
        cursor: pointer;
      }

      .star:before {
        content: "\2606";
        position: absolute;
        visibility: visible;
        cursor: pointer !important;
      }

      .star:checked:before {
        content: "\2605";
        position: absolute;
        color: #ffd700;
        cursor: pointer !important;
      }

      .webMedia {
        background-size: contain;
        background-repeat: no-repeat;
        background-position: center;
        max-height: 140px;
        cursor: pointer;
      }

      .webFolder {
        background-size: contain;
        background-repeat: no-repeat;
        background-position: center;
        max-height: 140px;
        cursor: pointer;
      }

      .webVirtualFolder {
        background-size: contain;
        background-repeat: no-repeat;
        background-position: center;
        max-height: 140px;
        cursor: pointer;
      }

      .webBack {
        background-size: contain;
        background-repeat: no-repeat;
        background-position: center;
        max-height: 140px;
        cursor: pointer;
      }

      .webEmailMessage {
        cursor: pointer;
        background-image: url(https://vabletmedia.blob.core.windows.net:443/assets-11310/21e.png) !important;
      }

      .gridster ul {
        list-style: none;
        text-align: center;
        /*Make text unselectable*/
        -webkit-user-select: none;
        /* Safari */
        -moz-user-select: none;
        /* Firefox */
        -ms-user-select: none;
        /* IE10+/Edge */
        user-select: none;
        /* Standard */
      }

      .btn>i {
        font-size: 22px;
        padding-right: 10px;
      }

      .emailModal {
        color: black !important;
      }

      .note-profile .note-editor {
        background-color: white;
        float: right;
        min-width: 300px;
        margin-top: 80px;
        margin-right: 20px;
        padding: 20px;
      }

      .note-emailMessage .note-editor {
        background-color: white;
        min-width: 300px;
        max-width: 500px;
        min-height: 200px;
        max-height: 1080px;
        margin-left: auto;
        margin-right: auto;
        margin-top: 300px;
        padding: 20px;
      }

      html {
        background-position: center center;
        -webkit-background-size: cover;
        -moz-background-size: cover;
        -o-background-size: cover;
        background-size: cover;
        height: 100%;
        overflow: hidden;
      }

      body {
        height: 100%;
        overflow-y: scroll;
      }

      ::-webkit-scrollbar {
        width: 10px;
      }

      /* remove scrollbar space on mobile devices */
      @media only screen and (max-device-width: 736px) {
        ::-webkit-scrollbar {
          width: 0px !important;
        }
      }

      /*Nav bar*/
      .navbar {
        margin-bottom: 0;
      }

      body {
        padding-top: 50px !important;
      }

      .navbar-fixed-top {
        border-width: 0;
      }

      .navbar-inverse .navbar-toggle {
        border-color: transparent;
      }

      /*End Nav bar*/
      /*Brother white label*/
      .brother-navbar-inverse {
        background: #0d2ea0;
        background: linear-gradient(left, #0d2ea0 20%, #071956 80%);
        background: -webkit-gradient(linear, left top, right top, from(#0d2ea0), color-stop(0.2, #0d2ea0), color-stop(0.8, #071956), to(#071956)) !important;
      }

      .brother-navbar-inverse .navbar-nav>li>a {
        color: #dddddd;
      }

      .brother-navbar-inverse navbar-toggle:hover,
      .brother-navbar-inverse .navbar-toggle:focus {
        background-color: #0d2ea0 !important;
      }

      /*End Brother white label*/
      video::-internal-media-controls-download-button {
        display: none;
      }

      video::-webkit-media-controls-enclosure {
        overflow: hidden;
      }

      .sortableMedia {
        list-style-type: none;
        margin: 0;
        padding: 0;
        width: 100%;
      }

      .sortableMedia li {
        margin: 3px 10px 3px 0;
        padding: 1px;
        float: left;
        max-width: 400px;
        height: 55px;
        font-size: 1em;
        text-align: left;
        overflow: hidden;
      }

      .sortableMedia li img {
        max-height: 40px;
        float: left;
        padding-right: 10px;
      }

      .ui-state-default-deleteBtn {
        margin-right: -10px;
        color: #d84a38;
        float: left;
        overflow: overlay;
      }

      .qlertLocationBtn {
        width: 100%;
        height: 85px;
      }

      .qlertLocationBtn i {
        padding: 0;
      }

      .vjs-icon-record-start {
        color: red !important;
      }

      .vjs-modal-dialog.vjs-text-track-settings {
        /*background-color: #2B333F;
            background-color: rgba(43, 51, 63, 0.75);
            height: 70%;*/
        color: black;
      }

      .video-js {
        background: content-box;
        position: static;
        height: auto;
      }

      .video-js *:focus:not(:focus-visible) {
        background-color: black;
      }

      /*hide scrollbar within iFrame*/
      iframe::-webkit-scrollbar {
        display: none;
      }
    </style>
    <style itemref="typeahead" type="text/css">
      span.twitter-typeahead .tt-menu,
      span.twitter-typeahead .tt-dropdown-menu {
        cursor: pointer;
        position: absolute;
        top: 100%;
        left: 0;
        z-index: 1000;
        display: none;
        float: left;
        min-width: 160px;
        padding: 5px 0;
        margin: 2px 0 0;
        list-style: none;
        font-size: 14px;
        text-align: left;
        background-color: #ffffff;
        border: 1px solid #cccccc;
        border: 1px solid rgba(0, 0, 0, 0.15);
        border-radius: 4px;
        -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
        box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
        background-clip: padding-box;
      }

      span.twitter-typeahead .tt-suggestion {
        display: block;
        padding: 3px 20px;
        clear: both;
        font-weight: normal;
        line-height: 1.42857143;
        color: #333333;
        white-space: nowrap;
      }

      span.twitter-typeahead .tt-suggestion.tt-cursor,
      span.twitter-typeahead .tt-suggestion:hover,
      span.twitter-typeahead .tt-suggestion:focus {
        color: #ffffff;
        text-decoration: none;
        outline: 0;
        background-color: #337ab7;
      }

      .input-group.input-group-lg span.twitter-typeahead .form-control {
        height: 46px;
        padding: 10px 16px;
        font-size: 18px;
        line-height: 1.3333333;
        border-radius: 6px;
      }

      .input-group.input-group-sm span.twitter-typeahead .form-control {
        height: 30px;
        padding: 5px 10px;
        font-size: 12px;
        line-height: 1.5;
        border-radius: 3px;
      }

      span.twitter-typeahead {
        width: 100%;
      }

      .input-group span.twitter-typeahead {
        display: block !important;
        height: 34px;
      }

      .input-group span.twitter-typeahead .tt-menu,
      .input-group span.twitter-typeahead .tt-dropdown-menu {
        top: 32px !important;
      }

      .input-group span.twitter-typeahead:not(:first-child):not(:last-child) .form-control {
        border-radius: 0;
      }

      .input-group span.twitter-typeahead:first-child .form-control {
        border-top-left-radius: 4px;
        border-bottom-left-radius: 4px;
        border-top-right-radius: 0;
        border-bottom-right-radius: 0;
      }

      .input-group span.twitter-typeahead:last-child .form-control {
        border-top-left-radius: 0;
        border-bottom-left-radius: 0;
        border-top-right-radius: 4px;
        border-bottom-right-radius: 4px;
      }

      .input-group.input-group-sm span.twitter-typeahead {
        height: 30px;
      }

      .input-group.input-group-sm span.twitter-typeahead .tt-menu,
      .input-group.input-group-sm span.twitter-typeahead .tt-dropdown-menu {
        top: 30px !important;
      }

      .input-group.input-group-lg span.twitter-typeahead {
        height: 46px;
      }

      .input-group.input-group-lg span.twitter-typeahead .tt-menu,
      .input-group.input-group-lg span.twitter-typeahead .tt-dropdown-menu {
        top: 46px !important;
      }

      #overlay {
        position: absolute;
        color: #FFF;
        text-align: center;
        font-size: 20px;
        background-color: rgba(221, 221, 221, 0.3);
        z-index: 2147483647;
      }
    </style>
    <style itemref="bg">
      body {
        background: url(Assets/img/vablet/bg-bigstock.jpg) no-repeat center center fixed;
        -webkit-background-size: cover;
        -moz-background-size: cover;
        -o-background-size: cover;
        background-size: cover;
      }
    </style>
    <style>
      #toast-container>.toast {
        background-image: none !important;
      }

      #toast-container>.toast:before {
        position: fixed;
        font-family: FontAwesome;
        font-size: 24px;
        line-height: 18px;
        float: left;
        color: #FFF;
        padding-right: 0.5em;
        margin: auto 0.5em auto -1.5em;
      }

      #toast-container>.toast-warning:before {
        content: "\f06a";
      }

      #toast-container>.toast-error:before {
        content: "\f071";
      }

      #toast-container>.toast-info:before {
        content: "\f005";
      }

      #toast-container>.toast-success:before {
        content: "\f00c";
      }
    </style>
    <script type="text/javascript">
      if ('serviceWorker' in navigator) {
        window.addEventListener('load', function() {
          navigator.serviceWorker.register('/sw.js').then(function(registration) {
            // Registration was successful
            console.log('ServiceWorker registration successful with scope: ', registration.scope);
          }, function(err) {
            // registration failed :(
            console.log('ServiceWorker registration failed: ', err);
          });
        });
      }
      window.addEventListener("beforeunload", function(evt) {
        if (isLightBoxOpened) {
          closeLightbox();
          closeLightGallery();
          // Google Chrome requires returnValue to be set
          evt.returnValue = '';
          return null;
        }
      });
    </script>
    <script type="text/javascript">
      var random = 0;
      var udid = '';
      var debug;
      var fileUrl;
      var title;
      var fileType;
      var fileID;
      var startupMediaID = 0;
      var smsEnabled = false;
      var importEnabled = false;
      var hideSystemFolders = false;
      var newFolderEnabled = false;
      var profileContent = '';
      var profile = {};
      var srxContent;
      var registered = false;
      var isBrotherWhiteLabel = false;
      var isBlrWhiteLabel = false;
      var videoCompleted = false;
      var googleAuthToken = '';
      var lockStartupMedia = false;
      var pdfViewerOpened = false;
      var eakBypass = false;
      var isCurrentFileScorm = false;
      var currentScormFileRegID = '';
      var tempInfo = '';
      var scormCompletedFileIDs = [];
      var scormInProgressFileIDs = [];
      var isLightBoxOpened = false;
      var mediaManifest;
      var mediaManifestString;
      var LG;

      function CaptureEngine() {}
      CaptureEngine.prototype.callNativeMethod = function(functionName, json, callback) {
        switch (functionName) {
          case 'getCaptureLeaderBoardHTML':
            console.log('getCaptureLeaderBoardHTML');
            console.log(json);
            break;
          case 'GetInfoManifest':
            var responseData = {
              infoManifest: info,
              success: true
            };
            callback(responseData);
            break;
          case 'CloseFile':
            console.log('CloseFile called. Closing lightbox');
            closeLightbox();
            break;
          case 'SendEmail':
            //console.log(json);
            //console.log(json.to.join(','));
            //console.log(json.subject);
            //console.log(json.body);
            //console.log(json.attachmentName);
            //console.log(json.attachmentDataBase64Encoded);
            VabletWeb.Ajax.VabletWebAjax.SendEmailWithBase64Attachment('' + udid + '', '' + random + '', '' + json.to.join(',') + '', '' + json.subject + '', '' + json.body + '', '' + json.attachmentName + '', '' + json
              .attachmentDataBase64Encoded + '',
              function(succeed) {});
            var result = {
              "success": true
            };
            callback(result);
            break;
          case 'SSOResponse':
            console.log('SSOResponse called');
            console.log(json);
            break;
          case 'userPhotoAndCameraSelection':
            console.log('userPhotoAndCameraSelection called');
            console.log(json);
            console.log(json.elementId);
            $('.zipHtmlCapture-image-input').change(function() {
              var inputID = this.id;
              var fr = new FileReader;
              fr.onload = function() {
                var base64Image = fr.result.substring(fr.result.indexOf(',') + 1);
                console.log(base64Image);
                //$("#" + inputID).attr('base64Value', base64Image);
                var responseData = {
                  userCancelled: false,
                  fileURL: base64Image,
                  base64EncodedJpegThumb: base64Image,
                  success: true,
                  error: '',
                  message: ''
                };
                callback(responseData);
              };
              fr.readAsDataURL(this.files[0]);
            });
            $('.zipHtmlCapture-image-input').click();
            break;
          case 'sendFormToIDetectML':
            console.log('made it to IDETECT');
            var fieldName = json.formData[0].id;
            var base64Data = json.formData[0].value;
            console.log(base64Data);
            var surveyID = getSurveyID();
            VabletWeb.Ajax.VabletWebAjax.UploadIDetectPhoto('' + udid + '', '' + random + '', '' + surveyID + '', '' + fieldName + '', '' + base64Data + '', function(succeed) {
              console.log(succeed);
              callback(JSON.parse(succeed));
            });
            break;
            // Zhtml Engine
          case 'getXMLForFileName':
            var title = json.fileName;
            VabletWeb.Ajax.VabletWebAjax.GetFileIDWithTitle(title, udid, random, function(succeed) {
              console.log(succeed);
              if (succeed) {
                var resultJson = $.parseJSON(succeed);
                $.ajax({
                  url: resultJson.remotePath,
                  type: 'GET',
                  dataType: "xml",
                  success: function(initData) {
                    var getXMLForFileNameResponse = {};
                    getXMLForFileNameResponse.success = true;
                    getXMLForFileNameResponse.xmlString = initData;
                    console.log(getXMLForFileNameResponse);
                    callback(getXMLForFileNameResponse);
                  },
                  error: function(msg, url, line) {
                    console.log('error out at Info2');
                    console.log("error msg: " + msg);
                    console.log("url: " + url);
                    console.log("line: " + line);
                  }
                });
              }
            });
            break;
          case 'getFolderFullDataByPath':
            //console.log('getFolderFullDataByPath');
            let folderPath = json.folderPath;
            VabletWeb.Ajax.VabletWebAjax.NativeInterface_GetFolderFullData('getfolderfulldatabypath', folderPath, udid, random, mediaManifestString, function(succeed) {
              if (succeed && succeed.IsCompleted) {
                callback(succeed.Result);
              }
            });
            break;
          case 'getFolderFullDataById':
            let folderId = json.folderId;
            VabletWeb.Ajax.VabletWebAjax.NativeInterface_GetFolderFullData('getfolderfulldatabyid', folderId, udid, random, mediaManifestString, function(succeed) {
              if (succeed && succeed.IsCompleted) {
                callback(succeed.Result);
              }
            });
            break;
          case 'searchForTerm':
            let searchTerm = json.searchTerm;
            VabletWeb.Ajax.VabletWebAjax.NativeInterface_SearchForTerm(searchTerm, udid, random, function(succeed) {
              if (succeed) {
                var resultJson = $.parseJSON(succeed);
                var searchForTermResponse = {};
                searchForTermResponse.success = true;
                searchForTermResponse.isFinished = true;
                searchForTermResponse.files = resultJson.files;
                callback(searchForTermResponse);
              }
            });
            break;
          case 'getThumbnailForFileId':
            VabletWeb.Ajax.VabletWebAjax.NativeInterface_GetThumbnailForFileId(json.fileId, udid, random, function(succeed) {
              var thumbnailResponse = {};
              thumbnailResponse.base64EncodedJpeg = succeed;
              thumbnailResponse.fileId = json.fileId;
              callback(thumbnailResponse);
            });
            break;
          case 'useVabletGUIToSendEmailForFiles':
            let fileIDs = json.fileIds.join(",");
            // This call pulls a selectMediaObjArray with the metadata to feed into emailFile() call
            VabletWeb.Ajax.VabletWebAjax.NativeInterface_useVabletGUIToSendEmailForFiles(fileIDs, udid, random, function(succeed) {
              // We need to temporary clear the current file to allow emailFile to handle the email interface
              let tempCurrentFile = getCurrentFile();
              clearCurrentFile();
              selectedMediaObjArray = JSON.parse(succeed);
              selectedMedia = [];
              selectedMediaObjArray.forEach(function(mediaObj) {
                selectedMedia.push(mediaObj.id);
              });
              if (selectedMedia.length > 0) {
                emailFile();
                // Restoring the current file
                $("#divEmailFile").on("hide.bs.modal", function(e) {
                  localStorage.setItem("currentFileJson", JSON.stringify(tempCurrentFile));
                  // Sending callback response back to the caller
                  var response = {};
                  response.success = true;
                  callback(response);
                  // Turning the handler off since we don't want to fire this more than once
                  $(this).off('hide.bs.modal');
                })
              }
            });
            break;
          case 'toggleFavoriteStatusForFileWithId':
            if (favoriteMedia.indexOf(json.fileId) > -1) {
              favoriteMedia.removeFromArray(json.fileId);
              // Remove from fav
              VabletWeb.Ajax.VabletWebAjax.RemoveFromPresentationFolder(udid, random, 'folder_fav', json.fileId, function(succeed) {
                var response = {
                  'success': true
                };
                callback(response);
              });
            } else {
              favoriteMedia.push(json.fileId);
              // Add to fav
              VabletWeb.Ajax.VabletWebAjax.CopyToPresentationFolder(udid, random, 'folder_fav', json.fileId, function(succeed) {
                var response = {
                  'success': true
                };
                callback(response);
              });
            }
            break;
          case 'createUserFolder':
            VabletWeb.Ajax.VabletWebAjax.CopyToPresentationFolder(udid, random, 'new_' + json.folderName, '', function(succeed) {
              var response = {
                'success': true
              };
              callback(response);
            });
            break;
          case 'renameUserFolder':
            VabletWeb.Ajax.VabletWebAjax.RenamePresentationFolderByName(udid, random, json.folderName, json.newFolderName, function(succeed) {
              var response = {
                'success': true
              };
              callback(response);
            });
            break;
          case 'deleteUserFolder':
            VabletWeb.Ajax.VabletWebAjax.DeletePresentationFolderByName(udid, random, json.folderName, function(succeed) {
              var response = {
                'success': true
              };
              callback(response);
            });
            break;
          case 'removeFileIdsFromUserFolder':
            VabletWeb.Ajax.VabletWebAjax.RemoveFromPresentationFolder(udid, random, json.folderName, json.fileIdArray.join(","), function(succeed) {
              var response = {
                'success': true
              };
              callback(response);
            });
            break;
          case 'addFileIdsToUserFolder':
            VabletWeb.Ajax.VabletWebAjax.CopyToPresentationFolder(udid, random, 'new_' + json.folderName, json.fileIdArray.join(","), function(succeed) {
              var response = {
                'success': true
              };
              callback(response);
            });
            break;
            // End Zhtml Engine
          case 'getLatestManifest':
            getMediaManifest();
            var response = {
              'success': true
            };
            callback(response);
            break;
          case 'toggleTagStatusForFileWithId':
            var response = {
              'success': true
            };
            callback(response);
            break;
          default:
            console.log('called Native Method - ' + functionName);
            console.log(json);
            break;
        }
        return '';
      }
      var isSubmitting = false;
      var submittedSurveyResponseID = 0;
      CaptureEngine.prototype.sendFormAsSurvey = function(formID, callback) {
        //console.log($("#" + formID));
        if (!isSubmitting) {
          toastr["success"]("Submitting...");
          isSubmitting = true;
          var jsonString = getCaptureJsonStringForSubmit();
          var emailAccessKey = getEmailAccessKey();
          if (jsonString != '') {
            VabletWeb.Ajax.VabletWebAjax.UploadSurveyResponse('' + udid + '', '' + random + '', '' + jsonString + '', '' + emailAccessKey + '', function(succeed) {
              isSubmitting = false;
              var showLeaderBoard = false;
              if (showLeaderBoard) {
                var leaderBoardUrl = 'https://admin2.vablet.com/Capture/CaptureLeaderboard/' + udid + '/' + random + '/' + getSurveyID();
                try {
                  document.getElementById('LoaderWrap').style = "display:none;"
                } catch (ex) {}
                var imageBox = $(".nivo-lightbox-image");
                //var divFrame = '<div style="line-height:1.5 !important;background-color:white;">' + data + '</div>';
                //imageBox.children().hide();
                //
                //imageBox.css('overflow', 'auto');
                //imageBox.css('text-align', 'initial');
                //imageBox.append(divFrame);
                var iframe = '<iframe src="' + leaderBoardUrl + '" seamless="seamless" scrolling="auto" height="560px" width="800px" align="middle" scale="1.5" style="border:none;"></iframe>';
                imageBox.children().hide();
                imageBox.css('background-color', 'white');
                imageBox.css('line-height', 'normal');
                imageBox.append(iframe);
              } else {
                //closeLightbox();
              }
              toastr["success"]("Submitted");
              submittedSurveyResponseID = succeed;
              callback();
            });
          } else {
            toastr["error"]("Submit Error");
            isSubmitting = false;
          }
        }
      }
      CaptureEngine.prototype.sendFormToIDetectML = function(photoElmID, callback) {
        var foundForm = document.getElementById("CaptureForm");
        var formString2 = VabletFormTools.form2ArrayString(foundForm);
        //alert(formString2);
        try {
          console.log(photoElmID);
          let photoElement = document.querySelector("#" + photoElmID);
          if (photoElement == "null" || photoElement == null || photoElement == undefined || photoElement == "") {
            alert(`Cannot find field with photoElmID: {$photoElmID}`);
            return false;
          }
          //let photoLocation = escape(photoElement.getAttribute('vabletFileUrl'));
          let photoLocation = escape(photoElement.getAttribute('base64value'));
          if (photoLocation == "null" || photoLocation == null || photoLocation == undefined || photoLocation == "") {
            alert("No image was selected.");
            return false;
          }
          //let formString = `[{"id":"${photoElmID}", "type":"PhotoSelect","value":"${photoLocation}"}]`;
          let formString = '[{"id":"' + photoElmID + '", "type":"PhotoSelect","value":"' + photoLocation + '"}]';
          //let formString = VabletFormTools.formObj2String(photoEle);
          //alert(formString);
          VabletNativeInterface.callNativeMethod("sendFormToIDetectML", {
            "formData": eval(formString),
            "suppressFinishAlert": false,
            "sendToQueue": false
          }, callback);
        } catch (err) {
          alert(err);
        }
        return false;
      }
      // Convert a passed form reference to a string formatted like
      // a JavaScript array of objects
      CaptureEngine.prototype.form2ArrayString = function(form) {
        var elem = "";
        var output = "[";
        for (var i = 0; i < form.elements.length; i++) {
          elem = form.elements[i];
          if (elem.id || elem.name) {
            output += VabletFormTools.formObj2String(form.elements[i]) + ",";
          }
        }
        if (output != "[") {
          output = output.substring(0, output.length - 1)
        }
        output = VabletFormTools.addSignaturesToOutput(output);
        output = VabletFormTools.addPhotosToOutput(output);
        output = output + "]";
        return output;
      }
      CaptureEngine.prototype.formObj2String = function(obj) {
        var output = "{";
        if (obj.name) {
          output += '"name":"' + obj.name + '",';
        }
        if (obj.id) {
          output += '"id":"' + obj.id + '",';
        }
        if (obj.type === "file" && obj.getAttribute('accept').indexOf("image") >= 0) {
          output += '"type":"PhotoSelect",';
          output += '"value":"' + escape(obj.getAttribute('vabletFileUrl')) + '"';
        } else {
          output += '"type":"' + obj.type + '",';
          switch (obj.type) {
            case "radio":
              //if (obj.id) {
              //    obj = document.forms[0].elements[obj.id];
              //    var radioVal = '"value":""';
              //    for (var i = 0; i < obj.length; i++) {
              //        if (obj[i].checked) {
              //            radioVal = '"value":"' + escape(obj[i].value) + '"';
              //            i = obj.length;
              //        }
              //    }
              //    output += radioVal;
              //} else {
              if (obj.name) {
                var checked = document.querySelector('input[name="' + obj.name + '"]:checked');
                if (checked) {
                  var radioVal = '"value":"' + escape(checked.value) + '"';
                  output += radioVal;
                } else output += '"value":""';
              } else {
                if (obj.checked) {
                  output += '"selected":true,';
                } else {
                  output += '"selected":false,';
                }
                output += '"value":"' + escape(obj.value) + '"';
              }
              break;
            case "checkbox":
              if (obj.checked) {
                output += '"checked":true,';
              } else {
                output += '"checked":false,';
              }
              output += '"value":"' + escape(obj.value) + '"';
              break;
            case "select-one":
              output += '"value":"' + escape(obj.value) + '"';
              break;
            case "select-multiple":
              output += '"value":"' + escape(obj.value) + '"';
              break;
            case "text":
            case "email":
            case "tel":
            case "date":
              output += '"value":"' + escape(obj.value) + '"';
              break;
            case "textarea":
              output += '"value":"' + escape(obj.value) + '"';
              break;
            default:
              output += "";
          }
        }
        output += "}"
        return output;
      }
      CaptureEngine.prototype.addSignaturesToOutput = function(output) {
        var inputs = Array.prototype.slice.call(document.querySelectorAll(".vabletSignature"));
        var count = inputs.length;
        if (!count) {
          return output;
        }
        for (index = 0; index < count; index++) {
          var currentFormItem = inputs[index];
          if (!currentFormItem) {
            continue;
          }
          var canvasItem = currentFormItem.querySelectorAll(".vabletSignatureCanvas")[0];
          var dataUrl = canvasItem.toDataURL();
          var base64String = dataUrl.substr(dataUrl.indexOf("base64,"), dataUrl.length).replace("base64,", "");
          var outputAddition = "{";
          if (currentFormItem.name) {
            outputAddition += '"name":"' + escape(currentFormItem.name) + '",';
          }
          if (currentFormItem.id) {
            outputAddition += '"id":"' + escape(currentFormItem.id) + '",';
          }
          outputAddition += '"type":"Signature",';
          outputAddition += '"value":"' + escape(base64String) + '"';
          outputAddition += "}"
        }
        if (!outputAddition && outputAddition == "") {
          return output;
        }
        if (output && output != "" && output != "[") {
          outputAddition = "," + outputAddition;
        }
        return output + outputAddition;
      }
      CaptureEngine.prototype.addPhotosToOutput = function(output) {
        var inputs = Array.prototype.slice.call(document.querySelectorAll(".vabletPhotoSelect"));
        var count = inputs.length;
        if (!count) {
          return output;
        }
        // WTAM - 2021-6-18: This additional array opening bracket shouldn't be needed
        //var outputAddition = "[";
        var outputAddition = "";
        var prepend = "";
        for (index = 0; index < count; index++) {
          var currentFormItem = inputs[index];
          if (!currentFormItem) {
            continue;
          }
          outputAddition += prepend + "{";
          if (currentFormItem.name) {
            outputAddition += '"name":"' + escape(currentFormItem.name) + '",';
          }
          if (currentFormItem.id) {
            outputAddition += '"id":"' + escape(currentFormItem.id) + '",';
          }
          outputAddition += '"type":"PhotoSelect",';
          outputAddition += '"value":"' + escape(currentFormItem.getAttribute('vabletFileUrl')) + '"';
          outputAddition += "}"
          prepend = ",";
        }
        // WTAM - 2021-6-18: This additional array closing bracket shouldn't be needed
        //outputAddition += "]"
        if (!outputAddition && outputAddition === "") {
          return output;
        }
        if (output && output !== "" && output !== "[") {
          outputAddition = "," + outputAddition;
        }
        return output + outputAddition;
      }
      var VabletNativeInterface = new CaptureEngine();
      var VabletFormTools = new CaptureEngine();

      function getParameterByName(name) {
        name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
        var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
          results = regex.exec(location.search);
        return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
      }
      $.urlParam = function(name, url) {
        if (!url) {
          url = window.location.href;
        }
        var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(url);
        if (!results) {
          return "";
        }
        return results[1] || "";
      }

      function isVabletWeb() {
        return true;
      }
    </script>
    <script type="text/javascript">
      var isMobile = false; //initiate as false
      var isEmailAccessKey = false;
      var emailAccessLogID = 0;
      var isAdminAccessKey = false;
      var isAutoLogin = false;

      function getUTCTimestamp() {
        var now = new Date;
        var utc_timestamp = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds());
        return utc_timestamp;
      }
      $(document).ready(function() {
        var isLocalStorageDisabled = false;
        // Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem
        // throw QuotaExceededError. We're going to detect this and just silently drop any calls to setItem
        // to avoid the entire page breaking, without having to do a check at each usage of Storage.
        if (typeof localStorage === 'object') {
          try {
            localStorage.setItem('localStorage', 1);
            localStorage.removeItem('localStorage');
          } catch (e) {
            Storage.prototype._setItem = Storage.prototype.setItem;
            Storage.prototype.setItem = function() {};
            alert('Your web browser does not support storing settings locally. In Safari, the most common cause of this is using "Private Browsing Mode". Some settings may not save or some features may not work properly for you.');
            isLocalStorageDisabled = true;
          }
        }
        if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
          isMobile = true;
          setupMobile();
        }
        if (getParameterByName("org").toLowerCase().indexOf("brother") > -1) {
          isBrotherWhiteLabel = true;
        }
        if (isBrotherWhiteLabel) {
          $("#divLogin_Logo").attr("src", "/Assets/img/whitelabel/brother/logo.png");
          $("#divLogin_Logo").attr("style", "width: 80%;");
          document.title = "Brother Information";
        }
        if (getParameterByName("org").toLowerCase().indexOf("blr") > -1 || getParameterByName("org").toLowerCase().indexOf("training") > -1) {
          isBlrWhiteLabel = true;
        }
        if (isBlrWhiteLabel) {
          $("#divLogin_Logo").attr("src", "/Assets/img/whitelabel/blr/logo.png");
          //$("#divLogin_Logo").attr("style", "width: 80%;");
          document.title = "Training Today";
        }
        // Use this variable to keep track of invitation key passed in from the device invitation email
        var otp = getParameterByName('iid');
        // Use this variable to keep track of authenticated session after going through SSO
        var authenticatedEmail = getParameterByName('se');
        var authenticatedKey = getParameterByName('sk');
        $("#divLogin").on("shown.bs.modal", function() {
          if (authenticatedEmail && authenticatedKey) {
            // Strip the parameters from the url in case user wants to bookmark the page
            var query = window.location.search.substring(1)
            if (query.length) {
              if (window.history != undefined && window.history.pushState != undefined) {
                if (isBrotherWhiteLabel) {
                  window.history.pushState({}, document.title, (window.location.pathname + '?org=brother'));
                } else {
                  if (isBlrWhiteLabel) {
                    window.history.pushState({}, document.title, (window.location.pathname + '?org=blr'));
                  } else {
                    window.history.pushState({}, document.title, window.location.pathname);
                  }
                }
              }
            }
            $("#txt_divLogin_UDID").val(authenticatedEmail);
            $("#txt_divLogin_Password").val(authenticatedKey);
            // Clear the variables from memory or else logout will be an issue
            authenticatedEmail = "";
            authenticatedKey = "";
            divLogin_LOGIN_Click();
          } else {
            if (otp && !registered) {
              // Strip the iid from the url in case user wants to bookmark the page
              var query = window.location.search.substring(1)
              if (query.length) {
                if (window.history != undefined && window.history.pushState != undefined) {
                  if (isBrotherWhiteLabel) {
                    window.history.pushState({}, document.title, (window.location.pathname + '?org=brother'));
                  } else {
                    if (isBlrWhiteLabel) {
                      window.history.pushState({}, document.title, (window.location.pathname + '?org=blr'));
                    } else {
                      window.history.pushState({}, document.title, window.location.pathname);
                    }
                  }
                }
              }
              $("#txt_divLogin_OTP").val(otp);
              $("#txt_divLogin_OTP").hide();
              divLogin_NewUser_Click();
              $("#txt_divLogin_RegisterNewPassword").val("").focus();
            } else {
              $("#txt_divLogin_UDID").focus();
            }
          }
        });
        var autoLogin = true;
        // Reset Device Password
        var resetVerificationCode = $.urlParam('rvc');
        var email = $.urlParam('em');
        if (resetVerificationCode != '' && email != '') {
          $('#divLogin').modal({
            keyboard: false,
            backdrop: 'static'
          });
          $("#tabLogin").hide();
          $("#tabUpdatePassword").fadeIn('slow');
          $("#txt_divLogin_ResetCode").val(resetVerificationCode);
          $("#txt_divLogin_ResetEmail").val(decodeURIComponent(email));
          // Strip the parameter from the url
          if (window.history != undefined && window.history.pushState != undefined) {
            window.history.pushState({}, document.title, window.location.pathname);
          }
          autoLogin = false;
          return;
        }
        $(".navbar-right_emailMediaBtn").hide();
        var accessKey = $.urlParam('eak');
        var token = $.urlParam('key');
        if (accessKey != '' && token != '') {
          $('#divLogin').modal('hide');
          $(".navbar-right_deviceBtn").hide();
          // Hiding the forward button
          //$(".navbar-right_emailMediaBtn").show();
          // Hiding the My Profile button
          $("#liMyProfile").parent().hide();
          $("#mfb_Menu").hide();
          autoLogin = false;
          isEmailAccessKey = true;
          // Find out if we need additional auth
          VabletWeb.Ajax.VabletWebAjax.GetEmailAccessKeyAuthStatus(accessKey, function(succeed) {
            // succeed returns true if auth is needed, false if not
            if (succeed && succeed != "") {
              console.log('auth needed, processing');
              $("#divAccessKey").on("shown.bs.modal", function() {
                $("#txt_divAccessKey_Email").focus();
              });
              $('#divAccessKey').modal({
                keyboard: false,
                backdrop: 'static'
              });
              return;
            } else {
              ProcessEmailAccessKeyViewer(accessKey, token);
              return;
            }
          });
        } else {
          var adminAccessKey = $.urlParam('aak');
          if (adminAccessKey != '') {
            $('#divLogin').modal('hide');
            $(".logo").show();
            $(".copyright").show();
            $(".navbar-right_deviceBtn").hide();
            $("#liMyProfile").parent().hide();
            $("#mfb_Menu").hide();
            autoLogin = false;
            isAdminAccessKey = true;
            ProcessAdminAccessKeyViewer(adminAccessKey);
            return;
          } else {
            if (!isLocalStorageDisabled) {
              getLocation();
              // Show the modal only if we're not doing auto login
              if (localStorage.getItem("rememberMe") == "1" && autoLogin) {
                App.startPageLoading('loading...');
                var udid = localStorage.getItem("rememberudid");
                var token = localStorage.getItem("remembertoken");
                $("#txt_divLogin_UDID").val(udid);
                $("#txt_divLogin_Password").val(token);
                divLogin_LOGIN_Click();
                // using this token to track if we need to show the login div or not
                isAutoLogin = true;
              } else {
                $('#divLogin').modal({
                  keyboard: false,
                  backdrop: 'static'
                });
              }
            }
          }
        }
      });

      function ProcessEmailAccessKeyViewer(accessKey, token) {
        var isEmailAccessKeyActive = false;
        // Check to confirm accessKey is still valid
        VabletWeb.Ajax.VabletWebAjax.ValidateEmailAccessKeyExpiration(accessKey, function(succeed) {
          isEmailAccessKeyActive = succeed;
          if (isEmailAccessKeyActive) {
            // Show the toolbar
            $(".logo").show();
            $(".copyright").show();
            // get themeUrl by EmailAccessKey
            VabletWeb.Ajax.VabletWebAjax.GetSettingsByEmailAccessKey(accessKey, function(succeed) {
              if (succeed && succeed != "") {
                var resultJson = $.parseJSON(succeed);
                if (resultJson.customerID == "11310" || resultJson.customerID == '11999') {
                  window.location.href = 'https://web.vablet.com/Showcase?eak=' + accessKey + '&key=' + token;
                }
                loadTheme(resultJson.themeUrl);
                var name = resultJson.firstName + " " + resultJson.lastName;
                profileContent = name + "<br/>" + "<a href='mailto://" + resultJson.email + "'>" + resultJson.email + "</a>";
                profile.name = name;
                profile.email = resultJson.email;
                if (resultJson.phone != "") {
                  profileContent += "<br/>" + "<a href='tel://" + resultJson.phone + "'>" + resultJson.phone + "</a>";
                  profile.phone = resultJson.phone;
                }
                $("#liMyProfile").html('<i class="fa fa-user"></i> ' + name);
              } else {
                applyDefaultTheme();
              }
            });
            setupGridster();
            getMediaByEmailAccessKey(accessKey, token);
            setEmailAccessKey(accessKey);
          } else {
            openMediaExpired();
          }
        });
      }

      function ProcessAdminAccessKeyViewer(accessKey) {
        //applyDefaultTheme();
        VabletWeb.Ajax.VabletWebAjax.GetSettingsByAdminAccessKey(accessKey, function(succeed) {
          if (succeed && succeed != "") {
            var resultJson = $.parseJSON(succeed);
            loadTheme(resultJson.themeUrl);
          } else {
            applyDefaultTheme();
          }
        });
        setupGridster();
        setAdminAccessKey(accessKey);
        getMediaByAdminAccessKey(accessKey);
      }

      function setupMobile() {
        //$(".logo").find('img').css('height', '35px');
        //$("#iconBar").find('a').attr('style', 'padding:1px !important;');
      }
      var previousFolderIDs = [];
      var previousFolderThemeUrls = [];

      function loadTheme(url) {
        // only continue if url is provided
        if (url) {
          currentThemeURL = url;
          // add a hash to the theme url to make sure it doesn't get cached
          var hash = (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
          url += '?h=' + hash;
          jQuery.get(url, function(data) {
            var xml = jQuery.parseXML(data);
            var json = xmlToJson(xml);
            var folderViewSetting = json.theme.folderView;
            //console.log(folderViewSetting);
            if (folderViewSetting) {
              applyTheme(folderViewSetting);
            }
          });
        } else {
          applyDefaultTheme();
        }
      }

      function applyDefaultTheme() {
        clearTheme();
        var body = $('body');
        body.prepend(
          '<style type="text/css" itemref="theme"> .webFolder { background-image: url(https://vabletmedia.blob.core.windows.net/assets-11310/ee126d95-6d1d-4861-b3bb-e5f4a2b30e6a.png); background-size: contain; background-repeat: no-repeat; } .webBack { background-image: url(https://vabletmedia.blob.core.windows.net/assets-11310/3203d8a0-0416-43de-8a1e-f7fc047086af.png); background-size: contain; background-repeat: no-repeat; }  .webNewFolder { background-image: url(https://vabletmedia.blob.core.windows.net/assets-11310/ee126d95-6d1d-4861-b3bb-e5f4a2b30e6a.png); background-size: contain; background-repeat: no-repeat; } </style>'
          );
        //body.prepend('<style> .viewer { background-color: #ffffff !important; } </style>');
        body.prepend('<style itemref="theme"> .viewer { background-image: url(Assets/img/bg-white.png); background-repeat: no-repeat; background-position: center center; background-attachment: fixed; z-index: -1; } </style>');
      }

      function applyTheme(folderViewSetting) {
        clearTheme();
        //console.log('applying theme...');
        if (folderViewSetting) {
          //console.log('theme setting found');
          var body = $('body');
          // folder icon
          var defaultIconUrl = 'https://vabletmedia.blob.core.windows.net/assets-11310/ee126d95-6d1d-4861-b3bb-e5f4a2b30e6a.png';
          var folderIcon = folderViewSetting.defaultFolderIconLink;
          if (folderIcon.text) {
            //console.log('folder icon');
            body.prepend('<style itemref="theme"> .webFolder { background-image: url(' + folderIcon.text + '); background-size: contain; background-repeat: no-repeat; } </style>');
            defaultIconUrl = folderIcon.text;
          } else {
            body.prepend(
              '<style itemref="theme"> .webFolder { background-image: url(https://vabletmedia.blob.core.windows.net/assets-11310/ee126d95-6d1d-4861-b3bb-e5f4a2b30e6a.png); background-size: contain; background-repeat: no-repeat; } </style>');
          }
          // back folder icon
          var backFolderIcon = folderViewSetting.backFolderIconLink;
          if (backFolderIcon.text) {
            //console.log('back icon');
            body.prepend('<style itemref="theme"> .webBack { background-image: url(' + backFolderIcon.text + '); background-size: contain; background-repeat: no-repeat; } </style>');
          } else {
            body.prepend('<style itemref="theme"> .webBack { background-image: url(https://vabletmedia.blob.core.windows.net/assets-11310/3203d8a0-0416-43de-8a1e-f7fc047086af.png); background-size: contain; background-repeat: no-repeat; } </style>');
          }
          // new folder icon
          var newFolderIcon = folderViewSetting.newFolderIconLink;
          if (newFolderIcon) {
            //console.log('new folder icon');
            body.prepend('<style itemref="theme"> .webNewFolder { background-image: url(' + newFolderIcon.text + '); background-size: contain; background-repeat: no-repeat; } </style>');
          } else {
            body.prepend('<style itemref="theme"> .webNewFolder { background-image: url(' + defaultIconUrl + '); background-size: contain; background-repeat: no-repeat; } </style>');
          }
          var backGroundImage = folderViewSetting.backGroundImageLinkIpadLandscape;
          if (backGroundImage.text) {
            //console.log('background img');
            // add background image
            body.prepend('<style itemref="theme"> .viewer { background-image: url(' + backGroundImage.text + '); background-repeat: no-repeat; background-position: center; background-attachment: fixed; z-index: -1; } </style>');
            //var transparancy = folderViewSetting.transparancyForBackgroundImages;
          } else {
            // remove the vablet default bg
            $("body").find('style[itemref=bg]').remove();
          }
          var backgroundColor = folderViewSetting.backgroundColorHex;
          if (backgroundColor.text) {
            //console.log('background text');
            // change background color
            body.prepend('<style itemref="theme"> .viewer { background-color: #' + backgroundColor.text + ' !important; } </style>');
          }
          var toolbarColor = folderViewSetting.toolbarColorHex;
          if (toolbarColor.text) {
            //console.log('toolbar');
            // change toolbar color
            body.prepend('<style itemref="theme"> .logo { background-color: #' + toolbarColor.text + ' !important; } </style>');
          }
          var folderTextColor = folderViewSetting.folderTextColorHex;
          if (folderTextColor.text) {
            //console.log('folder text');
            // change folder text color
            var folderTextHtml = '<style itemref="theme"> .webFolder .gridtext { color: #' + folderTextColor.text + ' !important; } </style>';
            var backTextHtml = '<style itemref="theme"> .webBack .gridtext { color: #' + folderTextColor.text + ' !important; } </style>';
            if (isMobile) {
              folderTextHtml = folderTextHtml.replace('.gridtext', '.gridtextmobile');
              backTextHtml = backTextHtml.replace('.gridtext', '.gridtextmobile');
            }
            body.prepend(folderTextHtml);
            body.prepend(backTextHtml);
          }
          var virtualFolderTextColor = folderViewSetting.virtualFolderTextColorHex;
          if (virtualFolderTextColor.text) {
            //console.log('folder text');
            // change folder text color
            var virtualFolderTextHtml = '<style itemref="theme"> .webVirtualFolder .gridtext { color: #' + virtualFolderTextColor.text + ' !important; } </style>';
            if (isMobile) {
              virtualFolderTextHtml = virtualFolderTextHtml.replace('.gridtext', '.gridtextmobile');
            }
            body.prepend(virtualFolderTextHtml);
          }
          var fileTextColor = folderViewSetting.readFileTextColorHex;
          if (fileTextColor.text) {
            //console.log('file text');
            // change file text color
            var fileTextHtml = '<style itemref="theme"> .webMedia .gridtext { color: #' + fileTextColor.text + ' !important; } </style>';
            if (isMobile) {
              fileTextHtml = fileTextHtml.replace('.gridtext', '.gridtextmobile');
            }
            body.prepend(fileTextHtml);
          }
          var logoImage = folderViewSetting.logoImage;
          //console.log(logoImage);
          //debug = logoImage;
          try {
            if (logoImage.imageLink.text) {
              var themeLogoCss = '<style itemref="theme"> #themeLogo { background-image: url(' + logoImage.imageLink.text +
                '); background-repeat: no-repeat; position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: -1; background-position-y: bottom; ';
              // background-size needs to be set as {width} {height} pair - set width to auto since we are only getting the height attribute from theme
              themeLogoCss += ' background-size: auto ' + logoImage["@attributes"].height + 'px; ';
              themeLogoCss += 'background-position-x: ' + logoImage["@attributes"].alignment + '; ';
              themeLogoCss += 'margin-bottom: ' + logoImage["@attributes"].offsetFromBottom + 'px; ';
              themeLogoCss += ' } </style > ';
              body.prepend(themeLogoCss);
            }
          } catch (ex) {}
          try {
            if (folderViewSetting.displayBorder && folderViewSetting.displayBorder.text == '1') {
              var gridBorderHtml = '<style itemref="theme"> .gridBorder { border: 1px solid #eee; } </style>';
              body.prepend(gridBorderHtml);
            }
          } catch (ex) {}
        } else {
          // default folder icons
          body.prepend(
            '<style itemref="theme"> .webFolder { background-image: url(https://vabletmedia.blob.core.windows.net/assets-11310/ee126d95-6d1d-4861-b3bb-e5f4a2b30e6a.png); background-size: contain; } .webBack { background-image: url(https://vabletmedia.blob.core.windows.net/assets-11310/3203d8a0-0416-43de-8a1e-f7fc047086af.png); background-size: contain; } .webNewFolder { background-image: url(https://vabletmedia.blob.core.windows.net/assets-11310/ee126d95-6d1d-4861-b3bb-e5f4a2b30e6a.png); background-size: contain;  } </style>'
            );
        }
      }
      // Changes XML to JSON
      function xmlToJson(xml) {
        // Create the return object
        var obj = {};
        if (xml.nodeType == 1) { // element
          // do attributes
          if (xml.attributes.length > 0) {
            obj["@attributes"] = {};
            for (var j = 0; j < xml.attributes.length; j++) {
              var attribute = xml.attributes.item(j);
              obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
            }
          }
        } else if (xml.nodeType == 3) { // text
          obj = xml.nodeValue;
        }
        // do children
        if (xml.hasChildNodes()) {
          for (var i = 0; i < xml.childNodes.length; i++) {
            var item = xml.childNodes.item(i);
            var nodeName = item.nodeName.replace("#text", "text");
            if (typeof(obj[nodeName]) == "undefined") {
              obj[nodeName] = xmlToJson(item);
            } else {
              if (typeof(obj[nodeName].push) == "undefined") {
                var old = obj[nodeName];
                obj[nodeName] = [];
                obj[nodeName].push(old);
              }
              obj[nodeName].push(xmlToJson(item));
            }
          }
        }
        return obj;
      }

      function getItems(info) {
        setupGridster();
        getLatestFavoriteMedia();
        if (info.theCustomStartFolder == '') {
          openFolder('0', rootThemeURL);
        } else {
          previousFolderIDs[0] = '0';
          openFolderName(info.theCustomStartFolder);
        }
        processInfoOptions(info.Options);
      }

      function processInfoOptions(options) {
        // Enable SMS if it is enabled
        smsEnabled = (getOptionValue(options, "canSMS") == "1");
        // Enable Upload if it is enabled
        importEnabled = (getOptionValue(options, "importEnabled") == "1");
        // Set the flag for hiding system folders if enabled
        hideSystemFolders = (getOptionValue(options, "hideSystemFolders") == "1");
        var skipStartupMedia = false;
        var openMediaFileID = getParameterByName("om");
        if (openMediaFileID) {
          openMedia(openMediaFileID);
          skipStartupMedia = true;
        }
        if (!skipStartupMedia) {
          // Launch startup media if available
          startupMediaID = getOptionValue(options, "startUpMediaFileID");
          var startUpMediaViews = getOptionValue(options, "startUpMediaViews");
          var startUpMediaStartDate = getOptionValue(options, "startUpMediaStartDate");
          var startUpMediaEndDate = getOptionValue(options, "startUpMediaEndDate");
          var startUpMediaExitable = getOptionValue(options, "startUpMediaExitable");
          if (startUpMediaExitable == "1") {
            lockStartupMedia = false;
          } else {
            lockStartupMedia = true;
          }
          if (startupMediaID != "0") {
            var launchStartupMedia = true;
            var today = new Date();
            if (startUpMediaStartDate != '0') {
              var startDateTicks = startUpMediaStartDate.replace("Date(", "").replace(")", "");
              // Need to add the unary + to get a valid Date
              var startDate = new Date(+startDateTicks);
              if (today < startDate) {
                launchStartupMedia = false;
              }
            }
            if (startUpMediaEndDate != '0') {
              console.log(startUpMediaEndDate);
              var endDateTicks = startUpMediaEndDate.replace("Date(", "").replace(")", "");
              var endDate = new Date(+endDateTicks);
              if (today > endDate) {
                launchStartupMedia = false;
              }
            }
            if (startUpMediaViews && startUpMediaViews != 0) {
              var previousStartUpMediaID = $.cookie('previousStartUpMediaID');
              if (previousStartUpMediaID && parseInt(previousStartUpMediaID) != startupMediaID) {
                $.removeCookie('startUpMediaViews');
              }
              if ($.cookie('startUpMediaViews')) {
                var currentCount = $.cookie('startUpMediaViews');
                if (parseInt(currentCount) >= parseInt(startUpMediaViews)) {
                  launchStartupMedia = false;
                } else {
                  $.cookie('startUpMediaViews', (parseInt(currentCount) + 1));
                }
              } else {
                $.cookie('startUpMediaViews', "1");
              }
            }
            if (launchStartupMedia) {
              openMedia(startupMediaID);
              $.cookie('previousStartUpMediaID', startupMediaID);
            }
          }
        }
      }

      function getOptionValue(options, key) {
        for (var i = 0; i < options.length; i++) {
          if (options[i].Key == key) {
            return options[i].Value;
          }
        }
        return "0";
      }

      function configShowcase() {
        var showcaseTemplatesUrl = 'https://ws.vablet.com/VabletService/GetShowcaseTemplates.json/' + udid + '/' + random;
        $.ajax({
          url: showcaseTemplatesUrl,
          type: 'GET',
          dataType: "json",
          success: function(initData) {
            console.log(initData);
            initData.forEach((showcase) => {
              let showcaseOpt = document.createElement('option');
              showcaseOpt.value = showcase.showcaseTemplateID;
              showcaseOpt.innerHTML = showcase.companyName;
              $("#selShowcase").append(showcaseOpt);
            });
          },
          error: function(msg, url, line) {
            console.log('error out at GetShowcaseTemplates.json');
            console.log("error msg: " + msg);
            console.log("url: " + url);
            console.log("line: " + line);
          }
        });
      }

      function getMediaManifest() {
        VabletWeb.Ajax.VabletWebAjax.GetMediaManifest(udid, random, function(succeed) {
          //console.log(succeed);
          mediaManifestString = succeed;
          mediaManifest = JSON.parse(succeed);
          console.log(mediaManifest);
        });
      }

      function findFileIDInManifest(fileID) {
        var result = mediaManifest.itemList.filter(obj => {
          return obj.ID === fileID
        });
        if (result.length > 0) {
          return result[0];
        } else {
          console.log('digging in group');
        }
      }

      function setupGridster() {
        var baseDimension = 140;
        var min_cols = 3;
        var max_cols = 6;
        var margins = 35;
        var body = $('body');
        if (isMobile) {
          var width;
          if (screen.height > screen.width) {
            width = screen.width;
          } else {
            width = screen.height;
          }
          baseDimension = width / 5;
          min_cols = 4;
          max_cols = min_cols;
          margins = 5;
          // Set the gridtext location
          body.prepend('<style type="text/css"> .gridtextmobile { margin-top: ' + baseDimension + 'px; } .webMedia { max-height: ' + baseDimension + 'px !important; }  .webFolder { max-height: ' + baseDimension +
            'px !important;} .webBack { max-height: ' + baseDimension + 'px !important;} .webVirtualFolder { max-height: ' + baseDimension + 'px !important;}</style>');
        } else {
          // Setup videoPlayer max-width and max-height based on dimension of screen
          //body.prepend('<style type="text/css"> .videoPlayer { max-width: ' + $(window).width() * 0.8 + 'px; max-height: ' + $(window).height() * 0.8 + 'px; } </style>');
        }
        var gridster = $(".gridster > ul").gridster({
          widget_margins: [margins, margins],
          widget_base_dimensions: [baseDimension, baseDimension * 1.5],
          min_cols: min_cols,
          max_cols: max_cols,
          avoid_overlapped_widgets: true
        }).data('gridster');
        // Clear local storage of existing data
        localStorage.clear();
        localStorage.setItem("baseDimension", baseDimension);
        gridster.disable();
      }

      function backToPrevFolder() {
        openFolder(getPreviousFolderID(), getPreviousFolderThemeUrl());
      }

      function getPreviousFolderID() {
        // remove the current folder
        previousFolderIDs.splice(previousFolderIDs.length - 1);
        // return the previous folder
        return previousFolderIDs.splice(previousFolderIDs.length - 1).toString();
      }

      function clearPreviousFolderCache() {
        // Making sure we're clearing the folder cache for the previous folder. If we're already in the folder before calling this, then we will need to subtrack 1 and 2
        // If we haven't opened the folder yet, then we will only need to subtrack 1
        // This call is only needed when we create or delete a folder
        switch (previousFolderIDs.length) {
          case 1:
            localStorage.setItem(previousFolderIDs[previousFolderIDs.length - 1], '');
          default:
            if (previousFolderIDs.length > 1) {
              localStorage.setItem(previousFolderIDs[previousFolderIDs.length - 1], '');
              localStorage.setItem(previousFolderIDs[previousFolderIDs.length - 2], '');
            }
        }
      }

      function getPreviousFolderThemeUrl() {
        // remove the current folder
        previousFolderThemeUrls.splice(previousFolderThemeUrls.length - 1);
        // return the previous folder
        return previousFolderThemeUrls.splice(previousFolderThemeUrls.length - 1).toString();
      }

      function btnHome_Click() {
        // Temp variable to store the base dimension
        var baseDimension = localStorage.getItem("baseDimension");
        // Clear the local storage to refresh all contents
        localStorage.clear();
        // If the device has a startup media, we open it instead of opening root
        if (startupMediaID && startupMediaID > 0) {
          openMedia(startupMediaID);
        } else {
          openFolder('0', rootThemeURL);
        }
        // Set the base dimension back into the local storage
        localStorage.setItem("baseDimension", baseDimension);
      }
      var isWorking = false;
      var rootThemeURL = "";
      var currentThemeURL = "";
      var changedFolder = false;

      function openFolderName_Zhtml(folderPath) {
        if (lockStartupMedia) {
          hideLightGallery();
        } else {
          closeLightGallery();
        }
        openFolderName(folderPath);
      }

      function openFolderName(folderPath) {
        console.log(folderPath);
        // call ajax to get folderID, then call openFolder
        if (udid && random) {
          VabletWeb.Ajax.VabletWebAjax.GetFolderIDWithFolderPath(folderPath, udid, random, function(succeed) {
            if (succeed && succeed > 0) {
              openFolder(succeed);
            } else {
              btnHome_Click();
            }
          });
        } else {
          closeLightbox();
        }
      }
      var currentFolderName = '';

      function openFolder(folderID, themeUrl) {
        setTagBtn();
        currentFolderName = $("#" + folderID).find('h4').html();
        changedFolder = true;
        if (!isWorking) {
          isWorking = true;
          var gridster = $(".gridster > ul").gridster().data('gridster');
          gridster.remove_all_widgets();
          App.startPageLoading('loading...');
          // close the gallery after grid content is removed for cleaner experience
          closeLightbox();
          closeLightGallery();
          if (themeUrl && themeUrl != currentThemeURL) {
            console.log('loading theme - ' + themeUrl);
            loadTheme(themeUrl);
          }
          if (themeUrl) {
            previousFolderThemeUrls[previousFolderThemeUrls.length] = themeUrl;
          } else {
            if (folderID == '0') {
              previousFolderThemeUrls[previousFolderThemeUrls.length] = rootThemeURL;
            } else {
              previousFolderThemeUrls[previousFolderThemeUrls.length] = "";
            }
          }
          // See if the folder being opened is a presentation folder
          if (typeof folderID === 'string' && folderID.startsWith("p_")) {
            setPresentationFolderUI(folderID);
          } else {
            unsetPresentationFolderUI();
          }
          var folderJson = localStorage.getItem(folderID);
          if (folderID > -1 && folderJson != null && folderJson != '') {
            setTimeout(function() {
              //console.log('found local storage folder');
              var dynaNode = JSON.parse(folderJson);
              openFolder_ProcessAddObject(gridster, dynaNode, folderID);
              App.stopPageLoading();
              isWorking = false;
            }, 200);
          } else {
            VabletWeb.Ajax.VabletWebAjax.GetNodesByDeviceIDForWeb(folderID, udid, random, function(succeed) {
              if (succeed) {
                if (succeed == "logout") {
                  logout();
                  showErrorMessage_Login('Your session has expired. Please log in again');
                } else {
                  var dynaNode = JSON.parse(succeed);
                  //console.log('found dynanode folder ' + folderID);
                  // Setting folder content to local storage for caching
                  if (folderID == '0') {
                    localStorage.setItem(folderID, succeed);
                  } else {
                    localStorage.setItem(folderID, succeed);
                  }
                  openFolder_ProcessAddObject(gridster, dynaNode, folderID);
                }
              }
              App.stopPageLoading();
              isWorking = false;
            });
          }
        }
      }

      function setPresentationFolderUI(folderID) {
        setRemoveBtn(folderID);
        $("#btnPresentationFolderSetting").show();
        currentPresentationFolderID = folderID;
      }

      function unsetPresentationFolderUI() {
        setCopyBtn();
        $("#btnPresentationFolderSetting").hide();
      }

      function openFolder_ProcessAddObject(gridster, dynaNode, folderID) {
        if (folderID == '0') {
          // Add New folder if enabled
          if (newFolderEnabled) {
            var newBtnHtml = '<li class="new webVirtualFolder webNewFolder gridBorder" onclick="openFolder(-7);"><h4 class="gridtext">New</h4></li>';
            if (isMobile) {
              newBtnHtml = newBtnHtml.replace('gridtext', 'gridtextmobile');
            }
            gridster.add_widget(newBtnHtml, 1, 1);
          }
          addObjectToGridster(gridster, dynaNode.children);
        } else {
          // Add back button
          var backBtnHtml = '<li class="new webBack gridBorder" onclick="backToPrevFolder();"><h4 class="gridtext">Back</h4></li>';
          if (isMobile) {
            backBtnHtml = backBtnHtml.replace('gridtext', 'gridtextmobile');
          }
          gridster.add_widget(backBtnHtml, 1, 1);
          addObjectToGridster(gridster, dynaNode);
        }
        if (previousFolderIDs.length > 0) {
          // Making sure we're not opening the same folder as the previous folder
          if (previousFolderIDs[previousFolderIDs.length - 1] != folderID) {
            // Setting the current folderID at the end of the previousFolderIDs array
            previousFolderIDs[previousFolderIDs.length] = folderID;
          }
        } else {
          // Setting the current folderID at the end of the previousFolderIDs array
          previousFolderIDs[previousFolderIDs.length] = folderID;
        }
      }
      var testVar = '';

      function getMediaByEmailAccessKey(emailAccessKey, token) {
        if (!isWorking) {
          isWorking = true;
          var gridster = $(".gridster > ul").gridster().data('gridster');
          gridster.remove_all_widgets();
          App.startPageLoading('loading...');
          var emailNoteContent = '';
          VabletWeb.Ajax.VabletWebAjax.GetNoteContentByEmailAccessKey(emailAccessKey, false, function(succeed) {
            if (succeed && succeed != "") {
              emailNoteContent = succeed;
            }
            localStorage.setItem("emailNoteContent", emailNoteContent);
          });
          VabletWeb.Ajax.VabletWebAjax.GetNodesByEmailAccessKeyForWeb(emailAccessKey, token, function(succeed) {
            testVar = succeed;
            if (succeed) {
              var dynaNode = JSON.parse(succeed);
              console.log(dynaNode);
              var emailMsgBtnHtml = '<li class="new webFolder webEmailMessage" onclick="openEmailMessage();"><h4 class="gridtext"></h4></li>';
              if (isMobile) {
                emailMsgBtnHtml = emailMsgBtnHtml.replace('gridtext', 'gridtextmobile');
              }
              // Add the message button only if note exists
              if (emailNoteContent) {
                //2-20-2018 Temporary removing the email message button
                //gridster.add_widget(emailMsgBtnHtml, 1, 1);
              }
              addObjectToGridster(gridster, dynaNode.children);
              //// auto open if only 1 media
              //if ((dynaNode.children.length == 1))
              //    openMedia(dynaNode.children[0].key);
              // auto open first media
              if ((dynaNode.children.length > 0)) {
                //openMedia(dynaNode.children[0].key);
                $($(".gridster").find('li')[0]).click();
              }
            } else {
              openMediaNotAvailable(true);
            }
            App.stopPageLoading();
            isWorking = false;
          });
        }
      }

      function getMediaByAdminAccessKey(adminAccessKey) {
        if (!isWorking) {
          isWorking = true;
          var gridster = $(".gridster > ul").gridster().data('gridster');
          gridster.remove_all_widgets();
          App.startPageLoading('loading...');
          VabletWeb.Ajax.VabletWebAjax.GetNodesByAdminAccessKeyForWeb(adminAccessKey, function(succeed) {
            if (succeed) {
              var dynaNode = JSON.parse(succeed);
              console.log(dynaNode);
              addObjectToGridster(gridster, dynaNode.children);
              fileID = $.urlParam('om');
              if (fileID && $("#" + fileID).hasClass("webMedia")) {
                openMedia(fileID);
              }
            } else {
              openMediaNotAvailable();
            }
            App.stopPageLoading();
            isWorking = false;
          });
        }
      }

      function addFolderToGridster(gridster, node) {
        // Add folder
        if (!node.hidden) {
          var folderHtml = '<li class="new webFolder gridBorder ' + node.key + '" id="' + node.key + '" onclick="openFolder(this.id, \'' + node.themeUrl + '\');"><h4 class="gridtext">' + node.title + '</h4></li>';
          if (isMobile) {
            folderHtml = folderHtml.replace('gridtext', 'gridtextmobile');
          }
          gridster.add_widget(folderHtml, 1, 1);
          if (node.icon != "") {
            // Using class instead of id due to javascript bug
            $("." + node.key).css("background-image", "url(" + node.icon + ")");
            // Setting a max-height to prevent clipping
            $("." + node.key).css("max-height", localStorage.getItem("baseDimension") + "px");
          }
        }
      }

      function addMediaToGridster(gridster, node) {
        var today = new Date();
        var startDateTicks = node.startDate.replace("/Date(", "").replace(")/", "");
        var endDateTicks = node.endDate.replace("/Date(", "").replace(")/", "");
        // Need to add the unary + to get a valid Date
        var startDate = new Date(+startDateTicks);
        var endDate = new Date(+endDateTicks);
        if (today > startDate && today < endDate) {
          // Add media
          var mediaHtml = '<li class="new webMedia gridBorder ' + node.key + '" id="' + node.key + '" onclick="openMedia(this.id);" onerror="alert(this);" canExport="' + node.canExport + '">';
          if (node.isFakeFile) {
            mediaHtml = mediaHtml.replace("openMedia(this.id)", "openDirectUrl('" + node.directUrl + "')");
          }
          var checkBoxHtml = '<input class="gridCheckbox" type="checkbox" id="ckBox_' + node.key + '" onclick="toggleSelectMedia(this.parentNode.id);"';
          if (selectedMedia.indexOf(node.key) > -1) {
            checkBoxHtml += ' checked="checked" ';
          }
          checkBoxHtml += '/>';
          var starHtml = '<input class="star gridFav" type="checkbox" id="ckBoxFav_' + node.key + '" onclick="toggleFavMedia(this.parentNode.id);"';
          if (favoriteMedia.indexOf(node.key) > -1) {
            starHtml += ' checked="checked" ';
          }
          starHtml += '/>';
          var labelHtml = '<h4 class="gridtext" id="gt_' + node.key + '">';
          // Check and see if the file is in completed list of scorm files
          if (scormCompletedFileIDs.indexOf(parseInt(node.key, 10)) > -1) {
            labelHtml += ' <span style="color: green; white-space: break-spaces;';
            if (isMobile) {
              labelHtml += 'font-size: 6pt;';
            }
            labelHtml += '">[COMPLETED] <i class="fa fa-check"></i><br/></span> ';
          }
          // Check and see if the file is in progress list of scorm files
          if (scormInProgressFileIDs.indexOf(parseInt(node.key, 10)) > -1) {
            labelHtml += ' <span style="color: orange; white-space: break-spaces;';
            if (isMobile) {
              labelHtml += 'font-size: 6pt;';
            }
            labelHtml += '">[IN PROGRESS] <i class="fa fa-clock-o"></i><br/></span> ';
          }
          labelHtml += node.title;
          labelHtml += '</h4></li > ';
          if (isEmailAccessKey || isAdminAccessKey) {
            mediaHtml += labelHtml;
          } else {
            if (!node.hideCheckbox) {
              mediaHtml += checkBoxHtml;
            }
            mediaHtml += starHtml + labelHtml;
          }
          if (isMobile) {
            mediaHtml = mediaHtml.replace('gridtext', 'gridtextmobile');
          }
          gridster.add_widget(mediaHtml, 1, 1);
          $("." + node.key).error(function() {
            console.log('broken image - ' + node.key);
          });
          // Using id instead due to javascript bug
          //$("." + node.key).css("background-image", "url(" + node.icon + ")");
          // Using id won't work when there are files that do not have unique fileID
          $("li").children("h4:contains('" + node.title.replace("'", "\\'") + "')").parent().css("background-image", "url('" + node.icon + "')");
        }
      }

      function addObjectToGridster(gridster, dynaNodeArray) {
        var maxLimit = 50;
        if (dynaNodeArray.length < maxLimit) {
          for (i = 0; i < dynaNodeArray.length; i++) {
            if (dynaNodeArray[i].isFolder) {
              addFolderToGridster(gridster, dynaNodeArray[i]);
            } else {
              addMediaToGridster(gridster, dynaNodeArray[i]);
            }
          }
        } else {
          changedFolder = false;
          for (i = 0; i < maxLimit; i++) {
            if (dynaNodeArray[i].isFolder) {
              addFolderToGridster(gridster, dynaNodeArray[i]);
            } else {
              addMediaToGridster(gridster, dynaNodeArray[i]);
            }
          }
          if (!changedFolder) {
            setTimeout(function() {
              addObjectToGridster2(gridster, dynaNodeArray, maxLimit, maxLimit);
            }, 2000);
          }
        }
        // Prevent media from opening when clicking on check box
        $(".gridCheckbox").click(function(e) {
          e.stopPropagation();
        });
        $(".gridFav").click(function(e) {
          e.stopPropagation();
        });
      }

      function addObjectToGridster2(gridster, nodeArray, currentIndex, max) {
        if (!changedFolder) {
          //console.log("calling gridster2 " + currentIndex);
          if ((currentIndex + max) < nodeArray.length) {
            for (i = (currentIndex); i < (currentIndex + max); i++) {
              if (nodeArray[i].isFolder) {
                addFolderToGridster(gridster, nodeArray[i]);
              } else {
                addMediaToGridster(gridster, nodeArray[i]);
                //console.log("adding media " + nodeArray[i]);
              }
            }
            setTimeout(function() {
              addObjectToGridster2(gridster, nodeArray, (currentIndex + max), max);
            }, 2000);
          } else {
            for (i = (currentIndex); i < nodeArray.length; i++) {
              if (nodeArray[i].isFolder) {
                addFolderToGridster(gridster, nodeArray[i]);
              } else {
                addMediaToGridster(gridster, nodeArray[i]);
              }
            }
          }
          // Prevent media from opening when clicking on check box
          $(".gridCheckbox").click(function(e) {
            e.stopPropagation();
          });
          // Prevent media from opening when clicking on check box
          $(".gridFav").click(function(e) {
            e.stopPropagation();
          });
        }
      }

      function downloadFile() {
        var currentFile = getCurrentFile();
        window.open("/MediaDownloader.aspx?fid=" + currentFile.FileID + "&furl=" + encodeURIComponent(currentFile.RemotePath) + '&t=' + currentFile.Title + '&ft=' + currentFile.FileType + '&u=' + encodeURIComponent(udid), '_blank');
      }

      function emailFile() {
        // Validate to make sure selected media can be emailed
        var openEmailModal = false;
        $("#sortable").sortable();
        $("#sortable").disableSelection();
        $("#divShareMedia").modal('hide');
        resetDivEmailFile();
        var currentFile = getCurrentFile();
        if (currentFile) {
          if (currentFile.Export) {
            EmailBody_divEmailFile_Body_SetText(currentFile.DescriptionLong, currentFile.LockDescriptionLong);
            $("#divEmailFile_Subject").val(currentFile.EmailSubject);
            if ($("#divEmailFile_Subject").val() == "") {
              $("#divEmailFile_Subject").val(currentFile.Title);
            }
            //$("#divEmailFile_AttachmentLabel").html(currentFile.Title);
            $("#sortable").html('');
            var icon = '<li class="ui-state-default" tag="' + currentFile.FileID + '"><img src="' + getThumbnailFromGridster(currentFile.FileID) + '"></i>' + currentFile.Title + '</li>';
            $("#sortable").append(icon);
            openEmailModal = true;
          } else {
            toastr["warning"]("This content cannot be sent due to the Email setting on this media");
            return;
          }
        } else {
          //$("#divEmailFile_AttachmentLabel").html('');
          $("#sortable").html('');
          //selectedMediaTitle.forEach(function (mediaTitle) {
          //    var splitFileID = mediaTitle.substr(0, mediaTitle.indexOf(','));
          //    var splitTitle = mediaTitle.substring(mediaTitle.indexOf(',') + 1);
          //    var icon = '<li class="ui-state-default" tag="' + splitFileID + '"><i class="fa fa-paperclip"></i>' + splitTitle + '</li>';
          //    $("#sortable").append(icon);
          //    //sortGrid.appendChild(icon);
          //});
          var mediaNoExportArr = [];
          selectedMediaObjArray.forEach(function(mediaObj) {
            if (mediaObj.export) {
              //var icon = '<li class="ui-state-default" tag="' + mediaObj.id + '"><i class="fa fa-paperclip"></i>' + mediaObj.title + '</li>';
              var icon = '<li class="ui-state-default" tag="' + mediaObj.id + '"><a class="btn-xs ui-state-default-deleteBtn" href="javascript: DeleteAttachedMedia(' + mediaObj.id + ',\'sortable\');"><i class="fa fa-times"></i></a><img src="' +
                mediaObj.thumb + '"></i>' + mediaObj.title + '</li>';
              $("#sortable").append(icon);
              openEmailModal = true;
            } else {
              mediaNoExportArr.push(mediaObj.title);
              RemoveSelectedMedia(mediaObj.id);
            }
          });
          if (mediaNoExportArr.length > 0) {
            toastr["warning"](mediaNoExportArr.length + " of your selected media has been deselected due to Email settings on the file");
          }
        }
        if (openEmailModal) {
          $("#divEmailFile").on("shown.bs.modal", function() {
            $("#divEmailFile_Name").focus();
          });
          $("#divEmailFile").modal('show');
        }
      }

      function DeleteAttachedMedia(fileID, sortableID) {
        var array = Array.from($("#" + sortableID).children());
        if (array.length > 1) {
          array.forEach(function(child) {
            if (child.getAttribute('tag') == fileID) {
              child.outerHTML = '';
              RemoveSelectedMedia(fileID);
            }
          });
        } else {
          toastr["error"]("Must have at least one selected media");
        }
      }

      function updateSortedSelectedMediaIDs(sortableID) {
        var array = Array.from($("#" + sortableID).children());
        selectedMedia = [];
        array.forEach(function(child) {
          if (child.getAttribute('tag')) selectedMedia.push(child.getAttribute('tag'));
        });
      }

      function getThumbnailFromGridster(fileID) {
        try {
          var img = document.getElementById(fileID);
          var style = img.currentStyle || window.getComputedStyle(img, false);
          var imageUrl = style.backgroundImage.slice(4, -1).replace(/"/g, "");
          return imageUrl;
        } catch (ex) {
          // failsafe 
          return "https://vabletmedia.blob.core.windows.net/default/misc.png";
        }
      }

      function forwardEmail() {
        resetDivEmailFile();
        $("#divEmailFile_Company").parent().parent().hide();
        $("#divEmailFile_SendMediaAsLink").hide();
        $("#divEmailFile_AttachVideo_Label").parent().hide();
        $("#divEmailFile").on("shown.bs.modal", function() {
          $("#divEmailFile_Name").focus();
        });
        $(".modal-title.emailModal").html('Forward Email');
        $("#divEmailFile").modal('show');
      }

      function resetDivEmailFile() {
        $("#divEmailFile_Name").val('');
        $("#divEmailFile_LastName").val('');
        $("#divEmailFile_Company").val('');
        $("#divEmailFile_Email").val('');
        $("#divEmailFile_Subject").val('');
        EmailBody_divEmailFile_Body_SetText('', false);
        $($("#divEmailFile_SendMediaAsLink").find("input[value=1]")[0]).parent().button('toggle');
        // Reset Attach Video
        $('#inputAttachVideo').val('');
        $("#vid_inputAttachVideo").hide();
        inputAttachVideoText = '';
        $("#divEmailFile_AttachVideo_Label").html("");
        // Reset ImportTab
        $("#divEmailFile_ImportTab").hide();
        $("#divEmailFile_UPLOAD").hide();
        $('#xlsImportList').val('');
        xlsImportListText = '';
        $("#divEmailFile_InputTab").show();
        $("#divEmailFile_SEND").show();
      }

      function smsFile() {
        $("#divShareMedia").modal('hide');
        resetDivSmsFile();
        var currentFile = getCurrentFile();
        $("#divSmsFile").on("shown.bs.modal", function() {
          $("#divSmsFile_MobileNumber").focus();
        });
        $("#divSmsFile").modal('show');
      }

      function resetDivSmsFile() {
        $("#divSmsFile_MobileNumber").val('');
        $("#divSmsFile_Body").val('');
      }

      function shareFileLink() {
        var currentFile = getCurrentFile();
        if (currentFile) {
          RemoveSelectedMedia(currentFile.FileID);
          $("#ckBox_" + currentFile.FileID).click();
        }
        VabletWeb.Ajax.VabletWebAjax.ValidateSharableMedia(selectedMedia.join(","), function(succeed) {
          if (succeed != '') {
            // succeed returns fileIDs with sharable OFF
            // remove fileIDs from selectedMedia
            var unsharableFileIDs = succeed.split(',');
            for (var i = 0; i < unsharableFileIDs.length; i++) {
              RemoveSelectedMedia(unsharableFileIDs[i]);
            }
            toastr["warning"](unsharableFileIDs.length + " of your selected media has been deselected due to Share settings on the file");
          }
          if (selectedMedia.length > 0) {
            $("#sortable2").sortable();
            $("#sortable2").disableSelection();
            $("#divShareMedia").modal('hide');
            resetDivCreateLinkFile();
            resetDivShareLink();
            $("#sortable2").html('');
            selectedMediaObjArray.forEach(function(mediaObj) {
              var icon = '<li class="ui-state-default" tag="' + mediaObj.id + '"><a class="btn-xs ui-state-default-deleteBtn" href="javascript: DeleteAttachedMedia(' + mediaObj.id +
                ',\'sortable2\');"><i class="fa fa-times"></i></a><img src="' + mediaObj.thumb + '"></i>' + mediaObj.title + '</li>';
              $("#sortable2").append(icon);
            });
            $("#divShareLink").on("shown.bs.modal", function() {
              $("#divShareLink_Email").focus();
            });
            $("#divShareLink").modal('show');
          }
        });
      }

      function resetDivShareLink() {
        $("#divShareLink_Email").val('');
        $("#divShareLink_Note").val('');
        $("#divShareLink_Input").show();
        $("#divShareLink_Output").hide();
      }

      function divShareLink_CREATE_OnClick() {
        createLinkFile();
      }

      function createLinkFile() {
        var fileIDs = "";
        var currentFile = getCurrentFile();
        if (currentFile) {
          fileIDs = currentFile.FileID;
        } else {
          updateSortedSelectedMediaIDs('sortable2');
          fileIDs = selectedMedia.join(",");
        }
        var contactInfo = $("#divShareLink_Email").val();
        var note = $("#divShareLink_Note").val();
        if (!IsEmail(contactInfo)) {
          toastr["warning"]("Invalid email");
        } else {
          $("#divShareLink_Input").hide();
          $("#divShareLink_Output").show();
          resetDivCreateLinkFile();
          $("#divCreateLinkFile_Button").hide();
          $("#divCreateLinkFile_Loading").show();
          VabletWeb.Ajax.VabletWebAjax.GetMediaShareableLink(udid, random, fileIDs, contactInfo, note, function(succeed) {
            $("#divCreateLinkFile_Loading").hide();
            $("#divCreateLinkFile").fadeIn('slow');
            $("#divCreateLinkFile_Link").val(succeed);
            var qrUrl = "https://ws.vablet.com/VabletService/CreateQRCode?v=" + succeed;
            var qrImage = "<img src='" + qrUrl + "' style='display: block;margin-left: auto;margin-right: auto;max-width: 200px;'>";
            $("#divCreateLinkFile_QR").append(qrImage);
            var mailToLink = "mailto:" + contactInfo + "?body=";
            if (note != '') {
              // Add line break in mailto link
              mailToLink += note + '%0D%0A%0D%0A' + succeed;
            } else {
              mailToLink += succeed;
            }
            if (contactInfo != udid && IsEmail(udid)) {
              mailToLink += '&cc=' + udid;
            }
            $("#btn_divCreateLinkFile_Link_OpenEmailClient").attr("href", mailToLink);
            $("#btn_divCreateLinkFile_Link_OpenEmailClient").show();
          });
        }
      }

      function connectGoogle() {
        var width = "950";
        var height = "600";
        var screenLeft = 0,
          screenTop = 0;
        if (typeof window.screenLeft !== 'undefined') {
          screenLeft = window.screenLeft;
          screenTop = window.screenTop;
        } else if (typeof window.screenX !== 'undefined') {
          screenLeft = window.screenX;
          screenTop = window.screenY;
        }
        var viewportHeight = $(window).height();
        var viewportWidth = $(window).width();
        var topPtr = screenTop + (viewportHeight - height) / 2;
        var leftPtr = screenLeft + (viewportWidth - width) / 2;
        window.open(
          'https://accounts.google.com/o/oauth2/v2/auth?client_id=429348952276-e47frdulogh0ie8leshj96q0mfp0v3m5.apps.googleusercontent.com&redirect_uri=https://web.vablet.com/OAuth2Callback&scope=https://www.googleapis.com/auth/contacts.readonly&access_type=offline&response_type=code&state=' +
          udid, "_blank", "toolbar=no, scrollbars=yes, resizable=yes, top=" + topPtr + ", left=" + leftPtr + ", width=" + width + ", height=" + height);
        $("#divShareMedia").modal('hide');
      }

      function resetDivCreateLinkFile() {
        $("#divCreateLinkFile_Button").show();
        $("#divCreateLinkFile_Loading").hide();
        $("#divCreateLinkFile").hide();
        $("#divCreateLinkFile_Link").val('');
        $("#divCreateLinkFile_QR").html("");
      }
      var addressBookInitalized = false;

      function openAddressBook() {
        $("#divContactList").on("shown.bs.modal", function() {
          $("#divContactList_Search").focus();
        });
        $("#divContactList").modal('show');
        if (!addressBookInitalized) {
          var substringMatcher = function(strs) {
            return function findMatches(q, cb) {
              var matches, substringRegex;
              // an array that will be populated with substring matches
              matches = [];
              // regex used to determine if a string contains the substring `q`
              substrRegex = new RegExp(q, 'i');
              // iterate through the pool of strings and for any string that
              // contains the substring `q`, add it to the `matches` array
              $.each(strs, function(i, str) {
                if (substrRegex.test(str)) {
                  matches.push(str);
                }
              });
              cb(matches);
            };
          };
          var contacts = ['Paul Pacun - ppacun@vablet.com', 'Michael Ames - mames@vablet.com', 'Mike Tam - mtam@vablet.com', 'Will Tam - wtam@vablet.com'];
          $('#the-basics .typeahead').typeahead({
            hint: true,
            highlight: true,
            minLength: 1
          }, {
            name: 'contacts',
            source: substringMatcher(contacts)
          });
          addressBookInitalized = true;
        }
      }

      function divContactList_SELECT_OnClick() {
        $("#divContactList").modal('hide');
        var contact = $("#divContactList_Search").val();
        if (contact.indexOf("-") > -1) {
          var parts = contact.split("-");
          $("#divEmailFile_Name").val(parts[0].trim());
          //$("#divEmailFile_Company").val('');
          $("#divEmailFile_Email").val(parts[1].trim());
        }
        $("#divContactList_Search").val('');
      }

      function divContactList_KeyDown(e) {
        if (e.keyCode === 13) {
          setTimeout(function() {
            divContactList_SELECT_OnClick();
          }, 250);
        }
      }
      var tempEmailAccessKey = '';

      function setEmailAccessKey(key) {
        try {
          localStorage.setItem("emailAccessKey", key);
        } catch (ex) {
          tempEmailAccessKey = key;
        }
      }

      function getEmailAccessKey() {
        try {
          var emailAccessKey = localStorage.getItem("emailAccessKey");
          return emailAccessKey;
        } catch (ex) {
          return tempEmailAccessKey;
        }
      }
      var tempAdminAccessKey;

      function setAdminAccessKey(key) {
        try {
          localStorage.setItem("adminAccessKey", key);
        } catch (ex) {
          tempAdminAccessKey = key;
        }
      }

      function getAdminAccessKey() {
        try {
          var adminAccessKey = localStorage.getItem("adminAccessKey");
          return adminAccessKey;
        } catch (ex) {
          return tempAdminAccessKey;
        }
      }
      var selectedMedia = [];
      // stored in the format fileID,title
      //var selectedMediaTitle = [];
      var selectedMediaObjArray = [];
      var favoriteMedia = [];

      function getLatestFavoriteMedia() {
        VabletWeb.Ajax.VabletWebAjax.GetPresentationFolderFileIDsStr(0, udid, random, function(succeed) {
          if (succeed != "") {
            favoriteMedia = succeed.split(',');
          } else {
            favoriteMedia = [];
          }
        });
      }

      function toggleFavMedia(fileID) {
        var fileObj = $("#" + fileID);
        var ckBoxFav = $("#ckBoxFav_" + fileID);
        var isChecked = ckBoxFav.is(':checked');
        var title = fileObj.find('.gridtext').html();
        if (isMobile) {
          title = fileObj.find('.gridtextmobile').html();
        }
        //console.log(fileID);
        if (isChecked && favoriteMedia.indexOf(fileID) == -1) {
          ckBoxFav.attr('disabled', 'true');
          favoriteMedia.push(fileID);
          // Send ajax to add selected fileID to fav
          VabletWeb.Ajax.VabletWebAjax.CopyToPresentationFolder(udid, random, 'folder_fav', fileID, function(succeed) {
            ckBoxFav.removeAttr('disabled');
            toastr["info"]("Added to Favorites", '', {
              timeOut: 500
            });
          });
        } else {
          RemoveFavoriteMedia(fileID);
        }
      }

      function RemoveFavoriteMedia(fileID) {
        var ckBoxFav = $("#ckBoxFav_" + fileID);
        if (ckBoxFav) {
          ckBoxFav.attr('disabled', 'true');
          fileID = fileID.toString();
          if (favoriteMedia.indexOf(fileID) != -1) {
            favoriteMedia.removeFromArray(fileID);
          }
          // Remove Star
          if ($("#ckBoxFav_" + fileID)) {
            $("#ckBoxFav_" + fileID).removeAttr('checked');
          }
          // Send ajax to delete favorite
          VabletWeb.Ajax.VabletWebAjax.RemoveFromPresentationFolder(udid, random, 'folder_fav', fileID, function(succeed) {
            ckBoxFav.removeAttr('disabled');
            //toastr["info"]("Removed from Favorites");
          });
        }
      }
      var ignoreOpenMedia = false;

      function toggleSelectMedia(fileID) {
        var fileObj = $("#" + fileID);
        var isChecked = $("#ckBox_" + fileID).is(':checked');
        //($("#ckBox_" + fileID).attr('checked') == "checked");
        var title = fileObj.find('.gridtext').html();
        if (isMobile) {
          title = fileObj.find('.gridtextmobile').html();
        }
        var titleArrayInput = fileID + "," + title;
        var canExport = (fileObj.attr("canExport") === 'true');
        var selectedMediaObj = {
          id: fileID,
          title: title,
          thumb: getThumbnailFromGridster(fileID),
          export: canExport
        };
        //console.log(fileID);
        if (isChecked && selectedMedia.indexOf(fileID) == -1) {
          selectedMedia.push(fileID);
          //if (selectedMediaTitle.indexOf(titleArrayInput) == -1) {
          //    selectedMediaTitle.push(titleArrayInput);
          //}
          if (!selectedMediaObjArray.find(x => x.id === fileID)) selectedMediaObjArray.push(selectedMediaObj);
        } else {
          RemoveSelectedMedia(fileID);
        }
      }

      function RemoveSelectedMedia(fileID) {
        fileID = fileID.toString();
        if (selectedMedia.indexOf(fileID) != -1) {
          selectedMedia.removeFromArray(fileID);
          //selectedMediaTitle.removeFromArray(titleArrayInput);
        }
        var currentIndex = selectedMediaObjArray.findIndex(x => x.id === fileID);
        if (currentIndex > -1) selectedMediaObjArray.splice(currentIndex, 1);
        // Remove Checkbox
        if ($("#ckBox_" + fileID)) {
          $("#ckBox_" + fileID).removeAttr('checked');
        }
      }

      function uncheckAllSelectedMedia() {
        setTagBtn();
        $('.gridCheckbox').removeAttr('checked');
        selectedMedia = [];
        //selectedMediaTitle = [];
        selectedMediaObjArray = [];
      }

      function setUntagBtn() {
        var taggedMediaBtn = $("#mfb_TaggedMedia");
        taggedMediaBtn.attr("data-mfb-label", "Untag All Media");
        taggedMediaBtn.attr("onclick", "javascript: uncheckAllSelectedMedia();");
        taggedMediaBtn.html('<i class="mfb-component__child-icon fa fa-eraser"></i>');
      }

      function setTagBtn() {
        var taggedMediaBtn = $("#mfb_TaggedMedia");
        taggedMediaBtn.attr("data-mfb-label", "Tagged Media");
        taggedMediaBtn.attr("onclick", "javascript: showSelectedMedia();");
        taggedMediaBtn.html('<i class="mfb-component__child-icon fa fa-tag"></i>');
      }

      function setRemoveBtn(folderID) {
        var taggedMediaBtn = $("#mfb_CopyMedia");
        taggedMediaBtn.attr("data-mfb-label", "Remove from Folder");
        taggedMediaBtn.attr("onclick", "javascript: removeMediaFromPresentationFolder('" + folderID + "');");
        taggedMediaBtn.html('<i class="mfb-component__child-icon fa fa-folder"></i>');
        taggedMediaBtn.attr("style", "background-color: #bb2413");
      }

      function setCopyBtn() {
        var taggedMediaBtn = $("#mfb_CopyMedia");
        taggedMediaBtn.attr("data-mfb-label", "Copy to Folder");
        taggedMediaBtn.attr("onclick", "javascript: copyMedia();");
        taggedMediaBtn.html('<i class="mfb-component__child-icon fa fa-folder-open"></i>');
        taggedMediaBtn.removeAttr("style");
      }

      function showSelectedMedia() {
        if (selectedMedia.length > 0) {
          processFilter('a_tagged,' + selectedMedia.join(","));
          setUntagBtn();
          unsetPresentationFolderUI();
        } else {
          toastr["warning"]("No media selected");
        }
      }
      Array.prototype.removeFromArray = function() {
        var what, a = arguments,
          L = a.length,
          ax;
        while (L && this.length) {
          what = a[--L];
          while ((ax = this.indexOf(what)) !== -1) {
            this.splice(ax, 1);
          }
        }
        return this;
      };

      function emailSelectedMedia() {
        localStorage.removeItem("currentFileJson");
        if (selectedMedia.length > 0) {
          emailFile();
        } else {
          toastr["warning"]("Select media");
        }
      }
      var inputAttachVideoPlayer;
      var inputAttachVideoText = '';

      function recordVideo() {
        //var player = videojs('myVideo', {
        //    // video.js options
        //    controls: true,
        //    loop: false,
        //    fluid: false,
        //    width: 320,
        //    height: 240,
        //    plugins: {
        //        // videojs-record plugin options
        //        record: {
        //            image: false,
        //            audio: false,
        //            video: true,
        //            maxLength: 5,
        //            debug: true
        //        }
        //    }
        //});
        //
        //player.on('startRecord', function () {
        //    console.log('started recording!');
        //});
        //
        //// user completed recording and stream is available
        //player.on('finishRecord', function () {
        //    // the recordedData object contains the stream data that
        //    // can be downloaded by the user, stored on server etc.
        //    console.log('finished recording: ', player.recordedData);
        //});
        $('#inputAttachVideo').change(function(event) {
          var fr = new FileReader;
          fr.onload = function() {
            inputAttachVideoText = fr.result;
          };
          fr.readAsArrayBuffer(this.files[0]);
          if ((this.files[0].size / 1048576) > 50) {
            exceededUploadFileLimit = true;
            toastr["warning"]("File size is too large.");
            $('#inputAttachVideo').val('');
          } else {
            exceededUploadFileLimit = false;
            var file = this.files[0];
            var type = file.type;
            var fileURL = URL.createObjectURL(file);
            $("#vid_inputAttachVideo").attr("src", fileURL);
            inputAttachVideoPlayer = new Plyr(document.getElementById('vid_inputAttachVideo'));
            $("#vid_inputAttachVideo").show();
            $('#divRecordVideo').on('hidden.bs.modal', function() {
              inputAttachVideoPlayer.pause();
            });
          }
        });
        $("#divRecordVideo").modal('show');
        if ($('#inputAttachVideo').val() == '') $("#inputAttachVideo").click();
      }
      var inputUploadMediaText = '';
      var exceededUploadFileLimit = false;

      function uploadMedia() {
        if (importEnabled) {
          $('#inputUploadMedia').val('');
          inputUploadMediaText = '';
          $("#divUploadMedia_Step1").show();
          $("#divUploadMedia_Step2").hide();
          $("#divUploadMedia_Step2_Video").hide();
          $('#inputUploadMedia').change(function() {
            var fr = new FileReader;
            fr.onload = function() {
              inputUploadMediaText = fr.result;
              console.log(inputUploadMediaText);
            };
            fr.readAsArrayBuffer(this.files[0]);
            if ((this.files[0].size / 1048576) > 50) {
              exceededUploadFileLimit = true;
              toastr["warning"]("File size is too large.");
              $('#inputUploadMedia').val('');
            } else {
              exceededUploadFileLimit = false;
            }
            if (!exceededUploadFileLimit) {
              $("#divUploadMedia_Step1").hide();
              $("#divUploadMedia_Step2").show();
              var fullPath = $("#inputUploadMedia").val();
              var fileName = fullPath.replace(/^.*[\\\/]/, '');
              $("#divUploadMedia_Title").val(fileName);
            }
          });
          $("#divUploadMedia").modal('show');
          if (isMobile) {
            $("#btnRecordMedia").hide();
          }
        } else {
          toastr["warning"]("Import is not enabled for this device");
        }
      }

      function getNextMediaFileID(fileID) {
        var nextFileID = $("#" + fileID).next().attr('id');
        if (parseInt(nextFileID)) {
          return nextFileID;
        } else {
          return 0;
        }
      }

      function nextMedia() {
        var nextFileID = getNextMediaFileID(getCurrentFile().FileID);
        if (nextFileID) {
          processUploadLog();
          openMedia(nextFileID);
        } else {
          $('.nivo-lightbox-next').hide();
        }
      }

      function prevMedia() {
        var prevFileID = getPrevMediaFileID(getCurrentFile().FileID);
        if (prevFileID) {
          processUploadLog();
          openMedia(prevFileID);
        } else {
          $('.nivo-lightbox-prev').hide();
        }
      }

      function getPrevMediaFileID(fileID) {
        var prevFileID = $("#" + fileID).prev().attr('id');
        if (parseInt(prevFileID) > 0) {
          return prevFileID;
        } else {
          return 0;
        }
      }

      function shareMedia(fileOpened) {
        resetDivCreateLinkFile();
        if (smsEnabled) {
          $("#btnSMS").show();
        } else {
          $("#btnSMS").hide();
        }
        if (fileOpened) {
          var currentFile = getCurrentFile();
          if (currentFile) {
            $("#divShareMedia").modal('show');
          }
        } else {
          localStorage.removeItem("currentFileJson");
          if (selectedMedia.length > 0) {
            // Validate if selected media has the sharable feature enabled
            VabletWeb.Ajax.VabletWebAjax.ValidateSharableMedia(selectedMedia.join(","), function(succeed) {
              if (succeed != '') {
                // succeed returns fileIDs with sharable OFF
                // remove fileIDs from selectedMedia
                //var unsharableFileIDs = succeed.split(',');
                //for (var i = 0; i < unsharableFileIDs.length; i++) {
                //    RemoveSelectedMedia(unsharableFileIDs[i]);
                //}
                //toastr["warning"](unsharableFileIDs.length + " of your selected media has been deselected due to Share settings on the file");
              }
              // Only show the Share popup if all the selected media are sharable 
              if (selectedMedia.length > 0) {
                $("#divShareMedia").modal('show');
                if (selectedMedia.length == 1) {
                  // Pull the media and set it to current file to retrieve email body and subject if there is only 1 selected media
                  VabletWeb.Ajax.VabletWebAjax.GetMedia(selectedMedia[0], udid, random, '', '', eakBypass, function(succeed) {
                    localStorage.setItem("currentFileJson", succeed);
                  });
                }
              }
            });
          } else {
            toastr["warning"]("Select media");
          }
        }
      }

      function copyMedia() {
        if (selectedMedia.length > 0) {
          $("#divCopyToFolder_FolderGrid").hide();
          $("#divCopyToFolder_NewFolder").hide();
          VabletWeb.Ajax.VabletWebAjax.GetPresentationFolders(udid, random, function(succeed) {
            if (succeed != '') {
              $("#divCopyToFolder_FolderGrid").html('').show();
              var favFolder =
                '<div class="col-md-3"><button id="folder_fav" type="button" class="btn blue qlertLocationBtn" onclick="javascript: divCopyToFolder_Folder_OnClick(this.id);"><i class="fa fa-star fa-5x"></i><br>Favorite</button></div>';
              $("#divCopyToFolder_FolderGrid").append(favFolder);
              var resultJson = $.parseJSON(succeed);
              resultJson.forEach(function(folder) {
                if (folder.Value != 'Favorites') {
                  //objAttr[attr.Value.key] = attr.Value.value;
                  addPresentationFolderToFolderGrid(folder.Key, folder.Value);
                }
              });
              var addFolder =
                '<div class="col-md-3"><button id="folder_newFolder" type="button" class="btn blue qlertLocationBtn" onclick="javascript: divCopyToFolder_Folder_OnClick(this.id);"><i class="fa fa-plus fa-5x"></i><br>New Folder</button></div>';
              $("#divCopyToFolder_FolderGrid").append(addFolder);
            } else {
              $("#divCopyToFolder_FolderGrid").show();
            }
          });
          $("#divCopyToFolder").modal('show');
        } else {
          toastr["warning"]("Select media");
        }
      }
      var currentPresentationFolderID = "";

      function removeMediaFromPresentationFolder(folderID) {
        if (selectedMedia.length > 0 && folderID.startsWith("p_")) {
          currentPresentationFolderID = folderID;
          $("#divRemoveFromPresentationFolder").modal('show');
        } else {
          toastr["warning"]("Select media");
        }
      }

      function divRemoveFromPresentationFolder_CONFIRM_OnClick() {
        var btn = $("#divRemoveFromPresentationFolder_CONFIRM");
        btn.button("loading");
        VabletWeb.Ajax.VabletWebAjax.RemoveFromPresentationFolder(udid, random, currentPresentationFolderID, selectedMedia.join(","), function(succeed) {
          openFolder(currentPresentationFolderID);
          $("#divRemoveFromPresentationFolder").modal('hide');
          uncheckAllSelectedMedia();
          //toastr["info"]("Removed from Favorites");
          btn.button("reset");
        });
      }

      function createPresentationSubfolder() {
        if (currentPresentationFolderID.startsWith("p_")) {
          $("#divPresentationFolderSetting").modal('hide');
          //$("#divCreatePresentationSubfolder_FolderName").val(currentFolderName);
          $("#divCreatePresentationSubfolder").on("shown.bs.modal", function() {
            $("#divCreatePresentationSubfolder_FolderName").val('').focus();
          });
          if (currentFolderName) {
            $("#divCreatePresentationSubfolder_Title").html('[' + currentFolderName + ']');
            $("#divCreatePresentationSubfolder_FolderName").attr('placeholder', currentFolderName + '\\');
          } else {
            $("#divCreatePresentationSubfolder_Title").html('');
            $("#divCreatePresentationSubfolder_FolderName").attr('placeholder', '');
          }
          $("#divCreatePresentationSubfolder").modal('show');
        }
      }

      function divCreatePresentationSubfolder_CREATE_OnClick() {
        if (currentPresentationFolderID.startsWith("p_")) {
          var btn = $("#divCreatePresentationSubfolder_CREATE");
          btn.button("loading");
          var newFolderName = $("#divCreatePresentationSubfolder_FolderName").val();
          if (newFolderName == '') {
            toastr["error"]("Name cannot be empty");
          } else {
            VabletWeb.Ajax.VabletWebAjax.CreatePresentationFolder(udid, random, currentPresentationFolderID, newFolderName, function(succeed) {
              toastr["success"]("Created", '', {
                timeOut: 500
              });
              $("#divCreatePresentationSubfolder").modal('hide');
              // Clear prev folder cache so the user can see the updated name
              clearPreviousFolderCache();
              openFolder(succeed);
              currentFolderName = newFolderName;
            });
          }
          btn.button("reset");
        }
      }

      function renamePresentationFolder() {
        if (currentPresentationFolderID.startsWith("p_")) {
          $("#divPresentationFolderSetting").modal('hide');
          $("#divRenamePresentationFolder_FolderName").val(currentFolderName);
          $("#divRenamePresentationFolder").on("shown.bs.modal", function() {
            $("#divRenamePresentationFolder_FolderName").focus();
          });
          $("#divRenamePresentationFolder").modal('show');
        }
      }

      function divRenamePresentationFolder_CONFIRM_OnClick() {
        if (currentPresentationFolderID.startsWith("p_")) {
          var btn = $("#divRenamePresentationFolder_CONFIRM");
          btn.button("loading");
          var newFolderName = $("#divRenamePresentationFolder_FolderName").val();
          if (newFolderName == '') {
            toastr["error"]("Name cannot be empty");
          } else {
            VabletWeb.Ajax.VabletWebAjax.RenamePresentationFolder(udid, random, currentPresentationFolderID, newFolderName, function(succeed) {
              toastr["success"]("Folder Renamed", '', {
                timeOut: 500
              });
              $("#divRenamePresentationFolder").modal('hide');
              // Clear prev folder cache so the user can see the updated name
              clearPreviousFolderCache();
            });
          }
          btn.button("reset");
        }
      }

      function deletePresentationFolder() {
        if (currentPresentationFolderID.startsWith("p_")) {
          $("#divPresentationFolderSetting").modal('hide');
          $("#divDeletePresentationFolder").modal('show');
        }
        //else {
        //    toastr["warning"]("Select media");
        //}
      }

      function divDeletePresentationFolder_CONFIRM_OnClick() {
        if (currentPresentationFolderID.startsWith("p_")) {
          var btn = $("#divDeletePresentationFolder_CONFIRM");
          btn.button("loading");
          VabletWeb.Ajax.VabletWebAjax.DeletePresentationFolder(udid, random, currentPresentationFolderID, function(succeed) {
            toastr["success"]("Folder Deleted", '', {
              timeOut: 500
            });
            $("#divDeletePresentationFolder").modal('hide');
            // Go back to prev folder as this one is no longer available 
            clearPreviousFolderCache();
            backToPrevFolder();
          });
          btn.button("reset");
        }
      }

      function addPresentationFolderToFolderGrid(folderID, folderName) {
        var folderHtml = '<div class="col-md-3"><button id="' + 'p_' + folderID + '" type="button" class="btn blue qlertLocationBtn" onclick="javascript: divCopyToFolder_Folder_OnClick(this.id);"><i class="fa fa-folder fa-5x"></i><br>' + folderName +
          '</button></div>';
        //if (folderName == 'Favorites') {
        //    folderHtml = folderHtml.replace("fa-folder", "fa-star");
        //}
        $("#divCopyToFolder_FolderGrid").append(folderHtml);
      }

      function divCopyToFolder_NewFolder_CREATE_OnClick() {
        var btn = $("#divCopyToFolder_NewFolder_CREATE");
        var newFolderName = $("#divCopyToFolder_NewFolder_FolderName").val();
        if (newFolderName.trim().length > 0) {
          btn.button("loading");
          VabletWeb.Ajax.VabletWebAjax.CopyToPresentationFolder(udid, random, 'new_' + newFolderName, selectedMedia.join(","), function(succeed) {
            $("#divCopyToFolder").modal('hide');
            openPresentationFolder(succeed);
            // Clear previous folder cache so when we hit the back button, the folder gets loaded
            clearPreviousFolderCache();
          });
          btn.button("reset");
        } else {
          toastr["warning"]("Folder Name required");
        }
      }

      function divCopyToFolder_Folder_OnClick(folder) {
        if (folder == 'folder_newFolder') {
          $("#divCopyToFolder_FolderGrid").hide();
          $("#divCopyToFolder_NewFolder").fadeIn('slow');
          $("#divCopyToFolder_NewFolder_FolderName").val('').focus();
        } else {
          VabletWeb.Ajax.VabletWebAjax.CopyToPresentationFolder(udid, random, folder, selectedMedia.join(","), function(succeed) {
            $("#divCopyToFolder").modal('hide');
            if (folder == 'folder_fav') {
              openFavorite();
            } else {
              openPresentationFolder(succeed);
            }
          });
        }
      }

      function openFavorite() {
        openFolder(-1);
      }

      function openPresentationFolder(pFolderID) {
        openFolder('p_' + pFolderID);
      }

      function openDirectUrl(directUrl) {
        closeLightbox();
        var lightbox = $("#nivoLightbox");
        lightbox.nivoLightbox({
          clickOverlayToClose: false
        });
        lightbox.attr('href', "/Assets/plugins/nivo-lightbox/themes/default/loading.gif");
        lightbox.attr('title', 'loading...');
        lightbox.attr('data-lightbox-type', "");
        lightbox.click();
        // Setup currentFileJson string to prevent script from breaking
        localStorage.setItem("currentFileJson", "{ \"FileID\": 0 }");
        // Setup nav buttons
        var downloadBtn = $(".nivo-lightbox-download");
        downloadBtn.hide();
        var emailBtn = $(".nivo-lightbox-email");
        emailBtn.hide();
        var smsBtn = $(".nivo-lightbox-sms");
        smsBtn.hide();
        var nextBtn = $('.nivo-lightbox-next');
        var prevBtn = $('.nivo-lightbox-prev');
        var nextFileID = parseInt(getNextMediaFileID(fileID));
        (nextFileID > 0) ? nextBtn.show(): nextBtn.hide();
        var prevFileID = parseInt(getPrevMediaFileID(fileID));
        (prevFileID > 0) ? prevBtn.show(): prevBtn.hide();
        setTimeout(function() {
          if (document.getElementById('nivoLightbox_Link')) document.getElementById('nivoLightbox_Link').click();
        }, 1000);
        try {
          // Needed to place the following block in a timeout and wait 2 seconds for the lightbox to initialize 
          setTimeout(function() {
            if ($(".nivo-lightbox-image").html()) {
              console.log("Image box found");
            } else {
              console.log("Image box not found, reopening media");
              closeLightbox();
              openDirectUrl(directUrl);
              return;
            }
            var width = $(window).width();
            var height = $(window).height();
            //var videoPlayer = "<video onended='videoEnded();' playsinline controls crossorigin autoplay id='player' style='max-height: " + (height * 0.8) + "px;max-width: " + (width * 0.8) + "px;' data-plyr-config='{ \"controls\": [\"play-large\",\"play\",";
            var videoPlayer = "<video onended='videoEnded();' playsinline controls crossorigin autoplay id='player' data-plyr-config='{ \"controls\": [\"play-large\",\"play\",";
            videoPlayer += "\"progress\",";
            videoPlayer += "\"current-time\",\"mute\",\"volume\",\"fullscreen\"], \"clickToPlay\": true}' >";
            videoPlayer += '<source src="' + directUrl + '" type="video/mp4">';
            videoPlayer += '</video>';
            var viewerLink = '../PDFViewer216/web/viewer.html?file=' + encodeURIComponent(directUrl);
            var pdfJsViewer = '<iframe id="pdfJsViewer" src="' + viewerLink + '" frameborder="0" seamless="seamless" scrolling="auto" align="middle" scale="1.5" allowfullscreen="true" style="margin-top:-8px;"></iframe>';
            //controls preload
            if ($(".nivo-lightbox-image").html()) {
              if (directUrl.indexOf(".pdf") > 0) {
                $($(".nivo-lightbox-image")[0]).html(pdfJsViewer);
              } else {
                $($(".nivo-lightbox-image")[0]).html(videoPlayer);
                var player = new Plyr(document.getElementById('player'));
              }
            } else {
              closeLightbox();
              openDirectUrl(directUrl);
            }
          }, 2000);
        } catch (ex) {
          console.log(ex);
        }
        //$(".nivo-lightbox-title").html("Video from sender");
      }

      function openMediaName_Zhtml(title) {
        console.log('calling openMediaName_Zhtml');
        if (title.indexOf('returnsToCallerOnClose=true') > -1) {
          lockStartupMedia = true;
        }
        if (lockStartupMedia) {
          hideLightGallery();
        } else {
          closeLightGallery();
        }
        openMediaName(title);
      }
      var returnsToCallerOnClose = false;
      var pageToReturnTo = -1;
      var returnsToFileID = -1;
      var videoStartTime = 0;
      var videoEndTime = -1;

      function openMediaName(title) {
        console.log('openMediaName - ' + title);
        var currentFileID = 0;
        try {
          currentFileID = getCurrentFile().FileID;
        } catch {}
        if (udid && random) {
          console.log('pulling media using udid/random - ' + udid + '/' + random);
          VabletWeb.Ajax.VabletWebAjax.GetFileIDWithTitle(title, udid, random, function(succeed) {
            if (succeed) {
              var resultJson = $.parseJSON(succeed);
              if (resultJson && resultJson.fileID != "0") {
                console.log(resultJson.fileID);
                // media is available, let's close lightbox
                closeLightbox();
                processUrlParameters(title, currentFileID);
                // making a url with the title field since the title field contains the url parameters 
                var url = "https://web.vablet.com/" + title;
                if (resultJson.fileType == "zhtml") {
                  var returnsToCaller = $.urlParam('returnsToCallerOnClose', url);
                  if (returnsToCaller && returnsToCaller.toLowerCase() == 'true') {
                    returnsToCallerOnClose = true;
                    returnsToFileID = currentFileID;
                    var pageToReturn = $.urlParam('pageToReturnTo', url);
                    pageToReturnTo = pageToReturn;
                  }
                  closeLightGallery();
                  // set a delay to open media
                  setTimeout(function() {
                    openMedia(resultJson.fileID);
                  }, 200);
                } else {
                  openMedia(resultJson.fileID);
                }
              } else {
                openMediaNotAvailable();
                if (lockStartupMedia) {
                  // open startup media
                  unhideLightGallery();
                }
              }
            } else {
              openMediaNotAvailable();
              if (lockStartupMedia) {
                // open startup media
                unhideLightGallery();
              }
            }
          });
        } else {
          var emailAccessKey = getEmailAccessKey();
          if (emailAccessKey) {
            console.log('pulling media using email access key - ' + emailAccessKey);
            VabletWeb.Ajax.VabletWebAjax.GetFileIDWithTitleForEAK(title, emailAccessKey, function(succeed) {
              if (succeed) {
                var resultJson = $.parseJSON(succeed);
                console.log(resultJson);
                if (resultJson && resultJson.fileID != "0") {
                  if (resultJson.fileType == "zhtml") {
                    var url = "https://web.vablet.com/" + title;
                    var returnsToCaller = $.urlParam('returnsToCallerOnClose', url);
                    if (returnsToCaller && returnsToCaller.toLowerCase() == 'true') {
                      returnsToCallerOnClose = true;
                      returnsToFileID = getCurrentFile().FileID;
                      var pageToReturn = $.urlParam('pageToReturnTo', url);
                      pageToReturnTo = pageToReturn;
                    }
                    closeLightGallery();
                  }
                  processUrlParameters(title, currentFileID);
                  eakBypass = true;
                  openMedia(resultJson.fileID);
                } else {
                  openMediaNotAvailable();
                }
              } else {
                openMediaNotAvailable();
              }
            });
          } else {
            closeLightbox();
            openMediaNotAvailable();
          }
        }
      }

      function processUrlParameters(title, currentFileID) {
        // check to see if the title contains url parameters
        if (title.indexOf('?') > -1) {
          var urlParams = new URLSearchParams(title.substr(title.indexOf('?')));
          if (urlParams.get("startTime") > 0) {
            videoStartTime = parseInt(urlParams.get("startTime"));
          } else {
            videoStartTime = 0;
          }
          if (urlParams.get("endTime") > 0) {
            videoEndTime = parseInt(urlParams.get("endTime"));
          } else {
            videoEndTime = -1;
          }
          if (urlParams.has('returnToCallerOnClose') || urlParams.has('returnsToCallerOnClose')) {
            if (urlParams.get('returnToCallerOnClose') == 'true' || urlParams.get('returnsToCallerOnClose') == 'true') {
              returnsToCallerOnClose = true;
              returnsToFileID = currentFileID;
            }
          }
        }
      }

      function openMedia_Zhtml(fileID) {
        if (lockStartupMedia) {
          hideLightGallery();
        } else {
          closeLightGallery();
        }
        openMedia(fileID);
      }

      function openMedia(fileID) {
        // Reset values
        videoCompleted = false;
        var fileIDUrlParameters = '';
        var currentFileID = 0;
        try {
          currentFileID = getCurrentFile().FileID;
        } catch (ex) {
          if (isFileFinder) {
            currentFileID = 99;
            isFileFinder = false;
          }
        }
        // Added a try/catch block in case if there's a url parameter for openMedia
        try {
          if (fileID.indexOf('?') > -1) {
            fileIDUrlParameters = "openMedia" + fileID.substr('?');
            fileID = fileID.substr(0, fileID.indexOf('?'));
          }
        } catch (ex) {}
        var lightbox = $("#nivoLightbox");
        lightbox.nivoLightbox({
          clickOverlayToClose: false
        });
        lightbox.attr('href', "/Assets/plugins/nivo-lightbox/themes/default/loading.gif");
        lightbox.attr('title', 'loading...');
        lightbox.attr('data-lightbox-type', "");
        lightbox.click();
        isLightBoxOpened = true;
        var downloadBtn = $(".nivo-lightbox-download");
        downloadBtn.hide();
        var emailBtn = $(".nivo-lightbox-email");
        emailBtn.hide();
        var smsBtn = $(".nivo-lightbox-sms");
        smsBtn.hide();
        var pdfBtn = $(".nivo-lightbox-pdf");
        pdfBtn.hide();
        var emailAccessKey = localStorage.getItem("emailAccessKey");
        var adminAccessKey = getAdminAccessKey();
        setTimeout(function() {
          if (document.getElementById('nivoLightbox_Link')) document.getElementById('nivoLightbox_Link').click();
        }, 1000);
        VabletWeb.Ajax.VabletWebAjax.GetMedia(fileID, udid, random, emailAccessKey, adminAccessKey, eakBypass, function(succeed) {
          if (succeed == "logout") {
            logout();
            showErrorMessage_Login('Your session has expired. Please log in again');
            return;
          }
          if (succeed == 'unavailable') {
            closeLightbox();
            openMediaNotAvailable();
            return;
          }
          if (succeed == '') {
            closeLightbox();
            toastr["warning"]("Error opening media");
            return;
          }
          //$(".nivo-lightbox-close").click();
          var file = JSON.parse(succeed);
          localStorage.setItem("currentFileJson", succeed);
          localStorage.setItem("durationStartTime", getUTCTimestamp());
          var imageBox = $(".nivo-lightbox-image");
          var titleBox = $(".nivo-lightbox-title");
          if (file.SendAsLinkDownload) {
            downloadBtn.show();
          }
          if (file.Export || file.Sharable) {
            if (udid != '' && random > 0) {
              emailBtn.show();
              if (smsEnabled) {
                smsBtn.show();
              }
            }
          }
          var nextBtn = $('.nivo-lightbox-next');
          var prevBtn = $('.nivo-lightbox-prev');
          if (file.FollowedByFileID > 0) {
            localStorage.setItem("followedByFileID", file.FollowedByFileID);
          } else {
            localStorage.setItem("followedByFileID", 0);
            var nextFileID = parseInt(getNextMediaFileID(fileID));
            (nextFileID > 0) ? nextBtn.show(): nextBtn.hide();
            var prevFileID = parseInt(getPrevMediaFileID(fileID));
            (prevFileID > 0) ? prevBtn.show(): prevBtn.hide();
          }
          //// Show the email button if the media is being viewed as an email
          if (isEmailAccessKey) {
            //    $("#divEmailFile_Company").parent().parent().hide();
            //    $("#divEmailFile_SendMediaAsLink").hide();
            //
            //    //emailBtn.show();
            // store the logID
            emailAccessLogID = file.EndpointInfoID;
          }
          try {
            if ($(".nivo-lightbox-image").html()) {
              console.log("Image box found");
            } else {
              console.log("Image box not found, reopening media");
              closeLightbox();
              openMedia(fileID);
              return;
            }
            // Setup returnsToCallerOnClose, sending fileIDUrlParameters to be processed
            if (fileIDUrlParameters.indexOf('?') > -1 && currentFileID != 0) {
              processUrlParameters(fileIDUrlParameters, currentFileID);
            }
            switch (file.FileType) {
              case "jpg":
              case "jpeg":
              case "png":
              case "bmp":
              case "gif":
              case "tiff":
              case "tif":
                imageBox.children().attr('src', file.RemotePath);
                break;
              case "mp3":
              case "wav":
              case "mid":
                imageBox.children().hide();
                var audioPlayer = '<audio src="' + file.RemotePath + '" controls preload ></audio>';
                imageBox.append(audioPlayer);
                imageBox.css('background-image', 'url(' + file.Thumbnail + ')').css('background-repeat', 'no-repeat').css('background-position', 'center').css('background-attachment', 'fixed');
                break;
              case 'pdf':
                imageBox.children().hide();
                var viewerLink = '../PDFViewer216/web/viewer.html?file=' + encodeURIComponent(file.RemotePath) + "#locale=en-US";
                if (file.PrintingWaterMarkURL != '') {
                  viewerLink += '&watermark=' + file.PrintingWaterMarkURL;
                }
                if (file.Print) {
                  viewerLink = viewerLink.replace("viewer.html", "viewerPrint.html");
                }
                // Show the ChatPDF feature only for email recipient for now
                if (isEmailAccessKey) {
                  pdfBtn.show();
                }
                var pdfJsViewer = '<iframe id="pdfJsViewer" src="' + viewerLink + '" frameborder="0" seamless="seamless" scrolling="auto" align="middle" scale="1.5" allowfullscreen="true" style="margin-top:-8px;"></iframe>';
                if ($(".nivo-lightbox-image").html()) {
                  $($(".nivo-lightbox-image")[0]).html(pdfJsViewer);
                  pdfViewerOpened = true;
                  executePDFViewerTimer();
                } else {
                  closeLightbox();
                  openMedia(fileID);
                }
                break;
              case 'pdf_newViewer':
                imageBox.children().hide();
                //var pdfJsViewer = '<iframe id="pdfJsViewer" src="../PDFViewer216/web/viewer.html?file=' + encodeURIComponent(file.RemotePath) + '" frameborder="0" seamless="seamless" scrolling="auto" align="middle" scale="1.5" allowfullscreen="true"></iframe>';
                var html = '<button class="btn btn-success btn-lg mrb50" data-iframe="true" id="open-pdf" data-src="../PDFViewer216/web/viewer.html?file=' + encodeURIComponent(file.RemotePath) + '">Open website</button>';
                imageBox.append(html);
                lightGallery(document.getElementById('open-pdf'), {
                  selector: 'this',
                  download: false,
                  counter: false
                });
                // Determine if we're showing the Share and/or Download button as the toolbar does not work for zhtml media in this lightbox
                var mfbList = $("#lightGallery_mfb_List");
                var mfbCloseBtn = '<li><a href="#" data-mfb-label="Close Media" class="mfb-component__button--child" onclick="javascript: closeLightGallery();"><i class="mfb-component__child-icon fa fa-times"></i></a></li>';
                var mfbShareBtn =
                  '<li id="lightGallery_mfb_Menu_Share"><a href="#" data-mfb-label="Share Media" class="mfb-component__button--child" onclick="javascript: shareMedia(true);"><i class="mfb-component__child-icon fa fa-share-alt"></i></a></li>';
                var mfbDownloadBtn =
                  '<li id="lightGallery_mfb_Menu_Download"><a href="#" id="mfb_DownloadMedia" data-mfb-label="Download Media" class="mfb-component__button--child" onclick="javascript: downloadFile();"><i class="mfb-component__child-icon fa fa-cloud-download"></i></a></li>';
                var mfbHtml = mfbCloseBtn;
                var showShareBtn = false;
                var showDownloadBtn = false;
                if (file.SendAsLinkDownload) {
                  showDownloadBtn = true;
                }
                if (file.Export) {
                  if (udid != '' && random > 0) {
                    showShareBtn = true;
                    if (smsEnabled) {
                      smsBtn.show();
                    }
                  }
                }
                if (showDownloadBtn) {
                  mfbHtml += mfbDownloadBtn;
                }
                if (showShareBtn) {
                  mfbHtml += mfbShareBtn;
                }
                mfbList.html(mfbHtml);
                var lg = document.getElementById('open-pdf');
                lg.addEventListener('lgBeforeOpen', function(e) {
                  //$(".nivo-lightbox-overlay").hide();
                  closeLightbox();
                  // Setting currentFileJson again so getCurrentFile() will not break
                  localStorage.setItem("currentFileJson", succeed);
                  // Show the floating menu for light gallery for logged in users
                  if (udid != '' && random > 0) {
                    $("#lightGallery_mfb_Menu").show();
                  }
                }, false);
                //lg.addEventListener('onAfterOpen', function (e) {
                //    injectJS();
                //    console.log('called onAfterOpen');
                //}, false);
                lg.addEventListener('lgAfterClose', function(e) {
                  //$(".nivo-lightbox-overlay").show();
                  //closeLightbox();
                  lightGallery_Closed(file.FileID);
                  // Hide the floating menu for light gallery
                  $("#lightGallery_mfb_Menu").hide();
                }, false);
                lg.click();
                break;
              case 'pdf3':
              case 'doc':
              case 'docx':
              case 'xls':
              case 'xlsx':
              case "ppt":
              case "pptx":
              case "ppsx":
                var sizeInMB = (file.FileSize / (1024 * 1024)).toFixed(2);
                var tooLarge = false;
                switch (file.FileType) {
                  case "pptx":
                  case "ppsx":
                    if (sizeInMB > 25) {
                      tooLarge = true;
                    }
                    break;
                  case "xls":
                  case "xlsx":
                    if (sizeInMB > 5) {
                      tooLarge = true;
                    }
                    break;
                  default:
                    if (sizeInMB > 10) {
                      tooLarge = true;
                    }
                    break;
                }
                if (tooLarge) {
                  toastr["warning"]("File size is too large.");
                  var href = '<div style="background-color: white;">File size is too large. Please <a href="#" onclick="javascript:downloadFile();">download</a> to view media.</div>';
                  imageBox.children().hide();
                  imageBox.append(href);
                } else {
                  //imageBox.children().hide();
                  //var gviewUrl = '//docs.google.com/gview?url=' + encodeURIComponent(file.RemotePath) + '&embedded=true&rm=minimal/preview';
                  //var gViewer = '<iframe id="gdriveViewer" src="' + gviewUrl + '" frameborder="0" seamless="seamless" scrolling="auto" align="middle" scale="1.5" ></iframe>';
                  //
                  //var gViewerDiv = '<div style="height:100%; width:100%; border:0px; padding:0px; margin:0px">' + gViewer + '<div id="gViewer_FullScreen" style="width: 40px; height: 40px; position: absolute; opacity: 1; right: 12px; top: 16px; background-color: #d1d1d1;">&nbsp;</div></div>';
                  //
                  //imageBox.append(gViewerDiv);
                  //
                  //setTimeout(function () {
                  //    try {
                  //        //document.querySelectorAll('[data-tooltip="Pop-out"]')[0].parentElement.parentElement.parentElement.innerHTML = '';
                  //        document.getElementsByClassName('ndfHFb-c4YZDc-Wrql6b-SmKAyb')[0].style.display = 'none';
                  //    }
                  //    catch (ex) { }
                  //}, 5000);
                  imageBox.children().hide();
                  var oviewUrl = '//view.officeapps.live.com/op/embed.aspx?src=' + encodeURIComponent(file.RemotePath);
                  var oViewer = '<iframe id="officeViewer" src="' + oviewUrl + '" style="border: none;" ></iframe>';
                  var oViewerDiv = '<div style="height:100%; width:100%; border:0px; padding:0px; margin:0px; margin-bottom:-20px;">' + oViewer + '</div>';
                  imageBox.append(oViewerDiv);
                  if (!file.Print) {
                    var blackBarDiv = '<div style="height: 20px;width: 100%;background: black;position: absolute;"></div >';
                    imageBox.append(blackBarDiv);
                  }
                }
                break;
              case "mp4":
              case "mov":
              case "mkv":
              case "avi":
              case "mpeg":
              case "mpg":
              case "dvd":
              case "wmv":
              case "divx":
              case "m4v":
              case "webm":
                try {
                  videojs('player').dispose();
                } catch (ex) {}
                //imageBox.children().hide();
                var width = $(window).width();
                var height = $(window).height();
                var videoPlayer = "<video onended='videoEnded();' class='video-js vjs-big-play-centered' style='margin:auto;' playsinline controls crossorigin autoplay controlsList='nodownload' id='player' data-setup='{}' ";
                if (file.VideoProgressBar) {
                  // include progress bar dependin on attribute
                }
                //if (file.Thumbnail != "https://vabletmedia.blob.core.windows.net/default/video.png") {
                //    videoPlayer += " poster='" + file.Thumbnail + "'"; 
                //}
                videoPlayer += " >";
                //style="max-width: ' + width * 0.8 + 'px; max-height: ' + height * 0.8 + 'px"
                var startEndTimeString = '#t=' + videoStartTime;
                if (videoEndTime > -1) {
                  startEndTimeString += ',' + videoEndTime;
                }
                var isAMSStreaming = false;
                if (file.AMSStreamingUrl && file.AMSStreamingUrl != '') {
                  isAMSStreaming = true;
                }
                if (isAMSStreaming) {
                  //file.RemotePath = 'https://vabletamsprod-usea.streaming.media.azure.net/9cdc5275-5f7d-495d-8455-6bc8d0506bb1/59ff8222-7f26-4833-9648-845c6590.ism/manifest(format=m3u8-cmaf)';
                  videoPlayer += '<source src="' + file.AMSStreamingUrl + '" type="application/x-mpegURL" autoplay>';
                } else {
                  videoPlayer += '<source src="' + file.RemotePath + startEndTimeString + '" type="video/mp4" autoplay>';
                }
                // reset the start/endtime
                videoStartTime = 0;
                videoEndTime = -1;
                // if subtitle
                console.log(file.InternalNote);
                if (file.InternalNote !== '') {
                  try {
                    var subtitles = JSON.parse(file.InternalNote);
                    var setDefaultSubtitle = false;
                    subtitles.forEach(function(subtitle) {
                      videoPlayer += '<track kind="subtitles" srclang="' + subtitle.Key + '" label="' + subtitle.Key + '" src="' + subtitle.Value + '"';
                      if (!setDefaultSubtitle) {
                        videoPlayer += ' default ';
                        setDefaultSubtitle = true;
                      }
                      videoPlayer += ' />';
                    })
                    //videoPlayer += '<track kind="captions" srclang="en" label="en" src="https://vabletmedia.blob.core.windows.net/assets-11310/Subtitle-Sample-English.vtt" />';
                    //videoPlayer += '<track kind="captions" srclang="en2" label="en2" src="https://vabletmedia.blob.core.windows.net/assets-11310/Subtitle-Sample-English.vtt" />';
                  } catch (ex) {}
                }
                videoPlayer += '</video>';
                //videoPlayer += '<div id="overlay">This is HTML on top of the video! </div>';
                //controls preload
                //imageBox.append(videoPlayer);
                if ($(".nivo-lightbox-image").html()) {
                  $($(".nivo-lightbox-image")[0]).html(videoPlayer);
                  //var player = new Plyr(document.getElementById('player'));
                  var player = videojs('player', {
                    controls: true,
                    autoplay: true,
                    preload: 'auto',
                    fluid: true
                  });
                  var subtitleSettings = {
                    backgroundOpacity: '0',
                    edgeStyle: 'dropshadow'
                  };
                  player.textTrackSettings.setValues(subtitleSettings);
                  //player.responsive(true);
                  // disable right click
                  $('#player_html5_api').bind('contextmenu', function() {
                    return false;
                  });
                  if (file.PrintingWaterMarkText != '') {
                    // set watermark
                    player.watermark({
                      text: file.PrintingWaterMarkText,
                      type: 'text',
                      fadeTime: null,
                      position: 'center'
                    });
                  }
                } else {
                  closeLightbox();
                  openMedia(fileID);
                }
                //videojs('my-player', {
                //    controls: true,
                //    autoplay: true,
                //    preload: 'auto',
                //    fluid: true
                //});
                break;
              case "html":
                nextBtn.hide();
                prevBtn.hide();
                jQuery.get(file.RemotePath, function(data) {
                  // if link is generated by vablet, we'll automatically create an iFrame pointing to the link
                  // if link is an actual html document, we'll download the content and print it into a text editor
                  var processed = false;
                  var possibleHeader = ["<html><head><meta http-equiv='refresh' content='1;url=", '<html><head><meta http-equiv="refresh" content="1;url='];
                  for (var i = 0; i < possibleHeader.length; i++) {
                    if (data.startsWith(possibleHeader[i])) {
                      var url = data.replace(possibleHeader[i], "");
                      if (i == 0) {
                        url = url.substr(0, url.indexOf("'"));
                      } else {
                        url = url.substr(0, url.indexOf('"'));
                      }
                      // Remove the http: to prevent safeguard blocking unsecure content
                      if (url.indexOf("http://") > -1 && url.indexOf("youtube") == -1) {
                        //$("#nivoLightbox_HiddenLink").attr('href', url);                                                                                                
                        //$(".nivo-lightbox-close").click();
                        var href = '<div style="background-color: white;"><a id="nivoLightbox_Link" href="' + url + '" target="_blank">Click here to open your website in a new tab</a></div>';
                        imageBox.children().hide();
                        imageBox.append(href);
                        return;
                      }
                      url = url.replace("http://", "//");
                      var iframe = '<iframe src="' + url + '" seamless="seamless" scrolling="auto" height="560px" width="800px" align="middle" scale="1.5" style="border:none;"></iframe>';
                      imageBox.children().hide();
                      imageBox.css('background-color', 'white');
                      imageBox.css('line-height', 'normal');
                      imageBox.append(iframe);
                      processed = true;
                    }
                  }
                  if (!processed) {
                    data = processVrl(data);
                    var divFrame = '<div style="line-height:1.5 !important;background-color:white;min-height:300px;">' + data + '</div>';
                    imageBox.children().hide();
                    imageBox.css('overflow', 'auto');
                    imageBox.css('text-align', 'initial');
                    imageBox.append(divFrame);
                  }
                });
                break;
              case "txt":
              case "csv":
                jQuery.get(file.RemotePath, function(data) {
                  var text = data;
                  imageBox.children().hide();
                  var txtViewer = '<textarea readonly style="line-height: normal; height: inherit; width: 800px; cursor: text;">' + text + '</textarea>';
                  imageBox.append(txtViewer);
                });
                break;
              case "brow":
                imageBox.children().hide();
                jQuery.get(file.RemotePath, function(data) {
                  var url = data;
                  var browViewer = '<iframe id="browViewer" src="' + url + '" frameborder="0" seamless="seamless" scrolling="auto" align="middle" scale="1.5" allowfullscreen="true" style="margin-top:-8px;"></iframe>';
                  if ($(".nivo-lightbox-image").html()) {
                    $($(".nivo-lightbox-image")[0]).html(browViewer);
                    browViewerOpened = true;
                  } else {
                    closeLightbox();
                    openMedia(fileID);
                  }
                });
                break;
              case "zip":
              case "scorm":
                nextBtn.hide();
                prevBtn.hide();
                // if scorm file
                var isScorm = (file.RemotePath.indexOf("engine.scorm") > -1 || file.RemotePath.indexOf("lms.vablet") > -1);
                if (isScorm) {
                  var url = file.RemotePath;
                  console.log(url);
                  imageBox.children().hide();
                  var engineViewer = '<iframe id="engineViewer" src="' + url + '" style="border: none;" ></iframe>';
                  var engineViewerDiv = '<div style="height:100%; width:100%; border:0px; padding:0px; margin:0px">' + engineViewer + '</div>';
                  isCurrentFileScorm = true;
                  currentScormFileRegID = file.InternalNote;
                  imageBox.append(engineViewerDiv);
                  // Hide all btn for scorm course
                  downloadBtn.hide();
                  smsBtn.hide();
                  prevBtn.hide();
                  nextBtn.hide();
                  emailBtn.hide();
                } else {
                  // else
                  imageBox.children().attr('src', file.Thumbnail);
                  toastr["warning"]("Zip files are not supported in viewer");
                  if (file.Export) {
                    imageBox.children().attr('onclick', 'javascript:downloadFile();');
                    imageBox.children().attr('onmouseover', 'this.style.cursor=\'pointer\'');
                  }
                }
                break;
              case "zhtml":
                // zhtml files require the use of a different light gallery
                // Hiding the previous and next button as we don't use that in a zhtml file
                nextBtn.hide();
                prevBtn.hide();
                imageBox.children().hide();
                var url = file.RemotePath;
                // Setting the document.domain to vablet.com so we can inject codes
                if (url.indexOf("vabletzhtmlcdn") > -1 && document.domain === "web.vablet.com") {
                  document.domain = "vablet.com";
                }
                if (pageToReturnTo > -1 && returnsToCallerOnClose && (returnsToFileID == file.FileID)) {
                  if (pageToReturnTo > 9) url = url.replace("index", "00" + pageToReturnTo);
                  else url = url.replace("index", "000" + pageToReturnTo);
                  // Reset global values
                  returnsToCallerOnClose = false;
                  pageToReturnTo = -1;
                  returnsToFileID = -1;
                }
                var html = '<button class="btn btn-success btn-lg mrb50" data-iframe="true" id="open-zhtml" data-src="' + url + '">Open website</button>';
                imageBox.append(html);
                if (lockStartupMedia && $.cookie('previousStartUpMediaID') == fileID) {
                  LG = lightGallery(document.getElementById('open-zhtml'), {
                    selector: 'this',
                    download: false,
                    counter: false,
                    hideScrollbar: true,
                    licenseKey: 'AFCF7008-705B4D6D-A903602E-AFB150E3',
                    closable: false, // setting closable to false will break workflow
                    mobileSettings: {
                      controls: false,
                      showCloseIcon: true,
                      download: false,
                    }
                    //,iframeMaxWidth: _iframeMaxWidth                                    
                  });
                } else {
                  LG = lightGallery(document.getElementById('open-zhtml'), {
                    selector: 'this',
                    download: false,
                    counter: false,
                    hideScrollbar: true,
                    licenseKey: 'AFCF7008-705B4D6D-A903602E-AFB150E3',
                    mobileSettings: {
                      controls: false,
                      showCloseIcon: true,
                      download: false,
                    }
                    //,iframeMaxWidth: _iframeMaxWidth                                    
                  });
                }
                // Determine if we're showing the Share and/or Download button as the toolbar does not work for zhtml media in this lightbox
                var mfbList = $("#lightGallery_mfb_List");
                var mfbCloseBtn = '<li><a href="#" data-mfb-label="Close Media" class="mfb-component__button--child" onclick="javascript: closeLightGallery();"><i class="mfb-component__child-icon fa fa-times"></i></a></li>';
                var mfbShareBtn =
                  '<li id="lightGallery_mfb_Menu_Share"><a href="#" data-mfb-label="Share Media" class="mfb-component__button--child" onclick="javascript: shareMedia(true);"><i class="mfb-component__child-icon fa fa-share-alt"></i></a></li>';
                var mfbDownloadBtn =
                  '<li id="lightGallery_mfb_Menu_Download"><a href="#" id="mfb_DownloadMedia" data-mfb-label="Download Media" class="mfb-component__button--child" onclick="javascript: downloadFile();"><i class="mfb-component__child-icon fa fa-cloud-download"></i></a></li>';
                var mfbHtml = mfbCloseBtn;
                var showShareBtn = false;
                var showDownloadBtn = false;
                if (file.SendAsLinkDownload) {
                  showDownloadBtn = true;
                }
                if (file.Export) {
                  if (udid != '' && random > 0) {
                    showShareBtn = true;
                    if (smsEnabled) {
                      smsBtn.show();
                    }
                  }
                }
                if (showDownloadBtn) {
                  mfbHtml += mfbDownloadBtn;
                }
                if (showShareBtn) {
                  mfbHtml += mfbShareBtn;
                }
                mfbList.html(mfbHtml);
                var lg = document.getElementById('open-zhtml');
                lg.addEventListener('lgBeforeOpen', function(e) {
                  //$(".nivo-lightbox-overlay").hide();
                  closeLightbox();
                  // Setting currentFileJson again so getCurrentFile() will not break
                  localStorage.setItem("currentFileJson", succeed);
                  // Removed floating menu
                  // Show the floating menu for light gallery for logged in users
                  if (udid != '' && random > 0 && !lockStartupMedia) {
                    // show this only if it is not a locked startup media
                    $("#lightGallery_mfb_Menu").show();
                  }
                }, false);
                //lg.addEventListener('onAfterOpen', function (e) {
                //    injectJS();
                //    console.log('called onAfterOpen');
                //}, false);
                lg.addEventListener('lgAfterClose', function(e) {
                  //$(".nivo-lightbox-overlay").show();
                  //closeLightbox();
                  lightGallery_Closed(file.FileID);
                  // Hide the floating menu for light gallery
                  $("#lightGallery_mfb_Menu").hide();
                }, false);
                lg.click();
                break;
              case "zhtml2":
                imageBox.children().hide();
                var url = "https://web.vablet.com/zhtml/20200833/fileID-900817/index.html";
                url = "https://vabletzhtmlcdn.vablet.com/zhtml/file-912819/index.html";
                document.domain = 'vablet.com';
                if (pageToReturnTo > -1 && returnsToCallerOnClose && (returnsToFileID == file.FileID)) {
                  if (pageToReturnTo > 9) url = url.replace("index", "00" + pageToReturnTo);
                  else url = url.replace("index", "000" + pageToReturnTo);
                  // Reset global values
                  returnsToCallerOnClose = false;
                  pageToReturnTo = -1;
                  returnsToFileID = -1;
                }
                var html = '<button class="btn btn-success btn-lg mrb50" data-iframe="true" id="open-zhtml" data-src="' + url + '">Open website</button>';
                imageBox.append(html);
                lightGallery(document.getElementById('open-zhtml'), {
                  selector: 'this',
                  download: false,
                  height: screen.height,
                  counter: false
                  //,iframeMaxWidth: _iframeMaxWidth
                });
                var lg = document.getElementById('open-zhtml');
                lg.addEventListener('onBeforeOpen', function(e) {
                  //$(".nivo-lightbox-overlay").hide();
                  closeLightbox();
                }, false);
                //lg.addEventListener('onAfterOpen', function (e) {
                //    injectJS();
                //    console.log('called onAfterOpen');
                //}, false);
                lg.addEventListener('onCloseAfter', function(e) {
                  //$(".nivo-lightbox-overlay").show();
                  //closeLightbox();
                  lightGallery_Closed(file.FileID);
                }, false);
                lg.click();
                break;
              case "zhtml_bak":
                var url = file.RemotePath;
                var iframe = '<iframe crossorigin="anonymous" src="' + url +
                  '" seamless="seamless" scrolling="auto" height="560px" width="800px" align="middle" scale="1.5" style="border:none;" name="myiframe" id="myiframe" onLoad="javascript: injectJS();" ></iframe>';
                var page = '<div id="zhtmlDiv"></div>';
                imageBox.children().hide();
                imageBox.css('background-color', 'white');
                imageBox.css('line-height', 'normal');
                imageBox.append(iframe);
                break;
              case "zsrx":
                console.log(file.RemotePath);
                nextBtn.hide();
                prevBtn.hide();
                // if the remote path is already processed, go ahead and open it in an iframe for pdfjs with submit
                if (file.RemotePath.indexOf("survey-pdf") > -1) {
                  imageBox.children().hide();
                  //var viewerLink = '../PDFViewer216/web/viewerForm.html?file=' + encodeURIComponent(file.RemotePath) + "#locale=en-US";
                  var viewerLink = '../PDFViewer216/web/viewerForm.html?file=' + encodeURIComponent(file.RemotePath) + "#locale=en-US";
                  var pdfJsViewer = '<iframe id="pdfJsViewer" src="' + viewerLink + '" frameborder="0" seamless="seamless" scrolling="auto" align="middle" scale="1.5" allowfullscreen="true" style="margin-top:-8px;"></iframe>';
                  if ($(".nivo-lightbox-image").html()) {
                    $($(".nivo-lightbox-image")[0]).html(pdfJsViewer);
                    pdfViewerOpened = true;
                    executePDFViewerTimer();
                  } else {
                    closeLightbox();
                    openMedia(fileID);
                  }
                } else {
                  var htmlFound = false;
                  // 1) get a promise of the content
                  var promise = new JSZip.external.Promise(function(resolve, reject) {
                    JSZipUtils.getBinaryContent(file.RemotePath, function(err, data) {
                      if (err) {
                        reject(err);
                      } else {
                        resolve(data);
                      }
                    });
                  });
                  promise.then(JSZip.loadAsync) // 2) chain with the zip promise
                    .then(function(zip) {
                      var html = '';
                      zip.forEach(function(filePath, file) {
                        console.log(filePath);
                        if (filePath.indexOf(".html") > 0) {
                          html = zip.file(filePath).async("string");
                          htmlFound = true;
                        }
                      });
                      if (htmlFound) {
                        return html;
                      } else {
                        console.log('zhtml: ' + file.RemotePath);
                      }
                    }).then(function success(text) { // 4) display the result
                      if (htmlFound) {
                        //console.log(text);
                        text = text.replace(/VabletPhotoSelect>/g, "input>");
                        text = text.replace(/<VabletPhotoSelect /g, "<input type='file' class='capture-image-input' accept='image/*' ");
                        text = text.replace(/vabletphotoselect>/g, "input>");
                        text = text.replace(/<vabletphotoselect /g, "<input type='file' class='capture-image-input' accept='image/*' ");
                        //text = text.replace("<vabletphotoselect ", "<input ");
                        //text = text.replace("vabletphotoselect>", "input>");
                        //text = text.replace(/VabletSignature>/g, "vablet:VabletSignature>");
                        text = processVrl(text);
                        var divFrame = '<div style="line-height:1.5 !important;background-color:white;">' + text + '</div>';
                        imageBox.children().hide();
                        imageBox.css('overflow', 'auto');
                        imageBox.css('text-align', 'initial');
                        imageBox.append(divFrame);
                        $('.capture-image-input').change(function() {
                          var inputID = this.id;
                          var fr = new FileReader;
                          fr.onload = function() {
                            var base64Image = fr.result.substring(fr.result.indexOf(',') + 1);
                            //console.log(base64Image);
                            $("#" + inputID).attr('base64Value', base64Image);
                          };
                          fr.readAsDataURL(this.files[0]);
                        });
                        VabletWeb.Ajax.VabletWebAjax.GetSRXContent(file.RemotePath, function(succeed) {
                          srxContent = JSON.parse(succeed);
                        });
                        VabletWeb.Ajax.VabletWebAjax.GetUserFileCustomAttribute(file.FileID, udid, random, function(succeed) {
                          var objAttr = [];
                          if (succeed) {
                            var customAttributes = JSON.parse(succeed);
                            if (customAttributes.length > 0) {
                              customAttributes.forEach(function(attr) {
                                try {
                                  objAttr[attr.Value.key] = attr.Value.value;
                                } catch {}
                              });
                            }
                          }
                          currentVabletFileInfo.customAttributes = objAttr;
                        });
                        setTimeout(function() {
                          try {
                            //processZsrxOnLoad();
                            // adding signature control, resetting createdCanvas array to empty for tracking
                            createdCanvas = [];
                            processHtmlSignature();
                          } catch (ex) {}
                        }, 500);
                      } else {
                        VabletWeb.Ajax.VabletWebAjax.ReturnZipHtmlSurveyRemotePath(fileID, udid, random, emailAccessKey, adminAccessKey, file.RemotePath, function(succeed) {
                          var iframe = '<iframe crossorigin="anonymous" src="' + succeed +
                            '" seamless="seamless" scrolling="auto" height="560px" width="800px" align="middle" scale="1.5" style="border:none;" name="myiframe" id="myiframe" onLoad="javascript: injectJS();" ></iframe>';
                          zipRemotePath = file.RemotePath;
                          var page = '<div id="zhtmlDiv"></div>';
                          imageBox.children().hide();
                          imageBox.css('background-color', 'white');
                          imageBox.css('line-height', 'normal');
                          imageBox.append(iframe);
                        });
                      }
                    }, function error(e) {
                      $("#jszip_utils").append($("<p>", {
                        "class": "alert alert-danger",
                        text: e
                      }));
                    });
                }
                break;
              default:
                //imageBox.children().hide();
                imageBox.children().attr('src', file.Thumbnail);
                toastr["warning"]("Media not supported in viewer");
                break;
            }
          } catch (ex) {
            console.log(ex);
          }
          titleBox.html(file.Title);
        });
      }
      var createdCanvas = [];

      function processHtmlSignature() {
        // pull all the vabletsignature elements on the page
        var links = document.getElementsByTagName('vabletsignature');
        // set all the elementIDs to an array
        var linkIDs = [];
        if (links && links.length > 0) {
          for (let i = 0; i < links.length; i++) {
            linkIDs.push(links[i].id);
          }
        }
        linkIDs.forEach(function(linkID) {
          // proceed only if the canvas has not been created
          if (createdCanvas.indexOf(linkID) < 0) {
            var linkNode = document.getElementById(linkID);
            var parentID = linkNode.parentNode.id;
            if (parentID == '') {
              parentID = linkNode.parentNode.id = "parent_" + linkID;
            }
            createCanvas2(linkID, parentID);
            createdCanvas.push(linkID);
          }
        });
      }

      function createCanvas2(id, parentID) {
        // remove existing element with this id just in case
        document.getElementById(id).remove();
        // create the canvas needed for signature pad
        var newCanvas = document.createElement('canvas');
        newCanvas.setAttribute('id', id);
        newCanvas.setAttribute('class', 'signature-pad');
        newCanvas.setAttribute('width', '400');
        newCanvas.setAttribute('height', '150');
        // add signature pad to the parent div
        document.getElementById(parentID).appendChild(newCanvas);
        // declare canvas
        var canvas = document.getElementById(id);
        // we need to make the resize canvas call to fix resolution issue
        resizeCanvas(canvas);
        var signaturePad = new SignaturePad(canvas, {
          backgroundColor: 'rgb(255, 255, 255)' // necessary for saving image as JPEG; can be removed is only saving as PNG or SVG
        });
        // we're automatically pushing the signed signature to the base64Value attribute so it can be picked up when we make the survey submit call
        signaturePad.addEventListener("endStroke", () => {
          console.log("Signature ended");
          newCanvas.setAttribute('base64Value', canvas.toDataURL());
        }, {
          once: false
        });
        // Add clear button
        var clearBtn = document.createElement('a');
        clearBtn.id = "clear" + id;
        clearBtn.innerHTML = "Clear";
        clearBtn.href = "#";
        document.getElementById(parentID).parentElement.append(clearBtn);
        document.getElementById(clearBtn.id).addEventListener('click', function() {
          signaturePad.clear();
          newCanvas.setAttribute('base64Value', '');
        });
      }

      function resizeCanvas(canvas) {
        // When zoomed out to less than 100%, for some very strange reason,
        // some browsers report devicePixelRatio as less than 1
        // and only part of the canvas is cleared then.
        var ratio = Math.max(window.devicePixelRatio || 1, 1);
        canvas.width = canvas.offsetWidth * ratio;
        canvas.height = canvas.offsetHeight * ratio;
        canvas.getContext("2d").scale(ratio, ratio);
      }

      function processVrl(html) {
        while (html.indexOf("http://") > -1) {
          html = html.replace("http://", "//");
        }
        while (html.indexOf("https://") > -1) {
          html = html.replace("https://", "//");
        }
        while (html.indexOf("//vabletgeneral") > -1) {
          html = html.replace("//vabletgeneral/openFile/", "#\" onclick=\"openMedia(this.id);\" id=\"");
          html = html.replace("//vabletgeneral/openFileName/", "#\" onclick=\"openMediaName(this.rel);\" rel=\"");
          html = html.replace("//vabletgeneral/home", "#\" onclick=\"btnHome_Click();\" ");
          html = html.replace("//vabletgeneral/openFolder/", "#\" onclick=\"openFolderName(this.rel);\" rel=\"");
        }
        //if (html.indexOf("http:#") > -1) {
        //    html = html.replace("http:#", "#");
        //}
        return html;
      }
      var zipRemotePath = '';

      function injectJS() {
        try {
          console.log('trying to inject js)');
          var iFrameHead = window.frames["myiframe"].document.getElementsByTagName("head")[0];
          var jqueryScript = document.createElement('script');
          jqueryScript.type = 'text/javascript';
          jqueryScript.src = 'https://web.vablet.com/Assets/plugins/jquery-1.12.4.min.js';
          var signaturePadScript = document.createElement('script');
          signaturePadScript.type = 'text/javascript';
          //signaturePadScript.src = 'https://web.vablet.com/Assets/plugins/signature_pad.js';
          signaturePadScript.src = "https://cdn.jsdelivr.net/npm/signature_pad@4.0.0/dist/signature_pad.umd.min.js";
          var dynamicScript = document.createElement('script');
          dynamicScript.type = 'text/javascript';
          dynamicScript.innerHTML = 'var zhtmlUDID = "' + udid + '"; var zhtmlRandom = "' + random + '"; var zipRemotePath = "' + zipRemotePath + '"';
          var zhtmlBrowserScript = document.createElement('script');
          zhtmlBrowserScript.type = 'text/javascript';
          zhtmlBrowserScript.src = 'https://web.vablet.com/zhtmlBrowser.js'; // replace this with your SCRIPT
          var captureEngineScript = document.createElement('script');
          captureEngineScript.type = 'text/javascript';
          captureEngineScript.src = 'https://web.vablet.com/captureEngineHelper.js'; // replace this with your SCRIPT
          //iFrameHead.appendChild(jqueryScript);
          iFrameHead.appendChild(signaturePadScript);
          iFrameHead.appendChild(dynamicScript);
          iFrameHead.appendChild(zhtmlBrowserScript);
          iFrameHead.appendChild(captureEngineScript);
        } catch (ex) {
          console.log(ex);
        }
      }

      function injectHidePrintBtn() {
        var iFrameHead = document.getElementById("pdfJsViewer").contentWindow.document.getElementsByTagName("head")[0];
        var dynamicScript = document.createElement('style');
        dynamicScript.type = 'text/css';
        dynamicScript.innerHTML = '.toolbarButton.print { display: none !important; }';
        //iFrameHead.appendChild(jqueryScript);
        iFrameHead.appendChild(dynamicScript);
      }

      function injectHidePrintBtn_OWA() {
        var iFrameHead = document.getElementById("officeViewer").contentWindow.document.getElementsByTagName("head")[0];
        var dynamicScript = document.createElement('script');
        dynamicScript.type = 'text/javascript';
        dynamicScript.innerHTML =
          'var intv = setInterval(ready, 100); function ready() { console.log(document.querySelector("a[title=\'Menu\']")); if (null !== document.querySelector("a[title=\'Menu\']")) { document.querySelector("a[title=\'Menu\']").style.display = "none"; clearInterval(intv); } }';
        //iFrameHead.appendChild(jqueryScript);
        iFrameHead.appendChild(dynamicScript);
      }

      function injectJS_SSO() {
        document.domain = "vablet.com";
        var iFrameHead = document.getElementById("ssoLoginFrame").contentWindow.document.getElementsByTagName("head")[0];
        var dynamicScript = document.createElement('script');
        dynamicScript.type = 'text/javascript';
        dynamicScript.innerHTML = 'var samlResponse = document.getElementById("MainContent_txtSAMLResponse").value; if (parent.IsEmail(samlResponse)) { parent.processLoggedIn(parent.tempInfo); parent.closeLightbox(); };';
        //iFrameHead.appendChild(jqueryScript);
        iFrameHead.appendChild(dynamicScript);
      }

      function getIframeText() {
        document.domain = "vablet.com";
        var iframe0 = document.getElementById("ssoLoginFrame");
        var iframe0document = iframe0.contentDocument || iframe0.contentWindow.document;
        inputIframe = iframe0document.getElementById("MainContent_txtSAMLResponse");
        //alert(inputIframe.value);
        return inputIframe.value;
      }

      function processUploadLog() {
        var file = getCurrentFile();
        var currentTimeStamp = getUTCTimestamp();
        if (file) {
          var pageViewsString = "";
          if (pageViews.pageView.length > 0) {
            pageViews.pageView[pageViews.pageView.length - 1].EndTime = currentTimeStamp;
            pageViewsString = JSON.stringify(pageViews);
            // destroy the variable so we don't submit dupes
            pageViews.pageView = [];
          }
          VabletWeb.Ajax.VabletWebAjax.UploadLog(file.FileID, udid, random, localStorage.getItem("durationStartTime"), currentTimeStamp, videoCompleted ? 1 : 0, pageViewsString, getEmailAccessKey(), emailAccessLogID, submittedSurveyResponseID,
            function(succeed) {
              console.log('log submitted: ' + file.FileID);
            });
        }
      }

      function nivoLightbox_OnClose() {
        try {
          isLightBoxOpened = false;
          var file = getCurrentFile();
          if (file) {
            if (file.FileType != 'zhtml') {
              processUploadLog();
            }
            clearCurrentFile();
            //Update scorm status on file close if the file is a scorm course for tracking purposes
            if (isCurrentFileScorm && currentScormFileRegID != '') {
              VabletWeb.Ajax.VabletWebAjax.UpdateScormRegistrationResult(currentScormFileRegID, function(result) {
                console.log(result);
                updateScormCoursesStatus();
              });
              isCurrentFileScorm = false;
              currentScormFileRegID = '';
              // Refresh the completed flag
            }
            var followedByFileID = localStorage.getItem("followedByFileID");
            if (followedByFileID > 0) {
              openMedia(followedByFileID);
            } else {
              if (lockStartupMedia) {
                // open startup media
                unhideLightGallery();
              } else {
                if (returnsToCallerOnClose) {
                  processReturnsToCallerOnClose(file.FileID);
                }
              }
            }
          }
        } catch (ex) {
          console.log(ex);
        }
      }

      function nivoLightbox_HiddenLink_OnClick() {
        var url = $("#nivoLightbox_HiddenLink").attr("href");
        if (url) {
          window.open(url, '_blank');
        }
      }

      function closeLightbox() {
        $(".nivo-lightbox-close").click();
        pdfViewerOpened = false;
      }

      function closeLightGallery() {
        // moved the upload log to the close handler
        //processUploadLog();
        $(".lg-close").click();
        try {
          LG.destroyGallery();
        } catch (ex) {}
      }

      function hideLightGallery() {
        $(".lg-backdrop").hide();
        $(".lg-outer").hide();
      }

      function unhideLightGallery() {
        $(".lg-backdrop").show();
        $(".lg-outer").show();
      }

      function lightGallery_Closed(closedFileID) {
        processUploadLog();
        updateScormCoursesStatus();
        //console.log(closedFileID);
        //console.log(returnsToCallerOnClose);
        //console.log(pageToReturnTo);
        //console.log(returnsToFileID);
        processReturnsToCallerOnClose(closedFileID);
      }

      function processReturnsToCallerOnClose(closedFileID) {
        // Determining if we need to handle returnsToCallerOnClose
        if (returnsToCallerOnClose) {
          // reset the value
          returnsToCallerOnClose = false;
          // If the closed file is not the same as the specified fileID to return to
          if (closedFileID != returnsToFileID) {
            if (returnsToFileID == 99) {
              // reopen file finder
              $("#open-fileFinder").click();
            } else {
              // Handle the page to return to in this call
              openMedia(returnsToFileID);
            }
            // Reset global values
            //returnsToCallerOnClose = false;
            //pageToReturnTo = -1;
            //returnsToFileID = -1;
          }
        }
      }

      function videoEnded() {
        videoCompleted = true;
        var followedByFileID = localStorage.getItem("followedByFileID");
        if (followedByFileID > 0) {
          // close video
          closeLightbox();
        } else {
          if (getCurrentFile() && getNextMediaFileID(getCurrentFile().FileID) > 0) {
            toastr['info']("Next media opening...");
            setTimeout(function() {
              nextMedia();
            }, 1000);
          }
        }
      }

      function getCurrentFile() {
        var currentFileJson = localStorage.getItem("currentFileJson");
        return JSON.parse(currentFileJson);
      }

      function clearCurrentFile() {
        localStorage.removeItem("currentFileJson");
      }

      function getPDFPageNumber() {
        try {
          if (document.getElementById("pdfJsViewer").contentWindow.PDFViewerApplication.downloadComplete) {
            var currentPage = document.getElementById("pdfJsViewer").contentWindow.PDFViewerApplication.page;
            return currentPage;
          } else {
            return 0;
          }
        } catch (ex) {
          return -1;
        }
      }
      var prevPageNumber = 0;
      var pageViews = {
        pageView: []
      };

      function executePDFViewerTimer() {
        pageViews = {
          pageView: []
        };
        prevPageNumber = 0;
        processPDFViewerTimer();
      }
      // Set recursive method to run every second to determine page view time
      function processPDFViewerTimer() {
        if (pdfViewerOpened) {
          var currentPageNumber = getPDFPageNumber();
          if (currentPageNumber > 0 && currentPageNumber != prevPageNumber) {
            prevPageNumber = currentPageNumber;
            // Process the first entry
            if (pageViews.pageView.length == 0) {
              var pageViewObj = {};
              pageViewObj.PageNumber = currentPageNumber;
              pageViewObj.StartTime = getUTCTimestamp();
              pageViewObj.EndTime = getUTCTimestamp();
              pageViews.pageView.push(pageViewObj);
            }
            // Business as usual
            else {
              var now = new Date;
              var utc_timestamp = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds());
              pageViews.pageView[pageViews.pageView.length - 1].EndTime = utc_timestamp;
              var pageViewObj = {};
              pageViewObj.PageNumber = currentPageNumber;
              pageViewObj.StartTime = utc_timestamp;
              pageViewObj.EndTime = utc_timestamp;
              pageViews.pageView.push(pageViewObj);
            }
          }
          setTimeout(function() {
            processPDFViewerTimer();
          }, 1000);
        }
      }

      function btnPresentationFolderSetting_OnClick() {
        $("#divPresentationFolderSetting").modal('show');
      }
    </script>
    <a id="btnPresentationFolderSetting" onclick="javascript:btnPresentationFolderSetting_OnClick();" class="btn grey tooltips display-none" data-original-title="Presentation Folder Setting" style="float: left;z-index: 1;position: relative;padding-top: 10px;">
        <i class="fa fa-cog"></i>
    </a>
    <div class="gridster ready">
      <ul></ul>
    </div>
    <div id="divLightGalleryBtn_Hidden" class="display-none">
      <button class="btn btn-success btn-lg mrb50" data-iframe="true" id="open-lightGallery" data-src="https://www.vablet.com/" data-iframe-title="vablet"> Open website </button>
    </div>
    <div id="divLogin" class="modal fade display-none login-modal in" aria-hidden="false" style="display: block;">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-body">
            <div style="text-align:center;padding:20px;">
              <img id="divLogin_Logo" src="/Assets/img/vablet/admin-console-vablet-welcome.png" alt="Logo" style="width:63%;">
            </div>
            <div class="tab-content">
              <div class="tab-pane active" id="tabLogin" style="display: none;">
                <div class="form-group">
                  <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                  <label class="control-label visible-ie8 visible-ie9"> Login</label>
                  <div class="input-icon">
                    <i class="fa fa-user"></i>
                    <input name="ctl00$MainContent$txt_divLogin_UDID" type="text" id="txt_divLogin_UDID" class="form-control placeholder-no-fix" onkeydown="javascript: tabLogin_KeyDown(event);" tabindex="1" placeholder="Login" required="">
                  </div>
                </div>
                <div class="form-group">
                  <label class="control-label visible-ie8 visible-ie9"> Password</label>
                  <div class="input-icon">
                    <i class="fa fa-lock"></i>
                    <input name="ctl00$MainContent$txt_divLogin_Password" type="password" id="txt_divLogin_Password" class="form-control placeholder-no-fix" onkeydown="javascript: tabLogin_KeyDown(event);" textmode="newPassword" tabindex="2"
                      autocomplete="Off" placeholder="Password" required="">
                  </div>
                </div>
                <div class="form-group">
                  <div class="checker" id="uniform-chk_divLogin_RememberMe"><span class="checked"><input type="checkbox" id="chk_divLogin_RememberMe" checked="checked"></span></div>
                  <span>&nbsp;Remember me</span>
                </div>
                <p id="divLogin_ErrorMessage_Login" class="help-block display-none" style="color:red;"></p>
                <div class="form-actions">
                  <button id="divLogin_LOGIN" type="button" class="btn blue pull-right" onclick="javascript: divLogin_LOGIN_Click();" tabindex="3">Sign In</button>
                </div>
                <div style="text-align:center;margin-bottom:-19px">
                  <a href="#" onclick="javascript: divLogin_SSO_Click();">Single Sign-On</a>
                </div>
                <a href="#" onclick="javascript: divLogin_NewUser_Click();">New User</a>
                <a href="#" onclick="javascript: divLogin_ForgotPassword_Click();" style="float:right;">Forgot Password?</a>
              </div>
              <div class="tab-pane display-none" id="tabRegister">
                <div class="form-group">
                  <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                  <label class="control-label visible-ie8 visible-ie9"> Invitation Key</label>
                  <div class="input-icon">
                    <i class="fa fa-user"></i>
                    <input name="ctl00$MainContent$txt_divLogin_OTP" type="text" id="txt_divLogin_OTP" class="form-control placeholder-no-fix" onkeydown="javascript: tabRegister_KeyDown(event);" tabindex="1" placeholder="Invitation Key" required="">
                  </div>
                </div>
                <div class="form-group">
                  <label class="control-label visible-ie8 visible-ie9"> New Password</label>
                  <div class="input-icon">
                    <i class="fa fa-lock"></i>
                    <input name="ctl00$MainContent$txt_divLogin_RegisterNewPassword" type="password" id="txt_divLogin_RegisterNewPassword" class="form-control placeholder-no-fix" onkeydown="javascript: tabRegister_KeyDown(event);" textmode="Password"
                      tabindex="2" autocomplete="Off" placeholder="New Password" required="">
                  </div>
                </div>
                <div class="form-group">
                  <label class="control-label visible-ie8 visible-ie9"> Confirm Password</label>
                  <div class="input-icon">
                    <i class="fa fa-lock"></i>
                    <input name="ctl00$MainContent$txt_divLogin_RegisterConfirmPassword" type="password" id="txt_divLogin_RegisterConfirmPassword" class="form-control placeholder-no-fix" onkeydown="javascript: tabRegister_KeyDown(event);"
                      textmode="Password" tabindex="3" autocomplete="Off" placeholder="Confirm Password" required="">
                  </div>
                </div>
                <p id="divLogin_ErrorMessage_Register" class="help-block display-none" style="color:red;"></p>
                <div class="form-actions">
                  <button id="divLogin_Register" type="button" class="btn blue pull-right" onclick="javascript: divLogin_REGISTER_Click();" tabindex="4">Register</button>
                  <button id="divLogin_Register_Loading" type="button" class="btn blue pull-right display-none" disabled="disabled"></button>
                </div>
                <a href="#" onclick="javascript: divLogin_AlreadyUser_Click();">Already a user?</a>
              </div>
              <div class="tab-pane display-none" id="tabSSO">
                <div class="form-group">
                  <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                  <label class="control-label visible-ie8 visible-ie9"> Email</label>
                  <div class="input-icon">
                    <i class="fa fa-user"></i>
                    <input name="ctl00$MainContent$txt_divLogin_SSOEmail" type="text" id="txt_divLogin_SSOEmail" class="form-control placeholder-no-fix" onkeydown="javascript: tabSSO_KeyDown(event);" tabindex="1" placeholder="Email" required="">
                  </div>
                </div>
                <p id="divLogin_ErrorMessage_SSO" class="help-block display-none" style="color:red;"></p>
                <div class="form-actions">
                  <button id="divLogin_SSO" type="button" class="btn blue pull-right" onclick="javascript: divLogin_CONTINUE_Click();" tabindex="3">Continue</button>
                </div>
                <a href="#" onclick="javascript: divLogin_AlreadyUser_Click();">Back</a>
              </div>
              <div class="tab-pane" id="tabForgotPassword">
                <div class="form-group">
                  <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                  <label class="control-label visible-ie8 visible-ie9"> Email</label>
                  <div class="input-icon">
                    <i class="fa fa-user"></i>
                    <input name="ctl00$MainContent$txt_divLogin_ForgotPasswordEmail" type="text" id="txt_divLogin_ForgotPasswordEmail" class="form-control placeholder-no-fix" onkeydown="javascript: tabForgotPassword_KeyDown(event);" tabindex="1"
                      placeholder="Email" required="">
                  </div>
                </div>
                <p id="divLogin_ErrorMessage_ForgotPassword" class="help-block display-none" style="color:red;"></p>
                <div class="form-actions">
                  <button id="divLogin_RESET" type="button" class="btn blue pull-right" onclick="javascript: divLogin_RESET_Click();" tabindex="3">Reset Password</button>
                </div>
                <a href="#" onclick="javascript: divLogin_AlreadyUser_Click();">Back</a>
              </div>
              <div class="tab-pane display-none" id="tabUpdatePassword" style="display: block;">
                <div class="form-group display-none">
                  <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                  <label class="control-label visible-ie8 visible-ie9"> Verification Code</label>
                  <div class="input-icon">
                    <i class="fa fa-user"></i>
                    <input name="ctl00$MainContent$txt_divLogin_ResetCode" type="text" id="txt_divLogin_ResetCode" class="form-control placeholder-no-fix" onkeydown="javascript: tabUpdatePassword_KeyDown(event);" tabindex="1"
                      placeholder="Verification Code" required="">
                  </div>
                </div>
                <div class="form-group">
                  <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                  <label class="control-label visible-ie8 visible-ie9"> Email</label>
                  <div class="input-icon">
                    <i class="fa fa-user"></i>
                    <input name="ctl00$MainContent$txt_divLogin_ResetEmail" type="text" id="txt_divLogin_ResetEmail" class="form-control placeholder-no-fix" onkeydown="javascript: tabUpdatePassword_KeyDown(event);" tabindex="2" placeholder="Email"
                      required="" readonly="readonly">
                  </div>
                </div>
                <div class="form-group">
                  <label class="control-label visible-ie8 visible-ie9"> New Password</label>
                  <div class="input-icon">
                    <i class="fa fa-lock"></i>
                    <input name="ctl00$MainContent$txt_divLogin_ResetNewPassword" type="password" id="txt_divLogin_ResetNewPassword" class="form-control placeholder-no-fix" onkeydown="javascript: tabUpdatePassword_KeyDown(event);" textmode="Password"
                      tabindex="3" autocomplete="Off" placeholder="New Password" required="">
                  </div>
                </div>
                <div class="form-group">
                  <label class="control-label visible-ie8 visible-ie9"> Confirm Password</label>
                  <div class="input-icon">
                    <i class="fa fa-lock"></i>
                    <input name="ctl00$MainContent$txt_divLogin_ResetConfirmPassword" type="password" id="txt_divLogin_ResetConfirmPassword" class="form-control placeholder-no-fix" onkeydown="javascript: tabUpdatePassword_KeyDown(event);"
                      textmode="Password" tabindex="4" autocomplete="Off" placeholder="Confirm Password" required="">
                  </div>
                </div>
                <p id="divLogin_ErrorMessage_UpdatePassword" class="help-block display-none" style="color:red;"></p>
                <div class="form-actions">
                  <button id="divLogin_UPDATE" type="button" class="btn blue pull-right" onclick="javascript: divLogin_UPDATE_Click();" tabindex="4">Update Password</button>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <script type="text/javascript">
      function tabLogin_KeyDown(e) {
        if (e.keyCode === 13) {
          divLogin_LOGIN_Click();
        }
      }

      function tabRegister_KeyDown(e) {
        if (e.keyCode === 13) {
          divLogin_REGISTER_Click();
        }
      }

      function tabSSO_KeyDown(e) {
        if (e.keyCode === 13) {
          divLogin_CONTINUE_Click();
        }
      }

      function tabForgotPassword_KeyDown(e) {
        if (e.keyCode === 13) {
          divLogin_RESET_Click();
        }
      }

      function tabUpdatePassword_KeyDown(e) {
        if (e.keyCode === 13) {
          divLogin_UPDATE_Click();
        }
      }

      function tabAccessKey_KeyDown(e) {
        if (e.keyCode === 13) {
          divAccessKey_SUBMIT_Click();
        }
      }

      function divLogin_NewUser_Click() {
        $("#tabLogin").hide();
        $("#tabSSO").hide();
        $("#tabRegister").fadeIn('slow');
        var appName = "vablet Web";
        if (isBlrWhiteLabel) {
          appName = "Training Today";
        }
        if (isBrotherWhiteLabel) {
          appName = "Brother Information";
        }
        toastr["info"]("Add " + appName + " to your bookmark<br /><br /><button type='button' id='btnBookmark' class='btn yellow' onclick='javascript:btnBookmark_Click();'>Bookmark this Page</button>");
      }

      function divLogin_SSO_Click() {
        $("#tabLogin").hide();
        $("#tabRegister").hide();
        $("#tabSSO").fadeIn('slow');
        var appName = "vablet Web";
        if (isBlrWhiteLabel) {
          appName = "Training Today";
        }
        if (isBrotherWhiteLabel) {
          appName = "Brother Information";
        }
      }

      function btnBookmark_Click() {
        if (window.sidebar && window.sidebar.addPanel) { // Mozilla Firefox Bookmark
          window.sidebar.addPanel(document.title, window.location.href, '');
        } else if (window.external && ('AddFavorite' in window.external)) { // IE Favorite
          window.external.AddFavorite(location.href, document.title);
        } else if (window.opera && window.print) { // Opera Hotlist
          this.title = document.title;
          return true;
        } else { // webkit - safari/chrome
          alert('Press ' + (navigator.userAgent.toLowerCase().indexOf('mac') != -1 ? 'Command/Cmd' : 'CTRL') + ' + D to bookmark this page.');
        }
      }

      function divLogin_AlreadyUser_Click() {
        $("#tabRegister").hide();
        $("#tabForgotPassword").hide();
        $("#tabUpdatePassword").hide();
        $("#tabSSO").hide();
        $("#tabLogin").fadeIn('slow');
        $("#txt_divLogin_OTP").show();
      }

      function divLogin_ForgotPassword_Click(autoFill) {
        $("#tabLogin").hide();
        $("#tabSSO").hide();
        $("#tabUpdatePassword").hide();
        $("#tabForgotPassword").fadeIn('slow');
        if (autoFill) {
          $("#txt_divLogin_ForgotPasswordEmail").val($("#txt_divLogin_UDID").val());
        }
      }
      var info;

      function divLogin_LOGIN_Click() {
        reset_divLogin_ErrorMessage();
        var divLogin_Email = $("#txt_divLogin_UDID");
        password = $("#txt_divLogin_Password").val();
        udid = divLogin_Email.val().toLowerCase().trim();
        divLogin_Email.val(udid);
        var btn = $("#divLogin_LOGIN");
        var url = 'https://ws.vablet.com/VabletService/Init.json/' + udid + '/0';
        if (udid.trim() == '' || password.trim() == '') {
          showErrorMessage_Login('Email/Password cannot be empty');
          divLogin_Email.parents(".form-group").addClass("has-error");
          App.stopPageLoading();
          $('#divLogin').modal({
            keyboard: false,
            backdrop: 'static'
          });
          return;
        }
        showBtnLoading(btn);
        $.ajax({
          url: url,
          type: 'GET',
          dataType: "json",
          success: function(initData) {
            random = initData.random_value;
            //console.log('Session token: ' + random);
            url = 'https://ws.vablet.com/VabletService/Info2.json/' + udid + '/' + random;
            $.ajax({
              url: url,
              type: 'GET',
              dataType: "json",
              success: function(infoData) {
                info = infoData;
                //console.log(infoData);
                VabletWeb.Ajax.VabletWebAjax.GetToken(udid, password, info.Password, function(succeed) {
                  //console.log(succeed);
                  // Login succeed
                  if (succeed == '1') {
                    console.log(info.Options);
                    processLoggedIn(info);
                  }
                  // Login failed
                  else {
                    App.stopPageLoading();
                    $('#divLogin').modal({
                      keyboard: false,
                      backdrop: 'static'
                    });
                    showErrorMessage_Login('Password is incorrect, <a href="#" onclick="javascript: divLogin_ForgotPassword_Click(true);">click here</a> or contact your administrator to reset your password');
                    $("#txt_divLogin_Password").parents(".form-group").addClass("has-error");
                    resetBtn(btn, 'Login');
                  }
                });
              },
              error: function(msg, url, line) {
                console.log('error out at Info2');
                console.log("error msg: " + msg);
                console.log("url: " + url);
                console.log("line: " + line);
                App.stopPageLoading();
                $('#divLogin').modal({
                  keyboard: false,
                  backdrop: 'static'
                });
                showErrorMessage_Login('Unexpected error');
                divLogin_Email.parents(".form-group").addClass("has-error");
                resetBtn(btn, 'Login');
              }
            });
          },
          error: function(msg, url, line) {
            console.log('error out at Init');
            console.log("error msg: " + msg);
            console.log("url: " + url);
            console.log("line: " + line);
            App.stopPageLoading();
            $('#divLogin').modal({
              keyboard: false,
              backdrop: 'static'
            });
            showErrorMessage_Login('Email not found. Please verify your email or contact your administrator to recover your credentials');
            divLogin_Email.parents(".form-group").addClass("has-error");
            // remove the password as it is incorrect
            localStorage.removeItem("rememberMe");
            $("#txt_divLogin_Password").val('');
            resetBtn(btn, 'Login');
          }
        });
      }

      function processLoggedIn(info) {
        $('#divLogin').modal('hide');
        //$("#iconBar").show();
        $(".logo").show();
        $(".copyright").show();
        App.startPageLoading();
        updateDeviceInfo(udid, random);
        rootThemeURL = info.themeURL;
        getItems(info);
        // Check for new folder settings only if hide system folder setting is disabled
        if (!hideSystemFolders) {
          newFolderEnabled = (info.hiddenSystemFolders.indexOf("New") == -1) ? true : false;
        }
        loadTheme(info.themeURL);
        if ($("#chk_divLogin_RememberMe").prop("checked")) {
          localStorage.setItem("rememberMe", "1");
          localStorage.setItem("rememberudid", udid);
          localStorage.setItem("remembertoken", info.Password);
        } else {
          localStorage.removeItem("rememberMe");
        }
        // Get completed Scorm course list
        updateScormCoursesStatus();
        // setup search dropdowns
        configSearch();
        configShowcase();
        getMediaManifest();
      }

      function updateScormCoursesStatus() {
        VabletWeb.Ajax.VabletWebAjax.GetScormCoursesCompleteStatus(udid, random, function(succeed) {
          if (succeed != '') {
            var result = JSON.parse(succeed);
            console.log(result);
            scormCompletedFileIDs = result.completed;
            scormInProgressFileIDs = result.inProgress;
          }
        });
      }

      function divLogin_REGISTER_Click() {
        reset_divLogin_ErrorMessage();
        var btn = $("#divLogin_Register");
        var otp = $("#txt_divLogin_OTP").val();
        var password = $("#txt_divLogin_RegisterNewPassword").val();
        var confirmPassword = $("#txt_divLogin_RegisterConfirmPassword").val();
        if (password.trim() == '') {
          showErrorMessage_Register("Password cannot be empty");
          $("#txt_divLogin_RegisterNewPassword").parents(".form-group").addClass("has-error");
          $("#txt_divLogin_RegisterConfirmPassword").parents(".form-group").addClass("has-error");
          return;
        }
        if (password == confirmPassword) {
          showBtnLoading(btn);
          VabletWeb.Ajax.VabletWebAjax.GetInvitationInfoFromOTP(otp, password, function(succeed) {
            //console.log(succeed);
            var email = succeed;
            if (email.length > 0) {
              // An account with this email already exist
              if (email == 'Email already in use') {
                showErrorMessage_Register("An account with your Email Address is already in use. Click [Already a user?] below to login. <br /> If you forgot your password, contact your administrator for assistance");
                $("#txt_divLogin_OTP").parents(".form-group").addClass("has-error");
                $("#txt_divLogin_OTP").show();
              }
              // Success
              else {
                registered = true;
                divLogin_AlreadyUser_Click();
                $("#txt_divLogin_UDID").val(email);
                $("#txt_divLogin_Password").val(password);
                divLogin_LOGIN_Click();
              }
              resetBtn(btn, 'Register');
              btn.html('Register');
            }
            // Couldn't find the OTP
            else {
              showErrorMessage_Register("Invitation Key is not available. Contact your administrator for assistance");
              $("#txt_divLogin_OTP").parents(".form-group").addClass("has-error");
              $("#txt_divLogin_OTP").show();
              resetBtn(btn, 'Register');
              btn.html('Register');
            }
          });
        } else {
          showErrorMessage_Register("Passwords do not match");
          $("#txt_divLogin_RegisterNewPassword").parents(".form-group").addClass("has-error");
          $("#txt_divLogin_RegisterConfirmPassword").parents(".form-group").addClass("has-error");
        }
      }

      function divLogin_CONTINUE_Click() {
        reset_divLogin_ErrorMessage();
        var btn = $("#divLogin_SSO");
        var email = $("#txt_divLogin_SSOEmail");
        if (email.val().trim() == '') {
          showErrorMessage("SSO", "Email cannot be empty");
          $("#txt_divLogin_SSOEmail").parents(".form-group").addClass("has-error");
          return;
        }
        showBtnLoading(btn);
        VabletWeb.Ajax.VabletWebAjax.CheckSSOEmail(email.val().trim(), function(succeed) {
          //console.log(succeed);
          var message = succeed;
          if (message.indexOf("/SAML") >= 0) {
            // Success
            resetBtn(btn, 'Continue');
            toastr["success"]("Redirecting to Single Sign-On...");
            reset_divLogin();
            reset_divLogin_ErrorMessage();
            document.location = message;
          } else {
            if (message != 'Single Sign-On is not supported for your organization') {
              resetBtn(btn, 'Continue');
              toastr["success"]("Redirecting to Single Sign-On...");
              reset_divLogin();
              reset_divLogin_ErrorMessage();
              document.location = message;
            } else {
              resetBtn(btn, 'Continue');
              showErrorMessage("SSO", message);
              $("#txt_divLogin_SSOEmail").parents(".form-group").addClass("has-error");
            }
          }
        });
      }

      function divLogin_RESET_Click() {
        reset_divLogin_ErrorMessage();
        var btn = $("#divLogin_RESET");
        var email = $("#txt_divLogin_ForgotPasswordEmail");
        if (email.val().trim() == '') {
          showErrorMessage("ForgotPassword", "Email cannot be empty");
          $("#txt_divLogin_ForgotPasswordEmail").parents(".form-group").addClass("has-error");
          return;
        }
        showBtnLoading(btn);
        VabletWeb.Ajax.VabletWebAjax.RequestPasswordReset(email.val().trim(), function(succeed) {
          //console.log(succeed);
          var message = succeed;
          if (message == "") {
            // Success
            resetBtn(btn, 'Reset Password');
            toastr["success"]("Sent. Please check your email for password reset instructions");
            reset_divLogin();
            reset_divLogin_ErrorMessage();
          } else {
            resetBtn(btn, 'Reset Password');
            showErrorMessage("ForgotPassword", message);
            $("#txt_divLogin_ForgotPasswordEmail").parents(".form-group").addClass("has-error");
          }
        });
      }

      function divLogin_UPDATE_Click() {
        reset_divLogin_ErrorMessage();
        var btn = $("#divLogin_UPDATE");
        var resetCode = $("#txt_divLogin_ResetCode").val();
        var email = $("#txt_divLogin_ResetEmail").val();
        var password = $("#txt_divLogin_ResetNewPassword").val();
        var confirmPassword = $("#txt_divLogin_ResetConfirmPassword").val();
        if (password.trim() == '') {
          showErrorMessage("UpdatePassword", "Password cannot be empty");
          $("#txt_divLogin_ResetNewPassword").parents(".form-group").addClass("has-error");
          $("#txt_divLogin_ResetConfirmPassword").parents(".form-group").addClass("has-error");
          return;
        }
        if (password == confirmPassword) {
          showBtnLoading(btn);
          VabletWeb.Ajax.VabletWebAjax.UpdatePassword(resetCode, email, password.trim(), function(succeed) {
            //console.log(succeed);
            var message = succeed;
            if (message == "") {
              // Success
              resetBtn(btn, 'Update Password');
              toastr["success"]("Password Updated");
              reset_divLogin();
              reset_divLogin_ErrorMessage();
              $("#tabUpdatePassword").hide();
              $("#tabLogin").fadeIn('slow');
              $("#txt_divLogin_UDID").val(email);
            } else {
              resetBtn(btn, 'Update Password');
              showErrorMessage("UpdatePassword", message);
              $("#txt_divLogin_ResetNewPassword").parents(".form-group").addClass("has-error");
              $("#txt_divLogin_ResetConfirmPassword").parents(".form-group").addClass("has-error");
            }
          });
        } else {
          showErrorMessage("UpdatePassword", "Passwords do not match");
          $("#txt_divLogin_ResetNewPassword").parents(".form-group").addClass("has-error");
          $("#txt_divLogin_ResetConfirmPassword").parents(".form-group").addClass("has-error");
        }
      }

      function showBtnLoading(btn) {
        btn.html('<i class="fa fa-spinner fa-spin"></i>');
        btn.attr('disabled', 'disabled');
      }

      function resetBtn(btn, btnText) {
        btn.removeAttr('disabled');
        btn.html(btnText);
      }

      function showErrorMessage_Register(errorMessage) {
        $("#divLogin_ErrorMessage_Register").show().html(errorMessage);
      }

      function hideErrorMessage_Register() {
        $("#divLogin_ErrorMessage_Register").hide();
      }

      function showErrorMessage_Login(errorMessage) {
        $("#divLogin_ErrorMessage_Login").show().html(errorMessage);
      }

      function hideErrorMessage_Login() {
        $("#divLogin_ErrorMessage_Login").hide();
      }

      function showErrorMessage(tab, errorMessage) {
        $("#divLogin_ErrorMessage_" + tab).show().html(errorMessage);
      }

      function hideErrorMessage(tab) {
        $("#divLogin_ErrorMessage_" + tab).hide();
      }

      function logout() {
        // Close the lightbox
        closeLightbox();
        // Clear the grid
        var gridster = $(".gridster > ul").gridster().data('gridster');
        gridster.remove_all_widgets();
        // hide the icon bar
        //$("#iconBar").hide();
        $(".logo").hide();
        //$(".logo_mobile").hide();
        $(".copyright").hide();
        // clear login info
        // udid = "";
        random = 0;
        localStorage.removeItem("rememberMe");
        reset_divLogin();
        clearTheme();
        // Adding udid back to the textbox per customer request
        $("#txt_divLogin_UDID").val(udid);
        udid = '';
        divLogin_AlreadyUser_Click();
        $('#divLogin').modal({
          keyboard: false,
          backdrop: 'static'
        });
      }

      function clearTheme() {
        // clear existing theme settings
        $("body").find('style[itemref=theme]').remove();
      }

      function reset_divLogin() {
        // tabLogin
        $("#txt_divLogin_UDID").val('');
        $("#txt_divLogin_Password").val('');
        // tabRegister
        $("#txt_divLogin_OTP").val('').show();
        $("#txt_divLogin_RegisterNewPassword").val('');
        $("#txt_divLogin_RegisterConfirmPassword").val('');
        // tabSSO
        $("#txt_divLogin_SSOEmail").val('');
        // tabForgotPassword
        $("#txt_divLogin_ForgotPasswordEmail").val('');
        // tabUpdatePassword
        $("#txt_divLogin_ResetNewPassword").val('');
        $("#txt_divLogin_ResetConfirmPassword").val('');
        reset_divLogin_ErrorMessage();
        var btnLogin = $("#divLogin_LOGIN");
        var btnRegister = $("divLogin_Register");
        var btnReset = $("#divLogin_RESET");
        var btnUpdate = $("#divLogin_UPDATE");
        var btnContinue = $("#divLogin_CONTINUE");
        resetBtn(btnLogin, 'Login');
        resetBtn(btnRegister, 'Register');
        resetBtn(btnReset, 'Reset Password');
        resetBtn(btnUpdate, 'Update Password');
        resetBtn(btnContinue, 'Continue');
      }

      function reset_divLogin_ErrorMessage() {
        // tabLogin
        $("#txt_divLogin_UDID").parents(".form-group").removeClass("has-error");
        $("#txt_divLogin_Password").parents(".form-group").removeClass("has-error");
        // tabRegister
        $("#txt_divLogin_OTP").parents(".form-group").removeClass("has-error");
        $("#txt_divLogin_RegisterNewPassword").parents(".form-group").removeClass("has-error");
        $("#txt_divLogin_RegisterConfirmPassword").parents(".form-group").removeClass("has-error");
        // tabSSO
        $("#txt_divLogin_SSOEmail").parents(".form-group").removeClass("has-error");
        // tabForgotPassword
        $("#txt_divLogin_ForgotPasswordEmail").parents(".form-group").removeClass("has-error");
        // tabUpdatePassword
        $("#txt_divLogin_ResetNewPassword").parents(".form-group").removeClass("has-error");
        $("#txt_divLogin_ResetConfirmPassword").parents(".form-group").removeClass("has-error");
        hideErrorMessage_Register();
        hideErrorMessage_Login();
        hideErrorMessage("ForgotPassword");
        hideErrorMessage("UpdatePassword");
      }

      function openProfile() {
        var viewer = $('#divProfile_Summernote');
        viewer.summernote({
          height: 560, // set editor height
          minHeight: 300, // set minimum height of editor
          maxHeight: 900, // set maximum height of editor
          disableDragAndDrop: true,
          airMode: true,
          popover: {
            air: []
          }
        });
        if (isEmailAccessKey) {
          viewer.summernote('code', profileContent);
        } else {
          var html = '';
          if (info.CompanyLogoURL) {
            html += '<img src="' + info.CompanyLogoURL + '" style="height: 75px;" />';
            html += "<br/>";
          }
          html += "<br/>";
          html += info.organization;
          html += "<br/>";
          html += "<br/>" + info.DeviceName;
          html += "<br/>" + info.Email;
          viewer.summernote('code', html);
        }
        viewer.summernote('disable');
        $("#divProfile").modal('show');
      }

      function openEmailMessage() {
        var lightbox = $("#nivoLightbox");
        lightbox.nivoLightbox({
          clickOverlayToClose: false
        });
        lightbox.attr('href', "/Assets/plugins/nivo-lightbox/themes/default/loading.gif");
        lightbox.attr('title', 'loading...');
        lightbox.attr('data-lightbox-type', "");
        lightbox.click();
        var downloadBtn = $(".nivo-lightbox-download");
        downloadBtn.hide();
        var emailBtn = $(".nivo-lightbox-email");
        emailBtn.hide();
        var smsBtn = $(".nivo-lightbox-sms");
        smsBtn.hide();
        var imageBox = $(".nivo-lightbox-image");
        var titleBox = $(".nivo-lightbox-title");
        //var viewer = $('#divEmailMessage_Summernote');
        //
        //viewer.summernote({
        //    height: 560,                 // set editor height
        //    minHeight: 300,             // set minimum height of editor
        //    maxHeight: 900,             // set maximum height of editor
        //    disableDragAndDrop: true,
        //    airMode: true,
        //    popover: {
        //        air: []
        //    }
        //});
        var emailAccessKey = getEmailAccessKey();
        var emailNoteContent = '';
        VabletWeb.Ajax.VabletWebAjax.GetNoteContentByEmailAccessKey(emailAccessKey, true, function(succeed) {
          if (succeed && succeed != "") {
            emailNoteContent = succeed;
            //console.log(succeed);
          }
          imageBox.children().hide();
          emailNoteContent = emailNoteContent.replace("http://", "//");
          var iframe = '<div style="line-height:1.5 !important;background-color:white;"><!DOCTYPE html><html><head><style>.logo { background-color: transparent !important; }</style></head><body>' + emailNoteContent + '</body></html></div>';
          imageBox.css('overflow', 'auto');
          imageBox.css('text-align', 'initial');
          imageBox.append(iframe);
          titleBox.html('');
          //viewer.summernote('code', emailNoteContent);
          //
          //viewer.summernote('disable');
          //$("#divEmailMessage").modal('show');
        });
      }

      function openMediaNotAvailable(static) {
        var viewer = $('#divMediaNotAvailable_Summernote');
        viewer.summernote({
          height: 560, // set editor height
          minHeight: 300, // set minimum height of editor
          maxHeight: 900, // set maximum height of editor
          disableDragAndDrop: true,
          airMode: true,
          popover: {
            air: []
          }
        });
        viewer.summernote('code', "Media no longer available");
        viewer.summernote('disable');
        if (static) {
          $('#divMediaNotAvailable').modal({
            keyboard: false,
            backdrop: 'static'
          });
        } else {
          $('#divMediaNotAvailable').modal('show');
        }
      }

      function openMediaExpired() {
        var viewer = $('#divMediaNotAvailable_Summernote');
        viewer.summernote({
          height: 560, // set editor height
          minHeight: 300, // set minimum height of editor
          maxHeight: 900, // set maximum height of editor
          disableDragAndDrop: true,
          airMode: true,
          popover: {
            air: []
          }
        });
        viewer.summernote('code', "Your access has expired. <br/><br/>Please contact the sender to request a new link");
        viewer.summernote('disable');
        $('#divMediaNotAvailable').modal({
          keyboard: false,
          backdrop: 'static'
        });
      }

      function openVabletWebNotAvailable() {
        var viewer = $('#divMediaNotAvailable_Summernote');
        viewer.summernote({
          height: 560, // set editor height
          minHeight: 300, // set minimum height of editor
          maxHeight: 900, // set maximum height of editor
          disableDragAndDrop: true,
          airMode: true,
          popover: {
            air: []
          }
        });
        viewer.summernote('code', "Your browser is not currently supported. <br /><br />Please use the latest version of Chrome, Firefox, Edge, or Safari");
        viewer.summernote('disable');
        $('#divMediaNotAvailable').modal({
          keyboard: false,
          backdrop: 'static'
        });
      }
    </script>
    <script>
      function updateDeviceInfo(udid, random) {
        //udid, string random, string appVersion, string longtitude, string latitude, string osVersion)
        VabletWeb.Ajax.VabletWebAjax.UploadDeviceInfo('' + udid + '', '' + random + '', '' + navigator.appCodeName + '', '' + longitude + '', '' + latitude + '', '' + navigator.platform + '', function(succeed) {});
      }
      var latitude = 0;
      var longitude = 0;

      function showLocation(position) {
        latitude = position.coords.latitude;
        longitude = position.coords.longitude;
        console.log("Latitude : " + latitude + " Longitude: " + longitude);
      }

      function errorHandler(err) {
        if (err.code == 1) {
          console.log("Error: Access is denied!");
        } else if (err.code == 2) {
          console.log("Error: Position is unavailable!");
        }
      }

      function getLocation() {
        if (navigator.geolocation) {
          // timeout at 60000 milliseconds (60 seconds)
          var options = {
            timeout: 60000
          };
          navigator.geolocation.getCurrentPosition(showLocation, errorHandler, options);
        } else {
          console.log("Sorry, browser does not support geolocation!");
        }
      }

      function divAccessKey_SUBMIT_Click() {
        var btn = $("#divAccessKey_SUBMIT");
        var email = $("#txt_divAccessKey_Email").val();
        if (email == '') {
          toastr["error"]("Field cannot be empty");
        } else {
          showBtnLoading(btn);
          var accessKey = $.urlParam('eak');
          var token = $.urlParam('key');
          VabletWeb.Ajax.VabletWebAjax.ValidateEmailAccessKeyAuth(accessKey, token, email, function(result) {
            if (result && result != "") {
              resetBtn(btn, 'Continue');
              if (result === "success") {
                $("#divAccessKey").modal('hide');
                ProcessEmailAccessKeyViewer(accessKey, token);
              } else {
                toastr['error'](result, '', {
                  "positionClass": "toast-top-center"
                });
              }
            }
          });
        }
      }
    </script>
    <a id="nivoLightbox">
    </a>
    <div id="divAccessKey" class=" modal fade display-none" aria-hidden="true" style="padding: 15%;">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-body">
            <div class="tab-content">
              <div class="tab-pane active" id="tabAccessKey">
                <div class="form-group">
                  <h5>Please enter your email address to view content</h5>
                  <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                  <label class="control-label visible-ie8 visible-ie9"> Email</label>
                  <div class="input-icon">
                    <i class="fa fa-user"></i>
                    <input name="ctl00$MainContent$txt_divAccessKey_Email" type="text" id="txt_divAccessKey_Email" class="form-control placeholder-no-fix" onkeydown="javascript: tabAccessKey_KeyDown(event);" textmode="newPassword" tabindex="1"
                      placeholder="Email" required="">
                  </div>
                  <div class="form-actions">
                    <button id="divAccessKey_SUBMIT" type="button" class="btn blue pull-right" onclick="javascript: divAccessKey_SUBMIT_Click();" tabindex="3">Continue</button>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div id="divProfile" class="modal fade display-none note-profile" aria-hidden="true">
      <div id="divProfile_Summernote"></div>
    </div>
    <div id="divEmailMessage" class="modal fade display-none note-emailMessage" aria-hidden="true">
      <div id="divEmailMessage_Summernote"></div>
    </div>
    <div id="divMediaNotAvailable" class="modal fade display-none note-emailMessage" style="z-index: 100002 !important;" aria-hidden="true">
      <div id="divMediaNotAvailable_Summernote"></div>
    </div>
    <div id="divContactList" class="modal fade display-none" aria-hidden="true" style="z-index: 100002 !important;">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Contacts</h4>
          </div>
          <div class="modal-body" style="height:300px;">
            <div class="col-md-12">
              <div class="form-group">
                <div id="the-basics">
                  <input id="divContactList_Search" class="form-control placeholder-no-fix typeahead" type="text" placeholder="Search contact list" tabindex="1" onkeydown="javascript: divContactList_KeyDown(event);">
                </div>
              </div>
            </div>
          </div>
          <div class="modal-footer" style="margin-top: 0;">
            <button type="button" data-dismiss="modal" class="btn default">cancel</button>
            <button id="divContactList_SELECT" type="button" data-loading-text="Selecting..." class="btn blue" onclick="javascript: divContactList_SELECT_OnClick();">Select</button>
          </div>
        </div>
      </div>
    </div>
    <div id="divShareMedia" class="modal fade display-none" aria-hidden="true" style="z-index: 100000 !important;">
      <div class="modal-dialog modal-sm">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Share</h4>
          </div>
          <div class="modal-body">
            <div class="form-actions" style="margin-top:0;">
              <button type="button" class="btn blue" onclick="javascript: emailFile();"><i class="fa fa-envelope"></i>Email</button>
            </div>
            <div id="btnSMS" class="form-actions" style="margin-top:0;">
              <button type="button" class="btn blue" onclick="javascript: smsFile();"><i class="fa fa-mobile"></i>SMS</button>
            </div>
            <div id="divCreateLinkFile_Button">
              <div class="form-actions" style="margin-top:0;">
                <button type="button" class="btn blue" onclick="javascript: shareFileLink();"><i class="fa fa-link"></i>Get Link</button>
              </div>
            </div>
            <div id="divConnectGoogle" class="display-none">
              <hr>
              <h5>Connect to Google to retrieve your contacts</h5>
              <div class="form-actions" style="margin-top:0;">
                <button type="button" class="btn blue" onclick="javascript: connectGoogle();"><i class="fa fa-google"></i>Connect to Google</button>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div id="divEmailFile" class="modal fade display-none" aria-hidden="true" style="z-index:100000 !important;" data-backdrop="static">
      <div class="modal-dialog modal-wide">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Compose Email <small><a href="#" onclick="javascript: initializeImportRecipientDialog();">(send multiple recipients)</a></small></h4>
          </div>
          <div class="modal-body">
            <div class="form-horizontal" style="height:80%">
              <div id="divEmailFile_InputTab">
                <div class="col-md-6">
                  <div class="form-group">
                    <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                    <label class="control-label visible-ie8 visible-ie9 emailModal">First Name</label>
                    <div class="input-icon">
                      <i class="fa fa-font"></i>
                      <input id="divEmailFile_Name" class="form-control placeholder-no-fix" type="text" placeholder="First Name" name="name" tabindex="1" required="">
                    </div>
                  </div>
                </div>
                <div class="col-md-6">
                  <div class="form-group">
                    <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                    <label class="control-label visible-ie8 visible-ie9 emailModal">Last Name</label>
                    <div class="input-icon">
                      <i class="fa fa-font"></i>
                      <input id="divEmailFile_LastName" class="form-control placeholder-no-fix" type="text" placeholder="Last Name" name="name" tabindex="1" required="">
                    </div>
                  </div>
                </div>
                <div class="col-md-12">
                  <div class="form-group">
                    <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                    <label class="control-label visible-ie8 visible-ie9 emailModal">Company</label>
                    <div class="input-icon">
                      <i class="fa fa-building"></i>
                      <input id="divEmailFile_Company" class="form-control placeholder-no-fix" type="text" placeholder="Company" name="company" tabindex="2" required="">
                    </div>
                  </div>
                </div>
                <div class="col-md-12">
                  <div class="form-group">
                    <label class="control-label emailModal">Showcase Template</label>
                    <div class="input-group col-md-12">
                      <select id="selShowcase" class="form-control">
                        <option value="0" selected="selected">None</option>
                      </select>
                    </div>
                  </div>
                </div>
                <div class="col-md-12">
                  <div class="form-group">
                    <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                    <label class="control-label visible-ie8 visible-ie9 emailModal">Email</label>
                    <div class="input-icon">
                      <i class="fa fa-envelope"></i>
                      <input id="divEmailFile_Email" type="email" class="form-control placeholder-no-fix" placeholder="Email" name="email" tabindex="3" required="">
                    </div>
                  </div>
                </div>
              </div>
              <div id="divEmailFile_ImportTab" class="display-none">
                <div class="well"> Download the <a href="https://vabletmedia.blob.core.windows.net/default/emailrecipientlist-web.xlsx">Email Recipients List</a>, fill it out, then upload it via the uploader below! <br>
                </div>
                <div class="col-md-12">
                  <div class="form-group">
                    <label class="col-md-4">Upload List: </label>
                    <div class="col-md-6">
                      <input type="file" id="xlsImportList" name="files" accept=".csv,.xls,.xlsx" style="padding-top:5px;">
                    </div>
                  </div>
                </div>
              </div>
              <div class="col-md-12">
                <div class="form-group">
                  <label class="control-label visible-ie8 visible-ie9 emailModal">Subject</label>
                  <input id="divEmailFile_Subject" type="text" class="form-control placeholder-no-fix" placeholder="Subject" name="subject" tabindex="4" maxlength="50" required="">
                </div>
              </div>
              <div class="col-md-12">
                <div class="form-group emailModal">
                  <!-- include codemirror (codemirror.css, codemirror.js, xml.js, formatting.js) -->
                  <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/codemirror.min.js"></script>
                  <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/mode/xml/xml.min.js"></script>
                  <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/codemirror/2.36.0/formatting.min.js"></script>
                  <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/codemirror.min.css">
                  <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/theme/monokai.min.css">
                  <!-- add summernote plugin http://hackerwins.github.io/summernote/ -->
                  <link type="text/css" href="/Assets/plugins/summernote/summernote.css" rel="stylesheet">
                  <script src="/Assets/plugins/summernote/summernote.js" type="text/javascript"></script>
                  <script type="text/javascript" language="javascript">
                    function EmailBody_divEmailFile_Body_Destroy() {
                      $('#EmailBody_divEmailFile_Body').summernote('destroy');
                    }

                    function EmailBody_divEmailFile_Body_Setup() {
                      $('#EmailBody_divEmailFile_Body').summernote({
                        height: "225",
                        toolbar: [
                          //['style', ['style']], // no style button
                          //['style', ['bold', 'italic', 'underline', 'clear']],
                          //['fontsize', ['fontsize']],
                          //['color', ['color']],
                          //['para', ['ul', 'ol', 'paragraph']],
                          //['height', ['height']],
                          //['insert', ['picture', 'link']], 
                          //['table', ['table']], 
                          //['view', ['codeview']]
                          //['help', ['help']] 
                        ],
                        oninit: function() {
                          //console.log('Summernote is launched');
                        },
                        onfocus: function(e) {
                          //console.log('Editable area is focused');
                        },
                        onblur: function(e) {
                          //console.log('Editable area loses focus');
                        },
                        codemirror: {
                          //theme: 'monokai'
                        }
                      });
                      // Hide insert picture feature
                      $(".note-image-input").siblings().first().addClass('display-none');
                      $(".note-image-input").hide();
                      $(".note-editable").attr('tabindex', '5');
                    }

                    function EmailBody_divEmailFile_Body_SetText(text, isReadOnly) {
                      if (isReadOnly) {
                        // Check to see if the text contains any input controls. ex: {{Textbox:txtFirstname:50}}
                        var regex = /{{([^}]+)}}/g;
                        var found = text.match(regex);
                        if (found) {
                          for (i = 0; i < found.length; i++) {
                            var inputSettings = found[i].replace("{{", "").replace("}}", "").split(':');
                            var inputType = inputSettings[0].toLowerCase();
                            var inputUniqueID = inputSettings[1];
                            var inputWidth = 300;
                            if (inputSettings.length > 2) inputWidth = inputSettings[2];
                            // Replace all the textbox tags into actual html input controls
                            if (inputType == "textbox") {
                              var inputTextbox = $("<input type='text' id='" + inputUniqueID + "' style='width:" + inputWidth + "px' />");
                              text = text.replace(found[i], $(inputTextbox)[0].outerHTML);
                            }
                          }
                        }
                        EmailBody_divEmailFile_Body_Destroy();
                        $('#EmailBody_divEmailFile_Body_Locked').html(text);
                        $(".using-summernote").hide();
                        $(".notusing-summernote").show();
                      } else {
                        EmailBody_divEmailFile_Body_Setup();
                        $(".using-summernote").show();
                        $(".notusing-summernote").hide();
                        $('#EmailBody_divEmailFile_Body').summernote('code', text);
                        $(".note-editable").attr('contenteditable', 'true');
                      }
                    }

                    function EmailBody_divEmailFile_Body_GetText() {
                      if ($(".notusing-summernote:visible").length > 0) {
                        var body = $("#EmailBody_divEmailFile_Body_Locked").html();
                        var finalizedBody = body;
                        // Use regex to find all the <input type="text"> tags
                        var regex = /<input type="text"([^>]+)>/g;
                        var found = body.match(regex);
                        if (found) {
                          // For each input tag, find the id of the input and use its value to replace the entire input tag 
                          for (i = 0; i < found.length; i++) {
                            // Place the found text into a temp jQuery object so that we can find the ID easily
                            var inputID = $(found[i])[0].id;
                            var inputTagValue = $("#" + inputID).val();
                            body = body.replace(found[i], inputTagValue);
                          }
                          finalizedBody = body;
                        }
                        return finalizedBody;
                      } else return $('#EmailBody_divEmailFile_Body').summernote('code');
                    }

                    function EmailBody_divEmailFile_Body_Reset() {
                      if ($(".notusing-summernote:visible").length > 0) {
                        $(".notusing-summernote").html("").hide();
                      } else {
                        $('#EmailBody_divEmailFile_Body').summernote('code', "");
                        $("#EmailBody_divEmailFile_Body").summernote("destroy");
                        $(".using-summernote").hide();
                      }
                    }
                  </script>
                  <!-- 
    If the file is set to [Lock Email Subject and Body], then don't use the summernote plugin at all since
    there might be some input controls that need to be replaced and rendered
-->
                  <div id="EmailBody_divEmailFile_Body" class="using-summernote"></div>
                  <div id="EmailBody_divEmailFile_Body_Locked" class="notusing-summernote" style="border:solid 1px #ddd;padding:10px"></div>
                </div>
              </div>
              <div class="col-md-12">
                <ul id="sortable" class="sortableMedia">
                </ul>
              </div>
              <div class="form-group">
                <div class="col-md-5">
                  <div class="clearfix" style="float:left;">
                    <div class="btn-group" data-toggle="buttons" id="divEmailFile_SendMediaAsLink">
                      <label class="btn blue">
                        <input type="radio" class="toggle" value="0"> Attachment </label>
                      <label class="btn blue">
                        <input type="radio" class="toggle" value="1"> Link </label>
                    </div>
                  </div>
                </div>
              </div>
              <div class="form-group">
                <div class="col-md-5">
                  <button type="button" class="btn blue" onclick="javascript: recordVideo();">Attach Video</button>
                  <label id="divEmailFile_AttachVideo_Label"></label>
                </div>
              </div>
            </div>
          </div>
          <div class="modal-footer" style="margin-top: 0;">
            <button type="button" data-dismiss="modal" class="btn default">cancel</button>
            <button id="divEmailFile_SEND" type="button" data-loading-text="Sending..." class="btn blue" onclick="javascript: divEmailFile_SEND_OnClick();">Send</button>
            <button id="divEmailFile_UPLOAD" type="button" data-loading-text="Uploading..." class="btn blue display-none" onclick="javascript: divEmailFile_UPLOAD_OnClick();">Upload</button>
          </div>
        </div>
      </div>
    </div>
    <script>
      function divEmailFile_SEND_OnClick() {
        var btn = $("#divEmailFile_SEND");
        btn.button("loading");
        var name = $("#divEmailFile_Name").val();
        var lastName = $("#divEmailFile_LastName").val();
        var company = $("#divEmailFile_Company").val();
        var emails = $("#divEmailFile_Email").val();
        var subject = $("#divEmailFile_Subject").val();
        var body = EmailBody_divEmailFile_Body_GetText();
        var sendAsLink = $($("#divEmailFile_SendMediaAsLink").find(".active").children()[0]).val();
        var showcaseTemplateID = $("#selShowcase").val();
        var attachVideoFileName = $("#divEmailFile_AttachVideo_Label").html();
        var attachVideoBase64 = '';
        if (inputAttachVideoText != '') {
          attachVideoBase64 = base64ArrayBuffer(inputAttachVideoText);
        }
        var error = false;
        if (name == '' || emails == '') {
          error = true;
        }
        if (isEmailAccessKey && subject == '') {
          error = true;
        }
        var bypassEmailValidation = false;
        if (emails.indexOf(',') > -1) {
          var emailArray = emails.split(',');
          var errorInArray = false;
          emailArray.forEach(function(address) {
            if (!IsEmail(address.trim())) {
              errorInArray = true;
            }
          });
          bypassEmailValidation = !errorInArray;
        }
        if (error) {
          console.log('found error');
          toastr["warning"]("All fields required");
          btn.button("reset");
        } else {
          if (!IsEmail(emails) && !bypassEmailValidation) {
            toastr["warning"]("Invalid email format");
            btn.button("reset");
          } else {
            try {
              var currentFile = getCurrentFile();
              if (isEmailAccessKey) {
                VabletWeb.Ajax.VabletWebAjax.ForwardMediaEmailFromEmailAccessKey(getEmailAccessKey(), name, company, emails, subject, body, true, function(succeed) {
                  if (succeed) {
                    toastr["success"]("Sent");
                    EmailBody_divEmailFile_Body_Reset();
                    $("#divEmailFile").modal('hide');
                  }
                  btn.button("reset");
                });
              } else {
                var fileIDs = "";
                var openedMedia = false;
                if (currentFile) {
                  fileIDs = currentFile.FileID;
                  //openedMedia = true;
                } else {
                  updateSortedSelectedMediaIDs('sortable');
                  fileIDs = selectedMedia.join(",");
                }
                VabletWeb.Ajax.VabletWebAjax.SendMediaEmail(udid, random, fileIDs, name, lastName, company, emails, subject, body, sendAsLink, openedMedia, showcaseTemplateID, attachVideoFileName, attachVideoBase64, function(succeed) {
                  if (succeed) {
                    toastr["success"]("Sent");
                    EmailBody_divEmailFile_Body_Reset();
                    $("#divEmailFile").modal('hide');
                    uncheckAllSelectedMedia();
                  }
                  btn.button("reset");
                });
              }
            } catch (ex) {
              toastr["error"]("An unexpected error has occurred");
              EmailBody_divEmailFile_Body_Reset();
              $("#divEmailFile").modal('hide');
              btn.button("reset");
              console.log(ex);
            }
          }
        }
      }

      function divEmailFile_UPLOAD_OnClick() {
        // Check to see if the user has selected an xls/csv/xlsx file. If not, throw error
        var inputFilePath = $('#xlsImportList').val();
        var fileData = '';
        if (inputFilePath.toLowerCase().endsWith('xls') || inputFilePath.toLowerCase().endsWith('csv') || inputFilePath.toLowerCase().endsWith('xlsx')) {
          fileData = base64ArrayBuffer(xlsImportListText);
        } else {
          toastr["error"]("Please select a CSV, XLS or XLSX file");
          return;
        }
        // Continue with button UI if the user selected a file
        var btn = $("#divEmailFile_UPLOAD");
        btn.button("loading");
        var error = false;
        var startIndex = (inputFilePath.indexOf('\\') >= 0 ? inputFilePath.lastIndexOf('\\') : inputFilePath.lastIndexOf('/'));
        var filename = inputFilePath.substring(startIndex);
        if (filename.indexOf('\\') === 0 || filename.indexOf('/') === 0) {
          filename = filename.substring(1);
        }
        var subject = $("#divEmailFile_Subject").val();
        var body = EmailBody_divEmailFile_Body_GetText();
        var sendAsLink = $($("#divEmailFile_SendMediaAsLink").find(".active").children()[0]).val();
        var attachVideoFileName = $("#divEmailFile_AttachVideo_Label").html();
        var attachVideoBase64 = '';
        if (inputAttachVideoText != '') {
          attachVideoBase64 = base64ArrayBuffer(inputAttachVideoText);
        }
        if (error) {
          console.log('found error');
          toastr["warning"]("All fields required");
          btn.button("reset");
        } else {
          try {
            var fileIDs = "";
            var openedMedia = false;
            var currentFile = getCurrentFile();
            if (currentFile) {
              fileIDs = currentFile.FileID;
              //openedMedia = true;
            } else {
              updateSortedSelectedMediaIDs('sortable');
              fileIDs = selectedMedia.join(",");
            }
            VabletWeb.Ajax.VabletWebAjax.SendMediaEmailList(fileData, filename, udid, random, fileIDs, subject, body, sendAsLink, openedMedia, attachVideoFileName, attachVideoBase64, function(succeed) {
              if (succeed) {
                toastr["success"]("Sent");
                EmailBody_divEmailFile_Body_Reset();
                $("#divEmailFile").modal('hide');
                uncheckAllSelectedMedia();
              }
              btn.button("reset");
            });
          } catch (ex) {
            toastr["error"]("An unexpected error has occurred");
            EmailBody_divEmailFile_Body_Reset();
            $("#divEmailFile").modal('hide');
            btn.button("reset");
            console.log(ex);
          }
        }
      }
      var xlsImportListText;

      function initializeImportRecipientDialog() {
        $("#divEmailFile_InputTab").hide();
        $("#divEmailFile_SEND").hide();
        $("#divEmailFile_ImportTab").show();
        $("#divEmailFile_UPLOAD").show();
        $('#xlsImportList').change(function() {
          var fr = new FileReader;
          fr.onload = function() {
            xlsImportListText = fr.result;
          };
          fr.readAsArrayBuffer(this.files[0]);
        });
      }

      function IsEmail(email) {
        var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
        return regex.test(email);
      }
    </script>
    <div id="divSmsFile" class="modal fade display-none" aria-hidden="true" style="z-index:100000 !important;" data-backdrop="static">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Compose SMS</h4>
          </div>
          <div class="modal-body" style="height:300px;">
            <div class="form-horizontal">
              <div class="col-md-12">
                <div class="form-group">
                  <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                  <label class="control-label visible-ie8 visible-ie9 emailModal">Mobile Number</label>
                  <div class="input-icon">
                    <i class="fa fa-mobile"></i>
                    <input id="divSmsFile_MobileNumber" class="form-control placeholder-no-fix" type="text" placeholder="Mobile Number" name="number" tabindex="1" required="">
                  </div>
                </div>
              </div>
              <div class="col-md-12">
                <div class="form-group emailModal">
                  <textarea id="divSmsFile_Body" class="form-control placeholder-no-fix" placeholder="Body" name="body" tabindex="2" rows="4"></textarea>
                </div>
              </div>
              <br>
              <div class="col-md-12">
                <div class="form-group">
                </div>
              </div>
              <div class="col-md-12">
                <div class="form-group">
                  <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                  <label class="control-label visible-ie8 visible-ie9 emailModal">Your Contact Number</label>
                  <div class="input-icon">
                    <i class="fa fa-phone"></i>
                    <input id="divSmsFile_YourContactNumber" class="form-control placeholder-no-fix" type="text" placeholder="Your Contact Number" name="number" tabindex="3" required="">
                  </div>
                </div>
              </div>
              <div class="col-md-12">
                <div class="form-group">
                  <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                  <label class="control-label visible-ie8 visible-ie9 emailModal">Your Name</label>
                  <div class="input-icon">
                    <i class="fa fa-user"></i>
                    <input id="divSmsFile_YourName" class="form-control placeholder-no-fix" type="text" placeholder="Your Name" name="name" tabindex="4" required="">
                  </div>
                </div>
              </div>
            </div>
          </div>
          <div class="modal-footer" style="margin-top: 0;">
            <button type="button" data-dismiss="modal" class="btn default">cancel</button>
            <button id="divSmsFile_SEND" type="button" data-loading-text="Sending..." class="btn blue" onclick="javascript: divSmsFile_SEND_OnClick();">Send</button>
          </div>
        </div>
      </div>
    </div>
    <script>
      function divSmsFile_SEND_OnClick() {
        var btn = $("#divSmsFile_SEND");
        btn.button("loading");
        var number = $("#divSmsFile_MobileNumber").val();
        var body = $("#divSmsFile_Body").val();
        var yourNumber = $("#divSmsFile_YourContactNumber").val();
        var yourName = $("#divSmsFile_YourName").val();
        var error = false;
        if (number == '') {
          error = true;
        }
        if (error) {
          console.log('found error');
          toastr["warning"]("Mobile Number required");
          btn.button("reset");
        } else {
          try {
            var fileIDs = "";
            var currentFile = getCurrentFile();
            var openedMedia = false;
            if (currentFile) {
              fileIDs = currentFile.FileID;
              openedMedia = true;
            } else fileIDs = selectedMedia.join(",");
            VabletWeb.Ajax.VabletWebAjax.SendMediaSMS(udid, random, fileIDs, number, body, yourNumber, yourName, function(succeed) {
              if (succeed) {
                toastr["success"]("Sent");
                $("#divSmsFile").modal('hide');
              }
              btn.button("reset");
            });
          } catch (ex) {
            toastr["error"]("An unexpected error has occurred");
            $("#divSmsFile").modal('hide');
            btn.button("reset");
            console.log(ex);
          }
        }
      }
    </script>
    <div id="divShareLink" class="modal fade display-none" aria-hidden="true" style="z-index:100000 !important;" data-backdrop="static">
      <div class="modal-dialog  modal-wide">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Get Link</h4>
          </div>
          <div class="modal-body" style="min-height:300px;">
            <div id="divShareLink_Input" class="form-horizontal" style="display:inline-block; width:100%;">
              <div class="col-md-12">
                <div class="form-group">
                  <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                  <label class="control-label visible-ie8 visible-ie9 emailModal">Email</label>
                  <div class="input-icon">
                    <i class="fa fa-envelope"></i>
                    <input id="divShareLink_Email" class="form-control placeholder-no-fix" type="text" placeholder="Email (required)" name="" tabindex="1" required="">
                  </div>
                </div>
              </div>
              <div class="col-md-12">
                <div class="form-group emailModal">
                  <textarea id="divShareLink_Note" class="form-control placeholder-no-fix" placeholder="Note (optional)" name="body" tabindex="2" rows="4"></textarea>
                </div>
              </div>
              <div class="col-md-12">
                <ul id="sortable2" class="sortableMedia">
                  <li class="ui-state-default"><i class="fa fa-user"></i> 1</li>
                  <li class="ui-state-default">2</li>
                  <li class="ui-state-default">3</li>
                  <li class="ui-state-default">4</li>
                  <li class="ui-state-default">5</li>
                  <li class="ui-state-default">6</li>
                  <li class="ui-state-default">7</li>
                  <li class="ui-state-default">8</li>
                  <li class="ui-state-default">9</li>
                  <li class="ui-state-default">10</li>
                  <li class="ui-state-default">11</li>
                  <li class="ui-state-default">12</li>
                </ul>
              </div>
              <div class="col-md-12" style="padding-top:40px;">
                <div class="form-group">
                  <button id="divShareLink_CREATE" type="button" data-loading-text="Creating..." class="btn blue" onclick="javascript: divShareLink_CREATE_OnClick();">Create</button>
                </div>
              </div>
            </div>
            <div id="divShareLink_Output" class="form-horizontal display-none">
              <div id="divCreateLinkFile_Loading">
                <img src="/Assets/img/loading.gif">
              </div>
              <div id="divCreateLinkFile">
                <input id="divCreateLinkFile_Link" type="text" class="form-control placeholder-no-fix">
                <a href="#" class="btn blue display-none" style="display:inline-block;margin-top:10px;" id="btn_divCreateLinkFile_Link_OpenEmailClient"><i class="fa fa-envelope-o"></i>Send to Email Client</a>
              </div>
              <div id="divCreateLinkFile_QR" style="padding-top:20px;">
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div id="divCopyToFolder" class="modal fade display-none" aria-hidden="true" style="z-index:100000 !important;">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Copy Media to Folder</h4>
          </div>
          <div class="modal-body">
            <div class="form-horizontal">
              <div class="form-actions display-none" id="divCopyToFolder_FolderGrid">
                <div class="col-md-12">
                  <div class="col-md-3">
                    <button id="folder_fav" type="button" class="btn blue qlertLocationBtn" onclick="javascript: divCopyToFolder_Folder_OnClick(this.id);"><i class="fa fa-star fa-5x"></i><br>Favorite</button>
                  </div>
                  <div class="col-md-3">
                    <button id="folder_newFolder" type="button" class="btn blue qlertLocationBtn" onclick="javascript: divCopyToFolder_Folder_OnClick(this.id);"><i class="fa fa-plus fa-5x"></i><br>New Folder</button>
                  </div>
                </div>
              </div>
              <div class="form-actions display-none" id="divCopyToFolder_NewFolder">
                <div class="col-md-12">
                  <div class="form-group">
                    <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                    <label class="control-label visible-ie8 visible-ie9 emailModal">Folder Name</label>
                    <div class="input-icon">
                      <i class="fa fa-folder"></i>
                      <input id="divCopyToFolder_NewFolder_FolderName" class="form-control placeholder-no-fix" type="text" placeholder="New Folder Name" name="" tabindex="1" required="">
                    </div>
                  </div>
                </div>
                <div class="col-md-12" style="padding-top:40px;">
                  <div class="form-group">
                    <button id="divCopyToFolder_NewFolder_CREATE" type="button" data-loading-text="Creating..." class="btn blue" onclick="javascript: divCopyToFolder_NewFolder_CREATE_OnClick();">Create</button>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div id="divRemoveFromPresentationFolder" class="modal fade display-none" aria-hidden="true" style="z-index: 100000 !important;">
      <div class="modal-dialog modal-sm">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Confirmation</h4>
          </div>
          <div class="modal-body">
            <label> Are you sure you want to <span class="red">remove</span> these media from this folder? </label>
          </div>
          <div class="modal-footer" style="margin-top: 0;border-top:0;">
            <button type="button" data-dismiss="modal" class="btn default">cancel</button>
            <button id="divRemoveFromPresentationFolder_CONFIRM" type="button" data-loading-text="Removing..." class="btn red" onclick="javascript: divRemoveFromPresentationFolder_CONFIRM_OnClick();">Confirm</button>
          </div>
        </div>
      </div>
    </div>
    <div id="divPresentationFolderSetting" class="modal fade display-none" aria-hidden="true" style="z-index: 100000 !important;">
      <div class="modal-dialog modal-sm">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Folder Options</h4>
          </div>
          <div class="modal-body">
            <div class="form-actions" style="margin-top:0;">
              <button type="button" class="btn blue" onclick="javascript: renamePresentationFolder();"><i class="fa fa-pencil-square-o"></i>Rename Folder</button>
            </div>
            <div class="form-actions" style="margin-top:0;">
              <button type="button" class="btn blue" onclick="javascript: createPresentationSubfolder();"><i class="fa fa-folder-open-o"></i>Create Subfolder</button>
            </div>
            <div class="form-actions" style="margin-top:0;">
              <button type="button" class="btn red" onclick="javascript: deletePresentationFolder();"><i class="fa fa-trash-o"></i>Delete Folder</button>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div id="divDeletePresentationFolder" class="modal fade display-none" aria-hidden="true" style="z-index: 100000 !important;">
      <div class="modal-dialog modal-sm">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Confirmation</h4>
          </div>
          <div class="modal-body">
            <label> Are you sure you want to <span class="red">delete</span> this folder? This action cannot be undone </label>
          </div>
          <div class="modal-footer" style="margin-top: 0;border-top:0;">
            <button type="button" data-dismiss="modal" class="btn default">cancel</button>
            <button id="divDeletePresentationFolder_CONFIRM" type="button" data-loading-text="Deleting..." class="btn red" onclick="javascript: divDeletePresentationFolder_CONFIRM_OnClick();">Confirm</button>
          </div>
        </div>
      </div>
    </div>
    <div id="divRenamePresentationFolder" class="modal fade display-none" aria-hidden="true" style="z-index: 100000 !important;" data-backdrop="static">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Rename Folder</h4>
          </div>
          <div class="modal-body" style="min-height:100px;">
            <div class="col-md-12">
              <div class="form-group">
                <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                <label class="control-label visible-ie8 visible-ie9 emailModal">Folder Name</label>
                <div class="input-icon">
                  <i class="fa fa-folder"></i>
                  <input id="divRenamePresentationFolder_FolderName" class="form-control placeholder-no-fix" type="text" placeholder="" name="" tabindex="1" required="">
                </div>
              </div>
            </div>
          </div>
          <div class="modal-footer" style="margin-top: 0;border-top:0;">
            <button type="button" data-dismiss="modal" class="btn default">cancel</button>
            <button id="divRenamePresentationFolder_CONFIRM" type="button" data-loading-text="Renaming..." class="btn blue" onclick="javascript: divRenamePresentationFolder_CONFIRM_OnClick();">Confirm</button>
          </div>
        </div>
      </div>
    </div>
    <div id="divCreatePresentationSubfolder" class="modal fade display-none" aria-hidden="true" style="z-index: 100000 !important;" data-backdrop="static">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Create Subfolder <span id="divCreatePresentationSubfolder_Title"></span></h4>
          </div>
          <div class="modal-body" style="min-height:100px;">
            <div class="col-md-12">
              <div class="form-group">
                <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                <label class="control-label visible-ie8 visible-ie9 emailModal">Folder Name</label>
                <div class="input-icon">
                  <i class="fa fa-folder"></i>
                  <input id="divCreatePresentationSubfolder_FolderName" class="form-control placeholder-no-fix" type="text" placeholder="" name="" tabindex="1" required="">
                </div>
              </div>
            </div>
          </div>
          <div class="modal-footer" style="margin-top: 0;border-top:0;">
            <button type="button" data-dismiss="modal" class="btn default">cancel</button>
            <button id="divCreatePresentationSubfolder_CREATE" type="button" data-loading-text="Creating..." class="btn blue" onclick="javascript: divCreatePresentationSubfolder_CREATE_OnClick();">Create</button>
          </div>
        </div>
      </div>
    </div>
    <div id="divRecordVideo" class="modal fade display-none" aria-hidden="true" style="z-index:100000 !important;">
      <div class="modal-dialog modal-wide">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Attach Video</h4>
          </div>
          <div class="modal-body" style="min-height:300px;">
            <div class="form-horizontal">
              <div class="form-group">
                <div class="control-label col-md-3">
                  <label>Select File: </label>
                </div>
                <div class="col-md-8">
                  <input type="file" id="inputAttachVideo" name="files" style="padding-top:5px;" accept="video/*">
                </div>
              </div>
              <div class="form-group">
                <div class="control-label col-md-3">
                  <label></label>
                </div>
                <div class="col-md-8" style="padding-bottom:15px;">
                  <video style="max-height:400px;" playsinline="" controls="" crossorigin="" autoplay="" id="vid_inputAttachVideo"
                    data-plyr-config="{ \&quot;controls\&quot;: [\&quot;play-large\&quot;,\&quot;play\&quot;,&quot;\&quot;progress\&quot;,&quot;\&quot;current-time\&quot;,\&quot;mute\&quot;,\&quot;volume\&quot;,\&quot;fullscreen\&quot;], \&quot;clickToPlay\&quot;: true}"></video>
                </div>
              </div>
            </div>
          </div>
          <div class="modal-footer" style="margin-top: 0;border-top:0;z-index:10000;">
            <button type="button" data-dismiss="modal" class="btn default">cancel</button>
            <button id="divRecordVideo_SELECT" type="button" data-loading-text="Selecting..." class="btn blue" onclick="javascript: divRecordVideo_SELECT_OnClick();">Select</button>
          </div>
        </div>
      </div>
    </div>
    <div id="divUploadMedia" class="modal fade display-none" aria-hidden="true" style="z-index:100000 !important;">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Upload Media (50 mb limit)</h4>
          </div>
          <div class="modal-body" style="min-height:300px;">
            <div class="form-horizontal">
              <div class="form-group" id="divUploadMedia_Step1">
                <div class="col-md-3">
                  <button id="btnUploadMedia" type="button" class="btn blue qlertLocationBtn" onclick="javascript: btnUploadMedia_OnClick();"><i class="fa fa-upload fa-5x"></i><br>Select File</button>
                  <input type="file" id="inputUploadMedia" name="files" style="padding-top:5px;display:none;">
                </div>
                <div class="col-md-3">
                  <button id="btnRecordMedia" type="button" class="btn blue qlertLocationBtn" onclick="javascript: btnRecordMedia_OnClick();"><i class="fa fa-video-camera fa-5x"></i><br>Record Video</button>
                </div>
                <div class="col-md-12">
                  <span>
                    <br><br> PLEASE NOTE: Please upload EXTERNAL APPROVED FILES ONLY. If you upload internal files or files of a private business nature, those files will be deleted from the system and the links you have emailed out will be broken.
                    <br><br> For questions regarding this topic, please reach out to your administrator </span>
                </div>
              </div>
              <div class="form-group display-none" id="divUploadMedia_Step2">
                <div class="col-md-12">
                  <input id="divUploadMedia_Title" type="text" class="form-control placeholder-no-fix">
                </div>
              </div>
              <div class="form-group display-none" id="divUploadMedia_Step2_Video">
                <div class="well well-sm">
                  <h5> Click the <i class="fa fa-circle" style="color:red;"></i> Record button to start </h5>
                </div>
                <div id="divUploadMedia_Step2_Recorder" style="margin: auto;">
                  <video id="myVideo" playsinline="" class="video-js vjs-default-skin"></video>
                  <input id="divUploadMedia_Title_Video" type="text" class="form-control placeholder-no-fix display-none">
                </div>
              </div>
            </div>
          </div>
          <div class="modal-footer" style="margin-top: 0;">
            <button type="button" data-dismiss="modal" class="btn default">cancel</button>
            <button id="divUploadMedia_UPLOAD" type="button" data-loading-text="Uploading..." class="btn blue" onclick="javascript: divUploadMedia_UPLOAD_OnClick();">Upload</button>
          </div>
        </div>
      </div>
    </div>
    <script>
      var isUploadMedia = false;
      var isRecordVideo = false;

      function btnUploadMedia_OnClick() {
        isUploadMedia = true;
        isRecordVideo = false;
        $("#inputUploadMedia").click();
      }

      function btnRecordMedia_OnClick() {
        isUploadMedia = false;
        isRecordVideo = true;
        $("#divUploadMedia_Step1").hide();
        $("#divUploadMedia_Step2_Video").show();
        $("#divUploadMedia_Title_Video").hide();
        openVideoRecordTest();
        // Start the video recorder
        $(".vjs-device-button").click();
      }

      function divRecordVideo_SELECT_OnClick() {
        if (document.getElementById("inputAttachVideo").files.length > 0) $("#divEmailFile_AttachVideo_Label").html(document.getElementById("inputAttachVideo").files[0].name);
        $("#divRecordVideo").modal("hide");
      }

      function divUploadMedia_UPLOAD_OnClick() {
        var btn = $("#divUploadMedia_UPLOAD");
        btn.button("loading");
        if (isUploadMedia) {
          var error = false;
          var filePath = $('#inputUploadMedia').val();
          var title = $("#divUploadMedia_Title").val();
          if (filePath == '') {
            error = true;
          }
          if (error) {
            console.log('found error');
            toastr["warning"]("Select a file");
            btn.button("reset");
          } else {
            try {
              VabletWeb.Ajax.VabletWebAjax.UploadMedia(udid, random, filePath, base64ArrayBuffer(inputUploadMediaText), title, function(succeed) {
                if (succeed) {
                  toastr["success"]("Uploaded to [IMPORTS] folder");
                  $("#divUploadMedia").modal('hide');
                  openFolderName("IMPORTS");
                }
                btn.button("reset");
              });
            } catch (ex) {
              toastr["error"]("An unexpected error has occurred");
              $("#divUploadMedia").modal('hide');
              btn.button("reset");
              console.log(ex);
            }
          }
        } else {
          if (isRecordVideo) {
            var error = false;
            var title = $("#divUploadMedia_Title_Video").val();
            if (title == '') {
              title = inputAttachVideoText_Title;
            }
            if (inputAttachVideoText == '') {
              error = true;
            }
            if (error) {
              console.log('found error');
              toastr["warning"]("Error");
              btn.button("reset");
            } else {
              try {
                // Sending the default filename as the filepath in case the user changes the filetype
                VabletWeb.Ajax.VabletWebAjax.UploadMedia(udid, random, inputAttachVideoText_Title, base64ArrayBuffer(inputAttachVideoText), title, function(succeed) {
                  if (succeed) {
                    toastr["success"]("Uploaded to [IMPORTS] folder");
                    $("#divUploadMedia").modal('hide');
                    openFolderName("IMPORTS");
                    player.record().reset();
                  }
                  btn.button("reset");
                });
              } catch (ex) {
                toastr["error"]("An unexpected error has occurred");
                $("#divUploadMedia").modal('hide');
                btn.button("reset");
                console.log(ex);
              }
            }
          }
        }
      }

      function base64ArrayBuffer(arrayBuffer) {
        var base64 = ''
        var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
        var bytes = new Uint8Array(arrayBuffer)
        var byteLength = bytes.byteLength
        var byteRemainder = byteLength % 3
        var mainLength = byteLength - byteRemainder
        var a, b, c, d
        var chunk
        // Main loop deals with bytes in chunks of 3
        for (var i = 0; i < mainLength; i = i + 3) {
          // Combine the three bytes into a single integer
          chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]
          // Use bitmasks to extract 6-bit segments from the triplet
          a = (chunk & 16515072) >> 18 // 16515072 = (2^6 - 1) << 18
          b = (chunk & 258048) >> 12 // 258048   = (2^6 - 1) << 12
          c = (chunk & 4032) >> 6 // 4032     = (2^6 - 1) << 6
          d = chunk & 63 // 63       = 2^6 - 1
          // Convert the raw binary segments to the appropriate ASCII encoding
          base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d]
        }
        // Deal with the remaining bytes and padding
        if (byteRemainder == 1) {
          chunk = bytes[mainLength]
          a = (chunk & 252) >> 2 // 252 = (2^6 - 1) << 2
          // Set the 4 least significant bits to zero
          b = (chunk & 3) << 4 // 3   = 2^2 - 1
          base64 += encodings[a] + encodings[b] + '=='
        } else if (byteRemainder == 2) {
          chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]
          a = (chunk & 64512) >> 10 // 64512 = (2^6 - 1) << 10
          b = (chunk & 1008) >> 4 // 1008  = (2^6 - 1) << 4
          // Set the 2 least significant bits to zero
          c = (chunk & 15) << 2 // 15    = 2^4 - 1
          base64 += encodings[a] + encodings[b] + encodings[c] + '='
        }
        return base64
      }
    </script>
    <div id="divSearch" class="modal fade display-none" aria-hidden="true">
      <div class="modal-dialog modal-wide">
        <div class="modal-content">
          <div class="modal-header">
            <input id="divSearch_Search" type="text" class="form-control placeholder-no-fix" onkeydown="javascript: divSearch_KeyDown(event);" placeholder="Search">
          </div>
          <div class="modal-body">
            <div class="form-horizontal">
              <div class="form-group col-md-6">
                <label class="control-label col-md-4">Language</label>
                <div class="col-md-8">
                  <div class="input-group col-md-12">
                    <select id="selSearchLanguage" class="form-control">
                      <option value="" selected="selected">ALL</option>
                    </select>
                  </div>
                </div>
              </div>
              <div class="form-group col-md-6">
                <label class="control-label col-md-4">Country</label>
                <div class="col-md-8">
                  <div class="input-group col-md-12">
                    <select id="selSearchCountry" class="form-control">
                      <option value="" selected="selected">ALL</option>
                    </select>
                  </div>
                </div>
              </div>
            </div>
            <div class="clearfix"></div>
          </div>
          <div class="modal-footer">
            <button class="btn dark" style="float:left;" data-iframe="true" id="open-fileFinder" data-src="../FileFinder.html" onclick="javascript:openFileFinder();">File Finder</button>
            <button type="button" data-dismiss="modal" class="btn default">cancel</button>
            <button id="divSearch_SEARCH" type="button" data-loading-text="Searching..." class="btn blue" onclick="javascript: divSearch_SEARCH_Click();">Search</button>
          </div>
        </div>
      </div>
    </div>
    <script>
      var isFileFinder;

      function openFileFinder() {
        isFileFinder = true;
        $("#divSearch").modal('hide');
        LG = lightGallery(document.getElementById('open-fileFinder'), {
          selector: 'this',
          download: false,
          counter: false,
          hideScrollbar: true,
          licenseKey: 'AFCF7008-705B4D6D-A903602E-AFB150E3',
          mobileSettings: {
            controls: false,
            showCloseIcon: true,
            download: false,
          }
          //,iframeMaxWidth: _iframeMaxWidth                                    
        });
      }

      function configSearch() {
        // pull the unique language and country codes, then append them to search dropdowns
        VabletWeb.Ajax.VabletWebAjax.GetSearchConfig(udid, random, function(succeed) {
          if (succeed != '') {
            var result = JSON.parse(succeed);
            //console.log(result);
            result.language.forEach((lang) => {
              let langOpt = document.createElement('option');
              langOpt.value = lang;
              langOpt.innerHTML = lang;
              $("#selSearchLanguage").append(langOpt);
            });
            result.country.forEach((country) => {
              let countryOpt = document.createElement('option');
              let countryArr = country.split(";");
              countryOpt.value = countryArr[0];
              countryOpt.innerHTML = countryArr[1];
              $("#selSearchCountry").append(countryOpt);
            });
          }
        });
        //var opt = document.createElement('option');
        //opt.value = "EN";
        //opt.innerHTML = "English";
        //
        //$("#selSearchLanguage").append(opt);
      }

      function openSearch() {
        var searchString = $('#divSearch_Search').val();
        $("#divSearch").modal('show');
        setTimeout(function() {
          $('#divSearch_Search').val("").focus().val(searchString);
        }, 500);
      }

      function divSearch_KeyDown(e) {
        if (e.keyCode === 13) {
          divSearch_SEARCH_Click();
        }
      }

      function divSearch_SEARCH_Click() {
        var searchString = $('#divSearch_Search').val();
        // add language and country code to searchString
        var searchLanguage = $("#selSearchLanguage").val();
        var searchCountry = $("#selSearchCountry").val();
        if (searchLanguage != '' || searchCountry != '') {
          searchString += "?params=";
          searchString += "&sl=" + searchLanguage;
          searchString += "&sc=" + searchCountry;
        }
        if (searchString.trim() == '') {
          openFolder('0', rootThemeURL);
        } else {
          // Since we're doing a search, we are unsetting the presentation folder UI
          unsetPresentationFolderUI();
          setTagBtn();
          processSearch(searchString);
        }
        $("#divSearch").modal('hide');
      }

      function processSearch(searchString) {
        //console.log('Method: processSearch');
        if (!isWorking) {
          isWorking = true;
          var gridster = $(".gridster > ul").gridster().data('gridster');
          gridster.remove_all_widgets();
          App.startPageLoading('loading...');
          VabletWeb.Ajax.VabletWebAjax.GetNodesByDeviceIDForWebSearch(searchString, udid, random, function(succeed) {
            if (succeed) {
              //console.log(succeed);
              if (succeed == "logout") {
                logout();
                showErrorMessage_Login('Your session has expired. Please log in again');
              } else {
                var dynaNode = JSON.parse(succeed);
                //console.log('found dynanode search');
                //console.log(dynaNode);
                addObjectToGridster(gridster, dynaNode.children);
              }
            }
            App.stopPageLoading();
            isWorking = false;
          });
        }
      }
    </script>
    <div id="divFilter" class="modal fade display-none" aria-hidden="true">
      <div style="width:100%;float:right;padding:8px;background-color:black;">
        <a href="#" class="btn" style="float:right;" onclick="javascript: processFilter('a_fileType_pdf');"><i class="fa fa-file-pdf-o"></i>PDF</a>
        <a href="#" class="btn" style="float:right;" onclick="javascript: processFilter('a_fileType_picture');"><i class="fa fa-file-photo-o"></i>Image</a>
        <a href="#" class="btn" style="float:right;" onclick="javascript: processFilter('a_fileType_video');"><i class="fa fa-file-video-o"></i>Video</a>
        <a href="#" class="btn" style="float:right;" onclick="javascript: processFilter('a_fileType_website');"><i class="fa fa-globe"></i>Web</a>
      </div>
    </div>
    <script>
      function openFilter() {
        $("#divFilter").modal('show');
      }

      function processFilter(filter) {
        //console.log('Method: processFilter');
        if (!isWorking) {
          isWorking = true;
          var gridster = $(".gridster > ul").gridster().data('gridster');
          gridster.remove_all_widgets();
          $("#divFilter").modal('hide');
          App.startPageLoading('loading...');
          VabletWeb.Ajax.VabletWebAjax.GetNodesByDeviceIDForWebFilter(filter, udid, random, function(succeed) {
            if (succeed) {
              //console.log(succeed);
              if (succeed == "logout") {
                logout();
                showErrorMessage_Login('Your session has expired. Please log in again');
              } else {
                var dynaNode = JSON.parse(succeed);
                //console.log('found dynanode search');
                //console.log(dynaNode);
                addObjectToGridster(gridster, dynaNode.children);
              }
            }
            App.stopPageLoading();
            isWorking = false;
          });
        }
      }
    </script>
    <script>
      function openMessageCenter() {
        $("#divMessageCenter").modal('show');
        $("#divMessageCenter_Loading").show();
        $("#divMessageCenter_Inbox").hide();
        // get pending messages
        VabletWeb.Ajax.VabletWebAjax.GetMessageCenter(udid, random, function(succeed) {
          var resultJson = $.parseJSON(succeed);
          $("#divMessageCenter_Loading").hide();
          $("#divMessageCenter_Inbox").show();
          var inboxTable = $("#div_Email_InboxBody");
          inboxTable.html("");
          if (resultJson && resultJson != "") {
            if (resultJson.length > 0) {
              for (var i = 0; i < resultJson.length; i++) {
                var msg = resultJson[i];
                var sentDateTicks = msg.SentDate.replace("/Date(", "").replace(")/", "");
                sentDateTicks = sentDateTicks.substr(0, sentDateTicks.length - 5);
                var sentDate = new Date(parseInt(sentDateTicks));
                var tableRow = "<tr data-messageid='" + msg.PrivateMessageID + "' onclick='javascript: openMessage(" + msg.PrivateMessageID + ");' style='max-height:40px;'>";
                tableRow += "<td class='inbox-small-cells'>";
                tableRow += "<a onclick='javascript: openMessage(" + msg.PrivateMessageID + ");'>";
                tableRow += "<i class='fa fa-envelope-o inbox-started'>";
                tableRow += "</i></a></td>";
                tableRow += "<td class='view-message' id='pm_" + msg.PrivateMessageID + "' style='white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 450px;'> " + msg.Message + " </td>";
                tableRow += "<td class='view-message text-right'> " + sentDate.toLocaleString().replace(",", "") + " </td>";
                tableRow += "</tr>";
                inboxTable.append(tableRow);
              }
            }
          } else {
            var noMessageAvailable = '<h5 style="text-align: center;">No Message Available</h5>';
            inboxTable.append(noMessageAvailable);
          }
        });
      }

      function openMessage(pmID) {
        $("#divMessageCenter_Inbox").hide();
        $("#divMessageCenter_Message").fadeIn('slow');
        EmailBody_divMessageCenter_Message_Body_SetText($("#pm_" + pmID).html(), true);
      }

      function closeMessage() {
        $("#divMessageCenter_Message").hide();
        $("#divMessageCenter_Inbox").fadeIn('slow');
      }
    </script>
    <div id="divMessageCenter" class="modal fade display-none" aria-hidden="true" style="z-index: 100000 !important;">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Message Center</h4>
          </div>
          <div class="modal-body" style="max-height: 400px;overflow-y:scroll;">
            <div class="form-horizontal">
              <div id="divMessageCenter_Loading">
                <img src="/Assets/img/loading.gif">
              </div>
              <div id="divMessageCenter_Inbox">
                <div class="inbox">
                  <div class="row">
                    <div class="inbox-body">
                      <div class="inbox-content">
                        <table class="table table-striped table-advance table-hover">
                          <tbody id="div_Email_InboxBody">
                            <tr class="unread" data-messageid="1">
                              <td class="inbox-small-cells">
                                <i class="fa fa-star"></i>
                              </td>
                              <td class="view-message hidden-xs">Petronas IT </td>
                              <td class="view-message ">New server for datacenter needed </td>
                              <td class="view-message inbox-small-cells">
                                <i class="fa fa-paperclip"></i>
                              </td>
                              <td class="view-message text-right">16:30 PM </td>
                            </tr>
                            <tr class="unread" data-messageid="2">
                              <td class="inbox-small-cells">
                                <i class="fa fa-star"></i>
                              </td>
                              <td class="view-message hidden-xs">Daniel Wong </td>
                              <td class="view-message">Please help us on customization of new secure server </td>
                              <td class="view-message inbox-small-cells"></td>
                              <td class="view-message text-right">March 15 </td>
                            </tr>
                          </tbody>
                        </table>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
              <div class="display-none" id="divMessageCenter_Message">
                <button type="button" class="btn blue" onclick="javascript: closeMessage();" tabindex="3">Back</button>
                <div class="clearfix" style="padding: 5px;"></div>
                <div class="col-md-12">
                  <div class="form-group emailModal">
                    <!-- include codemirror (codemirror.css, codemirror.js, xml.js, formatting.js) -->
                    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/codemirror.min.js"></script>
                    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/mode/xml/xml.min.js"></script>
                    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/codemirror/2.36.0/formatting.min.js"></script>
                    <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/codemirror.min.css">
                    <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/theme/monokai.min.css">
                    <!-- add summernote plugin http://hackerwins.github.io/summernote/ -->
                    <link type="text/css" href="/Assets/plugins/summernote/summernote.css" rel="stylesheet">
                    <script src="/Assets/plugins/summernote/summernote.js" type="text/javascript"></script>
                    <script type="text/javascript" language="javascript">
                      function EmailBody_divMessageCenter_Message_Body_Destroy() {
                        $('#EmailBody_divMessageCenter_Message_Body').summernote('destroy');
                      }

                      function EmailBody_divMessageCenter_Message_Body_Setup() {
                        $('#EmailBody_divMessageCenter_Message_Body').summernote({
                          height: "200",
                          toolbar: [
                            //['style', ['style']], // no style button
                            //['style', ['bold', 'italic', 'underline', 'clear']],
                            //['fontsize', ['fontsize']],
                            //['color', ['color']],
                            //['para', ['ul', 'ol', 'paragraph']],
                            //['height', ['height']],
                            //['insert', ['picture', 'link']], 
                            //['table', ['table']], 
                            //['view', ['codeview']]
                            //['help', ['help']] 
                          ],
                          oninit: function() {
                            //console.log('Summernote is launched');
                          },
                          onfocus: function(e) {
                            //console.log('Editable area is focused');
                          },
                          onblur: function(e) {
                            //console.log('Editable area loses focus');
                          },
                          codemirror: {
                            //theme: 'monokai'
                          }
                        });
                        // Hide insert picture feature
                        $(".note-image-input").siblings().first().addClass('display-none');
                        $(".note-image-input").hide();
                        $(".note-editable").attr('tabindex', '5');
                      }

                      function EmailBody_divMessageCenter_Message_Body_SetText(text, isReadOnly) {
                        if (isReadOnly) {
                          // Check to see if the text contains any input controls. ex: {{Textbox:txtFirstname:50}}
                          var regex = /{{([^}]+)}}/g;
                          var found = text.match(regex);
                          if (found) {
                            for (i = 0; i < found.length; i++) {
                              var inputSettings = found[i].replace("{{", "").replace("}}", "").split(':');
                              var inputType = inputSettings[0].toLowerCase();
                              var inputUniqueID = inputSettings[1];
                              var inputWidth = 300;
                              if (inputSettings.length > 2) inputWidth = inputSettings[2];
                              // Replace all the textbox tags into actual html input controls
                              if (inputType == "textbox") {
                                var inputTextbox = $("<input type='text' id='" + inputUniqueID + "' style='width:" + inputWidth + "px' />");
                                text = text.replace(found[i], $(inputTextbox)[0].outerHTML);
                              }
                            }
                          }
                          EmailBody_divMessageCenter_Message_Body_Destroy();
                          $('#EmailBody_divMessageCenter_Message_Body_Locked').html(text);
                          $(".using-summernote").hide();
                          $(".notusing-summernote").show();
                        } else {
                          EmailBody_divMessageCenter_Message_Body_Setup();
                          $(".using-summernote").show();
                          $(".notusing-summernote").hide();
                          $('#EmailBody_divMessageCenter_Message_Body').summernote('code', text);
                          $(".note-editable").attr('contenteditable', 'true');
                        }
                      }

                      function EmailBody_divMessageCenter_Message_Body_GetText() {
                        if ($(".notusing-summernote:visible").length > 0) {
                          var body = $("#EmailBody_divMessageCenter_Message_Body_Locked").html();
                          var finalizedBody = body;
                          // Use regex to find all the <input type="text"> tags
                          var regex = /<input type="text"([^>]+)>/g;
                          var found = body.match(regex);
                          if (found) {
                            // For each input tag, find the id of the input and use its value to replace the entire input tag 
                            for (i = 0; i < found.length; i++) {
                              // Place the found text into a temp jQuery object so that we can find the ID easily
                              var inputID = $(found[i])[0].id;
                              var inputTagValue = $("#" + inputID).val();
                              body = body.replace(found[i], inputTagValue);
                            }
                            finalizedBody = body;
                          }
                          return finalizedBody;
                        } else return $('#EmailBody_divMessageCenter_Message_Body').summernote('code');
                      }

                      function EmailBody_divMessageCenter_Message_Body_Reset() {
                        if ($(".notusing-summernote:visible").length > 0) {
                          $(".notusing-summernote").html("").hide();
                        } else {
                          $('#EmailBody_divMessageCenter_Message_Body').summernote('code', "");
                          $("#EmailBody_divMessageCenter_Message_Body").summernote("destroy");
                          $(".using-summernote").hide();
                        }
                      }
                    </script>
                    <!-- 
    If the file is set to [Lock Email Subject and Body], then don't use the summernote plugin at all since
    there might be some input controls that need to be replaced and rendered
-->
                    <div id="EmailBody_divMessageCenter_Message_Body" class="using-summernote"></div>
                    <div id="EmailBody_divMessageCenter_Message_Body_Locked" class="notusing-summernote" style="border:solid 1px #ddd;padding:10px"></div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <script>
      function openReport() {
        var urlPrefix = 'https://web.vablet.com';
        var url = urlPrefix + '/Device/DeviceReport?vweb=1&udid=' + udid + '&ran=' + random;
        var lightbox = $("#nivoLightbox");
        lightbox.nivoLightbox({
          clickOverlayToClose: false
        });
        lightbox.attr('href', "/Assets/plugins/nivo-lightbox/themes/default/loading.gif");
        lightbox.attr('data-lightbox-type', "");
        lightbox.click();
        var downloadBtn = $(".nivo-lightbox-download");
        downloadBtn.hide();
        var emailBtn = $(".nivo-lightbox-email");
        emailBtn.hide();
        var smsBtn = $(".nivo-lightbox-sms");
        smsBtn.hide();
        setTimeout(function() {
          var imageBox = $(".nivo-lightbox-image");
          var reportViewer = '<iframe id="reportViewer" src="' + url + '" frameborder="0" seamless="seamless" scrolling="auto" align="middle" scale="1.5" allowfullscreen="true"></iframe>';
          imageBox.children().hide();
          imageBox.css('background-color', 'white');
          imageBox.css('line-height', 'normal');
          imageBox.append(reportViewer);
        }, 500);
      }
    </script>
    <div id="divReport" style="display:none;">
      <button class="btn btn-success btn-lg mrb50" data-iframe="true" id="divReport_OpenReport" data-src="' + url + '">Open website</button>
    </div>
    <style>
      .mfb-component__main-icon--resting li [class^="fa-"],
      li [class*=" fa-"] {
        width: inherit !important;
      }
    </style>
    <div>
      <ul id="mfb_Menu" class="mfb-component--br mfb-slidein" data-mfb-toggle="hover">
        <li class="mfb-component__wrap">
          <a href="#" class="mfb-component__button--main">
                    <i class="mfb-component__main-icon--resting fa fa-bars"></i>
                    <i class="mfb-component__main-icon--active fa fa-bars"></i>
                </a>
          <ul class="mfb-component__list">
            <li>
              <a href="#" id="mfb_TaggedMedia" data-mfb-label="Tagged Media" class="mfb-component__button--child" onclick="javascript: showSelectedMedia();">
                            <i class="mfb-component__child-icon fa fa-tag"></i>
                        </a>
            </li>
            <li>
              <a href="#" data-mfb-label="Share" class="mfb-component__button--child" onclick="javascript: shareMedia(false);">
                            <i class="mfb-component__child-icon fa fa-share-alt"></i>
                        </a>
            </li>
            <li>
              <a href="#" id="mfb_CopyMedia" data-mfb-label="Copy to Folder" class="mfb-component__button--child" onclick="javascript: copyMedia();">
                            <i class="mfb-component__child-icon fa fa-folder-open"></i>
                        </a>
            </li>
            <li id="btnUpload">
              <a href="#" data-mfb-label="Upload Media" class="mfb-component__button--child" onclick="javascript: uploadMedia();">
                            <i class="mfb-component__child-icon fa fa-upload"></i>
                        </a>
            </li>
            <li>
              <a href="#" data-mfb-label="Home" class="mfb-component__button--child" onclick="javascript: btnHome_Click();">
                            <i class="mfb-component__child-icon fa fa-home"></i>
                        </a>
            </li>
          </ul>
        </li>
      </ul>
    </div>
    <div>
      <ul id="lightGallery_mfb_Menu" class="mfb-component--br mfb-slidein display-none" data-mfb-toggle="hover" style="z-index:99999 !important">
        <li class="mfb-component__wrap">
          <a href="#" class="mfb-component__button--main">
                    <i class="mfb-component__main-icon--resting fa fa-bars"></i>
                    <i class="mfb-component__main-icon--active fa fa-bars"></i>
                </a>
          <ul class="mfb-component__list" id="lightGallery_mfb_List">
          </ul>
        </li>
      </ul>
    </div>
    <div id="themeLogo"></div>
    <div class="display-none">
      <input type="file" class="zipHtmlCapture-image-input" accept="image/*">
    </div>
    <div id="divSignatureTest" class="modal fade display-none" aria-hidden="true" style="z-index: 100000 !important;">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Signature Test</h4>
          </div>
          <div id="testArea">
          </div>
        </div>
      </div>
    </div>
    <script>
      function createCanvas(id, parentID) {
        var newCanvas = document.createElement('canvas');
        newCanvas.setAttribute('id', id);
        newCanvas.setAttribute('class', 'signature-pad');
        newCanvas.setAttribute('width', '400');
        newCanvas.setAttribute('height', '150');
        document.getElementById(parentID).appendChild(newCanvas);
        var signaturePad = new SignaturePad(document.getElementById(id), {
          backgroundColor: 'rgba(255, 255, 255, 0)',
          penColor: 'rgb(0, 0, 0)',
        });
      }

      function openSignatureTest2() {
        $('#divSignatureTest').modal('show');
        var id = 'banana';
        createCanvas(id);
        var signaturePad = new SignaturePad(document.getElementById(id), {
          backgroundColor: 'rgba(255, 255, 255, 0)',
          penColor: 'rgb(0, 0, 0)',
        });
      }

      function openSignatureTest() {
        $('#divSignatureTest').modal('show');
        var signaturePad = new SignaturePad(document.getElementById('signature-pad'), {
          backgroundColor: 'rgba(255, 255, 255, 0)',
          penColor: 'rgb(0, 0, 0)',
        });
        signaturePad.onEnd = function() {
          var saveBtn = document.getElementById('save');
          saveBtn.click();
          console.log('end');
        };
        var saveButton = document.getElementById('save');
        var cancelButton = document.getElementById('clear');
        saveButton.addEventListener('click', function(event) {
          var data = signaturePad.toDataURL('image/png');
          // Send data to server instead...
          //window.open(data);
          console.log(data);
        });
        cancelButton.addEventListener('click', function(event) {
          signaturePad.clear();
        });
      }
    </script>
    <div id="divRecordVideoTest" class="modal fade display-none" aria-hidden="true" style="z-index: 100000 !important;">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
            <h4 class="modal-title emailModal">Record Video Test</h4>
          </div>
          <div id="testArea2">
          </div>
          <button id="divRecordVideoTest_UPLOAD" type="button" data-loading-text="Uploading..." class="btn blue" onclick="javascript: divRecordVideoTest_UPLOAD_OnClick();">Upload</button>
        </div>
      </div>
    </div>
    <script>
      /*scripts for testing*/
      function chatPDF() {
        var currentFile = getCurrentFile();
        var chatPDFObj = {};
        chatPDFObj.title = currentFile.Title;
        chatPDFObj.url = currentFile.RemotePath;
        chatPDFObj.email = udid;
        chatPDFObj.accessKey = random;
        if (chatPDFObj.email == '') {
          chatPDFObj.email = profile.email;
          chatPDFObj.accessKey = getEmailAccessKey();
        }
        chatPDFObj.fileID = currentFile.FileID;
        try {
          chatPDFObj.returnUrl = 'https://web.vablet.com/' + window.location.href.substr(window.location.href.toLowerCase().indexOf("viewer?"));
        } catch (ex) {
          chatPDFObj.returnUrl = 'https://web.vablet.com/Viewer';
        }
        chatPDFObj.pdfViewUrl = 'https://web.vablet.com/PDFViewer216/web/viewer.html?file=' + chatPDFObj.url;
        console.log(chatPDFObj);
        //window.open('https://web.vablet.com/PDFViewer216/web/viewer.html?file=' + chatPDFObj.url, '_blank');
        var chatPDFUrl = 'https://chatpdf.vablet.com/' + '?title=' + chatPDFObj.title + '&url=' + chatPDFObj.url + '&accessKey=' + chatPDFObj.accessKey + '&email=' + chatPDFObj.email + '&fileID=' + chatPDFObj.fileID + '&returnUrl=' + chatPDFObj
          .returnUrl + '&pdfViewUrl=' + chatPDFObj.pdfViewUrl;
        console.log(chatPDFUrl);
        window.open(chatPDFUrl, '_blank');
      }
      var player;
      var inputAttachVideoText_Title = '';
      //const { createFFmpeg, fetchFile } = FFmpeg;
      //const ffmpeg = createFFmpeg({
      //    log: true,
      //});
      function openVideoRecordTest() {
        //$('#divRecordVideoTest').modal('show');
        var options = {
          controls: true,
          bigPlayButton: false,
          width: 588,
          height: 441,
          fluid: false,
          plugins: {
            record: {
              audio: true,
              video: true,
              maxLength: 300,
              debug: true,
              video: {
                // video media constraints: set resolution of camera
                width: {
                  min: 640,
                  ideal: 640,
                  max: 1280
                },
                height: {
                  min: 480,
                  ideal: 480,
                  max: 920
                }
              },
              // dimensions of captured video frames
              frameWidth: 640,
              frameHeight: 480
              //,
              //// enable ffmpeg.wasm plugin
              //convertEngine: 'ffmpeg.wasm',
              //convertWorkerURL: '/Assets/plugins/ffmpeg/ffmpeg-core.js',
              //// convert recorded data to MP4 (and copy over audio data without encoding)
              //convertOptions: ['-c:v', 'libx264', '-preset', 'slow', '-crf', '22', '-c:a', 'copy', '-f', 'mp4'],
              //// specify output mime-type
              //pluginLibraryOptions: {
              //    outputType: 'video/mp4'
              //}
            }
          }
        };
        // apply some workarounds for opera browser
        //applyVideoWorkaround();
        player = videojs('myVideo', options, function() {
          // print version information at startup
          var msg = 'Using video.js ' + videojs.VERSION + ' with videojs-record ' + videojs.getPluginVersion('record') + ' and recordrtc ' + RecordRTC.version;
          videojs.log(msg);
        });
        // error handling
        player.on('deviceError', function() {
          console.log('device error:', player.deviceErrorCode);
        });
        player.on('error', function(element, error) {
          console.error(error);
        });
        // user clicked the record button and started recording
        player.on('startRecord', function() {
          console.log('started recording!');
        });
        // user completed recording and stream is available
        player.on('finishRecord', function() {
          // the blob object contains the recorded data that
          // can be downloaded by the user, stored on server etc.
          console.log('finished recording: ', player.recordedData);
          debug = player.recordedData;
          player.recordedData.name = player.recordedData.name.replace('.mkv', '.mp4');
          inputAttachVideoText_Title = player.recordedData.name;
          var fr = new FileReader;
          fr.onload = function(evt) {
            inputAttachVideoText = fr.result;
          };
          fr.readAsArrayBuffer(player.recordedData);
          $("#divUploadMedia_Title_Video").val(inputAttachVideoText_Title).show();
        });
        $("#divUploadMedia").on('hidden.bs.modal', function() {
          player.record().reset();
        });
      }

      function testThumbnail(fileId) {
        VabletWeb.Ajax.VabletWebAjax.NativeInterface_GetThumbnailForFileId(fileId, udid, random, function(succeed) {
          var thumbnailResponse = {};
          thumbnailResponse.base64EncodedJpeg = succeed;
          thumbnailResponse.fileId = fileId;
          console.log(thumbnailResponse);
        });
      }

      function submitPDFForm(result) {
        console.log(getCurrentFile().FileID);
        VabletWeb.Ajax.VabletWebAjax.GetSurveyIDFromFileID(getCurrentFile().FileID, function(surveyID) {
          var surveyContentUrl = 'https://ws.vablet.com/VabletService/GetSurvey.json/' + udid + '/' + random + '/' + surveyID;
          var json = {};
          json.SurveyID = surveyID;
          json.timeStamp = "\/Date(" + new Date().getTime() + ")\/";
          json.Answers = [];
          json.SubmittedBy = '';
          $.ajax({
            url: surveyContentUrl,
            type: 'GET',
            dataType: "json",
            success: function(initData) {
              //console.log(initData);
              if (initData.Question.length == result.length) {
                initData.Question.forEach(function(question) {
                  try {
                    var answer = {};
                    answer.answerValues = [];
                    var value = getValueFromPDFFormResult(question, result);
                    switch (question.QuestionType) {
                      case 66:
                      case 77:
                        // getting an array of answerChoiceIDs now
                        var answerChoiceIDs = getCheckBoxPDFAnswerChoiceIDs(question, value);
                        // no longer compare to 0 just if length > 0
                        if (answerChoiceIDs.length > 0) {
                          // use concat instead of push to flatten array
                          answer.answerValues = answer.answerValues.concat(answerChoiceIDs);
                          // or a spread operator but that has no IE support
                          // answer.answerValues.push(...answerChoiceIDs);
                        }
                        break;
                        //answer.answerValues.push(getAnswerChoiceIDs(question));
                        //break;
                      case 80: //80 = P
                      case 83: //83 = S
                        var base64Str = document.getElementById(question.QuestionText).getAttribute('base64Value');
                        if (base64Str) {
                          base64Str = base64Str.replace('data:image/png;base64,', '');
                          answer.answerValues.push(base64Str);
                        } else {
                          // Ryan changed the base64Value to vabletfileurl 7/7/2021
                          base64Str = document.getElementById(question.QuestionText).getAttribute('vabletfileurl');
                          if (base64Str) {
                            answer.answerValues.push(base64Str);
                          } else {
                            answer.answerValues.push("");
                          }
                        }
                        break;
                      default:
                        answer.answerValues.push(value);
                        break;
                    }
                    answer.questionID = question.SurveyQuestionID;
                    json.Answers.push(answer);
                  } catch (ex) {
                    error.push(question.QuestionText);
                    console.log(ex);
                    console.log(question);
                  }
                });
                var jsonString = JSON.stringify(json);
                var xhr = new XMLHttpRequest();
                var url = "https://web.vablet.com/Ajax/VabletWebAjax.asmx/UploadSurveyResponse";
                debug = false;
                if (debug) {
                  url = "https://vabletweb.local/Ajax/VabletWebAjax.asmx/UploadSurveyResponse";
                }
                xhr.open("POST", url, true);
                xhr.setRequestHeader("Content-Type", "application/json");
                xhr.onreadystatechange = function() {
                  if (xhr.readyState === 4 && xhr.status === 200) {
                    var json = JSON.parse(xhr.responseText);
                    //console.log(json);
                    //document.body.innerHTML = "Form has been submitted. Please close the form.";
                    toastr["success"]("Submitted");
                    closeLightbox();
                  }
                };
                var data = JSON.stringify({
                  "udid": udid,
                  "random": random,
                  "jsonString": jsonString,
                  "emailAccessKey": ""
                });
                console.log(data);
                xhr.send(data);
              }
            },
            error: function(msg, url, line) {
              console.log('error out at GetSurvey.json');
              console.log("error msg: " + msg);
              console.log("url: " + url);
              console.log("line: " + line);
            }
          });
        });
      }

      function getValueFromPDFFormResult(question, result) {
        for (var i = 0; i < result.length; i++) {
          if (result[i].name == question.QuestionText) {
            //console.log('found the answer');
            //console.log(result[i].value);
            return result[i].value;
          }
        }
        //result.forEach(function (r) {
        //    console.log(r);
        //    console.log(r.name);
        //    console.log(question.QuestionText);
        //    if (r.name === question.QuestionText) {
        //        return r.value;
        //    }
        //    }
        //);
      }

      function getCheckBoxPDFAnswerChoiceIDs(question, selectedValue) {
        var selectedValues = [];
        question.AnswerChoice.forEach(function(choice) {
          if (selectedValue === choice.AnswerText) {
            selectedValues.push(choice.SurveyAnswerChoiceID); // push to array now
          }
        });
        console.log(selectedValues);
        return selectedValues;
      }
    </script>
  </div>
  <!-- END LOGIN -->
  <!-- BEGIN COPYRIGHT -->
  <div class="copyright display-none"> 2024 © vablet Web v1.240110.0232 </div>
  <!-- END COPYRIGHT -->
  <script type="text/javascript">
    $(document).ready(function() {
      // initiate layout and plugins
      App.init();
      //FormValidation.init();
    });
    //RD2818786ED5B4
  </script>
  <!-- GOOGLE ANALYTICS -->
  <!-- Global site tag (gtag.js) - Google Analytics -->
  <script async="" src="https://www.googletagmanager.com/gtag/js?id=G-MSYY3BCSN1"></script>
  <script>
    window.dataLayer = window.dataLayer || [];

    function gtag() {
      dataLayer.push(arguments);
    }
    gtag('js', new Date());
    gtag('config', 'G-MSYY3BCSN1');
  </script>
  <!-- END GOOGLE ANALYTICS -->
  <script type="text/javascript">
    //<![CDATA[
    (function() {
      var fn = function() {
        $get("MainContent_scriptManager1_HiddenField").value = '';
        Sys.Application.remove_init(fn);
      };
      Sys.Application.add_init(fn);
    })(); //]]>
  </script>
</form>

Text Content

 * Home
 * Forward
 * My Profile
 * Message
 * Report
 * Search
 * Media Type
 * Favorites
 * Log Out

Open website
Login

Password


 Remember me



Sign In
Single Sign-On
New User Forgot Password?
Invitation Key

New Password

Confirm Password




Register
Already a user?
Email




Continue
Back
Email




Reset Password
Back
Verification Code

Email

New Password

Confirm Password




Update Password

PLEASE ENTER YOUR EMAIL ADDRESS TO VIEW CONTENT

Email

Continue




CONTACTS


cancel Select

SHARE

Email
SMS
Get Link

--------------------------------------------------------------------------------

CONNECT TO GOOGLE TO RETRIEVE YOUR CONTACTS

Connect to Google

COMPOSE EMAIL (SEND MULTIPLE RECIPIENTS)

First Name

Last Name

Company

Showcase Template
None
Email

Download the Email Recipients List, fill it out, then upload it via the uploader
below!

Upload List:

Subject


Attachment Link
Attach Video
cancel Send Upload

COMPOSE SMS

Mobile Number




Your Contact Number

Your Name

cancel Send

GET LINK

Email


 * 1
 * 2
 * 3
 * 4
 * 5
 * 6
 * 7
 * 8
 * 9
 * 10
 * 11
 * 12

Create
Send to Email Client


COPY MEDIA TO FOLDER


Favorite

New Folder
Folder Name

Create

CONFIRMATION

Are you sure you want to remove these media from this folder?
cancel Confirm

FOLDER OPTIONS

Rename Folder
Create Subfolder
Delete Folder

CONFIRMATION

Are you sure you want to delete this folder? This action cannot be undone
cancel Confirm

RENAME FOLDER

Folder Name

cancel Confirm

CREATE SUBFOLDER

Folder Name

cancel Create

ATTACH VIDEO

Select File:


cancel Select

UPLOAD MEDIA (50 MB LIMIT)


Select File

Record Video


PLEASE NOTE: Please upload EXTERNAL APPROVED FILES ONLY. If you upload internal
files or files of a private business nature, those files will be deleted from
the system and the links you have emailed out will be broken.

For questions regarding this topic, please reach out to your administrator


CLICK THE RECORD BUTTON TO START


cancel Upload
Language
ALL
Country
ALL

File Finder cancel Search
PDF Image Video Web

MESSAGE CENTER

Petronas IT New server for datacenter needed 16:30 PM Daniel Wong Please help us
on customization of new secure server March 15

Back


Open website
 * * 
   * 
   * 
   * 
   * 

 * 




SIGNATURE TEST



RECORD VIDEO TEST


Upload
2024 © vablet Web v1.240110.0232