


<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="author" content=""><meta name="description" content="Compare quotes for motor coach hire and minibus rentals with driver in Europe. Chauffeured bus services for day trips, tours and group transfers."><meta name="robots" content="index,follow" /><link rel="preload" href="/static/favicon.ico" type="image/x-icon" as="image"><link rel="shortcut icon" href="/static/favicon.ico" type="image/x-icon"><link rel="preload" href="/static/fonts/SourceSansPro-Bold.ttf" as="font" type="font/woff2"
        crossorigin="anonymous"><link rel="preload" href="/static/fonts/SourceSansPro-Regular.ttf" as="font" type="font/woff2"
        crossorigin="anonymous"><link rel="preload" href="/static/fontawesome/webfonts/fa-solid-900.woff2" as="font" type="font/woff2"
        crossorigin="anonymous"><!--<meta name="viewport" content="width=1200, initial-scale=0.86, maximum-scale=3.0, minimum-scale=0.86">--><link rel="canonical" href="https://rentautobus.com/"><link hreflang="x-default" rel="alternate" href="https://rentautobus.com/"><title>Quotes Coach Hire &amp; Minibus Rentals Driver | Rent-Autobus</title><meta name="google-site-verification" content="Tqih8RdBqT-WlQ-MIN19Iu5vjczqFGOk6tqqJ6z8DlE" /><script>
        (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
            key: "AIzaSyCkiKwTrnjJRxxru5aaGIX5LTp8t0IPp9Y",
            v: "weekly",
            loading: 'async',
        });
    </script></head><link rel="preload" href="/static/css/homepage/homepage-critical.min.css" as="style"><link rel="stylesheet" href="/static/css/homepage/homepage-critical.min.css" as="style"><link rel="preload" href="/static/css/bootstrap-datetimepicker.min.css" as="style"><link rel="stylesheet" href="/static/css/bootstrap-datetimepicker.min.css" as="style"><meta name="google-site-verification" content="Tqih8RdBqT-WlQ-MIN19Iu5vjczqFGOk6tqqJ6z8DlE" /><body><header class="main-header flex"><div class="container bg-white flex justify-content-between align-items-center"><div class="hamburger_trigger d-block d-md-none"><nav class="navbar navbar-dark p-0"><button class="navbar-toggler ml-auto custom-toggler p-0"
                        data-toggle="collapse"
                        data-target="#hamburger_menu"
                        aria-controls="hamburger_menu"
                        aria-expanded="false"
                        aria-label="Toggle navigation"
                ><span class="navbar-toggler-icon p-0"></span></button><div class="hamburger_close-wrapper d-none"><a href="#" class="hamburger_close d-flex justify-content-center align-items-center"
                        data-toggle="collapse"
                        data-target="#hamburger_menu"
                        aria-expanded="false"
                        aria-controls="hamburger_menu"
                        style='width: 33px; height: 33px;'
                    ><!-- <i class="far fa-window-close main-lightblue t-33"></i> --><svg width="20" height="20" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.23814 7.00015L13.7435 1.49459C14.0855 1.15283 14.0855 0.598303 13.7435 0.256541C13.4014 -0.0855136 12.8475 -0.0855136 12.5055 0.256541L7.00015 5.7621L1.49453 0.256541C1.15249 -0.0855136 0.59857 -0.0855136 0.25653 0.256541C-0.08551 0.598303 -0.08551 1.15283 0.25653 1.49459L5.76215 7.00015L0.25653 12.5057C-0.08551 12.8475 -0.08551 13.402 0.25653 13.7438C0.42755 13.9145 0.651685 14 0.875529 14C1.09937 14 1.32351 13.9145 1.49453 13.7435L7.00015 8.2379L12.5055 13.7435C12.6765 13.9145 12.9006 14 13.1245 14C13.3483 14 13.5725 13.9145 13.7435 13.7435C14.0855 13.4017 14.0855 12.8472 13.7435 12.5054L8.23814 7.00015Z" fill="black"/></svg></a></div></nav></div><div class="logo"><a href="/"><img class="w-140px lazyload" src="/static/logo.png" alt="RentAutobus Logo"></a></div><div class="flex align-items-center"><div class="btns"><a class="btn btn-outline-primary mr-2 btn-sm border-width-1 text-uppercase" href="/register-minibus-coach-hire-company/item100" role="button">
                        Register your bus with driver rental company
                    </a><button id="dLabel" type="button" class="btn btn-primary text-uppercase disabled-sign-in sign-in-popup-btn" data-block="sign-in-popup.login" disabled>
                        Sign in
                    </button></div><img class="user-icon w-auto display-none lazyload sign-in-popup-btn" src="/static/fontawesome/svgs/solid/user-silhouette.svg" alt="user" data-block="sign-in-popup.login"><div class="header-flags dropdown"><button class="dropbtn align-items-center d-flex"><img class="lazyload" src="/static/flags/en.svg" alt="Flag"><i class="fas fa-angle-down"></i></button><div class="dropdown-content shadow"><a class="choose-flag" id="it" href="/it/"><img class="lazyload" src="/static/flags/it.svg" alt="it flag"></a><a class="choose-flag" id="es" href="/es/"><img class="lazyload" src="/static/flags/es.svg" alt="es flag"></a><a class="choose-flag" id="nl" href="/nl/"><img class="lazyload" src="/static/flags/nl.svg" alt="nl flag"></a><a class="choose-flag" id="de" href="/de/"><img class="lazyload" src="/static/flags/de.svg" alt="de flag"></a><a class="choose-flag" id="ca" href="/ca/"><img class="lazyload" src="/static/flags/ca.svg" alt="ca flag"></a></div></div></div></div></header><div class="collapse unauth_menu" id="hamburger_menu"><div class="flex flex-column align-items-start p-4"><div class="flex justify-content-between w-100"><a href="mailto:service@rentautobus.com" class="text-decoration-none ask-service "><button type="button" class="ask-service m-0 btn-white w-100 m-0 my-3 shadow-sm">Ask customer service</button></a></div></div><ul class="hamburger_subpages show collapse" id="mainPages"><li><a class="collapse-trigger nav-link pl-5 border-bottom" href="/" name="/">Home</a></li><li><a class="collapse-trigger nav-link pl-5 border-bottom" href="/get-transport-quote/item20" name="get-transport-quote">Get Bus With Driver Quotes!</a></li><li><a class="collapse-trigger nav-link pl-5 border-bottom" href="/countries/item46" name="countries">Countries</a></li><li><a class="collapse-trigger nav-link pl-5 border-bottom" href="/tips-info/item2092" name="tips-info">Tips &amp; Info</a></li><li><a class="collapse-trigger nav-link pl-5" href="/contact/item4" name="contact">Contact</a></li></ul></div><script defer>
    document.addEventListener("allScriptsLoaded", () => {
        if (window.matchMedia('screen and (max-width: 768px)').matches) {
            $(`.header-flags`).removeClass('dropdown').click(function () {
                open_popup('.flag-popup');
            });
            $(`.user-account`).attr('onclick', 'return false;');
        } else {
            $(`.header-flags`).addClass('dropdown').prop("onclick", null).off("click");
            $(`.user-account`).prop("onclick", null).off("click");
        }

        $(window).resize(function() {
            if (window.innerWidth <= 768) {
                $(`.header-flags`).removeClass('dropdown').click(function () {
                    open_popup('.flag-popup');
                });
                $(`.user-account`).attr('onclick', 'return false;');
            }
            else {
                $(`.header-flags`).addClass('dropdown').prop("onclick", null).off("click");
                $(`.user-account`).prop("onclick", null).off("click");
            }
        });

        let current_lang = 'en';
        $('.dropdown-content .choose-flag').click(function () {
            close_general_popup();
            let new_url = window.location.pathname;
            window.location = (current_lang === 'en') ? `/${this.id}${new_url}` : new_url.replace(current_lang, this.id);
            
        });

        $('.dropdown-menu').click(function(e) {
            e.stopPropagation();
        });

        $(`.dashboard_link, .logo_image_user`).on('click', () => {
            localStorage.setItem('jwt', getCookie('token'));
        });

        $(`#hamburger_menu .collapse-trigger`).on('click', function () {
            $('.collapse').removeClass('show');
        });

        $(`.hamburger_close`).on('click', function() {
            $(`.main-header`).removeClass('mob-main-header');
        });

        $(`.hamburger_trigger`).on('click', function() {
            if ($('body').find('.is-open').length !== 0) {
                $(`.is-open`).removeClass('is-open');
                $(`.main-header`).removeClass('mob-main-header');
            }
            $('.navbar-toggler').toggleClass('d-none');
            $('.hamburger_close-wrapper').toggleClass('d-none');
        });

        $(".sign-in-popup-btn").click(function () {
            open_popup(`.${$(this).attr("data-block")}`);
        });
    });
</script><style>
    .logo img {
        width: 115px;
        height: 41px;
    }

    #hamburger_menu {
        position: fixed;
        top: 0;
        left: 0;
        height: 100%;
        width: 100%;
        z-index: 2;
        overflow-y: scroll;
    }

    .auth_menu {
        top: 50px !important;
    }

    .auth_menu ul.navbar-nav {
        margin-bottom: 50px;
    }

    .unauth_menu {
        background-color: rgba(0, 0, 0, 0.5) !important;
    }

    .img-wrapper img {
        width: 50px;
    }

    .collapsing {
        -webkit-transition: none;
        transition: none;
        display: none;
    }

    .hamburger_subpages {
        margin-top:  20px ;
    }

    .navbar-dark .navbar-toggler-icon {
        background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E");
    }

    .custom-toggler.navbar-toggler {
        border: none;
    }
</style><div class="spinner d-none"><div class="spinner__cube cube--first"></div><div class="spinner__cube cube--second"></div><div class="spinner__cube cube--third"></div><div class="spinner__cube cube--fourth"></div></div><nav class="main-dropdown bg-primary"><ul class="nav container"><li class="nav-item"><a class="nav-link main main-page main-links" href="/"
                    name="/">Home</a></li><li class="nav-item"><a class="nav-link main main-links" href="/get-transport-quote/item20"
                    name="get-transport-quote">Get Bus With Driver Quotes!</a></li><li class="nav-item"><a class="nav-link main main-links" href="/countries/item46"
                    name="countries">Countries</a></li><li class="nav-item"><a class="nav-link main main-links" href="/tips-info/item2092"
                    name="tips-info">Tips &amp; Info</a></li><li class="nav-item"><a class="nav-link main main-links" href="/contact/item4"
                    name="contact">Contact</a></li></ul></nav><div class="bg-light d-none main-navigation" id="tab-list"><div class="container"><div class="flex list-content"></div></div></div><div class="container"><div class="flex bg-white"></div><a href="#" class="return-to-top square is-fixed rounded-circle" style="display: none"><i class="fa fa-arrow-up t-18 color-white position-is-relative"></i></a></div><div class="popup hide sign-in-popup login p-0"><div class="flex justify-content-between align-items-center p-3 main-blue-bg"><span class="text-white font-bold">Log In</span><!-- replace it with something like   --><button type="button" class="close add-file-close font-700 close_general_popup-btn" aria-label="Close"><span class="t-30 text-white" aria-hidden="true">&times;</span></button></div><form class="sign-in-form p-3"><div class="new-site-sign-in-message card mb-2 p-2 main-blue-bg" style="display: none;"><span class="font-bold text-white">We have updated our portal: please use the 'recover your password' link if you have problems logging in</span></div><div class="signing-options mx-3 d-flex flex-column align-self-md-center"><a href="/accounts/google/login/?process=login&amp;method=oauth2&amp;next=%2F"
                    class="social-link social-link--Google position-relative w-100 font-weight-bold text-center py-2 border border-dark text-uppercase btn "><img src="/static/google-logo.svg" class="social-logo position-absolute"
                        alt="Google logo">
                    Continue with Google</a><span class="d-block w-100 text-center social-line text-center my-3 font-weight-bold"><span>or continue with email</span></span></div><div class="form-group"><label class="font-bold" for="login_email">Email<span
                        class="text-danger">*</span></label><input type="email" id="login_email" class="form-control" name="email"
                    placeholder='Enter Email' required autocomplete="email"></div><div class="form-group input-container"><label class="font-bold" for="sign_password">
        Password
        
            <span class="text-danger">*</span></label><div class="position-relative "><input type="password"
               id="sign_password"
               class="form-control "
               placeholder='Enter password'
               autocomplete='off'
               required
        ><span class="fa fa-fw fa-eye-slash field-icon toggle-password"></span></div><span class="required-error red">Field is required</span></div><div class="bg-danger card sign-in-alert text-uppercase mb-2 p-2" style="display: none;"><span class="font-bold"></span></div><div class="custom-control custom-checkbox"><input type="checkbox" class="custom-control-input" id="defaultUnchecked" name="remember-me"><label class="custom-control-label" for="defaultUnchecked">Stay Logged In</label></div><input type="submit" class="btn btn-success btn-login w-100 mt-3" value="Log In" /><div class="dropdown-divider"></div><div class="flex additional-functions"><div class="col-lg-6 col-md-6 align-center"><p class="font-bold m-0">Forgot password?</p><a href="#" class="pointer main-darkblue open_password_recover-btn">Click here to recover</a></div><div class="col-lg-6 col-md-6 align-center"><p class="font-bold m-0">Help needed?</p><a href="mailto:service@rentautobus.com" class="main-darkblue">Contact customer service <span class="tooltip_icon tooltip_icon__inline"><?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
                                 width="40px" height="40px" viewBox="0 0 40 40" style="enable-background:new 0 0 40 40;"
                                 xml:space="preserve"><path d="M19.938,12.141c1.856,0,2.971,0.99,2.971,2.66c0,3.033-5.414,3.869-5.414,7.55c0,0.99,0.648,2.072,1.979,2.072
                                        c2.042,0,1.795-1.516,2.538-2.6c0.989-1.453,5.6-3,5.6-7.023c0-4.361-3.897-6.188-7.858-6.188c-3.773,0-7.24,2.692-7.24,5.725
                                        c0,1.237,0.929,1.887,2.012,1.887C17.525,16.225,15.979,12.141,19.938,12.141z"/><path d="M22.135,28.973c0-1.393-1.145-2.537-2.537-2.537s-2.537,1.146-2.537,2.537c0,1.393,1.145,2.537,2.537,2.537
                                        S22.135,30.366,22.135,28.973z"/><path d="M40.124,20.062C40.124,9,31.124,0,20.062,0S0,9,0,20.062s9,20.062,20.062,20.062S40.124,31.125,40.124,20.062z M2,20.062
                                        C2,10.103,10.103,2,20.062,2c9.959,0,18.062,8.103,18.062,18.062c0,9.959-8.103,18.062-18.062,18.062
                                        C10.103,38.124,2,30.021,2,20.062z"/></svg><span class="tooltip_message"></span></span></a></div></div><a class="btn btn-outline-primary w-100 mt-3 btn-sm border-width-1 text-uppercase table-on shadow-sm"
                href="/register-minibus-coach-hire-company/item100" role="button">
                Register your bus with driver rental company
            </a></form></div><div class="popup hide recover-popup p-0"><div class="flex justify-content-between align-items-center p-3 main-blue-bg"><span class="text-white font-bold">Recover password</span><button type="button" class="close add-file-close font-700 close_general_popup-btn" aria-label="Close"><span class="t-30 text-white" aria-hidden="true">&times;</span></button></div><div class="p-3"><div class="form-group"><label class="font-bold" for="recover_email">Email <span
                        class="text-danger">*</span></label><input id="recover_email" type="email" class="form-control" placeholder="Enter Email"
                    required></div><div class="recover-message card text-uppercase mb-2 p-2" style="display: none"><span class="font-bold status-message"></span></div><button class="btn btn-success btn-change-pass w-100 mt-2 recover_pass-btn" data-language="en">Recover</button><div class="dropdown-divider"></div><div class="flex additional-functions"><div class="col-lg-12 col-md-12 align-center"><button class="btn btn-outline-secondary w-100 open_popup-btn" data-block="sign-in-popup.login"><i
                            class="fas fa-arrow-left pr-1"></i>Back to login</button></div></div></div></div><div class="cookie-bar is-fixed color-white px-4 py-3 display-none"><h2 class="text-white"> Cookies</h2><p class="text-white">In order to give you a better service RentAutobus uses cookies. By continuing to browse the site you are agreeing to our use of cookies</p><button class="btn btn-success">Yes, I accept</button></div><div class="content-container h-100"><div class="banner position-is-relative"><link rel="preload" as="image" href="/../static/mainbanner.jpg"><div class="bg"></div><div class="container z-1"><div class="grid-main"><div class="title"><div class="banner-title color-white pt-4 t-33"><h1 class="banner-header font-bold text-white">
                    Compare and book!

                    </h1><p class="banner-par font-weight-normal text-white">Minibus rental prices, coach hire and bus with driver hire services!</p></div></div><div class="request"><div class="banner-form homepage-form"><h2>Receive quotes for mini-bus with driver rentals and coach hires. Compare price quotes and reviews for your day trip, tour or group transfers</h2><p>Start to receive competing quotes for chauffeured mini bus rentals and motor coach hires. Let bus rental companies bid on your bus trip, group transfer or multiple day bus tour. Compare price, quality and read client reviews. Book your bus online knowing that you have the best deal!</p><p class="text-dark font-bold t-14 banner-hide">Is this One-way, Return Trip or multiple stops/destinations?</p><div class="btn-group-request btn-group flex mb-3" role="group" aria-label="Basic example"><button type="button" id="return_trip"
            class="btn btn-light border-none p-3" value="return_trip" name="return_block"><span class="circle"></span> Return trip
    </button><button type="button" id="one_way"
            class="btn btn-light border-none p-3" value="one_way" name="main_block"><span class="circle"></span> One-way trip
    </button><button type="button" id="multi_trip"
            class="btn btn-light border-none p-3" value="multi_trip" name="main_block_multi"><span class="circle"></span> Multi-destination trip
    </button></div><script>
    const tripType = localStorage.getItem('click_btn');
    if (tripType) {
        document.querySelector('.btn-group-request').querySelectorAll('button').forEach((el) => {
            if (el.value === tripType) {
                el.classList.add('btn-group-active')
            }
        })
    }
