
var map;
var geocoder;
var baseIcon = new GIcon(G_DEFAULT_ICON);
baseIcon.shadow = "http://uifi.es/images/spot.32.s.png";
baseIcon.iconSize = new GSize(32, 32);
baseIcon.shadowSize = new GSize(48, 27);

var spotIcon = new GIcon(baseIcon);
spotIcon.image = "http://uifi.es/images/spot.32.png";

function initCleanMap(container, lat, lon) {
    if (GBrowserIsCompatible()) {
        var p = new GLatLng(lat, lon);
        map = new GMap2(document.getElementById(container));
        geocoder = new GClientGeocoder();
        map.setCenter(p, 9);
        map.setUIToDefault();
    }
}
/*
 *
 *
 */
function initMap(container, lat, lon, searchUrlPrefix) {
    initCleanMap(container, lat, lon);
    var searchUrl = searchUrlPrefix + "lat=" +lat + "&lon=" + lon;
    searchLocationsNear(searchUrl);
}
/*
 *
 *
 */
function createMarker(point, name, details, id) {
    var marker = new GMarker(point,{
        icon:spotIcon
    });
    var html = '<b>' + name + '</b> <br/>' + details;
    var infoUrl = '/wifiSpot/show/' + id;
    html += '<br /><a href="' + infoUrl + '">[+]</a>';
    GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
    });
    return marker;
}

/*
 *
 * 
 */
function searchLocationsNear(searchUrl) {    
    GDownloadUrl(searchUrl, function(data) {
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName('marker');
        map.clearOverlays();
        var bounds = new GLatLngBounds();
        for (var i = 0; i < markers.length; i++) {
            var id = markers[i].getAttribute('id');
            var name = markers[i].getAttribute('name');
            var details = markers[i].getAttribute('details');
            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, details, id);
            map.addOverlay(marker);            
            bounds.extend(point);
        }
        map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
    });

}
function centerMap(address){
    //alert("centrando: " + address);
    geocoder.getLatLng(
        address,
        function(point) {
            if (!point) {
            //alert(address + " not found");
            } else {
                return point;
                map.setCenter(point, 13);
                var marker = new GMarker(point);
                map.addOverlay(marker);
                marker.openInfoWindowHtml(address);
            }
        }
        );
}
