﻿
/*--  Google maps --*/
$(function () {

    // Dialog map
    if ($('#mapDialog').dialog !== null) {
        $('#mapDialog').dialog({
            autoOpen: false,
            width: 700,
            position: 'auto',
            modal: true,
            resizable: false,
            draggable: true
        });


        // Dialog Link
        $('.openMapDialog').click(function () {
            var address = '';
            if ($('#HiddenLocality').val() !== '') {
                address = $('#HiddenVenueName').val() + ' : ' + $('#HiddenStreetAddress').val() + ($('#HiddenStreetAddress').val() !== "" ? ", " : "") + $('#HiddenLocality').val() + " " + $('#HiddenState').val() + " " + $('#HiddenPostcode').val();
            }
            else {
                address = $('#HiddenVenueName').val() + ' : ' + $('#HiddenStreetAddress').val() + ", " + $('#HiddenState').val() + " " + $('#HiddenPostcode').val();
            }
            $('#mapDialog').dialog('option', 'title', address);
            $('#mapDialog').dialog('open');
            $('#mapDialog').dialog('option', address);
            iniGoogleMap();
            return false;
        });
    }


});

var map;
var geocoder;

function iniGoogleMap() {
    if (GBrowserIsCompatible()) {
        var latitude = $('#HiddenLatitude').val();
        var longitude = $('#HiddenLongitude').val();
        if (latitude !== '' && longitude !== '') {
            map = new GMap2(document.getElementById("map_canvas"));
            map.setUIToDefault();
            map.clearOverlays();
            //map.setMapType(G_SATELLITE_MAP);

            var venueName = $('#HiddenVenueName').val();
            var streetAddress = $('#HiddenStreetAddress').val();
            var locality = $('#HiddenLocality').val();
            var state = $('#HiddenState').val();
            var postCode = $('#HiddenPostcode').val();
            var countryName = $('#HiddenCountry').val();

            var address = '';
            if (locality !== '') {
                address = '<strong>' + venueName + '</strong><br>' + streetAddress + '<br>' + locality + ', ' + state + ', ' + postCode + '<br>' + countryName;
            }
            else {
                address = '<strong>' + venueName + '</strong><br>' + streetAddress + '<br>' + state + ', ' + postCode + '<br>' + countryName;
            }
            
            //if ($('#HiddenVenueDescription').val() !== '') {
            //    address = address + '<br><br>' + $('#HiddenVenueDescription').val();
            //}

            var useXml = $('#HiddenVenueId').length > 0;

            if (!useXml) {
                point = new GLatLng(latitude, longitude);
                marker = new GMarker(point);
                map.addOverlay(marker);
                map.setCenter(point, 15);
                createMarker(point, address);
                marker.openInfoWindowHtml(address);
            } else {

                GDownloadUrl("/Handlers/MapData.ashx?vid=" + $('#HiddenVenueId').val(), function (data) {

                    var xml = GXml.parse(data);
                    var markers = xml.documentElement.getElementsByTagName("marker");
                    var polylines = xml.documentElement.getElementsByTagName("polyline");
                    var center = xml.documentElement.getElementsByTagName("center");
                    var zoomLevel = xml.documentElement.getElementsByTagName("zoomLevel");
                    map.setCenter(new GLatLng(parseFloat(center[0].getAttribute("lat")), parseFloat(center[0].getAttribute("lon"))), parseFloat(zoomLevel[0].getAttribute("value")));

                    for (var l = 0; l < polylines.length; i++) {
                        var encodedPoints = polylines[l].getAttribute("encodedPoints");
                        var encodedLevels = polylines[l].getAttribute("encodedLevels");
                        createPolyline(encodedPoints, encodedLevels);
                    }

                    for (var i = 0; i < markers.length; i++) {
                        var info = markers[i].getAttribute("html");
                        var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lon")));
                        var marker = new GMarker(point);
                        var htmlInfo = cleanInfo(info);
                        if (info !== null || info !== '') { AddMarkerInfo(marker, htmlInfo); }
                        if (i === 0) { map.openInfoWindowHtml(point, htmlInfo); }
                        map.addOverlay(marker);
                    }
                });
            }
        }
    }
}

function AddMarkerInfo(marker, info) {
    GEvent.addListener(marker, "click", function () {
        marker.openInfoWindowHtml(info);
    });
}

function cleanInfo(info) {
    var reOpen = /{{/g;
    var reClose = /}}/g;
    var infoHtml = info.replace(reOpen, "<").replace(reClose, ">");
    return infoHtml;
}

function createMarker(point, address) {
    var letteredIcon = new GIcon(G_DEFAULT_ICON);
    var marker = new GMarker(point);
    GEvent.addListener(marker, 'click', function () {
        marker.openInfoWindowHtml(address);
    });
    map.setCenter(point, 16);
    map.addOverlay(marker);
    return marker;
}

function createPolyline(encodedPoints, encodedLevels) {
    var encodedPolyline = new GPolyline.fromEncoded({
        color: "#E50FC4",
        weight: 5,
        points: encodedPoints,
        levels: encodedLevels,
        opacity: 0.7,
        zoomFactor: 32,
        numLevels: 4
    });
    map.addOverlay(encodedPolyline);
}

