﻿//<![CDATA[

var g_map;
var g_markermanager;
var g_geocoder;
var g_messagecontainer;

function getLatLngCallback(latlng)
{
    if(latlng != null)
    {
        g_map.setCenter(latlng, 15);
        g_map.savePosition();
    }
    else
    {
        g_messagecontainer.innerHTML = 'ご指定の地点が見つかりませんでした。';
    }
}

function createPropertyMarker(point, icon, name, html)
{
    var marker = new GMarker(point, {icon:icon, title:name});
    GEvent.addListener(marker, "click", function()
    {
        if(g_map.fromLatLngToDivPixel(marker.getPoint()).equals(g_map.fromLatLngToDivPixel(g_map.getCenter())))
        {
            g_map.openInfoWindowHtml(g_map.getCenter(), html);
        }
        else
        {
            g_map.panTo(marker.getPoint());
        }
    });
    return marker;
}

function moveendCallback(overlay, point)
{
    if(!g_markermanager) g_markermanager = new MarkerManager(g_map);

    if(g_map.getZoom() >= 13)
    {
        g_messagecontainer.innerHTML = '物件検索中...';

        var request = GXmlHttp.create();
        request.open('GET', 'PropertyMapInfo.aspx?bounds=' + g_map.getBounds(), true);
        request.onreadystatechange = function()
        {
            if(request.readyState == 4)
            {
                g_map.closeInfoWindow();
                g_markermanager.clearMarkers();
                var response = request.responseXML;
                var mapinfo = response.documentElement;
                if(mapinfo)
                {
                    var properties = mapinfo.getElementsByTagName('property');
                    if(properties.length == 0)
                    {
                        g_messagecontainer.innerHTML = 'この地図上には物件が登録されていません。';
                    }
                    else if(properties.length <= 100)
                    {
                        var markers = [];
                        var centerPoint = g_map.fromLatLngToDivPixel(g_map.getCenter());
                        for(var i=0; i<properties.length; i++)
                        {
                            var property = properties[i];

                            var lat = parseFloat(property.getAttribute('lat'));
                            var lng = parseFloat(property.getAttribute('lng'));
                            var point = new GLatLng(lat, lng);
                            var icon = new GIcon();

                            icon.image = property.getAttribute('sellingstatusiconurl');
                            icon.iconSize = new GSize(22, 36);
                            icon.iconAnchor = new GPoint(11, 18);
                            icon.infoWindowAnchor = new GPoint(11, 18);
                            icon.shadow = '/mansion/img/2007/shadow.png';
                            icon.shadowSize = new GSize(46, 37);
                            
                            var name = property.getAttribute('name');
                            var html =
                                "<table class=\"infowindow\">" +
                                "<tr class=\"title\"><th colspan=\"2\"><a href=\"/mansion/search/details.aspx?building_no=" + property.getAttribute('id') + "\">" + name + "</a></th></tr>" +
                                "<tr class=\"spec\"><th>階数：</th><td>" + property.getAttribute('stories') + "</td></tr>" +
                                "<tr class=\"spec\"><th>総戸数：</th><td>" + property.getAttribute('totalunits') + "</td><tr>" +
                                "<tr class=\"spec\"><th>価格帯：</th><td>" + property.getAttribute('pricerange') + "&nbsp;（最多：" + property.getAttribute('mostprice') + "）</td><tr>" +
                                "<tr class=\"spec\"><th>専有面積：</th><td>" + property.getAttribute('lotsizerange') + "&nbsp;（平均：" + property.getAttribute('meanlotsize') + "）</td><tr>" +
                                "<tr class=\"spec\"><th>販売状況：</th><td>" + property.getAttribute('sellingstatus') + "</td><tr>" +
                                "</table>";

                            var marker = createPropertyMarker(point, icon, name, html)

                            if(g_map.fromLatLngToDivPixel(marker.getPoint()).equals(centerPoint)) {
                                g_map.openInfoWindowHtml(g_map.getCenter(), html);
                            }

                            markers.push(marker);
                        }
                        g_markermanager.addMarkers(markers, 0);

                        g_messagecontainer.innerHTML = 'この地図上には ' + properties.length + ' 件の物件が登録されています。';
                    }
                    else
                    {
                        g_messagecontainer.innerHTML = 'この地図上には多数の物件が登録されているため表示を省略しました。';
                    }
                }
                g_markermanager.refresh();
            }
        }
        request.send(null);
    }
    else
    {
        g_markermanager.clearMarkers();
        g_messagecontainer.innerHTML = 'この縮尺では物件の検索を省略させていただきました。';
    }
}

function bindGMap(mapcontainer, messagecontainer, initialaddress)
{
    g_messagecontainer = messagecontainer;

    if(GBrowserIsCompatible())
    {
        g_map = new GMap2(mapcontainer);
        g_map.addControl(new GLargeMapControl());
        GEvent.addListener(g_map, 'moveend', moveendCallback);
        g_geocoder = new GClientGeocoder();
        searchByAddress(initialaddress);
    }
    else
    {
        g_messagecontainer.innerHTML = 'ご使用の環境では地図機能をご利用頂けません。';
    }
}

function searchByAddress(address)
{
    if(g_geocoder)
    {
        if(address  && address.length > 0)
        {
            g_messagecontainer.innerHTML = '地点検索中...';

            var request = GXmlHttp.create();
            request.open('GET', 'PropertyGeocode.aspx?name=' + encodeURIComponent(address), true);
            request.onreadystatechange = function()
            {
                if(request.readyState == 4)
                {
                    var response = request.responseXML;
                    var mapinfo = response.documentElement;
                    if(mapinfo)
                    {
                        var properties = mapinfo.getElementsByTagName('property');

                        if(properties.length == 1)
                        {
                                var lat = parseFloat(properties[0].getAttribute('lat'));
                                var lng = parseFloat(properties[0].getAttribute('lng'));
                                g_map.setCenter(new GLatLng(lat, lng), 15);
                                g_map.savePosition();
                        }
                        else
                        {
                            g_geocoder.getLatLng(address, getLatLngCallback);
                        }
                    }
                    else
                    {
                        g_geocoder.getLatLng(address, getLatLngCallback);
                    }
                }
            }
            request.send(null);
        }
        else
        {
            g_messagecontainer.innerHTML = '地点を指定して下さい。';
        }
    }
}

//]]>