
var IE = document.all ? true : false;
var map;
var dettagliPercorso;
var direzione;
var container;
var opacity = 1;
var loading = false;
var saveState = false;
var directionsInfoDiv;
var polyline;
var pLine;
var partenza;
var arrivo;
var pLinePoints = Array();
var midRouteMarkers = Array();

var iconaCampeggio;
var iconaPartenza;
	


function load() {
	doLoad();
	getDirections(); 
}


function doLoad() {
	if (GBrowserIsCompatible()) {
		container = document.getElementById("mapDiv");
		map = new GMap2(container);
        

		directionsInfoDiv = document.getElementById("directions_info");
		direzione = new GDirections();

		map.setCenter(centerPoint, zoom, eval(tipoMappa));
		if(controlli)
		{
            map.addControl(new GMapTypeControl());
		    map.addControl(new GScaleControl());
        }
        
		GEvent.addListener(direzione, "load", onDirectionsLoad);
		GEvent.addListener(direzione, "error", onDirectionsError);
        
        if(SottoMappaPiccola)
        {
		    var ovcontrol = new GOverviewMapControl(new GSize(100,100));
		    map.addControl(ovcontrol);
		}
		
		if(percorsoIconaCampeggio != "")
        {
            iconaCampeggio = (new GIcon(baseIcon, percorsoIconaCampeggio, null, ""));
        }
        else
        {
            iconaCampeggio = new GIcon(G_DEFAULT_ICON);
        }
        
        if(percorsoIconaPartenza)
        {
            iconaPartenza = (new GIcon(baseIcon, percorsoIconaPartenza, null, ""))
        }
        else
        {
            iconaPartenza =  new GIcon(G_DEFAULT_ICON);
        }

		
		var ciccio = oDriveTo.split(",");
		
		var campeggio = new GMarker(new GLatLng(ciccio[0], ciccio[1]),{icon:iconaCampeggio,bouncy:false});
		
		GEvent.addListener(campeggio, "click", function() {
            campeggio.openInfoWindowHtml(finestrellaCampeggio);
        });

	    map.addOverlay(campeggio);

        if(MiniMappeIndicazione)
        {
            var divs = container.getElementsByTagName('div');
            var current = (divs[14].style.display == 'none') ? 'block' : 'none';
            divs[14].style.display = current;
        }
	}
}






function indicateLoading() {
	loading = true;
	displayLoadingMsg();
}

function displayLoadingMsg() {
	var oLMsg = document.getElementById('loadingMessage');
	oLMsg.style.display = '';
	oLMsg.style.left = container.offsetLeft + (container.clientWidth / 2) - (oLMsg.clientWidth / 2) + 'px';
	oLMsg.style.top = container.offsetTop + (container.clientHeight / 2) - (oLMsg.clientHeight / 2) + 'px';
	oLMsg.style.filter="alpha(opacity=70)";

	if (loading){
		var to = window.setTimeout('displayLoadingMsg()',100);
	}
	else {
		oLMsg.style.display = 'none';
	}
}


function unload() {
	doUnload(0);
}

function doUnload(mReset) {
	if (mReset) {
		delCookie('map3');
		saveState = false;
		window.location = window.location.pathname;
	}

	if (saveState) {
		var cookieStr = '';
		var center = map.getCenter();

		cookieStr += 'lat=' + center.lat() + ',';
		cookieStr += 'lon=' + center.lng() + ',';
		cookieStr += 'z=' + map.getZoom() + ',';
		cookieStr += 'mType=' + mType + ',';
		cookieStr += 'mapMode=' + mapMode;

		setCookie('map3', cookieStr, 365);
	}
	GUnload();
}

function rmOverlays() {
	directionsInfoDiv.innerHTML = '';
	map.clearOverlays();
	partenza = null;
	arrivo = null;
}



