var existingMarkers = {};
var existingLine = {};
var length = {};
var marker_Target = null;
var indiciNodi = new Array();
var points = new Array();
function showAddress(address,lat,lng,zoom) {
	if (tipoRicerca == 1) {
		var lat = lat*1;
		var lng = lng*1;
		var point = new GLatLng(lat,lng);
		if (pg == "smoothspectraprogetto_ntc" || pg == "smoothspectra_ntc") main1(point,zoom);
		if (pg == "shc" || pg == "spectra"  || pg == "sh") main2(point,zoom);
		}
      if (geocoder && tipoRicerca == 2) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert(address + " not found");
            } else {
				if (pg == "smoothspectraprogetto_ntc" || pg == "smoothspectra_ntc") main1(point,zoom);
				if (pg == "shc" || pg == "spectra"  || pg == "sh") main2(point,zoom);
            }
          }
        );
      }
    }

// funzione main1
function main1(point,zoom) {
			  points = null;
			  indiciNodi = null;
			  var zoom1 = zoom*1;
              mapBlocks.setCenter(point,zoom1);
			  var loader = new HtmlControl("<img src='img/ajaxloader/ajax-loader.gif' />");
			  var Right = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(190,340));
			  mapBlocks.addControl(loader, Right);
				//----------
				var getVars = 'target_lat=' + point.lat()
				+ '&target_lng=' + point.lng()
				+ '&pg=' + pg;
				//log the URL for testing
				//GLog.writeUrl('data_sh.php?'+getVars);
				//retrieve the points
				var request = GXmlHttp.create();
				request.open('GET', 'data_sh.php?'+getVars, true);
				request.onreadystatechange = function() {
				if (request.readyState == 4) {
					var jscript = request.responseText;
					eval(jscript);//print di points e indiciNodi
					
					// se è già stata fatta una chiamata precedente cancello tutto quello che c'è in mappa
					for(k in existingMarkers) {
							mapBlocks.removeOverlay(existingMarkers[k]);
							delete existingMarkers[k];
					}
					for(k in existingLine) {
							mapBlocks.removeOverlay(existingLine[k]);
							delete existingLine[k];
					}
					if(marker_Target) {
							mapBlocks.removeOverlay(marker_Target);
							delete marker_Target;
					}
					// controllo se qualche indice non sta dentro il reticolo (cioè ha valore nullo o 0)
					var flag = 0;
					for(var i=0; i<indiciNodi.length; i++) {
						if(indiciNodi[i] == null || indiciNodi[i] == 0){
							flag=1;
							break;
							}
						}
					//var printProva = document.getElementById("prova");
					//printProva.innerHTML = indiciNodi[0]+";"+indiciNodi[1]+";"+indiciNodi[2]+";"+indiciNodi[3];
					//creo i 4 marker+markerline solo se flag è 0 (sono dentro il reticolo)
					if(flag == 0) {
						for (var i = 0; i <= 3; ++i) {
						createMarkerLine(points[indiciNodi[i]].lat, points[indiciNodi[i]].lng, points[indiciNodi[i]].ag,points[indiciNodi[i]].ID_tab,point.lat(),point.lng(),i);
						}
					}			  
				  marker_Target = new GMarker(point, { draggable: true });
					//form del marker_target.. 
				  GEvent.addListener(marker_Target, "click", function() {											  
					// ag del marker_Target
				    if(flag == 0) ag_marker_target = mediaPesata(indiciNodi,points);
					if(flag == 0) {
					marker_Target.openInfoWindowHtml(htmlForm('Coord. Punto Target','',marker_Target.getLatLng().lat().toFixed(6),marker_Target.getLatLng().lng().toFixed(6),ag_marker_target.toFixed(3),points[indiciNodi[0]].ID_tab,points[indiciNodi[1]].ID_tab,points[indiciNodi[2]].ID_tab,points[indiciNodi[3]].ID_tab,length[0].toFixed(2),length[1].toFixed(2),length[2].toFixed(2),length[3].toFixed(2),'block')); // text_form variabile definita in pannello.php
					if (pg == "smoothspectra_ntc") document.getElementById("table1").style.display = "block";
					if (pg == "smoothspectraprogetto_ntc") document.getElementById("table2").style.display = "block";
					var printTitle = document.getElementById("printTitle");
					printTitle.innerHTML = "TARGET POINT";	
					var printSLat = document.getElementById("printSLat");
					printSLat.innerHTML ="Lat: "+marker_Target.getLatLng().lat().toFixed(6);
					var printSLng = document.getElementById("printSLng");
					printSLng.innerHTML = "Lng: "+marker_Target.getLatLng().lng().toFixed(6);
					var printHazardNTC = document.getElementById("printHazardNTC");
				    printHazardNTC.innerHTML = "";
					var container = document.getElementById("GChart");
				    container.innerHTML = "";
				    document.getElementById('img').src = "icone/spaziatore.gif";
						} else {
					marker_Target.openInfoWindowHtml("Punto esterno al reticolo!");
					}
				 });
				  //uso dragstart per cancellare tutte le info della pos. precedente del marker
				  GEvent.addListener(marker_Target, "dragstart", function() {											  					points = null;
					indiciNodi = null;
					//elimino eventuali marker presenti nella mappa
					for(k in existingMarkers) {
							mapBlocks.removeOverlay(existingMarkers[k]);
							delete existingMarkers[k];
						}
					for(k in existingLine) {
							mapBlocks.removeOverlay(existingLine[k]);
							delete existingLine[k];
					if (pg == "smoothspectra_ntc") document.getElementById("table1").style.display = "none";
					if (pg == "smoothspectraprogetto_ntc") document.getElementById("table2").style.display = "none";
					var printHazardNTC = document.getElementById("printHazardNTC");
					printHazardNTC.innerHTML = "";
					var container = document.getElementById("GChart");
				    container.innerHTML = "";
					document.getElementById('img').src = "icone/spaziatore.gif";
					}
				 });
			  GEvent.addListener(marker_Target, "dragend", function() {	
				var loader = new HtmlControl("<img src='img/ajaxloader/ajax-loader.gif' />");
			    var Right = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(190,340));
			    mapBlocks.addControl(loader, Right);
				var getVars = 'target_lat=' + marker_Target.getLatLng().lat().toFixed(4)
				+ '&target_lng=' + marker_Target.getLatLng().lng().toFixed(4)
				+ '&pg=' + pg;
				//log the URL for testing
				//GLog.writeUrl('data_sh.php?'+getVars);
				//retrieve the points
				var request = GXmlHttp.create();
				request.open('GET', 'data_sh.php?'+getVars, true);
				request.onreadystatechange = function() {
				if (request.readyState == 4) {
					var jscript = request.responseText;
					eval(jscript); //print di points e indiciNodi
					
				if (pg == "smoothspectra_ntc") document.getElementById("table1").style.display = "block";
				if (pg == "smoothspectraprogetto_ntc") document.getElementById("table2").style.display = "block";
				var printTitle = document.getElementById("printTitle");
				printTitle.innerHTML = "TARGET POINT";												
		  	    var printSLat = document.getElementById("printSLat");
				printSLat.innerHTML = "Lat: "+marker_Target.getLatLng().lat().toFixed(6);
				var printSLng = document.getElementById("printSLng");
				printSLng.innerHTML = "Lng: "+marker_Target.getLatLng().lng().toFixed(6);

				  // controllo se qualche indice non sta dentro il reticolo (cioè ha valore nullo o 0)
					flag = 0;
					for(var i=0; i<indiciNodi.length; i++) {
						if(indiciNodi[i] == null || indiciNodi[i] == 0){
							flag=1;
							break;
							}
						}
				  var printProva = document.getElementById("prova");
					//printProva.innerHTML = indiciNodi[0]+";"+indiciNodi[1]+";"+indiciNodi[2]+";"+indiciNodi[3];
				  if(flag == 0) {
							for (var i = 0; i <= 3; ++i) {
							createMarkerLine(points[indiciNodi[i]].lat, points[indiciNodi[i]].lng, points[indiciNodi[i]].ag, 				points[indiciNodi[i]].ID_tab,marker_Target.getLatLng().lat().toFixed(6),marker_Target.getLatLng().lng().toFixed(6),i);
							}
						}
				  mapBlocks.removeControl(loader);
				  }
				}
			request.send(null);	
			  //---------------
         	 });
			mapBlocks.addOverlay(marker_Target);  
			mapBlocks.removeControl(loader);
			}
		}
		request.send(null);	
              
			  //marker.openInfoWindowHtml(address);
}
// funzione main2
function main2(point,zoom) {
			  var zoom1 = zoom*1;
              mapBlocks.setCenter(point,zoom1);
			  document.getElementById("table1").style.display = "block";
			  var printTitle = document.getElementById("printTitle");
				printTitle.innerHTML = "TARGET POINT";
			  var printSLat = document.getElementById("printSLat");
				printSLat.innerHTML ="Latitudine: "+mapBlocks.getCenter().y.toFixed(6);
				var printSLng = document.getElementById("printSLng");
				printSLng.innerHTML = "Longitudine: "+mapBlocks.getCenter().x.toFixed(6);
				// se è già stata fatta una chiamata precedente cancello tutto quello che c'è in mappa
				if(marker_Target) {
						mapBlocks.removeOverlay(marker_Target);
						delete marker_Target;
				}
				//----------
              marker_Target = new GMarker(point, { draggable: true });
			  GEvent.addListener(marker_Target, "dragend", function() {
				document.getElementById("table1").style.display = "block";
				var printTitle = document.getElementById("printTitle");
				printTitle.innerHTML = "TARGET POINT";
		  	    var printSLat = document.getElementById("printSLat");
				printSLat.innerHTML = "Latitudine: "+marker_Target.getLatLng().lat().toFixed(6);
				var printSLng = document.getElementById("printSLng");
				printSLng.innerHTML = "Longitudine: "+marker_Target.getLatLng().lng().toFixed(6);
				//elimino eventuali marker presenti nella mappa
         	 });
			  GEvent.addListener(marker_Target, "click", function() {
				marker_Target.openInfoWindowHtml("Clicca un nodo del reticolo<br /> per vederne i dati di pericolosit&agrave;!");
				});
              mapBlocks.addOverlay(marker_Target);             
			  //marker.openInfoWindowHtml(address);
}
// media pesata della variabile ag
function mediaPesata(indiciNodi,points) {
//ag_marker_target - media pesata per la det. ag pag III Allegato A
				var ag_marker_target = 0;
				var num_media_pesata = 0;
				var den_media_pesata = 0;
			  	for (var i = 0; i <= 3; ++i) {
					num_media_pesata = num_media_pesata+points[indiciNodi[i]].ag/length[i]; //agi/di
					den_media_pesata = den_media_pesata+1/length[i]; //1/di
				}
				ag_marker_target = num_media_pesata/den_media_pesata;
				// END - ag_marker_target - media pesata per la det. ag pag III Allegato A
				return ag_marker_target;
}
function createMarkerLine(verticeReticoloLat, verticeReticoloLng, verticeReticoloAg, 				verticeReticoloID_tab,verticeTargetLat,verticeTargetLng,i) {
	existingMarkers[i] = createMarker(verticeReticoloLat,verticeReticoloLng, verticeReticoloAg, 				verticeReticoloID_tab);
	mapBlocks.addOverlay(existingMarkers[i]);
	var verticeReticolo = new GLatLng(verticeReticoloLat,verticeReticoloLng);
	var targetPoint = new GLatLng(verticeTargetLat,verticeTargetLng);
	var verticiLine = new Array(verticeReticolo,targetPoint);
	existingLine[i] = new GPolyline(verticiLine, "#CA0005", 2, 0.7);
	length[i] = existingLine[i].getLength()/1000;
	mapBlocks.addOverlay(existingLine[i]);
}

