﻿// JScript 文件
(function(){
if (typeof window.$5 == 'undefined') window.$5 = function(i){return document.getElementById(i);};
var gmap = window.gmap = window.$5.gmap = function(div, lo, la, pr){
    if (!GBrowserIsCompatible()) {
        alert("你的系统不支持google map。");
        return;
    }
    var map = gmap._map;
    var center = gmap.center = new GLatLng(lo,la);    
    if (map == null) {
        map = new GMap2(div);
        //map.enableScrollWheelZoom();
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(center, pr || 11); 
               
        gmap._map = map;
    } else {
        map.panTo(center);
    }
};
// 酒店
gmap.hotelMarker = function(center, i) {
     var prefix = "/images/mapicon/m-";
    if (typeof i == 'undefined') i = 1;
    var icon = new GIcon();
    icon.image = prefix + i + "[1].png";
    icon.shadow = prefix + "shadow.png";
    icon.iconSize = new GSize(22, 34);
    icon.shadowSize = new GSize(41, 34);
    icon.iconAnchor = new GPoint(11, 34);
    icon.infoWindowAnchor = new GPoint(5, 1);

    var marker = new GMarker(center, icon);
    GEvent.addListener(marker, "mouseover", function() {
        this.setImage(prefix + i + ".png");
    });
    GEvent.addListener(marker, "mouseout", function() {
        this.setImage(prefix + i + "[1].png");
    });
    return marker;
};
// 景点
gmap.scenicMarker = function(center, tag) {
    tag = tag || "";
    var icon = new GIcon();
    icon.image = "/images/mapicon/" + tag + "scenicGreen.png";
    icon.shadow = "/images/mapicon/" + tag + "scenicShadow.png";
    icon.iconSize = new GSize(31, 50);
    icon.shadowSize = new GSize(47, 50);
    icon.iconAnchor = new GPoint(11, 47);
    icon.infoWindowAnchor = new GPoint(5, 1);
    var marker = new GMarker(center, icon);
    GEvent.addListener(marker, "mouseover", function() {
        this.setImage("/images/mapicon/" + tag + "scenicBlue.png");
    });
    GEvent.addListener(marker, "mouseout", function() {
        this.setImage("/images/mapicon/" + tag + "scenicGreen.png");
    });
    return marker;
};
gmap.center = null;
gmap.initHotels = function(hotels){
    var map = gmap._map;
    map.clearOverlays();
    map.closeInfoWindow();
    circleLine && map.removeOverlay(circleLine);
    circleLine2 && map.removeOverlay(circleLine2);
    circleLine = circleLine2 = null;
    
    if (typeof hotels == 'undefined') hotels = gmap.hotelList;
    for(var i = 0, len = hotels.length; i < len; i++) {
        map.addOverlay(this.createMarker(hotels[i], i+1));
    }
};
gmap.initHotel = function(div, lo, la, pr, type) {
    var map = gmap._map;
    var center = gmap.center = new GLatLng(lo,la);    
    map = new GMap2(div);
    map.enableScrollWheelZoom();
    map.addControl(new GLargeMapControl());
    map.setCenter(center, pr || 12);
    gmap._map = map; 
    if (type == 1) map.addOverlay(this.scenicMarker(center));
    else map.addOverlay(this.hotelMarker(center, 0));
};
// 初始化景点
var _scenics = [];
gmap.initScenics = function(scenics) {
    _scenics = [];
    $.each(scenics, function() {
        _scenics.push(gmap.setScenic(this, true));
    });
};
// 设置景点地标
gmap.setScenic=function(scenic, notset){
    var center = new GLatLng(scenic.lng,scenic.lat); 
    if (!notset) this.center = center;
    var marker = this.scenicMarker(center, scenic.videoId>0?"":"p");
    GEvent.addListener(marker, "click", function(){
        $5.search.setHiddenOption('scenic', scenic.name);
        $5.search.withoutCheck(function(){marker.openInfoWindowHtml(gmap.getScenicHtml(scenic));});
    });
    gmap._map.addOverlay(marker);
    return marker;
};
gmap.clickScenic=function(i) {
    if (i < _scenics.length) GEvent.trigger(_scenics[i], 'click');
};

var lastSelectedLi = null;
gmap.createMarker = function(hotel, i) {
    var prefix = "/images/mapicon/" + (hotel.videoId>0? "" : "p") + "m-";
    var icon = new GIcon();
    icon.image = prefix + i + "[1].png";
    icon.shadow = prefix + "shadow.png";
    icon.iconSize = new GSize(22, 50);
    icon.shadowSize = new GSize(41, 50);
    icon.iconAnchor = new GPoint(11, 50);
    icon.infoWindowAnchor = new GPoint(5, 1);

    var point = new GLatLng(hotel.lo, hotel.la);
    var marker = new GMarker(point, icon);
    var el= $('#_hotel_' + hotel.id);
    var el2 = $('#_hotel_icon_' + i);
    el.mouseover(function(){
        el.addClass("selected");
        marker.setImage(prefix + i + ".png");
        //el2.attr('src', '/images/mapicon/m-' + i + '-s.png');
        
        var latlng = new GLatLng(hotel.lo,hotel.la);
        if (!gmap._map.getBounds().contains(latlng)) {
            gmap._map.panTo(latlng);
        }
    });
    el.mouseout(function(){
        el.removeClass("selected");
        marker.setImage(prefix + i + "[1].png");
        //el2.attr('src', '/images/mapicon/m-' + i + '-s[1].png');
    });
    $('#_hotel_name_' + hotel.id).click(function(){
        GEvent.trigger(marker, "click");
    });
    
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(gmap.createOpenWindow(hotel));
    });

    GEvent.addListener(marker, "mouseover", function() {
        this.setImage(prefix + i + ".png");
        if (lastSelectedLi != null) lastSelectedLi.removeClass("selected2");
        el.addClass("selected2");
        lastSelectedLi = el;
        //el2.attr('src', '/images/mapicon/m-' + i + '-s.png');
        
        $5('hotelListBar').scrollTop = el.get(0).offsetTop - 100;
    });
    GEvent.addListener(marker, "mouseout", function() {
        this.setImage(prefix + i + "[1].png");
        //el.removeClass("selected2");
        //el2.attr('src', '/images/mapicon/m-' + i + '-s[1].png');
    });
    GEvent.addListener(marker, "infowindowclose", function(){
        gmap._map.panTo(gmap.center);
    });
    return marker;
};
gmap.createOpenWindow = function(hotel) {
    if (isNaN(hotel.videoId) || hotel.videoId < 1) {
        return '<div style="overflow:auto;width:500px;height:300px;margin-right:10px;" class="fl">\
            <h1>\
                <a href="/hotel/' + hotel.id + '.aspx" target="_blank">' + hotel.name + '</a>\
                <img src="/images/star0' + hotel.star + '.gif" alt="' + hotel.star + '星"/>\
            </h1>\
            <div class="two">\
                <div style="width:220px;">\
                    <img src="/getHotelPic.ashx?hotelId=' + hotel.id + '&videoId=' + hotel.videoId + '&type=3" alt="' + hotel.name + '" width="210" height="143"/>\
                    <div class="fc"><a href="/hotel/' + hotel.id + '.aspx#Pictures" target="_blank">更多图片</a></div>\
                    <h3><a href="/hotel/' + hotel.id + '.aspx" target="_blank">详细信息</a></h3>\
                </div>\
                <div class="r" style="width:280px;">\
                    <b>地址:</b>' + hotel.address + '<br />\
                    <b>简介</b><br />' + (hotel.introduction.length>300 ? hotel.introduction.substring(0, 300) + '...' : hotel.introduction) + '\
                </div>\
            </div>\
        </div>';
    } else {
        return '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0"\
            width="640" height="400">\
            <param name="movie" value="/player.swf?vid=' + hotel.videoId + '&amp;pach=./" />\
            <param name="quality" value="high" />\
            <param name="allowFullScreen" value="true" />\
            <param name="BGCOLOR" value="#000000" />\
            <param name="type" value="application/x-shockwave-flash" />\
            <param name="allowfullscreen" value="true" />\
            <param name="wmode" value="opaque"/>\
            <embed src="/player.swf?vid=' + hotel.videoId + '&amp;pach=./" width="640" quality="high" height="400" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" allowfullscreen="true" bgcolor="#000000" wmode="opaque"></embed>\
        </object>';
    }
};
gmap.getScenicHtml = function(scenic) {
    if (scenic.videoId <= 0) {
        return '<div style="overflow:auto;width:500px;height:300px;margin-right:10px;" class="fl">\
            <h1>\
                <a href="/scenic/' + scenic.id + '.aspx" target="_blank">' + scenic.name + '</a>\
            </h1>\
            <div class="two">\
                <div style="width:220px;">\
                    <img src="/picture/scenic/' + scenic.id + '.jpg" alt="' + scenic.name + '" width="210" height="143"/>\
                    <div class="fc"><a href="/scenic/' + scenic.id + '.aspx#Pictures" target="_blank">更多图片</a></div>\
                    <h3><a href="/scenic/' + scenic.id + '.aspx" target="_blank">详细信息</a></h3>\
                </div>\
                <div class="r" style="width:280px;">\
                    <b>地址:</b>' + scenic.address + '<br />\
                    <b>简介</b><br />' + (scenic.introduction.length>300 ? scenic.introduction.substring(0, 300) + '...' : scenic.introduction) + '\
                </div>\
            </div>\
        </div>';
    } else {
        return '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0"\
            width="640" height="400">\
            <param name="movie" value="/player.swf?vid=' + scenic.videoId + '&amp;pach=./" />\
            <param name="quality" value="high" />\
            <param name="allowFullScreen" value="true" />\
            <param name="BGCOLOR" value="#000000" />\
            <param name="type" value="application/x-shockwave-flash" />\
            <param name="allowfullscreen" value="true" />\
            <embed src="/player.swf?vid=' + scenic.videoId + '&amp;pach=./" width="640" quality="high" height="400" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" allowfullscreen="true" bgcolor="#000000"></embed>\
        </object>';
    }
};
gmap.showHotelInfo = function(marker, hotel, i) {
    marker.setImage("images/mapicon/m-" + i + ".png");
    marker.openInfoWindowHtml(hotel.name);
};
gmap._map = null;
gmap.hotelList=[];

