| 1 |
PostNL = { |
| 2 |
/* |
| 3 |
* Init |
| 4 |
* |
| 5 |
* Initialize the PostNL checkout. |
| 6 |
* |
| 7 |
*/ |
| 8 |
data: {}, |
| 9 |
currentLocation: {}, |
| 10 |
|
| 11 |
DELIVERY_MORNING: 'morning', |
| 12 |
DELIVERY_NORMAL: 'standard', |
| 13 |
DELIVERY_EVENING: 'avond', |
| 14 |
DELIVERY_PICKUP: 'retail', |
| 15 |
DELIVERY_PICKUP_EXPRESS: 'retailexpress', |
| 16 |
DELIVERY_SIGNATURE: 0, |
| 17 |
DELIVERY_ONLY_RECIPIENT: 0, |
| 18 |
|
| 19 |
SPLIT_STREET_REGEX: /(.*?)\s?(\d{1,4})[/\s\-]{0,2}([a-zA-Z]{1}\d{1,3}|-\d{1,4}|\d{2}\w{1,2}|[a-zA-Z]{1}[a-zA-Z\s]{0,3})?$/g, |
| 20 |
|
| 21 |
init: function() { |
| 22 |
this.data = JSON.parse(wcmp_config); |
| 23 |
isMobile = jQuery(window).width() < 980; |
| 24 |
|
| 25 |
/* Titles of the options*/ |
| 26 |
if (PostNL.data.textToTranslate.deliveryTitle) { |
| 27 |
jQuery('#post-delivery-title').html(PostNL.data.textToTranslate.deliveryTitle); |
| 28 |
} |
| 29 |
if (PostNL.data.textToTranslate.headerDeliveryOptions) { |
| 30 |
jQuery('#post-delivery-options-title').html(PostNL.data.textToTranslate.headerDeliveryOptions); |
| 31 |
jQuery('#header-delivery-options-title').show(); |
| 32 |
} |
| 33 |
if (PostNL.data.textToTranslate.onlyRecipientTitle) { |
| 34 |
jQuery('#post-only-recipient-title').html(PostNL.data.textToTranslate.onlyRecipientTitle); |
| 35 |
} |
| 36 |
if (PostNL.data.textToTranslate.signatureTitle) { |
| 37 |
jQuery('#post-signature-title').html(PostNL.data.textToTranslate.signatureTitle); |
| 38 |
} |
| 39 |
if (PostNL.data.textToTranslate.pickupTitle) { |
| 40 |
jQuery('#post-pickup-title').html(PostNL.data.textToTranslate.pickupTitle); |
| 41 |
jQuery('.post-pickup-delivery-titel').html(PostNL.data.textToTranslate.pickUpFrom); |
| 42 |
} |
| 43 |
|
| 44 |
/* Prices */ |
| 45 |
var prices = { |
| 46 |
'morning': this.data.config.priceMorningDelivery, |
| 47 |
'evening': this.data.config.priceEveningDelivery, |
| 48 |
'normal': this.data.config.priceNormalDelivery, |
| 49 |
'signature': this.data.config.priceSignature, |
| 50 |
'only-recipient': this.data.config.priceOnlyRecipient, |
| 51 |
'pickup': this.data.config.pricePickup |
| 52 |
}; |
| 53 |
|
| 54 |
PostNL.showPrices(prices); |
| 55 |
PostNL.callDeliveryOptions(); |
| 56 |
|
| 57 |
/* Engage defaults */ |
| 58 |
PostNL.hideDelivery(); |
| 59 |
jQuery('#method-postnl-normal').click(); |
| 60 |
|
| 61 |
PostNL.bind(); |
| 62 |
}, |
| 63 |
|
| 64 |
showPrices: function(prices) { |
| 65 |
jQuery.each(prices, function(selectName, price) { |
| 66 |
jQuery('#post-' + selectName + '-delivery, #post-' + selectName + '-price').html(PostNL.getPriceHtml(price)); |
| 67 |
}); |
| 68 |
}, |
| 69 |
|
| 70 |
getPriceHtml: function(priceOfDeliveryOption) { |
| 71 |
var price; |
| 72 |
|
| 73 |
if (!priceOfDeliveryOption) { |
| 74 |
price = ""; |
| 75 |
} |
| 76 |
|
| 77 |
if (parseFloat(priceOfDeliveryOption) >= 0) { |
| 78 |
price = '+ € ' + Number(priceOfDeliveryOption).toFixed(2).replace(".", ","); |
| 79 |
} |
| 80 |
|
| 81 |
if (parseFloat(priceOfDeliveryOption) < 0) { |
| 82 |
price = "<p class='colorGreen'>"+'- € ' + Number(priceOfDeliveryOption).toFixed(2).replace(/-|\./g,function(match) {return (match==".")?",":""})+"</p>"; |
| 83 |
} |
| 84 |
|
| 85 |
if (priceOfDeliveryOption && isNaN(parseFloat(priceOfDeliveryOption))) { |
| 86 |
price = priceOfDeliveryOption; |
| 87 |
} |
| 88 |
|
| 89 |
return price; |
| 90 |
}, |
| 91 |
|
| 92 |
setCurrentDeliveryOptions: function() { |
| 93 |
if (typeof PostNL.storeDeliveryOptions === 'undefined') { |
| 94 |
console.error('setCurrentDeliveryOptions() PostNL.storeDeliveryOptions === undefined'); |
| 95 |
return; |
| 96 |
} |
| 97 |
|
| 98 |
var selectedDate = jQuery('#post-select-date').val(); |
| 99 |
var selectDateKey = PostNL.storeDeliveryOptions.data.delivery[selectedDate]['time']; |
| 100 |
|
| 101 |
PostNL.hideMorningDelivery(); |
| 102 |
PostNL.hideEveningDelivery(); |
| 103 |
|
| 104 |
jQuery.each(selectDateKey, function(key, value) { |
| 105 |
if (value['price_comment'] == 'morning' && PostNL.data.config.allowMorningDelivery) { |
| 106 |
var morningTitle = PostNL.data.textToTranslate.deliveryMorningTitle; |
| 107 |
PostNL.getDeliveryTime(morningTitle, 'morning', value['start'], value['end']); |
| 108 |
PostNL.showMorningDelivery(); |
| 109 |
} |
| 110 |
|
| 111 |
if (value['price_comment'] == 'standard') { |
| 112 |
var standardTitle = PostNL.data.textToTranslate.deliveryStandardTitle; |
| 113 |
if (PostNL.data.address.cc === 'BE') { |
| 114 |
standardTitle = PostNL.data.textToTranslate.BEdeliveryStandardTitle; |
| 115 |
} |
| 116 |
PostNL.getDeliveryTime(standardTitle, 'standard', value['start'], value['end']); |
| 117 |
} |
| 118 |
if (value['price_comment'] == 'avond' && PostNL.data.config.allowEveningDelivery) { |
| 119 |
var eveningTitle = PostNL.data.textToTranslate.deliveryEveningTitle; |
| 120 |
PostNL.getDeliveryTime(eveningTitle, 'evening', value['start'], value['end']); |
| 121 |
PostNL.showEveningDelivery(); |
| 122 |
} |
| 123 |
}); |
| 124 |
}, |
| 125 |
|
| 126 |
getDeliveryTime: function(configDeliveryTitle, deliveryMoment, startTime, endTime) { |
| 127 |
startTime = startTime.replace(/(.*)\D\d+/, '$1'); |
| 128 |
endTime = endTime.replace(/(.*)\D\d+/, '$1'); |
| 129 |
|
| 130 |
jQuery('#post-' + deliveryMoment + '-title').html(configDeliveryTitle); |
| 131 |
|
| 132 |
if (!configDeliveryTitle) { |
| 133 |
jQuery('#post-' + deliveryMoment + '-title').html(startTime + ' - ' + endTime); |
| 134 |
} |
| 135 |
}, |
| 136 |
|
| 137 |
setCurrentLocation: function() { |
| 138 |
var locationId = jQuery('#post-pickup-location').val(); |
| 139 |
this.currentLocation = this.getPickupByLocationId(PostNL.storeDeliveryOptions.data.pickup, locationId); |
| 140 |
}, |
| 141 |
|
| 142 |
/* |
| 143 |
* Bind |
| 144 |
* |
| 145 |
* Bind actions to selectors. |
| 146 |
* |
| 147 |
*/ |
| 148 |
bind: function() { |
| 149 |
jQuery('#post-submit').on('click', function(e) { |
| 150 |
e.preventDefault(); |
| 151 |
PostNL.exportDeliveryOptionToWebshop(); |
| 152 |
}); |
| 153 |
|
| 154 |
/* show default delivery options and hide PostNL options */ |
| 155 |
jQuery('#post-select-delivery').on('click', function() { |
| 156 |
PostNL.setCurrentDeliveryOptions(); |
| 157 |
PostNL.showDelivery(); |
| 158 |
PostNL.showShippingAddress(); |
| 159 |
PostNL.hidePickUpLocations(); |
| 160 |
}); |
| 161 |
|
| 162 |
/* hide default delivery options and show PostNL options */ |
| 163 |
jQuery('#post-pickup-delivery').on('click', function() { |
| 164 |
PostNL.hideDelivery(); |
| 165 |
PostNL.hideShippingAddress(); |
| 166 |
PostNL.showPickUpLocations(); |
| 167 |
}); |
| 168 |
|
| 169 |
jQuery('#method-postnl-delivery-morning, #method-postnl-delivery-evening').on('click', function() { |
| 170 |
PostNL.defaultCheckCheckbox('post-only-recipient'); |
| 171 |
}); |
| 172 |
|
| 173 |
/* Mobile specific triggers */ |
| 174 |
if (isMobile) { |
| 175 |
jQuery('#post-show-location-details').on('click', function() { |
| 176 |
PostNL.setCurrentLocation(); |
| 177 |
PostNL.showLocationDetails(); |
| 178 |
PostNL.hideDelivery(); |
| 179 |
}); |
| 180 |
} |
| 181 |
|
| 182 |
/* Desktop specific triggers */ |
| 183 |
else { |
| 184 |
jQuery('#post-show-location-details').on('click', function() { |
| 185 |
PostNL.setCurrentLocation(); |
| 186 |
PostNL.showLocationDetails(); |
| 187 |
}); |
| 188 |
} |
| 189 |
|
| 190 |
jQuery('#post-location-details').on('click', function() { |
| 191 |
PostNL.hideLocationDetails(); |
| 192 |
}); |
| 193 |
|
| 194 |
jQuery('#method-postnl-normal').on('click', function() { |
| 195 |
PostNL.defaultCheckCheckbox('method-postnl-normal'); |
| 196 |
}); |
| 197 |
|
| 198 |
// jQuery('#post-pickup-express').hide(); /* todo: move */ |
| 199 |
|
| 200 |
jQuery('#post-pickup-delivery, #post-pickup-location').on('change', function(e) { |
| 201 |
PostNL.setCurrentLocation(); |
| 202 |
PostNL.toggleDeliveryOptions(); |
| 203 |
PostNL.mapExternalWebshopTriggers(); |
| 204 |
}); |
| 205 |
|
| 206 |
jQuery('#post-select-date').on('change', function(e) { |
| 207 |
PostNL.setCurrentDeliveryOptions(); |
| 208 |
PostNL.mapExternalWebshopTriggers(); |
| 209 |
}); |
| 210 |
|
| 211 |
/* External webshop triggers */ |
| 212 |
jQuery('#post-load input, #post-load select').on('click', function() { |
| 213 |
PostNL.mapExternalWebshopTriggers() |
| 214 |
}); |
| 215 |
|
| 216 |
fields = window.postnl_is_using_split_address_fields |
| 217 |
? '#billing_house_number, #shipping_house_number' |
| 218 |
: '#billing_address_1, #shipping_address_1'; |
| 219 |
|
| 220 |
jQuery('#billing_country, #shipping_country, #billing_postcode, #shipping_postcode, ' + fields).on('change', function() { |
| 221 |
PostNL.callDeliveryOptions(); |
| 222 |
}); |
| 223 |
}, |
| 224 |
|
| 225 |
mapExternalWebshopTriggers: function() { |
| 226 |
PostNL.DELIVERY_SIGNATURE = 0; |
| 227 |
PostNL.DELIVERY_ONLY_RECIPIENT = 0; |
| 228 |
PostNL.removeStyleFromPrice(); |
| 229 |
|
| 230 |
/** |
| 231 |
* Morning delivery |
| 232 |
* |
| 233 |
*/ |
| 234 |
if (jQuery('#post-pickup-delivery').prop('checked') === false && jQuery('#method-postnl-delivery-morning').prop('checked')) { |
| 235 |
jQuery('#s_method_postnl_morning').click(); |
| 236 |
PostNL.DELIVERY_ONLY_RECIPIENT = 1; |
| 237 |
PostNL.addStyleToPrice('#post-morning-delivery, #post-only-recipient-price'); |
| 238 |
|
| 239 |
/** |
| 240 |
* Signature |
| 241 |
*/ |
| 242 |
if (jQuery('#post-signature-selector').prop('checked')) { |
| 243 |
jQuery('#s_method_postnl_morning_signature').click(); |
| 244 |
PostNL.DELIVERY_SIGNATURE = 1; |
| 245 |
PostNL.addStyleToPrice('#post-signature-price'); |
| 246 |
} |
| 247 |
|
| 248 |
PostNL.addDeliveryToExternalInput(PostNL.DELIVERY_MORNING); |
| 249 |
return; |
| 250 |
} |
| 251 |
|
| 252 |
/** |
| 253 |
* Normal delivery |
| 254 |
* |
| 255 |
*/ |
| 256 |
if (jQuery('#post-pickup-delivery').prop('checked') === false && jQuery('#method-postnl-normal').prop('checked')) { |
| 257 |
PostNL.addStyleToPrice('#post-normal-delivery'); |
| 258 |
|
| 259 |
/** |
| 260 |
* Signature and only recipient |
| 261 |
*/ |
| 262 |
if (jQuery('#post-signature-selector').prop('checked') && jQuery('#post-only-recipient-selector').prop('checked')) { |
| 263 |
jQuery('#s_method_postnl_delivery_signature_and_only_recipient_fee').click(); |
| 264 |
PostNL.DELIVERY_SIGNATURE = 1; |
| 265 |
PostNL.DELIVERY_ONLY_RECIPIENT = 1; |
| 266 |
PostNL.addStyleToPrice('#post-signature-price, #post-only-recipient-price'); |
| 267 |
} else |
| 268 |
|
| 269 |
/** |
| 270 |
* Signature |
| 271 |
*/ |
| 272 |
if (jQuery('#post-signature-selector').prop('checked')) { |
| 273 |
jQuery('#s_method_postnl_delivery_signature').click(); |
| 274 |
PostNL.DELIVERY_SIGNATURE = 1; |
| 275 |
PostNL.addStyleToPrice('#post-signature-price'); |
| 276 |
|
| 277 |
} else |
| 278 |
|
| 279 |
/** |
| 280 |
* Only recipient |
| 281 |
*/ |
| 282 |
if (jQuery('#post-only-recipient-selector').prop('checked')) { |
| 283 |
jQuery('#s_method_postnl_delivery_only_recipient').click(); |
| 284 |
PostNL.DELIVERY_ONLY_RECIPIENT = 1; |
| 285 |
PostNL.addStyleToPrice('#post-only-recipient-price'); |
| 286 |
|
| 287 |
} else { |
| 288 |
jQuery('#s_method_postnl_flatrate, #s_method_postnl_tablerate').click(); |
| 289 |
} |
| 290 |
|
| 291 |
PostNL.addDeliveryToExternalInput(PostNL.DELIVERY_NORMAL); |
| 292 |
return; |
| 293 |
} |
| 294 |
|
| 295 |
/** |
| 296 |
* Evening delivery |
| 297 |
* |
| 298 |
*/ |
| 299 |
if (jQuery('#post-pickup-delivery').prop('checked') === false && jQuery('#method-postnl-delivery-evening').prop('checked')) { |
| 300 |
jQuery('#s_method_postnl_evening').click(); |
| 301 |
PostNL.DELIVERY_ONLY_RECIPIENT = 1; |
| 302 |
PostNL.addStyleToPrice('#post-evening-delivery, #post-only-recipient-price'); |
| 303 |
|
| 304 |
/** |
| 305 |
* Signature |
| 306 |
*/ |
| 307 |
if (jQuery('#post-signature-selector').prop('checked')) { |
| 308 |
jQuery('#s_method_postnl_evening_signature').click(); |
| 309 |
PostNL.DELIVERY_SIGNATURE = 1; |
| 310 |
PostNL.addStyleToPrice('#post-signature-price'); |
| 311 |
} |
| 312 |
|
| 313 |
PostNL.addDeliveryToExternalInput(PostNL.DELIVERY_EVENING); |
| 314 |
return; |
| 315 |
} |
| 316 |
|
| 317 |
/** |
| 318 |
* Pickup |
| 319 |
* |
| 320 |
*/ |
| 321 |
if (jQuery('#post-pickup-delivery').prop('checked') || jQuery('#post-pickup-selector').prop('checked')) { |
| 322 |
/** |
| 323 |
* Early morning pickup |
| 324 |
*/ |
| 325 |
if (jQuery('#post-pickup-express-selector').prop('checked')) { |
| 326 |
jQuery('#s_method_postnl_pickup_express').click(); |
| 327 |
PostNL.addPickupToExternalInput(PostNL.DELIVERY_PICKUP_EXPRESS); |
| 328 |
PostNL.addStyleToPrice('#post-pickup-express-price'); |
| 329 |
return; |
| 330 |
} else { |
| 331 |
PostNL.addStyleToPrice('#post-pickup-price'); |
| 332 |
} |
| 333 |
|
| 334 |
jQuery('#s_method_postnl_pickup').click(); |
| 335 |
PostNL.addPickupToExternalInput(PostNL.DELIVERY_PICKUP); |
| 336 |
} |
| 337 |
}, |
| 338 |
|
| 339 |
addPickupToExternalInput: function(selectedPriceComment) { |
| 340 |
var locationId = jQuery('#post-pickup-location').val(); |
| 341 |
var currentLocation = PostNL.getPickupByLocationId(PostNL.storeDeliveryOptions.data.pickup, locationId); |
| 342 |
|
| 343 |
var result = jQuery.extend({}, currentLocation); |
| 344 |
|
| 345 |
/* If pickup; convert pickup express to pickup */ |
| 346 |
if (selectedPriceComment === PostNL.DELIVERY_PICKUP) { |
| 347 |
result.price_comment = PostNL.DELIVERY_PICKUP; |
| 348 |
} |
| 349 |
|
| 350 |
jQuery('body').trigger('update_checkout'); |
| 351 |
jQuery('#post-input').val(JSON.stringify(result)); |
| 352 |
}, |
| 353 |
|
| 354 |
addDeliveryToExternalInput: function(deliveryMomentOfDay) { |
| 355 |
var deliveryDateId = jQuery('#post-select-date').val(); |
| 356 |
var currentDeliveryData = PostNL.triggerDefaultOptionDelivery(deliveryDateId, deliveryMomentOfDay); |
| 357 |
|
| 358 |
if (currentDeliveryData !== null) { |
| 359 |
currentDeliveryData.signature = PostNL.DELIVERY_SIGNATURE; |
| 360 |
currentDeliveryData.only_recipient = PostNL.DELIVERY_ONLY_RECIPIENT; |
| 361 |
jQuery('#post-input').val(JSON.stringify(currentDeliveryData)); |
| 362 |
} |
| 363 |
jQuery('body').trigger('update_checkout'); |
| 364 |
}, |
| 365 |
|
| 366 |
addStyleToPrice: function(chosenDelivery) { |
| 367 |
jQuery(chosenDelivery).addClass('post-bold-price'); |
| 368 |
}, |
| 369 |
|
| 370 |
removeStyleFromPrice: function() { |
| 371 |
jQuery('.post-delivery-option-table').find("span").removeClass('post-bold-price'); |
| 372 |
}, |
| 373 |
|
| 374 |
triggerDefaultOptionDelivery: function(deliveryDateId, deliveryMomentOfDay) { |
| 375 |
var dateArray = PostNL.data.deliveryOptions.data.delivery[deliveryDateId]; |
| 376 |
var currentDeliveryData = null; |
| 377 |
|
| 378 |
jQuery.each(dateArray['time'], function(key, value) { |
| 379 |
if (value.price_comment === deliveryMomentOfDay) { |
| 380 |
currentDeliveryData = jQuery.extend({}, dateArray); |
| 381 |
currentDeliveryData['time'] = [value]; |
| 382 |
} |
| 383 |
}); |
| 384 |
|
| 385 |
if (currentDeliveryData === null) { |
| 386 |
jQuery('#post-only-recipient-selector').prop('disabled', false).prop('checked', false); |
| 387 |
jQuery('#method-postnl-normal').prop('checked', true); |
| 388 |
PostNL.mapExternalWebshopTriggers(); |
| 389 |
} |
| 390 |
|
| 391 |
return currentDeliveryData; |
| 392 |
}, |
| 393 |
|
| 394 |
/* |
| 395 |
* defaultCheckCheckbox |
| 396 |
* |
| 397 |
* Check the additional options that are required for certain delivery options |
| 398 |
* |
| 399 |
*/ |
| 400 |
defaultCheckCheckbox: function(selectedOption) { |
| 401 |
if (selectedOption === 'post-only-recipient') { |
| 402 |
jQuery('#post-only-recipient-selector').prop('checked', true).prop({disabled: true}); |
| 403 |
jQuery('#post-only-recipient-price').html('Inclusief'); |
| 404 |
} else { |
| 405 |
jQuery('#post-only-recipient-selector').prop('checked', false).removeAttr("disabled"); |
| 406 |
jQuery('#post-only-recipient-price').html(PostNL.getPriceHtml(this.data.config.priceOnlyRecipient)); |
| 407 |
} |
| 408 |
}, |
| 409 |
|
| 410 |
/* |
| 411 |
* toggleDeliveryOptions |
| 412 |
* |
| 413 |
* Shows and hides the display options that are valid for the recipient only and signature required pre-selectors |
| 414 |
* |
| 415 |
*/ |
| 416 |
toggleDeliveryOptions: function() { |
| 417 |
var isPickup = jQuery('#post-pickup-delivery').is(':checked'); |
| 418 |
jQuery('#post-pickup-selector').prop('checked', true); |
| 419 |
|
| 420 |
if (isPickup && this.currentLocation.price_comment === PostNL.DELIVERY_PICKUP_EXPRESS && this.data.config.allowPickupExpress) { |
| 421 |
jQuery('#post-pickup-express-price').html(PostNL.getPriceHtml(this.data.config.pricePickupExpress)); |
| 422 |
jQuery('#post-pickup-express').show(); |
| 423 |
} else { |
| 424 |
jQuery('#post-pickup-express-selector').attr("checked", false); |
| 425 |
jQuery('#post-pickup-express').hide(); |
| 426 |
} |
| 427 |
}, |
| 428 |
|
| 429 |
/* |
| 430 |
* exportDeliverOptionToWebshop |
| 431 |
* |
| 432 |
* Exports the selected delivery option to the webshop. |
| 433 |
* |
| 434 |
*/ |
| 435 |
exportDeliveryOptionToWebshop: function() { |
| 436 |
var deliveryOption = ""; |
| 437 |
var selected = jQuery("#post-delivery-option-form").find("input[type='radio']:checked"); |
| 438 |
if (selected.length > 0) { |
| 439 |
deliveryOption = selected.val(); |
| 440 |
} |
| 441 |
}, |
| 442 |
|
| 443 |
/* |
| 444 |
* hideMessage |
| 445 |
* |
| 446 |
* Hides pop-up message. |
| 447 |
* |
| 448 |
*/ |
| 449 |
hideMessage: function() { |
| 450 |
jQuery('.post-message-model').hide(); |
| 451 |
jQuery('#post-delivery-option-form').show(); |
| 452 |
}, |
| 453 |
|
| 454 |
/* |
| 455 |
* hideMessage |
| 456 |
* |
| 457 |
* Hides pop-up message. |
| 458 |
* |
| 459 |
*/ |
| 460 |
showMessage: function(message) { |
| 461 |
jQuery('.post-message-model').show(); |
| 462 |
jQuery('#post-message').html(message).show(); |
| 463 |
jQuery('#post-delivery-option-form').hide(); |
| 464 |
|
| 465 |
}, |
| 466 |
|
| 467 |
/* |
| 468 |
* hideDelivery |
| 469 |
* |
| 470 |
* Hides interface part for delivery. |
| 471 |
* |
| 472 |
*/ |
| 473 |
hideDelivery: function() { |
| 474 |
jQuery('#post-delivery-date-text,.post-extra-delivery-options').hide(); |
| 475 |
jQuery('#post-select-date').parent().parent().hide(); |
| 476 |
jQuery('#post-delivery').parent().parent().hide(); |
| 477 |
PostNL.hideSignature(); |
| 478 |
PostNL.hideOnlyRecipient(); |
| 479 |
PostNL.hideMorningDelivery(); |
| 480 |
PostNL.hideEveningDelivery(); |
| 481 |
}, |
| 482 |
|
| 483 |
/* |
| 484 |
* showDelivery |
| 485 |
* |
| 486 |
* Shows interface part for delivery. |
| 487 |
* |
| 488 |
*/ |
| 489 |
showDelivery: function() { |
| 490 |
|
| 491 |
jQuery('#post-delivery').parent().parent().show(); |
| 492 |
|
| 493 |
if (PostNL.data.address.cc === "NL") { |
| 494 |
jQuery('#post-delivery-selectors-' + this.data.address.cc.toLowerCase()).show(); |
| 495 |
jQuery('.post-extra-delivery-options').show(); |
| 496 |
|
| 497 |
if (this.data.config.deliverydaysWindow >= 2) { |
| 498 |
jQuery('#post-delivery-date-select').show(); |
| 499 |
} |
| 500 |
|
| 501 |
PostNL.hideSignature(); |
| 502 |
if (this.data.config.allowSignature) { |
| 503 |
PostNL.showSignature(); |
| 504 |
} |
| 505 |
|
| 506 |
PostNL.hideOnlyRecipient(); |
| 507 |
if (this.data.config.allowOnlyRecipient) { |
| 508 |
PostNL.showOnlyRecipient(); |
| 509 |
} |
| 510 |
} |
| 511 |
|
| 512 |
if (PostNL.data.address.cc === 'BE') { |
| 513 |
jQuery('#post-delivery-title').html(PostNL.data.config.BEdeliveryTitle); |
| 514 |
jQuery('#post-delivery-date-text').hide(); |
| 515 |
} |
| 516 |
}, |
| 517 |
|
| 518 |
hideAllDeliveryOptions: function() { |
| 519 |
jQuery('#post-load').hide(); |
| 520 |
}, |
| 521 |
|
| 522 |
showAllDeliveryOptions: function() { |
| 523 |
jQuery('#post-load').show(); |
| 524 |
}, |
| 525 |
|
| 526 |
/* |
| 527 |
* showSpinner |
| 528 |
* |
| 529 |
* Shows the PostNL spinner. |
| 530 |
* |
| 531 |
*/ |
| 532 |
showSpinner: function() { |
| 533 |
jQuery('#post-delivery-option-form').hide(); |
| 534 |
jQuery('.post-message-model').hide(); |
| 535 |
jQuery('#post-spinner-model').show(); |
| 536 |
}, |
| 537 |
|
| 538 |
/* |
| 539 |
* hideSpinner |
| 540 |
* |
| 541 |
* Hides the PostNL spinner. |
| 542 |
* |
| 543 |
*/ |
| 544 |
hideSpinner: function() { |
| 545 |
jQuery('#post-spinner-model').hide(); |
| 546 |
}, |
| 547 |
|
| 548 |
showMorningDelivery: function() { |
| 549 |
jQuery('#method-postnl-delivery-morning-div').show(); |
| 550 |
}, |
| 551 |
|
| 552 |
hideMorningDelivery: function() { |
| 553 |
jQuery('#method-postnl-delivery-morning-div').hide(); |
| 554 |
}, |
| 555 |
|
| 556 |
showEveningDelivery: function() { |
| 557 |
jQuery('#method-postnl-delivery-evening-div').show(); |
| 558 |
}, |
| 559 |
|
| 560 |
hideEveningDelivery: function() { |
| 561 |
jQuery('#method-postnl-delivery-evening-div').hide(); |
| 562 |
}, |
| 563 |
|
| 564 |
showSignature: function() { |
| 565 |
jQuery('.post-extra-delivery-option-signature, #post-signature-price').show(); |
| 566 |
}, |
| 567 |
|
| 568 |
hideSignature: function() { |
| 569 |
jQuery('.post-extra-delivery-option-signature, #post-signature-price').hide(); |
| 570 |
}, |
| 571 |
|
| 572 |
showOnlyRecipient: function() { |
| 573 |
jQuery('#post-only-recipient, #post-only-recipient-price').parent().show(); |
| 574 |
}, |
| 575 |
|
| 576 |
hideOnlyRecipient: function() { |
| 577 |
jQuery('#post-only-recipient, #post-only-recipient-price').parent().hide(); |
| 578 |
}, |
| 579 |
|
| 580 |
/* |
| 581 |
* dateToString |
| 582 |
* |
| 583 |
* Convert api date string format to human readable string format |
| 584 |
* |
| 585 |
*/ |
| 586 |
dateToString: function(apiDate) { |
| 587 |
var deliveryDate = apiDate; |
| 588 |
var dateArr = deliveryDate.split('-'); |
| 589 |
var dateObj = new Date(dateArr[0], dateArr[1] - 1, dateArr[2]); |
| 590 |
var day = ("0" + (dateObj.getDate())).slice(-2); |
| 591 |
var month = ("0" + (dateObj.getMonth() + 1)).slice(-2); |
| 592 |
|
| 593 |
return this.data.txtWeekDays[dateObj.getDay()] + " " + day + "-" + month + "-" + dateObj.getFullYear(); |
| 594 |
}, |
| 595 |
|
| 596 |
/* |
| 597 |
* showDeliveryDates |
| 598 |
* |
| 599 |
* Show possible delivery dates. |
| 600 |
* |
| 601 |
*/ |
| 602 |
showDeliveryDates: function() { |
| 603 |
var html = ""; |
| 604 |
var deliveryWindow = parseInt(PostNL.data.config.deliverydaysWindow); |
| 605 |
|
| 606 |
jQuery.each(PostNL.data.deliveryOptions.data.delivery, function(key, value) { |
| 607 |
html += '<option value="' + key + '">' + PostNL.dateToString(value.date) + ' </option>\n'; |
| 608 |
}); |
| 609 |
|
| 610 |
/* Hide the day selector when the value of the deliverydaysWindow is 0*/ |
| 611 |
if (deliveryWindow === 0) { |
| 612 |
jQuery('#post-delivery-date-select').hide(); |
| 613 |
} |
| 614 |
|
| 615 |
/* When deliverydaysWindow is 1, hide the day selector and show a div to show the date */ |
| 616 |
if (deliveryWindow === 1) { |
| 617 |
jQuery('#post-select-date').hide(); |
| 618 |
jQuery('#post-delivery-date-text').show(); |
| 619 |
} |
| 620 |
|
| 621 |
/* When deliverydaysWindow > 1, show the day selector */ |
| 622 |
if (deliveryWindow > 1) { |
| 623 |
jQuery('#post-select-date').show(); |
| 624 |
} |
| 625 |
|
| 626 |
jQuery('#post-select-date, #post-date').html(html); |
| 627 |
}, |
| 628 |
|
| 629 |
hideDeliveryDates: function() { |
| 630 |
jQuery('#post-delivery-date-text').parent().hide(); |
| 631 |
}, |
| 632 |
|
| 633 |
/* |
| 634 |
* clearPickupLocations |
| 635 |
* |
| 636 |
* Clear pickup locations and show a non-value option. |
| 637 |
* |
| 638 |
*/ |
| 639 |
clearPickUpLocations: function() { |
| 640 |
var html = '<option value="">---</option>'; |
| 641 |
jQuery('#post-pickup-location').html(html); |
| 642 |
}, |
| 643 |
|
| 644 |
/* |
| 645 |
* hidePickupLocations |
| 646 |
* |
| 647 |
* Hide the pickup location option. |
| 648 |
* |
| 649 |
*/ |
| 650 |
hidePickUpLocations: function() { |
| 651 |
if (!PostNL.data.config.allowPickupPoints) { |
| 652 |
jQuery('#post-pickup-location-selector').hide(); |
| 653 |
} |
| 654 |
|
| 655 |
jQuery('#post-pickup-options, #post-pickup, #post-pickup-express').hide(); |
| 656 |
}, |
| 657 |
|
| 658 |
/* |
| 659 |
* showPickupLocations |
| 660 |
* |
| 661 |
* Shows possible pickup locations, from closest to further. |
| 662 |
* |
| 663 |
*/ |
| 664 |
showPickUpLocations: function() { |
| 665 |
if (false === PostNL.data.config.allowPickupPoints) { |
| 666 |
return; |
| 667 |
} |
| 668 |
|
| 669 |
var html = ""; |
| 670 |
jQuery.each(PostNL.data.deliveryOptions.data.pickup, function(key, value) { |
| 671 |
var distance = parseFloat(Math.round(value.distance) / 1000).toFixed(1); |
| 672 |
html += '<option value="' + value.location_code + '">' + value.location + ', ' + value.street + ' ' + value.number + ", " + value.city + " (" + distance + " km) </option>\n"; |
| 673 |
}); |
| 674 |
jQuery('#post-pickup-location').html(html).prop("checked", true); |
| 675 |
jQuery('#post-pickup-location-selector, #post-pickup-options, #post-pickup').show(); |
| 676 |
}, |
| 677 |
|
| 678 |
/* |
| 679 |
* hideLocationDetails |
| 680 |
* |
| 681 |
* Hide the detailed information pop-up for selected location. |
| 682 |
* |
| 683 |
*/ |
| 684 |
hideLocationDetails: function() { |
| 685 |
jQuery('#post-delivery-option-form').show(); |
| 686 |
jQuery('#post-location-details').hide(); |
| 687 |
}, |
| 688 |
|
| 689 |
/* |
| 690 |
* showLocationDetails |
| 691 |
* |
| 692 |
* Shows the detailed information pop-up for the selected pick-up location. |
| 693 |
*/ |
| 694 |
showLocationDetails: function() { |
| 695 |
var html = ""; |
| 696 |
var locationId = jQuery('#post-pickup-location').val(); |
| 697 |
|
| 698 |
var currentLocation = PostNL.getPickupByLocationId(PostNL.storeDeliveryOptions.data.pickup, locationId); |
| 699 |
var startTime = currentLocation.start_time; |
| 700 |
|
| 701 |
/* Strip seconds if present */ |
| 702 |
if (startTime.length > 5) { |
| 703 |
startTime = startTime.slice(0, -3); |
| 704 |
} |
| 705 |
|
| 706 |
html += '<svg class="svg-inline--fa post-fa-times fa-w-12" aria-hidden="true" data-prefix="fas" data-icon="times" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" data-fa-i2svg=""><path fill="currentColor" d="M323.1 441l53.9-53.9c9.4-9.4 9.4-24.5 0-33.9L279.8 256l97.2-97.2c9.4-9.4 9.4-24.5 0-33.9L323.1 71c-9.4-9.4-24.5-9.4-33.9 0L192 168.2 94.8 71c-9.4-9.4-24.5-9.4-33.9 0L7 124.9c-9.4 9.4-9.4 24.5 0 33.9l97.2 97.2L7 353.2c-9.4 9.4-9.4 24.5 0 33.9L60.9 441c9.4 9.4 24.5 9.4 33.9 0l97.2-97.2 97.2 97.2c9.3 9.3 24.5 9.3 33.9 0z"></path></svg>' |
| 707 |
html += '<span class="post-pickup-location-details-location"><h3>' + currentLocation.location + '</h3></span>'; |
| 708 |
html += '<svg class="post-postnl-logo"version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 99" enable-background="new 0 0 100 99" xml:space="preserve"><image id="postnl-logo" width="100" height="99" xlink:href="data:image/png;base64,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" /></svg>'; |
| 709 |
html += '<span class="post-pickup-location-details-street">' + currentLocation.street + ' ' + this.currentLocation.number + '</span>'; |
| 710 |
html += '<span class="post-pickup-location-details-city">' + currentLocation.postal_code + ' ' + currentLocation.city + '</span>'; |
| 711 |
|
| 712 |
if (currentLocation.phone_number) { |
| 713 |
html += '<span class="post-pickup-location-details-phone">' + currentLocation.phone_number + '</span>'; |
| 714 |
} |
| 715 |
html += '<span class="post-pickup-location-details-time">' + PostNL.data.textToTranslate.pickUpFrom + ': ' + startTime + '</span>'; |
| 716 |
html += '<h3>' + PostNL.data.textToTranslate.openingHours + '</h3>'; |
| 717 |
|
| 718 |
jQuery.each( |
| 719 |
currentLocation.opening_hours, function(weekday, value) { |
| 720 |
html += '<span class="post-pickup-location-details-day">' + PostNL.data.textToTranslate[weekday] + "</span>"; |
| 721 |
|
| 722 |
if (value[0] === undefined) { |
| 723 |
html += '<span class="post-time">' + PostNL.data.textToTranslate.closed + '</span>'; |
| 724 |
} |
| 725 |
|
| 726 |
jQuery.each(value, function(key2, times) { |
| 727 |
html += '<span class="post-time">' + times + "</span>"; |
| 728 |
}); |
| 729 |
html += "<br>"; |
| 730 |
}); |
| 731 |
jQuery('#post-delivery-option-form').hide(); |
| 732 |
jQuery('#post-location-details').html(html).css('display', 'inline-block'); |
| 733 |
}, |
| 734 |
|
| 735 |
/* |
| 736 |
* hideShippingAddress |
| 737 |
* |
| 738 |
* Hide the "ship to different address" section. |
| 739 |
* |
| 740 |
*/ |
| 741 |
hideShippingAddress: function() { |
| 742 |
jQuery('.woocommerce-shipping-fields').hide(); |
| 743 |
}, |
| 744 |
|
| 745 |
/* |
| 746 |
* showShippingAddress |
| 747 |
* |
| 748 |
* Show the "ship to different address" section. |
| 749 |
* |
| 750 |
*/ |
| 751 |
showShippingAddress: function() { |
| 752 |
jQuery('.woocommerce-shipping-fields').show(); |
| 753 |
}, |
| 754 |
|
| 755 |
/* |
| 756 |
* getPickupByLocationId |
| 757 |
* |
| 758 |
* Find the location by id and return the object. |
| 759 |
* |
| 760 |
*/ |
| 761 |
getPickupByLocationId: function(obj, locationId) { |
| 762 |
var object; |
| 763 |
|
| 764 |
jQuery.each(obj, function(key, info) { |
| 765 |
if (info.location_code === locationId) { |
| 766 |
object = info; |
| 767 |
return false; |
| 768 |
} |
| 769 |
}); |
| 770 |
|
| 771 |
return object; |
| 772 |
}, |
| 773 |
|
| 774 |
/* |
| 775 |
* retryPostalCodeHouseNumber |
| 776 |
* |
| 777 |
* After detecting an unrecognised postal code / house number combination the user can try again. |
| 778 |
* This function copies the newly entered data back into the webshop forms. |
| 779 |
* |
| 780 |
*/ |
| 781 |
retryPostalCodeHouseNumber: function() { |
| 782 |
var retryPostalCode = jQuery('#post-error-postcode').val(); |
| 783 |
var retryNumber = jQuery('#post-error-number').val(); |
| 784 |
|
| 785 |
if (window.postnl_is_using_split_address_fields) { |
| 786 |
jQuery('#billing_house_number').val(retryNumber); |
| 787 |
} else { |
| 788 |
address = PostNL.data.address.street + ' ' + retryNumber; |
| 789 |
if (typeof PostNL.data.address.numberSuffix !== 'undefined') { |
| 790 |
address += PostNL.data.address.numberSuffix |
| 791 |
} |
| 792 |
|
| 793 |
jQuery('#billing_address_1').val(address); |
| 794 |
} |
| 795 |
jQuery('#billing_postcode').val(retryPostalCode); |
| 796 |
|
| 797 |
PostNL.callDeliveryOptions(); |
| 798 |
jQuery('#post-select-delivery').click(); |
| 799 |
}, |
| 800 |
|
| 801 |
/* |
| 802 |
* showFallBackDelivery |
| 803 |
* |
| 804 |
* If the API call fails and we have no data about delivery or pick up options |
| 805 |
* show the customer an "As soon as possible" option. |
| 806 |
*/ |
| 807 |
showFallBackDelivery: function() { |
| 808 |
PostNL.hideSpinner(); |
| 809 |
PostNL.hideDelivery(); |
| 810 |
jQuery('#post-select-date, #method-postnl-normal-div, .post-is-pickup-element').hide(); |
| 811 |
jQuery('#post-select-delivery-title').html('Zo snel mogelijk bezorgen'); |
| 812 |
}, |
| 813 |
|
| 814 |
/* |
| 815 |
* showRetry |
| 816 |
* |
| 817 |
* If a customer enters an unrecognised postal code & house number combination show a |
| 818 |
* pop-up so they can try again. |
| 819 |
*/ |
| 820 |
showRetry: function() { |
| 821 |
PostNL.showMessage( |
| 822 |
'<h3>' + PostNL.data.textToTranslate.wrongHouseNumberPostcode + '</h3>' + |
| 823 |
'<div class="post-full-width post-error">' + |
| 824 |
'<label for="post-error-postcode">' + PostNL.data.textToTranslate.postcode + '</label>' + |
| 825 |
'<input type="text" name="post-error-postcode" id="post-error-postcode" value="' + PostNL.data.address.postalCode + '">' + |
| 826 |
'</div><div class="post-full-width post-error">' + |
| 827 |
'<label for="post-error-number">' + PostNL.data.textToTranslate.houseNumber + '</label>' + |
| 828 |
'<input type="text" name="post-error-number" id="post-error-number" value="' + PostNL.data.address.number + '">' + |
| 829 |
'<br><div id="post-error-try-again" class="button btn">' + PostNL.data.textToTranslate.again + '</div>' + |
| 830 |
'</div>' |
| 831 |
); |
| 832 |
|
| 833 |
/* remove trigger that closes message */ |
| 834 |
jQuery('#post-message').off('click'); |
| 835 |
|
| 836 |
/* bind trigger to new button */ |
| 837 |
jQuery('#post-error-try-again').on('click', function() { |
| 838 |
PostNL.retryPostalCodeHouseNumber(); |
| 839 |
}); |
| 840 |
}, |
| 841 |
|
| 842 |
setAddressFromInputFields: function() { |
| 843 |
addressType = jQuery('#ship-to-different-address-checkbox').prop('checked') ? 'shipping' : 'billing'; |
| 844 |
address = PostNL.getAddressInputValues(addressType); |
| 845 |
|
| 846 |
if (!PostNL.getAddressInputValues('billing').postalCode) { |
| 847 |
return; |
| 848 |
} |
| 849 |
|
| 850 |
this.data.address.street = address.streetName; |
| 851 |
this.data.address.number = address.houseNumber; |
| 852 |
this.data.address.numberSuffix = address.houseNumberSuffix; |
| 853 |
this.data.address.cc = address.country; |
| 854 |
this.data.address.postalCode = address.postalCode; |
| 855 |
this.data.address.city = address.city; |
| 856 |
}, |
| 857 |
|
| 858 |
getAddressInputValues: function(type) { |
| 859 |
streetParts = {}; |
| 860 |
input = { |
| 861 |
'fullStreet': jQuery('#' + type + '_address_1').val(), |
| 862 |
'postalCode': jQuery('#' + type + '_postcode').val(), |
| 863 |
'city': jQuery('#' + type + '_city').val(), |
| 864 |
'country': jQuery('#' + type + '_country').val(), |
| 865 |
}; |
| 866 |
|
| 867 |
if (window.postnl_is_using_split_address_fields) { |
| 868 |
input.streetName = jQuery('#' + type + '_street_name').val(); |
| 869 |
input.houseNumber = jQuery('#' + type + '_house_number').val(); |
| 870 |
input.houseNumberSuffix = jQuery('#' + type + '_house_number_suffix').val(); |
| 871 |
} else { |
| 872 |
streetParts = PostNL.splitFullStreetFromInput(input.fullStreet); |
| 873 |
input.streetName = streetParts.streetName; |
| 874 |
input.houseNumber = streetParts.houseNumber; |
| 875 |
input.houseNumberSuffix = streetParts.houseNumberSuffix; |
| 876 |
} |
| 877 |
|
| 878 |
return input; |
| 879 |
}, |
| 880 |
|
| 881 |
/* |
| 882 |
* splitFullStreetFromInput |
| 883 |
* |
| 884 |
* Split full street into parts and returning empty array if there's no street entered |
| 885 |
*/ |
| 886 |
splitFullStreetFromInput: function(fullStreet) { |
| 887 |
result = { |
| 888 |
streetName: '', |
| 889 |
houseNumber: '', |
| 890 |
houseNumberSuffix: '', |
| 891 |
}; |
| 892 |
|
| 893 |
if (fullStreet.length) { |
| 894 |
streetParts = new RegExp(PostNL.SPLIT_STREET_REGEX).exec(fullStreet); |
| 895 |
result.streetName = streetParts[1]; |
| 896 |
result.houseNumber = streetParts[2]; |
| 897 |
result.houseNumberSuffix = streetParts[3]; |
| 898 |
} |
| 899 |
|
| 900 |
return result; |
| 901 |
}, |
| 902 |
|
| 903 |
/* |
| 904 |
* callDeliveryOptions |
| 905 |
* |
| 906 |
* Calls the PostNL API to retrieve the pickup and delivery options for given house number and |
| 907 |
* Postal Code. |
| 908 |
* |
| 909 |
*/ |
| 910 |
callDeliveryOptions: function() { |
| 911 |
PostNL.showSpinner(); |
| 912 |
PostNL.clearPickUpLocations(); |
| 913 |
PostNL.hideDelivery(); |
| 914 |
PostNL.setAddressFromInputFields(); |
| 915 |
|
| 916 |
// Hide PostNL field if there is no address entered |
| 917 |
if (PostNL.data.address.postalCode == '' || PostNL.data.address.number == '') { |
| 918 |
PostNL.hideSpinner(); |
| 919 |
PostNL.showMessage( |
| 920 |
'<h3>' + PostNL.data.textToTranslate.addressNotFound + '</h3>' |
| 921 |
); |
| 922 |
return; |
| 923 |
} |
| 924 |
|
| 925 |
/* Check if the deliverydaysWindow == 0 and hide the select input*/ |
| 926 |
this.deliveryDaysWindow = this.data.config.deliverydaysWindow; |
| 927 |
|
| 928 |
if (this.deliveryDaysWindow === 0) { |
| 929 |
this.deliveryDaysWindow = 1; |
| 930 |
} |
| 931 |
|
| 932 |
/* Make the api request */ |
| 933 |
jQuery.get(this.data.config.apiBaseUrl + "delivery_options", |
| 934 |
{ |
| 935 |
cc: this.data.address.cc, |
| 936 |
postal_code: this.data.address.postalCode.trim(), |
| 937 |
number: this.data.address.number.trim(), |
| 938 |
city: this.data.address.city, |
| 939 |
carrier: this.data.config.carrier, |
| 940 |
dropoff_days: this.data.config.dropOffDays, |
| 941 |
monday_delivery: this.data.config.allowMondayDelivery, |
| 942 |
deliverydays_window: this.deliveryDaysWindow, |
| 943 |
cutoff_time: this.data.config.cutoffTime, |
| 944 |
dropoff_delay: this.data.config.dropoffDelay |
| 945 |
}) |
| 946 |
.done(function(response) { |
| 947 |
PostNL.data.deliveryOptions = response; |
| 948 |
if (response.errors) { |
| 949 |
jQuery.each(response.errors, function(key, value) { |
| 950 |
/* Postal code & house number combination not found or not recognised. */ |
| 951 |
if (value.code == '3212' || value.code == '3505') { |
| 952 |
PostNL.showRetry(); |
| 953 |
} |
| 954 |
|
| 955 |
/* Any other error */ |
| 956 |
else { |
| 957 |
PostNL.showFallBackDelivery(); |
| 958 |
} |
| 959 |
}); |
| 960 |
} |
| 961 |
|
| 962 |
/* No errors */ |
| 963 |
else { |
| 964 |
PostNL.hideMessage(); |
| 965 |
PostNL.showPickUpLocations(); |
| 966 |
PostNL.showDeliveryDates(); |
| 967 |
|
| 968 |
if (PostNL.data.deliveryOptions.data.delivery.length <= 0) { |
| 969 |
PostNL.hideDeliveryDates(); |
| 970 |
} |
| 971 |
PostNL.storeDeliveryOptions = response; |
| 972 |
} |
| 973 |
PostNL.hideSpinner(); |
| 974 |
}) |
| 975 |
.fail(function() { |
| 976 |
PostNL.showFallBackDelivery(); |
| 977 |
}) |
| 978 |
.always(function() { |
| 979 |
jQuery('#post-select-delivery').click(); |
| 980 |
}); |
| 981 |
} |
| 982 |
}; |
| 983 |
// timeout because postcode api might take too long to respond |
| 984 |
setTimeout(function() { |
| 985 |
PostNL.init(); |
| 986 |
}, 2000); |
| 987 |
|