var map = new L.Map('map'); // , {zoomControl: false})

var locationdone = false;
//var a = alice.init();
var requestedStop = null;
var JsonInformacionParadero=null;
prefix = "http://api.transantiagomaster.cl/";

$.ajaxSetup({
    xhrFields: {
        mozSystem: true
    }
});
//$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
//    if (options.url.match(/^https?:/)) {
//        origurl = options.url;
//        if (!options.beforeSend) {
//            options.beforeSend = function (xhr) {
//                xhr.setRequestHeader('X-Proxy-URL', origurl);
//            }
//        }
//        //				options.headers['X-Proxy-URL'] = options.url;
//        options.url = '/oldweb/proxy.php';
//    }
//});

// botones
//headers

document.querySelector('#btn-about').addEventListener('click', function () {
    document.querySelector('#about').className = 'current';
    document.querySelector('[data-position="current"]').className = 'left';
});
document.querySelector('#btn-about-back').addEventListener('click', function () {
    document.querySelector('#about').className = 'right';
    document.querySelector('.left').className = 'current';
});
document.querySelector('#btn-ListaParaderoSeleccionado-back').addEventListener('click', function () {
    document.querySelector('#ListaParaderoSeleccionado').className = 'right';
    document.querySelector('.left').className = 'current';
});
document.querySelector('#btn-sectionFavoritos').addEventListener('click', function () {
    document.querySelector('#sectionFavoritos').className = 'current';
    document.querySelector('[data-position="current"]').className = 'left';
});
document.querySelector('#btn-sectionFavoritos-back').addEventListener('click', function () {
    document.querySelector('#sectionFavoritos').className = 'right';
    document.querySelector('.left').className = 'current';
    
});
document.querySelector('#btn-sectionRecorridos').addEventListener('click', function () {
    document.querySelector('#sectionRecorridos').className = 'current';
    document.querySelector('[data-position="current"]').className = 'left';
    vm.buscarRecorrido();
    if (Recorridos.length == 0) {
        setTimeout('LlenarRecorridos()', 5000);
    }
    if (vm.RecorridosTemp().length==0) {
        for (var i = 0; i < Recorridos.length; i++) {
            if (vm.RecorridosTemp().length < 30) {
                vm.RecorridosTemp.push(Recorridos[i]);
            }
        }      
    }
    setInterval('RevisarPosicion()', 300);
   
});
document.querySelector('#btn-sectionRecorridos-back').addEventListener('click', function () {
    document.querySelector('#sectionRecorridos').className = 'right';
    document.querySelector('.left').className = 'current';
    vm.RecorridosTemp.removeAll();
});
document.querySelector('#btn-sectionSaldoBip').addEventListener('click', function () {
    document.querySelector('#sectionSaldoBip').className = 'current';
    document.querySelector('[data-position="current"]').className = 'left';
});
document.querySelector('#btn-sectionSaldoBip-back').addEventListener('click', function () {
    document.querySelector('#sectionSaldoBip').className = 'right';
    document.querySelector('.left').className = 'current';

});
document.querySelector('#btn-sectionSocial').addEventListener('click', function () {
    document.querySelector('#sectionSocial').className = 'current';
    document.querySelector('[data-position="current"]').className = 'left';
    LlenarListaSocial();
});
document.querySelector('#btn-sectionSocial-back').addEventListener('click', function () {
    document.querySelector('#sectionSocial').className = 'right';
    document.querySelector('.left').className = 'current';
    vm.SocialArray.removeAll();
});
//document.querySelector('#btn-sectionFacebook').addEventListener('click', function () {
//    document.querySelector('#sectionFacebook').className = 'current';
//    document.querySelector('[data-position="current"]').className = 'left';
//});
//document.querySelector('#btn-sectionFacebook-back').addEventListener('click', function () {
//    document.querySelector('#sectionFacebook').className = 'right';
//    document.querySelector('.left').className = 'current';

//});
$(document).ready(function () {
    if (L.Browser.touch) {
        $("#geolocation").addClass('big');
    }

    //a.fade(["logo", "icono", "smalllogo", "mensaje", "botones"], "in", "4500ms", "ease-in-out", "0ms", "1", "normal", "running");
});

var ParIcon = L.Icon.extend({
    options: {
        iconUrl: 'Content/images/tsm/bandera.png',
        shadowUrl: null,
        iconSize: new L.Point(24, 24),
        shadowSize: null,
        iconAnchor: new L.Point(1, 22),
        popupAnchor: new L.Point(-3, -76)
    }
});
var ParSmallIconTemplate = L.Icon.extend({
    options: {
        iconUrl: 'Content/images/tsm/bandera12.png',
        shadowUrl: null,
        iconSize: new L.Point(12, 12),
        shadowSize: null,
        iconAnchor: new L.Point(0, 11),
        popupAnchor: new L.Point(-3, -76)
    }
});
var paricon = new ParIcon();
var parSmallIcon = new ParSmallIconTemplate();

//		var cloudmadeUrl = 'http://209.236.123.73/t/{z}/{x}/{y}.png',
var cloudmadeUrl = 'http://otile{s}.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.png';
var cloudmadeAttribution = 'Map &copy; 2015 OpenStreetMap';
var cloudmade = new L.TileLayer(cloudmadeUrl, {
    maxZoom: 18, attribution:
        cloudmadeAttribution, subdomains: ['1', '2', '3', '4']
});

map.addLayer(cloudmade);

map.on('locationfound', onLocationFound);
map.on('locationerror', onLocationError);

map.setView(new L.LatLng(-33.444615, -70.653523), 14);
//		map.on('viewreset', onViewReset);
map.on('load', onViewReset);
map.on('moveend', onViewReset);
map.on('popupopen', onPopupOpen);
map.on('dblclick', onDoubleClick);

var locateOptions = { timeout: 20000, enableHighAccuracy: true, maximumAge: 30000, setView: true };

var geojsonLayer = new L.LayerGroup();
map.addLayer(geojsonLayer);
var paraderosRecorridoLayer = new L.LayerGroup();
map.addLayer(paraderosRecorridoLayer);
var planificacionLayer = new L.LayerGroup();
map.addLayer(planificacionLayer);
var direccionparadero;
var codigoparadero; // paradero seleccionado		
var codigoservicio; // servicio seleccionado
var modoSeleccion; // 0 nada, 1 paradero, 2 servicio, 3 lugar
var estadoPlanificar = 0;
var positionMarker;
var positionCircle;
var latlonParaderoFavorito;
var precision = -1;	  // precision en metros de la ultima posicion obtenida
var markerOrigen; // para marcar el origen
var markerDestino;// para marcar el destino
var vuelta = null;
var planificacion = new Array();
var itinerarioActual = 0;
var numItinerarios = -1;
var planificacionMarkers = new Array();
var busqueda = false;
var destIconTemplate = L.Icon.extend({
    options: {
        iconUrl: 'Content/images/tsm/marker-red.png',
        shadowUrl: 'Content/images/tsm/marker-shadow.png',
        iconSize: new L.Point(25, 41),
        shadowSize: new L.Point(41, 41),
        iconAnchor: new L.Point(13, 41),
        popupAnchor: new L.Point(0, -33)
    }
});
var destIcon = new destIconTemplate();
var Recorridos = [];
var numberMarker = new Array();
for (i = 1; i < 10; i++)
    numberMarker[i] = new destIconTemplate('Content/images/tsm/marker-' + i + '.png');

