﻿
   //variables de gmapcreator
    var centreLat=9.645917489999999;
    var centreLon=-84.21783642;
    var initialZoomLevel=8;
    var n_buttonText="Ubicalo"; //Text that shows up on the button for the custom layer (n=normal, s=sat, h=hybrid)
    var s_buttonText="Satélite";
    var h_buttonText="Hibrido";
    var mapBounds=new GLatLngBounds(new GLatLng(8,-85),new GLatLng(11,-86));
    var map; //the GMap2 itself
    var opacity=0.5; 
//fin variables de gmacreator

 function customGetTileURL(a,b) {
      //converts tile x,y into keyhole string
	  
      //if (b>16) { return "mapas/blank-tile.png"; };
      if (b<=13 && b<=16) { return "mapas/blank-tile.png"; };
      var c=Math.pow(2,b);
      var x=360/c*a.x-180;
      var y=180-360/c*a.y;
      var x2=x+360/c;
      var y2=y-360/c;
      var lon=x; //Math.toRadians(x); //would be lon=x+lon0, but lon0=0 degrees
      var lat=(2.0*Math.atan(Math.exp(y/180*Math.PI))-Math.PI/2.0)*180/Math.PI; //in degrees
      var lon2=x2;
      var lat2=(2.0*Math.atan(Math.exp(y2/180*Math.PI))-Math.PI/2.0)*180/Math.PI; //in degrees
      var tileBounds=new GLatLngBounds(new GLatLng(lat2,lon),new GLatLng(lat,lon2));

      if (!tileBounds.intersects(mapBounds)) { return "mapas/blank-tile.png"; };
        var d=a.x;
        var e=a.y;
        var f="t";
        for(var g=0;g<b;g++){
            c=c/2;
            if(e<c){
                if(d<c){f+="q"}
                else{f+="r";d-=c}
            }
            else{
                if(d<c){f+="t";e-=c}
                else{f+="s";d-=c;e-=c}
            }
        }
        return "mapas/"+f+".png"
    }

    function changeOpacity(op) {
	//this works as long as there are at least two map types
        var current=map.getCurrentMapType();
        if (current==map.getMapTypes()[0])
        	map.setMapType(map.getMapTypes()[1]);
	else
		map.setMapType(map.getMapTypes()[0]);
        opacity=op;
        map.setMapType(current); //was map.getMapTypes()[1]
    }


    function getWindowHeight() {
        if (window.self&&self.innerHeight) {
            return self.innerHeight;
        }
        if (document.documentElement&&document.documentElement.clientHeight) {
            return document.documentElement.clientHeight;
        }
        return 0;
    }

    function resizeMapDiv() {
        //Resize the height of the div containing the map.
        //Do not call any map methods here as the resize is called before the map is created.
    	var d=document.getElementById("map");
        var offsetTop=0;
        for (var elem=d; elem!=null; elem=elem.offsetParent) {
            offsetTop+=elem.offsetTop;
        }
        var height=getWindowHeight()-offsetTop-16;
        if (height>=0) {
            d.style.height=height+"px";
        }
    }

// este archivo tiene los valores q tendra por defecto el mapa de google y los eventos del mismo

// CODIGO AGREGADO LGP 2009-8-17
   var esPuntoUbi = false;
   var html_posUBI = ""
  // CODIGO AGREGADO POR LGP 2009-8-17
   var PuntoUbiMarker = new Array();
   var esPuntoInicioIngresado = false
   var esPuntoFinalIngresado = false;
   var esPuntoIntermedioIngresado = false;
   var esPuntoCreado = false;
   var puntoIntermedios = 0;
   var tipoPunto = '';
   var listaPolilines = new Array();
   var PuntoInicialMarker =new Array();
   var PuntoFinalMarker = new Array();
   var PuntosIntermediosMarkers = new Array();
   var TiempoEnPunto = new Array();
   var cadenaPuntosInermedios = '';
   var tiempoIndex = '';
   var encodedPolyline;
   var esMatris = false;
   var infoWindowHml = "";
   var kml;
   var esLoad = true;
   var esPrimerGrid = true;
   var esArrastrable  = true;
   var divisionPolitica = new Array();
   var tiempos =  new Array();
   var  distancias =  new Array();
   var indicePuntosRutas  = new Array();
   var cantPuntosRuta = 0;
   var divisionPoliticaRutas = new Array();
   var divisionPoliticaMatris = new Array();
   var puntosGridMatris = new Array();
   var puntosFueraGridMatris  = new Array();
   // Array PuntosPromocion
   var PuntoPromocion = new Array;
   var puntosGrid = 0;
   //contadore para los markers de los puntos intermedios
   var mContPI = 0;

// //esta clase sirve para crear controles personalizados
//    function CrearControles(){
//      CrearControles.prototype.initialize = function(map) {
//      var container = document.createElement("div");
//     container.innerHTML = construirBotonera();

//      //agrega los botones
//      map.getContainer().appendChild(container);
//            return container;
//      }
//      
//      CrearControles.prototype.getDefaultPosition = function() {
//        return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(898,3));
//    }
//}
//    //la clase CrearControles hereda de Gcontrol
//    CrearControles.prototype = new GControl();


function construirBotonera()
{
   
    var botonera = "";
    botonera +="<div id=\"content\" class=\"content\">"
    botonera +="<div  title=\"Crear un punto de partida\" id=\"pInicial\" class=\"pInicial\" onmousedown=\"setTipoPunto('inicio')\" onmouseover=\"mOverPInicial()\" onmouseout=\"mOutPInicial()\" onmouseleave=\"mOutPInicial()\"></div>"
    botonera +="<div title=\"Crear un punto intermedio\" id=\"pIntermedio\" class=\"pIntermedio\"onmouseover=\"mOverPIntermedio()\" onmousedown=\"setTipoPunto('intermedio')\"onmouseout=\"mOutPIntermedio()\" onmouseleave=\"mOutPIntermedio()\"></div>"
    botonera += "<div title=\"Crear un punto de llegada\"id=\"pLlegada\" class=\"pLlegada\" onmouseover=\"mOverPLlegada()\" onmousedown=\"setTipoPunto('final')\" onmouseout=\"mOutPLlegada()\" onmouseleave=\"mOutPLlegada()\"></div>"
    botonera += "<div title=\"Generar Ruta\"id=\"ruta\" class=\"ruta\" onmouseover=\"mOverRuta(this)\" onmousedown=\"generarRuta()\" onmouseleave=\"mOutRuta()\" onmouseout=\"mOutRuta()\"></div>"
    botonera +="<div title=\"Generar tabla de distancias\"id=\"matris\" class=\"matris\"  onmouseover=\"mOverMatris()\" onmouseleave=\"mOutMatris()\" onmouseout=\"mOutMatris()\" onmousedown=\"generarMatriz()\"></div>"
    botonera +="<div title=\"Limpiar\"id=\"reset\" class=\"reset\"  onmouseover=\"mOverReset()\" onmouseleave=\"mOutReset()\" onmouseout=\"mOutReset()\" onmousedown=\" resetea()\"></div></div>"

    return botonera;
}
 
//      //inicializacion del mapa  
//   var  map = new GMap2(document.getElementById("map_canvas"));
//     //  map.addControl(new CrearControles());
//       map.setCenter(new GLatLng(9.9424746600000002,-84.079656), 8);
//       var customUI = map.getDefaultUI();
//       customUI.maptypes.hybrid = false;
//       map.setUI(customUI);
//       map.enableGoogleBar();
//       map.addMapType(G_SATELLITE_3D_MAP);

//      
//     // map.addControl(new GZoomControl(),new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(80,10)));

//    //inicializa el evento click del mapa para crear overlays segun el tipo de punto
//   GEvent.addListener(map, "click", function(overlay,point){
////        if(esPuntoCreado == false){
////           // map.zoomIn();
////        }
////        else
////        {
////            if(point){crearPunto(point);}
////        }
//        if(point){crearPunto(point);}
// });

