Currently I have an array called localMarker that stores both the
marker and the "respective" information window.

So localMarker looks something like this:

localMarker[0] = {marker object, information window object}
localMarker[1] = {marker object, information window object}
...

Anyways I use the term "respective" because the marker and the
information windows are linked in a way that the information window
shows the coordinates and the formatted address of the marker.
Currently my code properly displays the correct text in the
information window.

One last thing I have in the information window is an <a> link with an
onClick = "deleteMarker". So basically when you click the link I want
it to delete both the marker and the respective information window
from the map.

So here is the question: how do I pass the object of the information
window and the respective marker from the information window text?

(I know that I could alternatively assign the deleteMarker to
something else like clicking the marker, but I already have a function
for clicking the marker: it open/closes the information window)

Also sorry I can't post links, I'm under a corporate firewall and I
can't simply transfer the file to an online host since the site
requires a SQL database as well. I can post a copy of the JS script.

Here are some lines to notice:
Line 27: the piece of string that has the "Delete this marker" for the
information window content
Line 503: listener for clicking the map
Line 531: creating a single marker and its respective information
window
Line 622: "marking up" the plain text for the information window (I
keep the plain text for AJAX)


====================================================
var debugMode = true;

var mapShareURL = "mapshare.php";

var updateInterval = 1000;
var maxMarkerLimit = 10;

//var panStepInterval = 30;
//var panTime         = 1000;

var map;
var geocoder;
var oMap;
var oStatus;
var oDebug;

// default view
var lat = 32.5;
var lng = 175;
var zoom = 3;
var mapType = "roadmap";

var newMarkersToSend      = new Array();
var markersLocal          = new Array();
var modifiedMarkersToSend = new Array();
var markersLocalIdentified = 0;
var markerDeleteString = "<br><br><a href='#' onClick='deleteMarker
(this);'>Delete this marker</a>";

//var tilesLoadingStatus = "Loading...";

var xmlHttpUpdateMap = createXmlHttpRequestObject();
var xmlRequestInfo;
var params;
var response;

window.onload = init;

function init() {
        // debugging only available in Firefox's FireBug
        if(typeof console === "undefined") {
    console = {
                        log:            function() {},
                        groupCollapsed: function() {},
                        groupEnd:       function() {},
                        warn:           function() {},
                        info:           function() {}
                };
        }

        console.log(modifiedMarkersToSend);

        //console.log("init(): mode: " + xmlRequestInfo.mode);
        oMap    = document.getElementById("map");
        oStatus = document.getElementById("status");
        oDebug  = document.getElementById("debug");

        showStatus("Loading...");

        map = new google.maps.Map(oMap, {
                zoom: zoom,
                center: new google.maps.LatLng(lat, lng),
                mapTypeId: mapType
        });
        geocoder = new google.maps.Geocoder();

        resetXmlRequest();
        xmlRequestInfo.mode = "init"; // for updateMap();
        xmlRequestInfo.center  = true;
        xmlRequestInfo.zoom    = true;
        xmlRequestInfo.mapType = true;
        updateMap();

        google.maps.event.addListener(map, 'center_changed', function()
{ eventCenterChanged(); } );
        google.maps.event.addListener(map, 'zoom_changed', function()
{ eventZoomChanged(); } );
        //google.maps.event.addListener(map, 'dragend', function()
{ eventDragEnd(); } );
        google.maps.event.addListener(map, 'click', function(event)
{ eventClick(event.latLng); } );
        google.maps.event.addListener(map, 'mapTypeId_changed', function()
{ eventMapTypeChanged(); } );
        //google.maps.event.addListener(map, 'tilesloaded', function()
{ eventTilesLoaded(); } );

        debugUpdateCenter();
        debugUpdateZoom();
        debugUpdateView();
        debugUpdateTiles();

        if(debugMode) {
                oDebug.style.visibility = "visible";
                document.getElementById("debug_markerId").innerHTML         = 
"No
markers selected.";
                document.getElementById("debug_markerWindowOpen").innerHTML = 
"No
markers selected.";
        }
}

function showStatus(message) {
        oStatus.innerHTML = message;
}