$("#localizar").click(function () {
    localizar();
});

function localizar() {
    setMensaje("Buscando tu posici&oacute;n, por favor espera...<br><img src='Content/images/tsm/loadcircle32.png'/>");
    //			map.locateAndSetView();
    map.locate(locateOptions);
}
//// This is called with the results from from FB.getLoginStatus().
//function statusChangeCallback(response) {
//    console.log('statusChangeCallback');
//    console.log(response);
//    // The response object is returned with a status field that lets the
//    // app know the current login status of the person.
//    // Full docs on the response object can be found in the documentation
//    // for FB.getLoginStatus().
//    if (response.status === 'connected') {
//        // Logged into your app and Facebook.
//        testAPI();
//    } else if (response.status === 'not_authorized') {
//        // The person is logged into Facebook, but not your app.
//        document.getElementById('status').innerHTML = 'Please log ' +
//          'into this app.';
//    } else {
//        // The person is not logged into Facebook, so we're not sure if
//        // they are logged into this app or not.
//        document.getElementById('status').innerHTML = 'Please log ' +
//          'into Facebook.';
//    }
//}

//// This function is called when someone finishes with the Login
//// Button.  See the onlogin handler attached to it in the sample
//// code below.
//function checkLoginState() {
//    FB.getLoginStatus(function (response) {
//        localStorage.setItem('fbtoken', response.authResponse.accessToken);
//        statusChangeCallback(response);
//    });
//}

//window.fbAsyncInit = function () {
//    FB.init({
//        //appId: '251718274910576',
//        appId: '504040592939271',
//        cookie: true,  // enable cookies to allow the server to access 
//        // the session
//        xfbml: true,  // parse social plugins on this page
//        version: 'v2.1' // use version 2.1
//    });

//    // Now that we've initialized the JavaScript SDK, we call 
//    // FB.getLoginStatus().  This function gets the state of the
//    // person visiting this page and can return one of three states to
//    // the callback you provide.  They can be:
//    //
//    // 1. Logged into your app ('connected')
//    // 2. Logged into Facebook, but not your app ('not_authorized')
//    // 3. Not logged into Facebook and can't tell if they are logged into
//    //    your app or not.
//    //
//    // These three cases are handled in the callback function.

//    FB.getLoginStatus(function (response) {
        
//        statusChangeCallback(response);
//    });

//};

//// Load the SDK asynchronously
//(function (d, s, id) {
//    var js, fjs = d.getElementsByTagName(s)[0];
//    if (d.getElementById(id)) return;
//    js = d.createElement(s); js.id = id;
//    js.src = "http://connect.facebook.net/en_US/sdk.js";
//    fjs.parentNode.insertBefore(js, fjs);
//}(document, 'script', 'facebook-jssdk'));

//// Here we run a very simple test of the Graph API after login is
//// successful.  See statusChangeCallback() for when this call is made.
//function testAPI() {
//    console.log('Welcome!  Fetching your information.... ');
//    FB.api('/me', function (response) {
//        console.log('Successful login for: ' + response.name);

//        localStorage.setItem('fb', ko.toJSON(response));
//        //localStorage.setItem('fbid', response.id);
//        //localStorage.setItem('fbtocken', response);
        
//        //document.getElementById('status').innerHTML =
//        //  'Thanks for logging in, ' + response.name + '!';
//    });
//}
 





//$("#login").click(function () {
//    if (response.status === 'connected') {
//        // connected
//        $("#login").hide();
//        window.fbApp.Utils.FBisLoggedIn = true;
//    } else if (response.status === 'not_authorized') {
//        // not_authorized
//        $("#login").show();
//        window.fbApp.Utils.FBisLoggedIn = false;
//    } else {
//        // not_logged_in
//        $("#login").show();
//        window.fbApp.Utils.FBisLoggedIn = false;
//    }
//},
//    { scope: 'publish_actions' }
//);

//$("#like").click(function () {
//    switch (modoSeleccion) {
//        case 1: like(codigoparadero); break;
//        case 2: likeline(codigoservicio); break;
//    }
//});

//function like(codpar) {
//    FB.api(
//      'me/transantiagomaster:favorite',
//      'post',
//      {
//          stop: 'http://www.transantiagomaster.cl/social/stop.php?code=' + codpar
//      },
//      function (response) {
//          // handle the response
//          if (response == null)
//              return;
//          if (response.id != null) {
//              // exito
//              setMensaje('Te gusta el paradero ' + codpar + '!');
//          } else if (response.error != null && response.error.code == 3501) {
//              // fracaso. tenemos response.error.code == 3501 para likes ya hechos.
//              setMensaje('Ya te gusta el paradero ' + codpar + '.');
//              //					unlike(codpar);
//          } else {
//              setMensaje('Error desconocido: ' + response.error.message);
//          }
//      }
//    );
//}

//function likeline(codline) {
//    FB.api(
//      'me/transantiagomaster:favorite',
//      'post',
//      {
//          line: 'http://www.transantiagomaster.cl/social/line.php?line=' + codline
//      },
//      function (response) {
//          // handle the response
//          if (response == null)
//              return;
//          if (response.id != null) {
//              // exito
//              setMensaje('Te gusta el recorrido ' + codline + '!');
//          } else if (response.error != null && response.error.code == 3501) {
//              // fracaso. tenemos response.error.code == 3501 para likes ya hechos.
//              setMensaje('Ya te gusta el recorrido ' + codline + '.');
//              //					unlike(codpar);
//          } else {
//              setMensaje('Error desconocido: ' + response.error.message);
//          }
//      }
//    );
//}

$("#planificar").click(function () {
    limpiarPlanificacion();
    estadoPlanificar = 0;

    if (estadoPlanificar == 0) {
        if (positionMarker != null)
            map.panTo(positionMarker.getLatLng());
        // veamos qué precisión tiene la posición
        if (precision <= 0 || precision > 500) // no tenemos GPS o la precision es muy mala?
            estadoPlanificar = 1;
        else
            estadoPlanificar = 2;
        map.setZoom(14);

        if (markerDestino != null) {
            map.removeLayer(markerDestino);
            markerDestino = null;
        }
        if (markerOrigen != null) {
            map.removeLayer(markerOrigen);
            markerOrigen = null;
        }
        actualizarPlanificacion();
    }
});

function actualizarPlanificacion() {
    if (estadoPlanificar == 2)
        setMensaje("Haz doble click en el mapa sobre tu lugar de destino");
    else if (estadoPlanificar == 1)
        setMensaje("Haz doble click en el mapa para señalar tu posici&oacute;n actual");
}

function llToString(ll) {
    return ll.lat + "," + ll.lng;
}

