﻿///<class>SEO酒店地图类</class>
SeoHotelMap = function() {
  var seoMap;

  ///<summary>加载地图</summary>
  ///<params>contain:加载地图容器(div),address?:地名,hasTools?:是否添加控制工具</params>
  ///<return>Map</return>
  this.load = function(contain,address,centerPoint,hasTools) {      	  
	  if (!address)
	      address = "北京";		  
	  if (GBrowserIsCompatible()) 
      {
        //创建缓存
        cache = new CapitalCitiesCache();
        
        //初始化搜索
        geocoder = new GClientGeocoder();
        geocoder.setCache(cache);
        
        //初始化地图
        seoMap = new GMap2(document.getElementById(contain));
        //添加控制工具
        if (hasTools)
        {
          seoMap.addControl(new GSmallMapControl());  
          seoMap.addControl(new GScaleControl());
        }
		point = null;
        if (address){
          //查找位置并定位
          geocoder.getLatLng(address,function(point){
             if (centerPoint){
               seoMap.setCenter(centerPoint, 11);
             }else{
			   seoMap.setCenter(point, 11);
             }			              
             //初始化标注管理器
             markerManager = new GMarkerManager(seoMap);                          
          });
        }        		
		
        //启用使用鼠标滚轮缩放
        seoMap.enableScrollWheelZoom();                        
      }
  }

  ///<summary>卸载地图</summary>
  ///<params>none</params>
  ///<return>Map</return>
  this.unload = function(){
      if (seoMap)
	      seoMap.unload();
  }
  
  ///<summary>设置中心点</summary>
  ///<params>latlng？GLatLng实例</params>
  ///<return>none</return>
  this.setCenter = function(latlng){
	  seoMap.setCenter(latlng)
  }
  
  ///<summary>移动到指定位置</summary>
  ///<params>latlng？GLatLng实例</params>
  ///<return>none</return>
  this.moveTo = function(latlng){
	  seoMap.panTo(latlng);
	  //启用使用鼠标滚轮缩放
      seoMap.enableScrollWheelZoom();
  }
  ///<summary>添加酒店标注</summary>
  ///<params>hotelInfo?酒店Json信息；icon?该酒店图标</params>
  ///<return>none</return>
  this.addHotelMarker = function(hotelInfo,icon) {
	  if(hotelInfo && hotelInfo.latitude!=0 && hotelInfo.longitude!=0) {		  	  		  		  
		  var marker = this.createMarker(hotelInfo,icon);                            
		  seoMap.addOverlay(marker);              
      }
  }
  
  ///<summary>清除酒店标注</summary>
  ///<params>None</params>
  ///<return>none</return>
  this.clearHotelMarker = function(){
	  seoMap.clearOverlays();
  }
  
  ///<summary>添加酒店标签</summary>
  ///<params>lat?经度；lng?纬度；hotelName?酒店名;imgUrl?标签图标</params>
  ///<return>none</return>
  this.addHotelLabelMarker = function(id,lat,lng,hotelName,imgUrlIcon){
	  if (lat && lat != 0 && lng && lng != 0){
		var latlng = new GLatLng(lat,lng);		
		var marker = this.createLabeledMarker(latlng,true,imgUrlIcon,true,{id:id,title:hotelName,clickable:false,draggable:false,labelText:hotelName,labelOffset:new Size(5, -23)});
		seoMap.setCenter(latlng,11);			
		seoMap.addOverlay(marker);				
	  }
  }


  ///<summary>创建酒店标注</summary>
  ///<params>hotelInfo?酒店Json信息；icon?该酒店图标</params>
  ///<return>返回GMarker</return>
  this.createMarker = function(hotelInfo,icon){
	  var point = new GLatLng(hotelInfo.latitude,hotelInfo.longitude);	
	  var markerOptions = {icon:icon,title:hotelInfo.hotelName};
      var gMarker = new GMarker(point,markerOptions);
      return gMarker;
  }
  
  
  this.createLabeledMarker = function(point,isSetIcon,imageUrl,isShadow,opts){
      var icon = null;
      
      if (isSetIcon){
        icon = this.createIcon(imageUrl,isShadow);
      }
      
      markerOptions = opts;
      if (icon){
        if (markerOptions){
          markerOptions.icon = icon;
        }else{
          markerOptions = {icon:icon};
        }
      }
      
      return (new LabeledMarker(point, markerOptions));      
  }
  ///<summary>创建图标</summary>
  ///<params>imgUrl?图标文件URL；isShadow?是否显示图标阴影</params>
  ///<return>返回GIcon</return>
  this.createIcon = function(imageUrl,isShadow){
	  baseIcon = new GIcon();
       if (isShadow){
          baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
       }
       baseIcon.iconSize = new GSize(15, 15);
       baseIcon.shadowSize = new GSize(22, 20);
       baseIcon.iconAnchor = new GPoint(15, 25);
       baseIcon.infoWindowAnchor = new GPoint(9, 2);
       baseIcon.infoShadowAnchor = new GPoint(18, 25);
            
       var icon = new GIcon(baseIcon);
       icon.image = (imageUrl.url ? imageUrl.url : imageUrl);
       if (imageUrl.width && imageUrl.height) {
         icon.iconSize = new GSize(imageUrl.width, imageUrl.height);
       }
      
       return icon;
  }

}

///<class>Constructor for an extended Marker class</class>
LabeledMarker = function(latlng, options){   
    this.latlng = latlng.isInherit ? latlng.toGLatLng() : latlng; 
    this.id = options.id || "divLabeled";  
    this.labelText = options.labelText || "";
    this.labelWidth = options.labelWidth || (this.labelText.replace(/[^\x00-\xff]/g,"xx").length / 2);
    this.labelClass = (options.labelClass ? options.labelClass : new ControlStyle());  
    this.labelOffset = (options.labelOffset.isInherit ? options.labelOffset.toGSize() : options.labelOffset) || new GSize(0, 0); 
    
    GMarker.apply(this, arguments);   
}   
