// mapa.js
/* ----- Alterações Mapa ----- */

var map;
var geocoder;
var directions;
var pointCenter;
var endCenter;
var baseIcon;
var bounds;

// Inicio migração Navteq
var router;
var idRota;
// Fim migração Navteq

function callGoogleMaps() {

	if( GBrowserIsCompatible() ) {
	
      	bounds = new GLatLngBounds();
		
		map = new GMap2( document.getElementById("div_map") );
		
		geocoder = new GClientGeocoder();
		
		// Referente rota
		var directionsPanel = document.getElementById("rotaMapa");
		directions = new GDirections(map, directionsPanel);		
		GEvent.addListener(directions, "addoverlay", onGDirectionsAddOverlay);
		
		// Controles do mapa
		var customUI = map.getDefaultUI();
	    customUI.maptypes.physical = false;
	    map.setUI(customUI);
	    
	    // set ponto de origem
		pointCenter = new GLatLng( document.getElementById("latitude").value, 
									document.getElementById("longitude").value );

		// recupera o endereço do ponto de origem
		// e chama a função que plota os pontos no mapa
		geocoder.getLocations(pointCenter, getEnderecoCentro);

	}
}

function plotarPontosMapa(){

		map.setCenter( pointCenter, 15 );
		bounds.extend(pointCenter);
		
		// Configuração basica para os icones
		baseIcon = new GIcon();
        baseIcon.iconSize = new GSize(25, 35);
        baseIcon.iconAnchor=new GPoint(11,25);
        baseIcon.infoWindowAnchor = new GPoint(12, 0);

		var icon = new GIcon(baseIcon);
		if($("#idIconeMapa").val() != null && $("#idIconeMapa").val() != ""){
			icon.image = "downloadlogo.liv?idCentera="+$("#idIconeMapa").val();
		}else{
			icon.image = "visual/images/default_icon.gif";
			//icon = new GIcon(G_DEFAULT_ICON);
		}
		
		markerOptions = { icon:icon, draggable: false };
		
		// Recupera os estabelecimentos 
		for( var i = 0; i < document.getElementsByName("latitudes").length; i++ ) {
			var point = new GLatLng(
				document.getElementsByName("latitudes")[i].value,
				document.getElementsByName("longitudes")[i].value
			);
			
			if(i == 0){			
				bounds.extend(point);
			}
			var texto = new StringBuffer();
			texto.append(document.getElementsByName("infoWindowMap")[i].value);
			
			// Cria os pontos dos estabelecimentos encontrados na pesquisa			
			map.addOverlay( createMarker( point, texto , markerOptions ) );
		
		}
		
		// Set para o zoom ficar enquadrado entre o ponto de origem e o estabelecimento mais próximo
		map.setZoom(map.getBoundsZoomLevel(bounds)-1);
		
		map.setCenter(bounds.getCenter());

}

/* Recupera o endereço e cria o ponto de origem */
function getEnderecoCentro(response){

	$("#tabs").tabs("enable");
	
	if (!response || response.Status.code != 200) {
		setPontoOrigemNaoEncontrado();

	}else {
		plotarPontosMapa();
		place = response.Placemark[0];

		var endArray = place.address.split(",");
		
			
		endCenter = new StringBuffer();
		endCenter.append("<div class='divInfoWindow'><h2>Ponto de Origem<\/h2><b>Endereço: <\/b>");
		
		endCenter.append(endArray[0]).append(", ").append($("#numeroLogradouro").val()).append("<br \/>");
		endCenter.append(endArray[2]).append("<\/div>");
		
		// Icone do ponto de origem		
        var iconCenter = new GIcon(baseIcon);
        iconCenter.image = "visual/images/origem_icon.gif";
        
        iconCenter.iconSize = new GSize(25, 35);
        iconCenter.iconAnchor=new GPoint(11,31);        

		markerOptionsCenter = { icon:iconCenter, draggable: false };
		
		map.addOverlay(createMarker(pointCenter, endCenter, markerOptionsCenter));
	}

}

function setPontoOrigemNaoEncontrado(){
	
		$("#div_map").html("<br /><br /><p class=\"texto14\" align=\"center\">"+
		"<b>Não foi possível localizar o CEP no mapa.<br /><br />Confira na lista outros endereços de CEPs aproximados.</b>"+
		"<br /><br /><a href=\"javascript:setAba(0);\">Lista</a></p>");
		$("#destaqueView").html("");
		$("#parceirosOnlineView").html("");
		$("#rotaMapa").html("");
}

function setAba(indexTab){

	$("#tabs").tabs("option", "selected", indexTab)

}

