1jQuery(document).ready(function($) { 2 3 "use strict"; 4 5 function chauffeur_email_validation(email) { 6 var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; 7 return regex.test(email); 8 } 9 10 function check_booking_time(booking_h,booking_m,booking_date) { 11 12 // Get current date and time and format it 13 var d = new Date(); 14 var curr_date = d.getDate(); 15 var curr_month = d.getMonth() + 1; 16 var curr_year = d.getFullYear(); 17 var curr_hour = d.getHours(); 18 var curr_min = d.getMinutes(); 19 var curr_date_full = curr_year + "/" + curr_month + "/" + curr_date + " " + curr_hour + ":" + curr_min; 20 21 // Detect date format and format current date and time accordingly 22 if ( chauffeur_datepicker_format == 'yy/mm/dd') { 23 var data = booking_date; 24 var arr = data.split('/'); 25 var booking_date_full = arr[0] + "/" + arr[1] + "/" + arr[2] + " " + booking_h + ":" + booking_m; 26 } 27 28 if ( chauffeur_datepicker_format == 'dd/mm/yy') { 29 var data = booking_date; 30 var arr = data.split('/'); 31 var booking_date_full = arr[2] + "/" + arr[1] + "/" + arr[0] + " " + booking_h + ":" + booking_m; 32 } 33 34 if ( chauffeur_datepicker_format == 'mm/dd/yy') { 35 var data = booking_date; 36 var arr = data.split('/'); 37 var booking_date_full = arr[2] + "/" + arr[0] + "/" + arr[1] + " " + booking_h + ":" + booking_m; 38 } 39 40 // Convert strings to dates 41 var startTime = new Date(curr_date_full); 42 var endTime = new Date(booking_date_full); 43 44 // Calculate time difference 45 var difference = endTime.getTime() - startTime.getTime(); 46 var resultInMinutes = Math.round(difference / 60000); 47 48 // Check if enough time notice given 49 if ( resultInMinutes <= hours_before_booking_minimum ) { 50 // Time notice given, can book 51 return true; 52 } else { 53 // Not enough time notice, cannot book 54 return false; 55 } 56 57 } 58 59 // Datepicker 60 $(".datepicker").datepicker({ 61 minDate: 0, 62 dateFormat: chauffeur_datepicker_format 63 }); 64 65 // Set Datepicker value as todays date 66 var todaysDate = $.datepicker.formatDate(chauffeur_datepicker_format, new Date()); 67 $(".datepicker").val(todaysDate); 68 69 // Hide booking form until JS loads 70 $(".header-booking-form-wrapper, .body-booking-form-wrapper, .widget-booking-form-wrapper").fadeIn().css("display","block"); 71 72 // Disable datepicker user input 73 $('.datepicker').keydown(function(e) { 74 e.preventDefault(); 75 return false; 76 }); 77 78 // Load tabs 79 $( "#booking-tabs, #booking-tabs-2" ).tabs(); 80 81 // Add selected vehicle data in hidden fields 82 $(".select-vehicle-wrapper").on('click', '.vehicle-section', function () { 83 84 $('.vehicle-section').removeClass("selected-vehicle"); 85 $(this).toggleClass("selected-vehicle"); 86 $('.selected-vehicle-price').val( $(this).attr('data-price') ); 87 $('.selected-vehicle-name').val( $(this).attr('data-title') ); 88 89 $('.selected-vehicle-bags').val( $(this).attr('data-bags') ); 90 $('.selected-vehicle-passengers').val( $(this).attr('data-passengers') ); 91 92 }); 93 94 // Remove any content on first page load 95 $("#pickup-address1").val(""); 96 $("#dropoff-address1").val(""); 97 $("#pickup-address2").val(""); 98 $("#dropoff-address2").val(""); 99 100 $(document).on('click','#tab1', function(e) { 101 chauffeur_active_tab = 'distance'; 102 }); 103 104 $(document).on('click','#tab2', function(e) { 105 chauffeur_active_tab = 'hourly'; 106 }); 107 108 $(document).on('click','#tab3', function(e) { 109 chauffeur_active_tab = 'flat_rate'; 110 }); 111 112 var pickup_1 = false; 113 var dropoff_1 = false; 114 115 var pickup_2 = false; 116 var dropoff_2 = false;
117 118 function initialize_autosuggest(form_tab) { 119 120 if ( Google_AutoComplete_Country != 'ALL_COUNTRIES' ) { 121 var options = { 122 componentRestrictions: {country: Google_AutoComplete_Country} 123 }; 124 } else { 125 var options = ''; 126 } 127 128 if(form_tab == 'distance') { 129 130 // Pick up address 131 var pickup_input1 = document.getElementById('pickup-address1'); 132 var pickup_autocomplete1 = new google.maps.places.Autocomplete(pickup_input1,options); 133 134 google.maps.event.addListener(pickup_autocomplete1, 'place_changed', function() { 135 var pickup_place1 = pickup_autocomplete1.getPlace(); 136 if (typeof pickup_place1.adr_address==='undefined') { 137 pickup_1 = false; 138 } else { 139 pickup_1 = true; 140 } 141 }); 142 143 // Drop off address 144 var dropoff_input1 = document.getElementById('dropoff-address1'); 145 var dropoff_autocomplete1 = new google.maps.places.Autocomplete(dropoff_input1,options); 146 147 google.maps.event.addListener(dropoff_autocomplete1, 'place_changed', function() { 148 var dropoff_place1 = dropoff_autocomplete1.getPlace(); 149 if (typeof dropoff_place1.adr_address==='undefined') { 150 dropoff_1 = false; 151 } else { 152 dropoff_1 = true; 153 } 154 }); 155 156 } 157 158 if(form_tab == 'hourly') { 159 160 // Pick up address 161 var pickup_input2 = document.getElementById('pickup-address2'); 162 var pickup_autocomplete2 = new google.maps.places.Autocomplete(pickup_input2,options); 163 164 google.maps.event.addListener(pickup_autocomplete2, 'place_changed', function() { 165 var pickup_place2 = pickup_autocomplete2.getPlace(); 166 if (typeof pickup_place2.adr_address==='undefined') { 167 pickup_2 = false; 168 } else { 169 pickup_2 = true; 170 } 171 }); 172 173 // Drop off address 174 var dropoff_input2 = document.getElementById('dropoff-address2'); 175 var dropoff_autocomplete2 = new google.maps.places.Autocomplete(dropoff_input2,options); 176 177 google.maps.event.addListener(dropoff_autocomplete2, 'place_changed', function() { 178 var dropoff_place2 = dropoff_autocomplete2.getPlace(); 179 if (typeof dropoff_place2.adr_address==='undefined') { 180 dropoff_2 = false;
181 } else { 182 dropoff_2 = true; 183 } 184 }); 185 186 } 187 188 } 189 190 if (typeof google != 'undefined') { 191 google.maps.event.addDomListener(window, 'load', initialize_autosuggest('distance')); 192 google.maps.event.addDomListener(window, 'load', initialize_autosuggest('hourly')); 193 } 194 195 $(document).on("click",'.bookingbutton2, .bookingbutton1', function(e) { 196 197 var chauffeur_form_submit = new Array(); 198 199 // Booking step 1 button 200 if( $(".first_booking_step").val() == '1' || $(this).attr("class") == 'bookingbutton2' ) { 201 202 // Validate distance tab form if selected 203 if (chauffeur_active_tab == 'distance') { 204 205 // Google autocomplete validation 206 if ( pickup_1 == false && dropoff_1 == false ) { 207 // Do not submit 208 alert(chauffeur_autocomplete); 209 chauffeur_form_submit.push(false); 210 } else { 211 if ( pickup_1 == dropoff_1 ) { 212 // Submit 213 chauffeur_form_submit.push(true); 214 } else { 215 // Do not submit 216 alert(chauffeur_autocomplete); 217 chauffeur_form_submit.push(false); 218 } 219 } 220 221 // Pick up and drop off address empty validation 222 if ( $("#pickup-address1").val() == '' || $("#dropoff-address1").val() == '' ) { 223 // Do not submit 224 alert(chauffeur_pickup_dropoff_error); 225 chauffeur_form_submit.push(false); 226 } else { 227 // Submit 228 chauffeur_form_submit.push(true); 229 } 230 231 // Minimum notice time validation 232 if ( check_booking_time($(".time-hour1").val(),$(".time-min1").val(),$(".pickup-date1").val()) == true ) { 233 // Do not submit 234 alert(chauffeur_min_time_before_booking_error); 235 chauffeur_form_submit.push(false); 236 } else { 237 // Submit 238 chauffeur_form_submit.push(true); 239 } 240 241 } 242 243 // Validate hourly tab form if selected 244 if (chauffeur_active_tab == 'hourly') { 245 246 // Google autocomplete validation 247 if ( pickup_2 == false && dropoff_2 == false ) { 248 // Do not submit 249 alert(chauffeur_autocomplete); 250 chauffeur_form_submit.push(false); 251 } else { 252 if ( pickup_2 == dropoff_2 ) { 253 // Submit 254 chauffeur_form_submit.push(true); 255 } else { 256 // Do not submit 257 alert(chauffeur_autocomplete); 258 chauffeur_form_submit.push(false); 259 } 260 } 261 262 // Pick up and drop off address empty validation 263 if ( $("#pickup-address2").val() == '' || $("#dropoff-address2").val() == '' ) { 264 // Do not submit 265 alert(chauffeur_pickup_dropoff_error); 266 chauffeur_form_submit.push(false); 267 } else { 268 // Submit 269 chauffeur_form_submit.push(true); 270 } 271 272 // Minimum notice time validation 273 if ( check_booking_time($(".time-hour2").val(),$(".time-min2").val(),$(".pickup-date2").val()) == true ) { 274 // Do not submit 275 alert(chauffeur_min_time_before_booking_error); 276 chauffeur_form_submit.push(false); 277 } else { 278 // Submit 279 chauffeur_form_submit.push(true); 280 } 281 282 // Validate hourly 283 if ( parseInt($('.ch-num-hours').val()) < parseInt(hourly_minimum) ) { 284 // Do not submit 285 alert(ch_minimum_hourly_alert); 286 chauffeur_form_submit.push(false); 287 } else { 288 // Submit 289 chauffeur_form_submit.push(true); 290 } 291 292 } 293 294 // Validate flat rate tab form if selected 295 if (chauffeur_active_tab == 'flat_rate') { 296 297 // Minimum notice time validation 298 if ( check_booking_time($(".time-hour3").val(),$(".time-min3").val(),$(".pickup-date3").val()) == true ) { 299 // Do not submit 300 alert(chauffeur_min_time_before_booking_error); 301 chauffeur_form_submit.push(false); 302 } else { 303 // Submit 304 chauffeur_form_submit.push(true); 305 } 306 307 } 308 309 // Submit 310 if ( $.inArray(false, chauffeur_form_submit) == -1 ) { 311 312 if (chauffeur_active_tab == 'distance') { 313 $("#formOneWay").trigger('submit'); 314 } 315 316 if (chauffeur_active_tab == 'hourly') { 317 $("#formHourly").trigger('submit'); 318 } 319 320 if (chauffeur_active_tab == 'flat_rate') { 321 $("#formFlat").trigger('submit'); 322 } 323 324 } 325 326 } 327 328 // AJAX booking process 329 if( $(this).attr("class") == 'bookingbutton1' ) { 330 331 if ( $(".booking-step-2-form").val() == '1' ) { 332 333 // Validate vehicle selection 334 if ( $(".selected-vehicle-name").val() == '') {
335 // Do not submit 336 alert(chauffeur_select_vehicle); 337 return false; 338 } 339 340 // Validate form fields 341 var ch_validation_error = false; 342 343 $('.required-form-field').each(function() { 344 if ($.trim($(this).val()) == '') { 345 ch_validation_error = true; 346 } 347 }); 348 349 if ( ch_validation_error == true ) { 350 // Do not submit 351 alert(chauffeur_complete_required); 352 chauffeur_form_submit.push(false); 353 } else { 354 // Submit 355 chauffeur_form_submit.push(true); 356 } 357 358 // Email validation 359 if ( chauffeur_email_validation( $(".form-email-address").val() ) == false ) { 360 // Do not submit 361 alert(chauffeur_valid_email); 362 chauffeur_form_submit.push(false); 363 } else { 364 // Submit 365 chauffeur_form_submit.push(true); 366 } 367 368 // Phone number validation 369 if( $.isNumeric($(".form-phone-number").val()) ) { 370 // Submit 371 chauffeur_form_submit.push(true); 372 } else { 373 // Do not submit 374 alert(chauffeur_valid_phone); 375 chauffeur_form_submit.push(false); 376 } 377 378 // Max bags validation 379 if ( Number($(".num-bags").val()) > Number($(".selected-vehicle-bags").val()) ) { 380 // Do not submit 381 alert(chauffeur_valid_bags); 382 chauffeur_form_submit.push(false); 383 } else { 384 // Submit 385 chauffeur_form_submit.push(true); 386 } 387 388 // Max passengers validation 389 if ( Number($(".num-passengers").val()) > Number($(".selected-vehicle-passengers").val()) ) { 390 // Do not submit 391 alert(chauffeur_valid_passengers); 392 chauffeur_form_submit.push(false); 393 } else { 394 // Submit 395 chauffeur_form_submit.push(true); 396 } 397 398 if( chauffeur_terms_set == 'true' ) { 399 400 if( $('.terms_and_conditions').is(':checked') == false ) { 401 alert(chauffeur_terms); 402 return false; 403 } 404 405 } 406 407 } 408 409 // Submit 410 if ( $.inArray(false, chauffeur_form_submit) !== -1 ) { 411 412 // Do not submit 413 414 } else { 415 416 // Submit 417 418 // Add form data into array 419 var $form1 = $(this).closest('.booking-form-1'); 420 var formData1 = $form1.serializeArray(); 421 formData1.push({ 422 name: this.name, 423 value: this.value 424 }); 425 426 // Post form via AJAX 427 $.ajax({ 428 type: 'POST', 429 url: AJAX_URL, 430 data: formData1, 431 dataType: 'json', 432 success: function(response) { 433 434 // Fade divs and add loading image between booking steps 435 $('.widget-booking-form-wrapper, .booking-step-intro, .full-booking-wrapper-3, .select-vehicle-wrapper, .trip-details-wrapper').css('opacity','1'); 436 437 // AJAX success response 438 if (response.status == 'success') { 439 $('.booking-form-1')[0].reset(); 440 } 441 442 // Display outside in divs 443 $('.booking-step-wrapper').html(response.booking_step_wrapper); 444 $('.booking-form-content').html(response.booking_form_content); 445 446 // Load prettyPhoto in response 447 $("a[data-gal^='prettyPhoto']").prettyPhoto(); 448 449 // Scroll to top for each booking step 450 $('html,body').animate({ 451 scrollTop: $(".booking-step-wrapper").offset().top 452 }); 453 454 // Add selected vehicle data in hidden fields 455 $(".select-vehicle-wrapper").on('click', '.vehicle-section', function () { 456 457 $('.vehicle-section').removeClass("selected-vehicle"); 458 $(this).toggleClass("selected-vehicle"); 459 $('.selected-vehicle-price').val( $(this).attr('data-price') ); 460 $('.selected-vehicle-name').val( $(this).attr('data-title') ); 461 462 $('.selected-vehicle-bags').val( $(this).attr('data-bags') ); 463 $('.selected-vehicle-passengers').val( $(this).attr('data-passengers') ); 464 465 }); 466 467 } 468 469 }); 470 471 // Fade divs and add loading image between booking steps 472 $('.widget-booking-form-wrapper, .booking-step-intro, .full-booking-wrapper-3, .select-vehicle-wrapper, .trip-details-wrapper').css('opacity','0.3'); 473 474 } 475 476 } 477 478 }); 479 480});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.