/**
 * @author gio
 */



// dimensione di default
//var tableWidth = 500;
//var tableHeight = 292;
var tableWidth = 700;
var tableHeight = 394;
// dimensione zoom
var tableWidthMax = 700;
var tableHeightMax = 394;

var swfWidth = "100%";
var swfHeight = "100%";
var playerScale = "Showall";
playerScale = "Exactfit";

var g_playerIsOpen = false;
var g_map;
var g_marker;
var g_isIE = false;

var g_playerReady = false;
var g_movePending = false;
var g_move = null;
//var g_playerName = "../gmaps6_24_step6.swf?damp=0.3&pauseReq=1&gMaps=1&fileProp=player.properties";
//var g_playerName = "../player700_24_step6.swf?notInMapPath=http://giovanni.rovatti.googlepages.com/not_in_map.JPG&debugJS=0&buttons=1&photo=1&damp=0.3&pauseReq=1&gMaps=1&fileProp=player.properties_new";
var g_playerName = "player700_24_step6.swf?debugJS=0&buttons=1&photo=0&damp=0.3&pauseReq=1&gMaps=1&fileProp=player.properties_new";
//var playerName = "../gmaps6_24_step6.swf?damp=0.1&pauseReq=1&gMaps=1&fileProp=http://www.seety.co.uk/london/player.properties";
//var playerName = "../gmaps6_24_step6.swf?damp=0.1&pauseReq=1&gMaps=1&fileProp=player.properties_new";
//var playerName = "../gmaps6_24_step6.swf?pauseReq=0&gMaps=1&fileProp=player.properties_local";

//var g_playerName = "http://seety.co.uk/london/player/gmaps6_24_step6.swf?damp=0.3&pauseReq=0&gMaps=1&fileProp=http://www.seety.co.uk/london/player.properties_new";


//var g_playerName = "../gmaps6_24_step6.swf?debugJS=0&damp=0.3&pauseReq=1&gMaps=1&fileProp=player.properties_new";
//var g_playerName = "../gmaps6_24_step6.swf?debugJS=1&damp=0.3&pauseReq=0&gMaps=1&fileProp=../player.properties";



var playerCode = '\
<div id="seetyPlayerContainer">\
				<table id="seetyPlayerTable" style="background-color:#666666;">\
					<tr>\
						<td id ="playerCell" width="'+tableWidth+'px" height="'+tableHeight+'px">\
							<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="'+swfWidth+'" height="'+swfHeight+'" id="gmaps" align="middle">\
								<param name="allowScriptAccess" value="sameDomain" />\
								<param name="wmode" value="transparent" />\
								<param name="scale" value="'+playerScale+'" />\
								<param name="movie" value="'+g_playerName+'" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />\
								<embed id="embed" wmode="transparent" src="'+g_playerName+'"  quality="high" bgcolor="#0000ff" width="'+swfWidth+'" height="'+swfHeight+'" name="gmaps" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" scale="'+playerScale+'"/>\
							</object>\
						</td>\
					</tr>\
				</table>\
			</div>\
			';

var playerCode1 = '\
<div id="seetyPlayerContainer">\
				<table id="seetyPlayerTable">\
					<tr>\
						<td>eccomi</td>\
					</tr>\
					<tr>\
						<td>sono un altro dato</td>\
					</tr>\
				</table>\
			</div>\
			';

			
			// serve per prendere il nome dell'oggetto swf in ie e firefox
/*			
function thisMovie(movieName)
 {
	if (navigator.appName.indexOf("Microsoft") != -1) {
		return window[movieName]
	}
	else {
		return document[movieName]
	}
}
*/

function asPhoto(a,b,c,d,e,f)
{
	alert("photo"+a+","+b+","+c+","+d+","+e+","+f);
}

function thisMovie(movieName)
 {
	if (g_isIE)
	{
		return window[movieName]
	}
	else 
	{
		return document[movieName]
	}
}

function getFocus()
{
	//var movie = thisMovie("gmaps");
	//movie.focus();
	document.getElementById("gmaps").focus();
}

function asMaximize()
{
	maximizePano();
}

function asClose()
{
	playerClose();
}

