// Global marker manager
var mgr = null;
var map = null;
var normalProj = G_NORMAL_MAP.getProjection();
var mapDivId = "map";


function gmaps_onLoad() 
{
    // The basics.
    //
    // Creates a map and centers it on Palo Alto.
    if (GBrowserIsCompatible()) 
    {

        map = new GMap2(document.getElementById(mapDivId));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.addControl(new GScaleControl());
        map.setCenter(new GLatLng(37.667059, -97.443965), 3);
        map.enableDoubleClickZoom();
        map.enableContinuousZoom();
        map.enableScrollWheelZoom();
        
        // See comments in function zoomend
        // GEvent.addListener(map, "zoomend", zoomEnd);        
        
        // Create a new MarkerManager
        mgr = new GMarkerManager(map);
        
        loadMarkers(map);
        //drawCircle(map.getCenter(), new GLatLng(map.getCenter().lat()+10, map.getCenter().lng()+10));
        //drawFilledCircle(map.getCenter(), new GLatLng(map.getCenter().lat()+10, map.getCenter().lng()+10));
    }
}
                  
// Create a marker whose info window displays the given number.
function createMarker(point, title, description, franchisee, color) 
{
    var marker;
    if (franchisee) // franchisee marker (store)
    {
        // Color is a single char.
        // TODO: handle real colors
        var baseIcon = new GIcon();

        if (color.length>1)  {
            baseIcon.image = color;
            baseIcon.iconSize = new GSize(30, 25);
            baseIcon.shadowSize = new GSize(47, 24);
            baseIcon.iconAnchor = new GPoint(15, 25);
            }
        else {
            baseIcon.image = "http://www.google.com/mapfiles/marker" + color + ".png";
            baseIcon.iconSize = new GSize(22, 37);
            baseIcon.shadowSize = new GSize(37, 34);
            baseIcon.iconAnchor = new GPoint(9, 34);
            }
            
        baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
        baseIcon.infoWindowAnchor = new GPoint(9, 2);
        baseIcon.infoShadowAnchor = new GPoint(18, 25);
        
        marker = new GMarker(point, baseIcon);

    } 
    else // pal marker
    {
        var icon = new GIcon();                               

        if (color.length>1)
            icon.image = color;
        else        
            icon.image = "http://www.google.com/mapfiles/marker" + color + ".png";
//        icon1.image ="http://admin.lavablast.com/images/content/marker_blue.gif"; 
        icon.shadow ="http://www.google.com/intl/en_ALL/mapfiles/shadow50.png"; 
        icon.iconSize = new GSize(18, 31); 
        icon.shadowSize = new GSize(27, 25); 
        icon.iconAnchor = new GPoint(9, 34); 
        icon.infoWindowAnchor = new GPoint(9, 2); 
        marker = new GMarker(point, icon);
    }

    // Show this marker's index in the info window when it is clicked.
    var html = "<b>"+title+"</b><br/>"+ description + "<br/><br/>";
    GEvent.addListener(marker, 'click', function() 
    {
        marker.openInfoWindowHtml(html);
    });
    
    return marker;
}


// draw circle border
function drawCircle(centerPoint, radiusPoint)
{
    var zoom = map.getZoom();
	var centerPt = normalProj.fromLatLngToPixel(centerPoint, zoom);
	var radiusPt = normalProj.fromLatLngToPixel(radiusPoint, zoom);
	var circleLine = null;

	var circlePoints = Array();

	with (Math) 
	{
		var radius = floor(sqrt(pow((centerPt.x-radiusPt.x),2) + pow((centerPt.y-radiusPt.y),2)));

		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));
		}

		//map.removeOverlay(circleLine);
		circleLine = new GPolyline(circlePoints,'#FD942D',4,1);
		map.addOverlay(circleLine);
	}
}



// draw a circle polygon overlay
function drawFilledCircle(centerPoint, radiusPoint)
{
	oStatusDiv = document.getElementById("statusDiv");
	var zoom = map.getZoom();

	var centerPt = normalProj.fromLatLngToPixel(centerPoint, zoom);
	var radiusPt = normalProj.fromLatLngToPixel(radiusPoint, zoom);

	var circlePoints = Array();

	with (Math) 
	{
		var radius = floor(sqrt(pow((centerPt.x-radiusPt.x),2) + pow((centerPt.y-radiusPt.y),2)));
		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 = new GPolyline(circlePoints,'#96BDFE',thickness,0.5);
			map.addOverlay(circleLine2);
		}
	}
}


function zoomEnd(oldZoom,newZoom) 
{
    // Todo: redraw circle at each zoom - is it really necessary ?
    // Todo: to clear overlay: "map.clearOverlays();"
    // Todo: test if map.clearOverlays remove marker (marker are managed by the markermanager)
}