var copyrightCollection = new GCopyrightCollection("GMapCreator");
        copyrightCollection.addCopyright(
          new GCopyright("CASA",
          new GLatLngBounds(new GLatLng(8.07696099,-85.86792396), new GLatLng(11.21487399,-82.56774888)),
          0,
          "<a href=\"http://www.ubicaloaqui.com\">UBICALO</a>")
        );

        //create a custom G_NORMAL_MAP layer
        var n_tileLayers = [ G_NORMAL_MAP.getTileLayers()[0], new GTileLayer(copyrightCollection , 0, 17)];
        n_tileLayers[1].getTileUrl = customGetTileURL;
        n_tileLayers[1].isPng = function() { return false; };
        n_tileLayers[1].getOpacity = function() { return opacity; };
        var n_customMap = new GMapType(n_tileLayers, new GMercatorProjection(n_tileLayers[0].maxResolution()+1), n_buttonText,
            {maxResolution:16, minResolution:0, errorMessage:"Data not available"});

        //create a custom G_SATELLITE_MAP layer
        var s_tileLayers = [ G_SATELLITE_MAP.getTileLayers()[0], new GTileLayer(copyrightCollection , 0, 17)];
        s_tileLayers[1].getTileUrl = customGetTileURL;
        s_tileLayers[1].isPng = function() { return false; };
        s_tileLayers[1].getOpacity = function() { return opacity; };
        var s_customMap = new GMapType(s_tileLayers, new GMercatorProjection(s_tileLayers[0].maxResolution()+1), s_buttonText,
            {maxResolution:16, minResolution:0, errorMessage:"Data not available"});
            
        //create a custom G_HYBRID_MAP layer
        var h_tileLayers = [ G_HYBRID_MAP.getTileLayers()[0], new GTileLayer(copyrightCollection , 0, 17),G_HYBRID_MAP.getTileLayers()[1]];
        h_tileLayers[1].getTileUrl = customGetTileURL;
        h_tileLayers[1].isPng = function() { return false; };
        h_tileLayers[1].getOpacity = function() { return opacity; };
        var h_customMap = new GMapType(h_tileLayers, new GMercatorProjection(h_tileLayers[0].maxResolution()+1), h_buttonText,
            {maxResolution:16, minResolution:0, errorMessage:"Data not available"});
 
      //inicializacion del mapa  
       var  map = new GMap2(document.getElementById("map_canvas"),{mapTypes:[n_customMap,s_customMap,h_customMap]});
     
     //  map.addControl(new CrearControles());
       map.setCenter(new GLatLng(9.9424746600000002,-84.079656), 8);
       var customUI = map.getDefaultUI();
       customUI.maptypes.hybrid = false;
	   customUI.maptypes.normal = false;
	   customUI.maptypes.physical  = false;
	   customUI.maptypes.satellite  = false; 
       map.setUI(customUI);
       map.enableGoogleBar();
       map.addMapType(G_SATELLITE_3D_MAP);
       
	//   G_SATELLITE_MAP.getMaximumResolution = function(){return 5}; 
    //   n_customMap.getMaximumResolution = function(){return 5}; 
   
       // *** CODIGO DEL ZOOM DEL MAPA ****
          //map.addControl(
          //new TextualZoomControl(),
         // new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7,7)));
         map.addControl(new DragZoomControl(),new GControlPosition(G_ANCHOR_TOP_RIGHT,new GSize(280,5)));
         map.enableContinuousZoom();
       //**********************************
       
    //inicializa el evento click del mapa para crear overlays segun el tipo de punto
       GEvent.addListener(map, "click", function(overlay,point){
//        if(esPuntoCreado == false){
//           // map.zoomIn();
//        }
//        else
//        {
//            if(point){crearPunto(point);}
//        }
        if(point){crearPunto(point);}
       });
 
 //borra todas las variables y arreglos, asi como overlays existentes en el mapa
function resetea()
{
    Array.clear(PuntoInicialMarker);
    Array.clear(PuntoFinalMarker);
    Array.clear(PuntosIntermediosMarkers);
    Array.clear(TiempoEnPunto);
    Array.clear(puntosGridMatris);
    Array.clear(puntosFueraGridMatris);
    Array.clear(PuntoUbiMarker)
    Array.clear(PuntoPromocion);
    map.clearOverlays();
    
//    listaPolilines = new Array();;
//    PuntoInicialMarker =new Array();;
//    PuntoFinalMarker = new Array();;
//    PuntosIntermediosMarkers = new Array();;
//    TiempoEnPunto = new Array();
    esPuntoInicioIngresado = false
    esPuntoFinalIngresado = false;
    esPuntoIntermedioIngresado = false;
    esPuntoCreado = false;
    puntoIntermedios = 0;
    esPuntoUbi = false;
    tipoPunto = '';
    cadenaPuntosInermedios = '';
    tiempoIndex = '';
    encodedPolyline;
    esMatris = false;
    infoWindowHml = "";
   //contador para los markers de los puntos intermedios
    mContPI = 0;
    document.getElementById("chbKml").checked = false;
   
 
     if(esPrimerGrid != true)
    {
          $("#gridResultados").hide("slow");
         
    }
    else
    {
        esPrimerGrid = false;
    }

   $("#side_bar").hide("slow");
   $("#gridResultados").hide("slow");
   $("#politico_bar").hide("slow"); 

}

//Borra los puntos intermedios y finales 
function BorrarPuntosIntermediosYFinales()
{
    if (PuntoFinalMarker.length > 1)
    {
        map.removeOverlay(PuntoFinalMarker[0]);
        Array.clear(PuntoFinalMarker);
    }
    
    if (PuntosIntermediosMarkers.length > 1)
    {
        for (var i=0; i<= PuntosIntermediosMarkers.length-1;i++)
        {
            map.removeOverlay(PuntosIntermediosMarkers[i]);
        }
        Array.clear(PuntosIntermediosMarkers);
    }  
}
//setea el tipo de punto desde el control para luego ser utilizado por el lister del mapa y crear el punto con sus caracteristicas
 function setTipoPunto(tipo)
 {
    tipoPunto = tipo;
    esPuntoCreado = true;
    if(tipoPunto== 'intermedio')
    {
        esPuntoIntermedioIngresado = false;   
    }
  
 }

 function generarRuta()
 {  
    
     esMatris = false;
     var listaP = enviarListaPuntos();
     if(listaP != "")
     {
         if(encodedPolyline !=null)
         {
             map.removeOverlay(encodedPolyline);
          }
         //crearModal();
         // document.getElementById("politico_bar").innerHTML = '';  
         
         if(listaP != "")
         {
             
             try
             {
                 generarLinea(listaP); 
                 $("#cargando").show("slow"); 
               
             }
             catch(err)
             {
            			    alert("Capturado"+" !!!!!!!!" + err.description);
    			        

             }
           
            
         }
     }
    
 }
 function setDivisionPoliticaRutas(cadena)
 {
    if(divisionPoliticaRutas!=null)
    {
         Array.clear(divisionPoliticaRutas);
    }
    divisionPoliticaRutas = cadena.split("$");
      $("#cargando").hide("slow");
     
 }
