var Dom = YAHOO.util.Dom;
var timeoutPeriod=30000;//tempo de timeout
if (!window.Event) {
  var Event = new Object();
}

TLEnumBusca={
    BuscaLocal:1,
    Rota:2
};
TLCookies={
    getCookieVal:function (offset) {
        var endstr = document.cookie.indexOf (";", offset);
        if (endstr == -1)
        endstr = document.cookie.length;
        return unescape(document.cookie.substring(offset, endstr));
     },
     GetCookie:function (name) {
        var arg = name + "=";
        var alen = arg.length;
        var clen = document.cookie.length;
        var i = 0;
        while (i < clen) {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg)
        return TLCookies.getCookieVal (j);
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) break; 
        }
        return null;
    },
    SetCookie:function (name, value) {
        var argv = arguments;
        var argc = arguments.length;
        var expires = (argc > 2) ? argv[2] : null;
        var path = (argc > 3) ? argv[3] : null;
        var domain = (argc > 4) ? argv[4] : null;
        var secure = (argc > 5) ? argv[5] : false;
        document.cookie = name + "=" + escape (value) +
        ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
        ((path == null) ? "" : ("; path=" + path)) +
        ((domain == null) ? "" : ("; domain=" + domain)) +
        ((secure == true) ? "; secure" : "");
    }
};
TLMapLink={
	    GetAdressList:function(pagina,uf,cidade,endereco,numero,callback){
	    
	          var geocoder= new MGeocoder();  //Geocodificador
	          var address=new MAddress(); //endereço a ser buscado
	         
	          address.city= new MCity(cidade,uf.toUpperCase());  
	          address.street= endereco;
              address.houseNumber= numero;
              
              var rr= new MResultRange();  //criando um "configurador" de resultados
              rr.pageIndex=pagina; //pagina a ser buscada
              rr.recordsPerPage=10; //numero de registro por pagina.
              geocoder.find(address,rr,callback);

		},
		GetPoiList:function(pagina,nome,uf,cidade,callback){
		     
		    var locator=new MWsAdressLocator();
		    var rr= new MResultRange();  //criando um "configurador" de resultados
            rr.pageIndex=pagina; //pagina a ser buscada
            rr.recordsPerPage=10; //numero de registro por pagina.
		    var objCid= new MCity(cidade,uf);
		   
		    locator.findPOI(nome, objCid, rr, callback)
		    
		    
		}
}
TLMapa={
    /*
        Abre a janela de envio de e-mail
    */
    EnviarEmail:function(){
         var latitudeOrigem=Dom.get("latitude_origem").value;
         var zoom=12;
         var empty= new String();
         if(latitudeOrigem==""){
//             var tmp= Dom.get("longitude_destino").value + "*" + Dom.get("latitude_destino").value + "*" + empty +
//                   "*" + empty+ "*" + empty + "*" + param.zoom + "*" + 
//                   selectedTitles + "*" + escape(param.address) + "*" +param.number + "*" +param.quarter+
//                  "*"+ param.latitude_max +"*"+param.latitude_min+"*"+param.longitude_max+"*"+
//                  param.longitude_min;
//          var arr= tmp.split("*");
//       
//          window.open("/templates/envia.aspx?tipo=buscalocal&mapaparams="+ tmp , 'EnviarBuscaLocal', 'width=314, height=377, scrollbars=auto');               
//                    
            alert("Trace uma rota primeiro");
            return;
         }
         var tmp= TLUtils.GetFormValues("uf_route","city_route","txtendereco_origem","txtendereco_destino","local_origem","local_destino","latitude_origem","longitude_origem","latitude_destino","longitude_destino","txtnumero_origem","txtnumero_destino","zoom");
         window.open(serverName+"/templates/envia.aspx?tipo=mapas_rotas&mapaparams="+ tmp , 'EnviarBuscaLocal', 'width=314, height=377, scrollbars=auto');                   
    },
   
    /*
        Abre a janela de impressão
    */
    Imprimir:function(){
        var Map = getMaplinkAPI().currentMap;
        var latitudeOrigem=Dom.get("latitude_origem").value;
        if (latitudeOrigem==""){
            var city="0|0|0|"+Dom.get("city_route").value;
            window.open(serverName+"/busca_local/imprimir_resultado_local.aspx?latitude="+Dom.get("gradeY").value+
                            "&longitude="+Dom.get("gradeX").value+"&zoom="+Map.getZoom()+"&city="+city+
                            "&state="+Dom.get("uf_route").value+"&address="+Dom.get("txtendereco_destino").value+
                            "&number="+Dom.get("txtnumero_destino").value,'imprimir','top=20,left=10,scrollbars=yes,status=yes');
            return false;
        }
        var longitudeOrigem=Dom.get("longitude_origem").value;
        var rota_carro=Dom.get("opt_rota_carro");
        var tpRota;
      
        if(rota_carro.checked){
            tpRota=0;
        }
        if(Dom.get("opt_rota_curta").checked){
            tpRota=1;
        }
        if(Dom.get("opt_rota_pe").checked){
            tpRota=2;
        }
        var latitudeDestino=Dom.get("latitude_destino").value;
        var longitudeDestino=Dom.get("longitude_destino").value;
        var endOrigem=Dom.get("txtendereco_origem").value;
        if(endOrigem==""){
            endOrigem=Dom.get("local_origem").value;
        }
        var endDestino=Dom.get("txtendereco_destino").value;
        if(endDestino==""){
            endDestino=Dom.get("local_destino").value;
        }
        endOrigem= escape(endOrigem);
        endDestino=escape(endDestino);
        var Zoom=Dom.get("zoom").value;
		
        var tipo_mapa="";
        if(Map !=null){
              
			tipo_mapa=Map.getCurrentMapType().ms;
        }
        window.open(serverName+'/busca_local/mapas_print.aspx?latitudeOrigem='+latitudeOrigem+'&longitudeOrigem='+longitudeOrigem +'&forma_rota='+tpRota+'&latitudeDestino='+ latitudeDestino+'&longitudeDestino='+longitudeDestino+'&enderecoOrigem='+endOrigem +'&enderecoDestino='+endDestino+'&opcao='+tpRota+'&tipo_mapa='+ tipo_mapa,'imprimir','top=20,left=10,width=600,height=560,scrollbars=yes,status=yes');
     },
     /*
        Paginação da lista de endereços gerada pelo AchaPoi
     */    
    
     PaginaPoi:function(pagina){
         var state=Dom.get("uf_route").value;
         var city=Dom.get("city_route").value;
         var address=Dom.get("local_"+TLUtils.EnderecoCorrente).value;
         TLUtils.currentPage=pagina;
         TLUtils.CarregandoGeral("show");
         TLMapLink.GetPoiList(pagina,address,state,city,TLMapa.GetAdressList_callBack);
  
     },   
     /*
        AchePoi --página 
        tp- origem ,destino
        
     */
     AchePoi:function(pagina,state,city,adress,tp){
       
         TLUtils.EnderecoCorrente=tp;
         TLUtils.currentPage=pagina;
         //pagina,nome,uf,cidade,callback
         TLUtils.CarregandoGeral("show");
         TLMapLink.GetPoiList(pagina,adress,state,city,TLMapa.GetAdressList_callBack);
        
     },
     /*
        int page, string state, string city, string address, string number
        tp- Tipo da caixa sendo atualizada 'origem' ou 'destino'
     */
     GetAdressList:function (pagina,state,city,adress,number,tp){
        TLUtils.CarregandoGeral("show");
       
        TLUtils.EnderecoCorrente=tp;
        TLUtils.currentPage=pagina;
        //pagina,uf,cidade,endereco,numero,callback
        TLMapLink.GetAdressList(pagina,state,city,adress,number,TLMapa.GetAdressList_callBack);
     
         
      },
      GetAdressList_callBack:function(aInfo){
               TLUtils.CarregandoGeral("hide");
               
               if(!aInfo || !aInfo.recordCount){  //endereço não encontrado ou erro no processo.
					if(!aInfo){
						alert("Não foi possível obter o endereço.");
					}else{
						alert("Endereço de "+TLUtils.EnderecoCorrente+" não encontrado.");
					}
					return;
			   }
               if(aInfo.recordCount > 1){
                    var corrente="txtendereco_"+TLUtils.EnderecoCorrente;
                    if (Dom.get(corrente).value ==""){
                        corrente="local_"+TLUtils.EnderecoCorrente;
                    } 
                    TLHelper.MostraEndereco(corrente,aInfo);
               }
               else{
                     
                     var objResposta;
                     if(aInfo.poiLocations){
                         objResposta=aInfo.poiLocations[0];
                     }
                     else{
                        objResposta=aInfo.addressLocation[0];
                     }
                     var corrente="txtendereco_"+TLUtils.EnderecoCorrente; 
                     if (Dom.get(corrente).value ==""){
                        Dom.get("local_"+TLUtils.EnderecoCorrente).value=objResposta.name;
                     }
                     else{
                          Dom.get("txtendereco_"+TLUtils.EnderecoCorrente).value=objResposta.address.street;
                          Dom.get("txtnumero_"+TLUtils.EnderecoCorrente).value=objResposta.address.houseNumber;
                     }
                  
                    
                    Dom.get("latitude_"+TLUtils.EnderecoCorrente).value=objResposta.point.y;
                    Dom.get("longitude_"+TLUtils.EnderecoCorrente).value=objResposta.point.x;
                  
                    if(TLUtils.EnderecoCorrente=="origem"){
                        TLMapa.TracarRotaDestino();
                        return;
                    }
                    if(TLUtils.EnderecoCorrente=="destino"){
                        TLMapa.TracarRotaFinal();
                        return;
                    }
               }
      },
      TracarRota:function (){
        TLUtils.PossuiMapa=false;
       
        TLUtils.Hide("divOrigem","divDestino");
        
        if(Dom.get("uf_route").value==""){
            alert("Selecione um estado");
            return;
        }
         if(Dom.get("city_route").value==""){
            alert("Selecione uma cidade");
            return;
        }
        //valida o form
         if(Dom.get("txtendereco_origem").value=="" && Dom.get("local_origem").value==""){
            alert("Preencha o endereço ou localidade de origem");
            
            return;
         }
         if(Dom.get("txtendereco_destino").value==""&& Dom.get("local_destino").value=="" ){
            alert("Preencha o endereço ou localidade de destino");
            return;
         }
         
         if(Dom.get("txtendereco_origem").value!=""){
            //pagina,state,city,adress,number,tp
           
            TLMapa.GetAdressList(1,Dom.get("uf_route").value,Dom.get("city_route").value,Dom.get("txtendereco_origem").value,Dom.get("txtnumero_origem").value,"origem");
            return;
         }
          if(Dom.get("local_origem").value!=""){
            //pagina,state,city,adress,number,tp
            
            TLMapa.AchePoi(1,Dom.get("uf_route").value,Dom.get("city_route").value,Dom.get("local_origem").value,"origem");
            return;
         }
       
      },
      /*
         pega a lista de endereço de destino
      */
      TracarRotaDestino:function (){
          
          if(Dom.get("txtendereco_destino").value!=""){
            
            TLMapa.GetAdressList(1,Dom.get("uf_route").value,Dom.get("city_route").value,Dom.get("txtendereco_destino").value,Dom.get("txtnumero_destino").value,"destino");
            return;
         }
          if(Dom.get("local_destino").value!=""){
            
            TLMapa.AchePoi(1,Dom.get("uf_route").value,Dom.get("city_route").value,Dom.get("local_destino").value,"destino");
            return;
         }
      },
      /*
        Traça a rota e o trajeto
      */
      TracarRotaFinal:function(){
      
        var mapCfg= new MMapConfig('img_map',new MMapSize(500,500));
        var rota_carro=Dom.get("opt_rota_carro");
        var tpRota;
      
        if(rota_carro.checked){
            tpRota=0;
        }
        if(Dom.get("opt_rota_curta").checked){
            tpRota=1;
        }
        if(Dom.get("opt_rota_pe").checked){
            tpRota=2;
        }
        TLUtils.CarregandoGeral("show");
        var addrOrigem= new MAddressLocation();
	    addrOrigem.point= new MPoint(
	                                    Dom.get("longitude_origem").value,
	                                    Dom.get("latitude_origem").value
	                                );
	      
	    var addrDestino= new MAddressLocation();
	    addrDestino.point= new MPoint(
	                                    Dom.get("longitude_destino").value,
	                                    Dom.get("latitude_destino").value
	                                );  
	                                                          
	    var ro= new MRouteOptions();
	    
       //dados da rota
       var rd= new MRouteDetails();
       if(tpRota ==0){
        rd.optimizeRoute=false;
       }
       else{
        rd.optimizeRoute=true;
       }
       rd.routeType= tpRota; 
       //dados do veiculo
       var ve= new MVehicle();
       ve.tankCapacity = 60;		//capacidade do tanque
       ve.averageConsumption=12;	//consumo médio		
       ve.fuelPrice = 2.5;			//preço do combustível
       ve.averageSpeed = 80;		//velocidade média
       ve.tollFeeCat = 0;			//não calcular pedágio.
       // define a base para gerar a rota
       var ro = new MRouteOptions();
       ro.vehicle = ve;
       ro.routeDetails = rd; 
      
		mapCfg.startRouteIcon=new GIcon(MGetBaseIcon());
		mapCfg.startRouteIcon.image = "http://maplink.uol.com.br/telelistas/imagens/ic_origem.gif";
		mapCfg.startRouteIcon.iconSize = new GSize(32, 13);
		mapCfg.startRouteIcon.iconAnchor = new GPoint(16, 13/2);
		mapCfg.startRouteIcon.shadow="";
		
		mapCfg.endRouteIcon=new GIcon(MGetBaseIcon());
		mapCfg.endRouteIcon.image ="http://maplink.uol.com.br/telelistas/imagens/ic_destino.gif";
		mapCfg.endRouteIcon.iconSize = new GSize(32, 12);   
		mapCfg.endRouteIcon.iconAnchor = new GPoint(16, 6);
		mapCfg.endRouteIcon.shadow="";
  
        var rMann= new MRouteMannager(null,mapCfg,ro);
   
	   
	    TLMapa.RouteManager=rMann;
        rMann.createRoute([addrOrigem,addrDestino], TLMapa.GeraMapaRota_Callback);                 
       
       
      },
      GeraMapaRota_Callback:function(estagioRota){
                
                var args= arguments;
                if(estagioRota != M_STAT_ROUTE){ //finalizou criacao da rota
                    return;
                }
				
                var Map=getMaplinkAPI().currentMap;
                if(Map!=null){
	                 
	                 TLHelper.AdicionaEventosMapa(Map);     
	            }
        
                var rMann= TLMapa.RouteManager;
                var info= rMann.routeInfo;
               
                TLUtils.Show("result_rota");
                
              
                var endOrigem=Dom.get("txtendereco_origem").value+","+ Dom.get("txtnumero_origem").value;
                var endDestino=Dom.get("txtendereco_destino").value+","+ Dom.get("txtnumero_destino").value;
                if(endOrigem.trim()==","){
                    endOrigem=Dom.get("local_origem").value;
                }
                if(endDestino.trim()==","){
                    endDestino=Dom.get("local_destino").value;
                }
                
                 Dom.get("lblEnderecoOrigem").innerHTML=endOrigem;
                 Dom.get("lblEnderecoDestino").innerHTML= endDestino;
                
                 
                 Dom.get("distancia").innerHTML= info.routeTotals.totalDistance.toString().replace(".",",");
				 if(info.routeTotals.taxiFare1!=null && info.routeTotals.taxiFare1 !=""){
					
					TLUtils.Show("result_taxi");
				
					var strBandeira="O valor estimado do táxi na bandeira 1 é: "+
									 "<strong>R$ "+
									 info.routeTotals.taxiFare1.toString()+										"<br></strong>";
					strBandeira+="O valor estimado do táxi na bandeira 2 é: "+
								"<strong>R$ "+info.routeTotals.taxiFare2.toString()+								  "<br></strong>"
					Dom.get("result_taxi").innerHTML=strBandeira;
														
				 }
				 else{
					
					Dom.get("result_taxi").innerHTML="&nbsp;<br/>&nbsp;";
										
					
				 }
                 //mapa
                 var htmlTrecho="<ul id=\"listagem_result_list2\" class=\"listagem_result_list2_fechada\">";
                 var tmp_html = "<li id=\"{0}\"><a href=\"javascript:TLMapa.MapearTrecho({1},'{2}','{3}')\" alt=\"{4}\" title=\"{5}\">{6}. {7} {8} km</a></li>";
                 for(var i=1; i < info.segDescription.length-1;i++){
                    var t= info.segDescription[i];
                    htmlTrecho+=String.format(tmp_html, "trecho" + i, "trecho" + i, t.point.y, t.point.x, t.command + " - " + t.description, t.command + " - " + t.description, i, t.command + " - " + t.description, t.distance.toString().replace(".",","));
                 }
                 Dom.get("listagem_result_list2_fechada").innerHTML=htmlTrecho+"</ul>";
                 Dom.get("id_rota").value=info.routeId;
                 
                 TLUtils.PossuiMapa=true;
            
                 Dom.get("latitude_max").value= info.MapInfo.extent.YMax;
                 Dom.get("latitude_min").value= info.MapInfo.extent.Ymin;
                 Dom.get("longitude_max").value= info.MapInfo.extent.XMax;
                 Dom.get("longitude_min").value= info.MapInfo.extent.XMin;
                
                 TLUtils.CarregandoGeral("hide");
          
      },
      MapearTrecho:function(id,latitude,longitude){
        //limpa trecho selecionado anteriormente
        var elChecked=Dom.getElementsByClassName("checked","li");
        
        if(elChecked !=null && elChecked.length >0){
            elChecked[0].className="";
        }
        //verifica se lista de resultados está aberta
       
        var elId=Dom.get(id);
        elId.className="checked";
        var elAcao=Dom.get("acao");
        if(elAcao.value=="fechar"){
            TLUtils.Abre_Fecha_Resultado();
        }
       
        var Zoom=180;
        TLUtils.CarregandoMapa();
       
        var m=getMaplinkAPI().currentMap;
        
        m.panTo(new GLatLng(latitude,longitude));
        m.showMapBlowup(new GLatLng(latitude,longitude),15);
        
        window.scrollTo(0,MFindPosition(m.getContainer()));
        TLUtils.CarregandoGeral("hide");
      }
        
};
/*
Classe usada para funções gerais de tela que não usam Ajax
*/
TLUtils={
        /*
            variáveis e constantes auxiliares
        */
        PossuiMapa:false,
        AlturaMapa:500,
        LarguraMapa:500,
        IsDebug:location.href.indexOf("debug")!=-1,
        EnderecoCorrente:"",//caixa de texto que chamou GetAdressList
        BuscaAtiva:TLEnumBusca.BuscaLocal,
          /*
         Cidades que possuem rotas por local
        */
        rotaAlias:["Rio de Janeiro","São Paulo","Barueri","Guarulhos","Osasco","Santana de Parnaíba","Santo André","São Bernardo do Campo","São Caetano do Sul"],
        FechaAviso:function(){
            Dom.get("mensagem").style.display='none';
        },
        MostraNaoLocal:function(){
            var div=Dom.get("localidade_local");
            if(div.style.display=="none" ||div.style.display==""){
                div.style.display="block";
				div.style.visibility="visible";
            }
			else{
				 div.style.display="none";
			}
           
        },
              
       //esconde ou exibe uma div
	   showHide:function (div,link){
		    var el= Dom.get(div);
    		
		    if(el.style.display=="" || el.style.display=="block" || el.style.visibility=="visible"){
			    TLUtils.Hide(div);
		    }
		    else{
			    TLUtils.Show(div);
		    }
		
		
	    },
	    EscondeCarregando:function(){
	        if (TLUtils.ModalCarregando != null){
					document.body.style.cursor="default";
	            TLUtils.ModalCarregando.hide();
	        }
	    },
	    CarregandoGeral:function(fn){
            if (TLUtils.ModalCarregando != null){
                if(fn=="show"){
						TLUtils.ModalCarregando.show();
                }
                else{
                   TLUtils.EscondeCarregando();
                }
            }
        },
         /*
            transforma valores do form em querysytring para
            envio de e-mail com (*) como separador
        */
        GetFormValues:function(){
            var args=arguments;
            var strRet= new String();
            for(var i=0;i< args.length;i++){
              var el=Dom.get(args[i]);
              if(el.value !=""){
                strRet += args[i]+'='+ escape(el.value) +'*';
              }
            }
            strRet=strRet.substr(0,strRet.length -1);
            return strRet;
        },
        HandleError:function(error){
            document.body.style.cursor="default";
            TLUtils.EscondeCarregando();
           
            if(TLUtils.IsDebug){
                if(typeof error=="object"){
                    var strError= new String();
                    for(var a in error){
                        strError +=a+"="+error[a]+"\n";
                    }
                    alert(strError);
                }
                else{
                    alert(error);
                }
            }
            else{
                alert("Ocorreu um erro inesperado, por favor tente mais tarde");
            }
        },
        //disparada pelo change das cidades de rota
        Mostra_NaoSabe:function(cid){
           //esconde as divs
           if(cid==null){
            return;
           }
           TLUtils.Hide("nao_origem","nao_destino");
           var vetCid=TLUtils.rotaAlias;
           for(var i=0;i< vetCid.length;i++){
                if(vetCid[i]==cid.trim()){
                     //mostra os links de não sabe endereço
                        TLUtils.Show("nao_origem","nao_destino");
                        
                        break;
                
                }
           }
       },
        /*
            Exibe a caixa de texto para digitação de local
            tp-'origem' ou 'destino'
        */
        ExibeLocal:function(tp){
            TLUtils.Show("endereco_"+tp);
            TLUtils.Hide("nao_"+tp);
            
        },
        /*
            Troca os endereços de origem com o de destino
        */
        TrocaEndereco:function(){
            
            var orig=Dom.get("txtendereco_origem").value;
            var destino=Dom.get("txtendereco_destino").value;
            var num_orig=Dom.get("txtnumero_origem").value;
            var num_dest=Dom.get("txtnumero_destino").value;
            Dom.get("txtendereco_destino").value=orig;
            Dom.get("txtendereco_origem").value=destino;
            Dom.get("txtnumero_origem").value=num_dest;
            Dom.get("txtnumero_destino").value= num_orig;
            orig=Dom.get("local_origem").value;
            destino=Dom.get("local_destino").value;
            Dom.get("local_origem").value=destino;
            Dom.get("local_destino").value=orig;
            
            if(Dom.get("longitude_origem").value !=""){
                orig=Dom.get("longitude_origem").value;
                destino=Dom.get("longitude_destino").value;
                
                Dom.get("longitude_origem").value=destino;
                Dom.get("longitude_destino").value=orig;
                
                orig=Dom.get("latitude_origem").value;
                destino=Dom.get("latitude_destino").value;
                
                Dom.get("latitude_origem").value=destino;
                Dom.get("latitude_destino").value=orig;
                TLMapa.TracarRotaFinal();
            }
            
        },
        //abre ou fecha o resultado
        Abre_Fecha_Resultado:function(){
           
            var elAcao=Dom.get("acao");
            var acao=elAcao.value;
           
            if(acao=="abrir"){
                 elAcao.value="fechar";
                 var attributes = {
                       left: { by: -260},
                       width:{ to: 490}
                 };

                 var myAnim = new YAHOO.util.Anim('result_list2_fechada', attributes);
                   
                 myAnim.animate(); 
               
                 attributes = {
                       width:{ to: 480}
                 };
                 myAnim = new YAHOO.util.Anim('listagem_result_list2_fechada', attributes);
                 myAnim.animate();   
                Dom.get("imgAbre").src="img/control_bar_close.gif";
                
            }
            else{
                elAcao.value="abrir";
                var attributes = {
                       width:{ to: 222}
                 };
                 myAnim = new YAHOO.util.Anim('listagem_result_list2_fechada', attributes);
                 myAnim.animate();  
               
                attributes = {
                       left: { by: 260},
                       width:{ to: 232}
                 };

                 var myAnim = new YAHOO.util.Anim('result_list2_fechada', attributes);
                   
                 myAnim.animate(); 
                
                  
                 Dom.get("imgAbre").src="img/control_bar.gif";
            }
            return false;
        },
        novaBusca:function(){
                
				TLUtils.HabilitaMapear(false);
				Dom.get("divResultadoBusca").innerHTML="";
				Dom.get("result_list2").innerHTML="";
				Dom.get("ListaEndereco").innerHTML="";
				var tits=TLUtils.titulosSelecionados();
				if(tits !=""){
					Dom.get("result_list1").innerHTML="";
				}
				
				Dom.get("divPaginacoBusca").innerHTML="";
				TLUtils.EscondeCarregando();
				TLUtils.Hide("ListaEndereco","resBusca","Comentarios","localidade_local");
				Dom.get("selectionaTodas").checked=false;
			},
      /*
       Habilita/desabilita o botão "Colocar no mapa"
      */
       Hide:function(){
        var args=arguments;
        for(var i=0;i<args.length;i++){
            if(Dom.get(args[i])!=null){
                Dom.get(args[i]).style.visibility="hidden";
                Dom.get(args[i]).style.display="none";
            }
            
        }
      },
      Show:function(){
        var args=arguments;
        for(var i=0;i<args.length;i++){
            if(Dom.get(args[i])!=null){
                Dom.get(args[i]).style.visibility="visible";
                Dom.get(args[i]).style.display="inline";
            }
        }
      },
      CarregandoTitulos:function(){
           TLUtils.CarregandoGeral("show");
      },
      CarregandoMapa:function(){
              TLUtils.CarregandoGeral("show");
      },
      CarregaPagina:function(){
               	
	
			        
		        if(TLUtils.ModalCarregando==null){
		                TLUtils.ModalCarregando=
		                            new YAHOO.widget.Panel("wait",  
															        { width:"240px", 
															          fixedcenter:true, 
															          close:false, 
															          draggable:false, 
															          modal:true,
															          visible:false
															        } 
					        );
        	
					        TLUtils.ModalCarregando.render(document.body);

		         }
				if(typeof MaplinkAPI == "undefined"){
					alert("Falha ao gerar o mapa");
					return;
				}
				control= new MaplinkAPI();
				if(!control){
				        alert("Falha ao gerar o mapa");
				        return;
				}
				getMaplinkAPI().setAutoShowErrors(false); //Desabilita controle de erros automático.
	            
	           var uf="",localidade="",endereco="",numero="";
			   
	           TLUtils.SelecionaCerto('uf_route',Dom.get("uf").value);
	           
		       TLHelper.GetCidadesRota.defer(50,this,[Dom.get("uf_route")]);
		       localidade=Dom.get("localidade").value
			   if(localidade !=null){
		          TLUtils.SelecionaCerto('city_route',localidade);
		          TLUtils.Mostra_NaoSabe(localidade);
    		    }
		       
		        Dom.get("txtendereco_destino").value= Dom.get("enderecoreg").value;
		        Dom.get("txtnumero_destino").value= Dom.get("numeroreg").value
				YAHOO.util.Event.addListener(Dom.get("txtendereco_origem"), "click",function(){TLUtils.Hide("ListaEndereco");}); 
				YAHOO.util.Event.addListener(Dom.get("txtendereco_destino"), "click",function(){TLUtils.Hide("ListaEndereco");}); 
		
		    gradeX=$("gradeX").value;
			gradeY=$("gradeY").value;               
		    var Map= new MMap2(Dom.get("img_map"));
		    Map.addControl(new MMapControls());
		    Map.addControl(new GLargeMapControl());
			var point=new GLatLng(gradeY,gradeX)
		    Map.setCenter(point,17);
		    var mcIcon = new GIcon(Map.iconDefault);
		    mcIcon.image = ImgPath+"/img/por_servmapa_alvo.gif";
		    mcIcon.iconSize = new GSize(25, 24);
		    mcIcon.shadowSize= new GSize(0,0);
		    mcIcon.iconAnchor = new GPoint(25/2, 12);
		    var marker=new GMarker(point, mcIcon);
		    Map.addOverlay(marker);
			TLHelper.AdicionaEventosMapa(Map);	
				
				
     },
     //seleciona o ítem de um combo
     SelecionaCerto:function(nm_combo,valor){

	        if(valor==null ||valor.length ==0)
		        return;
	        combo= Dom.get(nm_combo);
    		if(combo==null || combo.options.length ==0){
    		    TLUtils.SelecionaCerto.defer(50,this,[nm_combo,valor]);
    		    return;
    		}
	        for(i=1;i< combo.options.length;i++){
	           
		        if(combo.options[i].value.toUpperCase()==valor.toUpperCase() || combo.options[i].text.toUpperCase()==valor.toUpperCase() ){
			        combo.selectedIndex=i;
			        return;
		        }
	        }
	  }
     
};
/*
Funções auxiliares e comuns a mapas e rotas

*/
TLHelper ={
        /*
            Adiciona marcador no centro do mapa
        */
        AddCenter:function(Map){
         
             var mcIcon = new GIcon(Map.iconDefault);
             mcIcon.image = ImgPath+"/img/por_servmapa_alvo.gif";
             mcIcon.iconSize = new GSize(25, 24);//W,H
             mcIcon.shadowSize= new GSize(0,0);
             mcIcon.iconAnchor = new GPoint(25/2, 12);
             var marker=new GMarker(Map.getCenter(), mcIcon);
	         Map.addOverlay(marker);
	         Dom.get("longitude_min").value= Map.getBounds().getSouthWest().lng(); 
             Dom.get("longitude_max").value= Map.getBounds().getNorthEast().lng();
             Dom.get("latitude_min").value= Map.getBounds().getSouthWest().lat();
             Dom.get("latitude_max").value= Map.getBounds().getNorthEast().lat();
             Dom.get("xMedio").value= Map.getCenter().lng();
             Dom.get("yMedio").value= Map.getCenter().lat();
             var NivelZoom = Map.getZoom();
             Dom.get("zoom").value= NivelZoom;
        },
        /*
            Adiciona eventos de final de zoom e final de movimento
            ao mapa
        */
        AdicionaEventosMapa:function(Map){
             //Fim zoom
             GEvent.addListener(Map, "zoomend", function() {  
                    
                    Dom.get("longitude_min").value= this.getBounds().getSouthWest().lng(); 
                    Dom.get("longitude_max").value= this.getBounds().getNorthEast().lng();
                    Dom.get("latitude_min").value= this.getBounds().getSouthWest().lat();
                    Dom.get("latitude_max").value= this.getBounds().getNorthEast().lat();
                    Dom.get("xMedio").value= this.getCenter().lng();
                    Dom.get("yMedio").value= this.getCenter().lat();
                    var NivelZoom = this.getZoom();
                    Dom.get("zoom").value= NivelZoom;
                    
                });
             //fim movimentação   
             GEvent.addListener(Map, "moveend", function() {
                    
                    Dom.get("longitude_min").value= this.getBounds().getSouthWest().lng(); 
                    Dom.get("longitude_max").value= this.getBounds().getNorthEast().lng();
                    Dom.get("latitude_min").value= this.getBounds().getSouthWest().lat();
                    Dom.get("latitude_max").value= this.getBounds().getNorthEast().lat();
                    Dom.get("xMedio").value= this.getCenter().lng();
                    Dom.get("yMedio").value= this.getCenter().lat();
                    var NivelZoom = this.getZoom();
                    Dom.get("zoom").value= NivelZoom;
                    
                });  
            
             Map.addControl(new MMapControls());	
             Map.addControl(new GLargeMapControl());
        },
        EnviarEmail:function(){
            TLMapa.EnviarEmail();
           
         },
         Imprimir:function(){
			TLMapa.Imprimir();
       },
               /*
            Função chamada pelo componente 
            quando um endereço é clicado na lista de endereços
         */
         BuscaIntermediaria:function(addkey,id,latitude,longitude,numero){
            
            var elEndereco=Dom.get("addstreet"+id);
                  TLUtils.Hide("ListaEndereco");
                  
                  Dom.get("ListaEndereco").innerHTML="";
                  var corrente=TLUtils.EnderecoCorrente;
                  if(Dom.get("txtendereco_"+corrente).value !=""){
                    Dom.get("txtendereco_"+corrente).value=elEndereco.value;
                    Dom.get("txtnumero_"+corrente).value=numero;
                  }
                  else{
                    Dom.get("local_"+corrente).value=elEndereco.value;
                  }
                  Dom.get("latitude_"+corrente).value=latitude;
                  Dom.get("longitude_"+corrente).value=longitude;
                  //indica que este endereço já foi mapeado
                  if(corrente=="origem"){
                    TLMapa.TracarRotaDestino();
                  }
                  else{
                    
                    TLMapa.TracarRotaFinal();
                  }
                  
            
        },
        
        GetAdressList:function(pagina){
                TLUtils.CarregandoTitulos();
                //uf,localidade,bairro,endereco,numero
					//int page, string state, string city, string address, string number
                    var corrente=TLUtils.EnderecoCorrente;
                    var address=Dom.get("txtendereco_"+corrente).value;
                    var number=Dom.get("txtnumero_"+ corrente).value;
                    
                    
                    TLMapa.GetAdressList(pagina,Dom.get("uf_route").value,Dom.get("city_route").value,address,number,corrente)
				   
                 
                
          },
       
        MostraEndereco:function(nome_div,aInfo){
                
                var elEndereco=  Dom.get("ListaEndereco");
                Dom.get("ListaEndereco").innerHTML="";
                var pos= Dom.getXY(nome_div);
                elEndereco.style.top=(pos[1]+20)+"px";
                elEndereco.style.left=pos[0]+"px";
                //Dom.setXY("ListaEndereco",[pos[0],pos[1]+20]);//left top
                var html;
          
                    var isPoi=aInfo.poiLocations !=null;
                    var lnkPagina="TLHelper.GetAdressList";
                    if(isPoi){
                        lnkPagina="TLMapa.PaginaPoi";
                    }
                    var totalRegistros=aInfo.recordCount;
                   
					var dados=aInfo.addressLocation || aInfo.poiLocations;
					html="<table width=\"380\" border=\"0\" cellpadding=\"1\" cellspacing=\"0\" bgcolor=\"7E9624\">";
                    html+="<tr><td align=\"center\" valign=\"top\">";
                    html+="<table width=\"378\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#FFFFFF\">";
                    html+="<tr><td align=\"center\" valign=\"top\"><table width=\"378\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
                    html+="<tr><td valign=\"top\"><table width=\"378\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
					 //linha com o fechar--
                    html+="<tr><td width=\"10\" height=\"18\" bgcolor=\"A3AE79\"></td>";
                    html+="<td width=\"363\" align=\"right\" valign=\"middle\" bgcolor=\"A3AE79\" class=\"text_pequeno\">";
                    html+="<a href='javascript:TLUtils.Hide(\"ListaEndereco\")'><font color='white'>Fechar</font></a>";
                    html+="</td><td width=\"5\" height=\"18\" bgcolor=\"A3AE79\"></td></tr>";
                    for(var i=0; i<dados.length; i++){
                       
                        var aLoc=dados[i];
                        
                        html+="<tr><td width=\"10\" height=\"18\" bgcolor=\"F1F3E6\"></td>";
                        html+="<td width=\"363\" align=\"left\" valign=\"middle\" bgcolor=\"F1F3E6\" class=\"text_pequeno\">";
                        if(aLoc.address !=null){
                            html+="<a href=\"javascript:TLHelper.BuscaIntermediaria("+i+","+i+",'"+aLoc.point.y +"','"+aLoc.point.x+"','"+aLoc.address.houseNumber+"')\">";
                            html+="<input type=\"hidden\" id=\"addstreet"+i+"\" value=\""+ aLoc.address.street +"\"></input>";
                            html+="<input type=\"hidden\" id=\"addlocalidade"+i+"\" value=\""+ aLoc.address.city.name +"\"></input>";
                            html+=aLoc.address.street+ " , "+aLoc.address.houseNumber + " - " + aLoc.address.district +"("+aLoc.address.city.name+")";
                        }
                        else{
                            html+="<a href=\"javascript:TLHelper.BuscaIntermediaria("+i+","+i+",'"+aLoc.point.y +"','"+aLoc.point.x+"','')\">";
                            html+="<input type=\"hidden\" id=\"addstreet"+i+"\" value=\""+ aLoc.name +"\"></input>";
                            html+="<input type=\"hidden\" id=\"addlocalidade"+i+"\" value=\""+ aLoc.city.name +"\"></input>";
                            html+=aLoc.name + " - " + aLoc.district +"("+aLoc.city.name+")";
                        }
                        html+="</a></td><td width=\"5\" height=\"18\" bgcolor=\"F1F3E6\"></td></tr>";
                        html+="<tr><td height=\"1\" colspan=\"6\"></td></tr>";
                       } 
                       html+="</table></td></tr>";
                       
                       //TLUtils.currentPage
                       var recordsPerPage=10;
                       
                       if(aInfo.pageCount > 1){
                       //paginação
                         html+="<tr align=\"left\" valign=\"bottom\">"
                         html+="<td height=\"5\" bgcolor=\"F3F3F3\"></td></tr>";
                         html+="<tr align=\"left\" valign=\"bottom\">";
                         html+="<td height=\"6\" bgcolor=\"F3F3F3\">";
                         html+="<table width=\"378\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"
                         html+="<tr><td width=\"10\"></td>";
                         html+="<td width=\"368\" align=\"left\" valign=\"middle\" class=\"text_medio\">";
                         
                         var final_paginacao;
                         var cur_page;
                         if(TLUtils.currentPage){
                            cur_page=parseInt(TLUtils.currentPage);
                         }
                         else{
                            cur_page=1;
                         }
                         var start= TLUtils.currentPage || 1;
                         if(TLUtils.currentPage<=recordsPerPage)
                         {
                                start=1;
                         }
                         else
                         {
                            for(var j=start-1;j> start-(recordsPerPage+1);j--)
                            {
                                if(j%recordsPerPage==0)
                                {
	                                start=j+1;
	                                break;
                                 }
                             }
                          }
                         final_paginacao=parseInt(start)+parseInt(recordsPerPage) >aInfo.pageCount ? aInfo.pageCount : parseInt(start)+parseInt(recordsPerPage);
                         final_paginacao+=1;
                         for(var j=start;j<final_paginacao;j++){
                            if( start >recordsPerPage && j==start){
                                html+="<a href=\"javascript:"+lnkPagina+"('" + (j-1)+ "')\"><<</a> ";
                            }
                            if( j==cur_page){
                                html += " <font color=\"#003366\"><b>" +j + "</b></font> ";
                            }
                            else{
                                html+="<a href=\"javascript:"+lnkPagina+"('" + j+ "')\">" + j + "</a> ";
                            }
                            if(final_paginacao < aInfo.pageCount && j==final_paginacao-1){
                                html+="<a href=\"javascript:"+lnkPagina+"('" + (j+1)+ "')\">>></a> ";
                            }
                         }
                         html+="</td></tr></table></td></tr>";
                         html+="<tr align=\"left\" valign=\"bottom\"><td height=\"5\" bgcolor=\"F3F3F3\"></td></tr>";
                    }
                  //fim paginacao
                 html+="</table></td></tr></table></td></tr></table>";
                try{
                    elEndereco.innerHTML=html;
                }
                catch(e){
                      var t = document.createElement('div');
                        t.innerHTML =html;
                        elEndereco.appendChild(t);
                }
                TLUtils.Show("ListaEndereco");   
               
        },
        //preenche a combo de cidades de rotas
        GetCidadesRota:function(combo){
           if(combo==null){
            TLHelper.GetCidadesRota.defer(50,this,[combo]);
            return;
           }
           var locRota=Dom.get("localidadeRota");
           locRota.innerHTML="<select disabled  class=\"cidade_bairro\" "+
                            " id=\"city_route\" tabindex=\"3\" title=\"Cidade\">Aguarde"+
                            "</select>";
           if(combo.value !=null && combo.value!=""){     
               
                var params="uf="+combo.value+"&class=&method=MapaComboCidadeRota&context=localidadeRota";
                YAHOO.util.Connect.asyncRequest('POST','/AjaxHandler.ashx',TLHelper.simple_callback,params);      
               
           }
        },
            //função de callback para cidade e bairro
        simple_callback:{
            timeout:timeoutPeriod,
            success:function(resp){
                var resposta=resp.responseText;
                var pos= resposta.indexOf("id=")+4;
                var temp_str= resposta.substring(pos);
                var fim= temp_str.indexOf("\"");
                if(fim==-1){
                    fim=temp_str.indexOf("'");
                }   
                var id=temp_str.substring(0,fim);
                var context;
                
                switch(id){
                    case "localidade":
                        context="localidadeLocal";
                        break;
                    case "city_route":
                        context="localidadeRota";
                        break;
                    case "bairro":
                        context="divBairroLocal";
                        break;
                    
                }
                if(resp.responseText!=""){
                   //pega o nome da div que está na variável context
                   
                    Dom.get(context).innerHTML=resp.responseText;
                }
                if(context=="localidadeLocal"){
                    Dom.get("waitBairro").style.visibility="hidden";   
                }
                if(context=="divBairroLocal"){
                   Dom.get("waitBairro").style.visibility="hidden";
                   var elBairro=Dom.get("bairro");
                   if(elBairro.options.length==1){
                        elBairro.disabled=true;
                    }
                    else{
                        elBairro.options[1].selected=true;
                    }
                }
             }
        },
       /*
            abre janela para envio de problemas
        */
        EnviarProblema:function(){
             window.open(serverName+"/busca_local/envia_problema.aspx","problema",'scrollbars=no,width=314,height=276,resizeable=no,status=yes');
        },
        EnviaOpiniao:function(){
            window.open(serverName+"/busca_local/envia_opine.aspx","problema",'scrollbars=no,width=314,height=344,resizeable=no,status=yes');
        }
};

