﻿var map = null;
var points = [];
var shapes = [];
var center = null;
function LoadMap(latitude, longitude, onMapLoaded) {
    map = new VEMap('theMap');
    options = new VEMapOptions();
    options.EnableBirdseye = false;
    // Makes the control bar less obtrusize.
    map.SetDashboardSize(VEDashboardSize.Small);
    if (onMapLoaded != null)
        map.onLoadMap = onMapLoaded;
    if (latitude != null && longitude != null) {
        center = new VELatLong(latitude, longitude);
    }
    map.LoadMap(center, null, null, null, null, null, null, options);
}
function LoadPin(LL, name, description) {
    var shape = new VEShape(VEShapeType.Pushpin, LL);
    //Make a nice Pushpin shape with a title and description
    shape.SetTitle("<span class=\"pinTitle\"> " + escape(name) + "</span>");
    if (description !== undefined) {
        shape.SetDescription("<p class=\"pinDetails\">" +
escape(description) + "</p>");
    }
    map.AddShape(shape);
    points.push(LL);
    shapes.push(shape);
}
function FindAddressOnMap(where) {
    var numberOfResults = 100;
    var setBestMapView = true;
    var showResults = true;
    map.Find("", where, null, null, null,
numberOfResults, showResults, true, true,
setBestMapView, callbackForLocation);
}
function callbackForLocation(layer, resultsArray, places,
hasMore, VEErrorMessage) {
    clearMap();
    if (places == null)
        return;
    //Make a pushpin for each place we find
    $.each(places, function(i, item) {
        var description = "";
        if (item.Description !== undefined) {
            description = item.Description;
        }
        var LL = new VELatLong(item.LatLong.Latitude,
item.LatLong.Longitude);
        LoadPin(LL, item.Name, description);
    });
    //Make sure all pushpins are visible
    if (points.length > 1) {
        map.SetMapView(points);
    }
    //If we've found exactly one place, that's our address.
    if (points.length === 1) {
        $("#Latitude").val(points[0].Latitude);
        $("#Longitude").val(points[0].Longitude);
    }
}
function clearMap() {
    map.Clear();
    points = [];
    shapes = [];
}

function FindWifisGivenLocation(where) {
    $('#loading').append($('<img />').
    attr("src", "/Images/ajax-loader2.gif")).html();
    
    map.Find("", where, null, null, null, null, null, false,
        null, null, callbackUpdateMapWifis);
}

function callbackUpdateMapWifis(layer, resultsArray,
            places, hasMore, VEErrorMessage) {
    $("#wifiList").empty();


    clearMap();

    var center = map.GetCenter();
    var distance = 30;

    $.post("/Search/SearchByLocation", { latitude: center.Latitude,
        longitude: center.Longitude, distance: distance
    },
            function(wifis) {
                $.each(wifis, function(i, wifi) {

                    var LL = new VELatLong(wifi.Latitude,
                        wifi.Longitude, 0, null);

                    // Add Pin to Map
                    LoadPin(LL, '<a href="/Wifi/Details/' + wifi.WifiId + '">'
                        + wifi.BusinessOrSpotName + '</a>',
                        "<p>" + wifi.Address + "</p>");

                    $('#wifiList').append($('<li/>')
                        .attr("class", "wifiItem")
                        .append($('<a/>').attr("href",
                        "/Wifi/Details/" + wifi.WifiId)
                        .html(wifi.BusinessOrSpotName))
                        .append(" (" + wifi.Address + ")"));
                        
                });

                // Adjust zoom to display all the pins we just added.
                if (points.length > 1) {
                    map.SetMapView(points);
                }
                // Display the event's pin-bubble on hover.
                $(".wifiItem").each(function(i, wifi) {
                    $(wifi).hover(
                    function() { map.ShowInfoBox(shapes[i]); },
                    function() { map.HideInfoBox(shapes[i]); }
                );
                });
            }, "json");

            $("#loading").empty();
}