﻿// JScript File
function GMAPinitialize(gmapSettings)
{ 
    document.body.onunload = GMAPUnload;
    
    if (GBrowserIsCompatible() && !gmapSettings.forceStatic)
    {
        var map = new GMap2(document.getElementById(gmapSettings.divMap));
        map.setCenter(new GLatLng(gmapSettings.coordLat,gmapSettings.coordLong), gmapSettings.zoom);
        gmapSettings.map = map;
        
        switch (gmapSettings.zoomControlType)
        {
            case "SmallZoomControl":
                map.addControl(new GSmallZoomControl());
                break;
            case "LargeMapControl":
                map.addControl(new GLargeMapControl());
                break;
            case "SmallMapControl":
                map.addControl(new GSmallMapControl());
                break;
        }
        if(gmapSettings.mapTypeControl) map.addControl(new GMapTypeControl());
        if(gmapSettings.overviewMapControl) map.addControl(new GOverviewMapControl());
        if(gmapSettings.scaleControl) map.addControl(new GScaleControl());
        
        if(gmapSettings.dynamicMarkers != null || gmapSettings.geometries != null)
        {
            bounds = new GLatLngBounds();
            
            if(gmapSettings.dynamicMarkers != null)
            {
                for(x in gmapSettings.dynamicMarkers)
                {
                    addMapMarker(map,gmapSettings.dynamicMarkers[x],bounds);
                }
            }
            
            if(gmapSettings.geometries != null)
            {
                for(x in gmapSettings.geometries)
                {
                    addMapOverlay(map,gmapSettings.geometries[x],bounds);
                }
            }
            
            if(gmapSettings.implicit)
            {
                map.setCenter(bounds.getCenter(),map.getBoundsZoomLevel(bounds));
            }
        }
    }
    else
    {
        var divMap = document.getElementById(gmapSettings.divMap);
        var imgMap = new Image(gmapSettings.width,gmapSettings.height);
        
        var src = "http://maps.google.com/staticmap";
        src += "?size=" + gmapSettings.width + "x" + gmapSettings.height + gmapSettings.staticMarkers + "&key=" + gmapSettings.key;
        
        if(!gmapSettings.implicit) src += "&center=" + gmapSettings.coordLong + "," + gmapSettings.coordLat + "&zoom=" + gmapSettings.zoom;
        
        imgMap.src = src;

        divMap.appendChild(imgMap);
    }
}

function GMAPUnload()
{
    GUnload();
}

function addMapMarker(map,marker,bounds)
{
    var markerfile = "markers/";
    
    if(marker.colour == "none")
    {
        markerfile += "red";
    }
    else
    {
        markerfile += marker.colour;
    }
    
    markerfile += "_MARKER" + marker.alpha.toUpperCase() + ".png";
    
    var icon = new GIcon();
    icon.image = markerfile;
    icon.shadow = "markers/shadow.png";
    icon.iconSize = new GSize(20.0, 34.0);
    icon.shadowSize = new GSize(38.0, 34.0);
    icon.iconAnchor = new GPoint(10.0, 33.0);
    icon.infoWindowAnchor = new GPoint(10.0, 33.0);
    
    var latlng = new GLatLng(marker.coordLat,marker.coordLong);
    
    map.addOverlay(new GMarker(latlng, icon));
    
    bounds.extend(latlng);
}

function addMapOverlay(map,geometry,bounds)
{
    switch(geometry.type)
    {
        case "GoogleMarker":
            addMapMarker(map,geometry,bounds);
            break;
        case "GooglePolyline":
            addMapPolyline(map,geometry,bounds);
            break;
        default:
            break;
    }
}

function addMapPolyline(map,geometry,bounds)
{
    var points = new Array();
    var latlng;
    
    for(x in geometry.points)
    {
        latlng = new GLatLng(geometry.points[x].coordLat, geometry.points[x].coordLong);
        points[x] = latlng;
        bounds.extend(latlng);
    }
    
    var polyOptions = {geodesic:geometry.geodesic,clickable:geometry.clickable};
    
    var polyline = new GPolyline(points,geometry.colour,geometry.weight,geometry.opacity,polyOptions);
    
    map.addOverlay(polyline);    
}