Hotel Raxa Dev 5b1e2453c7 Hotel Raxa - Advanced Booking System Implementation
🏨 Hotel Booking Enhancements:
- Implemented Eagle Booking Advanced Pricing add-on
- Added Booking.com-style rate management system
- Created professional calendar interface for pricing
- Integrated deals and discounts functionality

💰 Advanced Pricing Features:
- Dynamic pricing models (per room, per person, per adult)
- Base rates, adult rates, and child rates management
- Length of stay discounts and early bird deals
- Mobile rates and secret deals implementation
- Seasonal promotions and flash sales

📅 Availability Management:
- Real-time availability tracking
- Stop sell and restriction controls
- Closed to arrival/departure functionality
- Minimum/maximum stay requirements
- Automatic sold-out management

💳 Payment Integration:
- Maintained Redsys payment gateway integration
- Seamless integration with existing Eagle Booking
- No modifications to core Eagle Booking plugin

🛠️ Technical Implementation:
- Custom database tables for advanced pricing
- WordPress hooks and filters integration
- AJAX-powered admin interface
- Data migration from existing Eagle Booking
- Professional calendar view for revenue management

📊 Admin Interface:
- Booking.com-style management dashboard
- Visual rate and availability calendar
- Bulk operations for date ranges
- Statistics and analytics dashboard
- Modal dialogs for quick editing

🔧 Code Quality:
- WordPress coding standards compliance
- Secure database operations with prepared statements
- Proper input validation and sanitization
- Error handling and logging
- Responsive admin interface

