//<![CDATA[
var map;
var onmove = 'si';
var geocoder;
var lastMarker;
var lastcategoria;
//var lasttooltip;
//var lastMarkerPoint;

/* funzione di controllo per verificare il caricamento della mini mappa. Serve per disegnare il perimetro solo dopo il caricamento della mappa */
function controlla(map,overlayControl) {
  overmap = overlayControl.getOverviewMap();
  if (overmap) {      
    map.addOverlay(perimetro);
  } else {
    setTimeout(function () { controlla(map,overlayControl), 100});
  }
}   

function load() {
	if (GBrowserIsCompatible()) {
	    //geocoder = new GClientGeocoder();
	    map = new GMap2(document.getElementById('map'));
		  //map.setCenter(new GLatLng(42.17231,14.232101), 12, G_PHYSICAL_MAP); //G_NORMAL_MAP
		  map.setCenter(new GLatLng(42.1580590697154, 14.174079895019531), 12, G_NORMAL_MAP); //	G_PHYSICAL_MAP
	    map.addControl(new GLargeMapControl());
	    map.addControl(new GMapTypeControl());
	    map.addMapType(G_PHYSICAL_MAP);
	    map.removeMapType(G_HYBRID_MAP);
	    map.removeMapType(G_SATELLITE_MAP);
	    map.addControl(new GScaleControl());
	    map.enableScrollWheelZoom();
	    map.enableContinuousZoom();
	 	  var overlayControl = new GOverviewMapControl();/*zoom box, in basso a dx*/
	 	  map.addControl(overlayControl, new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(9, 9))); /*zoom box, in basso a dx*/
    //G_PHYSICAL_MAP.getMaximumResolution = function () { return 16 }; 
   
    setTimeout(function () { controlla(map,overlayControl), 100}); /* vedi sopra */
     
		GEvent.addListener(
			map, 
			"movestart", 
			function() {  
				//document.getElementById("moving").innerHTML = '<img src="img/loader_light.gif" align="absmidle" />';
				//document.getElementById("moving").style.display='block';
				showwaiting();
				//var infos = Ext.getCmp('infos');
				//if(infos){infos.close();}
			}
		); 
		GEvent.addListener(
			map, 
			"zoomstart", 
			function() {  
				//document.getElementById("moving").innerHTML = '<img src="img/loader_light.gif" align="absmidle" />';
				//document.getElementById("moving").style.display='block';
				showwaiting();
			}
		); 		
		GEvent.addListener(
			map, 
			"zoomend", 
			function() {  
				//document.getElementById("moving").innerHTML = '<img src="img/loader_light.gif" align="absmidle" />';
/*
				document.getElementById("moving").style.display='block';
				showwaiting();
				var zoomlev = map.getZoom();
				var myMapType = map.getCurrentMapType();
				if (myMapType == G_PHYSICAL_MAP) {
					document.getElementById("mapType").innerHTML = "Terreno";
        		} 
				if (myMapType == G_NORMAL_MAP) {
					document.getElementById("mapType").innerHTML = "Mappa";
        		} 
				document.getElementById("zoomlevel").innerHTML = zoomlev;
				if((zoomlev>'14')&&(myMapType!=G_NORMAL_MAP)){map.setMapType(G_NORMAL_MAP);}
				if((zoomlev<='14')&&(myMapType!=G_PHYSICAL_MAP)){map.setMapType(G_PHYSICAL_MAP);}
*/
			//document.getElementById("moving").style.display='none';
			hidewaiting();
			}
		); 				   
		GEvent.addListener(
			map, 
			"moveend", 
			function() {  
				var center = map.getCenter();
				//document.getElementById("debug").innerHTML = center.toString();
		  		var bnds = map.getBounds();
		  		var distDiagMeters = Math.round(center.distanceFrom(bnds.getNorthEast()))/1000; //distanza dal centro della mappa allo spigolo, in km
				document.getElementById("debug2").innerHTML = distDiagMeters+' m';
				
        var idpercorso = document.getElementById('percorso').value;
        if(onmove=='si'){	 
				  if(idpercorso==''){
				    searchLocationsNear(center,distDiagMeters);	
				  }else{
				    showPercorso();
          }					
				//searchLocationsNear(center,distDiagMeters);					
          //var idpercorso = document.getElementById('percorso').value;
				  //if(idpercorso!=''){
				    //showPercorso();		
          //}		
				}
				  if(idpercorso!=''){	
				    sidebarPercorso();
          }	
				 //   checkedxPercorsi();
      hidewaiting();
			}
		); 
    //GEvent.addListener(map, "click", function() {
    //  closeOpenInfoWin();
    //});    		
    }   
}

		var baseIcon = new GIcon();
        baseIcon.iconSize=new GSize(21,30);
        //baseIcon.shadowSize=new GSize(38,18);
        baseIcon.iconAnchor=new GPoint(11,20);
        baseIcon.infoWindowAnchor=new GPoint(16,0);
        
		function createSidebarEntryClass(idclasse,nomeclass) {
			var div3 = document.getElementById('sidebartitle'+idclasse);
			var html3 = nomeclass;
			div3.innerHTML = html3;
			div3.style.marginBottom = '5px'; 
			return div3;
		}   
		function createSidebarEntryCat(idmarkercat, nomecat, num) {
			var div2 = document.getElementById('sidebar'+idmarkercat);
			document.getElementById("c"+idmarkercat+"_total").innerHTML = '(' + num + ')';
			document.getElementById("cat_"+idmarkercat).innerHTML = '';
			return div2;
		}
		
