﻿var gmap = {
    init: function (arg) {
        var g = $(arg.gmap);
//        var title = g.attr("title");
//        if (title === undefined)
//            return;
//        var latlng = title.split(";");
//        if (latlng.length != 2)
//            return;
//        var pos = new google.maps.LatLng(eval(latlng[0]), eval(latlng[1]));
        var pos = new google.maps.LatLng(arg.lat,arg.lng);

        var myOptions = {
            zoom: arg.zoom,
            center: pos,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            mapTypeControl: false,
            navigationControl: true,
            scaleControl: false,
            scrollwheel : false
        };
        var map = new google.maps.Map(g.get(0), myOptions);
        var image = new google.maps.MarkerImage("/Content/purple-dot.png",
            new google.maps.Size(32, 32),
            new google.maps.Point(0, 0),
            new google.maps.Point(16, 32));
        var shadow = new google.maps.MarkerImage("/Content/purple-dot-shadow.png",
            new google.maps.Size(49, 32),
            new google.maps.Point(0, 0),
            new google.maps.Point(16, 32));

        var markerOptions = {
            position: pos,
            map: map,
            icon: image,
            shadow: shadow
        };
        var marker = new google.maps.Marker(markerOptions);

        if (arg.info !== undefined) {
                var infowindow = new google.maps.InfoWindow({
                    content: arg.info(),
                    size: new google.maps.Size(50, 20)
                });
                google.maps.event.addListener(marker, 'click', function () {
                    infowindow.setContent(arg.info());
                    infowindow.open(map, marker);
                });
        }

        if (arg.isEdit !== true)
            return;

        var geocoder = new google.maps.Geocoder();
        var gmap_text = $(arg.search_text);
        var search = function () {
            geocoder.geocode({ 'address': gmap_text.val(), 'partialmatch': true }, function (results, status) {
                if (status == 'OK' && results.length > 0) {
                    map.fitBounds(results[0].geometry.viewport);
                } else {
                    alert("検索結果がありませんでした。");
                    //                    alert("Geocode was not successful for the following reason: " + status);
                }
            });
        };
        $(arg.search_button).bind("click", search);
        gmap_text.keydown(function (e) {
            if (e.keyCode == 13) {
                search();
                return false;
            }
            return true;
        });

        function set_gmap_data() {
            var position = map.getCenter();

            geocoder.geocode({ 'latLng': position }, function (results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    var address = "";
                    for (var i = 0; i < results.length; i++) {
                        if (results[i].types.length >= 2 && results[i].types[1] == "political") {
                            address = results[i].formatted_address;
                            break;
                        }
                    }
                    if (arg.changed !== undefined) {
                        arg.changed(position.lat(), position.lng(), address, map.getZoom());
                    }
                }
            });

        }

        google.maps.event.addListener(map, 'zoom_changed', function () {
            set_gmap_data();
        });
        google.maps.event.addListener(map, 'center_changed', function () {
            marker.setPosition(map.getCenter());
            set_gmap_data();
        });
    }
};