</script><style>
    @media (max-width: 768px) {
        .btn-group-request {
            flex-direction:row !important;
            flex-wrap:nowrap;
        }

        .btn-group-request button {
        margin-bottom: 0 !important;
        border: 1px solid #e4e4e4;
        color: #636464 !important;
        background-color: #f8fafb !important;
        }

        .btn-group-request button.btn-group-active {
        border: none;
        color: #fff !important;
        background-color: #61c9f6 !important;
        }

        .btn-group-request button.btn-group-active::before {
        content: none !important;
        }

        .btn-group-request button:first-child {
        border-top-right-radius: 0 !important;
        border-bottom-right-radius: 0 !important;
        }

        .btn-group-request button:nth-child(2) {
        border-radius: 0 !important;
        }

        .btn-group-request button#one_way {
        border-left: 0 !important;
        border-right: 0 !important;
        }

        .btn-group-request button:last-child {
        border-top-left-radius: 0 !important;
        border-bottom-left-radius: 0 !important;
        }
}
</style><div class="block_trip-types"><div id="return_block" class="active-tab"><div class="grid-request main-mode created-mode align-items-end"><div class="grid-from"><label for="from" class="t-14 m-0">From *</label><gmp-place-autocomplete placeholder="enter streetname, place, country" id="from" name="from" required autocomplete="false" class="from autocomplete-added add-to-disabled"></gmp-place-autocomplete></div><div class="grid-dateA d-none"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_date">Departure date <span class="text-danger">*</span></label><input type="date" class="w-100 from_date departure form-control set_date-btn" aria-describedby="basic-addon1" id='from_date' value='' name="from_date" required onkeydown="return false"><span class="required-error red">Field is required</span></div></div><div class="grid-timeA d-none"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-hour">Departure time <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control from_time"
            placeholder='12:00'
            id='from_time-hour'
            value=''
            name="from_time-hour"
            required
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-checkerAF transfer flex align-items-start m-0"><label class="checkbox"><input class="set_transfer_checkbox-btn" type="checkbox"><i class="fa fa-check" aria-hidden="true"></i></label> I need tour or transfer
                <div class="toggle-transfer display-none"><div class="transfer-container"><div class="grid-selector select"><label class="t-14 transfer-label m-0 font-bold " for="from-select0"><i class="fas fa-plus transfer-plus pr-2"></i><i class="fas fa-minus transfer-minus pr-2 d-none"></i>Add local bus service</label><select name="from-select0" id="from-select0" class="form-control transfer-select d-none tour-select from-select-transfer"><option selected="selected" value="">Please select...</option></select></div><div class="grid-starttime starts"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-starts0">Starts <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 from-time from-starts-time"
            placeholder='00:00'
            id='from_time-starts0'
            value=''
            name="from_time-starts0"
            
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-endtime ends"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-ends0">Ends <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 end-time from-end-time"
            placeholder='01:00'
            id='from_time-ends0'
            value=''
            name="from_time-ends0"
            disabled
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div></div></div></div><div class="grid-checkerBF transfer flex align-items-start m-0"><label class="checkbox"><input class="set_transfer_checkbox-btn" type="checkbox"><i class="fa fa-check" aria-hidden="true"></i></label> I need tour or transfer
                <div class="toggle-transfer display-none"><div class="transfer-container"><div class="grid-selector select"><label class="t-14 transfer-label m-0 font-bold " for="to-select0"><i class="fas fa-plus transfer-plus pr-2"></i><i class="fas fa-minus transfer-minus pr-2 d-none"></i>Add local bus service</label><select name="to-select0" id="to-select0" class="form-control transfer-select d-none tour-select to-select-transfer"><option selected="selected" value="">Please select...</option></select></div><div class="grid-starttime starts"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="to_time-starts0">Starts <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 from-time to-starts-time"
            placeholder='00:00'
            id='to_time-starts0'
            value=''
            name="to_time-starts0"
            
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-endtime ends"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="to_time-ends0">Ends <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 end-time to-end-time"
            placeholder='01:00'
            id='to_time-ends0'
            value=''
            name="to_time-ends0"
            disabled
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div></div></div></div><div class="grid-to"><label for="to" class="t-14 m-0">To *</label><gmp-place-autocomplete placeholder="enter streetname, place, country" id="to" name="to" required class="to autocomplete-added"></gmp-place-autocomplete></div><div class="grid-dateB d-none"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="to_date">Return date <span class="text-danger">*</span></label><input type="date" class="w-100 to_date departure form-control set_date-btn" aria-describedby="basic-addon1" id='to_date' value='' name="to_date" required onkeydown="return false"><span class="required-error red">Field is required</span></div></div><div class="grid-timeB d-none"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="to_time">Return time <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control to_time"
            placeholder='12:00'
            id='to_time'
            value=''
            name="to_time"
            required
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-checkerAT transfer flex align-items-start m-0"><label class="checkbox"><input class="set_transfer_checkbox-btn" type="checkbox"><i class="fa fa-check" aria-hidden="true"></i></label> I need tour or transfer
                <div class="toggle-transfer display-none"><div class="transfer-container"><div class="grid-selector select"><label class="t-14 transfer-label m-0 font-bold " for="from-select1"><i class="fas fa-plus transfer-plus pr-2"></i><i class="fas fa-minus transfer-minus pr-2 d-none"></i>Add local bus service</label><select name="from-select1" id="from-select1" class="form-control transfer-select d-none tour-select from-select-transfer-second"><option selected="selected" value="">Please select...</option></select></div><div class="grid-starttime starts"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-starts1">Starts <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 from-time from-starts-time-second"
            placeholder='00:00'
            id='from_time-starts1'
            value=''
            name="from_time-starts1"
            
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-endtime ends"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-ends1">Ends <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 end-time from-end-time-second"
            placeholder='01:00'
            id='from_time-ends1'
            value=''
            name="from_time-starts1"
            disabled
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div></div></div></div><div class="grid-checkerBT transfer flex align-items-start m-0"><label class="checkbox"><input class="set_transfer_checkbox-btn" type="checkbox"><i class="fa fa-check" aria-hidden="true"></i></label> I need tour or transfer
                <div class="toggle-transfer display-none"><div class="transfer-container"><div class="grid-selector select"><label class="t-14 transfer-label m-0 font-bold " for="to-select1"><i class="fas fa-plus transfer-plus pr-2"></i><i class="fas fa-minus transfer-minus pr-2 d-none"></i>Add local bus service</label><select name="to-select1" id="to-select1" class="form-control transfer-select d-none tour-select to-select-transfer-second"><option selected="selected" value="">Please select...</option></select></div><div class="grid-starttime starts"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="to_time-starts1">Starts <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 from-time to-starts-time-second"
            placeholder='00:00'
            id='to_time-starts1'
            value=''
            name="to_time-starts1"
            
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-endtime ends"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="to_time-ends1">Ends <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 end-time to-end-time-second"
            placeholder='01:00'
            id='to_time-ends1'
            value=''
            name="to_time-ends1"
            disabled
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div></div></div></div></div></div><div id="main_block" style="display: none"><div class="grid-request main-mode created-mode align-items-end"><div class="grid-from"><label for="from" class="t-14 m-0">From *</label><gmp-place-autocomplete placeholder="enter streetname, place, country" id="from" name="from" required autocomplete="false" class="from autocomplete-added add-to-disabled"></gmp-place-autocomplete></div><div class="grid-dateA d-none"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_dateS">Departure date <span class="text-danger">*</span></label><input type="date" class="w-100 from_date departure form-control set_date-btn" aria-describedby="basic-addon1" id='from_dateS' value='' name="from_date" required onkeydown="return false"><span class="required-error red">Field is required</span></div></div><div class="grid-timeA d-none"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-hourS">Departure time <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control from_time"
            placeholder='12:00'
            id='from_time-hourS'
            value=''
            name="from_time-hour"
            required
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-checkerAF transfer flex align-items-start m-0"><label class="checkbox"><input class="set_transfer_checkbox-btn" type="checkbox"><i class="fa fa-check" aria-hidden="true"></i></label> I need tour or transfer
                <div class="toggle-transfer display-none"><div class="transfer-container"><div class="grid-selector select"><label class="t-14 transfer-label m-0 font-bold " for="from-selectS"><i class="fas fa-plus transfer-plus pr-2"></i><i class="fas fa-minus transfer-minus pr-2 d-none"></i>Add local bus service</label><select name="from-selectS" id="from-selectS" class="form-control transfer-select d-none tour-select from-select-transfer"><option selected="selected" value="">Please select...</option></select></div><div class="grid-starttime starts"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-startsS">Starts <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 from-time from-starts-time"
            placeholder='00:00'
            id='from_time-startsS'
            value=''
            name="from_time-startsS"
            
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-endtime ends"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-endsS">Ends <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 end-time from-end-time"
            placeholder='01:00'
            id='from_time-endsS'
            value=''
            name="from_time-endsS"
            disabled
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div></div></div></div><div class="grid-to"><label for="to" class="t-14 m-0">To *</label><gmp-place-autocomplete placeholder="enter streetname, place, country" id="to" name="to" required class="to autocomplete-added"></gmp-place-autocomplete></div><div class="grid-checkerAT transfer flex align-items-start m-0"><label class="checkbox"><input class="set_transfer_checkbox-btn" type="checkbox"><i class="fa fa-check" aria-hidden="true"></i></label> I need tour or transfer
                <div class="toggle-transfer display-none"><div class="transfer-container"><div class="grid-selector select"><label class="t-14 transfer-label m-0 font-bold " for="to-selectS"><i class="fas fa-plus transfer-plus pr-2"></i><i class="fas fa-minus transfer-minus pr-2 d-none"></i>Add local bus service</label><select name="to-selectS" id="to-selectS" class="form-control transfer-select d-none tour-select to-select-transfer"><option selected="selected" value="">Please select...</option></select></div><div class="grid-starttime starts"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="to_time-startsS">Starts <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 from-time to-starts-time"
            placeholder='00:00'
            id='to_time-startsS'
            value=''
            name="to_time-startsS"
            
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-endtime ends"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="to_time-endsS">Ends <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 end-time to-end-time"
            placeholder='01:00'
            id='to_time-endsS'
            value=''
            name="to_time-endsS"
            disabled
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div></div></div></div></div></div><div id="main_block_multi" style="display: none"><div id="trip0" class='main-trip form-multi main-mode created-mode' index="0"><div class="grid-request"><div class="grid-from"><label for="fromT" class="t-14 m-0">From *</label><gmp-place-autocomplete placeholder="enter streetname, place, country" id="fromT" name="from" required autocomplete="false" class="from autocomplete-added add-to-disabled"></gmp-place-autocomplete></div><div class="grid-dateA d-none"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_dateT">Departure date <span class="text-danger">*</span></label><input type="date" class="w-100 from_date-multi departure form-control set_date-btn" aria-describedby="basic-addon1" id='from_dateT' value='' name="from_date" required onkeydown="return false"><span class="required-error red">Field is required</span></div></div><div class="grid-timeA d-none"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-hourT">Departure time <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control from_time-multi"
            placeholder='12:00'
            id='from_time-hourT'
            value=''
            name="from_time-hour"
            required
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-to"><label for="toT" class="t-14 m-0">To *</label><gmp-place-autocomplete placeholder="enter streetname, place, country" id="toT" name="to" required class="to autocomplete-added"></gmp-place-autocomplete></div></div></div></div><div class="text-center"><button class="add-destination add-destination_item20 t-14 font-bold text-uppercase pointer border-box-sizing color-white-imp col-md-4 col-12 p-2 add_part-btn" style="display: none" index="0">+ Add destination</button></div></div><script defer>
    document.addEventListener("allScriptsLoaded", () => {
            window.add_item20_block = (id, index, last_trip = '', last_trip_second = '', date = '', time = '', transfers = '', parent_is, with_transfers, info_num) => {
                return `<div id="trip${id}" class="item20_block py-3 main-trip form-multi created-mode mb-4 border-box-sizing" index="${index}"><div class="align-items-baseline flex pt-2 pt-sm-0 flex-column label-select-container"><div class="col-12"><label for="from${id}" class="t-14 m-0">From</label><gmp-place-autocomplete placeholder="enter streetname, place, country" id="from${id}" name="from" required readonly class="from-multi autocomplete-added"></gmp-place-autocomplete></div><label class="t-14 transfer-label-c m-0 font-bold text-right w-100 pr-3 pb-2" for='from-select${id}' style="color: #1c607d; font-size: 12px"><i class="fas fa-plus transfer-plus pr-2"></i><i class="fas fa-minus transfer-minus pr-2 d-none"></i>Add local bus service</label><div class="col-sm-6 col-8 align-self-end"><div class="transfer-container d-none"><div class="grid-selector select"><label class="t-14 transfer-label m-0 font-bold d-none" for="from-select${id}"><i class="fas fa-plus transfer-plus pr-2"></i><i class="fas fa-minus transfer-minus pr-2 d-none"></i>Add local bus service</label><select name="" id="from-select${id}" class="form-control transfer-select d-none tour-select from-select-transfer"><option selected="selected" value="">Please select...</option></select></div><div class="grid-starttime starts d-none"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-starts${id}">Starts <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 from-time from-starts-time"
            placeholder='00:00'
            id='from_time-starts${id}'
            value=''
            name=""
            
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-endtime ends d-none"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-ends${id}">Ends <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 end-time from-end-time"
            placeholder='01:00'
            id='from_time-ends${id}'
            value=''
            name=""
            disabled
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div></div></div></div><div class="flex align-items-baseline flex-row flex-nowrap"><div class="col-md-4 col-sm-6 pr-1 pr-sm-3"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_date${id}">Departure date <span class="text-danger">*</span></label><input type="date" class="w-100 from_date-multi departure form-control set_date-btn" aria-describedby="basic-addon1" id='from_date${id}' value='${date}' name="" required onkeydown="return false"><span class="required-error red">Field is required</span></div></div><div class="col-md-4 col-sm-6 pl-1 pl-sm-3"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-hour${id}">Departure time <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control from_time-multi"
            placeholder='12:00'
            id='from_time-hour${id}'
            value='${time}'
            name=""
            required
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div></div><div class="flex align-items-baseline flex-column mt-5 mt-md-4 label-select-container"><div class="col-12"><label for="to${id}" class="t-14 m-0">To</label><gmp-place-autocomplete placeholder="enter streetname, place, country" id="to${id}" name="to" required class="to-multi autocomplete-added"></gmp-place-autocomplete></div><label class="t-14 transfer-label-c m-0 font-bold text-right w-100 pr-3 pb-2" for='to-select${id}' style="color: #1c607d; font-size: 12px"><i class="fas fa-plus transfer-plus pr-2"></i><i class="fas fa-minus transfer-minus pr-2 d-none"></i>Add local bus service</label><div class="col-sm-6 col-8 align-self-end"><div class="transfer-container d-none"><div class="grid-selector select"><label class="t-14 transfer-label m-0 font-bold d-none" for="to-select${id}"><i class="fas fa-plus transfer-plus pr-2"></i><i class="fas fa-minus transfer-minus pr-2 d-none"></i>Add local bus service</label><select name="" id="to-select${id}" class="form-control transfer-select d-none tour-select to-select-transfer"><option selected="selected" value="">Please select...</option></select></div><div class="grid-starttime starts d-none"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="to_time-starts${id}">Starts <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 from-time to-starts-time"
            placeholder='00:00'
            id='to_time-starts${id}'
            value=''
            name=""
            
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-endtime ends d-none"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="to_time-ends${id}">Ends <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control col-8 end-time to-end-time"
            placeholder='01:00'
            id='to_time-ends${id}'
            value=''
            name=""
            disabled
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div></div></div></div><div class="justify-content-center add-block d-none"><button type="button" id="button_off"
                            class="btn"
                            index='${index}'
                            onclick="add_block_plus(this, '#main_block_multi', ${with_transfers}, ${info_num}, true);"
                    ><i class="fas fa-plus tablet-none"></i><span class="text-uppercase text-white tablet-on">Add route</span></button></div><div class="delete-main d-none"><button class="btn btn-outline-danger position_corner position-is-absolute pointer" id="delete_step_${id}" onclick="delete_step(${id})"><i class="far fa-trash-alt"></i></button></div></div>`;
            }

            setTimeout(() => {
                enableAutocompleteMapFields(`.autocomplete-added`);
            }, 10);

            

            
            

            window.item20_select_on_change = () => {
                $(`.item20_block select`).on('change', function () {
                    item20_select_change_trigger(this);
                });
            }

            function item20_select_change_trigger(el) {
                let chosen_option = $(el).find(`option:selected`).val();
                let parent = $(el).parents(`.transfer-container`);

                if (chosen_option) {
                    if (!($(parent).hasClass('d-none'))) {
                        $(parent).addClass('mb-3');
                        $(parent).find('.starts, .ends').removeClass('d-none');
                    }
                } else {
                    if (!($(parent).hasClass('d-none'))) {
                        $(parent).removeClass('mb-3');
                        $(parent).find('.starts').addClass('d-none').find('.from-time').val("");
                        $(parent).find('.ends').addClass('d-none').find('.end-time').val("");
                    }
                }
            }

            item20_select_on_change();

            let input_type_text = $('input[class*=autocomplete-added]');

            calculation_transfers_time();

            window.copyProperties = (from, to) => {
                const fromElement = from.jquery ? from[0] : from;
                const toElement = to.jquery ? to[0] : to;

                if (!fromElement || !toElement) return;

                if (fromElement.dataset) {
                    Object.keys(fromElement.dataset).forEach(key => {
                        const value = fromElement.dataset[key];
                        if (value !== undefined) {
                            const attrName = `data-${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;
                            toElement.setAttribute(attrName, value);
                        }
                    });
                }

                const importantAttrs = [
                    'data-lat', 'data-lng', 'data-country-iso',
                    'data-address', 'data-place-name', 'data-place-id'
                ];

                importantAttrs.forEach(attrName => {
                    const value = fromElement.getAttribute(attrName);
                    if (value) {
                        toElement.setAttribute(attrName, value);
                    }
                });

                if (toElement.tagName === 'GMP-PLACE-AUTOCOMPLETE' && fromElement.lat && fromElement.lng) {
                    try {
                        toElement.locationBias = {
                            center: {
                                lat: parseFloat(fromElement.dataset.lat || fromElement.getAttribute('data-lat')),
                                lng: parseFloat(fromElement.dataset.lng || fromElement.getAttribute('data-lng'))
                            },
                            radius: 50000
                        };
                    } catch (e) {
                    }
                }

                if (fromElement.value && toElement.tagName == 'GMP-PLACE-AUTOCOMPLETE') {
                    toElement.value = fromElement.value;
                }
            };

            input_type_text.on('input', function () {
                if (get_trip_type() === 1) {
                    $('#from_disabled').val($('#to').val());
                    $('#to_disabled').val($('#from').val());
                }
            });

            function get_type() {
                if ($('#return_trip').hasClass('btn-group-active')) return 1;
                else if ($('#one_way').hasClass('btn-group-active')) return 2;
                else if ($('#multi_trip').hasClass('btn-group-active')) return 3;
            }

            function checkChanges() {
                let parameters = [];

                let point_1 = $('#from').val();
                let point_2 = $('#to').val();
                let from_date = $('#from_date').val();
                let from_time = $('#from_time-hour').val();

                if (get_type() === 1) {
                    let routesLength = 2;
                    for (let index = 0; index < routesLength; index++) {
                        if (notEmpty($(`#from-select${index}`).val())) parameters.push($(`#from_time-starts${index}`).val());
                        if (notEmpty($(`#to-select${index}`).val())) parameters.push($(`#to_time-starts${index}`).val());
                    }
                    let to_date = $('#to_date').val();
                    let to_time = $('#to_time').val();

                    parameters.push(point_1, point_2, from_date, to_date, from_time, to_time);

                } else if (get_type() === 2) {
                    let from_select = $('#from-select').val();
                    let to_select = $('#to-select').val();
                    let from_time_starts = $('#from_time-starts').val();
                    let to_time_starts = $('#to_time-starts').val();
                    if (notEmpty(from_select)) parameters.push(from_time_starts);
                    if (notEmpty(to_select)) parameters.push(to_time_starts);
                    parameters.push(point_1, point_2, from_date, from_time);
                } else {
                    let routesLength = $('.form-multi').length;
                    if (notEmpty($('#to-select00').val())) parameters.push($('to_time-starts00').val());
                    for (let i = 0; i < routesLength; i++) {
                        const formIndex = $(`.form-multi[index*=${i}]`);
                        let index = formIndex.attr('id')?.replace('trip', '');
                        if (notEmpty($(`#from-select${index}`).val())) parameters.push($(`#from_time-starts${index}`).val());
                        if (notEmpty($(`#to-select${index}`).val())) parameters.push($(`#to_time-starts${index}`).val());
                        parameters.push($(`#from${index}`).val(), $(`#to${index}`).val(), $(`#from_date${index}`).val(),
                            $(`#from_time-hour${index}`).val());
                    }
                }

                localStorage.setItem('type', get_type());

                function notEmpty(element) {
                    return element !== "";
                }

                return parameters.every(notEmpty);
            }

            function get_quotes() {
                
                if (checkChanges()) {
                    $(`.next-page`).attr('disabled', true);
                    const trip_data = JSON.parse(localStorage.getItem('rentautobus_form_data'));
                    const click_btn = localStorage.getItem('click_btn');
                    if (click_btn === 'multi_trip') {
                        !trip_data[trip_data.length - 1].point_2 ? trip_data.pop() : trip_data;
                    } else if (click_btn === 'one_way') {
                        trip_data.length > 1 ? trip_data.splice(1) : trip_data;
                    } else {
                        trip_data.length > 2 ? trip_data.splice(2) : trip_data;
                    }
                    if (document.querySelector('#passenger')) {
                        localStorage.setItem('passenger', document.querySelector('#passenger').value);
                    }
                    localStorage.setItem('rentautobus_form_data', JSON.stringify(trip_data));
                    window.location.href = `/item22`;
                } else {
                    validate_require();
                }
            }

            function delete_step(id) {
                $(`#trip${id}`).remove();
                set_first_trash(`.form-multi`, `.delete-main`);
                rebuild_indexes_after_delete(`.form-multi`);
            }

            function duplicate_run_return_trip() {
                $('#from').val('');
                $('#to').val('');
                $('#from_local').val('');
                $('#to_local').val('');
                $('#from_date').val('');
                $('#from_time-hour').val('');

                $('#passengers').val('');

                $('#from_disabled').val('');
                $('#to_disabled').val('');
                $('#from_local_return').val('');
                $('#to_local_return').val('');
                $('#to_date').val('');
                $('#to_time').val('');
            }

            function duplicate_run_one_way() {
                $('#from').val('');
                $('#to').val('');
                $('#from_local').val('');
                $('#to_local').val('');
                $('#from_date').val('');
                $('#from_time-hour').val('');

                $('#passengers').val('');
            }

            function duplicate_run_multi_way() {
                $('#from').val('');
                $('#to').val('');
                $('#from_local').val('');
                $('#to_local').val('');
                $('#from_date').val('');
                $('#from_time-hour').val('');

                $('#passengers').val('');
                let c = 0;
                
            }

            function local_info() {
                let click = localStorage.getItem("click_btn");
                $(`#${click}`).click();
                let local_data = [];
                const trip_data = JSON.parse(localStorage.getItem('rentautobus_form_data')) || [{}];

                if (click === 'multi_trip') {
                    trip_data.forEach((trip, index) => {
                        local_data.push(
                            {
                                [`from${index}`]: trip.point_1,
                                [`to${index}`]: trip.point_2,
                                [`from_date${index}`]: trip.date,
                                [`from_time-hour${index}`]: trip.time,
                                [`from-select${index}`]: trip.point_1_loco,
                                [`from_time-starts${index}`]: trip.point_1_loco_time,
                                [`from_time-ends${index}`]: trip.point_1_loco_time_end,
                                [`to-select${index}`]: trip.point_2_loco,
                                [`to_time-starts${index}`]: trip.point_2_loco_time,
                                [`to_time-ends${index}`]: trip.point_2_loco_time_end,
                                [`from_lat${index}`]: trip.point_1_lat,
                                [`from_lng${index}`]: trip.point_1_lng,
                                [`from_iso${index}`]: trip.point_1_country_iso,
                                [`to_lat${index}`]: trip.point_2_lat,
                                [`to_lng${index}`]: trip.point_2_lng,
                                [`to_iso${index}`]: trip.point_2_country_iso,
                            }
                        );
                    });
                } else if (click === 'return_trip') {
                    local_data.push(
                        {
                            "from": trip_data[0] && trip_data[0].point_1,
                            "to": trip_data[0] && trip_data[0].point_2,
                            "from_date": trip_data[0] && trip_data[0].date,
                            "to_date": trip_data[1] && trip_data[1].date,
                            "from_time-hour": trip_data[0] && trip_data[0].time,
                            "to_time": trip_data[1] && trip_data[1].time,
                            "from-select0": trip_data[0] && trip_data[0].point_1_loco,
                            "from_time-starts0": trip_data[0] && trip_data[0].point_1_loco_time,
                            "from_time-ends0": trip_data[0] && trip_data[0].point_1_loco_time_end,
                            "to-select0": trip_data[0] && trip_data[0].point_2_loco,
                            "to_time-starts0": trip_data[0] && trip_data[0].point_2_loco_time,
                            "to_time-ends0": trip_data[0] && trip_data[0].point_2_loco_time_end,
                            "from-select1": trip_data[1] && trip_data[1].point_1_loco,
                            "from_time-starts1": trip_data[1] && trip_data[1].point_1_loco_time,
                            "from_time-ends1": trip_data[1] && trip_data[1].point_1_loco_time_end,
                            "to-select1": trip_data[1] && trip_data[1].point_2_loco,
                            "to_time-starts1": trip_data[1] && trip_data[1].point_2_loco_time,
                            "to_time-ends1": trip_data[1] && trip_data[1].point_2_loco_time_end,
                            "from_lat": trip_data[0] && trip_data[0].point_1_lat,
                            "from_lng": trip_data[0] && trip_data[0].point_1_lng,
                            "from_iso": trip_data[0] && trip_data[0].point_1_country_iso,
                            "to_lat": trip_data[0] && trip_data[0].point_2_lat,
                            "to_lng": trip_data[0] && trip_data[0].point_2_lng,
                            "to_iso": trip_data[0] && trip_data[0].point_2_country_iso,
                        }
                    );

                    $(`.item20_block.d-none`).removeClass('d-none');
                    $(`.from-disabled`).val(localStorage.getItem('to'));
                    $(`.to-disabled`).val(localStorage.getItem('from'));
                } else if (click === 'one_way') {
                    local_data.push(
                        {
                            "from": trip_data[0] && trip_data[0].point_1,
                            "to": trip_data[0] && trip_data[0].point_2,
                            "from_date": trip_data[0] && trip_data[0].date,
                            "from_time-hour": trip_data[0] && trip_data[0].time,
                            "from-select": trip_data[0] && trip_data[0].point_1_loco,
                            "from_time-starts": trip_data[0] && trip_data[0].point_1_loco_time,
                            "from_time-ends": trip_data[0] && trip_data[0].point_1_loco_time_end,
                            "to-select": trip_data[0] && trip_data[0].point_2_loco,
                            "to_time-starts": trip_data[0] && trip_data[0].point_2_loco_time,
                            "to_time-ends": trip_data[0] && trip_data[0].point_2_loco_time_end,
                            "from_lat": trip_data[0] && trip_data[0].point_1_lat,
                            "from_lng": trip_data[0] && trip_data[0].point_1_lng,
                            "from_iso": trip_data[0] && trip_data[0].point_1_country_iso,
                            "to_lat": trip_data[0] && trip_data[0].point_2_lat,
                            "to_lng": trip_data[0] && trip_data[0].point_2_lng,
                            "to_iso": trip_data[0] && trip_data[0].point_2_country_iso,
                        }
                    );
                };

                set_data_from_local(local_data, click);
            }

            window.searchTripByIndex = (rows, index) => {
                return $(".form-multi").filter(function () {
                    return $(this).attr("index") === index;
                }).get(0);
            }

            $(".set_transfer_checkbox-btn").click(function () {
                set_transfer_checkbox($(this));
            });

            $(".add_block_plus-btn").click(function () {
                add_block_plus($(this), '#main_block_multi', false, 1);
            });

            $("#delete_step_0").click(function () {
                delete_step(0);
            });

            $(document).on('keypress', function (e) {
                if (e.which === 13 && !$(`.is-open`).length) {
                    get_quotes();
                }
            });

            $(document).on("click", ".get_quotes-btn", function () {
                if (!window.changedInput) {
                    get_quotes()
                } else {
                    console.log('You didn\'t selected proper data')
                }
            });

            const from = localStorage.getItem('from');
            const to = localStorage.getItem('to');

            const display_date_time = (dateClass, timeClass) => {
                $(dateClass).removeClass('d-none');
                $(timeClass).removeClass('d-none');
            }

            const manageDateAppearance = (inputId, date, time, variant) => {
                $('.next-page').on('click', function () {
                    display_date_time(date, time);
                });
                const trip_data = JSON.parse(localStorage.getItem('rentautobus_form_data'));

                if (trip_data) {
                    display_date_time(date, time);
                };

                if (variant === 'from') {
                    display_date_time(date, time);
                } else if (variant === 'to') {
                    display_date_time(date, time);
                } else {
                    $(inputId).on('change', function () {
                        if ($(inputId).val() !== '') {
                            display_date_time(date, time);
                        }
                    });
                }
            };

            manageDateAppearance($('#from'), $('.grid-dateA'), $('.grid-timeA'), 'from');
            manageDateAppearance($('#fromR'), $('.grid-dateA'), $('.grid-timeA'), 'from');
            manageDateAppearance($('#fromS'), $('.grid-dateA'), $('.grid-timeA'), 'from');
            manageDateAppearance($('#fromT'), $('.grid-dateA'), $('.grid-timeA'), 'from');
            manageDateAppearance($('#from0'), $('.grid-dateA'), $('.grid-timeA'), 'from');

            manageDateAppearance($('#to'), $('.grid-dateB'), $('.grid-timeB'), 'to');
            manageDateAppearance($('#toR'), $('.grid-dateB'), $('.grid-timeB'), 'to');
        })
</script><div class="aligne-right mt-3 mt-sm-0"><button class="next-page btn btn-success w-100 p-3 went_to_quote_creation-btn">Get quotes for rental and transport! ›</button></div></div></div><div class="grade homepage-grade"><div class="home-structure flex justify-content-around mt-2"><div class='structure-wrapper col-md-auto col-12 flex flex-column'><div class="flex row"><div class="rating m-0 margin-auto rating-width--big" data-rate-value="4,6"></div><span class="pl-1 bold-text t-33 text-white">4,6/5</span></div><span class="text-white">Average rating</span></div><div class='structure-wrapper col-auto flex'><div class="rating-img flex flex-column p-1"><span class="font-bold h1 m-0 text-white">2500+</span><span class="text-white">Customers reviews</span></div></div></div><script defer>
    document.addEventListener("allScriptsLoaded", () => {
        let options = set_rating_options(true);

        $(".home-structure .rating").rate(options);
    });
</script></div></div></div></div><div class="main-page-content homepage-content container py-3"><div class="row mob-reverse"><div class="col-lg-6 col-md-6"><h2><p>Bus, coach hire and minibus with driver rentals in Europe</p></h2><p>The travel agent’s favorite starting point for all minibus with driver rentals and chauffeured coach hire comparisons&nbsp;and bookings in European countries like Netherlands, Belgium, France, Spain, Portugal and Italy! Receive&nbsp;competing price quotes and compare quality for bus with driver rentals and motor coach hires. No need to&nbsp;e-mail or phone. Just <a href="/get-transport-quote/item20?step=travelPlan">start by filling out this bus rental quote form</a>.</p></div><div class="col-lg-6 col-md-6"><h2>Why use RentAutobus?</h2><ul><li class="flex"><i class="fas fa-check-circle"></i>Get multiple bus with driver and coach hire quotes for your trip!</li><li class="flex"><i class="fas fa-check-circle"></i>100% Obligation free, no cost and anonymous</li><li class="flex"><i class="fas fa-check-circle"></i>Compare and chose the best price, bus and driver service</li><li class="flex"><i class="fas fa-check-circle"></i>Personal advice and assistance in booking your minibus and coach hire</li><li class="flex"><i class="fas fa-check-circle"></i>Free translations and support in abroad dealings with minibus and coach hire operators</li><li class="flex"><i class="fas fa-check-circle"></i>Manage your bus rental requests and reservations online</li><li class="flex"><i class="fas fa-check-circle"></i>We check all client reviews and only publish those which were booked via our site</li><li class="flex"><i class="fas fa-check-circle"></i>We speak your language</li><li class="flex"><i class="fas fa-check-circle"></i>Save lots of time!</li></ul></div></div></div><div class="about homepage-about mb-3 border-r-3px position-is-relative"><div class="bg-about bg-dark position-is-absolute"></div><div class="flex col-12 align-center"><p class="t-16 text-white mt-5 w-100">Customers about RentAutobus service</p><h2 class="mx-2 mb-3">“I appreciate you and any service for coach bus in the future I will
book with you once again thank you for your attitude and best
service.”</h2><!-- <div class="col-12 links"><a href="#" style="color: #fff;font-size: 16px;">View travel plan »</a></div> --></div></div><div class="review container mb-3"><h3>Latest client review</h3><div class="row"><div class="col-lg-4 col-md-6 my-2"><div class="block-review center border-box-sizing border-r-3px p-3 shadow-sm bg-white"><div class="rating margin-auto" data-rate-value="5,0"></div><h4>TUDEBUS SLU</h4><p class="text-secondary-dark"><p class="secondary">
                                        2026/04/05  Duña Halout  None
                                    </p></p><p>Antonio es maravilloso y la empresa de 10.
El servicio fue excelente,nos proporcionó todo súper fácil y siempre a estado dispuesto ayudarnos y trasladarnos sin problema alguno. Puntualidad excepcional sin duda encantadisimos con el servicio de Antonio y empresa.
El vehículo cómodisimo y con aire,nevera,usb ideal para cualquier tipo de viaje.
El traslado tranquilo y sin incidente alguno al contrario nos asesoró muy bien.
100% lo tecomendamos y sin duda haremos uso más veces con total seguridad.</p><p>Puntualidad máxima.
Profesionalidad absoluta
Conducción tranquila 
Ambiente maravilloso</p></div></div><div class="col-lg-4 col-md-6 my-2"><div class="block-review center border-box-sizing border-r-3px p-3 shadow-sm bg-white"><div class="rating margin-auto" data-rate-value="4,7"></div><h4>Northeca Oü</h4><p class="text-secondary-dark"><p class="secondary">
                                        2026/03/11  Eli Simon  None
                                    </p></p><p>A driver who spoke English would have been appreciated.</p></div></div><div class="col-lg-4 col-md-6 my-2"><div class="block-review center border-box-sizing border-r-3px p-3 shadow-sm bg-white"><div class="rating margin-auto" data-rate-value="5,0"></div><h4>Laguna Coach Travel srl</h4><p class="text-secondary-dark"><p class="secondary">
                                        2025/11/16  María del Mar Muñoz Martin  SPAIN
                                    </p></p><p>Todo perfecto , buen autobús y buen servicio. Puntual</p><p>Buen conductor</p></div></div><div class="col-lg-4 col-md-6 my-2"><div class="block-review center border-box-sizing border-r-3px p-3 shadow-sm bg-white"><div class="rating margin-auto" data-rate-value="4,8"></div><h4>Northeca Oü</h4><p class="text-secondary-dark"><p class="secondary">
                                        2025/10/15  Chris De Beer  None
                                    </p></p><p>We had a great experience. Thank you very much.</p><p>The driver was also very good.</p></div></div><div class="col-lg-4 col-md-6 my-2"><div class="block-review center border-box-sizing border-r-3px p-3 shadow-sm bg-white"><div class="rating margin-auto" data-rate-value="5,0"></div><h4>J2 jaume transfer SL</h4><p class="text-secondary-dark"><p class="secondary">
                                        2025/10/10  STEPHANIE MCFARLANE  None
                                    </p></p><p>Juan was amazing, he was extremly accommodating and we got everything we asked for.</p></div></div><div class="col-lg-4 col-md-6 my-2"><div class="block-review center border-box-sizing border-r-3px p-3 shadow-sm bg-white"><div class="rating margin-auto" data-rate-value="5,0"></div><h4>CARLO TORQUATI</h4><p class="text-secondary-dark"><p class="secondary">
                                        2025/10/06  Glendon Lloyd  None
                                    </p></p><p>Fabulous host - very comfortable car. Almost a sixth sense as to where and when we'd be. Perfetto </p></div></div></div></div><div class="plans container mb-3"><h3>Latest posted bus trips</h3><div class="row"><div class="col-lg-4"><div class="block-plan h-100 border-box-sizing position-is-relative border-r-3px shadow-sm px-5 py-3"><p class="t-14">Málaga, Spanje</p><p class="t-14">29100 Coín, Málaga, Spanje</p></div></div><div class="col-lg-4"><div class="block-plan h-100 border-box-sizing position-is-relative border-r-3px shadow-sm px-5 py-3"><p class="t-14">Via della Giustiniana, Roma RM, Italia</p><p class="t-14">Via Vittorio Ragusa, Roma RM, Italia</p></div></div><div class="col-lg-4"><div class="block-plan h-100 border-box-sizing position-is-relative border-r-3px shadow-sm px-5 py-3"><p class="t-14">Bilbao, Biscay, Spain</p><p class="t-14">Donostia / San Sebastián, Gipuzkoa, Spain</p></div></div></div></div><div class="container articles"><div class="row"><h2>Inform yourself about minibus and coach hires before booking</h2><p>Get information about mini bus with driver and coach hires&nbsp;for both small and large groups traveling in Spain, Portugal, Netherlands, Belgium, the United Kingdom, France and Italy and around the world. Find various options like chauffeured coach rentals and mini bus with driver hires around Europe. On our portal you can compare bus rental quotes on both price and quality.</p><h2>April, May, June and September are very busy in the European minibus and coach hire sector&nbsp;</h2><p>We know that planning a bus trip or a tour in a (faraway) continent like Europe can be a time consuming and sometimes difficult task. We make it easy for your by helping to get bus rental quotes and by helping you to compare them on both price and quality. Just be aware that during the busy months and during events and congresses minibuses and coaches tend to fully booked.</p><h3>Minibus and coach hire arrangements are often made too late</h3><p>Many travelers take care of hotel bookings and flight arrangements first, leaving bus rental reservations to the last minute of their planning. As the date of departure approaches, we often see that your plans are getting more detailed and sometimes change due to new insights on all the places, attractions, and sights you want to see on your journey. We advice you to, although your route&nbsp;or times might change, claim your reservation with the bus operator before to make sure you'll have a minibus or coach with driver available.</p><h3>Risk of overpaying for your European bus or coach rental</h3><p>In many European countries rental buses and coaches are sold out during the high season for bus with driver rentals. This results often in frustration for groups who end up overpaying or are left without a bus or coach service.</p><h2>Your&nbsp;tool for free bus and coach hire comparisons in Europe</h2><p>Let’s say you’re planning your travels and are looking at various options for getting around in countries like Spain, Portugal, France, Italy, Germany, the Netherlands, the United Kingdom, and other European countries.</p><p>Maybe you’re an experienced travel planner or maybe this is your first time organizing a tour for your family or group of culture lovers. Either way, we’re here to help you and we hope that we can make your trip as amazing as it can possibly be, not only by helping you to select the best transportation partner in Europe but also by helping you to reduce the hassle, stress, and worry that many people face when planning bus and coach&nbsp;hires far away from home.</p><h3>Start comparing European minibus with driver rentals and coach hire</h3><p>Your first step is to enter the details of your <a href="/get-transport-quote/item20?step=travelPlan">bus trip, transfer or tour in our quote form</a>&nbsp;so you can start comparing options.&nbsp;</p><h2>Bus and coach hire&nbsp;services in European countries</h2><p>Our service was created with the aim of providing direct access to local companies across Europe: coach hire companies and mini bus rental &nbsp;companies who provide local transfer and international tour services.<br>Travel agents and tour operators can both use our system to compare and book bus rentals. Convention and event organizers can also use our system to post request for quotes and select partners for their group travel needs.</p><h2>Two&nbsp;different types of bus and coach hires</h2><h3>Chauffeured motor coach hire</h3><p>Service for large groups travelling in a 50 seater bus and who are planning single or multi-day tours. The coach hire service can be around various countries or just around a city. Normally a fixed route and time schedule are planned. Coaches with drivers in Europe are also rented for days or half days without a fixed route for the purpose of city trips or day tours. In those cases a maximum distance per day is purchased and extra distance may be billed at a separate rate.</p><h3>Mini bus rental with driver</h3><p>Very similar to coach hires these are transfers or tour services with smaller vehicles&nbsp;with 9 to 25 seats normally rented for a half day or full day.</p><h2>Do you help with coach hire and bus rental&nbsp;services in all European countries?</h2><p>We hope to cover all European countries with our service in the next couple of years. In 2011 we started in&nbsp; by offering a bus rental comparison and quote service in Spain. In 2017 we plan to further expand our services to various European countries. If we don’t have any travel providers yet in the place where you need service, we’ll do our best to see that you get at least one quote or more if possible.</p><h2>Join a European and worldwide network of coach hire and mini bus rental with driver&nbsp;companies&nbsp;</h2><p>If you own or run a bus rental&nbsp;company anywhere in the world, you can <a href="/register-minibus-coach-hire-company/item100">list your company on our directory</a> by submitting your company profile with written information, fleet data, and fleet pictures. List your services and exchange a back link to our site.&nbsp;</p></div></div><script defer>
    document.addEventListener("allScriptsLoaded", () => {
        $(document).on('keypress',function(e) {
            if(e.which === 13 && !$(`.is-open`).length && $(`.banner-title`).length === 1) went_to_quote_creation();
        });

        const home_reviews = set_rating_options(true);
        $(`.block-review .rating`).rate(home_reviews);
    });

</script></div><footer class="footer width-100-full"><div class="quote-banner mb-4 pb-3 border-bottom display-block"><h2>Receive minibus rental offers. Compare, and book the best option for your trip.</h2><a class="btn btn-success p-3 t-16" href="/get-transport-quote/item20">Get FREE quotes</a></div><div class="footer-links t-14"><ul class="flex justify-content-center"><li><a class="text-secondary m-sm-2 m-0" href="/contact/item4">Contact</a></li><li><a class="text-secondary m-sm-2 m-0" href="/sitemap/item6">Sitemap</a></li><li><a class="text-secondary m-sm-2 m-0"
                       href="/register-minibus-coach-hire-company/item100"
                    >Submit bus company</a></li><li><a class="text-secondary m-sm-2 m-0" href="/countries/item46">Countries</a></li><li><a class="text-secondary m-sm-2 m-0" href="/blog/item1936">Blog</a></li><li><a class="text-secondary m-sm-2 m-0" href="/about-us/item2276">About us</a></li><li><a class="text-secondary m-sm-2 m-0" href="/general-terms/item892">General Terms and Privacy Policy</a></li></ul></div><p class="m-0">2010-2026 © RentAutobus.com</p></footer><script>
    const currentUrl = window.location.href;
    if (document.querySelector('.quote-banner')) {
            if (currentUrl.includes('item25') || currentUrl.includes('item24') || currentUrl.includes('item23') || currentUrl.includes('item22') || currentUrl.includes('item21') || currentUrl.includes('item20') || currentUrl.includes('get-transport-quote')) {
                document.querySelector('.quote-banner').classList.add('d-none');
            } else {
                document.querySelector('.quote-banner').classList.add('d-flex');
            }
    }
</script><script>
            var mainLoadEvent;
            let marker_for_map2_data = {};
            var mainScript = document.createElement('script');

            window.one_way_data = null;
            window.return_trip_data = null;
            window.multi_trip_data = null;
            window.getMultiTripData = null;
            window.setLocalStorageData = null;

            function loadScripts() {
                var jqueryLoadEvent = new Event('jqueryLoaded'),
                    popperScript = document.createElement('script'),
                    bootstrapScript = document.createElement('script'),
                    paginationScript = document.createElement('script'),
                    socketScript = document.createElement('script'),
                    lazyloadScript = document.createElement('script'),
                    momentScript = document.createElement('script'),
                    bootstrapDatetimepickerScript = document.createElement('script'),
                    rateScript = document.createElement('script');

                var popperLoadEvent,
                    bootstrapLoadEvent,
                    paginationLoadEvent,
                    socketLoadEvent,
                    lazyloadLoadEvent,
                    momentLoadEvent,
                    bootstrapDatetimepickerLoadEvent;

                var jqueryScript = document.createElement('script');
                jqueryScript.src = "/static/js/jquery-3.6.1.min.js";
                jqueryScript.type = "text/javascript";
                jqueryScript.async = false;

                document.getElementsByTagName('head')[0].appendChild(jqueryScript);

                document.addEventListener('jqueryLoaded', () => {
                    popperLoadEvent = new Event('popperLoaded');
                    popperScript.src = "/static/js/popper.min.js";
                    popperScript.type = "text/javascript";
                    popperScript.async = false;
                    document.getElementsByTagName('head')[0].appendChild(popperScript);
                });

                document.addEventListener('popperLoaded', () => {
                    bootstrapLoadEvent = new Event('bootstrapLoaded');
                    bootstrapScript.src = "/static/bootstrap-4.3.1/js/bootstrap.min.js";
                    bootstrapScript.type = "text/javascript";
                    bootstrapScript.async = false;
                    document.getElementsByTagName('head')[0].appendChild(bootstrapScript);
                });

                document.addEventListener('bootstrapLoaded', () => {
                    paginationLoadEvent = new Event('paginationLoaded');
                    paginationScript.src = "/static/js/pagination.js?v=" + crypto.randomUUID();
                    paginationScript.type = "text/javascript";
                    paginationScript.async = false;
                    document.getElementsByTagName('head')[0].appendChild(paginationScript);
                });

                document.addEventListener('paginationLoaded', () => {
                    socketLoadEvent = new Event('socketLoaded');
                    socketScript.src = "https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js";
                    socketScript.type = "text/javascript";
                    socketScript.async = false;
                    document.getElementsByTagName('head')[0].appendChild(socketScript);
                });

                document.addEventListener('socketLoaded', () => {
                    lazyloadLoadEvent = new Event('lazyloadLoaded');
                    lazyloadScript.src = "/static/js/lazyload.min.js";
                    lazyloadScript.type = "text/javascript";
                    lazyloadScript.async = false;
                    document.getElementsByTagName('head')[0].appendChild(lazyloadScript);
                });

                document.addEventListener('lazyloadLoaded', () => {
                    momentLoadEvent = new Event('momentLoaded');
                    momentScript.src = "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js";
                    momentScript.type = "text/javascript";
                    momentScript.async = false;
                    document.getElementsByTagName('head')[0].appendChild(momentScript);
                });

                document.addEventListener('momentLoaded', () => {
                    bootstrapDatetimepickerLoadEvent = new Event('bootstrapDatetimepickerLoaded');
                    bootstrapDatetimepickerScript.src = "/static/js/bootstrap-datetimepicker.min.js";
                    bootstrapDatetimepickerScript.type = "text/javascript";
                    bootstrapDatetimepickerScript.async = false;
                    document.getElementsByTagName('head')[0].appendChild(bootstrapDatetimepickerScript);
                });

                document.addEventListener('bootstrapDatetimepickerLoaded', () => {
                    rateLoadEvent = new Event('rateLoaded');
                    rateScript.src = "/static/js/rate.js?v=" + crypto.randomUUID();
                    rateScript.type = "text/javascript";
                    rateScript.async = false;
                    document.getElementsByTagName('head')[0].appendChild(rateScript);

                    fotoramaScript = document.createElement('script');
                    fotoramaScript.src = "/static/js/fotorama.js?v=" + crypto.randomUUID();
                    fotoramaScript.type = "text/javascript";
                    fotoramaScript.async = false;
                    document.getElementsByTagName('head')[0].appendChild(fotoramaScript);
                });

                // This is script that is loaded before main.js
                document.addEventListener('rateLoaded', () => {
                    //-- Do not remove --//
                    beforeMainScriptsLoad = new Event('beforeMainScriptsLoadEvent');
                    //-- --//
                    var beforeMainScriptsLoadScript = document.createElement('script');
                    beforeMainScriptsLoadScript.type = "text/javascript";
                    beforeMainScriptsLoadScript.async = false;
                    document.getElementsByTagName('head')[0].appendChild(beforeMainScriptsLoadScript);
                });

                document.addEventListener('beforeMainScriptsLoadEvent', () => {
                    mainLoadEvent = new Event('allScriptsLoaded');
                    window.set_create_quote_data = (response) => {
                        let originalRoutes = [];
                        if (monthNames.length === 0) {
                            for (let month_key = 2348; month_key <= 2359; month_key++) {
                                monthNames.push(response.trip_data.msgs[month_key])
                            }

                            for (let days_key = 2360; days_key <= 2366; days_key++) {
                                dayNames.push(response.trip_data.msgs[days_key])
                            }
                        }

                        let parent_class = '.is-open';
                        tripId = response.trip_data.trip_id;
                        let sub_trip_id = response.trip_data.sub_trip_id;
                        $(`#send_quote`).attr('sub_trip_id', sub_trip_id).attr('trip_id', tripId);

                        company_currency_sign = response.trip_data.company_currency_sign;
                        $(`${parent_class} .company_currency_sign`).text(company_currency_sign);
                        company_currency_commission = response.trip_data.company_currency_commission;

                        let group_size = response.trip_data.group_size;
                        localStorage.setItem('passengers_quote', group_size);

                        $(`${parent_class} #group_size_val`).text(group_size);
                        $(`${parent_class} #group_size_mod`).val(group_size);

                        let complete_tag = response.trip_data.complete_tag;
                        let group_descr = response.trip_data.group_descr;

                        if (complete_tag) {
                            group_descr = "Waiting for more trip details.";
                        }
                        $(`${parent_class} #about_group_val`).text(group_descr);

                        let file_name = response.trip_data.trip_file;
                        if (file_name) {
                            let file_splited = file_name.split('/');
                            $(`${parent_class} .card-trip .filePopup`).text(file_splited[file_splited.length - 1]).attr('href', `${file_name}`);
                            $(`${parent_class} .card-trip .main-add`).removeClass('hide-element');
                        } else {
                            $(`${parent_class} .card-trip .filePopup`).text('').removeAttr('src');
                            $(`${parent_class} .card-trip .main-add`).addClass('hide-element');
                        }

                        let routes_num = response.trip_data.routes.length;

                        counterMains = counterSubs = routes_num;

                        for (let i = 0; i < routes_num; i++) {
                            let options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
                            let route_trip = i + 1;
                            let route_day = response.trip_data.routes[i].route_day;
                            let date = new Date(response.trip_data.routes[i].date),
                                userTimezoneOffset = date.getTimezoneOffset() * 60000,
                                me_die = new Date(date.getTime() + userTimezoneOffset);

                            let clear_date = response.trip_data.routes[i].date;
                            let route_data = me_die.toLocaleString("en-US", options);
                            let route_data_en = me_die.toLocaleString("en-US", options);
                            if ($(`html`).attr('lang') !== 'en') {
                                let date = new Date(route_data);
                                let day = date.getDate();
                                let month = monthNames[date.getMonth()];
                                let dayNumber = date.getDay() === 0 ? 6 : date.getDay() - 1;
                                let weekday = dayNames[dayNumber];
                                let year = date.getFullYear();
                                route_data = `${weekday}, ${month} ${day > 10 ? day : `0${day}`}, ${year}`;
                            }

                            let from_point__name = response.trip_data.routes[i].from_point__name;
                            let to_point__name = response.trip_data.routes[i].to_point__name;
                            let from_time = response.trip_data.routes[i].time;
                            let to_time = response.trip_data.routes[i].estimate_date;

                            let leg = response.trip_data.routes[i].leg;
                            let duration = response.trip_data.routes[i].duration;
                            if (+(duration.split(':')[0]) > 0) duration = `${duration} hours`;
                            else duration = `${duration} Minutes`;

                            $(`${parent_class} .trips-block`).append(route_html(i, i, from_point__name, from_time, to_point__name, to_time, route_trip, route_day, route_data, Math.round(leg), duration, route_data_en));

                            if (i !== 0) $(`#trip${i}`).addClass('mt-4');

                            $(`#trip${i} .company_currency_sign`).text(company_currency_sign);

                            let from_service = response.trip_data.routes[i].from_service;
                            let to_service = response.trip_data.routes[i].to_service;
                            let first_checker = false;
                            let second_checker = false;

                            if (from_service || to_service) {
                                $(`#trip${i} .transfers-container`).removeClass('d-none');
                                $(`#transfer_price${i}`).attr('required', true);

                                let from_chosen_option_time = 0;
                                let to_chosen_option_time = 0;

                                if (from_service) {
                                    first_checker = true;
                                    $(`#trip${i} .first-transfer-container .transfer-block`).removeClass('d-none');
                                    $(`#trip${i} .first-transfer-container .no-transfer-label`).addClass('d-none');

                                    $(`#trip${i} .from-service-select${i}`).text(from_service);

                                    let from_service_time = response.trip_data.routes[i].from_service_time;
                                    let formated_service_time = format_from_AMPM(from_service_time);

                                    $(`#tourFromChecked${i}`).trigger('click');
                                    from_chosen_option_time = response.trip_data.routes[i].from_service_duration;

                                    $(`#point_1_loco${i} option:contains('${from_service}')`).attr('selected', 'selected');
                                    $(`#addFirstTour${i} .from-time`).val(formated_service_time);

                                    let from_service_time_ends = calculate_end_time($(`#point_1_loco${i}`));

                                    $(`#trip${i} .from-service-time${i}`).text(`${formated_service_time}-${from_service_time_ends}`);
                                }
                                else {
                                    $(`#trip${i} .first-transfer-container .transfer-block`).addClass('d-none');
                                    $(`#trip${i} .first-transfer-container .no-transfer-label`).removeClass('d-none');
                                }

                                if (to_service) {
                                    second_checker = true;
                                    $(`#trip${i} .second-transfer-container .transfer-block`).removeClass('d-none');
                                    $(`#trip${i} .second-transfer-container .no-transfer-label`).addClass('d-none');

                                    $(`#trip${i} .to-service-select${i}`).text(to_service);

                                    let to_service_time = response.trip_data.routes[i].to_service_time;
                                    let formated_service_time = format_from_AMPM(to_service_time);

                                    $(`#tourToChecked${i}`).trigger('click');
                                    to_chosen_option_time = response.trip_data.routes[i].to_service_duration;

                                    $(`#point_2_loco${i} option:contains('${to_service}')`).attr('selected', 'selected');
                                    $(`#addSecondTour${i} .from-time`).val(formated_service_time);

                                    let to_service_time_ends = calculate_end_time($(`#point_2_loco${i}`));

                                    $(`#trip${i} .to-service-time${i}`).text(`${formated_service_time}-${to_service_time_ends}`);
                                }
                                else {
                                    $(`#trip${i} .second-transfer-container .transfer-block`).addClass('d-none');
                                    $(`#trip${i} .second-transfer-container .no-transfer-label`).removeClass('d-none');
                                }

                                $(`.transfer-time${i}`).text(+(from_chosen_option_time) + +(to_chosen_option_time));
                            }

                            $(`#from${i}`).attr("placeholder", $(`.tripFromValue${i}`).text()).val(from_point__name);
                            $(`#to${i}`).attr("placeholder", $(`.tripToValue${i}`).text()).val(to_point__name);
                            let start_time = format_from_AMPM(from_time);
                            $(`#departure_time${i}`).val(start_time);
                            get_format_date(i);

                            if (to_point__name) {
                                let point_1_loco = $(`.from-service-select${i}`).text() === "None" ? "" : $(`.from-service-select${i}`).text();
                                let point_2_loco = $(`.to-service-select${i}`).text() === "None" ? "" : $(`.to-service-select${i}`).text();

                                originalRoutes.push({
                                    'id': `${tripId}.${i}`,
                                    'first_checker': first_checker,
                                    'second_checker': second_checker,
                                    'point_1': from_point__name,
                                    'point_2': to_point__name,
                                    'time': from_time,
                                    'point_1_loco': point_1_loco,
                                    'point_2_loco': point_2_loco,
                                    'date': clear_date,
                                });

                            }
                            localStorage.setItem('date', clear_date);
                            date_difference(i);
                            localStorage.setItem('routes', JSON.stringify(originalRoutes));
                            // set_functionality_for_route();
                        }

                        set_first_trash(`.main-trip`, `.delete-block`);

                        $(`.tripGarageToValue`).text($('.from_point:first').text());
                        $(`.tripGarageEndFromValue`).text($('.to_point:last').text());

                        let vat_percentage = response.trip_data.vat_percentage;
                        $(`${parent_class} .vat_percentage`).text(vat_percentage);

                        edit_functional();

                        $('#bus_garage').change(function () {
                            calculating_garages_estimates();
                            
                        });

                        $(function () {
                            $('[data-toggle="tooltip"]').tooltip()
                        });

                        calculation_transfers_time();

                        $(document).on("blur", "input[class*='route-price'], input[class*='abroad-price'], #abroad_vat, .amount-price, .abroad-amount-price, .totals_price, .totals_other_cost", () => {
                            auto_sum();
                        });

                        $('#price_valid_until').val(response.trip_data.price_valid_until);
                        $('#guaranteed_during').val(response.trip_data.guaranteed_during);

                        $('.payment-plan-calendar').attr('data-trip-first-day', response.trip_data.trip_date);
                        let paymentTermEl = document.getElementById('payment_term');
                        $(paymentTermEl)
                            .attr('data-payment-template', response.trip_data.payment_label_template)
                            .attr('data-company-currency-sign', response.trip_data.company_currency_sign);

                        if (paymentTermEl) {
                            renderPaymentCalendarWidgets(!(paymentTermEl.hasAttribute('disabled')));
                        }
                    }

                    window.create_quote_onload = (response) => {
                        set_create_quote_data(response);

                        if (localStorage.getItem('with_vat') !== null) {
                            $(`#vat_check`).trigger('click');
                            localStorage.removeItem('with_vat');
                        }
                        if (localStorage.getItem("edit_mode") !== null) {
                            $(`#editor_mode_on`).trigger('click');
                            localStorage.removeItem('edit_mode');
                        }
                        if (!($(`.main-add`).hasClass('hide-element'))) {
                            let file_path = $(`.main-add .filePopup`).text();
                            let fixed_path = file_path.split('/')[3];
                            $(`.main-add .filePopup`).text(fixed_path);
                        }

                        if ($(`#bus_garage option`).length === 1) calculating_garages_estimates();
                    }

                    window.select_garage_vehicles = (selected_garage_id) => {
                        let options = $('#bus_type_mod option');
                        $(options).addClass('hide');
                        $(options).each(function (index, el) {
                            if ($(el).attr('data-garage') === selected_garage_id) {
                                $(el).removeClass('hide');
                            }
                        })
                    }

                    window.banner_alert = (type, text, to_profile, logout_user, hide_close, hide_button) => {
                        if (to_profile) {
                            add_body_shadow();
                        }
                        let icon_type = (type === 'success') ? 'fa-smile-beam' : (type === 'danger') ? 'fa-frown' : 'fa-exclamation-triangle';
                        let header_text = (type === 'success') ? `Thank you!` : (type === 'danger') ? `Error` : `Info`;
                        let success_only = (type === 'success' || type === 'info') ? 'd-none' : '';
                        let error_only = (type === 'danger') ? 'd-none' : '';
                        let warning_only = (type === 'warning') ? 'd-none' : '';

                        let alert_html = `<div class="col-12 col-lg-6 col-md-12 col-sm-12 error-alert is-fixed"><div class="alert alert-${type}" role="alert"><a type="button" class="alert-close close ${hide_close || ''}" aria-label="Close"><span aria-hidden="true">&times;</span></a><h4 class="alert-heading"><i class="fas ${icon_type} pr-2"></i>${header_text}</h4><hr><div class="flex justify-content-between"><span class="col">${text}</span><div class="alert-button-container flex justify-content-end ${success_only}"><a href="mailto:service@rentautobus.com" class="text-decoration-none ${hide_button || ''} ${warning_only}"><button type="button" class="btn-white">Ask customer service</button></a><button type="button" class="btn-white shadow-sm ${error_only}" onclick="if_remove_data(true)">Remove</button><button type="button" class="btn-white shadow-sm ${error_only}" onclick="if_remove_data(false)">Leave</button></div></div></div></div>`;

                        $('body').append(alert_html);
                        animateNotification($('.error-alert'))
                        $(`.error-alert`).fadeIn(1000)

                        if (to_profile) {
                            if (to_profile != '#') {
                                $(`.alert-close`).attr('href', `${to_profile}`);
                            }
                        } else {
                            setTimeout(function () { $(`.error-alert`).fadeOut(1000); }, 5000)
                            $(document).on('click', `.alert-close`, function () {
                                animateNotification($('.error-alert'), true)
                            })
                        }

                        if (logout_user) setTimeout(function () { remove_main_cookies(); }, 2000);
                    }

                    window.animateNotification = (el, reverse) => {
                        let animationOptions = { opacity: 1, top: "+=10%" }
                        if (reverse) { animationOptions = { opacity: 0, top: "-=10%" } }
                        $(el).animate(animationOptions, 800, function () {
                            if (reverse) {
                                $(el).remove();
                                remove_body_shadow()
                            }
                        });
                    }

                    mainScript.src = "/static/js/main.min.js?v=" + crypto.randomUUID();
                    mainScript.type = "text/javascript";
                    mainScript.async = false;

                    if (document.body.querySelector('.city-page')) {
                        mainScript.src = "/static/js/city-main.js?v=" + crypto.randomUUID();
                    }
                    document.getElementsByTagName('head')[0].appendChild(mainScript);
                });

                document.addEventListener('allScriptsLoaded', () => {
                    var clickEventsScript = document.createElement('script');
                    clickEventsScript.src = "/static/js/click-events-listeners.js?v=" + crypto.randomUUID();
                    clickEventsScript.type = "text/javascript";
                    clickEventsScript.async = false;
                    document.getElementsByTagName('head')[0].appendChild(clickEventsScript);

                    // This is script that is loaded after main.js
                    var afterMainScriptsLoadScript = document.createElement('script');
                    afterMainScriptsLoadScript.type = "text/javascript";
                    afterMainScriptsLoadScript.async = false;
                    document.getElementsByTagName('head')[0].appendChild(afterMainScriptsLoadScript);
                });

                jqueryScript.addEventListener('load', () => {
                    document.dispatchEvent(jqueryLoadEvent);
                });
                popperScript.addEventListener('load', () => {
                    document.dispatchEvent(popperLoadEvent);
                });
                bootstrapScript.addEventListener('load', () => {
                    document.dispatchEvent(bootstrapLoadEvent);
                });
                paginationScript.addEventListener('load', () => {
                    document.dispatchEvent(paginationLoadEvent);
                });
                socketScript.addEventListener('load', () => {
                    document.dispatchEvent(socketLoadEvent);
                });
                lazyloadScript.addEventListener('load', () => {
                    document.dispatchEvent(lazyloadLoadEvent);
                });
                momentScript.addEventListener('load', () => {
                    document.dispatchEvent(momentLoadEvent);
                });
                bootstrapDatetimepickerScript.addEventListener('load', () => {
                    document.dispatchEvent(bootstrapDatetimepickerLoadEvent);
                });
                rateScript.addEventListener('load', () => {
                    document.dispatchEvent(rateLoadEvent);
                });
                rateScript.addEventListener('load', () => {
                    document.dispatchEvent(beforeMainScriptsLoad);
                });
            }

            function loadYtVideo() {
                var elementWithData = $('.iframe-placeholder');

                var ytIframe = document.createElement('iframe');
                ytIframe.src = elementWithData.attr("data-src");
                ytIframe.height = elementWithData.attr("data-height");
                ytIframe.width = elementWithData.attr("data-width");
                ytIframe.frameBorder = 0;
                ytIframe.loading = "lazy";

                var iframeParentElem = document.querySelector('.main-page-content');
                var elemToInsertBefore = document.querySelector('.iframe-placeholder');

                if (iframeParentElem !== null && elemToInsertBefore !== null) {
                    iframeParentElem.prepend(ytIframe);
                    
                }
            }

            document.addEventListener('DOMContentLoaded', () => {
                loadScripts();

                mainScript.addEventListener('load', () => {
                    document.dispatchEvent(mainLoadEvent);
                })

                window.enableAutocompleteMapFields = (fieldsProperty) => {

                }
            })

            document.addEventListener("allScriptsLoaded", () => {
                if ($('.summary-container').length > 0) {
                    window.summaryContainer = $('.summary-container').html();
                }

                loadYtVideo();

                $(window).scroll(function () {
                    if ($(this).scrollTop() >= 400) $('.return-to-top').fadeIn(1000);
                    else $('.return-to-top').fadeOut(1000);
                });

                $(document).ready(function () {
                    
                    cookiesPolicyBar();
                    

                    $('#tab-list .list-content').children().length > 0 ? $('#tab-list').removeClass('d-none') : $('#tab-list').addClass('d-none');

                    if ('' !== 'None') {
                        if ('' === '1') {
                            $(`#return_trip`).click();
                            duplicate_run_return_trip();
                        }
                        else if ('' === '2') {
                            $(`#one_way`).click();
                            duplicate_run_one_way();
                        }
                        else if ('' === '3') {
                            $(`#multi_trip`).click();
                            duplicate_run_multi_way();
                        }
                    }

                    window.localStorage.setItem('api_url', 'https://rentautobus.com/');
                    window.localStorage.setItem('socket_url', 'https://ws.rentautobus.com');

                    $(`.sign-in-popup, .recover-popup`).css('overflow', 'hidden');

                    setCookie('lang', $(`html`).attr('lang'));
                });

                $.fn.extend({
                    addTemporaryClass: function (className, duration) {
                        let elements = this;
                        setTimeout(function () {
                            elements.removeClass(className);
                        }, duration);

                        return this.each(function () {
                            $(this).addClass(className);
                        });
                    }
                });

                function sign_in() {
                    $(`.sign-in-popup .btn-login`).attr('disabled', true);
                    let login_val = $(`.sign-in-popup #login_email`).val();
                    let pass_val = $(`.sign-in-popup #sign_password`).val();
                    let remember_me_val = $(`.sign-in-popup [name="remember-me"]`).is(':checked');
                    let state = validate_require(`is-open`);
                    if (state) {
                        send_request('POST', `/login/`, {
                            'email': login_val,
                            'password': pass_val,
                            'remember_me': remember_me_val,
                        }, true, (response) => {
                            if (response.status === 1) {
                                let href_transition = $(`.sign-in-popup.is-open`).hasClass('page-reload') ? window.location.href : response.url;
                                close_general_popup();
                                add_body_shadow();
                                set_spinner();
                                localStorage.setItem('jwt', response.token);
                                document.cookie = `token=${response.token}; path=/;`;
                                window.location.href = href_transition;
                            } else {
                                $(`.sign-in-popup .btn-login`).removeAttr('disabled');
                                $(`.sign-in-popup #login_email, .sign-in-popup #sign_password`).addTemporaryClass("invalid", 5000);
                                $(`.sign-in-popup .bg-danger`).slideDown();
                                $(`.sign-in-alert .font-bold`).text(response.error);
                                $(`.new-site-sign-in-message `).slideDown();
                                setTimeout(function () { $(`.sign-in-popup .bg-danger`).slideUp(); }, 5000)
                            }
                        })
                    } else $(`.sign-in-popup .btn-login`).removeAttr('disabled');
                }

                $(`.sign-in-form`).submit(function (e) {
                    e.preventDefault();
                    sign_in();
                });

                window.cookiesPolicyBar = () => {
                    if (!isCookieExist('cookie_exist')) $('.cookie-bar').fadeIn();
                    else $(`.disabled-sign-in`).removeAttr('disabled').removeClass('disabled-sign-in');

                    $('.cookie-bar .btn-success').on('click', function () {
                        $('.cookie-bar').fadeOut();
                        $(`#dLabel`).removeAttr('disabled').removeClass('disabled-sign-in');
                        setCookie('cookie_exist', true);
                    });
                }

                const set_trip_data = (prevData, name, value) => ({
                    ...prevData,
                    [name]: value
                });

                const clear_extra_time = () => {
                    const transfer_select = document.querySelectorAll('.transfer-select');
                    transfer_select.forEach((el) => {
                        el.addEventListener('change', function () {
                            const trip_data = JSON.parse(localStorage.getItem('rentautobus_form_data'));
                            const start_time = el.closest('.transfer-container').querySelector('.from-time');
                            let legIndex = parseInt(start_time.id.match(/\d+/)[0]);
                            const direction = start_time.id.split('_')[0];
                            start_time.value = '';

                            if (isNaN(legIndex)) legIndex = 0;

                            const clearable_date_index = direction === 'from' ? 1 : 2;
                            trip_data[legIndex][`point_${clearable_date_index}_loco_time`] = '';
                            trip_data[legIndex][`point_${clearable_date_index}_loco_time_end`] = '';

                            localStorage.setItem('rentautobus_form_data', JSON.stringify(trip_data));
                        })
                    });
                };

                clear_extra_time();

                window.handleBlur = function(event) {
                    const input = event.target;
                    const id = input.id;
                    console.log('🔍 handleBlur called:', { id, tagName: input?.tagName });

                    if (!id) {
                        console.warn('  No id, skipping');
                        return;
                    }

                    const click_btn = localStorage.getItem('click_btn');
                    let currentId = id;
                    let targetInput = input;

                    if (click_btn === 'multi_trip') {
                        targetInput = window.getMultiTripData ? window.getMultiTripData(id) : null;
                        if (!targetInput) targetInput = input;
                        console.log('  Multi trip, targetInput:', targetInput?.id);
                    }

                    // Для gmp-place-autocomplete берем значение из data-атрибутов
                    if (targetInput && targetInput.tagName === 'GMP-PLACE-AUTOCOMPLETE') {
                        const address = targetInput.getAttribute('data-address') || targetInput.getAttribute('data-place-name') || '';
                        console.log('  GMP field, address:', address);

                        const fakeInput = {
                            value: address,
                            getAttribute: (attr) => targetInput.getAttribute(attr),
                            setAttribute: (attr, val) => targetInput.setAttribute(attr, val),
                            tagName: targetInput.tagName,
                            id: targetInput.id
                        };
                        if (window.setLocalStorageData) {
                            window.setLocalStorageData(currentId, fakeInput);
                        } else {
                            console.error('  setLocalStorageData not found!');
                        }
                    } else if (targetInput) {
                        console.log('  Regular field, value:', targetInput.value);
                        if (window.setLocalStorageData) {
                            window.setLocalStorageData(currentId, targetInput);
                        } else {
                            console.error('  setLocalStorageData not found!');
                        }
                    }
                };

                window.initInputBlurHandlers = function() {
                    const activeTab = document.querySelector('.active-tab');
                    if (!activeTab) {
                        console.warn('⚠️ No active tab found');
                        return;
                    }

                    const click_btn = localStorage.getItem('click_btn');
                    const allInputs = activeTab.querySelectorAll('input, select, gmp-place-autocomplete');

                    allInputs.forEach(input => {
                        input.removeEventListener('blur', window.handleBlur);
                        input.addEventListener('blur', window.handleBlur);
                    });

                    console.log(`✅ Input blur handlers initialized for ${allInputs.length} fields in ${click_btn || 'unknown'} tab`);
                };

                window.addBlurHandlersToBlock = function(blockId) {
                    const block = document.getElementById(blockId);
                    if (!block) return;

                    const inputs = block.querySelectorAll('input, select, gmp-place-autocomplete');
                    inputs.forEach(input => {
                        input.removeEventListener('blur', window.handleBlur);
                        input.addEventListener('blur', window.handleBlur);
                    });
                    console.log(`✅ Blur handlers added for block ${blockId} (${inputs.length} fields)`);
                };

                window.inputBlur = function(inputIds) {
                    const click_btn = localStorage.getItem('click_btn');

                    if (inputIds && inputIds.length) {
                        inputIds.forEach((id) => {
                            let input = document.getElementById(id);
                            let currentId = id;

                            if (click_btn === 'multi_trip') {
                                input = window.getMultiTripData ? window.getMultiTripData(id) : null;
                            }

                            if (input) {
                                input.onblur = () => {
                                    window.handleBlur({ target: input });
                                };
                            }
                        });
                    } else {
                        window.initInputBlurHandlers();
                    }
                };

                window.inputBlur = (inputIds) => {
                    const click_btn = localStorage.getItem('click_btn');

                    if (inputIds && inputIds.length) {
                        inputIds.forEach((id) => {
                            let input = document.getElementById(id);
                            let currentId = id;

                            if (click_btn === 'multi_trip') {
                                input = getMultiTripData(id);
                            }

                            if (input) {
                                input.onblur = () => {
                                    handleBlur({ target: input });
                                };
                            }
                        });
                    } else {
                        initInputBlurHandlers();
                    }
                };

                // Обновленный getMultiTripData
                const getMultiTripData = (id) => {
                    const multi_trip_block = document.querySelector('#main_block_multi');
                    const element = multi_trip_block?.querySelector(`#${id}`);
                    return element;
                };

                window.setLocalStorageData = function(id, input) {
                    console.log('🔍 setLocalStorageData called:', { id, inputType: input?.tagName, value: input?.value });

                    const click_btn = localStorage.getItem('click_btn');
                    console.log('  click_btn:', click_btn);

                    // Для gmp-place-autocomplete создаем обертку с value
                    let processedInput = input;
                    if (input && input.tagName === 'GMP-PLACE-AUTOCOMPLETE') {
                        processedInput = {
                            value: input.getAttribute('data-address') || input.getAttribute('data-place-name') || '',
                            getAttribute: (attr) => input.getAttribute(attr),
                            setAttribute: (attr, val) => input.setAttribute(attr, val),
                            tagName: 'GMP-PLACE-AUTOCOMPLETE',
                            id: input.id
                        };
                        console.log('  Processed GMP input, value:', processedInput.value);
                    }

                    if (click_btn === 'one_way') {
                        console.log('  Calling one_way_data for id:', id);
                        window.one_way_data(id, processedInput);
                    } else if (click_btn === 'return_trip') {
                        console.log('  Calling return_trip_data for id:', id);
                        window.return_trip_data(id, processedInput);
                    } else if (click_btn === 'multi_trip') {
                        console.log('  Calling multi_trip_data for id:', id);
                        window.multi_trip_data(id, processedInput);
                    } else {
                        console.warn('  Unknown click_btn:', click_btn);
                    }

                    if (processedInput !== null && processedInput.tagName !== 'GMP-PLACE-AUTOCOMPLETE') {
                        processedInput.value = $(processedInput).val();
                    }
                };

                const one_way_data = (id, input) => {
                    const trip_data = JSON.parse(localStorage.getItem('rentautobus_form_data')) || [{}];
                    const prevData = trip_data[0] || {};

                    const inputValue = input.tagName === 'GMP-PLACE-AUTOCOMPLETE'
                        ? (input.getAttribute('data-address') || input.getAttribute('data-place-name') || '')
                        : input.value;

                    if (id === 'from_date') {
                        trip_data[0] = set_trip_data(prevData, 'date', inputValue);
                    } else if (id === 'from_time-hour') {
                        trip_data[0] = set_trip_data(prevData, 'time', inputValue);
                    } else if (id === 'from-select') {
                        let tempData = [];
                        tempData.push(set_trip_data(prevData, 'point_1_loco', inputValue));
                        const options = input.querySelectorAll ? input.querySelectorAll('option') : [];
                        options.forEach(option => {
                            if (option.value === inputValue) {
                                tempData.push(set_trip_data(prevData, 'point_1_loco_name', option.innerText))
                            };
                        });
                        trip_data[0] = {
                            ...prevData,
                            point_1_loco: tempData[0]?.point_1_loco,
                            point_1_loco_name: tempData[1]?.point_1_loco_name
                        };
                    } else if (id === 'to-select') {
                        let tempData = [];
                        tempData.push(set_trip_data(prevData, 'point_2_loco', inputValue));
                        const options = input.querySelectorAll ? input.querySelectorAll('option') : [];
                        options.forEach(option => {
                            if (option.value === inputValue) {
                                tempData.push(set_trip_data(prevData, 'point_2_loco_name', option.innerText))
                            };
                        });
                        trip_data[0] = {
                            ...prevData,
                            point_2_loco: tempData[0]?.point_2_loco,
                            point_2_loco_name: tempData[1]?.point_2_loco_name
                        };
                    } else if (id === 'from_time-starts') {
                        const timeEnd = $(`#from_time-ends`).val();
                        trip_data[0] = set_trip_data(prevData, 'point_1_loco_time', inputValue);
                        const prevTimeData = trip_data[0];
                        trip_data[0] = set_trip_data(prevTimeData, 'point_1_loco_time_end', timeEnd);
                    } else if (id === 'to_time-starts') {
                        const timeEnd = $(`#to_time-ends`).val();
                        trip_data[0] = set_trip_data(prevData, 'point_2_loco_time', inputValue);
                        const prevTimeData = trip_data[0];
                        trip_data[0] = set_trip_data(prevTimeData, 'point_2_loco_time_end', timeEnd);
                    } else if (id === 'from' || id === 'to') {
                        const lat = input.getAttribute ? input.getAttribute('data-lat') : null;
                        const lng = input.getAttribute ? input.getAttribute('data-lng') : null;
                        const iso = input.getAttribute ? input.getAttribute('data-country-iso') : null;

                        if (id === 'from') {
                            trip_data[0] = set_trip_data(prevData, 'point_1', inputValue);
                            if (lat) trip_data[0].point_1_lat = lat;
                            if (lng) trip_data[0].point_1_lng = lng;
                            if (iso) trip_data[0].point_1_country_iso = iso;
                        } else if (id === 'to') {
                            trip_data[0] = set_trip_data(prevData, 'point_2', inputValue);
                            if (lat) trip_data[0].point_2_lat = lat;
                            if (lng) trip_data[0].point_2_lng = lng;
                            if (iso) trip_data[0].point_2_country_iso = iso;
                        }
                    }

                    localStorage.setItem('rentautobus_form_data', JSON.stringify(trip_data));
                };

                const return_trip_data = (id, input) => {
                    const trip_data = JSON.parse(localStorage.getItem('rentautobus_form_data')) || [{}, {}];
                    const prevDataOne = trip_data[0] || {};
                    const prevDataTwo = trip_data[1] || {};

                    const inputValue = input.tagName === 'GMP-PLACE-AUTOCOMPLETE'
                        ? (input.getAttribute('data-address') || input.getAttribute('data-place-name') || '')
                        : input.value;

                    const lat = input.getAttribute ? input.getAttribute('data-lat') : null;
                    const lng = input.getAttribute ? input.getAttribute('data-lng') : null;
                    const iso = input.getAttribute ? input.getAttribute('data-country-iso') : null;

                    if (id === 'from_date') {
                        trip_data[0] = set_trip_data(prevDataOne, 'date', inputValue);
                    } else if (id === 'from_time-hour') {
                        trip_data[0] = set_trip_data(prevDataOne, 'time', inputValue);
                    } else if (id === 'to_date') {
                        trip_data[1] = set_trip_data(prevDataTwo, 'date', inputValue);
                    } else if (id === 'to_time') {
                        trip_data[1] = set_trip_data(prevDataTwo, 'time', inputValue);
                    } else if (id === 'from') {
                        trip_data[0] = set_trip_data(prevDataOne, 'point_1', inputValue);
                        if (lat) trip_data[0].point_1_lat = lat;
                        if (lng) trip_data[0].point_1_lng = lng;
                        if (iso) trip_data[0].point_1_country_iso = iso;
                    } else if (id === 'to') {
                        trip_data[0] = set_trip_data(prevDataOne, 'point_2', inputValue);
                        if (lat) trip_data[0].point_2_lat = lat;
                        if (lng) trip_data[0].point_2_lng = lng;
                        if (iso) trip_data[0].point_2_country_iso = iso;
                    } else if (id === 'fromT') {
                        trip_data[1] = set_trip_data(prevDataTwo, 'point_1', inputValue);
                        if (lat) trip_data[1].point_1_lat = lat;
                        if (lng) trip_data[1].point_1_lng = lng;
                        if (iso) trip_data[1].point_1_country_iso = iso;
                    } else if (id === 'toT') {
                        trip_data[1] = set_trip_data(prevDataTwo, 'point_2', inputValue);
                        if (lat) trip_data[1].point_2_lat = lat;
                        if (lng) trip_data[1].point_2_lng = lng;
                        if (iso) trip_data[1].point_2_country_iso = iso;
                    } else if (id === 'from-select0') {
                        let tempData = [];
                        tempData.push(set_trip_data(prevDataOne, 'point_1_loco', inputValue));
                        const options = input.querySelectorAll ? input.querySelectorAll('option') : [];
                        options.forEach(option => {
                            if (option.value === inputValue) {
                                tempData.push(set_trip_data(prevDataOne, 'point_1_loco_name', option.innerText))
                            };
                        });
                        trip_data[0] = {
                            ...prevDataOne,
                            point_1_loco: tempData[0]?.point_1_loco,
                            point_1_loco_name: tempData[1]?.point_1_loco_name
                        };
                    } else if (id === 'from_time-starts0') {
                        const timeEnd = $(`#from_time-ends0`).val();
                        trip_data[0] = set_trip_data(prevDataOne, 'point_1_loco_time', inputValue);
                        const prevTimeData = trip_data[0];
                        trip_data[0] = set_trip_data(prevTimeData, 'point_1_loco_time_end', timeEnd);
                    } else if (id === 'to-select0') {
                        let tempData = [];
                        tempData.push(set_trip_data(prevDataOne, 'point_2_loco', inputValue));
                        const options = input.querySelectorAll ? input.querySelectorAll('option') : [];
                        options.forEach(option => {
                            if (option.value === inputValue) {
                                tempData.push(set_trip_data(prevDataOne, 'point_2_loco_name', option.innerText))
                            };
                        });
                        trip_data[0] = {
                            ...prevDataOne,
                            point_2_loco: tempData[0]?.point_2_loco,
                            point_2_loco_name: tempData[1]?.point_2_loco_name
                        };
                    } else if (id === 'to_time-starts0') {
                        const timeEnd = $(`#to_time-ends0`).val();
                        trip_data[0] = set_trip_data(prevDataOne, 'point_2_loco_time', inputValue);
                        const prevTimeData = trip_data[0];
                        trip_data[0] = set_trip_data(prevTimeData, 'point_2_loco_time_end', timeEnd);
                    } else if (id === 'from-select1') {
                        let tempData = [];
                        tempData.push(set_trip_data(prevDataTwo, 'point_1_loco', inputValue));
                        const options = input.querySelectorAll ? input.querySelectorAll('option') : [];
                        options.forEach(option => {
                            if (option.value === inputValue) {
                                tempData.push(set_trip_data(prevDataTwo, 'point_1_loco_name', option.innerText))
                            };
                        });
                        trip_data[1] = {
                            ...prevDataTwo,
                            point_1_loco: tempData[0]?.point_1_loco,
                            point_1_loco_name: tempData[1]?.point_1_loco_name
                        };
                    } else if (id === 'from_time-starts1') {
                        const timeEnd = $(`#from_time-ends1`).val();
                        trip_data[1] = set_trip_data(prevDataTwo, 'point_1_loco_time', inputValue);
                        const prevTimeData = trip_data[1];
                        trip_data[1] = set_trip_data(prevTimeData, 'point_1_loco_time_end', timeEnd);
                    } else if (id === 'to-select1') {
                        let tempData = [];
                        tempData.push(set_trip_data(prevDataTwo, 'point_2_loco', inputValue));
                        const options = input.querySelectorAll ? input.querySelectorAll('option') : [];
                        options.forEach(option => {
                            if (option.value === inputValue) {
                                tempData.push(set_trip_data(prevDataTwo, 'point_2_loco_name', option.innerText))
                            };
                        });
                        trip_data[1] = {
                            ...prevDataTwo,
                            point_2_loco: tempData[0]?.point_2_loco,
                            point_2_loco_name: tempData[1]?.point_2_loco_name
                        };
                    } else if (id === 'to_time-starts1') {
                        const timeEnd = $(`#to_time-ends1`).val();
                        trip_data[1] = set_trip_data(prevDataTwo, 'point_2_loco_time', inputValue);
                        const prevTimeData = trip_data[1];
                        trip_data[1] = set_trip_data(prevTimeData, 'point_2_loco_time_end', timeEnd);
                    }

                    localStorage.setItem('rentautobus_form_data', JSON.stringify(trip_data));
                };

                const multi_trip_data = (id, input) => {
                    const legIndex = parseInt(id.match(/\d+/)?.[0] || 0);
                    const trip_data = JSON.parse(localStorage.getItem('rentautobus_form_data')) || [];
                    const prevData = trip_data[legIndex] || {};

                    const inputValue = input.tagName === 'GMP-PLACE-AUTOCOMPLETE'
                        ? (input.getAttribute('data-address') || input.getAttribute('data-place-name') || '')
                        : input.value;

                    const lat = input.getAttribute ? input.getAttribute('data-lat') : null;
                    const lng = input.getAttribute ? input.getAttribute('data-lng') : null;
                    const iso = input.getAttribute ? input.getAttribute('data-country-iso') : null;

                    if (id.includes('from_date')) {
                        trip_data[legIndex] = set_trip_data(prevData, 'date', inputValue);
                    } else if (id.includes('from_time-hour')) {
                        trip_data[legIndex] = set_trip_data(prevData, 'time', inputValue);
                    } else if (id === `from${legIndex}`) {
                        trip_data[legIndex] = set_trip_data(prevData, 'point_1', inputValue);
                        if (lat) trip_data[legIndex].point_1_lat = lat;
                        if (lng) trip_data[legIndex].point_1_lng = lng;
                        if (iso) trip_data[legIndex].point_1_country_iso = iso;
                    } else if (id === `to${legIndex}`) {
                        trip_data[legIndex] = set_trip_data(prevData, 'point_2', inputValue);
                        if (lat) trip_data[legIndex].point_2_lat = lat;
                        if (lng) trip_data[legIndex].point_2_lng = lng;
                        if (iso) trip_data[legIndex].point_2_country_iso = iso;
                    } else if (id.includes('from-select')) {
                        let tempData = [];
                        tempData.push(set_trip_data(prevData, 'point_1_loco', inputValue));
                        const options = input.querySelectorAll ? input.querySelectorAll('option') : [];
                        options?.forEach(option => {
                            if (option.value === inputValue) {
                                tempData.push(set_trip_data(prevData, 'point_1_loco_name', option.innerText))
                            };
                        });
                        trip_data[legIndex] = {
                            ...prevData,
                            point_1_loco: tempData[0]?.point_1_loco,
                            point_1_loco_name: tempData[1]?.point_1_loco_name
                        };
                    } else if (id.includes('from_time-starts')) {
                        const timeEnd = calculate_end_time($(`#from-select${legIndex}`));
                        trip_data[legIndex] = set_trip_data(prevData, 'point_1_loco_time', inputValue);
                        const prevTimeData = trip_data[legIndex];
                        trip_data[legIndex] = set_trip_data(prevTimeData, 'point_1_loco_time_end', timeEnd);
                    } else if (id.includes('to-select')) {
                        let tempData = [];
                        tempData.push(set_trip_data(prevData, 'point_2_loco', inputValue));
                        const options = input.querySelectorAll ? input.querySelectorAll('option') : [];
                        options?.forEach(option => {
                            if (option.value === inputValue) {
                                tempData.push(set_trip_data(prevData, 'point_2_loco_name', option.innerText))
                            };
                        });
                        trip_data[legIndex] = {
                            ...prevData,
                            point_2_loco: tempData[0]?.point_2_loco,
                            point_2_loco_name: tempData[1]?.point_2_loco_name
                        };
                    } else if (id.includes('to_time-starts')) {
                        const timeEnd = calculate_end_time($(`#to-select${legIndex}`));
                        trip_data[legIndex] = set_trip_data(prevData, 'point_2_loco_time', inputValue);
                        const prevTimeData = trip_data[legIndex];
                        trip_data[legIndex] = set_trip_data(prevTimeData, 'point_2_loco_time_end', timeEnd);
                    }

                    localStorage.setItem('rentautobus_form_data', JSON.stringify(trip_data));
                };

                window.add_part = function(elButton) {
                    let multi_part = max_index(`#main_block_multi .main-trip`);
                    let last_parent = $('.form-multi').slice(-1)[0];

                    let last_trip_input = $(last_parent).find("[name='to']");

                    let last_trip_value = '';
                    if (last_trip_input.length) {
                        const lastElement = last_trip_input[0];
                        if (lastElement.tagName === 'GMP-PLACE-AUTOCOMPLETE') {
                            last_trip_value = lastElement.getAttribute('data-address') ||
                                             lastElement.getAttribute('data-place-name') ||
                                             lastElement.value || '';
                        } else {
                            last_trip_value = lastElement.value || '';
                        }
                    }

                    let parent = $("#main_block_multi");
                    let indexButton = elButton.attr('index');
                    let nextIndex = parseInt(indexButton) + 1;
                    elButton.attr('index', nextIndex);
                    rebuildIndexes(nextIndex, `.form-multi`);

                    $(parent).append(add_item20_block(
                        multi_part,
                        nextIndex,
                        last_trip_value.replace(/'/g, "&apos;"),
                        ...Array(4),
                        '#main_block_multi',
                        false,
                        1
                    ));

                    const newFromField = $(`#trip${multi_part}`).find("[name='from']");
                    if (last_trip_input.length && newFromField.length) {
                        if (window.copyProperties) {
                            window.copyProperties(last_trip_input, newFromField);
                        }
                    }

                    setTimeout(() => {
                        const newBlock = document.getElementById(`trip${multi_part}`);
                        if (newBlock && window.addBlurHandlersToBlock) {
                            window.addBlurHandlersToBlock(`trip${multi_part}`);
                        } else if (newBlock) {
                            // Fallback если функция не определена
                            const newInputs = newBlock.querySelectorAll('input, select, gmp-place-autocomplete');
                            newInputs.forEach(input => {
                                input.removeEventListener('blur', window.handleBlur);
                                input.addEventListener('blur', window.handleBlur);
                            });
                            console.log(`✅ Blur handlers added for ${newInputs.length} fields in block ${multi_part}`);
                        }
                    }, 100);

                    item20_select_on_change();
                    set_first_trash('.form-multi', '.delete-main');
                    $('#trip0').find('.delete-main').addClass('d-none');
                    $('.add-block').removeClass('d-none');
                    set_functionality_for_route();
                };

                $(".block_trip-types").on('click', '.add_part-btn', function () {
                    add_part($(this));
                });

                const get_multi_destination_length = () => {
                    const trip_data = JSON.parse(localStorage.getItem('rentautobus_form_data')) || [{}];
                    const multi_trip_block = $('#main_block_multi');
                    const legLength = multi_trip_block.find('[id*="trip"]').length;

                    return {
                        trip_data,
                        multi_trip_block,
                        legLength
                    };
                }

                const on_add_destination_click = () => {
                    const {
                        trip_data,
                        multi_trip_block,
                        legLength
                    } = get_multi_destination_length();

                    trip_data[legLength] = {
                        point_1: trip_data[legLength - 1]?.point_2,
                        point_1_country_iso: trip_data[legLength - 1]?.point_2_country_iso,
                        point_1_lat: trip_data[legLength - 1]?.point_2_lat,
                        point_1_lng: trip_data[legLength - 1]?.point_2_lng,
                    };

                    localStorage.setItem('rentautobus_form_data', JSON.stringify(trip_data));

                    const multi_trip_ids = [];

                    for (let i = 0; i < legLength + 1; i++) {
                        multi_trip_ids.push(`from${i}`);
                        multi_trip_ids.push(`to${i}`);
                        multi_trip_ids.push(`from_date${i}`);
                        multi_trip_ids.push(`from_time-hour${i}`);
                        multi_trip_ids.push(`from-select${i}`);
                        multi_trip_ids.push(`to-select${i}`);
                        multi_trip_ids.push(`from_time-starts${i}`);
                        multi_trip_ids.push(`to_time-starts${i}`);
                        multi_trip_ids.push(`from_time-ends${i}`);
                        multi_trip_ids.push(`to_time-ends${i}`);
                    };

                    setTimeout(() => {
                        inputBlur(multi_trip_ids);
                        clear_extra_time()
                        set_functionality_for_route();
                    }, 1);
                }

                $('.add-destination_item20').on('click', on_add_destination_click);

                const programmatically_add_destination = (trip_data = JSON.parse(localStorage.getItem('rentautobus_form_data'))) => {
                    const { legLength } = get_multi_destination_length();

                    if (localStorage.getItem('click_btn') === 'multi_trip') {
                        trip_data && trip_data.forEach((data, index) => {
                            if (legLength === trip_data.length) return;

                            if (index < trip_data.length - 1) {
                                add_part($('.add-destination'));
                            }
                        });
                    };
                };

                location.pathname.endsWith('/item20') && programmatically_add_destination();

                window.getAllFormData = () => {
                    const trip_data = JSON.parse(localStorage.getItem('rentautobus_form_data')) || [{}];
                    const click_btn = localStorage.getItem('click_btn');

                    let ids = [];

                    let datasToPush = (click_btn === 'return_trip') ? [
                        {
                            "from": trip_data[0]?.point_1,
                            "to": trip_data[0]?.point_2,
                            "from_date": trip_data[0]?.date,
                            "to_date": trip_data[1]?.date,
                            "from_time-hour": trip_data[0]?.time,
                            "to_time": trip_data[1]?.time,
                            "from-select0": trip_data[0]?.point_1_loco,
                            "from_time-starts0": trip_data[0]?.point_1_loco_time,
                            "from_time-ends0": trip_data[0]?.point_1_loco_time_end,
                            "to-select0": trip_data[0]?.point_2_loco,
                            "to_time-starts0": trip_data[0]?.point_2_loco_time,
                            "to_time-ends0": trip_data[0]?.point_2_loco_time_end,
                            "from-select1": trip_data[1]?.point_1_loco,
                            "from_time-starts1": trip_data[1]?.point_1_loco_time,
                            "from_time-ends1": trip_data[1]?.point_1_loco_time_end,
                            "to-select1": trip_data[1]?.point_2_loco,
                            "to_time-starts1": trip_data[1]?.point_2_loco_time,
                            "to_time-ends1": trip_data[1]?.point_2_loco_time_end,
                            "from_lat": trip_data[0]?.point_1_lat,
                            "from_lng": trip_data[0]?.point_1_lng,
                            "from_iso": trip_data[0]?.point_1_country_iso,
                            "to_lat": trip_data[0]?.point_2_lat,
                            "to_lng": trip_data[0]?.point_2_lng,
                            "to_iso": trip_data[0]?.point_2_country_iso,
                        }
                    ] : (click_btn === 'one_way') ? [
                        {
                            "from": trip_data[0]?.point_1,
                            "to": trip_data[0]?.point_2,
                            "from_date": trip_data[0]?.date,
                            "from_time-hour": trip_data[0]?.time,
                            "from-select": trip_data[0]?.point_1_loco,
                            "from_time-starts": trip_data[0]?.point_1_loco_time,
                            "from_time-ends": trip_data[0]?.point_1_loco_time_end,
                            "to-select": trip_data[0]?.point_2_loco,
                            "to_time-starts": trip_data[0]?.point_2_loco_time,
                            "to_time-ends": trip_data[0]?.point_2_loco_time_end,
                            "from_lat": trip_data[0]?.point_1_lat,
                            "from_lng": trip_data[0]?.point_1_lng,
                            "from_iso": trip_data[0]?.point_1_country_iso,
                            "to_lat": trip_data[0]?.point_2_lat,
                            "to_lng": trip_data[0]?.point_2_lng,
                            "to_iso": trip_data[0]?.point_2_country_iso,
                        }
                    ] :
                        trip_data.map((trip, index) => (
                            {
                                [`from${index}`]: trip_data[index]?.point_1,
                                [`to${index}`]: trip_data[index]?.point_2,
                                [`from_date${index}`]: trip_data[index]?.date,
                                [`from_time-hour${index}`]: trip_data[index]?.time,
                                [`from-select${index}`]: trip_data[index]?.point_1_loco,
                                [`from_time-starts${index}`]: trip_data[index]?.point_1_loco_time,
                                [`from_time-ends${index}`]: trip_data[index]?.point_1_loco_time_end,
                                [`to-select${index}`]: trip_data[index]?.point_2_loco,
                                [`to_time-starts${index}`]: trip_data[index]?.point_2_loco_time,
                                [`to_time-ends${index}`]: trip_data[index]?.point_2_loco_time_end,
                                [`from_lat${index}`]: trip_data[index]?.point_1_lat,
                                [`from_lng${index}`]: trip_data[index]?.point_1_lng,
                                [`from_iso${index}`]: trip_data[index]?.point_1_country_iso,
                                [`to_lat${index}`]: trip_data[index]?.point_2_lat,
                                [`to_lng${index}`]: trip_data[index]?.point_2_lng,
                                [`to_iso${index}`]: trip_data[index]?.point_2_country_iso,
                            }
                        ));

                    datasToPush.forEach(data => {
                        Object.entries(data).forEach(([key, value]) => {
                            ids.push(key);
                        });
                    });

                setTimeout(() => {
                    set_time_picker_options('input.datetimepicker');
                }, 1);

                    return { datasToPush, ids };
                }

                const { ids } = getAllFormData();

                inputBlur(ids);

                const set_local_data = (inputId, inputValue, leg) => {
                    const input = document.getElementById(inputId);

                    if (inputId === 'from') {
                        input.setAttribute('data-lat', leg.from_lat);
                        input.setAttribute('data-lng', leg.from_lng);
                        input.setAttribute('data-country-iso', leg.from_iso);
                    } else if (inputId === 'to') {
                        input.setAttribute('data-lat', leg.to_lat);
                        input.setAttribute('data-lng', leg.to_lng);
                        input.setAttribute('data-country-iso', leg.to_iso);
                    };

                    if (input) input.value = inputValue ? inputValue : '';
                };

                const set_local_multi_data = (inputId, inputValue, leg) => {
                    setTimeout(() => {
                        const input = document.getElementById(inputId);
                        const legIndex = parseInt(inputId.match(/\d+/)[0]);

                        if (inputId === `from${legIndex}`) {
                            input && input.setAttribute('data-lat', leg[`from_lat${legIndex}`]);
                            input && input.setAttribute('data-lng', leg[`from_lng${legIndex}`]);
                            input && input.setAttribute('data-country-iso', leg[`from_iso${legIndex}`]);
                        } else if (inputId === `to${legIndex}`) {
                            input && input.setAttribute('data-lat', leg[`to_lat${legIndex}`]);
                            input && input.setAttribute('data-lng', leg[`to_lng${legIndex}`]);
                            input && input.setAttribute('data-country-iso', leg[`to_iso${legIndex}`]);
                        };

                        if (input) input.value = inputValue ? inputValue : '';
                    }, 1);
                };

                const set_data_from_local = (data, click) => {
                    data.forEach(leg => {
                        Object.entries(leg).forEach(([key, value]) => {
                            if (click === 'multi_trip') {
                                set_local_multi_data(key, value, leg);
                            };
                            set_local_data(key, value, leg);
                        });
                    });
                };

                const toggleTransferDisplay = function (element, method = 'toggle') {
                    if (!location.pathname.endsWith('/item20')) return;

                    element?.querySelector('.transfer-container').classList[method]('d-none');
                    element?.querySelector('.transfer-select').classList[method]('d-none');
                    element?.querySelector('.transfer-plus').classList[method]('d-none');
                    element?.querySelector('.transfer-minus').classList[method]('d-none');
                };

                window.check_select_data = () => {
                    const trip_data = JSON.parse(localStorage.getItem('rentautobus_form_data')) || [{}];
                    const click_btn = localStorage.getItem('click_btn');
                    const select_data = [];

                    if (!location.pathname.endsWith('/item20')) return;

                    trip_data.forEach((leg, index) => {
                        if (leg.point_1_loco) {
                            const from_select = document.querySelector(`#from-select${click_btn === 'one_way' ? '' : index}`);
                            toggleTransferDisplay(from_select?.closest('.label-select-container', 'remove'))
                        }

                        if (leg.point_2_loco) {
                            const to_select = document.querySelector(`#to-select${click_btn === 'one_way' ? '' : index}`);
                            toggleTransferDisplay(to_select?.closest('.label-select-container', 'remove'))
                        }

                        if (leg.point_1_loco_time) {
                            const from_time = document.querySelector(`#from_time-starts${click_btn === 'one_way' ? '' : index}`);
                            const parentElement = from_time?.closest('.grid-starttime');
                            const siblingElement = parentElement?.nextElementSibling;
                            parentElement?.classList.remove('d-none');
                            siblingElement?.classList.remove('d-none');
                        }

                        if (leg.point_2_loco_time) {
                            const to_time = document.querySelector(`#to_time-starts${click_btn === 'one_way' ? '' : index}`);
                            // const to_time_ends = document.querySelector(`#to_time-ends${click_btn === 'one_way' ? '' : index}`);
                            const parentElement = to_time?.closest('.grid-starttime');
                            const siblingElement = parentElement?.nextElementSibling;
                            parentElement?.classList.remove('d-none');
                            siblingElement?.classList.remove('d-none');
                        }
                    })
                };

                check_select_data();

                $('.btn-group-request').on('click', function (e) {
                    const trip_data = JSON.parse(localStorage.getItem('rentautobus_form_data')) || [{}];
                    const click_btn = e.target.value;
                    const multi_trip_block = document.querySelector('#main_block_multi');
                    localStorage.setItem("click_btn", click_btn);

                    const { datasToPush, ids } = getAllFormData();

                    if (click_btn === 'multi_trip' && location.pathname.endsWith('/item20')) programmatically_add_destination(trip_data);

                    set_data_from_local(datasToPush, click_btn);
                    check_select_data();

                    if (click_btn === 'multi_trip') {
                        trip_data.forEach((data, index) => {
                            const trip_container = getMultiTripData(`trip${index}`);
                            trip_container?.querySelector('.from-multi')?.setAttribute('id', `from${index}`);
                            trip_container?.querySelector('.to-multi')?.setAttribute('id', `to${index}`);
                            trip_container?.querySelector('.set_date-btn')?.setAttribute('id', `from_date${index}`);
                            trip_container?.querySelector('.from_time-multi')?.setAttribute('id', `from_time-hour${index}`);
                            trip_container?.querySelector('.from-select-transfer')?.setAttribute('id', `from-select${index}`);
                            trip_container?.querySelector('.to-select-transfer')?.setAttribute('id', `to-select${index}`);
                            trip_container?.querySelector('.from-starts-time')?.setAttribute('id', `from_time-starts${index}`);
                            trip_container?.querySelector('.from-end-time')?.setAttribute('id', `from_time-ends${index}`);
                            trip_container?.querySelector('.to-starts-time')?.setAttribute('id', `to_time-starts${index}`);
                            trip_container?.querySelector('.to-end-time')?.setAttribute('id', `to_time-ends${index}`);
                        })
                    }

                    setTimeout(() => {
                        inputBlur(ids);
                    }, 1);
                });

                window.went_to_quote_creation = (lang) => {
                    $(`.next-page`).attr('disabled', true);
                    const trip_data = JSON.parse(localStorage.getItem('rentautobus_form_data'));
                    const click_btn = $(`.btn-group-active`).val();
                    localStorage.setItem("click_btn", click_btn);

                    for (let id of ids) {
                        let input = document.getElementById(id);
                        input !== null && setLocalStorageData(id, input);
                    };

                    if (click_btn === 'one_way') {
                        trip_data.length > 1 ? trip_data.splice(1) : trip_data;
                        localStorage.setItem('rentautobus_form_data', JSON.stringify(trip_data));
                    };

                    document.location.href = '/' + lang + '/item20';
                };

                $(".went_to_quote_creation-btn").click(function () {
                    const fromInput = $('.active-tab #from');
                    const toInput = $('.active-tab #to');
                    const from0Input = $('.active-tab #from0');
                    const to0Input = $('.active-tab #to0');

                    const proceedToQuote = [];

                    [fromInput, toInput, from0Input, to0Input].forEach((input) => {
                        if (input[0] !== undefined) {
                            if (
                                (!$(input[0]).attr('data-lat') || $(input[0]).attr('data-lat') === 'undefined')
                                && (!$(input[0]).attr('data-lng') || $(input[0]).attr('data-lng') === 'undefined')
                            ) {
                                $(input[0]).addClass('is-invalid')
                                    .parents('.input-container')
                                    .find('.maps-error')
                                    .addClass('d-block');
                                proceedToQuote.push(false);
                            } else {
                                proceedToQuote.push(true);
                            }
                        }
                    });

                    if (proceedToQuote.includes(false)) return;

                    went_to_quote_creation(lang = "en");
                });

                $('body').on('click', '.transfer-label', (event) => {
                    const label = event.target.closest('.transfer-label');
                    const parent = label.parentElement;
                    toggleTransferDisplay(parent)
                });

                $('body').on('click', '.transfer-label-c', (event) => {
                    const label = event.target.closest('.transfer-label-c');
                    const parent = label.parentElement;
                    toggleTransferDisplay(parent)
                });

                $("img .lazyload").lazyload();

                window.getMultiTripData = getMultiTripData;
                window.one_way_data = one_way_data;
                window.return_trip_data = return_trip_data;
                window.multi_trip_data = multi_trip_data;
                window.setLocalStorageData = setLocalStorageData;
            });

            
            document.addEventListener("allScriptsLoaded", () => {
                window.tripId = '';
                window.counterMains = 0;
                window.counterSubs = 0;
                window.monthNames = [];
                window.dayNames = [];
                window.company_currency_sign = '';
                window.company_currency_commission = '';
                window.en_month_names = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
                window.en_day_names = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];

                window.edit_functional = () => {
                    calculation_transfers_time('.popup-quote');

                    $('.popup-quote [type=number]').on('input', function () {
                        this.value = Math.abs(this.value)
                    });
                }

                window.get_format_date = (id) => {
                    let date = new Date($(`#trip_date${id}`).text());
                    let day = date.getDate();
                    if (day < 10) day = `0${day}`;
                    let month = date.getMonth() + 1;
                    if (month < 10) month = `0${month}`;
                    let year = date.getFullYear();
                    let formatDate = `${year}-${month}-${day}`;
                    $(`#departure_date${id}`).val(formatDate);
                }

                window.calculating_garages_estimates = () => {
                    $(`#bus_type_mod`).attr('disabled', true);
                    set_spinner();

                    let selGarage = document.getElementById("bus_garage");
                    let garageValue = selGarage.value;

                    let data = {
                        'first_point': $('.from_point:first').text(),
                        'last_point': $('.to_point:last').text(),
                        'garage_id': garageValue,
                
                };

                if (garageValue) send_request('POST', 'api/company/garage_data/', data, false, (response) => {
                    
                if (response.status === 1) {
                            $(`.garage-block`).removeClass('d-none');

                            let vehicles_details = response.vehicles;

                            for (let i = 0; i < vehicles_details.length; i++) {
                                let current_vehicle = vehicles_details[i];
                                for (let key in current_vehicle) {
                                    if (current_vehicle[key] === null) current_vehicle[key] = 0;
                                }
                            }

                            $('.tripGarageFromValue, .tripGarageEndToValue').text('kop.Over het voertuig, ' + response.garage_point_name);

                            $('.first_garage_drive_leg').text(Math.round(response.first_drive_leg) + ' km');
                            $('.first_garage_drive_time').text(response.first_drive_time + ' hours');

                            $('.last_garage_drive_leg').text(Math.round(response.last_drive_leg) + ' km');
                            $('.last_garage_drive_time').text(response.last_drive_time + ' hours');

                            $('#bus_type_mod').empty();
                            if (response.vehicles.length) {
                                let option = '<option value="none" h_drive_empty="0" k_drive_empty="0" h_drive_pass="0" k_in_one="0" k_extra="0" selected disabled hidden>Select your bus</option>';
                                for (let i = 0; i < response.vehicles.length; i++) {
                                    option += `<option value='${response.vehicles[i].bus__id}' h_drive_empty='${response.vehicles[i].bus__cost_variables__hourly_rate_driving_empty}' k_drive_empty='${response.vehicles[i].bus__cost_variables__rate_kilometers_driving_empty}' h_drive_pass='${response.vehicles[i].bus__cost_variables__hourly_rate_driving_passengers}' k_in_one='${response.vehicles[i].bus__cost_variables__kilometers_included_in_1_h}' k_extra='${response.vehicles[i].bus__cost_variables__rate_extra_kilometers}' >${response.vehicles[i].annotation_name}  ${response.vehicles[i].bus__passengers} ${response.seats} / ${response.vehicles[i].bus__luggage} ${response.luggage}</option>`;
                                }
                                $('#bus_type_mod').append(option);
                                $(`#bus_type_mod`).attr('disabled', false);
                            }
                            remove_spinner();
                        }
                    });
            }

        $('#bus_type_mod').on('change', function () {
                $('#assist-me').tooltip('dispose')

                $.ajax({
                    url: '/api/company/get_trip_price/',
                    type: "GET",
                    data: 'vehicle=' + $(this).val() + '&garage=' + $('#bus_garage').val() + '&trip=' + $('#send_quote').attr('trip_id') + '&lang=' + $('html').attr('lang')
                })
                    .done(function (response) {
                        if (response.message === 'OK') {
                            $('#assist-me')
                                .attr('title', response.template)
                                .show()
                                .tooltip({
                                    trigger: 'click',
                                    html: true,
                                    boundary: 'window',
                                    template: '<div class="tooltip estimate-price-tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>'
                                });
                        } else {
                            $('#assist-me').hide();
                        }
                    })
                    .fail(function () {
                    })
            });

            if ($('#assist-me').length) {
                $(document).on('click', '#assist-me', function () {
                    $('#send_quote').attr('data-mode', 2);
                });
            }

            $(document).mouseup(function (e) {
                let container = $(".estimate-price-tooltip");

                if (!container.is(e.target) && container.has(e.target).length === 0) {
                    $(container).tooltip('hide');
                }
            });

            window.bus_type = () => {
                let first_garage_drive_time = $('.first_garage_drive_time').first().text();
                let first_garage_drive_leg = $('.first_garage_drive_leg').first().text();
                let last_garage_drive_time = $('.last_garage_drive_time').first().text();
                let last_garage_drive_leg = $('.last_garage_drive_leg').first().text();

                let h_drive_empty = $('#bus_type_mod option:checked').attr('h_drive_empty');
                let k_drive_empty = $('#bus_type_mod option:checked').attr('k_drive_empty');

                $('.from_garage_hourly_rate').text(`${first_garage_drive_time} x ${company_currency_sign}${h_drive_empty}`);
                let from_garage_hourly_cost = parseFloat(first_garage_drive_time.slice(0, -6)) * parseFloat(h_drive_empty);
                $('.from_garage_hourly_cost').text(`${company_currency_sign}` + `${from_garage_hourly_cost.toFixed(2)}`);

                $('.from_garage_kilometers_rate').text(`${first_garage_drive_leg} x ${company_currency_sign}${k_drive_empty}`);
                let from_garage_kilometers_cost = parseFloat(first_garage_drive_leg.slice(0, -3)) * parseFloat(k_drive_empty);
                $('.from_garage_kilometers_cost').text(`${company_currency_sign}` + `${from_garage_kilometers_cost.toFixed(2)}`);

                let from_garage_total_price = from_garage_kilometers_cost + from_garage_hourly_cost;
                $('.from_garage_total_price').text(`${company_currency_sign}${from_garage_total_price.toFixed(2)}`);
                $('#from_garage_driving_price').val(from_garage_total_price.toFixed(2));

                $('.to_garage_hourly_rate').text(`${last_garage_drive_time} x ${company_currency_sign}${h_drive_empty}`);
                let to_garage_hourly_cost = parseFloat(last_garage_drive_time.slice(0, -6)) * parseFloat(h_drive_empty);
                $('.to_garage_hourly_cost').text(`${company_currency_sign}` + `${from_garage_hourly_cost.toFixed(2)}`);

                $('.to_garage_kilometers_rate').text(`${last_garage_drive_leg} x ${company_currency_sign}${k_drive_empty}`);
                let to_garage_kilometers_cost = parseFloat(last_garage_drive_leg.slice(0, -3)) * parseFloat(k_drive_empty);
                $('.to_garage_kilometers_cost').text(`${company_currency_sign}` + `${to_garage_kilometers_cost.toFixed(2)}`);

                let to_garage_total_price = to_garage_kilometers_cost + to_garage_hourly_cost;
                $('.to_garage_total_price').text(`${company_currency_sign}${to_garage_total_price.toFixed(2)}`);

                $('#to_garage_driving_price').val(to_garage_total_price.toFixed(2));

                $(`.main-trip`).each(function () {
                    calculate_route_tooltip(this);
                });
            }

            window.set_multi_edit = (id, index, last_trip = '', last_trip_second = '', date = '', time = '', transfers = '', parent_is, with_transfers, info_num, gmap = [], trip_type = '') => {
                const lat1 = gmap.length > 0 && gmap[0];
                const lng1 = gmap.length > 0 && gmap[1];
                const iso1 = gmap.length > 0 && gmap[2];

                const lat2 = gmap.length > 0 && gmap[3];
                const lng2 = gmap.length > 0 && gmap[4];
                const iso2 = gmap.length > 0 && gmap[5];

                let html_from_select = `<div class="grid-selector select"><label class="t-14 transfer-label m-0 font-bold " for="from-select${id}"><i class="fas fa-plus transfer-plus pr-2"></i><i class="fas fa-minus transfer-minus pr-2 d-none"></i>Add local bus service</label><select name="" id="from-select${id}" class="form-control transfer-select d-none tour-select "><option selected="selected" value="">Please select...</option></select></div>`;
                let html_to_select = `<div class="grid-selector select"><label class="t-14 transfer-label m-0 font-bold " for="to-select${id}"><i class="fas fa-plus transfer-plus pr-2"></i><i class="fas fa-minus transfer-minus pr-2 d-none"></i>Add local bus service</label><select name="" id="to-select${id}" class="form-control transfer-select d-none tour-select "><option selected="selected" value="">Please select...</option></select></div>`;

                if (transfers) {
                    html_from_select = `<div class="grid-selector select"><p class="t-14 m-0 font-bold">Select a tour/ transfer</p><select id="from-select${id}" class="form-control tour-select">
                                                ${transfers}
                                                </select></div>`;
                    html_to_select = `<div class="grid-selector select font-bold"><p class="t-14 m-0">Select a tour/ transfer</p><select id="to-select${id}" class="form-control tour-select">
                                                ${transfers}
                                                </select></div>`;
                }

                const multi_trip_readonly = (trip_type === 'multi_trip' || +trip_type === 3) && id > 0;
                const return_trip_readonly = (trip_type === 'return_trip' || +trip_type === 1) && id > 0;

                const readonly = multi_trip_readonly || return_trip_readonly ? 'readonly' : '';

                return `<div id="trip${id}" class="last-tab main-trip form-multi border-box-sizing position-is-relative border-r-3px" index='${index}'><div class="grid-multi col"><div class="grid-from"><div id='' class='input-container '><div class="col p-0 font-bold t-14"><label class=" t-18 bold-text m-0" message="" for="from${id}">
                From
                <span class="text-danger">*</span></label><div class="input-group flex-column mb-0"><input type="text" name='from'
                       class="rounded form-control w-100 t-14   autocomplete-added"
                       placeholder='enter streetname, place, country' id='from${id}' value='${last_trip}' 
                       data-lat="${lat1}" 
                       data-lng="${lng1}"
                       data-country-iso="${iso1}"
                       required ${readonly}><span class="required-error red">Field is required</span><span class="maps-error red">Please select from the list</span></div></div></div></div><div class="grid-to"><div id='' class='input-container multi-to'><div class="col p-0 font-bold t-14"><label class=" t-18 bold-text m-0" message="" for="to${id}">
                To
                <span class="text-danger">*</span></label><div class="input-group flex-column mb-0"><input type="text" name='to'
                       class="rounded form-control w-100 t-14   autocomplete-added"
                       placeholder='enter streetname, place, country' id='to${id}' value='${last_trip_second}' 
                       data-lat="${lat2}" 
                       data-lng="${lng2}"
                       data-country-iso="${iso2}"
                       required ${return_trip_readonly && "readonly"}><span class="required-error red">Field is required</span><span class="maps-error red">Please select from the list</span></div></div></div></div><div class="grid-dateA"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_date${id}">Departure date <span class="text-danger">*</span></label><input type="date" class="w-100 departure form-control set_date-btn" aria-describedby="basic-addon1" id='from_date${id}' value='${date}' name="" required onkeydown="return false"><span class="required-error red">Field is required</span></div></div><div class="grid-timeA"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-hour${id}">Departure time <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control "
            placeholder='12:00'
            id='from_time-hour${id}'
            value='${time}'
            name=""
            required
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-checkerAF transfer flex align-items-start m-0"><label class="checkbox"><input id="tourFromChecked${id}" child_id="from_time-starts${id} from_time-starts${id}" type="checkbox" onclick="set_transfer_checkbox(this)"><i class="fa fa-check" aria-hidden="true"></i></label> I need tour or transfer
                                <div class="toggle-transfer w-100 display-none"><div class="transfer-container w-100">
                                        ${html_from_select}
                                        <div class="grid-starttime starts"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-starts${id}">Starts <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control from-time"
            placeholder='00:00'
            id='from_time-starts${id}'
            value=''
            name=""
            
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-endtime ends"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="from_time-ends${id}">Ends <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control end-time"
            placeholder='01:00'
            id='from_time-ends${id}'
            value=''
            name=""
            disabled
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div></div></div></div><div class="grid-checkerBF transfer flex align-items-start m-0"><label class="checkbox"><input id="tourToChecked${id}" child_id="to_time-starts${id} to_time-starts${id}" type="checkbox" onclick="set_transfer_checkbox(this)"><i class="fa fa-check" aria-hidden="true"></i></label> I need tour or transfer
                                <div class="toggle-transfer w-100 display-none"><div class="transfer-container w-100">
                                        ${html_to_select}
                                        <div class="grid-starttime starts"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="to_time-starts${id}">Starts <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control from-time"
            placeholder='00:00'
            id='to_time-starts${id}'
            value=''
            name=""
            
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div><div class="grid-endtime ends"><div class="t-14 font-bold mob-width-date input-container "><label class="t-14 m-0" for="to_time-ends${id}">Ends <span class="text-danger">*</span></label><input
            class="datetimepicker timepicker w-100 form-control end-time"
            placeholder='01:00'
            id='to_time-ends${id}'
            value=''
            name=""
            disabled
            onkeydown="return false"
            type="text"
            required
    ><span class="required-error red">Field is required</span></div></div></div></div></div><div class="justify-content-center add-block d-none"><button type="button"
                                id="button_off"
                                class="btn add_block_plus-btn"
                                index='${index}'
                                
                                ><i class="fas fa-plus tablet-none"></i><span class="text-uppercase text-white tablet-on">Add route</span></button></div><div class="delete-main"><button class="btn d-none btn-outline-danger position_corner position-is-absolute pointer" id="delete_step_${id}" onclick="delete_step(${id})"><i class="far fa-trash-alt"></i></button></div></div>`;
            }

            window.calculate_route_tooltip = (main_container) => {
                let driving_time = $(main_container).find('.drive_time').text();
                let driving_length = $(main_container).find('.drive_length').text();
                let h_drive_pass = $('#bus_type_mod option:checked').attr('h_drive_pass');
                let k_in_one = $('#bus_type_mod option:checked').attr('k_in_one');
                let k_extra = $('#bus_type_mod option:checked').attr('k_extra');

                $(main_container).find('.hourly_cost_calculation').text(`${driving_time} x ${company_currency_sign}${h_drive_pass}`);
                let hourly_cost = +(driving_time.split(' ')[0].replace(/:/g, ".")) * +(h_drive_pass);
                $(main_container).find('.hourly_cost').text(`${company_currency_sign}` + `${hourly_cost.toFixed(2)}`);

                $(main_container).find(`.estimated_km`).text(driving_length);
                let estimated_km = +($(main_container).find(`.estimated_km`).text().split(' ')[0]);

                $(main_container).find('.total_km_included_calculation').text(`${driving_time} x ${k_in_one} km`);
                let total_include_driving = +(driving_time.split(' ')[0].replace(/:/g, ".")) * +(k_in_one);
                $(main_container).find('.total_km_included').text(total_include_driving.toFixed(2) + ' km');

                $(main_container).find(`.estimated_total_km`).text((estimated_km - total_include_driving).toFixed(2) + ' km');

                $(main_container).find('.cost_per_extra_calculation').text($(main_container).find(`.estimated_total_km`).text() + ` x ${company_currency_sign}` + k_extra);
                let cost_per_extra_calculation = estimated_km * +(k_extra);
                $(main_container).find('.cost_per_extra').text(`${company_currency_sign}` + `${cost_per_extra_calculation.toFixed(2)}`);

                let first_for_total = +($(main_container).find('.cost_per_extra').text().substr(1));
                let second_for_total = +($(main_container).find('.hourly_cost').text().substr(1));
                $(main_container).find('.total_tooltip').text(`${company_currency_sign}` + `${(first_for_total + second_for_total).toFixed(2)}`);

                $(main_container).find(`input[id^='driving_']`).attr('placeholder', $(main_container).find('.total_tooltip').text());
            }

            window.set_price_in_one = () => {
                $(`.total_day_value, .abroad_total_day_value, .trip_price, .abroad_trip_price`).text('').attr('value', '');
                $(`.total-amount`).addClass('hide-element');
                $(`.total-amount-prices`).removeClass('hide-element');
                $(`.total-amount-prices .totals_price`).attr('required', true);
                $(`.amount-price-remove, .abroad-price`).remove();
                auto_sum();
            }

            window.reset_price_in_one = () => {
                $(`.total-amount`).removeClass('hide-element');
                $(`.total-amount-prices`).addClass('hide-element');
                $(`.total-amount-prices .totals_price, .total-amount-prices .totals_other_costs`).removeAttr('required');
            }

            window.extra_change = (el, name) => {
                if (el.value == 3) {
                    $(el).parents(`.${name}_row`).find('.amount-price-remove').toggleClass('hide-element', false);
                } else {
                    $(el).parents(`.${name}_row`).find('.amount-price-remove').toggleClass('hide-element', true);
                }

                if ($(el).val() !== '3') {
                    $(el).parents(`.${name}_row`).find(`[id^='${name}_price']`).val('');
                    auto_sum();
                }
            }

            window.btn_close_popup = () => {
                $(`.trips-block`).empty();
                $(`.garage-block`).addClass('d-none');
                $(`.is-open .first-trip-date`).remove();
                if ($('#bus_garage option').length > 1) $('#bus_garage').val('none');
                $('#bus_type_mod').val('none').attr('disabled', 'disabled');
                $(`.summary-prices span, .summary-prices .abroad_vat`).text('');

                if ($(`#editor_mode_on`).is(`:checked`)) $(`#editor_mode_on`).trigger('click');
                if ($(`#vat_check`).is(`:checked`)) $(`#vat_check`).trigger('click');

                reset_price_in_one();
                close_general_popup();

                localStorage.removeItem('routes');
            }

            window.calculate_driving_price = (el, counter) => {
                let price = $(`#driving_price${counter}`).attr('placeholder');
                $(`#route_price${counter}`).val(price.substr(1));

                auto_sum();
            }

            window.change_mode = (x) => {
                $(x).next().toggleClass('public-checked');
                $(`.add_edit, .subversion-alert`).toggleClass('hide-element');
                $(`.driving-calculation`).toggleClass('hide-element');
                $(`.main-prices`).toggleClass('align-items-baseline align-items-center');

                if (x.checked === true) {
                    $(`#send_quote .button-name`).text('Create quote');
                    $(`#group_size_mod`).removeAttr('disabled');
                } else {
                    $('.discharge').addClass('d-none');
                    $('.normal').removeClass('d-none');
                    $(`#send_quote .button-name`).text('Send quote');
                    $(`#group_size_mod`).attr("disabled", true);
                    let steps_for_delete = [];
                    $(`.main-trip`).each(function () {
                        let id_counter = $(this).attr('id').replace('trip', '');
                        if ($(`.tripToValue${id_counter}`).text() === '') steps_for_delete.push(id_counter);
                    });
                    if (steps_for_delete.length > 0) {
                        steps_for_delete.forEach(element => delete_step(element));
                        rebuildIndexes(0, `.main-trip`, true);
                    }
                }
            }

            window.display_vat = (x) => {
                $(`.to-header`).toggleClass('col-lg-3 col-lg-5');
                $(`.in-land-cost`).toggleClass('col-lg-6 col-lg-2');
                $(`.abroad`).toggleClass('hide-element');
                $(x).next().toggleClass('public-checked');
                $(`.edit-setter-main`).toggleClass('col-lg-4 col-lg-2');
                $(`.summary-prices`).toggleClass('justify-content-end justify-content-between');
            }

            window.changes_mode = (id) => {
                let vat_checked = $(`#vat_check`).is(`:checked`);

                $(`#edit_mode${id}`).removeClass('d-none');
                $(`#normal_mode${id}`).addClass('d-none');

                $(`#route_setter${id}`).val($(`#route_price${id}`).val());
                if (vat_checked) $(`#abroad_route_setter${id}`).val($(`#abroad_route_price${id}`).val());

                let isFromChecked = $(`#tourFromChecked${id}`).prop("checked");
                let isToChecked = $(`#tourToChecked${id}`).prop("checked");

                if (isFromChecked || isToChecked) {
                    $(`#transfer_setter${id}`).val($(`#transfer_price${id}`).val());
                    if (vat_checked) $(`#abroad_transfer_setter${id}`).val($(`#transfer_abroad_price${id}`).val());
                }
            }

            window.delete_step = (id) => {
                let deletingIndex = $(`#trip${id}`).attr('index');
                $(`#trip${id}`).remove();
                let routesWithIndex = $(`.main-trip[index=${deletingIndex}]`).length;
                const mainTrip = $('.main-trip');

                const trip_data = JSON.parse(localStorage.getItem('rentautobus_form_data'));

                if (trip_data) {
                    trip_data.splice(id, 1);
                    location.pathname.endsWith('/item20') && localStorage.setItem('rentautobus_form_data', JSON.stringify(trip_data));
                }

                mainTrip.each(function (index, trip) {
                    if (index === 0 || index === mainTrip.length - 1) {
                        trip.querySelector('button.pointer').classList.remove('d-none');
                    } else {
                        trip.querySelector('button.pointer').classList.add('d-none');
                    }
                });

                if (routesWithIndex !== 0) {
                    if (routesWithIndex === 1) {
                        let element = $(`.main-trip[index=${deletingIndex}]`);
                        $(element).find('.trip_header').removeClass('hide-element');
                        $(element).find('.trip_span').removeClass('hide-element');
                        $(element).find('.trip-count').text('1');
                        $(element).find('.total_day').removeClass('hide-element');
                        $(element).find(`.day_price`).addClass('total_day_value');
                        $(element).find(`.abroad_day_price`).addClass('abroad_total_day_value');
                    } else {
                        $(`.main-trip[index=${deletingIndex}]`).each(function (index, element) {
                            if (index === (routesWithIndex - 1)) {
                                let lastTripNumber = $(element).prev().find('.new-trip.trip-count').text();
                                let tripCount = Number(lastTripNumber) + 1;
                                $(element).find('.trip-count').text(tripCount);
                                $(element).find('.total_day').removeClass('hide-element');
                                $(element).find('.main-total').addClass(`day_price total_day_value`);
                                $(element).find('.abroad-total').addClass(`abroad_day_price abroad_total_day_value`);
                            } else {
                                if (routesWithIndex === 0) { $(element).find('.new-trip.trip-count').text('1'); }
                                else {
                                    let lastTripNumber = $(element).prev().find('.new-trip.trip-count').text();
                                    let tripCount = Number(lastTripNumber) + 1;
                                    $(this).find('.trip-count').text(tripCount);
                                }
                                $(element).find('.main-total').removeClass('day_price total_day_value');
                                $(element).find('.abroad-total').removeClass('abroad_day_price abroad_total_day_value');
                                $(element).find('.total_day').addClass('hide-element');
                                $(element).find('.trip_span').addClass('hide-element');
                                $(element).find('.trip_header').addClass('hide-element');
                            }
                        });
                    }
                }

                set_first_trash(`.main-trip`, `.delete-block`);
                auto_sum();
            }

            window.date_difference = (sub_id) => {
                if (sub_id !== 0) {
                    let parent = $(`#departure_date${sub_id}`).parents('.main-trip').prev();

                    let date1 = new Date($(parent).find('.main-trip-edit input[type="date"]').val());
                    let date2 = new Date($(`#departure_date${sub_id}`).val());
                    let day1 = date1.getDate();
                    let day2 = date2.getDate();
                    let month1 = date1.getMonth();
                    let month2 = date2.getMonth();

                    if (day1 === day2 && month1 === month2) {
                        let index = $(parent).attr('index');
                        let newDay = $(parent).find('.day').text();
                        let lastTrip = +($(parent).find('.new-trip').text());
                        
                        $(`.trip_number${sub_id}`).text(lastTrip + 1);

                        let arr = [];
                        $(`.day`).each(function () {
                            if ($(this).text() === newDay) arr.push(this);
                        });

                        for (let i = 0; i < arr.length; i++) {
                            $(arr[i]).parents('.main-trip').find('.trip-count').text(i + 1);
                            $(arr[i]).parents('.main-trip').find('.main-total').removeClass('day_price total_day_value');
                            $(arr[i]).parents('.main-trip').find('.abroad-total').removeClass('abroad_day_price abroad_total_day_value');
                            $(arr[i]).parents('.main-trip').find('.total_day').addClass('hide-element');
                            $(arr[i]).parents('.main-trip').find('.trip_span').addClass('hide-element');
                            $(arr[i]).parents('.main-trip').find('.trip_header').addClass('hide-element');
                            $(arr[i]).parents('.main-trip').attr('index', index);
                        }

                        let first = arr[0];
                        let lastChild = arr.slice(-1)[0];

                        $(first).parents('.main-trip').find('.trip_span').removeClass('hide-element');
                        $(first).parents('.main-trip').find('.trip_header').removeClass('hide-element');
                        $(lastChild).parents('.main-trip').find('.total_day').removeClass('hide-element');
                        $(lastChild).parents('.main-trip').find('.main-total').addClass(`day_price`);
                        $(lastChild).parents('.main-trip').find(`.day_price`).addClass('total_day_value');
                        $(lastChild).parents('.main-trip').find('.abroad-total').addClass(`abroad_day_price`);
                        $(lastChild).parents('.main-trip').find(`.abroad_day_price`).addClass('abroad_total_day_value');
                    }
                    else {
                        let previousDay = +($(`#departure_date${sub_id}`).parents('.main-trip').prev().find('.day').text());
                        let Difference_In_Time = date2.getTime() - date1.getTime();
                        let Difference_In_Days = Difference_In_Time / (1000 * 3600 * 24);
                        let newDay = previousDay + Difference_In_Days;
                        
                        $(`.trip_number${sub_id}`).text(1);

                        let arr = $(`.day:contains(${newDay})`);
                        $(arr[0]).parents('.main-trip').find(`.trip_span`).removeClass('hide-element');
                        $(arr[0]).parents('.main-trip').find(`.trip_header`).removeClass('hide-element');
                        $(arr[0]).parents('.main-trip').find(`.total_day`).removeClass('hide-element');
                        $(arr[0]).parents('.main-trip').find('.main-total').addClass(`day_price`);
                        $(arr[0]).parents('.main-trip').find(`.day_price`).addClass('total_day_value');
                        $(arr[0]).parents('.main-trip').find('.abroad-total').addClass(`abroad_day_price`);
                        $(arr[0]).parents('.main-trip').find(`.abroad_day_price`).addClass('abroad_total_day_value');
                    }
                } else $(`.trip_number${sub_id}`).text('1');
            }

            window.check_is_validate = (trip, sub_id) => {
                if (trip) {
                    let from = $(`#from${sub_id}`).val();
                    let to = $(`#to${sub_id}`).val();
                    let date = $(`#departure_date${sub_id}`).val();
                    let time = $(`#departure_time${sub_id}`).val();

                    let isFromEmpty = (!(from === '' || from === undefined));
                    let isToEmpty = (!(to === '' || to === undefined));
                    let isDateEmpty = (!(date === '' || date === undefined));
                    let isTimeEmpty = (!(time === '' || time === undefined));

                    return isFromEmpty && isToEmpty && isDateEmpty && isTimeEmpty;
                }
            }

            window.check_time = (idFrom, idTo) => {
                let elementFrom = document.getElementById(idFrom);
                let elementTo = document.getElementById(idTo);

                let date = new Date($(elementFrom).val());
                let day = date.getDate();
                let month = monthNames[date.getMonth()];
                let weekday = dayNames[date.getDay()];
                let year = date.getFullYear();

                $(elementTo).text(`${weekday}, ${month} ${day}, ${year}`);
                if (idTo.slice(0, -1) === 'trip_date') {
                    let parent = $(elementTo).parents('.main-trip');
                    let start_date = $(parent).prev().length ? $(parent).find('.start_date') : $(`.first-trip-date .start_date`);
                    $(start_date).text(`${weekday}, ${month} ${day}, ${year}`);
                }
            }

            window.format_AMPM = (idFrom, idTo) => {
                let elementFrom = document.getElementById(idFrom);
                let elementTo = document.getElementById(idTo);

                let time = $(elementFrom).val();
                let hours = time.split(':')[0];
                let minutes = time.split(':')[1];
                let ampm = 'PM';
                if (hours > 12) {
                    hours -= 12;
                    hours = (hours < 10) ? '0' + hours : hours;
                } else {
                    hours = (String(hours) === '00') ? 12 : hours;
                    ampm = 'AM';
                }
                let strTime = hours + ':' + minutes + ' ' + ampm;
                $(elementTo).text(strTime);
            }

            window.format_from_AMPM = (fullTime) => {
                let time = fullTime.split(' ')[0];
                let format = fullTime.split(' ')[1];
                let hours = +(time.split(':')[0]);
                let minutes = time.split(':')[1];
                if (format === 'PM' || format === 'pm') hours += 12;
                hours = (hours === 12 && (format === 'am' || format === 'AM')) ? '00' : hours;

                return hours + ':' + minutes;
            }

            window.time_difference = (first_time, second_time, current_date, future_date, id, sub_id) => {
                let format_from_time = format_from_AMPM(first_time);
                let format_from_time_hours = +(format_from_time.split(':')[0]);
                let format_from_time_minutes = +(format_from_time.split(':')[1]);
                let second_time_hours = +(second_time.split(':')[0]);
                let second_time_minutes = +(second_time.split(':')[1]);

                let new_time_hours = format_from_time_hours + second_time_hours;
                let new_time_minutes = format_from_time_minutes + second_time_minutes;
                let ampm = first_time.split(' ')[1];

                if (new_time_minutes > 60) {
                    while (new_time_hours > 0 && new_time_minutes > 60) {
                        new_time_minutes -= 60;
                        new_time_hours++;
                    }
                }

                if (new_time_hours >= 24) {
                    let days_counter = 0;

                    while (new_time_hours > 0 && new_time_hours >= 24) {
                        days_counter++;
                        new_time_hours -= 24;
                        ampm = (ampm === 'pm' || ampm === 'PM') ? 'AM' : 'PM';
                    }

                    if (days_counter > 1 && future_date && sub_id) {
                        let current_date = new Date(current_date);
                        let day = +(current_date.getDate());

                        let next_date = new Date(future_date);
                        let future_day = +(next_date.getDate());

                        if (future_day - day < days_counter) {
                            next_date.setDate(next_date.getDate() + days_counter);

                            future_day = +(next_date.getDate());
                            let future_month = monthNames[next_date.getMonth()];
                            let future_weekday = dayNames[next_date.getDay()];
                            let future_year = next_date.getFullYear();

                            $(`#trip${sub_id} #trip_date${sub_id}`).text(`${future_weekday}, ${future_month} ${future_day}, ${future_year}`);
                        }
                    }

                } else if (new_time_hours >= 12) {
                    new_time_hours -= 12;
                    ampm = (ampm === 'pm' || ampm === 'PM') ? 'AM' : 'PM';
                }

                new_time_hours = (String(new_time_hours) === '0') ? 12 : new_time_hours;

                if (new_time_hours < 10) new_time_hours = "0" + new_time_hours;
                if (new_time_minutes < 10) new_time_minutes = "0" + new_time_minutes;

                return new_time_hours + ':' + new_time_minutes + ' ' + ampm;
            }

            function change_places(id) {
                let from_place = $(`#from${id}`).val();
                let to_place = $(`#to${id}`).val();

                let prev_element = $(`#trip${id}`).prev();
                let next_element = $(`#trip${id}`).next();

                let latest_bus = $(`#bus_type_mod`).val();

                if (prev_element.length !== 0 && next_element.length !== 0) {
                    let prev_id = $(prev_element).attr('id').replace('trip', '');
                    let next_id = $(next_element).attr('id').replace('trip', '');

                    $(prev_element).find(`.tripToValue${prev_id}`).text(from_place);
                    $(next_element).find(`.tripFromValue${next_id}`).text(to_place);
                    $(prev_element).find(`#to${prev_id}`).val(from_place);
                    $(next_element).find(`#from${next_id}`).val(to_place);

                    calculating_estimates(prev_id);
                    calculating_estimates(next_id);
                } else if (prev_element.length === 0 && next_element.length !== 0) {
                    let next_id = $(next_element).attr('id').replace('trip', '');

                    $(next_element).find(`.tripFromValue${next_id}`).text(to_place);
                    $(next_element).find(`#from${next_id}`).val(to_place);
                    $(`#trip${id} .tripGarageToValue`).text(from_place);

                    $(`.tripGarageToValue`).text(from_place);

                    calculating_garages_estimates();
                    calculating_estimates(next_id);
                } else if (prev_element.length !== 0 && next_element.length === 0) {
                    let prev_id = $(prev_element).attr('id').replace('trip', '');

                    $(prev_element).find(`#to${prev_id}`).val(from_place);

                    calculating_estimates(prev_id);

                    $(`.tripGarageEndFromValue`).text(to_place);
                    calculating_garages_estimates();
                } else {
                    $(`.tripGarageToValue`).text(from_place);
                    $(`.tripGarageEndFromValue`).text(to_place);
                    calculating_garages_estimates();
                }

                if ($(`#bus_type_mod`).val()) {
                    setTimeout(function () {
                        $(`#bus_type_mod option[value='${latest_bus}']`).attr('selected', true);
                        $(`#bus_type_mod`).val(latest_bus);
                    }, 1000)
                }
            }

            function calculating_estimates(id) {
                let data = {
                    'from_point': $(`.tripFromValue${id}`).text(),
                    'to_point': $(`.tripToValue${id}`).text(),
                };
                send_request('POST', `/get_route_estimates/`, data, false, (response) => {
                    if (response.status === 1) {
                        let route_length = response.leg;
                        let route_time = response.time;

                        $(`#normal_mode${id} .drive_length`).text(Math.round(route_length / 1000) + ' km');
                        $(`#normal_mode${id} .drive_time`).text(route_time + ' hours');

                        let current_date = $(`#trip_date${id}`).text();
                        let nex_element = $(`#trip${id}`).next();
                        let next_date = nex_element.length !== 0 ? $(nex_element).find(`[id^=trip_date]`).text() : '';
                        let future_id = nex_element.length !== 0 ? $(nex_element).attr('id').replace('trip', '') : '';
                        let start_time = $(`#trip_time${id}`).text();
                        let end_time = time_difference(start_time, route_time, current_date, next_date, id, future_id);
                        $(`.trip_end_time${id}`).text(end_time);

                        calculate_route_tooltip($(`#trip${id}`));
                    }
                });
            }

            function save_changes(trip, sub_id) {
                if (check_is_validate(trip, sub_id)) {
                    $(`.tripFromValue${sub_id}`).text($(`#from${sub_id}`).val());
                    $(`.tripToValue${sub_id}`).text($(`#to${sub_id}`).val());
                    check_time(`departure_date${sub_id}`, `trip_date${sub_id}`);
                    format_AMPM(`departure_time${sub_id}`, `trip_time${sub_id}`);

                    $(`#route_price${sub_id}`).val($(`#route_setter${sub_id}`).val() || '');

                    if ($(`#vat_check`).is(':checked')) {
                        $(`#abroad_route_price${sub_id}`).val($(`#abroad_route_setter${sub_id}`).val() || '');
                    }

                    $(`#edit_mode${sub_id}`).addClass('d-none');
                    $(`#normal_mode${sub_id}`).removeClass('d-none');

                    calculating_estimates(sub_id);

                    let isFromChecked = $(`#tourFromChecked${sub_id}`).prop("checked");
                    let isToChecked = $(`#tourToChecked${sub_id}`).prop("checked");

                    if (isFromChecked || isToChecked) {
                        let transferTime = 0;
                        $(`#trip${sub_id} .transfers-container`).removeClass('d-none');

                        if (isFromChecked) {
                            $(`#trip${sub_id} .first-transfer-container .no-transfer-label`).addClass('d-none');
                            $(`#trip${sub_id} .first-transfer-container .transfer-block`).removeClass('d-none');

                            let chosenOption = $(`#point_1_loco${sub_id} option:selected`).text();
                            $(`.from-service-select${sub_id}`).text(chosenOption);
                            let chosenOptionTime = $(`#point_1_loco${sub_id} option:selected`).attr('time');
                            transferTime += Number(chosenOptionTime);
                        }
                        else {
                            $(`#trip${sub_id} .first-transfer-container .transfer-block`).addClass('d-none');
                            $(`#trip${sub_id} .first-transfer-container .no-transfer-label`).removeClass('d-none');
                        }

                        if (isToChecked) {
                            $(`#trip${sub_id} .second-transfer-container .no-transfer-label`).addClass('d-none');
                            $(`#trip${sub_id} .second-transfer-container .transfer-block`).removeClass('d-none');

                            let chosenOption = $(`#point_2_loco${sub_id} option:selected`).text();
                            $(`.to-service-select${sub_id}`).text(chosenOption);
                            let chosenOptionTime = $(`#point_2_loco${sub_id} option:selected`).attr('time');
                            transferTime += Number(chosenOptionTime);
                        }
                        else {
                            $(`#trip${sub_id} .second-transfer-container .transfer-block`).addClass('d-none');
                            $(`#trip${sub_id} .second-transfer-container .no-transfer-label`).removeClass('d-none');
                        }


                        $(`.transfer-time${sub_id}`).text(transferTime);
                        $(`#transfer_price${sub_id}`).val($(`#transfer_setter${sub_id}`).val() || '');

                        if ($(`#vat_check`).is(':checked')) {
                            $(`#transfer_abroad_price${sub_id}`).val($(`#abroad_transfer_setter${sub_id}`).val() || '');
                        }
                        calculation_transfers_time();
                    }
                    else {
                        $(`#trip${sub_id} .transfers-container`).addClass('d-none');
                    }

                    change_places(sub_id);
                    date_difference(sub_id);
                    auto_sum();
                }
                else {
                    $(`#edit_mode${sub_id} .edit_required`).each(function () {
                        if (!($(this).val())) {
                            if ($(this).hasClass('datetimepicker')) $(this).parent().addTemporaryClass("invalid", 4000);
                            else $(this).addTemporaryClass("invalid", 4000);
                        }
                    });
                }
            }

            function clear_changes(id) {
                $(`#from${id}, #to${id}, #departure_time${id}, #route_setter${id}`).val('');
                let today = new Date().toISOString().split('T')[0];
                $(`#departure_date${id}`).val(today);
                if ($(`#tourFromChecked${id}`).prop("checked") || $(`#tourToChecked${id}`).prop("checked")) {
                    $(`#transfer_setter${id}`).val('');
                    if ($(`#vat_check`).is(':checked')) { $(`#abroad_transfer_setter${id}`).val(''); }
                }
                if ($(`#vat_check`).is(':checked')) { $(`#abroad_route_setter${id}`).val(''); }
            }

            window.get_commission_percent = (subtotal) => {
                for (let index = 0; index < company_currency_commission.length; index++) {
                    let commission_type = +(company_currency_commission[index].type);
                    if (commission_type !== 5) {
                        let commission_value = +(company_currency_commission[index].value);
                        if (+subtotal <= commission_value) return company_currency_commission[index].percent;
                        else if (+subtotal > commission_value && index === company_currency_commission.length - 1) return company_currency_commission[index].percent;
                    } else return 1;
                }
            }

            window.auto_sum = () => {
                let parent_class = `.is-open`;
                let vat_checked = $(`${parent_class} #vat_check`).is(':checked');

                if (!($(`${parent_class} .total-amount`).hasClass('hide-element'))) {
                    let allIndexes = [];
                    let subtotalPrice = 0;

                    $(`${parent_class} .main-trip`).each(function () {
                        let sumMain = 0;
                        let sumAbroad = 0;
                        let dayPrice = 0;
                        let abroadDayPrice = 0;

                        $(this).find(`input[class*='route-price']`).each(function () {
                            if ($(this).val()) sumMain += parseFloat($(this).val());
                        });

                        $(this).find(`input[class*='abroad-price']`).each(function () {
                            if ($(this).val()) sumAbroad += parseFloat($(this).val());
                        });

                        $(this).find(`.trip_price`).text(`${company_currency_sign}${sumMain.toFixed(2)}`).attr('value', sumMain.toFixed(2));
                        $(this).find(`.abroad_trip_price`).text(`${company_currency_sign}${sumAbroad.toFixed(2)}`).attr('value', sumAbroad.toFixed(2));

                        let index = $(this).attr("index");
                        allIndexes.push(index);

                        $(this).find(`.day_price`).text(function () {
                            let currentParentIndex = $(this).parents('.main-trip').attr('index');

                            $(`.main-trip[index=${currentParentIndex}] .trip_price`).each(function () {
                                dayPrice += parseFloat($(this).attr('value'));
                            });

                            return `${company_currency_sign}${dayPrice.toFixed(2)}`;
                        }).attr('value', dayPrice.toFixed(2));

                        $(this).find(`.abroad_day_price`).text(function () {
                            let currentParentIndex = $(this).parents('.main-trip').attr('index');

                            $(`.main-trip[index=${currentParentIndex}] .abroad_price`).each(function () {
                                if ($(this).parents('.main-trip').attr('index') === index) abroadDayPrice += parseFloat($(this).attr('value'));
                            });

                            return `${company_currency_sign}${abroadDayPrice.toFixed(2)}`;
                        }).attr('value', abroadDayPrice.toFixed(2));
                    });

                    $(`${parent_class} #subtotal`).text(function () {
                        $(`${parent_class} .total_day_value`).each(function () {
                            if ($(this).attr('value') !== '') subtotalPrice += parseFloat($(this).attr('value'));
                        });

                        return `${company_currency_sign}${subtotalPrice.toFixed(2)}`;
                    }).attr('value', subtotalPrice.toFixed(2));

                    if (vat_checked) {
                        let abroadSum = 0;

                        $(`${parent_class} #abroad_subtotal`).text(function () {
                            $(`${parent_class} .abroad_total_day_value`).each(function () {
                                if ($(this).attr('value') !== "") abroadSum += parseFloat($(this).attr('value'));
                            });
                            return `${company_currency_sign}${abroadSum.toFixed(2)}`;
                        }).attr('value', abroadSum.toFixed(2));
                    }
                } else {
                    let subtotal_sum = +($(`${parent_class} .totals_price`).val()) + +($(`${parent_class} .totals_other_costs`).val());

                    $(`${parent_class} #subtotal`).text(function () {
                        return `${company_currency_sign}${subtotal_sum.toFixed(2)}`;
                    }).attr('value', subtotal_sum.toFixed(2));

                    if (vat_checked) {
                        let subtotal_sum = +($(`${parent_class} .vat_totals_price`).val()) + +($(`${parent_class} .vat_totals_other_costs`).val());

                        $(`${parent_class} #abroad_subtotal`).text(function () {
                            return `${company_currency_sign}${subtotal_sum.toFixed(2)}`;
                        }).attr('value', subtotal_sum.toFixed(2));
                    }
                }

                let subtotal = vat_checked ? +($(`${parent_class} #subtotal`).attr('value')) + +($(`${parent_class} #abroad_subtotal`).attr('value')) : +($(`${parent_class} #subtotal`).attr('value'));
                $(`${parent_class} .warning-amount-price`).text(`${company_currency_sign}${subtotal}`);
                let commission_percent = get_commission_percent(subtotal);
                $(`${parent_class} .commission_percent`).text(`${commission_percent}%`);
                let commission = (subtotal * commission_percent) / 100;
                $(`${parent_class} .commission`).text(`${company_currency_sign}${commission.toFixed(2)}`).attr('value', commission.toFixed(2));
                let vatValue = (+($(`${parent_class} #subtotal`).attr('value')) / 100) * (+$(`${parent_class} .vat_percentage`).text());
                $(`${parent_class} #vat`).text(function () {
                    return `${company_currency_sign}${vatValue.toFixed(2)}`;
                }).attr('value', vatValue.toFixed(2));
                let totalPrice = +($(`${parent_class} #subtotal`).attr('value')) + +($(`${parent_class} #booking_fee`).text()) + +($(`${parent_class} #vat`).attr('value'));
                $(`${parent_class} #total_price`).text(function () {
                    return `${company_currency_sign}${totalPrice.toFixed(2)}`;
                }).attr('value', totalPrice.toFixed(2));
                if (vat_checked) {
                    let totalPrice = +($(`${parent_class} #abroad_subtotal`).attr('value')) + +($(`${parent_class} #abroad_booking_fee`).text()) + +($(`${parent_class} #abroad_vat`).val());
                    $(`${parent_class} #abroad_total_price`).text(function () {
                        return `${company_currency_sign}${totalPrice.toFixed(2)}`;
                    }).attr('value', totalPrice.toFixed(2));

                    let total_with_vat = +($(`${parent_class} #abroad_total_price`).attr('value')) + +($(`${parent_class} #total_price`).attr('value'));
                    $(`${parent_class} .total-with-vat`).text(`${company_currency_sign}${total_with_vat.toFixed(2)}`).attr('value', total_with_vat.toFixed(2));
                }
                let paymentTermEl = $('#payment_term');
                if (paymentTermEl.length) {
                    renderPaymentCalendarWidgets && renderPaymentCalendarWidgets(!($(paymentTermEl).attr('disabled')), false);
                }
            }

            window.route_html = (id, index, from_point__name = '', from_time = '', to_point__name = '', to_time = '', route_trip = '', route_day = '', route_data = '', leg = '', duration = '', route_data_en = '') => {
                let route_header = `<span class="first-trip-date trip_span font-bold">Day <span class="trip_day">${route_day}</span> - <span class="start_date" date='${route_data_en}' id="trip_start_date">${route_data}</span></span>`;

                if (id === 0) {
                    $(route_header).insertBefore($(`.is-open .trip_header`));
                    route_header = '';
                }

                return `<div id="trip${id}" class="main-trip" index="${index}">
                                    ${route_header}
                                    <div class="bg-secondary flex p-1"><span class="text-white text-uppercase col"><span class="new-trip trip-count trip_number${id} text-white">${route_trip}</span> -  <span class="text-white trip_day day">${route_day}</span> - <span id="trip_date${id}" date='${route_data_en}' class="text-white date">${route_data}</span></span></div><div id="normal_mode${id}" class="bg-light border-bottom normal container max-none"><div class="main-trip-container row"><span class="align-center bg-primary border-bottom font-bold t-18 p-1 text-white w-100 table-on">From point</span><div class="from-quote-block col-lg-3 d-flex flex-column"><div class="d-flex flex-column justify-content-start"><span class="font-bold from_point tripFromValue${id}">${from_point__name}</span><span id="trip_time${id}" class="text-uppercase">${from_time}</span></div></div><span class="align-center bg-primary border-bottom font-bold t-18 p-1 text-white w-100 table-on">To point</span><div class="to-quote-block col-lg-3 d-flex flex-column"><div class="d-flex flex-column justify-content-start"><span class="font-bold to_point tripToValue${id}">${to_point__name}</span><span class="trip_end_time${id} text-uppercase">${to_time}</span></div></div><div class="bg-secondary flex justify-content-between p-1 w-100 sm-tab-on"><span class="col text-white">Inland Costs</span><span class="col text-white abroad hide-element">Cost Abroad</span></div><div class="col-lg-6 d-flex flex-column justify-content-center px-0"><span class="align-center bg-primary border-bottom font-bold t-18 p-1 text-white table-on">Route price</span><div class="grid-quote-price p-3 border-left"><div class="grid-quote-info flex"><span class="drive_length">${leg} km</span><span class="drive_time">${duration}</span></div><div class="main-prices align-items-baseline d-flex justify-content-between p-1"><div class="cost-container in-land-price align-items-start flex flex-column p-1 w-50"><div class="amount-price-remove input-group"><div class="input-group-prepend"><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id="route_price${id}" class="form-control route-price" aria-label="Amount (to the nearest €)" min="0" required value="0"></div><div class="driving-calculation input-group pt-2"><div class="input-group"><input type="text" class="form-control" id="driving_price${id}" aria-describedby="driving_price" placeholder="${company_currency_sign}0" disabled=""><div class="bg-success rounded-right flex pointer calculate_driving_price-btn" data-id="${id}"><i class="fa-check fas m-0 m-2"></i></div></div><span class="pl-1 tooltip-question mob-none align-self-center position-is-absolute inline-block"><i class="fas fa-question-circle text-primary"></i><div class="tooltiptext container position-is-absolute z-1"><div class="row border-bottom p-1"><div class="col-6 flex">Hourly cost - driving empty</div><div class="text-secondary-dark col-4 flex hourly_cost_calculation"></div><div class="font-bold col-2 flex hourly_cost"></div></div><div class="row border-bottom p-1"><div class="col-6 flex">Estimated total</div><div class="text-secondary-dark col-4 flex estimated_km"></div></div><div class="row border-bottom p-1"><div class="col-6 flex">Total kilometers included in driving time</div><div class="text-secondary-dark col-4 flex total_km_included_calculation"></div><div class="text-secondary-dark col-2 flex total_km_included"></div></div><div class="row border-bottom p-1"><div class="col-6 flex">Estimated total of extra kilometers</div><div class="text-secondary-dark col-4 flex">(km driven - km included)</div><div class="text-secondary-dark col-2 flex estimated_total_km"></div></div><div class="row p-1"><div class="col-6 flex">Cost extra kilometers</div><div class="text-secondary-dark col-4 flex cost_per_extra_calculation"></div><div class="font-bold col-2 flex cost_per_extra"></div></div><div class="row bg-secondary p-1"><div class="text-white col-10">label.Total trip</div><div class="text-white col-2 total_tooltip"></div></div></div></span></div></div><div class="cost-container abroad abroad-price p-1 hide-element w-50"><div class="input-group"><div class="input-group-prepend"><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id="abroad_route_price${id}" class="form-control abroad-price" aria-label="Amount (to the nearest €)" min="0"></div></div></div><div class="align-items-center d-flex add_edit hide-element"><span class="edit-block changes_mode-btn" data-id="${id}"><span class="btn btn-malibu w-100 sm-tab-on text-uppercase color-white">Edit</span><i class="sm-tab-off fas fa-pencil-alt pointer main-darkblue"></i></span><span class="delete-block pl-1 delete_step-btn" data-id="${id}"><span class="btn-delete sm-tab-on t-14">Delete <i class="fa-trash-alt fas pl-1 text-white"></i></span><i class="sm-tab-off fa-trash-alt fas red pointer"></i></span></div></div><span class="transfers-container align-center bg-primary border-bottom font-bold t-18 p-1 text-white table-on d-none">Transfers price</span></div></div><div class="transfers-container row d-none"><div class="first-transfer-container col-lg-3 col-md-6 col-12 py-2"><h4 class="table-on">From Transfer service > Local service in departure place</h4><p class="no-transfer-label m-0 d-none">No local service requested</p><div class="transfer-block py-1 w-fit align-items-center bg-white flex shadow-sm d-none"><img src="/static/goal.png" class="goal lazyload" alt="goal"><div class="col d-flex flex-column gap-3"><span class="from-service-select${id}"></span><span class="from-service-time${id}"></span></div></div><span class="badge badge-pill badge-danger mt-1" data-toggle="tooltip" data-placement="right" title="Previous value was: ">!</span></div><div class="second-transfer-container col-lg-3 col-md-6 col-12 py-2"><h4 class="table-on">To transfer service > Local service in destination place</h4><p class="no-transfer-label m-0 d-none">No local service requested</p><div class="transfer-block py-1 w-fit align-items-center bg-white flex shadow-sm d-none"><img src="/static/goal.png" class="goal lazyload" alt="goal"><div class="col d-flex flex-column gap-3"><span class="to-service-select${id}"></span><span class="to-service-time${id}"></span></div></div><span class="badge badge-pill badge-danger mt-1" data-toggle="tooltip" data-placement="right" title="Previous value was: ">!</span></div><div class="grid-quote-price border-top border-left p-3 col-lg-6 col-12"><span class="transfers-time flex"><span class="transfer-time${id} pr-1"></span> hours</span><div class="d-flex justify-content-between"><div class="cost-container amount-price-remove input-group align-content-center w-50 p-1"><div class="input-group-prepend"><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id='transfer_price${id}' class="form-control route-price" aria-label="Amount (to the nearest €)" min="0"></div><div class="cost-container amount-price-remove cost-container abroad abroad-price align-self-center p-1 hide-element w-50"><div class="input-group"><div class="input-group-prepend"><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id="transfer_abroad_price${id}" class="form-control abroad-price" aria-label="Amount (to the nearest €)" min="0"></div></div></div><div class="align-items-center d-flex add_edit hide-element"><span class="edit-block changes_mode-btn" data-id="${id}"><span class="btn btn-malibu w-100 sm-tab-on color-white">Edit</span><i class="sm-tab-off fas fa-pencil-alt pointer main-darkblue"></i></span><span class="delete-block pl-1 delete_step-btn" data-id="${id}"><span class="btn-delete sm-tab-on t-14">Delete <i class="fa-trash-alt fas pl-1 text-white"></i></span><i class="sm-tab-off fa-trash-alt fas red pointer"></i></span></div></div></div></div><div id="edit_mode${id}" class="d-none border-bottom discharge main-trip-edit"><div class="bg-light"><div class="align-items-baseline border-bottom flex py-3"><div class="date-edit-container col-12 col-lg-3 col-md-6 col-sm-6"><div class="t-14 font-bold mob-width"><p class="t-14 m-0">Departure date</p><div class="input-group"><input id="departure_date${id}" type="date" class="form-control departure edit_required set_date-btn" aria-describedby="basic-addon1" onkeydown="return false"></div></div></div><div class="time-edit-container col-12 col-lg-3 col-md-6 col-sm-6"><div class="t-14 font-bold p-0 mob-width-date"><p class="t-14 m-0">Departure time</p><div class="d-flex form-control justify-content-between starts w-100"><input id="departure_time${id}" class="datetimepicker edit_required" placeholder='00:00' onkeydown="return false"><span class="align-items-center d-flex input-group-addon"><i class="fa fa-clock" aria-hidden="true"></i></span></div></div></div></div><div class="edit_mode-routes flex align-items-baseline pt-2"><div class="col-12 col-lg-4 col-md-6 col-sm-12"><div class="col p-0 font-bold"><span class="t-14">From</span><div class="input-group mb-3"><input id='from${id}' type="text" name="from" class="rounded form-control autocomplete-added edit_required" placeholder="${from_point__name}"></div></div></div><div class="col-12 col-lg-4 col-md-6 col-sm-12"><div class="col p-0 font-bold"><span class="t-14">To</span><div class="input-group mb-3"><input id='to${id}' type="text" name="to" class="rounded form-control autocomplete-added edit_required" placeholder="${to_point__name}"></div></div></div><div class="align-content-lg-start amount-price-remove col-6 col-lg-4 col-md-3 col-sm-3 edit-setter-main flex justify-content-end"><div class="flex w-100"><p class="t-14 m-0 font-bold">Price</p></div><div class="align-content-center input-group"><div class="input-group-prepend"><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id="route_setter${id}" class="form-control" aria-label="Amount (to the nearest €)" min="0"></div></div><div class="abroad align-content-lg-start amount-price-remove col-6 col-lg-2 col-md-3 col-sm-3 flex justify-content-end hide-element"><div class="flex w-100"><p class="t-14 m-0 font-bold">Cost Abroad</p></div><div class="align-content-center input-group"><div class="input-group-prepend"><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id="abroad_route_setter${id}" class="form-control" aria-label="Amount (to the nearest €)" min="0"></div></div></div><div class="edit-transfers-container align-items-baseline flex"><div class="first-transfer col-12 col-lg-4 col-md-6"><div class="custom-control custom-checkbox flex transfer"><input type="checkbox" class="custom-control-input first-tour" id="tourFromChecked${id}" onChange="tour_checkbox_check(this, ${id})"><label class="custom-control-label" for="tourFromChecked${id}">Tour or transfer here</label></div><div id="addFirstTour${id}" class="d-none transfer-container"><div class="grid-selector select"><select id="point_1_loco${id}" class="form-control custom-select tour-select"></select></div><div class="starts font-bold t-14"><p class="t-14 m-0">Starts:</p><div class="d-flex form-control justify-content-between starts w-100"><input type="text" class="datetimepicker from-time" placeholder='00:00' time="" onkeydown="return false"><span class="align-items-center d-flex input-group-addon"><i class="fa fa-clock" aria-hidden="true"></i></span></div></div><div class="ends font-bold t-14"><p class="t-14 m-0">Ends:</p><div class="d-flex form-control justify-content-between"><input type="text" class="datetimepicker end-time" disabled onkeydown="return false"><span class="align-items-center d-flex input-group-addon"><i class="fa fa-clock" aria-hidden="true"></i></span></div></div></div></div><div class="second-transfer col-12 col-lg-4 col-md-6"><div class="custom-control custom-checkbox flex transfer"><input type="checkbox" class="custom-control-input second-tour" id="tourToChecked${id}" onChange="tour_checkbox_check(this, ${id})"><label class="custom-control-label" for="tourToChecked${id}">Tour or transfer here</label></div><div id="addSecondTour${id}" class="d-none transfer-container"><div class="grid-selector select"><select id="point_2_loco${id}" class="form-control  custom-select tour-select"></select></div>
                                document.addEventListener("allScriptsLoaded", () => {     <div class="starts font-bold pl-0 t-14"><p class="t-14 m-0">Starts:</p><div class="d-flex form-control justify-content-between starts w-100"><input type="text" class="datetimepicker from-time" placeholder='00:00' time="" onkeydown="return false"><span class="align-items-center d-flex input-group-addon"><i class="fa fa-clock" aria-hidden="true"></i></span></div></div><div class="ends font-bold pr-0 t-14"><p class="t-14 m-0">Ends:</p><div class="d-flex form-control justify-content-between"><input type="text" class="datetimepicker end-time" disabled onkeydown="return false"><span class="align-items-center d-flex input-group-addon"><i class="fa fa-clock" aria-hidden="true"></i></span></div></div></div></div><div class="transfer-price-container${id} amount-price-remove edit-setter-main align-content-lg-start col-6 col-lg-4 col-md-3 col-sm-3 flex justify-content-end d-none"><div class="flex w-100"><p class="t-14 m-0 font-bold">Price</p></div><div class="align-content-center input-group"><div class="input-group-prepend"><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id="transfer_setter${id}" class="form-control" aria-label="Amount (to the nearest €)" min="0"></div></div><div class="transfer-price-container${id} amount-price-remove align-content-lg-start col-6 col-lg-2 col-md-3 col-sm-3 flex justify-content-end abroad hide-element d-none"><div class="flex w-100"><p class="t-14 m-0 font-bold">Cost Abroad</p></div><div class="align-content-center input-group"><div class="input-group-prepend"><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id="abroad_transfer_setter${id}" class="form-control" aria-label="Amount (to the nearest €)" min="0"></div></div></div><div id="saveChangesContent${id}" class="quote-edit-btns flex justify-content-end p-3"><button type="button" class="btn btn-success flex justify-content-center save_changes-btn" data-id="${id}">
                                            Save changes
                                        </button><span class="pl-3 sm-tab-off clear_changes-btn" data-id="${id}"><i class="fa-trash-alt fas red pointer"></i></span><span class="btn-delete flex justify-content-center p-3 sm-tab-on w-100 t-14">Delete <i class="fa-trash-alt fas pl-1 text-white"></i></span></div></div></div><div class="extra_costs${id} d-none"><div class="extra_cost_header bg-table-tr flex p-2"><span class="col font-weight-bold">Extra costs</span></div><div class="border-bottom"><div class="flex bg-light p-2 highway_toll_row"><span class="col-12 col-lg-3">Highway toll (<span class="company_currency_sign"></span>)</span><div class="col-12 col-lg-3 col-md-5 col-sm-12"><select id='highway_toll${id}' class="custom-select form-control" onchange="extra_change(this, 'highway_toll')"></select></div><div class="col-sm d-flex justify-content-end extra_price_container amount-price-remove hide-element"><div class="price-container input-group align-content-center w-50 pr-1"><div class="input-group-prepend"><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id='highway_toll_price${id}' class="form-control route-price" aria-label="Amount (to the nearest €)" min="0"></div><div class="price-container input-group align-content-center w-50 pl-1 abroad hide-element"><div class="input-group-prepend "><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id='abroad_highway_toll_price${id}' class="form-control abroad-price" aria-label="Amount (to the nearest €)" min="0"></div></div></div><div class="flex bg-table-tr p-2 parking_costs_row"><span class="col-12 col-lg-3">Parking costs (<span class="company_currency_sign"></span>)</span><div class="col-12 col-lg-3 col-md-5 col-sm-12"><select id="parking_costs${id}" class="custom-select form-control" onchange="extra_change(this, 'parking_costs')"></select></div><div class="align-items-lg-start col-sm d-flex extra_price_container justify-content-end amount-price-remove hide-element"><div class="price-container input-group align-content-center w-50 pr-1"><div class="input-group-prepend"><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id='parking_costs_price${id}' class="form-control route-price" aria-label="Amount (to the nearest €)" min="0"></div><div class="price-container input-group align-content-center w-50 pl-1 abroad hide-element"><div class="input-group-prepend "><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id='abroad_parking_costs_price${id}' class="form-control abroad-price" aria-label="Amount (to the nearest €)" min="0"></div></div></div><div class="flex bg-light p-2 driver_expenses_row"><span class="col-12 col-lg-3">Other driver expenses (<span class="company_currency_sign"></span>)</span><div class="col-12 col-lg-3 col-md-5 col-sm-12"><select id="driver_expenses${id}" class="custom-select form-control" onchange="extra_change(this, 'driver_expenses')"></select></div><div class="col-sm d-flex justify-content-end extra_price_container amount-price-remove hide-element"><div class="price-container input-group align-content-center w-50 pr-1"><div class="input-group-prepend "><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id='driver_expenses_price${id}' class="form-control route-price" aria-label="Amount (to the nearest €)" min="0"></div><div class="price-container input-group align-content-center w-50 pl-1 abroad hide-element"><div class="input-group-prepend "><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id='abroad_driver_expenses_price${id}' class="form-control abroad-price" aria-label="Amount (to the nearest €)" min="0"></div></div></div><div class="flex bg-table-tr p-2 pb-5 other_cost_row"><span class="col-12 col-lg-3">Other Costs (<span class="company_currency_sign"></span>)</span><div class="col-12 col-lg-3 col-md-5 col-sm-12"><div class="col p-0 font-bold t-14"><div class="input-group"><input id="other_costs${id}" class="rounded form-control"><small class="form-text text-muted"></small></div></div></div><div class="align-items-lg-start col-sm d-flex justify-content-end extra_price_container amount-price-remove"><div class="price-container input-group align-content-center w-50 pr-1"><div class="input-group-prepend"><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id='costs_price${id}' class="form-control route-price" aria-label="Amount (to the nearest €)" min="0"></div><div class="price-container input-group align-content-center w-50 pl-1 abroad hide-element"><div class="input-group-prepend "><span class="input-group-text font-bold company_currency_sign"></span></div><input type="number" id='abroad_costs_price${id}' class="form-control abroad-price" aria-label="Amount (to the nearest €)" min="0"></div></div></div></div></div><div class="border-bottom d-flex justify-content-between bg-white"><div class="align-items-center flex p-2 table-none"><button type="button" class="btn btn-primary text-uppercase add_extra${id} add_extra_costs-btn" data-id="${id}">+ label.Add Extra Cost</button></div><div class="p-3 bg-light-blue col-lg-6"><div class="flex justify-content-between"><span>label.Total trip <span class="trip_number${id} trip-count"></span></span><span class="trip_price"></span><span class="abroad_trip_price abroad abroad_price hide-element"></span></div><div class="total_day flex justify-content-between"><span class="font-bold">Total Day <span class="trip_day${id}">${route_day}</span></span><span class="font-bold main-total day_price total_day_value"></span><span class="font-bold abroad-total abroad_day_price abroad abroad_total_day_value hide-element"></span></div></div></div><div class="align-items-center flex py-2 table-on"><button type="button" class="btn btn-primary text-uppercase add_extra${id} w-100 p-2 add_extra_costs-btn" data-id="${id}">+ label.Add Extra Cost</button></div><div class="justify-content-center add_edit hide-element"><button type="button"
                                                id="button_off${id}"
                                                class="btn btn-outline-primary position_corner t-14 pointer position-is-absolute add_part-btn"
                                                data-id="${id}"
                                                index="${index}"
                                        ><i class="fas fa-plus tablet-none"></i><span class="text-uppercase text-white tablet-on">Add route</span></button></div></div>`;
            }

            window.tour_checkbox_check = (el, counter) => {
                if (el.checked === true) {
                    $(el).hasClass(`first-tour`) ? $(`#addFirstTour${counter}`).removeClass('d-none') : $(`#addSecondTour${counter}`).removeClass('d-none');
                    $(`.transfer-price-container${counter}`).removeClass('d-none');
                } else {
                    $(el).hasClass(`first-tour`) ? $(`#addFirstTour${counter}`).addClass('d-none') : $(`#addSecondTour${counter}`).addClass('d-none');
                    if ((!$(`#tourFromChecked${counter}`).prop("checked")) && (!$(`#tourToChecked${counter}`).prop("checked"))) {
                        $(`.transfer-price-container${counter}`).addClass('d-none');
                    }
                }
            }

            function continueEdit() {
                $(`.send-quote-alert`).addClass('hide-element');
                $(`#send_quote`).removeClass('hide-element');
            }

            function checkChanges() {
                let newLength = $(`.main-trip`).length;

                if (counterMains === newLength) {
                    let routes = [];
                    let oldRoutes = JSON.parse(localStorage.getItem('routes'));
                    $(`.main-trip`).each(function (index) {
                        let id_counter = $(this).attr('id').replace('trip', '');

                        if ($(`.tripToValue${id_counter}`).text()) {
                            let point1 = $(`.tripFromValue${id_counter}`).text();
                            let point2 = $(`.tripToValue${id_counter}`).text();
                            let time = ($(`#trip_time${id_counter}`).text()) ? $(`#trip_time${id_counter}`).text() : '';
                            let first_checker = $(`#tourFromChecked${id_counter}`).is(':checked');
                            let second_checker = $(`#tourToChecked${id_counter}`).is(':checked');
                            let point_1_loco = $(`.from-service-select${id_counter}`).text() === "None" ? "" : $(`.from-service-select${id_counter}`).text();
                            let point_2_loco = $(`.to-service-select${id_counter}`).text() === "None" ? "" : $(`.to-service-select${id_counter}`).text();
                            let _date = $(`#trip_date${id_counter}`).attr("date");
                            let date = new Date(_date + ' ' + time),
                                userTimeZoneOffset = date.getTimezoneOffset() * 60000,
                                time2 = new Date(date.getTime() - userTimeZoneOffset);
                            let isodate = time2.toISOString().slice(0, -5) + "Z";
                            routes.push({
                                'first_checker': first_checker,
                                'second_checker': second_checker,
                                'point_1': point1,
                                'point_2': point2,
                                'time': time,
                                'point_1_loco': point_1_loco,
                                'point_2_loco': point_2_loco,
                                'date': isodate,
                            });
                        }
                    });
                    return isEqual(routes, oldRoutes);
                } else return false;
            }

            let sendQuoteButton = document.getElementById('send_quote');
            $(document).on('change', '.form-control', function (e) {
                if ($(this).hasClass('is-invalid') && validate_require(`is-open`)) {
                    if (sendQuoteButton) {
                        sendQuoteButton.disabled = false;
                    }
                }
            });

            window.markTripAsQuoted = (el) => {
                $(el).remove();
            }

            window.create_quote = (el) => {
                $(el).attr('disabled', true);
                let with_total_amount = !($(`.popup-quote .total-amount-prices`).hasClass('hide-element'));

                $(`.is-open .valid`).removeClass('valid');
                $(`.is-open .invalid`).removeClass('invalid');

                let state = validate_require(`is-open`);

                let bus = $('#bus_type_mod option:selected').attr('value');
                let garage = $('#bus_garage option:selected').attr('value');
                let groupSize = +($('#group_size_mod').val());
                let oldPassengers = +(JSON.parse(localStorage.getItem('passengers_quote')));

                let trip_type = get_trip_type();
                if (bus && garage && state) {
                    let data = set_data(groupSize, with_total_amount, trip_type);
                    data['mode'] = $(el).attr('data-mode');
                    let request_url = (checkChanges() && groupSize === oldPassengers) ? 'create_quote' : 'create_sub_trip';
                    send_request('POST', `api/company/${request_url}/`, data, true, (response) => {
                        if (response.status === 1) {
                            localStorage.removeItem('routes');
                            btn_close_popup();
                            if (response.status === -1) banner_alert('danger', response.msg, `https://rentautobus.com/`);
                            else {
                                banner_alert('success', response.msg);
                                let tripEl = $('.trip-list').find('[trip_id = "' + $(el).attr('trip_id') + '"]').parents('.grid-trip');
                                markTripAsQuoted(tripEl);
                            }
                        } else banner_alert('danger', response.msg);
                        $(el).attr('disabled', false);
                    });
                } else {
                    $('.is-open .invalid').filter(":first").focus().focusout(function () {
                        if ($(this).val()) $(this).removeClass('invalid').addClass('valid');
                        $('.is-open .invalid').filter(":first").focus();
                        $(el).attr('disabled', false);
                    });
                }
            }

            function set_data(groupSize, with_total_amount, trip_type) {
                let data = {
                    'trip_id': +($(`#send_quote`).attr('trip_id')),
                    'with_total_amount': with_total_amount,
                    'routes': [],
                    'summary': {
                        'vat_percent': $(`.vat_percentage`).text(),
                        'main_price': {
                            'subtotal': $('#subtotal').attr('value') || '0',
                            'booking_fee': $('#booking_fee').text(),
                            'vat': $('#vat').attr('value') || '0',
                            'total_price': $('#total_price').attr('value') || '0',
                        },
                    },
                    'bus': $('#bus_type_mod option:selected').attr('value'),
                    'garage': $('#bus_garage option:selected').attr('value'),
                    'prev_id': +($(`#send_quote`).attr('sub_trip_id')),
                    'passengers': groupSize,
                    'unique_name': null,
                    'type': trip_type,
                    'details': $('#about_group_val').text(),
                    'is_public': false,
                    'commission': $(`.popup-quote .commission`).attr('value'),
                    'price_valid_until': $('#price_valid_until').val(),
                    'guaranteed_during': $('#guaranteed_during').val(),
                
            };

            $(`.main-trip`).each(function () {
                let id_counter = $(this).attr('id').replace('trip', '');

                if ($(`.tripToValue${id_counter}`).text() !== undefined) {
                    let point1 = $(`.tripFromValue${id_counter}`).text();
                    let point2 = $(`.tripToValue${id_counter}`).text();
                    let notParsedTime = $(`#trip_time${id_counter}`).text() ? $(`#trip_time${id_counter}`).text() : '';
                    let point_1_loco = '';
                    let point_2_loco = '';
                    let point_1_loco_time = '';
                    let point_2_loco_time = '';
                    let point_1_loco_time_end = '';
                    let point_2_loco_time_end = '';

                    if ($(`#tourFromChecked${id_counter}`).is(':checked')) {
                        point_1_loco = $(`#point_1_loco${id_counter} option:selected`).val() ? $(`#point_1_loco${id_counter} option:selected`).val() : "";
                        point_1_loco_time = $(`#addFirstTour${id_counter} .from-time`).val();
                        point_1_loco_time_end = $(`#addFirstTour${id_counter} .end-time`).val();
                    }
                    if ($(`#tourToChecked${id_counter}`).is(':checked')) {
                        point_2_loco = $(`#point_2_loco${id_counter} option:selected`).val() ? $(`#point_2_loco${id_counter} option:selected`).val() : "";
                        point_2_loco_time = $(`#addSecondTour${id_counter} .from-time`).val();
                        point_2_loco_time_end = $(`#addSecondTour${id_counter} .end-time`).val();
                    }
                    let _date = $(`#trip_date${id_counter}`).attr("date");
                    let date = new Date(_date).getTime() / 1000;
                    var thisTimeSystem = new Date();
                    var currentTimeZoneOffsetInHours = thisTimeSystem.getTimezoneOffset() / 60;
                    currentTimeZoneOffsetInHours = currentTimeZoneOffsetInHours * -1;
                    var newTime = date + (currentTimeZoneOffsetInHours * 3600);
                    var time2 = new Date(newTime * 1000);
                    let clearDate = time2.toISOString().slice(0, -14);
                    let isodate = clearDate;

                    let route_price = $(`#route_price${id_counter}`).val() || '0';
                    let transfer_price = $(`#transfer_price${id_counter}`).val() || '0';

                    const timeParse = (time12h) => {
                        const [time, modifier] = time12h.split(' ');
                        let [hours, minutes] = time.split(':');
                        if (hours === '12') {
                            hours = '00';
                        }

                        if (modifier === 'PM') {
                            hours = parseInt(hours, 10) + 12;
                        }

                        const parsedTime = `${hours}:${minutes}`;

                        return parsedTime;
                    }

                    time = timeParse(notParsedTime);

                    console.log("isodate: " + isodate);
                    console.log("time: " + time);

                    data['routes'].push({
                        'id': `${tripId}.${id_counter}`,
                        'point_1': point1,
                        'point_2': point2,
                        'time': time,
                        'point_1_loco': point_1_loco,
                        'point_2_loco': point_2_loco,
                        'point_1_loco_time': point_1_loco_time,
                        'point_2_loco_time': point_2_loco_time,
                        'point_1_loco_time_end': point_1_loco_time_end,
                        'point_2_loco_time_end': point_2_loco_time_end,
                        'date': isodate,
                        'main_price': {
                            'route_price': route_price,
                            'transfer_price': transfer_price,
                        },
                    });

                    if ($(`#vat_check`).is(':checked')) {
                        let vat_route_price = $(`#abroad_route_price${id_counter}`).val() || '0';
                        let vat_transfer_price = $(`#transfer_abroad_price${id_counter}`).val() || '0';

                        Object.assign(data.routes[id_counter], {
                            vat_price: {
                                'vat_route_price': vat_route_price,
                                'vat_transfer_price': vat_transfer_price,
                            },
                        });

                        Object.assign(data.summary, {
                            vat_price: {
                                'vat_subtotal': $('#abroad_subtotal').attr('value') || '0',
                                'vat_booking_fee': $('#abroad_booking_fee').text(),
                                'vat_vat': $('#abroad_vat').val() || '0',
                                'vat_total_price': $('#abroad_total_price').attr('value') || '0',
                            },
                        });
                    }


                    if (!($(`.extra_costs${id_counter}`).hasClass('d-none'))) {
                        let highway_toll_select = $(`#highway_toll${id_counter}`).val();
                        let highway_toll_price = $(`#highway_toll_price${id_counter}`).val() || '0';
                        let parking_costs_select = $(`#parking_costs${id_counter}`).val();
                        let parking_costs_price = $(`#parking_costs_price${id_counter}`).val() || '0';
                        let driver_expenses_select = $(`#driver_expenses${id_counter}`).val();
                        let driver_expenses_price = $(`#driver_expenses_price${id_counter}`).val() || '0';
                        let other_costs = $(`#other_costs${id_counter}`).val();
                        let costs_price = $(`#costs_price${id_counter}`).val() || '0';

                        Object.assign(data.routes[id_counter], {
                            'highway_toll': highway_toll_select,
                            'parking_costs': parking_costs_select,
                            'driver_expenses': driver_expenses_select,
                            'other_costs': other_costs,
                            'extra_cost': true,
                        });

                        Object.assign(data.routes[id_counter].main_price, {
                            'transfer_price': transfer_price,
                            'highway_toll_price': highway_toll_price,
                            'parking_costs_price': parking_costs_price,
                            'driver_expenses_price': driver_expenses_price,
                            'costs_price': costs_price,
                        });

                        if ($(`#vat_check`).is(':checked')) {
                            let vat_highway_toll_price = $(`#abroad_highway_toll_price${id_counter}`).val() || '0';
                            let vat_parking_costs_price = $(`#abroad_parking_costs_price${id_counter}`).val() || '0';
                            let vat_driver_expenses_price = $(`#abroad_driver_expenses_price${id_counter}`).val() || '0';
                            let vat_costs_price = $(`#abroad_costs_price${id_counter}`).val() || '0';

                            Object.assign(data.routes[id_counter].vat_price, {
                                'vat_highway_toll_price': vat_highway_toll_price,
                                'vat_parking_costs_price': vat_parking_costs_price,
                                'vat_driver_expenses_price': vat_driver_expenses_price,
                                'vat_costs_price': vat_costs_price,
                            });
                        }
                    }
                    else {
                        Object.assign(data.routes[id_counter], {
                            'extra_cost': false,
                        });
                    }

                }
            });

            if (with_total_amount) {
                let totals_price = $(`.totals_price`).val() || '0';
                let totals_other_costs = $(`.totals_other_costs`).val() || '0';

                Object.assign(data, {
                    total_routes_price: {
                        'main_price': {
                            'totals_price': totals_price,
                            'totals_other_costs': totals_other_costs,
                        },
                    }
                });

                if ($(`#vat_check`).is(':checked')) {
                    let vat_totals_price = $(`.vat_totals_price`).val() || '0';
                    let vat_totals_other_costs = $(`.vat_totals_other_costs`).val() || '0';

                    Object.assign(data.total_routes_price, {
                        'vat_price': {
                            'vat_totals_price': vat_totals_price,
                            'vat_totals_other_costs': vat_totals_other_costs,
                        },
                    });
                }
            }

            return data;
        }

        $(".btn_close_popup").click(function () {
            btn_close_popup();
        });

        $(document).on('click', ".set_price_in_one-btn", function () {
            set_price_in_one($(this));
        });

        $(document).on('click', ".create_quote-btn", function () {
            create_quote($(this))
        });

        $(document).on('click', ".changes_mode-btn", function () {
            changes_mode($(this).attr("data-id"));
        });

        $(".delete_step-btn").click(function () {
            delete_step($(this).attr("data-id"));
        });

        $(document).on('click', ".save_changes-btn", function () {
            save_changes(true, $(this).attr("data-id"))
        });

        $(document).on('click', ".clear_changes-btn", function () {
            clear_changes($(this).attr("data-id"))
        });

        
    });
    
    </script><style>
    .bootstrap-datetimepicker-widget{display: block;z-index:999999999}
</style><script src="/static/js/gmap-based.js"></script><script src="/static/js/autocomplete-widgets.js"></script><script src="/static/js/tabs-switcher.js" defer></script><script>
(function() {
    function fillFirstRouteFromLocalStorage() {
        if (!location.pathname.endsWith('/item20')) return;

        const fromField = document.getElementById('fromT');
        const toField = document.getElementById('toT');

        if (!fromField || !toField) {
            setTimeout(fillFirstRouteFromLocalStorage, 500);
            return;
        }

        const tripData = JSON.parse(localStorage.getItem('rentautobus_form_data') || '[]');
        const clickBtn = localStorage.getItem('click_btn');

        if (tripData.length > 0 && clickBtn === 'multi_trip') {
            const firstRoute = tripData[0];

            if (firstRoute.point_1) {
                fromField.value = firstRoute.point_1;
                fromField.setAttribute('data-address', firstRoute.point_1);
                fromField.setAttribute('data-place-name', firstRoute.point_1);
                if (firstRoute.point_1_lat) fromField.setAttribute('data-lat', firstRoute.point_1_lat);
                if (firstRoute.point_1_lng) fromField.setAttribute('data-lng', firstRoute.point_1_lng);
                if (firstRoute.point_1_country_iso) fromField.setAttribute('data-country-iso', firstRoute.point_1_country_iso);
            }

            if (firstRoute.point_2) {
                toField.value = firstRoute.point_2;
                toField.setAttribute('data-address', firstRoute.point_2);
                toField.setAttribute('data-place-name', firstRoute.point_2);
                if (firstRoute.point_2_lat) toField.setAttribute('data-lat', firstRoute.point_2_lat);
                if (firstRoute.point_2_lng) toField.setAttribute('data-lng', firstRoute.point_2_lng);
                if (firstRoute.point_2_country_iso) toField.setAttribute('data-country-iso', firstRoute.point_2_country_iso);
            }

            console.log('✅ First route filled from localStorage');
        }
    }

    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', () => setTimeout(fillFirstRouteFromLocalStorage, 1000));
    } else {
        setTimeout(fillFirstRouteFromLocalStorage, 1000);
    }
})();
</script><script>
    document.addEventListener("DOMContentLoaded", function() {
        setTimeout(function() {
            if (typeof window.initInputBlurHandlers === 'function') {
                window.initInputBlurHandlers();
                console.log('🚀 Input blur handlers initialized on page load');
            }
        }, 1000);
    });

    if (typeof MutationObserver !== 'undefined') {
        const mutationObserver = new MutationObserver(function(mutations) {
            mutations.forEach(function(mutation) {
                mutation.addedNodes.forEach(function(node) {
                    if (node.nodeType === 1) {
                        const inputs = node.querySelectorAll ? node.querySelectorAll('input, select, gmp-place-autocomplete') : [];
                        if (inputs.length && typeof window.handleBlur === 'function') {
                            inputs.forEach(function(input) {
                                input.removeEventListener('blur', window.handleBlur);
                                input.addEventListener('blur', window.handleBlur);
                            });
                            if (inputs.length) {
                                console.log('✅ Added blur handlers for ' + inputs.length + ' new fields');
                            }
                        }
                    }
                });
            });
        });

        document.addEventListener("DOMContentLoaded", function() {
            mutationObserver.observe(document.body, {
                childList: true,
                subtree: true
            });
        });
    }
</script></body></html>