/*
function searchLocations() {
	var address = document.getElementById('addressInput').value;
	geocoder.getLatLng(address, function(latlng) {
		if (!latlng) {
			alert(address + ' not found');
		}else{
			searchLocationsNear(latlng,false);
		}
	});
}
*/
function showPercorso() {
    lastMarker=null;
    //map.setCenter(new GLatLng(42.1580590697154, 14.174079895019531), 12);
    var idpercorso = document.getElementById('percorso').value;
    document.getElementById("percorso_1").innerHTML = '';
    document.getElementById("percorso_2").innerHTML = '';
    document.getElementById("percorso_3").innerHTML = '';    
    //var center = map.getCenter();
    var searchUrl = 'search_percorsi.php?percorso=' + idpercorso;

		map.clearOverlays();
    map.addOverlay(perimetro);
    if(idpercorso=='1'){
      percorso1();
    }else if(idpercorso=='2'){
      percorso2();
    }else if(idpercorso=='3'){
      percorso3();
    }
    GDownloadUrl(searchUrl, function(data) {
    var xml = GXml.parse(data);
		document.getElementById("moving").style.display='none';


		var bounds = new GLatLngBounds();
    var percorso = xml.documentElement.getElementsByTagName('percorso'); 
    for (var i1 = 0; i1 < percorso.length; i1++) {

		  var titolo = percorso[i1].getAttribute('titolo');
		  var ppoints = percorso[i1].getAttribute('points');
		  var levels = percorso[i1].getAttribute('levels');
		//	var sidebarEntryCat = createSidebarEntryPerc(idpercorso, titolo);
		
      var markers = percorso[i1].getElementsByTagName('marker');		       
				for (var i = 0; i < markers.length; i++) {
					var idmarker = markers[i].getAttribute('idmarker');
					var nome = markers[i].getAttribute('nome');
					//var descr = markers[i].getAttribute('d');
					var categoria = markers[i].getAttribute('categoria');
					var icona = new GIcon(baseIcon, "img/icone/"+categoria+".png", null, null);
					//var iconar = new GIcon(baseIcon, "img/icone/r"+categoria+".png", null, null);
					//var distance = parseFloat(markers[i].getAttribute('distance'));
					var lat = parseFloat(markers[i].getAttribute('lat'));
					var lng = parseFloat(markers[i].getAttribute('lng'));
					//var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),parseFloat(markers[i].getAttribute('lng')));
					var point = new GLatLng(lat,lng);
		      //if (lastMarker && lastMarker.getPoint().equals(point)) {
					   //var marker = createMarker(idmarker, point, nome, iconar, categoria,descr);   
          //}else{											
          var descr ='';
					//}
					var marker = createMarker(idmarker, point, nome, icona, categoria,descr);
					var checkbox = document.getElementById('percorso[' + idpercorso + ']');
					var tooltip = new Tooltip(marker,stripslashes(nome),4); 
					if (checkbox.checked == true){
					   map.addOverlay(marker);		         	
						if (map.getBounds().containsLatLng(marker.getPoint())){
						//var sidebarEntry = createSidebarEntry(idmarker, categoria, marker, nome, distance, descr);
              var inout = 'in';
						}else{
              var inout = 'out';
            }
					 	marker.tooltip = tooltip;	
					  var sidebarEntry = createPercorsoSidebarEntry(idmarker, idpercorso, marker, nome, inout);	
					 	sidebarEntry.tooltip = tooltip;
					  map.addOverlay(tooltip); 
					}
					bounds.extend(point);
				//alert(lat+' - '+lng);
				}
      map.setZoom(map.getBoundsZoomLevel(bounds));
      map.setCenter(bounds.getCenter());				
      }
      //hidewaiting();
	});
onmove = 'no';
}

