﻿(function($) {

    function vwcMapLocation() {
        this.GMaps = new Object();
        this.GOverview = new Object();
    }

    function initializeMap(obj) {
        if (GBrowserIsCompatible()) {

            var options = {
                resultList: G_GOOGLEBAR_RESULT_LIST_SUPPRESS,
                onMarkersSetCallback: function(markers) {
                    if (markers.length > 0) {
                        var latlng = markers[0].marker.getLatLng();
                        $.vwcMapLocation.GMaps[obj.id].clearOverlays();
                        $.vwcMapLocation.GMaps[obj.id].addOverlay(new GMarker(latlng, { draggable: true }));
                        $.vwcMapLocation.GMaps[obj.id].disableGoogleBar();
                        $.vwcMapLocation.GMaps[obj.id].enableGoogleBar();
                    }
                },
                suppressInitialResultSelection: true,
                showOnLoad: false,
                searchFormHint: "Search a location"
            };

            var ctrMap = new google.maps.Map2(document.getElementById(obj.id), { googleBarOptions: options });

            var center = new GLatLng(35.779748, -78.643414);

            if ($(obj).attr('lat') && $(obj).attr('lng')) {
                center = new GLatLng($(obj).attr('lat'), $(obj).attr('lng'));
            }

            $('#' + $(obj).attr('latctr')).val(center.lat().toFixed(5));
            $('#' + $(obj).attr('lngctr')).val(center.lng().toFixed(5));

            ctrMap.setCenter(center, parseInt($(obj).attr('zoom')));
            ctrMap.addControl(new GSmallZoomControl3D());
            ctrMap.addControl(new GMenuMapTypeControl());

            if ($(obj).attr('enableoverview') == 'true') {
                var ctrOverview = new GOverviewMapControl();
                ctrMap.addControl(ctrOverview);
            }

            if ($(obj).attr('enablegooglebar') == 'true') {
                ctrMap.enableGoogleBar();
            }

            var marker = new GMarker(center, { draggable: true });
            ctrMap.addOverlay(marker);

            GEvent.addListener(marker, "dragend", function() {
                var pt = marker.getPoint();
                ctrMap.panTo(pt);

                $('#' + $(obj).attr('latctr')).val(pt.lat().toFixed(5));
                $('#' + $(obj).attr('lngctr')).val(pt.lng().toFixed(5));
            });

            GEvent.addListener(ctrMap, "moveend", function() {
                ctrMap.clearOverlays();
                var center = ctrMap.getCenter();
                var marker = new GMarker(center, { draggable: true });

                ctrMap.addOverlay(marker);
                $('#' + $(obj).attr('latctr')).val(center.lat().toFixed(5));
                $('#' + $(obj).attr('lngctr')).val(center.lng().toFixed(5));

                GEvent.addListener(marker, "dragend", function() {
                    var pt = marker.getPoint();
                    ctrMap.panTo(pt);

                    $('#' + $(obj).attr('latctr')).val(pt.lat().toFixed(5));
                    $('#' + $(obj).attr('lngctr')).val(pt.lng().toFixed(5));
                });

            });

            $('#' + $(obj).attr('clearctr')).click(function() {
                $('#' + $(obj).attr('latctr')).val('');
                $('#' + $(obj).attr('lngctr')).val('');
                return false;
            });

            if ($(obj).attr('isempty') == 'true') {
                $('#' + $(obj).attr('latctr')).val('');
                $('#' + $(obj).attr('lngctr')).val('');
            }

            $.vwcMapLocation.GMaps[obj.id] = ctrMap;
            $.vwcMapLocation.GOverview[obj.id] = ctrOverview;

        }
    }

    $(document).ready(function() {

        $.vwcMapLocation = new vwcMapLocation(); // singleton instance

        $('[vivomaplocationcontrol="1"]').each(function() {
            initializeMap(this);
        });

    });

    $(document.body).unload(function() {
        if (GBrowserIsCompatible()) {
            GUnload();
        }
    });

})(jQuery);