/*
 * All rights reserved. For license information, contact Picture Mosaics at
 * http://www.picturemosaics.com
 */
//Global Viewer  variable
var viewer;
//Zoom Timeout
var myZTO;
//click Timeout
var myCTO;
//double click timeout
var myWTO;
var myWTO2;
var mobileSearchZoom=0;
var doubleClickCheck = fingerCheck = screenWidth = screenHeight =  indexX = indexY = tourLength = secondClick = shares = 0;
var photoData;
var prevCordX = prevCordY = -1;
var photoCode = searchPane = "";
var xmlHotspots = new Array();
var photosClicked = new Array();
var canStore = $.jStorage.storageAvailable();
var iPad = 0;
var iPadContentWidth = 0;
const photoAction = {click:"click",share:"share",like:"like", unlike:"unlike"};
//set mobileAnimation to 1 to enable animation on mobile devices
var mobileAnimation = 0;
//set mobileOverlay to 1 to enable overlay on mobile devices (without animation)
var mobileOverlay = 0;

var boxWidth = cellSizeX / viewX_orig;
var boxHeight = cellSizeY / viewX_orig;
var cellCenterPointOffsetX = cellSizeX / 2;
var cellCenterPointOffsetY = cellSizeY / 2;

var $time = Date.now || function() {
  return +new Date;
};


/*
*
********************Viewer functions
********************FLASH VIEWER FUNCTION
*
*/


//This function is used to find the information about the clicked or searched photo
function fromFlashViewer(x,y, openSwiper) {
    indexX = Math.floor(x / cellSizeX) + 1;
    indexY = Math.floor(y / cellSizeY) + 1;
    $.ajax({
        url: "getPhoto.php",
        type: "POST",
        data: {
            indexX: indexX,
            indexY: indexY
        },
        dataType: "html",
        success: function(data) {
            photoData = JSON.parse(data);
            if(photoData.validData) {
            $('#embedLink').text("https://"+GLOBAL_DOMAIN+"?key="+photoData.info.code+langAPass);
            $('#embedImg').attr('src', 'upload_flat_complete/thumbnail/'+photoData.info.code+'.jpg');
                if (openSwiper) {
                    if ((mobileUpload && doubleClickCheck == 1) || doubleClickCheck == 2) {
                        clearTimeout(myCTO);
                        myCTO=setTimeout(function(){popupPhoto(photoData.info.pm_id);},50);                    
                    }
                }
            }
            if(windowWidth>767){
                completedPhoto();
            }
        }
    });
}

//function that creates Viewer viewer then sets the listeners for mobile and desktop, after the Viewer viewer is made
function createMosaic(){
    //define variables used in calculation
    document.getElementById('pm_viewer_holder').style.height=($('#viewer_holder').width()/mosaicRatio)+'px';
    mobileSearchZoom = (viewX_orig/$('#pm_viewer').width())*1.1;
    viewer = new PictureMosaicViewer({
        id: "pm_viewer",
        prefixUrl: "images/controls/",
        constrainDuringPan: true,
        visibilityRatio: 1.0,
        minZoomImageRatio :1,
        maxZoomImageRatio :1,
        debugMode:  false,
        showNavigator:  false,
        zoomPerScroll:2,
        zoomPerSecond:8,
        ajaxWithCredentials:true,
        debugGridColor:'#fff',
        toolbar:'navControlBox',
        zoomInButton:   "plusNavControl",
        zoomOutButton:  "minusNavControl",
        homeButton:     "resetNavControl",
        fullPageButton: "fScreenNavControl",
        tileSources:    [{
            type:       "zoomifytileservice",
            width:      viewX_orig,
            height:     viewY_orig,
            tilesUrl:   pmPath+'/'
        }]
    });
    
    //run home button listener
    runHomeButtonListener();
    //run zoom listener
    runZoomListener();
    //run canvas enter listener
    runCanvasEnterListener();
    //run canvas exit listener
    runCanvasExitListener();
    //assign listeners for mobile or desktop (add more mobile contraints other than width if needed i.e. navigator.userAgent)
    if(navigator.userAgent.match(/iPhone/i)){
        runMobileListeners(0);
    } else if(navigator.userAgent.match(/iPad/i)) {
        //iPad specific listeners
        runIpadSpecificListeners();
        iPad = 1;
    } else {        
        if(!navigator.userAgent.match(/Android/i)){
            //run Desktop based listeners (add more mobile contraints other than width if needed i.e. navigator.userAgent)
            runDesktopSpecificListeners();
            //start Animation if desktop
            if(emailGet == '0'){
               // resetMosaic();
            }
        } else {
            runMobileListeners(1);
        }
        //add Escape listeners for fullscreen
        if (document.addEventListener) {
            document.addEventListener('webkitfullscreenchange', exitHandler, false);
            document.addEventListener('mozfullscreenchange', exitHandler, false);
            document.addEventListener('fullscreenchange', exitHandler, false);
            document.addEventListener('MSFullscreenChange', exitHandlerMS, false);
        }
    }

    //run canvas press listeners
    runCanvasPressListener();
    //run canvas drag listeners
    runCanvasDragEndListener();
    //run canvas cilck listeners
    runCanvasClickListener();
    //run canvas scroll listeners
    runCanvasScrollListener();
    //run zoom button listeners
    runOSDZoomButtonListeners();
   
    //check if load keyword is active    
    if(loadKeyword){
        document.getElementById('searchClear').style.display='block';
        setTimeout(function(){  searchViewer(loadKeyword);}, 790);
    }
   
    viewer.addHandler('canvas-release', function() {
        resetTimeoutW();
    });
    var tracker = new PictureMosaicViewer.MouseTracker({
        element:'pm_viewer',
        moveHandler: mousemove
    });
    tracker.setTracking(true);
}

