﻿var lastCall;
var urls;
if (urls == null) { urls = new Array(); }
var displayElement = document.getElementById('content');

function handleMouseEvent(type, id) {

    lastCall = type + " : " + id;
    if (type == 'onMouseClick') {
        TrackGAEvent('Media Viewer - Routes', 'Map clicked', id);
        setTimer();
        loadAjaxPage(id)
    }
}

/** Function called by Media Viewer when clicked **/
function userAction(type, name) {
    switch (type) {

        /** Pictures **/ 
        case "defaultPictureShown":
            TrackGAEvent('Media Viewer - Pictures', 'Default picture shown', name);
            break;
        case "manualChangeSlideshowPicture":
            TrackGAEvent('Media Viewer - Pictures', 'Picture manually changed', name);
            break;
        case "autoChangeSlideshowPicture":
            TrackGAEvent('Media Viewer - Pictures', 'Picture automatically changed', name);
            break;
        case "startSlideshow":
            TrackGAEvent('Media Viewer - Pictures', 'Slideshow started', name);
            break;
        case "stopSlideshow":
            TrackGAEvent('Media Viewer - Pictures', 'Slideshow stopped', name);
            break;

        /** Movies **/ 
        case "defaultMovieShown":
            TrackGAEvent('Media Viewer - Movies', 'Default movie shown', name);
            break;
        case "manualChangeMovie":
            TrackGAEvent('Media Viewer - Movies', 'Movie manually changed', name);
            break;
        case "stopMovieClicked":
            TrackGAEvent('Media Viewer - Movies', 'Movie stopped', name);
            break;
        case "startMovieClicked":
            TrackGAEvent('Media Viewer - Movies', 'Movie started', name);
            break;
        case "preSelectedMovieShown":
            /** Called when user has selected a movie, navigated away from the movie module and then comes back **/
            TrackGAEvent('Media Viewer - Movies', 'Pre-selected movie shown', name);
            break;

        /** Panoramas **/ 
        case "defaultPanoramaShown":
            TrackGAEvent('Media Viewer - Panoramas', 'Default panorama shown', name);
            break;
        case "manualChangePanorama":
            TrackGAEvent('Media Viewer - Panoramas', 'Panorama manually changed', name);
            break;
        case "preSelectedPanoramaShown":
            /** Called when user has selected a panorama, navigated away from the panorama module and then comes back **/
            TrackGAEvent('Media Viewer - Panoramas', 'Pre-selected panorama shown', name);
            break;

        /** Routes **/ 
        case "defaultRouteShown":
            TrackGAEvent('Media Viewer - Routes', 'Default route shown', name);
            break;
        case "preSelectedMapShown":
            /** Called when user has selected a map, navigated away from the routes module and then comes back **/
            TrackGAEvent('Media Viewer - Routes', 'Pre-selected map shown', name);
            break;

        /** Media Viewer **/ 
        case "moduleChange":
            TrackGAEvent('Media Viewer', 'Module changed', name);
            break;

        /** Other **/ 
        default:
            //TrackGAEvent('Media Viewer', 'NOT RECOGNIZED: ' + type, name);
            break;
    }
}

function loadAjaxPage(id) {
    for (var a = 0; a < urls.length; a++) {
        var url = urls[a];
        if (url[0] == id) {
            if (isBookNow == 0) {
                // update page
                var ajaxurl = languagePrefix + url[1] + "default.aspx?Ajax=1";
                DoWebRequest(ajaxurl, OnWebRequestCompleted);

                // track page view
                try {
                    if (ajaxurl.indexOf("default.aspx?Ajax=1") > -1)
                        ajaxurl = ajaxurl.substring(0, ajaxurl.indexOf("default.aspx?Ajax=1"));
                    TrackGAPageView("/map" + ajaxurl);
                }
                catch (e) { }

                try {
                    DoWebRequest(url[1], OnMediaConfigReloadCompleted);
                }
                catch (e) {
                    //                          alert(e.message);
                }
            }
            if (isOurShips != 1) {
                // Get route selection "ws"
                var serviceUrl = '/services/InternalServices.aspx?MapRouteName=' + id;
                DoWebRequest(serviceUrl, OnRouteSelectionCallCompleted);
            }
        }
    }
}

