	
/********************************
 *     Variáveis  Públicas      *
 ********************************/ 
var map;
var start;
var marker = '';
var lat = '';
var long = '';
var listaMarcadores = new Array();
var mark;
var pino;
var controlMap;
var controladorMapBox;

function setTipoPino(tipo){
	pino = tipo;
}



/*
 * Carrega um mapa em uma div com seus respectivos marcadores
 * 
 * @param double latitude
 * @param double longirude
 * @param int zoom - Zoom desejado para a exibição do mapa
 * @param String id - id do elemento HTML no qual o mapa será exibido
 ************************************************************************/
function mapBox(latitude, longitude, zoom, id) {
	/*
	 * Variáveis
	 **********************************************/
	var marcList = new Array();
	var count = 0;
	
	if (GBrowserIsCompatible()) {
          var mapBox = new GMap2(document.getElementById(id));
          var coordenadas = new GLatLng(latitude, longitude);
          if(zoom == '' || zoom == 0 || zoom == undefined){
	      		var zoom = 13;
	      }
		  
          mapBox.setCenter(coordenadas, zoom);
          mapBox.addControl(new GLargeMapControl());
          mapBox.addControl(new GMapTypeControl());
		  GEvent.addListener(mapBox, "moveend", function() {
	          var center = mapBox.getCenter();
	     });
		 
		 if (latitude != 0 && longitude != 0) {
		  
		    /*Controle do map floatBox
		     *******************************************************************************************/
		     for(i=0; i<listaMarcadores.length; i++){
		     	if(listaMarcadores[i]!=null && listaMarcadores[i] != undefined && listaMarcadores[i]!='null'){
		     		marker  = new GMarker(listaMarcadores[i].getPoint(), markerOptions);
		     		mapBox.addOverlay(marker);
		     	}
		     }
		     
		     
		     /*
		  	controladorMapBox= new GMarkerManager(mapBox);
			for (i = 0; i < listaMarcadores.length; i++) {
				if(listaMarcadores[i]!=null && listaMarcadores[i] != undefined && listaMarcadores[i]!='null'){
					marcList[count] = listaMarcadores[i];
					++count;
				}
			}
			controladorMapBox.addMarkers(marcList,7,17);
			controladorMapBox.refresh();*/
			
			
			/* Controle do mapa direito
			 ******************************************************************************************/
			/*
			controlMap = new GMarkerManager(map);
			for (i = 0; i < listaMarcadores.length; i++) {
				if(listaMarcadores[i]!=null && listaMarcadores[i] != undefined && listaMarcadores[i]!='null'){
					marcList[count] = listaMarcadores[i];
					++count;
				}
			}
			controlMap.addMarkers(marcList,1,17);
			controlMap.refresh();*/
		}
	}
}


/*
 * Funções Básicas de tratamento de Texto
 *********************************************************/