function crearIndiceRuta(cadena)
{
 
     
    
   $("#divTAGS").hide("slow"); 
   $("#side_bar").hide("slow"); 
   $("#gridResultados").hide("slow");
   $("#side_bar").hide("slow");
   $("#politico_bar").show("slow"); 
   document.getElementById('politico_bar').innerHTML = '';    

   var indices = cadena.split("*");
   var ultPunto = indices.length - 1;
   var descripPunto = "";
   var desc = "";
   var imagen = "";
//   var arrAux = new A
//   
//   
//    var cantidadMarkers = PuntosIntermediosMarkers.length - 1;
//    for(var  i= 0; i <= cantidadMarkers  ;i++)
//    {
//       if(recorrerGridMatrisBorrados(i)== false)
//       {
//         
//       }
//    
//    }
   for(i=1;i<=indices.length - 1;i++)
   {
       
        var index = indices.length - 1;
        var Punto
        var NombrePunto
        if(i != index) 
         { 
            if(i == 1)
            {
                 $("#politico_bar").append("<h4 class=\"HeaderResultado\">RESULTADO BÚSQUEDA RUTA</h4><p class=\"rutatips\"><span><img src=\"Images/inicio.png\" />Inicio:</span><span><img src=\"Images/continua.png\" />Contin&uacute;a en:</span><span><img src=\"Images/final.png\" />Final:</span></p>")
                 descripPunto = "<img src =\"Images/inicio.png\" style=\"border:none;;width:16px;height:16px;\"/>Punto inicial";
              //    imagen = "Images/inicio.png";
                 // CODIGO AGREGADO LGP 2009-09-03
                 Punto = PuntosIntermediosMarkers[parseInt(indices[i].toString())-1];
                 if (Punto.title.toString() != " ")
                 {
                    NombrePunto = Punto.title;
                 }
                 else
                 {
                    NombrePunto = "Punto Referencia"
                 }
                 //*******************************
                 $("#politico_bar").append("<div ><p><a href=\"#\" onClick=\"construirTablaInfoPuntosRuta(0,false,"+ultPunto+",'nada'); return false;\">"+descripPunto+"</a></p></div><div id='0'></div>");
                 //descripPunto = "continua en: "+ NombrePunto+" Punto: " + indices[i].toString();  
                    descripPunto = "<img src=\"Images/continua.png\" style=\"border:none;;width:16px;height:16px;\"/><img src =\"Images/medio"+indices[i].toString()+".png\" style=\"border:none;;width:16px;height:16px;\"/> "+ NombrePunto+"";
                   desc = indices[i].toString();
                  $("#politico_bar").append("<div ><p><a href=\"#\" onClick=\"construirTablaInfoPuntosRuta("+i+",false,"+ultPunto+","+desc+"); return false;\">"+descripPunto+"</a></p></div><div id="+i.toString()+"></div>");
                 
            }
            else
            {
                // CODIGO AGREGADO LGP 2009-09-03
                
                Punto = PuntosIntermediosMarkers[parseInt(indices[i].toString())-1];
                
                if (Punto.title.toString() != " ")
                {
                    NombrePunto = Punto.title;
                }
                else
                {
                    NombrePunto = "Punto Referencia"
                }
                
                //*******************************
                
                descripPunto = "<img src=\"Images/continua.png\" style=\"border:none;;width:16px;height:16px;\"/><img src =\"Images/medio"+indices[i].toString()+".png\" style=\"border:none;;width:16px;height:16px;\"/> "+ NombrePunto+" ";//Punto: " + indices[i].toString(); 
              //  imagen = "Images/medio"+ indices[i].toString() +".png";
               desc = indices[i].toString();
                  $("#politico_bar").append("<div ><p><a href=\"#\" onClick=\"construirTablaInfoPuntosRuta("+ i +",false,"+ ultPunto +","+desc +"); return false;\">"+descripPunto+"</a></p></div><div id="+i.toString()+"></div>");
            }
//          
//             if (i > 0)
//            {
//                var Punto
//                Punto = PuntosIntermediosMarkers[parseInt(indices[i].toString())-1];
//                alert(Punto.title);
//            }
        }
        else
        {
            descripPunto  = "<img src=\"Images/final.png\" style=\"border:none;;width:16px;height:16px;\"/> Ultimo Punto";
         //   imagen = "Images/final.png";
            $("#politico_bar").append("<div ><p><a href=\"#\" onClick=\"construirTablaInfoPuntosRuta("+i+",true,"+ultPunto+",'nada'); return false;\">"+descripPunto+"</a></p></div><div id="+i.toString()+"></div>");
        }
         
        
          
    }
} 
   function construirTablaInfoPuntosRuta(indice,esultimoPunto,cantIndices,imagen,descripcionPunto)
   {
         var side_bar_html = "";
        var tiempo = "";
        var distancia = "";
        var arregloDivPol = divisionPoliticaRutas[indice].split("*")
       
        document.getElementById(indice.toString()).innerHTML = ''; 
       
        for(i=0;i <=cantIndices;i++)
        {
               //document.getElementById(i.toString()).innerHTML = '';
               $("#"+i).hide("slow");
        }
        var indiceIcono = indice + 1;
        side_bar_html +="<table width=\"100%\" border=\"0\" cellpadding= \"0\" cellspacing=\"0\" >";
        if(esultimoPunto== true)
        {
             
                   
              side_bar_html += "<tr><td height=\"50\" class=\"fila\"><span class=\"style7\">Provincia: " + arregloDivPol[0] + "</span>" + "<br/><span class=\"style7\">Cantón: " +   arregloDivPol[1] + "</span>" + "<br/><span class=\"style7\">Distrito: " +   arregloDivPol[2]+ "</span></td></tr>"
        }
        else
        {
              side_bar_html += "<tr><td height=\"50\" class=\"fila\"><span class=\"style7\">Provincia:" + arregloDivPol[0] + "</span> " + "<br/><span class=\"style7\">Cantón: " +   arregloDivPol[1] + "</span> " + "<br/><span class=\"style7\">Distrito: " +   arregloDivPol[2]+ "</span></td></tr>"
        }
        
        side_bar_html +="</table>";
       
        $("#"+indice.toString()).append(side_bar_html);
        $("#"+indice.toString()).show("slow");

  }   




//esta claro, crera un punto en el mapa
  function crearPunto(point){
    switch(tipoPunto)
    {
        case 'inicio':
            if (esPuntoUbi == false)
            {
                if(esPuntoInicioIngresado == false)
                {
                    //instacia a la clase GIcon para setear el icono q llevara el marker
                     var iconoMarca = new GIcon(G_DEFAULT_ICON);
                     iconoMarca.image = "Images/inicio.png";
                     var tamanoIcono = new GSize(29,29);
                     iconoMarca.iconSize = tamanoIcono;
                     
                     var miMarca = new Marcadores();
                     miMarca.Mapa(map); 
                     miMarca.Punto(point);
                     miMarca.Icono(iconoMarca) ;
                     miMarca.MiMarca(); 
                     esPuntoInicioIngresado = true;
                     esPuntoCreado = false;
                    // crearDescripcionPolitca(point);
                     
               }
           }
           else
           {
               alert("Se ha seleccionado a 'UBI' como simbolo de punto de inicio.\nSi desea usar el simbolo 'Punto Inicio' en lugar de 'UBI' debe limpiar el mapa con el botón 'Limpiar'");
               return ;
               
           }
          
        break;
        case 'intermedio':
//            if(esPuntoIntermedioIngresado == false)
//            {
                if(puntoIntermedios <=9)
                {
                     //instacia a la calse GIcon para setear el icono q llevara el marker
                     var iconoMarca = new GIcon(G_DEFAULT_ICON);
                     var indiceIcono = puntoIntermedios + 1;
                     var tamanoIcono = new GSize(29,29);
                     iconoMarca.iconSize = tamanoIcono;
                     
                                                   ///////////////////////////////////////////////
                     var indiceItermedio;
                     if(puntosFueraGridMatris.length >=1)
                     {
                          var indiceBorrado = puntosFueraGridMatris.length - 1;
                          indiceItermedio = puntosFueraGridMatris[indiceBorrado];
                          indiceIcono = puntosFueraGridMatris[indiceBorrado] + 1;
                          delete  puntosFueraGridMatris[indiceBorrado];
                          
                           var arregloAux = new Array();
                           arregloAux  = puntosFueraGridMatris.slice();
                           Array.clear(puntosFueraGridMatris);
                           
                            for(i = 0;i<= arregloAux.length - 1;i++)
                            {
                                if(i != indiceBorrado)
                                {
                                    puntosFueraGridMatris.push(arregloAux[i]);
                                  
                                }
                                
                           }
                           
                    }
                    else
                    {
                         var indiceIcono = puntoIntermedios + 1;
                         puntoIntermedios += 1;
                        indiceItermedio =  mContPI;
                        mContPI++;
                    }
                              ////////////////////////////////////////////////
                              
                     iconoMarca.image = "Images/medio"+indiceIcono +".png";
                     var miMarca = new Marcadores();
                     miMarca.IndeceIntermedio(indiceItermedio);
                     miMarca.Mapa(map); 
                     miMarca.Punto(point);
                     miMarca.Icono(iconoMarca) ;
                     miMarca.MiMarca(); 
                    // esPuntoIntermedioIngresado = true;   
                     esPuntoCreado = false; 
                    // crearDescripcionPolitca(point);
                              

                    
                                    
                                    
                    
                }
                else
                {
                    alert('Se informa que usted ha colocado el número maximo de puntos intermedios en el mapa es cual es de 10');
                }
                
        
           
        break;
        case 'final':
                if(esPuntoFinalIngresado == false)
                {
                     var iconoMarca = new GIcon(G_DEFAULT_ICON);
                     iconoMarca.image = "Images/final.png";
                     var tamanoIcono = new GSize(29,29);
                     iconoMarca.iconSize = tamanoIcono;
                     
                     var miMarca = new Marcadores();
                     miMarca.Mapa(map); 
                     miMarca.Punto(point);
                     miMarca.Icono(iconoMarca) ;
                     miMarca.MiMarca(); 
                     esPuntoFinalIngresado  = true;
                     esPuntoCreado = false;
                    // crearDescripcionPolitca(point);
              }      
        break;
        case 'ubi':
            if (esPuntoInicioIngresado == false)
            {
                if (esPuntoUbi == false)
                {
                    if (document.getElementById("comboCategoria").value != "0")
                    {
                        //instacia a la clase GIcon para setear el icono q llevara el marker
                         var iconoMarca = new GIcon(G_DEFAULT_ICON);
                         iconoMarca.image = "Images/ubilogo.png";
                         var tamanoIcono = new GSize(22,43);
                         iconoMarca.iconSize = tamanoIcono;
                         
                         var miMarca = new Marcadores();
                         miMarca.Mapa(map); 
                         miMarca.Punto(point);
                         miMarca.Icono(iconoMarca) ;
                         miMarca.MiMarca(); 
                         esPuntoUbi = true;
                         esPuntoCreado = false;
                         EnviarPosicionUbi(document.getElementById("comboCategoria").value); 
                         esLoad = false;
                    }
                    else
                    {
                        alert("Es necesario seleccionar una categoria a buscar, antes de posicionar a 'UBI' en el mapa.");
                        return ;
                    }
                }
            }
            else
            {
                alert("Se ha seleccionado el simbolo 'Punto de Inicio' anteriormente como marcador del punto inicial.\nSi desea utilizar el simbolo 'UBI' en lugar del actual debe limpiar el mapa mediante el botón 'Limpiar'");
                return ;
            }
        break;
   }
 }     

