
var CustomIW = function () {
    this.iw_width = 214;
    this.is_mouseover = false;
    this.tpl = '<div id="fukidashi_top">&nbsp;</div>'
             + '<div id="fukidashi_close">'
             + '<img src="../images/fuki_close.png" width="12" height="12" alt=""'
             + ' id="btn_iwclose" onmouseover="this.style.cursor=\'pointer\'" />'
             + '</div>'
             + '<div id="fukidashi_main">'
             + '<p><a href="../details/index.php?sid=({space_id})"><strong>({name})</strong></a></p>'
             + '<p>({address})</p>'
             + '<p>({contact})</p>'
             + '</div>';
};

CustomIW.prototype = new GOverlay();
CustomIW.prototype.initialize = function (map) {
    $("#i_window").css({'width' : this.iw_width+'px'});
};
CustomIW.prototype.remove = function () {
    $("#i_window").css({'display' : 'none'});
};
CustomIW.prototype.copy = function () {
    return new CustomIW();
};
CustomIW.prototype.redraw = function (force) {};


var Map = function () {
    this.map = null;
    this.mk_manager = null;
    this.marker = [];
    this.is_open_iw = false;
    this.custom_iw = null;
    this.icon = {
        's' : {
            '_normal' : new GIcon(),
            '_new' : new GIcon(),
            '_campaign' : new GIcon(),
            '_new_cp' : new GIcon()
        },
        's_k' : {
            '_normal' : new GIcon(),
            '_new' : new GIcon(),
            '_campaign' : new GIcon(),
            '_new_cp' : new GIcon()
        },
        't' : {
            '_normal' : new GIcon(),
            '_new' : new GIcon(),
            '_campaign' : new GIcon(),
            '_new_cp' : new GIcon()
        },
        't_k' : {
            '_normal' : new GIcon(),
            '_new' : new GIcon(),
            '_campaign' : new GIcon(),
            '_new_cp' : new GIcon()
        },
        'b' : {
            '_normal' : new GIcon(),
            '_new' : new GIcon(),
            '_campaign' : new GIcon(),
            '_new_cp' : new GIcon()
        },
        'b_k' : {
            '_normal' : new GIcon(),
            '_new' : new GIcon(),
            '_campaign' : new GIcon(),
            '_new_cp' : new GIcon()
        },
        'sb' : {
            '_normal' : new GIcon(),
            '_new' : new GIcon(),
            '_campaign' : new GIcon(),
            '_new_cp' : new GIcon()
        },
        'sb_k' : {
            '_normal' : new GIcon(),
            '_new' : new GIcon(),
            '_campaign' : new GIcon(),
            '_new_cp' : new GIcon()
        },
        'tb' : {
            '_normal' : new GIcon(),
            '_new' : new GIcon(),
            '_campaign' : new GIcon(),
            '_new_cp' : new GIcon()
        },
        'tb_k' : {
            '_normal' : new GIcon(),
            '_new' : new GIcon(),
            '_campaign' : new GIcon(),
            '_new_cp' : new GIcon()
        },
        'sbt' : {
            '_normal' : new GIcon(),
            '_new' : new GIcon(),
            '_campaign' : new GIcon(),
            '_new_cp' : new GIcon()
        },
        'sbt_k' : {
            '_normal' : new GIcon(),
            '_new' : new GIcon(),
            '_campaign' : new GIcon(),
            '_new_cp' : new GIcon()
        }
    };
};