/* traçar rota */
function tracarRota(lat, long){

	// Inicio migração Navteq
	/*
	var mywaypoints = [];
	var point = new GLatLng(lat, long);
	mywaypoints.push(pointCenter);
	mywaypoints.push(point);
	directions.loadFromWaypoints(mywaypoints, {preserveViewport: false});
	window.setTimeout( "setIframe();", 1000 );
	window.setTimeout( "setIframe();", 3000 );
	window.setTimeout( "setIframe();", 10000 );
	*/
	
	var origem = 
		new Map24.Location({
			Longitude: (document.getElementById("longitude").value * 60), 
			Latitude: (document.getElementById("latitude").value * 60)
		});
	
	var destino = 
		new Map24.Location({
			Longitude: (long*60), 
			Latitude: (lat*60)
		});
	
	if (router == null) {
		router = new Map24.RoutingServiceStub();
	}

    router.calculateRoute({
      Start: origem,
      Destination: destino,
      DescriptionLanguage: "pt",
      CallbackFunction: mostrarRota,
      ShowRoute: true
    });
	// Fim migração Navteq
	
}

// Remove os icones default do google ao traçar rota
function onGDirectionsAddOverlay(){
	
	var mi = 0;

	while (true)
	{
	    var m = directions.getMarker(mi++);
	    if (m == null){
	        break;
	    }else{
	        map.removeOverlay(m);
	        
	        /*var icon = G_START_ICON;
			var newMarker = new GMarker(m.getLatLng(), {icon:icon});
	        map.addOverlay(newMarker);	*/        
	    }
	}
	
	//setTimeout("mudarLogos()",500);
}

/*function mudarLogos(){

	var imagens = $("#rotaMapa img");
	if(imagens.length == 2){
		imagens[0].src = "visual/images/bandeira_azul.gif";
	
		var urlLogo;
		if($("#idIconeMapa").val() != null && $("#idIconeMapa").val() != ""){
			urlLogo = "downloadlogo.liv?idCentera="+$("#idIconeMapa").val();
		}else{
			urlLogo = "visual/images/bandeira_azul.gif";
		}
		imagens[1].src = urlLogo;
	}
}*/

/* Cria os pontos no mapa */
function createMarker(point, texto, markerOptions) {
	
	var marker = new GMarker(point, markerOptions);
	
  	GEvent.addListener(marker, "click", function() {
  	
    	marker.openInfoWindow(texto.toString());
	});

	return marker;
}

function iniciarMapa(){

	callGoogleMaps();
	
	$("#destaqueView").css("display", "block");
	$("#parceirosOnlineView").css("display", "block");
	
	var codigoProdutoPortoSeguro = document.getElementById( "selectProduto" ).value;
	var codigoDoTipoDeEstabelecimento = document.getElementById( "selectTipoDeEstabelecimento" ).value;	

	var urlPontosInteresse = new StringBuffer();
	urlPontosInteresse.append("obterdestaques.liv?operacao=pontosinteresse&codigoTipoEstabelecimento=")
						  .append(codigoDoTipoDeEstabelecimento)
						  .append("&codigoProduto=")
						  .append(codigoProdutoPortoSeguro)
						  .append("&baseCep=")
						  .append($("#baseCep").val())
						  .append("&complementoCep=")
						  .append($("#complementoCep").val())
						  .append("&codigoUsuario=")
						  .append($("#codigoUsuario").val())
						  .append("&numeroLogradouro=")
						  .append($("#numeroLogradouro").val())						  
						  .append(" #destaques");
	
	//alert(urlPontosInteresse.toString());
	
	$("#destaqueView").load(urlPontosInteresse.toString(),function() {setIframe();});
	
	var urlEstabOnline = new StringBuffer();
	urlEstabOnline.append("obterdestaques.liv?operacao=estabonline&codigoProdutoPortoSeguro=")
						  .append(codigoProdutoPortoSeguro)
						  .append("&codigoDoTipoDeEstabelecimento=")
						  .append(codigoDoTipoDeEstabelecimento)
						  .append("&flagAtendeOnline=S&codigoUsuario=")
						  .append($("#codigoUsuario").val())
						  .append(" #parceirosOnline");

	$("#parceirosOnlineView").load(urlEstabOnline.toString());
	setIframe();
}

/* Obtem os pontos no mapa dos tipos de estabelecimentos em destaque */
markersTipoServico = new Array();
function obterPontosMapa(campo, idImage){

	var markersAux = new Array();

	if(campo.checked == true){
	
		var urlPI = new StringBuffer();
		urlPI.append("obterdestaques.liv?operacao=obterposicoespontointeresse");
		urlPI.append("&longitudeDestaque=");
		urlPI.append($("#longitude").val());
		urlPI.append("&latitudeDestaque=");
		urlPI.append($("#latitude").val());
		urlPI.append("&tipoEstabelecimentoDestaque=");
		urlPI.append(campo.value);
	
	
		GDownloadUrl(urlPI.toString(), function(data, responseCode) {
		  var xml = GXml.parse(data);
	
			var iconPI = new GIcon(baseIcon);
			iconPI.image = "downloadlogo.liv?idCentera="+idImage;
			markerOptionsPI = { icon:iconPI, draggable: false };	  
			
			var markers = xml.documentElement.getElementsByTagName("marker");
		
			for (var i = 0; i < markers.length; i++) {
			var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
			                            parseFloat(markers[i].getAttribute("lng")));
			
				var conteudo = montarConteudoInfoWindow(
									markers[i].getAttribute("nome")
								   ,markers[i].getAttribute("endereco")
								   ,markers[i].getAttribute("telefone")
								   ,markers[i].getAttribute("lat")
								   ,markers[i].getAttribute("lng")
								   ,markers[i].getAttribute("codUnidade")
								   ,markers[i].getAttribute("codEstab")
								   ,markers[i].getAttribute("codTipo"));
	
				var marker = createMarker(point, conteudo , markerOptionsPI);
				
				map.addOverlay(marker);
				
				markersAux.push(marker);
			
		  }
		  
		  markersTipoServico[campo.value] = markersAux;
		  
		});
	
	}else{
		removeMarkers(campo.value);
	}
}