🤖 Generated with Claude Code (https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-11 07:43:22 +02:00

1020 lines
40 KiB
JavaScript

/*================================================
* Plugin Name: Eagle Booking
* Version: 1.3.3.2
* Author: Eagle Themes (Jomin Muskaj)
* Author URI: eagle-booking.com
=================================================*/
(function ($) {
"use strict";
/* Document is Raedy */
$(document).ready(function () {
// Re-initialize fixed sidebar
eb_update_fixed_sidebar();
/**
* Format numbers based on options
*/
function number_format (number, decimals, dec_point, thousands_sep) {
decimals = eb_js_settings.eb_decimal_numbers;
dec_point = eb_js_settings.eb_decimal_seperator;
thousands_sep = eb_js_settings.eb_thousands_seperator;
// Strip all characters but numerical ones.
number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
var n = !isFinite(+number) ? 0 : + number,
prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
s = '',
toFixedFix = function (n, prec) {
var k = Math.pow(10, prec);
return '' + Math.round(n * k) / k;
};
// Fix for IE parseFloat(0.55).toFixed(0) = 0;
s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
if (s[0].length > 3) {
s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
}
if ((s[1] || '').length < prec) {
s[1] = s[1] || '';
s[1] += new Array(prec - s[1].length + 1).join('0');
}
return s.join(dec);
}
/**
* Additional Services
* Version: 1.0
*/
function eb_services() {
$('.additional-service-item').on('click', function(event) {
if(!$(event.target).is('.toggle-service-full-details')) {
$(this).toggleClass('selected');
var checkbox = $(this).children('input[type="checkbox"]');
checkbox.prop('checked', !checkbox.prop('checked'));
// Service amount
var service_amount = checkbox.val();
var service_amount_without_tax = checkbox.data('amount');
// Update Additional Prices Total Amount
var services_total_amount = $('#eb_services_amount').val();
var service_id = checkbox.attr("data-id");
var service_title = $(this).find('.eb-booking-service-title').text();
// Service price without taxes and including currency
if ( eb_js_settings.eb_currency_position === 'after' ) {
var service_price = number_format(service_amount_without_tax) + eb_js_settings.eb_currency;
} else {
var service_price = eb_js_settings.eb_currency + number_format(service_amount_without_tax);
}
var new_service_info = $('<div class="item service" data-amount="'+service_amount+'" data-service-id="'+ service_id +'"><span class="desc">' + service_title + '</span><span class="value"><strong>'+ service_price +'</a></strong></span></div>');
var previous_services = $('#eb_additional_services_id');
var previous_services_ids = $(previous_services).val();
var total_services_amount = '';
var total_services_ids = '';
var price_summary = $('.eb-price-summary .room');
// Add Additional Service to Price Summary
if (checkbox.is(":checked")) {
$(new_service_info).insertAfter(price_summary).fadeIn();
} else {
$('.item[data-service-id="'+ service_id +'"]').remove();
}
// Get applied taxes & split
var applied_taxes = $(this).find('input').attr('data-aplied-taxes')+"";
if ( applied_taxes.indexOf(',') != -1 ) {
var applied_taxes = applied_taxes.split(',');
} else {
var applied_taxes = applied_taxes;
}
// Check if services have taxes
if( applied_taxes.length ) {
// Loop all applied taxes (fix: declare it as astring)
for ( var i = 0; i < applied_taxes.length; i++ ) {
// Trim the excess whitespace.
var applied_taxe = applied_taxes[i].replace(/^\s*/, "").replace(/\s*$/, "");
var tax = $('.item[data-tax-id="'+ applied_taxe +'"]');
// Get previous tax amount
var previous_tax_amount = tax.attr('data-amount');
var tax_percentage = tax.data('percentage');
var service_price = $(this).find('input').data('amount');
var service_tax = tax_percentage * service_amount_without_tax / 100;
var service_tax_amount = Math.round( Number(service_tax) );
// On check checkbox
if (checkbox.is(":checked")) {
// Keep The IDs if the selected additional services
total_services_ids = service_id+',' + previous_services_ids;
var services_taxes = +service_tax_amount;
// Add the amount of the clicked service to the total (previous) services amount
total_services_amount = +services_total_amount + service_amount_without_tax;
// Add service tax amount
var total_tax_amount = Number( previous_tax_amount) + Number( service_tax_amount ) ;
} else {
// Remove the amount of the clicked service from the total services amount
total_services_amount = +services_total_amount - +service_amount_without_tax;
total_services_ids = previous_services_ids.replace(service_id+',', "");
// Remove service tax amount to get the previous price
var total_tax_amount = Number(previous_tax_amount) - Number(service_tax_amount);
}
// Update the val of the services total amount
$('#eb_services_amount').val(total_services_amount);
// Updare the services taxes total
$('#eb_services_taxes').val(services_taxes);
// Update the tax amount
tax.find('.value .price-amount').text( number_format( total_tax_amount ) );
tax.attr('data-amount', Number( total_tax_amount ));
}
} else {
// Add Additional Service to Price Summary
if (checkbox.is(":checked")) {
$(new_service_info).insertAfter(price_summary).fadeIn();
total_services_ids = service_id+',' + previous_services_ids;
} else {
$('.item[data-service-id="'+ service_id +'"]').remove();
total_services_ids = previous_services_ids.replace(service_id+',', "");
}
// Update the val of the services total amount
$('#eb_services_amount').val(total_services_amount);
}
// Update the IDs of the selected taxes
$(previous_services).val(total_services_ids);
// Update the total booking price
eb_final_price();
eb_update_fixed_sidebar();
}
});
// Show service full details
$('.toggle-service-full-details').on('click', function() {
$(this).parent().toggleClass('open');
$(this).find('i').toggleClass('fa-question-circle fa-times-circle');
});
}
eb_services();
/**
* Final Price (Including Additional Services, Taxes & Fees)
* Version: 1.0
*/
function eb_final_price() {
var room_amount = parseFloat( $('#eb_room_price').val() );
var services_amount = 0;
var taxes_fees_amount = 0;
// Get the room price
// Sum all selected services amount
$('.service[data-amount]').each(function() {
services_amount += parseFloat ( $(this).attr("data-amount") );
});
// Sum all taxes & fees
$('.taxfee[data-amount]').each(function() {
taxes_fees_amount += parseFloat( $(this).attr("data-amount"));
});
// Total price = room price + services price + taxes & fees price
var total_price = Number ( room_amount + services_amount + taxes_fees_amount );
// Displayed price after format
var displayed_total_price = number_format( total_price );
// Update Text
$('#eb_total_price_text').find('.price-amount').text( displayed_total_price );
// Update Input
$('#eb_booking_price').val( total_price );
}
/**
* Arrival Time Sloter
* Version: 1.0
*/
function eb_arrival_slots() {
$('.eb-panel-dropdown-toggle').on('click', function (event) {
$('.eb-panel-dropdown .eb-panel-dropdown-inner').toggleClass('active');
});
$(window).click(function () {
$('.eb-panel-dropdown .eb-panel-dropdown-inner').removeClass('active');
});
$('.eb-panel-dropdown-toggle').on('click', function (event) {
event.stopPropagation();
});
}
eb_arrival_slots();
/**
* Validate Email Address
* Version: 1.0
*/
function eb_validate_email(email) {
var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);
}
/**
* Validate Phone Number
* Version: 1.0
*/
function eb_validate_phone_number(phone_number) {
var regex = /^([0-9\(\)\/\+ \-]*)$/;
return regex.test(phone_number);
}
/**
* Checkout Tabs
* Version: 1.0
*/
function eb_checkout_tabs() {
// Hide all tabs content
$('.eb-tabs-content .eb-tab-content').hide();
// Add active class to first tab
$('.eb-tab:first').addClass('active');
// Add checked to the active input
$('.eb-tab.active .tab-radio').prop('checked', true);
// Show first tab content \\ Bug it should display the content of active tab
$('.eb-tabs-content .eb-tab-content:first').show();
// On click change active tab
$(".eb-tab").click(function () {
$(this).addClass("active").siblings().removeClass("active");
$(".eb-tabs-content > div").hide();
$('.' + $(this).data("tab")).show();
});
// Show only the active tab on mobile
if ($(window).width() < 768) {
$(".eb-tab").click(function () {
$('.eb-tab').show().css('display: block');
});
}
}
eb_checkout_tabs();
/**
* User Sign In
* Version: 1.0
*/
function eb_user_sign_in() {
// handler to the ajax request
var eb_user_sign_in_xhr = null;
$('#eb_user_sign_in').on('click', function(event) {
var eb_user_sign_in_username = $('#eb_user_sign_in_username');
var eb_user_sign_in_password = $('#eb_user_sign_in_password')
var eb_user_sign_in_username_val = eb_user_sign_in_username.val();
var eb_user_sign_in_password_val = eb_user_sign_in_password.val();
var eb_user_sign_response = $('#eb_user_sign_in_response');
var eb_user_sign_response_text = $('#eb_user_sign_in_response_text');
var eb_user_sign_in_nonce_val = $('#eb_security').val();
var eb_user_sign_in_has_error = false;
// Check if all required fields are empty
eb_user_sign_in_username.add(eb_user_sign_in_password).each( function() {
if( !this.value ) {
eb_user_sign_in_has_error = true;
$(this).addClass("empty");
}
});
if (eb_user_sign_in_has_error == false) {
eb_button_loading(this);
// if there is a previous ajax request, then abort it
if( eb_user_sign_in_xhr != null ) {
eb_user_sign_in_xhr.abort();
eb_user_sign_in_xhr = null;
}
// Start the AJAX request
eb_user_sign_in_xhr = $.ajax({
url: eb_checkout.eb_user_sign_in_ajax,
method: 'GET',
dataType: 'json',
data: {
action: 'eb_user_sign_in_action',
eb_user_sign_in_username: eb_user_sign_in_username_val,
eb_user_sign_in_password: eb_user_sign_in_password_val,
eb_user_sign_in_nonce: eb_user_sign_in_nonce_val,
},
// Success
success: function (eb_user_sign_in_data) {
if (eb_user_sign_in_data.status === 'failed') {
eb_user_sign_response.show();
eb_user_sign_response_text.text(eb_user_sign_in_data.message);
eb_user_sign_response.addClass('eb-alert-error eb-alert-icon');
eb_button_loading(this, 'hide');
} else {
// Re-create nonce after user sign in to be used on sign out
$('#eb_security').val(eb_user_sign_in_data.new_nonce);
// If is the user dashboard login form then redirect it to the user dashboard
if( $('#eb_user_dashboard_signin_form').length ) {
eb_user_sign_response.show();
eb_user_sign_response.removeClass('eb-alert-error eb-alert-icon');
eb_user_sign_response.addClass('eb-alert-success eb-alert-icon');
eb_user_sign_response_text.text(eb_user_sign_in_data.redirect_mssg);
// window.location.reload(true);
document.location.href = eb_user_sign_in_data.redirect_url;
// Booking Page Login Form
} else {
// Hide Billing Tabs on success login
$('#eb_billing_tabs').hide();
// Hide Signin response in case of logout
eb_user_sign_response.hide();
// Show Signed In User Alert
$('#eb_signed_in_user').show();
// Add text to signed in user alert
$('#eb_signed_in_user_text').text(eb_user_sign_in_data.message);
// Add user info into the signed in user form
$('#eb_signed_in_user_first_name').val(eb_user_sign_in_data.firstname);
$('#eb_signed_in_user_last_name').val(eb_user_sign_in_data.lastname);
$('#eb_signed_in_user_email').val(eb_user_sign_in_data.email);
$('#eb_signed_in_user_phone').val(eb_user_sign_in_data.phone);
$('#eb_signed_in_user_country').val(eb_user_sign_in_data.country);
$('#eb_signed_in_user_city').val(eb_user_sign_in_data.city);
$('#eb_signed_in_user_address').val(eb_user_sign_in_data.address);
$('#eb_signed_in_user_zip').val(eb_user_sign_in_data.zip);
}
// Debug
console.log(eb_user_sign_in_data.message);
}
// Debug
console.log(eb_user_sign_in_data.message);
},
error: function () {},
complete: function () {},
});
}
event.preventDefault();
});
}
eb_user_sign_in();
/**
* User Logout
* Version: 1.0
*/
function eb_user_sign_out() {
// handler to the ajax request
var eb_user_sign_out_xhr = null;
$('body').on('click', '#eb_user_sign_out', function(event) {
// Nonce
var eb_logged_in_user_nonce = $('#eb_security').val();
// Start the AJAX request
eb_user_sign_out_xhr = $.ajax({
url: eb_checkout.eb_user_sign_out_ajax,
method: 'GET',
dataType: 'json',
data: {
action: 'eb_user_sign_out_action',
eb_sign_out_nonce: eb_logged_in_user_nonce,
},
// Success
success: function (eb_user_sign_out_data) {
if(eb_user_sign_out_data.status === 'success') {
// Re-create nonce after sign out to be used on sign in
$('#eb_security').val(eb_user_sign_out_data.new_nonce);
// Show Billing Tabs on success log out
$('#eb_billing_tabs').show();
// Hide Signed In Alert
$('#eb_signed_in_user').hide();
eb_button_loading('#eb_user_sign_in', 'hide');
console.log(eb_user_sign_out_data.message);
} else {
console.log(eb_user_sign_out_data.message);
}
eb_update_fixed_sidebar();
},
error: function (eb_user_sign_out_xhr, textStatus, errorThrown) {},
complete: function () {},
});
event.preventDefault();
});
}
eb_user_sign_out();
/**
* User Sign Up
* Version: 1.0
*/
function eb_user_sign_up() {
// handler to the ajax request
var eb_user_sign_up_xhr = null;
$('#eb_user_dashboard_signup_form, #eb_user_signup_booking_form').on('submit', function(event) {
event.preventDefault();
var eb_user_sign_up_username = $('#eb_user_sign_up_username');
var eb_user_sign_up_password = $('#eb_user_sign_up_password');
var eb_user_sign_up_email = $('#eb_user_sign_up_email');
var eb_user_sign_up_terms = $('#eb_user_sign_up_terms');
var eb_user_sign_up_username_val = eb_user_sign_up_username.val();
var eb_user_sign_up_password_val = eb_user_sign_up_password.val();
var eb_user_sign_up_email_val = eb_user_sign_up_email.val();
var eb_user_sign_up_first_name_val = $('#eb_user_sign_up_first_name').val();
var eb_user_sign_up_last_name_val = $('#eb_user_sign_up_last_name').val();
var eb_user_sign_up_response = $('#eb_user_sign_up_response');
var eb_user_sign_up_response_text = $('#eb_user_sign_up_response_text');
if ( typeof eb_user_sign_up_first_name_val === 'undefined') { eb_user_sign_up_first_name_val = '' };
if ( typeof eb_user_sign_up_last_name_val === 'undefined') { eb_user_sign_up_last_name_val = '' };
// Check if any inut is empty
var eb_user_sign_up_has_error = false;
// Check if all required fields are empty
eb_user_sign_up_username.add(eb_user_sign_up_password).add(eb_user_sign_up_email).each( function() {
if( !this.value ) {
eb_user_sign_up_has_error = true;
$(this).addClass("empty");
}
});
// Check if GDPR is checked (only on account signup page)
if ( !eb_user_sign_up_terms.is(':checked') && eb_js_settings.eb_terms_conditions == true && $('#eb_user_dashboard_signup_form').length ) {
eb_user_sign_up_terms.addClass("empty");
eb_user_sign_up_has_error = true;
}
// If there is no any error start the AJAX request
if (eb_user_sign_up_has_error == false) {
eb_button_loading('#eb_user_sign_up');
// if there is a previous ajax request, then abort it
if( eb_user_sign_up_xhr != null ) {
eb_user_sign_up_xhr.abort();
eb_user_sign_up_xhr = null;
}
// Set the data
var data = {
action: 'eb_user_sign_up_action',
eb_user_sign_up_username: eb_user_sign_up_username_val,
eb_user_sign_up_password: eb_user_sign_up_password_val,
eb_user_sign_up_email: eb_user_sign_up_email_val,
eb_user_sign_up_first_name: eb_user_sign_up_first_name_val,
eb_user_sign_up_last_name: eb_user_sign_up_last_name_val,
}
// Start the AJAX request
eb_user_sign_up_xhr = $.ajax({
url: eb_checkout.eb_user_sign_up_ajax,
method: 'GET',
dataType: 'json',
data: data
})
// Always
.always( function (response) { })
// Done
.done( function (response) {
if (response.status === 'failed') {
eb_button_loading('#submit_booking_form', 'hide');
eb_button_loading('#eb_user_sign_up', 'hide');
eb_user_sign_up_response.css("display", "block");
eb_user_sign_up_response_text.text(response.mssg);
eb_user_sign_up_response.addClass('eb-alert-error eb-alert-icon');
} else {
// User Dashboard Signup Redirect to profile details page
if( $('#eb_user_dashboard_signup_form').length ) {
eb_user_sign_up_response.css("display", "block");
eb_user_sign_up_response.removeClass('eb-alert-error');
eb_user_sign_up_response.addClass('eb-alert-success eb-alert-icon');
eb_user_sign_up_response_text.text(response.mssg);
document.location.href = response.redirect_url;
} else {
// If the user has been signed up succesfully then proceed the booking form
$('#eb_booking_form').submit();
}
}
// Console mssg - debug purpose
console.log(response);
})
// Fail
.fail( function (response) {})
}
});
}
eb_user_sign_up();
/**
* Validate & Apply the Coupon Code
* Version: 1.0
*/
function eb_validate_coupon_code() {
// handler to the ajax request
var eb_ajax_coupon_code_xhr = null;
$('#eb_validate_coupon').on('click', function(event) {
var eb_coupon_code = $('#eb_coupon');
var eb_coupon_code_value = eb_coupon_code.val();
var eb_coupon_code_response = $('#eb_coupon_code_response');
var eb_coupon_code_response_text = $('#eb_coupon_code_response_text');
var eb_room_price = $('#eb_booking_price').val();
var eb_trip_price = $('#eb_booking_price').val();
var eb_booking_form_button = $("#submit_booking_form");
var eb_coupon_nonce_val = $('#eb_security').val();
// Check if not empty
if (eb_coupon_code_value != '') {
// Animate Checkout Button
eb_button_loading(this);
// Disable button click
eb_booking_form_button.css('pointer-events','none');
// if there is a previous ajax request, then abort it
if( eb_ajax_coupon_code_xhr != null ) {
eb_ajax_coupon_code_xhr.abort();
eb_ajax_coupon_code_xhr = null;
}
// Start the AJAX request
eb_ajax_coupon_code_xhr = $.ajax({
url: eb_checkout.eb_coupon_code_ajax,
method: 'GET',
dataType: 'json',
data: {
action: 'eb_coupon_code_action',
eb_coupon_code: eb_coupon_code_value,
eb_coupon_nonce: eb_coupon_nonce_val,
},
// Success
success: function (eb_coupon_code_data) {
eb_coupon_code_response.show();
if (eb_coupon_code_data.status === 'failed') {
eb_coupon_code_response_text.text(eb_coupon_code_data.message);
eb_coupon_code_response.addClass('eb-alert-error mb20');
} else {
eb_button_loading('#submit_booking_form');
eb_coupon_code_response_text.text(eb_coupon_code_data.message);
eb_coupon_code_response.addClass('eb-alert-success');
eb_coupon_code_response.removeClass('eb-alert-error mb20');
$('#eb_coupon_code_group').css("display", "none");
$('#eb_total_price_text').before('<div class="item coupon-code-applied">' + eb_js_settings.eb_discount_text + '&nbsp;' + ' <strong> ' + eb_coupon_code_data.coupon_code + '</strong> <span class="value"> ' + eb_coupon_code_data.coupon_percent + '% </span></div>');
var eb_final_room_price = eb_room_price - eb_room_price * eb_coupon_code_data.coupon_percent / 100;
var eb_final_trip_price = eb_trip_price - eb_trip_price * eb_coupon_code_data.coupon_percent / 100;
// Format the price
var eb_final_trip_price = Math.round( eb_final_trip_price );
var eb_final_trip_price_displayed = number_format( eb_final_trip_price );
$("#eb_booking_price").val(eb_final_room_price);
$("#eb_total_price_text .price-amount").text(eb_final_trip_price_displayed);
$("#eb_booking_price").val(eb_final_trip_price);
$('#eb_coupon_value').val(eb_coupon_code_data.coupon_percent);
$('#eb_coupon_code').val(eb_coupon_code_data.coupon_code);
}
// Debug
console.log(eb_coupon_code_data.status);
},
error: function (eb_ajax_coupon_code_xhr, textStatus, errorThrown) {},
complete: function () {
eb_button_loading('#submit_booking_form', 'hide');
eb_button_loading(this, 'hide');
},
});
} else {
eb_coupon_code.addClass("empty");
}
event.preventDefault();
});
}
eb_validate_coupon_code();
/**
* Validate & Submit Booking form
* Version: 1.0
*/
function eb_sumbit_booking_form() {
$("#submit_booking_form").on('click', function (event) {
var eb_checked_tab = $('input[name=eb_billing_tab]:checked').val();
// Main Form Fields
var eb_user_first_name = $('#eb_user_first_name');
var eb_user_last_name = $('#eb_user_last_name');
var eb_user_email = $('#eb_user_email');
var eb_user_phone = $('#eb_user_phone');
var eb_user_country = $('#eb_user_country');
var eb_user_city = $('#eb_user_city');
var eb_user_address = $('#eb_user_address');
var eb_user_zip = $('#eb_user_zip');
var eb_form_terms = $("#eb_terms");
var eb_form_has_error = false;
// Check if tabs are enabled or user is already logged in
if( $('#eb_billing_tabs_content').is(':visible') ) {
if ( eb_checked_tab === 'signin' ) {
// Debug
console.log('Login Form Selected')
// Prevent checkout without login in
eb_form_has_error = true;
} else if ( eb_checked_tab === 'signup' ) {
// Debug
console.log('Signup Form Selected');
// Phone Number
var eb_sign_up_phone_field = document.querySelector('#eb_user_sign_up_phone');
var eb_sign_up_phone_iti = window.intlTelInputGlobals.getInstance(eb_sign_up_phone_field);
var eb_sign_up_phone_number = eb_sign_up_phone_iti.getNumber();
// Get sign up form values
var eb_sign_up_user_name = $("#eb_user_sign_up_username");
var eb_sign_up_first_name = $("#eb_user_sign_up_first_name");
var eb_sign_up_last_name = $("#eb_user_sign_up_last_name");
var eb_sign_up_email = $("#eb_user_sign_up_email");
var eb_sign_up_password = $("#eb_user_sign_up_password");
var eb_sign_up_country = $("#eb_user_sign_up_country");
var eb_sign_up_city = $("#eb_user_sign_up_city");
var eb_sign_up_address = $("#eb_user_sign_up_address");
var eb_sign_up_zip = $("#eb_user_sign_up_zip");
// Check if all required fields are empty
eb_sign_up_user_name.add(eb_sign_up_first_name).add(eb_sign_up_last_name).add(eb_sign_up_email).add(eb_sign_up_phone_field).add(eb_sign_up_password).each( function() {
if( !this.value ) {
eb_form_has_error = true;
$(this).addClass("empty");
}
});
// Validate Email
if ( eb_validate_email( eb_sign_up_email.val() ) == false ) {
eb_form_has_error = true;
eb_sign_up_email.addClass("empty");
}
// Validate Phone Number
if ( eb_validate_phone_number( eb_sign_up_phone_number ) == false ) {
eb_form_has_error = true;
$('#eb_user_sign_up_phone').addClass("empty");
}
// Add sign up values to the main form
eb_user_first_name.val(eb_sign_up_first_name.val());
eb_user_last_name.val(eb_sign_up_last_name.val());
eb_user_email.val(eb_sign_up_email.val());
eb_user_phone.val(eb_sign_up_phone_number);
eb_user_country.val(eb_sign_up_country.val());
eb_user_city.val(eb_sign_up_city.val());
eb_user_address.val(eb_sign_up_address.val());
eb_user_zip.val(eb_sign_up_zip.val());
} else {
// Phone Number
var eb_guest_phone_field = document.querySelector('#eb_guest_phone');
var eb_guest_phone_iti = window.intlTelInputGlobals.getInstance(eb_guest_phone_field);
var eb_guest_phone_number = eb_guest_phone_iti.getNumber();
// Geust (Default)
var eb_guest_first_name = $("#eb_guest_first_name");
var eb_guest_last_name = $("#eb_guest_last_name");
var eb_guest_email = $("#eb_guest_email");
var eb_guest_country = $("#eb_guest_country");
var eb_guest_city = $("#eb_guest_city");
var eb_guest_address = $("#eb_guest_address");
var eb_guest_zip = $("#eb_guest_zip");
// Check if all required fields are empty
eb_guest_first_name.add(eb_guest_last_name).add(eb_guest_email).add(eb_guest_phone_field).each( function() {
if( !this.value ) {
eb_form_has_error = true;
$(this).addClass("empty");
}
});
// Validate Email
if ( eb_validate_email( eb_guest_email.val() ) == false ) {
eb_form_has_error = true;
eb_guest_email.addClass("empty");
}
// Validate Phone Number
if ( eb_validate_phone_number( eb_guest_phone_number ) == false ) {
eb_form_has_error = true;
$('#eb_guest_phone').addClass("empty");
}
// Add guest values to the main form
eb_user_first_name.val(eb_guest_first_name.val());
eb_user_last_name.val(eb_guest_last_name.val());
eb_user_email.val(eb_guest_email.val());
eb_user_phone.val(eb_guest_phone_number);
eb_user_country.val(eb_guest_country.val());
eb_user_city.val(eb_guest_city.val());
eb_user_address.val(eb_guest_address.val());
eb_user_zip.val(eb_guest_zip.val());
// Debug
console.log('Guest Form Selected');
}
// User is logged in
} else {
// Phone Number
var eb_signed_in_user_phone_field = document.querySelector('#eb_signed_in_user_phone');
var eb_signed_in_user_phone_iti = window.intlTelInputGlobals.getInstance(eb_signed_in_user_phone_field);
var eb_signed_in_user_phone_number = eb_signed_in_user_phone_iti.getNumber();
// Get siged in values
var eb_signed_in_user_first_name = $('#eb_signed_in_user_first_name');
var eb_signed_in_user_last_name = $('#eb_signed_in_user_last_name');
var eb_signed_in_user_email = $('#eb_signed_in_user_email');
var eb_signed_in_user_country = $('#eb_signed_in_user_country');
var eb_signed_in_user_city = $('#eb_signed_in_user_city');
var eb_signed_in_user_address = $('#eb_signed_in_user_address');
var eb_signed_in_user_zip = $('#eb_signed_in_user_zip');
// Check if all required fields are empty
eb_signed_in_user_first_name.add(eb_signed_in_user_last_name).add(eb_signed_in_user_email).add(eb_signed_in_user_phone_field).each( function() {
if( !this.value ) {
eb_form_has_error = true;
$(this).addClass("empty");
}
});
// Validate Email
if ( eb_validate_email( eb_signed_in_user_email.val() ) == false ) {
eb_form_has_error = true;
eb_signed_in_user_email.addClass("empty");
}
// Validate Phone Number
if ( eb_validate_phone_number( $('#eb_signed_in_user_phone').val() ) == false ) {
eb_form_has_error = true;
$('#eb_signed_in_user_phone').addClass("empty");
}
// Add signed in values to the main form
eb_user_first_name.val(eb_signed_in_user_first_name.val());
eb_user_last_name.val(eb_signed_in_user_last_name.val());
eb_user_email.val(eb_signed_in_user_email.val());
eb_user_phone.val(eb_signed_in_user_phone_number);
eb_user_country.val(eb_signed_in_user_country.val());
eb_user_city.val(eb_signed_in_user_city.val());
eb_user_address.val(eb_signed_in_user_address.val());
eb_user_zip.val(eb_signed_in_user_zip.val());
}
// Check if GDPR is checked
if (!eb_form_terms.is(':checked') && eb_js_settings.eb_terms_conditions == true) {
eb_form_terms.addClass("empty");
eb_form_has_error = true;
}
// If everything is ok submit form
if ( eb_form_has_error == false ) {
// Submit the signup form only if signup option has been selected
if ( eb_checked_tab === 'signup' ) {
$("#eb_user_signup_booking_form").submit();
} else {
// Submit the booking form if everything is ok
$('#eb_booking_form').submit();
}
eb_button_loading('#submit_booking_form');
} else {
event.preventDefault();
console.log('Error');
// Scroll to first empty field
var element_to_scroll = $('.empty').first();
$('html').animate({
scrollTop: $(element_to_scroll).offset().top - 200
}, 500);
}
})
// Remove 'empty' class on keydown
$('input').on("keydown", function () {
$(this).removeClass("empty");
})
}
eb_sumbit_booking_form();
});
})(jQuery);