HEX
Server: Apache
System: Linux webm004.cluster123.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User: dronicaehy (124008)
PHP: 8.5.0
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/dronicaehy/www/FCC_VT_Dronica/script.js
function TourScript(settings, devicesUrl) {
    this._settings = settings;
    this._devicesUrl = devicesUrl;
    this._player = undefined;
    this._playersPlayingTmp = [];
    this._isInitialized = false;
    this._isPaused = false;
    this._handlers = {};
}

TourScript.DEVICE_GENERAL = "general";
TourScript.DEVICE_MOBILE = "mobile";
TourScript.DEVICE_VR = "vr";

TourScript.DEVICE_ORIENTATION_PORTRAIT = "portrait";
TourScript.DEVICE_ORIENTATION_LANDSCAPE = "landscape";

TourScript.EVENT_TOUR_LOADED = "tourLoaded";
TourScript.EVENT_TOUR_ENDED = "tourEnded";

TourScript.prototype.bind = function(eventName, handler) {
    if(!(eventName in this._handlers))
        this._handlers[eventName] = [];
    this._handlers[eventName].push(handler);
};

TourScript.prototype.unbind = function(eventName, handler) {
    if(eventName in this._handlers) {
        var index = this._handlers[eventName].indexOf(handler);
        if(index != -1)
            this._handlers[eventName].splice(index, 1);
    }
};

TourScript.prototype.createNewEvent = function(eventName) {
    if (typeof(Event) === 'function')
        return new Event(eventName);
    var event = document.createEvent('Event');
    event.initEvent(eventName, true, true);
    return event;
};

TourScript.prototype.dispatchEvent = function(event) {
    if(event['type'] in this._handlers) {
        var handlers = this._handlers[event['type']];
        for(var i = 0; i < handlers.length; ++i) {
            handlers[i].call(window, event);
            if(event.defaultPrevented)
                break;
        }
    }
};

TourScript.prototype.disposeTour = function() {
    if(!this._player)
        return;

    if(this._onHashChange){
        window.removeEventListener("hashchange", this._onHashChange);
        this._onHashChange = undefined;
    }

    if(this._onKeyUp){
        document.removeEventListener("keyup", this._onKeyUp);
        this._onKeyUp = undefined;
    }

    this._player.delete();
    this._player = undefined;
};

TourScript.prototype.loadTour = function() {
    if(this._player)
        return;

    var beginFunc = function(event){
        if(event.name == 'begin')
        {
            var camera = event.data.source.get('camera');
            if(camera && camera.get('initialSequence') && camera.get('initialSequence').get('movements').length > 0)
                return;
        }

        if(event.sourceClassName == "MediaAudio")
            return;

        this._isInitialized = true;

        player.unbind('preloadMediaShow', beginFunc, player, true);
        player.unbindOnObjectsOf('PanoramaPlayListItem', 'begin', beginFunc, player, true);
        player.unbind('stateChange', beginFunc, player, true);

        if(this._isPaused)
            pauseTour();

        window.parent.postMessage(TourScript.EVENT_TOUR_LOADED, '*');
        this.dispatchEvent(this.createNewEvent(TourScript.EVENT_TOUR_LOADED));
    };

    var device = TourScript.DEVICE_GENERAL;
    if(this.isMobile() && TourScript.DEVICE_MOBILE in this._devicesUrl) {
        device = TourScript.DEVICE_MOBILE;
    }
    var scriptUrl = this._devicesUrl[device];
    var listenOrientationChanges = false;
    var orient = TourScript.DEVICE_ORIENTATION_LANDSCAPE;
    if(typeof scriptUrl == "object") {
        orient = window.innerWidth > window.innerHeight ? TourScript.DEVICE_ORIENTATION_LANDSCAPE : TourScript.DEVICE_ORIENTATION_PORTRAIT;
        if(orient in scriptUrl) {
            scriptUrl = scriptUrl[orient];
            listenOrientationChanges = true;
        }
    }

    this._settings.set(TDV.PlayerSettings.SCRIPT_URL, scriptUrl);
    var player = this._player = TDV.PlayerAPI.create(this._settings);
    player.bind('preloadMediaShow', beginFunc, this, true);
    player.bind('stateChange', beginFunc, this, true);
    player.bindOnObjectsOf('PanoramaPlayListItem', 'begin', beginFunc, this, true);
    player.bindOnObject('rootPlayer', 'start', function(e){
        var rootPlayer = e.data.source;
        this._setMediaFromURL(location.hash.substr(1), false) || this._setMediaFromURL(location.search.substr(1), true);

        if(listenOrientationChanges) {
            var orientChange = function(){
                if(!rootPlayer.isCardboardViewMode() && rootPlayer.get('orientation') != orient)
                {
                    this.updateDeepLink();
                    this.disposeTour();
                    this.loadTour();
                }
            };
            var panoramaPlayers = rootPlayer.getByClassName('PanoramaPlayer');
            for(var i = 0; i<panoramaPlayers.length; ++i)
            {
                panoramaPlayers[i].bind('viewModeChange', orientChange, this);
            }
            rootPlayer.bind('orientationChange', orientChange, this);
        }

        this._onHashChange = function() {
            this._setMediaFromURL(location.hash.substr(1), false);
        }.bind(this);
        this._onKeyUp = function(e) {
            if(e.key == "u") {
                this.updateDeepLink();
                this._copyClipboard(location.href);
            }
        }.bind(this);
        window.addEventListener("hashchange", this._onHashChange);
        document.addEventListener("keyup", this._onKeyUp);
        
        //     var index = e.source.get('selectedIndex');
        //     location.hash = "#media-index="+(index+1);
        // }, this);

        rootPlayer.bind('tourEnded', function(){
            dispatchEvent(this.createNewEvent(TourScript.EVENT_TOUR_ENDED));
        }, player, true);
    }, this, false);

    // Listen messages
    window.addEventListener('message', function (e) {
        var action = e.data;
        if (action == 'pauseTour' || action == 'resumeTour') {
            this[action].apply(this);
        }
    });
};

