(function ($) {

    'use strict';



    Object.size = function (obj) {

        return Object.keys(obj).length;

    };



    var GmzBookingCustom = {

        isValidated: {},

        init: function () {

            this.initDocumentReady();

            this.initCheckboxClicked();

            this.preventDropdownClick();

            this.initPopupIframe();

            this.initDatePicker();

            this.initOther();

            this.initFormAction();

            this.initValidation();

            this.initReviewForm();

            this.initLinkAction();

            this.initSearchForm();

            this.initGuestDropdownApartment();

            this.initGuestDropdownTour();

            this.initGuestDropdownHotel();

            this.initGuestDropdownSpace();

            this.initSelect2();

            this.initTimeDropdown();

            this.initMenu();

            this.initBeautyBookingForm();

            this.initWishList();

        },



        initWishList: function(){

            $(document).on('click', '.add-wishlist', function(){

                var t = $(this),

                    postID = t.data('id'),

                    postType = t.data('post-type');



                if(!t.hasClass('gmz-box-popup')) {

                    t.addClass('active');

                    $.post(t.data('action'), {

                        post_id: postID,

                        post_type: postType,

                        _token: $('meta[name="csrf-token"]').attr('content')

                    }, function (respon) {

                        if (respon.status) {

                            t.parent().html(respon.html);

                            $('.tooltip').hide();

                            $('[data-toggle="tooltip"]').tooltip('update');

                        }

                        t.removeClass('active');

                    }, 'json');

                }

            });

        },



        initBoxPopup: function(){

            if ($('.gmz-box-popup').length) {

                $('.gmz-box-popup').magnificPopup({

                    removalDelay: 500,

                    closeBtnInside: true,

                    callbacks: {

                        beforeOpen: function () {

                            this.st.mainClass = this.st.el.attr('data-effect');

                        }

                    },

                    midClick: true,

                    fixedContentPos: true

                });

            }

        },



        getUrlVars: function () {

            var vars = {};

            var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,

                function (m, key, value) {

                    vars[key] = value;

                });

            return vars;

        },



        currencyFormat: function(price ,symbol, position = null){

            if(position === 'right'){

                return price + symbol;

            }else if(position === 'right_space'){

                return price + ' ' + symbol;

            }else if(position === 'left_space'){

                return symbol + ' ' + price;

            }else{

                return symbol + price;

            }

        },



        initBeautyBookingForm: function () {

            var t = this;

            var bookingForm = $('#beautyBookingForm');

            var checkInInput = $('#beautyBookingForm__date', bookingForm);

            if (bookingForm.length) {

                var dateFormat = checkInInput.data("date-format");

                var divContent = $(".booking-form__content", bookingForm);

                var checkIn = t.getUrlVars()['check_in'];

                var currentDate = moment().unix();

                var basePrice = bookingForm.data("base-price");



                if (isNaN(checkIn) || checkIn === "" || checkIn < currentDate){

                    checkIn = currentDate;

                }



                var getData = function (checkIn) {



                    var handlePopup = function () {

                        //popup

                        var popup = $('.booking-agent__info');

                        popup.offset(function (n,c) {

                            var pos = {};

                            if(c.left < 0){

                                pos.left = 0;

                            }

                            pos.right = c.right;

                            return pos;

                        })

                    };



                    var handleAgent = function(){

                        var select = $("#beautyBookingForm__slot");

                        select.change(function () {

                            var x = $(this);

                            var agentOfSlot = x.find(':selected').data('agent');

                            agentOfSlot = JSON.parse(atob(agentOfSlot));

                            $('input[name="agent"]',bookingForm).each(function () {

                                var x = $(this);

                                var idElement = x[0].id;

                                var idAgent = idElement.replace('agent_','');

                                var label = $("#label_agent_"+idAgent);

                                x.removeAttr('disable');

                                label.show();

                                if(agentOfSlot.indexOf(idAgent) < 0){

                                    x.attr('disable');

                                    label.hide();

                                }

                            })

                        }).change();

                    };



                    $.ajax({

                        url: bookingForm.data('action'),

                        type: 'GET',

                        data: {

                            slug: bookingForm.data('post-slug'),

                            checkIn: checkIn,

                        },

                    }).done(function (data, status) {

                        if (divContent.length && data['html']){

                            divContent.empty().append(data['html']);

                            handlePopup();

                            handleAgent();

                            if(data["price"]){

                                $('.price-value', bookingForm).html(data["price"].toFixed(2));

                            }else{

                                $('.price-value', bookingForm).html(basePrice.toFixed(2));

                            }

                            t.initFormAction();

                        }

                    });

                };

                getData(checkIn);



                var dateString = moment.unix(checkIn).toDate();

                checkInInput.daterangepicker({

                    singleDatePicker: true,

                    autoApply: true,

                    startDate: dateString,

                    minDate: new Date(),

                    locale: {

                        format: dateFormat,

                    }

                });



                checkInInput.on('apply.daterangepicker', function(ev, picker) {

                    checkIn = moment(picker.startDate.format('YYYY-MM-DD'),'YYYY-MM-DD').unix();

                    getData(checkIn);

                });



            }

        },



        initGDPR: function () {

            if (typeof gmz_gdpr_params !== 'undefined') {

                if (gmz_gdpr_params.enable === 'on') {

                    glowCookies.start('en', {

                        hideAfterClick: gmz_gdpr_params.hide_after_click,

                        position: gmz_gdpr_params.position,

                        bannerDescription: gmz_gdpr_params.banner_description,

                        bannerLinkText: gmz_gdpr_params.banner_link_text,

                        policyLink: gmz_gdpr_params.policy_page,

                        bannerHeading: gmz_gdpr_params.banner_heading,

                        acceptBtnText: gmz_gdpr_params.button_accept_text,

                        rejectBtnText: gmz_gdpr_params.button_reject_text,

                        manageText: gmz_gdpr_params.manage_text,

                    });

                }

            }

        },



        initSelect2: function () {

            // In your Javascript (external .js resource or <script> tag)

            $(document).ready(function () {

                var ss = $('.gmz-select-2');

                if (ss.length) {

                    ss.select2();

                }

            });

        },



        initRoomCheckout: function () {

            var roomBookingForm = $('#gmz-room-booking');

            roomBookingForm.off('submit');

            roomBookingForm.on('submit', function (e) {

                e.preventDefault();

                var form = $(this),

                    loader = $('.gmz-loader', form),

                    action = form.attr('action'),

                    data = form.serializeArray();



                data.push({

                    name: '_token',

                    value: $('meta[name="csrf-token"]').attr('content')

                });



                loader.show();



                $.post(action, data, function (respon) {

                    if (typeof respon === 'object') {

                        if (respon.status) {

                            window.location.href = respon.redirect;

                        } else {

                            alert(respon.message);

                        }

                    }

                    loader.hide();

                }, 'json');



            })

        },



        initRoomPrice: function () {

            var form = $('#gmz-room-booking');

            var action = form.data('action-real-price'),

                loader = $('.gmz-loader', form),

                data = form.serializeArray();



            data.push({

                name: '_token',

                value: $('meta[name="csrf-token"]').attr('content')

            });



            loader.show();



            $.post(action, data, function (respon) {

                if (typeof respon === 'object') {

                    if (respon.status) {

                        $('#gmz-render-number-room').text(respon.number);

                        $('#gmz-render-price-room').text(respon.price);

                    }

                }

                loader.hide();

            }, 'json');

        },



        initRoomBookingForm: function () {

            var roomBookingForm = $('#room-booking-form');

            if (roomBookingForm.length) {

                var base = this;

                var searchForm = $('#search-room');

                var roomHtml = $('#room-render-wrapper .room-html');

                var screenWidth = searchForm.outerWidth();

                $(window).scroll(function () {

                    if ($(window).scrollTop() >= searchForm.offset().top - 300 &&

                        $(window).scrollTop() <= (roomHtml.offset().top - roomHtml.innerHeight() + 300)) {

                        roomBookingForm.addClass('fixed');

                        roomBookingForm.css({

                            width: screenWidth + 'px'

                        })

                    } else {

                        roomBookingForm.removeClass('fixed');

                        roomBookingForm.css({

                            width: 'auto'

                        })

                    }

                });



                var bookingForm = $('#gmz-room-booking');

                var selectNumber = $('select', bookingForm);

                selectNumber.on('change', function () {

                    var checkShow = false;

                    selectNumber.each(function () {

                        if ($(this).val() != 0) {

                            checkShow = true;

                        }

                    });

                    if (checkShow) {

                        base.initRoomPrice();

                        roomBookingForm.addClass('show');

                    } else {

                        roomBookingForm.removeClass('show');

                    }

                });



                var checkboxItem = $('input[type="checkbox"]', bookingForm);

                checkboxItem.on('change', function () {

                    base.initRoomPrice();

                });

            }

        },



        initModal: function () {

            var base = this;

            $('#room-render-wrapper').on('click', '.gmz-open-modal', function (e) {

                e.preventDefault();

                var t = $(this),

                    modal = $(t.data('target')),

                    action = t.data('action'),

                    params = t.data('params'),

                    loader = $('.gmz-loader', modal),

                    data = [];



                data.push(

                    {name: '_token', value: $('meta[name="csrf-token"]').attr('content')},

                    {name: 'params', value: params}

                );



                loader.show();

                modal.modal('show');



                $.post(action, data, function (respon) {

                    if (typeof respon === 'object') {

                        if (respon.status) {

                            $(modal).find('.render').html(respon.html);

                            $('[data-toggle="tooltip"]').tooltip();

                            var roomGallery = $('#room-detail-gallery');

                            if (roomGallery.length) {

                                roomGallery.fotorama();

                            }

                        } else {

                            alert(respon.message);

                            modal.modal('hide');

                        }

                    }

                    loader.hide();

                }, 'json');

            });

        },



        initSearchRoom: function () {

            var base = this;

            var parent = $('#room-render-wrapper'),

                form = $('#search-room'),

                loader = $('.gmz-loader', parent),

                renderEl = $('.room-html', parent),

                formData = form.serializeArray(),

                action = form.attr('action');



            formData.push({

                name: '_token',

                value: $('meta[name="csrf-token"]').attr('content')

            });



            loader.show();



            $.post(action, formData, function (respon) {

                renderEl.html(respon.html);

                $('[data-toggle="tooltip"]').tooltip();

                $('#room-booking-form').removeClass('show');

                base.initModal();

                base.initRoomBookingForm();

                base.initRoomCheckout();

                loader.hide();

            }, 'json');

        },



        initMatchHeight: function () {

            if ($('[data-plugin="matchHeight"]').length) {

                $('[data-plugin="matchHeight"]').matchHeight();

            }

        },



        initMenu: function () {

            $('.toggle-menu').on('click', function () {

                $('.main-menu').addClass('show');

                $('.menu-overlay').addClass('show');

            });

            $(document).on('click', '.main-menu .back-menu, .menu-overlay', function () {

                $('.main-menu').removeClass('show');

                $('.menu-overlay').removeClass('show');

            });

            $('.main-menu').prepend('<li class="back-menu"><i class="far fa-long-arrow-left"></i></li>')

            $('.main-menu li.menu-item-has-children').each(function () {

                $(this).append('<span class="arrow">+</span>');

            });

            $('.main-menu>li.menu-item-has-children').each(function () {

                $(this).append('<span class="arrow-pc"><i class="far fa-chevron-down"></i></span>');

            });

            $('.main-menu li .sub-menu>li.menu-item-has-children').each(function () {

                $(this).append('<span class="arrow-pc"><i class="far fa-chevron-right"></i></span>');

            });

            $('.main-menu li.menu-item-has-children .arrow').on('click', function () {

                var t = $(this),

                    parent = t.parent();



                parent.find('.sub-menu').first().slideToggle();

                parent.toggleClass('open');

                if (parent.hasClass('open')) {

                    t.text('-');

                } else {

                    t.text('+');

                }

            });

        },



        initTimeDropdown: function () {

            var base = this;

            var searchTime = $('.search-form__time');

            if (searchTime.length) {

                var renderEl = $('.time-render', searchTime),

                    selectEl = $('.dropdown-menu .item select', searchTime),

                    selectStartEl = $('.dropdown-menu .item select[name="startTime"]', searchTime);

                selectEl.on('change', function () {

                    var strStartTime = '';


                    if ($(this).attr('name') === 'startTime' && selectStartEl.val() !== '') {

                        strStartTime = selectStartEl.find('option[value="' + selectStartEl.val() + '"]').text();

                        var startIndex = selectStartEl.find('option[value="' + selectStartEl.val() + '"]').index();

                    }
                    renderEl.text(strStartTime);

                });

            }



            var bookingTime = $('.booking-time');

            if (bookingTime.length) {

                var selectBookingEl = $('select', bookingTime),

                    selectBookingStartEl = $('select[name="startTime"]', bookingTime);

                var duration = $('input[name="time"]').val();

                selectBookingEl.on('change', function () {

                    var check_out_time = $('input[name="endTime"]');

                    if ($(this).attr('name') === 'startTime' && selectBookingStartEl.val() !== '') {
                    }

                    base.initBookingForm();

                });

            }

        },



        initGuestDropdownApartment: function () {

            var searchGuest = $('.search-form__guest.apartment');

            if (searchGuest.length) {

                var renderEl = $('.guest-render', searchGuest),

                    selectEl = $('.dropdown-menu .item select', searchGuest),

                    selectAdultEl = $('.dropdown-menu .item select[name="adult"]', searchGuest),

                    selectChildEl = $('.dropdown-menu .item select[name="children"]', searchGuest),

                    selectInfantEl = $('.dropdown-menu .item select[name="infant"]', searchGuest),

                    numGuest = 1,

                    numInfant = 0;



                selectEl.on('change', function () {

                    numGuest = parseInt(selectAdultEl.val()) + parseInt(selectChildEl.val());

                    numInfant = parseInt(selectInfantEl.val());



                    var strGuest = '';

                    var strInfant = '';

                    if (numGuest == 1) {

                        strGuest = numGuest + ' ' + gmz_params.i18n.guest;

                    } else {

                        strGuest = numGuest + ' ' + gmz_params.i18n.guests;

                    }



                    if (numInfant > 0) {

                        if (numInfant == 1) {

                            strInfant = ', ' + numInfant + ' ' + gmz_params.i18n.infant;

                        } else {

                            strInfant = ', ' + numInfant + ' ' + gmz_params.i18n.infants;

                        }

                    } else {

                        strInfant = '';

                    }



                    renderEl.text(strGuest + strInfant);

                });

            }

        },



        initGuestDropdownTour: function () {

            var searchGuest = $('.search-form__guest.tour');

            if (searchGuest.length) {

                var renderEl = $('.guest-render', searchGuest),

                    selectEl = $('.dropdown-menu .item select', searchGuest),

                    selectAdultEl = $('.dropdown-menu .item select[name="adult"]', searchGuest),

                    selectChildEl = $('.dropdown-menu .item select[name="children"]', searchGuest),

                    selectInfantEl = $('.dropdown-menu .item select[name="infant"]', searchGuest),

                    numGuest = 1,

                    numInfant = 0;



                selectEl.on('change', function () {

                    numGuest = parseInt(selectAdultEl.val()) + parseInt(selectChildEl.val());

                    numInfant = parseInt(selectInfantEl.val());



                    var strGuest = '';

                    var strInfant = '';

                    if (numGuest == 1) {

                        strGuest = numGuest + ' ' + gmz_params.i18n.guest;

                    } else {

                        strGuest = numGuest + ' ' + gmz_params.i18n.guests;

                    }



                    if (numInfant > 0) {

                        if (numInfant == 1) {

                            strInfant = ', ' + numInfant + ' ' + gmz_params.i18n.infant;

                        } else {

                            strInfant = ', ' + numInfant + ' ' + gmz_params.i18n.infants;

                        }

                    } else {

                        strInfant = '';

                    }



                    renderEl.text(strGuest + strInfant);

                });

            }

        },



        initGuestDropdownSpace: function () {

            var searchGuest = $('.search-form__guest.space');

            if (searchGuest.length) {

                var renderEl = $('.guest-render', searchGuest),

                    selectEl = $('.dropdown-menu .item select', searchGuest),

                    inputRoomEl = $('input[name="rooms"]'),

                    selectAdultEl = $('.dropdown-menu .item select[name="adult"]', searchGuest),

                    selectChildEl = $('.dropdown-menu .item select[name="children"]', searchGuest),

                    numGuest = 1,

                    numInfant = 0;

                selectEl.on('change', function () {


                    numGuest = parseInt(selectAdultEl.val());

                    numInfant = parseInt(selectChildEl.val());



                    var strGuest = '';

                    var strInfant = '';

                    if (numGuest == 1) {

                        strGuest = numGuest + ' ' + gmz_params.i18n.guest;

                        inputRoomEl.val(1);

                    } else {

                        strGuest = numGuest + ' ' + gmz_params.i18n.guests;

                        var rooms = parseInt(numGuest%2 + floor( numGuest/2));

                        inputRoomEl.val(rooms);

                    }



                    if (numInfant > 0) {

                        if (numInfant == 1) {

                            strInfant = ', ' + numInfant + ' ' + gmz_params.i18n.infant;

                        } else {

                            strInfant = ', ' + numInfant + ' ' + gmz_params.i18n.infants;

                        }

                    } else {

                        strInfant = '';

                    }



                    renderEl.text(strGuest + strInfant);

                });

            }

        },



        initGuestDropdownHotel: function () {

            var searchGuest = $('.search-form__guest.hotel');

            if (searchGuest.length) {

                var renderEl = $('.guest-render', searchGuest),

                    selectEl = $('.dropdown-menu .item select', searchGuest),

                    selectAdultEl = $('.dropdown-menu .item select[name="adult"]', searchGuest),

                    selectChildrenEl = $('.dropdown-menu .item select[name="children"]', searchGuest),

                    numAdult = 1,

                    numChildren = 0;



                selectEl.on('change', function () {

                    numAdult = parseInt(selectAdultEl.val());

                    numChildren = parseInt(selectChildrenEl.val());



                    var strGuest = '';

                    if (numAdult == 1) {

                        strGuest = numAdult + ' ' + gmz_params.i18n.adult;

                    } else {

                        strGuest = numAdult + ' ' + gmz_params.i18n.adults;

                    }



                    if (numChildren > 0) {

                        strGuest += ', ' + numChildren + ' ' + gmz_params.i18n.children;

                    }



                    renderEl.text(strGuest);

                });

            }

        },



        initSearchForm: function () {

            var searchFormWrapper = $('.search-form-wrapper');

            if ($('.booking-type', searchFormWrapper).length) {

                $('.booking-type a', searchFormWrapper).on('click', function (e) {

                    var parent = $(this).closest('.tab-pane');

                    e.preventDefault();

                    $('.booking-type a', parent).removeClass('active');

                    $(this).addClass('active');

                    var type = $(this).data('type');

                    if (type == 'day') {

                        $('.time-group', parent).addClass('d-none');

                        $('.date-group', parent).removeClass('d-none');

                        $('[name="bookingType"]', parent).val('day');

                    } else {

                        $('.time-group', parent).removeClass('d-none');

                        $('.date-group', parent).addClass('d-none');

                        $('[name="bookingType"]', parent).val('hour');

                    }

                });

            }

        },



        initLinkAction: function () {

            var base = this;

            $('.gmz-link-action').unbind();

            $('.gmz-link-action').on('click', function (e) {

                e.preventDefault();

                var t = $(this);

                var conf = true;

                var loader = $('.gmz-loader.gmz-page-loader');

                if (t.data('confirm') === true) {

                    conf = confirm('Are you sure want to to it?');

                }

                if (conf) {

                    loader.show();

                    var action = t.data('action'),

                        params = t.data('params'),

                        data = [];



                    data.push(

                        {name: '_token', value: $('meta[name="csrf-token"]').attr('content')},

                        {name: 'params', value: params}

                    );



                    $.post(action, data, function (respon) {

                        if (typeof respon === 'object') {



                            if (typeof respon.redirect !== 'undefined') {

                                setTimeout(function () {

                                    window.location.href = respon.redirect;

                                }, 1000);

                            }



                            if (typeof respon.reload !== 'undefined') {

                                setTimeout(function () {

                                    window.location.reload();

                                }, 1000);

                            }



                            loader.hide();

                        }

                    }, 'json');

                }

            });

        },



        initReviewForm: function () {

            $('.reply-box-wrapper .btn-reply').on('click', function (e) {

                e.preventDefault();

                var t = $(this),

                    wrapper = t.closest('li'),

                    parent = t.closest('.reply-box-wrapper'),

                    appendEl = parent.find('.reply-form'),

                    commentForm = $('.post-comment.parent-form');



                $('.post-comment.append-form').remove();

                $('.reply-box-wrapper').find('.reply-form').html('');

                $('.reply-box-wrapper').removeClass('active');



                parent.addClass('active');

                commentForm.find('input[name="comment_id"]').val(parent.data('comment_id'));

                appendEl.html(commentForm.clone().removeClass('parent-form').addClass('append-form').show());

                commentForm.hide();

            });



            $('.reply-box-wrapper .btn-cancel-reply').on('click', function (e) {

                e.preventDefault();

                var t = $(this),

                    wrapper = t.closest('li'),

                    parent = t.closest('.reply-box-wrapper'),

                    appendEl = parent.find('.reply-form'),

                    commentForm = $('.post-comment.parent-form');



                parent.removeClass('active');

                commentForm.find('input[name="comment_id"]').val('');

                appendEl.html('');

                commentForm.show();

            });



            $('.review-select-rate .fas-star .fa').each(function () {

                var list = $(this).parent(),

                    listItems = list.children(),

                    itemIndex = $(this).index(),

                    parentItem = list.parent();

                $(this).on({

                    mouseenter: function () {

                        for (var i = 0; i < listItems.length; i++) {

                            if (i <= itemIndex) {

                                $(listItems[i]).addClass('hovered');

                            } else {

                                break;

                            }

                        }

                        $(this).on('click', function () {

                            for (var i = 0; i < listItems.length; i++) {

                                if (i <= itemIndex) {

                                    $(listItems[i]).addClass('selected');

                                } else {

                                    $(listItems[i]).removeClass('selected');

                                }

                            }

                            parentItem.children('.review_star').val(itemIndex + 1);

                        });

                    },

                    mouseleave: function () {

                        listItems.removeClass('hovered');

                    }

                });



            });

        },



        initValidation: function (form, addEvent) {

            var base = this;

            $('.gmz-validation', form).each(function () {

                var _id = $(this).attr('id'),

                    validation = $(this).attr('data-validation');



                bootstrapValidate('#' + _id, validation, function (isValid) {

                    if (isValid) {

                        if (typeof base.isValidated[_id] !== 'undefined') {

                            delete base.isValidated[_id];

                        }

                    } else {

                        base.isValidated[_id] = 1;

                    }

                });

                if (addEvent) {

                    if ($(this).val() === '') {

                        $(this).trigger('focus').trigger('blur');

                    }

                }

            });

        },



        initFormAction: function () {

            var base = this;

            $('.gmz-form-action').off().on('submit', function (e) {

                e.preventDefault();



                var form = $(this),

                    action = form.attr('action'),

                    loader = $('.gmz-loader', form),

                    message = $('.gmz-message', form);



                base.initValidation(form, true);

                if (Object.size(base.isValidated)) {

                    var invalidEl = $('.gmz-validation.is-invalid', form).first();

                    if (invalidEl.length) {

                        $("html, body").animate({scrollTop: invalidEl.offset().top}, 500);

                        invalidEl.focus();

                    }

                    return false;

                }



                form.trigger('gmz_form_action_before', [form]);

                var paymentMethod = $("[name='payment_method']:checked", form).val();

                if (paymentMethod === 'stripe') {

                    var stripeToken = $("[name='stripeToken']", form).length;

                    if (!stripeToken) {

                        form.trigger('gmz_form_stripe', [form]);

                        return false;

                    }

                }

                var data = form.serializeArray();

                data.push({

                    name: '_token',

                    value: $('meta[name="csrf-token"]').attr('content')

                });



                loader.show();



                if (message.length > 0) {

                    message.empty();

                }



                $.post(action, data, function (respon) {

                    if (typeof respon === 'object') {

                        if (respon.login == true) {

                            $('.gmz-box-popup.signing-btn').trigger( "click" );

                            $('#public_key').val(respon.data);
                            $('#secret_token').val(respon.data);

                            $('.otp-form .gmz-message').text(respon.message);

                        }else
                        {
                            if (message.length > 0 && typeof respon.message !== 'undefined') {

                                if(form.hasClass('account-form')){
    
                                    message.html(respon.message);
    
                                }else {
    
                                    var classMessage = '';
    
                                    if (respon.status) {
    
                                        classMessage = 'alert alert-success';
    
                                    } else {
    
                                        classMessage = 'alert alert-danger';
    
                                    }
    
                                    message.html('<div class="' + classMessage + '">' + respon.message + '</div>');
    
                                }
    
                            }
                        }
                        $('#checkout-form').attr('data-order-id', respon.order_id);

                    }



                    if (typeof respon.redirect !== 'undefined') {

                        setTimeout(function () {

                            window.location.href = respon.redirect;

                        });

                    }



                    if (typeof respon.reload !== 'undefined') {

                        setTimeout(function () {

                            window.location.reload();

                        }, 1500);

                    }



                    loader.hide();

                }, 'json');

            });

        },



        initOther: function () {

            var base = this;

            if ($('.booking-form-single').length) {

                var form = $('.booking-form-single'),

                    quantity = $('[name="number"]', form),

                    checkbox = $('.accordion [type="checkbox"]', form);



                quantity.on('change', function () {

                    base.initBookingForm();

                });



                checkbox.on('change', function () {

                    base.initBookingForm();

                });

                $('select[name="adult"]', form).on('change', function () {

                    base.initBookingForm();

                });

                $('.time-radio').on('change', function () {
                    var checkin = new Date( $('input[name=check_in]').val().replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3") );
                    checkin.setDate(checkin.getDate() + 1);
                    $('input[name=check_out]').val(checkin.getFullYear()+"-"+(checkin.getMonth() + 1)+"-"+checkin.getDate());
                    var t = $('.booking-date.single'),

                    checkIn = $('[name="check_in"]', t),

                    checkInRender = $('.booking-date__intime .render', t),

                    checkOut = $('[name="check_out"]', t),

                    checkOutRender = $('.booking-date__out .render', t),

                    checkInOut = $('[name="check_in_out_time"]', t),

                    checkTOut = $('[name="check_out_time"]', t);
                    base.initTimeSlots(t);
                    base.initBookingForm();
                });

            }

            $('#booking-mobile').on('click', function () {

                $('.siderbar-single .booking-form').fadeIn('fast');

            });

            $('.siderbar-single .booking-form .close').on('click', function () {

                $('.siderbar-single .booking-form').fadeOut('fast');

            });



            $("#gmz-dropdown-notification").on('show.bs.dropdown', function () {

                var t = $(this),

                    data = {};

                data['_token'] = $('meta[name="csrf-token"]').attr('content');

                data['params'] = t.data('params');



                $.post(t.data('action'), data, function (respon) {

                    if (typeof respon == 'object') {

                        t.find('.badge').remove();

                    }

                }, 'json');

            });



            $('.view-password').on('click', function(){

               $(this).toggleClass('active');

               var passwordField = $(this).closest('.field-wrapper').find('input');

               if($(this).hasClass('active')){

                   passwordField.attr('type', 'text');

               }else{

                   passwordField.attr('type', 'password');

               }

            });

        },



        initBookingForm: function () {

            var base = this;
            var inputRoomEl = $('input[name="rooms"]');
            var selectAdultEl = $('select[name="adult"]');
            var numGuest = 1;

            if ($('.booking-form-single').length) {

                var form = $('.booking-form-single'),

                    loader = $('.gmz-loader', form),

                    message = $('.gmz-message', form);



                loader.show();

                message.empty();

                var data = form.serializeArray();

                data.push({

                    name: '_token',

                    value: $('meta[name="csrf-token"]').attr('content')

                });

                $.post(form.data('price-url'), data, function (respon) {

                    if (typeof respon == 'object') {

                        if (respon.status) {

                            if (typeof respon.price !== 'undefined') {

                                numGuest = parseInt(selectAdultEl.val());
                                var rooms = parseInt(numGuest%2 + Math.floor(numGuest/2));
                                inputRoomEl.val(rooms);
                                if($('input[name=time]:checked').val() == "24hr")
                                {
                                    var a = new Date($('input[name=check_out]').val());
                                    var b = new Date($('input[name=check_in]').val());
                                    a.setHours(0,0,0,0);
                                    b.setHours(0,0,0,0);
                                    var diff = a - b;
                                    var days = diff/ (1000 * 60 * 60 * 24);
                                    $('.booking-form .price-value').html('<p class="pt-3 h5"><small>Final Amount (Inclusive of all taxes) -</small> <strong>₹'+(rooms*respon.base_price).toFixed(2)+'/-</strong></p>');
                                }
                                else
                                {
                                    $('.booking-form .price-value').html('<p class="pt-3 h5"><small>Final Amount (Inclusive of all taxes) -</small> <strong>₹'+(rooms*respon.base_price).toFixed(2)+'/-</strong></p>');
                                }
                            }

                        } else {

                            var classMessage = '';

                            if (respon.status) {

                                classMessage = 'alert alert-success';

                            } else {

                                classMessage = 'alert alert-danger';

                            }

                            message.html('<div class="' + classMessage + '">' + respon.message + '</div>');

                        }

                        base.initFormAction();

                    }

                    loader.hide();

                }, 'json');

            }

        },



        initTimeSlots: function (t) {

            var base = this;

            if (t.hasClass('has-time')) {

                var data = {

                    startDate: $('[name="check_in"]', t).val(),

                    postID: t.data('id'),

                    postHashing: t.data('hashing'),

                    postType: t.data('post_type'),

                    posthour: $("input[name='time']:checked").val(),

                    _token: $('meta[name="csrf-token"]').attr('content')

                };

                $.post(t.data('action-time'), data, function (respon) {

                    if (typeof respon === 'object') {

                        t.closest('form').find('.booking-time-wrapper').html(respon.list_times);

                        base.initTimeDropdown();

                    } else {

                        console.log('Can not get data');

                    }

                }, 'json');

            }

        },



        initDatePicker: function () {

            var base = this;

            $('.booking-date.range').each(function (e) {

                var t = $(this),

                    checkIn = $('[name="check_in"]', t),

                    checkInRender = $('.booking-date__in .render', t),

                    checkOut = $('[name="check_out"]', t),

                    checkOutRender = $('.booking-date__out .render', t),

                    checkInOut = $('[name="check_in_out"]', t);



                var sameDate = true;

                if (typeof checkInOut.data('same-date') !== 'undefined') {

                    sameDate = checkInOut.data('same-date');

                }



                var options = {

                    autoApply: true,

                    customEnableLoader: true,

                    opens: "left",

                    minDate: new Date(),

                    sameDate: sameDate,

                    locale: {

                        format: "YYYY-MM-DD"

                    },

                };



                if (checkIn.val() !== '') {

                    options.startDate = new Date(checkIn.val());

                }

                if (checkOut.val() !== '') {

                    options.endDate = new Date(checkOut.val());

                }



                checkInOut.daterangepicker(options,

                    function (start, end, label) {

                        if (start !== null && end !== null) {

                            checkIn.val(start.format('YYYY-MM-DD'));

                            checkInRender.text(start.format(t.data('date-format')));

                            checkOut.val(end.format('YYYY-MM-DD'));

                            checkOutRender.text(end.format(t.data('date-format')));

                            checkInOut.trigger('daterangepicker_change', [start, end, label]);

                            base.initBookingForm();

                        }

                    });

                checkInRender.on('click', function () {

                    checkInOut.trigger('click');

                });

                checkOutRender.on('click', function () {

                    checkInOut.trigger('click');

                });



                checkInOut.on('show.daterangepicker', function (ev, picker) {

                    picker.container.find('.gmz-calendar-loader').show();

                    var startDate = picker.leftCalendar.calendar[0][0];

                    var endDate = picker.rightCalendar.calendar[5][6];

                    var events = [];

                    var data = {

                        startDate: startDate.format('YYYY-MM-DD'),

                        endDate: endDate.format('YYYY-MM-DD'),

                        postID: t.data('id'),

                        postHashing: t.data('hashing'),

                        postType: t.data('post_type'),

                        _token: $('meta[name="csrf-token"]').attr('content')

                    };

                    $.post(t.data('action'), data, function (respon) {

                        if (typeof respon === 'object') {

                            picker.updateCustomEvent(respon.events);

                        } else {

                            console.log('Can not get data');

                        }

                        picker.container.find('.gmz-calendar-loader').hide();

                    }, 'json');

                });

            });



            $('.booking-date.single').each(function (e) {

                var Toptions;

                var t = $(this),

                    checkIn = $('[name="check_in"]', t),

                    checkInRender = $('.booking-date__intime .render', t),

                    checkOut = $('[name="check_out"]', t),

                    checkOutRender = $('.booking-date__out .render', t),

                    checkInOut = $('[name="check_in_out_time"]', t),

                    checkTOut = $('[name="check_out_time"]', t);



                base.initTimeSlots(t);



                var options = {

                    autoApply: true,

                    customEnableLoader: true,

                    opens: "right",

                    minDate: new Date(),

                    singleDatePicker: true,

                    locale: {

                        format: "YYYY-MM-DD"

                    },

                };



                checkInOut.daterangepicker(options,

                    function (start, end, label) {

                        if (start !== null && end !== null) {

                            var endDate = new Date(end + 1*24*60*60*1000);

                            checkIn.val(start.format('YYYY-MM-DD'));

                            checkOut.val(endDate.getFullYear() + '-' + (endDate.getMonth() + 1) + '-' + endDate.getDate());

                            checkInRender.text(start.format(t.data('date-format')));

                            checkOutRender.text(endDate.getDate() + '/' + (endDate.getMonth()+1) + '/' + endDate.getFullYear());

                            checkInOut.trigger('daterangepicker_change', [start, end, label]);

                            Toptions = {

                                autoApply: true,
            
                                customEnableLoader: true,
            
                                opens: "right",
            
                                minDate: new Date(start + 1*24*60*60*1000),
            
                                singleDatePicker: true,
            
                                locale: {
            
                                    format: "YYYY-MM-DD"
            
                                },
            
                            };

                            checkTOut.daterangepicker(Toptions,

                                function (start, end, label) {
            
                                    if (start !== null && end !== null) {
        
                                        checkOut.val(end.format('YYYY-MM-DD'));
            
                                        checkOutRender.text(end.format(t.data('date-format')));
            
                                        checkInOut.trigger('daterangepicker_change', [start, end, label]);
            
                                        if($('input[name=time]:checked').val() == "24hr")
                                        {
                                            base.initBookingForm();
                                        }
            
                                    }
            
                                });

                                checkOutRender.on('click', function () {

                                    checkTOut.trigger('click');
                
                                });

                            if($('input[name=time]:checked').val() == "24hr")
                            {
                                base.initBookingForm();
                            }
                            else
                            {
                                base.initTimeSlots(t);
                            }

                        }

                    });

                checkInRender.on('click', function () {

                    checkInOut.trigger('click');

                });



                checkInOut.on('show.daterangepicker', function (ev, picker) {

                    picker.container.find('.gmz-calendar-loader').show();

                    var startDate = picker.leftCalendar.calendar[0][0];

                    var endDate = picker.leftCalendar.calendar[5][6];

                    var events = [];

                    var data = {

                        startDate: startDate.format('YYYY-MM-DD'),

                        endDate: endDate.format('YYYY-MM-DD'),

                        postID: t.data('id'),

                        postHashing: t.data('hashing'),

                        postType: t.data('post_type'),

                        _token: $('meta[name="csrf-token"]').attr('content'),

                        bookingType: (typeof t.data('booking_type')) ? t.data('booking_type') : ''

                    };

                    $.post(t.data('action'), data, function (respon) {

                        if (typeof respon === 'object') {

                            picker.updateCustomEvent(respon.events);

                        } else {

                            console.log('Can not get data');

                        }

                        picker.container.find('.gmz-calendar-loader').hide();

                    }, 'json');

                });

            });

        },



        initPopupIframe: function () {

            $.fn.magnificPopup && $('.gmz-iframe-popup').each(function () {

                var t = $(this);

                t.magnificPopup({

                    removalDelay: 500,

                    type: 'iframe',

                    mainClass: 'mfp-zoom-in',

                    fixedContentPos: true

                });

            })

        },



        initNiceScroll: function () {

            if ($('[data-plugin="nicescroll"]').length) {

                $('[data-plugin="nicescroll"]').niceScroll();

            }

        },



        preventDropdownClick: function () {

            $('.filter-item .dropdown-menu, .search-form__guest .dropdown-menu, .search-form__time .dropdown-menu').on("click.bs.dropdown", function (e) {

                e.stopPropagation();

            });

        },



        initCheckboxClicked: function () {

            $('.gmz-checkbox-wrapper .gmz-checkbox-item').on('click', function () {

                var t = $(this),

                    parent = t.closest('.gmz-checkbox-wrapper'),

                    hiddenInput = $('[type="hidden"]', parent);



                var data = parent.find('.gmz-checkbox-item').serializeArray();

                if (Object.keys(data).length > 0) {

                    var temp = [];

                    data.forEach(function (t2) {

                        temp.push(t2.value);

                    });

                    hiddenInput.val(temp.join(',')).change();

                } else {

                    hiddenInput.val('').change();

                }

            });

        },



        initDocumentReady: function () {

            var base = this;
            
            $('#advert').modal('show');

            $(document).ready(function () {

                if($("body").hasClass("single-service")) {
                    if ( $( "input[name=check_in]" ).length ) {
                        var checkin = new Date( $('input[name=check_in]').val().replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3") );
                        checkin.setDate(checkin.getDate() + 1);
                        $('input[name=check_out]').val(checkin.getFullYear()+"-"+(checkin.getMonth() + 1)+"-"+checkin.getDate());
                        base.initBookingForm();
                    }
                }

                base.initTimeDropdown();

                $('.gmz-page-loader').fadeOut();

                base.initNiceScroll();

                base.initMatchHeight();

                base.initGDPR();

                base.initBoxPopup();

                if ($('#room-render-wrapper').length) {

                    base.initSearchRoom();

                    $('#search-room').on('submit', function (e) {

                        e.preventDefault();

                        base.initSearchRoom();

                    });

                }

            });

        },

    };

    GmzBookingCustom.init();

    function ginitialize() {
        var input = document.getElementById('searchTextField');
        var options = {
            types: ['(cities)'],
            componentRestrictions: { country: "in" },
        };
        if(input != null)
        {
            var autocomplete = new google.maps.places.Autocomplete(input, options);
            google.maps.event.addListener(autocomplete, 'place_changed', function () {
                var place = autocomplete.getPlace();
                document.getElementById('lat').value = place.geometry.location.lat();
                document.getElementById('lng').value = place.geometry.location.lng();
                document.getElementById('city').value = place.address_components[1].long_name;
            });
        }
    }
    google.maps.event.addDomListener(window, 'load', ginitialize);

})(jQuery);