File "single-scripts.js"

Full Path: /home/exhehbu/www/wp-content/plugins/eventer/js/single-scripts.js
File size: 53.01 KB
MIME-type: text/plain
Charset: utf-8

jQuery(function ($) {
  "use strict";
  // console.log( single );
  if (single.woo_layout == 'on') {
    if ($('.reload-checkout').length) {
      $('[href="#eventer-ticket-form-' + single.dynamic_event + '"]').click();
      $('.add_services_btn').removeClass('disableClick');
    }

    $('.eventer-ticket-details-wrap a.eventer-btn' ).on('click', function( e ) {
        if (single.minimum_ticket != '') {
          $('.num-tickets').each( function() {
              $(this).val(single.minimum_ticket);
              $(this).trigger('keyup');
          });
      }
    });
  }

  function disableDays(date) {
    var pad = function (value) {
      return (value < 10 ? '0' : '') + value;
    };
    var sDate = date.getFullYear() + "-" + pad(date.getMonth() + 1) + "-" + pad(date.getDate());
    $('#ui-datepicker-div').addClass('eventer-custom-ui-datepicker');
    return [$.inArray(sDate, single.enabled_date) !== -1, 'highlight'];

  }

  function eventer_match_height() {
    $('.equah').each(function () {
      $(this).find('.equah-item').matchHeight();
    });
  }
  if (single.stripe_switch == '1' && single.woo_payment_switch !== 'on') {
    //Stripe.setPublishableKey(single.stripe_publishable_key);
    var stripe = Stripe(single.stripe_publishable_key); // test publishable API key
    var elements = stripe.elements();

    var card = elements.create('card', {
      hidePostalCode: true,
      style: {
        base: {
          iconColor: '#666EE8',
          color: '#31325F',
          lineHeight: '40px',
          fontWeight: 300,
          fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
          fontSize: '15px',

          '::placeholder': {
            color: '#999999',
          },
        },
      }
    });
    // Add an instance of the card UI component into the `card-element` <div>
    if ($('#card-element').length) {
      card.mount('#card-element');
    }
    // Handle events and errors
    card.addEventListener('change', function (event) {
      var displayError = document.getElementById('card-errors');
      if (event.error) {
        displayError.textContent = event.error.message;
      } else {
        displayError.textContent = '';
      }
    });
  }

  function stripeTokenHandler(token) {
    // Insert the token ID into the form so it gets submitted to the server
    var form = document.getElementById('ticket-reg');
    var hiddenInput = document.createElement('input');
    hiddenInput.setAttribute('type', 'hidden');
    hiddenInput.setAttribute('name', 'stripeToken');
    hiddenInput.setAttribute('value', token.id);
    var form$ = $(".ticket-reg");
    form$.append("<input type='hidden' class='eventer-stripe-token' name='stripeToken' value='" + token.id + "' />");
    $('.save-registrant').trigger('click');
  }

  function createToken(e) {
    e.preventDefault();
    let custData = {
      name: $("#reg_email").val(),
      /*address_line1: '21 Great Street',
      address_line2: 'Shilloong',
      address_city: 'Chicago',
      address_state: 'Illinois',
      address_zip: '12345',
      address_country: 'US'*/
    };

    stripe.createToken(card, custData).then(function (result) {
      if (result.error) {
        // Inform the user if there was an error
        var errorElement = document.getElementById('card-errors');
        errorElement.textContent = result.error.message;
      } else {
        // Send the token to your server
        stripeTokenHandler(result.token);
      }
    });
  }

  $(document).on('click', '.eventer-stripe-trigger', function (e) {
    if (single.stripe_switch == '1' && single.woo_payment_switch !== 'on') {
      createToken(e);
      let token_val = $('.eventer-stripe-token').val();
      if (typeof token_val != 'undefined' && token_val != '') {
        $(this).removeClass('eventer-stripe-trigger');
      }
    }
  })

  function APPENDQUERYURL(key, value, url) {
    if (!url) { url = window.location.href; }
    var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"),
      hash;
    if (re.test(url)) {
      if (typeof value !== 'undefined' && value !== null) {
        return url.replace(re, '$1' + key + "=" + value + '$2$3');
      } else {
        hash = url.split('#');
        url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, '');
        if (typeof hash[1] !== 'undefined' && hash[1] !== null) {
          url += '#' + hash[1];
        }
        return url;
      }
    } else {
      if (typeof value !== 'undefined' && value !== null) {
        var separator = url.indexOf('?') !== -1 ? '&' : '?';
        hash = url.split('#');
        url = hash[0] + separator + key + '=' + value;
        if (typeof hash[1] !== 'undefined' && hash[1] !== null) {
          url += '#' + hash[1];
        }
        return url;
      } else { return url; }

    }
  }

  function CHECKBOXVALIDATE(names, fields) {
    var chkds = $("input[name='" + names + "']:" + fields);
    if (chkds.is(":checked")) {
      return "1";
    } else {
      return "0";
    }
  }

  function VALIDATEEMAIL(emailField) {
    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,8})$/;

    if (reg.test(emailField.val()) === false) {
      return "0";
    }
    return "1";

  }
  //Load dynamic booking area on single details page
  function eventer_dynamic_bookings(dateText) {
    var event_time = $('.eventer-time-slot :selected').val();
    $('.eventer-ticket-details').attr('data-date', dateText);
    $('.eventer-ticket-details').attr('data-time', event_time);
    var request = $.ajax({
      url: single.ajax_url,
      type: "post",
      dataType: 'json',
      data: {
        action: 'eventer_dynamic_ticket_area',
        date: dateText,
        time: event_time,
        event: single.dynamic_event,
      },
      beforeSend: function (xhr) {
        $('.eventer-loader-form').show();
      },
    });
    request.done(function (response) {
      $('.eventer-event-date').html('<i class="eventer-icon-calendar"></i>' + response.formatted);
      //$('.eventer-front-ticket-area-dynamic').empty();
      $('.eventer-ticket-details-wrap').replaceWith(response.tickets);
      $('.eventer_ticket-filter').replaceWith(response.tickets_modal);
      $('#reg_event_date').text(response.date);
      $('#reg_event_time').text(response.time);
      $('#paypal_return').text(response.event_url);
      eventer_update_date_in_url( response, single, dateText );
      var metas = $('.eventer-single-event-details');
      metas.empty();
      metas.removeClass('eventer eventer-event-single eventer-single-event-details');
      metas.html(response.metas);
      $('#eventer-future-bookings').datepicker({
        showOn: "button",
        maxDate: new Date(single.max_date),
        dateFormat: 'dd-mm-yy',
        buttonText: response.date_show,
        defaultDate: new Date(response.date),
        beforeShowDay: disableDays,
        onSelect: function (dateText, inst) {
          eventer_dynamic_bookings(dateText);
        }
      });
      $('.eventer-loader-form').hide();
      $('.eventer-time-slot').val(event_time);
    });
  }

  function eventer_update_date_in_url( response, single, dateText ) {
      // Get the current URL
      var currentUrl = window.location.href;

      // Check if the URL contains "edate" parameter
      if (currentUrl.includes("edate")) {
        // Extract the value of the "date" parameter from the "edate" parameter
        var match = currentUrl.match(/edate\/(\d{4}-\d{2}-\d{2})/);
        if (match) {
          var currentDate = match[1];

          // Replace the current date with a new one (e.g., "2023-12-01")
          var newDate = eventer_validate_dateFormat( dateText );

          var newUrl = currentUrl.replace("edate/" + currentDate, "edate/" + newDate);

          // Push the new URL to the browser history without redirecting
          history.pushState(null, null, newUrl);
        }
      }
  }

    function eventer_validate_dateFormat(input_D) {
      // Extract day, month, and year from the input string
      const [day, month, year] = input_D.split('-').map(Number);

      // Format the date in the desired output format "yyyy-mm-dd"
      const outputDate = `${year.toString().padStart(4, '0')}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;

      return outputDate;
    }

  function eventer_action_print_button(elem) {
    var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
    var mywindow = window.open('', 'PRINT', 'height=400,width=600');
    mywindow.document.write('<html><head><title>' + document.title + '</title>');

    mywindow.document.write('<link rel="stylesheet" href="' + single.eventer_style + '" type="text/css" media="all" />');
    mywindow.document.write('</head><body class="eventer eventer-print-window">');
    mywindow.document.write('<h1>' + document.title + '</h1>');

    mywindow.document.write(document.getElementById(elem).innerHTML);
    mywindow.document.write('</body></html>');

    mywindow.document.close(); // necessary for IE >= 10
    mywindow.focus(); // necessary for IE >= 10*/

    mywindow.print();
    if (isSafari) {

    } else {
      mywindow.close();
    }

    return true;
  }

  function VALIDATEFORMFIELDS(element, counting) {

    var passing = "1";
    var total_counting = counting;
    var required = element.attr("data-required");
    if (required === "1") {
      var field_type = element.prop("type");
      if (field_type === "text" || field_type === "textarea" || field_type === "email" || field_type === "number") {
        if (element.val() === '') {
          element.addClass("eventer-required-field");
          passing = "0";
          total_counting = total_counting + 1;
        } else if (field_type === "email" && VALIDATEEMAIL(element) === "0") {
          element.addClass("eventer-required-field");
          element.closest("form").find(".message").empty();
          element.closest("form").find(".message").append(element.attr("name") + ' <p>' + single.email_msg + '</p>');
          passing = "0";
          total_counting = total_counting + 1;
        } else if (field_type === "number" && !$.isNumeric(element.val())) {
          element.addClass("eventer-required-field");
          element.closest("form").find(".message").empty();
          element.closest("form").find(".message").append(element.attr("name") + ' <p>' + single.number_msg + '</p>');
          passing = "0";
          total_counting = total_counting + 1;
        } else {
          element.removeClass("eventer-required-field");
          passing = "1";
        }
      } else if (field_type === "checkbox" || field_type === "radio") {
        var fname = element.attr("name");
        var result = CHECKBOXVALIDATE(fname, element.prop("type"));
        if (result === "1") {
          element.closest("div").removeClass("eventer-required-field");
          passing = "1";
        } else {
          element.closest("div").addClass("eventer-required-field");
          passing = "0";
          total_counting = total_counting + 1;
        }
      } else {
        if (element.val() === '') {
          element.addClass("eventer-required-field");
          passing = "0";
          total_counting = total_counting + 1;
        } else {
          element.removeClass("eventer-required-field");
          passing = "1";

        }
      }
    }
    if (counting === '') {
      return passing;
    } else {
      return total_counting;
    }
  }


  function update_all_fields_name(index, fields ) {

    var customClass = 'registrant-fields';

      var html = fields.replace(/name="([^"]+)"/g, function(match, p1) {
          if (p1.trim() !== "") {
              var updatedName = 'name="' + p1 + index + '"';
              // var updatedName = 'name="reg_fields[' + index + ']' + p1 + '"';
              var updatedWithClass = match;  // Start with the original match

              // Check if class attribute exists
              if (match.indexOf('class=') !== -1) {
                  // Append the custom class
                  updatedWithClass = match.replace(/class="([^"]+)"/, function(matchClass, pClass) {
                      return 'class="' + pClass + ' ' + customClass + '"';
                  });
              } else {
                  // Add the new class
                  updatedWithClass = match.replace(/name="([^"]+)"/, function(matchName) {
                      return matchName + ' class="' + customClass + '"';
                  });
              }

              return updatedName + ' ' + updatedWithClass;
          } else {
              return match;
          }
      });

      return html;
  }

  function update_all_fields_class(fields ) {

    var customClass = 'registrant-fields';

      var html = fields.replace(/name="([^"]+)"/g, function(match, p1) {
          if (p1.trim() !== "") {
              var updatedWithClass = match;  // Start with the original match

              // Check if class attribute exists
              if (match.indexOf('class=') !== -1) {
                  // Append the custom class
                  updatedWithClass = match.replace(/class="([^"]+)"/, function(matchClass, pClass) {
                      return 'class="' + pClass + ' ' + customClass + '"';
                  });
              } else {
                  // Add the new class
                  updatedWithClass = match.replace(/name="([^"]+)"/, function(matchName) {
                      return matchName + ' class="' + customClass + '"';
                  });
              }

              return updatedWithClass;
          } else {
              return match;
          }
      });

      return html;
  }


  $(document).ready(function () {
    eventer_match_height();

    //Code to change booking area on single page while changing time slot
    $(document).on('change', '.eventer-time-slot', function () {
      eventer_dynamic_bookings($('.eventer-ticket-details').attr('data-date'));
    });

    $(document).on('change', 'select#eventer-future-bookings', function ( e ) {
      var dateText = $(this).val();
        eventer_dynamic_bookings( dateText );
    });

    $('#eventer-future-bookings').datepicker({
      showOn: "button",
      maxDate: new Date(single.max_date),
      buttonText: single.future_date_cal,
      dateFormat: 'dd-mm-yy',
      beforeShowDay: disableDays,
      defaultDate: new Date(single.min_date),
      onSelect: function (dateText, inst) {
        eventer_dynamic_bookings(dateText);
      }
    });

    $(document).on('click', '.eventer-toggle-area-trigger', function (e) {
      var dialog_heading = $(this).attr('data-eventer-dialog-heading');
      if (typeof dialog_heading !== 'undefined' && dialog_heading !== '') {
        $(this).closest('.eventer-modal').find('.eventer-section-wise-heading').text(dialog_heading);
      }
      var targetIn = $(this).attr('data-eventer-toggle-in');
      var targetOut = $(this).attr('data-eventer-toggle-out');
      $(this).parents('.eventer-toggle-area').find(targetOut).slideUp('fast');
      $(this).parents('.eventer-toggle-area').find(targetIn).slideDown('slow');
      e.preventDefault();
    });




    if (single.register_status !== "" && typeof single.register_status !== 'undefined') {
      $("#eventer-ticket-confirmation").emodal();
    }

    $(".eventer-get-ticket-modal").click(function (event) {
      $.emodal.close();
      $("#eventer-ticket-show-now").emodal();
    });

    $(document).on('mouseenter mouseleave', '.eventer-event-save', function () {
      $(this).find('ul').toggle();
    });

    $('.eventer-print-ticket').click(function () {
      eventer_action_print_button('eventer-ticket-show-now');
    });

    $("form.organizer-contact").on("submit", function (e) {
      var form_element = $(this);
      var validated = "1";
      $(this).closest("form").find(".message").empty();
      var all_fields = $(this).serializeArray();
      var eventer_id = $(".organizer-details").text();
      var eventer_date = $(".eventer-date").text();
      $(this).find('.eventer_add_event_field').each(function () {
        var passing = VALIDATEFORMFIELDS($(this), '');
        if (passing !== "1") {
          validated = "0";
        }
      });
      if (validated !== "1") {
        return false;
      }

      var request = $.ajax({
        url: single.ajax_url,
        type: "post",
        async: false,
        data: {
          action: 'eventer_contact_organizer',
          org_data: all_fields,
          eventer_id: eventer_id,
          eventer_date: eventer_date,
          nonce: single.organizer_contact,
        },
        beforeSend: function (xhr) {
          form_element.find("input[type=submit]").prop('disabled', true);
        },
      });
      request.done(function (response) {
        form_element.find("input[type=submit]").prop('disabled', false);
        form_element.find(".message").html(single.contact_manager_text);
        $('#eventer-contact-form').slideUp(1500);
        $('.eventer-modal-close').trigger('click');
      });
      request.fail(function (jqXHR, textStatus, errorThrown) {
        alert(errorThrown);
      });
      e.preventDefault();
    });
    
    function checkTimeSlot(event) {
    var $time = $("select.eventer-time-slot");
    if (!$time.length) {
      return false;
    }

    if ($time.val() == "00:00:00" && single.mandatory_timeslot === "on") {
      var url = $(event.currentTarget).attr("href");
      event.currentTarget.href = "#";
      event.stopPropagation();
      event.preventDefault();
      $time.addClass("eventer-required-field");
    }
  }

    $(document).on('submit', 'form.ticket-reg', function (e) {
      var booking_type = $(this).attr('data-booking');
      var closest_booking = $('.eventer-front-ticket-area-dynamic');
      var booking_nonce = $(this).attr('data-nonce');
      $('.eventer-removable-field-bypermission').each(function () {
        if ($(this).css('visibility') == 'hidden' || $(this).css('display') == 'none') {
          $(this).remove();
        }
      });
      if ($(this).hasClass("eventer-direct-register") || single.mandatory_registrants === 'on') {
        var validated = "1";
        $(closest_booking).find('form.ticket-reg .eventer-ticket-type-row:not(.eventer-ticket-type-restriction) *').filter(':input').each(function () {
            if ($(this).hasClass('eventer-stripe-fields')) {
                return true;
            }
            var passing = VALIDATEFORMFIELDS($(this), '');
            if (passing !== "1") {
                validated = "0";
            }
        });
        if (validated !== "1") {
          return false;
        }
      }
      var form_element = $(this);
      var cart_status = $(form_element).find('.eventer-row').attr('data-cart');
      var total_price_ticket = $(closest_booking).find(".eventer-ticket-price-total").attr('data-fprice');
     
      var $all_fields = $(this).find(':input:not(.registrant-fields)').serializeArray();
      var all_registrants_list = {};

      $(closest_booking).find('.eventer-registrants-row').each(function () {
          var ticket_name_reg = $(this).attr('data-ticket');
          var registrants_list = [];

          $(this).find('.eventer-registrants-list').each(function () {
              var registrants_field_list = {};
              $(this).find(':input').each(function () {
                if ( $(this).hasClass('eventer_registrant_name') ) {
                  registrants_field_list['name'] = $(this).val();
                } else if ( $(this).hasClass('eventer_registrant_email') ) {
                  registrants_field_list['email'] = $(this).val();
                } else {
                  var field_name = $(this).attr('name');
                  var field_value = $(this).val();
                  registrants_field_list[field_name] = field_value;
                }
              });

              // Check if there's at least one non-empty field in the registrant list
              var isEmpty = Object.values(registrants_field_list).every(value => value === '');
              if (!isEmpty) {
                  registrants_list.push(registrants_field_list);
              }
          });

          all_registrants_list[ticket_name_reg] = registrants_list;
      });

      console.log($all_fields);
      console.log(all_registrants_list);

      var registration;
      var Tickets = [];
      var Ticket_Validation = [];
      var service = [];
      $(closest_booking).find('.services-section').each(function () {
        var pid = $(this).closest('.eventer-ticket-type-row').attr('data-pid');
        var cost = $(this).closest('.eventer-ticket-type-row').find('.total-price').attr('data-mprice');
        var services = {};
        var service_vals = '';
        services.name = $(this).closest('.eventer-ticket-type-row').find('.name-ticket').text();
        $(this).find('.add_services').each(function () {
          if ($(this).is(':checked')) {
            service_vals += $(this).val() + ', ';
          }
        });
        services.value = service_vals;
        services.pid = pid;
        services.cost = cost;
        service.push(services);
      });
      let total_tickets_booking = 0;
      $(closest_booking).find(".num-tickets").each(function () {
        total_tickets_booking += parseInt($(this).val());
        var $crow = $(this).closest(".eventer-ticket-type-row");
        var data = {};
        var ticket_price = '0';
        var ticket_name_new = $crow.find(".name-ticket").text();
        if ($(this).val() !== '') {
          ticket_price = $crow.find(".price-ticket").attr('data-tprice');
          Ticket_Validation.push(data);
        }
        if (ticket_name_new !== '') {
          data.name = $crow.find(".name-ticket").text();
          data.number = $crow.find(".num-tickets").val();
          data.pid = $crow.find('.eventer-row').attr('data-pid');
          data.wpid = $crow.find('.eventer-row').attr('data-wpid');
          data.id = $crow.find('.eventer-row').attr('data-ticketid');
          data.primary = $crow.find('.eventer-row').attr('data-primary');
          data.price = ticket_price;
          Tickets.push(data);
        }

      });
      if ($('.eventer-common-tickets-remaining').val() > 0 && total_tickets_booking > $('.eventer-common-tickets-remaining').val()) {
        $(closest_booking).find('form.ticket-reg').find(".message").empty();
        $(closest_booking).find('form.ticket-reg').find(".message").html('<br/><div class="eventer-ticket-full">'+single.total+ ' ' + $('.eventer-common-tickets-remaining').val() + '</div>');
        return false;
      }
      if (Ticket_Validation.length === 0) {
        $(closest_booking).find('form.ticket-reg').find(".message").empty();
        $(closest_booking).find('form.ticket-reg').find(".message").html(single.blank_tickets);
        e.preventDefault();
        return false;
      } else if ($(closest_booking).find('input:radio:checked').length <= 0 && total_price_ticket > 0 && booking_type != 'woo') {
        $(closest_booking).find('form.ticket-reg').find(".message").empty();
        $(closest_booking).find('form.ticket-reg').find(".message").html(single.blank_payment);
        e.preventDefault();
        return false;
      } else {
        $(closest_booking).find('form.ticket-reg').find(".message").empty();
        if (single.offline_switch !== "1") {
          //$(closest_booking).find(".chosen-payment-option").prop("checked", true);
        }
      }
      var paypal_arguments = '';
      //var dotpay_arguments = '';
      var stripe_arguments = '';
      var eventer_cred = {};
      if ($(closest_booking).find("form#ticket-reg").attr("action").indexOf("paypal") > -1) {
        paypal_arguments = '<input type="hidden" name="business" value="' + single.paypal_email + '">';
        paypal_arguments += '<input type="hidden" name="cmd" value="_xclick">';
        paypal_arguments += '<input type="hidden" name="on0" value="">';
        paypal_arguments += '<input type="hidden" name="on1" value="' + $(closest_booking).find("#reg_email").val() + '">';
        paypal_arguments += '<input type="hidden" name="item_name" value="' + $(closest_booking).find("#paypal_itemname").text() + '">';
        paypal_arguments += '<input type="hidden" name="item_number" value="' + $(closest_booking).find("#eventer_id").text() + '">';
        paypal_arguments += '<input type="hidden" name="amount" value="' + $(closest_booking).find(".eventer-ticket-price-total").attr('data-fprice') + '">';
        paypal_arguments += '<input type="hidden" name="currency_code" value="' + single.paypal_curr + '">';
        paypal_arguments += '<input type="hidden" name="cancel_return" value="' + $("#paypal_return").text() + '">';
        paypal_arguments += '<input type="hidden" name="return" value="' + $(closest_booking).find("#paypal_return").text() + '">';
        $(closest_booking).find(".save-registrant").before(paypal_arguments);
      } else if ($(closest_booking).find("form#ticket-reg").attr("action").indexOf("dotpay") > -1) {
        booking_type = 'dotpay';
      }
      //return false;
      if ($('.eventer_stripe_field').is(':visible')) {
        booking_type = 'stripe';
        eventer_cred = { 'token': $('.eventer-stripe-token').val() };
      }
      if ($(closest_booking).find('#register-reg').is(":checked")) {
        registration = 1;
      }
      var amount = parseFloat($(closest_booking).find(".eventer-ticket-price-total").attr('data-fprice'));
      var request = $.ajax({
        url: single.ajax_url,
        type: "post",
        dataType: 'json',
        //async: false,
        data: {
          action: 'eventer_registrant_tickets',
          reg_data: $all_fields,
          eventer_id: $(closest_booking).find("#eventer_id").text(),
          amount: amount,
          reg_mail: $(closest_booking).find("#reg_email").val(),
          reg_name: $(closest_booking).find("#reg_name").val(),
          cart_status: cart_status,
          reg_event_date: $(closest_booking).find("#reg_event_date").text(),
          reg_event_time: $(closest_booking).find("#reg_event_time").text(),
          reg_event_slot: $('.eventer-time-slot :selected').text(),
          card_cred: eventer_cred,
          tickets: Tickets,
          registration: registration,
          services: service,
          registrants: all_registrants_list,
          book_type: booking_type,
          //nonce: booking_nonce,
        },
        beforeSend: function (jqXhr) {
          $('body').addClass('woocommerce-checkout');
          jqXhr.setRequestHeader('X-WP-Nonce', booking_nonce);
          form_element.find("input[type=submit]").prop('disabled', true);
          form_element.find('.eventer-loader-wrap').show();
        },
      });
      request.done(function (response) {
        e.preventDefault();
        if (response.reg_invalid == '1') {
          form_element.find('.eventer-loader-wrap').hide();
          form_element.find("input[type=submit]").prop('disabled', false);
          $('.message').empty();
          $('.message').html('<br/><div class="eventer-ticket-full">'+ single.already + ' ' + response.ticket_name + '</div>');
          return false;
        }
        if (response.reg) {
          var form_action = $(closest_booking).find("form.ticket-reg").attr("action");
          if (form_action.indexOf("paypal") <= -1) {
            var newformaction = APPENDQUERYURL('reg', response.reg, form_action);
            form_action = newformaction;
            $(closest_booking).find("form.ticket-reg").attr("action", form_action);

          }
          var paypal_return = $(closest_booking).find("#paypal_return").text();
          var new_paypal_return = APPENDQUERYURL('reg', response.reg, paypal_return);
          $(closest_booking).find("input[name=return]").val(new_paypal_return);
          $(closest_booking).find("input[name=on0]").val(response.reg);
        }
        form_element.find("input[type=submit]").prop('disabled', false);
        form_element.find('.eventer-loader-wrap').hide();

        if (booking_type === 'woo') {
          closest_booking.find('.eventer-order-summary-added').remove();
          $('<div class="eventer-order-summary-added widget woocommerce widget_shopping_cart">' + response.woo + '</div>').insertBefore(closest_booking.find('.eventer-woo-checkout-section'));
          $(closest_booking).find(".eventer-show-order-summary").trigger("click");
          jQuery(document.body).trigger("update_checkout");
          $(closest_booking).find(".showcoupon").click(function () {
            $(closest_booking).find(".checkout_coupon").slideToggle();
            return false;
          });
          $(closest_booking).find(".showlogin").click(function () {
            $(closest_booking).find(".woocommerce-form-login").slideToggle();
            return false;
          });
          form_element.find('.eventer_dynamic_checkout_payment').show();
          if (single.woo_layout == 'on') {
            window.location.href = window.location.pathname + "?" + $.param({ 'checkout_show': '1' })
            e.preventDefault();
          }
        } else {
          if (booking_type == 'stripe' && response.secret !== '') {
            stripe.handleCardAction(
              response.secret
            ).then(function (result) {
              if (result.error) {
                document.getElementById("payment-errors").textContent = result.error.message;
              } else {
                $.ajax({
                  url: single.ajax_url,
                  type: "post",
                  dataType: 'json',
                  data: {
                    action: 'eventer_confirm_payment_stripe',
                    secret: result.paymentIntent.id,
                    reg_id: response.reg_id
                  },
                  success: function (response) {
                    e.preventDefault();
                    var form_action = $(closest_booking).find("form.ticket-reg").attr("action");
                    var newformaction = APPENDQUERYURL('reg', response.reg, form_action);
                    form_action = newformaction;
                    $(closest_booking).find("form.ticket-reg").attr("action", form_action);
                    $(closest_booking).find("form.ticket-reg").addClass("new-ticket-reg");
                    $(closest_booking).find("form.ticket-reg").removeClass("ticket-reg");
                    $(closest_booking).find('form.new-ticket-reg').submit();
                  }
                });
              }
            });
            return false;
          } else {
            e.preventDefault();
            $(closest_booking).find("form.ticket-reg").addClass("new-ticket-reg");
            $(closest_booking).find("form.ticket-reg").removeClass("ticket-reg");
            $(closest_booking).find('form.new-ticket-reg').submit();
          }
        }
      });
      request.fail(function (jqXHR, textStatus, errorThrown) {
        form_element.find('.eventer-loader-wrap').hide();
        form_element.find("input[type=submit]").prop('disabled', false);
        $('.message').empty();
        $('.message').html('<br/><div class="eventer-ticket-full">'+single.error+ ' </div>');
      });
      return false;
    });

    $(document).on("click", ".validate-registrant", function (e) {
      e.preventDefault();
      var validated = "1";
      var closest_booking = $('.eventer-front-ticket-area-dynamic');
      $(closest_booking).find('form.ticket-reg *').filter(':input').each(function () {
        if ($(this).is(":hidden")) {
          return true;
        }
        var passing = VALIDATEFORMFIELDS($(this), '');
        if (passing !== "1") {
          validated = "0";
        }
      });
      if (validated !== "1") {
        return false;
      }
      $(closest_booking).find('.restricted-row').each(function () {
        var ticket_cookie = $(this).attr('data-booked');
        if (ticket_cookie !== "") {
          $(this).find('.num-tickets').prop('disabled', true);
          $(this).find('.eventer-qtyplus').prop('disabled', true);
          $(this).find('.eventer-qtyminus').prop('disabled', true);
          $(this).find('.eventer-restricted-msg').show();
        } else {
          $(this).find('.num-tickets').prop('disabled', false);
          $(this).find('.eventer-qtyplus').prop('disabled', false);
          $(this).find('.eventer-qtyminus').prop('disabled', false);
          $(this).find('.eventer-restricted-msg').hide();
        }
      });
      $(closest_booking).find("#fname").removeClass("eventer-input-error");
      $(closest_booking).find("#reg_email").removeClass("eventer-input-error");
      $(closest_booking).find('form.ticket-reg').find(".message").empty();
      var targetIn = $(this).attr('data-eventer-toggle-in');
      var targetOut = $(this).attr('data-eventer-toggle-out');
      $(this).parents('.eventer-toggle-area').find(targetOut).slideUp('fast');
      $(this).parents('.eventer-toggle-area').find(targetIn).slideDown('slow');
      if (single.minimum_ticket != '') {
        $('.num-tickets').val(single.minimum_ticket);
        $('.num-tickets').trigger('keyup');
      }
    });

    $(document).on('change', ".add_services", function () {
      var closest_booking = $('.eventer-front-ticket-area-dynamic');
      var have_ticket;
      $(closest_booking).find(".num-tickets").each(function () {
        if ($(this).val() !== '0') {
          have_ticket = 1;
        }
      });
      var $crow = $(this).closest(".eventer-ticket-type-row");
      var clist = $(this).closest("li");
      var price = clist.attr('data-tprice');
      var total_price_services = 0;
      var check_status;
      var total_price_ticket = 0;
      if ($(this).is(':radio')) {
        $crow.find(".price-ticket").attr('data-mprice', 0);
      }
      if ($(this).is(':checked')) {
        clist.attr('data-mprice', price);
        check_status = "1";
      } else {
        clist.attr('data-mprice', 0);
        check_status = "0";
      }
      if ($(closest_booking).find(".restrict-service").length && !$(closest_booking).find('.restrict-service-field').is(':checked')) {
        check_status = "2";
      } else {
        check_status = "1";
      }
      $crow.find(".price-ticket").each(function () {
        var service_price = ($(this).attr("data-mprice") !== '') ? $(this).attr("data-mprice") : 0;
        total_price_services = total_price_services + parseFloat(service_price);
      });
      var set_price_individual_service = (single.curr_position === "postfix") ? total_price_services + single.curr : single.curr + total_price_services;
      $crow.find(".total-price").text(set_price_individual_service);
      $crow.find(".total-price").attr('data-mprice', total_price_services);
      $(closest_booking).find(".total-price").each(function () {
        var $one_price = ($(this).attr("data-mprice") !== '') ? $(this).attr("data-mprice") : 0;
        total_price_ticket = total_price_ticket + parseFloat($one_price);
      });
      var set_price = (single.curr_position === "postfix") ? total_price_ticket + single.curr : single.curr + total_price_ticket;
      $(closest_booking).find(".eventer-ticket-price-total").text(set_price);
      $(closest_booking).find(".eventer-ticket-price-total").attr('data-fprice', total_price_ticket);
      $(closest_booking).find(".eventer-ticket-price-total").attr('data-aprice', total_price_ticket);
    });

    $('.add_services_btn').click(function () {
      if (single.mandatory_registrants == 'on') {
        var validated = "1";
        $('form.ticket-reg *').filter(':input').each(function () {
          if ($(this).hasClass('eventer-stripe-fields')) {
            return true;
          }
          var passing = VALIDATEFORMFIELDS($(this), '');
          if (passing !== "1") {
            validated = "0";
          }
        });
        if (validated !== "1") {
          return false;
        }
      }

      var closest_booking = $('.eventer-front-ticket-area-dynamic');
      if ($(closest_booking).find(".restrict-service").length && !$(closest_booking).find('.restrict-service-field').is(':checked')) {
        $(closest_booking).find('.save-registrant').prop('disabled', true);
      }
    });

    $(document).on('keyup mouseup', ".num-tickets, .eventer-qtyminus, .eventer-qtyplus", function () {
      var $crow = $(this).closest(".eventer-ticket-type-row");
      $('.eventer-coupon-validate').removeClass('eventer-coupon-validated eventer-coupon-invalid');
      $('.eventer-coupon-validate').removeAttr('disabled');
      var limit_event_count = parseInt(single.event_tickets_set);
      if ($crow.attr('data-limit') == "yes") {
        limit_event_count = 1;
      }

      var closest_booking = $('.eventer-front-ticket-area-dynamic');

      var remaining_tickets = $crow.find('.remaining-ticket').text();
      var set_remaining = (remaining_tickets >= limit_event_count) ? limit_event_count : remaining_tickets;
      var price = $crow.find(".price-ticket").attr('data-tprice');
      var number = parseInt($crow.find(".num-tickets").val());
      var calculation;
      var have_ticket;

      if ($(this).val() === '-' || $(this).val() === '+') {
        if (!isNaN(number)) {
          if ( $(this).val() === '-' && number > 0 ) {
            calculation = $crow.find('.num-tickets').val(number - 1);
          } else if ($(this).val() === '+' ) {
            calculation = $crow.find('.num-tickets').val(number + 1);
            if (parseInt($crow.find('.num-tickets').val()) > parseInt(set_remaining)) {
              $crow.find('.num-tickets').val(set_remaining);
            }
          }
        } else {
          calculation = $crow.find('.num-tickets').val(0);
        }
      }
      if (single.optional_tickets === 'optional') {
        //Code start for optional tickets feature 2019-07-19
        if ($(this).closest('.eventer-q-field').find('input').val() > 0) {
          $crow.addClass('eventer-optional-set');
          $crow.closest('.eventer-ticket-step2').find('.eventer-ticket-type-row').each(function () {
            if ($(this).hasClass('eventer-optional-set')) {

            } else {
              $(this).addClass('eventer-ticket-type-restriction');
              $(this).find('.eventer-q-field').hide();
            }

          });
        } else {
          $crow.closest('.eventer-ticket-step2').find('.eventer-ticket-type-row').removeClass('eventer-optional-set');
          $crow.closest('.eventer-ticket-step2').find('.eventer-ticket-type-row').removeClass('eventer-ticket-type-restriction');
          $crow.closest('.eventer-ticket-step2').find('.eventer-ticket-type-row .eventer-q-field').show();
        }

        //Code of optional tickets ending here
      }

      var total_tickets = $crow.find(".num-tickets").val();
      if (parseInt(total_tickets) > parseInt(set_remaining)) {
        $crow.find(".num-tickets").val(set_remaining);
      }
      
      var new_total_tickets = $crow.find(".num-tickets").val();
      var registrants_fields_set = '';
      var registrants_boxes = $crow.find('.eventer-registrants-row').length;
      var registrants_boxes_ind = $crow.find('.eventer-registrants-row').find('.eventer-registrants-list').length;
      var registrant1_name = $(closest_booking).find('#reg_name').val();
      var registrant1_email = $(closest_booking).find('#reg_email').val();
      var checked_row_permission_field = 1;
      var eventer_allowed_registrants_details = 1;
      for (var i = registrants_boxes_ind; i < new_total_tickets; i++) {
        var registrant_fields = '';

        if ($crow.find('.default-registrant').length <= 0 && $(closest_booking).find('.default-registrant').length > 0) {
          checked_row_permission_field = 0;
        }
        var permission_switch_added = $crow.find('.eventer-registrants-field-permission').length;
        var first_switch = 0;

        if (i === checked_row_permission_field && single.mandatory_registrants !== 'on') {
          first_switch = 1;
          registrant_fields += '<div class="eventer-col10 eventer-registrants-field-permission"><label class="eventer-checkbox"><input class="eventer-permission-add-registrants" checked type="checkbox"> ' + single.individual_label + '</label></div>';
        }
        var name_Series = (i + 1);
        var registrants_field_class = (permission_switch_added > 0 || first_switch !== 0) ? 'eventer-removable-field-bypermission' : '';
        registrant_fields += '<div class="eventer-registrants-list ' + registrants_field_class + '"><div class="eventer-col5 eventer-col10-xs"><label>' + single.registrant_label + ' ' + name_Series + '</label><input data-required="1" class="registrant-fields eventer_registrant_name" placeholder="' + single.registrant_name + '" name="' + single.registrant_name_label + i + '" type="text"></div><div class="eventer-col5 eventer-col10-xs"><label>&nbsp;</label><input data-required="1" class="registrant-fields eventer_registrant_email" placeholder="' + single.registrant_email + '" name="' + single.registrant_email_label + i + '" type="email"></div><div class="eventer-col10">';

        if (single.user_fields) {
          registrant_fields += update_all_fields_class(single.user_fields);
        }

        registrants_fields_set += registrant_fields;
        registrants_fields_set += '</div>';
      }

      var has_checkbox = $crow.find('.eventer-permission-add-registrants').length;
      eventer_allowed_registrants_details = (has_checkbox > 0) ? $crow.find('.eventer-permission-add-registrants:checked').length : eventer_allowed_registrants_details;
      if (single.individual_reg === '1') {
        if (registrants_boxes > 0 && new_total_tickets >= registrants_boxes_ind) {
          $crow.find('.eventer-registrants-row').append(registrants_fields_set);
        } else if (registrants_boxes > 0 && new_total_tickets <= registrants_boxes_ind && new_total_tickets !== '0') {
          var less_fields = (registrants_boxes_ind - new_total_tickets);
          $crow.find('.eventer-registrants-row > .eventer-registrants-list').slice(-less_fields).remove();
        } else {
          $crow.find('.eventer-registrants-row').remove();
          $crow.append('<div class="eventer-row eventer-registrants-row" data-ticket="' + $crow.find('.name-ticket').text() + '">' + registrants_fields_set + '</div>');
        }
        /*Starting Code to show hide registrant name & email field*/
        if (eventer_allowed_registrants_details !== 1) {
          $crow.find('.eventer-registrants-row').find('.eventer-removable-field-bypermission').hide();
        } else {
          $crow.find('.eventer-registrants-row').find('.eventer-removable-field-bypermission').show();
        }
        /*Ending Code to show hide registrant name & email field*/
        var removable_rows = $crow.find('.eventer-removable-field-bypermission').length;
        if (removable_rows <= 0) {
          $crow.find('.eventer-registrants-field-permission').remove();
        }
        if ($(closest_booking).find('.default-registrant').length === 0) {
          $(closest_booking).find(".eventer-registrants-list:first").find('.eventer_registrant_name').addClass('default-registrant');
          $(closest_booking).find(".eventer-registrants-list:first").find('.eventer_registrant_name').val(registrant1_name);
          $(closest_booking).find(".eventer-registrants-list:first").find('.eventer_registrant_email').val(registrant1_email);
        }

      }
      number = parseInt($crow.find(".num-tickets").val());
      if (($.isNumeric(number) && $.isNumeric(price)) || number === '') {
        if (number === '') {
          number = 0;
        }
        var $ticket_counted_price = price * number;
        $ticket_counted_price = $ticket_counted_price.toFixed(2);
        var set_price_individual = (single.curr_position === "postfix") ? $ticket_counted_price + single.curr : single.curr + $ticket_counted_price;
        $crow.find(".total-price").text(set_price_individual);
        $crow.find(".total-price").attr('data-mprice', $ticket_counted_price);
      }
      var total_price_ticket = 0;
      $(closest_booking).find(".total-price").each(function () {
        var $one_price = ($(this).attr("data-mprice") !== '') ? $(this).attr("data-mprice") : 0;
        total_price_ticket = total_price_ticket + parseFloat($one_price);
      });
      total_price_ticket = total_price_ticket.toFixed(2);
      var set_price = (single.curr_position === "postfix") ? total_price_ticket + single.curr : single.curr + total_price_ticket;
      $(closest_booking).find(".eventer-ticket-price-total").text(set_price);
      $(closest_booking).find(".eventer-ticket-price-total").attr('data-fprice', total_price_ticket);
      $(closest_booking).find(".eventer-ticket-price-total").attr('data-aprice', total_price_ticket);
      $(closest_booking).find(".num-tickets").each(function () {
        if ($(this).val() !== '0') {
          have_ticket = 1;
        }
      });
      if (total_price_ticket > 0) {
        $(closest_booking).find(".payment-options-area").show();
        var payment_options = $('.chosen-payment-option').length;
        if (payment_options === 1) {
          $('.chosen-payment-option').attr('checked', true);
        }
        var checked_payment = $('.chosen-payment-option:checked').val();
        $(closest_booking).find('.save-registrant').prop('disabled', false);
        $(closest_booking).find('.add_services_btn').removeClass('disableClick');
        if (checked_payment === '1') {
          $(closest_booking).find("form#ticket-reg").attr('action', single.paypal_site);
          $(closest_booking).find(".save-registrant").val(single.paypal_proceed);
        } else if (checked_payment === '2') {

          $(closest_booking).find("form#ticket-reg").attr('action', $("#paypal_return").text());
          $(closest_booking).find(".save-registrant").val(single.stripe_proceed);
        }


        $(closest_booking).find(".save-registrant").attr("data-payment", "1");
        $(closest_booking).find('form.ticket-reg').find(".message").empty();
        if (single.offline_switch !== "1" && single.woo_payment_switch !== 'on') {
          //alert(single.offline_switch);
          //$(closest_booking).find(".chosen-payment-option").prop("checked", true);
        } else {
          //$(closest_booking).find("input[name=chosen-payment-option][value='0']").prop("checked", true);
          //$(closest_booking).find(".offline_message").show();
          /*$(closest_booking).find(".save-registrant").val(single.proceed_register);
          $(closest_booking).find(".save-registrant").attr("data-payment", "");
          $(closest_booking).find('form.ticket-reg').find(".message").empty();
          $(closest_booking).find("form#ticket-reg").attr('action', $(closest_booking).find("#paypal_return").text());*/
        }
      } else if (have_ticket === 1 && total_price_ticket <= 0) {
        $(closest_booking).find('.save-registrant').prop('disabled', false);
        $(closest_booking).find('.save-registrant').removeClass('eventer-stripe-trigger');
        $(closest_booking).find('.add_services_btn').removeClass('disableClick');
        $(closest_booking).find("form#ticket-reg").attr('action', $(closest_booking).find("#paypal_return").text());
        $(closest_booking).find(".payment-options-area").hide();
        //$(closest_booking).find(".offline_message").hide();
        $(closest_booking).find(".save-registrant").val(single.proceed_register);
        $(closest_booking).find(".save-registrant").attr("data-payment", "");
        $(closest_booking).find('form.ticket-reg').find(".message").empty();
      } else if (have_ticket === 1) {
        $(closest_booking).find('.save-registrant').prop('disabled', false);
        $(closest_booking).find('.add_services_btn').removeClass('disableClick');
        $(closest_booking).find("form#ticket-reg").attr('action', $(closest_booking).find("#paypal_return").text());
        $(closest_booking).find(".payment-options-area").hide();
        //$(closest_booking).find(".offline_message").hide();
        $(closest_booking).find(".save-registrant").val(single.proceed_register);
        $(closest_booking).find(".save-registrant").attr("data-payment", "");
        $(closest_booking).find('form.ticket-reg').find(".message").empty();
      } else {
        $(closest_booking).find('.save-registrant').prop('disabled', true);
        $(closest_booking).find('.add_services_btn').addClass('disableClick');
        $(closest_booking).find("form#ticket-reg").attr('action', $(closest_booking).find("#paypal_return").text());
        $(closest_booking).find(".payment-options-area").hide();
        //$(closest_booking).find(".offline_message").show();
        $(closest_booking).find(".save-registrant").val(single.proceed_register);
        $(closest_booking).find(".save-registrant").attr("data-payment", "");
        $(closest_booking).find('form.ticket-reg').find(".message").empty();
      }
    });

    $(document).on('click', '.remove_from_cart_button', function () {
      var product = $(this).attr('data-product_id');
      $("input:checkbox[name='" + product + "']:checked").each(function () {
        $(this).trigger('change');
      });
      $("input:radio[name='" + product + "']:checked").each(function () {
        $(this).prop('checked', false);
        $(this).trigger('change');
      });
      setTimeout(function () {
        jQuery(document.body).trigger("update_checkout");
        $(".showcoupon").click(function () {
          $(".checkout_coupon").slideToggle();
          return false;
        });
      }, 500);
    });

    $(document).on('change', '.eventer-permission-add-registrants', function () {
      if ($(this).is(':checked')) {
        $(this).closest('.eventer-registrants-row').find('.eventer-removable-field-bypermission').show();
      } else {
        $(this).closest('.eventer-registrants-row').find('.eventer-removable-field-bypermission').hide();
      }
    });

    $(document).on("change", 'input:radio[name="chosen-payment-option"]',
      function () {
        if (this.checked && this.value === '0') {
          $("form#ticket-reg").attr('action', $("#paypal_return").text());
          $('.save-registrant').removeClass('eventer-stripe-trigger');
          $(".offline_message").show();
          $(".eventer_stripe_field").hide();
          $(".save-registrant").val(single.proceed_register);
          $(".save-registrant").attr("data-payment", "");
          $('form.ticket-reg').find(".message").empty();
        } else if (this.checked && this.value === '1') {
          $("form#ticket-reg").attr('action', single.paypal_site);
          $('.save-registrant').removeClass('eventer-stripe-trigger');
          $(".offline_message").hide();
          $(".eventer_stripe_field").hide();
          $(".save-registrant").val(single.paypal_proceed);
          $(".save-registrant").attr("data-payment", "1");
          $('form.ticket-reg').find(".message").empty();
        } else if (this.checked && this.value === '3') {
          $("form#ticket-reg").attr('action', single.dotpay_site);
          $('.save-registrant').removeClass('eventer-stripe-trigger');
          $(".offline_message").hide();
          $(".eventer_stripe_field").hide();
          $(".save-registrant").val(single.dotpay_proceed);
          $(".save-registrant").attr("data-payment", "1");
          $('form.ticket-reg').find(".message").empty();
        } else if (this.checked && this.value === '2') {
          $("form#ticket-reg").attr('action', $("#paypal_return").text());
          $('.save-registrant').addClass('eventer-stripe-trigger');
          $(".offline_message").hide();
          $(".eventer_stripe_field").show();
          $(".save-registrant").val(single.stripe_proceed);
          $(".save-registrant").attr("data-payment", "1");
          $('form.ticket-reg').find(".message").empty();
        }
      }
    );

    $(document).on('click', '.eventer-coupon-validate', function () {
      var coupon_code = $(this).closest('.eventer-row').find('input.eventer-apply-coupon').val();
      var couponField = $(this).closest('.eventer-row').find('input.eventer-apply-coupon');
      $(couponField).on('keydown', function () {
        $(this).parents('.eventer-coupon-module').find('.eventer-coupon-validate').removeClass('eventer-coupon-invalid eventer-coupon-validated');
        $('.eventer-coupon-validate').removeAttr('disabled');
      });
      $.ajax({
        url: single.ajax_url,
        type: 'post',
        dataType: 'json',
        data: {
          action: 'eventer_validate_coupon',
          coupon: coupon_code,
          amount: $('.eventer-ticket-price-total').attr('data-aprice'),
        },
        success: function (response) {
          if (response.validate === '1') {
            $('.eventer-ticket-price-total').attr('data-fprice', response.amount);
            var set_price = (single.curr_position === "postfix") ? response.amount + single.curr : single.curr + response.amount;
            $(".eventer-ticket-price-total").text(set_price);
            $('.eventer-coupon-validate').removeClass('eventer-coupon-invalid');
            $('.eventer-coupon-validate').addClass('eventer-coupon-validated');
            $('.eventer-coupon-validate').attr('disabled', 'disabled');
            if (response.amount <= 0) {
              $('.eventer-payment-options').hide();
              $('.offline_message').hide();
              $("form#ticket-reg").attr('action', $("#paypal_return").text());
              $('.save-registrant').removeClass('eventer-stripe-trigger');
              $(".offline_message").show();
              $(".eventer_stripe_field").hide();
              $(".save-registrant").val(single.proceed_register);
              $(".save-registrant").attr("data-payment", "");
              $('form.ticket-reg').find(".message").empty();
            }
          } else {
            $('.eventer-coupon-validate').removeClass('eventer-coupon-validated');
            $('.eventer-coupon-validate').addClass('eventer-coupon-invalid');
            $('.eventer-coupon-validate').attr('disabled', 'disabled');
          }
        },
      });
      return false;
    });
  });
});