function procesarItinerario(f) {
    var iti = new Array();
    var calcularDistancia = false;

    iti["walkDistance"] = parseInt(f.walkDistance);
    iti["transfers"] = parseInt(f.transfers);
    iti["legs"] = new Array();
    if (iti["walkDistance"] == 0) {
        calcularDistancia = true;
        iti["transfers"] = 0;
    }
    if ($.isArray(f.legs.leg)) {
        jQuery.each(f.legs.leg, function (j, k) {
            var l = procesarLeg(k);
            iti["legs"].push(l);
            if (calcularDistancia == true) {
                if (l.mode == 2) // WALK
                    iti["walkDistance"] += parseInt(l.distance);
                else
                    iti["transfers"]++;
            }
        });
    } else {
        iti["legs"].push(procesarLeg(f.legs.leg));
    }

    return iti;
}

function procesarStep(f) {
    var step = new Array();

    step["distance"] = f.distance;
    step["streetName"] = f.streetName;
    step["absoluteDirection"] = f.absoluteDirection;
    step["pos"] = new L.LatLng(f.lat, f.lon);

    return step;
}

function procesarLeg(f) {
    var leg = new Array();

    var modo = f["@mode"];

    switch (modo) {
        case "BUS":
            leg["mode"] = 1;
            leg["routeShortName"] = f["@routeShortName"];
            leg["routeLongName"] = f["@routeLongName"];
            break;

        case "WALK":
            leg["mode"] = 2;
            break;

        case "SUBWAY":
            leg["mode"] = 3;
            leg["routeShortName"] = f["@routeShortName"];
            leg["routeLongName"] = f["@routeLongName"];
            break;
    }

    leg["route"] = f["@route"];

    leg["distance"] = f.distance;
    leg["fromName"] = f.from.name;
    leg["fromLatLng"] = new L.LatLng(f.from.lat, f.from.lon);
    leg["toName"] = f.to.name;
    leg["toLatLng"] = new L.LatLng(f.to.lat, f.to.lon);

    if ("stopId" in f.from && f.from.stopId != null)
        leg["fromStopId"] = f.from.stopId.id;
    if ("stopId" in f.to && f.to.stopId != null)
        leg["toStopId"] = f.to.stopId.id;

    // polyline
    var geom = decodeLine(f.legGeometry.points);
    var lls = new Array();
    jQuery.each(geom, function (j, k) {
        lls.push(new L.LatLng(k[0], k[1]));
    });
    leg["points"] = lls;

    leg["steps"] = new Array();

    if ("steps" in f && f.steps != null) {
        if ($.isArray(f.steps.walkSteps)) {
            jQuery.each(f.steps.walkSteps, function (j, k) {
                leg["steps"].push(procesarStep(k));
            });
        } else {
            leg["steps"].push(procesarStep(f.steps.walkSteps));
        }
    }

    return leg;
}

function dibujarLeg(l, idx, totalidx) {
    var legpolys, xcolor;

    var texto = '<div class="paradero tsmapgruesa"><center ' +
        'class="tsmapgruesa">Paso ' + (idx + 1) + ':</center><center>';
    switch (l.mode) {
        case 1: // BUS
            xcolor = "blue";
            texto += "Tome el bus " + l.routeShortName + " en el paradero " + l.fromStopId + " - " + l.fromName + " hasta el paradero " + l.toStopId + " - " + l.toName;
            break;

        case 2: // WALK
            xcolor = "red";
            texto += "Camine " + parseInt(l.distance) + "m desde ";
            if ("fromStopId" in l) {
                if (l.fromStopId.substring(0, 2) == 'EM') // METRO
                    texto += " la estaci&oacute;n de metro " + l.fromName;
                else
                    texto += " el paradero " + l.fromStopId + " - " + l.fromName;
            }
            else
                texto += l.fromName;
            texto += " hacia ";
            if ("toStopId" in l) {
                if (l.toStopId.substring(0, 2) == 'EM') // METRO
                    texto += " la estaci&oacute;n de metro " + l.toName;
                else
                    texto += " el paradero " + l.toStopId + " - " + l.toName;
            }
            else {
                if (l.toName == undefined)
                    texto += "su destino";
                else
                    texto += l.toName;
            }
            break;

        case 3: // SUBWAY
            xcolor = "green";
            texto += "Tome el metro " + l.routeShortName + " en la estaci&oacute;n " + l.fromName + " hacia " + l.toName;
            break;

        default:
            alert("leg: modo desconocido");
            texto += "ERROR";
            return;
    }
    texto += "</center>";

    if (idx < totalidx - 1)
        texto += "<div style='text-align: right;'><a href='#' onclick='siguientepaso(" + (idx + 2) + ");'>&gt;&gt;&gt; siguiente paso &gt;&gt;&gt;</a></div>";

    texto += "</div>";

    legpolys = new L.Polyline(l.points, { color: xcolor });
    planificacionLayer.addLayer(legpolys);

    // dibujemos el marker con el inicio y la glosa
    var marker = new L.Marker(l.fromLatLng, { icon: numberMarker[idx + 1] });

    marker.bindPopup(texto);
    planificacionLayer.addLayer(marker);

    if (idx == 0) { // mostremoslo!
        map.panTo(l.fromLatLng);
        marker.openPopup();
    }

    planificacionMarkers[idx + 1] = marker;
}

function siguientepaso(idx) {
    map.panTo(planificacionMarkers[idx].getLatLng());
    planificacionMarkers[idx].openPopup();
}

function limpiarPlanificacion() {
    planificacionLayer.clearLayers();
}

function dibujarPlanificacion() {
    // dibujemos primero los poligonos
    planificacionLayer.clearLayers();

    jQuery.each(planificacion["its"][itinerarioActual]["legs"], function (i, j) {
        dibujarLeg(j, i, planificacion["its"][itinerarioActual]["legs"].length);
    });
    var mensaje = "Mostrando itinerario " + (itinerarioActual + 1) + " de " + numItinerarios;
    var texto = planificacion["its"][itinerarioActual].walkDistance + "m de caminata, ";
    switch (planificacion["its"][itinerarioActual].transfers) {
        case 0:
            texto += "sin transferencias";
            break;

        case 1:
            texto += "una transferencia";
            break;

        default:
            texto += planificacion["its"][itinerarioActual].transfers + " transferencias";
            break;
    }
    setMensaje(mensaje + "<br>" + texto);
}