//esta clase sirve para la manipulacion de los markers
    
  function Marcadores(){
        //atributos
        var _mapa;
        var _punto;
        var _icono;
        var _esGridMatris;
        var _indiceGridMatris;
        var _IndeceIntermedio;
        var _toolTip;
     
        //Get propiedades
        this.Punto = SetPunto;
        this.Mapa = SetMapa;
        this.Icono = SetIcono;
        this.Html = SetHtml;
        this.EsGridMatris = SetEsGridMatris;
        this.IndiceGridMatris = SetIndiceGridMatris;
        this.IndeceIntermedio  = SetIndeceIntermedio;
        this.ToolTip = SetToolTip;
        
        //Get eventos
        this.MiMarca =  crearMarca;
       

    
        //set propiedades
        function SetMapa(paramMapa) 
        {
            _mapa = paramMapa;
        }
        function SetPunto(punto)
        {
            _punto = punto;
        }
        function SetIcono(icono)
        {
            _icono = icono;
        }
        function SetHtml(html)
        {
            _html = html;
        }
        function SetEsGridMatris(esGridMatris)
        {
            _esGridMatris = esGridMatris;
        }
        function SetIndiceGridMatris(indiceGridMatris)
        {
            _indiceGridMatris = indiceGridMatris;
        }
        function SetIndeceIntermedio(indeceIntermedio)
        {
            _IndeceIntermedio = indeceIntermedio;
        }
        function SetToolTip(toolTip)
        {
            _toolTip = toolTip;
        }

        
        
        
        //metodos
       function crearMarca(){

        //crea la instancia del nuevo mapa
            var lat =  _punto.lat();
            var lon =  _punto.lng();

            var center = new GLatLng(lat,lon);
            
            //agrega las caracteristicas del marker
                    
           

           if(esArrastrable == true)
           {
            var marker = new GMarker(center,{icon:_icono ,draggable: true});
              //se activan las escuhas para los eventos de arrastre
            GEvent.addListener(marker, "dragstart", function() {
             
              _mapa.closeInfoWindow();
              });

            GEvent.addListener(marker, "dragend", function() {
              //marker.openInfoWindowHtml("Se ha ...");

                 
              });
           }
           else
           {
             var marker = new GMarker(center,{icon:_icono ,draggable: false});
           }
          
            switch(tipoPunto)
            {
                case 'ubi':
                    if (document.getElementById("comboCategoria").value != "0")
                    {
                         PuntoUbiMarker[0]=marker;
                         PuntoInicialMarker[0] = marker;  
                         GEvent.addListener(marker, "dragend", function (){ BorrarPuntosIntermediosYFinales(); EnviarPosicionUbi(document.getElementById("comboCategoria").value)});
                         GEvent.addListener(marker, "dblclick", function (){MostrarPromocionXNegocio();});
                         //EnviarPosicionUbi(document.getElementById("comboCategoria").options[document.getElementById("comboCategoria").selectedIndex].text)
                         
                         GEvent.addListener(marker, 'mouseover', function() {
                         marker.openInfoWindowHtml(html_posUBI);
                         
                         });  
                         
                         GEvent.addListener(marker, 'mouseout', function() {
                         marker.closeInfoWindow() ;
                         });
                        
                     }
                     else
                     {
                        alert("Es necesario que seleccione una categoria a buscar antes de posicionar a 'UBI' en el mapa.")
                        return ;
                     }
                 break;
                 case 'inicio':
                    PuntoInicialMarker[0] = marker;   
                 break;
                 case 'intermedio':
                    //CODIGO AGREGADO LGP 2009.09.03
                    marker.title = " ";
                    //******************************
                    PuntosIntermediosMarkers[_IndeceIntermedio] = marker;  
                   //  var html = '<table><tr><td style="width: 207px">Tiempo:<input id="txtTiempoPunto" type="text" style="width: 31px" maxlength="3" onkeypress = "return validarNum(event)"  />minutos;</td></tr><tr><td style="width: 207px"><input id="btnAceptar" type="button" value="Aceptar" onclick="setTiempoEnPunto()" /><input id="btnCancelar" type="button" value="Cancelar" onclick="cerrarInfoWindow()"/></td></tr></table>';
          
                     GEvent.addListener(marker, "click", function() {
//                             if(esMatris == true)
//                             {
//                                   marker.openInfoWindow;
//                             }
//                             else{
                                     // marker.openInfoWindowHtml(html);
                                tiempoIndex =  marker.Rp;
                                //crea una cadena con los nombres de los marcadores para indexar
                                if(cadenaPuntosInermedios == '')
                                {
                                    cadenaPuntosInermedios =  tiempoIndex;
                                }
                                else{cadenaPuntosInermedios +=  "*"+tiempoIndex;}
                                
                                if(TiempoEnPunto[tiempoIndex] == null)
                                {
                                    TiempoEnPunto[tiempoIndex] = '0';
                                }
//                             }
                     
                   
                        
                     });
                   // mContPI++;
                 break;
                 case 'final':
                    PuntoFinalMarker[0] =  marker;  
                     GEvent.addListener(marker, "click", function() {
//                             if(esMatris == true)
//                             {
//                                   marker.openInfoWindow;
//                             }
                     });
                 break;
                 case 'puntoBusqueda':
                        GEvent.addListener(marker, 'click', function() {
                             marker.openInfoWindowHtml(_html);
                        }); 
                        var tooltip = new Tooltip(marker,_toolTip,4); 
                        marker.tooltip = tooltip;
                        marker.title = marker.tooltip.text_;
                        map.addOverlay(tooltip); 
                        GEvent.addListener(marker,'mouseover',function(){ this.tooltip.show(); });
                        GEvent.addListener(marker,'mouseout',function(){ this.tooltip.hide(); });
                        //marker.openInfoWindowHtml(_html);
                        if(_esGridMatris == true)
                        {
                             if(puntoIntermedios <=9)
                             { 
                                  PuntosIntermediosMarkers[_IndeceIntermedio] = marker;  
                                  puntosGridMatris[_indiceGridMatris] = marker;
                                  tiempoIndex =  marker.dp;
                                    //crea una cadena con los nombres de los marcadores para indexar
                                    if(cadenaPuntosInermedios == '')
                                    {
                                        cadenaPuntosInermedios =  tiempoIndex;
                                    }
                                    else{cadenaPuntosInermedios +=  "*"+tiempoIndex;}
                                    
                                    if(TiempoEnPunto[tiempoIndex] == null)
                                    {
                                        TiempoEnPunto[tiempoIndex] = '0';
                                }
                             
                             }
                             else
                             {
                               alert("No es posible agregar más 'Puntos Intermedios' dado que se ha alcanzado\nel número maximo de puntos intermedios es cual es de 10");
                             }
                               // mContPI++;
                               
 
                        }
                       // GEvent.trigger(marker, "click");
                 break;
                 
            }
            _mapa.addOverlay(marker);
            if(tipoPunto == 'intermedio')
            {
                GEvent.trigger(marker, "click");
            
            }
           
      }
}
        
   //este codigo valora si la restriccion hay q tomarla en cuenta y asi definir
   //a cual webMethod enviar la info.
