BITS=[16,8,4,2,1];BASE32="0123456789bcdefghjkmnpqrstuvwxyz";NEIGHBORS={right:{even:"bc01fg45238967deuvhjyznpkmstqrwx"},left:{even:"238967debc01fg45kmstqrwxuvhjyznp"},top:{even:"p0r21436x8zb9dcf5h7kjnmqesgutwvy"},bottom:{even:"14365h7k9dcfesgujnmqp0r2twvyx8zb"}};BORDERS={right:{even:"bcfguvyz"},left:{even:"0145hjnp"},top:{even:"prxz"},bottom:{even:"028b"}};NEIGHBORS.bottom.odd=NEIGHBORS.left.even;NEIGHBORS.top.odd=NEIGHBORS.right.even;NEIGHBORS.left.odd=NEIGHBORS.bottom.even;NEIGHBORS.right.odd=NEIGHBORS.top.even;BORDERS.bottom.odd=BORDERS.left.even;BORDERS.top.odd=BORDERS.right.even;BORDERS.left.odd=BORDERS.bottom.even;BORDERS.right.odd=BORDERS.top.even;function refine_interval(b,d,a){if(d&a){b[0]=(b[0]+b[1])/2}else{b[1]=(b[0]+b[1])/2}}function calculateAdjacent(f,b){f=f.toLowerCase();var a=f.charAt(f.length-1);var d=(f.length%2)?"odd":"even";var e=f.substring(0,f.length-1);if(BORDERS[b][d].indexOf(a)!=-1){e=calculateAdjacent(e,b)}return e+BASE32[NEIGHBORS[b][d].indexOf(a)]}function decodeGeoHash(b){var a=1;var d=[];var e=[];d[0]=-90;d[1]=90;e[0]=-180;e[1]=180;lat_err=90;lon_err=180;for(i=0;i<b.length;i++){c=b.charAt(i);cd=BASE32.indexOf(c);for(j=0;j<5;j++){mask=BITS[j];if(a){lon_err/=2;refine_interval(e,cd,mask)}else{lat_err/=2;refine_interval(d,cd,mask)}a=!a}}d[2]=(d[0]+d[1])/2;e[2]=(e[0]+e[1])/2;return{latitude:d,longitude:e}}function encodeGeoHash(k,a){var e=1;var f=0;var h=[];var d=[];var l=0;var b=0;var g=12;geohash="";h[0]=-90;h[1]=90;d[0]=-180;d[1]=180;while(geohash.length<g){if(e){mid=(d[0]+d[1])/2;if(a>mid){b|=BITS[l];d[0]=mid}else{d[1]=mid}}else{mid=(h[0]+h[1])/2;if(k>mid){b|=BITS[l];h[0]=mid}else{h[1]=mid}}e=!e;if(l<4){l++}else{geohash+=BASE32[b];l=0;b=0}}return geohash}var MapTooltip=function(d,b,a){this.obj=d;this.html=b;this.options=a||{}};MapTooltip.prototype=new GOverlay();MapTooltip.prototype.initialize=function(b){var f=document.getElementById("MapTooltipContainer");if(!f){var f=document.createElement("div");f.setAttribute("id","MapTooltipContainer")}if(this.options.maxWidth||this.options.minWidth){f.style.maxWidth=this.options.maxWidth||"150px";f.style.minWidth=this.options.minWidth||"150px"}else{f.style.width=this.options.width||"150px"}f.style.padding=this.options.padding||"3px 5px";f.style.backgroundColor=this.options.backgroundColor||"#ff9";f.style.border=this.options.border||"1px solid #fc0";f.style.fontSize=this.options.fontSize||"80%";f.style.color=this.options.color||"#000";f.innerHTML=this.html;f.style.position="absolute";f.style.zIndex="1000";var a=this.options.offsetX||10;var e=this.options.offsetY||0;var d=GEvent.addListener(b,"mousemove",function(k){GEvent.removeListener(d);var h=(b.fromLatLngToDivPixel(k)).x+a;var g=(b.fromLatLngToDivPixel(k)).y-e;f.style.left=h+"px";f.style.top=g+"px";b.getPane(G_MAP_FLOAT_PANE).appendChild(f)});this._map=b;this._div=f};MapTooltip.prototype.remove=function(){if(this._div!=null){this._div.parentNode.removeChild(this._div)}};MapTooltip.prototype.redraw=function(a){};var gicon=Array();gicon[1]=new GIcon();gicon[1].image="/static/images/white-circle.png";gicon[1].iconSize=new GSize(8,8);gicon[1].iconAnchor=new GPoint(4,4);gicon[1].infoWindowAnchor=new GPoint(4,4);gicon[2]=new GIcon();gicon[2].image="/static/images/desde.png";gicon[2].shadow="/static/images/balloonshadow.png";gicon[2].iconAnchor=new GPoint(10,34);gicon[2].infoWindowAnchor=new GPoint(4,4);gicon[3]=new GIcon();gicon[3].image="/static/images/hasta.png";gicon[3].shadow="/static/images/balloonshadow.png";gicon[3].iconAnchor=new GPoint(10,34);gicon[3].infoWindowAnchor=new GPoint(4,4);var COUNTCONSULTAS=0;var first=true;var markerstart;var geostart;var markerend;var geoend;var fullmapdata=null;var walkorigin="False";var walkdest="False";var geocoder=new GClientGeocoder();$(document).ready(function(){if(GBrowserIsCompatible()){G_NORMAL_MAP.getTileLayers()[0].getOpacity=function(){return 0.9};G_PHYSICAL_MAP.getTileLayers()[0].getOpacity=function(){return 0.9};G_SATELLITE_MAP.getTileLayers()[0].getOpacity=function(){return 0.9};G_HYBRID_MAP.getTileLayers()[0].getOpacity=function(){return 0.9};var a={resultlist:G_GOOGLEBAR_RESULT_LIST_INLINE,linkTarget:G_GOOGLEBAR_LINK_TARGET_BLANK,showOnLoad:true,suppressZoomToBounds:false,searchFormHint:"buscar en el mapa",style:"new",adsOptions:{client:"####",adsafe:"low",language:"es-AR"}};gmap=new GMap2(document.getElementById("map"),{googleBarOptions:a,backgroundColor:"#FFFFFF"});gmap.addControl(new GSmallZoomControl());gmap.setCenter(new GLatLng(-34.59939801134169,-58.4222449734807),13);resizeEE();gmap.setCenter(new GLatLng(-34.59939801134169,-58.4222449734807),13);gmap.addMapType(G_PHYSICAL_MAP);var b=new GHierarchicalMapTypeControl();b.addRelationship(G_SATELLITE_MAP,G_HYBRID_MAP,null,true);gmap.addControl(b);readAll();var d=gmap.getZoom();GEvent.addListener(gmap,"zoomend",function(f,e){});gmap.enableDoubleClickZoom()}else{alert("Lo siento pero el API de Google Maps no es compatible con su navegador");pageTracker._trackEvent("Map","Error","API GM no compatible")}});$(window).resize(function(){resizeEE()});$(window).unload(function(){GUnload()});function resizeEE(){detailsVisible=0;marginH=115;var b=getWindowHeightEE()-marginH;var a=document.getElementById("map");a.style.height=b+"px";a.style.border="solid #C0C0C0 1px";gmap.checkResize()}function getWindowHeightEE(){return $(window).height()}function getWindowWidthEE(){return $(window).width()}function recenterandzoom(e,h){gmap.setCenter(new GLatLng(0,0),0);var f=new GLatLngBounds();for(var d=0;d<e.length;d++){var g=e[d].y;var b=e[d].x;var a=new GLatLng(g,b);f.extend(a)}msize=new GSize(getWindowHeightEE(),getWindowWidthEE());if(h){gmap.setZoom(gmap.getBoundsZoomLevel(f,msize-1))}else{gmap.setZoom(gmap.getBoundsZoomLevel(f,msize))}gmap.setCenter(f.getCenter())}function readAll(a){if(a!=1){gmap.clearOverlays()}points=[];allpoints=[];if(fullmapdata!=null){data=fullmapdata;$.each(data.route.lines,function(b,d){colorload="#"+d.color;backgload="#"+d.backg;widthload=d.width;opacityload=d.opacity;$.each(d.points,function(g,f){var h=decodeGeoHash(f.gp);var e=new GLatLng(h.latitude[2],h.longitude[2]);points.push(e);allpoints.push(e)});$.each(d.stations,function(g,f){var h=decodeGeoHash(f.gp);var e=new GLatLng(h.latitude[2],h.longitude[2]);if(a!=1){addmarker(e,f.name,f.code,gicon[1],"initial")}else{addmarker(e,f.name,f.code,gicon[1],"viewing")}});if(a==1){gmap.addOverlay(new GPolyline(points,"#FFFFFF",widthload-2,0.1));gmap.addOverlay(new GPolyline(points,colorload,widthload-7,0.2))}else{gmap.addOverlay(new GPolyline(points,"#FFFFFF",widthload-2,1));gmap.addOverlay(new GPolyline(points,colorload,widthload-7,1))}points=[]});if(a!=1){recenterandzoom(allpoints,0);$("#leftdata").html("Elegí una estación en el mapa como punto de salida");$("#leftload").html("");initClick();clickmode=1}else{clickmode=0}}else{$.ajax({type:"GET",url:"/fronteallpts",cache:true,dataType:"json",success:function(b){fullmapdata=b;$.each(b.route.lines,function(d,e){colorload="#"+e.color;backgload="#"+e.backg;widthload=e.width;opacityload=e.opacity;$.each(e.points,function(h,g){var k=decodeGeoHash(g.gp);var f=new GLatLng(k.latitude[2],k.longitude[2]);points.push(f);allpoints.push(f)});$.each(e.stations,function(h,g){var k=decodeGeoHash(g.gp);var f=new GLatLng(k.latitude[2],k.longitude[2]);if(a!=1){addmarker(f,g.name,g.code,gicon[1],"initial")}else{addmarker(f,g.name,g.code,gicon[1],"viewing")}});if(a==1){gmap.addOverlay(new GPolyline(points,"#FFFFFF",widthload-2,0.1));gmap.addOverlay(new GPolyline(points,colorload,widthload-7,0.2))}else{gmap.addOverlay(new GPolyline(points,"#FFFFFF",widthload-2,1));gmap.addOverlay(new GPolyline(points,colorload,widthload-7,1))}points=[]});if(a!=1){recenterandzoom(allpoints,0);$("#leftdata").html("Elegí una estación en el mapa como punto de salida");$("#leftload").html("");initClick();clickmode=1}else{clickmode=0}}})}}function clearInputs(){$("#origen").html("&nbsp;");$("#origenco").val("");$("#destino").html("&nbsp;");$("#destinoco").val("");$("#consulta").show();$("#leftdata").html("Esperá un momento por favor");$("#leftload").html('<div id="loadersb" style="line-height: 115px; text-align: center;"><img alt="cargando mapa" src="/static/cargando.gif"/></div>');var a=true;GEvent.removeListener(clicklistener)}function mensajeCarga(){$("#leftdata").html("Marcá una estación en el mapa para elegirla")}function addspmarker(a,e,d,g,f){icon=new GIcon();icon.image="http://chart.apis.google.com/chart?chst=d_bubble_icon_text_small&chld=train|bb|"+f+"|"+d+"|"+g;icon.shadow="http://chart.apis.google.com/chart?chst=d_bubble_icon_text_small_shadow&chld=train|bb|"+f;icon.iconAnchor=new GPoint(0,40);icon.infoWindowAnchor=new GPoint(4,4);var b=new GMarker(a,icon);GEvent.addListener(b,"mouseover",function(h){this.overlay=new MapTooltip(this,e);gmap.addOverlay(this.overlay);GEvent.addListener(b,"mouseout",function(){gmap.removeOverlay(this.overlay)})});gmap.addOverlay(b)}function addmarker(a,g,f,e,h){var d={icon:e,clickable:true};var b=new GMarker(a,d);GEvent.addListener(b,"mouseover",function(k){this.overlay=new MapTooltip(this,g);gmap.addOverlay(this.overlay);GEvent.addListener(b,"mouseout",function(){gmap.removeOverlay(this.overlay)})});if(h=="initial"){GEvent.addListener(b,"click",function(k){if(first){$("#origen").html(g);$("#origenco").val(f);$("#leftdata").html("Elegí el punto al que queres llegar desde "+g);if(markerstart){gmap.removeOverlay(markerstart)}markerstart=createStdMarker(a,"<b>Punto de salida</b>","start");gmap.addOverlay(markerstart);pageTracker._trackEvent("Ruta","Salida",g);first=false;return}else{if($("#origenco").val()==f){$("#leftdata").html("Elegí un punto ditinto a "+$("#origen").html()+" como llegada");return}$("#destino").html(g);$("#destinoco").val(f);if(markerend){gmap.removeOverlay(markerend)}markerend=createStdMarker(a,"<b>Punto de llegada</b>","end");gmap.addOverlay(markerend);$("#leftdata").html('Usa el botón de "Ver recorrido" o elegí un nuevo punto de salida');pageTracker._trackEvent("Ruta","Llegada",g);first=true;return}})}gmap.addOverlay(b)}function showRoute(){if($("#origenco").val()==""||$("#destinoco").val()==""){$("#leftdata").html("Marcá una punto en el mapa para elegirlo");return}var a=$("#origenco").val();var b=$("#destinoco").val();if(a=="gp"){$("#leftdata").html("Buscando paradas cercanas al punto de salida.</br>");walkorigin="True"}else{$("#leftdata").html("Esperá un momento por favor.</br>");walkorigin="False"}$("#leftload").html('<div id="loadersb" style=			  "line-height: 115px; text-align: center;"><img alt=			  "cargando mapa" src=			  "/static/cargando.gif"/></div>');$("#consulta").hide();points=[];walk=[];allpoints=[];errorpt=false;$.ajax({type:"GET",url:"/frontestops",cache:false,async:false,data:({point:geostart,code:a,range:500}),dataType:"json",success:function(d){if(d=="error"){$("#leftdata").html('No hay paradas cercanas al punto de salida<input type="button" value=					"Nueva consulta" onClick=					"clearInputs();readAll();return false					"/>');$("#leftload").html("");pageTracker._trackEvent("Error","No hay parada","cerca "+geostart);errorpt=true}}});if(errorpt==false){if(b=="gp"){$("#leftdata").html("Buscando paradas cercanas al punto de llegada.</br>");walkdest="True"}else{$("#leftdata").html("Esperá un momento por favor.</br>");walkdest="False"}$.ajax({type:"GET",url:"/frontestops",cache:false,async:false,data:({point:geoend,code:b,range:500}),dataType:"json",success:function(d){if(d=="error"){$("#leftdata").html('No hay paradas cercanas al punto de llegada<input type="button" value=					"Nueva consulta" onClick=					"clearInputs();readAll();return false					"/>');$("#leftload").html("");pageTracker._trackEvent("Error","No hay parada","cerca "+geoend);errorpt=true}}})}if(errorpt==false){$("#leftdata").html("Buscando el recorrido más corto.</br>");gmap.clearOverlays();$.ajax({type:"GET",url:"/frontesort",cache:false,data:({pointfrom:geostart,pointto:geoend,codefrom:a,codeto:b,rangefrom:500,rangeto:500}),dataType:"json",success:function(d){$.each(d.route.rank,function(e,f){from=f.from;to=f.to;fromcode=f.fromcode;tocode=f.tocode;triptime=f.routetime});$("#leftdata").html("Calculando recorrido desde "+from+" hasta "+to+".</br> Tiempo estimado de viaje : "+splitTime(triptime))+"</br>";$("#leftload").html("");$("#origenco").val(fromcode);$("#destinoco").val(tocode);computeRoute(1);pageTracker._trackEvent("Ruta","Por mostrar","De "+from+" a "+to);pageTracker._trackPageview("/resultadomejorcamino")}})}}function splitTime(d){var b=Math.floor(d/3600);var h=Math.floor(d/60)-(b*60);var g=" hora";var e=" minuto";var f=" segundo";if(b!=1){g+="s"}if(h!=1){e+="s"}if(b<1){return h+e}if(h==0){return b+g}return b+g+" y "+h+e}function computeRoute(a){if($("#origenco").val()==""||$("#destinoco").val()==""){$("#leftdata").html("Marcá una estación en el mapa para elegirla");return}if(a!=1){$("#leftdata").html("Esperá un momento por favor")}$("#leftload").html('<div id="loadersb" style="line-height: 115px; text-align: center;"><img alt="cargando mapa" src="/static/cargando.gif"/></div>');$("#consulta").hide();gmap.clearOverlays();points=[];walk=[];allpoints=[];errortxt=0;errorbreak=false;$.ajax({type:"GET",url:"/fronteroute",cache:false,async:false,data:({origin:$("#origenco").val(),destination:$("#destinoco").val()}),dataType:"json",success:function(d){error=d.error;if(error==1){$("#leftdata").html("No se encontró un recorrido entre los puntos</br><input type=\"button\" value=\"Nueva consulta\" onClick=\"clearInputs();readAll();COUNTCONSULTAS++;pageTracker._trackEvent('Ruta', 'Nueva', 'Numero',"+COUNTCONSULTAS+' );return false"/>');$("#leftload").html("");var b=true}else{startpoint=d.route.from;endpoint=d.route.to;$.each(d.route.lines,function(e,f){curline=f.title;colorload=f.color;backgload=f.backg;widthload=f.width;opacityload=f.opacity;$.each(f.points,function(k,h){var l=decodeGeoHash(h.gp);var g=new GLatLng(l.latitude[2],l.longitude[2]);if(h.type=="stop"){if(k==0){addspmarker(g,h.name,colorload.substr(1),"FFF",f.routeid+" - "+f.title)}}points.push(g);allpoints.push(g);if(points.length==1&&allpoints.length>1){walk.push(lastpoint);walk.push(g);gmap.addOverlay(new GPolyline(walk,"#FFFFFF",widthload-2,1));gmap.addOverlay(new GPolyline(walk,"#000000",widthload-7,1));walk=[]}});gmap.addOverlay(new GPolyline(points,"#FFFFFF",widthload,1));gmap.addOverlay(new GPolyline(points,colorload,widthload-5,1));lastpoint=points.pop();points=[]})}}});if(!errorbreak){recenterandzoom(allpoints,1);readAll(1);GEvent.removeListener(clicklistener);$.ajax({type:"GET",url:"/fronteroutehtml",cache:false,data:({origin:$("#origenco").val(),destination:$("#destinoco").val(),walkorigin:walkorigin,walkdestination:walkdest}),dataType:"json",success:function(b){$("#leftdata").html(b.route.html+"<input type=\"button\" value=\"Nueva consulta\" onClick=\"clearInputs();readAll();COUNTCONSULTAS++;pageTracker._trackEvent('Ruta', 'Nueva', 'Numero',"+COUNTCONSULTAS+' );return false"/>');$("#leftload").html("");pageTracker._trackEvent("Ruta","Mostrada","De "+b.route.fromname+" a "+b.route.toname);pageTracker._trackPageview("/resultadobusqueda")}})}else{}}function initClick(){clickmode=1;clicklistener=GEvent.addListener(gmap,"click",function(b,a){if(clickmode){if(a){if(first){$("#origen").reversegeocode({lat:a.lat(),lng:a.lng()});$("#origenco").val("gp");if(markerstart){gmap.removeOverlay(markerstart)}markerstart=createStdMarker(a,"<b>Punto de salida</b>","start");gmap.addOverlay(markerstart);geostart=encodeGeoHash(a.lat(),a.lng());first=false}else{$("#destino").reversegeocode({lat:a.lat(),lng:a.lng()});$("#destinoco").val("gp");if(markerend){gmap.removeOverlay(markerend)}markerend=createStdMarker(a,"<b>Punto de llegada</b>","end");gmap.addOverlay(markerend);geoend=encodeGeoHash(a.lat(),a.lng());first=true}}}})}function createStdMarker(a,e,d){if(d=="start"){icon=gicon[2]}else{if(d=="end"){icon=gicon[3]}else{icon.image="images/markers/marker_BLUE.png"}}var b=new GMarker(a,{icon:icon,draggable:true});e='<span style="font-size:.9em">'+e+"</span>";GEvent.addListener(b,"click",function(){b.openInfoWindowHtml(e)});GEvent.addListener(b,"dragend",function(){var f=b.getPoint();if(d=="start"){$("#origen").reversegeocode({lat:f.lat(),lng:f.lng()});geostart=encodeGeoHash(f.lat(),f.lng())}else{if(d=="end"){$("#destino").reversegeocode({lat:f.lat(),lng:f.lng()});geoend=encodeGeoHash(f.lat(),f.lng())}}});return b}(function(a){a.fn.extend({reversegeocode:function(b){return this.each(function(){var f=a(this);function d(g){if(!g||g.Status.code!=200){return}else{place=g.Placemark[0];if(!place.address||!f){return}else{address_array=place.address.split(",");f.html(address_array[0]+", "+address_array[1])}}}if(!b.lat||!b.lng){return}else{var e=new GLatLng(b.lat,b.lng);if(e){geocoder.getLocations(e,d)}}})}})})(jQuery);
