<!DOCTYPE html>
<html lang="en">
<head>
  <title data-provider="cam4pays">
    ChikTok.Live
</title>


<meta name="viewport" content="width=device-width, initial-scale=1"/>
<!--If there is no robots <META> tag, the default is "INDEX,FOLLOW" so no need to add it here and this way it doesnt clash when we add a different one-->
<!--<meta name="robots" content="index,follow">-->

<!--no need to index subpages-->

<meta name="google-site-verification" content="" />

  <meta name="keywords" content="" />

  <meta name="description" content="" />


<meta property="og:locale" content="en_EN" />
<meta property="og:title" content="ChikTok.Live" />
<meta property="og:site_name" content="ChikTok.Live" />
<meta property="og:description" content="" />
<meta property="og:url" content="https://cams.chiktok.live/ " />
<meta property="og:type" content="website" />
<meta property="og:image" content="https://cams.chiktok.live/white_labels/63d63f62c17c86166b56ec1e/images/logo-w350.png?1695884931" />
<meta property="og:logo" content="https://cams.chiktok.live/white_labels/63d63f62c17c86166b56ec1e/images/logo-w200.png?1695884931" />


<meta name="twitter:card" content="summary_large_image" />
<meta property="twitter:site" content="ChikTok.Live" />
<meta name="twitter:label1" content="Est. reading time" />
<meta name="twitter:data1" content="5 minutes" />
<meta property="twitter:description" content="" />
<meta name="twitter:image" content="https://cams.chiktok.live/white_labels/63d63f62c17c86166b56ec1e/images/logo-w350.png?1695884931">


<link rel="canonical" href="https://cams.chiktok.live/"/>

<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="u8EjvlQXj2vAgvRPIZPxnxHVYyCUrth1mj0xv2No356hgrAk3Bk+8bWgq9EM2nafesK2S0NZJkrOPQSvq0sYYQ==" />

  <link rel="shortcut icon" type="image/x-icon" href="/white_labels/63d63f62c17c86166b56ec1e/images/favico.png?1695885173" />

  <link rel="stylesheet" media="all" href="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/tonic/application-536349771188338ad4618d0770d6556c673ec597021123df9e2f9bb2d773095b.css" />
  <!-- custom css -->
<style>
  false
</style>
    <!-- Google Analytics for Pink Label Team -->
  <!--<script async src="https://www.googletagmanager.com/gtag/js?id=UA-28427527-64"></script>-->
  <script async src="https://www.googletagmanager.com/gtag/js?id=G-SHK59ZHG8W" data-category="analytics" data-service="Google Analytics" type="text/plain"></script>
  <script data-category="analytics" data-service="Google Analytics" type="text/plain">
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());

    var map = {
      'dimension1': 'affiliate_id'
    }


    gtag('config', 'G-SHK59ZHG8W', {
      'custom_map': map
    });
    //gtag('config', 'UA-28427527-64', {
    //  'custom_map': map
    //});

    //send the events
      gtag('event', 'affiliate_id_dimension', { 'affiliate_id': '3537' });

  </script>

    <!-- Google Analytics for the Affiliate -->
  <script async src="https://www.googletagmanager.com/gtag/js?id=G-RW9WPD3Y4R" data-category="analytics" data-service="Google Analytics Affiliate"></script>
  <script data-category="analytics" data-service="Google Analytics Affiliate">
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());

    gtag('config', 'G-RW9WPD3Y4R');
  </script>

</head>
<body>
<div id="page-wrapper">

  <!-- Page Content -->
  <div id="page-content-wrapper">

    <div class="modal fade" id="age-verification-modal" data-backdrop="static" tabindex="-1" role="dialog" aria-labelledby="age-verification-modal-title">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div id="contact" class="modal-content bg-black shadow text-light" style="max-width: 440px;margin: 0px auto;">
    <span type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="bi bi-x"></i></span>
      <div class="modal-body cam4-modal registration-modal-form">
      <h5 class="text-center">Age Verification</h5>
    <p>You must be 18 (or the age of majority in your location) or older to access this site.By continuing to the site, you make the following sworn representation: &quot;UNDER PENALTY OF PERJURY I swear/affirm that I am an adult, at least 18 years of age (or the age of majority where I am located)&quot;</p>
    <button type="button" class="btn btn-sun w-100 submit" data-action="continue" data-dismiss="modal">Continue</button>
    <a href="https://www.google.com" class="btn btn-default w-100">Exit</a>
      </div>
    </div>
  </div>
</div>
    

    

        <div class="modal show-captcha fade" id="register-modal" tabindex="-1" role="dialog">
  <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
    <div id="register" class="modal-content bg-black shadow text-light" style="max-width: 440px;margin: 0px auto;">
    <span type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="bi bi-x"></i></span>
      <div class="modal-body d-flex cam4-modal show-captcha p-0">
        <div class="registration-modal-form">
   <h3 class="fs-20">
   Create a FREE account to start chatting</h3>
   <div class="modal-navigation mb-4">
      <a href="javascript:showLoginModal();">Login</a>
      <a class="active" href="javascript:showRegisterModal();">Free registration</a>
   </div>
   <!--<div class="alert alert-success" role="alert" style="text-align:center;">
      <h3 class="alert-heading" style="margin-bottom:0;">50 Bonus Tokens ($9.95)</h3>
      With your FIRST token purchase
      </div>-->
   <div id="errors"></div>
   <form id="register-form" class="m-0" action="/en/register" accept-charset="UTF-8" data-remote="true" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="authenticity_token" value="ZfACflp4P3tlOqrjDRt43sx8RBWnC3cv97Q73vVl4xbmi8fbfc9aO6IqN45tIy6UUECAoktdNfg+325ebTcfog==" />
   <div class="clearfix">
      <!-- username -->
      <div class="form-group" style="position:relative">
         <label for="Username">Username</label>
         <input class="form-control js-field-validate" data-field-type="username" type="text" name="member[username]" id="member_username" />
         <i id="username-icon" class="bi" style="font-size:20px; position:absolute;top:28px;right: 5px;pointer-events: none;"></i>
         <div id="username-alert" class="alert alert-danger mt-3" style="display: none;"></div>
         <div id="usernames-suggested" class="my-3" style="display: none;"></div>
         <span class="help-block">Letters, digits, underscore and between 4 and 12 characters, the numbers between 10 and 17 are not allowed.</span>
      </div>
      <!-- email -->
      <div class="form-group">
         <label for="Email_address">Email address</label>
         <input class="form-control" type="email" name="member[email]" id="member_email" />
         <span id="email_suggestion" class="help-block"></span>
      </div>
      <div class="form-group required">
         <label for="Password">Password</label>
         <input class="form-control" type="password" name="member[password]" id="member_password" />
         <i onclick="showPassword('member_password')" class="show-password bi bi-eye-fill"></i>
         <span class="help-block">The password should have a minimum of 6 characters, must contain at least one uppercased letter, one lowercased letter and one digit.</span>
      </div>
      <script src="https://www.recaptcha.net/recaptcha/api.js?render=6LfJV_QrAAAAAI3GxuP55ob9KFrCJfKbC8YyKqEc"   ></script>
        <script>
          // Define function so that we can call it again later if we need to reset it
          // This executes reCAPTCHA and then calls our callback.
          function executeRecaptchaForWlCreate() {
            grecaptcha.ready(function() {
              grecaptcha.execute('6LfJV_QrAAAAAI3GxuP55ob9KFrCJfKbC8YyKqEc', {action: 'wl_create'}).then(function(token) {
                setInputWithRecaptchaResponseTokenForWlCreate('g-recaptcha-response-data-wl-create', token)
              });
            });
          };
          // Invoke immediately
          executeRecaptchaForWlCreate()

          // Async variant so you can await this function from another async function (no need for
          // an explicit callback function then!)
          // Returns a Promise that resolves with the response token.
          async function executeRecaptchaForWlCreateAsync() {
            return new Promise((resolve, reject) => {
              grecaptcha.ready(async function() {
                resolve(await grecaptcha.execute('6LfJV_QrAAAAAI3GxuP55ob9KFrCJfKbC8YyKqEc', {action: 'wl_create'}))
              });
            })
          };

                    var setInputWithRecaptchaResponseTokenForWlCreate = function(id, token) {
            var element = document.getElementById(id);
            element.value = token;
          }

        </script>
<input type="hidden" name="g-recaptcha-response-data[wl_create]" id="g-recaptcha-response-data-wl-create" data-sitekey="6LfJV_QrAAAAAI3GxuP55ob9KFrCJfKbC8YyKqEc" class="g-recaptcha g-recaptcha-response "/>

   </div>

   <button name="button" type="submit" class="btn btn-sun mb-2 mt-3 submit w-100" data-disable-with="&lt;i class=&#39;bi bi-arrow-repeat mr-1 spin&#39;&gt;&lt;/i&gt; Submitting...">
   <i class="bi bi-send mr-1"></i>
   Submit
</button></form>   <small>By clicking on the Register button I agree with the <a href="/en/terms">Terms and Conditions</a></small>
</div>

      </div>
    </div>
  </div>
</div>
      <div class="modal show-captcha fade" id="login-modal" tabindex="-1" role="dialog">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div id="login" class="modal-content bg-black shadow text-light" style="max-width: 440px;margin: 0px auto;">
    <span type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="bi bi-x"></i></span>
      <div class="modal-body cam4-modal show-captcha p-0">
        <div id="login-form" class="p-3 shadow-sm hide-me">
   <h3 class="mb-3">Login</h3>
   <div class="modal-navigation border-bottom mb-4">
      <a class="active" href="javascript:showLoginModal();">Login</a>
      <a href="javascript:showRegisterModal();">Free registration</a>
   </div>
   <div id="login-verified" class="alert alert-success alert-dismissible no-margin" role="alert" style="display:none;">
      <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
      <h4 class="alert-heading">Success!</h4>
      Your account has been activated, you should now be able to login.
   </div>
   <div id="login-success" class="alert alert-success no-margin" role="alert" style="display:none;">
      <h4 class="alert-heading">Success!</h4>
      You have logged in successfully, the page will now reload.
   </div>
   <form id="authentication-form" action="/en/authenticate" accept-charset="UTF-8" data-remote="true" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="authenticity_token" value="bvEuU7MkOysqWpTBjoTv1ovptjCvdBGbvpIvUfECJoQBlVVDx3Y2CATKjwTgDk6P8G/03hBW5QFA90FjtTEZXQ==" />
   <div class="panel-body">
      <div id="login-errors" style="display: none;">
         <div class="alert alert-danger alert-dismissible" role="alert">
            <h4 class="alert-heading">Error!</h4>
            <span id="login-error-details">Invalid credentials</span>
         </div>
      </div>
      <!-- #errors -->
      <fieldset>
         <div class="form-group required">
         <label for="Username">Username</label>
            <input type="text" name="username" id="username" class="form-control" />
         </div>
         <div class="form-group required">
            <label for="Password">Password</label>
            <i onclick="showPassword('password')" class="show-password bi bi-eye-fill"></i>
            <input type="password" name="password" id="password" class="form-control" />
         </div>
         <script src="https://www.recaptcha.net/recaptcha/api.js?render=6LfJV_QrAAAAAI3GxuP55ob9KFrCJfKbC8YyKqEc"   ></script>
        <script>
          // Define function so that we can call it again later if we need to reset it
          // This executes reCAPTCHA and then calls our callback.
          function executeRecaptchaForWlAuthenticate() {
            grecaptcha.ready(function() {
              grecaptcha.execute('6LfJV_QrAAAAAI3GxuP55ob9KFrCJfKbC8YyKqEc', {action: 'wl_authenticate'}).then(function(token) {
                setInputWithRecaptchaResponseTokenForWlAuthenticate('g-recaptcha-response-data-wl-authenticate', token)
              });
            });
          };
          // Invoke immediately
          executeRecaptchaForWlAuthenticate()

          // Async variant so you can await this function from another async function (no need for
          // an explicit callback function then!)
          // Returns a Promise that resolves with the response token.
          async function executeRecaptchaForWlAuthenticateAsync() {
            return new Promise((resolve, reject) => {
              grecaptcha.ready(async function() {
                resolve(await grecaptcha.execute('6LfJV_QrAAAAAI3GxuP55ob9KFrCJfKbC8YyKqEc', {action: 'wl_authenticate'}))
              });
            })
          };

                    var setInputWithRecaptchaResponseTokenForWlAuthenticate = function(id, token) {
            var element = document.getElementById(id);
            element.value = token;
          }

        </script>
<input type="hidden" name="g-recaptcha-response-data[wl_authenticate]" id="g-recaptcha-response-data-wl-authenticate" data-sitekey="6LfJV_QrAAAAAI3GxuP55ob9KFrCJfKbC8YyKqEc" class="g-recaptcha g-recaptcha-response "/>

      </fieldset>
   </div>
   <button name="button" type="submit" class="btn btn-sun submit w-100" data-disable-with="&lt;i class=&#39;bi bi-arrow-repeat mr-1 spin&#39;&gt;&lt;/i&gt; Submitting...">
   <i class="bi bi-send mr-1"></i>
   Login
</button>   <small class="text-center"><a href="/en/forgot-pwd" class="js-reset-password-btn">Forgot Password?</a></small>
</form></div>

      </div>
    </div>
  </div>
</div>

<div class="modal fade" id="question-modal" tabindex="-1" role="dialog">
  <div class="modal-dialog modal-dialog-centered" role="document" style="max-width: 300px;">
    <div id="question" class="modal-content bg-black shadow text-light">

      <div class="modal-body p-0">

        <form action="/en/authenticate" accept-charset="UTF-8" data-remote="true" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="authenticity_token" value="yiu81BQV4+bvwh0ySKXiNDn7r3+YruFJZjNzhEsvn22lT8fEYEfuxcFSBvcmL0NtQn3tkSeMFdOYVh22DxygtA==" />

          <div class="card">
            <div class="card-header">
              <h4 class="fs-20">Security Question</h4>
            </div>

            <div class="card-body">

              <p id="question-text"></p>
              <label for="answer">Answer</label>
              <input type="text" name="answer" id="answer" placeholder="" class="form-control" />
              <input type="hidden" name="qid" id="qid" />
              <input type="hidden" name="tk" id="tk" />
              <input type="hidden" name="usr" id="usr" />
              <input type="hidden" name="pwd" id="pwd" />

              <br>

              <div class="pull-right">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button name="button" type="submit" class="btn btn-sun -0 pull-right" data-disable-with="&lt;i class=&#39;bi bi-arrow-repeat mr-1 spin&#39;&gt;&lt;/i&gt; Submitting...">
                    <i class="bi bi-send mr-1"></i>
                    OK
</button>              </div>

            </div>
          </div>

</form>
      </div>

    </div> <!-- #question -->
  </div>
