
var scriptCounter = (scriptCounter || 0);

(function() {
    var iFrame = document.createElement('iframe');
    var src = null;

                
                                                        
        
    
            
    
        
            

                        
                                                
                            
                                                
                            
                                                
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
            
    
                        
                        
    iFrame.id = "gastronaviReservationWidget-" + scriptCounter;
    iFrame.src = "https://services.gastronovi.com/restaurants/5905/reservation/widget/referral?embed=1&companyRoute=1&fixedButton=0&iframeId=" + iFrame.id;
    iFrame.width = "100%";
    iFrame.height = "400";
    iFrame.setAttribute("style", "max-width: 100%; display: block;");
    iFrame.frameBorder = "0";
    iFrame.allow = "payment";

    var scripts = document.getElementsByTagName('script');

    for(var i=0; i < scripts.length; i++){
        if(scripts[i].src && scripts[i].src.indexOf('/restaurants/5905/scripts/reservation') != -1){
            var scriptExecuted = scripts[i].getAttribute('data-gn-executed');

            if(!scriptExecuted) {
                scripts[i].setAttribute('gn-executed', true);

                src = scripts[i];
                scriptCounter++;
                break;
            }
        }
    }

    var wrapper = document.createElement('div');
    wrapper.setAttribute("style", "position: relative; width: 100%; margin:auto;");

            wrapper.style.width = "100%";
    
    var loadingOverlay = document.createElement('div');
    loadingOverlay.setAttribute("style", "z-index: 99; position: absolute; left: 0; top: 0; right: 0; bottom: 0;");
    var innerHtml = '<span style="position: absolute; left: 0; right: 0; top: 50px; bottom: 0; margin: -36px auto 0; width: 72px; height: 72px; border-radius: 3px; background-color: #FFFFFF;">';
    innerHtml += '<span style="position: absolute; top: 6px; left: 6px; width: 60px; height: 60px; background: url(\'https://services.gastronovi.com/images/reservation/load.gif\') center center; background-size: 100%; "></span>';
    innerHtml += '</span>';
    loadingOverlay.innerHTML = innerHtml;
    iFrame.style.visibility = "hidden";

    wrapper.appendChild(loadingOverlay);
    wrapper.appendChild(iFrame);

    var showIframeHandler = function() {
        if (wrapper.contains(loadingOverlay)) {
            wrapper.removeChild(loadingOverlay);
        }
        iFrame.style.visibility = "visible";
    };

    var onload = function(e) {
        window.setTimeout(function() {
            if (wrapper.contains(loadingOverlay)) {
                console.warn("loadingOverlay timed out, hide overlay before getting initialized from iframe");
                showIframeHandler();
            }
        }, 5000); // fallback ... always remove overlay after load + 5sec
    };

    if (iFrame.addEventListener) {
        iFrame.addEventListener('load', onload, false);
    } else {
        iFrame.attachEvent('onload', onload);
    }

    if(src) src.parentNode.insertBefore(wrapper, src);

    var onmessage = function(e) {
        var iframeId = e.data[0]
        var eventName = e.data[1];
        var data = e.data[2];

        if (iframeId && iframeId != iFrame.id) {
            return;
        }

        switch(eventName) {
            case 'setHeight':
                var prevBoundings = iFrame.getBoundingClientRect();
                var prevScrollPosition = document.documentElement.scrollTop || document.body.scrollTop;

                iFrame.height = data;
                iFrame.style.height = data + (data.toString().match(/(%|px)/) ? "" : "px");

                var boundings = iFrame.getBoundingClientRect();

                if(prevBoundings.top + prevBoundings.height > 0 && boundings.top < 0) {
                    var scrollDiff = Math.min(prevBoundings.height-boundings.height, boundings.top*-1);

                    if(scrollDiff > 0) document.documentElement.scrollTop = document.body.scrollTop = prevScrollPosition - scrollDiff;
                }

                break;
            case 'initialized':
                showIframeHandler();

                if (window.self != window.top) {
                    e.source.postMessage(['parent', 'isSandboxed', true], '*');
                } else {
                    e.source.postMessage(['parent', 'isSandboxed', false], '*');
                }
                break;
        }
    };

    if (window.addEventListener) {
        window.addEventListener('message', onmessage, false);
    } else {
        window.attachEvent('onmessage', onmessage);
    }
})();