/*
    classe auxiliar para recuperar parâmetros comuns da busca local
*/
TLParameter= function(){
    this.GetValues();
}
TLParameter.prototype={
    //latitude, longitude, keyword, state, city, quarter, address, number, name, selectedTitles
    GetValues:function(){
        this.latitude= Dom.get("yMedio").value;
        this.longitude= Dom.get("xMedio").value;
        this.keyword= Dom.get("palachave").value;
        this.state= Dom.get("uf").value;
        this.city= Dom.get("localidade").value;
        this.quarter=Dom.get("bairro").value;
        this.address= Dom.get("endereco").value;
        this.number=Dom.get("numero").value;
        this.name= Dom.get("nome").value;
        this.selectedTitles=TLUtils.titulosSelecionados();
        this.latitude_max= Dom.get("latitude_max").value;
        this.latitude_min= Dom.get("latitude_min").value;
        this.longitude_max= Dom.get("longitude_max").value;
        this.longitude_min= Dom.get("longitude_min").value;
        this.zoom= Dom.get("zoom").value;
    },
   /*
    tranforma os parâmetros em QueryString 
    para envio por e-mail
   */ 
   toQueryString:function(){
        var strTemp= new String();
       
        for(p in this){
            if(p!="GetValues" && p !="toQueryString" && p!="toJSONString"){
                strTemp += p+"="+ escape(this[p])+ "&";
            }
        }
        return strTemp.substr(0,strTemp.length-1);
   } 
}