function getDirections() {
	if(oDriveFrom == null)
	{
	    oDriveFrom = document.getElementById('driveFrom');
	}
	if(directionsInfoDiv != null)
	    directionsInfoDiv.style.display = '';

	var loadStr;

	if (oDriveFrom && oDriveTo) {
		loadStr = 'from:' + oDriveFrom.value;
		loadStr += ' to: ' + oDriveTo;
	}
	if (loadStr) {
		indicateLoading();
		direzione.load(loadStr,{locale:lingua,getPolyline:true,getSteps:true});
	}

}




function onDirectionsLoad() {
	var html = '';
	var status = direzione.getStatus();
	var bounds = direzione.getBounds();


	map.clearOverlays();

	var copyrightHTML = direzione.getCopyrightsHtml();
	var summaryHTML = direzione.getSummaryHtml();
	var distance = direzione.getDistance();
	var duration = direzione.getDuration();
	var numRoutes = direzione.getNumRoutes();
	//var oDriveFrom = document.getElementById('driveFrom');
	var oDriveTo = document.getElementById('driveTo');
	var startLatLng = direzione.getRoute(0).getStep(0).getLatLng();
	var endLatLng = direzione.getRoute(numRoutes-1).getEndLatLng();

	polyline = direzione.getPolyline();
	pLine = copyPolyline(polyline);
	map.addOverlay(polyline);

	var numGeoCodes = direzione.getNumGeocodes();
	var startPoint = direzione.getGeocode(0);
	var endPoint = direzione.getGeocode(numGeoCodes-1);
	//addDragMarker(startPoint);
	
	if (partenza) {
		var clickStartPoint = partenza.getPoint();
		if (clickStartPoint.distanceFrom(startLatLng) > 0) {
			html += 'WARNING: The route starts some distance away from the point clicked.<br>';
		}
	}

	if (arrivo) {
		var clickEndPoint = arrivo.getPoint();
		if (clickEndPoint.distanceFrom(endLatLng) > 0) {
			html += 'WARNING: The route ends some distance away from the point clicked.<br>';
		}
	}

	var markerPartenza = new GMarker(endLatLng,{icon:iconaCampeggio,bouncy:false});
	markerPartenza.formField = oDriveTo;
	GEvent.addListener(markerPartenza, "click", function() {
        markerPartenza.openInfoWindowHtml(finestrellaCampeggio);
    });
	map.addOverlay(markerPartenza);

	var markerArrivo = new GMarker(startLatLng,{icon:iconaPartenza,bouncy:false});
	markerArrivo.formField = oDriveFrom;
	map.addOverlay(markerArrivo);

    // dettagli percorso
    
    if (directionsInfoDiv != null)
    {

	    html += '<div class="SommarioPercorso">';
	    html += '<table cellspacing="0" cellpadding="2" width="100%">';
	    if(MiniMappeIndicazione)
	    {
	        html += '<tr><td style="text-align:center; background-color:#dddddd"><table class="MenuSommario" cellpadding="2" cellspacing="3" align="right"><tr><td style=" background-color:white; border: 1px solid #bbbbbb"><a onclick="javascript:VisualizzaTutteMinimappe()" class="TastoMinimappa">' + TastoVisualizzaTutteMappe + '</a></td>' + 
	                '<td style=" background-color:white; border: 1px solid #bbbbbb"><a onclick="javascript:NascondiTutteMinimappe()" class="TastoMinimappa">' + TastoNascondiTutteMappe + '</a></td>' + 
	                '<td style=" background-color:white; border: 1px solid #bbbbbb"><a onclick="javascript:Stampa()" class="TastoMinimappa">' + TastoStampa + '</a></td></tr></table></td></tr>';
	    }           
	    html += '<tr><td valign="top"> <b>' + startPoint.address + '</b> -> <b>' + nomeCampeggio + '</b></td></tr>';
	    html += '<tr><td valign="top"> '+summaryHTML+'</td></tr>';
	    html += '</table></div>';
    	
    	
	    for (var r = 0 ; r < numRoutes ; r++ ) {
		    var route = direzione.getRoute(r);
		    var startGeoCode = direzione.getGeocode(r);//route.getStartGeocode();
		    var endGeoCode = direzione.getGeocode(r+1);//route.getEndGeocode();
		    var endLatLng = route.getEndLatLng();
		    var routeSummaryHTML = route.getSummaryHtml();
		    var routeDistance = route.getDistance();
		    var routeDuration = route.getDuration();

		    var numSteps = route.getNumSteps();
		    html += '<table cellspacing="0" cellpadding="0" id="routeTable_'+r+'" width="100%">';
            html += '<tr style="cursor:pointer" onclick="showStep('+r+',0)"><td class="StepPercorso" style="text-align:center"><img src="' + iconaPartenza.image + '"></td><td class="StepPercorso" valign="middle">' + startPoint.address + '</td><td class="StepPercorso">&nbsp;</td></tr>';
            
		    for (var s = 0 ; s < numSteps ; s++ ) {
			    var step = route.getStep(s);
			    var stepLatLng = step.getLatLng();
			    bounds.extend(stepLatLng);

			    var stepPolylineIndex = step.getPolylineIndex();
			    var stepDescriptionHTML = step.getDescriptionHtml();
			    var stepDistance = step.getDistance();
			    var stepDuration = step.getDuration();
			    var sfondoAlternato = "";
			    if((s % 2) == 1)
			    {
			        sfondoAlternato = "background-color: #dddddd;";
			    }
			    if(!MiniMappeIndicazione)
			        html += '<tr style="' + sfondoAlternato + 'cursor:pointer" onclick="showStep('+r+','+s+')"><td  class="StepPercorso" style="text-align:center">' + (s+1) + '.</td><td class="StepPercorso"> ' + stepDescriptionHTML + '</td><td class="StepPercorso">' + stepDistance.html + '</td><td></td></tr>';
			    else
			    {
			        html += '<tr style="' + sfondoAlternato + '"><td  class="StepPercorso" style="text-align:center">' + (s+1) + '.</td><td class="StepPercorso"> ' + stepDescriptionHTML + '</td><td class="StepPercorso">' + stepDistance.html + '</td><td style="text-align:center">' + 
			        '<iframe id="dettagliPercorso' + s + '" frameborder="0" style="width:200px;height:150px;border:1px solid gray; display:none" src=""></iframe><a id="VisualizzaMinimappa' + s + '" onclick="javascript:VisualizzaMinimappa(\'' + s + '\')" class="TastoMinimappa">' + TastoVisualizzaMappa + '</a>' + 
			        '<a id="NascondiMinimappa' + s + '" style="display:none" onclick="javascript:NascondiMinimappa(\'' + s + '\')" class="TastoMinimappa">' + TastoNascondiMappa + '</a></td></tr>';
			    }
		    }
		    html += '<tr style="cursor:pointer" onclick="VisualizzaCampeggio()"><td class="StepPercorso" style="text-align:center"><img src="' + iconaCampeggio.image + '"></td><td class="StepPercorso" valign="middle">' + nomeCampeggio + '</td><td class="StepPercorso">&nbsp;</td></tr>';
		    html += '</table>';
	    }
	    directionsInfoDiv.innerHTML = html;
	    if(document.getElementById("PercorsoPerStampa") != null)
	    {
	        document.getElementById("PercorsoPerStampa").innerHTML=html;
	    }
	    
	    map.setCenter(bounds.getCenter(map), map.getBoundsZoomLevel(bounds)); 
	}
	
	loading = false;
}

