
var slPluginId = 'silverlightMap';

function getSilverlightPlugin() {
    if (typeof (window.slPlugin) == "undefined" || window.slPlugin == null) {
        window.slPlugin = document.getElementById(slPluginId);
    }
    return window.slPlugin.Content;
}
function getActivistService() {
    return getSilverlightPlugin().activistService;
}

function searchActivistsFromJavascript() {
    var sortType = sidePanelProperties.sortType;
    var centerLat = sidePanelProperties.latitude;
    var centerLon = sidePanelProperties.longitude;
    var searchText = sidePanelProperties.searchText;
    var isAsc = sidePanelProperties.isAsc;
    var currentPage = sidePanelProperties.currentPage;
    var numResults = sidePanelProperties.resultsPerPage;
    var radius = sidePanelProperties.radius;

    searchActivists(radius, centerLat, centerLon, sortType, isAsc, currentPage, numResults, searchText);
}

function searchActivistsFromSilverlight(radius, centerLat, centerLon, searchText) {
    sidePanelProperties.currentPage = 1;
    sidePanelProperties.radius = radius;
    sidePanelProperties.latitude = centerLat;
    sidePanelProperties.longitude = centerLon;
    sidePanelProperties.searchText = searchText;
    if (searchText != null && searchText.length > 0) {
        sidePanelProperties.sortType = "dist";
        sidePanelProperties.isAsc = true;
    }
    else {
        sidePanelProperties.sortType = "pop";
        sidePanelProperties.isAsc = false;
    }

    searchActivistsFromJavascript();
}

function searchActivists(radius, centerLat, centerLon, searchType, isAscending, pageNum, numResults, searchText) {    
    var url = './api/activistBySearch.php?&radius=' + radius + '&centerLat=' + centerLat + '&centerLon=' + centerLon
        + '&searchType=' + searchType + '&isAsc=' + isAscending + '&pageNum=' + pageNum + '&numResults=' + numResults
        + '&searchText=' + searchText;
    
    getActivists(url);
}

function setVisitMeMode() {
    getSilverlightPlugin().truckService.SetVisitMeView();
}

function setTruckRouteMode() {
    getSilverlightPlugin().truckService.SetTruckRouteView();
}

function getActivists(url) {
    SetBlockingPanelVisibility(true);
    $.ajax({
        url: url,
        data: "",
        type: "GET",
        processData: false,
        contentType: "application/json",
        timeout: 20000,
        dataType: "text",
        success:
            function (res) {
                handleActivistCallback(eval('(' + res + ')'));
            },
            error: function (xhr) {
                SetBlockingPanelVisibility(false);
                throw xhr;
        }
    });
}

function handleActivistCallback(result) {
    giveSearchResultsToMap(result.activists);
    giveSearchResultsToSidepanel(result);
}

function giveSearchResultsToMap(results) {
    var jsonified = JSON.stringify(results);

    getSilverlightPlugin().activistService.SetTopActivists(jsonified);
}

function giveSearchResultsToSidepanel(results) {
    updateSidePanel(results.activists, results.searchText, results.lat, results.lon, results.sortType,
        results.isAsc, results.currentPage, results.numResults);
}

function activeActivistSelected(activistId) {
    getActivistService().SetActiveActivist(activistId);
}

function setActivistSelectedOnSidepanel(activistId) {
    activistSelectedViaMap(activistId);
}

function clearSearch() {

    initializeSidePanel();

    // clear all necessary search params
    sidePanelProperties.searchText = "";
    sidePanelProperties.currentPage = 1;
    sidePanelProperties.currentSet = 0;
    sidePanelProperties.sortType = "pop";
    sidePanelProperties.latitude = 37.9048232223594;
    sidePanelProperties.longitude = -95.9104629496679;
    sidePanelProperties.radius = -1;
    sidePanelProperties.isAsc = false;
    sidePanelProperties.selectedActivistId = 0;
    sidePanelProperties.lastSelectedRowIndex = -1;

    // set the loading panel visibility
    SetBlockingPanelVisibility(true);

    // perform clearing search
    searchActivistsFromJavascript();

    getSilverlightPlugin().activistService.HandleSearchResultsClearedFromSidebar();
}

function onSilverlightError(sender, args) {
    var appSource = "";
    if (sender != null && sender != 0) {
        appSource = sender.getHost().Source;
    }

    var errorType = args.ErrorType;
    var iErrorCode = args.ErrorCode;

    if (errorType == "ImageError" || errorType == "MediaError") {
        return;
    }

    var errMsg = "Unhandled Error in Silverlight Application " + appSource + "\n";

    errMsg += "Code: " + iErrorCode + "    \n";
    errMsg += "Category: " + errorType + "       \n";
    errMsg += "Message: " + args.ErrorMessage + "     \n";

    if (errorType == "ParserError") {
        errMsg += "File: " + args.xamlFile + "     \n";
        errMsg += "Line: " + args.lineNumber + "     \n";
        errMsg += "Position: " + args.charPosition + "     \n";
    }
    else if (errorType == "RuntimeError") {
        if (args.lineNumber != 0) {
            errMsg += "Line: " + args.lineNumber + "     \n";
            errMsg += "Position: " + args.charPosition + "     \n";
        }
        errMsg += "MethodName: " + args.methodName + "     \n";
    }

    throw new Error(errMsg);
}
