﻿var mapview_cZoomLevelCentered = 13;
var mapview_googlemap = null;
var mapview_geocoder = null;
var mapview_point = null;
var mapview_zoomlevel = mapview_cZoomLevelCentered;
var mapview_initialized = false;

/******************************************************************************/
function mapview_LoadGoogleMaps()
{
    if (mapview_googlemap != null)
    {
        mapview_UnloadGoogleMaps();
    }

    if (GBrowserIsCompatible())
    {
        var mapview_googlemap_canvas = document.getElementById("mapview_googlemap_canvas");
        mapview_googlemap = new GMap2(mapview_googlemap_canvas);
        mapview_googlemap.setMapType(G_PHYSICAL_MAP);
        mapview_googlemap.addControl(new GSmallZoomControl3D());
        // Latitude and Longitude for Winston-Salem, NC
        //mapview_googlemap.setCenter(new GLatLng(36.093655, -80.243226), mapview_zoomlevel);
        mapview_geocoder = new GClientGeocoder();
        mapview_initialized = true;
    }
}

/******************************************************************************/
function mapview_UnloadGoogleMaps()
{
    if (mapview_initialized)
    {
        GUnload();
    }
    mapview_googlemap = null;
    mapview_geocoder = null;
    mapview_point = null;
    mapview_zoomlevel = mapview_cZoomLevelCentered;
    mapview_initialized = false;
}

/******************************************************************************/
function mapview_ShowAddress(address, description, zoomlevel)
{
    if (mapview_geocoder)
    {
        mapview_geocoder.getLatLng(
            address,
            function(point)
            {
                if (!point)
                {
                    var mapview_googlemap_canvas = document.getElementById("mapview_googlemap_canvas");
                    mapview_googlemap_canvas.innerText = "";
                    mapview_googlemap_canvas.innerHTML = "<br/><br/>";
                    mapview_googlemap_canvas.innerHTML += "&nbsp;&nbsp;&nbsp;<font color='#FF0000'><b>ERROR</b></font>: Address not found!";
                    mapview_googlemap_canvas.innerHTML += "<br/><br/>";
                    mapview_googlemap_canvas.innerHTML += ("&nbsp;&nbsp;&nbsp;<b><i>Address</i></b>: " + address + "<br/>");

                    mapview_HideMapViewStreetviewPanorama();
                }
                else
                {
                    mapview_point = point;
                    mapview_googlemap.setCenter(point, mapview_zoomlevel);
                    //var mapview_gmarker = new GMarker(point);
                    //mapview_googlemap.addOverlay(mapview_gmarker);

                    // Create our PTRP marker icon.
                    var ptrpIcon = new GIcon(G_DEFAULT_ICON);
                    //ptrpIcon.image = "Images/mapview-gmapmarker-mouseout.png";
                    ptrpIcon.image = "Images/mapview-gmapmarker.png";
                    ptrpIcon.shadow = "images/mapview-gmapmarker-shadow.png";
                    // Set up our GMarkerOptions object
                    markerOptions = { icon:ptrpIcon };
                    var mapview_gmarker = new GMarker(point, markerOptions);
                    mapview_googlemap.addOverlay(mapview_gmarker);
                    //GEvent.addListener(mapview_gmarker, "mouseover", function() {
                    //    mapview_gmarker.setImage("Images/mapview-gmapmarker-mouseover.png");
                    //});
                    //GEvent.addListener(mapview_gmarker, "mouseout", function() {
                    //    mapview_gmarker.setImage("Images/mapview-gmapmarker-mouseout.png");
                    //});

                    //mapview_gmarker.openInfoWindowHtml(address);
                    mapview_gmarker.openInfoWindowHtml(description, {maxWidth:300});
                    GEvent.addListener(mapview_gmarker, "click", function () {
                        mapview_gmarker.openInfoWindowHtml(description, {maxWidth:300});
                    });

                    // Display the streetview panorama.
                    panoramaOptions = { latlng:point };
                    var gsvpano = new GStreetviewPanorama(document.getElementById("mapview_streetview_panorama_div"), panoramaOptions);
                    GEvent.addListener(gsvpano, "error", mapview_HandleError);

//                    while (mapview_zoomlevel != zoomlevel)
//                    {
//                        if (mapview_zoomlevel > zoomlevel)
//                        {
//                            mapview_ZoomOut();
//                        }
//                        else if (mapview_zoomlevel < zoomlevel)
//                        {
//                            mapview_ZoomIn();
//                        }
//                    }

                    mapview_ShowMapViewStreetviewPanorama();
                }
            }
        );
    }
    else
    {
        var mapview_googlemap_canvas = document.getElementById("mapview_googlemap_canvas");
        mapview_googlemap_canvas.innerText = "";
        mapview_googlemap_canvas.innerHTML = "<br/><br/>";
        mapview_googlemap_canvas.innerHTML += "&nbsp;&nbsp;&nbsp;<font color='#FF0000'><b>ERROR</b></font>: Geocoder not found for address.";
        mapview_googlemap_canvas.innerHTML += "<br/><br/>";
        mapview_googlemap_canvas.innerHTML += ("&nbsp;&nbsp;&nbsp;<b><i>Address</i></b>: " + address + "<br/>");

        mapview_HideMapViewStreetviewPanorama();
    }
}

