/*
 * Zonneradar Google Maps functions
 *
 * Copyright (c) Lab1111 Amsterdam for Wieckse Zonneradar
 * By Remko Posthuma
 *
 * http://lab1111.com
*/

var AnimOverlayItems			= 15;			//number off history records used for animation
var AnimCurrentFrame			= 0;
var AnimRefreshRate				= 1500;
var AnimTimer
var AnimArray					= new Array();
var AnimRunning					= false;
var AnimInit					= false;

var overlay;
var orgPos;

var mapMoveX					= 0.00623974609375; 
var mapMoveY					= 0.0133553907328567334;

var overlayAnim					= new Array();
var AnimArray					= new Array();
var markersArray				= new Array();
var aberration;
var minRes;
var maxRes;
var baseIcon;
var Icon_Normal;
var Icon_Over;
var Icon_Cluster_Normal;
var Icon_Cluster_Over;
var center;
var animInit					= false;
var DefaultZoom					= 16;
var DefaultIntersectPadding 	= 9;
var cluster;
var newMarkers					= true;
if (! newMarkers)
{
	var markerPath					= "markers_org";
	var icon = new GIcon();
	icon.image = "images/"+markerPath+"marker_normal.png";
	icon.iconSize = new GSize(14, 14);
	icon.iconAnchor = new GPoint(0, 7);
	icon.infoWindowAnchor = new GPoint(0, 1);
	
	var iconLifter = new GIcon();
	iconLifter.image = "images/"+markerPath+"/marker_lifter_normal.png";
	iconLifter.iconSize = new GSize(14, 14);
	iconLifter.iconAnchor = new GPoint(0, 7);
	iconLifter.infoWindowAnchor = new GPoint(0, 1);
	
	var iconCluster = new GIcon();
	iconCluster.image = "images/"+markerPath+"/marker_cluster_normal.png";
	iconCluster.iconSize = new GSize(16, 16);
	iconCluster.iconAnchor = new GPoint(2, 7);
	iconCluster.infoWindowAnchor = new GPoint(0, 1);
} else {
	var markerPath					= "markers_new";
	var icon = new GIcon();
	icon.image = "images/"+markerPath+"/marker_normal.png";
	icon.iconSize = new GSize(21, 23);
	icon.iconAnchor = new GPoint(0, 15);
	icon.infoWindowAnchor = new GPoint(0, 1);
	
	var iconLifter = new GIcon();
	iconLifter.image = "images/"+markerPath+"/marker_normal.png";
	iconLifter.iconSize = new GSize(21, 23);
	iconLifter.iconAnchor = new GPoint(0, 15);
	iconLifter.infoWindowAnchor = new GPoint(0, 1);
	
	var iconCluster = new GIcon();
	iconCluster.image = "images/"+markerPath+"/marker_cluster_normal.png";
	iconCluster.iconSize = new GSize(22, 32);
	iconCluster.iconAnchor = new GPoint(11, 8);
	iconCluster.infoWindowAnchor = new GPoint(0, 1);

}

