var map;
var geocoder;
var marker=new Array();
var firstpoint;

function showAddress(tappa,pos,macro) {
    var icon = new GIcon();
    icon.iconSize = new GSize(32, 32);
    icon.shadowSize = new GSize(48, 32);
    icon.iconAnchor = new GPoint(25, 10);
    icon.infoWindowAnchor = new GPoint(20, 1);
    icon.shadow = "i/maps/ombra.png";
            
    var point = new GLatLng(parseFloat(tappa[pos].getAttribute("lat")),
        parseFloat(tappa[pos].getAttribute("lng")));
    if(pos==0){
        if(macro=="3")
            icon.image = "i/maps/archeo/inizio.png";
        else if (macro=="4")
            icon.image = "i/maps/proposte/inizio.png";
        else if(macro=="5")
            icon.image = "i/maps/sogni/inizio.png";
        firstpoint=point;
        oldlat=point.lat();
        oldlng=point.lng();
    }
    else if(pos==(tappa.length-1)){
        if(macro=="3")
            icon.image = "i/maps/archeo/fine.png";
        else if (macro=="4")
            icon.image = "i/maps/proposte/fine.png";
        else if(macro=="5")
            icon.image = "i/maps/sogni/fine.png";
    }
    else{
        if(macro=="3")
            icon.image = "i/maps/archeo/"+(pos+1)+".png";
        else if (macro=="4")
            icon.image = "i/maps/proposte/"+(pos+1)+".png";
        else if(macro=="5")
            icon.image = "i/maps/sogni/"+(pos+1)+".png";
    }
    if(pos!=0){
        for(k=0;k<pos;k++){
            if((marker[k].getLatLng().lat()==point.lat()) && (marker[k].getLatLng().lng()==point.lng())){
                point= new GLatLng(point.lat()+0.01,point.lng()+0.01);
            }
        }
    }

    polyline = new GPolyline([
        new GLatLng(oldlat,oldlng),
        new GLatLng(point.lat(), point.lng())
        ], "#000000", 8);
        
    oldlat=point.lat();
    oldlng=point.lng();

    marker[pos] = new GMarker(point,icon);
    map.setCenter(firstpoint, 6);

    GEvent.addListener(marker[pos], "click", function() {
        if(tappa[pos].getAttribute("foto")!="")
            marker[pos].openExtInfoWindow(map,'viaggio_marker',"<div><img src=_files/viaggi/itinerari/t1_"+tappa[pos].getAttribute("foto")+" /><b>"+tappa[pos].getAttribute("titolo")+"</b><br>"+tappa[pos].getAttribute("testo")+"</div>");
        else marker[pos].openExtInfoWindow(map,'viaggio_marker',"<div><b>"+tappa[pos].getAttribute("titolo")+"</b><br>"+tappa[pos].getAttribute("testo")+"</div>");
    });
                        
    map.addOverlay(polyline);
    map.addOverlay(marker[pos]);
    
}


function load(id_viaggio) {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        filexml="data.php?viaggio="+id_viaggio;
        GDownloadUrl(filexml, function(data, responseCode) {
            // To ensure against HTTP errors that result in null or bad data,
            // always check status code is equal to 200 before processing the data
           
            if(responseCode == 200) {
                var xml = GXml.parse(data);
                var viaggi = xml.getElementsByTagName("viaggio");
                for (var i = 0; i < viaggi.length; i++) {
                    if(viaggi[i].getAttribute("id")==id_viaggio){
                        var macro=viaggi[i].getAttribute("macro");
                        var tappa = viaggi[i].getElementsByTagName("tappa");
                        for(var j=0; j<tappa.length; j++){
                            showAddress(tappa,j,macro);
                        }
                    }
                }
            }
            else if(responseCode == -1) {
                alert("Data request timed out. Please try later.");
            } else {
                alert("Request resulted in error. Check XML file is retrievable.");
            }
        });
    }
}

function setZoom(zoom){
    var actual_zoom = map.getZoom();

    switch (zoom){
        case '+':
            map.setZoom(actual_zoom+1);
            break;

        case '-':
            map.setZoom(actual_zoom-1);
            break;
        case '1':
            map.setZoom(1);
            break;
        default:
            break;
    }
}
function setMapType(type){
    map.setMapType(type);
}