var circleLine,circleLine2,lastRadius,initedZoomEvent=false;
var oriRadius = 58;
var normalProj = null;
gmap.drawCircle = function(pos){
    if (null == normalProj) normalProj = G_NORMAL_MAP.getProjection();
    var center = new GLatLng(pos.lng, pos.lat);
    var map = gmap._map;
    var zoom = map.getZoom();
    var radius = gmap.getRadius(zoom);
    //var radius = lastRadius = (zoom - 11) > 0 ? oriRadius*Math.pow(2, (zoom - 11)) : oriRadius*Math.pow(2, 1/(11-zoom));
    if (!initedZoomEvent) {
        GEvent.addListener(this._map, "zoomend", this.redraw);
        initedZoomEvent = true;
    }
    this.center = center;
    map.panTo(center);
    var centerPt = normalProj.fromLatLngToPixel(center, zoom);
    
    // 画圆圈边框
    var circlePoints = [];
    with (Math) {
		for (var a = 0 ; a < 361 ; a+=10 ) {
			var aRad = a*(PI/180);
			y = centerPt.y + radius * sin(aRad)
			x = centerPt.x + radius * cos(aRad)
			var p = new GPoint(x,y);
			circlePoints.push(normalProj.fromPixelToLatLng(p, zoom));
		}
		
		circleLine && map.removeOverlay(circleLine);
		circleLine = new GPolyline(circlePoints,'#1D95C7',4,1);
		map.addOverlay(circleLine);
	}
	this.drawFill();
};
gmap.getRadius = function(zoom){
    var radius = oriRadius,offset = zoom - 11;
    if (offset > 0) radius *= Math.pow(2, offset);
    else if (offset < 0) radius /= Math.pow(2, -offset);
    return radius;
};
    // 填充圆圈
gmap.drawFill = function() {
    var map = this._map;
    var circlePoints = [];
    var center = this.center;
    var zoom = map.getZoom();
    var radius = gmap.getRadius(zoom);
    var centerPt = normalProj.fromLatLngToPixel(center, zoom);
    with(Math) {
        var thickness = min(255,radius);
        for (var n = 1 ; n < floor(2* radius / thickness)+1 ; n++ ) {
		    radiusB = radius - (thickness / 2) * n;

		    for (var a = 0 ; a < 361 ; a+=10 ) {
			    var aRad = a*(PI/180);
			    y = centerPt.y + radiusB * sin(aRad)
			    x = centerPt.x + radiusB * cos(aRad)
			    var p = new GPoint(x,y);
			    circlePoints.push(normalProj.fromPixelToLatLng(p, zoom));
		    }

		    circleLine2 && gmap._map.removeOverlay(circleLine2);
		    circleLine2 = new GPolyline(circlePoints,'#1D95C7',thickness,0.2);
		    map.addOverlay(circleLine2);
	    }
	}
};
gmap.redraw = function(){
    circleLine2 &&  gmap.drawFill();
};
})();