function generarLinea(latlonCadena)
{
    if(document.getElementById("chbKml").checked ==true)
     {
         PageMethods.generarPolilineaCodificadaRestriccion(latlonCadena,poliline);
//         generarMatriz(latlonCadena);
//          generarDireccion(latlonCadena);
     }
     else
     {
        PageMethods.generarPolilineaCodificada(latlonCadena,poliline);
//        generarMatriz(latlonCadena);
 //       generarDireccion(latlonCadena);
     }
     
}
//envia al servidor los datos para generar la matriz de tiempos
function generarMatriz()
{ 
     if(encodedPolyline !=null)
     {
        map.removeOverlay(encodedPolyline);
     }
       esMatris = true;
       var latlonCadena = enviarListaPuntos();
       if(latlonCadena != "")
       {
            if(PuntosIntermediosMarkers.length >= 1)
            {
                document.getElementById("side_bar").innerHTML = ''; 
                $("#cargando").show("slow"); 
                if(latlonCadena!="")
                {
                   PageMethods.generarMatrisTiempo(latlonCadena,distanciaTiempo);
                   PageMethods.recuperarDivisionPoliticaMatris(setDivisionPoliticaMatris);
                }
            } 
           else
           {
                alert("Es requerido ingresar al menos un 'Punto Intermedio' para realizar el Cálculo de Distancias")
           }
      }
      
}
function setDivisionPoliticaMatris(cadena)
{
    if(divisionPoliticaMatris!=null)
    {
         Array.clear(divisionPoliticaMatris);
    }
    divisionPoliticaMatris = cadena.split("$");
    $("#cargando").hide("slow"); 
}
function generarDireccion(latlonCadena)
{
    
    if(latlonCadena!="")
    {
        PageMethods.generarDirecciones(latlonCadena,distanciaTiempo);
    }
}
//crea los links del la ruta/matriz con la ubicacion politica
function infoPuntosRuta()
{
   $("#side_bar").hide("slow"); 
   $("#gridResultados").hide("slow");
   $("#side_bar").hide("slow");
   $("#politico_bar").hide("slow"); 
   
  var side_bar_html = "";
//  $("#politico_bar").append("<div class\"Interno\"><span>10</span></div>")
  
  
//   document.getElementById("side_bar").innerHTML =""
//   
//    //var div = jQuery('<div>Some text</div>')

// 
//   if(PuntoInicialMarker[0] != null)
//   {
//         side_bar_html +="<table width=\"100%\" border=\"0\" cellpadding= \"0\" cellspacing=\"5\" >";
//         side_bar_html += '<tr><td height="50" bgcolor="#F2F2F2"><p><span class="button"><a href="javascript:getPuntoIntermedio"  class="button">Punto Inicial</a></span><br /><span class="style7">Provincia:' +  divisionPolitica[0].toString() + ' ' + '<BR>Canton: ' +  divisionPolitica[1].toString()+ ' ' + '<BR>Dsitrito: ' +  divisionPolitica[2].toString()+ '</span></p></td></tr>'
//         side_bar_html +="</table>";
//   }
//   if(PuntosIntermediosMarkers[0]!= null)
//   {
//        for(i = 0;PuntosIntermediosMarkers.length;i++)
//        {
//            side_bar_html +="<table width=\"100%\" border=\"0\" cellpadding= \"0\" cellspacing=\"5\" >";
//            side_bar_html += '<tr><td height="50" bgcolor="#F2F2F2"><p><span class="button"><a href="javascript:getPuntoIntermedio"  class="button">Punto:'+ i +' </a></span><br /><span class="style7">Provincia:' +  divisionPolitica[0].toString() + ' ' + '<BR>Canton: ' +  divisionPolitica[1].toString()+ ' ' + '<BR>Dsitrito: ' +  divisionPolitica[2].toString()+ '</span></p></td></tr>'
//            side_bar_html +="</table>";
//        } 
//        
//   }
//   if(PuntoFinalMarker[0] != null)
//   {
//        side_bar_html +="<table width=\"100%\" border=\"0\" cellpadding= \"0\" cellspacing=\"5\" >";
//        side_bar_html += '<tr><td height="50" bgcolor="#F2F2F2"><p><span class="button"><a href="javascript:getPuntoIntermedio"  class="button">Punto:'+ i +' </a></span><br /><span class="style7">Provincia:' +  divisionPolitica[0].toString() + ' ' + '<BR>Canton: ' +  divisionPolitica[1].toString()+ ' ' + '<BR>Dsitrito: ' +  divisionPolitica[2].toString()+ '</span></p></td></tr>'
//        side_bar_html +="</table>";
//   }
//   
//    document.getElementById("side_bar").innerHTML = side_bar_html; 
}
 //codigo para mostrar total distancias y tiempo ruta
 function MostrarTotalTiempoDistancia(cadena)
  {
    var resultado = cadena.split("*");
     $("#gridResultados").hide();
     $("#politico_bar").append("<div id = \"Info_TiempoDist\"><span>Tiempo Total Aproximada Ruta: " + resultado[0] +"</span><br/><span> Distancia Total Aproximada de la ruta: "+ resultado[1] + "</span><br/></div>")
     $("#politico_bar").show("slow")
 
  }
function crearDescripcionPolitca(point)
{
     
         var latlonCadena =  point.y +'*'+point.x;           
         PageMethods.retornarDescripcionPolitca(latlonCadena,setDivisionPoliticaLink);
         
}
 function setDivisionPoliticaLink(cadena)
 {
    if(cadena != null)
    {
        var divion = cadena.split("*");
        
        if(divisionPolitica[0] != null)
        {   
            Array.clear(divisionPolitica); 
        }
        divisionPolitica[0] = divion[0].toString();
        divisionPolitica[1] = divion[1].toString();
        divisionPolitica[2] = divion[2].toString();
        infoPuntosRuta();
    }
 }
//muestra los links laterales con la distancia y el tiempo
function distanciaTiempo(cadena)
{
    var dis_tie = cadena.split("&");
    if(tiempos[0] != null)
    {
        Array.clear(tiempos); 
    }
    if(distancias[0] != null)
    {
        Array.clear(distancias); 
    }
    tiempos =  dis_tie[0].split("*");
    distancias =  dis_tie[1].split("*");
   
    
   $("#divTAGS").hide();
   $("#side_bar").hide("slow"); 
   $("#gridResultados").hide("slow");
   $("#side_bar").hide("slow");
   $("#politico_bar").show("slow"); 
   document.getElementById('politico_bar').innerHTML = '';
   
    $("#politico_bar").append("<h4 class=\"HeaderResultado\">RESULTADO DE CALCULO DISTANCIAS</h4><p class=\"rutatips\"><span><img src=\"Images/inicio.png\" />Inicio:</span><span><img src=\"Images/ubicame.png\" />UBI:</span><span><img src=\"Images/medio1.png\" />Punto Ruta:</span><span><img src=\"Images/final.png\" />Final:</span></p><br/><div style=\"float:left; width:auto; margin-left:"+(124-(distancias.length*10))+"px; font-size:15px;\"><span class=\"Indice\"><a href=\"#\" style=\"margin-left:2px; margin-right:2px\"  onClick=\"construirTablaInfoPuntosMatris(0,0,false,0); return false;\"><img src=\"Images/inicio.png\" style=\"width:20px; height:20px; border:none;\"/></a></span></div>")
      
     indiceDistancia = 0;
     var cantidadMarkers = PuntosIntermediosMarkers.length - 1;
     for(var  i= 0; i <= cantidadMarkers  ;i++)
    {
       
       if(recorrerGridMatrisBorrados(i)== false)
       {
  
           var indiceIcono = i + 1;
           var indicePolitico = indiceDistancia + 1;
          $("#politico_bar").append("<div style=\"float:left; width:auto; padding:0;\"><span><a href=\"#\" style=\"margin:0; font-size:15px;\" onClick=\"construirTablaInfoPuntosMatris("+indiceDistancia+","+indicePolitico+",false,"+i+"); return false;\"><img src =\"Images/medio"+indicePolitico+".png\" style=\"border:none;;width:20px;height:20px;\"/></a></span></div>")  ;
          indiceDistancia++;
          
       }
    } 
    if (PuntoFinalMarker.length == 1)
    {
        $("#politico_bar").append("<div style=\"float:left; width:auto; padding-left:0px;\"><span><a href=\"#\" style=\"margin-left:0px;font-size:15px;\" onClick=\"construirTablaInfoPuntosMatris(0,0,true,0); return false;\"><img src =\"Images/final.png\" style=\"border:none;;width:20px;height:20px;\"/></a></span></div>")
    }
//   for(i=0;i<=distancias.length - 1;i++)
//   {
//         var indiceIcono = i + 1;
//         if(i != distancias.length-1)
//        {
//             
//        }   
//       else
//        {   
//           
//                $("#politico_bar").append("<div style=\"float:left; width:auto; padding-left:4px;\"><span><a href=\"#\" style=\"margin-left:2px; margin-right:2px; font-size:15px;\" onClick=\"construirTablaInfoPuntosMatris("+i+","+indiceIcono+",true,0); return false;\">Último</a></span></div>")
//           
//        }
//          
//    }
  
   
}    
   
   function construirTablaInfoPuntosMatris(indiceDistancia,indicePolitico,esultimoPunto,indicePuntoIntermedio)
   {
        var side_bar_html = "";
        var tiempo = "";
        var distancia = "";
       //  document.getElementById("politico_bar").innerHTML = '';
          if (esultimoPunto== true)
          {
                getUltimoPunto();
          }
          if(indicePolitico!=0)
          {
                getPuntoIntermedio(indicePuntoIntermedio)
          }
         
          if(indicePolitico!=0)
          {
            tiempo  = tiempos[indiceDistancia].toString();
            distancia = distancias[indiceDistancia].toString();  
          }
          
          if(esultimoPunto==true)
          {
            indicePolitico = distancias.length
            tiempo  = tiempos[distancias.length-1].toString();
            distancia = distancias[distancias.length-1].toString();  
          }
        
            var arregloDivPol = divisionPoliticaMatris[indicePolitico].split("*")
        
            var indiceIcono = indiceDistancia + 1;
            side_bar_html +="<table width=\"100%\" border=\"0\" cellpadding= \"0\" cellspacing=\"0\" >";
            if(esultimoPunto== true)
            {
                  side_bar_html += '<tr><td height="50" class="fila"><p><span class="button"><a href="javascript:getUltimoPunto()"  class="button">Último</a></span><br/></p><span class="style7">Provincia: ' + arregloDivPol[0] + '</span>' + '<br/><span class="style7">Cantón: ' +   arregloDivPol[1]+ '</span><br/><span class="style7">Distrito: ' +   arregloDivPol[2]+ '</span><br></p><span class="style7">Tiempo aproximado es: ' + tiempo + '</span>' +'<br/><span class="style7">Distancia aproximada es: ' +   distancia + '</span></td></tr>'
            }
            else
            {
                if(indicePolitico==0)
                {
                    side_bar_html +='<tr><td height="50" class="fila"><p><span class="button"><a   class="button">Usted se encuentra en:</a></span><br /><span class="style7">Provincia: ' + arregloDivPol[0] + '</span>' + '<br/><span class="style7">Cantón: ' +   arregloDivPol[1] +'</span>' + '<br/><span class="style7">Distrito: ' +   arregloDivPol[2]+ '</span></p></td></tr>'
                }
                else
                {
                    indiceIcono = indicePuntoIntermedio + 1;
                    side_bar_html += '<tr><td height="50" class="fila"><p><span class="button"><a href="javascript:getPuntoIntermedio(' + indicePuntoIntermedio + ')"  class="button">Número: ' + indiceIcono + '</a></span><br /></p><span class="style7">Provincia: ' + arregloDivPol[0] + '</span>'+ '<br/><span class="style7">Cantón: ' +   arregloDivPol[1] +'</span>' + '<br/><span class="style7">Distrito: ' +   arregloDivPol[2]+ '</span><br></p><span class="style7">Tiempo aproximado es: ' + tiempo  + '</span><BR><span class="style7">Distancia aproximada es: ' +   distancia+ '</span></td></tr>'

                }    
            }
            
            side_bar_html +="</table>";
            document.getElementById("side_bar").innerHTML = side_bar_html; 
            $("#side_bar").show("slow");
//       else
//       {
//            alert("El punto número: " + indicePolitico + " no es posible de localizar, reubiquelo e intente de nuevo ");
//       } 
   }

