var g_imgReportArray_ON = ['gfx/gmaps/markerUndefined_ON.png','gfx/gmaps/markerGeneral_ON.png','gfx/gmaps/markerBus_ON.png','gfx/gmaps/markerHospital_ON.png','gfx/gmaps/markerHotel_ON.png','gfx/gmaps/markerInfo_ON.png','gfx/gmaps/markerMuseu_ON.png','gfx/gmaps/markerParking_ON.png','gfx/gmaps/markerRest_ON.png','gfx/gmaps/markerTaxi_ON.png','gfx/gmaps/markerTren_ON.png'];
var g_imgReportArray_OFF = ['gfx/gmaps/markerUndefined_ON.png','gfx/gmaps/markerGeneral_OFF.png','gfx/gmaps/markerBus_OFF.png','gfx/gmaps/markerHospital_OFF.png','gfx/gmaps/markerHotel_OFF.png','gfx/gmaps/markerInfo_OFF.png','gfx/gmaps/markerMuseu_OFF.png','gfx/gmaps/markerParking_OFF.png','gfx/gmaps/markerRest_OFF.png','gfx/gmaps/markerTaxi_OFF.png','gfx/gmaps/markerTren_OFF.png'];
var g_mapas=new Array();
var g_mapRestoreCenter=false;

function CMapWeb(divRetorno,map,boundingbox,infowindow) {
    this.m_divRetorno = divRetorno;
    this.m_map=map;
    this.m_markerArray= {};
    this.m_lastHighlighted=-1;
    this.m_infoWindow=infowindow;
    this.m_boundingBox=boundingbox;
}

//Struct per als markers(pantalla de seleccio. valors claus)
function MarkerReportStruct(idLocalization,lat, lon,marker,idTipusLocalitzacio) {
    this.idLocalization = idLocalization;
    this.lat= lat;
    this.lon= lon;
    this.marker= marker;
    if (idTipusLocalitzacio!=undefined)
        this.idTipusLocalitzacio= idTipusLocalitzacio;
    else
        this.idTipusLocalitzacio= 0;
}



//////////////////////////////////////////////////////////////////////////// 
/////////////////// ALL PURPOSES       /////////////////////////////////////
//////////////////////////////////////////////////////////////////////////// 
function findMarkerId(point_marker,divRetorno) 
{
    var markerArray=g_mapas[divRetorno].m_markerArray;
    var id = -1;
  
  for (var  i in markerArray) {
    if (markerArray[i].marker == point_marker) {
      id = i;
      break;
    }
  }
  return id;
}
function getMapType(mapType)
{
    switch(mapType){
        case "roadmap":
        var myTypeMap= google.maps.MapTypeId.ROADMAP;
        break;
        
        case "hybrid":
        var myTypeMap= google.maps.MapTypeId.HYBRID;
        break;

        case "satellite":
        var myTypeMap= google.maps.MapTypeId.SATELLITE;
        break;

        case "terrain":
        var myTypeMap= google.maps.MapTypeId.TERRAIN;
        break;

        default:
        var myTypeMap= google.maps.MapTypeId.ROADMAP;
        break;
    }
    return myTypeMap;
}

function checkHighlighted(index,divRetorno)
{
    var markerArray=g_mapas[divRetorno].m_markerArray;
    var strIndex=index+'';
    if (markerArray[strIndex]==undefined)
    {
        alert("No es troba marcador");
        imageON= g_imgReportArray_ON[0];            
        imageOFF= g_imgReportArray_ON[0];
    }
    else
    {
        if(g_mapas[divRetorno].m_lastHighlighted!=-1){
            try
            {
                var imageOFF = g_imgReportArray_OFF[markerArray[g_mapas[divRetorno].m_lastHighlighted].idTipusLocalitzacio];
                if(markerArray[g_mapas[divRetorno].m_lastHighlighted]!=undefined)
                    markerArray[g_mapas[divRetorno].m_lastHighlighted].marker.setIcon(imageOFF);    
            }
            catch(err)
            {
                g_mapas[divRetorno].m_lastHighlighted=-1;
            }
        }
        var imageON;
        imageON = g_imgReportArray_ON[markerArray[strIndex].idTipusLocalitzacio];
        markerArray[strIndex].marker.setIcon(imageON);    
        g_mapas[divRetorno].m_lastHighlighted=strIndex;    
    }
}
function deleteAllPointsReport(divRetorno)
{
    g_mapas[divRetorno].m_lastHighlighted=-1;
    var markerArray=g_mapas[divRetorno].m_markerArray;
    for(elem in markerArray)
    {
        markerArray[elem].marker.setMap(null); 
        delete markerArray[elem];
    }    
}
//////////////////////////////////////////////////////////////////////////// 
/////////////// REPORT  ////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////// 
function initReportLocalizations(lat,lng,zoomLevel,mapType,divMap)
{
    return initializeReport(lat,lng,zoomLevel,mapType,divMap);
}
function initializeReport(lat, lng, nivelZoom, mapID,divMap)
{
    if (!document.getElementById(divMap))
        return 0;
    
    var minZoomLevel = 4;
    var maxZoomLevel = 21;
    var myTypeMap=getMapType(mapID);
    var latlng = new google.maps.LatLng(lat, lng);
    var myOptions = {
        zoom: nivelZoom,       
        center: latlng,
				scrollwheel: false,
        disableDoubleClickZoom:true,       
        mapTypeId: myTypeMap};    
    var boundingBox;
    
    map = new google.maps.Map(document.getElementById(divMap), myOptions);   
    infowindow = new google.maps.InfoWindow({disableAutoPan: true    });
    boundingBox= new google.maps.LatLngBounds();    
    
    g_mapas[divMap]=new CMapWeb(divMap,map,boundingBox,infowindow);
    deleteAllPointsReport(divMap);
    return 1;
}
function showBubbleInfoWeb(idLocalization,divRetorno)
{
    var infoWindow=g_mapas[divRetorno].m_infoWindow;
    var contentMarker=ajSyncFunction('Core/Classes/GetLocData.php','frontend=1&action=GETMARKERDATA&IDLOCALIZATION='+idLocalization);
    infoWindow.setContent(contentMarker);             
    infoWindow.open(g_mapas[divRetorno].m_map, g_mapas[divRetorno].m_markerArray[idLocalization].marker);    
}