function VisualizzaMinimappa(codice)
{
    document.getElementById("VisualizzaMinimappa" + codice).style.display="none";
    document.getElementById("NascondiMinimappa" + codice).style.display="block";
    var dMapDiv = document.getElementById("dettagliPercorso" + codice);
    if(!(dMapDiv.src.indexOf("minimappa.aspx") > 0))
    {
    //var oDriveFrom = document.getElementById('driveFrom');
    var step = direzione.getRoute(0).getStep(codice);
    var stepLatLng = step.getLatLng();
    dMapDiv.src = "/minimappa.aspx?lat=" + stepLatLng.lat() + "&lon=" + stepLatLng.lng() + "&latcamp=" + centerPoint.lat() + "&loncamp=" + centerPoint.lng() + "&partenza=" +  oDriveFrom.value;
    }
    dMapDiv.style.display = "";
}

function NascondiTutteMinimappe()
{
    for (var n = 0; n < direzione.getRoute(0).getNumSteps(); n++)
    {
        NascondiMinimappa(n);
    }
}

function NascondiMinimappa(codice)
{
    document.getElementById("VisualizzaMinimappa" + codice).style.display = "block";
    document.getElementById("NascondiMinimappa" + codice).style.display = "none";
    document.getElementById("dettagliPercorso" + codice).style.display = "none";
}