function onDoubleClick(e) {
    //if (estadoPlanificar == 0)
    //    return;

    var ll = e.latlng;

    //if (estadoPlanificar == 2) {
    if (markerDestino != null) {
        map.removeLayer(markerDestino);
    }
        markerDestino = new L.Marker(ll, { icon: destIcon });
        map.addLayer(markerDestino);

        setMensaje("Calculando tu itinerario, por favor espera...");
        var url =
        prefix + "/planearviaje.php?toPlace=" + llToString(ll) + "&fromPlace=" + llToString(positionMarker.getLatLng()) + "&optimize=TRANSFERS&mode=SUBWAY,BUS,WALK";
        var jqxhr=  jQuery.getJSON(url, function (data) {
            // data es un json con el itinerario
            // seleccionemos el primero
            map.removeLayer(markerDestino);
            planificacionLayer.clearLayers();
            markerDestino = new L.Marker(new L.LatLng(data.plan.to.lat, data.plan.to.lon), { icon: destIcon });
            markerDestino.bindPopup('<div class="paradero tsmapgruesa"><center>Fin del viaje</center></div>');
            map.addLayer(markerDestino);
            var iti;

            planificacion = new Array();

            planificacion["fromName"] = data.plan.from.name;
            planificacion["fromLatLng"] = new L.LatLng(data.plan.from.lat, data.plan.from.lon);

            planificacion["toName"] = data.plan.to.name;
            planificacion["toLatLng"] = new L.LatLng(data.plan.to.lat, data.plan.to.lon);

            planificacion["its"] = new Array();

            if ($.isArray(data.plan.itineraries.itinerary)) {
                jQuery.each(data.plan.itineraries.itinerary, function (i, f) {
                    planificacion["its"].push(procesarItinerario(f));
                });
                numItinerarios = planificacion["its"].length;
                itinerarioActual = 0;
            } else {
                planificacion["its"].push(procesarItinerario(data.plan.itineraries.itinerary));
                numItinerarios = 1;
                itinerarioActual = 0;
            }
            dibujarPlanificacion();
            //if (numItinerarios > 0 && window.fbApp.Utils.FBisLoggedIn == true) {
            //    // invoquemos la acción.

            //}
        })
        .fail(function () {
            map.removeLayer(markerDestino);
            planificacionLayer.clearLayers();
           MostrarError("Ocurrio un error durante la descarga de internet! Por favor verifique su conexión.");
        });
    //} else {
    //    markerOrigen = new L.Marker(ll, { icon: destIcon });
    //    map.addLayer(markerOrigen);

    //    estadoPlanificar = 2;
    //    actualizarPlanificacion();
    //}
}

function geoLocate() {
    setMensaje("Buscando tu posici&oacute;n, por favor espera...");
    map.locate({ setView: true, maxZoom: 18 });
}

function setMensaje(msg) {
    $("#mensaje").html(msg);
}

function setMensaje2(msg) {
    $("#mensaje2").html(msg);
}

function onViewReset(e) {
    var zoom = map.getZoom();
    if (zoom < 15) {
        geojsonLayer.clearLayers();
        return; // no hacemos nada si estamos lejos.
    }
    if(e!=undefined){
    var bounds = e.target.getBounds(); // map.getBounds();
    var url =
    prefix + "/paraderoscercanosjsonnew.php?" +
        "bbox=" + bounds.toBBoxString() +
        "&zoom=" + zoom +
        "&layers=0";

    var icon = ((zoom < 17) ? parSmallIcon : paricon);

    var jqxhr = jQuery.getJSON(url, function (data) {
        geojsonLayer.clearLayers();
        jQuery.each(data.par, function (i, f) {
            var marker = new L.Marker(new
                L.LatLng(f[3], f[2]),
                {
                    icon: icon,
                    codigo: f[0],
                    direccion: f[1]
                });
            marker.on('click', onParaderoClick);
            geojsonLayer.addLayer(marker);
            if (requestedStop != null && requestedStop == f[0]) {
                // bingo
                requestedStop = null;
                seleccionarParadero(marker);
            }
        });
        if (data.layers != null) {
            jQuery.each(data.layers, function (i, f) {
                // cada capa va a tener
                // icon
                // smallIcon
                // markers (colección de objetos)
                // refreshTime (si existe y mayor a cero, cantidad de segundos para el refresco)

                if (zoom < 17)
                    iconUrl = f.smallIcon;
                else
                    iconUrl = f.icon;

                var LayerIcon = L.Icon.extend({
                    options: {
                        iconUrl: iconUrl,
                        shadowUrl: null,
                        iconSize: new L.Point(40, 40),
                        shadowSize: null,
                        iconAnchor: new L.Point(20, 20),
                        popupAnchor: new L.Point(-3, -76)
                    }
                });
                var layerIcon = new LayerIcon();

                jQuery.each(f.markers, function (j, k) {
                    var marker = new L.Marker(new
                        L.LatLng(k[3], k[2]),
                        {
                            icon: layerIcon,
                            id: k[0],
                            nom: k[1],
                            //							dist: k[4],
                            desc: k[4],
                            imagen: k[5],
                            targetUrl: k[6]
                        });
                    marker.on('click', onLugarClick);
                    geojsonLayer.addLayer(marker);
                });
            });
        }
    })
     .fail(function () {
         MostrarError("Ocurrio un error durante la descarga de internet! Por favor verifique su conexión.");
     });
    }
}


function seleccionarParadero(e) {
    // descarguemos los tiempos
    codigoparadero = e.options.codigo;
    modoSeleccion = 1;
    var url =
    prefix + '/simt5.php?deco=1&par=' +
        e.options.codigo;
    //			$.blockUI({ message:
    //			'<img src="282.png" />' });
    setMensaje("Descargando la informaci&oacute;n del paradero " + codigoparadero + ", por favor espere...");
    $("#like").hide();
    var jqxhr = jQuery.getJSON(url, function (data) {
        JsonInformacionParadero = data;
       // 				$.unblockUI();
       // var html = '<div class="paradero tsmapgruesa" style="width: 320px;"><p><center ' +
       // 'class="tsmapgruesa">Paradero <b>' + e.options.codigo
       // + '</b></center>' +
       // '<center>' + e.options.direccion +
       // '</center><br/>';
       // html +=
       // '<table id="letrero" style="width: 320px";><tr class="paraderowhite"><th>servicio</th><th>distancia</th><th>tiempo</th></tr>'
       // 
       // html += '</div>';

       //popup = new L.Popup({ maxWidth: 400 });
       // popup.setLatLng(e.getLatLng());
       // popup.setContent(html);

       // map.openPopup(popup);
      

       // setMensaje("Mostrando informaci&oacute;n de paradero " + codigoparadero);
        //if (window.fbApp.Utils.FBisLoggedIn == true)
          //  $("#like").show();
    }).fail(function () {
        MostrarError("Ocurrio un error durante la descarga de internet! Por favor verifique su conexión.");
    });

}

function onLugarClick(e) {
    modoSeleccion = 3;

    // descarguemos los tiempos
    id = e.target.options.id;
    nom = e.target.options.nom;
    dist = e.target.options.dist;
    desc = e.target.options.desc;
    imagen = e.target.options.imagen;
    targetUrl = e.target.options.targetUrl;

    var html = '<div class="paradero tsmapgruesa" style="width: 320px;"><p><center ' +
        'class="tsmapgruesa">' + nom
        + '</b></center><br />' +
        '<center><a href="' + targetUrl + '">' + targetUrl + '</a></center><br/ >' +
        '<img src="' + imagen + '" />' + desc + '<br />' +
        '</div>';
    popup = new L.Popup({ maxWidth: 400 });

    popup.setLatLng(e.target.getLatLng());
    popup.setContent(html);

    map.openPopup(popup);
}

var polys = null;