function mousemove(event){
    if(windowWidth > 767 && !iPad){
        var target = event.originalEvent.target;
        if(target.id!='white-overlay' && target.id != null){
            if( !$('.infoHolder').length || !document.getElementsByClassName("infoHolder")[0].contains(target)){
                var point = new PictureMosaicViewer.Point( event.position.x, event.position.y );
                // The canvas-click event gives us a position in web coordinates.
                var webPoint = event.position;

                // Convert that to viewport coordinates, the lingua franca of PictureMosaicViewer coordinates.
                var viewportPoint = viewer.viewport.pointFromPixel(webPoint);

                // Convert from viewport coordinates to image coordinates.
                var imagePoint = viewer.viewport.viewportToImageCoordinates(viewportPoint);

                //get top left of image clicked
                var viewportCoords = viewer.viewport.imageToViewportCoordinates(Math.floor(imagePoint.x / cellSizeX) * cellSizeX, Math.floor(imagePoint.y / cellSizeY) * cellSizeY);

                var point = new PictureMosaicViewer.Point(viewportPoint.x , viewportPoint.y);
                viewer.removeOverlay('white-overlayT');
                var elt = document.createElement("div");
                elt.id = "white-overlayT";
                elt.className = "overlayS";
                    viewer.addOverlay({
                    element: elt,
                    location: new PictureMosaicViewer.Rect(viewportCoords.x,viewportCoords.y,boxWidth,boxHeight)
                })
                    elt.style.border='5px solid rgba(255,255,255,1)'
            
                if(!document.getElementById("white-overlay"+viewportCoords.x+'_'+viewportCoords.y)){
                    viewer.removeOverlay('white-overlayT');

                    var elt = document.createElement("div");
                    elt.id = "white-overlay"+viewportCoords.x+'_'+viewportCoords.y;
                    elt.className = "overlayF";
                    viewer.addOverlay({
                        element: elt,
                        location: new PictureMosaicViewer.Rect(viewportCoords.x,viewportCoords.y,boxWidth,boxHeight)
                    });
                    var r=Math.floor((Math.random() * 255) + 1);
                    var g=Math.floor((Math.random() * 255) + 1);
                    var b=Math.floor((Math.random() * 255) + 1);
                    elt.style.border='5px solid rgba(255,255,255,1)';
                    elt.addEventListener("webkitAnimationEnd", myEndFunction);
                }
            }
        } else{
            viewer.removeOverlay('white-overlayT');
            target.style.border='5px solid rgba(255,255,255,1)';
        }
    }
}

function myEndFunction(event){
    viewer.removeOverlay(event.target.id);
}

//runMobileListeners
function runMobileListeners(android){
    runZoomListenerMobile();
    document.getElementById('plusNavControl').style.display='none';
    document.getElementById('minusNavControl').style.display='none';
    document.getElementById('resetNavControl').style.display='none';
    $("#fScreenNavControl").addClass("mobileFullscreenNavControl");
    addMobileFullscreen(android);
}

function addMobileFullscreen(android){
    viewer.fullPageButton.removeAllHandlers();
    viewer.fullPageButton.addHandler("click", function () {
        $("#uploadBtn").prop("disabled",true);
        pauseAnimation();
        viewer.removeOverlay("white-overlay");
        if(android) {
            PictureMosaicViewer.requestFullScreen(document.getElementById('pm_viewer_holder'));
        } else {
            if (openSearch) {runSearchPane();}
            $(window).scrollTop(0);
            $("#pm_viewer_holder").css({
                'position' : 'fixed',
                'width' : '100%',
                'height' : '100%',
                'top' : '0px',
                'z-index' : '9999',
                'left' : '0px'
            });
            
            window.parent.postMessage('PictureMosaics-fullscreen-1', "*");
            // window.close();

            // if (zoomNow <= 1 && allowAnimation) {
            //     setTimeout(function(){checkRestart()}, 500);
            // }
        }
         $("#fScreenNavControl").addClass("mobileExitFullscreenNavControl");
        addMobileExitFullscreen(android);
    });
}

function addMobileExitFullscreen(android){
    viewer.fullPageButton.removeAllHandlers();
    viewer.fullPageButton.addHandler("click", function () {
        if(android) {
            PictureMosaicViewer.exitFullScreen();
        } else {
            $("#pm_viewer_holder").css({
                'position' : 'relative',
                'width' : '100%',
                'height' : ($("#pm_viewer_holder").width()/mosaicRatio)+'px',
                'z-index' : '99'
            });
            window.parent.postMessage('PictureMosaics-fullscreen-0', "*");
           // window.close(); <- this is breaking things in iOS14+
        }
        $("#fScreenNavControl").removeClass("mobileExitFullscreenNavControl");
        addMobileFullscreen(android);
        return false;
    });
    setTimeout(function() {
        $("#uploadBtn").prop("disabled",false);        
      }, 300);
}