function addslashes(str) {
	str=str.replace(/\\/g,'\\\\');
	str=str.replace(/\'/g,'\\\'');
	str=str.replace(/\"/g,'\\"');
	str=str.replace(/\0/g,'\\0');
	return str;
}
function stripslashes(str) {
	str=str.replace(/\\'/g,'\'');
	str=str.replace(/\\"/g,'"');
	str=str.replace(/\\\\/g,'\\');
	str=str.replace(/\\0/g,'\0');
	return str;
}
function retiraEspacos(string) {
	    var i = 0;
	    var final = '';
	    while (i < string.length) {
	        if (string.charAt(i) == ' ') {
	            final += string.substr(0, i);
	            string = string.substr(i+1, string.length - (i+1));
	            i = 0;
	        }
	        else {
	            i++;
	        }
	    }
	return final + string;
}


/*
 * Função para ampliar o mapa
 *************************************************************************/
function ampliarMapa() {
	var mapa = 'teste';
	var fb = new FloatBox('Mapa ampliado', mapa, 680, 280);
	fb.abrir();
	var zoom = 15
	if(lat == '' || long == ''){
		lat = 0;
		long = 0;
		zoom = 2;
	}
	mapBox(lat, long, zoom, 'content_modal');
}


/*
 * Atualiza os dados dos input de id longitude e latitude quando o mapa é arrastado
 ************************************************************************************/
function atualizaDados(coordenadas){
	  	var coord = coordenadas.split(',');
	  	latitude = coord[0].split('(');
	  	longitude = coord[1].split(')');
		
	  	document.getElementById("latitude").value = latitude[1];
	  	document.getElementById("longitude").value = retiraEspacos(longitude[0]);
	  	
}


/*
 * Separa as coordenadas vindas do google em latitude e longitude
 ***********************************************************************/
function formatarCoordenadas(coordenadas){
	  	var coord = coordenadas.split(',');
	  	latitude = coord[0].split('(');
	  	longitude = coord[1].split(')');
		
	  	lat = latitude[1];
	  	long = retiraEspacos(longitude[0]);
}


/*
 * Inicializa um mapa com as funcionalidades da Google Search para pesquisa, 
 * botões de estado (Híbrido, satélite, mapa), e controle de zoom
 **************************************************************************/
function initialize(latitude, longitude, zoom) {
        if (GBrowserIsCompatible()) {
        
          // Create and Center a Map
          map = new GMap2(document.getElementById("map_canvas"));
          var coordenadas = new GLatLng(latitude, longitude);
          if(zoom == '' || zoom == 0 || zoom == undefined){
	      	var zoom = 6;
	      }
          map.setCenter(coordenadas, zoom);
          map.addControl(new GLargeMapControl());
          map.addControl(new GMapTypeControl());
			 GEvent.addListener(map, "moveend", function() {
	          var center = map.getCenter();
	          atualizaDados(center.toString());
	        });

		  
          // bind a search control to the map, suppress result list
          map.addControl(new google.maps.LocalSearch(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,20)));
        }
}
      
      
/*
 * Cria um mapa estático (imagem) da google conforme as coordenadas, 
 * chave e zoom passados como parametro
 ***************************************************************************/
function mapaEstatico(latitude, longitude, zoom, chave){
	document.getElementById('mapa_estatico').src = 'http://maps.google.com/staticmap?center='+latitude+','+longitude+'&zoom='+zoom+'&size=390x300&maptype=mobile\&markers=40.702147,-74.015794,blues%7C40.711614,-74.012318,greeng%7C40.718217,-73.998284,redc\&key='+chave;
}

/*
 * Inicializa um mapa simples
 **************************************************************************/
function initializeSimpleMap1(latitude, longitude, zoom) {
     if (GBrowserIsCompatible()) {
       map = new GMap2(document.getElementById("mapa_estatico"))
       map.setCenter(new GLatLng(latitude, longitude), zoom);
       map.addControl(new GSmallMapControl());
     }
}

/*
 * Inicializa um mapa simples com as ferramentas da Google Search
 **************************************************************************/
function initializeSimpleMap2(latitude, longitude, zoom) {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map-alt"))
        map.setCenter(new GLatLng(latitude, longitude), zoom);
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        GEvent.addListener(map, "moveend", function() {
	          var center = map.getCenter();
	          atualizaDados(center.toString());
	        });
      }
}
	
/* 
 * Realiza uma busca no google e exibe a resposta caso a encontre e seja única adicionando um marcador
 ******************************************************************************/
