//<![CDATA[

var MapObj = {};
var nearByPlaces_LocHolder = [];
var topMapData = {};
var topLocMap;
var current_openInfowindow;
var Icon;
var baseIcon;
var blueIcon;
var markerOptions;
    
var iconSize;
var iconShadowSize;
var iconHotSpotOffset;
var iconPosition;
var infoWindowAnchor;
var infoShadowAnchor;

var iconShadowUrl = "http://www.google.com/mapfiles/shadow50.png";
var iconImageUrl;
var iconImageOverUrl;
var iconImageOutUrl;

var gIcons = {
    "defaults":
        {
            "white"        : "http://econym.googlepages.com/colour125.png",
            "yellow"       : "http://maps.google.com/mapfiles/ms/micons/yellow-dot.png",
            "blue"         : "http://maps.google.com/mapfiles/ms/micons/blue-dot.png",
            "Flag, Blue"   : "http://maps.google.com/mapfiles/ms/micons/blue-dot.png",
            "red"          : "http://maps.google.com/mapfiles/ms/micons/red-dot.png",
            "Flag, Red"    : "http://maps.google.com/mapfiles/ms/micons/red-dot.png",
            "Exit"         : "http://maps.google.com/mapfiles/ms/micons/blue-dot.png",
            "Parking Area" : "http://maps.google.com/mapfiles/ms/micons/parkinglot.png"
        }
    };

// Init the map onload
Event.observe(window, 'load', function() { init_V2_GMap(); });


window.onbeforeunload = function() {
    logInConsole("GUnload Called");
    GUnload();
}; 


function init_V2_GMap() {
    logInConsole("init_V2_GMap Called");
    
    var iconSize = new GSize(20, 34);
    var iconShadowSize = new GSize(37, 34);
    var iconHotSpotOffset = new GSize(9, 34); // Should this be (9, 34)?
    var iconPosition = new GSize(0, 0);
    var infoWindowAnchor = new GSize(9, 2);
    var infoShadowAnchor = new GSize(18, 25);
    
    var iconShadowUrl = "http://www.google.com/mapfiles/shadow50.png";
    var iconImageUrl;
    var iconImageOverUrl;
    var iconImageOutUrl;
    
    Icon = new GIcon(G_DEFAULT_ICON);
    Icon.image = gIcons.defaults["red"];
    Icon.iconSize = new GSize(32,32);
    Icon.shadowSize = new GSize(40, 34);
    Icon.infoWindowAnchor = new GPoint(20, 0);
    
    baseIcon = new GIcon(G_DEFAULT_ICON);
    //baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
    baseIcon.iconSize = new GSize(32,32);
    
    markerOptions = { icon:Icon };
    
    blueIcon = new GIcon(G_DEFAULT_ICON);
    blueIcon.image = "http://gmaps-samples.googlecode.com/svn/trunk/markers/blue/blank.png";
    
    initV2Map(MapObj);
    createNearbyLocationsGMapV2(nearByPlaces_LocHolder);
    
}





/*
my MapObj = {
    lat         : 11.1111,
    lon         : 11.1111,
    zoom        : 10,
    title       : "",
    description : ""
    };
var MapObj = {
    lat         : 41.29272616879684,
    lon         : -74.84707645473785,
    zoom        : 14,
    title       : "Raymondskill Falls",
    description : ""
    };

*/
function initV2Map(MapObj) {
    logInConsole("initV3Map Called");
    logInConsole(MapObj);
    
    topLocMap = MapObj;
    
    if (GBrowserIsCompatible()) {
        
        var metadata = new Array;
        var tooltipNode;
        
        var m = document.getElementById("google-location-map");
        var map = new GMap2(m);
        map.setCenter(new GLatLng(MapObj.lat,MapObj.lon), MapObj.zoom);
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.addControl(new GScaleControl(200));
        map.hideControls();
        map.setMapType(G_HYBRID_MAP);
        
        ////'mouseover' listener shows controls
        GEvent.addListener(map, "mouseover", function(){
        map.showControls();
        });
        
        ////'mouseout' listener hides controls
        GEvent.addListener(map, "mouseout", function(){
        map.hideControls(); 
        });
        
        tooltipNode = document.createElement("div");
        document.getElementById("google-location-map").appendChild(tooltipNode);
        tooltipNode.style.visibility="hidden";
        
        // Add to the map
        createMarker(
            map,
            MapObj,
            tooltipNode,
            buildPopupHtmlV2(MapObj,0),
            MapObj.title,
            new GMarker(new GLatLng(MapObj.lat,MapObj.lon), markerOptions)
            );
        
    }
    
    
}