function maximizePano()
{
	var elem = document.getElementById("playerCell");
	var size = g_map.getSize();
	if (parseInt(elem.width)==parseInt(tableWidth))
	{
		// zoom
		var r = elem.width/elem.height;
		//elem.width = size.width;//tableWidthMax;
		elem.height = size.height;//tableHeightMax;
		elem.width = elem.height * r;
		//elem.width = tableWidthMax;
		//elem.height = tableHeightMax;
		var pos = playerCalcPos(g_map,elem.width);
		playerSetPos(pos[0],pos[1]);
		
		var point = g_marker.getLatLng();
		
		markerCheck(g_map,point);
	}
	else
	{
		elem.width = tableWidth;
		elem.height = tableHeight;
		
		var pos = playerCalcPos(g_map,elem.width);
		playerSetPos(pos[0],pos[1]);	
	}
}

// chiamato quando il pano arriva in un nuovo posto, prima di connettere la texture
function newPos()
{
	//alert("newposition");
	g_subject.Notify();
}

function createSwfDiv(_point,_map)
{
	// prendo il div seetyPlayer che dev'essere gia' nella pagina html
	var elem = document.getElementById("seetyPlayer");
	elem.innerHTML = playerCode;
	
	elem.style.position = "absolute";
	
	if (_map != undefined)
	{
		var pos = playerCalcPos(_map,tableWidth);
		playerSetPos(pos[0],pos[1]);	// cosi' lo metto dietro alla mappa che su IE si nasconde con lo zindex
		
		playerHide();
	}
	
	/*
	
	var elem1 = document.getElementById("seetyPlayerContainer");
	elem1.style.visibility = "hidden";
	
	// z-index:-1 nel div del player serve per tenerlo dietro alla mappa
	elem1.style.zIndex = -1;
	*/
	
	//var elem2 = document.getElementById("seetyPlayerTable");
	//elem2.style.backgroundColor = 0x00BFFF;
}

function playerGetPos()
{
	var elem = document.getElementById("seetyPlayer");
	var t = parseInt(elem.style.top);
	var l = parseInt(elem.style.left);
	var elem1 = document.getElementById("playerCell");
	var b = t + parseInt(elem1.height);
	var r = l + parseInt(elem1.width);
	
	return [t,l,b,r];
}

function playerCalcPos(_map,_width)
{
	var container = _map.getContainer();
	var left = 0;
	var top = 0;
	
	left = container.offsetLeft;
	top = container.offsetTop;
	
	
	var size = _map.getSize();
	
	//var l = (size.width-tableWidth)/2;
	var l = (size.width-_width)/2;
	var t = top;
	return [l,t];
}

function markerCheck(_map,_point)
{
	// cerco il pixel sul bordo del player in basso
	var rect = playerGetPos(); // rettangolo del player

	var pix = _map.fromLatLngToDivPixel(_point); // ho cliccato su questo pixel
	
	// calcolo il centro della mappa in pixel	
	var size = _map.getSize();
	var container = _map.getContainer();
	var centery = container.offsetTop + size.height/2;
	var centerx = container.offsetLeft + size.width/2;
	
	// distanza tra il bordo inferiore del player e il bordo inferiore della mappa
	var distancey = container.offsetTop + size.height - rect[2]; // bottom
	var markerx,markery;	// posizione voluta del marker
	if (distancey>40)
	{
		markerx = centerx;
		markery = container.offsetTop + size.height - distancey/2; 
	}
	else
	{
		//a destra
		markerx = rect[3] + (container.offsetLeft + size.width - rect[3])/2; 
		markery = centery;
	}
	
	// spostamento del marker
	var sx = pix.x - markerx;
	var sy = pix.y - markery;
		
	// spostamento del centro della mappa
	var newPix = new GPoint();	
	newPix.x = sx + centerx;
	newPix.y = sy + centery;
	
	var point = _map.fromDivPixelToLatLng(newPix);
	_map.panTo(point);
}

function playerOpen(_point,_rot,_v,_map,_simple)
{
	if (_simple == undefined)
	{
		_simple = false;
	}
	
	if (_simple)
	{
		markerCheck(_map,_point);
		playerUnhide();
		asGoLatLong(_point.lat(),_point.lng(),_rot,_v);
		g_playerIsOpen = true;
		getFocus();
	}
	else
	{
		markerCheck(_map,_point);
		
		playerUnhide();
		
		asGoLatLong(_point.lat(),_point.lng(),_rot,_v);
		g_playerIsOpen = true;
		getFocus();
	}
}