//funcion para buscar el ultimo punto y generar una ruta desde la matris
function getUltimoPunto()
{
    
    var cadenaLon = "";
    var cadenaLat = "";
    var cadenaTiempo = ""; 
     var tag = "";
    var indiceIcono = 0;
    
    cadenaTiempo = "0"; 
    cadenaLon = PuntoInicialMarker[0].getLatLng().x.toString();
    cadenaLat = PuntoInicialMarker[0].getLatLng().y.toString();
    cadenaLon += '*' +PuntoFinalMarker[0].getLatLng().x.toString();
    cadenaLat += '*' +PuntoFinalMarker[0].getLatLng().y.toString(); 
    cadenaTiempo += '*0'
     indiceIcono = 1;
    tag +='*'+ indiceIcono.toString();
    
    var cadenaLatLon =  cadenaLat +'&'+cadenaLon +'&'+cadenaTiempo+'&'+tag;
    
    if(encodedPolyline !=null)
     {
        map.removeOverlay(encodedPolyline);
     }
    generarLinea(cadenaLatLon);
}
//setea los puntos intermedios para manejarlos en un arreglo global para utilizarlos en los calculos de rutas y demas
function getPuntoIntermedio(indice)
{
    
    $("#cargando").show("slow"); 
    var cadenaLon = "";
    var cadenaLat = "";
    var cadenaTiempo = ""; 
    var tag = "";
    var indiceIcono = 0;
    cadenaTiempo = "0"; 
    cadenaLon = PuntoInicialMarker[0].getLatLng().x.toString();
    cadenaLat = PuntoInicialMarker[0].getLatLng().y.toString();
    cadenaLon += '*' + PuntosIntermediosMarkers[indice].getLatLng().x.toString();
    cadenaLat += '*' + PuntosIntermediosMarkers[indice].getLatLng().y.toString();  
    cadenaTiempo += '*0' ;
    indiceIcono = indice + 1;
    tag +='*'+ indiceIcono.toString();
    
    var cadenaLatLon =  cadenaLat +'&'+cadenaLon +'&'+cadenaTiempo+'&'+tag; 
    
    if(encodedPolyline !=null)
     {
        map.removeOverlay(encodedPolyline);
     }
    generarLinea(cadenaLatLon);
    $("#cargando").hide("slow"); 
//    esMatris= true;
//    infoWindowHml  = '<table><tr><td style="width: 207px">Tiempo:<input id="txtTiempoPunto" type="text" style="width: 31px" maxlength="3" onkeypress = "return validarNum(event)"  />minutos;</td></tr><tr><td style="width: 207px"><input id="btnAceptar" type="button" value="Aceptar" onclick="setTiempoEnPunto()" /><input id="btnCancelar" type="button" value="Cancelar" onclick="cerrarInfoWindow()"/></td></tr></table>';
//    PuntosIntermediosMarkers[0].openInfoWindowHtml(infoWindowHml);
    
}
function poliline(codigo)
{
    if(codigo!="")
    {
         encodedPolyline = new GPolyline.fromEncoded({
        color: "#3300ff",
        weight: 7,
        points: codigo.toString(),
        levels: "BBB",
        zoomFactor: 32,
        numLevels: 3});
        map.addOverlay(encodedPolyline);
        listaPolilines.push(codigo.toString());
        ///puse aca esto porq mientras genera el Json el JS sigue ejecutandoce, y esta funcion es el ultimo eslavon de la secuencia de la ejecucion.
        if(esMatris == false)
        {   
            PageMethods.recuperarIndiceIndicePuntoRuta(crearIndiceRuta);
            PageMethods.recuperarDivisionPoliticaRutas(setDivisionPoliticaRutas);
            PageMethods.CalcularTiempoDistanciaRuta(enviarListaPuntos(),MostrarTotalTiempoDistancia);
        }
        
        
    }
    else{
        alert('No se ha encontrado una ruta factible.\nCorrobore los puntos que ha ingresado se encuentren dentro de un área accesible');
        $("#cargando").hide("slow"); 
    }


}

