
        if (window.jQuery) {
            window.jQuery(window).ready(function() {
                ITH_init();
            });
        } else {
            var ITH_readyStateCheckInterval = setInterval(function() {
                    if (document.readyState === "complete") {
                        clearInterval(ITH_readyStateCheckInterval);
                        ITH_init();
                    }
                }, 10);
        }

        function ITH_init() {
            var target  = 'booking-form';
            target = (target != '') ? document.getElementById(target) : null;
            if (!target) {
                target = document.createElement("div");
                document.body.appendChild(target);
            }
            var appendExternalScripts = function (src, onload) {
                var headID = document.getElementsByTagName("head")[0] || document.documentElement;
                var newScript = document.createElement('script');
                newScript.type = 'text/javascript';
                if (onload) {
                    var done = false;
                    newScript.onload = newScript.onreadystatechange = function() {
                        if ( !done && (!this.readyState ||
                                this.readyState === "loaded" || this.readyState === "complete") ) {
                            done = true;
                            onload();
                            newScript.onload = newScript.onreadystatechange = null;
                        }
                    };
                }
                newScript.src = src;
                headID.appendChild(newScript);
            };
            var appendExternalCss = function (href, media) {
                var headID = document.getElementsByTagName("head")[0] || document.documentElement;
                var cssNode = document.createElement('link');
                cssNode.type = 'text/css';
                cssNode.rel = 'stylesheet';
                cssNode.href = href;
                cssNode.media = (media) ? media : 'screen';
                headID.appendChild(cssNode);
            };
            var appendText = function (parent, id, name, value, maxlen) {
                var txt = document.createElement("input");
                txt.id = id;
                txt.name = name;
                txt.maxLength = (maxlen) ? maxlen : 10;
                txt.type = "text";
                if (value) { txt.value = value; }
                parent.appendChild(txt);
            };
            var appendHidden = function (parent, name, value) {
                var txt = document.createElement("input");
                txt.name = name;
                txt.type = "hidden";
                if (value) { txt.value = value; }
                parent.appendChild(txt);
            };
            var appendHiddenWithId = function (parent, name, value, id) {
                var txt = document.createElement("input");
                txt.name = name;
                txt.type = "hidden";
                txt.id = id;
                if (value) { txt.value = value; }
                parent.appendChild(txt);
            };



            var appendSelect = function (parent, id, name, opts, value) {
                var sel = document.createElement("select");
                sel.id = id;
                sel.name = name;

				if (opts instanceof Array) {
					for (var i = 0; i < opts.length; i++) {
						var v = opts[i];
						var nop = document.createElement("option");
						nop.text = opts[v];
						nop.value = v;
						nop.selected = (value) && (v == value);
						try {
							sel.add(nop, null);
						} catch (e) {
							sel.add(nop);
						}
					}
				} else {
					for (var v in opts) {
						var nop = document.createElement("option");
						nop.text = opts[v];
						nop.value = v;
						nop.selected = (value) && (v == value);
						try {
							sel.add(nop, null);
						} catch (e) {
							sel.add(nop);
						}
					}
				}
                parent.appendChild(sel);
            };

            var appendSelectOrder = function (parent, id, name, opts, value) {
                var sel = document.createElement("select");
                sel.id = id;
                sel.name = name;

                for (var v in opts) {
                    var nop = document.createElement("option");
                    nop.text = opts[v].label;
                    nop.value = opts[v].id;
                    nop.selected = (value) && (opts[v].id == value);
                    try {
                        sel.add(nop, null);
                    } catch (e) {
                        sel.add(nop);
                    }
                }
                parent.appendChild(sel);
            };

            var appendSelectChildAge = function (parent, id, name, opts, value, show_extrabed_label) {
                var sel = document.createElement("select");
                sel.id = id;
                sel.name = name;
                sel.addEventListener('change', function(event) {
                      // remove all select with id childAge_n  (1..n)
                      var extraBedDiv = document.getElementById("ITH_Extra_div");

                      var elements = document.getElementsByTagName('select')
                      var elementsToRemove = [];
                      for(var i=0; i<elements.length; i++) {
                        var select = elements[i];
                        var id = select.id;
                        var values =  id.split("_");
                        if(values[0] == 'childAge'){
                            elementsToRemove.push(select);
                        }

                      }
                      for (var elementToRemove in elementsToRemove){
                        extraBedDiv.removeChild(elementsToRemove[elementToRemove]);
                      }

                      var childAgeLabel = document.getElementById("childAgeLabel");
                      if(childAgeLabel){
                        extraBedDiv.removeChild(childAgeLabel);
                      }


                      if(this.value > 0 ){

                        var lblChildAge = document.createElement("Label");
                        lblChildAge.setAttribute("for",'childAge');
                        lblChildAge.innerHTML = "Age";
                        lblChildAge.id = 'childAgeLabel';
                        lblChildAge.class = 'lblChildAge';
                        extraBedDiv.appendChild(lblChildAge);


                        for(var i = 1; i <= this.value;i++){
                            // add to extraBedDiv
                            var sel = document.createElement("select");
                            sel.id = "childAge_" + i;
                            sel.name = "childAge[" + i + "]";
                            for (var z = 0; z <= 17; z++) {
                                var nop = document.createElement("option");
                                nop.text = z;
                                nop.value = z;
                                nop.selected = (z == 0);
                                try {
                                    sel.add(nop, null);
                                } catch (e) {
                                    sel.add(nop);
                                }
                            }
                            if(show_extrabed_label != 0) {
                                var nop = document.createElement("option");
                                nop.text = "Adult";
                                nop.value = 20;
                                try {
                                    sel.add(nop, null);
                                } catch (e) {
                                    sel.add(nop);
                                }
                            }
                            extraBedDiv.appendChild(sel);
                        }
                      }




                    });
				if (opts instanceof Array) {
					for (var i = 0; i < opts.length; i++) {
						var v = opts[i];
						var nop = document.createElement("option");
						nop.text = opts[v];
						nop.value = v;
						nop.selected = (value) && (v == value);
						try {
							sel.add(nop, null);
						} catch (e) {
							sel.add(nop);
						}
					}
				} else {
					for (var v in opts) {
						var nop = document.createElement("option");
						nop.text = opts[v];
						nop.value = v;
						nop.selected = (value) && (v == value);
						try {
							sel.add(nop, null);
						} catch (e) {
							sel.add(nop);
						}
					}
				}
                parent.appendChild(sel);
            };

            var appendLabel = function (parent, forid, text) {
                var cap = document.createElement("label");
                cap.setAttribute("for", forid);
                cap.innerHTML = text;
                parent.appendChild(cap);
                return cap;
            };
            var appendDiv = function (parent, id) {
                var div = document.createElement("div");
                div.id = id;
                parent.appendChild(div);
                return div;
            };
            var appendCr = function (parent) {
                parent.appendChild(document.createElement("br"));
            };
            var appendAnchor = function (parent, id, text, onclick) {
                var a = document.createElement("a");
                a.id = id;
                a.innerHTML = text;
                a.onclick = onclick;
                parent.appendChild(a);
                return a;
            };
            var appendButton = function (parent, text, id, onclick) {
                var btn = document.createElement("button");
                try {
                    btn.type = "button";
                } catch (ex) {}
                if (btn.type != "button") {
                    try {
                        btn.setAttribute("type", "button");
                    } catch (ex) {}
                }
                btn.onclick = onclick;
                btn.id = id;
                btn.innerHTML = text;
                parent.appendChild(btn);
                return btn;
            };
            var appendSubmit = function (parent, text) {
                var btn = document.createElement("button");
                try {
                    btn.type = "submit";
                } catch (ex) {}
                if (btn.type != "submit") {
                    try {
                        btn.setAttribute("type", "submit");
                    } catch (ex) {}
                }
                var ie7 = (navigator.appVersion.indexOf("MSIE") != -1) && (document.all && !document.querySelector);
                if (ie7) {
                    btn.onclick = function () { btn.form.submit(); };
                }
                btn.name = "ITH_submit";
                btn.innerHTML = text;
                parent.appendChild(btn);
            };
            var stringToDate = function (str) {
                var dd = parseInt(str.substr(0, 2), 10);
                var mm = parseInt(str.substr(3, 2), 10);
                var yy = parseInt(str.substr(6, 4), 10);
                if (isNaN(dd) || isNaN(mm) || isNaN(yy)) { return new Date(); }
                return new Date(yy, mm - 1, dd, 0, 0, 0, 0);
            };
            var dateToString = function (dt) {
                return ('00' + dt.getDate()).slice(-2) + '/' + ('00' + (dt.getMonth() + 1)).slice(-2) + '/' + ('0000' + dt.getFullYear()).slice(-4);
            };
            var dateToStringPacked = function (dt) {
                return ('0000' + dt.getFullYear()).slice(-4) + ('00' + (dt.getMonth() + 1)).slice(-2) + ('00' + dt.getDate()).slice(-2);
            };
            var getTomorrow = function (today) {
                var tomorrow = new Date(today.getTime() + 86400000);
                if (today.getHours() > tomorrow.getHours()) {
                    tomorrow.setTime(tomorrow.getTime() + 3600000);
                } else if (today.getHours() < tomorrow.getHours()) {
                    tomorrow.setTime(tomorrow.getTime() - 3600000);
                }
                return tomorrow;
            };
            var checkDate = function (str) {
                str = str.replace(/^\s+|\s+$/g, '');
                if (str.length != 10) { return false; }
                var dd = parseInt(str.substr(0, 2), 10);
                var mm = parseInt(str.substr(3, 2), 10);
                var yy = parseInt(str.substr(6, 4), 10);
                if (isNaN(dd) || isNaN(mm) || isNaN(yy)) { return false; }
                var dt = new Date(yy, mm - 1, dd, 0, 0, 0, 0);
                return ((dt.getFullYear() == yy) && (dt.getMonth() + 1 == mm) && (dt.getDate() == dd));
            };
            var getOffset = function (el) {
                var x = 0, y = 0;
                do {
                    x += el.offsetLeft;
                    y += el.offsetTop;
                }
                while (el = el.offsetParent);
                return { "left": x, "top": y };
            };
            var trimStr = function (s) {
                return s.replace(/^\s+|\s+$/g, '');
            };
                    appendExternalCss("https://booking.holidayonline.org//css/datepicker.css");
        appendExternalScripts(
            "https://booking.holidayonline.org//js/lang/en.js",
            function () {
                appendExternalScripts(
                    "https://booking.holidayonline.org//js/datepicker.js",
                    function () {
                        var today = new Date();
                        var tomorrow = getTomorrow(today);
                        var frm = document.createElement("form");
                        frm.id = "ITH_MainForm";
                        frm.method = "POST";
                        frm.action = "https://booking.holidayonline.org/hotel-margherita.php?cmd=getscript&op=post";
                        
                        frm.onsubmit = function () {
                            var sKey = document.getElementById("ITH_sKey");
                            var text = "";
                            var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
                            for (var i = 0; i < 6; i++)
                                text += possible.charAt(Math.floor(Math.random() * possible.length));
                            sKey.value = text;
                            var dtin = document.getElementById("ITH_dtCheckIn").value;
                            if (!checkDate(dtin)) {
                                alert("Arrival date\nWrong or missing field.");
                                return false;
                            }
                            var dtout = document.getElementById("ITH_dtCheckOut").value;
                            if (!checkDate(dtout)) {
                                alert("Departure date\nWrong or missing field.");
                                return false;
                            }
                            dtin  = stringToDate(dtin);
                            dtout = stringToDate(dtout);
                            if (dtin >= dtout) {
                                alert("Departure date\nWrong or missing field.");
                                return false;
                            }
                            var pax = document.getElementById("ITH_Pax").value;
                            pax = parseInt(pax, 10);
                            if ((isNaN(pax)) || (pax < 1) || (pax > 99)) {
                                alert("Beds\nWrong or missing field.");
                                return false;
                            }
                            var extra = document.getElementById("ITH_Extra");
                            if (extra) {
                                extra = extra.value;
                                if ((isNaN(extra)) || (extra < 0) || (extra > 99)) {
                                    alert("Children\nWrong or missing field.");
                                    return false;
                                }
                            }
                            for (var i = 0; i < this.length; i++) {
                                if (this.elements[i].name == "ITH_submit") {
                                    this.elements[i].disabled = true;
                                    break;
                                }
                            }
                            return true;
                        };
                        var divCheckin = appendDiv(frm, "ITH_dtCheckIn_div");
                            var secret = appendLabel(divCheckin, "ITH_dtCheckIn", "In");
                            secret.onmousedown = function (e) {
                                var evt = (e) ? e : window.event;
                                if (evt.shiftKey) {
                                    if (!document.getElementById("ITH_tracePopup") && (1)) {
                                        var dv = appendDiv(document.body, "ITH_tracePopup");
                                        dv.style.position = "absolute";
                                        dv.style.left = "80px";
                                        dv.style.top = "80px";
                                        dv.style.width = "600px";
                                        dv.style.height = "350px";
                                        dv.style.zIndex = "999999";
                                        dv.style.padding = "20px";
                                        dv.style.border = "2px solid black";
                                        dv.style.backgroundColor = "white";
                                        dv.style.color = "black";
                                        dv.style.fontName = "Monospace";
                                        dv.style.overflow = "auto";
                                        dv.style.textAlign = "left";
                                        var s = "";
                                        s += "<p><b>TIME:</b><br/><span>2023-03-21 03:24:51</span></p>";
                                        s += "<p><b>CLIENTIP:</b><br/><span>3.236.241.39</span></p>";
                                        s += "<p><b>AGENT:</b><br/><span>CCBot/2.0 (https://commoncrawl.org/faq/)</span></p>";
                                        dv.innerHTML = s;
                                        var bx = appendButton(dv, "Ok", "ITH_tracePopupClose", function () {
                                            dv.removeChild(bx);
                                            document.body.removeChild(dv);
                                        });
                                        bx.style.margin = "50px 0 0 0";
                                        bx.style.width = "100px";
                                        bx.style.height = "40px";
                                        bx.style.display = "block";
                                    }
                                }
                            };
                            appendText(divCheckin, "ITH_dtCheckIn", "checkin", dateToString(today));
                        var divCheckout = appendDiv(frm, "ITH_dtCheckOut_div");
                            appendLabel(divCheckout, "ITH_dtCheckOut", "Out");
                            appendText(divCheckout, "ITH_dtCheckOut", "checkout", dateToString(tomorrow));
                        var divPax = appendDiv(frm, "ITH_Pax_div");
                            appendLabel(divPax, "ITH_Pax", "N. of adults");
                            appendSelect(divPax, "ITH_Pax", "pax", {"1":1,"2":2,"3":3,"4":4} , "2");  
                        
                            
                            appendHidden(frm, "extrabed", "0");
                            
                            appendHidden(frm, "show_extrabed", "0");
                            
                            appendHidden(frm, "show_extrabed_label", "0");

                        
                            
                            
                        
                            
                            appendHidden(frm, "codag", "");
                        
                            
                            appendHidden(frm, "lang", "EN");
                        
                            
                            appendHidden(frm, "category", "");
                        appendHidden(frm, "show_category", "0");
                        
                            
                            
                        
                        appendHidden(frm, "custom_rule", "");
                        appendHidden(frm, "setpreventivo", "");
                        appendHidden(frm, "quotetemplate", "");
                        appendHidden(frm, "splitcart", "");
                        appendHidden(frm, "contactId", "");
                        appendHidden(frm, "currency", "");
                        appendHidden(frm, "version", "2");
                        appendHidden(frm, "tag", "");

                        appendHidden(frm, "estid", "105906");
                        appendHidden(frm, "channel", "9999");
                        appendHidden(frm, "referer", "https://www.albergo-margherita.it");
                        appendHiddenWithId(frm, "sKey", "A4l0BP","ITH_sKey");
                        appendSubmit(frm, "Book now");
                        var divLang = appendDiv(target, "ITH_CurrLang_EN");
                        divLang.appendChild(frm);
                        datePickerController.createDatePicker({
                            formElements:{
                                "ITH_dtCheckIn": "%d/%m/%Y"
                            },
                            callbackFunctions:{
                                "dateset": [ function (obj) {
                                        var dtin = obj.date;
                                        var checkout = document.getElementById("ITH_dtCheckOut");
                                        if (!checkout) { return; }
                                        var dtout = stringToDate(checkout.value);
                                        if (dateToString(dtout) != checkout.value) {
                                            checkout.value = "";
                                        } else {
                                            if (dateToStringPacked(dtin) >= dateToStringPacked(dtout)) {
                                                checkout.value = "";
                                            }
                                        }
                                        if (checkout.value == "") {
                                            checkout.value = dateToString(getTomorrow(dtin));
                                        }
                                        datePickerController.setRangeLow("ITH_dtCheckOut", dateToStringPacked(getTomorrow(dtin)));
                                    }
                                ]
                            },
                            noFadeEffect: true,
                            dragDisabled: true,
                            finalOpacity: 100,
                            statusFormat: "%l, %d %F %Y",
                            highlightDays: [0,0,0,0,0,1,1],
                            rangeLow: dateToStringPacked(today)
                        });
                        datePickerController.createDatePicker({
                            formElements:{
                                "ITH_dtCheckOut": "%d/%m/%Y"
                            },
                            noFadeEffect: true,
                            dragDisabled: true,
                            finalOpacity: 100,
                            statusFormat: "%l, %d %F %Y",
                            highlightDays: [0,0,0,0,0,1,1],
                            rangeLow: dateToStringPacked(tomorrow)
                        });

                    }
                );
            }
        );
        }