function initializeMaps() {
	if (GBrowserIsCompatible()) {
		log("Debug mode ON");
		map 						= new GMap2(document.getElementById("zonneradar"));
//		center						= new GLatLng(52.3668773008839, 4.920297861099243); //LAB1111
		center						= new GLatLng(52.38797159029791, 6.136153936386108);
		centerWide 					= new GLatLng(52.25470880113083, 7.6904296875);		//WIDE VERSION 

		map.setMapType(G_SATELLITE_MAP);
		
//		GDraggableObject.setDraggableCursor("move");
		
		map.setCenter(centerWide, 7);
		GEvent.addListener(map, "zoomend", 		zoomDone);
		GEvent.addListener(map, "moveend", 		moveDone);
		GEvent.addListener(map, "move", 		moveIng);
//		GEvent.addListener(map, "click", 		clickMap);
//		GEvent.addListener(map,"loaded",		googleLoaded);
		GEvent.addListener(map,"tilesloaded",	tilesLoaded);
		GEvent.addListener(map,"extinfowindowclose",	infoWindowClose);
		GEvent.addListener(map,"extinfowindowopen",	infoWindowOpen);
		
		var mapStretch	= -0.01; 

//OLD VERSION?
		var pointSW = new GLatLng(50.63857480574576, 2.4151446533203125);
		var pointNE = new GLatLng(54.009450313676516, 7.3897023095703125);

//OLD VERSION?
		var pointWideSW = new GLatLng(50.63857480574576, 2.4251446533203125);
		var pointWideNE = new GLatLng(53.994450313676516-mapStretch, 13.3323-mapStretch);



		overlayBoundsWide	= new GLatLngBounds(pointWideSW,pointWideNE);
		
		aberration 			= 0.1; 	// this value is a good choice for germany (?!)
		minRes 				= 7; 		// tested for germany
		maxRes 				= 19; 		// may be a lower value

		// Get the list of map types
		var mt = map.getMapTypes();


		overlayWide		= EInsert.groundOverlay("images/spacer.png",overlayBoundsWide);
		map.addOverlay(overlayWide);

		overlayNight		= EInsert.groundOverlay("images/zonneradar_night.png",overlayBoundsWide);
		map.addOverlay(overlayNight);
		overlayNight.hide();
//		alert(overlayNight);
		
		overlaySea		= EInsert.groundOverlay("images/zonneradar_sea.png",overlayBoundsWide);
		map.addOverlay(overlaySea);

		orgPos			= overlayWide.point;

		map.disableDragging();
		map.enableDoubleClickZoom();
		map.enableScrollWheelZoom();
		log("Overlay pos:"+orgPos);
		log(map.getBounds())
	}
}

function createMarkers(result,func)
{
	log('TERRACES LOADED CREATE MARKERS');
	log(result);
	$.each(result.Value, function(i,Terrace)
	{
		Terraces[i]						= new Object();
		Terraces[i].Id					= i;
		Terraces[i].TerraceId			= Terrace.TerraceId;
		Terraces[i].Name				= Terrace.Name;
		Terraces[i].City				= Terrace.City;
		Terraces[i].Latitude			= Terrace.Latitude;
		Terraces[i].Longitude			= Terrace.Longitude;
		Terraces[i].CalculatedSolar		= Terrace.CalculatedSolar;
		Terraces[i].LastUpdate			= Terrace.LastUpdate;
		Terraces[i].Type				= Terrace.Type;
		Terraces[i].WeatherStationId	= Terrace.WeatherStationId;
		Terraces[i].WieckseId			= Terrace.WieckseId;
		Terraces[i].ZoomLevel			= Terrace.ZoomLevel;
		
//		point			= new GLatLng(Terraces[i].Latitude,Terraces[i].Longitude,Terraces[i].Id	);
//		map.addOverlay(new GMarker(point));
		
		createMarker(Terraces[i],i);
	});	
	//var cluster=new ClusterMarker(map, { markers:markersArray } );
	//cluster.fitMapToMarkers();
//	showMarkers(true);
doNext();
//alert(func);
//	eval(func());
}

function createMarker(obj,item)
{
	tLat		= obj.Latitude;
	tLon		= obj.Longitude;
	point		= new GLatLng(tLat,tLon,obj.Id);

	if (obj.WeatherStationId != null)
	{
		markerOptions 	= { icon:icon, title:obj.Name+" "+obj.City+", Zonwaarde:" + obj.CalculatedSolar + ", Laatste update: " + dateToTime(obj.LastUpdate)  };
		obj.Type	= "ZONNERADAR";
	} else {
		markerOptions 	= { icon:iconLifter, title:obj.Name+" "+obj.City+", Zonwaarde:" + obj.CalculatedSolar + ", Laatste update: " + dateToTime(obj.LastUpdate)  };
	}
	marker 			= new GMarker(point,markerOptions);
	marker.id 		= item;
	marker.name 	= obj.Name;
	marker.lat 		= obj.Latitude;;
	marker.lon 		= obj.Longitude;
	marker.zoom 	= obj.ZoomLevel;
	marker.guid 	= obj.TerraceId;
	marker.city 	= obj.City;
	marker.type		= obj.Type;
	
	
	GEvent.addListener(marker, "click", 	function()  { SWFAddress.setValue('/terras/'+this.guid); return false;});
//	GEvent.addListener(marker, "click", 	function()  { zoomTerrace(this.lat,this.lon,this.zoom+""); return false;});
	GEvent.addListener(marker, "mouseover",	function()  { markerOver(this,this.type)});
	GEvent.addListener(marker, "mouseout", 	function()  { markerOut(this,this.type)});
	
	markersArray.push(marker);
}

