PageSourceSearch

https://booking.borgodelcabreo.it/book/websites/searchbox?hotel=20054&&lang=en&&&ver=7.1.2

js borgodelcabreo.it collected 2026-10-05 21:40:23 UTC 40,973 bytes, 821 lines download raw bytes

1// dichiarazione del namespace
2var it = it || {};
3it.bookingexpert = it.bookingexpert || {};
4
5// classe per la visualizzazione del widget di ricerca
6it.bookingexpert.SearchBox = {};
7// dizionario codice/html dei widget di ricerca
8it.bookingexpert.SearchBox.html = [];
9// riferimento all'ultimo target
10it.bookingexpert.SearchBox.target = null;
11
12it.bookingexpert.SearchBox.gs = {};
13// carica il widtget associato al codice specificato all'interno di target
14it.bookingexpert.SearchBox.load = function (target, code, opts) {
15    if (typeof target === 'string') {
16        target = document.getElementById(target);
17    }
18    it.bookingexpert.SearchBox.target = target;
19    if (!code) {
20        code = '';
21    }
22    // impostazioni predefinite
23    opts = opts || {};
24    opts.modaltarget = opts.modaltarget || 'bemodalframe';
25    // cerca il box associato al codice
26    var found = null;
27    for (var i = 0; i < it.bookingexpert.SearchBox.html.length; i++) {
28        var box = it.bookingexpert.SearchBox.html[i];
29        if (code === '' || box.code === code) {
30            found = box.html;
31            break;
32        }
33    }
34    // se box non trovato mostra quello di default
35    if (found === null || found === '') {
36        found = '{simpleform}';
37    }
38    // visualizza la form di ricerca
39    it.bookingexpert.SearchBox.template(target, opts, found);
40    // imposta i parametri per il tracciamento su google analytics
41    it.bookingexpert.SearchBox.googleAnalytics('ga', null);
42    //initialize Booking Booster
43    it.bookingexpert.SearchBox.bookingBooster(target);
44};
45// imposta i parametri per il tracciamento su google analytics
46it.bookingexpert.SearchBox.googleAnalytics = function (gavar, target) {
47    var ga = window[gavar];
48    if (typeof ga !== 'undefined' && typeof jQuery !== 'undefined') {
49        ga(function () {
50            var trackers = ga.getAll();
51            trackers.forEach(function (tracker) {
52                var linker = new window.gaplugins.Linker(tracker);
53                var host = it.bookingexpert.SearchBox.url;
54                jQuery("a[href*='" + host + "']", target).click(function () {
55                    linker.decorate(this);
56                });
57                jQuery("form[action*='" + host + "']", target).submit(function () {
58                    linker.decorate(this);
59                });
60            });
61        });
62    }
63};
64// include il file javascript esterno ed esegue la funzione callback appena pronto
65it.bookingexpert.SearchBox.template = function (target, opts, html) {
66    // recupera i tag script dal codice del box
67    var scripts = '';
68    var cleaned = html.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function () {
69        scripts += arguments[0];
70        return '';
71    });
72    // blocco offerte
73    cleaned = cleaned.replace(/\{offers(:([\d\w]+))?\}([\s\S]*?)\{\/offers\}/g, function (a, c, d, b) {
74        var h = '';
75        if (typeof it.bookingexpert.SearchBox.offers !== 'undefined') {
76            // cerca estensione
77            var n = null;
78            if (d) {
79                for (var g = 0; g < it.bookingexpert.SearchBox.jsonOffers.length; g++) {
80                    n = it.bookingexpert.SearchBox.jsonOffers[g];
81                    if (n.code === d) {
82                        break;
83                    }
84                }
85            }
86            // formatta le offerte
87            for (var j = 0; j < it.bookingexpert.SearchBox.offers.length; j++) {
88                var f = it.bookingexpert.SearchBox.offers[j];
89                if (n !== null) {
90                    var q = false;
91                    var r = f.type === 'rate' ? n.rates : n.sales;
92                    if (r !== null) {
93                        for (var g = 0; g < r.length; g++) {
94                            if (r[g] === f.id) {
95                                q = true;
96                                break;
97                            }
98                        }
99                    }
100                    if (!n.exclude && !q || n.exclude && q) {
101                        continue;
102                    }
103                }
104                h += b.replace(/\{([^\}]+)\}/g, function (c, d) {
105                    var f = it.bookingexpert.SearchBox.offers[j];
106                    var e = d.split('.');
107                    for (var g = 0; g < e.length; g++) {
108                        if (e[g] === 'hotel' && typeof it.bookingexpert.SearchBox.domain !== 'undefined') {
109                            // cerca informazioni hotel nel dominio
110                            for (var i = 0; i < it.bookingexpert.SearchBox.domain.hotels.length; i++) {
111                                var t = it.bookingexpert.SearchBox.domain.hotels[i];
112                                if (t.id === f[e[g]]) {
113                                    f = t;
114                                    break;
115                                }
116                            }
117                        } else {
118                            f = f[e[g]];
119                        }
120                        if (f === null) {
121                            break;
122                        }
123                    }
124                    return f === null ? '' : f;
125                });
126            }
127        }
128        return h;
129    });
130    // sostituisce i blocchi fino a esaurimento degli stessi
131    var blockexp = /\{(simpleform|hidden|services|categories|places|hotels|dates|guests|guesttypes|guesttypesgroups|ages|options|fieldset|coupon|agencycode|collections)(:(.+?))?\}/g;
132    var temp = '';
133    while (temp !== cleaned) {
134        temp = cleaned;
135        cleaned = temp.replace(blockexp, it.bookingexpert.SearchBox.replace);
136    }
137    // stampa nella destinazione solo html
138    target.innerHTML = cleaned;
139    // registra gli eventi predefiniti
140    var forms = target.getElementsByTagName('form');
141    for (var x = 0; x < forms.length; x++) {
142        if (forms[x].target === opts.modaltarget) {
143            forms[x].onsubmit = it.bookingexpert.SearchBox.modal;
144        }
145    }
146    // crea i tag script e esegue il codice
147    var div = document.createElement('div');
148    div.innerHTML = '.' + scripts;
149    for (var x = 1; x < div.childNodes.length; x++) {
150        var node = div.childNodes[x];
151        var src = node.getAttribute('src');
152        var script = document.createElement('script');
153        script.setAttribute('type', 'text/javascript');
154        if (src !== null) {
155            script.setAttribute('src', src);
156        }
157        script.text = node.innerHTML;
158        target.appendChild(script);
159    }
160};
161// codice html per la generazione del form default
162it.bookingexpert.SearchBox.replace = function () {
163    var b = arguments[1];
164    var c = arguments[3];
165    if (b === 'simpleform') {
166        return it.bookingexpert.SearchBox.replaceSimpleForm();
167    } else if (b === 'fieldset') {
168        return it.bookingexpert.SearchBox.replaceFieldset(c);
169    } else if (b === 'hidden') {
170        return it.bookingexpert.SearchBox.replaceHidden();
171    } else if (b === 'places') {
172        return it.bookingexpert.SearchBox.replacePlaces();
173    } else if (b === 'hotels') {
174        return it.bookingexpert.SearchBox.replaceHotels();
175    } else if (b === 'guests') {
176        return it.bookingexpert.SearchBox.replaceGuests(c);
177    } else if (b === 'guesttypes') {
178        return it.bookingexpert.SearchBox.replaceGuesttypes(c);
179    } else if (b === 'guesttypesgroups') {
180        return it.bookingexpert.SearchBox.replaceGuesttypesGroups(c);
181    } else if (b === 'services') {
182        return it.bookingexpert.SearchBox.replaceServices();
183    } else if (b === 'options') {
184        return it.bookingexpert.SearchBox.replaceOptions(c);
185    } else if (b === 'ages') {
186        return it.bookingexpert.SearchBox.replaceAges(c);
187    } else if (b === 'coupon') {
188        return it.bookingexpert.SearchBox.replaceCoupon(c);
189    } else if (b === 'agencycode') {
190        return it.bookingexpert.SearchBox.replaceAgencies(c);
191    } else if (b === 'categories') {
192        return it.bookingexpert.SearchBox.replaceCategories(c);
193    } else if (b === 'dates') {
194        return it.bookingexpert.SearchBox.replaceDates(c);
195    } else if (b === 'collections') {
196        return it.bookingexpert.SearchBox.replaceCollections(c);
197    }
198    return '';
199};
200
201it.bookingexpert.SearchBox.writeOptions = function (c) {
202    if (!c) {
203        c = '0,9';
204    }
205    var a = c.split(',').map(function (item) {
206        return parseInt(item, 10);
207    });
208    var str = '';
209    for (var y = a[0]; y <= a[1]; y++) {
210        str += '<option value="' + y + '"';
211        if (a[2] == y) {
212            str += ' selected="selected"';
213        }
214        str += '>' + y + '</option>';
215    }
216    return str;
217
218};
219// sostituisce le options per le select dinamiche
220it.bookingexpert.SearchBox.replaceOptions = function (c) {
221    var str = it.bookingexpert.SearchBox.writeOptions(c);
222    var a = c.split(',');
223    if (a.length === 5 && a[4] === 'guest') {
224        it.bookingexpert.SearchBox.gs['guesttypes[0][' + a[3] + ']'] = a[2];
225    }
226    return str;
227};
228
229it.bookingexpert.SearchBox.replaceAges = function (c) {
230    // debugger;
231    var a = c.split(',');
232    var str = '';
233    //    $id,$min,$defval,$agefrom,$ageto,$agedefault,$ageselect,$useagedefault
234    if (a[6] === "true") {
235        str += '<div>';
236        if (a[2] !== '0') {
237            if (!a[3]) {
238                a[3] = 0;
239            }
240            if (!a[4] || a[4] === "null") {
241                a[4] = 18;
242            } else if (a[4] > 18) {
243                a[4] = 18;
244            }
245            for (x = a[1]; x < a[2]; x++) {
246
247                str += it.bookingexpert.SearchBox.strAgeForReplacer(a[0], a[3], a[4], a[5], a[7]);
248            }
249        }
250        str += '</div>';
251    }
252    return str;
253
254};
255
256// it.bookingexpert.SearchBox.showAges = function (guest, agefrom, ageto, agedefault, ageselect, useagedefault) {
257it.bookingexpert.SearchBox.showAges = function (guest, agefrom, ageto, agedefault, ageUsage) {
258
259    let ageselect = ageUsage.split('_')[0] === 'true';
260    let useagedefault = ageUsage.split('_')[1] === 'true';
261
262    // console.log('ageUsage ' + ageUsage);
263    // console.log('ageselect ' + ageselect);
264    // console.log('useagedefault ' + useagedefault);
265    // let ageselect, useagedefault = ageUsage.split('_')[0];
266
267    // console.log({ arguments })
268    // id, agefrom, ageto, agedefault, ageselect
269    // debugger;
270    if (ageselect) {
271        if (!agefrom) {
272            agefrom = 0;
273        }
274        if (!ageto) {
275            ageto = 18;
276        } else if (ageto > 18) {
277            ageto = 18;
278        }
279        var newone = parseInt(jQuery(guest).val());
280        var oldone = parseInt(it.bookingexpert.SearchBox.gs[jQuery(guest).attr('name')]);
281        if (newone > oldone) {
282            for (x = oldone; x < newone; x++) {
283                var str = it.bookingexpert.SearchBox.strAge(jQuery(guest).attr('guestid'), agefrom, ageto, (useagedefault ? agedefault : -1));
284                jQuery('select[name="guesttypes[0][' + jQuery(guest).attr('guestid') + ']"]').parent('div').children('div').first().append(str);
285            }
286        } else {
287            for (x = oldone; x > newone; x--) {
288                jQuery(guest).parent('div').children('div').first().children("div[name='eta']").last().remove();
289            }
290        }
291        it.bookingexpert.SearchBox.gs[jQuery(guest).attr('name')] = newone;
292
293    }
294};
295
296it.bookingexpert.SearchBox.showGroupAges = function (guest, agefrom, ageto, agedefault, ageselect) {
297    // id, agefrom, ageto, agedefault, ageselect
298    if (ageselect) {
299        if (!agefrom) {
300            agefrom = 0;
301        }
302        if (!ageto) {
303            ageto = 18;
304        } else if (ageto > 18) {
305            ageto = 18;
306        }
307        var newone = jQuery(guest).val();
308        var oldone = it.bookingexpert.SearchBox.gs[jQuery(guest).attr('name')];
309        if (oldone === undefined && newone > 0) {
310            oldone = 0;
311        }
312        if (newone > oldone) {
313            for (x = oldone; x < newone; x++) {
314                var str = it.bookingexpert.SearchBox.strAge(jQuery(guest).attr('guestid'), agefrom, ageto, -1);
315                jQuery('select[name="guesttypesgroups[0][' + jQuery(guest).attr('guestid') + ']"]').parent('div').children('div').first().append(str);
316            }
317        } else {
318            for (x = oldone; x > newone; x--) {
319                jQuery(guest).parent('div').children('div').first().children("div[name='eta']").last().remove();
320            }
321        }
322        it.bookingexpert.SearchBox.gs[jQuery(guest).attr('name')] = newone;
323
324    }
325};
326
327it.bookingexpert.SearchBox.strAgeForReplacer = function (guest, agefrom, ageto, agedefault, useAgeDefault) {
328    // debugger;
329    return it.bookingexpert.SearchBox.strAge(guest, agefrom, ageto, useAgeDefault === 'true' ? agedefault : -1);
330}
331
332it.bookingexpert.SearchBox.strAge = function (guest, agefrom, ageto, agedefault) {
333    var str = '<div name="eta"><label>' + it.bookingexpert.SearchBox.lang.age + '</label>';
334    str += `<select name="ages[0][${guest}]" ${agedefault < 0 ? ' required="required"' : ''}>`;
335    str += (agedefault < 0) ? '<option value=""> - </option>' : '';
336    str += it.bookingexpert.SearchBox.writeOptions('' + agefrom + ',' + ageto + ',' + agedefault);
337    str += '</select></div>';
338    return str;
339};
340
341
342
343// sostituisce blocco per luoghi hotels
344it.bookingexpert.SearchBox.onPlaceChange = function (sender) {
345    if (typeof it.bookingexpert.SearchBox.domain !== 'undefined') {
346        var place = sender.value;
347        jQuery('select[name=hotel]', it.bookingexpert.SearchBox.target).each(function () {
348            this.options.length = 1;
349            for (var i = 0; i < it.bookingexpert.SearchBox.domain.hotels.length; i++) {
350                var h = it.bookingexpert.SearchBox.domain.hotels[i];
351                if (place === '' || place === h.city) {
352                    this.options[this.options.length] = new Option(h.name, h.id);
353                }
354            }
355        });
356    }
357};
358// sostituisce blocco date nel caso sia un ecopmmerce prodotti
359it.bookingexpert.SearchBox.replaceDates = function () {
360    var str = '';
361    if (typeof it.bookingexpert.SearchBox.ecommerce !== 'undefined' && it.bookingexpert.SearchBox.hasDates) {
362        str += '<div><label>';
363        str += it.bookingexpert.SearchBox.lang.checkin;
364        str += '</label><input type="text" name="checkin" value="" /></div>';
365        str += '<div><label>';
366        str += it.bookingexpert.SearchBox.lang.checkout;
367        str += '</label><input type="text" name="checkout" value="" /></div>';
368    }
369    return str;
370};
371it.bookingexpert.SearchBox.replaceServices = function () {
372    var str = '';
373    if (typeof it.bookingexpert.SearchBox.services !== 'undefined') {
374        str += '<div><label>';
375        str += it.bookingexpert.SearchBox.lang.service;
376        str += '</label>';
377        str += '<select name="service">';
378        str += '<option value="">';
379        str += it.bookingexpert.SearchBox.lang.all;
380        str += '</option>';
381        for (var i = 0; i < it.bookingexpert.SearchBox.services.length; i++) {
382            var h = it.bookingexpert.SearchBox.services[i];
383            str += '<option value="';
384            str += h.id;
385            str += '">';
386            str += h.name;
387            str += '</option>';
388        }
389        str += '</select>';
390        str += '</div>';
391    }
392    return str;
393};
394// sostituisce blocco per luoghi hotels
395it.bookingexpert.SearchBox.replacePlaces = function () {
396    var str = '';
397    if (typeof it.bookingexpert.SearchBox.domain !== 'undefined') {
398        var places = {};
399        var sorted = [];
400        for (var i = 0; i < it.bookingexpert.SearchBox.domain.hotels.length; i++) {
401            var h = it.bookingexpert.SearchBox.domain.hotels[i];
402            if (!places[h.city]) {
403                places[h.city] = 1;
404                sorted.push(h.city);
405            }
406        }
407        sorted.sort();
408        str += '<select onchange="it.bookingexpert.SearchBox.onPlaceChange(this)" name="place">';
409        str += '<option value="">';
410        str += it.bookingexpert.SearchBox.lang.allplaces;
411        str += '</option>';
412        for (var i in sorted) {
413            str += '<option>';
414            str += sorted[i];
415            str += '</option>';
416        }
417        str += '</select>';
418    }
419    return str;
420};
421// sostituisce blocco per nomi hotels
422it.bookingexpert.SearchBox.replaceHotels = function () {
423    var str = '';
424    if (typeof it.bookingexpert.SearchBox.domain !== 'undefined') {
425        str += '<select name="hotel">';
426        str += '<option value="">';
427        str += it.bookingexpert.SearchBox.lang.allhotels;
428        str += '</option>';
429        for (var i = 0; i < it.bookingexpert.SearchBox.domain.hotels.length; i++) {
430            var h = it.bookingexpert.SearchBox.domain.hotels[i];
431            str += '<option value="';
432            str += h.id;
433            str += '">';
434            str += h.name;
435            str += '</option>';
436        }
437        str += '</select>';
438    }
439    return str;
440};
441// sostituisce blocco per combiazioni ospiti
442it.bookingexpert.SearchBox.replaceGuests = function (c) {
443    if (!c) {
444        c = '<option value="$id"$favhtml>$description</option>';
445    }
446    return it.bookingexpert.SearchBox.replaceFields(it.bookingexpert.SearchBox.guests, c
446);
447};
448// sostituisce blocco per tipologie ospiti
449it.bookingexpert.SearchBox.replaceGuesttypes = function (c) {
450    // console.log({ c })
451    if (!c) {
452        // <option>0</option>
453        c = '<div><label>$name</label><select name="guesttypes[0][$id]" guestid="$id"'
454            + ' onchange="it.bookingexpert.SearchBox.showAges(this, $agefrom, $ageto, $agedefault, \'$ageselect_$useagedefault\')">'
455            + '{options:$min,$max,$defval,$id,guest}</select>{ages:$id,$min,$defval,$agefrom,$ageto,$agedefault,$ageselect,$useagedefault}</div>';
456    }
457    return it.bookingexpert.SearchBox.replaceFields(it.bookingexpert.SearchBox.guesttypes, c);
458};
459// sostituisce blocco per tipologie ospiti (gruppi)
460it.bookingexpert.SearchBox.replaceGuesttypesGroups = function (c) {
461    if (!c) {
462        // <option>0</option>
463        c = '<div><label>$name</label><select name="guesttypesgroups[0][$id]" guestid="$id"'
464            + ' onchange="it.bookingexpert.SearchBox.showGroupAges(this, $agefrom, $ageto, $agedefault, $ageselect)">'
465            + '{options:$min,$max,$defval,$id,guest}</select>{ages:$id,$min,$defval,$agefrom,$ageto,$agedefault,$ageselect,-1}</div>';
466    }
467    return it.bookingexpert.SearchBox.replaceFields(it.bookingexpert.SearchBox.guesttypesgroups, c);
468};
469// sostituisce blocco per coupon
470it.bookingexpert.SearchBox.replaceCoupon = function (c) {
471    var str = '<div><label>';
472    str += it.bookingexpert.SearchBox.lang.coupon;
473    str += '</label><input type="text" name="coupon" /></div>';
474    return str;
475};
476// sostituisce blocco per agenzie
477it.bookingexpert.SearchBox.replaceAgencies = function (c) {
478    var str = '<div><label>';
479    str += it.bookingexpert.SearchBox.lang.agencycode;
480    str += '</label><input type="text" name="agencycode" /></div>';
481    return str;
482};
483// sostituisce blocco per tag/zone (collections)
484it.bookingexpert.SearchBox.replaceCollections = function () {
485    var str = '<div><label>';
486    str += it.bookingexpert.SearchBox.lang.collections;
487    str += '</label>';
488    if (typeof it.bookingexpert.SearchBox.domain !== 'undefined') {
489        str += '<ul>';
490        for (var i = 0; i < it.bookingexpert.SearchBox.collections.length; i++) {
491            var h = it.bookingexpert.SearchBox.collections[i];
492            str += '<li><input type="checkbox" name="collections[]" class="checkbox" value="';
493            str += h.id;
494            str += '" />';
495            str += h.title;
496            str += '</li>';
497        }
498        str += '</ul>';
499    }
500    str += '</div>';
501    return str;
502};
503// sostituisce i segnaposti con i rispettivi valori
504it.bookingexpert.SearchBox.replaceFields = function (a, c) {
505    // debugger;
506    var fieldexp = /\$([a-z]+)/g;
507    var str = '';
508    if (a) {
509        for (var x = 0; x < a.length; x++) {
510            str += c.replace(fieldexp, function () {
511                return a[x][arguments[1]];
512            });
513        }
514    }
515    return str;
516};
517
518it.bookingexpert.SearchBox.onCategoryChange = function (sender) {
519    var category = sender.value;
520    jQuery('select[name=service]', it.bookingexpert.SearchBox.target).each(function () {
521        for (var i = 0; i < this.options.length; i++) {
522            this.options[i] = null;
523        }
524        this.options[0] = new Option('', '');
525        var j = 1;
526        for (i = 0; i < it.bookingexpert.SearchBox.services.length; i++) {
527            if (it.bookingexpert.SearchBox.services[i].category == category || category == '') {
528                this.options[j++] = new Option(it.bookingexpert.SearchBox.services[i].name, it.bookingexpert.SearchBox.services[i].id);
529            }
530        }
531        this.options.length = j;
532    });
533};
534
535// sostituisce blocco per servizi ecommerce
536it.bookingexpert.SearchBox.replaceCategories = function () {
537    var str = '';
538    if (typeof it.bookingexpert.SearchBox.categories !== 'undefined') {
539        str += '<div><label>';
540        str += it.bookingexpert.SearchBox.lang.category;
541        str += '</label>';
542        str += '<select name="category" onchange="it.bookingexpert.SearchBox.onCategoryChange(this)">';
543        str += '<option value="">';
544        str += it.bookingexpert.SearchBox.lang.all;
545        str += '</option>';
546        for (var i = 0; i < it.bookingexpert.SearchBox.categories.length; i++) {
547            var h = it.bookingexpert.SearchBox.categories[i];
548            str += '<option value="';
549            str += h.id;
550            str += '">';
551            str += h.name;
552            str += '</option>';
553        }
554        str += '</select>';
555        str += '</div>';
556    }
557    return str;
558};
559// codice html per la generazione del form default
560it.bookingexpert.SearchBox.replaceSimpleForm = function () {
561    var str = '<form target="_blank" action="';
562    str += it.bookingexpert.SearchBox.url;
563    str += it.bookingexpert.SearchBox.contextPath;
564    str += it.bookingexpert.SearchBox.action;
565    str += '" method="post">';
566    str += '{fieldset:nights}</form>';
567    return str;
568};
569// campi hidden
570it.bookingexpert.SearchBox.replaceHidden = function () {
571    var str = '';
572    if (typeof it.bookingexpert.SearchBox.domain !== 'undefined') {
573        str += '<input type="hidden" name="domain" value="';
574        str += it.bookingexpert.SearchBox.domain.id;
575        str += '" />';
576    } else {
577        str += '<input type="hidden" name="hotel" value="';
578        str += it.bookingexpert.SearchBox.hotel;
579        str += '" />';
580    }
581    str += '<input type="hidden" name="lang" value="';
582    str += it.bookingexpert.SearchBox.lang.code;
583    str += '" />';
584
585    str += '<input type="hidden" name="bbtmSearchbar" id="bbtmSearchbar" value="" />';
586
587    if (typeof it.bookingexpert.SearchBox.ecommerce !== 'undefined') {
588        str += '<input type="hidden" name="ecommerce" value="';
589        str += it.bookingexpert.SearchBox.ecommerce;
590        str += '" />';
591    }
592    return str;
593};
594// codice html per la generazione dei campi della form
595it.bookingexpert.SearchBox.replaceFieldset = function (b) {
596    var str = '{hidden}';
597    if (typeof it.bookingexpert.SearchBox.ecommerce === 'undefined' || it.bookingexpert.SearchBox.hasDates) {
598        str += '<div><label>';
599        str += it.bookingexpert.SearchBox.lang.checkin;
600        str += '</label><input type="text" name="checkin" value="';
601        if (it.bookingexpert.SearchBox.layout.checkin) {
602            str += it.bookingexpert.SearchBox.layout.checkin;
603        }
604        str += '" /></div><div><label>';
605        if (b === 'nights') {
606            str += it.bookingexpert.SearchBox.lang.nights;
607            str += '</label><select name="nights">{options:1,10,';
608            str += it.bookingexpert.SearchBox.layout.nights;
609            str += '}</select>';
610        } else if (b === 'checkout') {
611            str += it.bookingexpert.SearchBox.lang.checkout;
612            str += '</label><input type="text" name="checkout" value="" />';
613        }
614        str += '</div>';
615    }
616    str += '<div><label>';
617    str += it.bookingexpert.SearchBox.lang.guests;
618    str += '</label><select name="guests[]">{guests}</select></div><div>';
619    str += '<input type="submit" name="search" value="';
620    str += it.bookingexpert.SearchBox.lang.search;
621    str += '" /></div><a href="http://www.bookingexpert.it" target="_blank"><img src="';
622    str += it.bookingexpert.SearchBox.url;
623    str += '/resources/images/searchboxpowered.png" alt="" /><span>';
624    str += it.bookingexpert.SearchBox.lang.ssl;
625    str += '</span></a>';
626    return str;
627};
628// include il file javascript esterno ed esegue la funzione callback appena pronto
629it.bookingexpert.SearchBox.include = function (src, callback) {
630    if (src instanceof Array) {
631        var tail = src;
632        src = tail.shift();
633        if (tail.length > 0) {
634            var prevcallback = callback;
635            callback = function () {
636                it.bookingexpert.SearchBox.include(tail, prevcallback);
637            };
638        }
639    }
640    var script = document.createElement('script');
641    script.setAttribute('type', 'text/javascript');
642    if (callback) {
643        if (script.readyState) {
644            // IE
645            script.onreadystatechange = function () {
646                if (script.readyState === "loaded" || script.readyState === "complete") {
647                    script.onreadystatechange = null;
648                    callback();
649                }
650            };
651        } else {
652            // Others
653            script.onload = callback;
654        }
655    }
656    script.src = src;
657    document.getElementsByTagName("head")[0].appendChild(script);
658};
659// apre una finestra modale per la destinazione del post di una form
660it.bookingexpert.SearchBox.modal = function () {
661    var iframe = document.getElementsByName(this.target);
662    if (iframe.length === 0) {
663        // crea il frame interno
664        iframe = document.createElement('iframe');
665        iframe.setAttribute('name', this.target);
666        iframe.className = this.target;
667        // div container (padding)
668        var container = document.createElement('div');
669        container.className = this.target + 'container';
670        container.appendChild(iframe);
671        // div background (opacity)
672        var background = document.createElement('div');
673        background.className = this.target + 'background';
674        background.appendChild(container);
675        background.onclick = function () {
676            this.parentNode.removeChild(this);
677        };
678        document.body.appendChild(background);
679    }
680};
681// formatta una data in stringa
682it.bookingexpert.SearchBox.dateToString = function (s, v) {
683    if (!s)
684        s = 'd/m/Y';
685    if (!v)
686        v = new Date();
687    var x = {
688        d: v.getDate(),
689        m: v.getMonth(),
690        Y: v.getFullYear()
691    };
692    if (x.d < 10)
693        x.d = '0' + x.d;
694    if (x.m < 10)
695        x.m = '0' + x.m;
696    return s.replace(/[Ymd]/g, function () {
697        return x[arguments[0]];
698    });
699};
700// trasforma una casella input in un selettore di date
701it.bookingexpert.SearchBox.datepicker = function (a) {
702    a.setAttribute('type', 'hidden');
703    var selday = document.createElement('select');
704    var selmonth = document.createElement('select');
705    var selyear = document.createElement('select');
706    var now = new Date();
707    for (var i = 1; i <= 31; i++)
708        selday.options[selday.options.length] = new Option(i < 10 ? '0' + i : i);
709    for (var i = 1; i <= 12; i++)
710        selmonth.options[selmonth.options.length] = new Option(it.bookingexpert.SearchBox.lang['month' + i], i < 10 ? '0' + i : i);
711    for (var i = now.getFullYear(); i <= now.getFullYear() + 2; i++)
712        selyear.options[selyear.options.length] = new Option(i, i);
713    selday.selectedIndex = now.getDate() - 1;
714    selmonth.selectedIndex = now.getMonth();
715    selyear.selectedIndex = 0;
716    selday.onchange = selmonth.onchange = selyear.onchange = function () {
717        a.value = selyear.value + '/' + selmonth.value + '/' + selday.value;
718    };
719    a.value = selyear.value + '/' + selmonth.value + '/' + selday.value;
720    a.parentNode.insertBefore(selday, a);
721    a.parentNode.insertBefore(selmonth, a);
722    a.parentNode.insertBefore(selyear, a);
723};
724// carica il widget per la struttura selezionata
725it.bookingexpert.SearchBox.loadHotel = function (id, target, code) {
726    if (id > 0) {
727        var u = it.bookingexpert.SearchBox.url;
728        u += it.bookingexpert.SearchBox.contextPath;
729        if (typeof it.bookingexpert.SearchBox.ecommerce === 'undefined') {
730            u += "/websites/searchbox?static=false&hotel=";
731        } else {
732            u += "/websites/servicebox?static=false&hotel=";
733        }
734        u += id;
735        u += "&lang=";
736        u += it.bookingexpert.SearchBox.lang.code;
737        if (target && code) {
738            u += "&target=";
739            u += target;
740            u += "&code=";
741            u += code;
742        }
743        var scriptid = 'besearchboxhoteldyn';
744        var script = document.getElementById(scriptid);
745        if (script)
746            script.parentNode.removeChild(script);
747        script = document.createElement('script');
748        script.src = u;
749        script.id = scriptid;
750        document.body.appendChild(script);
751    }
752};
753// seleziona uno degli hotel nel dominio
754it.bookingexpert.SearchBox.selectDomainHotel = function (id) {
755    if (typeof it.bookingexpert.SearchBox.domain !== 'undefined') {
756        jQuery('select[name=hotel]', it.bookingexpert.SearchBox.target).val(id);
757        for (var i = 0; i < it.bookingexpert.SearchBox.domain.hotels.length; i++) {
758            var h = it.bookingexpert.SearchBox.domain.hotels[i];
759            if (id === h.id) {
760                jQuery('select[name=place]', it.bookingexpert.SearchBox.target).val(h.city);
761            }
762        }
763    }
764};
765// trasforma una casella input in un selettore di date
766it.bookingexpert.SearchBox.getCheckout = function () {
767    var d = new Date(it.bookingexpert.SearchBox.layout.checkin);
768    d.setDate(d.getDate() + it.bookingexpert.SearchBox.layout.nights);
769    return d;
770};
771
772it.bookingexpert.SearchBox.isMobile = function () {
773    var check = false;
774    (function (a) {
775        if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)))
776            check = true;
777    })(navigator.userAgent || navigator.vendor || window.opera);
778    return check;
779
780    // fixIsMobile
781    // il precedente controllo va rivisto,
782    // utilizzerei il touch e < 1280px con una funzione di questo tipo
783
784    // const hasMatchMedia = typeof window.matchMedia === 'function';
785
786    // const isTouch = hasMatchMedia
787    //     ? window.matchMedia('(any-pointer: coarse)').matches
788    //     : ('ontouchstart' in window || navigator.maxTouchPoints > 0);
789
790    // const isNarrow = hasMatchMedia
791    //     ? window.matchMedia('(max-width: 1279px)').matches
792    //     : window.innerWidth < 1440;
793
794    // return isTouch && isNarrow;
795};
796
797it.bookingexpert.SearchBox.bookingBooster = function (target) {
798    const booster = `
799        import { BBTM } from "https://cdn.bookingbooster.it/bbtm/0.8.X/vendor.js";
800        const bbtm = new BBTM();
801        initializeBookingBooster();
802
803        async function initializeBookingBooster() {
804            console.log("BOOSTER: initializeBookingBooster()");
805            await bbtm.init()
806                .then((session) => {
807                    console.log("BOOSTER: then", session);
808                    $("#bbtmSearchbar").val(bbtm.getSessionToken()?.toString());
809                })
810                .catch((error) => {
811                    console.error("BOOSTER: catch", error);
812                });
813        }
814    `;
815
816    const script = document.createElement("script");
817    script.setAttribute("type", "module");
818    script.text = booster;
819
820    target.appendChild(script);
821};it.bookingexpert.SearchBox.lang = {"code":"en","ssl":"Information protected with 256 bit SSL Certificate","search":"Search","checkin":"Check-in","month12":"Dec","month11":"Nov","collections":"Tag\/Areas","agencycode":"Agencies\/Companies\/TO","checkout":"Check-out","all":"","month1":"Jan","allplaces":"All locations","month2":"Feb","month3":"Mar","month4":"Apr","coupon":"Coupon","month5":"May","month6":"Jun","month7":"Jul","month8":"Aug","month9":"Sep","month10":"Oct","nights":"Nights","service":"Additional service","guests":"Guests","allhotels":"All Properties","category":"Category","age":"Age (years)"};it.bookingexpert.SearchBox.action = "\/simple\/step1";it.bookingexpert.SearchBox.url = "https:\/\/booking.borgodelcabreo.it";it.bookingexpert.SearchBox.contextPath = "\/book";it.bookingexpert.SearchBox.html = [{"code":"Default","html":"<form action=\"https:\/\/booking.borgodelcabreo.it\/book\/simple\/step1\" target=\"_blank\">\r\n    {hidden}\r\n    <div class=\"checkin\">\r\n        <label>Arrival<\/label>\r\n        <div class=\"searchboxIn\">\r\n            <span class=\"searchboxInDay\"><\/span>\r\n            <span class=\"searchboxInMonths\"><\/span>\r\n        <\/div>\r\n        <input type=\"text\" name=\"checkin\" value=\"\" \/>\r\n    <\/div>\r\n    <div class=\"checkout\">\r\n        <label>Departure<\/label>\r\n        <div class=\"searchboxOut\">\r\n            <span class=\"searchboxOutDay\"><\/span>\r\n            <span class=\"searchboxOutMonths\"><\/span>\r\n        <\/div>\r\n        <input type=\"text\" name=\"checkout\" value=\"\" \/>\r\n    <\/div>\r\n    {guesttypes}\r\n    {coupon}\r\n    <div>\r\n        <input type=\"submit\" name=\"search\" value=\"Book\" \/>\r\n    <\/div>\r\n<\/form>\r\n<script type=\"text\/javascript\">\r\n    \/\/ impostazioni globali datepicker\r\n    var dplang = jQuery.datepicker.regional[\"en\"];\r\n    var m = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n    var dpopts = {\r\n        dateFormat:'dd-mm-yy',\r\n        showOtherMonths: true,\r\n        minDate:new Date(),\r\n        beforeShowDay: function(date){\r\n            var dateMin = checkin.datepicker(\"getDate\");\r\n            var dateMax = checkout.datepicker(\"getDate\");\r\n            return [true, date >= dateMin && date <= dateMax ? 'date-range-selected' : ''];\r\n        }\r\n    };\r\n    \/\/ inizializza data arrivo e partenza\r\n    var checkin = jQuery(\"#searchbox input[name=checkin]\");\r\n    var checkout = jQuery(\"#searchbox input[name=checkout]\");\r\n    checkin.datepicker(dpopts, dplang);\r\n    checkout.datepicker(dpopts, dplang);\r\n    checkin.datepicker('option', 'onSelect', function() {\r\n        var dateMin = checkin.datepicker(\"getDate\");\r\n        var rMin = new Date(dateMin.getFullYear(), dateMin.getMonth(),dateMin.getDate() + 1); \r\n        checkout.datepicker(\"option\", \"minDate\", rMin);\r\n        var dayIn = jQuery.datepicker.formatDate('dd', checkin.datepicker('getDate'));\r\n        var dayOut = jQuery.datepicker.formatDate('dd', checkout.datepicker('getDate'));\r\n        monthIn = jQuery.datepicker.formatDate('MM', checkin.datepicker('getDate'), {monthNames: m});\r\n        monthOut = jQuery.datepicker.formatDate('MM', checkout.datepicker('getDate'), {monthNames: m});\r\n        jQuery('.searchboxInDay').text(dayIn);\r\n        jQuery('.searchboxOutDay').text(dayOut);\r\n        jQuery('.searchboxInMonths').text(monthIn);\r\n        jQuery('.searchboxOutMonths').text(monthOut);\r\n    });\r\n    checkout.datepicker('option', 'onSelect', function () {\r\n        jQuery('.searchboxOutDay').text(jQuery.datepicker.formatDate('dd', checkout.datepicker('getDate')));\r\n    });    \r\n    \/\/ imposta i valori predefiniti\r\n    checkin.datepicker('setDate', new Date(it.bookingexpert.SearchBox.layout.checkin));\r\n    checkout.datepicker('setDate', it.bookingexpert.SearchBox.getCheckout());\r\n    var dayIn = jQuery.datepicker.formatDate('dd', checkin.datepicker('getDate'));\r\n    var dayOut = jQuery.datepicker.formatDate('dd', checkout.datepicker('getDate'));\r\n    var monthIn = jQuery.datepicker.formatDate('MM', checkin.datepicker('getDate'), {monthNames: m});\r\n    var monthOut = jQuery.datepicker.formatDate('MM', checkout.datepicker('getDate'), {monthNames: m});\r\n    jQuery('.searchboxInDay').text(dayIn);\r\n    jQuery('.searchboxOutDay').text(dayOut);\r\n    jQuery('.searchboxInMonths').text(monthIn);\r\n    jQuery('.searchboxOutMonths').text(monthOut);\r\n    jQuery('#ui-datepicker-div').hide();\r\n    \/\/ trigger datepicker show\r\n    jQuery('.searchboxIn').click(function (){\r\n       jQuery(checkin).datepicker('show');\r\n    });\r\n    jQuery('.searchboxOut').click(function (){\r\n       jQuery(checkout).datepicker('show');\r\n    });\r\n    if (it.bookingexpert.SearchBox.isMobile()) {\r\n        function changeCheckOut() {\r\n            if (new Date(checkin.val()) >= new Date(this.value)) {\r\n                var c = new Date(checkin.val());\r\n                c.setDate(c.getDate() + 1);\r\n                this.value = c.toISOString().substring(0, 10);\r\n            }\r\n        }\r\n\r\n        checkin.attr('type', 'date').datepicker('destroy').val(new Date(it.bookingexpert.SearchBox.layout.checkin).toISOString().substring(0, 10));\r\n        checkout.attr('type', 'date').datepicker('destroy').val(it.bookingexpert.SearchBox.getCheckout().toISOString().substring(0, 10));\r\n        checkin.change(function () {\r\n            if (new Date(this.value) < new Date()) {\r\n                    this.value = new Date().toISOString().substring(0, 10);\r\n            }\r\n        });\r\n        checkout.change(changeCheckOut).focus(changeCheckOut);\r\n    }\r\n<\/script>"}];it.bookingexpert.SearchBox.hotel = "20054";it.bookingexpert.SearchBox.layout = {"id":5255,"nights":1,"checkin":"2026-10-05"};it.bookingexpert.SearchBox.guests = [{"id":98174,"favorite":false,"description":"2 Adults + 2 Babies (0-2)","favhtml":""},{"id":98173,"favorite":false,"description":"1 Adult + 2 Babies (0-2)","favhtml":""},{"id":98175,"favorite":false,"description":"1 Adult + 3 Babies (0-2)","favhtml":""},{"id":98166,"favorite":false,"description":"1 Adult","favhtml":""},{"id":98168,"favorite":false,"description":"3 Adults","favhtml":""},{"id":98167,"favorite":true,"description":"2 Adults","favhtml":" selected=\"selected\""},{"id":98170,"favorite":false,"description":"1 Adult + 1 Baby (0-2)","favhtml":""},{"id":98169,"favorite":false,"description":"4 Adults","favhtml":""},{"id":98172,"favorite":false,"description":"3 Adults + 1 Baby (0-2)","favhtml":""},{"id":98171,"favorite":false,"description":"2 Adults + 1 Baby (0-2)","favhtml":""}];it.bookingexpert.SearchBox.guesttypes = [{"id":9677,"defval":2,"min":1,"max":4,"agefrom":3,"agedefault":18,"ageto":null,"ageselect":false,"useagedefault":true,"name":"Adults"},{"id":9679,"defval":0,"min":0,"max":3,"agefrom":0,"agedefault":0,"ageto":2,"ageselect":false,"useagedefault":true,"name":"Babies (0-2)"}];it.bookingexpert.SearchBox.collections = [];

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.