function renewBubbleInfoWeb(idLocalization,divRetorno)
{
    var infoWindow=g_mapas[divRetorno].m_infoWindow;
    var contentMarker=ajSyncFunction('Core/Classes/GetLocData.php','frontend=1&action=GETMARKERDATA&IDLOCALIZATION='+idLocalization);
    infoWindow.setContent(contentMarker);             
}


function setObjectToReportWeb(idOrigen,idTipusObjecte,divRetorno,noCenter,hideBubble,forcedIdTipus)
{
    var myMapType;
    var map=g_mapas[divRetorno].m_map;
    var strAdditionalParams="";
    var idTipusLoc;
    
    if(idOrigen)
      strAdditionalParams="&IDORIGEN="+idOrigen;
    
    strAdditionalParams+="&IDTIPUS_OBJECTE="+idTipusObjecte;
	
    var arrayReturn=ajSyncFunction('Core/Classes/GetLocData.php','frontend=1&action=GETLOCS'+strAdditionalParams);

    eval('var mapsUserPoints='+arrayReturn);
    var elemento;
    for (elemento in mapsUserPoints)
    {
        if(forcedIdTipus)  
          idTipusLoc=forcedIdTipus;  
        else
          idTipusLoc=mapsUserPoints[elemento].idTipusLocalitzacio;  
        
        addElemReport(divRetorno,mapsUserPoints[elemento].idLoc,mapsUserPoints[elemento].lat,mapsUserPoints[elemento].lon,idTipusLoc,mapsUserPoints[elemento].destacat,hideBubble);
    }
    
    
    if(!noCenter || noCenter==null)
    {
      var arrayReturn=ajSyncFunction('Core/Classes/GetLocData.php','frontend=1&action=GETDATA&IDORIGEN='+idOrigen+'&IDTIPUS_OBJECTE='+idTipusObjecte);
      eval('var localizationData='+arrayReturn);
      myMapType=getMapType(localizationData.mapType);
      var point=new google.maps.LatLng(localizationData.centerLat,localizationData.centerLng);
      map.setMapTypeId(myMapType);
      map.setZoom(localizationData.zoom);
      map.setCenter(point);
    }
}


function setCenterReport(idOrigen,idTipusObjecte,divRetorno)
{
        var map=g_mapas[divRetorno].m_map;
		var arrayReturn=ajSyncFunction('Core/Classes/GetLocData.php','frontend=1&action=GETDATA&IDORIGEN='+idOrigen+'&IDTIPUS_OBJECTE='+idTipusObjecte);
	    eval('var localizationData='+arrayReturn);
	    var point=new google.maps.LatLng(localizationData.centerLat,localizationData.centerLng);
	    map.setCenter(point);

}

function addElemReport(divRetorno,idLocalization,latitud,longitud,idTipusLocalitzacio,destacat,hideBubble)
{
    var newMarker;
    var latlng = new google.maps.LatLng(latitud, longitud);
    var img;
    if (destacat==0)
        img=g_imgReportArray_OFF[idTipusLocalitzacio];
    else
        img=g_imgReportArray_ON[idTipusLocalitzacio];
    
    newMarker=addMarkerReport(divRetorno,latlng,img,hideBubble);
    strIndex=idLocalization+'';
    var markerData = new MarkerReportStruct(strIndex,latitud,longitud,newMarker,idTipusLocalitzacio);
    g_mapas[divRetorno].m_markerArray[strIndex]=markerData;
    
    if (destacat!=0 && !hideBubble)
    {
        showBubbleInfoWeb(idLocalization,divRetorno);
    }
}
function addMarkerReport(divRetorno,latlng,image,hideBubble)
{
    var myDiv=divRetorno;
    var map=g_mapas[divRetorno].m_map;

    var marker = new google.maps.Marker({ 
        position: latlng,
        icon:image, 
        draggable:false,
        map: map });
    
    if(!hideBubble)
    {
      google.maps.event.addListener(marker, 'click', function(event) {
          idLocalization= findMarkerId(marker,myDiv);
          checkHighlighted(idLocalization,myDiv);
          showBubbleInfoWeb(idLocalization,myDiv);
          });
    }
    
    g_mapas[divRetorno].m_boundingBox=g_mapas[divRetorno].m_boundingBox.extend(latlng);    
    return marker;
}