function buscarNoMapa(endereco, cidade, latitude, longitude, cod){
var link;

	if(latitude=='' || longitude==''){
		//Realiza busca pelo endereço e nome da cidade
		var address = endereco;
		if(cidade == ''){
			//var lugar = document.getElementById('city_name').innerHTML;
			//address = address+', '+lugar;
		}
		else{
			var lugar = cidade
			address = address+', '+lugar;
		}
		
		if(endereco != ''){
		      var geocoder = new GClientGeocoder();
		      if (geocoder) {
		          geocoder.getLatLng(
		          address, 
		          function(point) {
		            if (!point) {
					  //Exibe janela de falha na localização
		              var jan = new FloatBox('Falha na localização', 'Não foi possível localizar esta atração', '250', '20');
		              jan.criarJanela();
		              jan.abrirJanela();
		            } 
					else {
						
						var baseIcon = new GIcon();
					  	//var url = 'http://www.eujafui.com.br';
					  	var url = 'http://eujafui.localhost';
					  	if(typeof(pino)=='number') url += '/imagens/pinos-mapa/atracao-'+pino+'.png';
					  	else if (typeof(pino)!='undefined') url += '/imagens/pinos-mapa/'+pino+'.png';
					  	
						baseIcon.image = url;
					    baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
					    baseIcon.iconSize = new GSize(41, 49);
					    baseIcon.shadowSize = new GSize(22, 28);
					    baseIcon.iconAnchor = new GPoint(20, 49);
						baseIcon.infoWindowAnchor = new GPoint(9, 2);
						baseIcon.infoShadowAnchor = new GPoint(18, 25);
						
					    var letteredIcon = new GIcon(baseIcon);
					
					    markerOptions = { icon:letteredIcon };
						
			              //Encontrou as coordenadas da atração
			              if(listaMarcadores.length == 0){
			              		map.setCenter(point, 13);
			              }
			              else{
			              	map.panTo(point, 13);
			              }
			              listaMarcadores[cod] = new GMarker(point, markerOptions);     
			              marker = listaMarcadores[cod];
						  
						  lat = latitude;
						  long = longitude;
		
						  
			              map.addOverlay(marker);
			              document.getElementById('show_'+cod).className = 'bt-placemap remove';
						  
			              var coord = marker.getPoint();
			              formatarCoordenadas(coord.toString());
			              var url = window.location;
						  url = url.toString()
						  url = url.split("http://");
						  link = url[1].split("/");
						  location.href = '#pmap';
						  
			              document.getElementById('show_'+cod).className = 'bt-placemap remove';
						  document.getElementById('show_'+cod).href= 'javascript:removerPino(\''+cod+'\', \''+latitude+'\', \''+longitude+'\', \''+addslashes(endereco)+'\', \''+addslashes(cidade)+'\')';
			              GEvent.addListener(marker, "dragstart", function() {
					          var coord = marker.getPoint();
					      });
			              start = point;
		            }
		          }
		        );
		      }
		    }
		    else{
		    	var jan = new FloatBox('Falha na localização', 'Não foi possível localizar esta atração', '250', '20');
		    	jan.criarJanela();
		    	jan.abrirJanela();
		    }
	}
	else{
	//Atualiza o mapa pelas coordenadas já cadastradas no sistema

	var baseIcon = new GIcon();
	//var url = 'http://www.eujafui.com.br';
	var url = 'http://eujafui.localhost';
	if(typeof(pino)=='number') url += '/imagens/pinos-mapa/atracao-'+pino+'.png';
	else if (typeof(pino)!='undefined') url += '/imagens/pinos-mapa/'+pino+'.png';
					  	
	baseIcon.image = url;
	baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
	baseIcon.iconSize = new GSize(41, 49);
	baseIcon.shadowSize = new GSize(22, 28);
	baseIcon.iconAnchor = new GPoint(20, 49);
	baseIcon.infoWindowAnchor = new GPoint(9, 2);
	baseIcon.infoShadowAnchor = new GPoint(18, 25);
						
	var letteredIcon = new GIcon(baseIcon);
	markerOptions = { icon:letteredIcon };
	
		var coordenadas = new GLatLng(latitude, longitude);
		if(listaMarcadores.length == 0){
		   	map.setCenter(coordenadas, 13);
		}
		else{
			map.panTo(coordenadas, 13);
		}
		lat = latitude;
		long = longitude;
		
		listaMarcadores[cod] = new GMarker(coordenadas, markerOptions);
		marker = listaMarcadores[cod];
		map.addOverlay(marker);
		var url = window.location;
		url = url.toString();
		url = url.split("http://");
		link = url[1].split("/");
		location.href = '#pmap';

		
		document.getElementById('show_'+cod).className = 'bt-placemap remove';
		document.getElementById('show_'+cod).href= 'javascript:removerPino(\''+cod+'\', \''+latitude+'\', \''+longitude+'\', \''+addslashes(endereco)+'\', \''+addslashes(cidade)+'\')';
	}
}



/* 
 * Remove um pino do mapa de acordo com as coordenadas setadas
 ************************************************************************/
function removerPino(cod, latitude, longitude, endereco, cidade){

	var ocultar = listaMarcadores[cod];
	ocultar.hide();
	document.getElementById('show_'+cod).className = 'bt-placemap add';
	document.getElementById('show_'+cod).href = 'javascript:buscarNoMapa(\''+addslashes(endereco)+'\', \''+cidade+'\', \''+latitude+'\', \''+longitude+'\', \''+cod+'\')';
	listaMarcadores[cod] = '';
}

/*
 * Carrega o mapa a partir de um endereço passado como parametro adicionando um ponteiro na localização encontrada
 ************************************************************************/