function dibujarRecorrido(rec, ruta) {
    var lls = new Array();

    paraderosRecorridoLayer.clearLayers();

    //jQuery.each(rec, function (i, f) {
    //    //				lls.push(new L.LatLng(f[3],f[2]));

    //    var marker = new L.Marker(new
    //            L.LatLng(f[3], f[2]),
    //            {
    //                icon: paricon,
    //                codigo: f[0],
    //                direccion: f[1]
    //            });
    //   // marker.on('click', onParaderoClick);
    //    marker.on('click', onParaderoClick);
    //    paraderosRecorridoLayer.addLayer(marker);
    //});

    jQuery.each(ruta, function (i, f) {
        //if (i % 10 == 0) {
            lls.push(new L.LatLng(f[1], f[0]));
        //}
    });

    if (polys != null) {
        map.removeLayer(polys);
    }

    polys = new L.Polyline(lls, { color: "#FF0000", weight:5 ,opacity:1.0 });

    map.addLayer(polys);
    map.setView(new L.LatLng(-33.444615, -70.653523));
   // map.fitBounds(polys);
   // polys = null;
}

function onPopupOpen(e) {
    $('#letrero tr').click(function () {
        // obtengamos el codigo de paradero
        var codsv = $('td:first', $(this)).text();
        var url =
        prefix + '/itinerario.php?deco=1&style=2&servicio='
        + codsv;
        var jqxhr = jQuery.getJSON(url, function (data) {
            // vamos a obtener los recorridos de
            // ida y vuelta.
            ida = data[0];
            vuelta = data[1];
            rutaida = data[2];
            rutavuelta = data[3];
            parida = false;
            parvuelta = false;
            jQuery.each(ida, function (i, f) {
                if (f[0] == codigoparadero)
                    parida = true;
            });
            jQuery.each(vuelta, function (i, f) {
                if (f[0] == codigoparadero)
                    parvuelta = true;
            });
            if (parida == true) {
                setMensaje("Mostrando recorrido " + codsv + " de IDA");
                dibujarRecorrido(ida, rutaida);
            }
            else if (parvuelta == true) {
                setMensaje("Mostrando recorrido " + codsv + " de REGRESO");
                dibujarRecorrido(vuelta, rutavuelta);
            }
            map.setZoom(14);
            codigoservicio = codsv;
            modoSeleccion = 2;
        }).fail(function () {
            MostrarError("Ocurrio un error durante la descarga de internet! Por favor verifique su conexión.");
        });
    });
}

function onLocationFound(e) {
    var radius = parseInt(e.accuracy / 2);
    var msg = "Est&aacute;s a no m&aacute;s de " +
    radius + " metros de aqu&iacute;"

    if (positionMarker != null)
        map.removeLayer(positionMarker);
    if (positionCircle != null)
        map.removeLayer(positionCircle);

    positionMarker = new L.Marker(e.latlng, { icon: new destIconTemplate({iconUrl: 'Content/images/tsm/marker-icon.png'}) }); // , iconUrl: 'Content/images/tsm/marker-icon.png' 
    map.addLayer(positionMarker);
    //			positionMarker.bindPopup(msg).openPopup();

    setMensaje(msg);

    if (radius < 500)
        xcolor = '#03f';
    else
        xcolor = '#bfbffe';

    positionCircle = new L.Circle(e.latlng, radius, { color: xcolor });
    map.addLayer(positionCircle);

    precision = radius;
}

function onLocationError(e) {
    setMensaje("Ocurri&oacute; un error al tratar de obtener tu ubicaci&oacute;n."); // " + e.message);
    precision = -1;
}

function ubicarParadero(stopId, lat, lng) {
    requestedStop = stopId;
    map.setView(new L.LatLng(lat, lng), 17);
}

function onParaderoClick(e) {
    codigoparadero = e.target.options.codigo;
    direccionparadero = e.target.options.direccion;
    latlonParaderoFavorito = e.latlng;
    modoSeleccion = 1;
    //descarga los recorridos del paradero
    DescargarInformacionParadero();
    //navega a la vista recorrido
    document.querySelector('#ListaParaderoSeleccionado').className = 'current';
    document.querySelector('[data-position="current"]').className = 'left';
}



var vm = new vmSectionRecorrido();
var ls = localStorage.getItem('vm');
var bip = localStorage.getItem('bip');
if (ls != null) {
    var plainJs = JSON.parse(ko.toJS(ls));
    ko.applyBindings(vm);
    vm.ParaderoFavorito2((plainJs.ParaderoFavorito2));
}
else
{
    ko.applyBindings(vm);
}
if (bip != null)
{
    var JsBip = JSON.parse(ko.toJS(bip));
    vm.numBip((JsBip));
}
LlenarSectionReclamo();
function DescargarInformacionParadero() {
   
    vm.codigo(codigoparadero);
    var url =
   prefix + '/simt5.php?deco=1&par=' + codigoparadero;

    //setMensaje("Descargando la informaci&oacute;n del paradero " + codigoparadero + ", por favor espere...");
    //$("#like").hide();
    var jqxhr = jQuery.getJSON(url, function (data) {
        
        vm.ServiciosParadero(data, codigoparadero, direccionparadero);
      
    }).fail(function () {
        MostrarError("Ocurrio un error durante la descarga de internet! Por favor verifique su conexión.");
    });

}