function createMarker(lat, lng, ag, ID) {
	var actionMarker = null;
    var marker = new GMarker(new GLatLng(lat,lng), ColoreMarkerPNG(ag));
	if (pg == "smoothspectraprogetto_ntc" || pg == "smoothspectra_ntc" || pg == "shc" || pg == "spectra") actionMarker = "click";
	if (pg == "sh") actionMarker = "mouseover";
	GEvent.addListener(marker, actionMarker, function() {
			if (pg == "smoothspectraprogetto_ntc" || pg == "smoothspectra_ntc"){
			marker.openInfoWindowHtml(htmlForm('Nodo reticolo ID',ID,lat,lng,ag,'','','','','','','','','none')); // text_form variabile definita in pannello.php
				if (pg == "smoothspectra_ntc") document.getElementById("table1").style.display = "block";
				if (pg == "smoothspectraprogetto_ntc") document.getElementById("table2").style.display = "block";
			var printTitle = document.getElementById("printTitle");
				printTitle.innerHTML = "POINT ID "+ID;												
		  	    var printSLat = document.getElementById("printSLat");
				printSLat.innerHTML = "Lat: "+lat;
				var printSLng = document.getElementById("printSLng");
				printSLng.innerHTML = "Lng: "+lng;
				var printHazardNTC = document.getElementById("printHazardNTC");
				printHazardNTC.innerHTML = "";
				var container = document.getElementById("GChart");
				    container.innerHTML = "";
				document.getElementById('img').src = "icone/spaziatore.gif";
			  }
			  if (pg == "shc" || pg == "spectra"  || pg == "sh"){
				  if (pg == "shc") titolo = "Curve di hazard INGV-DPC 2004/2006 (Progetto S1, Deliverable D2)";
				  if (pg == "spectra") titolo = "Spettri INGV-DPC 2004/2006 (Progetto S1, Deliverable D3)";
				  if (pg == "sh") titolo = "Pericolosita' OPCM 3519";
			  	  marker.openInfoWindowHtml(htmlLink(titolo,ID,lat,lng,ag,pg));
			  }
          });
    return marker;
	}