function VisualizzaTutteMinimappe()
{
    for (var n = 0; n < direzione.getRoute(0).getNumSteps(); n++)
    {
        VisualizzaMinimappa(n);
    }
}

function Stampa()
{
    self.print();
}

function copyPolyline(p) {
	pLinePoints = Array();
	for (var n = 0 ; n < p.getVertexCount() ; n++ ) {
		pLinePoints.push(p.getVertex(n));

	}
	var pLine = new GPolyline(pLinePoints,'#F7098A');
	return pLine;
}


function onDirectionsError() {
	loading = false;
	   if (direzione.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
	   {
	     directionsInfoDiv.innerHTML = "<table align='center' style='color:red; font-weight:bold; font-size:14px'><tr><td>" + localitaNonTrovata + "</td></tr></table>";
	     map.clearOverlays();
	   }
	   else if (direzione.getStatus().code == G_GEO_SERVER_ERROR)
	     alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + direzione.getStatus().code);
	   
	   else if (direzione.getStatus().code == G_GEO_MISSING_QUERY)
	     alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + direzione.getStatus().code);

	   else if (direzione.getStatus().code == G_GEO_UNKNOWN_ADDRESS)  // Doc bug... this is either not defined, or Doc is wrong
	     alert(localitaNonTrovata);
	     
	   else if (direzione.getStatus().code == G_GEO_BAD_KEY)
	     alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + direzione.getStatus().code);

	   else if (direzione.getStatus().code == G_GEO_BAD_REQUEST)
	     alert("A directions request could not be successfully parsed.\n Error code: " + direzione.getStatus().code);
	   
}

function toggleSteps(routeNo) {
	oRouteTable = document.getElementById('routeTable_' + routeNo);
	oRouteTable.style.display = oRouteTable.style.display == 'none' ? '' : 'none';
}

function showStep(r,s) {
	map.closeInfoWindow();
	var step = direzione.getRoute(r).getStep(s);
	var stepLatLng = step.getLatLng();
	var stepDescriptionHTML = step.getDescriptionHtml();
	var stepDistance = step.getDistance();
	var stepDuration = step.getDuration();


	var tab1 = new GInfoWindowTab("Location", '<div id="dettagliPercorso" style="width:250px;height:150px;border:1px solid gray;"></div>');
	var infoTabs = [tab1];

	map.openInfoWindowTabsHtml(stepLatLng,infoTabs);

	var dMapDiv = document.getElementById("dettagliPercorso");
	dettagliPercorso = new GMap2(dMapDiv);
	dettagliPercorso.setCenter(stepLatLng,15);

	dettagliPercorso.addOverlay(pLine);

	dettagliPercorso.addControl(new GSmallMapControl());
    window.scroll(0, container.offsetTop);

}

function VisualizzaCampeggio()
{
    var tab1 = new GInfoWindowTab("Location", finestrellaCampeggio);
	var infoTabs = [tab1];

    map.openInfoWindowTabsHtml(centerPoint,infoTabs);
    window.scroll(0, container.offsetTop);
}

