<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" href="https://cdn.revcent.com/img/favicon.png">
  <title>Customer Registration - BIOLUMA</title>
  <meta name="description" content="BIOLUMA customer registration." />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/bootstrap.min.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/fontawesome-5/css/all.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/fontawesome-5/css/v4-shims.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/lightbox/ekko-lightbox.min.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/bootstrap-markdown/bootstrap-markdown.min.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/bootstrap-select/bootstrap-select.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/json-forms/json-forms.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/code-prettify/theme.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/datatables/datatables.min.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/animate.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/sweetalert/sweetalert.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/switchery/switchery.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/daterangepicker/daterangepicker.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/multiselect/multiselect.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/toastr/toastr.min.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/yamm/yamm.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/css/revcent.min.css" type="text/css" />
  <style>
    @font-face {
      font-family: 'revcentcustom';
      src: url('https://cdn.revcent.com/fonts/revcent/logo-icon-color.eot?416rza');
      src: url('https://cdn.revcent.com/fonts/revcent/logo-icon-color.eot?416rza#iefix') format('embedded-opentype'),
        url('https://cdn.revcent.com/fonts/revcent/logo-icon-color.ttf?416rza') format('truetype'),
        url('https://cdn.revcent.com/fonts/revcent/logo-icon-color.woff?416rza') format('woff'),
        url('https://cdn.revcent.com/fonts/revcent/logo-icon-color.svg?416rza#icomoon') format('svg');
      font-weight: normal;
      font-style: normal;
      font-display: block;
    }

    [class^="revcenticon-"],
    [class*=" revcenticon-"] {
      font-family: 'revcentcustom' !important;
      speak: never;
      font-style: normal;
      font-weight: normal;
      font-variant: normal;
      text-transform: none;
      line-height: 1;

      /* Better Font Rendering =========== */
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }

    .revcenticon-color:before {
      content: "\e900";
      color: #5ec4f0;
    }
    
  </style><style>
  .middle-box h1 {
    font-size: 30px;
  }


  .logo-name {
    color: #424242;
    font-size: 28px;
    letter-spacing: 0;
    font-weight: 400;
    margin-bottom: 0;
  }

  .form-control {
    font-size: 18px;
    font-weight: 300;
  }

  .m-t {
    margin-top: 15px;
    margin-bottom: 15px;
  }

  body.img-bg {
    background-color: #f9f9f9;
  }

  #login-h3 {
    font-size: 18px;
  }

  #main-logo {
    max-height: 50px;
  }
</style>
</head>

