﻿
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 = (new GIcon(baseIcon, percorsoIconaCampeggio, null, ""));
var iconaPartenza = (new GIcon(baseIcon, percorsoIconaPartenza, null, ""));

var NormalLayer = G_NORMAL_MAP.getTileLayers()[0]
var TerrainLayer = G_PHYSICAL_MAP.getTileLayers()[0]

	


function load() {
	doLoad();
}


function doLoad() {
	if (GBrowserIsCompatible()) {
		container = document.getElementById("mapDiv");
		//resizePage();
		map = new GMap2(container);

		TerrainLayer.getOpacity = function () {return opacity;};
		var layers = [NormalLayer,TerrainLayer];

		directionsInfoDiv = document.getElementById("directions_info");
		direzione = new GDirections();

		map.setCenter(centerPoint, zoom, map.getMapTypes()[mType]);

		map.addControl(new GScaleControl());
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());


		GEvent.addListener(direzione, "load", onDirectionsLoad);
		GEvent.addListener(direzione, "error", onDirectionsError);

		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="sommario">';
	html += '<table cellspacing="0" cellpadding="2" width="100%">';
	html += '<tr><td valign="top">Partenza da: <b>' + startPoint.address + '</b> arrivo a: <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="' + percorsoIconaPartenza + '"></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="' + percorsoIconaCampeggio + '"></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;
	directionsInfoDiv.innerHTML = 'Error: ' + 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 style="width:200px">' + stepDescriptionHTML + '</div>');
	var infoTabs = [tab1];

	map.openInfoWindowTabsHtml(stepLatLng,infoTabs);
	map.setCenter(stepLatLng, 12);
    window.scroll(0,0);

}

function VisualizzaCampeggio()
{
    var tab1 = new GInfoWindowTab("Location", finestrellaCampeggio);
	var infoTabs = [tab1];

    map.openInfoWindowTabsHtml(centerPoint,infoTabs);
}

