var pins = [ "yellow","blue","rose","gray","green" ];
var icons = [];
var map = null;
var markers = [];
var markerClusterer = null;
var avgLat = 0;
var avgLon = 0;
var spanLat = 0;
var spanLon = 0;
var defaultZoom = 4;
var clusterSize = 100;
var style = 0;
var clusterZoom = 8;
var clusterSize = -1;
var autoZoomIn = false;
var styles = [[{
  url: '/images/search-panorama/pins_blue.png',
  height: 32,
  width: 39,
  opt_anchor: [16, 0],
  opt_textColor: '#FF00FF'
},
{
  url: '/images/search-panorama/pins_yellow.png',
  height: 32,
  width: 39,
  opt_anchor: [24, 0],
  opt_textColor: '#FF0000'
},
{
  url: '/images/search-panorama/pins_rose.png',
  height: 32,
  width: 39,
  opt_anchor: [32, 0]
}]];

function setupMap() {
	if(GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById('map_canvas'));
		map.setCenter(new GLatLng(39.91, 116.38), 2);
		map.setMapType(G_PHYSICAL_MAP);
		map.setUIToDefault();
		map.enableDoubleClickZoom();
		map.enableRotation();
		GEvent.addListener(map, "moveend", handleMoveEnd);
		loadVirtualTourMarkers(1000);
	}
}
function getVirtualTourIcon() {
	var i = Math.floor(pins.length*Math.random());
	if (!icons[i]) {
		var icon = new GIcon();
		icon.image = "/images/search-panorama/pin_" + pins[i] + ".png";
		icon.iconAnchor = new GPoint(16, 16);
		icon.infoWindowAnchor = new GPoint(16, 0);
		icon.iconsize = new GSize(32, 39);
		icons[i] = icon;
	}
	return icons[i];
}
function createMarker(point, pin, info) {
	var marker = new GMarker(point,{icon: pin } );
	marker.value = info.sid;
	GEvent.addListener(marker, "click", function() {
		var panoHtml = '<div id="map-info-box"><p>'+info.name+'</p>'+panoramaFlashObject(info.sid,'100%','240px')+'</div>';
		marker.openInfoWindowTabsHtml(
				[new GInfoWindowTab("General",info.tab_info),new GInfoWindowTab("Panorama",panoHtml)]
				,{maxContent:panoramaFlashObject(info.sid,'100%','100%'),selectedTab: 1}
			); 
		});
	return marker;
}   
function panoramaFlashObject(pid,w,h){
	return '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="'+w+'" height="'+h+'" id="viewer360" align="middle"><param name="allowScriptAccess" value="sameDomain" /><param name="allowFullScreen" value="true" /><param name="movie" value="/swf/viewer.v1.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#333" /><param name="flashVars" value="xml=/map-viewer/'+pid+'.xml" /><embed src="/swf/viewer.v1.swf" quality="high" bgcolor="#333" width="'+w+'" height="'+h+'" flashVars="xml=/map-viewer/'+pid+'.xml" name="viewer360" align="middle" wmode="window" allowScriptAccess="sameDomain" allowFullScreen="true" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer_fr" /></object>';
}
function getZoomLevel(spanValue){
	var valeur = 2;
	if(spanValue < 0.001) return 15;
	for(i=0;i < 20;i++){
		var value = 180 / Math.pow(2, i + 1); 
		if(spanValue > value){
			valeur = i;
			break;
		}
	}
	if(valeur > 15) valeur = 15;
	else if(valeur < 2) valeur = 2;
	return valeur;
}
function loadVirtualTourMarkers(n){
	//map.clearOverlays();
    markers = [];
	var url_data = "/ajax/jsonmap.php?q=" + g_q + "&pq=" + g_pq;
	GDownloadUrl(url_data, function(data, responseCode) {
    	var json = eval('(' + data + ')');
    	var minLat = 999;
		var maxLat = -999;
		var minLon = 999;
		var maxLon = -999;		
		for (var i = 0; i < json.panoramas.length && i < n; i++) {
			if(json.panoramas[i].lat < minLat) minLat = parseFloat(json.panoramas[i].lat);
			if(json.panoramas[i].lat > maxLat) maxLat = parseFloat(json.panoramas[i].lat);
			if(json.panoramas[i].lon < minLon) minLon = parseFloat(json.panoramas[i].lon);
			if(json.panoramas[i].lon > maxLon) maxLon = parseFloat(json.panoramas[i].lon);
			var latlng = new GLatLng(json.panoramas[i].lat, json.panoramas[i].lon);
	    	var marker = createMarker(latlng, getVirtualTourIcon(),json.panoramas[i]);
	     	markers.push(marker);
		}
		if(n > 0 && minLat < 999){
			spanLat = Math.abs(maxLat - minLat);
			avgLat = (minLat + maxLat) / 2;
			avgLon = (minLon + maxLon) / 2;		
			var zoomLevel = getZoomLevel(spanLat);
			map.setCenter(new GLatLng(avgLat,avgLon),zoomLevel);	
		}
		
		// reload map
		refreshMap();
		//map.maximize();
	});
}
function handlePanoMaxClick(){
	
}
function moveMapToPicture(pid,lat,lon){
	var latlng = new GLatLng(lat, lon);
	autoZoomIn = true;
	map.panTo(latlng);
	//markerClusterer.clearMarkers();
}
function handleAutoZoom(){
	map.setZoom(11);	
}
function handleMoveEnd(){
	if(map.getZoom () < 11 && autoZoomIn){
		setTimeout ("handleAutoZoom()", 1000);
	}
	autoZoomIn = false;
}
function refreshMap() {
	if (markerClusterer != null) {
		markerClusterer.clearMarkers();
	}
	clusterZoom = clusterZoom == -1 ? null : clusterZoom;
	clusterSize = clusterSize == -1 ? null : clusterSize;
	markerClusterer = new MarkerClusterer(map, markers, {maxZoom: clusterZoom, gridSize: clusterSize, styles: null });
}
