/**************** MAPS ***********************/
var map = null;
var geocoder = null;
var baseIcon = new GIcon(G_DEFAULT_ICON);
var paris = new GLatLng(48.853251, 2.348456);
var popUps = new Array();
var global_counter = 0;
var geoExpression = /(-?\d+\.\d+) ((-?\d+\.\d+))/;
var latlngbounds;


function initialize(x, y, div) {
    if (GBrowserIsCompatible()) {
    	latlngbounds = new GLatLngBounds( );
    	if (typeof div === 'undefined') div = "map_canvas";
        map = new GMap2(document.getElementById(div));
        if (typeof x === 'undefined' && typeof y === 'undefined') map.setCenter(paris, 12);
        else map.setCenter(new GLatLng(x, y), 12);
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
    
           baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
        baseIcon.iconSize = new GSize(20, 34);
        baseIcon.shadowSize = new GSize(37, 34);
        baseIcon.iconAnchor = new GPoint(9, 34);
        baseIcon.infoWindowAnchor = new GPoint(9, 2);
    
    geocoder = new GClientGeocoder();
    }
}

function showAddress(point, address, name, horaire, entree, letter) {
    var marker;

    if (point) {
        marker = createMarker(point, address, name, horaire, entree, letter);
        map.addOverlay(marker);
    }
}


function createMarker(point, address, name, horaire, entree, letter) {
    var letteredIcon = new GIcon(baseIcon);
    letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
    
    // Set up our GMarkerOptions object
	markerOptions = { icon:letteredIcon, title:name};

    var marker = new GMarker(point, markerOptions);
    popUps[letter] = function() {
    	htmlcode = "<b>" + name + "</b><br>" + "<i>" + address + "</i> -<br>" + horaire;
    	if (entree != "") htmlcode +=  "<br>Entrée : " + entree;
        marker.openInfoWindowHtml(htmlcode);
    };
    GEvent.addListener(marker, "click", popUps[letter]);
    return marker;
}
 
function factory(title, address, dateString, geolocation, price, letter) {
   
    var geoExpression = /(-?\d+\.\d+) ((-?\d+\.\d+))/;
    var latLng;
    if (geolocation) { // the event HAS geoLocalisation already there (x y form)
        geoExpression.exec(geolocation);
        x = RegExp.$1;
        y = RegExp.$2;
        point = new GLatLng(x, y);
        recenter_map(point);
        showAddress(point, address, title, dateString, price, letter);
    }
    else {
        if (geocoder) geocoder.getLatLng(address, function(point) {
            if (!point) {
                alert(address + " n'est pas une adresse valide");
            } else {
                recenter_map(point);
                showAddress(point, address, title, dateString, price, letter);               
            }
        });
    }  
   
}

function recenter_map(point) {
    latlngbounds.extend(point);
    map.setCenter( latlngbounds.getCenter( ), map.getBoundsZoomLevel( latlngbounds ) );
    if (map.getZoom() > 12) map.setZoom(12);
}