function searchLocationsNear(center,distDiagMeters) {
onmove = 'si';
document.getElementById('percorso').value='';
    document.getElementById("percorso_1").innerHTML = '';
    document.getElementById("percorso_2").innerHTML = '';
    document.getElementById("percorso_3").innerHTML = ''; 
/* controllo se la finestra informazioni e' aperta. In caso contrario il marker non deve essere evidenziato */
if (Ext.get('infowinz').getStyle("visibility")=="hidden"){lastMarker=false;}
		if(lastcategoria){
  	  var lastcat = document.getElementById('check[' + lastcategoria + ']');
      if(lastcat.checked==false){
    		lastMarker=null;
      }	
    }
	if(!distDiagMeters){
		var radius = document.getElementById('radiusSelect').value;
	}else{
     	var radius = distDiagMeters;
	}
    var categoria = document.getElementById('categoria').value;
    if(categoria!=''){
    	var searchUrl = 'search_emergenze.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius + '&categoria=' + categoria;
    }else{
		var searchUrl = 'search_emergenze.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
	}
    GDownloadUrl(searchUrl, function(data) {
    	var xml = GXml.parse(data);
		var mark = xml.documentElement.getElementsByTagName('totalMarkers'); /* totale occorrenze */
		var numMark = mark[0].getAttribute('total');
		document.getElementById("total").innerHTML = numMark;
				//document.getElementById("moving").innerHTML = '';
				document.getElementById("moving").style.display='none';
				
       isInfoWindowOpen = !map.getInfoWindow().isHidden(); //check for InfoWindow
		map.clearOverlays();
		map.addOverlay(perimetro);
		var markersClass = xml.documentElement.getElementsByTagName('mclass'); //classi (PDI e Servizi)
		if(!distDiagMeters){
			if (numMark == 0) {
				document.getElementById("total").innerHTML = mappaLang[0];   
				return;
			}
		}   

		var bounds = new GLatLngBounds();
		        
		for (var ic = 0; ic < markersClass.length; ic++) {
			var idclasse = markersClass[ic].getAttribute('idclasse');	
			var nomeclass = markersClass[ic].getAttribute('nomeclasse');	 
			var sidebarEntryClass = createSidebarEntryClass(idclasse,nomeclass);
			var markersCat = markersClass[ic].getElementsByTagName('mcat');  //Categorie    
			for (var i = 0; i < markersCat.length; i++) {
				var idmarkercat = markersCat[i].getAttribute('idmarkercat');
				var nomecat = markersCat[i].getAttribute('nome');
				var num = markersCat[i].getAttribute('num');
				var sidebarEntryCat = createSidebarEntryCat(idmarkercat, nomecat, num);

		     	var markers = markersCat[i].getElementsByTagName('marker');
		       
				for (var i2 = 0; i2 < markers.length; i2++) {
					var idmarker = markers[i2].getAttribute('idmarker');
					var nome = markers[i2].getAttribute('nome');
					var descr = markers[i2].getAttribute('d');
					var categoria = markers[i2].getAttribute('categoria');
					var icona = new GIcon(baseIcon, "img/icone/"+categoria+".png", null, null);
					var iconar = new GIcon(baseIcon, "img/icone/r"+categoria+".png", null, null);
					var distance = parseFloat(markers[i2].getAttribute('distance'));
					var point = new GLatLng(parseFloat(markers[i2].getAttribute('lat')),
											parseFloat(markers[i2].getAttribute('lng')));
		      if (lastMarker && lastMarker.getPoint().equals(point)) {
					   var marker = createMarker(idmarker, point, nome, iconar, categoria,descr);   
          }else{											
					   var marker = createMarker(idmarker, point, nome, icona, categoria,descr);
					}
					var checkbox = document.getElementById('check[' + idmarkercat + ']');
					var tooltip = new Tooltip(marker,stripslashes(nome),4); 
					//Ext.get('cat_' + categoria).hide();
					if (checkbox.checked == true){
						if (map.getBounds().containsLatLng(marker.getPoint())){
  					 	marker.tooltip = tooltip;				 
  						map.addOverlay(marker);					
  						var sidebarEntry = createSidebarEntry(idmarker, categoria, marker, nome, distance, descr);
  					 	sidebarEntry.tooltip = tooltip;
  						map.addOverlay(tooltip);
						}
					}				
		      //if (lastMarker && lastMarker.getPoint().equals(point)) {
		      //    GEvent.trigger(marker, "click");
		      //}
					bounds.extend(point);
				}
       //hidewaiting();
			}   
		}    
		//map.addOverlay(perimetro);
		if(!distDiagMeters){
	 	   onmove = 'no';
	       map.setCenter(center, map.getBoundsZoomLevel(bounds));
	 	   onmove = 'si';
		}
	});


}
    function progressbox(){
        Ext.MessageBox.show({
           title: 'Attendere...',
           msg: 'aggiornamento in corso...',
           width:240,
           progress:true,
           closable:true
       });
       var f = function(v){
            return function(){
                if(v == 10){
                    Ext.MessageBox.hide();
                }else{
                    var i = v/11;
                    Ext.MessageBox.updateProgress(i, Math.round(100*i)+'% completato');
                }
            }
       };
       for(var i = 1; i < 11; i++){
           setTimeout(f(i), i*100);
       }
    }
    