//runHomeButtonListeners
function runHomeButtonListener(){
    viewer.homeButton.addHandler("click", function () {
        // pauseAnimation();
        // viewer.clearOverlays();
        // removePhotoInfo();

        // if(windowWidth>767){
        //     if(!userImgHome) {
        //         pauseAnimation(1);
        //         //myZoomTimeout
        //         clearTimeout(myZTO);
        //         myZTO = setTimeout(function(){ 
        //             var zoomC = viewer.viewport.getZoom(true);
        //             if(zoomC<=1.03){
        //                 resetMosaic();
        //             };
        //         }, 3000);
        //     }
        // } else{
        //     resetTimeoutMobile();
        // }
        // $('#overlayImg').css("display", "none");
    });
}
//runZoomListener
function runZoomListener(){
    viewer.addHandler('zoom', function(event) {
        var zoom = viewer.viewport.getZoom(true);
        if(zoom<=3.5){
            removePhotoInfo();
        }
        if(zoom<=1.00001&&!mobileUpload){
            resetTimeout();
        }
    });
}
//runZoom Listener for mobile
function runZoomListenerMobile(){
    viewer.addHandler('zoom', function(event) {
        var zoom = viewer.viewport.getZoom(true);
        if(zoom<=1.04001){
            if(mobileAnimation){
                resetTimeout();
            }else if(mobileOverlay){
                createMobileOverlay();
            } else{
                resetTimeoutMobile();
            }
        }
    });
}
//adds an overlay image to the viewer(function called on mobile only)
function createMobileOverlay(){
    viewer.clearOverlays();
    $('#overlayImg').css("display", "none");
    var elt = document.createElement("div");
    elt.id = "overlayImg";
    elt.className = "overlayImg";
    viewer.addOverlay({
        element: elt,
        location: new PictureMosaicViewer.Rect(0,0,1, 1)
    })
}
//reset timeout on full zoom out
function resetTimeout(){

    clearTimeout(myZTO);

    myZTO = setTimeout(function(){ //stopTour(   );// calcImgMax();startAnimation()

        var zoomC = viewer.viewport.getZoom(true);
        if(zoomC<=1.03){
            if(!userImgHome) {
                resetMosaic();
            }
        }else{
            resetTimeout();
            $('#overlayImg').css("display", "none");
        }

    }, 3000);
}
//reset timeout on full zoom out for mobile
function resetTimeoutMobile(){

    clearTimeout(myZTO);

    myZTO = setTimeout(function(){ //stopTour(   );// calcImgMax();startAnimation()

        var zoomC = viewer.viewport.getZoom(true);
        if(!zoomC<=1.03){
            resetTimeoutMobile();
            $('#overlayImg').css("display", "none");
        }
    }, 3000);
}
//checks when poitner or mouse enters canvas
function runCanvasEnterListener(){
      viewer.addHandler('canvas-enter', function(event) {
        if(windowWidth <= 767){
            if(event.pointers>1){
                fingerCheck=1;
                removePhotoInfo();
            }
            $('#overlayImg').css("display", "none");
        }

        if(iPad){
            if(event.pointers>1){
                fingerCheck=1;
                removePhotoInfo();
            }

        }

    });

}

//run Canvas exit listener for two finger pinchzoom
function runCanvasExitListener(){
    viewer.addHandler('canvas-exit', function(event) {
		fingerCheck=0;
		// event.preventDefault();
		viewer.setMouseNavEnabled(false);
		viewer.setMouseNavEnabled(true);
    });
}

//ipad Specific listeners
function runIpadSpecificListeners(){
    viewer.addHandler('canvas-exit', function(event) {
        var zoom = viewer.viewport.getZoom(true);
        if(zoom<=4){
            removePhotoInfo();
        }
    });

    viewer.fullPageButton.removeAllHandlers();
    viewer.fullPageButton.addHandler("click", function () {
        pauseAnimation();
        viewer.removeOverlay("white-overlay");
        if (document.getElementById('fScreenNavControl').className=='') {
            $("#fScreenNavControl").addClass("minScreenNavControl");
            $("#fScreenNavControl").prop('title', exitFullScreen);            
            $("#pm_viewer_holder").css({
            'position' : 'fixed',
            'width' : '100%',
            'height' : '100%',
            'top' : '0px',
            'z-index' : '9999',
            'left' : '0px'
            });
        } else {
            $("#pm_viewer_holder").css({
            'position' : 'relative',
            'width' : '100%',
            'height' : ($("#viewer_holder").width()/mosaicRatio)+'px',
            'z-index' : '99'
            });
            $("#fScreenNavControl").removeClass("minScreenNavControl");
            $("#fScreenNavControl").prop('title', fullControl);
        }
    });
}

//desktop based listeners
function runDesktopSpecificListeners(){
    document.getElementById('fScreenNavControl').className='';
    viewer.fullPageButton.removeAllHandlers();
    viewer.fullPageButton.addHandler("click", function () {
        pauseAnimation();
        if (document.getElementById('fScreenNavControl').className=='') {
            pauseAnimation(2);
            var myTO;
            clearTimeout(myTO);
            $("#pm_viewer_holder").height('100%');
            $("#fScreenNavControl").addClass("minScreenNavControl");
            $("#fScreenNavControl").prop('title', exitFullScreen);
            PictureMosaicViewer.requestFullScreen(document.getElementById('pm_viewer_holder'));
        } else {
            PictureMosaicViewer.exitFullScreen();
            $("#fScreenNavControl").removeClass("minScreenNavControl");
            $("#fScreenNavControl").prop('title', fullControl);
        }
    });

}