//esta funcion crea un strin con los X y Y luego los envia al server
function enviarListaPuntos()
{
    var cadenaLon = "";
    var cadenaLat = "";
    var cadenaTiempo = "";
    var tag = "";

    if(PuntoInicialMarker.length ==1 && PuntoFinalMarker.length ==1 )
    {
    
        cadenaLon = PuntoInicialMarker[0].getLatLng().x.toString();
        cadenaLat = PuntoInicialMarker[0].getLatLng().y.toString();
        var cadenaPI =  cadenaPuntosInermedios.split("*");
        cadenaTiempo = "0";    
        if(PuntosIntermediosMarkers.length >= 1)
        { 
            var totalMarkers = 0 ; 
            totalMarkers = PuntosIntermediosMarkers.length-1;
           

            for(var i = 0; i <=totalMarkers;i++)
            {
            
                 if(recorrerGridMatrisBorrados(i)== false)
                 {
                    cadenaLon += '*' + PuntosIntermediosMarkers[i].getLatLng().x.toString();
                    cadenaLat += '*' + PuntosIntermediosMarkers[i].getLatLng().y.toString();     
                    cadenaTiempo += '*'+ TiempoEnPunto[cadenaPI[i]].toString();
                    indiceIcono = i + 1;
                    tag +='*'+ indiceIcono.toString();
                 }
                
            
            }
//            cadenaLon += '*' +PuntoFinalMarker[0].getLatLng().x.toString();
//            cadenaLat += '*' +PuntoFinalMarker[0].getLatLng().y.toString(); 
//            cadenaTiempo += '*0' ; 
        }
       //else
       if (PuntoFinalMarker.length == 1)
       {
                                
           cadenaLon += '*' +PuntoFinalMarker[0].getLatLng().x.toString();
           cadenaLat += '*' +PuntoFinalMarker[0].getLatLng().y.toString();  
           cadenaTiempo += '*0' ;
            
       }  
         //es la cantidad de puntos intermedio mas punto inicial ty final
          cantPuntosRuta = totalMarkers + 2;
          var cadenaLatLon =  cadenaLat +'&'+cadenaLon +'&'+cadenaTiempo + '&' + tag;
          return cadenaLatLon; 
         
    }
    else
    {
         if(esMatris == true)
         {
             if(PuntoInicialMarker.length ==1  )
             {
        
                    cadenaLon = PuntoInicialMarker[0].getLatLng().x.toString();
                    cadenaLat = PuntoInicialMarker[0].getLatLng().y.toString();
                    var cadenaPI =  cadenaPuntosInermedios.split("*");
                    cadenaTiempo = "0";    
                  
                    var totalMarkers = 0 ; 
                    totalMarkers = PuntosIntermediosMarkers.length-1;
                   

                    for(var i = 0; i <=totalMarkers;i++)
                    {
                    
                         if(recorrerGridMatrisBorrados(i)== false)
                         {
                            cadenaLon += '*' + PuntosIntermediosMarkers[i].getLatLng().x.toString();
                            cadenaLat += '*' + PuntosIntermediosMarkers[i].getLatLng().y.toString();     
                            cadenaTiempo += '*'+ TiempoEnPunto[cadenaPI[i]].toString();
                            indiceIcono = i + 1;
                            tag +='*'+ indiceIcono.toString();
                         }
                        
                    
                    }
                    
                    cadenaLon += '*' + PuntosIntermediosMarkers[totalMarkers].getLatLng().x.toString();
                    cadenaLat += '*' +PuntosIntermediosMarkers[totalMarkers].getLatLng().y.toString();
                    cadenaTiempo += '*0' ; 
     
                 //es la cantidad de puntos intermedio mas punto inicial ty final
                    cantPuntosRuta = totalMarkers + 2;
                    var cadenaLatLon =  cadenaLat +'&'+cadenaLon +'&'+cadenaTiempo + '&' + tag;
                    return cadenaLatLon; 
             
               }  
               else{
                        alert("Es requerido que se marque un 'Punto de inicio' para continuar.");
                        return ""; 
               }
         }
         else
         {
             //alert("Se requiere un 'Punto de inicio' y un 'Punto final' para continuar");
             return ""; 
         }
        
    }

}
function crearListaCadenaPuntos()
{

}
//carga los kml para la restriccion vehicular o posibles zonas de no acceso futuro
function restriccion()
{
     if(document.getElementById("chbKml").checked ==true)
     {
           kml = new GGeoXml("http://www.ubicaloaqui.com/RESTRICCION_VEHICULAR.kml");
            //kml = new GGeoXml("http://www.tnmgsecure.com/RESTRICCION_VEHICULAR.kml");
           map.addOverlay(kml);
           
           var point =  new GLatLng(9.934104948910308,-84.08755302429199);
           crearPunto(point);
           map.setCenter(point, 13);
           
           
     }
     else{
        map.removeOverlay(kml);
        
     }
    
}
function crearPuntoServer(y,x,imagenRuta,descripcion,horario,telefono,nombre,codcategoria,esChequado,email,provincia,canton,distrito,url,direccion,indiceGridArreglo,esCheckbox)
 {
//    var point =  new GLatLng(y,x);
//    tipoPunto = 'intermedio';
//    crearPunto(point);
//    map.setCenter(point, 12);
     esArrastrable = false;
     setTipoPunto('puntoBusqueda');
     var point =  new GLatLng(y,x);
     var iconoMarca = new GIcon(G_DEFAULT_ICON);
     var indiceItermedio;
    // iconoMarca.image = "Images/buscarenmapa.gif";
	 
	if(esChequado != "True" && esCheckbox != "true" )
    {
        iconoMarca.image = "Images/categorias/" + codcategoria + ".png";    
    }
    else
    {
        if(puntosFueraGridMatris.length >=1)
        {
              var indiceBorrado = puntosFueraGridMatris.length - 1;
              indiceItermedio = puntosFueraGridMatris[indiceBorrado];
              indiceIcono = puntosFueraGridMatris[indiceBorrado] + 1;
              delete  puntosFueraGridMatris[indiceBorrado];
              
               var arregloAux = new Array();
               arregloAux  = puntosFueraGridMatris.slice();
               Array.clear(puntosFueraGridMatris);
               
                for(i = 0;i<= arregloAux.length - 1;i++)
                {
                    if(i != indiceBorrado)
                    {
                        puntosFueraGridMatris.push(arregloAux[i]);
                      
                    }
                    
               }
        }
        else
        {
             var indiceIcono = puntoIntermedios + 1;
             puntoIntermedios += 1;
            indiceItermedio =  mContPI;
            mContPI++;
        }
      
        
         
          iconoMarca.image = "Images/medio"+indiceIcono +".png";
         
          
    }
     var tamanoIcono = new GSize(30,30);
     iconoMarca.iconSize = tamanoIcono;
     
     var miMarca = new Marcadores();
     var html = " <table id=\"InfoWindow\" border=\"0\" width=\"490px;\">"
     html += "<tr><td width=\"180px;\" background=\"Images/ballon.png\"><img src="+imagenRuta+"/></td>"
     html+="<td width=\"310px;\"><p class=\"nombre\">"+nombre+"</p>"
     html+= "<span class=\"subtitulo\">Producto/Servicio: </span><span class=\"contenido\">"+descripcion+"</span><br/>"
     html+= "<span class=\"subtitulo\">Telefono:</span> <span class=\"contenido\">"+telefono+"</span><br/>"
     html+= "<span class=\"subtitulo\">Horario: </span><span class=\"contenido\">"+horario+"</span><br/>"
     html+= "<span class=\"subtitulo\">Provincia: </span><span class=\"contenido\">"+provincia+"</span><br/>"
     html+= "<span class=\"subtitulo\">Cantón: </span><span class=\"contenido\">"+canton+"</span><br/>"
     html+= "<span class=\"subtitulo\">Distrito: </span><span class=\"contenido\">"+distrito+"</span><br/>"
     html+= "<span class=\"subtitulo\">Dirección: </span><span class=\"contenido\">"+direccion+"</span><br/>"
     html+= "<span class=\"subtitulo\">E-mail: </span><span class=\"contenido\">"+email+"</span><br/>"
     html+= "<span class=\"subtitulo\">URL: </span><span class=\"contenido\">"+url+"</span><br/>"
   //  html+= "<span class=\"subtitulo\">Promociones: </span><span class=\"contenido\">"+imagenRuta+"</span><br/>"
     html+="</td></tr></table>";
    //ese true asi viene del server
    if(esChequado == "True")
    {
         miMarca.EsGridMatris(true);
    }
    else
    {
        miMarca.EsGridMatris(false);
    } 
    
     esArrastrable = true;
     miMarca.ToolTip(nombre);
     miMarca.IndeceIntermedio(indiceItermedio);
     miMarca.Html(html);
     miMarca.Mapa(map); 
     miMarca.IndiceGridMatris(indiceGridArreglo);
     miMarca.Punto(point);
     miMarca.Icono(iconoMarca) ;
     miMarca.MiMarca(); 
     esPuntoCreado = false;
     map.setCenter(point, 12);
     esArrastrable = true;
 }
//function validarNum(e)
//{
//    tecla = (document.all) ? e.keyCode : e.which;
//    if (tecla == 8) return true;
//    patron = /\d/;
//    te = String.fromCharCode(tecla);
//    return patron.test(te);
//}
//para enviar los parametros a static google api
//function tomarFotoMapa()
//{
//      var baseUrl = "http://maps.google.com/staticmap?";

//   var params = [];
//   params.push("center=" + map.getCenter().lat().toFixed(6) + "," + map.getCenter().lng().toFixed(6));
//   if (map.getCurrentMapType() == G_SATELLITE_MAP) {
//     params.push("maptype=satellite");
//   }
//   if (map.getCurrentMapType() == G_HYBRID_MAP) {
//     params.push("maptype=hybrid");
//   }
//   if (map.getCurrentMapType() == G_PHYSICAL_MAP) {
//     params.push("maptype=terrain");
//   }

//   params.push("zoom=" + map.getZoom());
//   params.push("size=600x600");

//  // var markerSize = document.getElementById("markerSizeSELECT").value;
//  // var markerColor = tinygreen;
//  // var markerLetter = document.getElementById("markerLetterSELECT").value;
//  // var markerParams = markerSize + markerColor + markerLetter;
//   var markersArray = [];
//   PuntoInicialMarker
//   markersArray.push(PuntoInicialMarker[0].getLatLng().lat().toFixed(6) + "," + PuntoInicialMarker[0].getLatLng().lng().toFixed(6) + "," + "midgreen");
//   for (var i = 0; i < PuntosIntermediosMarkers.length; i++) {  
//     markersArray.push(PuntosIntermediosMarkers[i].getLatLng().lat().toFixed(6) + "," + PuntosIntermediosMarkers[i].getLatLng().lng().toFixed(6) + "," + "midyellow");
//   }
//     markersArray.push(PuntoFinalMarker[0].getLatLng().lat().toFixed(6) + "," + PuntoFinalMarker[0].getLatLng().lng().toFixed(6) + "," + "midred");
//  
//   if (markersArray.length) params.push("markers=" + markersArray.join("|"));