function createMarker(idmarker, point, nome, icon, categoria, descr) {
	var marker = new GMarker(point,icon);
    GEvent.addListener(marker, 'click', function() {
        if(lastMarker){
          map.removeOverlay(lastMarker);
          map.addOverlay(lastMarker);
					//map.addOverlay(lasttooltip);
        }
        lastMarker = marker;
        //lasttooltip = this.tooltip;
        lastcategoria = categoria;
    	  marker.setImage("img/icone/r"+categoria+".png");
		//if (descr==0){
	     	opensimplewindow(idmarker,stripslashes(nome));
		//}else{
	  //   	openlayoutwin(idmarker,stripslashes(nome));
		//}     
      //var point = marker.getPoint(); 
			if (!map.getBounds().containsLatLng(point)){
        //map.panTo(point); 
        //map.setCenter(point);
        map.setCenter(point, map.getZoom());
      }  		
    });
    GEvent.addListener(marker, 'infowindowclose', function() {
        var pointmarker = document.getElementById('point'+idmarker);
			pointmarker.style.fontWeight = 'bolder';
			pointmarker.style.backgroundColor = '';  
			pointmarker.style.color = '#556677';  
      });       
    GEvent.addDomListener(marker, 'mouseover', function() {
    	this.tooltip.show();
    });
    GEvent.addDomListener(marker, 'mouseout', function() {
    	this.tooltip.hide();
    });      
	return marker;
}
    function showwaiting() {
      document.getElementById("moving").style.display='block';
   		//progressbox();
    }
    function hidewaiting() {
      document.getElementById("moving").style.display='none';
   		//Ext.MessageBox.hide();
    }      
    
    function toggleGroup(categoria) {
      	showwaiting();
    		var center = map.getCenter();
    		var bnds = map.getBounds();
    		var distDiagMeters = Math.round(center.distanceFrom(bnds.getNorthEast()))/1000; //distanza dal centro della mappa allo spigolo, in km   
    		checkedx();	 
    		searchLocationsNear(center,distDiagMeters);         
    }
    function togglePercorso(idpercorso) {
        showwaiting();
  		  //var center = map.getCenter();
  		  //var bnds = map.getBounds();
  		  //var distDiagMeters = Math.round(center.distanceFrom(bnds.getNorthEast()))/1000; //distanza dal centro della mappa allo spigolo, in km   
  		  checkedxPercorsi();	 
  		  showPercorso(); 
        percorsoWin(idpercorso);   
    }    