<body class="white-bg">
  <div class="wrapper">
    <div class="row text-center">
      <div class="col-sm-4 col-sm-offset-4">
        <div style="margin-top: 30px">
          <div class="main-logo-wrap">
            <img src="https://customerportalimage.revcent.com/EMm9K8Gd5Wf9VbgY6OZL.png" id="main-logo">
          </div>
        </div>
        <form class="m-t" id="registerForm" autocomplete="off" novalidate="novalidate">
          <h3 id="login-h3">Register</h3>
          <br>
          <div class="form-group">
            <input type="text" class="form-control input-lg" id="first_name" name="first_name" placeholder="First Name" data-toggle="tooltip" data-placement="top" title="First Name" value="">
          </div>
          <div class="form-group">
            <input type="text" class="form-control input-lg" id="last_name" name="last_name" placeholder="Last Name" data-toggle="tooltip" data-placement="top" title="Last Name" value="">
          </div>
          <div class="form-group">
            <input type="email" class="form-control input-lg" id="email" name="email" placeholder="Email" data-toggle="tooltip" data-placement="top" title="Email" value="">
          </div>
          <div class="form-group">
            <input type="password" class="form-control input-lg" id="password" name="password" placeholder="Password" data-toggle="tooltip" data-placement="top" title="Password" value="">
          </div>
          <div class="form-group">
            <input type="password" class="form-control input-lg" id="passwordConfirm" name="passwordConfirm" placeholder="Password Again" data-toggle="tooltip" data-placement="top" title="Password Again" value="">
          </div>
          <div class="form-group">
            <div id="recaptcha_register_request"></div>
          </div>
          <div class="form-group">
            <input type="submit" name="Register" id="submit" value="Submit" class="btn btn-lg btn-success block full-width m-b">
            <p class="text-muted text-center"><small>Already have an account? <a href="https://customerportal.revcent.com/bioluma/login">Login</a></small></p>
          </div>
        </form>
      </div>
    </div>

  </div>

  <script src="https://cdn.revcent.com/js/jquery.min.js"></script>
  <script src="https://cdn.revcent.com/js/bootstrap.min.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/validation/jquery.validate.min.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/validation/additional-methods.min.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/metisMenu/jquery.metisMenu.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/slimscroll/jquery.slimscroll.min.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/bootstrap-markdown/markdown.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/bootstrap-select/bootstrap-select.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/json-forms/json-forms.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/json-forms/json-forms-bootstrap.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/datatables/datatables.min.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/datatables/datatables.select.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/moment/moment.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/moment/moment-timezone.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/immutable/immutable.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/switchery/switchery.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/sweetalert/sweetalert.min.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/daterangepicker/daterangepicker.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/multiselect/multiselect.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/autocomplete/jquery.autocomplete.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/card/jquery.card.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/code-prettify/run_prettify.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/lightbox/ekko-lightbox.min.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/highcharts/highcharts.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/highcharts/modules/map.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/highcharts/modules/funnel.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/highcharts/modules/heatmap.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/highcharts/modules/exporting.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/highcharts/modules/export-data.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/highcharts/modules/data.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/highcharts/modules/drilldown.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/highcharts/modules/boost-canvas.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/highcharts/modules/boost.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/highcharts/mapdata/countries/us/us-all.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/highcharts/mapdata/countries/us/us-all-all.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/highcharts/mapdata/custom/world.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/lodash/lodash.js"></script>
  <script src="https://cdn.revcent.com/js/plugins/toastr/toastr.min.js"></script>
  <script src="https://cdn.revcent.com/js/revcent.min.js"></script>
  <script src="https://cdn.revcent.com/js/revcent-table.min.js"></script>
  <script src="https://cdn.revcent.com/js/revcent-misc.min.js"></script>
  <script src="https://cdn.revcent.com/js/revcent-schemas.min.js"></script>



  <script>
    $(document).ready(function () {
      $('.lobtn').click(function () {
        $.ajax({
          type: 'POST',
          url: 'https://customerportal.revcent.com/bioluma/auth/logout',
          dataType: "json",
          success: function (x) {
            window.location.replace('https://customerportal.revcent.com/bioluma');
          }
        });
      });
      $(function () {
        $('[data-toggle="popover"]').popover()
      })
      $(function () {
        $('[data-toggle="tooltip"]').tooltip()
      })
      $('body.canvas-menu .sidebar-collapse').slimScroll({
        height: '100%',
        railOpacity: 0.9
      });
      $('.navbar-header').removeClass('hidden');
    });
  </script> <script src="https://www.google.com/recaptcha/api.js?onload=recaptchaLibLoaded&render=explicit" async defer></script>
 <script>
     var registerRequestRecaptchaWidget;


     var recaptchaLibLoaded = function () {
         let recaptcha_site_key = '6Lcttm0aAAAAAKH7tXYf4A1u6E2fd8aMz4FOU5GK';
         if ($('#recaptcha_register_request').length > 0) {
             registerRequestRecaptchaWidget = grecaptcha.render('recaptcha_register_request', {
                 'sitekey': recaptcha_site_key
             });
         }
     };


     $(document).ready(function () {
         jQuery.validator.addMethod("noSpace", function (value, element) {
             return value.indexOf(" ") < 0 && value != "";
         }, "Spaces are not allowed");

         function IsEmail(email) {
             var regex = /^([a-zA-Z0-9_.-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
             return regex.test(email);
         }


         jQuery.validator.addMethod("myemail", function (value, element) {
             return this.optional(element) || IsEmail($('#email').val());
         }, "Please enter a valid email address, without spaces.");


         $('#registerForm').validate({
             rules: {
                 email: {
                     required: true,
                     noSpace: true
                 },
                 first_name: {
                     required: true
                 },
                 last_name: {
                     required: true
                 },
                 password: {
                     required: true,
                     minlength: 6,
                     noSpace: true
                 },
                 passwordConfirm: {
                     required: true,
                     equalTo: '#password',
                     noSpace: true

                 }
             },
             errorPlacement: function (error, element) {
                 error.insertAfter(element);
             },
             messages: {
                 passwordConfirm: "Passwords do not match!",
                 email: {
                     required: "Enter your email."
                 }
             },
             highlight: function (element) {
                 $(element).closest('.form-group').removeClass('has-success').addClass('has-error has-feedback');
                 $(element).closest('label').removeClass('hidden');
             },
             success: function (element) {
                 $(element).closest('.form-group').removeClass('has-error has-feedback').addClass('has-success has-feedback');
                 $(element).closest('label').addClass('hidden');
             },
             submitHandler: function (form) {
                 var c = {
                     password: $('#password').val(),
                     email: $('#email').val(),
                     first_name: $('#first_name').val(),
                     last_name: $('#last_name').val()
                 }
                 getRegisterRecaptcha(c);
             }
         });


         function getRegisterRecaptcha(c) {
             if (typeof registerRequestRecaptchaWidget !== 'undefined' && grecaptcha.getResponse(registerRequestRecaptchaWidget) !== '') {
                 c.recaptcha_token = grecaptcha.getResponse(registerRequestRecaptchaWidget);
                 runSignUp(c);
             } else {
                 swal('Error', 'Please verify you are not a robot.', 'warning');
             }
         }

         function runSignUp(c) {
             let btn_id = '#submit';
             $(btn_id).addClass('disabled please-wait-btn').prop('disabled', true);
             $(btn_id).val('Creating Account. Please Wait...');
             $.ajax({
                 type: 'POST',
                 url: 'https://customerportal.revcent.com/bioluma/auth/register',
                 dataType: "json",
                 data: {
                     first_name: c.first_name,
                     last_name: c.last_name,
                     email: c.email,
                     password: c.password,
                     recaptcha_token: c.recaptcha_token
                 },
                 success: function (x) {
                     if (x.code == 1) {
                         $(btn_id).val('Account Created!');
                         swal({
                             title: 'Account Created!',
                             text: 'Please login and enter the confirmation code we emailed to you. Check your spam folder as well.',
                             type: 'success'
                         }, function () {
                             window.location = 'https://customerportal.revcent.com/bioluma/login';
                         });
                     } else if (x.code == 0) {
                         $(btn_id).removeClass('disabled please-wait-btn').prop('disabled', false);
                         $(btn_id).val('Submit');
                         swal("Error", x.message, "warning");
                     }
                 }
             });
         }
     });
 </script>


</body>

</html>