</div> <!-- #question-modal -->
   <div class="modal fade" id="lang-modal" tabindex="-1" role="dialog">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div id="login" class="modal-content bg-black shadow text-light" style="max-width: 440px;margin: 0px auto;">
    <span type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="bi bi-x"></i></span>
      <div class="modal-body cam4-modal p-0 mb-3">
            <a href="/en" class="dropdown-item">
              <img class="flag flag-en" alt="English" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" /> English (EN)
            </a>
            <a href="/nl" class="dropdown-item">
              <img class="flag flag-nl" alt="Nederlands" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" /> Nederlands (NL)
            </a>
            <a href="/fr" class="dropdown-item">
              <img class="flag flag-fr" alt="Français" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" /> Français (FR)
            </a>
            <a href="/it" class="dropdown-item">
              <img class="flag flag-it" alt="Italiano" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" /> Italiano (IT)
            </a>
            <a href="/es" class="dropdown-item">
              <img class="flag flag-es" alt="Español" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" /> Español (ES)
            </a>
            <a href="/pt" class="dropdown-item">
              <img class="flag flag-pt" alt="Português" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" /> Português (PT)
            </a>
            <a href="/se" class="dropdown-item">
              <img class="flag flag-se" alt="Svenska" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" /> Svenska (SE)
            </a>
            <a href="/de" class="dropdown-item">
              <img class="flag flag-de" alt="Deutsch" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" /> Deutsch (DE)
            </a>
            <a href="/dk" class="dropdown-item">
              <img class="flag flag-dk" alt="Dansk" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" /> Dansk (DK)
            </a>
            <a href="/no" class="dropdown-item">
              <img class="flag flag-no" alt="Norsk" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" /> Norsk (NO)
            </a>
            <a href="/ru" class="dropdown-item">
              <img class="flag flag-ru" alt="Русский" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" /> Русский (RU)
            </a>
            <a href="/ro" class="dropdown-item">
              <img class="flag flag-ro" alt="Română" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" /> Română (RO)
            </a>
            <a href="/pl" class="dropdown-item">
              <img class="flag flag-pl" alt="Polski" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" /> Polski (PL)
            </a>
            <a href="/ua" class="dropdown-item">
              <img class="flag flag-ua" alt="Українська" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" /> Українська (UA)
            </a>
      </div>
    </div>
  </div>
</div>
   <i id="sidebar-modal-open" class="sidebar-modal-btn bi bi-three-dots"></i>
<nav id="main-navbar" class="navbar navbar-expand header border-bottom ">
  <a id="navbar-logo" class="navbar-brand" href="/en">
        <img src="/white_labels/63d63f62c17c86166b56ec1e/images/logo-w200.png?1695884931" alt="logo" width="100" height="100" >
  </a>
  <div class="ml-auto" id="navbarSupportedContent">
    <ul class="navbar-nav" id="main-menu">
      <li class="nav-item d-none d-md-flex">
      <a class="btn btn-moon" href="/en">
        <i class="d-block bi bi-camera-video-fill"></i>Cams
</a>      </li>
      <li class="nav-item" id="profile-details-link"></li>
        <li class="nav-item">
          <button onclick="showRegisterModal();" class="btn btn-moon"><i class="d-block bi bi-person-fill-add"></i><span class="d-none d-md-block">Free registration</span></button>
        </li>
        <li class="nav-item">
          <a href="javascript:showLoginModal();" class="account-link btn-moon"> <i class="d-block bi bi-box-arrow-left"></i><span class="d-none d-md-block">Login</span></a>
        </li>
    </ul>
  </div>
</nav>
<div id="sidebar-modal">
  <div class="modal-content bg-black p-2">
    <i id="sidebar-modal-close" class="sidebar-modal-btn bi bi-x shadow"></i>
    <a class="d-block" href="/en">Home</a>
    <a href="#" onclick="showLangModal();" class="d-block" data-toggle="collapse" > <img class="flag flag-en" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" />
      <span>en</span>
    </a>
    <a class="d-block" href="/en/cams">Cams</a>
    <a class="d-block" href="/en/contact">Contact Support</a>
    <a class="d-block" href="/en/report-content">Report Content</a>
    <a class="d-block" href="/en/billing">Billing Support</a>
    <a class="d-block" href="/en/privacy">Privacy Policy</a>
    <a class="d-block" href="/en/cookies">Cookies Policy</a>
    <a class="d-block" href="/en/terms">Terms of Use</a>
    <a class="d-block" href="/en/usc2257">18 U.S.C. 2257</a>
    <a class="d-block" href="/en/impressum">Impressum</a>
    <a class="d-block" href="/en/dsa">DSA</a>
    <div class="mt-4">
          <img width="60" height="20" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/icra-8a7256f6b53a380bee135a23dcb30dd0aa048c20c8e94ca3f6c86b106be7d816.png" />
          <img width="64" height="20" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/rta_b-fb9edc442aa5152643c98147d7d7afcfd42f2a12ea402078e6af8bd43dafaa50.png" />
          <img width="64" height="20" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/labeled-8b5e87da27508fb982cb6dec82da7e664ad18614262ff32e2b7603a7cbc11a75.gif" />
    </div>
  </div>
</div>



    <div class="container-fluid px-0 main-content-wrapper">
          <link rel="stylesheet" media="all" href="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/common/fancybox/application-6ae8dbb9cc05c4293047f453d30e0966a31321284b337a7a3ac61a85f9ecbace.css" />
<div id="mobile-register-cta" style="display:none;" class="my-2 px-3">
   <a href="javascript:showRegisterModal();" class="btn btn-sun -0 btn-block h-100" style="">Free registration</a><br/>
</div>

<div id="chatroom-container" class="open-topmenu">
  <div id="chatroom" class="chatroom-roll">
  <a class="profile-link icon-link btn btn-sun" href="/en/cams"><i class="bi bi-grid-3x3-gap-fill"></i></a>
    <div id="pink-label-loading-animation" class="lds-ring" style="z-index:-1" id="loading-spinner"><div></div><div></div><div></div><div></div></div>

    <div id="gift-showcase">
      <img id="gift-pic" src=""/>
      <div id="rays"></div>
    </div>

    <div id="ticket-sale" class="btn btn-round btn-transparent" onclick="buyGroupShowTicket();">
      <strong id="ticket-sale-title">Group Show Ticket</strong>
      <a id="ticket-price" class="btn btn-primary btn-round btn-sm" href="javascript:void(0);"></a>
      <!--<span id="ticket-goal"></span>-->
      <i class="bi bi-clock"></i>
      <span id="ticket-timer">14:45</span>
    </div>

    <div id="mobile-chat-header-performer">
      <div id="mobile-chat-header-performer-profile-pic" class="thumb-profile-pic  '+(cam4.sfw ? 'blur' : '')+'" style=""></div>
      <span id="mobile-chat-header-performer-username"></span>
    </div>
    <div id="mobile-chat-header-member">
        <a href="javascript:showRegisterModal();">Register</a>
        &nbsp;&middot;&nbsp;
        <a href="javascript:showLoginModal();">
          Login
          <img id="mobile-chat-header-tokens" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/chest-0ed7aa60c526232f102f81b8d9076b10e35a86536a0633d4e9b624b9c57810c9.png" />
        </a>
    </div>
    <div id="mobile-chat-header-rank" style="display:none;">
      <img id="mobile-chat-header-trophy" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/trophy-b6e3b09d48975e60085f634efabdc62a8d956deda642f6c78c36e640317533e2.png" />
      <span id="mobile-chat-header-rank-text"></span>
    </div>

    <div id="mobile-chat-header-burger" onclick="toggleMobileMenu()">
      <i class="bi bi-list"></i>
    </div>

    <a id="chat-cta-buy-tokens" href="javascript:showTokensModal();" class="btn btn-transparent" style="display:none;">Purchase Tokens</a>

    <div class="overlay-chat">
      <div id="chat-body" class="chat-body"></div> <!-- chat-body -->
      <div class="chatbox-input-wrapper">
        <a href="javascript:toggleChatbox();" class="btn-toggle-chatbox js-toggle-chatbox btn-transparent" data-toggle="tooltip" data-placement="top" title="Toggle Chatbox"><i class="js-arrow bi bi-chevron-right"></i><i class="js-arrow bi bi-chevron-left" style="display: none;"></i></a>
        <input id="chat-message" type="text" class="chatbox-input" name="name" placeholder="Say something..."/>
        <span id="popover-addons" class="btn-emoticons emojione emojione-1f60d" data-placement="left" data-toggle="popover" data-container="body" data-html="true"></span>
      </div>
      <!-- progress -->
      <div id="goal-message" class="chatbox"><strong>GOAL:</strong> loading...</div>
      <a href="javascript:customTip();" class="progress" id="goal-link">
        <div id="tip-progressbar" class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="0" style="width: 0%">
          <span class="text"><span id="tip-progress-current">0</span> / <span id="tip-progress-goal">0</span></span>
        </div>
      </a> <!-- .progress -->
    </div> <!-- overlay-chat -->

    <div class="overlay-bottom">
          <div class="performer-details">
          <div class="performer-details-avatar"></div>
            <div class="performer-details-meta">
              <span class="performer-details-name"></span>
              <img src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" class=""/>
          </div>
        </div>
      <div class="performer-actions">
        <a id="mute-btn" href="javascript:toggleVideoAudio();" class="btn-transparent" data-toggle="tooltip" data-placement="top" title="Volume"><i class="mute bi bi-volume-off"></i></a>
        <a href="javascript:toggleMobileChatbox();" class="btn-transparent ml-10" id="toggle-mobile-chat" style="display:none;"><i class="bi bi-chat-square-text"></i></a>
        <div id="private-btns" class="ml-10">
          <a id="stop-private" href="javascript:stopPrivate();" class="biz-link btn btn-round btn-transparent" style="display:none;">Stop Private</a>
          <a id="start-private" href="javascript:void($('#private-details-modal').modal());" class="biz-link btn btn-round btn-transparent" style="display:none;">Start Private</a>
          <a id="cancel-private-request" href="javascript:cancelPrivateRequest();" class="biz-link btn btn-round btn-transparent" style="display:none;">Cancel</a>
        </div>
        <div id="tip-group" class="btn-group dropup ml-10">
          <button id="chatroom-tour-tip-performer" type="button" class="btn btn-transparent btn-round btn-block dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
            Tip Me
          </button>
          <ul class="dropdown-menu pull-right" role="menu">
            <li class="dropdown-item biz-link"><a href="javascript:tip(1);">Tip 1 Token</a></li>
            <li class="dropdown-item biz-link"><a href="javascript:tip(5);">Tip 5 Tokens</a></li>
            <li class="dropdown-item biz-link"><a href="javascript:tip(10);">Tip 10 Tokens</a></li>
            <li class="dropdown-item biz-link"><a href="javascript:tip(25);">Tip 25 Tokens</a></li>
            <li class="dropdown-item biz-link"><a href="javascript:tip(50);">Tip 50 Tokens</a></li>
            <li class="dropdown-item biz-link"><a href="javascript:customTip();">Custom Tip</a></li>
          </ul>
        </div>
        <a id="chatroom-report-btn" href="javascript:void(0);" class="btn-transparent ml-10 js-open-report-modal" data-report-target-type="stream" data-report-target-id="" data-report-target-user="" data-report-target-url="http://cams.chiktok.live/sites/63d63f62c17c86166b56ec1e/" data-toggle="tooltip" data-placement="top" title="Report"><i class="bi bi-flag-fill"></i></a>
        <a id="fullscreen-btn" href="javascript:toggleFullscreen();" class="btn-transparent ml-10" data-toggle="tooltip" data-placement="top" title="Fullscreen"><i class="mute bi bi-arrows-fullscreen"></i></a>
      </div> <!-- .performer-actions -->
    </div> <!-- .overlay-bottom -->

    <canvas id="video-background"></canvas>
    <video id="video" class="biz-link video-stream" muted="muted" playsinline autoplay></video>
    <div id="sys-msg"></div>

    <div id="private-timer">00:00</div>

  </div> <!-- #chatroom -->
</div> <!-- #chatroom-container -->

<div id="chat-users" style="display:none;"></div>
<div id="roll-controls">
    <i class="bi bi-chevron-up previous-cam"></i>
    <i class="bi bi-chevron-down next-cam"></i>
</div>


<div class="modal fade" id="custom-tip-modal" tabindex="-1" role="dialog">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div id="custom-tip" class="modal-content bg-black shadow text-light" style="max-width: 300px;margin: 0px auto;">
    <span type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="bi bi-x"></i></span>
      <div class="modal-body pl-3 pr-3 pb-3 pt-0">
      <h4 class="fs-20 text-center">Custom Tip</h4>
      <form id="custom-tip-form">
        <label for="custom-tip-value">Enter Tip (minimum 1)</label>
        <input type="number" id="custom-tip-value" class="form-control" name="custom_tip" value="1" min="1" step="1">
      </form>
      <button type="button" id="custom-tip-submit" class="btn btn-sun submit w-100 mt-3"><i class="bi bi-send mr-1"></i> Send</button>
      </div>
    </div>
  </div>
</div>
<div class="modal fade" id="private-details-modal" tabindex="-1" role="dialog">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div id="private-details" class="modal-content bg-black shadow text-light">
        <span type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="bi bi-x"></i></span>
      <div class="modal-body p-0">

        <div class="">
          <div class="card-header">
            <h4 class="fs-20">Private Show Request</h4>
          </div>

          <div class="card-body">

            <p id="private-unlimited">
              Rate - <span id="private-price"></span> tokens/minute (until you end show or your balance runs out) (%{minutes} minutes minimum charge).
            </p>

            <div style="display:none;" id="private-blocks-content"></div>

          </div>

          <div class="card-footer text-muted">
            <button type="button" id="private-details-submit" class="btn btn-sun -0 pull-right" onclick="startPrivate()"><i class="bi bi-send mr-1"></i> Request Private</button>
            <button type="button" class="btn pull-right btn-moon" data-dismiss="modal">Close</button>
          </div>
        </div>

      </div>
    </div>
  </div>
</div>
<div class="modal fade" id="profile-details-modal" tabindex="-1" role="dialog">
  <div class="modal-dialog modal-xl modal-dialog-centered" role="document">
    <div id="profile-details" class="modal-content bg-black shadow text-light" style="margin: 0px auto;">
    <span type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="bi bi-x"></i></span>
      <div class="modal-body cam4-modal p-0 mb-3">
        <div id="profile-loader-wrapper" class="col-12" style="height:300px;position:relative;">
          <div id="profile-loader" class="lds-ring" style="z-index:auto" id="profile-loader"><div></div><div></div><div></div><div></div></div>
        </div>
        <div id="profile-container"  class="w-100 my-4 col-12" style="display:none;">
        <section id="about" class="text-light">
          <div class="container">
              <div class="section-title">
                <h2 class="text-uppercase username"></h2>
              </div>
              <div class="row mb-sm-5">
                <div class="col-lg-4 img-col mb-5">
                  <div id="profile-pic-container" class="profile-avatar shadow ">
                    <h1 class="text-white text-center username"></h1>
                  </div>
                  <div class="online-chart-container">
                    <span class="chart-interface">Likely To Be Online
                      <div id="days-switcher">
                        <i class="bi bi-chevron-left prev-day"></i>
                        <span id="day-title"></span>
                        <i class="bi bi-chevron-right next-day"></i>
                      </div>
                    </span>
                    <canvas id="online-chart"></canvas>
                  </div>
                </div>
                <div class="col-lg-8 d-flex flex-column align-items-stretch profile-attrs">
                    <div class="content ps-lg-4 d-flex flex-column justify-content-center">
                      <div class="row">
                          <div class="col-6">
                            <ul class="p-0">
                                <li> <strong>Age</strong> <span id="profile-age"></span></li>
                                <li> <strong>Gender</strong> <span id="profile-gender"></span></li>
                                <li> <strong>Sexual Preference</strong> <span id="profile-sex-preference"></span></li>
                                <li> <strong>Country</strong> <span id="profile-country"></span></li>
                                <li> <strong>City</strong> <span id="profile-city"></span></li>
                                <li> <strong>Occupation</strong> <span id="profile-occupation"></span></li>
                                <li> <strong>Marital Status</strong> <span id="profile-marital-status"></span></li>
                                <li> <strong>Smokes</strong> <span id="profile-smokes"></span></li>
                                <li> <strong>Drinks</strong> <span id="profile-drinks"></span></li>
                                <li> <strong>Languages Spoken</strong> <span id="profile-languages"></span></li>
                            </ul>
                          </div>
                          <div class="col-6">
                            <ul class="p-0">
                                <li> <strong>Height</strong> <span id="profile-height"></span></li>
                                <li> <strong>Hair Color</strong> <span id="profile-hair-color"></span></li>
                                <li> <strong>Hair Length</strong> <span id="profile-hair-length"></span></li>
                                <li> <strong>Eye Color</strong> <span id="profile-eye-color"></span></li>
                                <li> <strong>Ethnicity</strong> <span id="profile-ethnicity"></span></li>
                                <li> <strong>Body Type</strong> <span id="profile-body-type"></span></li>
                                <li> <strong>Breast Size</strong> <span id="profile-breast-size"></span></li>
                                <li> <strong>Female Type</strong> <span id="profile-female-type"></span></li>
                                <li> <strong>Body Hair</strong> <span id="profile-body-hair"></span></li>
                                <li> <strong>Facial Hair</strong> <span id="profile-facial-hair"></span></li>
                                <li> <strong>Male Type</strong> <span id="profile-male-type"></span></li>
                                <li> <strong>Penis Size</strong> <span id="profile-penis-size"></span></li>
                                <li> <strong>Tattoos</strong> <span id="profile-tattoos"></span></li>
                                <li> <strong>Piercings</strong> <span id="profile-piercings"></span></li>
                            </ul>
                          </div>
                      </div>
                    </div>
                    <!-- End .content-->
                </div>
              </div>
                          <div  id="profile-bio-section">
                            <div id="profile-bio" class="">
                            </div>
                          </div>
          </div>
        </section>

        <!-- Videos -->

        <section id="profile-videos-section" class="mt-5 text-light" style="display:none;">
          <div class="container">
              <div class="section-title">
                <h2 class="mb-3 text-uppercase username-replace">%{name}&#39;s videos</h2>
              </div>
              <div id="profile-videos" class="camperson-profile-photos "></div>
          </div>
          <div id="market-video-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div id="market-video" class="modal-content bg-black shadow text-light" style="max-width: 500px;">
