﻿////////////////////////////////////////////////////////////////////
// GOOGLE MAPS
////////////////////////////////////////////////////////////////////

var map = null;

function isPrintView() {
    var div = document.getElementById("printwrapper");
    return div != null;
}

function initGoogleMap(map_div) {
    if (GBrowserIsCompatible()) {
        var div = document.getElementById(map_div);
        if (div != null) {
            map = new GMap2(div);
            //map.setCenter(new GLatLng(38.5070010, -95.6379010), 4);
            map.enableScrollWheelZoom();

            if (!isPrintView()) {
                map.addControl(new GLargeMapControl());
                map.addControl(new GMapTypeControl());
                map.enableInfoWindow();
            }
        }
    }
}

function getLocations(searchUrl) {
    if (map != null) {
        map.clearOverlays();
        GDownloadUrl(searchUrl, function(data, responseCode) { populateMap(data, responseCode); });
    }
}

function populateMap(data, responseCode) {
    if (responseCode == 200) {
        var locations = getLocationsFromXML(data);
        var entries = getEntriesFromLocations(locations);

        if (entries.length > 0) {   // Results were found            
            var bounds = new GLatLngBounds();

            for (var i in entries) {
                var entry = entries[i];
                var marker = entry.marker;

                // Update bounds
                bounds.extend(marker.getLatLng());
                // Add marker to map
                map.addOverlay(marker);
            }
            map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
        }
        else {
            map.setCenter(new GLatLng(38.5070010, -95.6379010), 3);
        }

        if (typeof onMapLoadComplete == 'function') {
            onMapLoadComplete();
        }
    }
}

function getEntriesFromLocations(locations) {
    var entries = new Array();

    for (var i = 0; i < locations.length; i++) {
        var id = locations[i].getAttribute('id');
        var name = locations[i].getAttribute('name');
        var address = locations[i].getAttribute('address');
        var city = locations[i].getAttribute('city');
        var state = locations[i].getAttribute('state');
        var zip = locations[i].getAttribute('zip');
        var phone = locations[i].getAttribute('phone');
        var distance = parseFloat(locations[i].getAttribute('distance'));
        var icon = locations[i].getAttribute('icon');
        var email = locations[i].getAttribute('email');
        var latitude = parseFloat(locations[i].getAttribute('latitude'));
        var longitude = parseFloat(locations[i].getAttribute('longitude'));
        var teaser = locations[i].getAttribute('teaser');

        var point = new GLatLng(latitude, longitude);
        var marker = createMarker(point, id, name, icon, address, city, state, zip, phone, email, teaser);


        var entry = new Object();
        entry.marker = marker;

        entries.push(entry);
    }

    return entries;
}

function getLocationsFromXML(data) {
    var xml = GXml.parse(data);
    return xml.documentElement.getElementsByTagName('location');
}

function createMarker(point, id, name, icon, address, city, state, zip, phone, email, teaser) {   // Create our custom marker
    var markerIcon = new GIcon();
    if (icon != null) {
        markerIcon.image = icon;
        markerIcon.printImage = icon;
        markerIcon.mozPrintImage = icon;
    }

    markerIcon.iconSize = new GSize(35, 44);
    markerIcon.iconAnchor = new GPoint(8, 23);
    markerIcon.infoWindowAnchor = new GPoint(8, 23);
    markerIcon.shadow =  '/Images/map/shadow.png';
    markerIcon.shadowSize = new GSize(27, 23);
    markerIcon.shadowAnchor = new GPoint(10, 23);

    var markerOptions = { icon: markerIcon, title: name };
    //var markerOptions = {  title: name };
    
    var marker = new GMarker(point, markerOptions);

    if (!isPrintView()) {
        // create balloon info
        var balloonInfo = createMarkerBalloonInfo(id, name, icon, address, city, state, zip, phone, email, teaser);

        var div = document.getElementById("sidebar." + id);
        if (div != null) {
            // Link div click event to marker        
            GEvent.addDomListener(div, 'click', function() { GEvent.trigger(marker, 'click'); });

            // Add balloon info to marker            
            GEvent.addListener(marker, 'click', function() { marker.openInfoWindow(balloonInfo); div.scrollIntoView(true) });
        }
        else {
            GEvent.addListener(marker, 'click', function() { marker.openInfoWindow(balloonInfo); });
        }
    }

    return marker;
}

function createMarkerBalloonInfo(id, name, icon, address, city, state, zip, phone, email, teaser) {   // Create marker balloon info

    // retrieve the div containing item template
    var templateDiv = document.getElementById("balloonInfoTemplate");
    var template = templateDiv.innerHTML;

    // perform replacements on template
    template = template.replace("{id}", id);
    template = template.replace("{name}", name);
    template = template.replace("{address}", address);
    template = template.replace("{city}", city);
    template = template.replace("{state}", state);
    template = template.replace("{zip}", zip);
    template = template.replace("{phone}", phone);
    template = template.replace("{link}", "<a href='LocationDetail.aspx?id=" + id + "'>Select This Location</a>");
    template = template.replace("{email}", email);
    template = template.replace("{teaser}", teaser);
    var div = document.createElement("div");
    div.innerHTML = template;
    return div;
}

function notAuthenticated(url) {
    var parent = window;
    while (parent.opener != null) {
        parent.close();
        parent = parent.opener;
    }
    parent.refreshPage(url);
}