function canvasClickHandler(event) {
    var target = event.originalEvent.target;
    if ($(target).parents('.infoHolder').length) {
        //console.log("clicked on infoHolder");
        event.preventDefaultAction = true;
    } else if(target.id=='white-overlay'){
        console.log("mobileUpload = " + mobileUpload + "; doubleClickCheck = " + doubleClickCheck);
       // if(doubleClickCheck==1){
            // The canvas-click event gives us a position in web coordinates.
            var webPoint = event.position;

            // Convert that to viewport coordinates, the lingua franca of PictureMosaicViewer coordinates.
            var viewportPoint = viewer.viewport.pointFromPixel(webPoint);

            // Convert from viewport coordinates to image coordinates.
            var imagePoint = viewer.viewport.viewportToImageCoordinates(viewportPoint);
            event.preventDefaultAction = true;
            
            // fromFlashViewer(imagePoint.x,imagePoint.y)
            fromFlashViewer(imagePoint.x,imagePoint.y, 1);
       // } 
    } else{
        doubleClickCheck=1;
        if(fingerCheck==0){
        // The canvas-click event gives us a position in web coordinates.
        var webPoint = event.position;

        // Convert that to viewport coordinates, the lingua franca of PictureMosaicViewer coordinates.
        var viewportPoint = viewer.viewport.pointFromPixel(webPoint);
        
        // Convert from viewport coordinates to image coordinates.
        var imagePoint = viewer.viewport.viewportToImageCoordinates(viewportPoint);
        var zoom = viewer.viewport.getZoom(true);
        
        var zoomMobile=4;
        if(windowWidth <= 767){
            zoomMobile=10;
        }
        if(zoom > zoomMobile){
                var tiledImage = viewer.world.getItemAt(0);
                var tile, tileRight, tileBottom;
                for (var i = 0; i < tiledImage.lastDrawn.length; i++) {
                    tile = tiledImage.lastDrawn[i];
                    tileRight = tile.position.x + tile.size.x;
                    tileBottom = tile.position.y + tile.size.y;
                }
                var bounds = viewer.viewport.getBounds(true);
                var currentRect = viewer.viewport.viewportToImageRectangle(bounds);
                var rect = viewer.viewport.imageToViewportRectangle(imagePoint.x-(cellSizeX*1.7), imagePoint.y-(cellSizeY*2), currentRect.width, currentRect.height);

                fromFlashViewer(imagePoint.x,imagePoint.y,mobileUpload);

                if( (prevCordX != indexX || prevCordY != indexY  )  ) {
                    viewer.removeOverlay("white-overlay");
                    var elt = document.createElement("div");
                    elt.id = "white-overlay";
                    elt.className = "overlay";


                    var rect = viewer.viewport.imageToViewportRectangle(imagePoint.x, imagePoint.y,20,20);

                    //get top left of image clicked
                    var iPos = {x: Math.floor(imagePoint.x / cellSizeX), y: Math.floor(imagePoint.y / cellSizeY)};
                    var viewportCoords = viewer.viewport.imageToViewportCoordinates(iPos.x * cellSizeX, iPos.y * cellSizeY);
                    var point = new PictureMosaicViewer.Point(viewportPoint.x , viewportPoint.y);

                    if(windowWidth > 767 && !iPad){
                        var zoomPos = {x: iPos.x + 1, y: iPos.y + 1};
                        if(zoom>9){
                            viewer.viewport.zoomTo(mobileSearchZoom);
                            viewer.viewport.panTo(point)
                        } else if(zoom>4){
                            if((zoomPos.x >= cellTotalX-3)) {
                                viewer.viewport.zoomTo(mobileSearchZoom)
                                viewer.viewport.panTo(point)
                            } else if((zoomPos.y >= (cellTotalY-2)) && (zoomPos.x >= cellTotalX-3)) {
                                viewer.viewport.zoomTo(19.008000000000003)
                                viewer.viewport.panTo(point)
                            } else if((zoomPos.y >= cellTotalY-3)) {
                                viewer.viewport.zoomTo(19.008000000000003)
                                viewer.viewport.panTo(point)
                            } else if((zoomPos.y <=3)) {
                                var point = new PictureMosaicViewer.Point(viewportPoint.x , 0);
                                viewer.viewport.zoomTo(19.008000000000003)
                                viewer.viewport.panTo(point)
                            }
                        }
                    }
                    currentVectorCoords = viewportCoords;

                    viewer.addOverlay({
                        element: elt,
                        location: new PictureMosaicViewer.Rect(viewportCoords.x,viewportCoords.y,boxWidth,boxHeight)
                    })
                }
            }
        }
    }
}


var dragged = 0;
var deltaStartX, deltaStartY;
//complicated function working for both mobile and desktop for canvas press
function runCanvasPressListener(){
    viewer.addHandler('canvas-press', function(event) {
        deltaStartX = event.position.x;
        deltaStartY = event.position.y;
        if(openSearch) {
            runSearchPane();
        }
    });
}

function runCanvasDragEndListener(){
    viewer.addHandler('canvas-dragend', function(event) {
        var deltaEndX = event.position.x;
        var deltaEndY= event.position.y;

        var deltaDiffX = deltaEndX - deltaStartX;
        var deltaDiffY = deltaEndY - deltaStartY;

        var deltaVal = Math.sqrt(deltaDiffX * deltaDiffX + deltaDiffY * deltaDiffY);
        console.log(deltaVal);
        if (deltaVal >= 10) {
            dragged = 1;
        } 
    });
}

function runCanvasClickListener(){
    viewer.addHandler('canvas-click', function(event) {
        if (!dragged) {
            canvasClickHandler(event);
        } else {
            dragged = 0;
        }
    });
}


//canvas scroll listener
function runCanvasScrollListener(){
    viewer.addHandler('canvas-scroll', function(event) {
        var zoom = viewer.viewport.getZoom(true);
       // console.log(zoom)
        if(zoom<=9.5){
            removePhotoInfo();
        }
        setTimeout(function(){
            var curZoomT = viewer.viewport.getZoom(true);
            if(curZoomT > 1){
                $('#overlayImg').css("display", "none");
                pauseAnimation();
            } else {
                //This line only need if there is an overlay
                //$('#overlayImg').css("display", "block");
                checkRestart();
            }
        }, 3000);
    });
}

//Viewer zoom button listener
function runOSDZoomButtonListeners(){
    viewer.zoomOutButton.addHandler("release", function () {
        var zoom = viewer.viewport.getZoom(true);
        if(zoom<=9.5){
            removePhotoInfo();
        }
        if(zoom > 1){
            $('#overlayImg').css("display", "none");
            pauseAnimation();
        }
        setTimeout(function(){
            var curZoomT = viewer.viewport.getZoom(true);
            if(curZoomT > 1){
                $('#overlayImg').css("display", "none");
                pauseAnimation();
            } else {
                //This line only need if there is an overlay
                //$('#overlayImg').css("display", "block");
                checkRestart();
            }
        }, 3000);        
    });
    viewer.zoomInButton.addHandler("press", function () {
        $('#overlayImg').css("display", "none");
        pauseAnimation();
    });
    viewer.zoomInButton.addHandler("enter", function () {
        pauseAnimation(0);
    });

}