<span type="button" class="close close-video"><i class="bi bi-x"></i></span>
      <div class="modal-body p-0">
        <div class="p-3 shadow-sm hide-me">

          <div id="market-video-thumb" style="width:100%;height:250px;background:#000 no-repeat center -40px;background-size:cover;"></div>
          <div id="market-video-video-wrapper" style="display:none;overflow:hidden;">
            <span id="market-video-loading">Loading...</span>
            <video id="market-video-video" class="video-js vjs-default-skin" preload="none" controls width="100%" height="250" poster="" style="display:none;margin-top:-20px;"></video>
          </div>

          <h4 id="market-video-title" ></h4>
          <div id="market-video-footer" class="panel-footer clearfix">
            <div class="row">
              <div class="col-sm-6">
                <div class="price">
                  <span id="market-video-price"></span> Tokens
                </div>
              </div>

              <div class="col-sm-6" style="text-align:right;">
                <button name="button" type="submit" id="market-video-btn" class="btn btn-sun -0 pull-right" data-videoid="" data-disable-with="&lt;i class=&#39;bi bi-arrow-repeat mr-1 spin&#39;&gt;&lt;/i&gt; Submitting...">
                  <i class="bi bi-check"></i>
                  Buy this video
</button>              </div>
            </div>
          </div>

        </div>
      </div>

    </div>
  </div>
</div>



        </section>

        <!-- PHOTOS -->

        <section id="profile-photos-section" class="mt-5 text-light" style="display:none;">
          <div class="container">
          <div class="section-title">
              <h2 class="mb-3 text-uppercase username-replace">%{name}&#39;s photos</h2>
          </div>
          <div id="profile-photos" class="camperson-profile-photos "></div>
          <div class="text-center mt-2 mt-sm-5 mb-3">
              <a target="_blank" class="btn btn-sun m-2" href="https://www.instagram.com/"><i class="fab bi-instagram mr-2"></i> Instagram</a>
          </div>
        </section>
        </div>
        <div class="container" id="profile-not-found" style="display:none;">
          <br/><br/><center class="text-uppercase">Profile not found</center><br/><br/>
        </div>

      </div>
    </div>
  </div>
</div>






    </div>

    
    </div>
    </div>

  <div class="modal fade common-report-modal" id="report-content-modal" tabindex="-1" role="dialog" aria-labelledby="report-content-modal-title" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered report-modal-dialog" role="document">
    <div class="modal-content report-content-modal-content">
      <div class="modal-body">
        <form id="report-content-form" action="javascript:void(0);" novalidate>
          <input type="hidden" id="report-target-type" name="target_type" value="stream">
          <input type="hidden" id="report-target-id" name="target_id" value="">
          <input type="hidden" id="report-target-user" name="target_user" value="">
          <input type="hidden" id="report-target-url" name="target_url" value="">

          <h4 class="report-modal-title" id="report-content-modal-title">Report</h4>

          <div id="report-content-success" class="alert alert-success alert-dismissible" role="alert" style="display: none;">
            <h4 class="alert-heading">Success!</h4>
            Your complaint was sent successfully. You should hear from us shortly.
          </div>

          <div id="report-content-error" class="alert alert-danger alert-dismissible" role="alert" style="display: none;">
            <h4 class="alert-heading">Error!</h4>
            An error occured while sending your complaint, please double check your input or try again later.
          </div>

          <div class="form-group report-select-wrap">
            <select id="report-reason" name="reason" class="form-control" required>
              <option value="" selected disabled>Select Issue</option>
            </select>
          </div>

          <div class="form-group report-sub-select-wrap" id="report-sub-reason-wrap" style="display: none;">
            <select id="report-sub-reason" name="other_reason" class="form-control" disabled>
              <option value="" selected disabled>Select type</option>
              <option value="threatPhysical">Physical threat</option>
              <option value="offensiveContent">Offensive content</option>
              <option value="drugUse">Drug use</option>
              <option value="contentDiscrimination">Content discrimination</option>
              <option value="other">Other</option>
            </select>
          </div>

          <div class="form-group report-comments-wrap">
            <textarea id="report-information" name="information" class="form-control" rows="4" maxlength="1000" placeholder="Enter comments..."></textarea>
          </div>
        </form>
      </div>

      <div class="modal-footer report-modal-footer">
        <div class="report-modal-actions">
          <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
          <button type="button" class="btn btn-primary" id="report-content-submit-btn">Send</button>
        </div>
      </div>
    </div>
  </div>
</div>


  <script src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/tonic/application-a01be140c957cbc0e6fff9f8d0f745bec6eb3c1e4f44307ad48ab8b9f2fc0ad8.js"></script>

  <script type="text/javascript">

        /* ===============================
 * Rails-provided globals
 * =============================== */