TourScript.prototype.pauseTour = function() {
    this._isPaused = true;
    if(!this._isInitialized)
        return;

    var playLists = player.getByClassName('PlayList');
    for(var i = 0, count = playLists.length; i<count; i++)
    {
        var playList = playLists[i];
        var index = playList.get('selectedIndex');
        if(index != -1)
        {
            var item = playList.get('items')[index];
            var itemPlayer = item.get('player');
            if(itemPlayer && itemPlayer.pause)
            {
                this._playersPlayingTmp.push(itemPlayer);
                itemPlayer.pause();
            }
        }
    }

    this._player.getById('pauseGlobalAudios')();
};

TourScript.prototype.resumeTour = function() {
    this._isPaused = false;
    if(!this._isInitialized)
        return;

    while(this._playersPlayingTmp.length)
    {
        var viewer = this.playersPlayingTmp.pop();
        viewer.play();
    }

    this._player.getById('resumeGlobalAudios')();
};

TourScript.prototype.setMediaByIndex = function(index) {
    var rootPlayer = this._getRootPlayer();
    if(rootPlayer !== undefined) {
        return rootPlayer.setMainMediaByIndex(index);
    }
};

TourScript.prototype.setMediaByName = function(name) {
    var rootPlayer = this._getRootPlayer();
    if(rootPlayer !== undefined) {
        return rootPlayer.setMainMediaByName(name);
    }
};

TourScript.prototype.triggerOverlayByName = function(item, name, eventName) {
    var rootPlayer = this._getRootPlayer();
    if(rootPlayer !== undefined) {
        item.bind('begin', function(e){
            item.unbind('begin', arguments.callee, this);
            var overlay = rootPlayer.getPanoramaOverlayByName(item.get('media'), name);
            if(overlay)
                rootPlayer.triggerOverlay(overlay, eventName);
        }, rootPlayer);
    }
};

TourScript.prototype.updateDeepLink = function() {
    var rootPlayer = this._getRootPlayer();
    if(rootPlayer !== undefined) {
        var index = rootPlayer.mainPlayList.get('selectedIndex');
        location.hash = "#media=" + (index + 1);
    }
};

TourScript.prototype.isMobile = function() {
        return /(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(navigator.userAgent||navigator.vendor||window.opera);
};

TourScript.prototype._copyClipboard = function(text) {
    if (navigator.clipboard) {
        navigator.clipboard.writeText(text);
    }
    else {
        var textArea = document.createElement("textarea");
        textArea.value = text;
        textArea.style.position = "fixed";  //avoid scrolling to bottom
        document.body.appendChild(textArea);
        textArea.focus();
        textArea.select();

        try {
            document.execCommand('copy');
        } catch (err) {
        }

        document.body.removeChild(textArea);
    }
};

TourScript.prototype._getRootPlayer = function() {
    return this._player !== undefined ? this._player.getById('rootPlayer') : undefined;
};

TourScript.prototype._setMediaFromURL = function(params, applyDefault) {
    var queryDict = {}; params.split("&").forEach(function(item) {var k = item.split("=")[0], v = decodeURIComponent(item.split("=")[1]);queryDict[k] = v});
    var item = undefined;
    if("media" in queryDict){
        var param = queryDict["media"];
        var num = Number(param);
        item = isNaN(num) ? this.setMediaByName(param) : this.setMediaByIndex(num-1);
    }
    else if("media-index" in queryDict){
        item = this.setMediaByIndex(parseInt(queryDict["media-index"])-1);
    }
    else if("media-name" in queryDict){
        item = this.setMediaByName(queryDict["media-name"]);
    }
    if(item == undefined && applyDefault){
        item = this.setMediaByIndex(0);
    }
    if(item != undefined && "trigger-overlay-name" in queryDict){
        this.triggerOverlayByName(item, queryDict["trigger-overlay-name"], "trigger-overlay-event" in queryDict ? queryDict["trigger-overlay-event"] : "click");
    }
    return item != undefined;
};