function resetTimeoutW(){
    clearTimeout(myWTO);
    myWTO = setTimeout(function(){ //stopTour(   );// calcImgMax();startAnimation()
    doubleClickCheck=2;
    }, 10);
    clearTimeout(myWTO2);
    myWTO2 = setTimeout(function(){ //stopTour(   );// calcImgMax();startAnimation()
    doubleClickCheck=1;
    }, 500);
}

/*
*
*
*
********************
******************** misc window functions
*
*
*
 */

var realResize = false;
setTimeout(function(){realResize =true;}, 500);
//Window Rezise Listeners
$(window).resize(function() {
    if (realResize) {
        if((windowWidth > 767) || mobileAnimation){
                setTimeout(function(){
                    var curZoomT = viewer.viewport.getZoom(true);
                    if(curZoomT > 1){
                        $('#overlayImg').css("display", "none");
                        pauseAnimation();
                    } else {
                        //This line only need if there is an overlay
                        //$('#overlayImg').css("display", "block");
                        checkRestart();
                    }
                }, 500);
            }
    }
    resizeHandler();
});

function resizeHandler() {
    if (document.getElementById('fScreenNavControl').className == '' || document.getElementById('fScreenNavControl').className=='mobileFullscreenNavControl') {
        document.getElementById('pm_viewer_holder').style.height=($("#pm_viewer_holder").width()/mosaicRatio)+'px';
        pmvHeight=(windowWidth/mosaicRatio);    
    }
    mobileSearchZoom=(viewX_orig/$('#pm_viewer').width())*1.1;
    var embedDimensions = ['PictureMosaics-width-'+document.body.offsetWidth, 'PictureMosaics-height-'+(document.body.offsetHeight+10)];
    window.parent.postMessage(embedDimensions, "*");
}
//Exit Handlers for Escape Button
function exitHandler(){
    if (!document.webkitIsFullScreen || !document.mozFullScreen) {
        if (!PictureMosaicViewer.isFullScreen()) {
            PictureMosaicViewer.exitFullScreen();            
            $("#fScreenNavControl").removeClass("minScreenNavControl");
            $("#fScreenNavControl").prop('title', fullControl);
            resizeHandler();
        } 
    }    
}
//MS has its own exit handler
function exitHandlerMS(){
    if (!document.msFullscreenElement) {
         if (!PictureMosaicViewer.isFullScreen()) {
            PictureMosaicViewer.exitFullScreen();            
            $("#fScreenNavControl").removeClass("minScreenNavControl");
            $("#fScreenNavControl").prop('title', fullControl);
            resizeHandler();
        }        
    } 
       
}

/*
*
*
********************SEARCH FUNCTIONS
********************PHOTO POP UP AND INFO FUNCITONS
*
*
*
 */

var searchTimer, focusTimer;
//Search Function Start
function searchOnInput(thisInput) {
  clearTimeout(searchTimer);
  searchTimer = setTimeout(function(){
    if(thisInput.value.length>2){
      searchViewer(thisInput.value);
    } else {
      document.getElementById('mobileSearch').innerHTML ='';
      if(openSearch) {
        runSearchPane();
      }
      document.getElementById('searchClear').style.display='none';
      document.getElementById('valid_search').innerHTML = '';
      viewer.clearOverlays();
    }
  }, 250);
}

function loadSearchFunctionality() {
    $('#keyword_input').focus(function() {
        if(prevSearch != this.value){
            if(this.value.length>2){
                searchViewer(this.value);
            }else{
                if(openSearch) {
                    runSearchPane(); 
                }
            }
        }else{
            if(tourLength){
                if(!openSearch) {
                    runSearchPane();
                }
            }
        }
    });

    $('#searchClear').click(function(event) {
       event.preventDefault();
       clearTimeout(blurTimer);
       clearSearchResults();
       viewer.clearOverlays();
       document.getElementById('keyword_input').focus();
    });

    $('#searchBtn').bind('touchstart click' , function() {
        event.preventDefault();
        clearTimeout(focusTimer);
        focusTimer = setTimeout(function() {
          if (!$('#keyword_input').is(":focus")) {
              $('#keyword_input').focus();
          }
        }, 180);
    });

    document.addEventListener("click", function(event) {
        var searchResult = document.getElementById("result_part");
        var searchPart = document.getElementById("keyword_input");
        var targetElement = event.target;
        if (!isMobile) {
            if (targetElement != searchResult && targetElement != searchPart) {
                blurTimer = setTimeout(function(){
                    if(openSearch){
                        runSearchPane();
                    }
                }, 150);
            }
        }
    });
}


var openSearch=0;
function runSearchPane(){
    if(!openSearch){
        openSearch = 1;
        document.getElementById('mobileSearch').style.display='block';
    } else {
        openSearch = 0;
        document.getElementById('mobileSearch').style.display='none';
    }
}


function removePhotoInfo() {
    prevCordX = -1;
    prevCordY = -1;
    $('.overlay').css("display", "none");
    $('.infoHolder').css("display", "none");
    $('.infoHolder').html('');
    return false;
}

/*
    Called by updatePhotoInfo, fromFlash
    Displays the information in get photo
*/

