PluginProbe
Booking Calendar / 11.8.3
Booking Calendar v11.8.3
11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 10.11 10.11.2 All 203 releases
← All changes | js/client.js +269 -257 11.4.111.8.3 View file →
@@ -1,264 +1,264 @@
1 -
2 -// Hint labels inside of input boxes.
3 -jQuery( document ).ready(
4 - function () {
5 -
6 - jQuery( 'div.inside_hint' ).on(
7 - 'click',
8 - function () {
9 - jQuery( this ).css( 'visibility', 'hidden' ).siblings( '.has-inside-hint' ).trigger( 'focus' ); // FixIn: 8.7.11.12.
10 - }
11 - );
12 -
13 - jQuery( 'input.has-inside-hint' ).on(
14 - 'blur',
15 - function () {
16 - if ( '' === this.value ) {
17 - jQuery( this ).siblings( '.inside_hint' ).css( 'visibility', '' ); // FixIn: 8.7.11.12.
18 - }
19 - }
20 - ).on(
21 - 'focus',
22 - function () {
23 - jQuery( this ).siblings( '.inside_hint' ).css( 'visibility', 'hidden' ); // FixIn: 8.7.11.12.
24 - }
25 - );
26 -
27 - jQuery( '.booking_form_div input[type=button]' ).prop( "disabled", false );
28 - }
29 -);
30 -
31 -
32 -// FixIn: 8.4.0.2.
33 1 /**
34 2 * Check errors in booking form fields, and show warnings if some errors exist.
35 3 * Check errors, like not selected dates or not filled requred form fields, or not correct entering email or phone
36 4 * fields, etc...
37 5 *
38 - * @param bk_type int (ID of booking resource)
6 + * @param resource_id int (ID of booking resource)
39 7 */
40 -function wpbc_check_errors_in_booking_form( bk_type ) {
8 +function wpbc_check_errors_in_booking_form( resource_id ) {
9 + var $form = jQuery( '#booking_form' + resource_id );
10 + var fields_with_errors_arr = [];
11 + var is_error_in_field = false;
12 + var skip_element_types = [ 'hidden', 'button' ];
41 13
42 - var is_error_in_field = false; // By default, all is good - no error.
14 + if ( ! $form.length ) {
15 + return false;
16 + }
43 17
44 - var my_form = jQuery( '#booking_form' + bk_type );
18 + /**
19 + * Show a validation warning and register the related field as invalid.
20 + *
21 + * @param {HTMLElement|null} field Field to focus after validation.
22 + * @param {HTMLElement|jQuery|string} target Warning message target.
23 + * @param {string} message Warning message.
24 + */
25 + function add_validation_error( field, target, message ) {
26 + wpbc_front_end__show_message__warning( target, message, 'text' );
27 + is_error_in_field = true;
45 28
46 - if ( my_form.length ) {
29 + if ( field ) {
30 + fields_with_errors_arr.push( field );
31 + }
32 + }
47 33
48 - var fields_with_errors_arr = [];
34 + /**
35 + * Validate a required field.
36 + *
37 + * @param {HTMLElement} field Form field.
38 + * @param {jQuery} $field Cached jQuery field.
39 + * @param {string} field_type Field type.
40 + */
41 + function validate_required_field( field, $field, field_type ) {
42 + var warning_target;
49 43
50 - // Pseudo-selector that get form elements <input , <textarea , <select, <button...
51 - my_form.find( ':input' ).each( function( index, el ) {
44 + if ( ! $field.hasClass( 'wpdev-validates-as-required' ) ) {
45 + return;
46 + }
52 47
53 - // Skip some elements
54 - var skip_elements = [ 'hidden', 'button' ];
48 + if ( 'checkbox' === field_type ) {
49 + if ( ! $field.is( ':checked' ) && ! jQuery( ':checkbox[name="' + field.name + '"]', $form ).is( ':checked' ) ) {
50 + warning_target = $field.parents( '.wpdev-form-control-wrap' ).last();
55 51
56 - if ( -1 == skip_elements.indexOf( jQuery( el ).attr( 'type' ) ) ){
57 -
58 - if ( '1' === String( jQuery( el ).attr( 'data-wpbc-booking-submit-ignore' ) || '' ) ) {
59 - return true;
52 + if ( ! warning_target.length ) {
53 + warning_target = $field.parents( '.controls' ).last();
60 54 }
55 + if ( ! warning_target.length ) {
56 + warning_target = $field;
57 + }
61 58
62 - // Check Calendar Dates Selection
63 - if ( ( 'date_booking' + bk_type ) == jQuery( el ).attr( 'name' ) ) {
59 + add_validation_error( field, warning_target, _wpbc.get_message( 'message_check_required_for_check_box' ) );
60 + }
61 + return;
62 + }
64 63
65 - // Show Warning only if the calendar visible ( we are at step with calendar)
66 - if (
67 - ( ( jQuery( '#calendar_booking' + bk_type ).is( ':visible' ) ) && ( '' == jQuery( el ).val() ) )
68 - && ( wpbc_get_arr_of_selected_additional_calendars( bk_type ).length == 0 ) // FixIn: 8.5.2.26.
69 - ){ // FixIn: 8.4.4.5.
64 + if ( 'radio' === field_type ) {
65 + if ( ! jQuery( ':radio[name="' + field.name + '"]', $form ).is( ':checked' ) ) {
66 + add_validation_error( field, $field.parents( '.wpdev-form-control-wrap' ), _wpbc.get_message( 'message_check_required_for_radio_box' ) );
67 + }
68 + return;
69 + }
70 70
71 - var notice_message_id = wpbc_front_end__show_message__warning( '#booking_form_div' + bk_type + ' .bk_calendar_frame', _wpbc.get_message( 'message_check_no_selected_dates' ), 'text' );
71 + if ( '' === wpbc_trim( $field.val() ) ) {
72 + add_validation_error( field, field, _wpbc.get_message( 'message_check_required' ) );
73 + }
74 + }
72 75
73 - //wpbc_do_scroll('#calendar_booking' + bk_type); // Scroll to the calendar // FixIn: 8.5.1.3.
74 - is_error_in_field = true; // Error
75 - }
76 - }
76 + /**
77 + * Validate an email field and return its trimmed value.
78 + *
79 + * @param {HTMLElement} field Form field.
80 + * @param {jQuery} $field Cached jQuery field.
81 + * @returns {string}
82 + */
83 + function validate_email_field( field, $field ) {
84 + var email_value = String( $field.val() || '' ).replace( /^\s+|\s+$/gm, '' );
85 + var email_regex = /^([A-Za-z0-9_\-\.\+])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,})$/;
77 86
78 - // Check only visible elements at this step
79 - if ( jQuery( el ).is( ':visible' ) ){
80 -// console.log( '|id, type, val, visible|::', jQuery( el ).attr( 'name' ), '|' + jQuery( el ).attr( 'type' ) + '|', jQuery( el ).val(), jQuery( el ).is( ':visible' ) );
87 + if ( '' !== email_value && ! email_regex.test( email_value ) ) {
88 + add_validation_error( field, field, _wpbc.get_message( 'message_check_email' ) );
89 + }
81 90
82 - // Is Required
83 - if ( jQuery( el ).hasClass( 'wpdev-validates-as-required' ) ){
91 + return email_value;
92 + }
84 93
85 - // Checkboxes
86 - if ( 'checkbox' == jQuery( el ).attr( 'type' ) ){
94 + /**
95 + * Validate a confirmation email field using its same_as_NAME class.
96 + *
97 + * @param {HTMLElement} field Form field.
98 + * @param {string} email_value Trimmed confirmation email value.
99 + */
100 + function validate_confirmation_email_field( field, email_value ) {
101 + var primary_email_match;
102 + var primary_email_name;
103 + var $primary_email_field;
87 104
88 - if (
89 - ( ! jQuery( el ).is( ':checked' ))
90 - && ( ! jQuery( ':checkbox[name="' + el.name + '"]', my_form ).is( ":checked" ) ) // FixIn: 8.5.2.12.
91 - ){
92 - var checkbox_parent_element;
105 + if ( field.className.indexOf( 'same_as_' ) === -1 ) {
106 + return;
107 + }
93 108
94 - if ( jQuery( el ).parents( '.wpdev-form-control-wrap' ).length > 0 ){
109 + primary_email_match = field.className.match( /same_as_([^\s])+/gi );
110 + if ( null === primary_email_match ) {
111 + return;
112 + }
95 113
96 - checkbox_parent_element = jQuery( el ).parents( '.wpdev-form-control-wrap' );
114 + primary_email_name = primary_email_match[ 0 ].substr( 8 );
115 + $primary_email_field = $form.find( '[name="' + primary_email_name + resource_id + '"]' );
97 116
98 - } else if ( jQuery( el ).parents( '.controls' ).length > 0 ){
117 + if ( $primary_email_field.length && $primary_email_field.val() !== email_value ) {
118 + add_validation_error( field, field, _wpbc.get_message( 'message_check_same_email' ) );
119 + }
120 + }
99 121
100 - checkbox_parent_element = jQuery( el ).parents( '.controls' );
122 + /**
123 + * Validate fields using the validate_as_date, validate_as_digit, or validate_digit_N classes.
124 + *
125 + * @param {HTMLElement} field Form field.
126 + * @param {jQuery} $field Cached jQuery field.
127 + */
128 + function validate_custom_field_classes( field, $field ) {
129 + var class_list = $field.attr( 'class' );
130 + var field_value;
101 131
102 - } else {
132 + if ( ! class_list ) {
133 + return;
134 + }
103 135
104 - checkbox_parent_element = jQuery( el );
105 - }
106 - var notice_message_id = wpbc_front_end__show_message__warning( checkbox_parent_element, _wpbc.get_message( 'message_check_required_for_check_box' ), 'text' );
136 + field_value = $field.val();
107 137
108 - fields_with_errors_arr.push( el );
109 - is_error_in_field = true; // Error
110 - }
138 + jQuery.each( class_list.split( /\s+/ ), function ( class_index, class_name ) {
139 + var digits_to_check;
140 + var message;
141 + var validation_regex;
111 142
112 - // Radio boxes
113 - } else if ( 'radio' == jQuery( el ).attr( 'type' ) ){
143 + if ( 'validate_as_date' === class_name ) {
144 + validation_regex = new RegExp( '^[0-3]?\\d{1}[\\/\\.\\-]+[0-3]?\\d{1}[\\/\\.\\-]+[0-2]+\\d{3}$' );
145 + message = _wpbc.get_message( 'message_check_valid_date' ).replace( '{date_example}', '09/25/2018' );
114 146
115 - if ( !jQuery( ':radio[name="' + jQuery( el ).attr( 'name' ) + '"]', my_form ).is( ':checked' ) ){
116 - var notice_message_id = wpbc_front_end__show_message__warning( jQuery( el ).parents('.wpdev-form-control-wrap'), _wpbc.get_message( 'message_check_required_for_radio_box' ), 'text' );
117 - fields_with_errors_arr.push( el );
118 - is_error_in_field = true; // Error
119 - }
147 + if ( '' !== field_value && ! validation_regex.test( field_value ) ) {
148 + add_validation_error( field, field, message );
149 + }
150 + return;
151 + }
120 152
121 - // Other elements
122 - } else {
153 + if ( 'validate_as_digit' === class_name ) {
154 + validation_regex = new RegExp( '^[0-9]+\\.?[0-9]*$' );
123 155
124 - var inp_value = jQuery( el ).val();
156 + if ( '' !== field_value && ! validation_regex.test( field_value ) ) {
157 + add_validation_error( field, field, _wpbc.get_message( 'message_check_digits_only' ) );
158 + }
159 + return;
160 + }
125 161
126 - if ( '' === wpbc_trim( inp_value ) ){ //FixIn: 8.8.1.3 // FixIn: 8.7.11.12.
162 + if ( 'validate_digit_' !== class_name.substring( 0, 15 ) ) {
163 + return;
164 + }
127 165
128 - var notice_message_id = wpbc_front_end__show_message__warning( el, _wpbc.get_message( 'message_check_required' ), 'text' );
166 + digits_to_check = parseInt( class_name.substring( 15 ), 10 );
167 + if ( isNaN( digits_to_check ) ) {
168 + return;
169 + }
129 170
130 - fields_with_errors_arr.push( el );
131 - is_error_in_field = true; // Error
132 - }
133 - }
134 - }
171 + validation_regex = new RegExp( '^\\d{' + digits_to_check + '}$' );
172 + message = _wpbc.get_message( 'message_check_digits_count' ).replace( '{digits}', digits_to_check );
135 173
136 - // Validate Email
137 - if ( jQuery( el ).hasClass( 'wpdev-validates-as-email' ) ){
138 - var inp_value = jQuery( el ).val();
139 - inp_value = inp_value.replace( /^\s+|\s+$/gm, '' ); // Trim white space //FixIn: 5.4.5
140 - var reg = /^([A-Za-z0-9_\-\.\+])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,})$/;
141 - if ( (inp_value != '') && (reg.test( inp_value ) == false) ){
174 + if ( '' !== field_value && ! validation_regex.test( field_value ) ) {
175 + add_validation_error( field, field, message );
176 + }
177 + } );
178 + }
142 179
143 - var notice_message_id = wpbc_front_end__show_message__warning( el, _wpbc.get_message( 'message_check_email' ), 'text' );
144 - fields_with_errors_arr.push( el );
145 - is_error_in_field = true; // Error
146 - }
147 - }
180 + $form.find( ':input' ).each( function () {
181 + var field = this;
182 + var $field = jQuery( field );
183 + var field_type = $field.attr( 'type' );
184 + var email_value;
148 185
186 + if ( -1 !== skip_element_types.indexOf( field_type ) ) {
187 + return;
188 + }
149 189
150 - // Validation Check --- Same Email Field. // FixIn: 11.4.1.1.
151 - if ( jQuery( el ).hasClass( 'wpdev-validates-as-email' ) && (jQuery( el )[0].className.indexOf( 'same_as_' ) !== -1) ) {
190 + if ( '1' === String( $field.attr( 'data-wpbc-booking-submit-ignore' ) || '' ) ) {
191 + return;
192 + }
152 193
153 - // Get the name of Primary Email field from the "same_as_NAME" class.
154 - var primary_email_name = jQuery( el )[0].className.match( /same_as_([^\s])+/gi );
155 - if ( primary_email_name != null ) { // We found.
156 - primary_email_name = primary_email_name[0].substr( 8 );
194 + if (
195 + ( 'date_booking' + resource_id === $field.attr( 'name' ) ) &&
196 + jQuery( '#calendar_booking' + resource_id ).is( ':visible' ) &&
197 + ( '' === $field.val() ) &&
198 + ( 0 === wpbc_get_arr_of_selected_additional_calendars( resource_id ).length )
199 + ) {
200 + add_validation_error(
201 + null,
202 + '#booking_form_div' + resource_id + ' .bk_calendar_frame',
203 + _wpbc.get_message( 'message_check_no_selected_dates' )
204 + );
205 + }
157 206
158 - // Recehck if such primary email field exist in the booking form.
159 - if ( jQuery( '[name="' + primary_email_name + bk_type + '"]' ).length > 0 ) {
207 + if ( ! $field.is( ':visible' ) ) {
208 + return;
209 + }
160 210
161 - // Recheck the values of the both emails, if they do not equla show warning.
162 - if ( jQuery( '[name="' + primary_email_name + bk_type + '"]' ).val() !== inp_value ) {
163 - var notice_message_id = wpbc_front_end__show_message__warning( el, _wpbc.get_message( 'message_check_same_email' ), 'text' );
164 - fields_with_errors_arr.push( el );
165 - is_error_in_field = true; // Error.
166 - }
167 - }
168 - }
169 - }
211 + validate_required_field( field, $field, field_type );
170 212
213 + if ( $field.hasClass( 'wpdev-validates-as-email' ) ) {
214 + email_value = validate_email_field( field, $field );
215 + validate_confirmation_email_field( field, email_value );
216 + }
171 217
172 - // Validate For digit entering - for example for - Phone
173 - // <p>Digit Field:<br />[text* dig_field class:validate_as_digit] </p>
174 - // <p>Phone:<br />[text* phone class:validate_digit_8] </p>
218 + validate_custom_field_classes( field, $field );
219 + } );
175 220
176 - var classList = jQuery( el ).attr( 'class' );
221 + if ( fields_with_errors_arr.length ) {
222 + jQuery( fields_with_errors_arr[ 0 ] ).trigger( 'focus' );
223 + }
177 224
178 - if ( classList ){
225 + return is_error_in_field;
226 +}
179 227
180 - classList = classList.split( /\s+/ );
228 +/**
229 + * Hint labels inside of input boxes.
230 + */
231 +jQuery( document ).ready(
232 + function () {
181 233
182 - jQuery.each( classList, function ( cl_index, cl_item ){
234 + jQuery( 'div.inside_hint' ).on(
235 + 'click',
236 + function () {
237 + jQuery( this ).css( 'visibility', 'hidden' ).siblings( '.has-inside-hint' ).trigger( 'focus' );
238 + }
239 + );
183 240
184 - ////////////////////////////////////////////////////////////////////////////////////////////
185 -
186 - // Validate field value as "Date" [CSS class - 'validate_as_digit']
187 - if ( 'validate_as_date' === cl_item ) {
188 -
189 - // Valid values: 09-25-2018, 09/25/2018, 09-25-2018, 31-9-1918 --- m/d/Y, m.d.Y, m-d-Y, d/m/Y, d.m.Y, d-m-Y
190 - var regex = new RegExp( '^[0-3]?\\d{1}[\\/\\.\\-]+[0-3]?\\d{1}[\\/\\.\\-]+[0-2]+\\d{3}$' ); // Check for Date 09/25/2018
191 - var message_verif_phone = _wpbc.get_message( 'message_check_valid_date' ).replace( '{date_example}', '09/25/2018' );
192 - var inp_value = jQuery( el ).val();
193 -
194 - if ( ( inp_value != '' ) && ( regex.test( inp_value ) == false ) ){
195 - wpbc_front_end__show_message__warning( el, message_verif_phone, 'text' );
196 - fields_with_errors_arr.push( el );
197 - is_error_in_field = true; // Error
198 - }
199 - }
200 -
201 - ////////////////////////////////////////////////////////////////////////////////////////////
202 -
203 - // Validate field value as "DIGIT" [CSS class - 'validate_as_digit']
204 - if ( 'validate_as_digit' === cl_item ) {
205 -
206 - var regex = new RegExp( '^[0-9]+\\.?[0-9]*$' ); // Check for digits
207 - var message_verif_phone = _wpbc.get_message( 'message_check_digits_only' );
208 - var inp_value = jQuery( el ).val();
209 -
210 - if ( ( inp_value != '' ) && ( regex.test( inp_value ) == false ) ){
211 - wpbc_front_end__show_message__warning( el, message_verif_phone, 'text' );
212 - fields_with_errors_arr.push( el );
213 - is_error_in_field = true; // Error
214 - }
215 - }
216 -
217 - ////////////////////////////////////////////////////////////////////////////////////////////
218 -
219 - // Validate field value as "Phone" number or any other valid number wth specific number of digits [CSS class - 'validate_digit_8' || 'validate_digit_10' ]
220 - var is_validate_digit = cl_item.substring( 0, 15 );
221 -
222 - // Check if class start with 'validate_digit_'
223 - if ( 'validate_digit_' === is_validate_digit ){
224 -
225 - // Get number of digit in class: validate_digit_8 => 8 or validate_digit_10 => 10
226 - var digits_to_check = parseInt( cl_item.substring( 15 ) );
227 -
228 - // Check about any errors in
229 - if ( !isNaN( digits_to_check ) ){
230 -
231 - var regex = new RegExp( '^\\d{' + digits_to_check + '}$' ); // We was valid it as parseInt - only integer variable - digits_to_check
232 - var message_verif_phone = _wpbc.get_message( 'message_check_digits_count' ).replace( '{digits}', digits_to_check );
233 - var inp_value = jQuery( el ).val();
234 -
235 - if ( ( inp_value != '' ) && ( regex.test( inp_value ) == false ) ){
236 - wpbc_front_end__show_message__warning( el, message_verif_phone, 'text' );
237 - fields_with_errors_arr.push( el );
238 - is_error_in_field = true; // Error
239 - }
240 - }
241 - }
242 -
243 - ////////////////////////////////////////////////////////////////////////////////////////////
244 -
245 - });
246 - }
247 - }
241 + jQuery( 'input.has-inside-hint' ).on(
242 + 'blur',
243 + function () {
244 + if ( '' === this.value ) {
245 + jQuery( this ).siblings( '.inside_hint' ).css( 'visibility', '' );
246 + }
248 247 }
249 - } );
248 + ).on(
249 + 'focus',
250 + function () {
251 + jQuery( this ).siblings( '.inside_hint' ).css( 'visibility', 'hidden' );
252 + }
253 + );
250 254
251 - if ( fields_with_errors_arr.length > 0 ){
252 - jQuery( fields_with_errors_arr[ 0 ] ).trigger( 'focus' ); // FixIn: 9.3.1.9.
253 - }
255 + jQuery( '.booking_form_div input[type=button]' ).prop( "disabled", false );
254 256 }
257 +);
255 258
256 - return is_error_in_field;
257 -}
259 +// == WIZARD ===========================================================================================================
258 260
259 -
260 -// FixIn: 8.6.1.15.
261 261 /**
262 262 * Go to next specific step in Wizard style booking form, with
263 263 * check all required elements specific step, otherwise show warning message!
264 264 *
@@ -266,8 +266,9 @@
266 266 * @param step_num
267 267 * @returns {boolean}
268 268 */
269 269 function wpbc_wizard_step(el, step_num, step_from) {
270 +
270 271 var br_id = jQuery( el ).closest( 'form' ).find( 'input[name^="bk_type"]' ).val();
271 272
272 273 // FixIn: 8.8.1.5.
273 274 if ( (undefined == step_from) || (step_num > step_from) ) {
@@ -285,9 +286,10 @@
285 286 }
286 287 }
287 288
288 289 if ( br_id != undefined ) {
289 - jQuery( "#booking_form" + br_id + " .wpbc_wizard_step" ).css( { "display": "none" } ).removeClass( 'wpbc_wizard_step_hidden' );
290 + jQuery( "#booking_form" + br_id + " .wpbc_wizard_step" ).css( { "display": "none" } )
291 + .removeClass( 'wpbc_wizard_step_hidden' );
290 292 jQuery( "#booking_form" + br_id + " .wpbc_wizard_step" + step_num ).css( { "display": "block" } );
291 293 return jQuery( "#booking_form" + br_id + " .wpbc_wizard_step" + step_num );
292 294 }
293 295 }
@@ -332,58 +334,63 @@
332 334 }
333 335 );
334 336 }
335 337
336 -// FixIn: 10.1.3.2.
337 -jQuery( document ).ready( function (){
338 - wpbc_hook__init_booking_form_wizard_buttons();
339 -} );
340 338
341 -
342 -// FixIn: 8.6.1.15.
343 339 /**
344 340 * Check if at least one element from array of elements names in booking form visible or not.
345 341 * Usage Example: if ( wpbc_is_some_elements_visible( br_id, ['rangetime', 'durationtime', 'starttime', 'endtime'] )
346 342 * ){ ... }
347 343 *
348 - * @param bk_type
344 + * @param resource_id
349 345 * @param elements_names
350 346 * @returns {boolean}
351 347 */
352 -function wpbc_is_some_elements_visible( bk_type, elements_names ){
348 +function wpbc_is_some_elements_visible(resource_id, elements_names) {
353 349
354 - var is_some_elements_visible = false;
350 + var my_form = jQuery( '#booking_form' + resource_id );
355 351
356 - var my_form = jQuery( '#booking_form' + bk_type );
352 + if ( ! my_form.length ) {
353 + return false;
354 + }
357 355
358 - if ( my_form.length ){
356 + var is_some_elements_visible = false;
357 + // Pseudo-selector that get form elements <input , <textarea , <select, <button...
358 + my_form.find( ':input' ).each(
359 + function (index, el) {
359 360
360 - // Pseudo-selector that get form elements <input , <textarea , <select, <button...
361 - my_form.find( ':input' ).each( function ( index, el ){
361 + // Skip some elements.
362 + var skip_elements = [ 'hidden', 'button' ];
362 363
363 - // Skip some elements
364 - var skip_elements = ['hidden', 'button'];
364 + if ( -1 == skip_elements.indexOf( jQuery( el ).attr( 'type' ) ) ) {
365 365
366 - if ( -1 == skip_elements.indexOf( jQuery( el ).attr( 'type' ) ) ){
366 + for ( var ei = 0; ei < (elements_names.length - 1); ei++ ) {
367 367
368 - for ( var ei = 0; ei < ( elements_names.length - 1) ; ei++ ){
368 + // Check Calendar Dates Selection.
369 + if ( (elements_names[ei] + resource_id) == jQuery( el ).attr( 'name' ) ) {
369 370
370 - // Check Calendar Dates Selection
371 - if ( (elements_names[ ei ] + bk_type) == jQuery( el ).attr( 'name' ) ){
371 + if ( jQuery( el ).is( ':visible' ) ) {
372 + is_some_elements_visible = true;
373 + }
374 + }
375 + }
376 + }
377 + }
378 + );
372 379
373 - if ( jQuery( el ).is( ':visible' ) ){
374 - is_some_elements_visible = true;
375 - }
376 - }
377 - }
378 - }
379 - } );
380 - }
381 - return is_some_elements_visible;
380 + return is_some_elements_visible;
382 381 }
383 382
384 -// == Days Selections - support functions ==============================================================================
385 383
384 +jQuery( document ).ready(
385 + function () {
386 + wpbc_hook__init_booking_form_wizard_buttons();
387 + }
388 +);
389 +
390 +
391 +// == DAYS_SELECTIONS ==================================================================================================
392 +
386 393 /**
387 394 * Get first day of selection
388 395 *
389 396 * @param dates
@@ -420,9 +427,15 @@
420 427 // Single day selection
421 428 return dates; //20.12.2013
422 429 }
423 430
424 -// Get last day of selection
431 +
432 +/**
433 + * Get last day of selection.
434 + *
435 + * @param dates
436 + * @returns {*|string}
437 + */
425 438 function get_last_day_of_selection(dates) {
426 439
427 440 // Multiple days selections
428 441 if ( dates.indexOf(',') != -1 ){
@@ -470,10 +483,8 @@
470 483
471 484 var id_additional_str = document.getElementById( 'additional_calendars' + bk_type ).value;
472 485 var id_additional_arr = id_additional_str.split( ',' );
473 486
474 - var is_all_additional_days_unselected = true;
475 -
476 487 for ( var ia = 0; ia < id_additional_arr.length; ia++ ){
477 488 if ( document.getElementById( 'date_booking' + id_additional_arr[ ia ] ).value != '' ){
478 489 selected_additionl_calendars.push( id_additional_arr[ ia ] );
479 490 }
@@ -481,11 +492,11 @@
481 492 }
482 493 return selected_additionl_calendars;
483 494 }
484 495
485 -// ---------------------------------------------------------------------------------------------------------------------
486 -// Elementor Ready Widget Update.
487 -// ---------------------------------------------------------------------------------------------------------------------
496 +
497 +// == ELEMENTOR Ready Widget Update ====================================================================================
498 +
488 499 jQuery( function ($) {
489 500 // FixIn: 10.14.15.1.
490 501 if ( (window.elementorFrontend) && ('undefined' !== typeof (elementorFrontend.hooks)) ) {
491 502
@@ -501,24 +512,25 @@
501 512 }
502 513 } );
503 514
504 515 // Elementor widget reinit. So we need to reinit all "jQuery( document ).ready( ...) " again with custom 'wpbc_elementor_ready' event.
505 -jQuery( document ).on( 'wpbc_elementor_ready', function () {
516 +jQuery( document ).on(
517 + 'wpbc_elementor_ready',
518 + function () {
506 519
507 - wpbc_hook__init_booking_form_wizard_buttons();
520 + wpbc_hook__init_booking_form_wizard_buttons();
508 521
509 - if ( 'function' === typeof (wpbc_hook__init_timeselector) ) {
510 - wpbc_hook__init_timeselector();
511 - }
522 + if ( 'function' === typeof (wpbc_hook__init_timeselector) ) {
523 + wpbc_hook__init_timeselector();
524 + }
512 525
513 - if ( 'function' === typeof (wpbc_update_capacity_hint) ) {
514 - jQuery( '.booking_form_div' ).on( 'wpbc_booking_date_or_option_selected', function (event, resource_id) {
515 - wpbc_update_capacity_hint( resource_id );
516 - } );
526 + if ( 'function' === typeof (wpbc_update_capacity_hint) ) {
527 + jQuery( '.booking_form_div' ).on(
528 + 'wpbc_booking_date_or_option_selected',
529 + function (event, resource_id) {
530 + wpbc_update_capacity_hint( resource_id );
531 + }
532 + );
533 + }
534 +
517 535 }
518 -
519 - // TODO:
520 - // <?php if ('wpbc_theme_dark_1' === get_bk_option( 'booking_form_theme' ) ){ ?>
521 - // jQuery( '.wpbc_widget_preview_booking_form .wpbc_center_preview,.wpbc_widget_preview_booking_form .wpbc_container.wpbc_container_booking_form,.wpbc_widget_preview_booking_form .wpbc_widget_content' ).addClass( 'wpbc_theme_dark_1' );
522 - // <?php } ?>
523 -
524 -} );
536 +);