//   var polyColor = "#da160b";
//  // var polyAlpha = document.getElementById("polyAlphaSELECT").value;
//   var polyWeight = "2";
//   var polyParams = "rgba:0x" + polyColor + ",weight:" + polyWeight + "|";
//   for (var i = 0; i < listaPolilines.length; i++) {
//     var poly = listaPolilines[i];
//     var polyLatLngs = [];
////     for (var j = 0; j < poly.getVertexCount(); j++) {
////       //polyLatLngs.push(poly.getVertex(j).lat().toFixed(5) + "," + poly.getVertex(j).lng().toFixed(5));
////       polyLatLngs.push(poly.points)
////     }
//     polyLatLngs.push(listaPolilines[i])
//     params.push("path=" + polyParams + polyLatLngs.join("|"));
//   }

//   var img = document.createElement("img");
//   img.src = baseUrl + params.join("&") + "&key=MAPS_API_KEY&sensor=false";
//   document.getElementById("fotoMapa").innerHTML = "";
//   document.getElementById("fotoMapa").appendChild(img);

//}

function aparecerGrid()
{
    esLoad = false;
    if(esPrimerGrid != true)
    {
        
         $("#politico_bar").hide("slow"); 
         $("#gridResultados").show("slow");   
    }
    else
    {
        esPrimerGrid = false;
    }
    
   $("#politico_bar").hide("slow"); 
   $("#side_bar").hide("slow");
   $("#divTAGS").hide();
   $("#gridResultados").show("slow");   
}
function crearModal()
{
      $("#content").fadeIn(3000, function () {
       $("span").fadeIn(100);
      });
 
}
function recorrerGridMatrisBorrados(numero)
{
    var esBorrado = false;
    var cantPuntos = puntosFueraGridMatris.length - 1;
    
    for(var i = 0; i <= cantPuntos ;i++ )
    {
        if(numero.toString() == puntosFueraGridMatris[i].toString())
        {
            esBorrado = true;
        }
    }
    return esBorrado;
}
function borrarPuntoGridMatris(indice)
{
   var cantidadMarkers = PuntosIntermediosMarkers.length - 1;
    for(var  i= 0; i <= cantidadMarkers  ;i++)
    {
       if(recorrerGridMatrisBorrados(i)== false)
       {
                
          if(PuntosIntermediosMarkers[i].dp ==  puntosGridMatris[indice].dp)
          {
            var indicexBorrar = i;
          }
       }
    
    }
    puntosFueraGridMatris.push(indicexBorrar);
    puntosFueraGridMatris.sort();
    puntosFueraGridMatris.reverse();
    map.removeOverlay(puntosGridMatris[indice]);
    delete puntosGridMatris[indice];
    delete PuntosIntermediosMarkers[indicexBorrar];
  
}
function EnviarPosicionUbi(categoria)
{

    var cadenaLon = "";
    var cadenaLat = "";
    var cadenaTiempo = "";
    //var tag = "";
    var distancia = "2000";
    var categoria_seleccionada = categoria;  
    
    $("#side_bar").hide();
    $("#gridResultados").hide();
    $("#divTAGS").hide();

    if (PuntoUbiMarker.length >= 1)
    {
        cadenaLon = PuntoUbiMarker[0].getLatLng().x.toString();
        cadenaLat = PuntoUbiMarker[0].getLatLng().y.toString();
        cadenaTiempo = "0";

        var latlonCadena =  cadenaLat +'*' + cadenaLon + '*' + cadenaTiempo //+ '*' + tag;     
        var coordenadasDistanciaCategoria = cadenaLat +'*' + cadenaLon + '*' + distancia + '*' + '"'+categoria_seleccionada+ '"';     
        
        map.setCenter(new GLatLng(cadenaLat,cadenaLon), 13);
        PageMethods.GenerarUbicacionUbi(latlonCadena,GenerarUbicacionUbiMapa);
    
        var CadenaBusqueda = "";

        CadenaBusqueda = document.getElementById("comboCategoria").value + ",0,0,0," + distancia + ',' +cadenaLat + ',' + cadenaLon + ',' + 0;
        ObtenerPuntosCercanosXDistancia(CadenaBusqueda)
    }
}

function GenerarUbicacionUbiMapa(cadena) 
{
    var Div_politica = cadena.split("*");
    var ubicacion_ubi_html = "";
    
      html_posUBI = ""  
      html_posUBI+="<div class=\"UBITooltip\">"
	
      html_posUBI+="<a href=\"#\" class=\"nombreubi\">Usted se encuentra en: </a> <br/>"
	        
      html_posUBI+="<p><span id=\"subtituloubi\">Provincia: </span><span id=\"contenidoubi\">" + Div_politica[0] + "</span></p><p><span id=\"subtituloubi\">Cantón: </span><span id=\"contenidoubi\">"+Div_politica[1] +"</span></p><p><span id=\"subtituloubi\">Distrito: </span><span id=\"contenidoubi\">"+Div_politica[2]+ "</p></div>"
}

function ObtenerPuntosCercanosXDistancia(cadena)
{
    cadena = "#" + cadena;
    __doPostBack('btnEjecutarUbi',cadena);
    $("#gridResultados").show()
}

function MostrarPromocionXNegocio()
{
    var cadenaLon = "";
    var cadenaLat = ""; 
    var cadenaTiempo = "";
    var distancia = "2000"
    
    cadenaLon = PuntoUbiMarker[0].getLatLng().x.toString();
    cadenaLat = PuntoUbiMarker[0].getLatLng().y.toString();
    
    var latlonCadena =  cadenaLat +'*' + cadenaLon + '*' + cadenaTiempo
        
    var CadenaBusqueda = "";
    
    CadenaBusqueda = document.getElementById("comboCategoria").value + ",0,0,0," + distancia + ',' +cadenaLat + ',' + cadenaLon + ',' + 1;
    
    if (PuntoPromocion.length == 0 )
    {
        PageMethods.RetornarNegocioConPromocionXDistancia(CadenaBusqueda,CrearMarkersPromociones);
    }
    else
    {
        for (i=0; i<= PuntoPromocion.length-1;i++)
        {
            map.removeOverlay(PuntoPromocion[i]);
        }
        Array.clear(PuntoPromocion);
    }
}

function CrearMarkersPromociones(cadena)
{
    if (cadena.length > 0)
    {
        var puntos = new Array();
        puntos = cadena.split("|");
        
        if (puntos.length > 100)
        {
            for (i = 0; i <= 100; i++)
            {
                var negocio = puntos[i].split("*");

                var point = new GLatLng(negocio[1].replace(',','.'),negocio[0].replace(',','.'));
                
                var info_promo = "";
                var info_promo = "<div><span>"+negocio[3]+"</span><br/>Promoción:" + negocio[4];
                CrearMarcadorPromocion(point,negocio[3],info_promo);      
            }
        }
        else
        {
            for (i = 0; i <= puntos.length-1; i++)
            {
                
                var negocio = puntos[i].split("*");

                var point = new GLatLng(negocio[1].replace(',','.'),negocio[0].replace(',','.'));
                
                var info_promo = "";
                var info_promo = "<div><span>"+negocio[3]+"</span><br/>Promoción:" + negocio[4];
                CrearMarcadorPromocion(point,negocio[3],info_promo);      
            }                   
        }
    }
    else
    {
        alert("Le informamos que en un rango de 2 km de su ubicación no exiten promociones disponibles");
    }
}

//Crea un marcador en el mapa para cada promocion
function CrearMarcadorPromocion(point,tooltiptext,infowindowtext)
{

    var iconoMarca = new GIcon(G_DEFAULT_ICON);
    iconoMarca.image = "Images/promoicon.png";
    var tamanoIcono = new GSize(22,22);
    iconoMarca.iconSize = tamanoIcono;
    var promoIcon = new GIcon(iconoMarca);
    markerOptions = { icon:promoIcon };
    
    var punto_negocio = new GMarker(point,markerOptions);
    var myTooltip = new Tooltip(punto_negocio, tooltiptext, 0); 
    
    punto_negocio.tooltip = myTooltip;
    PuntoPromocion[i]= punto_negocio;
   
    map.addOverlay(myTooltip);
     
    GEvent.addListener(punto_negocio,'mouseover',function(){ this.tooltip.show(); }); 
    
    GEvent.addListener(punto_negocio,'mouseout',function(){ this.tooltip.hide(); });         
    
    GEvent.addListener(punto_negocio, 'click', function() {
    punto_negocio.openExtInfoWindow(map,"simple_example_window",infowindowtext,{beakOffset: 3}); 
    });  
    map.addOverlay(punto_negocio); 
}