function showMarkers(status)
{
	if (status == undefined) status=true;
	log("SHOW MARKERS: "+status);
	if (status==false) {
		if (cluster!=undefined)
		{
			cluster.removeMarkers();
			cluster = undefined;
		}
	} else {
		if (cluster==undefined)
		{
			cluster			= new ClusterMarker(map, { 
									markers:markersArray, 
									clusterMarkerIcon:iconCluster,
									clusterMarkerTitle:"Klik hier voor %count terrassen",
									intersectPadding: DefaultIntersectPadding 
								} );
			cluster.refresh(true);
		}
	}
	hideLoader();
}
function markerOver(obj,type)
{
	if(type=='ZONNERADAR')
	{
		obj.setImage("images/"+markerPath+"/marker_over.png")
	} else {
		obj.setImage("images/"+markerPath+"/marker_lifter_over.png")
	}	
//	$('.markerTooltip').redrawShadow();	
}

function markerOut(obj,type)
{
//	alert("UI"+event.name);
	if(type=='ZONNERADAR')
	{
		obj.setImage("images/"+markerPath+"/marker_normal.png")
	} else {
		obj.setImage("images/"+markerPath+"/marker_lifter_normal.png")
	}	
//	$('.markerTooltip').redrawShadow();	
}


function infoWindowClose()
{
	log('CLOSE WINDOW');
	SWFAddress.setValue('/home/windowclose')
}

function infoWindowOpen()
{
	log('OPEN WINDOW');
}

function showOverlay()
{
	overlay.remove();
}


function clickMap()
{
	log('CLICK')
}

function moveIng (event, ui) 
{
	var nePoint = map.getBounds().getNorthEast();
	var maxLat = nePoint.lat();
	var maxLng = nePoint.lng();
	
	var swPoint = map.getBounds().getSouthWest();
	var minLat = swPoint.lat();
	var minLng = swPoint.lng();

	log("Moving! new center position:"+ map.getCenter() );
//	log("swPoint:"+ swPoint );
}

function moveDone (event, ui) 
{
	log("Move Done! new center position:"+ map.getCenter() );
	if(TerraceShowing)	{
		TerraceCenter	= map.getCenter();
		var nePoint = map.getBounds().getNorthEast();
		var neLat = nePoint.lat();
		var neLon = nePoint.lng();
		
		var swPoint = map.getBounds().getSouthWest();
		var swLat = swPoint.lat();
		var swLon = swPoint.lng();
	
		getActualWeather('updateTerraceWeatherInfo',neLat,neLon,swLat,swLon);
	}
	updateZoomDisplay();
	
}

function zoomMap (event, ui) 
{
	tZoom	= parseInt($('#zonneradar_slider').slider('value'));
	tCenter	= map.getCenter();
	if (tCenter==centerWide && tZoom != 7) tCenter=center;
	map.setCenter(tCenter, tZoom);
}

function zoomDone(zOld, zNew)
{
	log("new zoom:"+zNew);
//	SWFAddress.setValue('/zoom/'+zNew)

	$('#zonneradar_slider').slider('option', 'value', zNew);
	var nePoint = map.getBounds().getNorthEast();
	var neLat = nePoint.lat();
	var neLon = nePoint.lng();
	
	var swPoint = map.getBounds().getSouthWest();
	var swLat = swPoint.lat();
	var swLon = swPoint.lng();
	
//	getActualWeather('updateTerrace',neLat,neLon,swLat,swLon);
//	updateZoomDisplay();
	updateZoomDisplay();
}