function loadShipAjax(url) {

    setTimer();
    j$('.imagebrowser_clientID').each(function () {
        j$(document).stopTime("#" + j$(this).html());
    });

    DoWebRequest(url, OnWebRequestCompleted);

}

function handleAjaxConnection(path, key) {
    var serviceUrl = '/services/InternalServices.aspx?ajaxconnection=1&path=' + path + '&key=' + key;
    DoWebRequest(serviceUrl, PerformPageUpdate);

}

function PerformPageUpdate(executor, eventArgs) {
    if (executor.get_responseAvailable()) {
        var url = executor.get_responseData();
        if (url != null && url != '') {
            DoWebRequest(url, OnWebRequestSubcontentCompleted);
        }
    }
    else {
        if (executor.get_timedOut()) {
            window.status = 'Service call timed out';
        } else {
            if (executor.get_aborted())
                window.status = 'Service call aborted';
        }
    }

}



function GetUrlSubContent(url) {
    if (url != null && url != '') {
        DoWebRequest(url, OnWebRequestSubcontentCompleted);
        //todo: track pageview
    }
}

function pageLoad() {
    displayElement = $get("content");
}

function DoWebRequestForOnboardCalendarEvents(url) {
    displayElement = document.getElementById('EventsStart')

    DoWebRequest(url, ReplaceCalendarEvents);

}

function ReplaceCalendarEvents(executor) {
    var body = executor.get_responseData();
    if (body.indexOf("id=\"EventsStart\"") != -1) {

        var pos1 = body.indexOf("id=\"EventsStart\"");
        body = body.substring(pos1);

        pos1 = body.indexOf(">");
        body = body.substring(pos1 + 1);
        var pos2 = body.indexOf("id=\"EventsEnd\" />") + 17;
        body = body.substring(0, pos2);

        if (document.all) {
            displayElement.innerHTML = body;
        }
        else {
            // Firefox
            displayElement.innerHTML = body;
        }
    }


}


// execute the request
function DoWebRequest(url, callBackFunction) {
    var wRequest = new Sys.Net.WebRequest();
    wRequest.set_url(url);

    // Set the request verb.
    wRequest.set_httpVerb("GET");
    wRequest.set_userContext("user's context");
    var resUrl = wRequest.getResolvedUrl();

    // Method handler to process result
    wRequest.add_completed(callBackFunction);

    wRequest.invoke();

}

function OnRouteSelectionCallCompleted(executor, eventArgs) {
    if (executor.get_responseAvailable()) {
        HandleRouteSelectionServiceResponse(executor);
    }
    else {
        if (executor.get_timedOut())
            window.status = 'Service call timed out';
        else
            if (executor.get_aborted())
                window.status = 'Service call aborted';
    }
}

// This function is used to display the Web request body.
function HandleRouteSelectionServiceResponse(executor) {
    var response = executor.get_responseData();
    if (response != null && response.split("|").length > 1) {
        if (response.split("|")[0] != null && response.split("|")[0] != '')
            SetOutwardFerryRoute(response.split("|")[0]);
        if (response.split("|")[1] != null && response.split("|")[1] != '')
            SetHomewardFerryRoute(response.split("|")[1]);
    }
}

function OnWebRequestCompleted(executor, eventArgs) {

    if (executor.get_responseAvailable()) {
        DisplayWebRequestBody(executor);
        j$('.imagebrowser_timerInfo').each(function () {
            if (j$(this).html() != "") {
                var arr = j$(this).html().split("|");
                var elementId = arr[0];
                var intervalMilliSeconds = arr[1];

                j$(document).everyTime(parseInt(intervalMilliSeconds), '#' + elementId, function (i) {
                    next_image(elementId);
                });
                j$('#' + elementId + '_lnkNext').click(function (i) {
                    j$(document).stopTime('#' + elementId);
                });
                j$('#' + elementId + '_lnkPrevious').click(function (i) {
                    j$(document).stopTime('#' + elementId);
                });
            }
        });
    }
    else {
        if (executor.get_timedOut())
            alert("Timed Out");
        else
            if (executor.get_aborted())
                alert("Aborted");
    }
}