function vmSectionRecorrido() {
    //localStorage.clear();
    var self = this;
    self.codigo = ko.observable();
    self.texto = ko.observable();
    self.ParaderoFavorito2 = ko.observableArray();
    self.servicios = ko.observableArray();
    self.favicon = ko.observable();
    self.imagen = ko.observable();
    self.link = ko.observable();
    self.Recorridos = ko.observableArray();
    self.numBip = ko.observable();
    self.FechaBip = ko.observable("---");
    self.saldoBip = ko.observable("---");
    self.btnvisible = ko.observable(true);
    self.pRecVisible = ko.observable(true);
    self.buscarRecorrido = ko.observable();
    self.RecorridosTemp = ko.observableArray();
    self.SocialArray = ko.observableArray();
    self.Tipo_Reclamo = ko.observable();
    self.ReclamoArrayRec = ko.observableArray();
    self.ReclamoArrayPar = ko.observableArray();
    self.ArrayReclamo = ko.observableArray();
    self.TipoReclamoArray = ko.observableArray();
    self.MensajeReclamo = ko.observable();
    self.OptionSelReclamo = ko.observable();
    self.Tipo_Reclamo_Seleccionado = ko.observable();
    self.btnLimpiarVisible = ko.observable(false);
    self.btnCambiarReco = ko.observable(false);
    this.enterSearch = function () {
        self.btnvisible(false);
        if (self.numBip() != null) {
            localStorage.setItem('bip', ko.toJSON(self.numBip()));
            var url = prefix + 'bip.php?num=' + self.numBip();
            var jqxhr = jQuery.getJSON(url, function (data) {
                if (data['error'] != "NO HAY COINCIDENCIA") {
                    self.FechaBip(data['fecha']);
                    self.saldoBip(data['saldo']);
                    self.btnvisible(true);
                }
                else
                {
                    self.FechaBip("Error");
                    self.saldoBip("Error");
                    self.btnvisible(true);
                }
            }).fail(function () {
                MostrarError("Ocurrio un error durante la descarga de internet! Por favor verifique su conexión.");
                self.btnvisible(true);
                self.FechaBip("Error");
                self.saldoBip("Error");
            });
        }
       

    };
    //funcion que descarga los servicios  de un paradero
    this.ServiciosParadero = function (d, cod, dir) {
        self.codigo(cod);
        self.texto(dir);
        self.servicios.removeAll();

        jQuery.each(d[0], function (i, f) {
            var a = new ServicioParadero(f[0], f[1], f[2]);
            self.servicios.push(a);
        });


        if (d[1] != 'B') {
            self.imagen(d[1]);
        }
        else {
            self.imagen(null);
        }
        if (d[2] != '') {
            self.link(d[2]);
        }
        else {
            self.link(null);
        }
       // var par = new EntidadParadero(cod, latlonParaderoFavorito);
        var boolExiste = false;
        for (var i = 0; i < vm.ParaderoFavorito2().length ; i++) {
            if(ko.isObservable(vm.ParaderoFavorito2()[i].paradero)){
                if (vm.ParaderoFavorito2()[i].paradero() == cod) {
                    boolExiste = true;
                }
            }
            else{
                if (vm.ParaderoFavorito2()[i].paradero == cod) {
                    boolExiste = true; 
                }
            }
        }
        
        if (!boolExiste) {
            self.favicon("Content/images/tsm/faviconDesactivado2.png");
        }
        else {
            self.favicon("Content/images/tsm/faviconActivado.png");
        }
       

    };

    ////funcion para agregar un paradero a favoritos
    this.AgregarFavoritos = function () {
        var par = new EntidadParadero(codigoparadero, latlonParaderoFavorito);
        var boolExiste = false;
        for (var i = 0; i < vm.ParaderoFavorito2().length ; i++) {
            if (ko.isObservable(vm.ParaderoFavorito2()[i].paradero)) {
                if (vm.ParaderoFavorito2()[i].paradero() == codigoparadero) {
                    boolExiste = true;
                    par = vm.ParaderoFavorito2()[i];
                }
            }
            else {
                if (vm.ParaderoFavorito2()[i].paradero == codigoparadero) {
                    boolExiste = true;
                    par = vm.ParaderoFavorito2()[i];
                }
            }
            
        }
       
        if (!boolExiste) {
            vm.ParaderoFavorito2.push(par);
            self.favicon("Content/images/tsm/faviconActivado.png");
        }
        else {
            vm.ParaderoFavorito2.remove(par);
            self.favicon("Content/images/tsm/faviconDesactivado2.png"); 
        }
       
        localStorage.setItem('vm', ko.toJSON(vm));
    };
    //// funcion que descargar los recorridos de un servicio
    //// y muestra en el mapaParaderoFavorito 

    this.ListaRecorridosParadero = function (s) {
       // limpiarMapa();
        var codsv = s.servicio();
        DescargarInfoParadero(codsv, true);
    };
    this.seleccionarParaderoFavorito = function (s)
    {
        var isbool = ko.isObservable(s.lat);
        if (isbool) {
            latlonParaderoFavorito = new L.LatLng(s.lat(), s.lon());
            codigoparadero = s.paradero();
        }
        else {
            latlonParaderoFavorito = new L.LatLng(s.lat, s.lon);
            codigoparadero = s.paradero;
        }
        
        
        modoSeleccion = 1;
        //navega a la vista mapa
        document.querySelector('#sectionFavoritos').className = 'right';
        document.querySelector('.left').className = 'current';

        document.querySelector('#ListaParaderoSeleccionado').className = 'current';
        document.querySelector('[data-position="current"]').className = 'left';
        DescargarInformacionParadero();
       
       // map.setView(new L.LatLng(s.lat, s.lon), 18);
    };
    this.seleccionarRecorridoServicio = function (r) {
        var codsv = r.codServicio();
        //var b = r.nomServicio();
        vm.RecorridosTemp.removeAll();
        DescargarInfoParadero(codsv,false);
    };
    this.filtrar = function () {
        if (self.buscarRecorrido() != "" && self.buscarRecorrido()!='undefined') {
            if (Recorridos.length > 0) {
                var a = ko.utils.arrayFilter(Recorridos, function (rec) {
                    return rec.codServicio() == self.buscarRecorrido();
                });
                if (a != null) {
                    self.RecorridosTemp.removeAll();
                    for (var i = 0; i < a.length; i++) {
                        self.RecorridosTemp.push(a[i]);
                    }
                    busqueda = true;
                }
            }
        }
        else {
            if (Recorridos.length > 0) {
                 self.RecorridosTemp.removeAll();
                 for (var i = 0; i < Recorridos.length; i++) {
                     if(vm.RecorridosTemp().length  <30){
                         vm.RecorridosTemp.push(Recorridos[i]);
                     }
                 }
                 busqueda = false;
            }

        }
    }
    this.TipoRecorridoFunction = function (re_ty, re_co)
    {
        if (re_ty == 'l')//reclamo recorrido
        {
            return 'Recorrido ' + re_co;

        }
        else {
            return 'Paradero ' + re_co;
        }
    }
    this.TipoReclamo = function (re_id) {
        var res=null;
        for (var i = 0; i < vm.TipoReclamoArray().length; i++) {
            if(vm.TipoReclamoArray()[i].tiporec_id()==re_id)
                res= vm.TipoReclamoArray()[i].tiporec_texto();
        }
        return res;
    };
    this.CalcularFecha = function (dt) {
        var now = new Date();
        var reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
        var dateArray = reggie.exec(dt);
        var dateObject = new Date(
    (+dateArray[1]),
    (+dateArray[2]) - 1, // Careful, month starts at 0!
    (+dateArray[3]),
    (+dateArray[4]),
    (+dateArray[5]),
    (+dateArray[6]));

        var diff = Math.abs(now - dateObject) / (1000 * 3600);//diff en horas
        if (diff > 24) {
            diff = Math.round(diff / 24);
            if (diff > 1) {
                return 'hace ' +diff+ ' dias';
            }
            else {
                return 'hace ' +  diff + ' dia';
            }
            
        }
        else
        {
            diff=Math.floor(diff)
            if (diff > 1) {
                return 'hace ' +diff + ' horas'; 
            }
            else{
                return 'hace ' + diff + ' hora';
            }
           
        }
       
    }
    //this.IngresarReclamo = function ()
    //{
    //    //cambio section  mapa
    //    document.querySelector('#sectionSocial').className = 'right';
    //    document.querySelector('.left').className = 'current';
    //    //cambio section facebook
    //    document.querySelector('#sectionFacebook').className = 'current';
    //    document.querySelector('[data-position="current"]').className = 'left';
       
    //}
    this.Reclamobus = function (par)
    {
        self.Tipo_Reclamo_Seleccionado(self.TipoReclamoArray()[par]);
        self.Tipo_Reclamo('l');
        LlernarReclamoArray();
    }
    this.ReclamoParadero = function (par)
    {
        self.Tipo_Reclamo_Seleccionado(self.TipoReclamoArray()[par]);
        self.Tipo_Reclamo('s');
        LlernarReclamoArray();
    }
    this.Concatenartexto = function (txt)
    {
        if (vm.Tipo_Reclamo() == 'l')//reclamo recorrido
        {
            return 'Recorrido ' + txt;

        }
        else {
            return 'Paradero ' + txt;
        } 
    }
    //this.EnviarReclamo = function ()
    //{
    //    if (positionMarker != null) {
    //        var ltln = positionMarker.getLatLng();
    //        //ltln.lat  + ltln.lng
    //    }

    //    var fb = localStorage.getItem('fb');

    //    if (fb != null) {
    //        var fbjs = JSON.parse(ko.toJS(fb));
            
    //    }

    //    var url = prefix + '/newcomplain.php';

    //    var fbToken = localStorage.getItem('fbtoken');
    //    if (fbToken != null)
    //    {
           
    //    }
    //    if (self.OptionSelReclamo() != null)
    //    {

    //    }
    //    var a=self.Tipo_Reclamo_Seleccionado();
    //    //x-www-form-urlencoded
    //    url += '?type=' + self.Tipo_Reclamo()
    //        + '&code=' + self.OptionSelReclamo()
    //        + '&message=' + encodeURI(self.MensajeReclamo())
    //        + '&lat=' + ltln.lat
    //        + '&lng=' + ltln.lng
    //        + '&problemId=' + self.Tipo_Reclamo_Seleccionado().tiporec_id()
    //        + '&userId='+fbjs.id
    //        + '&userToken=' + fbToken
    //        + '&network='+'F';
    //    var xxxcxzcz = url;
    //}
  
}
function LlenarSectionReclamo()
{
    var url = prefix + 'tiporeclamos.php?deco=1';
    var jqxhr = jQuery.getJSON(url, function (data) {
        if (data != null) {
            vm.TipoReclamoArray.removeAll();
            jQuery.each(data, function (i, f) {
                var tr = new EntidadTipoReclamo(f['tiporec_id'], f['tiporec_lang'], f['tiporec_texto'], f['tiporec_desc'],
                    f['tiporec_objeto'], f['tiporec_facebook'], f['tiporec_icon'], f['tiporec_smallicon'], f['tiporec_duracion'], f['tiporec_activo']);
                vm.TipoReclamoArray.push(tr);
            });
        }
    }).fail(function () {
        map.removeLayer(markerDestino);
        planificacionLayer.clearLayers();
        MostrarError("Ocurrio un error durante la descarga de internet! Por favor verifique su conexión.");
    });

}
function LlernarReclamoArray()
{
    if (positionMarker != null) {
        var ltln = positionMarker.getLatLng();

        var url = prefix + 'paraderoscercanosjsonnew.php?lat=' + ltln.lat + '&lng=' + ltln.lng + '&enc=0&sv=1&full=0&layers=0&dist=500';
        var jqxhr = jQuery.getJSON(url, function (data) {
            vm.ReclamoArrayPar.removeAll();
            vm.ReclamoArrayRec.removeAll();
            var par = data['par'];
            jQuery.each(par, function (i, f) {
                var pr = new EntidadParaReclamo(f[0], f[1], f[3], f[2], f[4]);
                vm.ReclamoArrayPar.push(pr);
                var rec = f[5];
                jQuery.each(rec, function (j, g) {
                    var rr = new EntidadRecReclamo(g[0], g[1], g[2], g[3]);
                    if (comprobarRecorrido(rr)) {
                        vm.ReclamoArrayRec.push(rr);
                    }
                });
            });
        })
         .fail(function () {
             map.removeLayer(markerDestino);
             planificacionLayer.clearLayers();
             MostrarError("Ocurrio un error durante la descarga de internet! Por favor verifique su conexión.");
         });
        vm.ArrayReclamo.removeAll();
        if (vm.Tipo_Reclamo() == 'l')//reclamo recorrido
        {
            for (var i = 0; i < vm.ReclamoArrayRec().length; i++) {
                var re = vm.ReclamoArrayRec()[i];
                vm.ArrayReclamo.push(new EntidadReclamo( re.codReRec()));
            }

        }
        else// reclamo paradero
        {
            for (var i = 0; i < vm.ReclamoArrayPar().length; i++) {
                var pa = vm.ReclamoArrayPar()[i];
                vm.ArrayReclamo.push(new EntidadReclamo(pa.codParaRec()));
            }
        }
        vm.OptionSelReclamo(vm.ArrayReclamo()[0]);
    }
}
function comprobarRecorrido(rr) {
    var ex = true
    if (vm.ReclamoArrayRec().length > 0) {
        for (var i = 0; i < vm.ReclamoArrayRec().length; i++) {
            if (vm.ReclamoArrayRec()[i].codReRec() == rr.codReRec()) {
                ex = false;
            }
        }
    }
    
    return ex;
}
function LlenarRecorridos() {
    
    var url = prefix + '/db/servicios.php';
    //var regexpSaldo = "<td [^>]*>Saldo  tarjeta:</td>\\s*<td [^>]*>([^<]*)</td>";
    //  RegExp rsaldo = new RegExp(regexpSaldo);
    var jqxhr = jQuery.getJSON(url, function (data) {
      
        vm.RecorridosTemp.removeAll();
        jQuery.each(data, function (i, f) {
            var rec = new EntidadRecorrido(f[0], f[1] + ' - ' + f[2]);
            Recorridos.push(rec);
            if(vm.RecorridosTemp().length  <30){
                vm.RecorridosTemp.push(rec);
            }
        });
       //vm.RecorridosTemp = ko.observableArray(ko.utils.arrayMap(Recorridos, function (er) { return new EntidadRecorrido(er.codServicio(), er.nomServicio()) }));
        // ´problemas con recorridostemp null
        vm.pRecVisible(false);
    })
     .fail(function () {
         map.removeLayer(markerDestino);
         planificacionLayer.clearLayers();
         MostrarError("Ocurrio un error durante la descarga de internet! Por favor verifique su conexión.");
     });
    
};
function LlenarListaSocial() {
    var url = prefix + 'socialfeed.php?deco=1';
    var jqxhr = jQuery.getJSON(url, function (data) {
        if (data != null) {
            vm.SocialArray.removeAll();
            jQuery.each(data, function (i, f) {
                //var soc = new EntidadSocial(f['reclamo_id'], f['tiporec_id'], f['reclamo_timestamp'],
                //f['reclamo_userid'], f['reclamo_message'], f['reclamo_type'],
                //f['reclamo_code'], f['reclamo_imageurl'], f['reclamo_fbid'],
                //f['reclamo_imageid'], f['reclamo_wallpostid'], f['username'],
                //v, f['network'], f['likes'],
                //f['geom_lat'], f['geom_lng'], f['loc_lat'], f['loc_lng']);
                var soc = new EntidadSocial(f['username'], f['reclamo_timestamp'], f['reclamo_code'], f['reclamo_message'], f['profile_image'], f['reclamo_type'], f['tiporec_id']);
                vm.SocialArray.push(soc);
            });
        }
        
    }).fail(function () {
        MostrarError("Ocurrio un error durante la descarga de internet! Por favor verifique su conexión.");
    });

}
function EntidadTipoReclamo(tr_id, tr_la,tr_te,tr_de, tr_ob, tr_fb, tr_ic, tr_si, tr_du, tr_ac) {
    var self = this;
    self.tiporec_id = ko.observable(tr_id);
    self.tiporec_lang = ko.observable(tr_la);
    self.tiporec_texto = ko.observable(tr_te);
    self.tiporec_desc = ko.observable(tr_de);
    self.tiporec_objeto = ko.observable(tr_ob);
    self.tiporec_facebook = ko.observable(tr_fb);
    self.tiporec_icon = ko.observable(tr_ic);
    self.tiporec_smallicon = ko.observable(tr_si);
    self.tiporec_duracion = ko.observable(tr_du);
    self.tiporec_activo = ko.observable(tr_ac);
}
function EntidadSocial(us, ti, re_co, re_me, im,re_ty, re_id)
{
    var self = this;
    self.username = ko.observable(us);
    self.reclamo_timestamp = ko.observable(ti);
    self.reclamo_code = ko.observable(re_co);
    self.reclamo_message = ko.observable(re_me);
    self.profile_image = ko.observable(im);
    self.reclamo_type = ko.observable(re_ty);
    self.tiporec_id = ko.observable(re_id);
}