function playerHide()
{
	//var elem = document.getElementById("seetyPlayerContainer");
	var elem = document.getElementById("seetyPlayer");
	if (g_isIE)
	{
		elem.style.zIndex = -1;	
	}
	else
	{
		elem.style.visibility = "hidden";
		//elem.style.zIndex = 1;
	}
}

function playerUnhide()
{
	var elem = document.getElementById("seetyPlayer");
	if (g_isIE)
	{
		elem.style.zIndex = 3;	
	}
	else
	{
		elem.style.visibility = "visible";
		elem.style.zIndex = 3;
	}
}

function asGoLatLong(param1,param2,param3,param4)
{
	if (g_playerReady)
	{
		var movie = thisMovie("gmaps");
		movie.goLatLong(param1,param2,param3,param4);
	}
	else
	{
		g_movePending = true;
		g_move = new Array(param1,param2,param3,param4);
	}
}

function playerClose()
{
	thisMovie("gmaps").hidePano();
	playerHide();
	g_playerIsOpen = false;
}


function mapMoveTo(_lat,_lng)
{
	//alert("moveto "+_lat+","+_lng);
	if (!g_playerIsOpen)
	{
		// non voglio spostare il cursore quando il panorama e' chiuso
		//alert("mapmove but i cannot");
		return;
	}

	if (GBrowserIsCompatible())
	{
		var lat = parseFloat(_lat);
		var lng = parseFloat(_lng);
		var point = new GLatLng(lat,lng);
		var oldPoint = g_marker.getLatLng(); 
		var centerMap = g_map.getCenter();
		
		var newCenter = new GLatLng(-oldPoint.lat()+point.lat()+centerMap.lat(),-oldPoint.lng()+point.lng()+centerMap.lng());
		g_map.setCenter(newCenter);
		g_marker.setLatLng(point);
	}
}



function playerSetPos(x,y)
{
	var elem = document.getElementById("seetyPlayer");
	elem.style.top = y.toString()+"px";
	elem.style.left = x.toString()+"px";
}

// chiamato da flash quando ruoto il panorama
function updateBearing(absDir)
{
	// http://giovanni.rovatti.googlepages.com/pic001.png
	var adjDir = absDir;
	var index = Math.round(adjDir/45);	// 360/8
	// oddio cosa mi tocca fare!!!!!!!!!!!
	if (index==8)
	{
		index = 0;
	}
	
	if (index != lastIconIndex)
	{
		if (index>=10)
		{
			g_marker.setImage("http://giovanni.rovatti.googlepages.com/pic"+index+".png");
		}
		else
		{
			g_marker.setImage("http://www.seety.co.uk/cursore/pic0"+index+".png");
		}
		lastIconIndex = index;
	}
}



