	var side_bar_tipologie_html = "";
	var markerId = [];
	var gmarkers = [];
	var labels = [];
	var htmls = [];
	var gicons = [];
	var gicon_markers = [];
	var gindex = 0;
	var map; 
	var mm;
	var urlBaseMarker;
	
	function createMarker(point,name,html,gicon) {

		//var marker = new GMarker(point,gicon);
		var marker = new GMarker(point);
		if (html!='')
		        {
		    GEvent.addListener(marker, "click", function() {
		      marker.openInfoWindowHtml(html);
		    });
		        }
		gmarkers[gindex] = marker;
		htmls[gindex] = html;
		labels[gindex] = name;
		gindex++;
		return marker;
		}

	function showhideMarker( nID ) {
			
			for (var i=0; i<gicon_markers[nID].length; i++) {
				if (gmarkers[gicon_markers[nID][i]].isHidden()) 
					gmarkers[gicon_markers[nID][i]].show()
				else
					gmarkers[gicon_markers[nID][i]].hide()
				}
		  }

	function markerClick(nIndex) {
		gmarkers[nIndex].openInfoWindowHtml(htmls[nIndex]);
	  }

	function searchString (arrayToSearch, stringToSearch) {
	    //arrayToSearch.sort();

	    for (var i = 0; i < arrayToSearch.length; i++) {
	        // need to use a double equals sign "==" to test for equality
	        if (arrayToSearch[i] == stringToSearch)
	            return true;
	    // following code is unnecessary
	      //  else if (stringToSearch < arrayToSearch[i])
	          //  return false;
	     }
	    return false;
	}
	  
	function Gmaps_onmove() {
		var sQuery = '?OLat=' + map.getBounds().getSouthWest().lat() + '&ELat=' + map.getBounds().getNorthEast().lat() + '&NLng=' + map.getBounds().getNorthEast().lng() + '&SLng=' + map.getBounds().getSouthWest().lng() 
		if (document.getElementById("gmap_info"))	{
			//if  (map.getZoom() >= 15) 	{
				document.getElementById("gmap_info").innerHTML = "Caricamento in corso"
				GDownloadUrl(urlBaseMarker + sQuery, loadMarker);
				document.getElementById("gmap_info").innerHTML = "Caricamento completato"
		//			}
			}		
		}

	function Gmaps_onzoom() {

	if (document.getElementById("gmap_info"))	{
		if (map.getZoom() >= 15)
				document.getElementById("gmap_info").innerHTML = ""
			else	
				document.getElementById("gmap_info").innerHTML = "A queto livello di zoom non è possibile visulizzare le fermate"
			}
		}	
		
	function loadMarker( doc )	{
		 var jsonData = eval('(' + doc + ')');

			if (document.getElementById("side_bar_tipologie"))	{
				side_bar_tipologie_html = '<ul>';
		        for (var i=0; i<jsonData.icontype.length; i++) {
				  if (!gicons[ jsonData.icontype[i].id ]) {
            var url = jsonData.icontype[i].url;
            if (url == '') url = null;
					  gicons[ jsonData.icontype[i].id ] = new GIcon(G_DEFAULT_ICON, url );
					  gicon_markers[ jsonData.icontype[i].id ] = []
						}
				  side_bar_tipologie_html += '<li id="li-gicon-' + jsonData.icontype[i].id + '">';
				  side_bar_tipologie_html += '<img src="' + jsonData.icontype[i].url + '" /><input type="checkbox" id="chk' + +jsonData.icontype[i].id + '" name="chk' + +jsonData.icontype[i].id + '" checked="checked" onClick="showhideMarker(' + +jsonData.icontype[i].id + ');" /><label for="chk' + +jsonData.icontype[i].id + '"><span>' + jsonData.icontype[i].label + '</span></label>';
				  side_bar_tipologie_html += '</li>';			  
				  }
				side_bar_tipologie_html += '</ul>';
				document.getElementById("side_bar_tipologie").innerHTML = side_bar_tipologie_html;
				}
			
	        for (var i=0; i<jsonData.markers.length; i++) {
			  if (!markerId[jsonData.markers[i].id+jsonData.markers[i].idstruttura])	
				{
				  markerId[jsonData.markers[i].id+jsonData.markers[i].idstruttura] = 1;
				  gicon_markers[ jsonData.markers[i].idicona ].push(gindex);
		          var point = new GLatLng(jsonData.markers[i].lat, jsonData.markers[i].lng);
		          var marker = createMarker(point, jsonData.markers[i].label, jsonData.markers[i].html, gicons[ jsonData.markers[i].idicona ]);
				  mm.addMarker(marker,0,17); 
				}  
	        }
			
//			for (var i=0; i<jsonData.icontype.length; i++) {
//				var li = document.getElementById( 'li-gicon-' + jsonData.icontype[i].id )
//				if (li)	{
//					li.innerHTML += '<ul>';
//					for (var k=0; k<gicon_markers[jsonData.icontype[i].id].length; k++) {
//						li.innerHTML += '<li><a href="javascript:markerClick(' + gicon_markers[jsonData.icontype[i].id][k] + ');"><span>' + labels[gicon_markers[jsonData.icontype[i].id][k]] + '</span></a></li>';
//						}
//					li.innerHTML += '</ul>';	
//					}
//				}
			
		}
  
  function loadMarkerBare( doc ) {
    map.clearOverlays();
    var jsonData = eval('(' + doc + ')');
    
    for (var i=0; i<jsonData.markers.length; i++) {
      var mark = jsonData.markers[i];
      var point = new GLatLng(mark.lat, mark.lng);
      var marker = createMarker(point, mark.label, mark.html); // , gicons[ mark.idicona ]
      mm.addMarker(marker,0,17);
    }
  }
    
	// Dummy stub
	function GBrowserIsCompatible() { return true; };
	
  function initGMaps(sDivMap, dLat, dLng, dZoom, sUrlBaseMarkers, nIDIcona, hideControls) {
    if (!GBrowserIsCompatible()) { alert("Sorry, the Google Maps API is not compatible with this browser"); return false; }
    
    window.unload = GUnload();
    map = new GMap(document.getElementById(sDivMap));
    map.enableScrollWheelZoom();
    if (!hideControls) {
      if (sUrlBaseMarkers != '')	{
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.enableGoogleBar();
      } else {
        map.addControl(new GSmallMapControl ());
        map.addControl(new GMapTypeControl());
      }
    }
    map.setCenter(new GLatLng(dLat,dLng),dZoom);
    GEvent.addListener(map, "moveend", Gmaps_onmove);
    //GEvent.addListener(map, "zoomend", Gmaps_onzoom);
    mm = new GMarkerManager(map); 	   
    urlBaseMarker = sUrlBaseMarkers;
    
    if (sUrlBaseMarkers != '') {
      Gmaps_onmove();
    } else {
      var marker = createMarker(new GLatLng(dLat,dLng), '', '', new GIcon(G_DEFAULT_ICON, 'img/icone/gmaps/ico-' + nIDIcona + '.png' ) );
      map.addOverlay(marker);
    }
	}