function loadEndereco(status) {
	  var address = document.getElementById("endereco").value;
	  
	  if(status==1){
		  if(document.getElementById('cidade').innerHTML != ''){
		  	var lugar = document.getElementById('cidade').innerHTML;
		  	address = address+', '+lugar;
		  }
	  }
	  else{
	  	  if(document.getElementById('cidade').value != ''){
		  	var lugar = document.getElementById('cidade').value;
		  	address = address+', '+lugar;
		  }
	  }
      
      var geocoder = new GClientGeocoder();
      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
            	if(status==1){
              		alert(address + " Não encontrado");
              	}
            } else {
              map.setCenter(point, 15);
              
              marker.hide();
              marker = new GMarker(point, {draggable: true});              
              map.addOverlay(marker);
              
              GEvent.addListener(marker, "dragstart", function() {
		          var coord = marker.getPoint();
		           atualizaDados(coord.toString());
		        });
              start = point;
            }
          }
        );
      }
}
	
	
/*
 * Carrega um mapa normal da google de acordo com as coordenadas setadas e com o zoom passado como parametro
 ************************************************************************************************************/
function mapPonteiro(latitude, longitude, zoom) {
      if (GBrowserIsCompatible()) {
        var opts = { onMarkersSetCallback: processMarkers, resultList : G_GOOGLEBAR_RESULT_LIST_SUPPRESS, suppressInitialResultSelection : true, showOnLoad: true};
        map = new GMap2(document.getElementById("map_canvas"), {googleBarOptions: opts});
        var center = new GLatLng(latitude, longitude);
        map.setCenter(center, zoom);
        map.enableGoogleBar();

        marker = new GMarker(center, {draggable: true});

        GEvent.addListener(marker, "dragstart", function() {
          var coord = marker.getPoint();
           atualizaDados(coord.toString());
        });
		
		map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
			 GEvent.addListener(map, "moveend", function() {
	          var center = map.getCenter();
	          atualizaDados(center.toString());
	        });
		  
          // bind a search control to the map, suppress result list
          map.addControl(new google.maps.LocalSearch(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,20)));
		  map.addOverlay(marker);

      }
}


/*
 * Mapa utilizado na inserção de cidades. Ele não atualiza as coordenadas quando o usuário move seu campo de visão. 
 * As coordenadas são atualizadas de acordo com o pino
 ************************************************************************************************************/
function mapCity(latitude, longitude, zoom) {
      if (GBrowserIsCompatible()) {
        
        //Define configurações do mapa
        var opts = { onMarkersSetCallback: processMarkers, showOnLoad: true};
        map = new GMap2(document.getElementById("map_canvas"), {googleBarOptions: opts});
        map.enableGoogleBar();
        var center = new GLatLng(latitude, longitude);
        map.setCenter(center, zoom);
       

        marker = new GMarker(center, {draggable: true});

        GEvent.addListener(marker, "dragstart", function() {
           var coord = marker.getPoint();
           atualizaDados(coord.toString());
        });
		
		map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());

        // bind a search control to the map, suppress result list
        map.addControl(new google.maps.LocalSearch(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,20)));
		map.addOverlay(marker);

      }
}

/*
 * Função chamada no retorno do resultado de busca da google 
 ***************************************************************************************/
function processMarkers(markers){

	lat = markers[0].result.lat;
    long = markers[0].result.lng;
    markers[0].marker.hide();
    
    atualizaDados('('+lat+', '+long+')');
	var coordinates = new GLatLng(lat, long);
	marker.setPoint(coordinates);
}


/*
 * Realiza a busca por nome em um mapa
 * 
 * @param String stringBusca - nome do lugar ou cidade que será buscado
 * 
 **************************************************************************************/
function buscarPorNome(stringBusca) {
	$(".gsc-input").attr('value',stringBusca);
	$(".gsc-search-button").click();
}


/*
 * Função de controle da busca e visualização do mapa de países
 **************************************************************************************/
function searchCountry(){
	var id = document.getElementById('pais').value;
	if(id!=0){
		var nomePais = document.getElementById(id).innerHTML;
		buscarPorNome(nomePais);
	}
}


/*
 * Busca uma cidade e um país
 **************************************************************************************/
function searchCity(cityName){
	var id = document.getElementById('pais').value;
	if(id!=0){
		var nomePais = document.getElementById(id).innerHTML;
		busca = nomePais+', '+cityName;
		buscarPorNome(busca);
	}
}

	
	