var map, timer;
var chosen = [];
var mapExtension = null;

var layers = [];
var layersVisible = [];

var nomeWeb = null;
var svOverlay = null;
var qtask = null;
var query = null;
var currentFeature = null;

var qtaskProfilo = null;
var queryProfilo = null;

var urlRestCondotti;


/*********************Impostazioni servizio******************************/
/************************************************************************/
var nomeWebLocale = "www.studioat.eu";
var nomeWebInternet = "www.studioat.eu";

var isLocale = false;
var OIDMaster = "OIDMaster"; //camerette e condotti
var outputFieldsCamerette = ["NomeCameretta","IdCameretta","Comune",
"QuotaChiusino","IdDescrizioneCamerettaTXT","EST","NORD",
"ListaFotoCameretta","ListaFotoSezioni","ListaNomiSezioni",
"ESTWM","NORDWM","QuotaFondoTXT",OIDMaster];

var fieldNomeCameretta = "NomeCameretta";
var nomeServizioIdentify = "Demo/LiteRF";
var nomeServizioSOE = "Demo/GeneraleRF";
var nomeWebSito = "reti.sistemigis.it"; //sito dove è hosted questa applicazione
var cartellaVirtualeFoto = "DemoRFFoto";
var pathUrlSchedaCameretta = "ws/wsArcSewer"; //cartella dove è presente il servizio rest che genera le schede
var idxLayerCamerette = "0";
var idxLayerCondotti = "1";
var livelloZoom = 17;
var centramentoLng = 9.253728;
var centramentoLat = 45.590588;
var toleranceIdentify = 0.00005; //metà del lato del quadrato costruito sul punto cliccato espresso in gradi
var hasRilievo = false;
var hasLogoAzienda = false;
var hasCondizioniUso = false;
var titoloLayers = "Layers";
var hasCopyright = false;
var hasGMapNormal = false;
var hasHybrid = false;
var numeroMaxSelezione = 500;
var titoloLogo = "ESRI"; 

//nomeWeb è dove è hosted arcgis server
if (isLocale)
   nomeWeb = nomeWebLocale;
else
   nomeWeb = nomeWebInternet;



var layersDefinition = {'layers': [
{'type':'Tiled','service':'http://' + nomeWeb + '/ArcGIS/rest/services/Demo/AerofotogrammetricoRF/MapServer',
'visible':false,
'caption':LANGUAGE.CartografiaComunale,
'order':3,
'options':{ opacity: 0.85, minResolution: 0, maxResolution: 19 }},
{'type':'Tiled','service':'http://' + nomeWeb + '/ArcGIS/rest/services/Demo/LiteRF/MapServer',
'visible':true,
'caption':LANGUAGE.ReteFognaria,
'order':4,
'options':{ opacity: 0.85, minResolution: 0, maxResolution: 19 }},
{'type':'Tiled','service':'http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer',
'visible':false,
'caption':'World Street Map',
'order':2,
'options':{ opacity: 0.85, minResolution: 0, maxResolution: 17 }},
{'type':'Tiled','service':'http://' + nomeWeb + '/ArcGIS/rest/services/Demo/SfondoBianco/MapServer',
'visible':false,
'caption':LANGUAGE.SfondoBianco,
'order':1,
'options':{ opacity: 1, minResolution: 0, maxResolution: 19 }}
]};

/************************************************************************/

/* per layer dinamico
{'type':'Dynamic','service':'http://' + nomeWeb + '/ArcGIS/rest/services/SAL/GMapRF/MapServer',
'visible':true,
'caption':'Rete fognaria',
'parameter':null,'opacity':0.85}
*/