function createSidebarEntry(idmarker, categoria, marker, nome, distance, descr) {
	//div=Builder.node('div',{id:"point" + idmarker, className:'sbdiv'});
    var html = '<b>' + stripslashes(nome) + '</b> (' + distance.toFixed(1) + ' km)<br/>';
    //div.innerHTML = html
    //Ext.get('cat_' + categoria).show();
    var div = Ext.DomHelper.append('cat_' + categoria, {tag:"div", id:"point" + idmarker, html:html, cls:'sbdiv'});    
    GEvent.addDomListener(div, 'click', function() {
    	GEvent.trigger(marker, 'click');
    });    
    GEvent.addDomListener(div, 'mouseover', function() {
    	div.style.backgroundColor = '#ffffff';
    	this.tooltip.show();
    });
    GEvent.addDomListener(div, 'mouseout', function() {
    	div.style.backgroundColor = '';
    	this.tooltip.hide();
    });
    return div;
}
function createPercorsoSidebarEntry(idmarker, idpercorso, marker, nome, inout) {
    var html = '<b>' + stripslashes(nome) + '</b><br/>';
    var div = Ext.DomHelper.append('percorso_' + idpercorso, {tag:"div", id:"point" + idmarker, html:html, cls:'sbdiv'});
        if(inout=='in'){
          div.style.color = '#556677';    
        }else{
          div.style.color = '#AEC0D0';    
        }    
    GEvent.addDomListener(div, 'click', function() {
      //var point = marker.getPoint(); 
			//if (!map.getBounds().containsLatLng(point)){
      //  map.panTo(point); 
      //}      
    	GEvent.trigger(marker, 'click');
    });    
    GEvent.addDomListener(div, 'mouseover', function() {
    	div.style.backgroundColor = '#ffffff';
    	this.tooltip.show();
    });
    GEvent.addDomListener(div, 'mouseout', function() {
    	div.style.backgroundColor = '';
    	this.tooltip.hide();
    });
    return div;
}
function sidebarPercorso() {
    var idpercorso = document.getElementById('percorso').value;
    var searchUrl = 'search_percorsi.php?percorso=' + idpercorso;

    GDownloadUrl(searchUrl, function(data) {
    var xml = GXml.parse(data);
		document.getElementById("moving").style.display='none';

		var bounds = new GLatLngBounds();
    var percorso = xml.documentElement.getElementsByTagName('percorso'); 
    for (var i1 = 0; i1 < percorso.length; i1++) {

      var markers = percorso[i1].getElementsByTagName('marker');		       
				for (var i = 0; i < markers.length; i++) {
					var idmarker = markers[i].getAttribute('idmarker');
					var nome = markers[i].getAttribute('nome');
					var categoria = markers[i].getAttribute('categoria');
					var icona = new GIcon(baseIcon, "img/icone/"+categoria+".png", null, null);
					var lat = parseFloat(markers[i].getAttribute('lat'));
					var lng = parseFloat(markers[i].getAttribute('lng'));
					var point = new GLatLng(lat,lng);									
          var descr ='';
					var marker = createMarker(idmarker, point, nome, icona, categoria,descr);
					var checkbox = document.getElementById('percorso[' + idpercorso + ']');
					var tooltip = new Tooltip(marker,stripslashes(nome),4); 
					if (checkbox.checked == true){      	
						if (map.getBounds().containsLatLng(marker.getPoint())){
              var inout = 'in';
						}else{
              var inout = 'out';
            }
					  var updatePS =  updatePercorsoSidebar(idmarker, inout);	
					}
				}			
      }
	});
onmove = 'no';
}

function updatePercorsoSidebar(idmarker, inout) {
    var div = document.getElementById('point'+idmarker);
        if(inout=='in'){
          div.style.color = '#556677';    
        }else{
          div.style.color = '#AEC0D0';    
        }    
    return div;
}
function stripslashes(str) {
	str=str.replace(/\\'/g,'\'');
	str=str.replace(/\\"/g,'"');
	str=str.replace(/\\\\/g,'\\');
	str=str.replace(/\\0/g,'\0');
	return str;
}
function checkedx() {
	var empls = document.getElementsByName('check[]');
	document.getElementById("categoria").value = '';
	for (var i = 0; i < empls.length; i++) {
		if (empls[i].checked == true){
			var valore = empls[i].value;
			if (document.getElementById("categoria").value!=''){
				document.getElementById("categoria").value += ',';
			}
			document.getElementById("categoria").value += valore;
		}
	}
	var emplsp = document.getElementsByName('percorso[]');	
  for (var i2 = 0; i2 < emplsp.length; i2++) {
		emplsp[i2].checked = false;
	}			
}
function checkedxPercorsi() {
	var empls = document.getElementsByName('check[]');
	var emplsp = document.getElementsByName('percorso[]');
	document.getElementById("categoria").value = '';
	
	for (var i = 0; i < empls.length; i++) {
		empls[i].checked = false;
	}	
	for (var i2 = 0; i2 < emplsp.length; i2++) {
		if (emplsp[i2].checked == true){
  		//emplsp[i2].checked = false;
  		if (emplsp[i2].checked == true){
  			var valore = emplsp[i2].value;
  			document.getElementById("percorso").value = valore;
  		}		
		}		
	}
    //document.getElementById("percorso_"+i2).innerHTML = '';
}
//]]>