//function EntidadSocial(rid, tid, rti, corusd, rme, rty, rco, rimurl, rfbid, rimid, rwa, usr, pro, net, lik, glat, glon, llat, llon) {
//    var self = this;

//    self.reclamo_id=ko.observable(rid);
//    self.tiporec_id=ko.observable(tid);
//    self.reclamo_timestamp=ko.observable(rti);

//    self.reclamo_userid = ko.observable(corusd);
//    self.reclamo_message=ko.observable(rme);
//    self.reclamo_type=ko.observable(rty);

//    self.reclamo_code = ko.observable(rco);
//    self.reclamo_imageurl = ko.observable(rimurl);
//    self.reclamo_fbid = ko.observable(rfbid);

//    self.reclamo_imageid = ko.observable(rimid);
//    self.reclamo_wallpostid = ko.observable(rwa);
//    self.username = ko.observable(usr);

//    self.profile_image = ko.observable(pro);
//    self.network = ko.observable(net);
//    self.likes = ko.observable(lik);

//    self.geom_lat = ko.observable(glat);
//    self.geom_lng = ko.observable(glon);
//    self.loc_lat = ko.observable(llat);

//    self.loc_lng = ko.observable(llon);
//}
function EntidadReclamo(txt) {
    var self = this;
    self.texto = ko.observable(txt);
}
function EntidadRecReclamo(cod, nom, dir, ti)
{
    var self = this;
    self.codReRec = ko.observable(cod);
    self.nomReRec = ko.observable(nom);
    self.direcRec = ko.observable(dir);
    self.tirecRec = ko.observable(ti);

}
function EntidadParaReclamo(cod, nom, lat, lon,txt)
{
    var self = this;
    self.codParaRec = ko.observable(cod);
    self.nomParaRec = ko.observable(nom);
    self.latParaRec = ko.observable(lat);
    self.lonParaRec = ko.observable(lon);
    self.texParaRec = ko.observable(txt);
}
function EntidadRecorrido(cod, tex) {
    var self = this;
    self.codServicio = ko.observable(cod);
    self.nomServicio = ko.observable(tex);
};
function ServicioParadero(servicio, distancia, tiempo) {
    var self = this;
    self.servicio = ko.observable(servicio);
    self.distancia = ko.observable(distancia);
    self.tiempo = ko.observable(tiempo);
};
function EntidadParadero(par, ltln) {
    var self = this;
    self.paradero = ko.observable(par);
    self.lat = ko.observable(ltln.lat);
    self.lon = ko.observable(ltln.lng);
};
function DescargarInfoParadero(codsv, boolSection)
{
    var url =  prefix + '/itinerario.php?deco=1&style=2&servicio=' + codsv;

    var jqxhr = jQuery.getJSON(url, function (data) {
        // vamos a obtener los recorridos de
        // ida y vuelta.
        ida = data[0];
        vuelta = data[1];
        rutaida = data[2];
        rutavuelta = data[3];
        parida = false;
        parvuelta = false;
        jQuery.each(ida, function (i, f) {
            if (f[0] == codigoparadero)
                parida = true;
        });
        jQuery.each(vuelta, function (i, f) {
            if (f[0] == codigoparadero)
                parvuelta = true;
        });
        if (boolSection) {
            document.querySelector('#ListaParaderoSeleccionado').className = 'right';
            document.querySelector('[data-position="current"]').className = 'current';
        }
        else {
            document.querySelector('#sectionRecorridos').className = 'right';
            document.querySelector('[data-position="current"]').className = 'current';
            parida = true;
        }
     
        if (parida == true) {
            setMensaje("Mostrando recorrido " + codsv + " de IDA");
            dibujarRecorrido(ida, rutaida);
        }
        else if (parvuelta == true) {
            setMensaje("Mostrando recorrido " + codsv + " de REGRESO");
            dibujarRecorrido(vuelta, rutavuelta);
        }
       
      //  map.setZoom(14);
        codigoservicio = codsv;
        modoSeleccion = 2;
        vm.btnCambiarReco(true);
        vm.btnLimpiarVisible(true);
    }).fail(function () {
        map.removeLayer(markerDestino);
        planificacionLayer.clearLayers();
        MostrarError("Ocurrio un error durante la descarga de internet! Por favor verifique su conexión.");
    });
 
}
$("#btnLimpiar").click( function () {
    limpiarMapa();
    eliminarIdaVuelta();
    vm.btnLimpiarVisible(false);
});
$("#btnIdaVuelta").click(function () {
    cambiarIdaVuelta();
    
});
function cambiarIdaVuelta()
{
    if(vuelta!=null&&ida!=null){
        limpiarMapa();
        if (parida) {
            dibujarRecorrido(vuelta, rutavuelta);
            parida = false;
        }
        else
        {
            dibujarRecorrido(ida, rutaida);
            parida = true;
        }
    }
    //map.setZoom(14);

};
function eliminarIdaVuelta()
{
    ida = null;
    vuelta = null;
    rutaida = null;
    rutavuelta = null;
    vm.btnCambiarReco(false);
}
function limpiarMapa()
{
    if (paraderosRecorridoLayer != null)
        paraderosRecorridoLayer.clearLayers();
    if (polys != null)
        map.removeLayer(polys);
    if (planificacionLayer != null)
        planificacionLayer.clearLayers();
    if (markerDestino != null) {
        map.removeLayer(markerDestino);
    }
    
    onViewReset();
    
}
var tamañolista = 60;
function RevisarPosicion() {
    var alt=recorridostabla.offsetHeight + recorridostabla.scrollTop;
    var alttotal = recorridostabla.scrollHeight;
    //var xx = 'alt: ' + alt + ' alttotal: ' + alttotal;
  
    //window.alert(xx);
    if (alt >= alttotal && vm.RecorridosTemp().length > 0 &&  !busqueda  ) {
        
        for (var i = vm.RecorridosTemp().length; i < Recorridos.length; i++) {
            if (vm.RecorridosTemp().length < tamañolista && vm.RecorridosTemp().length<Recorridos.length) {
                vm.RecorridosTemp.push(Recorridos[i]);
            }
        }
        tamañolista += 30;
    }
    
}
function MostrarError(err) {
    window.alert(err);
}