function createXmlHttpRequestObject() {
        var xmlHttp;

        try {
                xmlHttp = new XMLHttpRequest();
        } catch(e) {
                // IE6 or older
                var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                                "MSXML2.XMLHTTP.5.0",
                                                "MSXML2.XMLHTTP.4.0",
                                                "MSXML2.XMLHTTP.3.0",
                                                "MSXML2.XMLHTTP",
                                                "Microsoft.XMLHTTP");

                for(var i = 0; i < XmlHttpVersions.length && !xmlHttp; i++) {
                        try{
                                xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
                        } catch(e) { }
                }
        }

        if(!xmlHttp)
                alert("Error creating the XMLHttpRequest object.");
        else
                return xmlHttp;
}

function updateMap() {
        console.log("mode", xmlRequestInfo.mode);
        console.groupCollapsed("markers");
        console.log("markersLocal", markersLocal);
        console.log("modifiedMarkersToSend", modifiedMarkersToSend);
        console.log("newMarkersToSend", newMarkersToSend);
        console.groupEnd();

        if(xmlHttpUpdateMap) {
                //try {
                        if(xmlHttpUpdateMap.readyState == 4 ||
                                 xmlHttpUpdateMap.readyState == 0) {
                                showStatus("Updating...");

                                params = "mode=" + xmlRequestInfo.mode;
                                //console.log("updateMap(): mode: " + 
xmlRequestInfo.mode);
                                if(xmlRequestInfo.mode == "send" || 
xmlRequestInfo.mode == "init")
{
                                        if(xmlRequestInfo.center)
                                                params += "&lat=" + lat  +
                                                          "&lng=" + lng;

                                        if(xmlRequestInfo.zoom)
                                                params += "&zoom=" + zoom;

                                        if(xmlRequestInfo.mapType)
                                                params += "&mapType=" + mapType;

                                        if(xmlRequestInfo.clearMarkers) {
                                                params += "&marker_count=0" +
                                                          
"&newMarkers=deleteAll";
                                        } else {
                                                
if(xmlRequestInfo.modifiedMarkers) {
                                                        // modified markers 
already have ids
                                                        params += 
"&modifiedMarkers=" + createMarkersXml
(modifiedMarkersToSend, false);
                                                }
                                                if(xmlRequestInfo.newMarkers) {
                                                        // new markers don't 
have ids
                                                        params += 
"&marker_count=" + newMarkersToSend.length +
                                                                                
                "&newMarkers=" + createMarkersXml(newMarkersToSend, true);
                                                }
                                        }
                                }

                                xmlHttpUpdateMap.open("POST", mapShareURL, 
true);
                                
xmlHttpUpdateMap.setRequestHeader("Content-Type", "application/x-
www-form-urlencoded");
                                xmlHttpUpdateMap.onreadystatechange = 
handleUpdatingMap;
                                xmlHttpUpdateMap.send(params);
                        } else { // busy
                                setTimeout("updateMap();", 1000);
                        }
                //} catch(e) {
                        //alert("Can't connect to server:\n" + e.toString());
                //}
        } else {
                alert("The XMLHttpRequest object is null!");
        }
}

function handleUpdatingMap() {
        if(xmlHttpUpdateMap.readyState == 4) {
                if(xmlHttpUpdateMap.status == 200) {
                        //try {
                        //console.log("handleUpdateMap(): mode: " + 
xmlRequestInfo.mode);
                                displayUpdates();
                        //} catch(e) {
                                //alert("Error updating the map:\n" + 
e.toString() + "\n" +
xmlHttpUpdateMap.responseText);
                        //}
                } else {
                        alert("There was a problem when updating the map:\n" +
xmlHttpUpdateMap.statusText);
                }
        }
}

