var map = null;
var geocoder = null;

function initMap(idMap) {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById(idMap));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());

        map.setCenter(new GLatLng(41.61099046998975, 0.6187856197357178), 16);

        geocoder = new GClientGeocoder();
    }
}

function showCoords(latitude, longitude, name, desc, icono, zoom, fncDragEnd) {
    point = new GLatLng(latitude, longitude);

    if (fncDragEnd) {
        var marker = createDraggableHtmlMarker(point,name,desc,icono,fncDragEnd);
    } else {
        var marker = createHtmlMarker(point, name, desc, icono);
    }

    map.addOverlay(marker);
    map.setCenter(point, zoom || 14);
}

function showAddress(address, name, desc, icono, err_func, zoom, fncDragEnd, ok_func) {
    geocoder.getLatLng(address, function(point) {
        if (!point) {
            if (err_func) {
                err_func();
            }
        } else {
            if (fncDragEnd) {
                var marker = createDraggableHtmlMarker(point,name,desc,icono,fncDragEnd);
            } else {
                var marker = createHtmlMarker(point, name, desc, icono);
            }

            map.addOverlay(marker);
            map.setCenter(point, zoom || 14);

            if (ok_func) {
                ok_func(point.y, point.x);
            }
        }
    });
}

function createHtmlMarker(point,name,html,icono) {
    icono = icono || G_DEFAULT_ICON;
    var marker = new GMarker(point,{title:name,icon:icono});
    
    if (html) {
        GEvent.addListener(marker, "mouseover", function() {
            marker.openInfoWindowHtml(html);
        });
    }

    return marker;
}

function createDraggableHtmlMarker(point,name,html,icono,fncDragEnd) {
    icono = icono || G_DEFAULT_ICON;
    var marker = new GMarker(point,{title:name,icon:icono,draggable:true});

    if (html) {
        GEvent.addListener(marker, "mouseover", function() {
            marker.openInfoWindowHtml(html);
        });
    }

    GEvent.addListener(marker, "dragend", function() {
        fncDragEnd(marker.getPoint().lat(), marker.getPoint().lng());
    });

    return marker;
}

function createIcon(htmlColor) {
    var icon = new GIcon();

    icon.image = "http://www.gmaplive.com/marker_hex.php?n=21&hex=" + htmlColor; 
    icon.shadow = "http://www.gmaplive.com/pin_shadow.png";
    icon.iconSize = new GSize(16, 28);
    icon.shadowSize = new GSize(40, 28);
    icon.iconAnchor = new GPoint(16, 28);
    icon.infoWindowAnchor = new GPoint(8, 14);
    icon.printImage = "http://www.gmaplive.com/marker_hex.php?n=21&hex=" + htmlColor; 
    icon.mozPrintImage = "http://www.gmaplive.com/marker_hex.php?n=21&hex=" + htmlColor; 
    icon.printShadow = "http://www.gmaplive.com/pin_shadow.png";
    icon.transparent = "http://www.gmaplive.com/marker_hex.php?n=21&hex=" + htmlColor;
    
    return icon;
}
