//<![CDATA[
var map;
var geocoder;
    
function load() {
    if (GBrowserIsCompatible()) {
        geocoder = new GClientGeocoder();
        map = new GMap2(document.getElementById('map'));
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(40, -100), 4);
    }          
}

function searchLocationsFromPod(addressOrZip) {
    geocoder.getLatLng(addressOrZip, function(latlng) {
        if (!latlng) {
            alert(addressOrZip + ' not found');
        } else {
            searchLocationsNear(latlng);
        }
    });
}

function searchLocations() {
    var address = document.getElementById('addressInput').value;
    geocoder.getLatLng(address, function(latlng) {
        if (!latlng) {
            alert(address + ' not found');
        } else {
            searchLocationsNear(latlng);
        }
    });
}

function appendSidebarFooter(sidebarId) {
    if (!(typeof window.sidebarFooter === 'undefined')) {
        $('#' + sidebarId).append(window.sidebarFooter);
    }
    return true;
}
    
function searchLocationsNear(center) {
    var radius = document.getElementById('radiusSelect').value;         
    var searchUrl = 'get-markers.cfm?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
    // debugging
    //wd('searchUrl: ' + searchUrl);         
    GDownloadUrl(searchUrl, function(data) {
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName('marker');
        debugMarkers = markers;
        map.clearOverlays();
        
        var sidebar = document.getElementById('sidebar');
        sidebar.innerHTML = '';
            if (markers.length == 0) {
            sidebar.innerHTML = 'No results found.';
            map.setCenter(new GLatLng(40, -100), 4);
            return;
        }
        
        var bounds = new GLatLngBounds();
        for (var i = 0; i < markers.length; i++) {
            var name = markers[i].getAttribute('name');
            var streetAddressOne = markers[i].getAttribute('streetAddressOne');
            var streetAddressTwo = markers[i].getAttribute('streetAddressTwo');
            var cityName = markers[i].getAttribute('cityName');
            var state = markers[i].getAttribute('state');
            var postalCode = markers[i].getAttribute('postalCode');
            var phoneNumber = markers[i].getAttribute('phoneNumber');
            var emailAddress = markers[i].getAttribute('emailAddress');
            var url = markers[i].getAttribute('url');
            var storeHours = markers[i].getAttribute('storeHours');
            var distance = parseFloat(markers[i].getAttribute('distance'));
            var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
            parseFloat(markers[i].getAttribute('lng')));
            var marker = createMarker(point, name, streetAddressOne, streetAddressTwo, cityName, state, postalCode, phoneNumber, url);
            map.addOverlay(marker);
            var sidebarEntry = createSidebarEntry(marker, distance, name, streetAddressOne, streetAddressTwo, cityName, state, postalCode, phoneNumber, emailAddress, url, storeHours);
            sidebar.appendChild(sidebarEntry);
            bounds.extend(point);
        }
        appendSidebarFooter('sidebar');
        map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
    });
}
    
function createMarker(point, name, streetAddressOne, streetAddressTwo, cityName, state, postalCode, phoneNumber, url) {
    var marker = new GMarker(point);
    var html = '<b>' + name + '</b> <br/>';
    html = html + streetAddressOne + '<br/>';
    if (streetAddressTwo != '') {
        html = html + streetAddressTwo + '<br/>';            
    }
    html = html + cityName + ', ' + state + ' ' + postalCode + '<br/>';
    if (phoneNumber != '') {
        html = html + phoneNumber + '<br/>';
    }
    if (url != '') {
        html = html + '<a href=\"' + url + '\">' + url + '</a><br/>';
    }
    GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
    });
    return marker;
}
    
function createSidebarEntry(marker, distance, name, streetAddressOne, streetAddressTwo, cityName, state, postalCode, phoneNumber, emailAddress, url, storeHours) {
    var div = document.createElement('div');
    var html = '<b>' + name + '</b> (' + distance.toFixed(1) + ' miles)<br/>';
    html = html + streetAddressOne + '<br/>';
    if (streetAddressTwo != '') {
        html = html + streetAddressTwo + '<br/>';            
    }
    html = html + cityName + ', ' + state + ' ' + postalCode + '<br/>';
    if (storeHours != '') {
        html = html + 'Store Hours: ' + storeHours + '<br/>';
    }
    if (phoneNumber != '') {
        html = html + phoneNumber + '<br/>';
    }
    if (emailAddress != '') {
        html = html + '<a href=\"mailto:' + emailAddress + '\">' + emailAddress + '</a><br/>';
    }
    if (url != '') {
        html = html + '<a href=\"' + url + '\">' + url + '</a><br/>';
    }
    
    div.innerHTML = html;
    div.style.cursor = 'pointer';
    div.style.marginBottom = '20px'; 
    GEvent.addDomListener(div, 'click', function() {
        GEvent.trigger(marker, 'click');
    });
    GEvent.addDomListener(div, 'mouseover', function() {
        div.style.backgroundColor = '#eee';
    });
    GEvent.addDomListener(div, 'mouseout', function() {
        div.style.backgroundColor = '#fff';
    });
    return div;
}
//]]>