
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();
}


function doLoad() {
	if (GBrowserIsCompatible()) {
		container = document.getElementById("mapDiv");
		map = new GMap2(container);


		directionsInfoDiv = document.getElementById("directions_info");
		direzione = new GDirections();

		map.setCenter(centerPoint, zoom);

		map.addControl(new GScaleControl());

		GEvent.addListener(direzione, "load", onDirectionsLoad);
		GEvent.addListener(direzione, "error", onDirectionsError);

        // imposto le icone
        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 ovcontrol = new GOverviewMapControl(new GSize(100,100));
		map.addControl(ovcontrol);
		var ov_map = ovcontrol.getOverviewMap();
		
		var campeggio = new GMarker(centerPoint,{icon:iconaCampeggio,bouncy:false});

		GEvent.addListener(campeggio, "click", function() {
            campeggio.openInfoWindowHtml(finestrellaCampeggio);
        });

	    map.addOverlay(campeggio);

	}
}






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() {
	var oDriveFrom = document.getElementById('driveFrom').value ;

	directionsInfoDiv.style.display = '';

	var loadStr;

	if (oDriveFrom && oDriveTo) {
		loadStr = 'from:' + oDriveFrom;
		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);


	html += '<div class="SommarioPercorso">';
	html += '<table cellspacing="0" cellpadding="2" width="100%">';
	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;";
			}
			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></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;
	loading = false;

	map.setCenter(bounds.getCenter(map), map.getBoundsZoomLevel(bounds)); 
}


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 = "<span style='color:red'>" + localitaNonTrovata + "</span>";
	   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 (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
	//     alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);
	     
	   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);
	    
	   else alert("An unknown error occurred.");
	   
}

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(container.offsetTop,0);

}

function VisualizzaCampeggio()
{
    var tab1 = new GInfoWindowTab("Location", finestrellaCampeggio);
	var infoTabs = [tab1];

    map.openInfoWindowTabsHtml(centerPoint,infoTabs);
    window.scroll(container.offsetTop,0);
}