function mapInit(lat,lng,u,v,_open)
{
	if (navigator.appName.indexOf("Microsoft") != -1)
	{
		g_isIE = true;	
	}
	else
	{
		g_isIE = false;
	}

	// creo un subject
	g_subject = new Subject();	

	if (GBrowserIsCompatible()) 
	{
		// metto anche lo zindex del map a 2
		var mapElem = document.getElementById("map");
		mapElem.style.zIndex = 2;
		//mapElem.style.position = "absolute";
		
		var map = new GMap2(mapElem); 
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		var point = new GLatLng(lat,lng);
		map.setCenter(point, 16); 
		createSwfDiv(point,map);
		
		map.enableScrollWheelZoom();
		map.enableGoogleBar();
		
		var icon = new GIcon();
		icon.image = "http://www.seety.co.uk/cursore/pic00.png";
		icon.iconSize = new GSize(20, 20);
		//icon.shadowSize = new GSize(37, 34);
		icon.iconAnchor = new GPoint(10, 10);
		icon.infoWindowAnchor = new GPoint(10,0);
		icon.infoShadowAnchor = new GPoint(19,22);
		//icon.shadow = "http://www.google.com/mapfiles/markerA.png";
		
		lastIconIndex = 0; 
		
				
		var marker = new GMarker(point,icon);
		g_marker = marker;
		g_map = map;
		
		map.addOverlay(g_marker);
		var info = "<div style='font-family:verdana;font-size:9pt'><img src='images/logo_small.png' style='margin-left:15pt'/><p>To view London street by street, just follow these steps:</p><ul style='font-family:verdana;font-size:9pt;list-style-image: url(images/arrow.gif);'><li>Click on the map, any point you like</li> <li>A picture will come up, click and drag to look around</li> <li>Start your virtual walk. Feel free!</li> <li>How? Use the compass or the keyboard's arrow keys</li></ul><center>enjoy...</center></div>";
		
		if (_open == undefined)
		{
			_open = false;		
		}
		//_open = false;
		if (_open)
		{
			playerOpen(new GLatLng(lat,lng),u,v,map,true);
		}
		else
		{
 			//map.openInfoWindow(point,info,{onCloseFn:function(){playerOpen(point,-1,-1,g_map);}});
			map.openInfoWindow(point,info);
		}
		
		// aggiungo il listener per il click sulla mappa					
		GEvent.addListener(map, "click", function(_marker, point) 
			{
				map.closeInfoWindow();
				if (_marker)
				{
					// ho colpito un marker
					if (_marker.getLatLng)
					{
						point = _marker.getLatLng();
					}
					if (_marker == marker)
					{
						// se colpisco il marker dell'omino apro l'infowindow
						
						if (g_playerIsOpen)
						{
							playerClose();
						}
						else
						{
							playerOpen(point,-1,-1,map);	// metto -1 cosi' ignora la direzione
						}
					}
					else
					{
						//alert("ho colpito un altro marker");
					}
				}
				else 
				{
					// non ho colpito nessun marker
					g_marker.setLatLng(point);	// sposto il marker
					//playerOpen(point,-1,map);
					//g_timeout = setTimeout("playerCloseTime()",100);
					//playerHide();
					
					if (g_playerIsOpen)
					{
						// attenzione chiudere il player se e' gia' chiuso fa casini 
						playerClose();
					}
					else
					{
						playerOpen(point,-1,-1,map);	// metto -1 cosi' ignora la direzione
					}
					
				}
			});
		GEvent.addListener(map, "zoomend", function(_z0,_z1)
			{
				if (g_playerIsOpen)
				{
					var point = g_marker.getLatLng();
					markerCheck(map,point);
				}
			}
		)
	}
	else
	{
		alert("browser non compatibile o google non raggiungibile");
		createSwfDiv();
		playerUnhide();
		g_playerIsOpen = true;
	}
}



// creo un oggetto osservatore 
function initObserver()
{
	
}



function playerGrab()
{
	// grabba la mappa sopra al player
	// http://www.seety.co.uk/ws/grab.action?minLat=123.456&minLon=1.234&maxLat=123.446&maxLon=1.244&zoom=3
	var rect = playerGetPos();
	var p0 = new GPoint(rect[1],rect[0]);
	var p1 = new GPoint(rect[3],rect[2]);
	 
	var minLatLng = g_map.fromDivPixelToLatLng(p0); 
	var maxLatLng = g_map.fromDivPixelToLatLng(p1);
	var zoom = g_map.getZoom();
	
	var s = "http://www.seety.co.uk/ws/grab.action?minLat="+minLatLng.lat()+"&minLon="+minLatLng.lng()+"&maxLat="+maxLatLng.lat()+"&maxLon="+maxLatLng.lng()+"&zoom="+zoom;
	//alert(s);
	window.open(s);
	
}

function flashReady()
{
	//alert("flashReady");
	g_playerReady = true;
	if (g_movePending)
	{
		g_movePending = false;
		asGoLatLong(g_move[0],g_move[1],g_move[2],g_move[3]);
		
	}
}

function formatCoords()
{	
	var rawCoords = thisMovie("gmaps").getLatLongRot();
	var arrayCoords = rawCoords.split(",");
	var lat = new Number(arrayCoords[0]).toFixed(5);
	var lon = new Number(arrayCoords[1]).toFixed(5);
	var u = new Number(arrayCoords[2]).toFixed(3);
	var v = new Number(arrayCoords[3]).toFixed(3);
	var fmtCoords = "lat=" + lat + "&lon=" + lon + "&u=" + u + "&v=" + v; 
	return fmtCoords;
}
		 
function coordsNotInMap()
{
	var info = "<div style='font-family:verdana;font-size:9pt'><img src='images/logo_small.png' style='margin-left:15pt'/><p>Sorry, this position is not mapped yet</p></div>";
	
	if (GBrowserIsCompatible() && g_map)
	{
		playerClose();
		var point = g_marker.getLatLng();
		g_map.openInfoWindow(point,info);
	}
}