function completedPhoto() {

    var overlayHolder = $('#white-overlay');
    $('#white-overlay').html('');

    $("<div>", {class: "infoHolder"}).appendTo(overlayHolder);
    infoHolder = $('.infoHolder');

    $("<div>", {class: "infoImgHolder"}).appendTo(infoHolder);
    imgHolder = $(".infoImgHolder");

    $("<div>", {class: "aboutPhoto"}).appendTo(infoHolder);
    var aboutPhoto = $(".aboutPhoto");

    $("<div>", {class: "photoData"}).appendTo(aboutPhoto);
    var infoPhotoData = $(".photoData");

    $("<div>", {class: "photoName red_b12"}).appendTo(infoPhotoData);
    nameElem = $(".photoName");
    $("<div>", {class: "photoCap grey_12"}).appendTo(infoPhotoData);
    capElem = $(".photoCap");

    $("<div>", {class: "socialShare"}).appendTo(infoHolder);
    socElem =  $(".socialShare");

    prevCordX = parseInt(photoData.xCoord);
    prevCordY = parseInt(photoData.yCoord);
    if (photoData.mosPath == pmPath){      
        if(photoData.validData && !((indexX == (userImgX+1)) && (indexY == (userImgY+1)))){
            photoCode =  photoData.info.code;
            photoClicked();
            if((indexX >= cellTotalX-3)) {
                $(".infoHolder").addClass("rightInfo");
            }
            if((indexY >= (cellTotalY-2)) && (indexX >= cellTotalX-3)) {
                $(".infoHolder").addClass("rightBottomInfo");
            }
            if((indexY >= cellTotalY-3)) {
                $(".infoHolder").addClass("bottomInfo");
            }

            imgHolder.html('<img id="infoClose" class="click" onclick="removePhotoInfo();" ontouchstart="removePhotoInfo();" src="images/closeB.png" alt="" /></div>');

            var name = '';
            var captionDisplay = '';

            var likeButton = '';
            var localShare = getShares(photoCode);
            var favorited = checkUserFavorite(photoCode);
            if (favorited >= 0){
                likeButton = '<div id="favoriteDiv" class="unfavorite" onClick="unfavoritePhoto(\''+photoCode+'\', '+localShare+', 1); return false; event.preventDefault();"><img src="images/heart_solid_red.svg" class="likeHeart"/></div>';
            } else {
                likeButton = '<div id="favoriteDiv" class="favorite" onClick="favoritePhoto(\''+photoCode+'\', '+localShare+', 1); return false; event.preventDefault();"><img src="images/heart_outline_red.svg" class="likeHeart"/></div>';
            }


            photoData.info.lname = decodeHtml(photoData.info.lname);
            if(photoData.src == 'in'){
                name = '@'+photoData.info.lname;
            }else if(photoData.src == 'tw'){
                name = '@'+photoData.info.uid;
            }else{
                name = photoData.info.lname ? photoData.info.fname + ' ' + photoData.info.lname.substring(0,1) +'.' : photoData.info.fname;
            }    
            captionDisplay = decodeHtml(photoData.info.caption);   

            //nameElem.html(name);
            nameElem.html(name + '<div><div class="photoLikeBtn '+photoCode+'-info click noselect" >'+likeButton+'</div><div class="likeAmount" style="color: #000;"><span class="likeCounter-'+photoCode+'">'+localShare+'</span></div></div>');
            capElem.html(captionDisplay);

            socElem.html('<div class="infoShareTxt">'+SHARE_PHOTO+'</div><div class="infoShareIcons"><div onclick="fbPhotoShare(\''+photoCode+'\'); shareClicked(\''+photoCode+'\');" ontouchstart="fbPhotoShare(\''+photoCode+'\'); shareClicked(\''+photoCode+'\');" class="click sPhotoFb"></div><div class="click sPhotoTw" onclick="twPhotoShare(\''+photoCode+'\');" ontouchstart="twPhotoShare(\''+photoCode+'\');"></div><div class="shareEmbed click" onclick="toggleEmbed();" ontouchstart="toggleEmbed();"></div></div>');

            $('.infoHolder').css("display", "block");
        } else if((indexX == (userImgX+1)) && (indexY == (userImgY+1))) {
            imgHolder.html('<img id="infoClose" class="click" onclick="removePhotoInfo();" ontouchstart="removePhotoInfo();" src="images/closeB.png" alt="" /><div class="grey_b12 noInfo"><br/><br/><br/>'+INSTA_ADD_INFO+'</div>');
        } else {
            imgHolder.html('<img id="infoClose" class="click" onclick="removePhotoInfo();" ontouchstart="removePhotoInfo();" src="images/closeB.png" alt="" /><div class="grey_b12 noInfo" ><br/><br/><br/>'+NO_PHOTOINFO+'</div>');
        }
    } else {
        imgHolder.html('<img id="infoClose" class="click" onclick="removePhotoInfo();" ontouchstart="removePhotoInfo();" src="images/closeB.png" alt="" /><div class="grey_b12 noInfo"><br/><br/><br/>'+MOSAIC_UPDATE_INFO+'</div>');
    }
}

function decodeHtml(html) {
    var txt = document.createElement("textarea");
    txt.innerHTML = html;
    return txt.value;
}

function popupPhoto(pmId) {
    if (photoData.mosPath == pmPath){
        buildSwiper(pmId);
    }
}

function openShareWindow(url, w, h) {
    shareWindow = window.open("", "sharer", "left=20,top=20,width="+w+",height="+h+",toolbar=0,scrollbars=0,statusbar=0,resizable=0");
    shareWindow.location = url;
}

//Facebook Share
function fbPhotoShare(photoCode) {
    recordOutboundLink(this, 'Mosaic Usage', 'PhotoFBShare'); 
    openShareWindow('https://www.facebook.com/sharer.php?u=https://'+GLOBAL_DOMAIN+'?key='+photoCode+langAPass+'&src=fb', 626,436);
    return false;   
}