window.RAILS = {
  isGuest: true,
  balance: 0,

  envVerbose: false,

  site: {
    domain: 'cams.chiktok.live',
    domainFull: 'cams.chiktok.live',
    fullDomain: 'https://cams.chiktok.live/',
    bizModel: 'white_label',
    showBlurAfterSeconds: false,
    blurAfterSeconds: 30,
    tfTriggerSignup: false,
    bizTrackingLink: 'https://offers.cam4tracking.com/aff_c?offer_id=2749&amp;aff_id=3537'
  },

  paths: {
    tokensReturn: '/en/tokens/done',
    membershipReturn: '/en/gold/done',
    verificationReturn: '/en/age-verification/done',
    logout: '/en/logout'
  },

  user: {
    username: '',
    accessHash: ''
  },

  translations: {
    sidebarDilfs: 'DILFs',
    sidebarGrandpas: 'Grandpas',
    sidebarLesbian: 'Lesbian',
    usernameExists: 'Invalid, username already exists',
    usernameNumbers: 'Invalid, contains numbers 10-17',
    usernameInvalid: 'Username is invalid'
  },

  functions: {
    onUserInfo: function () {
    
  if (cam4.sfw) {
    $("#video").addClass('blur blur-big');
    $(".blur.blur-big").each(function(){
      $(this).parent().css('position', 'relative').append(forced_trigger_big);
    });
  }
  //Handle offline room in listing
  cam4.onRoomOffline = function() {
    $('.next-cam').click();
  }
  cam4.onRoomPrivate = function() {
    $('.next-cam').click();
  }

  $(document).ready(function() {
    if(cam4.sfw){
      
      $("#profile-pic-container").addClass('blur blur-small');
      $("#profile-bio").addClass('blur blur-small');
      $("#profile-photos").addClass('blur blur-small');
      $("#profile-videos").addClass('blur blur-small');
    } 
  });

    },
    onBadAccessHash: function () {
      
    },
  },

  camsBlacklist: ["kate0000","cyborgc18","chilliteen","june_hotsexy","ladysexylily","mashapink","clarafrenchx","carolyneburell","sahorix","gtantn01","lartssy","tianabrown00","madame_louise","tommyaussie","camboy193","teenmilkfun","teenloads","teenloadz","teen_loads","geexxgreen","white_boy_tj88","showparejaarg","maixxx73","zeus608","dickthump69","nahuebjrs","nanahings","sexy18hunboy","brunanurse","pornbobby_","jon_b_good","tonyxxx333","simon8t","patatraki","bienvoyonsvoir","selenevixxa","fuegodulcesexy","lagobianco","lexilustsex","curtis7899","ottercummer","doltro","_fun_lover_","cocksox25","elina94","GoddessTransSex","hotlatina33","batman9103","nia_blonde2","babydarkk77","konovii","einfachgeilfuni","kinkysubslutuk","xvitany","arianacoco","giangibus2s","euripide2","pasdepeseudo","hungstraightbwc","lagobianco","scambicaldi","ibanez_1","morenogym222","azzurro197","costantin_elena","pika158","darkybreeze","teresinainsina","aishaox","actexhib","buttslut4you","lareini1","abbedul","selenevixxa","stifler2026","tuttizie","deadpole20","nakedfunhome","greenylp","boygirl32","naked69xx","activojeropa","saradelicia26","nakedmagicx","kingkonglabomba","kimy69000","klariz09","greatgatsby_xxx","aster_deusa_","channel_charnel","yngkrissz","effy_pamela"],
};
        function readBadAccessHashGuardTimestamp(){var e=0;try{e=parseInt(sessionStorage.getItem(BAD_ACCESS_HASH_GUARD_KEY)||"0",10)}catch(t){e=0}return e>0||"undefined"!=typeof Cookies&&(e=parseInt(Cookies.get(BAD_ACCESS_HASH_GUARD_KEY)||"0",10))>0||(e=parseInt(window[BAD_ACCESS_HASH_GUARD_WINDOW_KEY]||"0",10))>0?e:0}function writeBadAccessHashGuardTimestamp(e){try{sessionStorage.setItem(BAD_ACCESS_HASH_GUARD_KEY,String(e))}catch(e){}"undefined"!=typeof Cookies&&Cookies.set(BAD_ACCESS_HASH_GUARD_KEY,String(e),{expires:1/1440,path:"/"}),window[BAD_ACCESS_HASH_GUARD_WINDOW_KEY]=e}function clearBadAccessHashGuardTimestamp(){try{sessionStorage.removeItem(BAD_ACCESS_HASH_GUARD_KEY)}catch(e){}"undefined"!=typeof Cookies&&Cookies.remove(BAD_ACCESS_HASH_GUARD_KEY,{path:"/"}),window[BAD_ACCESS_HASH_GUARD_WINDOW_KEY]=null}function showRegisterModal(){$("#login-modal").modal("hide"),$("#register-modal").modal()}function showLoginModal(e){$(".modal").modal("hide"),e&&$("#login-verified").show(),$("#login-modal").modal()}function showTokensModal(){$("#buy-tokens-modal").modal()}function showLangModal(){$("#lang-modal").modal(),$("#sidebar-modal").removeClass("opened")}function showProfileDetailsModal(){$("#profile-details-modal").modal()}function showGoldModal(){$(".modal").modal("hide"),$("#buy-gold-modal").modal()}function performerGender(e,t){switch(e){case 0:case"male":return t?'<i class="fbi bi-gender-male strong"></i>':"male";case 1:case"female":return t?'<i class="bi bi-gender-female strong"></i>':"female";case 2:case"shemale":return t?'<i class="bi bi-gender-ambiguous strong"></i>':"shemale"}}function setupCamsPager(e,t,a){e>1?$("#pager-prev").attr("href","?page="+(e-1)).show():($("#pager-prev").attr("href","#").hide(),$("#link-prev").remove()),a?$("#pager-next").attr("href","?page="+(e+1)).show():($("#pager-next").attr("href","#").hide(),$("#link-next").remove()),$("#cams-pager").show()}function capitalizeFirstLetter(e){return blank(e)?"---":e.charAt(0).toUpperCase()+e.slice(1)}function currentAge(e){if(blank(e))return"--";var t=new Date,a=new Date(e),s=t.getFullYear()-a.getFullYear(),n=t.getMonth()-a.getMonth();return(n<0||0===n&&t.getDate()<a.getDate())&&s--,s}function delImg(e,t){for(var a=$(e),s=0;s<t;s++)a=a.parent();a.remove()}function hiddenWatermarkImg(e,t,a,s=!1){var n="<div style='"+(s?"":"background-color: #fff;border: 1px solid #ddd;border-radius:4px;padding:4px;")+"'>";return n+="<div style='overflow:hidden;'>",n+="<img id='"+(a||"")+"' src='"+e+"' class='"+t+"' style='width: 100%;margin-bottom:-20px;border:none;padding:0;' onerror='delImg(this, 2);'/>",n+="</div></div>"}function showPassword(e){var t=document.getElementById(e);"password"===t.type?t.type="text":t.type="password"}function updateAgeToMinMaxInQueryString(e){const t=new URLSearchParams(e);if(t.has("age")){const e=t.get("age"),[a,s]=e.split("-").map(Number);t.delete("age"),t.set("minAge",a),t.set("maxAge",s)}return t.toString()}function updateQueryFilters(e){if(e){let t=e.replace(/(\?|&)(orientation=)/,"$1sexPreference=").replace(/(\?|&)(hair=)/,"$1hairColor=").replace(/(\?|&)(body=)/,"$1bodyType=").replace(/(\?|&)(bodyType=)(bbw|petite)/g,(e,t,a,s)=>t+a+("bbw"===s?"large":"slimPetite")).replace(/(\?|&)(bodyType=)morethanAverage/,"$1$2moreThanAverage").replace(/(\?|&)(ethnicity=)ebony/,"$1$2black");return t=updateAgeToMinMaxInQueryString(t),"&"+t}return""}function defineSiteGender(e){let t=!1;if(Array.isArray(e))for(const a of e){if(t=new URLSearchParams(a).get("gender"),t)break}else t=new URLSearchParams(e).get("gender");"male"===t&&($('[data-subcat="30-49"]').html(RAILS.translations.sidebarDilfs),$('[data-subcat="60-100"]').html(RAILS.translations.sidebarGrandpas)),"female"===t&&$('[data-subcat="gay"]').html(RAILS.translations.sidebarLesbian)}function onCaptchaSubmit(){window.currentCaptchingForm&&(currentCaptchingForm.submit(),window.currentCaptchingForm=!1)}function resetTokensValue(){$(".member-balance").each(function(){$(this).find(".balance-value").hide(),$(this).find(".lds-ring").show()})}function requireAllFields(e){const t=e.find("button"),a=e.find(".form-control");let s=!0;a.each(function(){$(this).is("input, textarea, select")&&!$(this).val().trim()&&(s=!1)}),t.toggleClass("disabled",!s)}function trackAndRedirect(e){const t=e.includes("performer")?e.split("performer=")[1]:"";$.get(e+"&aff_sub=traffic_mode&format=json",{},function(e){if(1===e?.response?.status){let a="https://www.cam4.com/"+t+"?act=hasOffers_"+e.response.data.transaction_id;RAILS.site.tfTriggerSignup&&(a+="&showSignupPopup"),document.location=a}},"json")}function setupFieldValidator(e){let t=null,a=0;const s=$("#register-form").find("button[type='submit']"),n=$("#username-alert"),o=$("#username-icon"),r=$("#usernames-suggested");e.on("input",function(){const i=e.val().trim();if(clearTimeout(t),""===i)return s.prop("disabled",!0),o.attr("class","bi bi-x text-danger"),n.hide(),void r.hide().empty();t=setTimeout(()=>{const t=++a;"username"===e.data("field-type")&&cam4.validateUsername(i,function(i){if(t===a)if("ok"===i.code)s.prop("disabled",!1),o.attr("class","bi bi-check text-success"),n.hide(),r.hide().empty();else{let t="";switch(i.code){case"username_exists":t=RAILS.translations.usernameExists;break;case"invalid_numbers":t=RAILS.translations.usernameNumbers;break;case"invalid_username":t=RAILS.translations.usernameInvalid}n.empty().append(`<strong>${t}</strong>`).show(),s.prop("disabled",!0),o.attr("class","bi bi-x text-danger"),Array.isArray(i.suggestedUsernames)&&i.suggestedUsernames.length>0?(r.empty(),i.suggestedUsernames.forEach(e=>{const t=$(`<span class="pill suggested-username-pill">${e}</span>`);r.append(t)}),r.show()):r.hide().empty(),r.off("click",".suggested-username-pill").on("click",".suggested-username-pill",function(){const t=$(this).text();e.val(t).trigger("input")})}})},300)})}function redirectLink(e){trackAndRedirect(RAILS.site.bizTrackingLink.replace(/&amp;/g,"&").replace("{{REPLACE-ME}}",e))}function formatDuration(e){let t=Math.floor(e/1e3),a=Math.floor(t/3600),s=Math.floor(t%3600/60),n=t%60;return a>0?`${a}:${s.toString().padStart(2,"0")}:${n.toString().padStart(2,"0")}`:`${s}:${n.toString().padStart(2,"0")}`}function showRecaptchaBadge(e){const t=document.querySelector(".grecaptcha-badge"),a=document.querySelector("form[data-recaptcha-badge]");t&&(t.style.display=a||e?"block":"none",t.style.visibility=a||e?"visible":"hidden")}function hideRecaptchaBadge(){const e=document.querySelector(".grecaptcha-badge"),t=document.querySelector("form[data-recaptcha-badge]");e&&!t&&(e.style.display="none",e.style.visibility="hidden")}function handleReactionCounter(e){const t=$(e),a=t.hasClass("active"),s=t.data("username"),n=t.data("id"),o=t.find("i"),r=t.find(".counter"),i=parseInt(r.text(),10)+(a?-1:1);o.attr("class",a?"bi bi-heart":"bi bi-heart-fill"),r.text(i),t.toggleClass("active",!a),cam4.reactToActivityFeedPost(s,n,!a)}function initBlurredFeed(e,t){const a=RAILS.site.showBlurAfterSeconds,s=RAILS.site.blurAfterSeconds;a&&e&&!t&&setTimeout(function(){$("body").addClass("blur-feed");const e=$("#chatroom");e.length&&($("body").hasClass("modal-open")||showLoginModal(!1),e.addClass("blur-big").on("click",()=>showLoginModal(!1)))},1e3*s)}const is_guest=RAILS.isGuest,is_mobile=document.documentElement.clientWidth<768;let balance=RAILS.balance;var urlParams=new URLSearchParams(window.location.search),verified=urlParams.get("verified"),showTokens=urlParams.get("showtokens"),showLogin=urlParams.get("showlogin");const hide_membership=urlParams.get("hidemembership"),no_avs=urlParams.get("noavs"),tokens_modal_timeout=urlParams.get("tokensmodaltimeout"),tokens_modal_interval=urlParams.get("tokensmodalinterval");var tokens_modal_limit=urlParams.get("tokensmodallimit");tokens_modal_limit||(tokens_modal_limit=5);const BAD_ACCESS_HASH_GUARD_KEY="pl_bad_access_hash_logout_at",BAD_ACCESS_HASH_GUARD_WINDOW_KEY="__plBadAccessHashLogoutAt";RAILS.isGuest&&clearBadAccessHashGuardTimestamp(),Cam4Api.verbose=RAILS.envVerbose;var cam4=new Cam4Api;cam4.setup({rest_domain:RAILS.site.domain,domain:RAILS.site.domainFull,full_domain:RAILS.site.fullDomain,tokens_return_path:RAILS.paths.tokensReturn,membership_return_path:RAILS.paths.membershipReturn,verification_return_path:RAILS.paths.verificationReturn,username:RAILS.user.username,access_hash:RAILS.user.accessHash,disable_upsells:!!hide_membership,disable_avs:!!no_avs,cams_blacklist:RAILS.camsBlacklist,onGetProducts:displayProducts,onGetCryptoProducts:displayCryptoProducts,onGetMembershipProducts:displayMembershipProducts,onBalance:function(e){$(".member-balance").each(function(){$(this).find(".lds-ring").hide(),$(this).find(".balance-value").html(e).show()})},onUserInfo:function(){RAILS.functions.onUserInfo()},onBadAccessHash:function(){RAILS.functions.onBadAccessHash();var e=Date.now(),t=readBadAccessHashGuardTimestamp();if(t>0&&e-t<15e3)return cam4.username="",void(cam4.access_hash="");document.location.pathname.includes("/embed/")||(writeBadAccessHashGuardTimestamp(e),window.location=RAILS.paths.logout)},onPaymentPopupOpen:function(){$("#buy-gold-modal .lds-ring, #buy-tokens-modal .lds-ring").remove(),$(".modal").modal("hide")}}),"traffic_site"!==RAILS.site.bizModel&&(is_guest||(urlParams.get("hidemembership")||cam4.getMembershipProducts(),cam4.getTokenProducts(),resetTokensValue(),cam4.getBalance())),$(function(){window.t=function(e){if(!e)return"---";var t=e.split("."),a=window.I18n;return $(t).each(function(e,t){a&&(a=a[t])}),!a&&console?(console.debug("No translation found for key: "+e),"N/A"):a}}),document.addEventListener("DOMContentLoaded",showRecaptchaBadge),setTimeout(showRecaptchaBadge,1e3);

        var trigger = $('.hamburger'),
          isClosed = false;

          trigger.click(function () {
            hamburger_cross();

          });

          function hamburger_cross() {

            if (isClosed == true) {
              trigger.removeClass('is-open');
              trigger.addClass('is-closed');
              isClosed = false;
              // $('body').css('overflow-y', 'auto');
            } else {
              // $('body').css('overflow-y', 'hidden');
              trigger.removeClass('is-closed');
              trigger.addClass('is-open');
              isClosed = true;
            }
        }

        $('[data-toggle="offcanvas"]').click(function () {
              $('#page-wrapper').toggleClass('toggled');

        });

         $('#page-content-wrapper .container-fluid').on('click', function(event){
          if ($('#page-wrapper').hasClass('toggled')) {
            var clickedElement = $(event.target);
            if (clickedElement.attr('id') !== 'mobile-chat-header-burger' && clickedElement.attr('class') !== 'fa fa-bars') {
            $('#page-wrapper').toggleClass('toggled');
            hamburger_cross();

            }
          }
        });
    $(document).scroll(function () {
      var $nav = $("#main-navbar");
      $nav.toggleClass('scrolled', $(this).scrollTop() > $nav.height());
    });

    $(document).ready(function() {

      const urlParams = new URLSearchParams(window.location.search);
const isEmbeded = false;
const disablefc = urlParams.get('disablefc') == 1 && isEmbeded;

  //show registration modal every 2.5min for a maximum of three times for guests

  if (is_guest){
    var reg_count = 0;
    var reg_int = setInterval(function(){
      if(reg_count < 3){
        if (!($("#login-modal").is(':visible'))) {
          reg_count++;
          showRegisterModal();
        }
      }
      else
        clearInterval(reg_int);
      }, 150000);
  }

  //age verification overlay
  if( !(Cookies.get("age_check_agree") == 1) ){
    $('#age-verification-modal').modal();

    $('#age-verification-modal button').on('click', function(e){
      if ($(this).attr('data-action') == 'continue') {
        Cookies.set("age_check_agree", 1, { expires: 365, path: '/' });
      }
    });


    $('#age-verification-modal').on('hidden.bs.modal', function () {
      $(".swf-cover").remove();
    });

  }else{
    $(".swf-cover").remove();
  }

//do we need to show the login modal with the success message?
if(parseInt(verified) == 1){
  showLoginModal(true);
}

//do we need to show the buy tokens/register form
if(parseInt(showTokens) == 1){
  if(is_guest)
    showRegisterModal();
  else
    showTokensModal();
}

//do we need to show the login form
if(parseInt(showLogin) == 1 && is_guest){
  showLoginModal(false);
}

//do we need to set a timeout for the tokens modal
if(tokens_modal_timeout){
  var seconds = parseInt(tokens_modal_timeout);

  if(!isNaN(seconds) && !is_guest && balance <= tokens_modal_limit){
    setTimeout(function(){
      showTokensModal();
    }, seconds * 1000);
  }
}

//do we need to set an interval for the tokens modal
if(tokens_modal_interval){
  var seconds_int = parseInt(tokens_modal_interval);

  if(!isNaN(seconds_int) && !is_guest && balance <= tokens_modal_limit){
    setInterval(function(){
      showTokensModal();
    }, seconds_int * 1000);
  }
}

//do we need to remove the membership option?
if(hide_membership){
  $("#buy-gold-btn").remove();
  $("#buy-gold-modal").remove();
}


//Handle username field validator
$(".js-field-validate").each(function () {
  setupFieldValidator($(this));
});

$('.modal.show-captcha').on('shown.bs.modal', function (e) {
  showRecaptchaBadge(true);
});

$('.modal.show-captcha').on('hidden.bs.modal', function (e) {
  hideRecaptchaBadge();
});

// Report modal handlers (used by sexcouk chatroom report button)
if ($('#report-content-modal').length > 0) {
  var getReportReasons = function(targetType) {
    if (targetType === 'post') {
      return [
        { value: 'creatorUnderage', label: '<span class=\"translation_missing\" title=\"translation missing: en.chatroom.report.creator_underage\">Creator Underage<\/span>' },
        { value: 'creatorAdvertising', label: '<span class=\"translation_missing\" title=\"translation missing: en.chatroom.report.creator_advertising\">Creator Advertising<\/span>' },
        { value: 'inappropriateContent', label: 'Inappropriate content' }
      ];
    }

    return [
      { value: 'broadcasterUnderage', label: 'Broadcaster underage' },
      { value: 'broadcasterPlayingVideo', label: 'Broadcaster playing video' },
      { value: 'broadcasterAdvertising', label: 'Broadcaster advertising' },
      { value: 'inappropriateContent', label: 'Inappropriate content' }
    ];
  };

  var applyReportReasonOptions = function(targetType) {
    var $reason = $('#report-reason');
    var reasons = getReportReasons(targetType);
    var optionsHtml = '';

    if (targetType !== 'post') {
      optionsHtml = '<option value="" selected disabled>Select Issue</option>';
    }

    reasons.forEach(function(reason) {
      optionsHtml += '<option value="' + reason.value + '">' + reason.label + '</option>';
    });

    $reason.html(optionsHtml);

    // Post flow must always submit one of the 3 allowed reasons.
    if (targetType === 'post' && reasons.length > 0) {
      $reason.val(reasons[0].value);
    }
  };

  var getReportTitle = function(targetType, username) {
    if (targetType === 'post') {
      return 'Report Post';
    }

    return 'Report ' + username;
  };

  var isPostTarget = function() {
    return $('#report-target-type').val() === 'post';
  };

  var syncReportCommentErrorState = function() {
    if (isPostTarget()) {
      $('#report-information').removeClass('report-field-error');
      return;
    }

    var isOtherSubReason = $('#report-reason').val() === 'inappropriateContent' && $('#report-sub-reason').val() === 'other';
    var hasComment = $('#report-information').val().trim().length > 0;

    $('#report-information').toggleClass('report-field-error', isOtherSubReason && !hasComment);
  };

  var toggleReportSubReason = function() {
    var isPostReport = isPostTarget();
    var isInappropriateContent = $('#report-reason').val() === 'inappropriateContent';
    var $subReasonWrap = $('#report-sub-reason-wrap');
    var $subReason = $('#report-sub-reason');
    var $comment = $('#report-information');
    var isOtherSubReason = isInappropriateContent && $subReason.val() === 'other';

    if (isPostReport) {
      $subReasonWrap.hide();
      $subReason.prop('disabled', true);
      $subReason.prop('required', false);
      $subReason.val('');

      $comment.closest('.report-comments-wrap').hide();
      $comment.prop('required', false);
      $comment.removeClass('report-field-error');
      $comment.val('');

      return;
    }

    $comment.closest('.report-comments-wrap').show();
    $subReasonWrap.toggle(isInappropriateContent);
    $subReason.prop('disabled', !isInappropriateContent);
    $subReason.prop('required', isInappropriateContent);
    $comment.prop('required', isOtherSubReason);

    if (!isInappropriateContent) {
      $subReason.val('');
    }

    syncReportCommentErrorState();
  };

  $(document).off('click.reportModal').on('click.reportModal', '.js-open-report-modal', function(e) {
    e.preventDefault();

    var $button = $(this);
    var targetType = ($button.data('report-target-type') || 'stream').toString();
    var targetId = ($button.data('report-target-id') || '').toString();
    var username = ($button.data('report-target-user') || '').toString();
    var targetUrl = ($button.data('report-target-url') || '').toString();
    applyReportReasonOptions(targetType);

    $('#report-target-type').val(targetType);
    $('#report-target-id').val(targetId);
    $('#report-target-user').val(username);
    $('#report-target-url').val(targetUrl);
    $('#report-content-modal-title').text(getReportTitle(targetType, username));

    $('#report-content-modal').modal('show');
    toggleReportSubReason();
  });

  $('#report-reason').off('change.reportModal').on('change.reportModal', function() {
    toggleReportSubReason();
  });

  $('#report-sub-reason').off('change.reportModal').on('change.reportModal', function() {
    toggleReportSubReason();
  });

  $('#report-information').off('input.reportModal').on('input.reportModal', function() {
    syncReportCommentErrorState();
  });

  $('#report-content-submit-btn').off('click.reportModal').on('click.reportModal', function(e) {
    e.preventDefault();

    var targetType          = $('#report-target-type').val();
    var targetId            = $('#report-target-id').val();
    var broadcasterUsername = $('#report-target-user').val();
    var abuseType           = $('#report-reason').val();
    var abuseSubtype        = $('#report-sub-reason').val();
    var comment             = $('#report-information').val().trim();
    if (targetType === 'post') {
      if (!abuseType) {
        $('#report-content-success').hide();
        $('#report-content-error').show();
        $('#report-reason').trigger('focus');
        return;
      }

      cam4.reportPost(targetId, abuseType, function(status, data) {
        if (status >= 200 && status < 300) {
          $('#report-content-error').hide();
          $('#report-content-success').show();
          setTimeout(function() { $('#report-content-modal').modal('hide'); }, 2000);
        } else {
          $('#report-content-success').hide();
          $('#report-content-error').show();
        }
      });
      return;
    }

    if (abuseSubtype === 'other' && comment.length === 0) {
      $('#report-content-success').hide();
      $('#report-content-error').show();
      syncReportCommentErrorState();
      $('#report-information').trigger('focus');
      return;
    }

    cam4.reportBroadcaster(broadcasterUsername, abuseType, abuseSubtype || 'other', comment, function(status, data) {
      if (status >= 200 && status < 300) {
        $('#report-content-error').hide();
        $('#report-content-success').show();
        setTimeout(function() { $('#report-content-modal').modal('hide'); }, 2000);
      } else {
        $('#report-content-success').hide();
        $('#report-content-error').show();
      }
    });
  });

  $('#report-content-modal').off('hidden.bs.modal.reportModal').on('hidden.bs.modal.reportModal', function() {
    var $form = $('#report-content-form');
    if ($form.length > 0) {
      $form[0].reset();
    }
    $('#report-content-success').hide();
    $('#report-content-error').hide();
    syncReportCommentErrorState();
    applyReportReasonOptions('stream');
    toggleReportSubReason();
    $('#report-content-modal-title').text('Report');
  });

  applyReportReasonOptions('stream');
  toggleReportSubReason();
}

const forms = document.querySelectorAll('form:has([id^="g-recaptcha-response-data-"])');

forms.forEach(form => {
  const buttons = form.querySelectorAll('button[type="submit"], input[type="submit"]');

  buttons.forEach(btn => {
    btn.addEventListener('click', function (e) {
      if (form._recaptchaSubmitting) {
        form._recaptchaSubmitting = false;
        return;
      }

      e.preventDefault();
      e.stopImmediatePropagation();

      const input = form.querySelector('[id^="g-recaptcha-response-data-"]');
      if (!input) {
        form.submit();
        return;
      }

      // clean old token
      input.value = '';

      let action = input.id
        .replace('g-recaptcha-response-data-', '')
        .replace(/[^a-zA-Z0-9_]/g, '_');

      grecaptcha.ready(() => {
        grecaptcha.execute(
          '6LfJV_QrAAAAAI3GxuP55ob9KFrCJfKbC8YyKqEc',
          { action }
        ).then(token => {
          input.value = token;

          // allow one submit
          form._recaptchaSubmitting = true;
          $(form).trigger('submit.rails');
        }).catch(err => {
          console.error('reCAPTCHA failed:', err);
        });
      });
    });
  });

  // Server error handler
  form.addEventListener('ajax:error', () => {
    form._recaptchaSubmitting = false;

    const input = form.querySelector('[id^="g-recaptcha-response-data-"]');
    if (input) input.value = '';
  });
});


      //Hash Generator
      function makeid(length) {
          var result           = '';
          var characters       = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
          var charactersLength = characters.length;
          for ( var i = 0; i < length; i++ ) {
            result += characters.charAt(Math.floor(Math.random() *
            charactersLength));
        }
        return result;
      }
      function loadCamsSlider(values){
        if (values) {
          let display = values.display;
          let category = values.cat;
          let subCategory = values.subcat;
          let qs = '&gender=female&minAge=18&maxAge=19&orderBy=MOST_VIEWERS';

          if (category && subCategory){
            qs = '&' + category + '=' + subCategory;
            if (subCategory == 'couple') {
            qs = '&broadcastType=male_group&broadcastType=female_group&broadcastType=male_female_group';
            } else if (category == 'age') {
              let limits = subCategory.split`-`.map(x=>+x);
              qs = '&minAge='+ limits[0] +'&maxAge='+ limits[1];
            }
          }
          //Get Cams Start
          cam4.getCams(qs, 1, display, function(cams) {
            if (cams && cams.length > 0) {
                let allCamsLinkUrl = (values.cat != false) ? window.location.origin + "/en/cams/" + values.cat + "/" + values.subcat : window.location.origin + '/en/cams';
                let allCamsLink = (values.linktitle != 'none') ? '<a class="cat-title mb-3" href="' + allCamsLinkUrl + window.location.search + '">' + values.linktitle + '<i class="ml-2 fa fa-chevron-right"></i></a>' : '';

                var str = allCamsLink + '<div class="tonic-slider ' + values.height + '-columns">';
                for (var i = 0; i < cams.length; i++) {
                    let imageSrc =  cams[i].thumb; 
                    let sfwClasses =  '' ;
                    let sexPreference = cams[i].sex_preference;
                    let nickname = cams[i].nickname;
                    let flag = '<img src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/blank-50fd99c7ba443da1d3f8455af419e9a623c7a87013c82580129c7461a9804f27.gif" class="flag mr-4 flag-' + cams[i].country + '">';
                    let thumb =  '<img src="' + cams[i].profile_thumb + '">' ;
                    let hashtags = cams[i].status.match(/#[a-z]+/gi);
                    let hastagsLayout = '';
                    if (hashtags) {
                      hastagsLayout = '<div class="hashtags">';
                      for (var l = 0; l < 3; l++) {
                        if (hashtags[l]) {
                          hastagsLayout += '<span class="hashtag">' + hashtags[l] + '</span>';
                        }
                      }
                      hastagsLayout += '</div>';
                    }

                    str += '<div class="dynamic-col mb-2">' +
                        '<div class="thumb-box  pink-preview" data-url="' + cams[i].preview_url + '" data-container="webcam" data-id="' + cams[i].id + '"><div class="wrapper">' +
                        '<a href="/en/cams/profile/' + nickname + '"><div class="thumb-img-limited">' +
                        '<img onerror="this.onerror=null;this.src=' + cams[i].thumb_error + ';" src="' + imageSrc + '" class="thumb-img ' + sfwClasses + '"> ' +
                        '</div></a>' +
                        '<div class="p-1 cam-footer pt-2"><div class="thumb-title text-ellipsis">' +
                        '<div class="small-profile-thumb-wrapper">' + thumb + '</div><span class="d-flex flex-column">' +
                        '<span class="font-weight-bold">' + nickname +'</span>' +
                        '<span>' + sexPreference + '</span>' +
                        '</span></div><div class="p-1 pt-2 pull-right d-flex align-items-center">' +
                        flag +
                        hastagsLayout +
                        '</div></div>' +
                        '</div></div></div>';
                }
                str += '</div>';
                let insertSelector = (category) ? '#' +category + '-' + values.subcat + '-wrapper' : '#all-cams-wrapper';
                $(insertSelector).html(str);
                if (!is_mobile) {
                    $('.pink-preview').pinkPreview();
                }
            } else {
                let insertSelector = (category != false) ? '#' + category + '-' + values.subcat + '-wrapper' : '#all-cams-wrapper';
                $(insertSelector).remove();
            }
          });
        //Get Cams End
        } else {
          let insertSelector = (category != false )? '#' + category + '-' + values.subcat + '-wrapper' : '#all-cams-wrapper';
           $(insertSelector).remove();
        }
      }

      
$(".close-video").on('click', function(){
    $('#market-video-modal').modal('hide');
});
  
  $("#market-video-btn").click(function(){

    //show register modal if the user is not logged in
    if(!is_guest){

      var btn_text = $(this).html();
      $("#market-video-btn").html(btn_text);
      
      $(this).html($(this).data('disable-with'));

      var videoID = $(this).data('videoid');
      var username = $(this).data('name');

      cam4.buyActivityFeedPost(username, videoID, function(status){
        if(status){
          cam4.getActivityFeedPost(username, videoID, function(data){
            if (data) {
              //show the video
              $("#market-video-footer").hide();
              $("#market-video-thumb").hide();
              $("#market-video-video").attr('src', data['medias'][0]['mediaUrl']).show();
              $("#market-video-video-wrapper").show();
              cam4.getBalance();
           }
          });
        }
        else{
          $('#market-video-modal').modal('hide');
          $('#profile-details-modal').modal('hide');
          showTokensModal();
        }
      }, 'json');

    }
    else{
      $('#market-video-modal').modal('hide');
      $('#profile-details-modal').modal('hide');
      showRegisterModal();
    }
  });

  $('#market-video-modal').on('hidden.bs.modal', function () {
      $("#market-video-video").get(0).pause();
  });

  $('body').addClass('tonic-roll-chatroom');
  var cam_page = 1;
  var cam_n = 70;
  var qs = "&gender=female&minAge=18&maxAge=19&orderBy=MOST_VIEWERS";
  var cams = loadCamsListing(qs, 1, 20);
  is_mobile&&($("#chatroom-container").addClass("mobile"),$("#chatroom").addClass("mobile"),$(".header").hide(),$("#chatroom-tour-tip-performer").html('<i class="bi bi-gift"></i>'),$("#start-private").html('<i class="bi bi-eye-fill" style="padding-right:0;"></i>'),$("#stop-private").html('<i class="bi bi-eye-fill-slash" style="padding-right:0;"></i>'),$("#cancel-private-request").html('<i class="bi bi-x" style="padding-right:0;"></i>'),$("#toggle-mobile-chat").show(),$("#video").click(function(){toggleVideoZoom()}));const hide_ui=urlParams.get("hideui");hide_ui&&($(".header").hide(),$(".overlay-chat").hide(),$(".overlay-bottom").hide(),$("#mobile-chat-header-member").hide(),$("#mobile-chat-header-rank").hide(),$("#mobile-chat-header-logo").hide(),$("#mobile-chat-header-performer").hide(),$("#video").css("padding-top","0")),emojione.imagePathSVGSprites="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emojione.sprites-e83e97723e2008afbe33ce216079080b2c7781bb92652129161965cd726b162f.svg",emojione.imageType="png",emojione.sprites=!0,emojione.unicodeAlt=!1,emojione.ascii=!0,$(window).bind("load resize",function(){is_mobile&&$("#chatroom-container").css("height",window.innerHeight),$("body").css("padding",0)});var BLUR_RADIUS=80,canvas=document.getElementById("video-background"),canvasContext=canvas.getContext("2d");drawBlur=function(){var e=canvas.width,o=canvas.height,i=document.getElementById("video");canvasContext.drawImage(i,0,0,e,o),stackBlurCanvasRGBA("video-background",0,0,e,o,BLUR_RADIUS)},$("#chat-message").on("keydown",function(e){13==e.keyCode&&(e.preventDefault(),send())}),$(document).on("click",function(e){$('[data-toggle="popover"]').each(function(){$(this).is(e.target)||0!==$(this).has(e.target).length||0!==$(".popover").has(e.target).length||$(this).popover("hide")})}),$("#video").on("loadeddata",function(){""===$("#video")[0].canPlayType("application/vnd.apple.mpegurl")?drawBlur():canvas.style.backgroundColor="black"}),$("video").bind("contextmenu",function(){return!1}),$("#custom-tip-submit").click(function(e){var o=parseInt($("#custom-tip-value").val());!isNaN(o)&&o>=1&&(tip(o),$("#custom-tip-modal").modal("hide")),e.preventDefault()}),show_blur_bool="false",show_blur="true"===show_blur_bool,bluredFeed=show_blur&&is_guest,blurAfterSeconds=parseInt("30"),bluredFeed&&setTimeout(function(){$("body").addClass("blur-feed"),$("#chatroom").length>0&&($("body").hasClass("modal-open")||showLoginModal(!1),$("#chatroom").addClass("blur-big"),$("#chatroom").on("click",function(){showLoginModal(!1)}))},1e3*blurAfterSeconds);

  forced_trigger_small = '<div class=\"absolute-center absolute-center-small\">\n  <img src=\"//granity-pinklabel-static-assets-production.xcdnpro.com/assets/heart-lock-a3abd20f5656784a30de3d6fbaca0830b93e4cbeece754f1ebe871eedfe3573a.png\" />\n      <a href=\"javascript:showRegisterModal();\" class=\"btn btn-primary\" >Free registration<\/a>\n      <a href=\"javascript:showLoginModal();\" class=\"btn btn-primary\">Login<\/a>\n<\/div>';
  forced_trigger_big = '<div class=\"absolute-center\" style=\"width:70%;height:190px;text-align:center;\">\n  <img src=\"//granity-pinklabel-static-assets-production.xcdnpro.com/assets/heart-lock-a3abd20f5656784a30de3d6fbaca0830b93e4cbeece754f1ebe871eedfe3573a.png\" height=\"90\"/>\n  <p style=\"color:white;font-size:16px;text-shadow:2px 2px 3px rgba(0,0,0,0.85);margin-top:20px;\">\n  To watch this content you need to verify your age. This is required by law.<br>\n  Click the button below to get started.\n  <\/p><br>\n      <a href=\"javascript:showRegisterModal();\" class=\"btn btn-primary\" >Free registration<\/a>\n      <a href=\"javascript:showLoginModal();\" class=\"btn btn-primary\">Login<\/a>\n<\/div>';

  $("#sidebar-modal-open").on('click', function(e){
    $('#sidebar-modal').addClass('opened');
    $('body').addClass('modal-open');
    $("#sidebar-modal").on('click', function(e){
      $('#sidebar-modal').removeClass('opened');
      $('body').removeClass('modal-open');
    });
  });
  $("#sidebar-modal-close").on('click', function(e){
    $('#sidebar-modal').removeClass('opened');
    $('body').removeClass('modal-open');
  });


    });


    function toggleMobileMenu(){
      toggleFilters();
    }

    function displayMembershipProducts(products){

    //generate the methods tabs
    var payments = [];
    for(var i = 0; i < products.length; i++){
      for(var j = 0; j < products[i].categories.length; j++){
        for(var k = 0; k < products[i].categories[j].methods.length; k++){
          var t = products[i].categories[j].methods[k].type;
          if(typeof t == "undefined")
            t = 13;
          if(!payments.includes(t)){
            let cryptoSelector = '';
            if (t == 'CR') {
              cam4.getCryptoProducts(products[i].id);
              cryptoSelector = '<div class="crypto-selector" data-tab="gold-tab-CR"></div>';
            }

            payments.push(t);
            $("#gold-payment-tabs").append('<li role="presentation"><a href="#gold-tab-'+t+'" aria-controls="credit" role="tab" data-toggle="tab" class="tab-'+t+' '+(payments.length == 1 ? 'active' : '')+'"></a></li>');
            $("#gold-payment-tabs-content").append('<div role="tabpanel" class="tab-pane '+(payments.length == 1 ? 'active' : '')+'" id="gold-tab-'+t+'">'+cryptoSelector+'</div>');
          }
          let href = 'javascript:cam4.purchaseMembershipProduct(\''+t+'\',\''+products[i].id+'\',\''+products[i].categories[j].methods[k].processorId+'\',);';
          var details = '<a init-href="'+href+'" href="'+href +'"><div class="payment-box"><h3>'+getPeriod(products[i].details.recurringPeriod)+'<small class="pull-right">';
          details += products[i].currency.symbol+(products[i].amount / Math.round(products[i].details.recurringPeriod / 30)).toFixed(3).replace(/\.(\d\d)\d?$/, '.$1')+' / month</small></h3>(billed at '+products[i].currency.symbol+products[i].amount+')</div></a>';
          $("#gold-tab-"+t).append(details);
        }
      }
    }
  //adds loader animation to the payment-box link
    $('#buy-gold .payment-box').on('click', function(e){
      $(this).find('.lds-ring').remove();
      $(this).append('<div id="pink-label-loading-animation" class="lds-ring" style="z-index:auto" id="loading-spinner"><div></div><div></div><div></div><div></div></div>');
    });
  }

  function getPeriod(p){
    switch(p){
      case 30: return "1 Month";
      case 90: return "3 Months";
      case 365: return "12 Months";
    }
  }

  function getMonthlyCost(p, a){
    Math.round(a / p);
  }


    function displayProducts(products){

      //generate the methods tabs
      var payments = [];
      for(var i = 0; i < products.length; i++){
        for(var j = 0; j < products[i].categories.length; j++){
          for(var k = 0; k < products[i].categories[j].methods.length; k++){
            var t = products[i].categories[j].methods[k].type;
            if(!payments.includes(t)){
              payments.push(t);
              let cryptoSelector = '';
              if (t == 'CR') {
                cam4.getCryptoProducts(products[i].id);
                cryptoSelector = '<div class="crypto-selector" data-tab="tab-CR"></div>';
              }

              $("#payment-tabs").append('<li role="presentation" class="nav-item"><a href="#tab-'+t+'" aria-controls="credit" role="tab" data-toggle="tab" class="tab-'+t+' nav-link '+(payments.length == 1 ? 'active' : '')+'"></a></li>');
              $("#payment-tabs-content").append('<div role="tabpanel" class="tab-pane '+(payments.length == 1 ? 'active' : '')+'" id="tab-'+t+'">'+cryptoSelector+'</div>');
            }
            var href = 'javascript:cam4.purchaseTokensProduct(\''+t+'\',\''+products[i].id+'\',\''+products[i].categories[j].methods[k].processorId+'\',);';
            if(products[i].type == "TOKENS"){
              if(false && products[i].quantity >= 0){
                var details = '<a init-href="'+href+'" href="'+href+'"><div class="payment-box"><h3><span style="text-decoration: line-through;">'+products[i].quantity+'</span> ';
                details += (products[i].quantity + 0)+' Tokens <small class="grey pull-right price-value"  init-currency="'+products[i].currency.symbol+'" ammount="'+products[i].amount+'">';
                details += products[i].currency.symbol+products[i].amount+'</small></h3>';
                details += '<small>0 Bonus Tokens ($9.95)</small>';
                details += '</div></a>';
              }
              else{
                if (t == 'GC') {
                  var gcMessage = "You can now pay for CAM4 Tokens by trading any gift card. Instant access, 100% anonymous, no credit card required.";
                  var details = '<a init-href="'+href+'" href="'+href+'"><div class="payment-box"><h3>'+gcMessage+'</h3></div></a>';
                } else {
                  var details = '<a init-href="'+href+'" href="'+href+'"><div class="payment-box"><h3>'+products[i].quantity+' Tokens <small class="grey pull-right price-value"  init-currency="'+products[i].currency.symbol+'" ammount="'+products[i].amount+'">';
                  details += products[i].currency.symbol+products[i].amount+'</small></h3></div></a>';
                }
              }
              $("#tab-"+t).append(details);
            }
          }
        }
      }

      //adds loader animation to the payment-box link
      $('.payment-box').on('click', function(e){
        $(this).find('.lds-ring').remove();
        $(this).append('<div id="pink-label-loading-animation" class="lds-ring" style="z-index:auto" id="loading-spinner"><div></div><div></div><div></div><div></div></div>');
      });
    }
    function displayCryptoProducts(products) {
  let cryptoSelectors = $(".crypto-selector");
  cryptoSelectors.each(function(){
    let parentTab = $(this).attr("data-tab");
    var html = '';
    if (products){
      html = '<select name="cryptos" class="cryptos" onchange="updateRates(false, false, false,\''+parentTab+'\' );">';
      for(var i = 0; i < products.length; i++){
        let currency = products[i].currency;
        let currencyName = products[i].description;
        let rate = products[i].rate;
        let currency_fiat = products[i].currency_fiat;
        if (i == 0) {
          updateRates(rate, currency, currency_fiat, parentTab )
        }
        html += '<option data-fiat="'+currency_fiat+'" data-rate="'+rate+'" value="'+currency +'">'+currencyName +'</option>';
      }
      html += '</select>';
    }

    $(this).html(html);
  });
}

function updateRates(rate = false, crypto = false, fiat = false, parentTab) {
  //SVG for the convert icon
  let convertIcon = '<svg style="display:inline-block; width: 12px;" class="MuiSvgIcon-root PaymentRow__arrowIcon__3JG7T" focusable="false" viewBox="0 0 24 24" aria-hidden="true" role="presentation"><path d="M11 9l1.42 1.42L8.83 14H18V4h2v12H8.83l3.59 3.58L11 21l-6-6 6-6z"></path></svg>';
  //get values on page load and cryptoselect
  if (!rate)
    rate = $('#' + parentTab).find(".cryptos").find(":selected").attr('data-rate');
  if (!crypto)
    crypto = $('#' + parentTab).find(":selected").val();
  if (!fiat)
    fiat = $('#' + parentTab).find(":selected").attr('data-fiat');
  //Get crypto tab
  var priceTabs = $("#" + parentTab);
  //Convert prices to the selected crypto
  priceTabs.find('.payment-box small.price-value').each(function(){ 
    $(this).html($(this).attr('init-currency') + $(this).attr('ammount') + '<br>' + ($(this).attr('ammount') * (1/rate)).toFixed(8) + ' ' + convertIcon  );
  });
  //Update link to the selected crypto
  priceTabs.find('a').each(function(){ 
    const initHref = $(this).attr('init-href');
    let updatedHref = initHref.replace(");","'" + crypto + "','" + fiat + "');");
    $(this).attr('href', updatedHref);
  });
}
    
/**
 * All config. options available here:
 * https://cookieconsent.orestbida.com/reference/configuration-reference.html
 */

CookieConsent.run({
guiOptions: {
    consentModal: {
        layout: 'bar inline',
        position: 'bottom left'
    }
},
    categories: {
        necessary: {
            enabled: true,  // this category is enabled by default
            readOnly: true  // this category cannot be disabled
        },
        analytics: {
        enabled: true, 
        }
    },

    language: {
        default: 'en',
        translations: {
            en: {
                consentModal: {
                    title: 'We use cookies',
                    description: 'This website uses cookies to enhance user navigation and to collect statistical data. For more information please click on the link to learn more. By continuing to browse on this website, you accept the use of cookies for the above purposes.',
                    acceptAllBtn: 'Accept all',
                    acceptNecessaryBtn: 'Reject all',
                    showPreferencesBtn: 'Manage Individual preferences'
                },
                preferencesModal: {
                    title: 'Manage cookie preferences',
                    acceptAllBtn: 'Accept all',
                    acceptNecessaryBtn: 'Reject all',
                    savePreferencesBtn: 'Accept current selection',
                    closeIconLabel: 'Close modal',
                    sections: [
                        {
                            title: 'Cookie usage',
                            description: 'We use cookies to ensure the basic functionalities of the website and to enhance your online experience. You can choose for each category to opt-in/out whenever you want. For more details relative to cookies and other sensitive data, please read the full privacy policy. <a href="/en/privacy">Here</a>'
                        },
                        {
                            title: 'Strictly Necessary cookies',
                            description: 'These cookies are essential for the proper functioning of the website and cannot be disabled.',

                            //this field will generate a toggle linked to the 'necessary' category
                            linkedCategory: 'necessary'
                        },
                        {
                            title: 'Performance and Analytics',
                            description: 'These cookies collect information about how you use our website. All of the data is anonymized and cannot be used to identify you.',
                            linkedCategory: 'analytics'
                        },
                        {
                            title: 'More information',
                            description: 'For any queries in relation to our policy on cookies and your choices, please <a href="/en/contact">Contact Us</a>'
                        }
                    ]
                }
            }
        }
    }
});

    
  function showVideo(id, username){
    //populate modal and show it
    $("#market-video-title").text($("#video-"+id).data('name'));
    $("#market-video-description").text($("#video-"+id).data('description'));
    $("#market-video-duration").text($("#video-"+id).data('duration'));
    $("#market-video-tags").text($("#video-"+id).data('tags'));
    $("#market-video-price").text($("#video-"+id).data('price'));

    if($("#video-"+id).data('purchased')){
      $("#market-video-footer").hide();
      $("#market-video-thumb").hide();
      $("#market-video-video").attr('poster', $("#video-"+id).data('thumb'));
      $("#market-video-video-wrapper").show();

      let videoUrl = $("#video-"+id).data('video');
      //load the video url
        if(videoUrl){
          $("#market-video-loading").hide();
          $("#market-video-video").attr('src', videoUrl).show().get(0).play();
        }
    }
    else{
      $("#market-video-video").hide();
      $("#market-video-video-wrapper").hide();
      $("#market-video-footer").show();
      $("#market-video-btn").attr('data-videoid', id);
      $("#market-video-btn").attr('data-name', username);
      $("#market-video-thumb").css('background-image', 'url('+$("#video-"+id).data('thumb')+')').show();
    }
    $('#market-video-modal').show();
    $('#market-video-modal').css('opacity', '1');
  }

function drawOnlineChart(element, labels, data, colors) {
    if (Object.keys(Chart.instances).length > 0) {
      Object.values(Chart.instances).forEach(chart => chart.destroy());
    }
    const currentHour = new Date().getHours(); 
    new Chart(element, {
      type: 'bar',
      data: {
        labels: labels,
        datasets: [{
          label: 'Online Chart',
          minBarLength: 5,
          data: data,
          backgroundColor: Array.from(data, (_, i) =>
              i === currentHour ? colors[0] : colors[1] // 1 for the current hour, 0 for others
          ),
          borderWidth: 1
        }]
      },
      options: {
        plugins: {
            legend: {
                display: false // Disable the title
            },
            tooltip: {
                enabled: false // Disable tooltips
            }
        },
        animations: {
          tension: {
            duration: 1000,
            easing: 'linear',
            from: 1,
            to: 0,
            loop: true
          }
        },
        scales: {
          x: {
              grid: {
                  display: false // Hides grid lines on x-axis
              },
              ticks: {
                callback: function(value, index, ticks) {
                    // Show the label only for every third index
                    return index % 3 === 0 ? this.getLabelForValue(value) : '';
                },
                autoSkip: false,
                color: colors[2] || Chart.defaults.color
            }
          },
          y: {
            beginAtZero: true,
            grid: {
                display: false // Hides grid lines on x-axis
            },
            border: {
                display: false // Explicitly hides the border line
            },
            ticks: {
                display: false // Hides the labels on the y-axis
            },
          }
        }
      }
    });
}

function loadOnlineChart(chartElement,chosenDayNum, days, broadcastKeys, colors) {
    const week = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
    const locals = [
        'Sunday',
        'Monday',
        'Tuesday',
        'Wednesday',
        'Thursday',
        'Friday',
        'Saturday'
    ];
    const dataPoints = 24;
    let chosenDay = week[chosenDayNum];
    $('#day-title').text(locals[chosenDayNum]);
    let result = days.filter((d) => d.day == chosenDay.toUpperCase());
    let broadcasts = result[0]? result[0].broadcastsPerHours : Array(dataPoints).fill(0);
    drawOnlineChart(chartElement, broadcastKeys, broadcasts, colors);
}
  function loadMediaBody(media) {
    media_html = '<div class="thumb-body text-ellipsis" style="margin-top:0;">';

    if (media.visible) {
      const reactionIcon = media.reacted ? 'bi-heart-fill' : 'bi-heart';
      const activeClass  = media.reacted ? 'active' : '';

      media_html += `
        <div class="reaction-counter ${activeClass}"
            onclick="handleReactionCounter(this)"
            data-username="${media.username}"
            data-id="${media.id}">
          <i class="bi ${reactionIcon}"></i>
          <span class="counter">${media.reactionsCount}</span>
        </div>
      `;
    } else {
      media_html += '<i class="bi bi-lock"></i>';
    }

    if (media.text) {
      media_html += '<div class="video-title">';
      media_html += '<strong>'+ capitalizeFirstLetter(media.username) +'</strong> '+ capitalizeFirstLetter(media.text) +'<br>';
      media_html += '</div>';
    }

    media_html += '</div>';
  
    return media_html;
  }

 function loadProfileDetails(username) {
  $('#profile-videos, #profile-photos').html('');
  $('#main-navbar').addClass('chatroom-navbar');
  $( ".username" ).each(function() {
    $( this ).html(username);
  });
  $( ".username-replace" ).each(function() {
    let placeholder = $( this ).html();
    $( this ).html(placeholder.replace("%{name}", username));
 });

  cam4.getProfile(username, function(data){
    if(data){
      if (data.profile_pic) {
      $('.performer-details-avatar').css('background-image',"url(" + data.profile_pic+ ")");
      $('.performer-details-avatar').show();
      } else {
      $('.performer-details-avatar').hide();
      }
      $('.performer-details-name').text(username);
      $('.performer-details-meta img').removeClass().addClass('flag flag-' + data.country);
      $('.performer-details').show();
      //populate the chatroom

      if(!blank(data['profile_pic'])){
        $("#mobile-chat-header-performer-profile-pic").css('background-image', 'url("'+data['profile_pic']+'")');
        $("#mobile-chat-header-performer-profile-pic").show();
      }
      else{
        $("#mobile-chat-header-performer-profile-pic").hide();
      }
      
      if(is_mobile && data['rank'] > 0){
        $("#mobile-chat-header-rank-text").html(data['rank']);
        $("#mobile-chat-header-rank").show();
        $("#chatroom.mobile #mobile-chat-header-performer").css('top', '115px');
      } else {
        $("#mobile-chat-header-rank").hide();
        $("#chatroom.mobile #mobile-chat-header-performer").css('top', '50px');
      }

      //populate the page
      $("#profile-pic-container").css('background-image', 'url(' + data['profile_pic'] + ')');
      $("#profile-age").html(data['age']);
      $("#profile-gender").html(capitalizeFirstLetter(t('api.gender.'+data['gender'])));
      $("#profile-sex-preference").html(capitalizeFirstLetter(t('api.sex_preference.'+data['sex_preference'])));

      try{
        var regionNames = new Intl.DisplayNames(['en'], {type: 'region'});
        $("#profile-country").html(capitalizeFirstLetter(regionNames.of(data['country'].toUpperCase())));
      }catch{
        $("#profile-country").html(capitalizeFirstLetter(data['country']));
      }

      $("#profile-city").html(capitalizeFirstLetter(data['city']));
      $("#profile-occupation").html(capitalizeFirstLetter(data['occupation']));
      $("#profile-marital-status").html(capitalizeFirstLetter(t('api.marital_status.'+data['marital_status'])));
      $("#profile-smokes").html(capitalizeFirstLetter(data['smoke']));
      $("#profile-drinks").html(capitalizeFirstLetter(data['drink']));

      try{
        var langNames = new Intl.DisplayNames(['en'], {type: 'language'});
        $("#profile-languages").html(data['languages'].map(l => capitalizeFirstLetter(langNames.of(l))).join('<br>'));
      }catch{
        $("#profile-languages").html(data['languages'].join('<br>'));
      }

      $("#profile-height").html(data['height']);
      $("#profile-hair-color").html(capitalizeFirstLetter(t('api.hair_color.'+data['hair_color'])));
      $("#profile-hair-length").html(capitalizeFirstLetter(t('api.hair_length.'+data['hair_length'])));
      $("#profile-eye-color").html(capitalizeFirstLetter(t('api.eye_color.'+data['eyes'])));
      $("#profile-ethnicity").html(capitalizeFirstLetter(t('api.ethnicity.'+data['ethnicity'])));
      $("#profile-body-type").html(capitalizeFirstLetter(t('api.body_type.'+data['body_type'])));
      $("#profile-breast-size").html(capitalizeFirstLetter(t('api.breast_size.'+data['breast_size'])));
      $("#profile-female-type").html(capitalizeFirstLetter(t('api.female_type.'+data['female_type'])));
      $("#profile-body-hair").html(capitalizeFirstLetter(t('api.body_hair.'+data['body_hair'])));
      $("#profile-facial-hair").html(capitalizeFirstLetter(t('api.facial_hair.'+data['facial_hair'])));
      $("#profile-male-type").html(capitalizeFirstLetter(t('api.male_type.'+data['male_type'])));
      $("#profile-penis-size").html(capitalizeFirstLetter(t('api.penis_size.'+data['penis_size'])));
      $("#profile-tattoos").html(data['tattoos'] ? t('common.yes') : t('common.no'));
      $("#profile-piercings").html(data['piercings'] ? t('common.yes') : t('common.no'));

      var parser = new BBCodeParser({settings : {'FontSizeUnit' : '', ColorAllowAdvFormats: true}, allOrNothing: false});
      var bio = parser.format(data['bio']);
      if(blank(bio))
        $("#profile-bio-section").hide();
      else
        $("#profile-bio").html(bio).find('img').css('max-width', '100%');

      if(data['gender'] == 'male'){
        $(".female-specific").hide();
      }
      else{
        $(".male-specific").hide();
      }

      var html = '';
        if(data['videos'] && data['videos'].length > 0){
            for(var i = 0; i < data['videos'].length; i++){
              if (data['videos'][i]['visibility'] != 'SUBSCRIPTION') {
                let dataVideoThumb = cam4.sfw? data['videos'][i]['medias'][0]['thumbnailBlurredUrl'] : data['videos'][i]['medias'][0]['thumbnailUrl']
                let dataVideoId = data['videos'][i]['medias'][0]['id'];
                html += '<div class="thumb-gutter">';
                  html += '<div class="thumb-box" ';
                    html += 'id="video-'+data['videos'][i]['id']+'" ';
                    html += 'data-video-id="'+dataVideoId+'" ';
                    html += 'data-name="'+capitalizeFirstLetter(data['videos'][i]['text'])+'" ';
                    html += 'data-duration="'+formatDuration(data['videos'][i]['medias'][0]['duration'])+'" ';
                    html += 'data-thumb="'+data['videos'][i]['coverThumbnailUrl']+'" ';
                    html += 'data-price="'+cam4.calculateVATPrice(data['videos'][i]['price'])+'" ';
                    html += 'data-price-fan="'+data['videos'][i]['fanclubPrice']+'" ';
                    html += 'data-purchased="'+data['videos'][i]['visible']+'" ';
                    html += 'data-likes="'+data['videos'][i]['reactionsCount']+'" ';
                    html += 'data-liked="'+data['videos'][i]['reacted']+'" ';
                    html += 'data-video-thumb="'+ dataVideoThumb +'" ';
                    html += 'data-video="'+data['videos'][i]['medias'][0]['mediaUrl']+'">';

                    html += '<div class="wrapper no-margin">';

                        if(cam4.sfw){
                          html += '<a href="javascript:void(0);">';
                        }
                        else{
                          html += '<a href="javascript:showVideo(\''+data['videos'][i]['id']+'\', \''+username+'\');">';
                        }

                        html += '<div class="thumb-img-limited video-thumb ratio-16-9" style="background-image:url('+data['videos'][i]['coverThumbnailUrl']+')">';
                          html += '<i class="bi bi-'+(data['videos'][i]['visible'] ? 'play-circle' : 'lock')+' fa-4x play-icon big-channel"></i>';
                        html += '</div>';

                      html += '</a>';

                      html += loadMediaBody(data['videos'][i]);
html += '<button type="button" class="btn btn-default btn-xs thumb-media-report post-report-floating js-open-report-modal" data-report-target-type="post" data-report-target-id="' + data['videos'][i]['id'] + '" data-report-target-user="' + (data['videos'][i]['username'] || username) + '" data-report-target-url="' + ((data['videos'][i]['medias'] && data['videos'][i]['medias'][0] && data['videos'][i]['medias'][0]['mediaUrl']) || '') + '" title="Report"><i class="bi bi-flag-fill"></i></button>';

                    html += '</div>';
                  html += '</div>';

                html += '</div>';
              }
            }
            html += '<div class="clearfix"></div>';

            $("#profile-videos").html(html);
            $("#profile-videos-section").show();
          
        }

      //galleries
      let photos_html = '';
      let lastLoadedId = false;
      let loading = false;
      let noMorePosts = false;

      function loadMedia(media) {
        let cover = media.medias[0].thumbnailUrl 
                  ? (cam4.sfw ? media.medias[0].thumbnailBlurredUrl : media.medias[0].thumbnailUrl) 
                  : media.coverThumbnailUrl;

        let imageURL = media.medias[0].mediaUrl;
        let galleryTitle = media['text'] ? media['text'] : 'Photo from ' + media['username'];

        media_html = '<div class="thumb-gutter" id="post-'+ media['id'] +'">';
        media_html += '<div class="thumb-box">';

        if (media['visible']) {
          if (cam4.sfw) {
            media_html += '<a href="javascript:void(0);">';
          } else {
            media_html += '<a class="fancybox" data-type="image" data-fancybox="gallery-'+ media.id +'" href="' + imageURL + '" title="' + galleryTitle + '">';
          }
          if (media.medias.length > 1) {
            media_html += '<span class="media-counter">1/' + media.medias.length +'</span>';
          }
        } else {
          media_html += '<a id="'+ media['id'] +'" style="position:relative" href="javascript:void(0);">';
          media_html += '<div class="gallery-purchase-buttons">';
          media_html += '<button class="market-gallery-btn btn btn-sun btn-lg pull-right" data-username="'+ media['username'] +'" data-media="'+ media['id'] +'">';
          media_html += '<span class="market-price"><span id="market-gallery-price" class="mr-2">'+cam4.calculateVATPrice(media['price'])+'</span> <i class="bi bi-coin"></i></span>';
          media_html += '<i class="bi bi-lock"></i>';
          media_html += '</button>';
          media_html += '</div>';
        }

        media_html += '<div class="thumb-img-limited ratio-16-9 hide-bottom" style="background-image:url('+ cover +')">';
        media_html += media.medias.length > 1 ? '<i class="bi bi-image fa-4x play-icon big-channel"></i>' : '';
        media_html += '</div>';
        media_html += '</a>';

        if (media.medias.length > 1) {
          for (let m = 1; m < media.medias.length; m++) {
            let extraURL = media.medias[m].mediaUrl;
            media_html += '<a class="fancybox d-none" style="display:none;" data-type="image" data-fancybox="gallery-'+ media.id +'" href="'+ extraURL +'" title="'+ galleryTitle +'"></a>';
          }
        }

         media_html += loadMediaBody(media);
media_html += '<button type="button" class="btn btn-default btn-xs thumb-media-report post-report-floating js-open-report-modal" data-report-target-type="post" data-report-target-id="' + media['id'] + '" data-report-target-user="' + (media['username'] || username) + '" data-report-target-url="' + ((media['medias'] && media['medias'][0] && media['medias'][0]['mediaUrl']) || '') + '" title="Report"><i class="bi bi-flag-fill"></i></button>';

        media_html += '</div>'; // thumb-box
        media_html += '</div>'; // col

        return media_html;
      }


      function loadPhotos(initial = false) {
        if (loading || noMorePosts) return;
        loading = true;

        cam4.getUserActivityFeed(username, 'IMAGE', 10, lastLoadedId, false, function(data){
          if (data && data.length > 0) {
            for (let j = 0; j < data.length; j++) {
              if (data[j]['visibility'] != 'SUBSCRIPTION') {
                    photos_html += loadMedia(data[j]);
              }
            }

            $("#profile-photos").html(photos_html);
            $("#profile-photos-section").show();
            $(".fancybox").fancybox();

            // Update lastLoadedId
            lastLoadedId = data[data.length - 1].id;

            // If fewer than 10 posts, stop pagination
            if (data.length < 10) {
              noMorePosts = true;
            }

            loading = false;
          } else {
            noMorePosts = true;
            loading = false;
          }
        });
      }

      // Initial load
      loadPhotos(true);

      // Infinite scroll for section
      $("#profile-details-modal").on('scroll', function() {
        let section = $("#profile-photos-section");
        if (section.length && !noMorePosts) {
          let sectionBottom = section.offset().top + section.outerHeight();
          let scrollBottom = $(window).scrollTop() + $(window).height();

          if (scrollBottom >= sectionBottom - 100) {
            loadPhotos();
          }
        }
      });

      //hide loader and show profile
      $("#profile-loader-wrapper").remove();
      $("#profile-container").show();

      $(document).on('click', '.market-gallery-btn', function () {
    const $btn = $(this);
    const $parent = $btn.closest('.gallery-purchase-buttons');

    // If already waiting for confirmation → Confirm clicked
if ($btn.data('confirm') === true) {

    // Show loading state
    $btn.html('<span class="spinner-dots"><span></span><span></span><span></span></span>');

    cam4.buyActivityFeedPost($btn.data('username'), $btn.data('media'), function(status){
        if(status){
            cam4.getActivityFeedPost($btn.data('username'), $btn.data('media'), function(data){
                if (data) {
                    let post = loadMedia(data);
                    $('#post-' + $btn.data('media')).replaceWith(post);
                    cam4.getBalance();
                }
            });
        } else {
            showTokensModal();
        }
    });

    return;
}


    // First click → set confirm mode
    setConfirmState($parent, $btn);
});

// Cancel button logic
$(document).on('click', '.market-gallery-cancel', function () {
    const $parent = $(this).closest('.gallery-purchase-buttons');
    resetButton($parent);
});

// ----- Helpers -----
function setConfirmState($parent, $btn) {
    // Reset all other containers
    $('.gallery-purchase-buttons').each(function () { resetButton($(this)); });

    if (!$btn.data('original-html')) {
        $btn.data('original-html', $btn.html());
    }

    $btn.data('confirm', true).html(' Buy');

    // Inject cancel button inside parent if not there
    if ($parent.find('.market-gallery-cancel').length === 0) {
        $parent.append('<button class="market-gallery-cancel btn btn-secondary">Cancel</button>');
    }
}

function resetButton($parent) {
    const $btn = $parent.find('.market-gallery-btn');
    if ($btn.data('original-html')) {
        $btn.html($btn.data('original-html'));
    }
    $btn.data('confirm', false);
    $parent.find('.market-gallery-cancel').remove();
}
    }
    else{
      //profile not found
      $("#profile-container").hide();
      $("#profile-not-found").show();
    }
  });

      //attach the buttons that trigger this modal to all blurred elements
      $("#profile-container .blur.blur-small").each(function(){
        $(this).parent().css('position', 'relative').append(forced_trigger_small);
      });
  $(".fancybox").fancybox();

  $("#quick-reg").submit(function(e){
    e.preventDefault();
  });
  $("#navbar-logo").show();

        cam4.getBroadcastHistory(username, function(data){
      if (data.status && data.status == 2) {
        $('.online-chart-container').remove();
        return;
      }
      const date = new Date();
      const days = data.days;
      const broadcastKeys = Object.keys(data.totalBroadcastsPerHours);
      const chartElement = document.getElementById('online-chart');
      let chosenDayNum = date.getDay();
      loadOnlineChart(chartElement, chosenDayNum, days, broadcastKeys, ['#fc37a6', '#333']);

      $('#days-switcher i').on('click', function(){
        if ($(this).hasClass('prev-day')) {
          chosenDayNum--;
          if (chosenDayNum < 0) {
            chosenDayNum = 6;
          }
        } else {
          chosenDayNum++;
            if (chosenDayNum > 6) {
            chosenDayNum = 0;
          }
        }
        loadOnlineChart(chartElement, chosenDayNum, days, broadcastKeys, ['#fc37a6', '#333']);
      });
    });
    $("#profile-details-link").html('<button onclick="showProfileDetailsModal();" class="btn btn-moon"><i class="d-block bi bi-person-square"></i><span class="d-none d-md-block">Profile</span></button>');
 }

  function initializeChatroom(e){cam4.setupChatroom({room:e.toLowerCase(),balance:parseInt("0"),el_video:"video",el_timer:"private-timer",exit_url:'/en',msgs:{room_offline:'This room is offline.',room_private:'This room is currently in private.',connecting:'Connecting...',private_finished:'Private finished.',room_group_show:'This room is currently in a Group Show.',room_paused:'This room will come back shortly.',requesting_private:'Requesting Private Show...',cancelling_private:'Cancelling the Private Show...',stopping_private:'Stopping the Private Show...',stopped_private:'Private Show stopped.',no_funds:'You don&#39;t have enough tokens.',spam:'You are spamming the chat by sending the same message multiple times.',too_many:'You are sending too many messages.',not_allowed_without_tokens:'The performer only allows chatting when you have tokens.',not_allowed:'The performer disabled chatting.',not_in_group:'You are not in the group of users allowed to chat in this room.'},onChatStarted:function(){$("#start-private").show(),$("#stop-private").hide(),$("#cancel-private-request").hide(),is_mobile&&positionMobileProgressBar()},onPrivateStarted:function(){$("#start-private").hide(),$("#stop-private").show(),$("#cancel-private-request").hide()},onViewersCount:function(e){$("#viwers-counter").text(e)},onRoster:function(){},onInsuficientFunds:onInsuficientFunds,onTip:onTip,onGift:onGift,onChatMessage:updateChat,onClearChat:function(){$("#chat-body").html("")},onBalance:function(e){$(".member-balance").each(function(){$(this).find(".lds-ring").hide(),$(this).find(".balance-value").html(e),$(this).find(".balance-value").show()})},onPrivateSettings:function(e,t,a,o,i){if(e)if($("#private-btns").show(),a){for(var s="",n="",l="",r=0;r<o.length;r++){var c=o[r].split(":");0==r&&(l=o[r].replace(/"/g,"&quot;").replace(/'/g,"&apos;"),n="selected"),s+='<a href="javascript:selectTimeBlock('+r+", '"+o[r].replace(/"/g,"&quot;").replace(/'/g,"&apos;")+'\');"><div id="block-'+r+'" class="payment-box '+n+'"><h3>'+c[0]+' mins <small class="pull-right">',s+=(c[1]/c[0]).toFixed(1)+" tokens/min</small></h3>"+c[2]+"</div></a>",n=""}s+='<input id="selected-block" type="hidden" value="'+l+'"/>',$("#private-unlimited").hide(),$("#private-blocks-content").html(s),$("#private-blocks-content").show()}else $("#private-price").html(t),$("#private-min-time").html("tokens/minute (until you end show or your balance runs out) (%{minutes} minutes minimum charge).".replace("%{minutes}",i)),$("#private-unlimited").show();else $("#private-btns").hide()},onTicketSale:function(e,t,a,o,i){if(i?($("#ticket-price").html('<i class="bi bi-check"></i>').removeClass("btn-primary").addClass("btn-success"),$("#ticket-sale").attr("onclick","").off()):(""==$("#ticket-sale").attr("onclick")&&$("#ticket-sale").attr("onclick","buyGroupShowTicket();"),$("#ticket-price").html('<i class="bi bi-people-fill"></i> '+e+' Tokens').removeClass("btn-danger").removeClass("btn-success").addClass("btn-primary")),!is_mobile)$("#ticket-sale").width();$("#ticket-sale").fadeIn("fast")},onFailedTicketSale:function(){cam4.getBalance(),$("#ticket-sale").fadeOut("fast")},onRoomPrivate:function(){$(".next-cam").click()},onRoomPaused:function(){$("#stop-private").hide(),$("#start-private").show()},onRoomOffline:function(){$(".next-cam").click()},onTicketPurchased:function(e){cam4.getBalance(),e.ok?($("#ticket-price").html('<i class="bi bi-check"></i>').removeClass("btn-primary").addClass("btn-success"),$("#ticket-sale").attr("onclick","").off()):$("#ticket-price").html('<i class="bi bi-x"></i> Error').removeClass("btn-primary").addClass("btn-danger")},onGoal:function(e){if(e&&!blank(e.goal)){var t=100*parseInt(e.goalbalance)/parseInt(e.goal);$("#tip-progressbar").attr("aria-valuenow",t),$("#tip-progressbar").attr("aria-valuemax",blank(e.goal)?0:e.goal),$("#tip-progressbar").css("width",t+"%"),$("#tip-progress-current").html(blank(e.goalbalance)?0:e.goalbalance),$("#tip-progress-goal").html(blank(e.goal)?0:e.goal),$("#goal-message").html("<strong>GOAL:</strong> "+decodeURIComponent(e.message)).show(),$("#goal-link").show()}else $("#goal-message").hide(),$("#goal-link").hide()}}),$("#mobile-chat-header-performer-username").text(e)}function send(){is_guest?(link='<span class="text-warning" onclick="showRegisterModal();" role="button"> It\'s FREE, register now!</span>',$("#chat-body").append('<div onclick="showRegisterModal();" class="system-text register"><span>Only members can chat with our models, so why don\'t you register'+link+"</span></div>"),$("#chat-body").scrollTop($("#chat-body")[0].scrollHeight)):cam4.sendToChat($("#chat-message").val()),$("#chat-message").val("")}function startPrivate(){cam4.requestPrivateShow(cam4.private_blocks?$("#selected-block").val():null)&&($("#cancel-private-request").show(),$("#start-private").hide()),$("#private-details-modal").modal("hide")}function cancelPrivateRequest(){cam4.cancelPrivateShowRequest(),$("#cancel-private-request").hide(),$("#start-private").show()}function stopPrivate(){cam4.stopPrivateShow()}function selectTimeBlock(e,t){$(".payment-box.selected").removeClass("selected"),$("#block-"+e).addClass("selected"),$("#selected-block").val(t)}function updateChat(e,t,a,o){a=a.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\"/g,"&quot;"),a='<div class="chatbox '+e+'-text"><p class="name">'+t+'</p><p class="message">'+(a=o?emojione.shortnameToImage(replaceAddons(a)):a)+"</p></div>",$("#chat-body").append(a),$("#chat-body").scrollTop($("#chat-body")[0].scrollHeight)}function onTip(e,t,a){a&&updateTips(t),updateChatWithTip(e,t)}function onGift(e,t,a){msg='<div class="chatbox system-text user_sent_gift"><p class="name">'+e+" sent a gift!</p></div>",$("#chat-body").append(msg),$("#chat-body").scrollTop($("#chat-body")[0].scrollHeight),a&&($("#gift-pic").attr("src",t),$("#gift-showcase").fadeIn("fast",function(){setTimeout(function(){$("#gift-showcase").fadeOut("fast")},3e3)}))}function onInsuficientFunds(){""==cam4.username||null==cam4.username?$("#register-modal").modal():$("#buy-tokens-modal").modal()}function updateChatWithTip(e,t){msg='<div class="chatbox system-text user_sent_tip"><p class="name">'+e+" sent "+t+" tokens!</p></div>",$("#chat-body").append(msg),$("#chat-body").scrollTop($("#chat-body")[0].scrollHeight)}function updateTips(e){var t=parseInt($("#tip-progress-goal").html()),a=parseInt($("#tip-progress-current").html()),o=100*a/t;$("#tip-progressbar").attr("aria-valuemax",t),$("#tip-progressbar").attr("aria-valuenow",a+e),$("#tip-progressbar").css("width",o+"%"),$("#tip-progress-current").html(a+e)}function customTip(){$("#custom-tip-modal").modal()}function tip(e,t){cam4.balance<e?cam4._showInsuficientFunds():$.post("/en/send-tip/"+t,{amount:e},function(e){"0"!=e.status?(cam4._showInfo("Tip failed."),setTimeout(function(){cam4._hideInfo()},3e3)):$(".member-balance").each(function(){$(this).find(".lds-ring").hide(),$(this).find(".balance-value").html(e.userbalance),$(this).find(".balance-value").show()})},"json")}function toggleVideoAudio(){$("#mute-btn > i").hasClass("fa-volume-up")?($("#video").prop("muted",!0),$("#mute-btn > i").removeClass("fa-volume-up").addClass("fa-volume-off")):($("#video").prop("muted",!1),$("#mute-btn > i").removeClass("fa-volume-off").addClass("fa-volume-up"))}function displayGuestNotice(){$("#guest-notice-modal").modal()}function replaceAddons(e){var t={'<img alt="[hi]" title="[hi]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/hi-e8192e600e3b3978d095dbc8a3c23a21670c3c5c1f693b3bc8e95ca0febde5ea.png" />':Array("[hi]"),'<img alt="[yes]" title="[yes]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/yes-17c053b9e5331258b3f8bd8318b12fe6dd82400badea5d5f7df1aab567ac8d67.png" />':Array("[yes]"),'<img alt="[no]" title="[no]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/no-2bd233f72a5a2637756b9df1440809b24ec1d0b209c58d655f49f42a18070b25.png" />':Array("[no]"),'<img alt="[makelove]" title="[makelove]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/letsmakelove-03f276aa6540e502fda2054927c6918dd5454baeecc2025a098a2fb7a8c9d33c.png" />':Array("[makelove]"),'<img alt="[play]" title="[play]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/letsplay-672b56144c5ff3fa3f2a691be535597b4dffa6a475e82a16065b16bc06d6c10e.png" />':Array("[play]"),'<img alt="[horny]" title="[horny]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/imhorny-e78d5fac64934ea1466deabeb5335a4e36306e04975496a8d676dcd71686e38d.png" />':Array("[horny]"),'<img alt="[webcam]" title="[webcam]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/imonwebcam-2e05d52af1aa2f42fc4d31e4448ef86461a2f2ceeefcf78d2907b9e1a2a3bac2.png" />':Array("[webcam]"),'<img alt="[busy]" title="[busy]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/imbusy-69536710fc94b9a2d9928ccde39bef5dfb2f76530aa534f799c596dc7500b832.png" />':Array("[busy]"),'<img alt="[brb]" title="[brb]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/berightback-8d149c52607da3e6209c883154074448867a1d6f80e94502d80b9b2f2be1f9f0.png" />':Array("[brb]"),'<img alt="[bfn]" title="[bfn]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/byefornow-0fb5fa34ac44fea7f8236f7dc51a3c6295f4a3e888a6728ec0ff0e43b2e06966.png" />':Array("[bfn]"),'<img alt="[cool]" title="[cool]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/thatscool-72ba60fc87e16cbf9970c91c6be5867d1c5bbc21bcdbecbdce230144290488c8.png" />':Array("[cool]"),'<img alt="[ok]" title="[ok]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/ok-c8b98f33df58c725e2279c5fb02b1c2c46663bc2752bac78ba9de18e3dab6d6a.png" />':Array("[ok]"),'<img alt="[omg]" title="[omg]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/omg-e4f809b863a0ef1e4463090fd224758461e5b129ec9d88068142f20c449d49b9.png" />':Array("[omg]"),'<img alt="[smiley]" title="[smiley]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/smiley-ce0c9697faef88b9179275ab5ca8c5a26a9ccea12e7d09a995ac266cb5613acb.png" />':Array("[smiley]"),'<img alt="[talk]" title="[talk]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/letstalk-f2c719c7989a498a34ad4ae52c7aa30f6f353c91b2771ba31f88548130c8c200.png" />':Array("[talk]"),'<img alt="[kiss]" title="[kiss]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/kiss-5316724ba324ca4358dac1b3645b6a9e5f876c8e3ebd6d6e4e7515018a925b4c.png" />':Array("[kiss]"),'<img alt="[hot]" title="[hot]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/imhot-bc8e96d7ce8bbfd94a1e26de2ade95097c63b646c4da468f087e853244afc7f6.png" />':Array("[hot]"),'<img alt="[rocket]" title="[rocket]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/hardasarocket-412693a2c208cb4ac34195df2fbb6ced1eb90f69885b7d917bf0836f0445a915.png" />':Array("[rocket]"),'<img alt="[censored]" title="[censored]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/censored-832df1dd6f26243da3e6cf64faeea54b0cf038f00483bcd8cedb93c2863af1ce.png" />':Array("[censored]"),'<img alt="[approved]" title="[approved]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/approved-eeda5c164a5464382ed44cbf056f8d7d81000f89aa79a161eb46c7874ffcd6b1.png" />':Array("[approved]"),'<img alt="[whatsup]" title="[whatsup]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/whatsup-b2f098db058d4390b39a26b6f9f2d94c61ed85277e6115014a5c186caec1b409.png" />':Array("[whatsup]"),'<img alt="[mail]" title="[mail]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/yougotmail-7ca1faf376061a692a278813cbbe0d4338d31dbfa8a160af1222788615620e24.png" />':Array("[mail]"),'<img alt="[fuck]" title="[fuck]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/letsfuck-ad1fb38c383677dc1baabfa5d84dfa1a5a3a47c70d8465c81d61bc3c99534bee.png" />':Array("[fuck]"),'<img alt="[thankyou]" title="[thankyou]" src="//granity-pinklabel-static-assets-production.xcdnpro.com/assets/emoticons/thankyou-3fc53db753e5e0427d78f2e5cbb17243794bf2fd2f966934dea087134f4409d8.png" />':Array("[thankyou]")};for(var a in t)for(var o=0;o<t[a].length;o++)e=e.replace(new RegExp(RegExp.escape(t[a][o]),"g"),a);return e}function toggleFullscreen(){screenfull.toggle()}function toggleChatbox(){$(".js-toggle-chatbox .fa-arrow-right").is(":visible")?$(".overlay-chat").animate({right:-296},"slow"):$(".overlay-chat").animate({right:0},"slow"),$(".js-toggle-chatbox .js-arrow").toggle()}function toggleMobileChatbox(){$("#toggle-mobile-chat > i").hasClass("fa-comments")?($(".overlay-chat").hide(),$("#chat-message").hide(),$("#toggle-mobile-chat > i").removeClass("fa-comments").addClass("fa-comment")):($(".overlay-chat").show(),$("#chat-message").show(),$("#toggle-mobile-chat > i").removeClass("fa-comment").addClass("fa-comments"))}function positionMobileProgressBar(){var e=$("#chatroom-container").width()-$("#mute-btn").outerWidth(!0)-$("#private-btns").outerWidth(!0)-$("#tip-group").outerWidth(!0)-10;$("a.progress").width(e),$("a.progress").prependTo(".performer-actions"),$(".overlay-chat").width(.5*$("#chatroom-container").width()),$(".chatbox-input-wrapper").prependTo(".overlay-bottom")}function toggleVideoZoom(){"cover"==$("#video").css("object-fit")?$("#video").css("object-fit","contain"):$("#video").css("object-fit","cover")}function buyGroupShowTicket(){var e=$("#ticket-price").html();if($("#ticket-price").html('<i class="bi bi-arrow-repeat fa-spin"></i>'),!is_mobile){var t=$("#ticket-sale").width();$("#ticket-sale").css("left",document.documentElement.clientWidth/2-t/2+"px")}cam4.buyGroupShowTicket()||$("#ticket-price").html(e)}function camSlideUp(e,t,a){$(".performer-details").hide(),window.loadedCams.length-window.loadedCams.findIndex(t=>t==e)<3&&(window.camPage++,addMoreCams(a,20)),$("#chatroom-container").addClass("loading"),cam4.disconnectFromChatroom(),$("#chat-body").html(""),"up"===t?$(".main-content-wrapper").addClass("slide-up slide-remove"):$(".main-content-wrapper").addClass("slide-down slide-remove"),$("#page-content-wrapper").append('<div id="slide-'+e.nickname+'" class="container-fluid px-0 main-content-wrapper"></div>'),setTimeout(function(){$("#page-content-wrapper .main-content-wrapper").children().appendTo("#slide-"+e.nickname),$(".slide-remove").remove(),launchChatroom(e.nickname),setTimeout(function(){$("#video").attr("src")||(cam4.disconnectFromChatroom(),console.log("Refreshing video feed"),cam4.refreshVideoFeed(e.nickname)),$("#chatroom-container").removeClass("loading")},2e3),$("#roll-controls i").removeClass("active")},200)}function addMoreCams(e,t){cam4.getCams(e,window.camPage,t,function(e){e.length>0&&(window.loadedCams=window.loadedCams.concat(e).filter((e,t,a)=>t===a.findIndex(t=>t.id===e.id)))})}function loadCamsListing(e,t,a){window.camPage=t;let o=0;cam4.getCams(e,t,a,function(t){if(t.length>0){window.loadedCams=t;let a=window.location.href.split("?")[1],i=new URLSearchParams(a).get("chatroom");if(i)launchChatroom(i),t=t.filter(e=>e.nickname.toLowerCase()!==i);else{if(!(window.loadedCams.length>0))return void console.warn("No cameras loaded!");launchChatroom(window.loadedCams[o].nickname)}$(window).keydown(function(t){if(!$("#chatroom-container").hasClass("loading")&&!$("body").hasClass("modal-open")){if(!window.loadedCams||0===window.loadedCams.length)return void console.warn("No cameras loaded!");$(".next-cam, .previous-cam").removeClass("active"),39==t.keyCode||40==t.keyCode?($(".next-cam").addClass("active"),o=(o+1)%window.loadedCams.length,camSlideUp(window.loadedCams[o],"up",e)):37!=t.keyCode&&38!=t.keyCode||($(".previous-cam").addClass("active"),o=(o-1+window.loadedCams.length)%window.loadedCams.length,camSlideUp(window.loadedCams[o],"down",e))}}),window.addEventListener("wheel",function(t){$("#chatroom-container").hasClass("loading")||$("body").hasClass("modal-open")||($(".next-cam, .previous-cam").removeClass("active"),t.deltaY>0?($(".next-cam").addClass("active"),o=(o+1)%window.loadedCams.length,camSlideUp(window.loadedCams[o],"up",e)):($(".previous-cam").addClass("active"),o=(o-1+window.loadedCams.length)%window.loadedCams.length,camSlideUp(window.loadedCams[o],"down",e)))},{passive:!1});let s=0;window.addEventListener("touchstart",function(e){s=e.touches[0].clientY},!1),window.addEventListener("touchmove",function(t){if(!$("#chatroom-container").hasClass("loading")&&!$("body").hasClass("modal-open")){let a=t.touches[0].clientY,i=a-s;Math.abs(i)>30&&($(".next-cam, .previous-cam").removeClass("active"),i<0?($(".next-cam").addClass("active"),o=(o+1)%window.loadedCams.length,camSlideUp(window.loadedCams[o],"up",e)):($(".previous-cam").addClass("active"),o=(o-1+window.loadedCams.length)%window.loadedCams.length,camSlideUp(window.loadedCams[o],"down",e)),s=a),t.preventDefault()}},{passive:!1}),$(".next-cam").on("click",function(){$("#chatroom-container").hasClass("loading")||$("body").hasClass("modal-open")||($(".next-cam, .previous-cam").removeClass("active").addClass("active"),o=(o+1)%window.loadedCams.length,camSlideUp(window.loadedCams[o],"up",e))}),$(".previous-cam").on("click",function(){$("#chatroom-container").hasClass("loading")||$("body").hasClass("modal-open")||($(".next-cam, .previous-cam").removeClass("active").addClass("active"),o=(o-1+window.loadedCams.length)%window.loadedCams.length,camSlideUp(window.loadedCams[o],"down",e))}),$("#chatroom-container").on("skipCam",function(){$(".next-cam").addClass("active"),o=(o+1)%window.loadedCams.length,camSlideUp(window.loadedCams[o],"up",e),$("#chatroom-container").removeClass("skip").off("skipCam")})}})}function launchChatroom(e){loadProfileDetails(e),addBizLink(e);var t=e.toLowerCase(),a=window.location.href.split("?")[0]+"?"+("chatroom="+t);window.history.replaceState({},document.title,a);var o=$("#chatroom-report-btn");o.length&&(o.attr("data-report-target-type","stream"),o.attr("data-report-target-id",t),o.attr("data-report-target-user",e),o.attr("data-report-target-url",a)),initializeChatroom(t)}function addBizLink(){0}RegExp.escape=function(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")};

  function showForcedAgeVerificationModal(){
    cam4.openAgeVerificationPopup();
  }


  </script>

  

</body>
</html>