﻿//save the existing assignment, if any
var gmap_tmpOnload = window.onload;

//now append init to the onload event.
window.onload = function() {
    //call the existing function
    if (gmap_tmpOnload != null && typeof (gmap_tmpOnload) == 'function') {
        gmap_tmpOnload();
    }
    //now call init
    googleMapLoad();
};

//save the existing assignment, if any
var gmap_tmpUnload = window.onunload;

//now append init to the onload event.
window.onunload = function() {
    //call the existing function
    if (gmap_tmpUnload != null && typeof (gmap_tmpUnload) == 'function') {
        gmap_tmpUnload();
    }
    //now call init
    GUnload();
};

var addresses = allAddress.split('`');
var points = allPoints.split('`');
var cities = allCities.split('`');

var map;
var icon;

function googleMapLoad() {
    var locations = document.getElementById("googlemaplocations");
    locations.innerHTML = "";

    if (GBrowserIsCompatible()) {
        icon = new GIcon();
        icon.image = "/Global/GoogleMap/images/pin.png";
        icon.shadow = "/Global/GoogleMap/images/pin_shadow.png";
        icon.iconSize = new GSize(20, 20);
        icon.shadowSize = new GSize(28, 20);
        icon.iconAnchor = new GPoint(10, 18);
        icon.infoWindowAnchor = new GPoint(13, 5);

        map = new GMap2(document.getElementById("googlemap"));
        map.addControl(new GMenuMapTypeControl());
        map.addControl(new GLargeMapControl3D());
        map.enableContinuousZoom();

        var minLat;
        var maxLat;
        var minLong;
        var maxLong;

        var locString = "";

        for (var i = 0; i < points.length; i++) {
            var coord = points[i].split(',');
            var lat = parseFloat(coord[0]);
            var lon = parseFloat(coord[1]);

            var point = new GLatLng(lat, lon);

            if (points.length > 1)
                locString += "<a href='#' onclick='moveMap(" + i + "); return false'>" + cities[i] + "<\/a> | ";

            if (lat < minLat || minLat == null)
                minLat = lat;
            if (lat > maxLat || maxLat == null)
                maxLat = lat;
            if (lon < minLong || minLong == null)
                minLong = lon;
            if (lon > maxLong || maxLong == null)
                maxLong = lon;

            map.setCenter(point, 13);

            map.addOverlay(createMarker(point, i));
        }

        if (points.length > 1) {
            locString = locString.substring(0, locString.lastIndexOf('|') - 1) + "<br /><br />";
            locations.innerHTML = locString;
        }

        moveMap(defaultID);
    }
}

function createMarker(point, i) {
    var marker = new GMarker(point, icon);
    GEvent.addListener(marker, "click", function() { moveMap(i); });
    return marker;
}

function moveMap(i) {
    var coord = points[i].split(',');
    var lat = parseFloat(coord[0]);
    var lon = parseFloat(coord[1]);

    var point = new GLatLng(lat, lon);

    map.panTo(point);
    map.openInfoWindowHtml(point,
		"<h2>" + agency + "<\/h2>" +
		addresses[i] + "<br />" +
		"<form action='#' onsubmit=\"getDir(document.getElementById('txtAddress" + i + "').value,'" + addresses[i].replace("<br />", " ") + "'," + i + "); return false;\"> " +
		"Enter your address or zip to get driving directions.<br />" +
		"<input type='text' id='txtAddress" + i + "'/>&nbsp;" +
		"<input type='submit' value='Go' />" +
		"<\/form>"
	);

    setTimeout("try { document.getElementById('txtAddress" + i + "').focus(); } catch(e) {}", 500);
}

var dir;
function getDir(from, to, i) {
    document.getElementById("googlemapdirections").innerHTML = "<br />Loading directions, please wait...";

    if (dir == null) {
        dir = new GDirections(map, document.getElementById("googlemapdirections"));
    }

    var err = GEvent.addListener(dir, "error",
		function() {
		    //this function was firing constantly so remove the listener
		    GEvent.removeListener(err);
		    if (i != -1) {
		        getDir(from, points[i], -1);
		    }
		    else {
		        document.getElementById("googlemapdirections").innerHTML =
					"<br />Sorry, unable to load directions.  Please try a different address.";
		    }
		}
	);

    GEvent.addListener(dir, "load",
		function() {
		    document.getElementById("googlemapdirections").innerHTML = "";
		    map.closeInfoWindow();
		}
	);

    dir.load("from: " + from + " to: " + to);
}