// Twitter Share
function twPhotoShare(photoCode) {
  var twitText = $('<textarea />').html(TW_PHOTO_SHARE).text();
  twitText = encodeURIComponent(twitText);
  twitText = twitText.replace(/'/g,"%27");

  recordOutboundLink(this, 'Mosaic Usage', 'PhotoTwitterShare'); 
  openShareWindow('https://twitter.com/intent/tweet?original_referer=https%3A%2F%2F'+encodeURIComponent(GLOBAL_DOMAIN+'?key='+photoCode+langAPass)+'&ref_src=twsrc%5Etfw&related=twitterapi%2Ctwitter&tw_p=tweetbutton&text='+twitText+'%20https%3A%2F%2F'+encodeURIComponent(GLOBAL_DOMAIN+'?key='+photoCode+langAPass+'&src=tw'), 550, 270);
  return false;    
}

function inPhotoShare(photoCode) {
    recordOutboundLink(this, 'Mosaic Usage', 'PhotoLinkedInShare'); 
    openShareWindow('https://www.linkedin.com/shareArticle?mini=true&title=Courage%20Mosaic&url=https://'+GLOBAL_DOMAIN+'%3Fkey%3D'+photoCode+'%26src%3Dln', 626, 436);
  
    return false;    
}

function toggleEmbed() {
    $('.embedOverlay').toggleClass('hide');
    return false;
}

/*
    Called by swfobject, pmviewer, get_photo
    Removes photo info if exited from get_photo or on zoom out of mosaic
*/
function resetMosaic(){
    viewWOrig = 0;
    if(animationStarted){
        clearTimeout(checkTimer);
        checkRestart();
    } else {
            if((windowWidth > 767) || mobileAnimation){
                setTimeout(function(){startAnimation();}, 300);
            }
    }
}

/*
    Called by SearchButton
    Searching the mosaic for correct photo cell
    Calls ajaxLoadingViewer, ajaxCompletedViewer
*/
function searchViewer(key) {
    prevSearch = key;
    if (openSearch) {
        runSearchPane();
    }
    document.getElementById('searchClear').style.display = 'block';
    $.ajax({
        url: "viewer.php",
        type: "POST",
        data: {
            keyword_input: key
        },
        dataType: "html",
        success: function(data) {
          $(document).ready(function() {
                console.log(data);
                completedViewer(data);
            });
        }
    });
}

/*
    Called by refreshViewerLink, refreshViewerSearch
    Gets correct placement of search in the mosaic
    Calls createViewer, embedHTML5
*/
function completedViewer(data) {
    var info = JSON.parse(data);
    var f = document.getElementById('valid_search');
    if($.isArray(info)){
        f.innerHTML = '';
        //stop the animation
        pauseAnimation(0);
        xmlHotspots.length = 0;
        var name = '';
        for(var i = 0; i < info.length; i++) {
            if(info[i].lname != '') {
                name = info[i].fname+' '+info[i].lname[0]+'.';
            } else {
                name = info[i].fname;
            }
            xmlHotspots[i] = {'x':parseFloat(info[i].xCoord),'y':parseFloat(info[i].yCoord), 'code':info[i].code, 'name':name};
        }
        if(xmlHotspots){
            tourLength = xmlHotspots.length;
            displaySearchResults(1);
        }
    } else {
        f.innerHTML = '<span>No photos found for this search.</span>';
        tourLength = 0;
        viewer.clearOverlays();
    }
}

/*
    Called by completedPhoto
    sends the code of the clicked photo to Google Analytics and to Database
*/
function photoClicked(){
    recordOutboundLink('','Mosaic Photo Clicks', photoCode);
    if(canStore){
        var clickTime = new Date().getTime();
        photosClicked = JSON.parse($.jStorage.get("clicks"));
        var userClick = 0;
        var prevClick = 0;
        if(photosClicked){
            for (i=0; i < photosClicked.length; i++){
                if(photosClicked[i].code == photoCode){
                    prevClick = 1;
                    if((clickTime - (parseFloat(photosClicked[i].time))) < 7200000){
                        userClick = 1;
                    }else{
                        photosClicked[i].time = clickTime;
                    }
                    break;
                }
            }
        }
        if(!userClick){
            $.ajax({
                url: "photoAction.php",
                type: "POST",
                data: {
                    action: photoAction.click,
                    code: photoCode
                },
                dataType: "html",
                success: function() {
                    if(photosClicked){
                        if(!prevClick){
                            photosClicked[photosClicked.length] = {'code':photoCode,'time':clickTime};
                        }
                    }else{
                        photosClicked = new Array({'code':photoCode,'time':clickTime});
                    }
                    $.jStorage.set("clicks",JSON.stringify(photosClicked), {TTL: 7200000});
                }
            });
        }
    }
}

function shareClicked() {
    recordOutboundLink('','Mosaic Share Clicks', photoCode);
    if(canStore) {
        var clickTime = new Date().getTime();
        photosShared = JSON.parse($.jStorage.get("shares"));
        var userClick = 0;
        var prevClick = 0;
        if(photosShared) {
            for (i=0; i < photosShared.length; i++) {
                if(photosShared[i].code == photoCode) {
                    prevClick = 1;
                    if((clickTime - (parseFloat(photosShared[i].time))) < 7200000) {
                        userClick = 1;
                    } else {
                        photosShared[i].time = clickTime;
                    }
                    break;
                }
            }
        }
        if(!userClick) {
            $.ajax({
                url: "photoAction.php",
                type: "POST",
                data: {
                    action: photoAction.share,
                    url: "https://"+GLOBAL_DOMAIN+"?key="+photoCode,
                    code: photoCode,
                },
                dataType: "html",
                success: function(data) {
                    //updateShares(); for updating shares if carousel is going off of shares (see thon)
                    if(photosShared) {
                        if(!prevClick) {
                            photosShared[photosShared.length] = {'code': photoCode, 'time': clickTime};
                        }
                    } else {
                        photosShared = new Array({'code':photoCode,'time':clickTime});
                    }
                    $.jStorage.set("shares",JSON.stringify(photosShared), {TTL: 7200000});
                }
            });
        }
    }
}
/*
	Called by index.php in facebook javascript
	Likes or UnLikes a photo
*/
function photoTrackFBLikes(url,type){
	$.ajax({
		url: "photoAction.php",
		type: "POST",
		data: {
            action: type,
			url: url
		},
		dataType: "html"
	});
}

/*
    Called by completedViewer on succesful search
    Builds and updated search results to display
    Display toggle search Results Close/Expand
*/
function displaySearchResults(showMenu){
     viewer.clearOverlays();
        var searchContent = '<div><p id="searchTip" class="grey_b14">'+SEARCH_HINT+'</p></div>';
        for (var i = 0; i < tourLength; i++){
            if(xmlHotspots[i].name.length > 16) {
                var displayName = xmlHotspots[i].name.substring(0,16)+'...';
            } else {
                var displayName = xmlHotspots[i].name;
            }
            searchContent += '<div id="search-'+xmlHotspots[i].code+'" class="click" onclick="goToHotspot('+xmlHotspots[i].x+', '+xmlHotspots[i].y+');event.preventDefault();"  style="height:60px; margin:5px 0 0 0;"><table><tr><td><img style="width:60px; height:60px; margin-left:5px;" src="upload_flat_complete/thumbnail/'+xmlHotspots[i].code+'.jpg" alt=""/></td><td><div class="grey_b14" style="margin-left:7px;">'+displayName+'</div></td></tr></table></div>';

            //Calculate search area
            var searchPos = {x: (xmlHotspots[i].x * cellSizeX) - (cellSizeX/2), y: (xmlHotspots[i].y * cellSizeY) - (cellSizeY/2)}; 
            var viewportCoords = viewer.viewport.imageToViewportCoordinates(searchPos.x - cellCenterPointOffsetX, searchPos.y - cellCenterPointOffsetY);
            var elt = document.createElement("div");
            elt.id = "white-overlay"+i;
            elt.className = "overlayS";
            viewer.addOverlay({
                element: elt,
                location: new PictureMosaicViewer.Rect(viewportCoords.x,viewportCoords.y,boxWidth,boxHeight)
            })
        }
        document.getElementById('mobileSearch').innerHTML = searchContent;
        if(loadKeyword != '') {
            goToHotspot(xmlHotspots[0].x, xmlHotspots[0].y);
        } else {
            if(showMenu && !openSearch) {
                runSearchPane();
            }
        }
}
/*
    Called startTour()
    Will close/toggle results and clear out all search data
    Also Must remove toggle buttons Close/Expand
*/
function clearSearchResults(){
    tourLength = 0;
    document.getElementById('mobileSearch').innerHTML ='';
    document.getElementById('keyword_input').value='';
    document.getElementById('valid_search').innerHTML = '';
    document.getElementById('searchClear').style.display = 'none';
    if (openSearch) {
        runSearchPane();
    }
}

/*
    Called by Each Image in Search Results Dropdown and startTour()
    Updates as to which photo of the Tour the Viewer is at
    Also scrolls down depending with the Tour
*/
currentVectorCoords = 0;
function goToHotspot(gridX, gridY){
    loadKeyword = '';
    //must get called be sure the animation layer are gone
    pauseAnimation();
    $('#overlayImg').css("display", "none");
    var calcPos = {x: (gridX * cellSizeX) - (cellSizeX/2), y: (gridY * cellSizeY) - (cellSizeY/2)};
    var viewportCoords = viewer.viewport.imageToViewportCoordinates(calcPos.x - cellCenterPointOffsetX, calcPos.y - cellCenterPointOffsetY);
    
    var rect = viewer.viewport.imageToViewportRectangle(calcPos.x, calcPos.y, 15, 15);
    viewer.viewport.fitBoundsWithConstraints(rect);

    if(currentVectorCoords != viewportCoords){
        viewer.clearOverlays();
        currentVectorCoords = viewportCoords;
        var elt = document.createElement("div");
        elt.id = "white-overlay";
        elt.className = "overlay";
            viewer.addOverlay({
            element: elt,
            location: new PictureMosaicViewer.Rect(viewportCoords.x,viewportCoords.y,boxWidth,boxHeight)
        })
        fromFlashViewer(calcPos.x,calcPos.y, 0);
    }
    if (openSearch) {runSearchPane();}
}

function detectMobile() {
  var check = false;
  (function(a){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/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))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);

  if (check == false) {
       var userAgent = navigator.userAgent || navigator.vendor || window.opera;

          // Windows Phone must come first because its UA also contains "Android"
        if (/windows phone/i.test(userAgent)) {
            check = true;
        }

        if (/android/i.test(userAgent)) {
            check = true;
        }

        // iOS detection from: http://stackoverflow.com/a/9039885/177710
        if (/iPhone|iPod/.test(userAgent) && !window.MSStream) {
            check = true;
        }

    }

  return check;
};