/* Remove os pontos do mapa. Referente aos tipos de estabelecimentos em destaque */
function removeMarkers(id){

	for(var iMarker = 0; iMarker < markersTipoServico[id].length; iMarker++){
	
		map.removeOverlay(markersTipoServico[id][iMarker]);
	}
	
	markersTipoServico[id] = null;
}

// Inicio migração Navteq
function iniciarMapaNavteq() {
	Map24.loadApi( ["core_api", "wrapper_api"] , map24ApiLoaded );
}

function map24ApiLoaded() {

	if (map == null) {

		map = "load"; // variavel setada para que o mapa não seja carregado novamente

		Map24.MapApplication.init( { NodeName: "div_map", MapType : "Static" } );
		
		tratarPontoCentral();
		plotarPontosAdjacentes();

	}
	
}

function tratarPontoCentral() {

   if (geocoder == null) {
   	geocoder = new Map24.GeocoderServiceStub();
   }
   
   geocoder.reverseGeocode({ 
      Longitude: (document.getElementById("longitude").value * 60), 
      Latitude: (document.getElementById("latitude").value * 60),
      CallbackFunction: plotarPontoCentral
   });

}

function plotarPontoCentral(location) {
									
	var myLoc = new Map24.Location({
		Longitude: (document.getElementById("longitude").value * 60),
		Latitude: (document.getElementById("latitude").value * 60), 
		LogoURL: "visual/images/origem_icon.gif",
		TooltipContent: "<h2>Ponto de Origem</h2><span class='texto'>Endereço: " + location.getStreet() + ", " + $("#numeroLogradouro").val() + "<br>" + location.getCity() + "</span>",
        TooltipOpen: "OnClick",
        TooltipClose: "OnClick",
        TooltipLayout: Map24.MapObject.LAYOUT_BALLOON,
        TooltipSize: Map24.MapObject.SIZE_M					
	});
	
	myLoc.commit();
	
	myLoc.center( { MinimumWidth: 30000 } );

}

function plotarPontosAdjacentes() {

	for( var i = 0; i < document.getElementsByName("latitudes").length; i++ ) {
	
		var myLocAjd = new Map24.Location({
			Longitude: (document.getElementsByName("longitudes")[i].value * 60),
			Latitude: (document.getElementsByName("latitudes")[i].value * 60), 
			LogoURL: (($("#idIconeMapa").val() != null && $("#idIconeMapa").val() != "") ? "downloadlogo.liv?idCentera="+$("#idIconeMapa").val() : "visual/images/default_icon.gif"),
			TooltipContent: document.getElementsByName("infoWindowMap")[i].value,
            TooltipOpen: "OnClick",
            TooltipClose: "OnClick",
            TooltipLayout: Map24.MapObject.LAYOUT_BALLOON,
            TooltipSize: Map24.MapObject.SIZE_M
		});
		
		myLocAjd.commit();
	
	}

}

function mostrarRota(rota) {
	
	if (idRota != null) {
		router.hideRoute({RouteId: idRota});
	}
		
	idRota = rota.RouteID;
	
	document.getElementById("rotaMapa").innerHTML = "";
	var texto = "<table class='tabela azul' width='100%'><tr><th class='fundo'>Rota passo a passo</th></tr>";
	texto += "<tr><td align='right'><i>" + (rota.TotalLength/1000).toPrecision(3) + "Km (aprox. " + Math.ceil(((rota.TotalTime)/(60))) + " minutos)</i></td></tr>";	

	var x = 1;	
    for(var i = 0; i < rota.Segments.length; i++){
    
      var seg = rota.Segments[i];
      var lat = seg.Start.Latitude;
      var lng = seg.Start.Longitude;      
    
      for(var j = 0; j < rota.Segments[i].Descriptions.length; j++){
        texto += "<tr style='cursor:hand' onclick='centralizarPonto(" + lat +", " + lng + ")'><td>" + x + ". " + rota.Segments[i].Descriptions[j].Text.replace(/(\[|\[\/)[0-9A-Z_]+\]/g, '' ) + "</td></tr>";
        x++;
      }
      
    }

    texto += "</table>";
    
    document.getElementById("rotaMapa").innerHTML = texto;
	
}

function centralizarPonto(lat,lng){

    var location = new Map24.Location({                              
      Latitude: lat,
      Longitude: lng
    });
                
	location.commit();
	location.center({ MinimumWidth: 1000 }); 

}

// Fim migração Navteq