$(document).ready(function(){
       document.title = titoloApplicazione;
       $("#tdStratiInformativi").text(condizioniUso).append($('<a class="LinkWeb" href="CondizioniUso.htm" target="_blank">condizioni d&#39;uso</a>'));     
       $("#logoAzienda").attr("alt","Logo " + azienda);
       $("#legendaImg").attr("alt","Legenda " + azienda);
       $("#svLayer").attr("title",LANGUAGE.AttivaLayerSV);
       $("#findCameretta").attr("title",LANGUAGE.CercaCameretta);
       $("#btnfindCameretta").attr("value",LANGUAGE.CercaCameretta);
       $("#btnfindIndirizzo").attr("value",LANGUAGE.CercaIndirizzo);
       $("#findIndirizzo").attr("title",LANGUAGE.CercaIndirizzo);
       $("#logoAzienda").css({visibility:(hasLogoAzienda?'visible':'hidden')});
       $("#condizioniUso").css({visibility:(hasCondizioniUso?'visible':'hidden')});
       $("#copyrightStudioAT").css({visibility:(hasCopyright?'visible':'hidden')});
       $("#legendaImg").attr("src","images/" + FILE.Legenda);
       $("#imgLogo").attr("alt", titoloLogo);
});

        
function buildMap() {

    

    
    map = new GMap2(document.getElementById("mapdiv"));
    var point = new GLatLng(centramentoLat, centramentoLng);
    map.setCenter(point, livelloZoom);
    var topRight = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(6,80));
    map.addControl(new GLargeMapControl3D(),topRight);
    map.enableScrollWheelZoom();
    map.enableContinuousZoom();
    
    // simple drag zoom 
	map.enableKeyDragZoom(
  
		{	key: "shift", 
			boxStyle: {border: "thin dashed red", backgroundColor: "transparent", opacity: 1},
			paneStyle: { backgroundColor: "gray", opacity: 0.1 }
		}
	);

    mapExtension = new esri.arcgis.gmaps.MapExtension(map);
    
    

    
    
    var l = layersDefinition.layers;
    for (var i = 0; i < l.length; i++) 
    {
       
       if (l[i].type == 'Tiled')
          addTileLayer(l[i].service, l[i].caption, i, l[i].visible, l[i].order, l[i].options);
       else
          addDynamicLayer(l[i].service, l[i].caption, i, l[i].visible,l[i].parameter, l[i].opacity)   
    }
    
    
    
        
    
    
    $("#box").append("<hr style='width: 92%; height: 1px; border: 1px; color: #e2e2e2; background-color: #e2e2e2;' /><a id='boxlink' href='javascript:void(0)' onclick='hideAll()'>" + LANGUAGE.NascondiTutto + "</a>");


    // Add selectable terrain map
    if (hasRilievo)
       map.addMapType(G_PHYSICAL_MAP);
    
    if (!hasGMapNormal)
       map.removeMapType(G_NORMAL_MAP);

    //G_SATELLITE_MAP.getMaximumResolution = function () { return 18 };
    //G_SATELLITE_MAP.getMinimumResolution = function () { return 13 };
    
    if (hasHybrid)
    {
      var hControl = new GHierarchicalMapTypeControl();
      hControl.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, LANGUAGE.Stradario, false);
      map.addControl(hControl);
    }

    // Add the self created control
    map.addControl(new MoreControl());
    
    
        
    //qtask = new esri.arcgis.gmaps.QueryTask("http://"+nomeWeb+"/ArcGIS/rest/services/"+ nomeServizioIdentify +"/MapServer/" + idxLayerCamerette);
    
    qtask = new esri.arcgis.gmaps.QueryTask("http://"+nomeWeb+"/ArcGIS/rest/services/"+ nomeServizioIdentify +"/MapServer/" + idxLayerCamerette);
    
    urlRestCondotti = "http://"+nomeWeb+"/ArcGIS/rest/services/"+ nomeServizioIdentify +"/MapServer/" + idxLayerCondotti;
    qtaskProfilo = new esri.arcgis.gmaps.QueryTask(urlRestCondotti);
    
    

	var boxStyleOpts = { opacity: .2, border: "2px solid yellow" };
    var otherOpts = {
      buttonHTML: "<img src='images/zoom-control-inactive.png' />",
      buttonZoomingHTML: "<img src='images/zoom-control-active.png' />",
      buttonStartingStyle: {width: '17px', height: '17px'},
      overlayRemoveTime: 0 };
      
    map.addControl(new DragZoomControl(boxStyleOpts, otherOpts, {}),
      new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(27,365)));//spostamento casella zoom sotto
      
    map.addControl(new ProfiliControl(),new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(27,505)));
    
    map.addControl(new GocciaControl(),new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(27,385)));  
     
    var geocoder = new GClientGeocoder();
        var panoClient = new GStreetviewClient();
        
        //seleziona il tab camerette quando si massimizza
        GEvent.addListener(map.getInfoWindow(), 'maximizeend', function() {
	      map.getTabbedMaxContent().selectTab(0);
	    });
        
        GEvent.addListener(map, 'click', function(ov, latlng, ovll) {
          if (latlng) {
            query = new esri.arcgis.gmaps.Query();
            query.returnGeometry = true;
            query.queryGeometry = GetBounds(latlng);
            query.outFields = outputFieldsCamerette;
	        qtask.execute(query, false, checkCameretta);					
          }
        });
        GEvent.addListener(map.getTabbedMaxContent(), 'selecttab', function(tab) {
          var node = tab.getContentNode();
          var latlng = map.getInfoWindow().getPoint();
          switch (tab.getLabel()) {
          case 'streetview':
            if (!node.pano) {
              var pano = new GStreetviewPanorama(node);
              GEvent.addListener(pano, 'error', function(errorCode) {
                if (errorCode == 603) {
                  node.innerHTML = LANGUAGE.FlashPlugInNonTrovato;
                }else if (errorCode == 600) {

		        //Servizio non disponibile
		        node.innerHTML = "<table style='width:100%; height: 100%; text-align: center;color: #000000; font-style: italic; font-family: Arial, Helvetica, sans-serif; font-size: x-large'><td>" + LANGUAGE.ServizioNonDisponibile + "</td></table>";
	            }

              });
              pano.setLocationAndPOV(latlng);
              node.pano = pano;
             
          }
            break;
          case LANGUAGE.Cameretta:
            

            if (node.childNodes[0].innerHTML == '')
            {
                
                geocoder.getLocations(latlng, function(response) {
                    if (!response) {
                      alert(LANGUAGE.ErroreIndirizzo);
                    } else if (response.Status.code != 200) {
                      alert(LANGUAGE.ErroreIndirizzo + "(" + LANGUAGE.Codice + "):" + response.Status.code);
                    } else {
                      var place = response.Placemark[0];
                      $('#sum').html( LANGUAGE.IndirizzoPuntoSelezionato + place.address) ;
                      
                    }
                });
				
                	getFeature(currentFeature);
	        }
            break;  
          case LANGUAGE.Monografia:
            
            if (node.childNodes[0].innerHTML == '')
            {
                
               if ($('#tabSchedaFotoCameretta').html().length == 0)
               { 
	                node.childNodes[0].innerHTML ='<div style="text-align:center">' + LANGUAGE.MessaggioCreazioneMonografia + '</div>';
	                //alert("http://"+ nomeWebSito +"/" + pathUrlSchedaCameretta + "/SchedaCamerettaService.svc/ArcSewer/SchedeCameretta?nomeCameretta=" + currentFeature.attributes[fieldNomeCameretta] + "&serviceName=" + encodeURIComponent(nomeServizioSOE)); 
	                $.ajax({
	                    type        : "GET", //GET or POST or PUT or DELETE verb
	                    url         : "http://"+ nomeWebSito +"/" + pathUrlSchedaCameretta + "/SchedaCamerettaService.svc/ArcSewer/SchedeCameretta?nomeCameretta=" + currentFeature.attributes[fieldNomeCameretta] + "&serviceName=" + encodeURIComponent(nomeServizioSOE), // Location of the server
	                    contentType : "application/json; charset=utf-8", // content type sent to server
	                    dataType    : "json", //Expected data format from server
	                    processdata : false, //True or False
	                    success     : ServiceSchedeCameretta,
	                    error: ServiceFailedSchedeCameretta  // When Service call fails
	                });
                
                }
                else
                {
                    GeneraSchedeCameretta();
                }
            }    
            else
            {
               //serve perchè quando la window è minimizzata aggiunge un parametro imageFetcherOpts che tolgo
               
               if (node.childNodes[0].innerHTML.search("imageFetcherOpts") != -1)
               {
                  node.childNodes[0].innerHTML = node.childNodes[0].innerHTML.replace(/imageFetcherOpts=\"null\"/g,"");
               }
               
            }
            
            break;  
          case LANGUAGE.Foto:
              
            if (node.childNodes[0].innerHTML == '')
            {
                if ($('#tabSchedaCameretta').html().length == 0)
                {
	                node.childNodes[0].innerHTML ='<div style="text-align:center">' + LANGUAGE.MessaggioCreazioneFoto +'</div>';
	                
	                $.ajax({
	                    type        : "GET", //GET or POST or PUT or DELETE verb
	                    url         : "http://"+ nomeWebSito +"/" + pathUrlSchedaCameretta + "/SchedaCamerettaService.svc/ArcSewer/SchedeCameretta?nomeCameretta=" + currentFeature.attributes[fieldNomeCameretta] + "&serviceName=" + encodeURIComponent(nomeServizioSOE), // Location of the server
	                    contentType : "application/json; charset=utf-8", // content type sent to server
	                    dataType    : "json", //Expected data format from server
	                    processdata : false, //True or False
	                    success     : ServiceSchedeFotoCameretta,
	                    error: ServiceFailedSchedeCameretta  // When Service call fails
	                });
                }
                else
                {
                    GeneraSchedeFotoCameretta();
                }
            }
            else
            {
               //serve perchè quando la window è minimizzata aggiunge un parametro imageFetcherOpts che tolgo
               if (node.childNodes[0].innerHTML.search("imageFetcherOpts") != -1)
               {
                  node.childNodes[0].innerHTML = node.childNodes[0].innerHTML.replace(/imageFetcherOpts=\"null\"/g,"");
               }
            }
            
            break;             
          }
        });
        
                
        GEvent.addListener(map, "maptypechanged", function() 
        { 
          if ((map.getCurrentMapType() == G_SATELLITE_MAP)||(map.getCurrentMapType() == G_HYBRID_MAP))
		  {   
	                $('#copyrightStudioAT').css({color : '#FFFFFF'});
	                $('#linkStudioAt').css({color : '#FFFFFF'});
	                $('#linkArcGisServer').css({color : '#FFFFFF'});
		  }
		  else
		  {
			$('#copyrightStudioAT').css({color : '#000000'});
			$('#linkStudioAt').css({color : '#000000'});
			$('#linkArcGisServer').css({color : '#000000'});
		  }
	    } ); 
       
        
                   
}

        
var schedaCameretta;
var schedaCamerettaCurrentIdx;
var schedaCamerettaNumero;

function ServiceSchedeCameretta(result,status)
{
     
     if (result.HasError)
     {
        $('#tabSchedaCameretta').html(LANGUAGE.ErroreMonografia);
        $('#tabSchedaFotoCameretta').html(LANGUAGE.ErroreSchedaFoto);
     }
     else
     {
        schedaCameretta= result.Scheda;
        urlSchedaCameretta = (isLocale?schedaCameretta[0]:schedaCameretta[0].replace(nomeWebLocale,nomeWebInternet));
        GeneraSchedeCameretta(); 
     }    
}

var urlSchedaCameretta;

function GeneraSchedeCameretta()
{       
   $('#tabSchedaCameretta').html("<div id='tabScheda' style='text-align:center'><div id='divSchedaCameretta'><embed src='" + urlSchedaCameretta + "' width='637' height='650'></embed></div></div>");    
}
function GeneraSchedeFotoCameretta()
{
        schedaCameretta.shift();
        schedaCamerettaNumero = schedaCameretta.length;
                
        if (schedaCamerettaNumero == 0)
        {
            $('#tabSchedaFotoCameretta').html("<table style='width:100%; height: 100%; text-align: center;color: #000000; font-style: italic; font-family: Arial, Helvetica, sans-serif; font-size: x-large'><td>" + LANGUAGE.FotoNonDisponibili + "</td></table>");
        }
        else
        {
            schedaCamerettaCurrentIdx = 1;
	        
	        var htmlSchedaCameretta ="<div id='tabSchedaFoto' style='text-align:center'><div><input type='button' onclick='schedaCamerettaCurrentIdx=1;listaSchedaCameretta(schedaCamerettaCurrentIdx);' value='&lt;&lt;'/><input type='button' onclick='--schedaCamerettaCurrentIdx;listaSchedaCameretta(schedaCamerettaCurrentIdx);' value=' &lt; '/><span id='NofMSchedaCameretta'></span><input type='button' onclick='++schedaCamerettaCurrentIdx;listaSchedaCameretta(schedaCamerettaCurrentIdx);' value=' &gt; '/><input type='button' onclick='schedaCamerettaCurrentIdx= schedaCamerettaNumero;listaSchedaCameretta(schedaCamerettaCurrentIdx);' value='&gt;&gt;'/></div><div id='divSchedaFotoCameretta'></div></div>";
        
            $('#tabSchedaFotoCameretta').html(htmlSchedaCameretta);
        
            var s = '';
            for (var i = 0; i < schedaCameretta.length; i++) {
        
               s += "<div id='divSchedaFotoCameretta" + i.toString() + "' style='display:none'><embed src='" + (isLocale?schedaCameretta[i]:schedaCameretta[i].replace(nomeWebLocale,nomeWebInternet)) + "' width='637' height='650'></embed></div>";
            }
        
            $('#divSchedaFotoCameretta').html(s);
            listaSchedaCameretta(schedaCamerettaCurrentIdx-1);   
        }
}



function ServiceSchedeFotoCameretta(result,status)
{
     if (result.HasError)
     {
        $('#tabSchedaCameretta').html(LANGUAGE.ErroreMonografia);
        $('#tabSchedaFotoCameretta').html(LANGUAGE.ErroreSchedaFoto);
     }
     else
     {
        schedaCameretta= result.Scheda;
               
        urlSchedaCameretta = (isLocale?schedaCameretta[0]:schedaCameretta[0].replace(nomeWebLocale,nomeWebInternet)); 
        
        GeneraSchedeFotoCameretta();        
          
     }
     
     
}




function listaSchedaCameretta(idx)
{
     var idxSchedaCameretta = idx;
     
     if (idxSchedaCameretta == 0)
     {
       idxSchedaCameretta = 1;
       schedaCamerettaCurrentIdx = idxSchedaCameretta;
     }
     else if (idxSchedaCameretta > schedaCamerettaNumero)
     {
       idxSchedaCameretta = schedaCamerettaNumero;
       schedaCamerettaCurrentIdx = schedaCamerettaNumero;
     }
     
     for (var i = 0; i < schedaCamerettaNumero; i++) {
     
       $('#' + 'divSchedaFotoCameretta' + i.toString()).css({display : 'none'});
   
     }
       
     	         
     $('#' + 'divSchedaFotoCameretta' + (schedaCamerettaCurrentIdx-1).toString()).css({display : 'block'});
	     	         
     $('#NofMSchedaCameretta').html(idxSchedaCameretta.toString() + " " + LANGUAGE.Di + " " + schedaCamerettaNumero.toString());

}


function ServiceFailedSchedeCameretta(XMLHttpRequest, textStatus, errorThrown)
{
     //alert(textStatus);    
     $('#tabSchedaCameretta').html(LANGUAGE.ErroreMonografia);
     $('#tabSchedaFotoCameretta').html(LANGUAGE.ErroreSchedaFoto);         
}


function GetBounds(latlng)
{
        var southWest = new GLatLng(latlng.lat() - toleranceIdentify, latlng.lng() - toleranceIdentify);
	var northEast = new GLatLng(latlng.lat() + toleranceIdentify, latlng.lng() + toleranceIdentify);
	return new GLatLngBounds(southWest, northEast);
}

function executeFind(searchText) {
    
    query = new esri.arcgis.gmaps.Query();
    query.returnGeometry = true;
    query.where = fieldNomeCameretta + " like '%" + searchText.toUpperCase() + "%'";
    query.outFields = outputFieldsCamerette;
    qtask.execute(query, false, findCameretta);
    
}


var listaFotoCameretta;
var currentIdx;
var numeroFoto;
var image;


function listaFoto(idx)
{
     	         
     var idxFoto = idx;
     
     if (idxFoto == 0)
     {
       idxFoto = 1;
       currentIdx = idxFoto;
     }
     else if (idxFoto > numeroFoto)
     {
       idxFoto = numeroFoto;
       currentIdx = numeroFoto;
     }
     
       
          
     image = new Image();
     image.id = 'fotoCameretta';
     image.onload = swapImage;
     $('#divfotoCameretta').html(LANGUAGE.MessaggioCaricamento);
     image.src = 'http://' + nomeWebSito + '/' + cartellaVirtualeFoto + '/' + listaFotoCameretta[idxFoto-1];
	     	         
     $('#NofMfotoCameretta').html( idxFoto.toString() + ' ' + LANGUAGE.Di + ' ' + numeroFoto.toString());
     
}

function swapImage() {
	if(image.complete) 
	{
	   if(image.width > image.height) 
	   {  
             image.style.width = '500px'; 
             image.style.height = 'auto';
           } 
           else 
           {
             image.style.height = '500px'; 
             image.style.width = 'auto';
           }

           var divfotoCameretta = document.getElementById('divfotoCameretta');
           if (divfotoCameretta.childNodes.length > 0)
           {
              while ( divfotoCameretta.firstChild ) divfotoCameretta.removeChild( divfotoCameretta.firstChild );     
           }
           divfotoCameretta.innerHTML = "";
           divfotoCameretta.appendChild(image);
	} 
	else 
	{
	   setTimeout("swapImage()", 250);
	}
}



var listaFotoCamerettaSezioni;
var currentIdxSezioni;
var numeroFotoSezioni;
var imageSezioni;
var listaFotoCamerettaSezioniNome;

function listaFotoSezioni(idx)
{
     	         
     var idxFoto = idx;
     
     if (idxFoto == 0)
     {
       idxFoto = 1;
       currentIdxSezioni = idxFoto;
     }
     else if (idxFoto > numeroFotoSezioni)
     {
       idxFoto = numeroFotoSezioni;
       currentIdxSezioni = numeroFotoSezioni;
     }
     
     imageSezioni = new Image();
     imageSezioni.id = 'fotoCamerettaSezioni';
     imageSezioni.onload = swapImageSezioni;
     $('#divfotoCamerettaSezioni').html( LANGUAGE.MessaggioCaricamento);
     imageSezioni.src = 'http://' + nomeWebSito + '/' + cartellaVirtualeFoto + '/' + listaFotoCamerettaSezioni[idxFoto-1];
	         
     $('#NofMfotoCamerettaSezioni').html(idxFoto.toString() + ' ' + LANGUAGE.Di + ' ' + numeroFotoSezioni.toString() + ' (' + listaFotoCamerettaSezioniNome[idxFoto-1] + ')');
}

function swapImageSezioni() {
	if(imageSezioni.complete) 
	{
	   if(imageSezioni.width > imageSezioni.height) 
	    {  
             imageSezioni.style.width = '500px'; 
             imageSezioni.style.height = 'auto';
        } 
        else 
        {
             imageSezioni.style.height = '500px'; 
             imageSezioni.style.width = 'auto';
        }
        var divfotoCameretta = document.getElementById('divfotoCamerettaSezioni');
        if (divfotoCameretta.childNodes.length > 0)
        {
              while ( divfotoCameretta.firstChild ) divfotoCameretta.removeChild( divfotoCameretta.firstChild );     
        }
        divfotoCameretta.innerHTML = "";
        divfotoCameretta.appendChild(imageSezioni);
	} 
	else 
	{
	   setTimeout("swapImageSezioni()", 250);
	}
}

//icona per profilo
function getIcon(color) {
  var icon = new GIcon();
  icon.image = "http://google.com/mapfiles/ms/micons/" + color + ".png";
  icon.iconSize = new GSize(32, 32);
  icon.iconAnchor = new GPoint(15, 32);
  icon.infoWindowAnchor = new GPoint(15, 32);
  return icon;
}

var cameretteProfiloMarker = [];
var cameretteProfilo = [];
var cameretteHistoryProfilo = [];

var camerettaGocciaMarker = [];
var camerettaGoccia = [];


function addCameretta(tipo)
{
      
      var c;
      var m;
      var n;
      if (tipo == 'profilo')
      {
          c = cameretteProfilo;
          m = cameretteProfiloMarker;
          n = 2;
      }
      else if (tipo == 'goccia')
      {
          c = camerettaGoccia;
          m = camerettaGocciaMarker;
          n = 1;
      }
      
      if ((c.length > 0) && (c[c.length-1] == currentFeature.attributes[OIDMaster]))
      {
         return;
      }
    
      if (c.length == n)
      {
         c.shift();
         map.removeOverlay(m[0]);
         m.shift();
      }
       
      c.push(currentFeature.attributes[OIDMaster]);

      
      
      var latLng = currentFeature.geometry[0].getLatLng();
      var marker = new GMarker(latLng, {icon: getIcon("red")});
      
      var a = currentFeature.attributes;     
      var html = LANGUAGE.NomeCameretta + ': ' + a['NomeCameretta'] +
        			  '<br>' + LANGUAGE.Comune + ': ' + a['Comune'] + 
        			  '<br>' + LANGUAGE.QuotaChiusino + ': ' + a['QuotaChiusino'] + 
        			  '<br>' + LANGUAGE.QuotaFondo + ': ' + a['QuotaFondoTXT'];
      
      map.addOverlay(marker);
      GEvent.addListener(marker, "click", function() {
	     marker.openInfoWindowHtml(html);
	  });
	  
	  
            
      m[m.length] = marker;
      
      
}

function VisualizePopUp()
{

        var latlng = currentFeature.geometry[0].getLatLng();
        
        var regular = '<div>' + LANGUAGE.NomeCameretta + ': ' + currentFeature.attributes['NomeCameretta'] +
        			  '<br>' + LANGUAGE.Comune + ': ' + currentFeature.attributes['Comune'] + 
        			  '<br>' + LANGUAGE.QuotaChiusino + ': ' + currentFeature.attributes['QuotaChiusino'] + 
        			  '<br>' + LANGUAGE.QuotaFondo + ': ' + currentFeature.attributes['QuotaFondoTXT'] +
        			  '</div>' +
        			  '<a href="javascript:void(0)" onclick="javascript:addCameretta(\'goccia\')">' + LANGUAGE.SelezionaPerAnalisiIdraulica + '</a><br>' + 
        			  '<a href="javascript:void(0)" onclick="javascript:addCameretta(\'profilo\')">'+ LANGUAGE.SelezionePerProfilo + '</a><br>' +
        			  '<a href="javascript:void(0)" onclick="javascript:map.getInfoWindow().maximize()">' + LANGUAGE.InformazioniAggiuntive + '</a>';
        
        var summary = '<div id="sum">' + LANGUAGE.Indirizzo +':' + latlng + '</div><a href="javascript:void(0)" onclick="javascript:map.getInfoWindow().restore()">' + LANGUAGE.InformazioniRidotte + '</a>';
        var panoDiv = document.createElement('div');
        panoDiv.style.width = "400px"; // can be anything, will be auto resized
        panoDiv.style.height= "200px";
        
		
		var tabs = [new MaxContentTab(LANGUAGE.Cameretta, '<div id="tabCameretta"></div>'),
		new MaxContentTab(LANGUAGE.Monografia, '<div id="tabSchedaCameretta"></div>'),
		new MaxContentTab(LANGUAGE.Foto, '<div id="tabSchedaFotoCameretta"></div>'),
		new MaxContentTab(LANGUAGE.FotoCameretta, '<div id="tabFotoCameretta"></div>'),
		new MaxContentTab(LANGUAGE.FotoSezioni, '<div id="tabFotoSezioni"></div>'),
		new MaxContentTab('streetview', panoDiv)];

        map.openMaxContentTabsHtml(latlng, regular, summary, tabs, {
          maxTitle: LANGUAGE.InformazioniDettagliate,
          selectedTab: LANGUAGE.Cameretta,// or use index 1,
          style: {
            tabOff: {
              backgroundColor: '#CCCCFF'
            }
          },maximized: false
        });
   
}

function setFeature(fset)
{
    currentFeature = fset.features[0];
    
    VisualizePopUp();
}

function checkCameretta(fset) {
   if (fset.features.length > 0)
   {
        setFeature(fset);
   } 
}

function findCameretta(fset) {

   if (fset.features.length > 0)
   {
        setFeature(fset);
        map.setCenter(currentFeature.geometry[0].getLatLng(), 18);
   }
   else
   {
       alert(LANGUAGE.CamerettaNonTrovata);
   }
}



function getFeature(feature)
{
    var tabCameretta = document.getElementById("tabCameretta");
    var tabFotoCameretta = document.getElementById("tabFotoCameretta");
    var tabFotoCamerettaSezioni= document.getElementById("tabFotoSezioni");
        
    var htmlCameretta = "<table style='width:650px;'><tr>" +
    					 "<td class='TabellaDatiCameretta'><strong>" + LANGUAGE.NomeCameretta + "</strong></td><td>" + feature.attributes["NomeCameretta"] + "</td></tr><tr>" + 
    					 "<td class='TabellaDatiCameretta'><strong>" + LANGUAGE.CodiceCameretta + "</strong></td><td>" + feature.attributes["IdCameretta"] + "</td></tr><tr>" +
			             "<td class='TabellaDatiCameretta'><strong>" + LANGUAGE.QuotaChiusino + " (m)</strong></td><td>" + feature.attributes["QuotaChiusino"] + "</td></tr><tr>" +
			             "<td class='TabellaDatiCameretta'><strong>" + LANGUAGE.Descrizione + "</strong></td><td>" + feature.attributes["IdDescrizioneCamerettaTXT"] + "</td></tr><tr>" +
			             "<td class='TabellaDatiCameretta'><strong>" + LANGUAGE.QuotaFondo + " (m)</strong></td><td>" + feature.attributes["QuotaFondoTXT"] + "</td></tr><tr>" +
    					 "<td class='TabellaDatiCameretta'><strong>" + LANGUAGE.CoordinataEst + " (Gauss Boaga - Roma40)</strong></td><td>" + feature.attributes["EST"] + "</td></tr><tr>" + 
    					 "<td class='TabellaDatiCameretta'><strong>" + LANGUAGE.CoordinataNord + " (Gauss Boaga - Roma40)</strong></td><td>" + feature.attributes["NORD"] + "</td></tr><tr>" + 
			             "</td></tr></table>";

    tabCameretta.innerHTML = htmlCameretta;
    
    if ((feature.attributes["ListaFotoCameretta"] == null) || (feature.attributes["ListaFotoCameretta"] == ''))
    {
       tabFotoCameretta.parentNode.innerHTML ="<table style='width:100%; height: 100%; text-align: center;color: #000000; font-style: italic; font-family: Arial, Helvetica, sans-serif; font-size: x-large'><td>" + LANGUAGE.FotoNonDisponibili + "</td></table>";
    }
    else
    {
       tabFotoCameretta.innerHTML ='<div id="tabFoto" style="text-align:center"><div><input type="button" onclick="currentIdx=1;listaFoto(currentIdx);" value="&lt;&lt;"/><input type="button" onclick="--currentIdx;listaFoto(currentIdx);" value=" &lt; "/><span id="NofMfotoCameretta"></span><input type="button" onclick="++currentIdx;listaFoto(currentIdx);" value=" &gt; "/><input type="button" onclick="currentIdx = numeroFoto;listaFoto(currentIdx);" value="&gt;&gt;"/></div><div id="divfotoCameretta"></div></div>';
       listaFotoCameretta = feature.attributes["ListaFotoCameretta"].split(';');
      
       numeroFoto = listaFotoCameretta.length;
       currentIdx = 1;
       listaFoto(currentIdx);
       
    } 
    
	
    if ((feature.attributes["ListaFotoSezioni"] == null) || (feature.attributes["ListaFotoSezioni"] == ''))
    {
       tabFotoCamerettaSezioni.parentNode.innerHTML ="<table style='width:100%; height: 100%; text-align: center;color: #000000; font-style: italic; font-family: Arial, Helvetica, sans-serif; font-size: x-large'><td>" + LANGUAGE.FotoNonDisponibili + "</td></table>";
    }
    else
    {
       tabFotoCamerettaSezioni.innerHTML ='<div id="tabFotoCamerettaSezioni" style="text-align:center"><div><input type="button" onclick="currentIdxSezioni=1;listaFotoSezioni(currentIdxSezioni);" value="&lt;&lt;"/><input type="button" onclick="--currentIdxSezioni;listaFotoSezioni(currentIdxSezioni);" value=" &lt; "/><span id="NofMfotoCamerettaSezioni"></span><input type="button" onclick="++currentIdxSezioni;listaFotoSezioni(currentIdxSezioni);" value=" &gt; "/><input type="button" onclick="currentIdxSezioni = numeroFotoSezioni;listaFotoSezioni(currentIdxSezioni);" value="&gt;&gt;"/></div><div id="divfotoCamerettaSezioni"></div></div>';
       listaFotoCamerettaSezioni = feature.attributes["ListaFotoSezioni"].split(';');
       listaFotoCamerettaSezioniNome = feature.attributes["ListaNomiSezioni"].split(';');

       numeroFotoSezioni = listaFotoCamerettaSezioni.length;
       currentIdxSezioni = 1;
       listaFotoSezioni(currentIdxSezioni);
    }
}



function addTileLayer(url,labelmenu,indexLayer,isVisible, order, options)
{
      layersVisible[indexLayer] = isVisible;
      
      var lyr = new esri.arcgis.gmaps.TiledMapServiceLayer(url, options, function (gTileLayer){overlay = new GTileLayerOverlay(gTileLayer, {zPriority: order}); layers[indexLayer] = { obj:overlay};if (layersVisible[indexLayer])switchLayer(true, layers[indexLayer]);});
      $("#box").append("<input name='mark' type='checkbox'" + (isVisible ?" checked='checked' ":" ") + "onclick='switchLayer(this.checked, layers[" + indexLayer.toString() + "]);' /> " + labelmenu + " <br />");
}


function addDynamicLayer(url,labelmenu,indexLayer,isVisible, parameters,opacity)
{
      layersVisible[indexLayer] = isVisible;
      
      var lyr = new esri.arcgis.gmaps.DynamicMapServiceLayer(url, parameters, opacity, function (groundov) { layers[indexLayer] = { obj: groundov }; groundov.hide(); map.addOverlay(groundov); if (layersVisible[indexLayer])switchLayer(true, layers[indexLayer]);});
      $("#box").append("<input name='mark' type='checkbox'" + (isVisible ?" checked='checked' ":" ") + "onclick='switchLayer(this.checked, layers[" + indexLayer.toString() + "]);' /> " + labelmenu + " <br />");
}


function hideAll() {

    var boxes = document.getElementsByName("mark");
    for (var i = 0; i < boxes.length; i++) {
        if (boxes[i].checked) {
            boxes[i].checked = false;
            switchLayer(false, layers[i]);
            chosen.push(i);
        }
    }
}


function checkChecked() {

    /* Returns true if a checkbox is still checked
    *  otherwise false
    */
    var boxes = document.getElementsByName("mark");
    for (var i = 0; i < boxes.length; i++) {
        if (boxes[i].checked) return true;
    }
    return false;
}

function switchLayer(checked, layer) {

    /* Function was originally borrowed from Esa:
    *  http://esa.ilmari.googlepages.com/dropdownmenu.htm
    */
    var layerbox = document.getElementById("box");
    var boxlink = document.getElementById("boxlink");
    var button = document.getElementById("more_inner");

    if (checked) {
        if (layer.obj instanceof GTileLayerOverlay) {
            
            //esri.arcgis.gmaps.TiledMapServiceLayer
            //overlay = mapExtension.addToMap(layer.obj);
            //layer.overlay = overlay;
            map.addOverlay(layer.obj);

        }
        else {

            layer.obj.show();
        }

        // Reset chosen array
        chosen.length = 0;
        /* Highlight the link and
        *  make the button font bold.
        */
        boxlink.className = "highlight";
        layerbox.className = "highlight";
        button.className = "highlight";
    }
    else {

        if (layer.obj instanceof GTileLayerOverlay) {
             //mapExtension.removeFromMap(layer.overlay);
             map.removeOverlay(layer.obj);
        }
        else {
            layer.obj.hide();
        }
        /*  Reset the link and the button
        * if all checkboxes were unchecked.
        */
        if (!checkChecked()) {
            boxlink.blur();
            boxlink.className = "";
            layerbox.className = "";
            button.className = "";
        }
    }
}

function showLayerbox() {

    if (window.timer) clearTimeout(timer);
    document.getElementById("box").style.display = "block";
    var button = document.getElementById("more_inner");
    button.style.borderBottomWidth = "4px";
    button.style.borderBottomColor = "white";
}


function setClose() {

    var layerbox = document.getElementById("box");
    var button = document.getElementById("more_inner");
    var bottomColor = checkChecked() ? "#6495ed" : "#c0c0c0";

    timer = window.setTimeout(function() {
        layerbox.style.display = "none";
        button.style.borderBottomWidth = "1px";
        button.style.borderBottomColor = bottomColor;
    }, 400);
}


function toggleLayers() {

    if (chosen.length > 0) {
        /* Make an independent copy of chosen array since switchLayer()
        *  resets the chosen array, which may not be useful here.
        */
        var copy = chosen.slice();
        for (var i = 0; i < copy.length; i++) {
            var index = parseInt(copy[i]);
            switchLayer(true, layers[index]);
            document.getElementsByName("mark")[index].checked = true;
        }
    }
    else {
        hideAll();
    }
}
//////////////////////////////////////////////////////////////////////////////



function MoreControl() { };
MoreControl.prototype = new GControl();
MoreControl.prototype.initialize = function(map) {

    var more = document.getElementById("outer_more");
    var buttonDiv = document.createElement("div");
    buttonDiv.id = "morebutton";
    buttonDiv.title = LANGUAGE.MostraNascondiLayer;
    buttonDiv.style.border = "1px solid black";
    buttonDiv.style.width = "86px";
    var textDiv = document.createElement("div");
    textDiv.id = "more_inner";
    textDiv.appendChild(document.createTextNode(titoloLayers));
    buttonDiv.appendChild(textDiv);

    // Register Event handlers
    more.onmouseover = showLayerbox;
    more.onmouseout = setClose;
    buttonDiv.onclick = toggleLayers;

    // Insert the button just after outer_more div
    more.insertBefore(buttonDiv, document.getElementById("box").parentNode);
    // Remove the whole div from its location and reinsert it to the map
    map.getContainer().appendChild(more);
    return more;
};


MoreControl.prototype.getDefaultPosition = function() {
    return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(220, 7));
};


function showAddress(address) {

    var geocoder = new GClientGeocoder();
    geocoder.getLatLng(address, function(point) {

        if (!point) {
            alert(address + LANGUAGE.IndirizzoNonTrovato);
        }
        else {
            map.setCenter(point, 17);
        }
    });
    //alert ("Level zoom:" + map.getZoom());
}

