var Map = null;

$(function () {

Map = function () {
    this.map = null;
    this.mk_manager = null;
    this.marker = [];
    this.icon = new GIcon();
    this.icon.image = '/images/room/icn_room.png';
    this.icon.iconSize = new GSize(22, 36);
    this.icon.iconAnchor = new GPoint(11, 36);
    this.icon.shadow = '/images/room/icn_room_shadow.png';
    this.icon.shadowSize = new GSize(48, 36);
    this.mk_opt = new Object();
    this.mk_opt.clickable = true;
    this.mk_opt.draggable = false;
    this.mk_opt.icon = this.icon;
};

Map.prototype = {

    _initialize : function () {
        if (!GBrowserIsCompatible()) {
            return false;
        }

        var nelat = parseFloat($("#ne_lat").val());
        var nelng = parseFloat($("#ne_lng").val());
        var swlat = parseFloat($("#sw_lat").val());
        var swlng = parseFloat($("#sw_lng").val());
        var clat = parseFloat($("#c_lat").val());
        var clng = parseFloat($("#c_lng").val());

        if (clat == 0 || clng == 0) {
            return false;
        }

        this.map = new GMap2($("#areaMap").get(0));
        this.map.addControl(new GLargeMapControl());
        this.map.addControl(new GMapTypeControl());
        var clatlng = new GLatLng(clat, clng);
        var zoom = 14;
        if (nelat != 0 && nelng != 0 && swlat != 0 && swlng != 0 && nelat != swlat && nelng != swlng) {
            zoom = this.map.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(swlat,swlng), new GLatLng(nelat,nelng)));
        }
        this.map.setCenter(clatlng, zoom);

        this.mk_manager = new MarkerManager(this.map);

        return true;
    },

    _getBounds : function () {
        var bounds = this.map.getBounds();
        var nelatlng = bounds.getNorthEast();
        var swlatlng = bounds.getSouthWest();
        return {
            nelat : nelatlng.lat(),
            nelng : nelatlng.lng(),
            swlat : swlatlng.lat(),
            swlng : swlatlng.lng()
        };
    },

    _setMarker : function (mlatlng, rcid) {
        var marker = new GMarker(mlatlng, this.mk_opt);
        GEvent.addListener(marker, 'click', function () {
            location.href = '../room_init.php?rcid='+rcid;
        });
        this.marker.push(marker);
    },

    _setMarkerWithIW : function (mlatlng, iw_val) {
        var self = this;
        var marker = new GMarker(mlatlng, this.mk_opt);
        GEvent.addListener(marker, 'click', function (latlng) {
            self.map.closeInfoWindow();

            var iw_contents = '<table border="0" cellspacing="0" cellpadding="0" style="margin:5px;">'
                            + '<tr valign="top">'
                            + '<td style="padding-right:5px;">'+ iw_val.img +'</td>'
                            + '<td>'+ iw_val.address +'<br />'
                            + '賃料： '+ iw_val.rent +'<br />'
                            + '間取り： '+ iw_val.layout +'</td>'
                            + '</tr>'
                            + '</table>';

            self.map.openInfoWindowHtml(latlng, iw_contents);
        });
        this.marker.push(marker);
    },

    _addMarkers : function (min_zoom) {
        if (this.marker.length == 0) {
            return false;
        }
        this.mk_manager.addMarkers(this.marker, min_zoom);
        this.mk_manager.refresh();
        this.marker = [];
    },

    _clearMarkers : function () {
        this.mk_manager.clearMarkers();
        this.marker = [];
    },

    _getZoom : function () {
        return this.map.getZoom();
    },

    _setFuncZoomEnd : function (func) {
        GEvent.addListener(this.map, 'zoomend', func);
    },

    _setFuncDragEnd : function (func) {
        GEvent.addListener(this.map, 'dragend', func);
    }
};

});