function OnMediaConfigReloadCompleted(executor, eventArgs) {
    if (executor.get_responseAvailable()) {

        var body = executor.get_responseData();
        var pos1 = body.indexOf('//BookingMap:Configuration:Start');
        body = body.substring(pos1 + 32);
        var pos2 = body.indexOf("//BookingMap:Configuration:End");
        body = body.substring(0, pos2);
        body = body.replace(/ var /g, '');
        eval(body);
        try {
            InitMediaConfiguration();
        }
        catch (e) { }
    }
    else {
        if (executor.get_timedOut())
            alert("Timed Out");
        else
            if (executor.get_aborted())
                alert("Aborted");
    }

}
function OnWebRequestSubcontentCompleted(executor, eventArgs) {
    if (executor.get_responseAvailable()) {
        DisplayWebRequestSubcontent(executor);
    }
    else {
        if (executor.get_timedOut())
            alert("Timed Out");
        else
            if (executor.get_aborted())
                alert("Aborted");
    }
}


// This function is used to display the Web request body <!--subcontent-->-part.
function DisplayWebRequestSubcontent(executor) {
    var body = executor.get_responseData();
    var pos1 = body.indexOf('<!--subcontent -->');
    body = body.substring(pos1 + 18);

    var pos2 = body.indexOf("<!--/subcontent -->");
    body = body.substring(0, pos2);

    if (document.all) {
        displayElement.innerHTML = body;
    }
    else {
        // Firefox
        displayElement.innerHTML = body;
    }
    try {
        InitImageBrowsers();
    }
    catch (e) { }
}



// This function is used to display the Web request body.
var _debugResponse = '';
function DisplayWebRequestBody(executor) {

    var body = executor.get_responseData();
    var pos1 = body.indexOf('"__VIEWSTATE"');
    body = body.substring(pos1);

    pos1 = body.indexOf(">");
    body = body.substring(pos1 + 1);
    var pos2 = body.indexOf("</form");
    body = body.substring(0, pos2);
    _debugResponse = body;
    if (document.all) {

        displayElement.innerHTML = body;

        if (window.addthis) {
            window.addthis.ost = 0;
            window.addthis.ready();
        }

        if (window.$bv) {
            GetBVProdID();
            InitBVLogin()
            MakeSubpageStarsIntoLinks();
        }
    }
    else {
        // Firefox
        displayElement.innerHTML = body;

        if (window.addthis) {
            window.addthis.ost = 0;
            window.addthis.ready();
        }

        if (window.$bv) {
            GetBVProdID();
            InitBVLogin();
            MakeSubpageStarsIntoLinks();
        }
    }
    try {
        InitImageBrowsers();
    }
    catch (e) { }
}

function InitBVLogin() {
    var loginLink = j$("#loginLink");
    if (loginLink) {
        loginLink.attr("href", loginUrl + "?iframe=true&width=715&height=360");
    }
}

InitBVLogin();

function GetBVProdID() {
    // Find all elements in document that have a classname that equals 'BVProdID'
    // Init the BV.ui
    var arrElements = document.all || document.getElementsByTagName('*');

    var arrReturnElements = new Array();
    strClassName = "BVProdID";
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for (var i = 0; i < arrElements.length; i++) {
        oElement = arrElements[i];

        if (oRegExp.test(oElement.className)) {
            $BV.ui("rr", "show_reviews", {
                productId: oElement.innerHTML,
                doShowContent: function () {
                    showRRContent();
                }
            });
        }
    }
}


function MakeSubpageStarsIntoLinks() {
    j$(document).ready(function () {
        j$('.rr_link').bind('click', function () {
            showRRContent();
        });
    });
}

function InitImageBrowsers() {
    // Find all elements in document that have a classname that equals 'imagebrowser_clientID'
    // Init each of the Image Browser in the page with a call to the InitImageBrowser() method in
    // common.js  with the innerHtml (= ClientId of the usercontrol) of each found element as parameter
    var arrElements = document.all || document.getElementsByTagName('*');

    var arrReturnElements = new Array();
    strClassName = "imagebrowser_clientID";
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for (var i = 0; i < arrElements.length; i++) {
        oElement = arrElements[i];
        if (oRegExp.test(oElement.className)) {
            //            alert("found:" + oElement.className);
            InitImageBrowser(oElement.innerHTML);
        }

    }
}


if (typeof (Sys) !== "undefined") Sys.Application.notifyScriptLoaded();