/******************************************************************************/
function mapview_HandleError(errorCode)
{
    var mapview_streetview_panorama_div = document.getElementById("mapview_streetview_panorama_div");
    mapview_streetview_panorama_div.innerText = "";
    mapview_streetview_panorama_div.innerHTML = "<br/><br/>";
    mapview_streetview_panorama_div.innerHTML += "&nbsp;&nbsp;&nbsp;<font color='#FF0000'><b>ERROR</b></font>: Error loading the panorama map view.";
    mapview_streetview_panorama_div.innerHTML += "<br/><br/>";
    mapview_streetview_panorama_div.innerHTML += ("&nbsp;&nbsp;&nbsp;<b><i>Error Code</i></b>: " + errorCode + "<br/>");

    mapview_HideMapViewStreetviewPanorama();
}  

/******************************************************************************/
function mapview_ZoomCentered()
{
//    // Set mapview zoom level to 13!
//    if ((mapview_googlemap == null) || (mapview_point == null))
//    {
//        return;
//    }

//    // Move the slider bar indicator 'up'.
//    var img_mapview_slider_bar_adjustment_top = document.getElementById("img_mapview_slider_bar_adjustment_top");
//    var height = img_mapview_slider_bar_adjustment_top.height;
//    img_mapview_slider_bar_adjustment_top.height = 53;
//    var img_mapview_slider_bar_adjustment_bottom = document.getElementById("img_mapview_slider_bar_adjustment_bottom");
//    var height = img_mapview_slider_bar_adjustment_bottom.height;
//    img_mapview_slider_bar_adjustment_bottom.height = 91;

//    // Increment the zoom level.
//    mapview_zoomlevel = mapview_cZoomLevelCentered;

//    // Adjust the Google map zoom level.
//    mapview_googlemap.setCenter(mapview_point, mapview_zoomlevel);
}

/******************************************************************************/
function mapview_ZoomIn()
{
//    // Do not allow more than 6 zoom ins from 'Centered' (at zoom level 13)!
//    if ((mapview_googlemap == null) || (mapview_point == null) || (mapview_zoomlevel >= (mapview_cZoomLevelCentered + 6)))
//    {
//        return;
//    }

//    // Move the slider bar indicator 'up'.
//    var img_mapview_slider_bar_adjustment_top = document.getElementById("img_mapview_slider_bar_adjustment_top");
//    var height = img_mapview_slider_bar_adjustment_top.height;
//    img_mapview_slider_bar_adjustment_top.height -= 8;
//    var img_mapview_slider_bar_adjustment_bottom = document.getElementById("img_mapview_slider_bar_adjustment_bottom");
//    var height = img_mapview_slider_bar_adjustment_bottom.height;
//    img_mapview_slider_bar_adjustment_bottom.height += 8;

//    // Increment the zoom level.
//    mapview_zoomlevel += 1;

//    // Adjust the Google map zoom level.
//    mapview_googlemap.setCenter(mapview_point, mapview_zoomlevel);
}

/******************************************************************************/
function mapview_ZoomOut()
{
//    // Do not allow more than 11 zoom outs from 'Centered' (at zoom level 13)!
//    if ((mapview_googlemap == null) || (mapview_point == null) || (mapview_zoomlevel <= (mapview_cZoomLevelCentered - 11)))
//    {
//        return;
//    }

//    // Move the slider bar indicator 'down'.
//    var img_mapview_slider_bar_adjustment_bottom = document.getElementById("img_mapview_slider_bar_adjustment_bottom");
//    var height = img_mapview_slider_bar_adjustment_bottom.height;
//    img_mapview_slider_bar_adjustment_bottom.height -= 8;
//    var img_mapview_slider_bar_adjustment_top = document.getElementById("img_mapview_slider_bar_adjustment_top");
//    var height = img_mapview_slider_bar_adjustment_top.height;
//    img_mapview_slider_bar_adjustment_top.height += 8;

//    // Decrement the zoom level.
//    mapview_zoomlevel -= 1;

//    // Adjust the Google map zoom level.
//    mapview_googlemap.setCenter(mapview_point, mapview_zoomlevel);
}

/******************************************************************************/
var mapview_collabsiblediv_collapsed = false;
function mapview_ShowMapViewStreetviewPanorama()
{
    mapview_collabsiblediv_collapsed = true;
    mapview_ShowHideMapViewStreetviewPanorama();
}
function mapview_HideMapViewStreetviewPanorama()
{
    mapview_collabsiblediv_collapsed = false;
    mapview_ShowHideMapViewStreetviewPanorama();
}
function mapview_ShowHideMapViewStreetviewPanorama()
{
    mapview_collabsiblediv_collapsed = !mapview_collabsiblediv_collapsed;

    document.getElementById('mapview_streetview_panorama_img').src = mapview_collabsiblediv_collapsed ? 'Images/bullet-collapsed.png' : 'Images/bullet-expanded.png';

    var mvsvplbltxt = document.getElementById('mapview_streetview_panorama_label').innerText;
    document.getElementById('mapview_streetview_panorama_label').innerText = mapview_collabsiblediv_collapsed ? mvsvplbltxt.replace('Hide ', 'Show ') : mvsvplbltxt.replace('Show ', 'Hide ');

    document.getElementById('mapview_streetview_panorama_div').style.display = mapview_collabsiblediv_collapsed ? 'none' : 'block';
}
