<!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>Affiliate Registration - Xoth  Affiliate</title>
  <meta name="description" content="Xoth  Affiliate affiliate 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="logo-name">Xoth  Affiliate</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://affiliateportal.revcent.com/affiliatexoth/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 () {
      $('.log-out-btn').click(function () {
        $.ajax({
          type: 'POST',
          url: 'https://affiliateportal.revcent.com/affiliatexoth/auth/logout',
          dataType: "json",
          success: function (x) {
            window.location.replace('https://affiliateportal.revcent.com/affiliatexoth');
          }
        });
      });
      $(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 = '6Lf62C4cAAAAAKvfzKhvfiuuKprvBJrwzBqb7ipM';
         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://affiliateportal.revcent.com/affiliatexoth/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://affiliateportal.revcent.com/affiliatexoth/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>