 //verifica se o navegador é compatível com o google maps
 if (GBrowserIsCompatible()) {
  //inicializando as variaveis que serão utilizadas
  var map;
  var ponto;
  var geo;
  var reasons=[];
  var i=0;
  var htmls="";
  var marker="";
  var to_htmls ="";
  var from_htmls = "";
  var html="";
  var html_direction="";
  var html_fechar="";
  var gdir;
  var from="";
  var opts;
  var options;

  //INICIO da função que cria o objeto do mapa e carrega o mapa default na tela
  function load() {

    //parametros utilizados para a busca local
    options = {
      resultList : google.maps.LocalSearch.RESULT_LIST_INLINE
    };

    //criando o mapa
    map = new GMap2(document.getElementById("map_interno"));
    map.addControl(new GSmallMapControl());//controle de zoom tamanho médio


    map.addControl(new GOverviewMapControl()); // mini mapa

    //alinhando o mapa no centro do brasil
    map.setCenter(new GLatLng(-20,-50), 3);

    //Define os tipos de mapa como no google maps
    map.addMapType(G_PHYSICAL_MAP);// Adicionando o tipo de mapa terreno

    // criando um controle hierarquico de tipos de mapa
    var hierarchy = new GHierarchicalMapTypeControl();

    //deixa como default o tipo de mapa satelite hibrido
    hierarchy.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, null, true);

    map.addControl(hierarchy);// adiciona o controle ao mapa

    geo = new GClientGeocoder(); //criando o objeto de geolocalização

    //vetor com os códigos de retorno traduzidos
    reasons[G_GEO_SUCCESS]            = "Successo";
    reasons[G_GEO_MISSING_ADDRESS]    = "Endereço ausente: O endereço está ausente ou não possue todos os campos";
    reasons[G_GEO_UNKNOWN_ADDRESS]    = "Endereço Desconhecido: Não foi possível encontrar a localização geográfica para o endereço especificado.";
    reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Endereço Indisponível: O geocódigo para o endereço dado não pode ser devolvido devido a razões legais ou contratuais.";
    reasons[G_GEO_BAD_KEY]            = "Chave Inválida: A API-chave são inválidas ou não coincide com o domínio para o qual foi dado";
    reasons[G_GEO_TOO_MANY_QUERIES]   = "Consultas Demasiados: O cota diária de consultas a geocódigos referente a este site tenha sido excedido.";
    reasons[G_GEO_SERVER_ERROR]       = "Erro no servidor: O pedido não pode ser processado com êxito.";
    reasons[G_GEO_BAD_REQUEST]        = "Uma direação não pode ser analisada com sucesso.";
    reasons[G_GEO_MISSING_QUERY]      = "Dados inválidos para a consulta de geocódigo";
    reasons[G_GEO_UNKNOWN_DIRECTIONS] = "O GDirections não conseguiu calcular os sentidos entre os pontos.";

  }
  //FIM da função que cria o objeto do mapa e carrega o mapa default na tela

  //INICIO da função que carrega o mapa de acordo com as coordenadas informadas
  function place(lat,lng) {

    var baseIcon = new GIcon();//cria o ícone que marcará o ponto de encontro das coordenadas
    baseIcon.iconSize = new GSize(28,28); //tamanho do icone
    baseIcon.shadowSize = new GSize(56,28); //tamanho da sombra
    baseIcon.iconAnchor = new GPoint(16,32); //posicionamento da ancora
    baseIcon.infoWindowAnchor = new GPoint(16,5); //posicionamento da base do box html

    //escolhendo o tipo de icone e a sua sombra
    var icone = new GIcon(baseIcon, "http://maps.google.com/mapfiles/kml/pal5/icon6.png", null, "http://maps.google.com/mapfiles/kml/pal5/icon6s.png");

    ponto = new GLatLng(lat, lng,true);//encontra no mapa o ponto de encontro das coordenadas
    marker = new GMarker(ponto,icone); //cria no mapa o icone

    //INICIO do html que será exibido no box
    to_htmls = 'Traçar Rota: <b>Para cá</b> - <a href="javascript:fromhere();">Daqui</a>' +
               '<br><form action="javascript:getDirections();"><b>Endereço Inicial:</b><br>' +
               '<input type="text" size="17" maxlength="50" name="saddr" id="saddr" value="" /> <input value="continuar" type="submit">' +
               '<input type="hidden" id="daddr" value="'+name+"@"+ ponto.lat() + ',' + ponto.lng() + '"/><br><font style="font-size: 9px; color: #444;">Ex.: Rua Antonio Alves, 13-77, Bauru, SP</font>';

    from_htmls = 'Traçar Rota: <a href="javascript:tohere();">Para cá</a> - <b>Daqui</b>' +
                 '<br><form action="javascript:getDirections();"><b>Endereço Final:</b><br>' +
                 '<input type="text" size="17" maxlength="50" name="daddr" id="daddr" value="" /> <input value="continuar" type="submit">' +
                 '<input type="hidden" id="saddr" value="'+name+"@"+ ponto.lat() + ',' + ponto.lng() + '"/><br><font style="font-size: 9px; color: #444;">Ex.: Rua Antonio Alves, 13-77, Bauru, SP</font>';

    html  = '<table cellspacing="0" cellpadding="0" style="padding: 0px; width: 220px; border: 0px;">';
    html += ' <tr><td align="center"><img src="./imagens/logotipo_p.gif" border=0 title="Cel-Lar Operações Imobiliárias"></td></tr>';
    html += ' <tr><td height="5"></td></tr>';
    html += ' <tr><td>Rua Antonio Alves, 13-77</td></tr>';
    html += ' <tr><td>Cep: 17015-330</td></tr>';
    html += ' <tr><td>Bauru-SP</td></tr>';
    html += ' <tr><td height="10"></td></tr>';
    html += '</table>';

    html_direction = 'Traçar Rota: <a href="javascript:tohere();">Para cá</a> - <a href="javascript: fromhere();">Daqui</a>';

    //FIM do html que será exibido no box

    gdir = new GDirections(map, document.getElementById("directions")); // criando o objeto que fará a rota

    GEvent.addListener(marker, "click", function() { //cria um listener para que seja exibido o box html, quando o icone for clicado
      marker.openInfoWindowHtml((html + html_direction));
    });

    map.setCenter(ponto,15);//centraliza a localização
    map.addOverlay(marker);//adiciona o marcador ao mapa

    //criando os eventos
    GEvent.trigger(marker, "click");

    GEvent.addListener(marker, "dragstart", function() {
      map.closeInfoWindow();
    });

    GEvent.addListener(marker, "dragend", function() {
      marker.openInfoWindowHtml((html + to_htmls));
    });

  }
  //função que limpa a rota e retorna ao mapa inicial
  function limparRota(){
    gdir.clear();
    load();
    showAddress();
  }
  //função que exibe o box na janela
  function tohere() {
      marker.openInfoWindowHtml((html + to_htmls));
  }

  //função que exibe o box na janela
  function fromhere() {
    marker.openInfoWindowHtml((html + from_htmls));
  }
  //função que fecha o box
  function fecharBox(){
    marker.closeInfoWindow();
  }

  //função que obtém a rota a partir de um endereço informado
  function getDirections() {
    document.getElementById("directions").innerHTML = "<b>Rota:</b>";
    var saddr = document.getElementById("saddr").value
    var daddr = document.getElementById("daddr").value
    gdir.load("from: "+saddr+" to: "+daddr);
    fecharBox();

  }
  //função que retorna a localização para os resultados da busca
  function getResultDirections(markers, tbody, num) {
    var lat = markers[num].result.lat;
    var lng = markers[num].result.lng;
    //var dir = new GDirections();
    GEvent.addListener(gdir, "load", function() {
      var tr = document.createElement('tr');
      var td = document.createElement('td');
      td.appendChild(document.createTextNode(markers[num].result.titleNoFormatting));
      tr.appendChild(td);
      var td = document.createElement('td');
      td.innerHTML = gdir.getDistance().html;
      tr.appendChild(td);
      tbody.appendChild(tr);
      if ((num+1) < markers.length) getResultDirections(markers, tbody, (num+1));
    });
    gdir.load("from: " + ponto.lat() + "," + ponto.lng()  + " to: " + lat + "," + lng);
  }

  //função que retorna os marcadores para os resultados da busca
  function processMarkers(markers) {
    document.getElementById("directions").innerHTML="";
    // note: markers is an array of LocalResult
    var table = document.createElement('table');
    var tbody = document.createElement('tbody');
    table.appendChild(tbody);
    document.getElementById("directions").appendChild(table);
    getResultDirections(markers, tbody, 0);
  }

  //INICIO da função que busca as coordenadas de acordo com o endereço informado
  function showAddress() {

    var lat = -22.324848;
    var lgt = -49.069100;
    var search = "Rua Antonio Alves, Bauru, SP";

    //buscando a localização
    geo.getLocations(search, function (result){
    map.clearOverlays();
      //chamando a função que monta o mapa, passando as coordenadas do endereço encontrado
      place(lat, lgt);
    });
  }
  GSearch.setOnLoadCallback(load); //após utilizar a busca, chama a função load()
} else {
  //navegador não compatível
  alert("Desculpe, o Google Maps API não é compatível com este navegador");
}