var deviceOrientation = 0;
$(document).ready(function() {
    if (window.matchMedia("(orientation: landscape)").matches) {
       // you're in LANDSCAPE mode
       deviceOrientation = 1;
    }  
});

$(window).resize(function() {
    windowWidth = $(window).width();
    removePhotoInfo();
    
    if (window.matchMedia("(orientation: portrait)").matches) {
       // you're in PORTRAIT mode
       var deviceOrientationNew = 0;
    }

    if (window.matchMedia("(orientation: landscape)").matches) {
       // you're in LANDSCAPE mode
       var deviceOrientationNew = 1;
    }   

    if (deviceOrientation !== deviceOrientationNew) {
        deviceOrientation = deviceOrientationNew;
        if (swiperOn == 1) {
            closeSwiper();
        }
    }
})

function checkZoomAfterClose(){
    var cur_zoom = viewer.viewport.getZoom(true);
    if(cur_zoom > 1){
        pauseAnimation();
    } else {
        checkRestart();
    }
}

function checkViewerUpdate() {
    $.ajax({
        type: 'POST',
        url: 'updateViewer.php',
        data: {
            mosaic: pmPath,
        },
        dataType: 'html',
        success: function(data) {
            data = JSON.parse(data);
            if(data != 0) {
               var viewportBounds = viewer.viewport.getBounds();
               pmPath = data.newPath;
               viewer.open({height: viewY_orig, width: viewX_orig, type: "zoomifytileservice",tilesUrl: pmPath+"/"});
               setTimeout(function() {viewer.viewport.fitBounds(viewportBounds, true)}, 100);
               pauseAnimation();
               parseImg(0, 1);
               checkRestart(2);   
            }
            setTimeout(function(){ checkViewerUpdate()}, 60000);
        }
    });
}