function displayUpdates() {
        console.log("displayUpdate()");
        function parseAndCheckMarkers(markersXmlReceived) {
                console.log("parseAndCheckMarkers()");
                function isSameMarker(markerLocal, markerReceived) {
                console.log("isSameMarker()");
                        // local markers are API markers, received markers are 
custom made
                        // thus lat, lng, and text must be handled differently 
between the
2 markers
                        console.log("local lat", 
markerLocal.marker.position.lat(),
"received lat", markerReceived.lat);
                        if(markerLocal.marker.position.lat() != 
markerReceived.lat)
                                return false;
                        console.log("local lng", 
markerLocal.marker.position.lng(),
"received lng", markerReceived.lng);
                        if(markerLocal.marker.position.lng() != 
markerReceived.lng)
                                return false;
                        console.log("local windowOpen", 
markerLocal.marker.windowOpen,
"received windowOpen", markerReceived.windowOpen);
                        if(markerLocal.marker.windowOpen != 
markerReceived.windowOpen)
                                return false;

                        return true;
                } // isSameMarker()

                console.log("markersXmlReceived.length", 
markersXmlReceived.length);
                console.log("markersLocal.length", markersLocal.length);
                console.log("markersXmlReceived", markersXmlReceived);
                var markersReceived = new Array();
                var i;
                for(i = 0; i < markersXmlReceived.length; i++) {
                        markersReceived[i] = {
                                id: 0,
                                lat: 0,
                                lng: 0,
                                text: "",
                                windowOpen: false,
                                isLocal: false
                        };
                        markersReceived[i].id         = 
parseInt(markersXmlReceived
[i].getAttribute("id"));
                        markersReceived[i].lat        = 
parseFloat(markersXmlReceived
[i].getAttribute("lat"));
                        markersReceived[i].lng        = 
parseFloat(markersXmlReceived
[i].getAttribute("lng"));
                        markersReceived[i].text       = 
markersXmlReceived[i].getAttribute
("text");
                        markersReceived[i].windowOpen = 
markersXmlReceived[i].getAttribute
("windowOpen") === "true";
                }
                console.log("markersReceived", markersReceived);

                console.info("Identifying local markers...");
                for(i = 0; i < markersLocal.length; i++) {
                        if(i < markersLocalIdentified) {
                                if(markersLocal[i].marker.id == 
markersReceived[i].id) {
                                        markersReceived[i].isLocal = true;
                                } else {
                                        console.warn("WARNING: Old marker ids 
are somehow out of sync!");
                                        console.groupCollapsed("Local marker #" 
+ (i + 1) + " does not
sync with received marker #" + (i + 1));
                                        console.log("Local id:", 
markersLocal[i].marker.id);
                                        console.log("Received id:", 
markersReceived[i].id);
                                        console.groupEnd();
                                }
                        } else {
                                console.warn("Local marker #" + (i + 1) + " is 
unidentified!");
                                console.log("The unidentified marker", 
markersLocal[i].marker);
                                // sync marker ids
                                var identified = false;
                                var j;
                                for(j = 0; j < markersReceived.length; j++) {
                                        if(!markersReceived[j].isLocal) {
                                                
console.log("markersXmlReceived[" + j + "]", markersReceived
[j]);
                                                
if(isSameMarker(markersLocal[i], markersReceived[j])) {
                                                        
markersLocal[i].marker.id = j + 1;
                                                        
markersLocal[i].marker.set_zIndex(j + 1);
                                                        
markersLocal[i].infoWindow.set_zIndex(j + 1);
                                                        identified = true;
                                                        
markersLocalIdentified++;
                                                        
markersReceived[j].isLocal = true;
                                                        break;
                                                }
                                        }
                                }

                                if(identified) {
                                        console.info("Unidentified local marker 
#" + (i + 1) + "
identified as " + (j + 1));
                                } else {
                                        console.warn("WARNING: Sent local 
marker # " + (i + 1) + " could
not be identified!");
                                }
                        }
                }

                if(markersLocal.length != markersLocalIdentified)
                        console.warn("WARNING: Something went wrong...");

                console.info("Creating new markers...");
                for(i = 0; i < markersReceived.length; i++) {
                        if(!markersReceived[i].isLocal) {
                                var location = new 
google.maps.LatLng(markersReceived[i].lat,
markersReceived[i].lng);
                                createSingleMarker(location, 
markersReceived[i].text,
markersReceived[i].windowOpen, markersReceived[i].id);
                        }
                }

                console.info("Sorting local markers...");
                console.log("Unsorted", markersLocal);
                markersLocal = markersLocal.sort(function(a, b) {
                        return a.marker.id - b.marker.id;
                });
                console.log("Sorted", markersLocal);

                console.info("Validating local markers id...");
                var error = false;
                if(markersLocal.length != markersReceived.length) {
                        console.warn("Local markers length and received markers 
length are
different!");
                        error = true;
                } else {
                        for(i = 0; i < markersLocal.length; i++) {
                                if(markersLocal[i].marker.id != 
markersReceived[i].id) {
                                        console.warn("WARNING: Marker ids are 
somehow out of sync!");
                                        console.groupCollapsed("Local marker #" 
+ (i + 1) + " does not
sync with received marker #" + (i + 1));
                                        console.log("Local id:", 
markersLocal[i].marker.id);
                                        console.log("Received id:", 
markersReceived[i].id);
                                        console.groupEnd();
                                        error = true;
                                }
                        }
                }
                if(!error) {
                        console.log("Local markers ids valid");
                }

                console.info("Checking local markers for changes...");
                var change = false;
                for(i = 0; i < markersLocal.length; i++) {
                        // check for modifications and update markers if needed
                        if(markersLocal[i].marker.position.lat() != 
markersReceived[i].lat
|| markersLocal[i].marker.position.lng() != markersReceived[i].lng) {
                                console.log("marker position different");
                                markersLocal[i].marker.position = new 
google.maps.LatLng
(markersReceived[i].lat, markersReceived[i].lng);
                                markersLocal[i].marker.set_map(null);
                                markersLocal[i].marker.set_map(map);
                                change = true;
                        }
                        if(markersLocal[i].marker.windowOpen != markersReceived
[i].windowOpen) {
                                console.log("marker windowOpen different");
                                markersLocal[i].marker.windowOpen = 
markersReceived[i].windowOpen;
                                if(markersReceived[i].windowOpen) {
                                        markersLocal[i].infoWindow.open(map, 
markersLocal[i].marker);
                                } else {
                                        markersLocal[i].infoWindow.close();
                                }
                                change = true;
                        }
                        var location = new 
google.maps.LatLng(markersReceived[i].lat,
markersReceived[i].lng);
                        //console.log("Local marker's get_content()", 
markersLocal
[i].infoWindow.get_content());
                        //console.log("Received marker's text", markupMarkerText
(markersReceived[i].text, location));
                        if(markersLocal[i].infoWindow.get_content() != 
markupMarkerText
(markersReceived[i].text, location)) {
                                console.log("marker text different");
                                
markersLocal[i].infoWindow.set_content(markupMarkerText
(markersReceived[i].text, location));
                                change = true;
                        }
                }
                if(!change) {
                        console.log("All local markers are in sync.")
                }
        } // parseAndCheckMarkers()

        response = xmlHttpUpdateMap.responseText;

        if(response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0
|| response.length == 0)
                throw(response.length == 0 ? "Response was empty!" : response);

        response = xmlHttpUpdateMap.responseXML.documentElement;

        var responseStatus = response.getElementsByTagName("status").item
(0).firstChild.data;

        //console.log("displayUpdates()1: mode: " + xmlRequestInfo.mode);
        if(responseStatus.indexOf("WARNING") >= 0) {
                console.warn(responseStatus);
        } else {
                console.info(responseStatus);
        }

        lat     = parseFloat(response.getElementsByTagName("lat").item
(0).firstChild.data);
        lng     = parseFloat(response.getElementsByTagName("lng").item
(0).firstChild.data);
        zoom    = parseInt(response.getElementsByTagName("zoom").item
(0).firstChild.data);
        mapType = response.getElementsByTagName("mapType").item
(0).firstChild.data;

        //console.log("displayUpdates()3: mode: " + xmlRequestInfo.mode);
        var markerCountServer = parseInt(response.getElementsByTagName
("marker_count").item(0).firstChild.data);
        var     markersXmlReceived = response.getElementsByTagName("marker");
        // need to create new markers locally

        if(markersLocal.length && !markerCountServer) {
                deleteAllMarkers(true);
        } else if(markersLocal.length > markerCountServer) {
                console.warn("WARNING: Local markers > Server. Something went
wrong!");
        } else {
                if(!xmlRequestInfo.clearMarkers && markersXmlReceived.length > 
0)
                        parseAndCheckMarkers(markersXmlReceived);
        }

        // weird: after this block of code, xmlRequestInfo.mode = "send" ???
        console.info("Checking if map view needs to be updated...");
        var change = false;
        if(lat != map.get_center().lat() || lng != map.get_center().lng()) {
                console.log("map center different");
                map.set_center(new google.maps.LatLng(lat, lng));
                //panTo(map, oldLat, oldLng, lat, lng); // hopefully v3 API will
replace this custom made function in the future
                change = true;
        }
        if(zoom != map.get_zoom()) {
                console.log("map zoom different");
                map.set_zoom(zoom);
                change = true;
        }
        if(mapType != map.get_mapTypeId()) {
                console.log("map type different");
                map.set_mapTypeId(mapType);
                change = true;
        }
        if(!change) {
                console.log("Map is in sync.");
        }

        showStatus("Idle");
        resetXmlRequest();
        modifiedMarkersToSend.length = 0;
        newMarkersToSend.length      = 0;

        if(!debugMode) setTimeout("updateMap();", updateInterval);
}

function createMarkerFromAddress(whichInput) {
        var address = document.getElementById("address" + whichInput).value;
        console.log("Address", address);
        if(geocoder) {
                geocoder.geocode({
                        address: address
                }, function(results, status) {
                        if (status == google.maps.GeocoderStatus.OK) {
                                if (status != 
google.maps.GeocoderStatus.ZERO_RESULTS) {
                                        var markerText = "";
                                        xmlRequestInfo.mode = "send";
                                        xmlRequestInfo.newMarkers = true;

                                        if(status == 
google.maps.GeocoderStatus.OK) {
                                                markerText = "Address: " + 
results[0].formatted_address;
                                        } else {
                                                markerText = "Address: " + 
status;
                                        }
                                        
createSingleMarker(results[0].geometry.location, markerText,
true, 0);
                                } else {
                                        alert("No results found.");
                                }
                        } else {
                                alert("Geocode was not successful for the 
following reason: " +
status);
                        }
                });
        }
}

function getDirections() {
        alert("Sorry, directions are currently not supported in version 3 of
Google Maps API.");
}

function resetXmlRequest() {
        xmlRequestInfo = {
                mode: "retrieve",
                center: false,
                zoom: false,
                mapType: false,
                modifiedMarkers: false,
                newMarkers: false,
                clearMarkers: false
        };
}

function eventCenterChanged() {
        tilesLoadingStatus = "Loading...";
        xmlRequestInfo.mode = "send";
        xmlRequestInfo.center = true;

        lat = map.get_center().lat();
        lng = map.get_center().lng();

        debugUpdateCenter();
        debugUpdateTiles();
}

function eventZoomChanged() {
        tilesLoadingStatus = "Loading...";
        xmlRequestInfo.mode = "send";
        xmlRequestInfo.zoom = true;

        zoom = map.get_zoom();

        debugUpdateZoom();
        debugUpdateTiles();
}

function eventMapTypeChanged() {
        tilesLoadingStatus = "Loading...";
        xmlRequestInfo.mode = "send";
        xmlRequestInfo.mapType = true;

        mapType = map.get_mapTypeId();

        debugUpdateView();
        debugUpdateTiles();
}

function eventDragEnd() {

}

function eventClick(location) {
        console.log("eventClick()");

        if(markersLocal.length >= maxMarkerLimit) {
                alert("Sorry, too many markers!");
                return;
        }

        if(geocoder) {
                geocoder.geocode({
                        latLng: location
                },
                function(results, status) {
                        var markerText = "";
                        xmlRequestInfo.mode = "send";
                        xmlRequestInfo.newMarkers = true;

                        if(status == google.maps.GeocoderStatus.OK) {
                                markerText = "Address: " + 
results[0].formatted_address;
                        } else {
                                markerText = "Address: " + status;
                        }
                        //console.log("evenClick(): " + markerText);
                        createSingleMarker(location, markerText, true, 0);
                });
        }
}

function createSingleMarker(location, markerText, markerWindowOpen,
id) {
        console.groupCollapsed("createSingleMarker()");
        console.log("markerWindowOpen", markerWindowOpen);
        console.log("id", id);
        console.groupEnd();
        var marker = new google.maps.Marker({
                position: location,
                map: map,
                zIndex: id//,
                //draggable: true
        });

        var infoWindow = new google.maps.InfoWindow({
                disableAutoPan: xmlRequestInfo.mode == "init",
                zIndex: id
        });

        infoWindow.set_content(markupMarkerText(markerText, location));
        if(markerWindowOpen) {
                infoWindow.open(map, marker);
                marker.windowOpen = true;
        } else
                marker.windowOpen = false;

        google.maps.event.addListener(marker, 'click', function() {
                if(marker.windowOpen) {
                        infoWindow.close();
                        marker.windowOpen = false;
                } else {
                        infoWindow.open(map, marker);
                        marker.windowOpen = true;
                }

                modifiedMarkersToSend[marker.id] = {
                        marker: marker,
                        infoWindow: infoWindow
                };
                xmlRequestInfo.mode = "send";
                xmlRequestInfo.modifiedMarkers = true;
        });

        google.maps.event.addListener(infoWindow, 'closeclick', function() {
                xmlRequestInfo.mode = "send";
                infoWindow.close();
                marker.windowOpen = false;

                modifiedMarkersToSend[marker.id] = {
                        marker: marker,
                        infoWindow: infoWindow
                };
                xmlRequestInfo.mode = "send";
                xmlRequestInfo.modifiedMarkers = true;
        });

        if(debugMode) {
                google.maps.event.addListener(marker, 'mouseover', function() {
                        var text;
                        if(!marker.id) {
                                text = "Not yet identified";
                        } else {
                                text = marker.id;
                        }
                        document.getElementById("debug_markerId").innerHTML = 
text;
                        
document.getElementById("debug_markerWindowOpen").innerHTML =
marker.windowOpen;
                });

                google.maps.event.addListener(marker, 'mouseout', function() {
                        document.getElementById("debug_markerId").innerHTML     
    = "No
markers selected.";
                        
document.getElementById("debug_markerWindowOpen").innerHTML = "No
markers selected.";
                });
        }

        if(id) { // Has id: Received
                marker.id = id;
                markersLocalIdentified++;
        } else { // Doesn't have id: Local
                newMarkersToSend.push({
                        marker: marker,
                        infoWindow: infoWindow
                });
        }

        markersLocal.push({
                marker: marker,
                infoWindow: infoWindow
        });
}

function markupMarkerText(markerText, location) {
        markerText = "Lat: " + location.lat() + " Lng: " + location.lng() + "
" + markerText;
        var prettyMarkerText = markerText.replace("Lat: ", "<b>Lat: </
b>").replace(" Lng: ", "<br><b>Lng: </b>").replace(" Address: ",
"<br><b>Address: </b>");
        prettyMarkerText += markerDeleteString;
        return prettyMarkerText;
}

function markdownMarkerText(prettyMarkerText) {
        //console.groupCollapsed("markdownMarkerText()");
        //console.log("prettyMarkerText", prettyMarkerText);
        var markerText = prettyMarkerText.replace("<b>Lat: </b>", "Lat:
").replace("<br><b>Lng: </b>", " Lng: ").replace("<br><b>Address: </
b>", " Address: ").replace(markerDeleteString, "");
        //console.log("markerText", markerText);
        markerText = markerText.substring(markerText.indexOf(" Address: ") +
1, markerText.length);
        //console.log("markerText", markerText);
        //console.groupEnd();
        return markerText;
}

function createMarkersXml(markersArrayToSend, isCreation) {
        console.groupCollapsed("createMarkersXml()");
        function createGeneralMarkersXml(markerGeneralArraytoSend,
isCreation) {
                var xmlString = "";
                for(i = 0; i < markerGeneralArraytoSend.length; i++) {
                        markerLat        = 
markerGeneralArraytoSend[i].marker.position.lat
();
                        markerLng        = 
markerGeneralArraytoSend[i].marker.position.lng
();
                        markerWindowOpen = 
markerGeneralArraytoSend[i].marker.windowOpen;
                        prettyMarkerText = markerGeneralArraytoSend
[i].infoWindow.get_content();

                        //console.log("i = " + i + " markerLat: " + markerLat);
                        //console.log("i = " + i + " markerLng: " + markerLng);
                        //console.log("i = " + i + " markerWindowOpen: " +
markerWindowOpen);
                        //console.log("i = " + i + " prettyMarkerText: " +
prettyMarkerText);
                        xmlString += "<marker ";
                        if(!isCreation) {
                                xmlString += "id='" + 
markerGeneralArraytoSend[i].marker.id + "'
";
                        }
                        xmlString += "lat='" + markerLat + "' lng='" + 
markerLng + "'
text='" + markdownMarkerText(prettyMarkerText) + "' windowOpen='" +
markerWindowOpen + "'/>";
                }
                return xmlString;
        }
        console.log("isCreation", isCreation);
        var markerGeneralArraytoSend = new Array();
        var markerLat, markerLng, prettyMarkerText, markerWindowOpen;
        var i;
        if(!isCreation) { // for modifiedMarkers
                for(i = 0; i < markersArrayToSend.length; i++) {
                        console.log("markersArrayToSend[" + i + "]", 
markersArrayToSend
[i]);
                        if(typeof(markersArrayToSend[i]) != "undefined") {
                                
markerGeneralArraytoSend.push(markersArrayToSend[i]);
                        }
                }
        } else { // for newMarkers
                markerGeneralArraytoSend = markersArrayToSend;
        }
        console.log("markerGeneralArraytoSend", markerGeneralArraytoSend);
        var xmlString = createGeneralMarkersXml(markerGeneralArraytoSend,
isCreation);
        console.log("xmlString", xmlString);
        console.groupEnd();
        return xmlString;
}

function deleteMarker(obj) {
        console.log("Deleting...");
}

function deleteAllMarkers(forcedAction) {
        var confirmation = true;

        if(!forcedAction)
                confirmation = confirm("Delete all markers?");

        if(confirmation) {
                for(i = 0; i < markersLocal.length; i++) {
                        markersLocal[i].marker.set_map(null);
                        markersLocal[i].infoWindow.close();
                }

                markersLocal.length = 0;
                markersLocalIdentified = 0;
                xmlRequestInfo.mode = "send";
                xmlRequestInfo.clearMarkers = true;
        }
}

function openAllInfoWindows() {
        modifiedMarkerArrayAllInfoWindow(true);
}

function closeAllInfoWindows() {
        modifiedMarkerArrayAllInfoWindow(false);
}

function modifiedMarkerArrayAllInfoWindow(toOpen) {
        modifiedMarkersToSend.length   = 0;

        var i;
        for(i = 0; i < markersLocal.length; i++) {
                var marker     = markersLocal[i].marker;
                var infoWindow = markersLocal[i].infoWindow;
                var isOpen     = marker.windowOpen;
                var markerModified = false;

                if(toOpen && !isOpen) {
                        marker.windowOpen = true;
                        infoWindow.open(map, marker);
                        markerModified = true;
                } else if(!toOpen && isOpen) {
                        marker.windowOpen = false;
                        infoWindow.close();
                        markerModified = true;
                }

                if(markerModified) {
                        modifiedMarkersToSend[marker.id] = {
                                marker: marker,
                                infoWindow: infoWindow
                        };
                        xmlRequestInfo.mode = "send";
                        xmlRequestInfo.modifiedMarkers = true;
                }
        }
}

function eventTilesLoaded() {
        tilesLoadingStatus = "Loading done!";
        debugUpdateTiles();
}

function debugUpdateCenter() {
        document.getElementById("debug_lat").innerHTML = lat;
        document.getElementById("debug_lng").innerHTML = lng;
}

function debugUpdateZoom() {
        document.getElementById("debug_zoom").innerHTML = zoom;
}

function debugUpdateView() {
        document.getElementById("debug_mapType").innerHTML = mapType;
}

function debugUpdateTiles() {
//      document.getElementById("debug_tiles").innerHTML =
tilesLoadingStatus;
}

// function is really buggy and thus currently deactivated
function panTo(map, oldLat, oldLng, lat, lng) {
        function sign(exp) {
                if(exp > 0) return 1;
                if(exp < 0) return -1;
                return 0;
        }

        function distance(lngFrom, lngTo) {
                //convert to 0->360: 0 is the same position
                function convert(lng) {
                        if(lng < 0) lng = 180 + Math.abs(180 + lng);
                        return lng;
                }
                lngFrom = convert(lngFrom);
                lngTo   = convert(lngTo);

                return (lngTo - lngFrom) % 360;
        }

        function panAnimation(map, x, y) {
                map.set_center(new google.maps.LatLng(x[step], y[step]));
                step++;
                setTimeout(function() {panAnimation(map, x, y)}, panTime /
panStepInterval);
        }

        var x = new Array();
        var y = new Array();

        var goEast  = sign(180 - (lng - oldLng) % 360); // thanks Joel!
        var goNorth = sign(lat - oldLat);

        //console.log("goEast: " + goEast);
        //console.log("goNorth: " + goNorth);
        //convert lng to 0->360: 0 is the same position
        //if(oldLng < 0) oldLng = 180 + Math.abs(180 + oldLng);
        //if(lng < 0)    lng    = 180 + Math.abs(180 + lng);

        var lngStep = distance(oldLng, lng) / (panStepInterval);
        var latStep = distance(oldLat, lat) / (panStepInterval);

        var step, value;
        for(step = 0; step <= panStepInterval; step++) {
                lngValue = oldLng + goEast * step * lngStep;
                if(lngValue > 180) lngValue = -180 + lngValue % 180;

                latValue = oldLat + goNorth * step * latStep;

                x[step] = lngValue;
                y[step] = latValue;
        }

        //console.log(x);
        //console.log(y);

        step = 0;
        panAnimation(map, x, y);
}

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Maps API" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/Google-Maps-API?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to