Map.prototype = {

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

        // 物件マーカー設定 {{
        // ユアスペース
        this.icon.s._normal = this._setIconProp('/images/common/icon_c.png');
        this.icon.s._new = this._setIconProp('/images/common/icon_c_new.png');
        this.icon.s._campaign = this._setIconProp('/images/common/icon_c_cam.png');
        this.icon.s._new_cp = this._setIconProp('/images/common/icon_c_cn.png');
        this.icon.s_k._normal = this._setIconProp('/images/common/icon_ck.png');
        this.icon.s_k._new = this._setIconProp('/images/common/icon_c_newk.png');
        this.icon.s_k._campaign = this._setIconProp('/images/common/icon_c_camk.png');
        this.icon.s_k._new_cp = this._setIconProp('/images/common/icon_c_cnk.png');
        // ユアトランク
        this.icon.t._normal = this._setIconProp('/images/common/icon_t.png');
        this.icon.t._new = this._setIconProp('/images/common/icon_t_new.png');
        this.icon.t._campaign = this._setIconProp('/images/common/icon_t_cam.png');
        this.icon.t._new_cp = this._setIconProp('/images/common/icon_t_cn.png');
        this.icon.t_k._normal = this._setIconProp('/images/common/icon_tk.png');
        this.icon.t_k._new = this._setIconProp('/images/common/icon_t_newk.png');
        this.icon.t_k._campaign = this._setIconProp('/images/common/icon_t_camk.png');
        this.icon.t_k._new_cp = this._setIconProp('/images/common/icon_t_cnk.png');
        // ユアバイク
        this.icon.b._normal = this._setIconProp('/images/common/icon_b.png');
        this.icon.b._new = this._setIconProp('/images/common/icon_b_new.png');
        this.icon.b._campaign = this._setIconProp('/images/common/icon_b_cam.png');
        this.icon.b._new_cp = this._setIconProp('/images/common/icon_b_cn.png');
        this.icon.b_k._normal = this._setIconProp('/images/common/icon_bk.png');
        this.icon.b_k._new = this._setIconProp('/images/common/icon_b_newk.png');
        this.icon.b_k._campaign = this._setIconProp('/images/common/icon_b_camk.png');
        this.icon.b_k._new_cp = this._setIconProp('/images/common/icon_b_cnk.png');
        // ユアスペース＆ユアバイク
        this.icon.sb._normal = this._setIconProp('/images/common/icon_cb.png');
        this.icon.sb._new = this._setIconProp('/images/common/icon_cb_new.png');
        this.icon.sb._campaign = this._setIconProp('/images/common/icon_cb_cam.png');
        this.icon.sb._new_cp = this._setIconProp('/images/common/icon_cb_cn.png');
        this.icon.sb_k._normal = this._setIconProp('/images/common/icon_cbk.png');
        this.icon.sb_k._new = this._setIconProp('/images/common/icon_cb_newk.png');
        this.icon.sb_k._campaign = this._setIconProp('/images/common/icon_cb_camk.png');
        this.icon.sb_k._new_cp = this._setIconProp('/images/common/icon_cb_cnk.png');
        // ユアトランク＆ユアバイク
        this.icon.tb._normal = this._setIconProp('/images/common/icon_tb.png');
        this.icon.tb._new = this._setIconProp('/images/common/icon_tb_new.png');
        this.icon.tb._campaign = this._setIconProp('/images/common/icon_tb_cam.png');
        this.icon.tb._new_cp = this._setIconProp('/images/common/icon_tb_cn.png');
        this.icon.tb_k._normal = this._setIconProp('/images/common/icon_tbk.png');
        this.icon.tb_k._new = this._setIconProp('/images/common/icon_tb_newk.png');
        this.icon.tb_k._campaign = this._setIconProp('/images/common/icon_tb_camk.png');
        this.icon.tb_k._new_cp = this._setIconProp('/images/common/icon_tb_cnk.png');
        // ユアスペース＆ユアバイク＆ユアトランク
        this.icon.sbt._normal = this._setIconProp('/images/common/icon_ctb.png');
        this.icon.sbt._new = this._setIconProp('/images/common/icon_ctb_new.png');
        this.icon.sbt._campaign = this._setIconProp('/images/common/icon_ctb_cam.png');
        this.icon.sbt._new_cp = this._setIconProp('/images/common/icon_ctb_cn.png');
        this.icon.sbt_k._normal = this._setIconProp('/images/common/icon_ctbk.png');
        this.icon.sbt_k._new = this._setIconProp('/images/common/icon_ctb_newk.png');
        this.icon.sbt_k._campaign = this._setIconProp('/images/common/icon_ctb_camk.png');
        this.icon.sbt_k._new_cp = this._setIconProp('/images/common/icon_ctb_cnk.png');
        // }}

        var clatlng = new GLatLng(parseFloat($("#c_lat").val()), parseFloat($("#c_lng").val()));
        this.map = new GMap2($("#googlemap").get(0));
        this.map.addControl(new GLargeMapControl());
        this.map.addControl(new GMapTypeControl());
        this.map.addControl(new GScaleControl());
        this.map.setCenter(clatlng, zoom);
        var self = this;
        GEvent.addListener(this.map, 'zoomend', function (oldlv, newlv) {
            if (self.is_open_iw == true) {
                self._closeCustomInfoWindow();
            }
        });

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

    _setIconProp : function (img) {
        return {
            image : img,
            iconSize : new GSize(50, 46),
            iconAnchor : new GPoint(25, 46),
            shadow : '/images/common/shadow50.png',
            shadowSize : new GSize(60, 60)
        };
    },

    _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, space_id, kind, status) {
        var mk_opt = {
            clickable : true,
            icon : this.icon[kind]['_'+status]
        };
        var marker = new GMarker(mlatlng, mk_opt);
        GEvent.addListener(marker, 'click', function () {
            location.href = '../details/index.php?sid='+space_id;
        });
        this.marker.push(marker);
    },

    _setMarkerWithCustomIW : function (mlatlng, space_id, kind, status, iw_val) {
        var self = this;
        var mk_opt = {
            clickable : true,
            icon : this.icon[kind]['_'+status]
        };
        var marker = new GMarker(mlatlng, mk_opt);
        GEvent.addListener(marker, 'click', function (latlng) {
            if (self.is_open_iw) {
                self._closeCustomInfoWindow();
            }
            var m_pixel = self.map.fromLatLngToDivPixel(latlng);
            var c_pixel = self.map.fromLatLngToDivPixel(self.map.getCenter());

            var iw_contents = self.custom_iw.tpl;
            iw_contents = iw_contents.replace(/\(\{space_id\}\)/g, iw_val.space_id);
            iw_contents = iw_contents.replace(/\(\{name\}\)/g, iw_val.name);
            iw_contents = iw_contents.replace(/\(\{address\}\)/g, iw_val.address);
            iw_contents = iw_contents.replace(/\(\{contact\}\)/g, iw_val.contact);
            $("#i_window").html(iw_contents);
            $("#i_window").css('top', m_pixel.y - $("#i_window").height() - 30 + 'px');
            $("#i_window").css('left', m_pixel.x - self.custom_iw.iw_width / 2 + 13 + 'px');
            $("#i_window").css('display', 'block');
            $("#btn_iwclose").click(function () {
                self._closeCustomInfoWindow();
            });
            self.map.panBy(new GSize(c_pixel.x - m_pixel.x, c_pixel.y - m_pixel.y + 65));
            self.map.addOverlay(self.custom_iw);
            self.is_open_iw = true;
        });
        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 = [];
    },

    _setCustomInfoWindow : function () {
        this.custom_iw = new CustomIW();
        var iw_pane = this.map.getPane(G_MAP_FLOAT_PANE);
        iw_pane.id = 's_info';
        $("#s_info").append($("#i_window").get(0));
    },

    _closeCustomInfoWindow : function () {
        this.map.removeOverlay(this.custom_iw);
        $("#i_window").css('display', 'none');
        this.is_open_iw = false;
    },

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

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

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