function createNearbyLocationsGMapV2(PointData) {
    logInConsole("createNearbyLocations Started");
    logInConsole(topLocMap);
    logInConsole(PointData);
    
    var bounds = new GLatLngBounds();
    
    if (GBrowserIsCompatible()) {
        
        var metadata = new Array;
        var tooltipNode;
        
        var m = document.getElementById("nearby-locs-outer-link-extra");
        var map = new GMap2(m);
        map.setCenter(new GLatLng(topLocMap.lat,topLocMap.lon), topLocMap.zoom);
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.addControl(new GScaleControl(200));
        map.hideControls();
        map.setMapType(G_HYBRID_MAP);
        
        ////'mouseover' listener shows controls
        GEvent.addListener(map, "mouseover", function(){
        map.showControls();
        });
        
        ////'mouseout' listener hides controls
        GEvent.addListener(map, "mouseout", function(){
        map.hideControls(); 
        });
        
        tooltipNode = document.createElement("div");
        document.getElementById("nearby-locs-outer-link-extra").appendChild(tooltipNode);
        tooltipNode.style.visibility="hidden";
        
        // Add to the map
        createMarker(
            map,
            MapObj,
            tooltipNode,
            buildPopupHtmlV2(MapObj,0),
            MapObj.title,
            new GMarker(new GLatLng(MapObj.lat,MapObj.lon), markerOptions)
            );
        
        bounds.extend(new GLatLng(topLocMap.lat,topLocMap.lon));
        
        
        var count = 1;
        for (var i = 0; i < PointData.length; i++) {
            
            count = (i+1);
            iconImageUrl = "http://gmaps-samples.googlecode.com/svn/trunk/" +
                "markers/green/marker" + count + ".png";
            
            var markerImage                  = new GIcon(G_DEFAULT_ICON);
                markerImage.image            = iconImageUrl;
                //markerImage.iconSize         = iconSize;
                //markerImage.shadowSize       = iconShadowSize;
                //markerImage.infoWindowAnchor = infoWindowAnchor;
                innerMarkerOptions = { icon:markerImage };
            
            var point = PointData[i];
            
            var marker = new GMarker(new GLatLng(point.lat,point.lon), innerMarkerOptions);
            
            // Add to the map
            createMarker(
                map,
                point,
                tooltipNode,
                buildPopupHtmlV2(point,1),
                point.title,
                marker
                );
            
            bounds.extend(new GLatLng(point.lat,point.lon));
            
            }
        
        // ===== determine the centre from the bounds ======
        map.setZoom( (map.getBoundsZoomLevel(bounds)) );
        map.setCenter(bounds.getCenter());
        
        
        
    }
    
    
}





function createMarker(map, MapObj, tooltipNode, html, toolTipText, marker) {
    
    marker.tooltip = '<div class="tooltip">'+toolTipText+'</div>';
    
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html);
        tooltipNode.style.visibility="hidden";
        });
    
    map.addOverlay(marker);
    
    GEvent.addListener(marker,"mouseover", function() {
        showTooltip_v2(map, marker, tooltipNode);
        });
    GEvent.addListener(marker,"mouseout", function() {
        tooltipNode.style.visibility="hidden";
        });
    
    if (MapObj.specficID) {
        GEvent.addListener(marker,"mouseover", function() {
            highlightTheLinks_On(MapObj.specficID);
        });
        GEvent.addListener(marker,"mouseout", function() {
            highlightTheLinks_Off(MapObj.specficID);
        });
    }
    
}



function showTooltip_v2(map, marker, tooltipNode) {
    tooltipNode.innerHTML = marker.tooltip;
    var point=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getSouthWest(),map.getZoom());
    var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
    var anchor=marker.getIcon().iconAnchor;
    var width=marker.getIcon().iconSize.width;
    var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - point.x - anchor.x + width,- offset.y + point.y +anchor.y));
    pos.apply(tooltipNode);
    tooltipNode.style.visibility="visible";
    }



function buildPopupHtmlV2(elements,onclickTrackingCodeFlag) {
    logInConsole("=======================");
    logInConsole("buildPopupHtmlV2  Started");
    logInConsole(elements);
    logInConsole("Flag="+onclickTrackingCodeFlag);
    logInConsole("-----------------------");
    
    if (!elements.options) {
        elements.options = {};
        }
    
    // Start div PopupContainer
    html = "<div class='PopupContainer'>";
    
    // Add Title
    if (elements.title) {
        html += "<div class='title'>";
        html += elements.title;
        html += "</div>";
        }
    
    // Add Description
    if (elements.description) {
        html += "<div class='' style='padding:3px 5px;'>";
        html += elements.description;
        html += "</div>";
        }
    
    
    // Print out URL
    if (elements.options) {
        if (elements.options.addURLToThePopup) {
            html += "<div class='linksToCarabs'>";
            html += "<a class='BoldLink' href='"+elements.url+"'";
            if (onclickTrackingCodeFlag) {
                var newLinkClick = " onclick='return nearbyLocationGMap_Click(\""+MapObj.title+"\",\""+elements.title+"\",\"\");'";
                logInConsole(newLinkClick);
                html += newLinkClick;
            }
            html += ">View more info about: "+elements.title+"</a>";
            html += "</div>";
        }
        
        // Add Directions
        if (!elements.options.doNotDisplayDirections) {
            html += "<div class='directions'><a class='BoldLink' href='http://maps.google.com/maps?f=q&hl=en&amp;q=";
            html += elements.lat;
            html += ",";
            html += elements.lon;
            html += "&om=3' target='_blank'>Directions on Google</a></div>";
        }
    }
    
    // Close div PopupContainer
    html += "</div>";
    
    return html;
    
}









function highlightTheLinks_On(pageId) {
    logInConsole("=======================");
    logInConsole("highlightTheLinks_On  Started");
    logInConsole(pageId);
    var linkContainer = document.getElementById(pageId);
    
    linkContainer.className = linkContainer.className+' chanedLinkBG';
    
}

function highlightTheLinks_Off(pageId) {
    logInConsole("=======================");
    logInConsole("highlightTheLinks_Off  Started");
    logInConsole(pageId);
    
    var linkContainer = document.getElementById(pageId);
    
    linkContainer.className=linkContainer.className.replace('chanedLinkBG', '');
    
}









//]]>