﻿RuanYu.register('RuanYu.WebSiteV1.Main.BuildGoogleMapLoader');

//
// 地图查找信息
//
RuanYu.WebSiteV1.Main.BuildGoogleMapLoader = {

    isEditing : false,

    /*
     * 查找
     */
    find:function()
    {
        if($F('mapX') == '0' || $F('mapX') == '')
        {
            var key = RuanYu.Cookies.find('city');

            var zoom = 16;

            var geocoder = new GClientGeocoder();

            if($('buildCity') != null && $('buildRegion') != null)
            {
                key = $F('buildCity');
                
                if($F('buildRegion') != '其他')
                    key += $F('buildRegion');   
            }
            
            geocoder.getLatLng(key, function(point){
                if (!point)
                {
                    alert('提示:未找到[' + key + ']相关信息.');
                }
                else
                {
                    MapEnigne.map.setCenter(point, zoom);

                    var marker = new GMarker(point, {draggable: ((RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.isEditing) ? true : false)});

                    MapEnigne.map.addOverlay(marker);

                    marker.openInfoWindowHtml(key);

    		        if(GoogleMapLoader.isEditing)
    		        {
		                marker.openInfoWindowHtml('地址:' + key + '.<br /><br />拖动红色标志即可重新设置地图上对应的位置.');
    		        }
    		        else
    		        {
    		            marker.openInfoWindowHtml('地址:' + key + '.');
    		        }

		            GEvent.addListener(marker, "dragstart", function() { MapEnigne.map.closeInfoWindow();  });
		            GEvent.addListener(marker, "dragend", function() {
		                RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.setMapPosition(marker.getPoint().x , marker.getPoint().y);
		            });
                }
            });

        }
        else
        {
            RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.loadMiniMap();
        }
    },

    /*
     * 显示小地图
     */
    loadMiniMap : function()
    {
	    var x = Number($F('mapX'));
        
        var y = Number($F('mapY'));
        
        MapEnigne.MiniMap.load('mini_map',x,y,16);
        
        if(x==0 && y==0)
        {
            var key = RuanYu.Cookies.find('city');

            if($('buildCity') != null && $('buildRegion') != null)
            {
                key = $F('buildCity');
                
                if($F('buildRegion') != '其他')
                    key += $F('buildRegion');   
            }
            
            MapEnigne.MiniMap.find({
                contextName:'mini_map', 
                key:key, 
                zoom:16, 
                callback:function(center)
                {
                    if (center){
                        $('mapX').value = center.x;
                        $('mapY').value = center.y;
                    }
                }
            });
        }
        else
        {
	        var center = new GLatLng(y, x);

            var marker = new GMarker(center, {draggable: false});

	        MapEnigne.MiniMap.map.setCenter(center, 16);

	        MapEnigne.MiniMap.map.addOverlay(marker);
	    }
    },

    /*
     * 显示大地图
     */
    loadFullMap : function()
    {
        RuanYu.Page.goTop();

        // IE 6 hack.

        if($('mapCity') != null)
            $('mapCity').hide();

        if($('mapRegion') != null)
            $('mapRegion').hide();

        if($('mapAddress') != null)
            $('mapAddress').hide();

        SilverWrapper.show();

        if(!$('full_map_background'))
        {
            var outString = '';

            var div ;

            var list = $('cityGroup').innerHTML.split(' ');

            outString += '<div id="full_map" class="google-map-full"></div>';

            outString += '<div class="google-map-full-citygroup">';

            if(RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.isEditing)
    		{
                outString += '<a href="javascript:RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.search();"><span class="gray-text">搜索地址</span></a> &nbsp;&nbsp;&nbsp;';
                outString += '<a href="javascript:RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.save();"><span class="gray-text">保存坐标</span></a>';
            }
            else
            {
                outString += '<a href="/map/"><span class="gray-text">更多地图</span></a>';
            }

            outString += '</div>';

            div = document.createElement("div");

	        div.id = 'full_map_background';

            div.innerHTML = outString;

            div.className = 'google-map-full-background';

            //div.hide();

            document.body.appendChild(div);

            // 55 + 40 + 40

            $("full_map").style.width = (document.documentElement.clientWidth - 120) + "px";
            $("full_map").style.height = (document.documentElement.clientHeight - 140) + "px";

            $("full_map_background").style.width = (document.documentElement.clientWidth - 80) + "px";
            $("full_map_background").style.height = (document.documentElement.clientHeight - 80) + "px";

            MapEnigne.loadFullMap();

            var center = new GLatLng(MapEnigne.mapY, MapEnigne.mapX);

    		var marker = new GMarker(center, {draggable: ((RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.isEditing) ? true : false)});

		    MapEnigne.map.setCenter(center, 16);

		    MapEnigne.map.addOverlay(marker);

    		if(RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.isEditing)
    		{
		        marker.openInfoWindowHtml('地址:' + $('mapSummary').innerHTML + '.<br /><br />拖动红色标志即可重新设置地图上对应的位置.');
    		}
    		else
    		{
    		    marker.openInfoWindowHtml('地址:' + $('mapSummary').innerHTML + '.');
    		}

		    GEvent.addListener(marker, "dragstart", function() { MapEnigne.map.closeInfoWindow();  });
		    GEvent.addListener(marker, "dragend", function() {
		        RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.setMapPosition(marker.getPoint().x , marker.getPoint().y);
		    });
        }

        new Effect.Appear($('full_map_background'), { duration: 0.6, from: 0.0, to: 1 });

        $(SilverWrapper.name).onclick = function()
        {
            $('full_map_background').hide();

            SilverWrapper.hide();

            if($('mapCity') != null)
                $('mapCity').show();
            if($('mapRegion') != null)
                $('mapRegion').show();
            if($('mapAddress') != null)
                $('mapAddress').show();
        }
    },

    /*
     * 设置地图位置
     */
    setMapPosition : function(x, y)
    {
        var url = '/services/RuanYu/Plugins/Build/Ajax.BuildWrapper.aspx';
        
        $('mapX').value = x;
        $('mapY').value = y;
        
        var outString = '<?xml version="1.0" encoding="utf-8"?>';

        outString += '<ajaxStorage>';
        outString += '<id><![CDATA[' + $F('buildId') + ']]></id>';
        outString += '<x><![CDATA[' + x + ']]></x>';
        outString += '<y><![CDATA[' + y + ']]></y>';
        outString += '</ajaxStorage>';

        var ajaxParameterValues = '';

        var options = {
            method : 'post',
            parameters : {
                action : 'set_map_position',
                ajaxParameters : ajaxParameterValues,
                xml :outString
            },
            
            onSuccess: RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.setMapPosition_callback
        }
        
        new Ajax.Request(url, options);
    },

    setMapPosition_callback : function(response)
    {
        var result = response.responseText.evalJSON().message;
        
        switch(Number(result.returnCode))
        {
            case 0:
                RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.loadMiniMap();
                break;

            case 1:
                alert(result.value);
                break;
        }
    },
    
    search : function()
    {
        var zoom = 15;

        var geocoder = new GClientGeocoder();
        
        var key = prompt('请输入地址信息', $F('buildCity') + ' ' + $('mapSummary').innerHTML);
        
        geocoder.getLatLng(key, function(point){
            if (!point)
            {
                alert('提示:未找到[' + key + ']相关信息.');
            }
            else
            {
                MapEnigne.map.setCenter(point, zoom);

                var marker = new GMarker(point, {draggable: ((RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.isEditing) ? true : false)});

                MapEnigne.map.addOverlay(marker);

                marker.openInfoWindowHtml(key);
                
                GEvent.addListener(marker, "dragstart", function() { MapEnigne.map.closeInfoWindow();  });
		        GEvent.addListener(marker, "dragend", function() {
		            RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.setMapPosition(marker.getPoint().x , marker.getPoint().y);
		        });
            }
        });
    },
    
    save : function()
    {
        var point = MapEnigne.map.getCenter()
        
        RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.setMapPosition(point.x, point.y);
    },
    
    googleMaps_callback : function()
    {    
        // 加载小地图.
        
        RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.find();
    },
    
    /*
     * 载入函数
     */
    load : function()
    {
        if(typeof(RuanYu.Web.memberToken.loginName) != 'undefined' && RuanYu.Web.memberToken.loginName == 'yoshow' )
        {
            RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.isEditing = true;
        }
        
        google.load('maps', '2.x', {
            'language' : 'zh-CN',
            'base_domain' : 'ditu.google.cn',
            'callback' : RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.googleMaps_callback
        });
    }
}

Event.observe(window,"load", RuanYu.WebSiteV1.Main.BuildGoogleMapLoader.load);