function dragEnd(item)
{
//	log("New position of item = "+ item.lat() + ","+item.lng());
//	log("Moved x:"+(overlay.point.x - orgPos.x) + " , y:"+(overlay.point.y - orgPos.y));
}

function getMarkerIdFromGuid(guid)
{
	var item=-1;
	for (var t=0;t<markersArray.length;t++)
	{
		if (markersArray[t].guid == guid) item = t;
	}
	return item;
}

function zoomMapOut()
{
log("OUT");
	tVal	= parseInt($('#zonneradar_slider').slider('value'));
	if (tVal!=7)
	{
		$('#zonneradar_slider').slider('option', 'value', tVal-1);
		zoomMap();
	}
}

function zoomMapIn()
{
log("IN");
	tVal	= parseInt($('#zonneradar_slider').slider('value'));
	$('#zonneradar_slider').slider('option', 'value', tVal+1);
	zoomMap();
}

function zoomMapTo(lat,lon,zoom)
{
	if (zoom.length==0) 
	{
		zoom = DefaultZoom;
		terraceCenter	=  new GLatLng(parseFloat(lat)+ZoomCenterTop[0], parseFloat(lon)+ZoomCenterLeft[0]);	
	}
	correction	= 0;
	if (zoom<15)	zoom=15;
	if (zoom>20)	zoom=20;
	if (zoom==15)	correction=0;
	if (zoom==16)	correction=1;
	if (zoom==17)	correction=2;
	if (zoom==18)	correction=3;
	if (zoom==19)	correction=4;
	if (zoom==20)	correction=5;
	
	terraceCenter	=  new GLatLng(parseFloat(lat)+ZoomCenterTop[correction], parseFloat(lon)+ZoomCenterLeft[correction]);	
	
//	alert('ZOOM: '+lat+','+lon+','+ zoom);
	map.setCenter(terraceCenter, parseInt(zoom));
}

function loadOverlayAnimation()
{
	loadOverlay('loadOverlayAnimationFinish',AnimOverlayItems);
}

function loadOverlayAnimationFinish(result)
{
	log(result);
	t=0;
	if (AnimInit==false)
	{
		for(t=0;t<=AnimOverlayItems+1;t++)
		{
			overlayAnim[t]		= EInsert.groundOverlay("",overlayBoundsWide);
			map.addOverlay(overlayAnim[t]);
			AnimArray[t]			=	new Object();
		}
		AnimInit = true;
	} 
	
	$.each(result.Value, function(i,Layer)
	{
		pPointer 	= Layer.PicturePointer;
		pTime		= dateToTime(Layer.Timestamp);
		AnimArray[i]			=	new Object();
		AnimArray[i].file		=	pPointer;
		AnimArray[i].update		=	pTime;
		overlayAnim[i].setImage(pPointer);
		overlayAnim[i].hide();
		log(pPointer);
	});
//	return;
	
	startAnimation();
}
function startAnimation()
{
	setTimeout('startAnimationTimer()',1000);
}

function startAnimationTimer()
{
	AnimRunning			= true;
	overlayWide.hide();
	AnimCurrentFrame	= 0;
//	$("#update_time > h4").empty();
//	$("#update_time > h4").html(CurrentOverlayUpdate);
	doAnimation();
	hideLoader();
	AnimTimer    		= setInterval('doAnimation()', AnimRefreshRate);
}
function stopAnimation()
{
	AnimRunning			= false;
	clearInterval(AnimTimer);
	overlayAnim[AnimCurrentFrame].hide();
	overlayWide.show();
	updateNL();
//	loadOverlay();
}

function doAnimation()
{
	for (t=0;t<=AnimOverlayItems;t++)
	{
		overlayAnim[AnimCurrentFrame].hide();
	}
	AnimCurrentFrame--;
	if (AnimCurrentFrame<0)	AnimCurrentFrame=AnimOverlayItems;
	overlayAnim[AnimCurrentFrame].show();
	$("#update_time > h4").empty();
	$("#update_time > h4").append(AnimArray[AnimCurrentFrame].update);
	Cufon.replace('h4', { fontFamily: 'Myriad Pro' });
}

