PageSourceSearch

https://www.mondoelettrodomestici.com/modules/onepagecheckoutps/views/js/front/onepagecheckoutps.js

js mondoelettrodomestici.com collected 2026-10-08 23:15:54 UTC 241,727 bytes, 4,883 lines download raw bytes

1/**
2 * We offer the best and most useful modules PrestaShop and modifications for your online store.
3 *
4 * We are experts and professionals in PrestaShop
5 *
6 * NOTICE OF LICENSE
7 *
8 * This file is not open source! Each license that you purchased is only available for 1 wesite only.
9 * If you want to use this file on more websites (or projects), you need to purchase additional licenses.
10 * You are not allowed to redistribute, resell, lease, license, sub-license or offer our resources to any third party.
11 *
12 * @author    PresTeamShop (Registered Trademark) <[email protected]>
13 * @copyright 2011-2022 PresTeamShop
14 * @license   Valid for 1 website (or project) for each purchase of license
15
16 * @category  PrestaShop
17 * @category  Module
18 */
19
20$(function(){
21    AppOPC.init();
22    OPC_External_Validation.init();
23    OPC_Compatibilities.init();
24
25    function toggleIcon(e) {
26        $(e.target)
27            .prev('.panel-heading')
28            .find(".more-less")
29            .toggleClass('fa-pts-angle-down fa-pts-angle-up');
30    }
31    $('#panel_addresses_customer').on('hidden.bs.collapse', toggleIcon);
32    $('#panel_addresses_customer').on('shown.bs.collapse', toggleIcon);
33
34    //$('#checkbox_create_account_guest').trigger('click');
35});
36
37var AppOPC = {
38    $opc: false,
39    $opc_step_one: false,
40    $opc_step_two: false,
41    $opc_step_three: false,
42    $opc_step_review: false,
43    initialized: false,
44    load_offer: true,
45    is_valid_opc: false,
46    is_valid_form_login: false,
47    is_valid_form_customer: false,
48    is_valid_form_address_delivery: false,
49    is_valid_form_address_invoice: false,
50    jqOPC: typeof $jqOPC === typeof undefined ? $ : $jqOPC,
51    m4gpdr: false,
52    init: function(){
53        $(document).on('click', 'button#btn-copy_invoice_address_to_delivery', AppOPC.copyInvoiceAddressToDelivery);
54
55        AppOPC.initialized = true;
56        AppOPC.$opc = $('#onepagecheckoutps');
57        AppOPC.$opc_step_one = $('#onepagecheckoutps div#onepagecheckoutps_step_one');
58        AppOPC.$opc_step_two = $('#onepagecheckoutps div#onepagecheckoutps_step_two');
59        AppOPC.$opc_step_three = $('#onepagecheckoutps div#onepagecheckoutps_step_three');
60        AppOPC.$opc_step_review = $('#onepagecheckoutps div#onepagecheckoutps_step_review');
61
62        if (typeof OnePageCheckoutPS !== typeof undefined)
63        {
64            if (typeof paypal_ec_canceled !== typeof undefined && paypal_ec_canceled) {
65                window.location = orderOpcUrl;
66                return false;
67            }
68
69            if (typeof jeoquery !== typeof undefined) {
70                jeoquery.defaultData.countryCode = OnePageCheckoutPS.iso_code_country_delivery_default;
71                jeoquery.defaultData.lang = OnePageCheckoutPS.LANG_ISO;
72            }
73
74            //Se anade funcionalidad para eliminar espacios vacios de principio y fin de la cadena
75            AppOPC.$opc_step_one.find('input:text, input[type="email"]').on('blur', function(e) {
76                var value       = $(e.currentTarget).val();
77                var new_value   = value.trim();
78
79                $(e.currentTarget).val(new_value);
80            });
81
82            //launch validate fields
83            if (typeof $.formUtils !== typeof undefined && typeof $.validate !== typeof undefined){
84                $.formUtils.loadModules('prestashop.js, security.js, brazil.js', OnePageCheckoutPS.ONEPAGECHECKOUTPS_DIR + 'views/js/lib/form-validator/');
85                $.validate({
86                    form: 'div#onepagecheckoutps #form_login, div#onepagecheckoutps #form_customer, div#onepagecheckoutps #form_address_delivery, div#onepagecheckoutps #form_address_invoice',
87                    validateHiddenInputs: true,
88                    language : messageValidate,
89                    onError: function ($form) {
90                        if ($form.attr('id') == 'form_login') {
91                            AppOPC.is_valid_form_login = false;
92                        } else if ($form.attr('id') == 'form_customer') {
93                            AppOPC.is_valid_form_customer = false;
94                        } else if ($form.attr('id') == 'form_address_delivery') {
95                            AppOPC.is_valid_form_address_delivery = false;
96                        } else if ($form.attr('id') == 'form_address_invoice') {
97                            AppOPC.is_valid_form_address_invoice = false;
98                        }
99                    },
100                    onSuccess: function ($form) {
101                        if ($form.attr('id') == 'form_login') {
102                            AppOPC.is_valid_form_login = true;
103                        } else if ($form.attr('id') == 'form_customer') {
104                            AppOPC.is_valid_form_customer = true;
105                        } else if ($form.attr('id') == 'form_address_delivery') {
106                            AppOPC.is_valid_form_address_delivery = true;
107                        } else if ($form.attr('id') == 'form_address_invoice') {
108                            AppOPC.is_valid_form_address_invoice = true;
109                        }
110
111                        return false;
112                    }
113                });
114            }
115
116            $(OnePageCheckoutPS.CONFIGS.OPC_ID_CONTENT_PAGE)
117                .css({
118                    margin: 0
119                })
120                .addClass('opc_center_column ' + AppOPC.$opc.find('#rc_page').val())
121                .removeClass('col-sm-push-3');
122
123            Address.launch();
124            Fronted.launch();
125            if (!OnePageCheckoutPS.REGISTER_CUSTOMER)
126            {
127                $(OnePageCheckoutPS.CONFIGS.OPC_ID_CONTENT_PAGE).css({width: '100%'});
128
129                Carrier.launch();
130                PaymentPTS.launch();
131                Review.launch();
132            }
133
134            if (typeof $.fn.datepicker !== typeof undefined) {
135                AppOPC.$opc_step_one.find('input[data-validation*="isBirthDate"], input[data-validation*="isDate"]').datepicker({
136                    dateFormat: OnePageCheckoutPS.date_format_language,
137                    //cuando necesita des-habilitar dias anteriores al actual
138                    //minDate: 0,
139                    changeMonth: true,
140                    changeYear: true,
141                    showButtonPanel: true,
142                    yearRange: '-100:+0',
143                    isRTL: OnePageCheckoutPS.IS_RTL
144                });
145            }
146        }else{
147            //redirect to checkout if have he option OPC_REDIRECT_DIRECTLY_TO_OPC actived
148            if ($('a.standard-checkout, .cart_navigation .btn.pull-right, .cart_navigation .btnsns.pull-right, a.proceso_compra').length > 0) {
149                $('a.standard-checkout, .cart_navigation .btn.pull-right, .cart_navigation .btnsns.pull-right, a.proceso_compra').attr('href', baseDir + 'index.php?controller=order-opc&checkout=1');
150            } else if($('button.btn-continue').length > 0) {
151                $('button.btn-continue').attr('onclick', 'window.location=\''+baseDir + 'index.php?controller=order-opc&checkout=1\'');
152            }
153
154            $('form#voucher').attr('action', baseDir + 'index.php?controller=order-opc');
155
156            var href_delete_voucher = $('a.price_discount_delete').attr('href');
157            if (typeof(href_delete_voucher) != 'undefined'){
158                href_delete_voucher = href_delete_voucher.split('?');
159                $('a.price_discount_delete').attr('href', baseDir + 'index.php?controller=order-opc&' + href_delete_voucher[1]);
160            }
161
162            //solo funciona con el forzar visualizacion del PS Checkout.
163            if (typeof window.ps_checkout !== typeof undefined) {
164                var initPsCheckout = setTimeout(function() {
165                    if (typeof window.ps_checkout.renderCheckout !== typeof undefined) {
166                        window.ps_checkout.renderCheckout();
167
168                        clearTimeout(initPsCheckout);
169                    }
170                }, 1000);
171            }
172        }
173    },
174    copyInvoiceAddressToDelivery: function() {
175        var $invoice_fields = $('#panel_address_invoice #form_address_invoice').find('.invoice');
176        var $form_delivery = $('#panel_address_delivery #form_address_delivery');
177
178        $.each($invoice_fields, function(i, elem) {
179            var field_name  = $(elem).data('field-name');
180            var value       = $(elem).val();
181
182            if (field_name != 'id' && $form_delivery.find('[data-field-name="'+field_name+'"]').length > 0) {
183                $form_delivery.find('[data-field-name="'+field_name+'"]').val(value);
184            }
185        });
186    }
187}
188
189var Fronted = {
190    launch: function(){
191        $('div#onepagecheckoutps #opc_show_login').click(function(){
192            Fronted.showModal({type:'normal', title:$('#opc_login').attr('title'), title_icon:'fa-pts-user', content:$('#opc_login')});
193        });
194
195        AppOPC.$opc.find('#opc_login').on('click', '#btn_login', Fronted.loginCustomer);
196
197        AppOPC.$opc.on('click', '#btn_continue_shopping', function(){
198            var link = AppOPC.$opc.find('#btn_continue_shopping').attr('data-link');
199            if (typeof link === typeof undefined) {
200                link = baseDir;
201            }
202            window.location = link;
203        });
204
205        AppOPC.$opc.find('#opc_login #txt_login_password').keypress(function(e){
206            var code = (e.keyCode ? e.keyCode : e.which);
207
208            if (code == 13)
209                Fronted.loginCustomer();
210        });
211
212        //evita el guest checkout cuando solo quiere registrarse o iniciar sesion "rc=1".
213        if (AppOPC.$opc_step_review.length <= 0) {
214            var $create_account_guest = AppOPC.$opc_step_one.find('#field_customer_checkbox_create_account_guest');
215            if ($create_account_guest.length > 0) {
216                $create_account_guest.hide();
217
218                if (!$create_account_guest.find('#checkbox_create_account_guest').is(':checked')) {
219                    $create_account_guest.find('#checkbox_create_account_guest').trigger('click');
220                }
221            }
222        }
223
224        //support module: psrecaptcha - v1.1.3 - PrestaShop
225        //-------------------------------------------------
226        if (typeof recaptchaRegistrationForm !== typeof undefined && recaptchaRegistrationForm == "1" && typeof elementRecaptcha !== typeof undefined && !OnePageCheckoutPS.IS_LOGGED) {
227            if ($('#onepagecheckoutps_step_one #form_customer').length) {
228                $('#onepagecheckoutps_step_one #form_customer').append(elementRecaptcha);
229                $('#onepagecheckoutps_step_one #form_customer .g-recaptcha')
230                    .first()
231                    .attr('id', 'recaptchaRegistrationForm')
232                    .css({
233                        "margin-bottom": "15px",
234                        "display": "inherit !important",
235                    });
236            }
237        }
238        if (typeof recaptchaLoginForm !== typeof undefined && recaptchaLoginForm == "1" && !OnePageCheckoutPS.IS_LOGGED) {
239            $('#opc_login #form_login #btn_login').before(elementRecaptcha);
240            $('#opc_login #form_login .g-recaptcha')
241                .first()
242                .attr('id', 'recaptchaOnePageCheckoutLoginForm')
243                .css({
244                    "margin-bottom": "15px",
245                    "display": "inherit !important",
246                });
247        }
248        if (typeof executeRecaptcha !== typeof undefined && typeof grecaptcha !== typeof undefined) {
249            setTimeout(function () {
250                grecaptcha.execute();
251            }, 600);
252        }
253        //-------------------------------------------------
254
255        //evita copiar, pegar y cortar en los campos de confirmacion.
256        /*AppOPC.$opc_step_one.find('#customer_conf_email, #customer_conf_passwd').bind("cut copy paste", function(e) {
257            e.preventDefault();
258        });*/
259    },
260    openCMS: function(params){
261        var param = $.extend({}, {
262            id_cms: ''
263        }, params);
264
265        var data = {
266            url_call: orderOpcUrl + '?rand=' + new Date().getTime(),
267            is_ajax: true,
268            dataType: 'html',
269            action: 'loadCMS',
270            id_cms: param.id_cms
271        };
272
273        var _json = {
274            data: data,
275            beforeSend: function() {
276                Fronted.loadingBig(true);
277            },
278            success: function(html) {
279                if (!$.isEmpty(html)){
280                    Fronted.showModal({name: 'cms_modal', content: html});
281                }
282            },
283            complete: function(){
284                Fronted.loadingBig(false);
285            }
286        };
287        $.makeRequest(_json);
288    },
289    loading: function(show, selector){
290        if (show) {
291            Fronted.loadingBig(true);
292        }
293    },
294    loadingBig: function(show){
295        if (show && !AppOPC.$opc.find('> .row').hasClass('.opc_overlay')) {
296            AppOPC.$opc.find('> .row').addClass('opc_overlay');
297
298            if ($(window).width() >= 1024) {
299                AppOPC.$opc.find('.loading_big').show();
300            } else {
301                $('div#opc_loading').remove();
302                $('body').append('<div id="opc_loading">'+OnePageCheckoutPS.Msg.processing_purchase+'<i class="fa-pts fa-pts-spin fa-pts-refresh"></i></div>');
303            }
304        } else {
305            AppOPC.$opc.find('> .row').removeClass('opc_overlay');
306
307            if ($(window).width() >= 1024) {
308                AppOPC.$opc.find('.loading_big').hide();
309            } else {
310                $('div#opc_loading').remove();
311            }
312        }
313    },
314    showModal: function(params){
315        var param = $.extend({}, {
316            name: 'opc_modal',
317            type: 'normal',
318            title: '',
319            title_icon: '',
320            message: '',
321            content: '',
322            close: true,
323            button_ok: false,
324            button_close: false,
325            button_close_text: OnePageCheckoutPS.Msg.close,
326            size: '',
327            callback: '',
328            callback_ok: '',
329            callback_close: ''
330        }, params);
331
332        $('#'+param.name).remove();
333
334        //var windows_width = $(window).width();
335
336        var parent_content = '';
337        if (typeof param.content === 'object'){
338            parent_content = param.content.parent();
339        }
340
341        var $modal = $('<div/>').attr({id:param.name, 'class':'modal fade', role:'dialog'});
342        var $modal_dialog = $('<div/>').attr({'class':'modal-dialog ' + param.size});
343        var $modal_header = $('<div/>').attr({'class':'modal-header'});
344        var $modal_content = $('<div/>').attr({'class':'modal-content'});
345        var $modal_body = $('<div/>').attr({'class':'modal-body'});
346        var $modal_footer = $('<div/>').attr({'class':'modal-footer'});
347        var $modal_button_close = $('<button/>')
348                .attr({type:'button', 'class':'close'})
349                .click(function(){
350                    $('#'+param.name).modal('hide');
351                })
352                .append('<i class="fa-pts fa-pts-close"></i>');
353        var $modal_button_ok_footer = $('<button/>')
354            .attr({type:'button', 'class':'btn btn-primary'})
355            .click(function(){
356                if (typeof param.callback_ok !== typeof undefined && typeof param.callback_ok === 'function') {
357                    if (!param.callback_ok()) {
358                        return false;
359                    }
360                    $('#'+param.name).modal('hide');
361                }
362            })
363            .append('OK');
364        var $modal_button_close_footer = $('<button/>')
365            .attr({type:'button', 'class':'btn btn-default'})
366            .click(function(){
367                $('#'+param.name).modal('hide');
368            })
369            .append(param.button_close_text);
370        var $modal_title = '';
371
372        if (typeof param.message === 'array'){
373            var message_html = '';
374            $.each(param.message, function(i, message){
375                message_html += '- ' + message + '<br/>';
376            });
377            param.message =  message_html;
378        }
379
380        if (param.type == 'error'){
381            $modal_title = $('<span/>')
382                .attr({'class':'panel-title'})
383                .append(param.close ? $modal_button_close : '')
384                .append('<i class="fa-pts fa-pts-times-circle fa-pts-2x" style="color:red"></i>')
385                .append(param.message);
386        }else if (param.type == 'warning'){
387            $modal_title = $('<span/>')
388                .attr({'class':'panel-title'})
389                .append(param.close ? $modal_button_close : '')
390                .append('<i class="fa-pts fa-pts-warning fa-pts-2x" style="color:orange"></i>')
391                .append(param.message);
392        } else if (param.type == 'success') {
393            $modal_title = $('<span/>')
394                .attr({ 'class': 'panel-title' })
395                .append(param.close ? $modal_button_close : '')
396                .append('<i class="fa-pts fa-pts-check fa-pts-2x" style="color:green"></i>')
397                .append(param.message);
398        }
399        else{
400            $modal_title = $('<span/>')
401                .attr({'class':'panel-title'})
402                .append(param.close ? $modal_button_close : '')
403                .append('<i class="fa-pts '+param.title_icon+' fa-pts-1x"></i>')
404                .append(param.title);
405        }
406
407        $modal_header.append($modal_title);
408        $modal_content.append($modal_header);
409
410        if (param.type == 'normal'){
411            if (typeof param.content === 'object'){
412                param.content.removeClass('hidden').appendTo($modal_body);
413            }else{
414                $modal_body.append(param.content);
415            }
416
417            $modal_content.append($modal_body);
418
419            if (param.button_close){
420                $modal_footer.append($modal_button_close_footer);
421                $modal_content.append($modal_footer);
422            }
423            if (param.button_ok){
424                $modal_footer.append($modal_button_ok_footer);
425                $modal_content.append($modal_footer);
426            }
427        }
428
429        $modal_dialog.append($modal_content);
430        $modal.append($modal_dialog);
431
432        $modal.on('hide.bs.modal', function(){
433            if (!param.close){
434                return false;
435            } else {
436                if (typeof param.callback_close !== typeof undefined && typeof param.callback_close === 'function') {
437                    if (!param.callback_close()) {
438                        return false;
439                    }
440                }
441
442                if (!$.isEmpty(parent_content)) {
443                    param.content.appendTo(parent_content).addClass('hidden');
444                }
445
446                $('body').removeClass('modal-open');
447            }
448        });
449
450        AppOPC.$opc.prepend($modal);
451
452        $('#'+param.name).modal('show');
453
454        if (!$('#'+param.name).hasClass('in')) {
455            $('#'+param.name).addClass('in').css({display : 'block'});
456        }
457
458        /* Autofocus en email al abrirse modal de login */
459        if ($('#'+param.name).find('#opc_login').length > 0) {
460            $('#opc_login').find('#txt_login_email').trigger('focus');
461        }
462
463        var modalResize = function() {
464            var paddingTop = 0
465            var windows_height = $(window).height();
466
467            if (windows_height > $modal_dialog.height() && (AppOPC.$opc.height() / 2) > $modal_dialog.height()) {
468                paddingTop = (windows_height - $modal_dialog.height()) / 2;
469            }
470
471            $('#'+param.name).css({
472                paddingTop: paddingTop
473            });
474        };
475        modalResize();
476
477        $(window).on('resize', function(){
478            modalResize();
479        });
480
481        Fronted.loadingBig(false);
482
483        if (typeof param.callback !== typeof undefined && typeof param.callback === 'function')
484            param.callback();
485
486        //fix problem with module: pakkelabels_shipping
487        $('.pakkelabels_modal-backdrop').remove();
488
489        window.scrollTo(0, $('div#onepagecheckoutps').offset().top);
490    },
491    loginCustomer: function(){
492        var email = $('#opc_login #txt_login_email').val();
493        var password = $('#opc_login #txt_login_password').val();
494        var login_success = false;
495
496        var data = {
497            is_ajax: true,
498            action: 'loginCustomer',
499            email: email,
500            password: password,
501            'g_recaptcha_response' : $('#opc_login #g-recaptcha-response').val(),
502            'g-recaptcha-response' : $('#opc_login #g-recaptcha-response').val(),
503        };
504
505        Fronted.validateOPC({valid_form_login: true});
506
507        if (AppOPC.is_valid_opc) {
508            //no its use makeRequest because dont work.. error weird.
509            $.ajax({
510                type: 'POST',
511                url: orderOpcUrl + '?rand=' + new Date().getTime(),
512                cache: false,
513                dataType: 'json',
514                data: data,
515                beforeSend: function() {
516                    $('#opc_login #btn_login').attr('disabled', 'true');
517                    $('#opc_login .alert').empty().addClass('hidden');
518                },
519                success: function(json) {
520                    if(json.success) {
521                        if ($('div#onepagecheckoutps #onepagecheckoutps_step_review_container').length > 0) {
522                            window.parent.location.reload();
523                        } else {
524                            if (parseInt($('.shopping_cart .ajax_cart_quantity').text()) > 0){
525                                window.parent.location = orderOpcUrl;
526                            } else {
527                                window.parent.location = baseDir;
528                            }
529                        }
530
531                        login_success = true;
532                    } else {
533                        if(json.errors){
534                            $('#opc_login .alert').html('&bullet; ' + json.errors.join('<br>&bullet; ')).removeClass('hidden');
535                        }
536                    }
537                },
538                complete: function(){
539                    if (!login_success) {
540                        $('#opc_login #btn_login').removeAttr('disabled');
541                    }
542                }
543            });
544        }
545    },
546    removeUniform : function (params){
547        var param = $.extend({}, {
548            'parent_control' : 'div#onepagecheckoutps',
549            errors : {}
550        }, params);
551
552        if (typeof $.uniform !== 'undefined' && typeof $.uniform.restore !== 'undefined') {
553            $.uniform.restore(param.parent_control + ' select');
554            $.uniform.restore(param.parent_control + ' input');
555            $.uniform.restore(param.parent_control + ' a.button');
556            $.uniform.restore(param.parent_control + ' button');
557            $.uniform.restore(param.parent_control + ' textarea');
558        }
559
560        if (typeof $(param.parent_control + ' select').select_unstyle !== 'undefined') {
561            $(param.parent_control + ' select').select_unstyle();
562        }
563
564        if (typeof $(param.parent_control + ' select').selectBox !== 'undefined') {
565            $(param.parent_control + ' select').selectBox('destroy');
566        }
567
568        if (typeof $(param.parent_control + ' select').selectBox !== 'undefined') {
569            $(param.parent_control + ' select').selectBox('destroy');
570        }
571    },
572	openWindow: function (url){
573		var LeftPosition = (screen.width) ? (screen.width-700)/2 : 0;
574		var TopPosition = (screen.height) ? (screen.height-500)/2 : 0;
575		window.open(url,'','height=500,width=600,top='+(TopPosition-10)+',left='+LeftPosition+',toolbar=no,directories=no,status=no,menubar=no,modal=yes,scrollbars=yes');
576	},
577    validateOPC: function(params){
578        var param = $.extend({}, {
579            valid_form_login: false,
580            valid_form_customer: false,
581            valid_form_address_delivery: false,
582            valid_form_address_invoice: false,
583            valid_carrier: false,
584            valid_payment: false,
585            valid_condition: false,
586            valid_privacy: false,
587            valid_gdpr: false
588        }, params);
589
590        AppOPC.is_valid_opc = true;
591
592        if (param.valid_form_login) {
593            AppOPC.$opc.find('#form_login').submit();
594        }
595        if (param.valid_form_customer) {
596            if (($('div#onepagecheckoutps #field_customer_checkbox_change_passwd input[name="checkbox_change_passwd"]').length > 0
597                && !$('div#onepagecheckoutps #field_customer_checkbox_change_passwd input[name="checkbox_change_passwd"]').is(':checked'))
598                || ($('div#onepagecheckoutps #field_customer_checkbox_create_account input[name="checkbox_create_account"]').length > 0
599                && !$('div#onepagecheckoutps #field_customer_checkbox_create_account input[name="checkbox_create_account"]').is(':checked'))
600                || ($('div#onepagecheckoutps #field_customer_checkbox_create_account_guest input[name="checkbox_create_account_guest"]').length > 0
601                && !$('div#onepagecheckoutps #field_customer_checkbox_create_account_guest input[name="checkbox_create_account_guest"]').is(':checked'))
602            ) {
603                $('#onepagecheckoutps input[type="password"]').val('');
604            }
605            AppOPC.$opc.find('#form_customer').submit();
606        }
607        if (AppOPC.$opc.find('#form_address_delivery').length > 0 && (!OnePageCheckoutPS.IS_VIRTUAL_CART || OnePageCheckoutPS.CONFIGS.OPC_SHOW_DELIVERY_VIRTUAL) && param.valid_form_address_delivery) {
608            AppOPC.$opc.find('#form_address_delivery').submit();
609        }
610        if (Address.isSetInvoice() && param.valid_form_address_invoice) {
611            AppOPC.$opc.find('#form_address_invoice').submit();
612        }
613
614        if (param.valid_form_login && !AppOPC.is_valid_form_login) {
615            AppOPC.is_valid_opc = false;
616        }
617        if (param.valid_form_customer && !AppOPC.is_valid_form_customer) {
618            AppOPC.is_valid_opc = false;
619        }
620        if (AppOPC.$opc.find('#form_address_delivery').length > 0
621            && (!OnePageCheckoutPS.IS_VIRTUAL_CART || OnePageCheckoutPS.CONFIGS.OPC_SHOW_DELIVERY_VIRTUAL)
622            && param.valid_form_address_delivery
623            && !AppOPC.is_valid_form_address_delivery
624        ) {
625            AppOPC.is_valid_opc = false;
626
627            if (OnePageCheckoutPS.IS_LOGGED) {
628                AppOPC.$opc_step_one.find('#delivery_address_container #form_address_delivery').show(400);
629                AppOPC.$opc_step_one.find('.addresses_customer_container.delivery').hide(400);
630            } else if (typeof amazonpay !== typeof undefined && amazonpay.amazonCheckoutSessionId !== false && !OnePageCheckoutPS.IS_LOGGED) {
631                AppOPC.$opc_step_one.find('#delivery_address_container #form_address_delivery').show(400);
632                AppOPC.$opc_step_one.find('.addresses_customer_container.delivery').hide(400);
633
634                $.each(AppOPC.$opc_step_one.find('#delivery_address_container #form_address_delivery .form-group'), function(i, item) {
635                    if (!$(item).hasClass('has-error')) {
636                        $(item).parent('.row').hide();
637                    }
638                });
639            }
640        }
641
642        if (Address.isSetInvoice() && param.valid_form_address_invoice && !AppOPC.is_valid_form_address_invoice) {
643            AppOPC.is_valid_opc = false;
644
645            if (OnePageCheckoutPS.IS_LOGGED) {
646                AppOPC.$opc_step_one.find('#invoice_address_container #form_address_invoice').show(400);
647                AppOPC.$opc_step_one.find('.addresses_customer_container.invoice').hide(400);
648            }
649        }
650
651        if (AppOPC.is_valid_opc) {
652            if (param.valid_carrier) {
653                AppOPC.$opc_step_two.removeClass('alert alert-warning');
654
655                //validate shipping
656                if (AppOPC.$opc_step_two.find('.delivery_options_address').length >= 0 && !OnePageCheckoutPS.IS_VIRTUAL_CART) {
657                    var id_carrier = AppOPC.$opc_step_two.find('.delivery_option_radio:checked').val();
658
659                    if (!$.isEmpty(id_carrier)){
660                        Carrier.id_delivery_option_selected = id_carrier;
661
662                        AppOPC.is_valid_opc = true;
663                    }else{
664                        Carrier.id_delivery_option_selected = null;
665                        AppOPC.$opc_step_two.find('#shipping_container').addClass('alert alert-warning');
666
667                        Fronted.showModal({type: 'warning', message: OnePageCheckoutPS.Msg.shipping_method_required});
668
669                        AppOPC.is_valid_opc = false;
670                    }
671                }
672            }
673        }
674
675        if (AppOPC.is_valid_opc) {
676            if (param.valid_payment && !OnePageCheckoutPS.CONFIGS.OPC_PAYMENTS_WITHOUT_RADIO) {
677                AppOPC.$opc_step_three.removeClass('alert alert-warning');
678
679                //validate payments
680                if (AppOPC.$opc_step_three.find('#free_order').length <= 0) {
681                    var payment = AppOPC.$opc_step_three.find('input[name="method_payment"]:checked');
682
683                    if (payment.length > 0){
684                        PaymentPTS.id_payment_selected = $(payment).attr('id');
685
686                        AppOPC.is_valid_opc = true;
687                    }else{
688                        PaymentPTS.id_payment_selected = '';
689
690                        //support module payment: Pay
691                        if (!$.isEmpty($('#securepay_cardNo').val()) &&
692                            !$.isEmpty($('#securepay_cardSecurityCode').val()) &&
693                            !$.isEmpty($('#securepay_cardExpireMonth').val()) &&
694                            !$.isEmpty($('#securepay_cardExpireYear').val())
695                        ) {
696                            AppOPC.is_valid_opc = true;
697                        } else {
698                            AppOPC.$opc_step_three.addClass('alert alert-warning');
699
700                            Fronted.showModal({type: 'warning', message: OnePageCheckoutPS.Msg.payment_method_required});
701
702                            AppOPC.is_valid_opc = false;
703                        }
704                    }
705                }
706            }
707        }
708
709        if (AppOPC.is_valid_opc) {
710            if (param.valid_condition) {
711                AppOPC.$opc.find('#div_cgv').removeClass('alert alert-warning');
712                AppOPC.$opc.find('#onepagecheckoutps_step_review_container #div_privacy_policy').css('padding-left','0px');
713
714                //terms conditions
715                if (OnePageCheckoutPS.CONFIGS.OPC_ENABLE_TERMS_CONDITIONS
716                    && (AppOPC.$opc.find('#cgv').length > 0 && !AppOPC.$opc.find('#cgv').is(':checked'))
717                ){
718                    AppOPC.$opc.find('#div_cgv').addClass('alert alert-warning').css('padding-left','15px');
719                    AppOPC.$opc.find('#onepagecheckoutps_step_review_container #div_privacy_policy').css('padding-left','15px');
720
721                    Fronted.showModal({type: 'warning', message: OnePageCheckoutPS.Msg.agree_terms_and_conditions});
722
723                    AppOPC.is_valid_opc = false;
724                }
725            }
726        }
727
728        if (AppOPC.is_valid_opc) {
729            if (param.valid_privacy) {
730                AppOPC.$opc.find('#div_privacy_policy').removeClass('alert alert-warning');
731                AppOPC.$opc.find('#onepagecheckoutps_step_review_container #div_cgv').css('padding-left','0px');
732                AppOPC.$opc.find('#checkbox_create_invoice_address').css('margin-left','0px');
733
734                //privacy policy
735                if (OnePageCheckoutPS.CONFIGS.OPC_ENABLE_PRIVACY_POLICY
736                    && (!OnePageCheckoutPS.IS_LOGGED || (OnePageCheckoutPS.IS_LOGGED && OnePageCheckoutPS.CONFIGS.OPC_REQUIRE_PP_BEFORE_BUY))
737                    && (AppOPC.$opc.find('#privacy_policy').length > 0 && !AppOPC.$opc.find('#privacy_policy').is(':checked'))
738                ){
739                    AppOPC.$opc.find('#div_privacy_policy').addClass('alert alert-warning').css('padding-left','15px');
740                    AppOPC.$opc.find('#div_cgv').css('padding-left','15px');
741                    AppOPC.$opc.find('#checkbox_create_invoice_address').css('margin-left','12px');
742
743
744                    Fronted.showModal({type: 'warning', message: OnePageCheckoutPS.Msg.agree_privacy_policy});
745
746                    AppOPC.is_valid_opc = false;
747                }
748            }
749        }
750
751        if (AppOPC.is_valid_opc) {
752            if (param.valid_gdpr) {
753                /* kbgdpr - v1.0.6 - knowband */
754                if ($('#form_hook_create_account').find('input.kbgdprcheckbox').length > 0) {
755                    $.each($('#form_hook_create_account').find('input.kbgdprcheckbox'), function(i, elem) {
756                        if ($(elem).hasClass('is_required') && !$(elem).is(':checked')) {
757                            $(elem).parents('.checkbox').addClass('checkbox_empty');
758
759                            if ($(elem).parents('.checkbox').siblings('.error_message').length === 0
760                                && typeof kb_gdpr_field_required !== typeof undefined
761                            ) {
762                                $(elem).parents('.checkbox').after('<span class="error_message">' + kb_gdpr_field_required + '</span>');
763                            }
764
765                            AppOPC.is_valid_opc = false;
766                        }
767                    });
768                }
769
770                //GDPR - PrestaShop
771                if (typeof message_psgdpr !== typeof undefined) {
772                    AppOPC.$opc.find('#gdpr_consent').removeClass('alert alert-warning');
773
774                    if (message_psgdpr && !AppOPC.$opc.find('#gdpr_consent_checkbox').is(':checked')){
775                        AppOPC.$opc.find('#gdpr_consent').addClass('alert alert-warning');
776
777                        Fronted.showModal({type: 'warning', message: OnePageCheckoutPS.Msg.agree_privacy_policy});
778
779                        AppOPC.is_valid_opc = false;
780                    }
781                }
782                //dm_gdpr - v1.1.7 - David Mrozek
783                if (AppOPC.$opc.find('#dm_gdpr_active').length > 0){
784                    AppOPC.$opc.find('#dm_gdpr_active').removeClass('alert alert-warning');
785
786                    if (!AppOPC.$opc.find('#dm_gdpr_active').is(':checked')){
787                        AppOPC.$opc.find('#dm_gdpr_active').parents('div#hook_create_account').addClass('alert alert-warning');
788                        window.scrollTo(0, $('#dm_gdpr_active').parents('div#hook_create_account').offset().top);
789
790                        Fronted.showModal({type: 'warning', message: OnePageCheckoutPS.Msg.agree_privacy_policy});
791
792                        AppOPC.is_valid_opc = false;
793                    }
794                }
795                //artfreegdpr - v1.0.7 - Arte e Informatica
796                if (AppOPC.$opc.find('#freegdpr-consent').length > 0){
797                    AppOPC.$opc.find('#freegdpr-consent').removeClass('alert alert-warning');
798
799                    if (!AppOPC.$opc.find('#freegdpr-consent').is(':checked')){
800                        AppOPC.$opc.find('#freegdpr-consent').parents('div#hook_create_account').addClass('alert alert-warning');
801
802                        if ($('#freegdpr-consent').parents('div#hook_customer_identity').length > 0) {
803                            window.scrollTo(0, $('#freegdpr-consent').parents('div#hook_customer_identity').offset().top);
804                        }
805
806                        Fronted.showModal({type: 'warning', message: OnePageCheckoutPS.Msg.agree_privacy_policy});
807
808                        AppOPC.is_valid_opc = false;
809                    }
810                }
811            }
812
813            //support module: psrecaptcha - v1.1.3 - PrestaShop
814            if (typeof window.recaptchaResponse !== typeof undefined && !OnePageCheckoutPS.IS_LOGGED) {
815                if (window.recaptchaResponse.length <= 0 && window.recaptchaResponse == '') {
816                    alert(OnePageCheckoutPS.Msg.captcha_required);
817
818                    AppOPC.is_valid_opc = false;
819                }
820            }
821        }
822
823        if (!AppOPC.is_valid_opc) {
824            AppOPC.$opc.find('#btn_place_order').removeAttr('disabled');
825        }
826    }
827}
828
829var Address = {
830    id_customer: 0,
831    id_address_delivery: 0,
832    id_address_invoice: 0,
833    delivery_vat_number: false,
834    invoice_vat_number: false,
835    initEventsChangeCountry: function(object) {
836        if ((object === 'delivery' && OnePageCheckoutPS.CONFIGS.OPC_INSERT_ISO_CODE_IN_DELIV_DNI)
837            || (object === 'invoice' && OnePageCheckoutPS.CONFIGS.OPC_INSERT_ISO_CODE_IN_INVOI_DNI)
838        ) {
839            Address.insertCountryISOCode(object);
840        }
841
842        Address.isNeedDniByCountryId({object: object});
843        Address.isNeedPostCodeByCountryId({object: object});
844        Address.updateState({object: object});
845        Address.initPostCodeGeonames({object: object});
846        Address.updateAutocompleteAddress({ object: object });
847    },
848    launch: function(){
849        var rc_page = AppOPC.$opc.find('#rc_page').val();
850
851        if (OnePageCheckoutPS.IS_LOGGED) {
852            Address.id_customer = AppOPC.$opc_step_one.find('#customer_id').val();
853        }
854
855        AppOPC.$opc_step_one
856            .on('keyup', '#delivery_vat_number, #invoice_vat_number', function(e) {
857                var value = $(e.currentTarget).val();
858                value = value.toUpperCase();
859                $(e.currentTarget).val(value);
860            })
861            .on('click', '.container_card .header_card, .container_card .content_card', function(item) {
862                if (!$.isEmpty(rc_page)) {
863                    return false;
864                }
865
866                var $addresses_customer_container = $(item.currentTarget).parents('.addresses_customer_container');
867                var object = $addresses_customer_container.data('object');
868
869                if ($(item.currentTarget).parents('.container_card').hasClass('selected')) {
870                    return;
871                }
872
873                var id_address = $(item.currentTarget).parents('.address_card').data('id-address');
874
875                AppOPC.$opc_step_one.find('#'+object+'_id').val(id_address);
876
877                if (object == 'delivery') {
878                    Address.id_address_delivery = id_address;
879                } else if (object == 'invoice') {
880                    Address.id_address_invoice = id_address;
881                }
882
883                var callback = function () {
884                    Address.updateAddress({object: object, id_address: id_address, update_cart: true, load_addresses: true, load_carriers: true});
885                }
886                Address.load({object: object, id_address: id_address, callback: callback});
887            })
888            .on('click', '.container_card .choose_address', function(item){
889                var id_address = $(item.currentTarget).data('id-address');
890                AppOPC.$opc_step_one.find('.addresses_customer_container #address_card_'+id_address+' .content_card').trigger('click');
891            })
892            .on('click', '#address_card_new_content span', function(item){
893                var object = $(item.currentTarget).parents('.addresses_customer_container').data('object');
894
895                AppOPC.$opc_step_one.find('#'+object+'_address_container #form_address_'+object).show(400);
896                AppOPC.$opc_step_one.find('.addresses_customer_container.'+object).hide(400);
897
898                Address.clearFormByObject(object);
899            })
900            .on('click', '.address_card .edit_address', function(item){
901                var id_address = $(item.currentTarget).data('id-address');
902                var object = $(item.currentTarget).parents('.addresses_customer_container').data('object');
903
904                $(item.currentTarget).prop('disabled', true).addClass('disabled');
905
906                AppOPC.$opc_step_one.find('#'+object+'_id').val(id_address);
907                AppOPC.$opc_step_one.find('#'+object+'_address_container #form_address_'+object).show(400);
908                AppOPC.$opc_step_one.find('.addresses_customer_container.'+object).hide(400);
909
910                Address.load({object: object, id_address: id_address});
911            })
912            .on('click', '.address_card .delete_address', function(item){
913                $(item.currentTarget).prop('disabled', true).addClass('disabled');
914
915                var id_address = $(item.currentTarget).data('id-address');
916                var object = $(item.currentTarget).parents('.addresses_customer_container').data('object');
917
918                if (!Address.removeAddress({id_address: id_address, object: object})) {
919                    $(item.currentTarget).prop('disabled', false).removeClass('disabled');
920                }
921            })
922            .on('click', '#btn_update_address_delivery', function(){
923                var callback = function() {
924                    if (!OnePageCheckoutPS.IS_GUEST) {
925                        AppOPC.$opc_step_one.find('#delivery_address_container #form_address_delivery').hide(400);
926                        AppOPC.$opc_step_one.find('.addresses_customer_container.delivery').show(400);
927
928                        Address.loadAddressesCustomer({object: 'delivery'});
929                        Address.callBackState = undefined;
930                    }
931                };
932
933                if (AppOPC.$opc_step_one.find('#delivery_address_container .addresses_customer_container .address_card:not(#address_card_new)').length <= 0) {
934                    Address.updateAddress({object: 'delivery', load_carriers: true, callback: callback, update_cart: true});
935                } else {
936                    var id_edited_address   = AppOPC.$opc_step_one.find('#panel_address_delivery #delivery_id').val();
937                    var load_carriers       = false;
938
939                    if (AppOPC.$opc_step_one.find('#panel_address_delivery .address_card[data-id-address="'+id_edited_address+'"] >
939 .container_card').hasClass('selected')) {
940                        load_carriers = true;
941                    }
942                    Address.updateAddress({object: 'delivery', load_carriers: load_carriers, callback: callback});
943                }
944            })
945            .on('click', '#btn_update_address_invoice', function(){
946                var callback = function() {
947                    if (!OnePageCheckoutPS.IS_GUEST) {
948                        AppOPC.$opc_step_one.find('#invoice_address_container #form_address_invoice').hide(400);
949                        AppOPC.$opc_step_one.find('.addresses_customer_container.invoice').show(400);
950
951                        Address.loadAddressesCustomer({object: 'invoice'});
952                        Address.callBackState = undefined;
953                    }
954                };
955
956                if (AppOPC.$opc_step_one.find('#invoice_address_container .addresses_customer_container .address_card:not(#address_card_new)').length <= 0) {
957                    Address.updateAddress({object: 'invoice', load_carriers: true, callback: callback, update_cart: true});
958                } else {
959                    var id_edited_address   = AppOPC.$opc_step_one.find('#panel_address_invoice #invoice_id').val();
960                    var load_carriers       = false;
961
962                    if (AppOPC.$opc_step_one.find('#panel_address_invoice .address_card[data-id-address="'+id_edited_address+'"] > .container_card').hasClass('selected')) {
963                        load_carriers = true;
964                    }
965
966                    Address.updateAddress({object: 'invoice', load_carriers: load_carriers, callback: callback});
967                }
968            })
969            .on('click', '#btn_cancel_address_delivery', function(){
970                AppOPC.$opc_step_one.find('#delivery_address_container #form_address_delivery').hide(400);
971                AppOPC.$opc_step_one.find('.addresses_customer_container.delivery').show(400);
972
973                Address.clearFormByObject('delivery');
974                Address.load({object: 'delivery'});
975                Address.callBackState = undefined;
976            })
977            .on('click', '#btn_cancel_address_invoice', function(){
978                AppOPC.$opc_step_one.find('#invoice_address_container #form_address_invoice').hide(400);
979                AppOPC.$opc_step_one.find('.addresses_customer_container.invoice').show(400);
980
981                Address.clearFormByObject('invoice');
982                Address.load({object: 'invoice'});
983                Address.callBackState = undefined;
984            })
985            .on('click', 'input#checkbox_create_account_guest', Address.checkGuestAccount)
986            .on('click', 'input#checkbox_create_account', Address.checkGuestAccount)
987            .on('click', 'input#checkbox_change_passwd', Address.checkGuestAccount)
988            .on('keyup','.search_address',function (event) {
989                const $container = $(event.currentTarget).parents('.addresses_customer_container');
990                const text = $(event.currentTarget).val();
991
992                if ($.isEmpty(text))
993                    $container.find('.address_card').show();
994                else {
995                    $container.find('.container_card:ptsContains(' + text + ')').parents('.address_card:not(#address_card_new)').show();
996                    $container.find('.container_card:not(:ptsContains(' + text + '))').parents('.address_card:not(#address_card_new)').hide();
997                }
998            })
999            .on('blur', 'input#delivery_dni', function() {
1000                if (OnePageCheckoutPS.CONFIGS.OPC_INSERT_ISO_CODE_IN_DELIV_DNI) {
1001                    Address.insertCountryISOCode('delivery');
1002                }
1003            })
1004            .on('blur', 'input#invoice_dni', function() {
1005                if (OnePageCheckoutPS.CONFIGS.OPC_INSERT_ISO_CODE_IN_INVOI_DNI) {
1006                    Address.insertCountryISOCode('invoice');
1007                }
1008            });
1009        AppOPC.$opc
1010            .on('click', '#btn_save_customer', Address.createCustomer)
1011            .on('blur', '#customer_email', Address.checkEmailCustomer)
1012            .on("click", "#div_privacy_policy span.read", function(){
1013                Fronted.openCMS({id_cms : OnePageCheckoutPS.CONFIGS.OPC_ID_CMS_PRIVACY_POLICY});
1014            });
1015
1016        $(document).on('blur', '#onepagecheckoutps input[data-field-name="address1"]', Address.cleanSpecialCharacterAddress);
1017
1018        if (!OnePageCheckoutPS.IS_LOGGED) {
1019            AppOPC.$opc_step_one.find('#delivery_address_container #form_address_delivery').show();
1020            AppOPC.$opc_step_one.find('#invoice_address_container #form_address_invoice').show();
1021
1022            AppOPC.$opc_step_one.find('.addresses_customer_container').hide();
1023        }
1024
1025        Address.checkGuestAccount();
1026
1027        $('div#onepagecheckoutps #field_customer_id').addClass('hidden');
1028
1029        //just allow lang with weird characters
1030        if ($.inArray(OnePageCheckoutPS.LANG_ISO, OnePageCheckoutPS.LANG_ISO_ALLOW) == 0) {
1031            $('#customer_firstname, #customer_lastname').validCustomerName();
1032        }
1033
1034        //evita espacios al inicio y final en los campos del registro.
1035        AppOPC.$opc_step_one.find('input.customer, input.delivery, input.invoice, #customer_conf_passwd, #customer_conf_email').on('paste', function(e){
1036            var $element = $(e.currentTarget);
1037            setTimeout(function () {
1038                $element.val($.trim($element.val()));
1039            }, 100);
1040        });
1041
1042        AppOPC.$opc_step_one.find('.container_help_invoice u').click(function(){
1043            $('#onepagecheckoutps_step_one #li_invoice_address a').trigger('click');
1044        });
1045
1046        //validation brazil cpf
1047        if ($('#onepagecheckoutps_step_one #br_document_cpf').length > 0) {
1048            $('#onepagecheckoutps_step_one #br_document_cpf').attr('data-validation', 'cpf').removeClass('validate');
1049        }
1050
1051        //support module: rg_chilexpress v1.4.1 (Rolige)
1052        if (typeof rg_chilexpress !== typeof undefined && typeof rg_chilexpress.cities !== typeof undefined && rg_chilexpress.cities.length > 0) {
1053            $('#delivery_city').prop('autocomplete', 'off');
1054            $('#delivery_city').typeahead(
1055            {
1056                name: $(this).attr('id'),
1057                local: {},
1058                showHintOnFocus: false,
1059                source: function (query, process) {
1060                    process($.map(rg_chilexpress.cities, function (item) {
1061                        return [{
1062                            name: item.name,
1063                            value: item.name,
1064                            details: item
1065                        }];
1066                    }));
1067                },
1068                minLength: 2,
1069                updater: function (item) {
1070                    return item.value;
1071                }
1072            });
1073        //support module: rg_starken v1.0.4 (Rolige)
1074        } else if (typeof rg_starken !== typeof undefined && typeof rg_starken.cities !== typeof undefined && rg_starken.cities.length > 0) {
1075            $('#delivery_city').prop('autocomplete', 'off');
1076            $('#delivery_city').typeahead(
1077            {
1078                name: $(this).attr('id'),
1079                local: {},
1080                showHintOnFocus: false,
1081                source: function (query, process) {
1082                    process($.map(rg_starken.cities, function (item) {
1083                        return [{
1084                            name: item.name,
1085                            value: item.name,
1086                            details: item
1087                        }];
1088                    }));
1089                },
1090                minLength: 2,
1091                updater: function (item) {
1092                    return item.value;
1093                }
1094            });
1095        }
1096
1097        //suppport module: ets_advancedcaptcha - v1.1.3 - ETS-Soft.
1098        if (typeof ets_captcha_load !== typeof undefined) {
1099            ets_captcha_load($('#hook_create_account'));
1100        }
1101
1102        //support module: psgdpr - v1.0.0
1103        AppOPC.$opc_step_one.find('#hook_create_account #psgdpr-consent').parents('.form-group').remove();
1104
1105        Address.load({object: 'customer'});
1106        Address.loadAutocompleteAddress();
1107
1108        if (OnePageCheckoutPS.SHOW_DELIVERY_VIRTUAL || !OnePageCheckoutPS.IS_VIRTUAL_CART) {
1109            $('div#onepagecheckoutps #delivery_postcode').validPostcode();
1110            if ($.inArray(OnePageCheckoutPS.LANG_ISO, OnePageCheckoutPS.LANG_ISO_ALLOW) == 0){
1111                $('div#onepagecheckoutps #delivery_firstname, div#onepagecheckoutps #delivery_lastname').validName();
1112                $('div#onepagecheckoutps #delivery_address1, div#onepagecheckoutps #delivery_address2, div#onepagecheckoutps #delivery_city').validAddress();
1113            }
1114
1115            $('div#onepagecheckoutps #field_delivery_id').addClass('hidden');
1116
1117            Address.initPostCodeGeonames({object: 'delivery'});
1118
1119            $('div#onepagecheckoutps')
1120                .on('change', '#delivery_city', function(){
1121                    $('#delivery_city_list').val('');
1122                })
1123                .on('change', 'select#delivery_id_state', function(event){
1124                    if (OnePageCheckoutPS.CONFIGS.OPC_SHOW_LIST_CITIES_GEONAMES) {
1125                        AppOPC.$opc_step_one.find('#delivery_city').val('').trigger('reset');
1126                    }
1127
1128                    Address.getCitiesByState({object: 'delivery'});
1129
1130                    $(event.currentTarget).validate();
1131
1132                    if (!OnePageCheckoutPS.IS_LOGGED) {
1133                        Address.updateAddress({object: 'delivery', load_carriers: true});
1134                    }
1135                })
1136                .on('change', 'select#delivery_id_country', function(event){
1137                    Address.initEventsChangeCountry('delivery');
1138
1139                    if (typeof event.originalEvent !== typeof undefined && AppOPC.$opc.find('input#delivery_postcode').length > 0 && !$.isEmpty(AppOPC.$opc.find('input#invoice_postcode').val())) {
1140                        AppOPC.$opc.find('input#delivery_postcode').validate();
1141                    }
1142
1143                    if (!OnePageCheckoutPS.IS_LOGGED) {
1144                        Address.updateAddress({object: 'delivery', load_carriers: true});
1145                    }
1146                });
1147
1148            if (!OnePageCheckoutPS.IS_LOGGED || OnePageCheckoutPS.IS_GUEST) {
1149                var callback = function () {
1150                    Address.updateAddress({
1151                        object: 'delivery',
1152                        load_carriers: true
1153                    });
1154                }
1155                Address.load({object: 'delivery', callback: callback});
1156            } else {
1157                var callback = function() {
1158                    Carrier.getByCountry();
1159                };
1160                Address.loadAddressesCustomer({object: 'delivery', callback: callback});
1161            }
1162        }
1163
1164        if (OnePageCheckoutPS.CONFIGS.OPC_ENABLE_INVOICE_ADDRESS) {
1165            if (OnePageCheckoutPS.CONFIGS.OPC_REQUIRED_INVOICE_ADDRESS && !OnePageCheckoutPS.IS_LOGGED && !OnePageCheckoutPS.IS_GUEST) {
1166                Address.updateAddress({object: 'invoice', update_cart: true});
1167            }
1168
1169            if (typeof $.totalStorageOPC !== typeof undefined) {
1170                if ($.totalStorageOPC('create_invoice_address_'+OnePageCheckoutPS.id_shop)) {
1171                    $('div#onepagecheckoutps #checkbox_create_invoice_address').attr('checked', 'true');
1172                }
1173            }
1174
1175            $('div#onepagecheckoutps #invoice_postcode').validPostcode();
1176            if ($.inArray(OnePageCheckoutPS.LANG_ISO, OnePageCheckoutPS.LANG_ISO_ALLOW) == 0){
1177                $('div#onepagecheckoutps #invoice_firstname, div#onepagecheckoutps #invoice_lastname').validName();
1178                $('div#onepagecheckoutps #invoice_address1, div#onepagecheckoutps #invoice_address2, div#onepagecheckoutps #invoice_city').validAddress();
1179            }
1180
1181            $('div#onepagecheckoutps #field_invoice_id').addClass('hidden');
1182
1183            $('div#onepagecheckoutps').on('click', 'input#checkbox_create_invoice_address', function(event){
1184                Address.checkNeedInvoice();
1185
1186                if ($(event.currentTarget).is(':checked') && !OnePageCheckoutPS.IS_LOGGED) {
1187                    Address.updateAddress({object: 'invoice', update_cart: true});
1188                } else {
1189                    Address.removeAddressInvoice();
1190                }
1191            });
1192
1193            Address.checkNeedInvoice();
1194            Address.initPostCodeGeonames({object: 'invoice'});
1195
1196            $('div#onepagecheckoutps')
1197                .on('change', '#invoice_city', function(){
1198                    $('#invoice_city_list').val('');
1199                })
1200                .on('change', 'select#invoice_id_state', function(event){
1201                    if (OnePageCheckoutPS.CONFIGS.OPC_SHOW_LIST_CITIES_GEONAMES) {
1202                        AppOPC.$opc_step_one.find('#invoice_city').val('').trigger('reset');
1203                    }
1204
1205                    Address.getCitiesByState({object: 'invoice'});
1206
1207                    $(event.currentTarget).validate();
1208                })
1209                .on('change', 'select#invoice_id_country', function(event){
1210                    Address.initEventsChangeCountry('invoice');
1211
1212                    if (typeof event.originalEvent !== typeof undefined && AppOPC.$opc.find('input#invoice_postcode').length > 0 && !$.isEmpty(AppOPC.$opc.find('input#invoice_postcode').val())) {
1213                        AppOPC.$opc.find('input#invoice_postcode').validate();
1214                    }
1215
1216                    if (!OnePageCheckoutPS.IS_LOGGED && OnePageCheckoutPS.PS_TAX_ADDRESS_TYPE == 'id_address_invoice') {
1217                        Address.updateAddress({object: 'invoice', load_payments: true});
1218                    }
1219                })
1220                .on('keyup', 'input#delivery_phone_mobile, input#delivery_phone, input#invoice_phone_mobile, input#invoice_phone', function(){
1221                    var val = $(this).val();
1222                    if (val !== '' && val.match(/^[+0-9. ()-]+$/g) === null) {
1223                        $(this).val($(this).data('value'));
1224                    } else{
1225                        $(this).data('value', val);
1226                    }
1227                });
1228
1229            if (!OnePageCheckoutPS.IS_LOGGED || OnePageCheckoutPS.IS_GUEST) {
1230                Address.load({object: 'invoice'});
1231            }
1232        }
1233
1234        if (OnePageCheckoutPS.IS_VIRTUAL_CART && !OnePageCheckoutPS.SHOW_DELIVERY_VIRTUAL) {
1235            PaymentPTS.getByCountry();
1236        }
1237    },
1238    insertCountryISOCode: function(type) {
1239        var input   = AppOPC.$opc_step_one.find('input#'+type+'_dni');
1240        if (input.length === 0) {
1241            return false;
1242        }
1243
1244        var value   = input.val();
1245        var country_prefix = AppOPC.$opc_step_one.find('select#' + type + '_id_country > option:selected').data('iso-code');
1246
1247        if (typeof country_prefix === typeof undefined) {
1248            country_prefix = '';
1249        }
1250
1251        if (value.length > 1) {
1252            var current_country_iso_code    = $.totalStorageOPC(type + '_current_country_iso_code');
1253
1254            if (!$.isEmpty(current_country_iso_code) && value.indexOf(current_country_iso_code) >= 0) {
1255                value = value.replace(current_country_iso_code, country_prefix);
1256            } else {
1257                value = country_prefix + value;
1258            }
1259
1260            $.totalStorageOPC(type + '_current_country_iso_code', country_prefix);
1261            input.val(value);
1262        }
1263    },
1264    initPostCodeGeonames: function(params){
1265        var param = $.extend({}, {
1266            object: 'delivery'
1267        }, params);
1268
1269        if (OnePageCheckoutPS.CONFIGS.OPC_AUTO_ADDRESS_GEONAMES && AppOPC.$opc_step_one.find('#'+param.object+'_postcode').length > 0){
1270            var $id_country =  AppOPC.$opc_step_one.find('#'+param.object+'_id_country');
1271            var iso_code_country = '';
1272
1273            if ($id_country.length > 0) {
1274                iso_code_country = $id_country.find('option:selected').data('iso-code');
1275            } else {
1276                iso_code_country = OnePageCheckoutPS.iso_code_country_delivery_default;
1277            }
1278
1279            AppOPC.$opc_step_one.find('#'+param.object+'_postcode').jeoPostCodeAutoComplete({
1280                country: iso_code_country,
1281                callback: function(data){
1282                    AppOPC.$opc_step_one.find('#'+param.object+'_postcode').val(data.postalCode);
1283                    AppOPC.$opc_step_one.find('#'+param.object+'_city_list').val(data.placeName);
1284                    AppOPC.$opc_step_one.find('#'+param.object+'_city').val(data.placeName);
1285
1286                    var $id_state = AppOPC.$opc_step_one.find('#'+param.object+'_id_state [data-text="'+data.adminName1+'"]');
1287                    if ($id_state.length <= 0) {
1288                        $id_state = AppOPC.$opc_step_one.find('#'+param.object+'_id_state [data-text="'+data.adminName2+'"]');
1289                        if ($id_state.length <= 0) {
1290                            $id_state = AppOPC.$opc_step_one.find('#'+param.object+'_id_state [data-iso-code="'+data.countryCode + '-' + data.adminCode2+'"]');
1291                        }
1292                    }
1293                    if ($id_state.length > 0) {
1294                        $id_state.attr('selected', 'true');
1295                    }
1296
1297                    if (AppOPC.$opc_step_one.find('#'+param.object+'_id_state [data-text="'+data.adminName2+'"]').length <= 0) {
1298                        AppOPC.$opc_step_one.find('#'+param.object+'_id_state [data-iso-code="'+data.countryCode + '-' + data.adminCode2+'"]').attr('selected', 'true');
1299                    } else {
1300                        AppOPC.$opc_step_one.find('#'+param.object+'_id_state [data-text="'+data.adminName2+'"]').attr('selected', 'true');
1301                    }
1302
1303                    if (typeof is_necessary_postcode !== typeof undefined && is_necessary_postcode) {
1304                        AppOPC.$opc_step_one.find('#'+param.object+'_postcode').trigger('blur');
1305                    } else if(typeof is_necessary_city !== typeof undefined && is_necessary_city) {
1306                        AppOPC.$opc_step_one.find('#'+param.object+'_city').trigger('blur');
1307                    }
1308
1309                    if (typeof is_necessary_postcode !== typeof undefined
1310                        && !is_necessary_postcode
1311                        && typeof is_necessary_postcode !== typeof undefined
1312                        && !is_necessary_postcode)
1313                    {
1314                        $id_state.trigger('change');
1315                    }
1316                }
1317            });
1318        }
1319    },
1320    getCityByPostCode: function(params){
1321        var param = $.extend({}, {
1322            object: 'delivery'
1323        }, params);
1324
1325        if (1==2) {
1326            var $city_list = $('#onepagecheckoutps_step_one #'+param.object+'_city_list');
1327
1328            if ($city_list.length <= 0 || ($city_list.length > 0 && !$city_list.is(':visible'))) {
1329                var $id_country = $('#onepagecheckoutps_step_one #'+param.object+'_id_country');
1330                var $postcode = $('#onepagecheckoutps_step_one #'+param.object+'_postcode');
1331                var $city = $('#onepagecheckoutps_step_one #'+param.object+'_city');
1332
1333                if ($postcode.length > 0 && $city.length > 0) {
1334                    $postcode.jeoPostalCodeLookup({
1335                        country: $id_country.find('option:selected').data('iso-code'),
1336                        target: $city
1337                    });
1338                }
1339            }
1340        }
1341    },
1342    getCitiesByState: function(params){
1343        var param = $.extend({}, {
1344            object: 'delivery'
1345        }, params);
1346
1347        if (OnePageCheckoutPS.CONFIGS.OPC_SHOW_LIST_CITIES_GEONAMES) {
1348            var $id_country = AppOPC.$opc_step_one.find('#'+param.object+'_id_country');
1349            var $id_state = AppOPC.$opc_step_one.find('#'+param.object+'_id_state');
1350            var iso_code_country = '';
1351
1352            if ($id_country.length > 0) {
1353                iso_code_country = $id_country.find('option:selected').data('iso-code');
1354            } else {
1355                iso_code_country = OnePageCheckoutPS.iso_code_country_delivery_default;
1356            }
1357
1358            var name_state = $.trim($id_state.find('option:selected').data('text'));
1359
1360            if ($id_state.length > 0 && !$.isEmpty(name_state)) {
1361                var cities = Array();
1362
1363                jeoquery.getGeoNames(
1364                  'search',
1365                  {
1366                      q: name_state,
1367                      country: iso_code_country,
1368                      featureClass: 'P',
1369                      style: 'full'
1370                  },
1371                  function(data){
1372                    //ordenar array de objetos por una propiedad en especifico
1373                    function dynamicSort(property) {
1374                        var sortOrder = 1;
1375                        if(property[0] === "-") {
1376                            sortOrder = -1;
1377                            property = property.substr(1);
1378                        }
1379                        return function (a,b) {
1380                            var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
1381                            return result * sortOrder;
1382                        }
1383                    }
1384
1385                    $.each(data.geonames, function(i, item){
1386                        if ($.inArray(item.name, cities) == -1) {
1387                            cities.push({name: $.trim(item.name), postcode: item.adminCode3});
1388                        }
1389                    });
1390                    cities.sort(dynamicSort('name'));
1391
1392                    var $city_list = AppOPC.$opc_step_one.find('#'+param.object+'_city_list');
1393                    if ($city_list.length <= 0) {
1394                        $city_list = $('<select/>')
1395                            .attr({
1396                                id: param.object+'_city_list',
1397                                class: 'form-control input-sm not_unifrom not_uniform'
1398                            })
1399                            .on('change', function(event){
1400                                var option_selected = $(event.currentTarget).find('option:selected');
1401
1402                                AppOPC.$opc_step_one.find('#'+param.object+'_city').val($(option_selected).attr('value')).trigger('blur');
1403                                AppOPC.$opc_step_one.find('#'+param.object+'_postcode').val($(option_selected).attr('data-postcode')).validate();
1404                            }
1405                        );
1406                    } else {
1407                        $city_list.empty().hide();
1408                    }
1409
1410                    var current_city = AppOPC.$opc_step_one.find('#'+param.object+'_city').val();
1411
1412                    var $option = $('<option/>')
1413                        .attr({
1414                            value: ''
1415                        }).append('--');
1416                    $option.appendTo($city_list);
1417                    $.each(cities, function(i, city) {
1418                        var $option = $('<option/>')
1419                            .attr({
1420                                'value': city.name,
1421                                'data-postcode': city.postcode
1422                            }).append(city.name);
1423
1424                        $option.appendTo($city_list);
1425                    });
1426
1427                    AppOPC.$opc_step_one.find('#field_'+param.object+'_city').append($city_list);
1428
1429                    //si existe la ciudad, la seleccionamos.
1430                    if ($city_list.find('option[value="'+current_city+'"]').length > 0) {
1431                        $city_list.val(current_city);
1432                    }
1433
1434                     $city_list.show();
1435                });
1436            } else {
1437                AppOPC.$opc_step_one.find('#'+param.object+'_city_list').hide();
1438            }
1439        }
1440    },
1441    loadAddressesCustomer: function(params){
1442        var param = $.extend({}, {
1443            object: 'delivery',
1444            callback: ''
1445        }, params);
1446
1447        var valid = true;
1448
1449        if (param.object == 'delivery') {
1450            if (OnePageCheckoutPS.IS_VIRTUAL_CART && !OnePageCheckoutPS.CONFIGS.OPC_SHOW_DELIVERY_VIRTUAL) {
1451                valid = false;
1452            }
1453        }
1454        if (param.object == 'invoice') {
1455            if (!Address.isSetInvoice()) {
1456                valid = false;
1457            }
1458        }
1459        if (OnePageCheckoutPS.IS_LOGGED || (typeof amazonpay !== typeof undefined && amazonpay.amazonCheckoutSessionId !== false)) {
1460            if (valid) {
1461                var data = {
1462                    url_call: orderOpcUrl + '?rand=' + new Date().getTime(),
1463                    is_ajax: true,
1464                    action: 'loadAddressesCustomer',
1465                    object: param.object,
1466                    rc_page: AppOPC.$opc.find('#rc_page').val()
1467                };
1468                var _json = {
1469                    data: data,
1470                    success: function(json) {
1471                        var callback = null;
1472
1473                        if (typeof json.html !== typeof undefined && (OnePageCheckoutPS.IS_LOGGED || OnePageCheckoutPS.IS_GUEST)) {
1474                            AppOPC.$opc_step_one.find('.addresses_customer_container.'+param.object).html(json.html).show(400);
1475                            AppOPC.$opc_step_one.find('#'+param.object+'_address_container #form_address_'+param.object).hide(400);
1476                        }
1477
1478                        if (param.object == 'delivery') {
1479                            Address.id_address_delivery = json.id_address;
1480                            AppOPC.$opc_step_one.find('#delivery_id').val(json.id_address);
1481
1482                            callback = function() {
1483                                if (json.addresses.length > 0) {
1484                                    Fronted.validateOPC({valid_form_address_delivery: true});
1485
1486                                    if (!AppOPC.is_valid_form_address_delivery) {
1487                                        AppOPC.$opc_step_one.find('#'+param.object+'_address_container #form_address_'+param.object).show(400);
1488                                        AppOPC.$opc_step_one.find('.addresses_customer_container.'+param.object).hide(400);
1489                                    }
1490                                }
1491                            }
1492                        } else if (param.object == 'invoice') {
1493                            Address.id_address_invoice = json.id_address;
1494                            AppOPC.$opc_step_one.find('#invoice_id').val(json.id_address);
1495
1496                            callback = function() {
1497                                if (json.addresses.length > 0) {
1498                                    Fronted.validateOPC({valid_form_address_invoice: true});
1499
1500                                    if (!AppOPC.is_valid_form_address_invoice) {
1501                                        AppOPC.$opc_step_one.find('#'+param.object+'_address_container #form_address_'+param.object).show(400);
1502                                        AppOPC.$opc_step_one.find('.addresses_customer_container.'+param.object).hide(400);
1503                                    }
1504                                }
1505                            }
1506                        }
1507
1508                        if (json.id_address !== 0) {
1509                            Address.load({object: param.object, id_address: json.id_address/*, callback: callback*/});
1510                        }
1511                    },
1512                    complete: function() {
1513                        setTimeout(function() {
1514                            //calcula el alto del contenido de las tarjetas para colocar colocarles un alto igual a todas.
1515                            //-----------------------------------------------
1516                            var height_card_max = 0;
1517                            $.each($('.addresses_customer_container .address_card:not(#address_card_new) .content_card ul'), function(i, card) {
1518                                var height_card = $(card).innerHeight() + 5;
1519
1520                                if (height_card_max < height_card) {
1521                                    height_card_max = height_card;
1522                                }
1523                            });
1524                            $('.addresses_customer_container .address_card:not(#address_card_new) .content_card').css({'height': height_card_max});
1525                            //-----------------------------------------------
1526                            //calcula el alto del titulo de las tarjetas para colocar colocarles un alto igual a todas.
1527                            //-----------------------------------------------
1528                            var height_header_card_max = 0;
1529                            $.each($('.addresses_customer_container .address_card:not(#address_card_new) .header_card'), function(i, header_card) {
1530                                var height_header_card = $(header_card).innerHeight();
1531
1532                                if (height_header_card_max < height_header_card) {
1533                                    height_header_card_max = height_header_card;
1534                                }
1535                            });
1536                            $('.addresses_customer_container .address_card:not(#address_card_new) .header_card').css({'height': height_header_card_max});
1537                            //-----------------------------------------------
1538                        }, 800);
1539
1540                        if (typeof param.callback !== typeof undefined && typeof param.callback === 'function') {
1541                            param.callback();
1542                        }
1543                    }
1544                };
1545
1546                $.makeRequest(_json);
1547            } else {
1548                if (typeof param.callback !== typeof undefined && typeof param.callback === 'function') {
1549                    param.callback();
1550                }
1551            }
1552        } else {
1553            if (typeof param.callback !== typeof undefined && typeof param.callback === 'function') {
1554                param.callback();
1555            }
1556        }
1557
1558        return valid;
1559    },
1560    createCustomer: function(){
1561        var valid_form_address_delivery = true;
1562        if (!OnePageCheckoutPS.IS_VIRTUAL_CART && typeof id_carrierpickupstore !== typeof undefined) {
1563            if (Carrier.getIdCarrierSelected() == id_carrierpickupstore
1564                && (typeof CarrierPickupStore.configs.CPS_ASSOC_PICKUP_ADDR_TO_ORDER === typeof undefined
1565                        || (typeof CarrierPickupStore.configs.CPS_ASSOC_PICKUP_ADDR_TO_ORDER !== typeof undefined && CarrierPickupStore.configs.CPS_ASSOC_PICKUP_ADDR_TO_ORDER)
1566                    )
1567            ) {
1568
1569            }
1570            valid_form_address_delivery = false;
1571        }
1572        Fronted.validateOPC({valid_form_customer: true, valid_privacy: true, valid_gdpr: true, valid_form_address_delivery: valid_form_address_delivery, valid_form_address_invoice: true});
1573
1574        if (AppOPC.is_valid_opc){
1575            var fields = Review.getFields();
1576
1577            var _extra_data = Review.getFieldsExtra({});
1578            var _data = $.extend({}, _extra_data, {
1579                'url_call'				: orderOpcUrl + '?rand=' + new Date().getTime(),
1580                'is_ajax'               : true,
1581                'dataType'              : 'json',
1582                'action'                : (OnePageCheckoutPS.IS_LOGGED || OnePageCheckoutPS.IS_GUEST ? 'placeOrder' : 'createCustomerAjax'),
1583                'id_customer'           : (!$.isEmpty(AppOPC.$opc_step_one.find('#customer_id').val()) ? AppOPC.$opc_step_one.find('#customer_id').val() : ''),
1584                'id_address_delivery'   : Address.id_address_delivery,
1585                'id_address_invoice'    : !$.isEmpty(Address.id_address_invoice) ? Address.id_address_invoice : Address.id_address_delivery,
1586                'is_new_customer'       : (AppOPC.$opc_step_one.find('#checkbox_create_account_guest').is(':checked') ? 0 : 1),
1587                'fields_opc'            : JSON.stringify(fields),
1588                'is_set_invoice'        : Address.isSetInvoice(),
1589                'psgdpr-consent'        : true,//support module: psgdpr - v1.0.0 - PrestaShop
1590                'g_recaptcha_response'  : AppOPC.$opc_step_one.find('#g-recaptcha-response').val(),//support module: recaptcha - v1.2.2 - Charlie
1591                'g-recaptcha-response'  : AppOPC.$opc_step_one.find('#g-recaptcha-response').val(),//support module: recaptcha - v1.2.3 - Charlie
1592                'privacy_policy': AppOPC.$opc_step_one.find('input#privacy_policy').is(':checked') ? 1 : 0,
1593                'terms_conditions': AppOPC.$opc_step_review.find('input#cgv').is(':checked') ? 1 : 0
1594            });
1595
1596            var _json = {
1597                data: _data,
1598                beforeSend: function() {
1599                    Fronted.loading(true, '#onepagecheckoutps_step_one_container');
1600                },
1601                success: function(data) {
1602                    if (typeof data.token !== typeof undefined && typeof token !== typeof undefined) {
1603                        token = data.token;
1604                    }
1605                    if (typeof data.static_token !== typeof undefined && typeof static_token !== typeof undefined) {
1606                        static_token = data.static_token;
1607                    }
1608
1609                    if (data.isSaved && (!OnePageCheckoutPS.PS_GUEST_CHECKOUT_ENABLED || $('#checkbox_create_account_guest').is(':checked'))){
1610                        AppOPC.$opc_step_one.find('#customer_id').val(data.id_customer);
1611                        AppOPC.$opc_step_one.find('#customer_email, #customer_conf_email, #customer_passwd, #customer_conf_passwd').attr({'disabled': 'true', 'data-validation-optional' : 'true'});
1612
1613                        $('#div_onepagecheckoutps_login, #field_customer_passwd, #field_customer_conf_passwd, #field_customer_email, #field_customer_conf_email, div#onepagecheckoutps #onepagecheckoutps_step_one_container .account_creation, #field_choice_group_customer').addClass('hidden');
1614                    }
1615
1616                    if (data.hasError){
1617                        Fronted.showModal({type:'error', message : '&bullet; ' + data.errors.join('<br>&bullet; ')});
1618                    } else if (data.hasWarning){
1619                        Fronted.showModal({type:'warning', message : '&bullet; ' + data.warnings.join('<br>&bullet; ')});
1620                    } else if (typeof data.redirect !== typeof undefined) {
1621                        window.parent.location = data.redirect;
1622                    } else{
1623                        if (!OnePageCheckoutPS.IS_LOGGED && !OnePageCheckoutPS.IS_GUEST) {
1624                            var $shipping_cart = $('.shopping_cart .ajax_cart_quantity');
1625
1626                            if ($shipping_cart.length <= 0) {
1627                                $shipping_cart = $('#shopping_cart .ajax_cart_quantity');
1628                            }
1629
1630                            /* Compatibilidad thema leodigital version 1.0 */
1631                            if ($shipping_cart.length <= 0) {
1632                                $shipping_cart = $('#top-sliding-cart .ajax_cart_quantity');
1633                            }
1634                            /* End */
1635
1636                            if (parseInt($shipping_cart.text()) > 0){
1637                                var orderOpcUrlTMP = orderOpcUrl;
1638                                if (OnePageCheckoutPS.CONFIGS.OPC_REDIRECT_DIRECTLY_TO_OPC) {
1639                                    orderOpcUrlTMP += '?checkout=1';
1640                                }
1641
1642                                window.parent.location = orderOpcUrlTMP;
1643                            } else {
1644                                window.parent.location = myaccountUrl;
1645                            }
1646
1647                            $('div#onepagecheckoutps #btn_save_customer').attr('disabled', 'true');
1648                        } else {
1649                            if (data.hasSuccess) {
1650                                Fronted.showModal({ type: 'success', message: '&bullet; ' + data.success.join('<br>&bullet; ') });
1651                            }
1652
1653                            if (AppOPC.$opc_step_one.find('#checkbox_change_passwd').length > 0
1654                            && AppOPC.$opc_step_one.find('#checkbox_change_passwd').is(':checked')) {
1655                                AppOPC.$opc_step_one.find('#checkbox_change_passwd').trigger('click');
1656                            }
1657                        }
1658                    }
1659                },
1660                complete: function(){
1661                    Fronted.loading(false, '#onepagecheckoutps_step_one_container');
1662                    Fronted.loadingBig(false);
1663                }
1664            };
1665
1666            var callback = function() {
1667                $.makeRequest(_json);
1668            }
1669
1670            supportModuleGDPR(callback);
1671        }
1672    },
1673    load: function(params){
1674        var param = $.extend({}, {
1675            object: '',
1676            id_address: false,
1677            callback: ''
1678        }, params);
1679
1680        if (param.object == 'customer') {
1681            if (!OnePageCheckoutPS.IS_LOGGED && !OnePageCheckoutPS.IS_GUEST) {
1682                return false;
1683            }
1684        }
1685        if (param.object == 'delivery') {
1686            if (OnePageCheckoutPS.IS_VIRTUAL_CART && !OnePageCheckoutPS.CONFIGS.OPC_SHOW_DELIVERY_VIRTUAL) {
1687                return false;
1688            }
1689        }
1690        if (param.object == 'invoice') {
1691            if (!Address.isSetInvoice()) {
1692                return false;
1693            }
1694        }
1695
1696        var data = {
1697            url_call: orderOpcUrl + '?rand=' + new Date().getTime(),
1698            is_ajax: true,
1699            action: 'loadAddress',
1700            object: param.object,
1701            id_address: param.id_address
1702        };
1703        var _json = {
1704            data: data,
1705            beforeSend: function() {},
1706            success: function(json) {
1707                if(!$.isEmpty(json.customer.id) || !$.isEmpty(json.address.id)) {
1708                    Address.id_customer = $.isEmpty(json.customer.id) ? 0 : json.customer.id;
1709
1710                    if (param.object == 'delivery') {
1711                        Address.id_address_delivery = $.isEmpty(json.address.id) ? 0 : json.address.id;
1712                    } else if (param.object == 'invoice') {
1713                        Address.id_address_invoice = $.isEmpty(json.address.id) ? 0 : json.address.id;
1714
1715                        if (!OnePageCheckoutPS.SHOW_DELIVERY_VIRTUAL && OnePageCheckoutPS.IS_VIRTUAL_CART) {
1716                            Address.id_address_delivery = Address.id_address_invoice;
1717                        }
1718                    }
1719
1720                    if (OnePageCheckoutPS.IS_LOGGED || OnePageCheckoutPS.IS_GUEST) {
1721                        //var object_load = '.'+param.object+',.customer';
1722                        var object_load = '.'+param.object;
1723
1724                        //load customer, delivery or invoice data
1725                        $('div#onepagecheckoutps #onepagecheckoutps_step_one').find(object_load).each(function(i, field){
1726                            var $field = $(field);
1727                            var name = $field.data('field-name');
1728                            var default_value = $field.data('default-value');
1729                            var object = '';
1730
1731                            if ($field.hasClass('customer')){
1732                                var value = json.customer[name];
1733                                object = 'customer';
1734                            }else if ($field.hasClass('delivery')){
1735                                var value = json.address[name];
1736                                object = 'delivery';
1737                            }else if ($field.hasClass('invoice')){
1738                                var value = json.address[name];
1739                                object = 'invoice';
1740                            }
1741
1742                            if (object === 'customer' && name === 'passwd') {
1743                                return;
1744                            }
1745
1746                            if (object == 'invoice' && !OnePageCheckoutPS.CONFIGS.OPC_ENABLE_INVOICE_ADDRESS){
1747                                AppOPC.$opc_step_one.find('#invoice_id').val('');
1748
1749                                return;
1750                            }
1751
1752                            if (value == '0000-00-00') {
1753                                value = '';
1754                            }
1755
1756                            if ($field.is(':checkbox')){
1757                                if (parseInt(value)) {
1758                                    $field.attr('checked', 'true');
1759                                } else {
1760                                    $field.removeAttr('checked');
1761                                }
1762                            } else if ($field.is(':radio')){
1763                                if ($field.val() == value) {
1764                                    $field.attr('checked', 'true');
1765                                }
1766                            } else {
1767                                if (name == 'birthday' || $field.hasClass('hasDatepicker')) {
1768                                    if (!$.isEmpty(value)) {
1769                                        var date_value = value.split('-');
1770                                        var date_string = OnePageCheckoutPS.date_format_language.replace('dd', date_value[2]);
1771                                        date_string = date_string.replace('mm', date_value[1]);
1772                                        date_string = date_string.replace('yy', date_value[0]);
1773
1774                                        $field.val(date_string);
1775                                    }
1776                                }else /*if (name != 'email')*/ {
1777                                    $field.val(value);
1778                                }
1779
1780                                //do not show values by default on input text
1781                                if ($field.is(':text')) {
1782                                    if (value == default_value) {
1783                                        $field.val('');
1784                                    }
1785                                }
1786                            }
1787
1788                            if (name == 'email'){
1789                                if (OnePageCheckoutPS.IS_LOGGED) {
1790                                    $field.attr('disabled', 'true');
1791                                } else {
1792                                    $('div#onepagecheckoutps #onepagecheckoutps_step_one #customer_conf_email').val($field.val());
1793                                }
1794                            }
1795                        });
1796                    }
1797
1798                    if (param.object == 'delivery' || param.object == 'invoice') {
1799                        Address.isNeedDniByCountryId({ object: param.object, id_country: json.address.id_country});
1800                        Address.isNeedPostCodeByCountryId({ object: param.object, id_country: json.address.id_country});
1801
1802                        if (OnePageCheckoutPS.IS_LOGGED || OnePageCheckoutPS.IS_GUEST) {
1803                            Address.updateState({ object: param.object, id_country: json.address.id_country, id_state_default: json.address['id_state'] });
1804                        } else {
1805                            $('div#onepagecheckoutps select#' + param.object + '_id_country').val(json.address.id_country);
1806
1807                            Address.updateState({ object: param.object, id_country: json.address.id_country });
1808                        }
1809                    }
1810                } else {
1811                    Address.isNeedDniByCountryId({object: param.object});
1812                    Address.isNeedPostCodeByCountryId({object: param.object});
1813                    Address.updateState({object: param.object});
1814                }
1815            },
1816            complete: function(){
1817                if (typeof param.callback !== typeof undefined && typeof param.callback === 'function') {
1818                    param.callback();
1819                }
1820                //Compatibilidad: shippingcost 4859999
1821                if (typeof AppFrontSCP !== typeof undefined) {
1822                    AppFrontSCP.triggerAutocomplete();
1823                }
1824            }
1825        };
1826        $.makeRequest(_json);
1827    },
1828    loadAutocompleteAddress: function () {
1829        if (OnePageCheckoutPS.CONFIGS.OPC_AUTOCOMPLETE_GOOGLE_ADDRESS
1830            && !$.isEmpty(OnePageCheckoutPS.CONFIGS.OPC_GOOGLE_API_KEY)
1831            && typeof google.maps.places !== typeof undefined
1832        ) {
1833            if ($('#delivery_address1').length > 0) {
1834                //Nota: La restriccion por pais solo permite hasta 5 paises, por lo cual solo se manda el pais seleccionado.
1835                var countries = [];
1836                if ($('#delivery_id_country').length > 0) {
1837                    countries.push($('#delivery_id_country option:selected').data('iso-code'));
1838                } else {
1839                    countries.push(OnePageCheckoutPS.iso_code_country_delivery_default);
1840                }
1841
1842                Address.autocomplete_delivery = new google.maps.places.Autocomplete(
1843                    (document.getElementById('delivery_address1')),
1844                    {
1845                        types: ['geocode'],
1846                        componentRestrictions: { country: countries }
1847                    }
1848                );
1849                google.maps.event.addListener(Address.autocomplete_delivery, 'place_changed', function () {
1850                    Address.fillInAddress('delivery', Address.autocomplete_delivery);
1851                });
1852            }
1853
1854            if ($('#invoice_address1').length > 0) {
1855                //Nota: La restriccion por pais solo permite hasta 5 paises, por lo cual solo se manda el pais seleccionado.
1856                var countries = [];
1857                if ($('#invoice_id_country').length > 0) {
1858                    countries.push($('#invoice_id_country option:selected').data('iso-code'));
1859                } else {
1860                    countries.push(OnePageCheckoutPS.iso_code_country_invoice_default);
1861                }
1862
1863                Address.autocomplete_invoice = new google.maps.places.Autocomplete(
1864                    (document.getElementById('invoice_address1')),
1865                    {
1866                        types: ['geocode'],
1867                        componentRestrictions: { country: countries }
1868                    }
1869                );
1870
1871                google.maps.event.addListener(Address.autocomplete_invoice, 'place_changed', function () {
1872                    Address.fillInAddress('invoice', Address.autocomplete_invoice);
1873                });
1874            }
1875        }
1876    },
1877    updateAutocompleteAddress: function (params) {
1878        var param = $.extend({}, {
1879            object: ''
1880        }, params);
1881
1882        if (OnePageCheckoutPS.CONFIGS.OPC_AUTOCOMPLETE_GOOGLE_ADDRESS
1883            && !$.isEmpty(OnePageCheckoutPS.CONFIGS.OPC_GOOGLE_API_KEY)
1884            && typeof google.maps.places !== typeof undefined
1885        ) {
1886            var iso_country = AppOPC.$opc_step_one.find('#' + param.object + '_id_country option:selected').data('iso-code');
1887            var options = {
1888                componentRestrictions: { country: iso_country }
1889            };
1890
1891            if (param.object == 'delivery' && typeof Address.autocomplete_delivery !== typeof undefined) {
1892                Address.autocomplete_delivery.setOptions(options);
1893            } else if (param.object == 'invoice' && typeof Address.autocomplete_invoice !== typeof undefined) {
1894                Address.autocomplete_invoice.setOptions(options);
1895            }
1896        }
1897    },
1898    fillInAddress: function(address, autocomplete) {
1899        Address.componentForm = {
1900            administrative_area_level_1: {index: 0, type: 'select', field: address + '_id_state'},
1901            administrative_area_level_2: {index: 1, type: 'select', field: address + '_id_state'},
1902            administrative_area_level_3: {index: 2, type: 'select', field: address + '_id_state'},
1903            country: {index: 3, type: 'select', field: address + '_id_country'},
1904            locality: {index: 4, type: 'long_name', field: address + '_city'},
1905            postal_code: {index: 5, type: 'long_name', field: address + '_postcode'},
1906            street_number: {index: 6, type: 'short_name', field: address + '_address1'},
1907            route: {index: 7, type: 'long_name', field: address + '_address1'},
1908            premise: {index: 8, type: 'short_name', field: address + '_address1'}
1909        };
1910
1911        // Get the place details from the autocomplete object.
1912        var place = autocomplete.getPlace();
1913        //reset
1914        $.each(Address.componentForm, function(c, component) {
1915            if (component.type !== 'select' && component.field != (address + '_address1')) {
1916                $('#' + component.field).val('');
1917            }
1918        });
1919
1920        var components = [];
1921        var found_address = false;
1922        var components_state = [];
1923
1924        $.each(place.address_components, function(a, component) {
1925            if (typeof Address.componentForm[component.types[0]] !== typeof undefined) {
1926                var field = Address.componentForm[component.types[0]].field;
1927                var type = Address.componentForm[component.types[0]].type;
1928                var index = Address.componentForm[component.types[0]].index;
1929
1930                if (component.types[0] == 'street_number' || component.types[0] == 'route' || component.types[0] == 'administrative_area_level_3') {
1931                    found_address = true;
1932                }
1933
1934                components[index] = {
1935                    field: field,
1936                    type: type,
1937                    name: component.types[0],
1938                    short_name: component.short_name,
1939                    long_name: component.long_name,
1940                    value: (typeof component[type] !== typeof undefined) ? component[type] : component.long_name
1941                };
1942            }
1943        });
1944
1945        $.each(components, function(c, component) {
1946            if (typeof component !== typeof undefined) {
1947                if (component.type === 'select') {
1948                    if (component.name === 'country') {
1949                        if ($('#' + address + '_id_country').length > 0) {
1950                            $('#' + address + '_id_country option').prop('selected', false);
1951                            $('#' + address + '_id_country option[data-iso-code="' + component.short_name + '"]').prop('selected', true);
1952                            $('#' + address + '_id_country').trigger('change');
1953                        } else {
1954                            Address.updateState({object: 'delivery'});
1955                        }
1956                    } else if (typeof $('#' + address + '_id_state')[0] !== typeof undefined) {
1957                        components_state.push(component)
1958
1959                        Address.callBackState = function() {
1960                            var id_state = '';
1961
1962                            $.each(components_state, function(c, component_state) {
1963                                if ($('#' + address + '_id_state option[data-iso-code="' + component_state.short_name + '"]').length > 0) {
1964                                    id_state = $('#' + address + '_id_state option[data-iso-code="' + component_state.short_name + '"]').val();
1965
1966                                    return false;
1967                                }else if ($('#' + address + '_id_state option[data-text="' + component_state.value + '"]').length > 0) {
1968                                    id_state = $('#' + address + '_id_state option[data-text="' + component_state.value + '"]').val();
1969
1970                                    return false;
1971                                }
1972                            });
1973                            if (!$.isEmpty(id_state)) {
1974                                $('#' + address + '_id_state option').prop('selected', false);
1975                                $('#' + address + '_id_state').val(id_state);
1976                            }
1977                        }
1978                    }
1979                } else {
1980                    var tmp_value = $('#' + component.field).val();
1981
1982                    if (component.field == (address + '_address1') && !$.isEmpty(tmp_value)) {
1983                        if (OnePageCheckoutPS.CONFIGS.OPC_SUGGESTED_ADDRESS_GOOGLE) {
1984                            $('#' + address + '_address1').val(tmp_value);
1985                        } else {
1986                            $('#' + address + '_address1').val(place.name);
1987                        }
1988                    } else {
1989                        $('#' + component.field).val(component.value).validate();
1990                    }
1991                }
1992            }
1993        });
1994
1995        if (!found_address) {
1996            $('#' + address + '_address1').val(place.name);
1997        }
1998
1999        //dispatch inputs events
2000        if (typeof is_necessary_postcode !== typeof undefined && is_necessary_postcode) {
2001            $('#onepagecheckoutps_step_one #'+address+'_postcode').trigger('blur');
2002        } else if(typeof is_necessary_city !== typeof undefined && is_necessary_city) {
2003            $('#onepagecheckoutps_step_one #'+address+'_city').trigger('blur');
2004        }
2005    },
2006    geolocate: function(event) {
2007        $(event.currentTarget).off('focus');
2008        if (navigator.geolocation) {
2009            navigator.geolocation.getCurrentPosition(function(position) {
2010            var geolocation = new google.maps.LatLng(
2011                position.coords.latitude, position.coords.longitude);
2012                autocomplete.setBounds(new google.maps.LatLngBounds(geolocation,
2013                    geolocation));
2014            });
2015        }
2016    },
2017    updateState: function(params) {
2018        var param = $.extend({}, {
2019            object: '',
2020            id_state_default: '',
2021            id_country: null
2022        }, params);
2023
2024        var states = null;
2025        if (!$.isEmpty(param.object)) {
2026            const $id_state = $('div#onepagecheckoutps select#' + param.object + '_id_state');
2027            const $id_country = $('div#onepagecheckoutps select#' + param.object + '_id_country');
2028
2029            var id_country = param.id_country;
2030
2031            if ($.isEmpty(id_country)) {
2032                if ($id_country.length > 0) {
2033                    id_country = $id_country.val();
2034                } else {
2035                    if (param.object == 'delivery') {
2036                        id_country = OnePageCheckoutPS.id_country_delivery_default;
2037                    } else if (param.object == 'invoice') {
2038                        id_country = OnePageCheckoutPS.id_country_invoice_default;
2039                    }
2040                }
2041            } else if ($id_country.find('option[value='+id_country+']').length === 0) {
2042                id_country = $id_country.find('option[value!=""]:first').val();
2043            }
2044
2045			var states = null;
2046            if (!$.isEmpty(id_country) && id_country !== '0' && typeof countriesJS !== typeof undefined) {
2047                states = countriesJS[id_country]['states'];
2048            }
2049
2050            //delete states
2051            $id_state.find('option').remove();
2052
2053            if (!$.isEmpty(states)) {
2054                //empty option
2055                var $option = $('<option/>')
2056                    .attr({
2057                        value: '',
2058                    }).append('--');
2059                 $option.appendTo($id_state);
2060
2061                $.each(states, function(i, state) {
2062                    var $option = $('<option/>')
2063                        .attr({
2064                            'data-text': state.name,
2065                            'data-iso-code': state.iso_code,
2066                            value: state.id,
2067                        }).append(state.name);
2068
2069                    if (param.id_state_default == state.id) {
2070                        $option.attr('selected', 'true');
2071                    }
2072
2073                    $option.appendTo($id_state);
2074                });
2075
2076                if (typeof Address.callBackState === 'function') {
2077                    Address.callBackState();
2078                } else {
2079                    //auto select state.
2080                    if ($.isEmpty($id_state.find('option:selected').val())){
2081                        var default_value = $id_state.attr('data-default-value');
2082
2083                        if (default_value === '0' || (!$.isEmpty(default_value) && $id_state.find('option[value='+default_value+']').length <= 0)) {
2084                            $id_state.find(':eq(1)').attr('selected', 'true');
2085                        } else if ($.isEmpty(default_value)) {
2086                            $id_state.find(':eq(0)').attr('selected', 'true');
2087                        } else {
2088                            if (typeof forze_select_state !== typeof undefined && forze_select_state) {
2089                                $id_state.val(default_value);
2090                            }
2091                        }
2092                    }
2093                }
2094
2095                if (param.object == 'delivery' || (param.object == 'invoice' && Address.isSetInvoice())) {
2096                    $id_state.attr('data-validation', 'required').addClass('required');
2097                }
2098                $('div#onepagecheckoutps #field_' + param.object + '_id_state').find('sup').html('*');
2099                $('div#onepagecheckoutps #field_' + param.object + '_id_state').show();
2100
2101                /* Compatibilidad shippingconfiguratorpro */
2102                if (typeof AppFrontSCP !== typeof undefined) {
2103                    var id_state_selected = $id_state.val();
2104                    var $input_city = $('#' + param.object + '_city');
2105                    if ($.isEmpty(id_state_selected)
2106                        && typeof AppFrontSCP.existAddressFieldOPC !== typeof undefined
2107                        && AppFrontSCP.existAddressFieldOPC(param.object)
2108                    ) {
2109                        AppFrontSCP.disableInputCity($input_city, 'state');
2110                    } else {
2111                        AppFrontSCP.enableInputCity($input_city);
2112                    }
2113
2114                    AppFrontSCP.initAutocomplete($input_city, id_state_selected, 'state');
2115                }
2116            } else {
2117                $id_state.removeAttr('data-validation').removeClass('required');
2118                $('div#onepagecheckoutps #field_' + param.object + '_id_state').find('sup').html('');
2119                $('div#onepagecheckoutps #field_' + param.object + '_id_state').hide();
2120
2121                /* Compatibilidad shippingconfiguratorpro */
2122                if (typeof AppFrontSCP !== typeof undefined) {
2123                    var $input_city = $('#' + param.object + '_city');
2124                    if ($.isEmpty(id_country)
2125                        && typeof AppFrontSCP.existAddressFieldOPC !== typeof undefined
2126                        && AppFrontSCP.existAddressFieldOPC(param.object)
2127                    ) {
2128                        AppFrontSCP.disableInputCity($input_city, 'country');
2129                    } else {
2130                        AppFrontSCP.enableInputCity($input_city);
2131                    }
2132
2133                    AppFrontSCP.initAutocomplete($input_city, id_country, 'country');
2134                }
2135            }
2136
2137            Address.getCitiesByState({object: param.object});
2138        }
2139    },
2140    checkNeedInvoice: function(params){
2141        var param = $.extend({}, {
2142        }, params);
2143
2144        if (Address.isSetInvoice()) {
2145            Address.isNeedDniByCountryId({ object: 'invoice' });
2146            Address.isNeedPostCodeByCountryId({ object: 'invoice' });
2147            Address.updateState({ object: 'invoice' });
2148            Address.loadAddressesCustomer({ object: 'invoice' });
2149
2150            AppOPC.$opc_step_one.find('#invoice_address_container').css('height', 'auto').addClass('in');
2151
2152            $('div#onepagecheckoutps #panel_address_invoice').removeClass('hidden');
2153
2154            $('div#onepagecheckoutps #invoice_address_container .invoice.required').each(function(i, item){
2155                $(item).removeAttr('data-validation-optional');
2156            });
2157
2158            if (typeof $.totalStorageOPC !== typeof undefined) {
2159                $.totalStorageOPC('create_invoice_address_'+OnePageCheckoutPS.id_shop, true);
2160            }
2161        }else{
2162            $('div#onepagecheckou
2162tps #panel_address_invoice').addClass('hidden');
2163
2164            $('div#onepagecheckoutps #invoice_address_container .invoice.required').each(function(i, item){
2165                $(item).attr('data-validation-optional', 'true').trigger('reset');
2166            });
2167
2168            if (typeof $.totalStorageOPC !== typeof undefined) {
2169                $.totalStorageOPC('create_invoice_address_'+OnePageCheckoutPS.id_shop, false);
2170            }
2171        }
2172    },
2173    togglePasswordRequired: function(toggle_elem) {
2174        if ($('div#onepagecheckoutps').find(toggle_elem).is(':checked')){
2175            $('div#onepagecheckoutps #field_customer_passwd, div#onepagecheckoutps #field_customer_conf_passwd, div#onepagecheckoutps #field_customer_current_passwd')
2176                .fadeIn()
2177                .addClass('required');
2178            $('div#onepagecheckoutps #field_customer_passwd sup, div#onepagecheckoutps #field_customer_conf_passwd sup, div#onepagecheckoutps #field_customer_current_passwd sup').html('*');
2179            $('div#onepagecheckoutps #customer_passwd, div#onepagecheckoutps #customer_conf_passwd, div#onepagecheckoutps #customer_current_passwd').removeAttr('data-validation-optional')
2180                .val('');
2181        }else{
2182            $('div#onepagecheckoutps #field_customer_passwd, div#onepagecheckoutps #field_customer_conf_passwd, div#onepagecheckoutps #field_customer_current_passwd')
2183                .fadeOut()
2184                .removeClass('required')
2185                .trigger('reset');
2186            $('div#onepagecheckoutps #field_customer_passwd sup, div#onepagecheckoutps #field_customer_conf_passwd sup, div#onepagecheckoutps #field_customer_current_passwd sup').html('');
2187            $('div#onepagecheckoutps #customer_passwd, div#onepagecheckoutps #customer_conf_passwd, div#onepagecheckoutps #customer_current_passwd').attr('data-validation-optional', 'true')
2188                .val('');
2189        }
2190    },
2191    checkGuestAccount: function(){
2192        if ($('#field_customer_current_passwd').length > 0) {
2193            Address.togglePasswordRequired('#checkbox_change_passwd');
2194        } else {
2195            if (OnePageCheckoutPS.PS_GUEST_CHECKOUT_ENABLED){
2196                if (OnePageCheckoutPS.CONFIGS.OPC_SHOW_BUTTON_REGISTER) {
2197                    if (AppOPC.$opc_step_one.find('#checkbox_create_account_guest').is(':checked')) {
2198                        AppOPC.$opc_step_one.find('#btn_save_customer').show();
2199                    } else {
2200                        AppOPC.$opc_step_one.find('#btn_save_customer').hide();
2201                    }
2202                }
2203                Address.togglePasswordRequired('#checkbox_create_account_guest');
2204            }else{
2205                if (OnePageCheckoutPS.CONFIGS.OPC_REQUEST_PASSWORD && OnePageCheckoutPS.CONFIGS.OPC_OPTION_AUTOGENERATE_PASSWORD){
2206                    Address.togglePasswordRequired('#checkbox_create_account');
2207                }
2208            }
2209        }
2210    },
2211    isSetInvoice: function() {
2212        if (((OnePageCheckoutPS.CONFIGS.OPC_ENABLE_INVOICE_ADDRESS && OnePageCheckoutPS.CONFIGS.OPC_REQUIRED_INVOICE_ADDRESS) || $('div#onepagecheckoutps #checkbox_create_invoice_address').is(':checked'))
2213            && $('#panel_addresses_customer').length > 0
2214        ) {
2215            return true;
2216        }
2217
2218        return false;
2219    },
2220    isNeedDniByCountryId: function(params){
2221        var param = $.extend({}, {
2222            object: '',
2223            id_country: null
2224        }, params);
2225
2226        if (!$.isEmpty(param.object)){
2227            var id_country = param.id_country;
2228            const $id_country = $('#onepagecheckoutps_step_one select#' + param.object + '_id_country');
2229
2230            if ($.isEmpty(id_country)) {
2231                if ($id_country.length > 0) {
2232                    id_country = $id_country.val();
2233                } else if (typeof OnePageCheckoutPS !== typeof undefined) {
2234                    if (param.object == 'delivery') {
2235                        id_country = OnePageCheckoutPS.id_country_delivery_default;
2236                    } else if (param.object == 'invoice') {
2237                        id_country = OnePageCheckoutPS.id_country_invoice_default;
2238                    }
2239                }
2240            } else if ($id_country.find('option[value='+id_country+']').length === 0) {
2241                id_country = $id_country.find('option[value!=""]:first').val();
2242            }
2243
2244            if (!$.isEmpty(id_country) && id_country !== '0' && typeof countriesJS !== typeof undefined && $('#field_' + param.object + '_dni').length > 0){
2245                if (countriesJS[id_country]['need_identification_number']) {
2246                    if ((param.object === 'invoice' && Address.isSetInvoice())
2247                            || param.object === 'delivery') {
2248                        $('#field_' + param.object + '_dni').addClass('required').show();
2249                        $('#field_' + param.object + '_dni sup').html('*');
2250                        $('#' + param.object + '_dni').removeAttr('data-validation-optional').addClass('required');
2251                    } else {
2252                        if (!$('#field_' + param.object + '_dni').is(':visible')){
2253                            $('#field_' + param.object + '_dni').show();
2254                        }
2255
2256                        $('#field_' + param.object + '_dni').removeClass('required').hide();
2257                        $('#field_' + param.object + '_dni sup').html('');
2258                        $('#' + param.object + '_dni').attr('data-validation-optional', 'true').removeClass('required');
2259                    }
2260                } else {
2261                    if ($('#' + param.object + '_dni').attr('data-required') == '0'){
2262                        $('#field_' + param.object + '_dni').removeClass('required');
2263                        $('#field_' + param.object + '_dni sup').html('');
2264                        $('#' + param.object + '_dni').attr('data-validation-optional', 'true').removeClass('required');
2265
2266                        if ($('#' + param.object + '_dni').attr('data-active') == '0'){
2267                            $('#field_' + param.object + '_dni').hide();
2268                        }
2269                    }
2270                }
2271            }
2272        }
2273    },
2274	isNeedPostCodeByCountryId: function(params){
2275        var param = $.extend({}, {
2276            object: '',
2277            id_country: null
2278        }, params);
2279
2280        if (!$.isEmpty(param.object)){
2281            var id_country = param.id_country;
2282            const $postcode = AppOPC.$opc.find('#' + param.object + '_postcode');
2283            const $id_country = AppOPC.$opc.find('select#' + param.object + '_id_country');
2284
2285            if ($.isEmpty(id_country)) {
2286                if ($id_country.length > 0) {
2287                    id_country = $id_country.val();
2288                } else {
2289                    if (param.object == 'delivery') {
2290                        id_country = OnePageCheckoutPS.id_country_delivery_default;
2291                    } else if (param.object == 'invoice') {
2292                        id_country = OnePageCheckoutPS.id_country_invoice_default;
2293                    }
2294                }
2295            } else if ($id_country.find('option[value='+id_country+']').length === 0) {
2296                id_country = $id_country.find('option[value!=""]:first').val();
2297            }
2298
2299            if (typeof id_country !== typeof undefined && typeof countriesJS !== typeof undefined && $postcode.length > 0) {
2300                var $postcode_field = AppOPC.$opc.find('#field_' + param.object + '_postcode');
2301                var default_value = '';
2302                var format = '';
2303                var country_iso_code = '';
2304                var need_zip_code = false;
2305
2306                if (!$.isEmpty(id_country) && id_country !== '0' && !$.isEmpty(countriesJS[id_country]['zip_code_format'])){
2307                    default_value = countriesJS[id_country]['zip_code_format'];
2308                    default_value = default_value.replace(/N/g, '0');
2309                    default_value = default_value.replace(/L/g, 'A');
2310                    default_value = default_value.replace(/C/g, countriesJS[id_country]['iso_code']);
2311
2312                    country_iso_code = countriesJS[id_country]['iso_code'];
2313                    format = countriesJS[id_country]['zip_code_format'];
2314
2315                    if (countriesJS[id_country]['need_zip_code']) {
2316                        need_zip_code = true;
2317                    }
2318                }
2319
2320                $postcode
2321                        .data({
2322                            'default-value': default_value,
2323                            'format': format,
2324                            'country-iso-code': country_iso_code
2325                        })
2326                        .attr('placeholder', default_value);
2327
2328                if (need_zip_code) {
2329                    $postcode_field.addClass('required').show();
2330                    $postcode_field.find('sup').html('*');
2331
2332                    if (param.object === 'delivery' || (param.object === 'invoice' && AppOPC.$opc.find('#checkbox_create_invoice_address').is(':checked'))) {
2333                        $postcode.removeAttr('data-validation-optional').addClass('required');
2334                    }
2335                } else {
2336                    $postcode_field.removeClass('required');
2337                    $postcode_field.find('sup').html('');
2338                    $postcode.attr('data-validation-optional', 'true').removeClass('required');
2339                }
2340            }
2341        }
2342    },
2343    checkEmailCustomer: function(e){
2344        var email = $(e.currentTarget).val();
2345        /* Valida si el cliente esta logueado */
2346        if (OnePageCheckoutPS.IS_LOGGED) {
2347            return true;
2348        }
2349        var data = {
2350            url_call: orderOpcUrl + '?rand=' + new Date().getTime(),
2351            is_ajax: true,
2352			dataType: 'html',
2353            action: 'checkRegisteredCustomerEmail',
2354            email: email
2355        };
2356
2357        if (!$.isEmpty(email) && $.isEmail(email)){
2358            var _json = {
2359                data: data,
2360                success: function(id_customer) {
2361                    var callback = function(){
2362                        AppOPC.$opc.find('#form_login #txt_login_email').val(AppOPC.$opc.find('#customer_email').val());
2363                        AppOPC.$opc.find('#email_check_modal .modal-footer').append('<button type="button" class="btn btn-primary" onclick="$(\'div#onepagecheckoutps button.close\').trigger(\'click\');$(\'div#onepagecheckoutps #opc_show_login\').trigger(\'click\')" style="margin-left: 15px;">'+OnePageCheckoutPS.Msg.login_customer+'</button>');
2364                    }
2365                    var callback_close = function() {
2366                        $(e.currentTarget).val('').trigger('reset').focus();
2367                        AppOPC.$opc.find('#customer_conf_email').val('').trigger('reset');
2368
2369                        return true;
2370                    }
2371
2372                    if (id_customer != 0){
2373                        Fronted.showModal({name: 'email_check_modal', type:'normal', content : OnePageCheckoutPS.Msg.error_registered_email, button_close: true, callback_close: callback_close, callback: callback});
2374                    }
2375                }
2376            };
2377            $.makeRequest(_json);
2378        }
2379    },
2380    clearFormByObject: function(object){
2381        AppOPC.$opc_step_one.find('#form_address_'+object).trigger('reset');
2382        AppOPC.$opc_step_one.find('.addresses_customer_container .edit_address').removeAttr('disabled').removeClass('disabled');
2383
2384        Address.initEventsChangeCountry(object);
2385
2386        /* Compatibilidad shippingconfiguratorpro */
2387        if (typeof AppFrontSCP !== typeof undefined) {
2388            if (typeof AppFrontSCP.existAddressFieldOPC !== typeof undefined && AppFrontSCP.existAddressFieldOPC(object)) {
2389                AppFrontSCP.disableInputCity($('#' + object + '_city'), 'state');
2390            } else {
2391                AppFrontSCP.triggerAutocomplete();
2392            }
2393        }
2394
2395    },
2396    updateAddress: function(params){
2397        var param = $.extend({}, {
2398            object: '',
2399            id_address: '',
2400            load_carriers: false,
2401            load_payments: false,
2402            load_review: false,
2403            load_addresses: false,
2404            update_cart: false,
2405            callback: ''
2406        }, params);
2407
2408        if (OnePageCheckoutPS.IS_LOGGED) {
2409            if (param.object == 'delivery') {
2410                Fronted.validateOPC({valid_form_address_delivery: true});
2411            } else if (param.object == 'invoice') {
2412                Fronted.validateOPC({valid_form_address_invoice: true});
2413            }
2414        } else {
2415            AppOPC.is_valid_opc = true;
2416        }
2417
2418        if (AppOPC.is_valid_opc) {
2419            var fields = Review.getFields({object: param.object});
2420            var rc_page = AppOPC.$opc.find('#rc_page').val();
2421
2422            var _extra_data = Review.getFieldsExtra({});
2423            var data = $.extend({}, _extra_data, {
2424                url_call: orderOpcUrl + '?rand=' + new Date().getTime(),
2425                is_ajax: true,
2426                action: 'updateAddress',
2427                dataType: 'json',
2428                id_customer: AppOPC.$opc.find('#customer_id').val(),
2429                id_address: (!$.isEmpty(param.id_address) ? param.id_address : AppOPC.$opc.find('#'+param.object+'_id').val()),
2430                object: param.object,
2431                update_cart: param.update_cart,
2432                is_set_invoice: Address.isSetInvoice(),
2433                fields: JSON.stringify(fields),
2434                rc_page: rc_page
2435            });
2436
2437            var _json = {
2438                data: data,
2439                beforeSend: function() {
2440                    Fronted.loading(true, '#onepagecheckoutps_step_one_container');
2441                },
2442                success: function(json) {
2443                    if (typeof json.id_address_delivery !== typeof undefined) {
2444                        Address.id_address_delivery = json.id_address_delivery;
2445                    }
2446                    if (typeof json.id_address_invoice !== typeof undefined) {
2447                        Address.id_address_invoice = json.id_address_invoice;
2448                    }
2449
2450                    if (param.load_addresses) {
2451                        Address.loadAddressesCustomer({object: param.object, id_address: param.id_address});
2452                    }
2453                    if (param.load_carriers && !OnePageCheckoutPS.IS_VIRTUAL_CART) {
2454                        Carrier.getByCountry();
2455                    }
2456                    if (param.load_payments || (OnePageCheckoutPS.IS_VIRTUAL_CART && param.load_carriers)) {
2457                        PaymentPTS.getByCountry();
2458                    }
2459                    if (param.load_review && !param.load_payments) {
2460                        Review.display();
2461                    }
2462                },
2463                complete: function(){
2464                    Fronted.loading(false, '#onepagecheckoutps_step_one_container');
2465                    if (AppOPC.$opc_step_review.length <= 0 || !param.load_carriers) {
2466                        Fronted.loadingBig(false);
2467                    }
2468
2469                    if (typeof param.callback !== typeof undefined && typeof param.callback === 'function')
2470                        param.callback();
2471                }
2472            };
2473            $.makeRequest(_json);
2474        }
2475    },
2476    removeAddress: function(param){
2477        var alias_address = AppOPC.$opc_step_one.find('#address_card_'+param.id_address+' .header_card span').text().trim();
2478
2479        if (confirm(OnePageCheckoutPS.Msg.confirm_remove_address+' "'+alias_address+'"')) {
2480            var data = {
2481                url_call: orderOpcUrl + '?rand=' + new Date().getTime(),
2482                is_ajax: true,
2483                action: 'removeAddress',
2484                dataType: 'json',
2485                id_address: param.id_address
2486            };
2487
2488            var _json = {
2489                data: data,
2490                beforeSend: function() {
2491                    Fronted.loading(true, '#onepagecheckoutps_step_one_container');
2492                },
2493                success: function() {
2494                    Address.loadAddressesCustomer({object: param.object});
2495                },
2496                complete: function(){
2497                    Fronted.loading(false, '#onepagecheckoutps_step_one_container');
2498                    Fronted.loadingBig(false);
2499                }
2500            };
2501            $.makeRequest(_json);
2502
2503            return true;
2504        }
2505
2506        return false;
2507    },
2508    removeAddressInvoice: function(params){
2509        var param = $.extend({}, {
2510            callback: ''
2511        }, params);
2512
2513        if (!$('div#onepagecheckoutps #checkbox_create_invoice_address').is(':checked')){
2514            var data = {
2515                url_call: orderOpcUrl + '?rand=' + new Date().getTime(),
2516                is_ajax: true,
2517                action: 'removeAddressInvoice',
2518                dataType: 'html'
2519            };
2520
2521            var _json = {
2522                data: data,
2523                beforeSend: function() {
2524                    Fronted.loading(true, '#onepagecheckoutps_step_one_container');
2525                },
2526                success: function() {
2527                    Carrier.getByCountry();
2528                },
2529                complete: function(){
2530                    Fronted.loading(false, '#onepagecheckoutps_step_one_container');
2531                    if (AppOPC.$opc_step_review.length <= 0) {
2532                        Fronted.loadingBig(false);
2533                    }
2534
2535                    if (typeof param.callback !== typeof undefined && typeof param.callback === 'function')
2536                        param.callback();
2537                }
2538            };
2539            $.makeRequest(_json);
2540        }
2541    },
2542    cleanSpecialCharacterAddress: function(e) {
2543        var data = $(e.currentTarget);
2544        var value = data.val();
2545        var reg = '^[^!<>?=+@{}_$%]+$';
2546        var array_characters = reg.split("");
2547
2548        $.each(array_characters, function(key, char) {
2549            for (var i = 0;i < value.length; i++) {
2550                value = value.replace(char, ' ');
2551            }
2552
2553            $(e.currentTarget).val(value);
2554        });
2555    }
2556}
2557
2558var Carrier = {
2559    id_delivery_option_selected : 0,
2560    getIdCarrierSelected: function () {
2561        var id_carrier = 0;
2562        if (AppOPC.$opc_step_two.find('.delivery_option_radio:checked').length > 0) {
2563            var id_carrier = AppOPC.$opc_step_two.find('.delivery_option_radio:checked').val();
2564            id_carrier = id_carrier.replace(',', '');
2565
2566        }
2567
2568        return parseInt(id_carrier);
2569    },
2570    launch: function(){
2571        if (!OnePageCheckoutPS.IS_VIRTUAL_CART) {
2572            $('div#onepagecheckoutps #gift_message').empty();
2573
2574            if (!OnePageCheckoutPS.CONFIGS.OPC_SHIPPING_COMPATIBILITY) {
2575                AppOPC.$opc_step_two
2576                    .on('click', '.delivery_option .delivery_option_logo', function(event){
2577                        var $option_radio = $(event.currentTarget).parents('.delivery_option').find('.delivery_option_radio');
2578                        if (!$option_radio.is(':checked')) {
2579                            $option_radio.attr('checked', true).trigger('change');
2580                        }
2581                    })
2582                    .on('click', '.delivery_option .carrier_delay', function(event){
2583                        var $option_radio = $(event.currentTarget).parents('.delivery_option').find('.delivery_option_radio');
2584                        if (!$option_radio.is(':checked')) {
2585                            if ($(event.currentTarget).find('#selulozenka, #paczkomatyinpost_selected, .btn.btn-warning').length <= 0) {//support module 'ulozenka'
2586                                $option_radio.attr('checked', true).trigger('change');
2587                            }
2588                        }
2589                    })
2590                    .on('click', '.delivery_option .carrier_price', function(event){
2591                        var $option_radio = $(event.currentTarget).parents('.delivery_option').find('.delivery_option_radio');
2592                        if (!$option_radio.is(':checked')) {
2593                            $option_radio.attr('checked', true).trigger('change');
2594                        }
2595                    })
2596                    .on('change', '.delivery_option_radio', function (event){
2597                        /* compatibilidad modulo envoimoinscher - v3.3.8 - par Boxtal */
2598                        if ($(event.currentTarget).prop('disabled')) {
2599                            return false;
2600                        }
2601                        //if ($('#onepagecheckoutps_step_two_container div.delivery_date').length <= 0){//support with deliverydate
2602                            $('div#onepagecheckoutps #onepagecheckoutps_step_two .delivery_option').removeClass('selected alert alert-info');
2603                            $(this).parents('.delivery_option').addClass('selected alert alert-info');
2604
2605                            //support carrier module: packetery (Packetery, Ltd. v1.17)
2606                            if (AppOPC.$opc_step_two.find('.packetery_prestashop_branch_list').length > 0) {
2607                                AppOPC.$opc_step_two.find('.packetery_prestashop_branch_list .packetery-branch-list > select').val('');
2608                                AppOPC.$opc_step_two.find('.packetery_prestashop_branch_list').hide();
2609                                AppOPC.$opc_step_two.find('.delivery_option_radio:checked').parents('.delivery_option').next('.packetery_prestashop_branch_list').show();
2610                            }
2611
2612                            Carrier.update({delivery_option_selected: $(event.currentTarget), load_carriers: true, load_payments: false, load_review: false});
2613                        //}
2614                    })
2615                    //support carrier module: packetery
2616                    .on('change.packetery', 'select[name=pobocka]', function(){
2617                        if ($('#onepagecheckoutps_step_two_container div.packetery_prestashop_branch_list').length > 0){
2618                            $('div#onepagecheckoutps #onepagecheckoutps_step_two_container select[name=pobocka]').off('change.packetery');
2619                            Carrier.update({load_carriers: false, load_payments: true, load_review: true, callback: window.updateCarrierSelectionAndGift});
2620                        }
2621                    });
2622            }
2623
2624            AppOPC.$opc_step_two
2625                .on('change', '#recyclable', Carrier.update)
2626                .on('blur', '#gift_message', Carrier.update)
2627                .on('blur', '#id_planning_delivery_slot', Carrier.update)//support module planningdeliverycarrier
2628                .on('click', '#gift', function (event){
2629                    Carrier.update({load_payments : true});
2630
2631                    if ($(event.currentTarget).is(':checked'))
2632                        $('div#onepagecheckoutps #gift_div_opc').removeClass('hidden');
2633                    else
2634                        $('div#onepagecheckoutps #gift_div_opc').addClass('hidden');
2635                });
2636
2637            if (OnePageCheckoutPS.CONFIGS.OPC_SHIPPING_COMPATIBILITY) {
2638                $(document).on('click', '#show_carrier_embed', function() {
2639                    AppOPC.$opc_step_two.empty();
2640                    AppOPC.$opc_step_two.html('<div class="row"><div class="col-xs-12 btn-secondary" id="show_carrier_embed"><span><i class="fa-pts fa-pts-check-square-o"></i>&nbsp;'+OnePageCheckoutPS.Msg.choose_carrier_embed+'</span></div></div>');
2641
2642                    $('#opc_payment_methods').show(400);
2643                    AppOPC.$opc.find('#onepagecheckoutps_header, #onepagecheckoutps_contenedor').hide(400);
2644                });
2645                $('#opc_payment_methods').on('click', '#hide_carrier_embed', function() {
2646                    Carrier.getByCountry({reset_carrier_embed: false});
2647
2648                    $('#opc_payment_methods').hide(400);
2649                    AppOPC.$opc.find('#onepagecheckoutps_header, #onepagecheckoutps_contenedor').show(400);
2650                });
2651            }
2652        }
2653    },
2654    getByCountry: function(params){
2655        var param = $.extend({}, {
2656            callback: '',
2657            reset_carrier_embed: true
2658        }, params);
2659
2660
2661        if (OnePageCheckoutPS.REGISTER_CUSTOMER)
2662            return;
2663
2664        if (!OnePageCheckoutPS.IS_VIRTUAL_CART){
2665            var extra_params = '';
2666            $.each(document.location.search.substr(1).split('&'),function(c,q){
2667                if (q != undefined && q != ''){
2668                    var i = q.split('=');
2669                    if ($.isArray(i)){
2670                        extra_params += '&' + i[0].toString();
2671                        if (i[1].toString() != undefined)
2672                            extra_params += '=' + i[1].toString();
2673                    }
2674                }
2675            });
2676
2677            var data = {
2678                url_call: orderOpcUrl + '?rand=' + new Date().getTime() + extra_params,
2679                is_ajax: true,
2680                action: 'loadCarrier',
2681                dataType: 'html'
2682            };
2683
2684            var _json = {
2685                data: data,
2686                beforeSend: function() {
2687                    Fronted.loading(true, '#onepagecheckoutps_step_two_container');
2688
2689                    if (!OnePageCheckoutPS.CONFIGS.OPC_SHIPPING_COMPATIBILITY) {
2690                        //support carrier module "packetery"
2691                        if (typeof window.prestashopPacketeryInitialized !== typeof undefined) {
2692                            window.prestashopPacketeryInitialized = undefined;
2693                        }
2694                    }
2695                },
2696                success: function(html) {
2697                    if (!$.isEmpty(html)) {
2698
2699                        if (OnePageCheckoutPS.CONFIGS.OPC_SHIPPING_COMPATIBILITY && param.reset_carrier_embed) {
2700                            var $content_carrier = $('<div/>').html(html);
2701
2702                            AppOPC.$opc.find('#opc_shipping_compability_content').empty().append('<iframe id="iframe_opc_shipping_compability" src="' + orderOpcUrl + '?content_only=1&carrier=1"/>');
2703
2704                            Fronted.removeUniform({parent_control: '#opc_payment_methods'});
2705
2706                            if ($content_carrier.find('.alert.alert-warning').length <= 0) {
2707                                AppOPC.$opc_step_two.empty();
2708                                AppOPC.$opc_step_two.html('<div class="row"><div class="col-xs-12 btn-secondary" id="show_carrier_embed"><span><i class="fa-pts fa-pts-check-square-o"></i>&nbsp;'+OnePageCheckoutPS.Msg.choose_carrier_embed+'</span></div></div>');
2709
2710                                PaymentPTS.getByCountry();
2711
2712                                return;
2713                            }
2714                        }
2715
2716                        AppOPC.$opc_step_two.html(html);
2717
2718                        if (AppOPC.$opc_step_two.find('#gift').is(':checked')) {
2719                            AppOPC.$opc_step_two.find('#gift_div_opc').show();
2720                        }
2721
2722                        if (!OnePageCheckoutPS.CONFIGS.OPC_SHIPPING_COMPATIBILITY) {
2723                            if (typeof id_carrier_selected !== typeof undefined) {
2724                                AppOPC.$opc_step_two.find('.delivery_option_radio[value="'+id_carrier_selected+',"]').attr('checked', true);
2725                            }
2726
2727                            //support carrier module: packetery (Packetery, Ltd. v1.17)
2728                            if (AppOPC.$opc_step_two.find('.packetery_prestashop_branch_list').length > 0) {
2729                                AppOPC.$opc_step_two.find('.packetery_prestashop_branch_list').hide();
2730
2731                                AppOPC.$opc_step_two.find('.delivery_option_radio:checked').parents('.delivery_option').next('.packetery_prestashop_branch_list').show();
2732                            }
2733
2734                            //suppot module deliverydays
2735                            if(AppOPC.$opc_step_two.find('#deliverydays_day option').length > 1){
2736                                AppOPC.$opc_step_two.find('#deliverydays_day option:eq(1)').attr('selected', 'true');
2737                            }
2738
2739                            if (AppOPC.$opc_step_two.find('.delivery_option_radio').length > 0) {
2740                                Carrier.update({load_payments: true});
2741                            } else {
2742                                PaymentPTS.getByCountry();
2743                            }
2744                        } else {
2745                            PaymentPTS.getByCountry();
2746                        }
2747                    }
2748                },
2749                complete: function(){
2750                    Fronted.loading(false, '#onepagecheckoutps_step_two_container');
2751
2752                    Fronted.removeUniform();
2753
2754                    if (!OnePageCheckoutPS.CONFIGS.OPC_SHIPPING_COMPATIBILITY) {
2755                        //support module inPost
2756                        if (typeof EE_INPOST_MODULE_SETTINGS !== typeof undefined) {
2757                            var valF = AppOPC.$opc_step_two.find('.delivery_option_radio:checked').val();
2758                            var parcelLockersSelected = valF.slice(0, -1) == EE_INPOST_MODULE_SETTINGS.parcelsLockers;
2759                            var parcelLockersCodSelected = valF.slice(0, -1) == EE_INPOST_MODULE_SETTINGS.parcelsLockersCod;
2760
2761                            if (parcelLockersSelected || parcelLockersCodSelected) {
2762                                $('#select_parcel_container').show();
2763                                $('#phone_no_parcel').show();
2764
2765                                AppOPC.$opc_step_two.find('#select_parcel').on('click', function(){
2766                                    selectedDelivery(valF);
2767                                });
2768                            }
2769                        }
2770
2771                        //support module vcpostnorddk
2772                        if (typeof AllInOne !== 'undefined' && typeof AllInOne.Main !== 'undefined') {
2773                            AllInOne.Main.initPickupButton();
2774                            AllInOne.Main.checkSelectedCarrier();
2775                            AllInOne.Main.initSimpleAdditionalOptions();
2776                        }
2777
2778                        if (typeof GLS !== typeof undefined) {
2779                            GLS.is_loaded = false;
2780                            GLS.init();
2781                        }
2782                    }
2783
2784                    $(document).trigger('opc-load-carrier:completed', {});
2785
2786                    if (typeof param.callback !== typeof undefined && typeof param.callback === 'function') {
2787                        param.callback();
2788                    }
2789                }
2790            };
2791            $.makeRequest(_json);
2792        }else{
2793            PaymentPTS.getByCountry();
2794        }
2795    },
2796    update: function(params){
2797        var param = $.extend({}, {
2798            delivery_option_selected: $('div#onepagecheckoutps .delivery_option_radio:checked'),
2799            load_carriers: false,
2800            load_payments: false,
2801            load_review: true,
2802            callback: ''
2803        }, params);
2804
2805        if (!OnePageCheckoutPS.IS_VIRTUAL_CART){
2806            var data = {
2807                url_call: orderOpcUrl + '?rand=' + new Date().getTime(),
2808                is_ajax: true,
2809                action: 'updateCarrier',
2810                recyclable: ($('#recyclable').is(':checked') ? $('#recyclable').val() : '0'),
2811                gift: ($('#gift').is(':checked') ? $('#gift').val() : '0'),
2812                gift_message: (!$.isEmpty($('#gift_message').val()) ? $('#gift_message').val() : ''),
2813            };
2814
2815            if ($(param.delivery_option_selected).length > 0)
2816                data[$(param.delivery_option_selected).attr('name')] = $(param.delivery_option_selected).val();
2817
2818            $('#onepagecheckoutps_step_two input[type="checkbox"]:not(.customer, .delivery, .invoice, [name="gift"], [name="recyclable"]), #onepagecheckoutps_step_two input[type="text"]:not(.customer, .delivery, .invoice),#onepagecheckoutps_step_two input[type="hidden"]:not(.customer, .delivery, .invoice), #onepagecheckoutps_step_two select:not(.customer, .delivery, .invoice)').each(function(i, input){
2819                var name = $(input).attr('name');
2820                var value = $(input).val();
2821
2822                if (!$.isEmpty(name))
2823                    data[name] = value;
2824            });
2825
2826            var _json = {
2827                data: data,
2828                beforeSend: function() {
2829                    Fronted.loading(true, '#onepagecheckoutps_step_two_container');
2830                },
2831                success: function(json) {
2832                    if (json.hasError){
2833                        Fronted.showModal({type:'error', message : json.errors});
2834                    } else if (json.hasWarning){
2835                        Fronted.showModal({type:'warning', message : json.warnings});
2836                    }
2837                },
2838                complete: function(){
2839                    Fronted.loading(false, '#onepagecheckoutps_step_two_container');
2840
2841                    if ((typeof mustCheckOffer !== 'undefined' && mustCheckOffer === true) && (typeof elementDeletedOfCart !== "undefined" && elementDeletedOfCart === true)) {
2842                        checkOffer(function() {
2843                            //Fronted.closeDialog();
2844                        });
2845                    }
2846
2847                    if ( typeof mustCheckOffer !== 'undefined' && event_dispatcher !== undefined && event_dispatcher === 'carrier' && AppOPC.load_offer ) {
2848                        mustCheckOffer = undefined;
2849                        checkOffer(function() {
2850                            //Fronted.closeDialog();
2851                        });
2852                    }
2853
2854                    if(param.load_carriers)
2855                        Carrier.getByCountry();
2856                    if(param.load_payments)
2857                        PaymentPTS.getByCountry();
2858                    if(param.load_review && !param.load_payments)
2859                        Review.display();
2860
2861                    if (typeof param.callback !== typeof undefined && typeof param.callback === 'function')
2862                        param.callback();
2863
2864                    $(document).trigger('opc-update-carrier:completed', {});
2865                }
2866            };
2867            $.makeRequest(_json);
2868        }
2869    },
2870//    displayPopupModule_socolissimo: function(id_carrier){
2871//        if ($('#onepagecheckoutps_step_one').hasClass('customer_loaded')){
2872//            if($('#onepagecheckoutps_step_two div.hook_extracarrier > #soFr').length > 0){
2873//                $('#onepagecheckoutps_step_two div.hook_extracarrier > #soFr').attr('src',  baseDir+'modules/socolissimo/redirect.php' + serialiseInput(soInputs)).show();
2874//
2875//                Fronted.createPopup(true, '', $('#onepagecheckoutps_step_two div.hook_extracarrier > #soFr'), false, false, true, 'Carrier.getByCountry();');
2876//
2877//                $('#dialog_opc').css({width: '600px'});
2878//
2879//                Fronted.centerDialog(true);
2880//            }
2881//        }else{
2882//            if (confirm(OnePageCheckoutPS.Msg.select_pickup_point)){
2883//                Address.createCustomer('Carrier.displayPopupModule_socolissimo()');
2884//            }
2885//        }
2886//    },
2887    displayPopupModule_mondialrelay: function(id_carrier){
2888        if (typeof PS_MRDisplayWidget !== typeof undefined && typeof displayPickupPlace !== typeof undefined) {
2889            displayPickupPlace = function (info) {
2890                $('#onepagecheckoutps_step_two .delivery_option.selected .extra_info_carrier :not(a)').remove();
2891                $('#onepagecheckoutps_step_two .delivery_option.selected .extra_info_carrier a')
2892                    .removeClass('select_pickup_point')
2893                    .addClass('edit_pickup_point')
2894                    .html(info);
2895            };
2896            PS_MRDisplayWidget(id_carrier);
2897        }
2898    },
2899    displayPopupModule_correos: function(id_carrier){
2900        var $content_correos = ''
2901        if($('div#onepagecheckoutps #onepagecheckoutps_step_two #shipping_container #correos_content').length > 0){
2902            $content_correos = $('div#onepagecheckoutps #onepagecheckoutps_step_two #shipping_container #correos_content');
2903            if (!OnePageCheckoutPS.IS_LOGGED)
2904                $content_correos.find('#correos_email').val('');
2905
2906            var callback = function(){
2907                $('div#onepagecheckoutps #correos_content #oficinas_correos_content, div#onepagecheckoutps #correos_content #correosOffices_content').show();
2908
2909                if (typeof Correos !== typeof undefined && typeof Correos.postcode_from_map !== typeof undefined && !$.isEmpty(Correos.postcode_from_map)) {
2910                    $('#correos_postcode').val(Correos.postcode_from_map);
2911                }
2912
2913                if (typeof Correos !== typeof undefined) {
2914                    Correos.getOffices();
2915                } else {
2916                    GetcorreosPoint();
2917                }
2918
2919                if (!$.isEmpty($('#customer_email').val()) && $.isEmpty($('#correos_email').val())) {
2920                    $('#correos_email').val($('#customer_email').val());
2921                }
2922                if (!$.isEmpty($('#delivery_phone_mobile').val()) && $.isEmpty($('#correos_mobile').val())) {
2923                    $('#correos_mobile').val($('#delivery_phone_mobile').val());
2924                }
2925            };
2926            var callback_ok = function(){
2927                if (typeof Correos !== typeof undefined) {
2928                    if ($('#correosOfficesSelect option').length > 0) {
2929                        if (!Correos.is_validMobile($('#correos_mobile').val())) {
2930                            alert(CorreosMessage.officeMobileError);
2931                            return false;
2932                        }
2933                        if (!Correos.is_validEmail($('#correos_email').val())) {
2934                            alert(CorreosMessage.officeEmailError);
2935                            return false;
2936                        }
2937                    }
2938
2939                    $('div#onepagecheckoutps #onepagecheckoutps_step_two_container .delivery_option_radio:checked').trigger('change');
2940                    Correos.updateOfficeInfo();
2941                } else {
2942                    $('div#onepagecheckoutps #onepagecheckoutps_step_two_container .delivery_option_radio:checked').trigger('change');
2943                    update_recoger();
2944                }
2945
2946                return true;
2947            };
2948
2949            Fronted.showModal({name:'opc_correos', content: $content_correos, size: 'modal-lg', button_ok: true, callback: callback, callback_ok: callback_ok});
2950        }else{
2951            $content_correos = $('div#onepagecheckoutps #onepagecheckoutps_step_two #shipping_container #message_no_office_error');
2952
2953            Fronted.showModal({name:'opc_correos', content: $content_correos});
2954        }
2955    },
2956    displayPopupModule_kiala: function(id_carrier){
2957        var $content = ''
2958        if($('div#onepagecheckoutps #onepagecheckoutps_step_two #shipping_container #kialapicker').length > 0){
2959            $content = $('div#onepagecheckoutps #onepagecheckoutps_step_two #shipping_container #kialapicker');
2960            var callback = function(){
2961                $('div#onepagecheckoutps #kialapicker').show();
2962            };
2963
2964            Fronted.showModal({name:'opc_kiala', content: $content, size: 'modal-lg', button_close: true, callback: callback});
2965        }
2966    },
2967    displayPopupModule_furgonetka: function(id_carrier){
2968        if (typeof getCarrier == 'function') {
2969            callback_furgonetka = function(properties) {
2970                $('#onepagecheckoutps_step_two .delivery_option.selected .extra_info_carrier span').remove();
2971                $('#onepagecheckoutps_step_two .delivery_option.selected .extra_info_carrier').prepend('<span>'+properties.name+'</span>');
2972
2973                setReceiverPointData(properties, false);
2974            }
2975            var carrier = getCarrier(id_carrier);
2976
2977            new Map({city: address['city'], street: address['street'], service: getCarrierServices(carrier), elementId: carrier.id_carrier, callback: callback_furgonetka}).view();
2978        }
2979    },
2980//    displayPopupModule_kialasmall: function(id_carrier){
2981//        $content = $('#onepagecheckoutps_step_two #kiala');
2982//
2983//        if ($('#onepagecheckoutps_step_one').hasClass('customer_loaded')){
2984//            if($content.length > 0){
2985//                Fronted.createPopup(true, '', $content, false, false, true, 'Carrier.getByCountry();');
2986//
2987//                Fronted.centerDialog(true);
2988//            }
2989//        }else{
2990//            if (confirm(OnePageCheckoutPS.Msg.select_pickup_point)){
2991//                Address.createCustomer('Carrier.displayPopupModule_kialasmall()');
2992//            }
2993//        }
2994//    },
2995    displayPopupModule_mycollectionplaces: function(){
2996        var $content = ''
2997        if($('div#onepagecheckoutps #onepagecheckoutps_step_two #shipping_container #myCollectionPlacesContent').length > 0){
2998            $content = $('div#onepagecheckoutps #onepagecheckoutps_step_two #shipping_container #myCollectionPlacesContent');
2999            var callback = function(){
3000                $('div#onepagecheckoutps #myCollectionPlacesContent').show();
3001                eval($('#myCollectionPlacesContent a.button_small').attr('href'));
3002            };
3003            var callback_close = function(){
3004                if (typeof mycollpsaveCarrier != typeof undefined){
3005                    mycollpsaveCarrier();
3006                    Carrier.getByCountry();
3007                }
3008                return true;
3009            };
3010
3011            Fronted.showModal({name:'opc_mycollectionplaces', content: $content, size: 'modal-lg', button_close: true, callback: callback, callback_close: callback_close});
3012        }
3013    },
3014    displayPopupModule_yupick: function(id_carrier){
3015        var $content = ''
3016        if($('div#onepagecheckoutps #onepagecheckoutps_step_two #shipping_container #oficinas_yupick_content').length > 0){
3017            $content = $('div#onepagecheckoutps #onepagecheckoutps_step_two #shipping_container #oficinas_yupick_content');
3018
3019            var callback = function(){
3020                $('div#onepagecheckoutps #onepagecheckoutps_step_two #shipping_container #oficinas_yupick_content').show();
3021
3022                if (!OnePageCheckoutPS.IS_LOGGED) {
3023                    $content.find('#yupick_type_alert_email').val('');
3024                }
3025
3026                if (!$.isEmpty($('#customer_email').val()) && $.isEmpty($('#yupick_type_alert_email').val())) {
3027                    $('#yupick_type_alert_email').val($('#customer_email').val());
3028                }
3029                if (!$.isEmpty($('#delivery_phone_mobile').val()) && $.isEmpty($('#yupick_type_alert_phone').val())) {
3030                    $('#yupick_type_alert_phone').val($('#delivery_phone_mobile').val());
3031                }
3032
3033                GetYupickPoint();
3034            };
3035            var callback_close = function(){
3036                $('div#onepagecheckoutps #onepagecheckoutps_step_two_container .delivery_option_radio:checked').trigger('change');
3037                //yupick_update_recoger();
3038                return true;
3039            };
3040
3041            Fronted.showModal({name:'opc_yupick', content: $content, size: 'modal-lg', button_close: true, callback: callback, callback_close: callback_close});
3042        }
3043    },
3044    displayPopupModule_chronopost: function(id_carrier){
3045        $content = $('#onepagecheckoutps_step_two #chronorelais_container');
3046
3047        Fronted.showModal({name:'opc_chronopost', content: $content, size: 'modal-lg', button_close: true, callback_close: function(){Carrier.getByCountry();return true;}}
3047);
3048
3049        toggleRelaisMap(cust_address_clean, cust_codePostal, cust_city);
3050    }
3051}
3052
3053var PaymentPTS = {
3054    id_payment_selected: '',
3055    launch: function(){
3056        $("div#onepagecheckoutps #onepagecheckoutps_step_three")
3057            .on('click', '.module_payment_container', function(event){
3058                if (!$(event.target).hasClass('payment_radio'))
3059                    $(event.currentTarget).find('.payment_radio').attr('checked', true).trigger('change');
3060            })
3061            .on("change", "input[name=method_payment]", function(event){
3062                var $payment_module = $(event.currentTarget);
3063                var $payment_module_url = $payment_module.next();
3064                var name_module = $payment_module.val();
3065
3066                $('div#onepagecheckoutps #onepagecheckoutps_step_review .extra_fee').addClass('hidden');
3067                $('div#onepagecheckoutps #onepagecheckoutps_step_review .extra_fee_tax').addClass('hidden');
3068
3069                Review.showRowsExtraFee();
3070
3071                if ($('div#onepagecheckoutps #payment_method_container input[id^=module_payment_' + cod_id_module_payment + ']').is(':checked')){
3072                    $('div#onepagecheckoutps .cod_fee').show();
3073                }else{
3074                    $('div#onepagecheckoutps .cod_fee').hide();
3075                }
3076
3077                if ($('div#onepagecheckoutps #payment_method_container input[id^=module_payment_' + bnkplus_id_module_payment + ']').is(':checked')){
3078                    $('div#onepagecheckoutps .bnkplus_discount').show();
3079                }else{
3080                    $('div#onepagecheckoutps .bnkplus_discount').hide();
3081                }
3082
3083                if ($('div#onepagecheckoutps #payment_method_container input[id^=module_payment_' + paypal_id_module_payment + ']').is(':checked')){
3084                    $('div#onepagecheckoutps .paypal_fee').show();
3085                }else{
3086                    $('div#onepagecheckoutps .paypal_fee').hide();
3087                }
3088
3089                if ($('div#onepagecheckoutps #payment_method_container input[id^=module_payment_' + sequra_id_module_payment + ']').first().is(':checked')){
3090                    $('div#onepagecheckoutps .sequra_fee').show();
3091                }else{
3092                    $('div#onepagecheckoutps .sequra_fee').hide();
3093                }
3094
3095                PaymentPTS.id_payment_selected = $(this).attr('id');
3096
3097                $('div#onepagecheckoutps #onepagecheckoutps_step_three .module_payment_container').removeClass('selected alert alert-info');
3098                $('div#onepagecheckoutps #onepagecheckoutps_step_three .payment_content_html').addClass('hidden');
3099                $(this).parent().parent().addClass('selected alert alert-info').find('.payment_content_html').removeClass('hidden');
3100
3101                //compatibilidad con modulo: paymentdiscountssurcharges v1.0.1 de Silbersaiten
3102                if (typeof pds_path !== typeof undefined) {
3103                    $.post(pds_path + 'ajax.php', {module: name_module}, function() {});
3104                }
3105            });
3106    },
3107    getByCountry: function(params){
3108        var param = $.extend({}, {
3109            callback: '',
3110            show_loading: true
3111        }, params);
3112
3113        if (OnePageCheckoutPS.REGISTER_CUSTOMER) {
3114            return;
3115        }
3116
3117        if (!OnePageCheckoutPS.IS_VIRTUAL_CART) {
3118            if ($('div#onepagecheckoutps #onepagecheckoutps_step_two').find('.delivery_option_radio').length <= 0 && have_ship_to_pay) {
3119                $('div#onepagecheckoutps #onepagecheckoutps_step_three').html('<p class="alert alert-warning col-xs-12">'+OnePageCheckoutPS.Msg.shipping_method_required+'</p>');
3120
3121                Review.display();
3122                return;
3123            }
3124        }
3125
3126        var extra_params = '';
3127        $.each(document.location.search.substr(1).split('&'),function(c,q){
3128            if (q != undefined && q != ''){
3129                var i = q.split('=');
3130                if ($.isArray(i)){
3131                    extra_params += '&' + i[0].toString();
3132                    if (i[1].toString() != undefined)
3133                        extra_params += '=' + i[1].toString();
3134                }
3135            }
3136        });
3137
3138        var data = {
3139            url_call: orderOpcUrl + '?rand=' + new Date().getTime() + extra_params,
3140            is_ajax: true,
3141            dataType: 'html',
3142            action: 'loadPayment'
3143        };
3144
3145        var _json = {
3146            data: data,
3147            beforeSend: function() {
3148                if(param.show_loading) {
3149                    Fronted.loading(true, '#onepagecheckoutps_step_three_container');
3150                }
3151
3152                if ($('#onepagecheckoutps_step_three #braintree_cc_submit').length > 0) {
3153                    if (typeof $.totalStorageOPC !== typeof undefined) {
3154                        $.totalStorageOPC('braintree-card-number', $('#onepagecheckoutps_step_three #braintree_cc_submit #card_number').val());
3155                        $.totalStorageOPC('braintree-card-cvc', $('#onepagecheckoutps_step_three #braintree_cc_submit #cvv').val());
3156                        $.totalStorageOPC('braintree-card-expiry-month', $('#onepagecheckoutps_step_three #braintree_cc_submit select[name="expiration_month"]').val());
3157                        $.totalStorageOPC('braintree-card-expiry-year', $('#onepagecheckoutps_step_three #braintree_cc_submit select[name="expiration_year"]').val());
3158                    }
3159                }
3160            },
3161            success: function(html) {
3162                $('div#onepagecheckoutps #onepagecheckoutps_forms').html('');
3163                $('div#onepagecheckoutps #onepagecheckoutps_step_three').html(html);
3164
3165                if (!$.isEmpty(PaymentPTS.id_payment_selected)){
3166                    $('div#onepagecheckoutps #onepagecheckoutps_step_three #payment_method_container #' + PaymentPTS.id_payment_selected).parent().parent().trigger('click');
3167                } else if ($('#onepagecheckoutps_step_three #payment_method_container .module_payment_container').length == 1){
3168                    $('#onepagecheckoutps_step_three #payment_method_container .module_payment_container').trigger('click');
3169                } else if (!$.isEmpty(OnePageCheckoutPS.CONFIGS.OPC_DEFAULT_PAYMENT_METHOD)){
3170                    $('div#onepagecheckoutps #onepagecheckoutps_step_three #payment_method_container [value="'+ OnePageCheckoutPS.CONFIGS.OPC_DEFAULT_PAYMENT_METHOD + '"]').parent().parent().trigger('click');
3171                }
3172
3173                $('div#onepagecheckoutps #onepagecheckoutps_step_three .module_payment_container.selected').find('.payment_content_html').removeClass('hidden');
3174
3175                //support module paypalpro
3176                if(typeof $('#pppro_form') !== typeof undefined && !OnePageCheckoutPS.IS_LOGGED)
3177                    $('#pppro_form #pppro_cc_fname, #pppro_form #pppro_cc_lname').val('');
3178            },
3179            complete: function(){
3180                /*if (!$.isEmpty($('.braintree-payment-errors').html())) {
3181                    Fronted.showModal({type:'error', message : $('.braintree-payment-errors').html()});
3182                }*/
3183
3184                if ($('#onepagecheckoutps_step_three #authorizeaim_form').length > 0) {
3185                    var full_name = $('#onepagecheckoutps_step_one #customer_firstname').val() + ' ' + $('#onepagecheckoutps_step_one #customer_lastname').val();
3186                    $('#onepagecheckoutps_step_three #authorizeaim_form #fullname').val(full_name);
3187                }
3188
3189                if (!OnePageCheckoutPS.IS_LOGGED && $('#onepagecheckoutps_step_three #adn_form').length > 0) {
3190                    $('#onepagecheckoutps_step_three #adn_form #adn_cc_fname').val($('#onepagecheckoutps_step_one #customer_firstname').val());
3191                    $('#onepagecheckoutps_step_three #adn_form #adn_cc_lname').val($('#onepagecheckoutps_step_one #customer_lastname').val());
3192                    $('#onepagecheckoutps_step_three #adn_form input[name=adn_cc_address]').val('');
3193                    $('#onepagecheckoutps_step_three #adn_form input[name=adn_cc_city]').val('');
3194                    $('#onepagecheckoutps_step_three #adn_form input[name=adn_cc_zip]').val('');
3195                }
3196
3197                if ($('#onepagecheckoutps_step_three #braintree_cc_submit').length > 0) {
3198                    if (typeof $.totalStorageOPC !== typeof undefined) {
3199                        $('#onepagecheckoutps_step_three #braintree_cc_submit #card_number').val($.totalStorageOPC('braintree-card-number'));
3200                        $('#onepagecheckoutps_step_three #braintree_cc_submit #cvv').val($.totalStorageOPC('braintree-card-cvc'));
3201                        $('#onepagecheckoutps_step_three #braintree_cc_submit select[name="expiration_month"]').val($.totalStorageOPC('braintree-card-expiry-month'));
3202                        $('#onepagecheckoutps_step_three #braintree_cc_submit select[name="expiration_year"]').val($.totalStorageOPC('braintree-card-expiry-year'));
3203                    }
3204                }
3205
3206                if (typeof pmtSimulator !== typeof undefined){
3207                    pmtSimulator.simulator_app.load_jquery();
3208                }
3209
3210                //support module soflexibilite
3211                //if (typeof initSoFlexibiliteEngine !== typeof undefined) {
3212                    //initSoFlexibiliteEngine();
3213                //}
3214
3215                if(param.show_loading) {
3216                    Fronted.loading(false, '#onepagecheckoutps_step_three_container');
3217                }
3218
3219                Fronted.removeUniform();
3220
3221                $(document).trigger('opc-load-payment:completed', {});
3222
3223                if (typeof param.callback !== typeof undefined && typeof param.callback === 'function') {
3224                    param.callback();
3225                } else {
3226                    Review.display();
3227                }
3228
3229                OPC_Compatibilities.execute('payment');
3230            }
3231        };
3232        $.makeRequest(_json);
3233    },
3234    change: function(){
3235        if ( !AppOPC.load_offer || typeof mustCheckOffer === 'undefined' || (event_dispatcher !== undefined && event_dispatcher !== 'payment_method') ) {
3236//            Payment.validateSelected();
3237        } else {
3238            checkOffer(function() {
3239//                PaymentPTS.validateSelected();
3240            });
3241        }
3242    }
3243}
3244
3245var Review = {
3246    processing: false,
3247    message_order: '',
3248    launch: function(){
3249        AppOPC.$opc.on('click', '#btn_place_order', function (){
3250            if (parseInt(OnePageCheckoutPS.CONFIGS.OPC_PAYMENTS_WITHOUT_RADIO) && $('div#onepagecheckoutps #onepagecheckoutps_step_three #free_order').length <= 0) {
3251                window.scrollTo(0, $('#onepagecheckoutps').offset().top);
3252                $('#onepagecheckoutps_step_three').addClass('alert alert-warning');
3253                return false;
3254            }else{
3255                Review.placeOrder();
3256            }
3257        })
3258        .on("change", '#cgv', function(e) {
3259            if ( typeof mustCheckOffer !== 'undefined' && event_dispatcher !== undefined && event_dispatcher === 'terms' && AppOPC.load_offer ) {
3260                if ( $(e.target).is(':checked') ) {
3261                    //if ( !offerApplied ) {
3262                        checkOffer(function() {
3263                            $(e.target).unbind('change');
3264                            //Fronted.closeDialog();
3265                        });
3266                    //}
3267                }
3268            }
3269        })
3270        .on("click", "#div_cgv span.read", function(){
3271            Fronted.openCMS({id_cms : OnePageCheckoutPS.CONFIGS.OPC_ID_CMS_TEMRS_CONDITIONS});
3272        });
3273
3274        $("#onepagecheckoutps_step_review")
3275            .on("click", ".voucher_name", Review.addVoucher)
3276            .on("click", "#submitAddDiscount", Review.processDiscount)
3277
3278            .on("click", "#payment_paypal_express_checkout", function(){
3279                $('#paypal_payment_form').submit();
3280            })
3281            .on('keypress', '.cart_quantity_input', function(){
3282                AppOPC.$opc.find('#btn_place_order').attr('disabled', 'true');
3283            })
3284            .on("blur", "#div_leave_message #message", function(){
3285                Review.message_order = $(this).val();
3286            });
3287
3288        //Compatibilidad con modulo premiumflatrate (v2.1.2 - by idnovate)
3289        $(document).on("change", 'select#premiumflatrate_options, label#premiumflatrate_options_radio', Review.display);
3290    },
3291    display: function(params){
3292        var param = $.extend({}, {
3293            callback: ''
3294        }, params);
3295
3296        if (OnePageCheckoutPS.REGISTER_CUSTOMER) {
3297            return;
3298        }
3299
3300        if (OnePageCheckoutPS.CONFIGS.OPC_ENABLE_TERMS_CONDITIONS) {
3301            var privacy_policy = AppOPC.$opc.find('#privacy_policy').is(':checked');
3302        }
3303        if (OnePageCheckoutPS.CONFIGS.OPC_ENABLE_PRIVACY_POLICY) {
3304            var cgv = AppOPC.$opc.find('#cgv').is(':checked');
3305        }
3306
3307        var data = {
3308            url_call: orderOpcUrl + '?rand=' + new Date().getTime(),
3309            is_ajax: true,
3310            dataType: 'html',
3311            action: 'loadReview'
3312        };
3313
3314        var _json = {
3315            data: data,
3316            beforeSend: function() {
3317                Fronted.loading(true, '#onepagecheckoutps_step_review_container');
3318
3319                //se quita del complete para colocarse en el beforeSend, pues despues de cargado el resumen de carrito
3320                //ya no tiene las direcciones, solo antes.
3321                if (typeof ajaxCart !== typeof undefined && typeof ajaxCart.refresh !== typeof undefined) {
3322                    if (typeof pc_cart === typeof undefined) {
3323                        //corrige el problema de productos duplicados en el carrito del top.
3324                        $('#header #cart_block_list .products dt, #header .cart_block_list .products dt').remove();
3325                        $('#header #cart_block_list .products dd, #header .cart_block_list .products dd').remove();
3326                        $('#side_cart_block #cart_block_list .products dt, #side_cart_block .cart_block_list .products dt').remove();
3327                        $('#side_cart_block #cart_block_list .products dd, #side_cart_block .cart_block_list .products dd').remove();
3328                        $('#sns_header_bottom .cart_block_list .products dt').remove();
3329
3330                        ajaxCart.refresh();
3331                    }
3332                }
3333            },
3334            success: function(html) {
3335                $("div#onepagecheckoutps #onepagecheckoutps_step_review").html(html);
3336
3337                if (typeof summary_opc === typeof undefined && !OnePageCheckoutPS.CONFIGS.OPC_COMPATIBILITY_REVIEW) {
3338                    window.parent.location.reload();
3339                }
3340                if (AppOPC.$opc_step_review.find('#order-detail-content .cart_item').length <= 0 ) {
3341                    window.parent.location.reload();
3342                }
3343
3344                if (OnePageCheckoutPS.CONFIGS.OPC_ENABLE_TERMS_CONDITIONS && cgv) {
3345                    AppOPC.$opc.find('#cgv').attr('checked', 'true');
3346                }
3347                if (OnePageCheckoutPS.CONFIGS.OPC_ENABLE_PRIVACY_POLICY && privacy_policy) {
3348                    AppOPC.$opc.find('#privacy_policy').attr('checked', 'true');
3349                }
3350
3351                $('div#onepagecheckoutps input[name="method_payment"]:checked').trigger('change');
3352            },
3353            complete: function(){
3354//                Fronted.loading(false, '#onepagecheckoutps_step_review_container');
3355                Fronted.loadingBig(false);
3356
3357                //if no exist carriers, do not show cost shipping
3358                if (!OnePageCheckoutPS.IS_VIRTUAL_CART) {
3359                    if (AppOPC.$opc_step_two.find('.delivery_options .delivery_option').length <= 0) {
3360                        AppOPC.$opc_step_review.find('#remaining_amount_free_shipping').hide();
3361                        AppOPC.$opc_step_review.find('.item_total:not(.cart_total_product, .cart_total_voucher, .cart_discount)').hide();
3362//                        AppOPC.$opc_step_review.find('#list-voucher-allowed').hide();
3363                    }
3364                }
3365
3366                //remove express checkout paypal on review
3367                $('#container_express_checkout').remove();
3368
3369                if (OnePageCheckoutPS.CONFIGS.OPC_SHOW_ZOOM_IMAGE_PRODUCT) {
3370                    //image zoom on product list.
3371                    $('div#onepagecheckoutps #order-detail-content .cart_item a > img').mouseenter(function(event){
3372                        $('div#onepagecheckoutps #order-detail-content .image_zoom').hide();
3373                        $(event.currentTarget).parents('.image_product').find('.image_zoom').show();
3374                    });
3375                    $('div#onepagecheckoutps #order-detail-content .image_zoom').click(function(event){
3376                        $(event.currentTarget).toggle();
3377                    });
3378                    $('div#onepagecheckoutps #order-detail-content .image_zoom').hover(function(event){
3379                        $(event.currentTarget).show();
3380                    }, function(event){
3381                        $(event.currentTarget).hide();
3382                    });
3383                }
3384
3385                //se comenta esto porque da error al eliminar si no se tiene instalado el LMOPC.
3386                //revisar issue: OPC-733 para solucionarlo en una proxima version del OPC.
3387                /*$('.cart_quantity_delete').click(function(e){
3388                    elementDeletedOfCart = true;
3389                    mustCheckOffer = true;
3390                });*/
3391
3392                //Se comenta esto para cumplicar con las politicas de alemania y suecia y posiblemente otros paises.
3393                //if (typeof $.totalStorageOPC !== typeof undefined) {
3394                //    if ($.totalStorageOPC('cms_terms_condifitions')) {
3395                //        AppOPC.$opc.find('#cgv').attr('checked', 'true');
3396                //    }
3397                //}
3398
3399                var intervalLoadJavaScriptReview = setInterval(
3400                    function() {
3401                        loadJavaScriptReview();
3402                        clearInterval(intervalLoadJavaScriptReview);
3403                    }
3404                    , (typeof csoc_prefix !== 'undefined' ? 5001 : 0));
3405
3406                //last minute opc
3407                if ( typeof mustCheckOffer !== 'undefined' && event_dispatcher !== undefined && event_dispatcher === 'init' && AppOPC.load_offer ) {
3408                    mustCheckOffer = undefined;
3409
3410                    setTimeout(checkOffer, time_load_offer * 1000);
3411                }
3412
3413                if (OnePageCheckoutPS.CONFIGS.OPC_CONFIRMATION_BUTTON_FLOAT && !OnePageCheckoutPS.CONFIGS.OPC_PAYMENTS_WITHOUT_RADIO){
3414                    var $container_float_review = $("div#onepagecheckoutps div#onepagecheckoutps_step_review #container_float_review");
3415                    var $container_float_review_point = $("div#onepagecheckoutps div#onepagecheckoutps_step_review #container_float_review_point");
3416
3417                    $(window).scroll(function() {
3418                        var time_out = setTimeout(function() {
3419                            if (AppOPC.$opc.find('.loading_big').is(':visible')) {
3420                                $container_float_review.removeClass('stick_buttons_footer');
3421                            } else {
3422                                if (!$container_float_review_point.visible() && $(window).height() > 640) {
3423                                    if ($container_float_review_point.offset().top > $(window).scrollTop()){
3424                                        $container_float_review.addClass('stick_buttons_footer').css({width : $('#onepagecheckoutps_step_review').outerWidth()});
3425                                    }
3426                                } else {
3427                                    $container_float_review.removeClass('stick_buttons_footer').removeAttr('style');
3428                                }
3429                            }
3430                            clearTimeout(time_out);
3431                        }, 400);
3432                    });
3433
3434                    $(window).resize(function(){
3435                        $(window).trigger('scroll');
3436                    });
3437                    $(window).trigger('scroll');
3438                }
3439
3440                if (typeof FB !== typeof undefined && typeof FB.XFBML.parse == 'function') {
3441                    FB.XFBML.parse();
3442                }
3443
3444                if (!$.isEmpty(Review.message_order)) {
3445                    $('div#onepagecheckoutps #onepagecheckoutps_step_review_container #message').val(Review.message_order);
3446                }
3447
3448                if (typeof getAppliedOffers !== typeof undefined && typeof getAppliedOffers === 'function') {
3449                     getAppliedOffers();
3450                }
3451
3452                //support module: configurator
3453                if (typeof cartDetails !== 'undefined') {
3454                    if (typeof orderSummaryHandler === 'object' && typeof orderSummaryHandler.init === 'function') {
3455                        orderSummaryHandler.init("order", cartDetails);
3456                    }
3457                }
3458
3459                //support module: customtextdesign
3460                if (typeof ctd_special !== typeof undefined) {
3461                    $('div#onepagecheckoutps div#onepagecheckoutps_step_review div[id^=product_' + ctd_special + '_').hide();
3462                }
3463                //support module: productcomposer - v1.8.4 - Tuni-Soft
3464                if (typeof pc_cart !== typeof undefined) {
3465                    pc_cart.init();
3466                    if (AppOPC.$opc_step_review.find('.cart_item.customization .pc_selection').length > 0) {
3467                        $.each(AppOPC.$opc_step_review.find('.cart_item.customization .pc_selection'), function(i, item){
3468                            var src = $(item).find('.pc_image').attr('src');
3469                            var $item_product = $(item).parents('.cart_item.customization').prev();
3470
3471                            $(item).find('.pc_image').parents('.cart_item.customization').prev().find('.img-thumbnail').attr('src', src);
3472                            $(item).find('.pc_image').parents('.cart_item.customization').prev().find('.image_zoom img').attr('src', src);
3473
3474                            var pc_price = $(item).data('unitprice');
3475                            var pc_total = $(item).data('totalprice');
3476
3477                            $($item_product).find('[id*="product_price_"] .price').text(pc_price);
3478                            $($item_product).find('[id*="total_product_price_"]').text(pc_total);
3479                        });
3480                    }
3481                }
3482
3483                //$('#btn_continue_shopping').attr('data-link', document.referrer);
3484
3485                Fronted.removeUniform();
3486
3487                /* Compatibilidad con el módulo darique - V2.4.16 de Silbersaiten */
3488                if ($('#dariqueWrapper').length === 0 && typeof dariqueModule !== typeof undefined) {
3489                    dariqueModule.refreshing = false;
3490                    dariqueModule.existsDariqueWrapper = 0;
3491                    dariqueModule.refreshPresents($('#onepagecheckoutps #container_float_review_point'));
3492                }
3493
3494                $(document).trigger('opc-load-review:completed', {});
3495
3496                if (typeof param.callback !== typeof undefined && typeof param.callback === 'function')
3497                    param.callback();
3498            }
3499        };
3500        $.makeRequest(_json);
3501    },
3502    addVoucher: function(event) {
3503        var code = $(event.currentTarget).attr('data-code');
3504        $('#discount_name').val(code);
3505        Review.processDiscount();
3506    },
3507    processDiscount: function(params) {
3508        var p = $.extend({}, {
3509            id_discount: null,
3510            action: 'add'
3511        }, params);
3512
3513        if($.isEmpty(p.action)) return;
3514
3515        if(p.action != 'delete'){
3516            if($.isEmpty($('#discount_name').val()))
3517                return;
3518        }
3519
3520		var data = {
3521            url_call: orderOpcUrl + '?rand=' + new Date().getTime(),
3522            is_ajax: true,
3523            action: 'processDiscount',
3524			action_discount: p.action,
3525			discount_name: $('#discount_name').val(),
3526			id_discount: p.id_discount
3527        };
3528
3529		var _json = {
3530            data: data,
3531            beforeSend: function(){
3532                Fronted.loading(true, '#onepagecheckoutps_step_review_container');
3533                $('#onepagecheckoutps_step_review #submitAddDiscount').attr('disabled', true);
3534            },
3535            success: function(json) {
3536				if (json.hasError){
3537                    Fronted.loading(false, '#onepagecheckoutps_step_review_container');
3538                    Fronted.showModal({type:'error', message : '&bullet; ' + json.errors.join('<br>&bullet; ')});
3539                } else if (json.hasWarning){
3540                    Fronted.loading(false, '#onepagecheckoutps_step_review_container');
3541                    Fronted.showModal({type:'warning', message : '&bullet; ' + json.warnings.join('<br>&bullet; ')});
3542                } else {
3543                    if (OnePageCheckoutPS.IS_VIRTUAL_CART){
3544                        PaymentPTS.getByCountry();
3545                    }else{
3546                        Carrier.getByCountry();
3547                    }
3548                }
3549            },
3550            complete: function(){
3551                $('#onepagecheckoutps_step_review #submitAddDiscount').attr('disabled', false);
3552            }
3553        };
3554        $.makeRequest(_json);
3555    },
3556    getFields: function(params){
3557        var param = $.extend({}, {
3558            object: ''
3559        }, params);
3560
3561        var fields = Array();
3562
3563        var valid_delivery_address = true;
3564        if (AppOPC.$opc_step_two.find('.delivery_option_radio:checked').length > 0
3565            && typeof id_carrierpickupstore !== typeof undefined
3566            && !$('form#form_address_delivery').is(':visible')
3567        ) {
3568            if (id_carrierpickupstore == Carrier.getIdCarrierSelected()
3569                && (typeof CarrierPickupStore.configs.CPS_ASSOC_PICKUP_ADDR_TO_ORDER === typeof undefined
3570                    || (typeof CarrierPickupStore.configs.CPS_ASSOC_PICKUP_ADDR_TO_ORDER !== typeof undefined && CarrierPickupStore.configs.CPS_ASSOC_PICKUP_ADDR_TO_ORDER)
3571                )
3572            ) {
3573                valid_delivery_address = false;
3574            }
3575        }
3576
3577        var $paypalpro_payment_form = $('#onepagecheckoutps_step_three #paypalpro-payment-form');
3578
3579        var $selector = $('div#onepagecheckoutps div#onepagecheckoutps_step_one .customer, \n\
3580            div#onepagecheckoutps div#onepagecheckoutps_step_one .delivery, \n\
3581            div#onepagecheckoutps div#onepagecheckoutps_step_one .invoice');
3582
3583        if (param.object == 'customer') {
3584            $selector = AppOPC.$opc_step_one.find('.customer');
3585        } else if (param.object == 'delivery') {
3586            $selector = AppOPC.$opc_step_one.find('.delivery');
3587        } else if (param.object == 'invoice') {
3588            $selector = AppOPC.$opc_step_one.find('.invoice');
3589        }
3590
3591        $selector.each(function(i, field){
3592            if ($(field).is('span'))
3593                return true;
3594
3595            var name = $(field).attr('data-field-name');
3596            var value = '';
3597            var object = '';
3598
3599            if ($.isEmpty(name))
3600                return true;
3601
3602            if ($(field).hasClass('customer')){
3603                object = 'customer';
3604            }else if ($(field).hasClass('delivery')){
3605                object = 'delivery';
3606            }else if ($(field).hasClass('invoice')){
3607                object = 'invoice';
3608            }
3609
3610            if (object == 'invoice' && $('div#onepagecheckoutps #checkbox_create_invoice_address').length > 0) {
3611                if (!$('div#onepagecheckoutps #checkbox_create_invoice_address').is(':checked'))
3612                    return true;
3613            }
3614
3615            if (object == 'delivery' && !valid_delivery_address) {
3616                return true;
3617            }
3618
3619            if (($('div#onepagecheckoutps #field_customer_checkbox_change_passwd input[name="checkbox_change_passwd"]').length > 0
3620                && !$('div#onepagecheckoutps #field_customer_checkbox_change_passwd input[name="checkbox_change_passwd"]').is(':checked'))
3621                || ($('div#onepagecheckoutps #field_customer_checkbox_create_account input[name="checkbox_create_account"]').length > 0
3622                && !$('div#onepagecheckoutps #field_customer_checkbox_create_account input[name="checkbox_create_account"]').is(':checked'))
3623                || ($('div#onepagecheckoutps #field_customer_checkbox_create_account_guest input[name="checkbox_create_account_guest"]').length > 0
3624                && !$('div#onepagecheckoutps #field_customer_checkbox_create_account_guest input[name="checkbox_create_account_guest"]').is(':checked'))
3625            ) {
3626                if (name == 'current_passwd' || name == 'passwd_confirmation' || name == 'passwd') {
3627                    return true;
3628                }
3629            }
3630
3631            if (!$.isEmpty(object)){
3632                if ($(field).is(':checkbox')){
3633                    value = $(field).is(':checked') ? 1 : 0;
3634                }else if ($(field).is(':radio')){
3635                    var tmp_value = $('input[name="' + name + '"]:checked').val();
3636                    if (typeof tmp_value !== typeof undefined)
3637                        value = tmp_value;
3638                }else{
3639                    value = $(field).val();
3640
3641                    if (value === null)
3642                        value = '';
3643                }
3644
3645                if ($.strpos(value, '\\')){
3646                    value = addslashes(value);
3647                }
3648
3649                if ($.strpos(value, '\n')){
3650                    value = value.replace(/\n/gi, '\\n');
3651                }
3652
3653                if (!$.isEmpty(value) && typeof value == 'string'){
3654                    value = value.replace(/\"/g, '\'');
3655                }
3656
3657                value = $.trim(value);
3658
3659                if ($.isEmpty(value) && $(field).data('required') == 1) {
3660                    value = $(field).data('default-value');
3661                }
3662
3663                fields.push({'object' : object, 'name' : name, 'value' : value});
3664
3665                //support payment module: StripeJS
3666                if (typeof stripe_billing_address !== typeof undefined && object == 'invoice') {
3667                    stripe_billing_address[name] = value;
3668
3669                    if (name == 'id_country') {
3670                        stripe_billing_address['country'] = $(field).find('option:selected').data('text');
3671                    }
3672                }
3673
3674                //support payment module: nPaypalPro - prestashop - 1.3.7
3675                if(object == 'customer' && $paypalpro_payment_form.length > 0) {
3676                    if (name == 'firstname') {
3677                        $paypalpro_payment_form.find('.paypalpro-firstname').val(value);
3678                    }
3679                    if (name == 'lastname') {
3680                        $paypalpro_payment_form.find('.paypalpro-lastname').val(value);
3681                    }
3682                }
3683            }
3684        });
3685
3686        return fields;
3687    },
3688    getFieldsExtra: function(_data){
3689        $('div#onepagecheckoutps input[type="text"]:not(.customer, .delivery, .invoice), div#onepagecheckoutps input[type="hidden"]:not(.customer, .delivery, .invoice), div#onepagecheckoutps select:not(.customer, .delivery, .invoice)').each(function(i, input){
3690            var name = $(input).attr('name');
3691            var value = $(input).val();
3692
3693            if (name == 'action' || name === 'controller' || (name === 'module' && value === 'sisow') || (name === 'fc' && value === 'module')) {
3694                return true;
3695            }
3696
3697            //compatibilidad modulo eydatepicker
3698            if (name == 'shipping_date_raw')
3699                name = 'shipping_date';
3700
3701            if (!$.isEmpty(name))
3702                _data[name] = value;
3703        });
3704
3705        $('div#onepagecheckoutps input[type="checkbox"]:not(.customer, .delivery, .invoice)').each(function(i, input){
3706            var name = $(input).attr('name');
3707            var value = $(input).is(':checked') ? $(input).val() : '';
3708
3709            if (!$.isEmpty(name))
3710                _data[name] = value;
3711        });
3712
3713        /* carrierpickupstore - V2.0.3 de PresTeamShop */
3714        var cps_fields = $('div#stores-container div#carrierpickupstore_form').find('select, input');
3715        if (cps_fields.length > 0) {
3716            $.each(cps_fields, function(i, field) {
3717                var name = $(field).attr('name');
3718                var value = $(field).val();
3719
3720                if (!$.isEmpty(name))
3721                    _data[name] = value;
3722            });
3723        }
3724
3725        $('div#onepagecheckoutps input[type="radio"]:not(.customer, .delivery, .invoice):checked').each(function(i, input){
3726            var name = $(input).attr('name');
3727            var value = $(input).val();
3728
3729            if (!$.isEmpty(name))
3730                _data[name] = value;
3731        });
3732
3733        delete _data['id_customer'];
3734        _data['id_customer'];
3735        _data['id_customer'];
3736
3737        return _data;
3738    },
3739    placeOrder: function(params){
3740        var param = $.extend({}, {
3741            validate_payment: true,
3742            position_element: null
3743        }, params);
3744
3745        Fronted.removeUniform();
3746
3747        if (!OPC_External_Validation.execute('review:placeOrder')){
3748            return false;
3749        }
3750
3751        /* compatibilidad carrierpickupstore - v2.0.3 - PresTeamShop */
3752        var valid_form_address_delivery = true;
3753        if (!OnePageCheckoutPS.IS_VIRTUAL_CART && typeof id_carrierpickupstore !== typeof undefined) {
3754            if (Carrier.getIdCarrierSelected() == id_carrierpickupstore
3755                && (typeof CarrierPickupStore.configs.CPS_ASSOC_PICKUP_ADDR_TO_ORDER === typeof undefined
3756                    || (typeof CarrierPickupStore.configs.CPS_ASSOC_PICKUP_ADDR_TO_ORDER !== typeof undefined && CarrierPickupStore.configs.CPS_ASSOC_PICKUP_ADDR_TO_ORDER)
3757                )
3758            ) {
3759                valid_form_address_delivery = false;
3760            }
3761        }
3762
3763        if (OnePageCheckoutPS.IS_LOGGED) {
3764            if (AppOPC.$opc.find('#form_address_delivery').is(':visible') || AppOPC.$opc.find('#form_address_invoice').is(':visible')) {
3765                Fronted.showModal({type:'warning', message : OnePageCheckoutPS.Msg.finalize_address_update});
3766                return false;
3767            }
3768
3769            if (!OnePageCheckoutPS.IS_VIRTUAL_CART || OnePageCheckoutPS.CONFIGS.OPC_SHOW_DELIVERY_VIRTUAL) {
3770                if (AppOPC.$opc_step_one.find('#delivery_address_container .address_card').length <= 1
3771                    && valid_form_address_delivery
3772                ) {
3773                    Fronted.showModal({type:'warning', message : OnePageCheckoutPS.Msg.need_add_delivery_address});
3774                    return false;
3775                }
3776                if (AppOPC.$opc.find('.addresses_customer_container.delivery .container_
3776card.selected').length <= 0
3777                    && valid_form_address_delivery
3778                ) {
3779                    Fronted.showModal({type:'warning', message : OnePageCheckoutPS.Msg.select_delivery_address});
3780                    return false;
3781                }
3782            }
3783
3784            if (Address.isSetInvoice() && AppOPC.$opc.find('.addresses_customer_container.invoice .container_card.selected').length <= 0) {
3785                Fronted.showModal({type:'warning', message : OnePageCheckoutPS.Msg.select_invoice_address});
3786                return false;
3787            }
3788        }
3789
3790        AppOPC.$opc.find('#btn_place_order').attr('disabled', 'true');
3791
3792        Fronted.validateOPC({
3793            valid_form_customer: true,
3794            valid_form_address_delivery: valid_form_address_delivery,
3795            valid_form_address_invoice: true,
3796            valid_carrier: true,
3797            valid_payment: true,
3798            valid_privacy: true,
3799            valid_gdpr: true,
3800            valid_condition: true
3801        });
3802
3803        if (AppOPC.is_valid_opc) {
3804            if (!OnePageCheckoutPS.IS_LOGGED || OnePageCheckoutPS.IS_GUEST) {
3805                var fields = Review.getFields();
3806            } else {
3807                var fields = Review.getFields({object: 'customer'});
3808            }
3809
3810            if (fields && !Review.processing) {
3811                Review.processing = true;
3812                //support module: correos. Carrier international.
3813                if (typeof CorreosConfig !== typeof undefined && !OnePageCheckoutPS.IS_VIRTUAL_CART) {
3814                    if ($.inArray(Carrier.getIdCarrierSelected().toString(), CorreosConfig.carrierInternacional) == 0) {
3815                        if (AppOPC.$opc_step_two.find('#cr_international_mobile').length > 0 && $.isEmpty(AppOPC.$opc_step_two.find('#cr_international_mobile').val())) {
3816                            var phone_mobile = $('#delivery_phone_mobile').val();
3817
3818                            if ($.isEmpty(phone_mobile)) {
3819                                phone_mobile = $('#delivery_phone').val();
3820                            }
3821
3822                            AppOPC.$opc_step_two.find('#cr_international_mobile').val(phone_mobile).trigger('change');
3823                        }
3824                    }
3825                }
3826
3827                //support module yupik
3828                if ($('#yupick_type_alert_phone').length > 0 && $('#onepagecheckoutps_step_one #delivery_phone_mobile').length > 0) {
3829                    $('#yupick_type_alert_phone').val($('#onepagecheckoutps_step_one #delivery_phone_mobile').val());
3830                }
3831                if ($('#yupick_type_alert_email').length > 0 && $('#onepagecheckoutps_step_one #customer_email').length > 0) {
3832                    $('#yupick_type_alert_email').val($('#onepagecheckoutps_step_one #customer_email').val());
3833                }
3834
3835                /* compatibilidad carrierpickupstore - v2.0.3 - PresTeamShop */
3836                if (typeof id_carrierpickupstore !== typeof undefined && Carrier.getIdCarrierSelected() == id_carrierpickupstore) {
3837                    Address.id_address_delivery = 0;
3838
3839                    if (!Address.isSetInvoice()) {
3840                        Address.id_address_invoice = 0;
3841                    }
3842                }
3843
3844                var _extra_data = Review.getFieldsExtra({});
3845                var _data = $.extend({}, _extra_data, {
3846                    'url_call'				: orderOpcUrl + '?rand=' + new Date().getTime(),
3847                    'is_ajax'               : true,
3848                    'action'                : 'placeOrder',
3849                    'id_customer'           : (!$.isEmpty(AppOPC.$opc_step_one.find('#customer_id').val()) ? AppOPC.$opc_step_one.find('#customer_id').val() : ''),
3850                    'id_address_delivery'   : Address.id_address_delivery,
3851                    'id_address_invoice'    : !$.isEmpty(Address.id_address_invoice) ? Address.id_address_invoice : Address.id_address_delivery,
3852                    'fields_opc'            : JSON.stringify(fields),
3853                    'message'               : (!$.isEmpty(AppOPC.$opc_step_review.find('#message').val()) ? AppOPC.$opc_step_review.find('#message').val() : ''),
3854                    'is_new_customer'       : (AppOPC.$opc_step_one.find('#checkbox_create_account_guest').is(':checked') ? 0 : 1),
3855                    'token'                 : static_token,
3856                    'psgdpr-consent'        : true,//support module: psgdpr - v1.0.0 - PrestaShop
3857                    'g_recaptcha_response'  : $('#g-recaptcha-response').val(),//support module: recaptcha - v1.2.2 - Charlie
3858                    'g-recaptcha-response'  : $('#g-recaptcha-response').val()//support module: recaptcha - v1.2.3 - Charlie
3859                });
3860
3861                var callback_load_address = '';
3862
3863                var _json = {
3864                    data: _data,
3865                    beforeSend: function() {
3866                        Fronted.loadingBig(true);
3867                        window.scrollTo(0, AppOPC.$opc.outerHeight() / 3);
3868                    },
3869                    success: function(data) {
3870                        if (!$.isEmpty(data.redirect)) {
3871                            document.location.href = data.redirect;
3872                        } else {
3873                            if (typeof data.token !== typeof undefined && typeof token !== typeof undefined) {
3874                                token = data.token;
3875                            }
3876                            if (typeof data.static_token !== typeof undefined && typeof static_token !== typeof undefined) {
3877                                static_token = data.static_token;
3878                            }
3879
3880                            if (data.isSaved) {
3881                                if ((!OnePageCheckoutPS.PS_GUEST_CHECKOUT_ENABLED || $('#checkbox_create_account_guest').is(':checked'))) {
3882                                    AppOPC.$opc_step_one.find('#customer_email, #customer_conf_email, #customer_passwd, #customer_conf_passwd')
3883                                        .attr({
3884                                            'disabled': 'true',
3885                                            'data-validation-optional': 'true'
3886                                        })
3887                                        .addClass('disabled')
3888                                        .trigger('reset');
3889
3890                                    $('#div_onepagecheckoutps_login, #field_customer_passwd, #field_customer_conf_passwd, div#onepagecheckoutps #onepagecheckoutps_step_one_container .account_creation, #field_choice_group_customer, #field_customer_checkbox_create_account, #field_customer_checkbox_create_account_guest').addClass('hidden');
3891
3892                                    AppOPC.$opc_step_one.find('#div_save_customer').remove();
3893                                    AppOPC.$opc_step_one.find('#div_create_invoide_address').remove();
3894                                    AppOPC.$opc_step_one.find('#opc_show_login').remove();
3895                                    AppOPC.$opc_step_one.find('#label_help_invoice').remove();
3896                                    AppOPC.$opc_step_one.find('#div_privacy_policy').remove();
3897
3898                                    AppOPC.$opc_step_one.find('#action_address_delivery').removeClass('hidden');
3899                                    AppOPC.$opc_step_one.find('#action_address_delivery').removeClass('hidden');
3900                                }
3901
3902                                OnePageCheckoutPS.IS_LOGGED = data.isLogged;
3903                                OnePageCheckoutPS.IS_GUEST = data.isGuest;
3904                            }
3905
3906                            if (data.hasError){
3907                                Fronted.showModal({type:'error', message : '&bullet; ' + data.errors.join('<br>&bullet; ')});
3908                            } else if (data.hasWarning){
3909                                Fronted.showModal({type:'warning', message : '&bullet; ' + data.warnings.join('<br>&bullet; ')});
3910                            } else {
3911                                Address.id_customer = data.id_customer;
3912                                Address.id_address_delivery = data.id_address_delivery;
3913                                Address.id_address_invoice = data.id_address_invoice;
3914
3915                                AppOPC.$opc_step_one.find('#customer_id').val(Address.id_customer);
3916                                AppOPC.$opc_step_one.find('#delivery_id').val(Address.id_address_delivery);
3917                                AppOPC.$opc_step_one.find('#invoice_id').val(Address.id_address_invoice);
3918
3919                                callback_load_address = function() {
3920                                    //plugin last minute offer
3921                                    if ( !AppOPC.load_offer || typeof mustCheckOffer === 'undefined' || (event_dispatcher !== undefined && event_dispatcher !== 'confirm') ) {
3922                                        window['checkOffer'] = function(callback) {
3923                                            callback();
3924                                        };
3925                                    }
3926
3927                                    if($('div#onepagecheckoutps #onepagecheckoutps_step_three #free_order').length > 0){
3928                                        confirmFreeOrder();
3929                                        return;
3930                                    }
3931
3932                                    //support module payment: Pay
3933                                    if (!$.isEmpty($('#securepay_cardNo').val()) &&
3934                                        !$.isEmpty($('#securepay_cardSecurityCode').val()) &&
3935                                        !$.isEmpty($('#securepay_cardExpireMonth').val()) &&
3936                                        !$.isEmpty($('#securepay_cardExpireYear').val()))
3937                                    {
3938                                        CardpaySubmit();
3939                                        return;
3940                                    }
3941
3942                                    var callback_placeorder = '';
3943                                    if(param.validate_payment === true){
3944                                        var callback_placeorder = function(){
3945                                            var radio_method_payment = $('div#onepagecheckoutps #onepagecheckoutps_step_three #payment_method_container #' + PaymentPTS.id_payment_selected + ':checked');
3946                                            var input_url_method_payment = $(radio_method_payment).next();
3947
3948                                            var id_payment = $(radio_method_payment).attr('id').split('_')[2];
3949                                            var name_payment = $(radio_method_payment).val();
3950                                            var url_payment = $(input_url_method_payment).val();
3951
3952                                            if (name_payment === 'pts_payplug') {
3953                                                var $pp_credit_card = $('div#onepagecheckoutps div#onepagecheckoutps_step_three input[name="pp_credit_card"]:checked');
3954                                                if (typeof configs_pts_payplug !== typeof undefined && configs_pts_payplug.PP_SAVE_CARD && $pp_credit_card.length > 0) {
3955                                                    var card_selected = $pp_credit_card.val();
3956
3957                                                    if (card_selected !== 'new_card') {
3958                                                        url_payment = "$('#onepagecheckoutps div#onepagecheckoutps_contenedor > .pp_payment_module button#btn-pay_save_card').trigger('click')";
3959                                                    }
3960                                                }
3961                                            } else if (name_payment === 'paysera' && $('#payseraPaySubmit > span').length > 0) {
3962                                                url_payment = "$('#payseraPaySubmit > span').trigger('click')";
3963                                            }
3964
3965                                            var onclick_payment = $(input_url_method_payment).length > 0 ? $(input_url_method_payment).get(0).getAttribute("onclick") : '';
3966                                            if ($.isEmpty(id_payment) && $.isEmpty(url_payment) && $.isEmpty(onclick_payment))
3967                                                return;
3968
3969                                            if(!$.isEmpty(onclick_payment)){
3970                                                if (name_payment == 'klikandpay' || name_payment == 'banesto' || name_payment == 'paypal') {
3971                                                    if(!eval(onclick_payment))
3972                                                        return;
3973                                                }
3974                                            }
3975
3976                                            checkOffer(function() {
3977                                                if (url_payment == 'iframe'){//compatibilidad con paypal integral.
3978                                                    $(OnePageCheckoutPS.CONFIGS.OPC_ID_CONTENT_PAGE).html($('#iframe_payment_module_' + id_payment).val());
3979                                                    window.scrollTo(0, $(OnePageCheckoutPS.CONFIGS.OPC_ID_CONTENT_PAGE).offset().top);
3980                                                    Fronted.loadingBig(false);
3981                                                } else if (!$.isUrlValid(url_payment)){
3982                                                    //compatibilidad con modulo bbva
3983                                                    if (name_payment == 'bbva'){
3984                                                        var peticion_bbva = $('#bbva_form input').val();
3985                                                        var _tmp = peticion_bbva.split('key=');
3986                                                        var old_secure_key = _tmp[1].substr(0, 32);
3987                                                        peticion_bbva = peticion_bbva.replace(old_secure_key, data.secure_key);
3988
3989                                                        $('#bbva_form input').val(peticion_bbva);
3990                                                    }
3991
3992                                                    eval(url_payment);
3993
3994                                                    if ((name_payment === 'redsys' || name_payment === 'payplug' || name_payment == 'kxpay') && typeof url_payment !== typeof undefined) {
3995                                                        Fronted.loadingBig(false);
3996                                                    }
3997
3998                                                    return false;
3999                                                }else{
4000                                                    var arr_payments_without_popup = payments_without_popup.split(',');
4001
4002                                                    if ($.strpos(url_payment, '?pm='+name_payment)) {
4003                                                        if (OnePageCheckoutPS.CONFIGS.OPC_REDIRECT_DIRECTLY_TO_OPC) {
4004                                                            document.location.href = orderOpcUrl + '?mp=' + name_payment + '&checkout=1';
4005                                                        } else {
4006                                                            document.location.href = orderOpcUrl + '?mp=' + name_payment;
4007                                                        }
4008
4009                                                        return false;
4010                                                    }
4011
4012                                                    if ($.inArray(name_payment, arr_payments_without_popup) >= 0 || $(radio_method_payment).hasClass('payment_eu')) {
4013                                                        window.location = url_payment;
4014
4015                                                        return false;
4016                                                    }
4017
4018                                                    _callbackCheckout = function() {
4019                                                        var arr_payment_with_content_only = ['braintreejs'];
4020
4021                                                        if ($.inArray(name_payment, arr_payment_with_content_only) != -1) {
4022                                                            AppOPC.jqOPC('<div/>').load(url_payment+'?content_only=1', function(){
4023                                                                $(this).find('.page-heading, #cart_navigation').remove();
4024
4025                                                                Fronted.showModal({name: 'payment_modal_'+name_payment, type:'normal', title: OnePageCheckoutPS.Msg.confirm_payment_method, title_icon: 'fa-pts-credit-card', content : $(this).html(), close : true});
4026                                                            });
4027                                                        } else {
4028                                                            AppOPC.jqOPC('<div/>').load(url_payment, function(){
4029                                                                //redirecciona a metodos de pagos que se realicen por fuera de la tienda.
4030                                                                var $that = $(this).find(OnePageCheckoutPS.CONFIGS.OPC_ID_CONTENT_PAGE);
4031
4032                                                                if (!OnePageCheckoutPS.CONFIGS.OPC_SHOW_POPUP_PAYMENT){
4033                                                                    if (($that.find('input[type=submit]').length == 1 || $that.find('button[type=submit]').length == 1)){
4034                                                                        $that.hide().appendTo('body');
4035                                                                        $that.find('input[type=submit]').attr('onclick','').trigger('click');
4036                                                                        $that.find('button[type=submit]').attr('onclick','').trigger('click');
4037
4038                                                                        return false;
4039                                                                    }
4040
4041                                                                    //support module: add_gopay_new
4042                                                                    if (($that.find('#submit_payment').length == 1)){
4043                                                                        $that.hide().appendTo('body');
4044                                                                        $that.find('#submit_payment').trigger('click');
4045
4046                                                                        return false;
4047                                                                    }
4048                                                                }
4049
4050                                                                //limpiamos el html devuelto por el metodo de pago para no colocar basura
4051                                                                $that.find('h2, h1').first().remove();
4052                                                                $that.find('.breadcrumb').remove();
4053                                                                $that.find('#order_step').remove();
4054                                                                $that.find('#currency_payment').hide(); //remueve el select de las divisas que hace recargar la web.
4055                                                                $that.find(OnePageCheckoutPS.CONFIGS.OPC_ID_CONTENT_PAGE).attr('style', 'width: auto!important');
4056                                                                $that.find('button[type="submit"]').removeAttr('class').addClass('button btn btn-primary');
4057
4058                                                                $.each($that.find('a'), function(i, a){
4059                                                                   if ($.strpos($(a).attr('href'), 'step=3'))
4060                                                                    $(a).remove();
4061                                                                });
4062
4063                                                                //elimina esta clase del input del carrito, para que salgan de nuevo los popup para seleccionar punto de envio.
4064                                                                $('div#onepagecheckoutps #onepagecheckoutps_step_two #shipping_container .module_carrier').each(function(i, carrier){
4065                                                                    var id_delivery_option_selected = $(carrier).val();
4066                                                                    $('#' + id_delivery_option_selected).removeClass('point_selected');
4067                                                        
4067        });
4068
4069                                                                Fronted.showModal({name: 'payment_modal', type:'normal', title: OnePageCheckoutPS.Msg.confirm_payment_method, title_icon: 'fa-pts-credit-card', content : $that, close : true});
4070                                                            });
4071                                                        }
4072
4073                                                        if (OnePageCheckoutPS.CONFIGS.OPC_SHOW_POPUP_PAYMENT){
4074                                                            Address.load({object: 'customer'});
4075
4076                                                            //recarga las listas de las direcciones
4077                                                            if (OnePageCheckoutPS.IS_LOGGED && !OnePageCheckoutPS.CONFIGS.OPC_PAYMENTS_WITHOUT_RADIO) {
4078                                                                Address.loadAddressesCustomer({object: 'delivery'});
4079                                                                Address.loadAddressesCustomer({object: 'invoice'});
4080                                                            }
4081                                                        }
4082                                                    }
4083
4084                                                    if ( !AppOPC.load_offer || typeof mustCheckOffer === 'undefined' || (event_dispatcher !== undefined && event_dispatcher !== 'confirm') ) {
4085                                                        _callbackCheckout();
4086                                                    }
4087                                                }
4088                                            });
4089                                        }
4090                                    }else{
4091                                        var callback_placeorder = function(){
4092                                            $.each(events_payments, function(k, items){
4093                                                if (param.position_element.item_parent == k){
4094                                                    $.each(items, function(i, item){
4095                                                        if (param.position_element.item_child == i){
4096                                                            //support paypal
4097                                                            if (item.module_name == 'paypal'){
4098                                                                if ($(item.element).attr('id') == 'paypal_process_payment') {
4099                                                                    $("#onepagecheckoutps_step_three #paypal_payment_form, #onepagecheckoutps_step_three #paypal_payment_form_payment")[0].submit();
4100                                                                    return false;
4101                                                                }
4102                                                            }
4103
4104                                                            $(item.element).attr('onclick', '').unbind('click');
4105
4106                                                            if (typeof item.event !== typeof undefined){
4107                                                                $(item.element).click(item.event);
4108                                                            }
4109
4110                                                            if (typeof item.onclick !== typeof undefined)
4111                                                            {
4112                                                                $(item.element).attr('onclick', item.onclick);
4113                                                            }
4114
4115                                                            $('div#onepagecheckoutps #onepagecheckoutps_step_three form').on('submit', function(event) {
4116                                                                $(event.target)[0].submit();
4117                                                                event.preventDefault();
4118                                                                event.stopPropagation();
4119                                                            });
4120
4121                                                            if ($(item.element).is('a, span')){
4122                                                                $(item.element)[0].click();
4123                                                            }else{
4124                                                                $(item.element).click();
4125                                                            }
4126
4127                                                            Fronted.loadingBig(false);
4128
4129                                                            return false;
4130                                                        }
4131                                                    });
4132                                                }
4133                                            });
4134                                        }
4135                                    }
4136
4137                                    var force_load_payments = false;
4138
4139                                    //recarga de nuevo los metodos de pago para actualizar los formularios que tengan datos del cliente por defecto.
4140                                    if ((data.isSaved && !OnePageCheckoutPS.CONFIGS.OPC_PAYMENTS_WITHOUT_RADIO) || force_load_payments)
4141                                    {
4142                                        var arr_exception_modules = ['authorizedotnet', 'stripe_official'];
4143                                        var name_payment = AppOPC.$opc_step_three.find('.payment_radio:checked').val();
4144
4145                                        if ($.inArray(name_payment, arr_exception_modules) == -1) {
4146                                            PaymentPTS.getByCountry({show_loading: false, callback: callback_placeorder});
4147                                        } else {
4148                                            if (typeof callback_placeorder === 'function') {
4149                                                callback_placeorder();
4150                                            }
4151                                        }
4152                                    }
4153                                    else {
4154                                        if (typeof callback_placeorder === 'function') {
4155                                            callback_placeorder();
4156                                        }
4157                                    }
4158                                }
4159                            }
4160                        }
4161                    },
4162                    complete: function() {
4163                        if (typeof $.totalStorageOPC !== typeof undefined) {
4164                            $.totalStorageOPC('create_invoice_address_'+OnePageCheckoutPS.id_shop, false);
4165                        }
4166
4167                        AppOPC.$opc.find('#btn_place_order').removeAttr('disabled');
4168
4169                        if (typeof callback_load_address === 'function') {
4170                            callback_load_address();
4171                        }
4172                        Review.processing = false;
4173                    },
4174                    error: function(data){
4175                        alert(data);
4176                        Fronted.loadingBig(false);
4177                        AppOPC.$opc.find('#btn_place_order').removeAttr('disabled');
4178                    }
4179                };
4180
4181                var callback = function() {
4182                    $.makeRequest(_json);
4183                }
4184
4185                if (OnePageCheckoutPS.CONFIGS.OPC_CONFIRM_ADDRESS
4186                    && (!OnePageCheckoutPS.IS_VIRTUAL_CART || (OnePageCheckoutPS.IS_VIRTUAL_CART && OnePageCheckoutPS.CONFIGS.OPC_SHOW_DELIVERY_VIRTUAL))
4187                    && (typeof module_carrier_selected === typeof undefined || (typeof module_carrier_selected !== typeof undefined && $.inArray(module_carrier_selected, ['mondialrelay', 'carrierpickupstore']) === -1))
4188                ) {
4189                    var address = AppOPC.$opc_step_one.find('#delivery_address1').length > 0 ? AppOPC.$opc_step_one.find('#delivery_address1').val() : '';
4190                    var address2 = AppOPC.$opc_step_one.find('#delivery_address2').length > 0 ? ', ' + AppOPC.$opc_step_one.find('#delivery_address2').val() : '';
4191                    var postcode = AppOPC.$opc_step_one.find('#delivery_postcode').length > 0 ? ', ' + AppOPC.$opc_step_one.find('#delivery_postcode').val() : '';
4192                    var city = AppOPC.$opc_step_one.find('#delivery_city').length > 0 ? ', ' + AppOPC.$opc_step_one.find('#delivery_city').val() : '';
4193                    var state = AppOPC.$opc_step_one.find('#delivery_id_state option').length > 0 ? ' (' + AppOPC.$opc_step_one.find('#delivery_id_state option:selected').data('text') + ')' : '';
4194                    var customer_address = '<b>' + address + address2 + postcode + city + state + '</b>';
4195                    customer_address = OnePageCheckoutPS.Msg.message_validate_address.replace('%address%', customer_address);
4196
4197                    Fronted.showModal({
4198                        name: 'modal_confirm_address',
4199                        type:'normal',
4200                        title: OnePageCheckoutPS.Msg.validate_address,
4201                        title_icon: 'fa-pts-map-marker ',
4202                        content : customer_address,
4203                        button_close: true,
4204                        button_close_text: OnePageCheckoutPS.Msg.no,
4205                        button_ok: true,
4206                        callback_ok: function(){
4207                            supportModuleGDPR(callback);
4208                            return true;
4209                        },
4210                        callback_close: function() {
4211                            AppOPC.$opc.find('#btn_place_order').removeAttr('disabled');
4212                            Review.processing = false;
4213
4214                            return true;
4215                        }
4216                    });
4217                } else {
4218                    supportModuleGDPR(callback);
4219                }
4220            }
4221        }
4222
4223        return true;
4224    },
4225    showRowsExtraFee: function() {
4226        var name_module = AppOPC.$opc_step_three.find('input[name="method_payment"]:checked').val();
4227        if (typeof payment_modules_fee !== typeof undefined) {
4228            $.each(payment_modules_fee, function(name_module_fee, payment){
4229                var various_payment = false;
4230                var name_module_alt = name_module + '_' + payment.id;
4231
4232                if (name_module_alt == name_module_fee) {
4233                    //support module custompaymentmethod
4234                    if ($.strpos(name_module_fee, 'custompaymentmethod') !== false) {
4235                        var url_payment = $payment_module_url.val();
4236                        var arr_url_payment = url_payment.split('=');
4237                        var id_payment = arr_url_payment[1];
4238
4239                        if (id_payment == payment.id) {
4240                            various_payment = true;
4241                        }
4242                    }
4243                }
4244
4245                if (name_module == name_module_fee || various_payment){
4246                    $('div#onepagecheckoutps #onepagecheckoutps_step_review .extra_fee').removeClass('hidden');
4247                    $('div#onepagecheckoutps #onepagecheckoutps_step_review #extra_fee_label').text(payment.label_fee);
4248                    $('div#onepagecheckoutps #onepagecheckoutps_step_review #extra_fee_price').text(payment.fee);
4249                    $('div#onepagecheckoutps #onepagecheckoutps_step_review #extra_fee_total_price_label').text(payment.label_total);
4250                    $('div#onepagecheckoutps #onepagecheckoutps_step_review #extra_fee_total_price').text(payment.total_fee);
4251
4252                    if (typeof payment.fee_tax !== typeof undefined && !$.isEmpty(payment.fee_tax)) {
4253                        $('div#onepagecheckoutps #onepagecheckoutps_step_review .extra_fee_tax').removeClass('hidden');
4254                        $('div#onepagecheckoutps #onepagecheckoutps_step_review #extra_fee_tax_label').text(payment.label_fee_tax);
4255                        $('div#onepagecheckoutps #onepagecheckoutps_step_review #extra_fee_tax_price').text(payment.fee_tax);
4256                    }
4257
4258                    return false;
4259                }
4260            });
4261        }
4262    }
4263}
4264
4265var OPC_Compatibilities = {
4266    steps: [],
4267    init: function () {
4268        OPC_Compatibilities.steps['payment'] = new Array();
4269
4270        //support module: amazonpay - v1.1.6 - patworx multimedia GmbH
4271        OPC_Compatibilities.steps['payment'].push(function() {
4272            if (typeof amazonpay !== typeof undefined && amazonpay.amazonCheckoutSessionId !== false && !OnePageCheckoutPS.IS_LOGGED) {
4273                Address.loadAddressesCustomer({object: 'delivery'});
4274            }
4275        });
4276    },
4277    execute: function (step) {
4278        if (typeof OPC_Compatibilities.steps[step] !== typeof undefined) {
4279            $.each(OPC_Compatibilities.steps[step], function (i, compatibility) {
4280                compatibility();
4281            });
4282        }
4283    }
4284};
4285
4286var OPC_External_Validation = {
4287    validations: [],
4288    init: function(){
4289        OPC_External_Validation.validations['review:placeOrder'] = Array();
4290
4291        // <editor-fold defaultstate="collapsed" desc="validations">
4292        OPC_External_Validation.validations['review:placeOrder'].push(function() {
4293            if (typeof carrier_selector !== typeof undefined && typeof sf_carriers_id !== typeof undefined && typeof sf_delivery_mode_is_selected !== typeof undefined) {
4294                var selected_carrier = $(carrier_selector + ':checked').length ?
4295                    $(carrier_selector + ':checked') : $(carrier_selector + '[checked=checked]');
4296                var result = selected_carrier.val().match('^([0-9]*)')[1];
4297
4298                if (!in_array(result, sf_carriers_id)){
4299                    return (true);
4300                }
4301
4302                if (!sf_delivery_mode_is_selected){
4303                    alert($('#must-select').val());
4304                    return false;
4305                }
4306            }
4307        });
4308        OPC_External_Validation.validations['review:placeOrder'].push(function() {
4309            if ($('#deliverydays_day option').length > 0) {
4310                if($.isEmpty($('#deliverydays_day').val())){
4311                    alert(OnePageCheckoutPS.Msg.select_date_shipping);
4312
4313                    return false;
4314                }
4315            }
4316        });
4317        OPC_External_Validation.validations['review:placeOrder'].push(function() {
4318            if ($('#shipping_date').length > 0) {
4319                if($.isEmpty($('#shipping_date').val())){
4320                    alert(OnePageCheckoutPS.Msg.select_date_shipping);
4321                    return false;
4322                }
4323            }
4324        });
4325        OPC_External_Validation.validations['review:placeOrder'].push(function() {
4326            /* support planningdeliverybycarrier */
4327            if ($('#day_slots #date_delivery').length > 0) {
4328                if($.isEmpty($('#day_slots #date_delivery').val())){
4329                    alert(OnePageCheckoutPS.Msg.select_date_shipping);
4330                    return false;
4331                }
4332            }
4333        });
4334        OPC_External_Validation.validations['review:placeOrder'].push(function() {
4335            if ($('#day_slots #id_planning_delivery_slot').length > 0) {
4336                if($('#day_slots #id_planning_delivery_slot').val() == '-'){
4337                    alert(OnePageCheckoutPS.Msg.select_date_shipping);
4338                    return false;
4339                }
4340            }
4341        });
4342        OPC_External_Validation.validations['review:placeOrder'].push(function() {
4343            if ($('#onepagecheckoutps_step_two .delivery_option.selected div.extra_info_carrier a.select_pickup_point').length > 0){
4344                if (AppOPC.$opc_step_two.find('#relay_point_selected_box').length <= 0) {
4345                    Fronted.showModal({type:'error', message : OnePageCheckoutPS.Msg.need_select_pickup_point});
4346
4347                    $('#onepagecheckoutps_step_two .delivery_option.selected div.extra_info_carrier a.select_pickup_point').trigger('click');
4348
4349                    return false;
4350                }
4351            }
4352        });
4353        OPC_External_Validation.validations['review:placeOrder'].push(function() {
4354            if ($('#onepagecheckoutps_step_two .delivery_option.selected #correospaq').length > 0 &&
4355                $('#onepagecheckoutps_step_two .delivery_option.selected #correospaq #selectedpaq_code').val() == '')
4356            {
4357                if (typeof Correos !== typeof undefined) {
4358                    Correos.callAlert(CorreosMessage.noPaqsSelected);
4359                } else {
4360                    alert(OnePageCheckoutPS.Msg.need_select_pickup_point);
4361                }
4362
4363                return false;
4364            }
4365        });
4366        OPC_External_Validation.validations['review:placeOrder'].push(function() {
4367            if ($('#onepagecheckoutps_step_two .packetery-branch-list select').length > 0 &&
4368                $('#onepagecheckoutps_step_two .packetery-branch-list select').val() == '' &&
4369                Boolean($('.delivery_option_radio:checked').attr('packetery-initialized')))
4370            {
4371                alert(OnePageCheckoutPS.Msg.need_select_pickup_point);
4372
4373                return false;
4374            }
4375        });
4376        OPC_External_Validation.validations['review:placeOrder'].push(function() {
4377            //support carrier module - shaim_baliknapostu v1.7.4
4378            if ($('#onepagecheckoutps_step_two .hook_extracarrier #najdi_postu').length > 0)
4379            {
4380                if ($('#onepagecheckoutps_step_two .hook_extracarrier #najdi_postu').is(':visible')) {
4381                    alert(OnePageCheckoutPS.Msg.need_select_pickup_point);
4382
4383                    return false;
4384                }
4385            }
4386        });
4387        OPC_External_Validation.validations['review:placeOrder'].push(function() {
4388            //support module: carrierpickupstore
4389            if (typeof id_carrierpickupstore !== typeof undefined && !OnePageCheckoutPS.IS_VIRTUAL_CART) {
4390                if (AppOPC.$opc_step_two.find('.delivery_option.selected .delivery_option_radio[value=\'' + id_carrierpickupstore + ',\']').is(':checked')) {
4391                    if (AppOPC.$opc_step_two.find('.opt_id_store').val() == '0') {
4392                        alert(OnePageCheckoutPS.Msg.need_select_pickup_point);
4393
4394                        return false;
4395                    }
4396                }
4397            }
4398        });
4399        OPC_External_Validation.validations['review:placeOrder'].push(function() {
4400            //support module: deliverydateswizard
4401            if (typeof ddw !== typeof undefined) {
4402                var ddw_error = false;
4403
4404                if ($("input[name='chk_timeslot']").length > 0 &&  $("input[name='chk_timeslot']").is(":checked") == false)
4405                    ddw_error = true;
4406
4407                if (ddw.$input_ddw_order_date.val() == '0000-00-00 00:00:00' || ddw.$input_ddw_order_date.val() == '')
4408                    ddw_error = true;
4409
4410                if (ddw_error && ddw.required == 1){
4411                    ddw.showRequiredError();
4412
4413                    return false;
4414                }
4415            }
4416        });
4417        OPC_External_Validation.validations['review:placeOrder'].push(function() {
4418            //support module: envoimoinscher
4419            if (typeof Emc !== typeof undefined) {
4420                if (typeof Emc.validateCarrierForm !== typeof undefined) {
4421                    if (!Emc.validateCarrierForm(true)) {
4422                        return false;
4423                    }
4424                }
4425            }
4426        });
4427        OPC_External_Validation.validations['review:placeOrder'].push(function() {
4428            /* Support module: selltickets - V3.2.1 - Avellana Digital SL */
4429            if (typeof continueorder !== typeof undefined) {
4430                if (!continueorder) {
4431                    Fronted.showModal({type:'error', message : '&bullet; ' + OnePageCheckoutPS.Msg.selltickets_error});
4432                    return false;
4433                }
4434            }
4435        });
4436        OPC_External_Validation.validations['review:placeOrder'].push(function() {
4437            /* support module: deliverytime v3.0.1 (Innercode) */
4438            if (typeof checkDeliveryTimeSelection === 'function') {
4439                if (! checkDeliveryTimeSelection()) {
4440                   alert(OnePageCheckoutPS.Msg.need_select_time);
4441                   return false;
4442                }
4443            }
4444        });
4445        // </editor-fold>
4446    },
4447    execute: function(step) {
4448        var is_valid = true;
4449
4450        if (typeof OPC_External_Validation.validations[step] !== typeof undefined) {
4451            $.each(OPC_External_Validation.validations[step], function(i, external_validation) {
4452                if (external_validation() === false) {
4453                    is_valid = false;
4454
4455                    return false;
4456                }
4457            });
4458        }
4459
4460        return is_valid;
4461    }
4462}
4463
4464function updateExtraCarrier(id_delivery_option, id_address)
4465{
4466	$.ajax({
4467		type: 'POST',
4468		url: orderOpcUrl + '?rand=' + new Date().getTime(),
4469		cache: false,
4470		dataType : "json",
4471		data: 'is_ajax=true'
4472			+'&action=updateExtraCarrier'
4473			+'&id_address='+id_address
4474			+'&id_delivery_option='+id_delivery_option
4475			+'&token='+static_token
4476			+'&allow_refresh=1',
4477		success: function(jsonData)
4478		{
4479			$('#HOOK_EXTRACARRIER_'+id_address).html(jsonData['content']);
4480		}
4481	});
4482}
4483
4484function confirmFreeOrder()
4485{
4486	$.ajax({
4487		type: 'POST',
4488		headers: { "cache-control": "no-cache" },
4489		url: orderOpcUrl + '?rand=' + new Date().getTime(),
4490		cache: false,
4491		dataType : "html",
4492		data: 'ajax=true&method=makeFreeOrder&token=' + static_token ,
4493		success: function(html)
4494		{
4495			AppOPC.$opc.find('#btn_place_order').removeClass('disabled');
4496			var array_split = html.split(':');
4497			if (array_split[0] == 'freeorder')
4498			{
4499				if (!$('#checkbox_create_account_guest').is(':checked') && !OnePageCheckoutPS.IS_LOGGED)
4500					document.location.href = OnePageCheckoutPS.GUEST_TRACKING_URL+'?id_order='+encodeURIComponent(array_split[1])+'&email='+encodeURIComponent(array_split[2]);
4501				else
4502					document.location.href = OnePageCheckoutPS.HISTORY_URL;
4503			}else{
4504                            //Fronted.closeDialog();
4505			}
4506		},
4507		error: function(XMLHttpRequest, textStatus, errorThrown) {
4508            console.log('ERROR AJAX: ' + textStatus, errorThrown);
4509        }
4510	});
4511}
4512
4513function supportModuleGDPR(callback) {
4514    //support module: m4gdpr - v1.1.2 - PrestaAddons
4515    if (typeof m4gdprConsent !== typeof undefined && !AppOPC.m4gpdr && (!OnePageCheckoutPS.IS_LOGGED || OnePageCheckoutPS.IS_GUEST)) {
4516        $.each(m4gdprConsent.elements, function (i, element) {
4517            if (element.element == 'onepagecheckoutps') {
4518                function disableSubmitButton() {
4519                    $('.vex-dialog-buttons button[type="submit"]').prop('disabled', true);
4520                }
4521                function enableSubmitButton() {
4522                    $('.vex-dialog-buttons button[type="submit"]').prop('disabled', false);
4523                }
4524                function isAllChecked(id) {
4525                    var allChecked = true;
4526                    $('#m4gdpr-dialog-' + id + ' input[type="checkbox"]').each(function() {
4527                        if ($(this).hasClass('required') && false == $(this).prop('checked')) {
4528                            allChecked = false;
4529                        }
4530                    });
4531
4532                    return allChecked;
4533                }
4534
4535                var buttons = [
4536                    jQuery.extend({}, vex.dialog.buttons.YES, {
4537                        text: element.count ? m4gdprConsent.buttonText.submit : m4gdprConsent.buttonText.accept
4538                    })
4539                ];
4540
4541                if (element.count) {
4542                    buttons.push(
4543                        jQuery.extend({}, vex.dialog.buttons.NO, {
4544                            text: m4gdprConsent.buttonText.cancel, click: function() {
4545                                AppOPC.$opc.find('#btn_place_order').removeAttr('disabled');
4546                                this.value = false;
4547                                this.close();
4548                                return false;
4549                            }
4550                        })
4551                    );
4552                }
4553
4554                var vexDialog = vex.dialog.open({
4555                    unsafeMessage: m4gdprConsent.message,
4556                    input: (element && element.input) ? element.input.join('') : '',
4557                    buttons: buttons,
4558                    className: m4gdprConsent.className,
4559                    afterOpen: function() {
4560                        $('#m4gdpr-dialog-' + element.id).on('change', 'input[type="checkbox"]', function() {
4561                            if (isAllChecked(element.id)) {
4562                                enableSubmitButton();
4563                            } else {
4564                                disableSubmitButton();
4565                            }
4566                        });
4567                    },
4568                    onSubmit: function(e) {
4569                        e.preventDefault();
4570                        e.stopPropagation();
4571                        e.stopImmediatePropagation();
4572
4573                        if (!isAllChecked(element.id)) {
4574                            disableSubmitButton();
4575                            return false;
4576                        } else {
4577                            var params = $('.vex-dialog-form').serializeArray();
4578
4579                            params.push({'name': 'from', 'value': AppOPC.$opc_step_one.find('#customer_email').val()});
4580
4581                            $.post(m4gdprBaseUri + 'index.php', params);
4582
4583                            AppOPC.m4gpdr = true;
4584
4585                            vexDialog.close();
4586                            callback();
4587                        }
4588                    }
4589                });
4590
4591                if (isAllChecked(element.id)) {
4592                    enableSubmitButton();
4593                } else {
4594                    disableSubmitButton();
4595                }
4596            }
4597        });
4598
4599        return false;
4600    }
4601
4602    callback();
4603}
4604
4605function updateCarrierSelectionAndGift(){}
4606function updateCarrierList(){}
4607function updatePaymentMethods(){}
4608function updatePaymentMethodsDisplay(){}
4609function cleanSelectAddressDelivery(){}
4610
4611//compatibilidad modulo crosselling
4612function loadJavaScriptReview(){
4613    $(function(){
4614        if ($('#crossselling_list_car').length > 0) {
4615            if (!!$.prototype.bxSlider) {
4616                $('#crossselling_list_car').bxSlider({
4617                    minSlides: 2,
4618                    maxSlides: 6,
4619                    slideWidth: 178,
4620                    slideMargin: 20,
4621                    pager: false,
4622                    nextText: '',
4623                    prevText: '',
4624                    moveSlides:1,
4625                    infiniteLoop:false,
4626                    hideControlOnEnd: true
4627                });
4628            }
4629        }
4630//        if($('#crossselling_list').length > 0)
4631//        {
4632//        	//init the serialScroll for thumbs
4633//        	cs_serialScrollNbImages = $('#crossselling_list li').length;
4634//        	cs_serialScrollNbImagesDisplayed = 5;
4635//        	cs_serialScrollActualImagesIndex = 0;
4636//        	$('#crossselling_list').serialScroll({
4637//        		items:'li',
4638//        		prev:'a#crossselling_scroll_left',
4639//        		next:'a#crossselling_scroll_right',
4640//        		axis:'x',
4641//        		offset:0,
4642//        		stop:true,
4643//        		onBefore:cs_serialScrollFixLock,
4644//        		duration:300,
4645//        		step: 1,
4646//        		lazy:true,
4647//        		lock: false,
4648//        		force:false,
4649//        		cycle:false
4650//        	});
4651//        	$('#crossselling_list').trigger( 'goto', [ (typeof cs_middle !== 'undefined' ? cs_middle : middle)-3] );
4652//        }
4653
4654//        $('#onepagecheckoutps_step_review #gift-products_block .ajax_add_to_cart_button').die('click');
4655
4656//
4657            $('#onepagecheckoutps_step_review .ajax_add_to_cart_button').unbind('click').click(function(event){
4658                var idProduct = 0;
4659
4660                if (!$.isEmpty($(event.currentTarget).attr('data-id-product')))
4661                    idProduct = $(event.currentTarget).attr('data-id-product');
4662                else
4663                    idProduct =  $(this).attr('rel').replace('ajax_id_product_', '');
4664
4665                if ($('#onepagecheckoutps_step_review #gift-products_block').length > 0){
4666                    event.preventDefault();
4667                    window.location = $(event.currentTarget).attr('href');
4668
4669                    return false;
4670                }
4671
4672                if (!$.isEmpty(idProduct)){
4673                    ajaxCart.add(idProduct, null, false, this);
4674                    Carrier.getByCountry();
4675
4676                    return false;
4677                }
4678            });
4679//        }
4680
4681        $('#onepagecheckoutps_step_review .ajax_add_to_cart_button').css({visibility: 'visible'});
4682
4683        //compatibilidad con modulo CheckoutFields
4684        if (typeof checkoutfields !== 'undefined')
4685            checkoutfields.bindAjaxSave();
4686
4687        //compatibilidad con modulo paragonfaktura
4688        $('#pfform input').click(function(){
4689            var value = $('#pfform input:checked').val();
4690            var id_cart = $('#pfform #pf_id').val();
4691            $.ajax({
4692              type: "POST",
4693              url: "modules/paragonfaktura/save.php",
4694              data: { value: value, id_cart: id_cart }
4695            }).done(function( msg ) {
4696
4697            });
4698		});
4699    });
4700}
4701
4702function opc_callback_error_payment(name_module, params) {
4703    if (name_module == 'braintree') {
4704        Fronted.loadingBig(false);
4705
4706        if (typeof params.errorMsg !== typeof undefined && params.errorMsg) {
4707            Fronted.showModal({type: 'warning', message: params.msg});
4708        }
4709    }
4710}
4711
4712//support module payment: Sveawebpay
4713function getAddressSveawebpay(){
4714    var ssn = $("#sveawebpay_security_number").val();
4715    var md5v = $("#sveawebpay_md5").val();
4716
4717    $.get(baseDir + 'modules/sveawebpay/sveagetaddress.php', {ssn: ssn, md5:hex_md5(ssn+md5v), email:'', iscompany:false, sveatype: 1, country: 'SE', isinvoice: true, quickcall: true},
4718        function(data){
4719            if(data!='-1')
4720            {
4721                var parts = data.split('*');
4722                var names = parts[0].split(' ');
4723                var lastname = $.trim(names[0]);
4724                var firstname = '';
4725                var address_one=$.trim(parts[1]);
4726                var address_two=$.trim(parts[2]);
4727                if(address_one=='')
4728                {
4729                    address_one=address_two;
4730                    address_two='';
4731                }
4732                for(var i in names)
4733                {
4734                    if(i!=0)
4735                    {
4736                        firstname = firstname + ' ' + names[i];
4737                        firstname = firstname.replace(",", "");
4738                    }
4739                }
4740                lastname = lastname.replace(",", "");
4741                $('#customer_firstname').val($.trim(firstname));
4742                $('#customer_lastname').val(lastname);
4743                $('#delivery_address1').val(address_one);
4744                $('#delivery_address2').val(address_two);
4745                $('#delivery_postcode').val($.trim(parts[3]));
4746                $('#delivery_city').val($.trim(parts[4]));
4747                $('#delivery_dni').val(ssn);
4748            }
4749	});
4750}
4751
4752function reloadPage(){
4753	location.reload();
4754}
4755function addslashes(str) {
4756  //  discuss at: http://phpjs.org/functions/addslashes/
4757  // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
4758  // improved by: Ates Goral (http://magnetiq.com)
4759  // improved by: marrtins
4760  // improved by: Nate
4761  // improved by: Onno Marsman
4762  // improved by: Brett Zamir (http://brett-zamir.me)
4763  //   input by: Denny Wardhana
4764  //   example 1: addslashes("kevin's birthday");
4765  //   returns 1: "kevin\\'s birthday"
4766
4767  return (str + '')
4768    .replace(/[\\"']/g, '\\$&')
4769    .replace(/\u0000/g, '\\0');
4770}
4771
4772function version_compare(v1, v2, operator) { // eslint-disable-line camelcase
4773  //       discuss at: http://locutus.io/php/version_compare/
4774  //      original by: Philippe Jausions (http://pear.php.net/user/jausions)
4775  //      original by: Aidan Lister (http://aidanlister.com/)
4776  // reimplemented by: Kankrelune (http://www.webfaktory.info/)
4777  //      improved by: Brett Zamir (http://brett-zamir.me)
4778  //      improved by: Scott Baker
4779  //      improved by: Theriault (https://github.com/Theriault)
4780  //        example 1: version_compare('8.2.5rc', '8.2.5a')
4781  //        returns 1: 1
4782  //        example 2: version_compare('8.2.50', '8.2.52', '<')
4783  //        returns 2: true
4784  //        example 3: version_compare('5.3.0-dev', '5.3.0')
4785  //        returns 3: -1
4786  //        example 4: version_compare('4.1.0.52','4.01.0.51')
4787  //        returns 4: 1
4788
4789  // Important: compare must be initialized at 0.
4790  var i
4791  var x
4792  var compare = 0
4793
4794  var vm = {
4795    'dev': -6,
4796    'alpha': -5,
4797    'a': -5,
4798    'beta': -4,
4799    'b': -4,
4800    'RC': -3,
4801    'rc': -3,
4802    '#': -2,
4803    'p': 1,
4804    'pl': 1
4805  }
4806
4807  var _prepVersion = function (v) {
4808    v = ('' + v).replace(/[_\-+]/g, '.')
4809    v = v.replace(/([^.\d]+)/g, '.$1.').replace(/\.{2,}/g, '.')
4810    return (!v.length ? [-8] : v.split('.'))
4811  }
4812
4813  var _numVersion = function (v) {
4814    return !v ? 0 : (isNaN(v) ? vm[v] || -7 : parseInt(v, 10))
4815  }
4816
4817  v1 = _prepVersion(v1)
4818  v2 = _prepVersion(v2)
4819  x = Math.max(v1.length, v2.length)
4820  for (i = 0; i < x; i++) {
4821    if (v1[i] === v2[i]) {
4822      continue
4823    }
4824    v1[i] = _numVersion(v1[i])
4825    v2[i] = _numVersion(v2[i])
4826    if (v1[i] < v2[i]) {
4827      compare = -1
4828      break
4829    } else if (v1[i] > v2[i]) {
4830      compare = 1
4831      break
4832    }
4833  }
4834  if (!operator) {
4835    return compare
4836  }
4837
4838  switch (operator) {
4839    case '>':
4840    case 'gt':
4841      return (compare > 0)
4842    case '>=':
4843    case 'ge':
4844      return (compare >= 0)
4845    case '<=':
4846    case 'le':
4847      return (compare <= 0)
4848    case '===':
4849    case '=':
4850    case 'eq':
4851      return (compare === 0)
4852    case '<>':
4853    case '!==':
4854    case 'ne':
4855      return (compare !== 0)
4856    case '':
4857    case '<':
4858    case 'lt':
4859      return (compare < 0)
4860    default:
4861      return null
4862  }
4863}
4864
4865jQuery.expr[':'].ptsContains = function(a, i, m) { return jQuery(a).text().toUpperCase() .indexOf(m[3].toUpperCase()) >= 0; };
4866
4867var reload_init_opc = setInterval(function(){
4868    if (typeof AppOPC !== typeof undefined){
4869        if(!AppOPC.initialized)
4870            AppOPC.init();
4871        else
4872            clearInterval(reload_init_opc)
4873    }
4874}, 2000);
4875
4876var remove_uniform_aux = false;
4877var remove_uniform = setInterval(function(){
4878    if(!remove_uniform_aux){
4879        Fronted.removeUniform();
4880        remove_uniform_aux = true;
4881    }else
4882        clearInterval(remove_uniform)
4883}, 10000);

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.