PageSourceSearch

https://bus64.ru/jscode.js

js bus64.ru collected 2026-10-07 23:01:53 UTC 53,909 bytes, 114 lines download raw bytes

1version="2.0.13";SMT={};window.console||(window.console={});window.console.log||(window.console.log=function(){});
2SMT.eventObject=function(){var c=this,b=!1,a=!1;this.Events={};this.set=function(a,b){c.hasOwnProperty(a)&&(c[a]=b,c.raiseEvent("onchanged"))};this.get=function(a){return c.hasOwnProperty(a)?c[a]:null};this.toggle=function(a){if(!c.hasOwnProperty(a))return null;c[a]=c[a]?!1:!0;c.raiseEvent("onchanged")};this.addHandler=function(a,b){this.Events[a]||(this.Events[a]=[]);this.Events[a].push(b)};this.removeHandler=function(a,b){for(var c=this.Events[a],e=[];0<c.length;){var m=c.shift();m!=b&&e.push(m)}this.Events[a]=
3e};this.raiseEvent=function(d,c){if(!a&&(b=!0,void 0===c&&(c=[]),this.Events.hasOwnProperty(d))){for(var q=0;q<this.Events[d].length;q++){var e=this.Events[d][q];if(void 0!=e&&null!=e)try{e.apply(this,c)}catch(m){alert(m.description)}}b=!1;a&&this.Free()}};this.freeEvents=function(){for(var a in this.Events)for(;0<this.Events[a].length;)this.Events[a].pop()};this.free=function(){b?a=!0:this.FreeEvents()}};
4SMT.staticClassRule=function(c){SMT.eventObject.call(this);this.applyRule=function(b,a){a.hasClass(c)||a.addClass(c)}};SMT.conditionClassRule=function(c,b,a){SMT.eventObject.call(this);this.applyRule=function(d,k){d.hasOwnProperty(c)&&(d[c]?(b&&!k.hasClass(b)&&k.addClass(b),a&&k.hasClass(a)&&k.removeClass(a)):(b&&k.hasClass(b)&&k.removeClass(b),a&&!k.hasClass(a)&&k.addClass(a)))}};
5SMT.valueClassRule=function(c){SMT.eventObject.call(this);var b=null;this.applyRule=function(a,d){a.hasOwnProperty(c)&&(b&&d.hasClass(b)&&d.removeClass(b),a[c]&&!d.hasClass(a[c])&&d.addClass(a[c]),b=a[c])}};
6SMT.htmlLinker=function(c,b,a,d){SMT.eventObject.call(this);var k=this;d=d||{};var q={},e;for(e in d){var m=d[e],f=[];q[e]=f;if(m["class"])for(unparserdRuleIndex in m=m["class"].split(" "),m){var p=m[unparserdRuleIndex];":"==p[0]?f.push(new SMT.staticClassRule(p.substring(1))):-1==p.indexOf(":")?f.push(new SMT.valueClassRule(p)):(p=p.split(":"),f.push(new SMT.conditionClassRule(p[0],p[1],p[2])))}}this.applyRules=function(){for(var b in q){var g=a;""!=b&&(g=a.find(b));var l=q[b];for(ruleIndex in l)l[ruleIndex].applyRule(c,
7g)}};c.addHandler(b,function(){k.applyRules()});this.free=function(){c.removeHandler(b)};k.applyRules()};topMenuWorks=null;
8function TopMenuWorks(){SMT.eventObject.call(this);var c=this;jQuery("#bottomDevelopText").empty().append(config.bottomDevelopText);jQuery("#bottomSupportText").empty().append(config.bottomSupportText);""!=config.bottomSupportHref&&jQuery("#bottomSupportText").attr("href",config.bottomSupportHref);jQuery("#bottomSecondSupportText").empty().append(config.bottomSecondSupportText);""!=config.bottomSecondSupportHref&&jQuery("#bottomSecondSupportText").attr("href",config.bottomSecondSupportHref);""!=config.bottomDevelopHref&&jQuery("#bottomDevelopText").attr("href",config.bottomDevelopHref);this.routesShowed=!1;var b=jQuery("#topPanelRoutesButton");this.stationsShowed=!1;var a=jQuery("#topPanelStationsButton");
9this.favShowed=!1;var d=jQuery("#topPanelFavButton"),k=!1,q=null,e=null,m=jQuery("#topPanelTraffic");m.click(function(){k?(map.removeTileLayer(q),m.css("background-image",'url("img/traffic_off.png")'),k=!1,clearInterval(e)):(q=map.addTileLayer(config.trafficServer+"/"+config.trafficCity+"/render/{z}/{x}/{y}.png?_="+Math.random()),m.css("background-image",'url("img/traffic_on.png")'),k=!0,e=setInterval(function(){q&&map.removeTileLayer(q);q=map.addTileLayer(config.trafficServer+"/"+config.trafficCity+
10"/render/{z}/{x}/{y}.png?_="+Math.random())},config.trafficRefresh))});var f=!1,p=[],n=jQuery("#topPanelCameras");config.showCamerasButton||n.css("display","none");n.click(function(){if(f){n.css("background-image",'url("img/cameras_off.png")');f=!1;for(g in p)map._map.removeLayer(p[g]);p=[]}else if(n.css("background-image",'url("img/cameras_on.png")'),f=!0,config.iCameras)for(var g in config.iCameras){var a=config.iCameras[g],b=L.marker([a.lat,a.lng],{zIndexOffset:1,title:a.hint,icon:L.divIcon({html:"<div></div>",
11className:"cameraIco",iconSize:[32,32],iconAnchor:[16,16]})});b.addTo(map._map);p.push(b);b.camera=a;b.on("click",function(g){$.ajax({url:g.target.camera.url,dataType:"text"}).success(function(a){popup=L.popup({maxWidth:700,minWidth:455,maxHeight:400,closeButton:!0,className:""});popup.setContent(a);popup.setLatLng(L.latLng(g.target.camera.lat,g.target.camera.lng));popup.openOn(map._map);popup.update()})})}});b.click(function(){c.get("routesShowed")?(c.set("routesShowed",!1),routesPanelWorks.hidePanel()):
12(c.set("routesShowed",!0),c.set("stationsShowed",!1),c.set("favShowed",!1),routesPanelWorks.showPanel(),stationsPanelWorks.hidePanel(),favPanelWorks.hidePanel())});a.click(function(){c.get("stationsShowed")?(c.set("stationsShowed",!1),stationsPanelWorks.hidePanel()):(c.set("stationsShowed",!0),c.set("routesShowed",!1),c.set("favShowed",!1),routesPanelWorks.hidePanel(),stationsPanelWorks.showPanel(),favPanelWorks.hidePanel())});d.click(function(){c.get("favShowed")?(c.set("favShowed",!1),favPanelWorks.hidePanel()):
13(c.set("favShowed",!0),c.set("routesShowed",!1),c.set("stationsShowed",!1),favPanelWorks.showPanel(),routesPanelWorks.hidePanel(),stationsPanelWorks.hidePanel())});new SMT.htmlLinker(this,"onchanged",jQuery("#topPanelDiv"),{"#topPanelRoutesButton":{"class":"routesShowed:isDown"},"#topPanelStationsButton":{"class":"stationsShowed:isDown"},"#topPanelFavButton":{"class":"favShowed:isDown"}});c.set("routesShowed",!0);routesPanelWorks.showPanel()}
14map=new function(c){var b=this;this.initialize=function(a,d,c){b._map=L.map("map",{markerZoomAnimation:!0,closePopupOnClick:!1});b._map.on("load",d||function(){});
14b._map.setView([config.center.lat,config.center.lng],config.zoom);L.tileLayer("https://b.tile.openstreetmap.org/{z}/{x}/{y}.png",{maxZoom:18,detectRetina:!0,attribution:'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery \u00a9 <a href="http://mapbox.com">Mapbox</a>',
15id:"examples.map-i86knfo3"}).addTo(b._map)};this.addPopupCloseHandler=function(a){b._map.on("popupclose",a)};this.addTileLayer=function(a){a=L.tileLayer(a,{});a.addTo(b._map);return a};this.removeTileLayer=function(a){b._map.removeLayer(a)};this.addPopup=function(a,d,c){popup=L.popup({maxWidth:700,minWidth:455,maxHeight:400,closeButton:!1,className:""});popup.setContent(a);popup.setLatLng(L.latLng(d,c));popup.openOn(b._map);popup.update();return popup};this.addPolyline=function(a,d){a=jQuery.map(a,
16function(a,b){return L.latLng(a.lat,a.lng)});return L.polyline(a,{color:d||"red",opacity:1}).addTo(b._map)};this.removePolyline=function(a){b._map.removeLayer(a)};this.addMarker=function(a){a=a||{};return L.marker([a.lat,a.lng]).addTo(b._map)};this.addDivMarker=function(a,d){d=d||{};return L.marker([d.lat,d.lng],{zIndexOffset:1,title:d.tooltip,icon:L.divIcon({html:a,className:"",iconSize:[d.width,d.height],iconAnchor:[d.anchorX,d.anchorY]})}).addTo(b._map)};this.getMarkerLatLng=function(a){return{lat:a.getLatLng().lat,
17lng:a.getLatLng().lng}};this.setMarkerLatLng=function(a,b){b=b||{};a.setLatLng([b.lat,b.lng])};this.setMarkerOpacity=function(a,b){a.setOpacity(b)};this.removeMarker=function(a){b._map.removeLayer(a)};this.addHandler=function(a,d){b._map.on(a,d)};this.getBounds=function(){return{northWest:b._map.getBounds().getNorthWest(),southEast:b._map.getBounds().getSouthEast()}};this.project=function(a){a=b._map.project(L.latLng(a.lat,a.lng));return{x:a.x,y:a.y}};this.unproject=function(a){b._map.project(L.point(a.x,
18a.y));return{lat:markerHandle.getLatLng().lat,lng:markerHandle.getLatLng().lng}}};
19function FavList(c,b,a,d){SMT.eventObject.call(this);this.id=c;this.name=b;this.routes=a||[];this.zones=d||[];this.isShowed=!1;this.packToString=function(){var a="";return a=this.id+"|"+this.name+"|"+this.routes.map(function(a){return a.getKey()}).join(";")+"|"+this.zones.map(function(a){return a.id}).join(";")};this.parseFromString=function(a){a=a.split("|");this.id=a[0];this.name=a[1];var b=a[2];a=a[3];if(b){var b=b.split(";"),d;for(d in b){var c=b[d].split("-"),c=objectsStorage.getRouteByTypeAndId(parseInt(c[0]),
20c[1]);null!=c&&this.routes.push(c)}this.routes=jQuery.unique(this.routes)}if(a)for(d in a=a.split(";"),a)b=objectsStorage.getZoneById(a[d]),null!=b&&this.zones.push(b)}}RouteTypePngRule=function(c,b,a){this.routeType=c;this.routeNum=b;this.icoName=a;this.getIco=function(b,c){return"*"!=this.routeType&&this.routeType!=b||"*"!=this.routeNum&&this.routeNum!=c?null:a}};
21function RouteType(c,b,a,d,k){SMT.eventObject.call(this);this.id=c;this.shortName=b;this.name=a;this.pluralName=d;this.code=k;this.allVehiclesShowed=!1}
22function Route(c,b,a,d,k,q,e,m,f,p){SMT.eventObject.call(this);this.id1=c;this.id2=b;this.ids=a;this.name=k;this.type=d;this.num=q;this.fromStationId=e;this.fromStationName=m;this.toStationId=f;this.toStationName=p;this.isLineShow=this.allVehiclesShowed=this.isVehiclesShow=!1;this.getKey=function(){var a="0";"\u0422\u0440"==this.type&&(a="1");return jQuery.map(this.ids,function(g,l){return g.toString()+"-"+a}).join(";")};this.getKeySubRoute1=function(){var a="0";"\u0422\u0440"==this.type&&(a="1");
23return this.id1+"-"+a};this.getKeySubRoute2=function(){var a="0";"\u0422\u0440"==this.type&&(a="1");return this.id2+"-"+a};this.getKeyAllSubRoutes=function(){var a="0";"\u0422\u0440"==this.type&&(a="1");return jQuery.map(this.ids,function(g,l){return g.toString()+"-"+a}).join(",")}}function ZoneCategory(c,b){SMT.eventObject.call(this);this.id=c;this.name=b}function Zone(c,b,a,d){SMT.eventObject.call(this);this.id=c;this.categoryId=b;this.name=a;this.routes=d;this.isShowed=!1}
24function VehicleMarker(){this.gosnum=this.id="";this.animPoints=[];this.direction=this.lng=this.lat=0;this.lasttime=new Date;this.routeNum=this.routeType="";this.routeId=-1}function AnimPoint(c,b,a,d){this.percent=c;this.direction=b;this.lat=a;this.lng=d}
25function VehicleStorageMarker(){this.routeNum=this.routeType=this.id="";this.routeId=0;this.lasttime=this.gosnum="";this.curticks=this.dLng=this.dLat=0;this.animPoints=[];this.debugmes=[];this.focused=!1;this.curDirection=this.curLng=this.curLat=0}function VehicleForecast(){this.arrTime=this.stdescr=this.stname=this.vehicleId="";this.stationId=this.lng1=this.lat1=this.lng0=this.lat0=0}
26function StationForecast(){this.vehicleId="";this.routeId=this.arrTime=0;this.whereGo=this.routeType=this.routeNum=""}function NodePoint(){this.lng=this.lat=0}function Station(c,b,a,d,k,q){SMT.eventObject.call(this);this.id=c;this.name=a;this.description=d;this.lng=k;this.lat=q;this.type=b;this.isFav=!1;
26this.getKey=function(){return this.id+"-"+this.type}}favPanelWorks=null;
27function FavPanelWorks(c){SMT.eventObject.call(this);var b=[],a=[],d=[],k=jQuery("#favPanelTemplate").attr("id",""),q=k.find("#favListBlocksContainer");q.children().detach();var e=jQuery("#favBlockTemplate").clone().css("display","").attr("id","");e.appendTo(q);e.find("#favListBlockHeaderName").text("\u041c\u043e\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438");e.find("#favListBlockHeaderIco").addClass("stations");var m=jQuery("#favBlockTemplate").clone().css("display","").attr("id",
28"");m.appendTo(q);m.find("#favListBlockHeaderName").text("\u041c\u043e\u0438 \u0441\u043f\u0438\u0441\u043a\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432");m.find("#favListBlockHeaderIco").addClass("routes");this.showPanel=function(){k.css("height",(jQuery(window).height()-config.top_height-config.bottom_height).toString()+"px");q.css("height",(jQuery(window).height()-config.top_height-config.bottom_height-11).toString()+"px");k.css("display","inherit")};this.hidePanel=function(){k.css("display",
29"none")};this.updateFavStations=function(){a=persistentStorage.getFavStationsFromStorage();g(a)};this.updateFavRoutesLists=function(){d=persistentStorage.getFavListFromStorage();p(d)};var f={},p=function(a){var g=m.find("#favListBlockItems");g.empty();if(0<a.length)for(var c in a){var e=a[c],n=f[e.id];n||(n=jQuery("#favRoutesListBlockOneItemTemplate").clone().css("display","").attr("id",""),n.find("#favRoutesListName").text(e.name),n.find("#favRoutesListRemove").click(e,function(a){a=a.data;var g=
30[],l;for(l in d)d[l].id!=a.id&&g.push(d[l]);d=g;persistentStorage.saveFavListToStorage(d);p(d)}),n.find("#favRoutesListCheck").click(e,function(a){a=a.data;if(a.isShowed)a.set("isShowed",!1),routesPanelWorks.selectZonesAndShowRoutes([],b);else{for(var g in d)d[g].set("isShowed",d[g].id==a.id);routesPanelWorks.selectZonesAndShowRoutes(a.zones,a.routes)}}),new SMT.htmlLinker(e,"onchanged",n,{"#favRoutesListCheck":{"class":"isShowed:checked:unchecked"}}));n.appendTo(g)}},n={},g=function(l){var b=e.find("#favListBlockItems");
31b.children().detach();if(0<l.length)for(var c in l){var d=l[c],f=d.id+"-"+d.type,p=n[f];p||(p=jQuery("#favStationsListBlockOneItemTemplate").clone().css("display","").attr("id",""),"0"==d.type?p.find("#favStationsListRouteTag").addClass("bus"):p.find("#favStationsListRouteTag").addClass("tram"),p.find("#favStationsListStationName").text(d.name),p.find("#favStationsListStationDescription").text(d.description),p.find("#favStationsListRemoveButton").click(d,function(l){l.data.toggle("isFav");l=a.indexOf(l.data);
32-1<l&&a.splice(l,1);persistentStorage.saveFavStationsToStorage(a);g(a)}),p.find("#favStationsListForecastButton").click(d,function(a){a=a.data;stationForecastsMapWorks.showStationForecasts(a.id,a.name,a.description,"\u0410",a.lat,a.lng)}),n[f]=p);p.appendTo(b)}};serverDataSource.getAllRoutes(function(a){b=a});serverDataSource.getAllStations(function(l){d=persistentStorage.getFavListFromStorage();a=persistentStorage.getFavStationsFromStorage();for(var b in a)a[b].set("isFav",!0);g(a);p(d)},function(){})}
33serverDataSource=null;
34function ServerDataSource(c){var b=this;this.serverAdress=config.server;this.city=config.city;var a=null,d=null,k=null;this.getAllRouteTypes=function(a,b){for(var c in config.routeTypes)objectsStorage.registerRouteType(config.routeTypes[c]);a&&a(config.routeTypes)};this.getAllRoutes=function(c,d){a?c&&c(a):(url=b.serverAdress+"getRoutes.php?city="+b.city+"&info=01234",$.ajax({type:"GET",url:url,cache:!1,dataType:"json"}).done(function(b){var d=[],n={},g;for(g in b){var l=b[g],h=l.type+"-"+l.num;n[h]||
35(n[h]={},n[h].serverRoute=l,n[h].ids=[]);n[h].ids.push(l.id)}for(h in n)l=n[h],b=new Route(null,null,l.ids,l.serverRoute.type,l.serverRoute.name,l.serverRoute.num,l.serverRoute.fromstid,l.serverRoute.fromst,l.serverRoute.tostid,l.serverRoute.tost),d.push(b),objectsStorage.registerRoute(b);a=d;d=d.sort(function(a,g){var l=/[^0-9]/,b=parseInt(a.num.replace(l,"")),l=parseInt(g.num.replace(l,""));return b<l?-1:b>l?1:0});c&&c(d)}).fail(function(a,b,c){console.log("readyState: "+a.readyState);console.log("responseText: "+
36a.responseText);console.log("status: "+a.status);console.log("text status: "+b);console.log("error: "+c);d&&d()}))};this.getAllZoneCategories=function(a,b){var c=[],d=new ZoneCategory(1,"\u0420\u0430\u0439\u043e\u043d\u044b");objectsStorage.registerZoneCategory(d);c.push(d);d=new ZoneCategory(2,"\u041f\u043b\u043e\u0449\u0430\u0434\u0438");objectsStorage.registerZoneCategory(d);c.push(d);d=new ZoneCategory(3,"\u041c\u0435\u0441\u0442\u0430");objectsStorage.registerZoneCategory(d);c.push(d);d=new ZoneCategory(4,
37"\u0423\u043b\u0438\u0446\u044b");objectsStorage.registerZoneCategory(d);c.push(d);d=new ZoneCategory(5,"\u041e\u0431\u044a\u0435\u043a\u0442\u044b");objectsStorage.registerZoneCategory(d);c.push(d);a&&a(c)};this.getAllZones=function(a,c){d?a&&a(d):(url=b.serverAdress+"getZones.php?city="+b.city+"&info=01234",$.ajax({type:"GET",url:url,cache:!1,dataType:"json"}).done(function(b){var c=[],n;for(n in b){var g=b[n],l=new Zone(g.id,g.cat_id,g.name,[]);for(n in g.routes_ids){var h=g.routes_ids[n].split("-"),
38h=objectsStorage.getRouteByTypeAndId(h[0],h[1]);null!=h&&l.routes.push(h)}l.routes=jQuery.unique(l.routes);c.push(l);objectsStorage.registerZone(l)}d=c;a&&a(c)}).fail(function(a,b,d){console.log("readyState: "+a.readyState);console.log("responseText: "+a.responseText);console.log("status: "+a.status);console.log("text status: "+b);console.log("error: "+d);c&&c()}))};var q=0;jqGetVehiclesMarkersXHR=null;this.dropLastRequestVehiclesMarkers=function(){jqGetVehiclesMarkersXHR&&(jqGetVehiclesMarkersXHR.abort(),
39jqGetVehiclesMarkersXHR=null)};this.getVehiclesMarkers=function(a,d,c,p,n,g,l,h){a=jQuery.map(a,function(a,g){return a.getKeyAllSubRoutes()});d=b.serverAdress+"getVehiclesMarkers.php?rids="+a.join(",")+"&lat0="+d+"&lng0="+c+"&lat1="+p+"&lng1="+n+"&curk="+g+"&city="+b.city+"&info=0123";console.log("\u041d\u0430\u0447\u0430\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 getVehiclesMarkers.  curk="+g+" "+(new Date).toLocaleTimeString());jqGetVehiclesMarkersXHR=
40$.ajax({type:"GET",url:d,cache:!1,dataType:"json"}).done(function(a){q=parseInt(a.maxk);console.log("\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 getVehiclesMarkers. maxk="+q+" "+(new Date).toLocaleTimeString());a=a.anims;vehiclesMarkers=[];for(var g=a.length-1;0<=g;g--){var b=a[g],d=new VehicleMarker;d.id=b.id;d.lng=parseInt(b.lon)/1E6;d.lat=parseInt(b.lat)/1E6;d.direction=parseInt(b.dir);d.time=b.lasttime;
41d.gosnum=b.gos_num;d.routeId=b.rid;d.routeNum=b.rnum;d.routeType=b.rtype;d.lasttime=b.lasttime;d.animKey=parseInt(b.anim_key);d.bigJump=b.big_jump;d.animPoints=[];for(var c in b.anim_points){var h=b.anim_points[c];d.animPoints.push(new AnimPoint(parseInt(h.percent),parseInt(h.dir),parseInt(h.lat)/1E6,parseInt(h.lon)/1E6))}vehiclesMarkers.push(d)}l&&l(vehiclesMarkers,q)}).fail(function(a,g,b){console.log("\u041d\u0415 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 getVehiclesMarkers. "+
42(new Date).toLocaleTimeString());console.log("readyState: "+a.readyState);console.log("responseText: "+a.responseText);console.log("status: "+a.status);console.log("text status: "+g);console.log("error: "+b);h&&h()}).always(function(){jqGetVehiclesMarkersXHR=null})};
42this.getStationForecasts=function(a,d,c,p){url=b.serverAdress+"getStationForecasts.php?sid="+a+"&type="+d+"&city="+b.city+"&info=01234";$.ajax({type:"GET",url:url,cache:!1,dataType:"json"}).done(function(a){stationFores=[];for(var g in a){tempFore=
43a[g];var b=new StationForecast;b.arrTime=parseInt(tempFore.arrt);b.whereGo=tempFore.where;b.routeId=tempFore.rid;b.routeNum=tempFore.rnum;b.routeType=tempFore.rtype;b.whereGo=tempFore.where;b.vehicleId=tempFore.vehid;stationFores.push(b)}c&&c(stationFores)}).fail(function(a,g,b){console.log("readyState: "+a.readyState);console.log("responseText: "+a.responseText);console.log("status: "+a.status);console.log("text status: "+g);console.log("error: "+b);p&&p()})};this.getVehicleForecasts=function(a,
44d,c,p){url=b.serverAdress+"getVehicleForecasts.php?vid="+a+"&type="+d+"&city="+b.city+"&info=01234";$.ajax({type:"GET",url:url,cache:!1,dataType:"json"}).done(function(b){vehiclesFores=[];for(var g in b){var d=b[g],h=new VehicleForecast;h.lng0=parseInt(d.lng0)/1E6;h.lat0=parseInt(d.lat0)/1E6;h.lng1=parseInt(d.lng1)/1E6;h.lat1=parseInt(d.lat1)/1E6;h.stname=d.stname;h.stdescr=d.stdescr;h.arrTime=parseInt(d.arrt);h.stationId=parseInt(d.stid);h.vehicleId=a;vehiclesFores.push(h)}c&&c(vehiclesFores)}).fail(function(a,
45g,b){console.log("readyState: "+a.readyState);console.log("responseText: "+a.responseText);console.log("status: "+a.status);console.log("text status: "+g);console.log("error: "+b);p&&p()})};this.getRouteNodes=function(a,d,c,p){url=b.serverAdress+"getRouteNodes.php?city="+b.city+"&type="+d+"&rid="+a+"&info=01234";$.ajax({type:"GET",url:url,cache:!1,dataType:"json"}).done(function(b){nodePoints=[];for(var g in b){var l=b[g],h=new NodePoint;h.lng=parseInt(l.lng)/1E6;h.lat=parseInt(l.lat)/1E6;nodePoints.push(h)}c&&
46c(nodePoints,a,d)}).fail(function(a,b,d){console.log("readyState: "+a.readyState);console.log("responseText: "+a.responseText);console.log("status: "+a.status);console.log("text status: "+b);console.log("error: "+d);p&&p()})};this.getAllStations=function(a,d){k?a&&a(k):(url=b.serverAdress+"getStations.php?city="+b.city+"&info=01234",$.ajax({type:"GET",url:url,cache:!1,dataType:"json"}).done(function(b){stations=[];for(var d in b){var c=b[d],c=new Station(c.id,c.type,c.name,c.descr,parseInt(c.lng)/
471E6,parseInt(c.lat)/1E6);objectsStorage.registerStation(c);stations.push(c)}k=stations;a&&a(stations)}).fail(function(a,b,c){console.log("readyState: "+a.readyState);console.log("responseText: "+a.responseText);console.log("status: "+a.status);console.log("text status: "+b);console.log("error: "+c);d&&d()}))}}persistentStorage=null;
48function PersistentStorage(){this.testLocalStorage=function(){try{return localStorage.setItem("mod","mod"),localStorage.removeItem("mod"),!0}catch(c){return!1}};this.saveFavStationsToStorage=function(c){this.testLocalStorage()&&(c=c.map(function(b){return b.getKey()}).join(";"),localStorage.favStations=c)};this.getFavStationsFromStorage=function(){if(!this.testLocalStorage())return null;var c=localStorage.favStations;if(!c)return[];var b=[],c=c.split(";"),a;for(a in c){var d=objectsStorage.getStationByKey(c[a]);
49null!=d&&b.push(d)}return b};this.saveFavListToStorage=function(c){this.testLocalStorage()&&(c=c.map(function(b){return b.packToString()}).join("@"),localStorage.favRouteList=c)};this.getFavListFromStorage=function(){if(this.testLocalStorage()){var c=[],b=(localStorage.favRouteList||"").split("@"),a;for(a in b){var d=b[a];if(""!=d){var k=new FavList;k.parseFromString(d);c.push(k)}}return c}};this.saveShowedRoutesToStorage=function(c){this.testLocalStorage()&&(c=c.map(function(b){return b.getKey()}).join(";"),
50localStorage.showedRoutes=c)};this.getShowedRoutesFromStorage=function(){if(!this.testLocalStorage())return null;var c=localStorage.showedRoutes;if(!c)return null;var b=[],c=c.split(";"),a;for(a in c){var d=c[a].split("-"),d=objectsStorage.getRouteByTypeAndId(d[0],d[1]);null!=d&&b.push(d)}return jQuery.unique(b)};this.saveShowedZonesToStorage=function(c){this.testLocalStorage()&&(c=c.map(function(b){return b.id}).join(";"),localStorage.showedZones=c)};
50this.getShowedZonesFromStorage=function(){if(!this.testLocalStorage())return null;
51var c=localStorage.showedZones;if(!c)return null;var b=[],c=c.split(";"),a;for(a in c){var d=objectsStorage.getZoneById(c[a]);null!=d&&b.push(d)}return b}}objectsStorage=null;
52function ObjectsStorage(){var c=this;this.routeTypes={};this.routes={};this.zoneCategories={};this.zones={};this.stations={};this.registerRouteType=function(b){c.routeTypes[b.id]=b};this.getRouteTypeByShortName=function(b){for(var a in c.routeTypes)if(c.routeTypes[a].shortName==b)return c.routeTypes[a];return null};this.registerRoute=function(b){c.routes[b.getKey()]=b};this.getRouteByTypeAndId=function(b,a){for(var d in c.routes){var k=c.routes[d];if(-1<k.ids.indexOf(b)&&("1"==a&&"\u0422\u0440"==
53k.type||"0"==a&&"\u0422\u0440"!=k.type))return k}return null};this.getRouteByKey=function(b){return c.routes[b]};this.registerZoneCategory=function(b){c.zoneCategories[b.id]=b};this.getZoneCategoryById=function(b){return c.zoneCategories[b]};this.registerZone=function(b){c.zones[b.id]=b};this.getZoneById=function(b){return c.zones[b]};this.registerStation=function(b){c.stations[b.getKey()]=b};this.getStationByKey=function(b){return c.stations[b]}}routesPanelWorks=null;
54function RoutesPanelWorks(c){SMT.eventObject.call(this);var b=this,a=[],d=[],k=[],q=[],e=jQuery("#routesPanelTemplate").attr("id",""),m=e.find("#routesPanelContainer"),f=e.find("#routesPanelMenuFilterCountText"),p=e.find("#routesPanelMenuFilterClearButton");c=e.find("#routesPanelMenuSaveButton").attr("id","");var n=jQuery("#routesListTemplate").attr("id","").remove(),g=n.find("#routesListBlocksContainer");n.find("#routesFullListSearch").attr("id","");var l=n.find("#routesListShowAllMenuCheck").attr("id",
55""),h=jQuery("#routesFilterTemplate").attr("id","").remove(),r=h.find("#routesFilterBlocksContainer");e.find("#version").text(version);this.isShortListShowed=this.isListShowed=!0;var u=102;config.disableRoutesFilter&&(u-=33);this.showPanel=function(){e.css("height",(jQuery(window).height()-config.top_height-config.bottom_height).toString()+"px");n.find("#routesListBlocksContainer").css("height",(jQuery(window).height()-config.top_height-config.bottom_height-u).toString()+"px");h.find("#routesFilterBlocksContainer").css("height",
56(jQuery(window).height()-config.top_height-config.bottom_height-u).toString()+"px");e.css("display","inherit")};this.hidePanel=function(){e.css("display","none")};showList=function(){b.set("isListShowed",!0);m.children().detach();n.appendTo(m)};showShortList=function(){b.set("isShortListShowed",!0);fillList()};showFullList=function(){b.set("isShortListShowed",!1);fillList()};showFilter=function(){b.set("isListShowed",!1);m.children().detach();h.appendTo(m)};config.disableRoutesFilter&&e.find("#routesPanelMenu").css("display",
57"none");c.click(function(){var a=t.filter(function(a){return a.get("isVehiclesShow")}),b=q.filter(function(a){return a.get("isShowed")}),g=window.prompt("\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \u0438\u0437 \u0434\u043e\u043c\u0430 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443)",""),a=new FavList(Math.random().toString(),g,a,b),b=persistentStorage.getFavListFromStorage();
58b.push(a);persistentStorage.saveFavListToStorage(b);favPanelWorks.updateFavRoutesLists()});e.find("#routesPanelMenuListButton").click(function(){showList()});e.find("#routesPanelMenuFilterButtonText").click(function(){showFilter()});n.find("#routesListMenuShortButton").click(function(){showShortList()});n.find("#routesListMenuFullButton").click(function(){showFullList()});p.click(function(){doShowOnlyZones([]);doShowOnlyRoutes(d)});l.click(function(){vehicleMapWorks.allVehiclesShowed?(doShowOnlyZones([]),
59doShowOnlyRoutes([])):(doShowOnlyZones([]),doShowOnlyRoutes(d))});this.selectZonesAndShowRoutes=function(a,b){doShowOnlyZones(a);doShowOnlyRoutes(b)};doShowOnlyZones=function(a){for(var b in q)q[b].set("isShowed",-1!=a.indexOf(q[b]));updateFilterButton(a);0==a.length?(t=d,fillList()):filterRoutesByZones(a)};doShowZones=function(a){for(i in a)a[i].set("isShowed",!0);a=q.filter(function(a){return a.isShowed});updateFilterButton(a);0==a.length?(t=d,fillList()):filterRoutesByZones(a)};doHideZones=function(a){for(i in a)a[i].set("isShowed",
60!1);a=q.filter(function(a){return a.isShowed});updateFilterButton(a);0==a.length?(t=d,fillList()):filterRoutesByZones(a)};updateFilterButton=function(a){0==a.length?(f.addClass("notActive"),p.addClass("notActive")):(f.removeClass("notActive"),p.removeClass("notActive"),f.text(a.length))};doShowRoutes=function(a){for(i in a)a[i].set("isVehiclesShow",!0);vehicleMapWorks.showRoutes(d.filter(function(a){return a.isVehiclesShow}))};doHideRoutes=function(a){for(i in a)a[i].set("isVehiclesShow",!1);vehicleMapWorks.showRoutes(d.filter(function(a){return a.isVehiclesShow}))};
61doShowOnlyRoutes=function(a){for(i in d)d[i].set("isVehiclesShow",-1!=a.indexOf(d[i])
61);vehicleMapWorks.showRoutes(a)};doShowRoutesByZones=function(a){for(i in d)d[i].set("isVehiclesShow",a.every(function(a){return-1!=a.routes.indexOf(d[i])}));vehicleMapWorks.showRoutes(d.filter(function(a){return a.isVehiclesShow}))};var t=[],v={},w={};filterRoutesByZones=function(a){t=d.filter(function(b){return a.every(function(a){return-1!=a.routes.indexOf(b)})});fillList()};fillList=function(){b.isShortListShowed?
62fillShortList(t):fillFullList(t)};fillShortList=function(){g.children().detach();for(var b in a){var c=a[b],l=t.filter(function(a){return isRouteForRouteType(a,c)});if(0<l.length){var h=jQuery("#routesListBlockTemplate").clone().css("display","").attr("id","");h.find("#routesListBlockHeaderName").text(c.pluralName);h.find("#routesListBlockHeaderIco").addClass(c.code);h.find("#routesListBlockHeader").addClass(c.code);new SMT.htmlLinker(c,"onchanged",h,{"#routesListBlockHeaderCheck":{"class":"allVehiclesShowed:checked:unchecked"}});
63h.find("#routesListBlockHeaderCheck").click(c,function(a){var b=d.filter(function(b){return isRouteForRouteType(b,a.data)});a.data.allVehiclesShowed?doHideRoutes(b):doShowRoutes(b)});h.appendTo(g);var h=h.find("#routesListBlockItems"),r;for(r in l){var e=l[r],f=v[e.getKey()];f||(f=jQuery("#routesShortListBlockOneItemTemplate").clone().css("display","").attr("id","short"+e.type+"-"+e.num),f.find("#routesShortListRouteNum").text(e.num),config.useWideRoutesInShortList&&f.addClass("wide"),config.showHintWithVehiclesCount&&
64f.addClass("hint--bottom"),f.find("#routesShortListRouteCheck").click(e,function(a){a.data.isVehiclesShow?a.data.allVehiclesShowed?doShowOnlyRoutes([a.data]):doHideRoutes([a.data]):doShowRoutes([a.data])}),new SMT.htmlLinker(e,"onchanged",f,{"#routesShortListRouteCheck":{"class":"isVehiclesShow:checked:unchecked allVehiclesShowed:grayed:"}}),v[e.getKey()]=f);f.appendTo(h)}}}};fillFullList=function(){g.children().detach();for(var b in a){var c=a[b],l=t.filter(function(a){return isRouteForRouteType(a,
65c)});if(0<l.length){var h=jQuery("#routesListBlockTemplate").clone().css("display","").attr("id","");h.find("#routesListBlockHeaderName").text(c.pluralName);h.find("#routesListBlockHeaderIco").addClass(c.code);h.find("#routesListBlockHeader").addClass(c.code);new SMT.htmlLinker(c,"onchanged",h,{"#routesListBlockHeaderCheck":{"class":"allVehiclesShowed:checked:unchecked"}});h.find("#routesListBlockHeaderCheck").click(c,function(a){var b=d.filter(function(b){return isRouteForRouteType(b,a.data)});a.data.allVehiclesShowed?
66doHideRoutes(b):doShowRoutes(b)});h.appendTo(g);var h=h.find("#routesListBlockItems"),r;for(r in l){var f=l[r],e=w[f.getKey()];e||(e=jQuery("#routesFullListBlockOneItemTemplate").clone().css("display","").attr("id","full"+f.type+"-"+f.num),config.showHintWithVehiclesCount&&e.addClass("hint--bottom"),e.find("#routesFullListRouteTag").addClass(c.code),e.find("#routesFullListRouteName").text(f.num),e.find("#routesFullListFromStation").text(f.fromStationName),e.find("#routesFullListToStation").text(f.toStationName),
67e.find("#routesFullListRouteLine").addClass(c.code),e.find("#routesFullListRouteCheck").click(f,function(a){a.data.isVehiclesShow?a.data.allVehiclesShowed?doShowOnlyRoutes([a.data]):doHideRoutes([a.data]):doShowRoutes([a.data])}),e.find("#routesFullListRouteLine").click(f,function(a){a.data.toggle("isLineShow");a.data.isLineShow?vehicleMapWorks.showRouteLine(a.data):vehicleMapWorks.hideRouteLine(a.data)}),new SMT.htmlLinker(f,"onchanged",e,{"#routesFullListRouteCheck":{"class":"isVehiclesShow:checked:unchecked allVehiclesShowed:grayed:"},
68"#routesFullListRouteLine":{"class":"isLineShow:isDown:"}}),w[f.getKey()]=e);e.appendTo(h)}}}};var x={};fillFilter=function(a){r.children().detach();for(var b in k){var g=k[b],d=a.filter(function(a){if(a.get("categoryId")==g.get("id"))return!0});if(0<d.length){var c=jQuery("#routesFilterBlockTemplate").clone().css("display","").attr("id","");c.find("#routesFilterBlockHeaderName").text(g.name);c.appendTo(r);var c=c.find("#routesFilterBlockItems"),l;for(l in d){var h=d[l],e=x[h.get("id")];
68e||(e=jQuery("#routesFilterBlockOneItem").clone().css("display",
69"").attr("id",""),e.find("#routesFilterBlockOneItemName").text(h.name),x[h.get("id")]=e,e.click(h,function(a){a.data.isShowed?doHideZones([a.data]):doShowZones([a.data]);a=q.filter(function(a){return a.isShowed});doShowRoutesByZones(a)}),new SMT.htmlLinker(h,"onchanged",e,{"#routesFilterBlockOneItemCheck":{"class":"isShowed:checked:unchecked"}}));e.appendTo(c)}}}};serverDataSource.getAllRouteTypes(function(b){a=b;serverDataSource.getAllRoutes(function(a){d=a;serverDataSource.getAllZoneCategories(function(a){k=
70a;serverDataSource.getAllZones(function(a){q=a;fillFilter(q);doShowOnlyZones([]);config.showAllOnStart?doShowRoutes(d):doShowOnlyRoutes([]);config.showRoutesFilterOnStart?showFilter():(showList(),showShortList())})})})});new SMT.htmlLinker(this,"onchanged",e,{"#routesPanelMenuListButton":{"class":"isListShowed:isDown"},"#routesPanelMenuFilterButton":{"class":"isListShowed::isDown"}});new SMT.htmlLinker(this,"onchanged",n,{"#routesListMenuShortButton":{"class":"isShortListShowed:isDown"},"#routesListMenuFullButton":{"class":"isShortListShowed::isDown"}});
71new SMT.htmlLinker(vehicleMapWorks,"onchanged",l,{"":{"class":"allVehiclesShowed:checked:unchecked"}})}vehicleMapWorks=null;vehiclesOnRoutesCount={};
72function VehicleMapWorks(c){function b(a,b){var d=a-b;180<d&&(d-=360);-180>d&&(d+=360);return d}SMT.eventObject.call(this);var a=parseInt(2E4/30);this.allVehiclesShowed=!1;var d=[];serverDataSource.getAllRoutes(function(a){d=a});var k=[];serverDataSource.getAllRouteTypes(function(a){k=a});currentRoutes=[];currentRouteLines={};currentRouteLinesHandles={};polylinesCache={};this.showRoutes=function(a){a=a||[];var b=currentRoutes.filter(function(b){return-1==a.indexOf(b)}),c=a.filter(function(a){return-1==
73currentRoutes.indexOf(a)});currentRoutes=a;if(0<b.length){removeStorageMarkersForRoutes(b);for(var e in b)this.hideRouteLine(b[e]),b[e].set("isLineShow",!1),b[e].set("isVehiclesShow",!1)}if(0<c.length){curAnimKey=0;storageMarkersRoutine();for(e in c)c[e].set("isVehiclesShow",!0);b=c.filter(function(a){return a.isLineShow});for(e in b)this.showRouteLine(b[e])}for(e in d)d[e].set("allVehiclesShowed",currentRoutes.length==d.length);this.set("allVehiclesShowed",currentRoutes.length==d.length);for(e in k){var f=
74k[e],b=d.filter(function(a,b){return isRouteForRouteType(a,f)});f.set("allVehiclesShowed",b.filter(function(a,b){return a.isVehiclesShow}).length==b.length);for(e in b)b[e].set("allVehiclesShowed",f.allVehiclesShowed)}};this.showRouteLine=function(a){currentRouteLines[a.getKey()]||(currentRouteLines[a.getKey()]=1,this.addLine(a))};this.hideRouteLine=function(a){currentRouteLines[a.getKey()]&&this.removeLine(a);currentRouteLines[a.getKey()]=null};this.addLine=function(a){var b="#e74949";"\u0422"==
75a.type&&(b="#32c0d9");"\u041c"==a.type&&(b="#f5b823");"\u0422\u0440"==a.type&&(b="#6eb80a");var d=0;"\u0422\u0440"==a.type&&(d=1);for(var c in a.ids){var e=a.ids[c],f=e.toString()+"-"+d.toString();polylinesCache[f]?currentRouteLinesHandles[f]=map.addPolyline(jQuery.map(polylinesCache[f],function(a,b){return{lat:a.lat,lng:a.lng}}),b):serverDataSource.getRouteNodes(e,d,function(a,d,c){d=d.toString()+"-"+c.toString();currentRouteLinesHandles[d]||(polylinesCache[d]=a,currentRouteLinesHandles[d]=map.addPolyline(jQuery.map(a,
76function(a,b){return{lat:a.lat,lng:a.lng}}),b))})}};this.removeLine=function(a){var b=0;"\u0422\u0440"==a.type&&(b=1);for(var d in a.ids){var c=a.ids[d].toString()+"-"+b.toString();currentRouteLinesHandles[c]&&(map.removePolyline(currentRouteLinesHandles[c]),currentRouteLinesHandles[c]=null)}};wideScreenLatLng1=wideScreenLatLng0=screenLatLng1=screenLatLng0=null;isZoomAnimating=!1;refreshCoords=function(){var a=map._map.getBounds().getNorthWest(),b=map._map.getBounds().getSouthEast();screenLatLng0=
77{lat:a.lat,lng:a.lng};screenLatLng1={lat:b.lat,lng:b.lng};a=map._map.project(a).subtract(L.point(70,70));b=map._map.project(b).add(L.point(70,70));a=map._map.unproject(a);b=map._map.unproject(b);wideScreenLatLng0={lat:a.lat,lng:a.lng};wideScreenLatLng1={lat:b.lat,lng:b.lng}};map.addHandler("move",refreshCoords);map.addHandler("zoomstart",function(){isZoomAnimating=!0});map.addHandler("zoomend",function(){isZoomAnimating=!1;recalculateStorageMarkerAnimations()});refreshCoords();var q=!1;this.disableRoutesOnMap=
78function(){q=!0;removeAllStorageMarkers();curAnimKey=0};this.enableRoutesOnMap=function(){q=!1;curAnimKey=0;storageMarkersRoutine()};var e=null;$(window).blur(function(){console.log("blur at "+(new Date).toLocaleTimeString());e&&clearTimeout(e);e=setTimeout(function(){console.log("disableRoutesOnMap at "+(new Date).toLocaleTimeString());vehicleMapWorks.disableRoutesOnMap()},4E4)});$(window).focus(function(){console.log("focus at "+(new Date).toLocaleTimeString());e&&clearTimeout(e);q&&(console.log("enableRoutesOnMap at "+
79(new Date).toLocaleTimeString()),vehicleMapWorks.enableRoutesOnMap())});storageMarkersRoutineTimeout=null;needToForceStorageMarkersRoutine=!1;curAnimKey=0;startStorageMarkersRoutine=function(){storageMarkersRoutineTimeout&&(clearTimeout(storageMarkersRoutineTimeout),storageMarkersRoutineTimeout=null)};endStorageMarkersRoutine=function(a){storageMarkersRoutineTimeout=setTimeout(storageMarkersRoutine,a)};isStorageMarkersRoutineBusy=function(){return null==storageMarkersRoutineTimeout};storageMarkersRoutine=
80function(){isStorageMarkersRoutineBusy()&&(console.log("\u0412\u043d\u0435\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u043e \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043d\u044f\u0442"),serverDataSource.dropLastRequestVehiclesMarkers());startStorageMarkersRoutine();if(0==currentRoutes.length)m={},endStorageMarkersRoutine(500);
80else if(q)endStorageMarkersRoutine(500);else{var a=new Date;serverDataSource.getVehiclesMarkers(currentRoutes,
810,0,90,180,curAnimKey,function(b,d){q||(curAnimKey=d,parseVehicleMarkers(b));var c=1E4-(new Date-a);if(0>c||needToForceStorageMarkersRoutine)c=0,needToForceStorageMarkersRoutine=!1;endStorageMarkersRoutine(c)},function(){var b=1E4<new Date-a;if(0>b||needToForceStorageMarkersRoutine)b=0,needToForceStorageMarkersRoutine=!1;endStorageMarkersRoutine(b)})}};storageMarkersRoutineTimeout=setTimeout(storageMarkersRoutine,500);var m={};createStorageMarker=function(a){storageMarker=new VehicleStorageMarker;
82storageMarker.id=a.id;storageMarker.routeType=a.routeType;storageMarker.routeNum=a.routeNum;storageMarker.routeId=a.routeId;storageMarker.gosnum=a.gosnum;storageMarker.lasttime=a.lasttime;storageMarker.dLat=0;storageMarker.dLng=0;storageMarker.curticks=0;storageMarker.animPoints=a.animPoints;storageMarker.debugmes=[];storageMarker.forecastsIsShowed=!1;storageMarker.curLat=a.lat;storageMarker.curLng=a.lng;storageMarker.curDirection=a.direction-90;return storageMarker};updateStorageMarker=function(a,
83b){a.routeType=b.routeType;a.routeNum=b.routeNum;a.routeId=b.routeId;a.gosnum=b.gosnum;a.lasttime=b.lasttime;a.animPoints=b.animPoints;config.no_animation&&(a.curLat=b.lat,a.curLng=b.lng,a.curDirection=b.direction-90)};removeStorageMarkersForRoutes=function(a){var b=0,d;for(d in m){var c=m[d],e="\u0422\u0440"==c.routeType;a.some(function(a,b){var d="\u0422\u0440"==a.type;return a.ids.some(function(a,b){return a==c.routeId&&e==d})})&&(delete m[d],b++,c.forecastsIsShowed&&vehicleForecastsMapWorks.hideForecasts())}console.log("Total="+
84Object.keys(m).length+" deleted="+b)};removeAllStorageMarkers=function(){var a=0,b;for(b in m){var d=m[b];delete m[b];a++;d.forecastsIsShowed&&vehicleForecastsMapWorks.hideForecasts()}console.log("Total="+Object.keys(m).length+" deleted="+a)};parseVehicleMarkers=function(a){var b=0,d=0,c=0,e;for(e in a){var f=a[e];if(currentRoutes.some(function(a,b){return-1!=a.ids.indexOf(f.routeId)})){var k=m[f.id];k?(k.lastActivity=new Date,f.lasttime!=k.lasttime?(k.lasttime=f.lasttime,updateStorageMarker(k,f),
85config.no_animation||refreshStorageMarkerAnimation(k,f)):c++):(k=createStorageMarker(f),startStorageMarkerAnimation(k,f),m[k.id]=k,k.lastActivity=new Date,b++)}}for(var q in currentRoutes)e=currentRoutes[q],vehiclesOnRoutesCount[e.type+"-"+e.num]=0;for(var p in m)k=m[p],12E4<new Date-k.lastActivity?(delete m[p],d++,vehicleForecastsMapWorks.hideForecasts()):vehiclesOnRoutesCount[k.routeType+"-"+k.routeNum]++;for(var n in vehiclesOnRoutesCount)config.showHintWithVehiclesCount&&(jQuery("#short"+n).attr("data-hint",
86"\u041d\u0430 \u043b\u0438\u043d\u0438\u0438 "+vehiclesOnRoutesCount[n]+" \u0422\u0421"),jQuery("#full"+n).attr("data-hint","\u041d\u0430 \u043b\u0438\u043d\u0438\u0438 "+vehiclesOnRoutesCount[n]+" \u0422\u0421"));console.log("Total="+Object.keys(m).length+" parsed="+a.length+" filtered="+c+" created="+b+" deleted="+d)};startStorageMarkerAnimation=function(a,b){a.animPoints=b.animPoints;0<a.animPoints.length?(animPoint=a.animPoints[0],a.animPoints.splice(0,1),void 0!=animPoint&&(a.curLat=animPoint.lat,
87a.curLng=animPoint.lng,a.curDirection=animPoint.direction,animateStorageMarkerToNextPoint(a))):(a.curLat=b.lat,a.curLng=b.lng,a.curDirection=b.direction-90)};refreshStorageMarkerAnimation=function(a,b){a.animPoints=b.animPoints;animateStorageMarkerToNextPoint(a)};recalculateStorageMarkerAnimations=function(){for(var a in m){var d=m[a];0<d.curticks&&(d.dLat=(d.targetLat-d.curLat)/d.curticks,d.dLng=(d.targetLng-d.curLng)/d.curticks,d.dAngle=b(d.targetDir,d.curDirection)/d.angticks)}};animateStorageMarkerToNextPoint=
88function(d){var c=null;if(0!=d.animPoints.length){c=d.animPoints[0];d.animPoints.splice(0,1);var e=parseInt(a*c.percent/100),f=parseInt(a*c.percent/100)/6;d.dLat=(c.lat-d.curLat)/e;d.dLng=(c.lng-d.curLng)/e;d.dAngle=b(c.direction,d.curDirection)/f;d.targetLat=c.lat;d.targetLng=c.lng;d.targetDir=c.direction;d.curticks=e;d.angticks=f}};storageMarkersAnimRoutine=function(){for(var a in m){var b=m[a];0<b.curticks?(b.curticks--,0<b.angticks&&b.angticks--,isZoomAnimating||(b.curLat+=b.dLat,b.curLng+=b.dLng,
890<b.angticks&&(b.curDirection+=b.dAngle))):animateStorageMarkerToNextPoint(b)}};setInterval(storageMarkersAnimRoutine,30);screenStorageMarkers={};addToMapScreenMarker=function(a){var b=jQuery("<div />").append(jQuery("#mapMarkerTemplate").clone().css("display","").attr("id",a.id)).html();a.markerHandle=map.addDivMarker(b,{lat:a.curLat,lng:a.curLng,width:50,height:50,anchorX:25,anchorY:25,tooltip:a.gosnum});a.jqMarker=jQuery("#"+a.id);a.jqMarkerIco=a.jqMarker.find("#mapMarkerIco");a.jqMarkerRouteNum=
90a.jqMarker.find("#mapMarkerRouteNum");(b=objectsStorage.getRouteTypeByShortName(a.routeType))?a.jqMarker.find("#mapMarkerIco").addClass(b.get("code")):a.jqMarker.find("#mapMarkerIco").addClass("bus");setIcoForMarker(a,a.forecastsIsShowed);a.hasBeenOnMap||config.no_animation||a.jqMarker.addClass("hidden");updateScreenMarker(a);a.jqMarker.click(function(){a.forecastsIsShowed?($(".mapMarkerIco").removeClass("selected"),setIcoForMarker(a,!1),vehicleForecastsMapWorks.hideForecasts()):($(".mapMarkerIco").removeClass("selected"),
91a.jqMarker.find("#mapMarkerIco").addClass("selected"),setIcoForMarker(a,!0),vehicleForecastsMapWorks.hideForecasts(),vehicleForecastsMapWorks.showForecasts(a))})};setIcoForMarker=function(a,b){var d="bus.png",c;for(c in p){var e=p[c].getIco(a.routeType,a.routeNum);e&&(d=e)}-1!=f.indexOf(a.id)&&(d="i_"+d);
91b&&(d="hi_"+d);a.jqMarkerIco.css("background-image","url('transportOnline/img/"+d+"')");a.jqMarkerIco.css("background-repeat","norepeat")};removeFromMapScreenMarker=function(a){map.removeMarker(a.markerHandle);
92a.markerHandle=null};updateScreenMarker=function(a){a.selected?a.jqMarker.hasClass("selected")||a.jqMarker.addClass("selected"):a.jqMarker.hasClass("selected")&&a.jqMarker.removeClass("selected");a.jqMarkerRouteNum.text(a.routeNum);1==a.routeNum.length&&a.jqMarkerRouteNum.addClass("short");2==a.routeNum.length&&a.jqMarkerRouteNum.addClass("medium");2<a.routeNum.length&&a.jqMarkerRouteNum.addClass("wide")};screenStorageMarkersRoutine=function(){if(null!=screenLatLng0&&null!=screenLatLng1){var a=0,
93b=0,d;for(d in screenStorageMarkers){var c=screenStorageMarkers[d];c.hasBeenOnMap||config.no_animation||(c.hasBeenOnMap=!0,c.jqMarker.removeClass("hidden"));m[d]||(delete screenStorageMarkers[d],removeFromMapScreenMarker(c))}for(d in m){var c=m[d],e=screenLatLng0.lng<c.curLng&&c.curLng<screenLatLng1.lng&&screenLatLng1.lat<c.curLat&&c.curLat<screenLatLng0.lat;wideScreenLatLng0.lng<c.curLng&&c.curLng<wideScreenLatLng1.lng&&wideScreenLatLng1.lat<c.curLat&&c.curLat<wideScreenLatLng0.lat?(!screenStorageMarkers[d]&&
94c.hasBeenOnMap&&(addToMapScreenMarker(c),screenStorageMarkers[d]=c,a++),e&&!screenStorageMarkers[d]&&(addToMapScreenMarker(c),screenStorageMarkers[d]=c,a++),screenStorageMarkers[d]&&!isZoomAnimating&&(c.markerHandle.setZIndexOffset(1),map.setMarkerLatLng(c.markerHandle,{lat:c.curLat,lng:c.curLng}),e=c.curDirection+90,c.jqMarkerIco.css({transform:"rotate("+e+"deg)","-webkit-transform":"rotate("+e+"deg)","-o-transform":"rotate("+e+"deg)","-moz-transform":"rotate("+e+"deg)"}))):screenStorageMarkers[d]&&
95(delete screenStorageMarkers[d],removeFromMapScreenMarker(c),b++)}(0<a||0<b)&&console.log("Total="+Object.keys(screenStorageMarkers).length+" added="+a+" removed="+b)}};setInterval(screenStorageMarkersRoutine,30);var f=config.iVehicles||[],p=[];config.routeTypesToPngRules||(config.routeTypesToPngRules=[],config.routeTypesToPngRules[1]="\u0422|*|troll.png",config.routeTypesToPngRules[2]="\u041c|*|marsh.png",config.routeTypesToPngRules[3]="\u0422\u0440|*|tram.png",config.routeTypesToPngRules[4]="\u0410|*|bus.png");
96for(var n in config.routeTypesToPngRules)c=config.routeTypesToPngRules[n].split("|"),3==c.length&&(c=new RouteTypePngRule(c[0],c[1],c[2]),p.push(c))}vehicleForecastsMapWorks=null;
97function VehicleForecastsMapWorks(c){var b=this;currentPolylineRouteId=currentPolylineHandle=currentStorageMarker=null;polylinesCache={};foreMarkers={};this.showForecasts=function(a){null!=currentStorageMarker&&b.hideForecasts();currentStorageMarker=a;a.forecastsIsShowed=!0;updateForecastsRoutine()};this.hideForecasts=function(){null!=currentStorageMarker&&(currentStorageMarker.forecastsIsShowed=!1,removeAllForecastMarkers(),removeLine());currentStorageMarker=null};addLine=function(){var a=objectsStorage.getRouteTypeByShortName(currentStorageMarker.routeType);
98currentPolylineHandle=null;var b="#e74949";"\u0422"==a.shortName&&(b="#32c0d9");"\u041c"==a.shortName&&(b="#f5b823");"\u0422\u0440"==a.shortName&&(b="#6eb80a");a=0;"\u0422\u0440"==currentStorageMarker.routeType&&(a=1);var c=currentStorageMarker.routeId.toString()+"-"+a.toString();polylinesCache[c]?(currentPolylineHandle=map.addPolyline(jQuery.map(polylinesCache[c],function(a,b){return{lat:a.lat,lng:a.lng}}),b),currentPolylineRouteId=currentStorageMarker.routeId):serverDataSource.getRouteNodes(currentStorageMarker.routeId,
99a,function(a,e,m){currentPolylineHandle||(polylinesCache[c]=a,currentPolylineHandle=map.addPolyline(jQuery.map(a,function(a,b){return{lat:a.lat,lng:a.lng}}),b),currentPolylineRouteId=e)})};removeLine=function(){map.removePolyline(currentPolylineHandle);currentPolylineRouteId=currentPolylineHandle=null};createForeMarker=function(a){foreMarker={};foreMarker.forecast=a};updateForecastsRoutine=function(){if(null!=currentStorageMarker){currentPolylineRouteId!=currentStorageMarker.routeId&&(currentPolylineHandle&&
100removeLine(),addLine());var a=currentStorageMarker,b=0;"\u0422\u0440"==currentStorageMarker.routeType&&(b=1);serverDataSource.getVehicleForecasts(currentStorageMarker.id,b,function(b){if(null!=currentStorageMarker&&a==currentStorageMarker){var d=Math.random();for(i in b){var c=b[i],m=getVehicleForecastId(c);if(foreMarkers[m])f=foreMarkers[m],f.token=d,f.forecast=c,f.hideCount=0,f.near=30>c.arrTime,updateForecastMarker(f);else{var f={};f.token=d;f.forecast=c;f.near=30>c.arrTime;f.hideCount=0;foreMarkers[m]=
101f;addForecastMarker(f)}}for(id in foreMarkers)f=foreMarkers[id],f.token!=d&&(f.near||1<f.hideCount++)&&(delete foreMarkers[id],removeForecastMarker(f));setTimeout(updateForecastsRoutine,5E3)}},function(){setTimeout(updateForecastsRoutine,5E3)})}};addForecastMarker=function(a){var b=jQuery("<div />").append(jQuery("#forecastMapMarkerTemplate").clone().css("display","").attr("id",getVehicleForecastId(a.forecast))).html();a.markerHandle=map.addDivMarker(b,{tooltip:a.forecast.stname,lat:a.forecast.lat0,
102lng:a.forecast.lng0,width:35,height:41,anchorX:18,anchorY:41});a.jqMarker=jQuery("#"+getVehicleForecastId(a.forecast));a.jqArrTimeSpan=jQuery("#"+getVehicleForecastId(a.forecast)+" #forecastMapMarkerArrTime");updateForecastMarker(a);a.jqMarker.click(function(){stationForecastsMapWorks.showStationForecasts(a.forecast.stationId,a.forecast.stname,a.forecast.stdescr,currentStorageMarker.routeType,a.forecast.lat0,a.forecast.lng0)});config.no_animation?a.jqMarker.removeClass("hidden"):setTimeout(function(){a.jqMarker.removeClass("hidden")},
10330)};updateForecastMarker=function(a){var b=Math.round(a.forecast.arrTime/60).toString();a.jqArrTimeSpan.text(b);a.jqArrTimeSpan.removeClass("short");a.jqArrTimeSpan.removeClass("medium");a.jqArrTimeSpan.removeClass("wide");1==b.length&&a.jqArrTimeSpan.addClass("short");2==b.length&&a.jqArrTimeSpan.addClass("medium");2<b.length&&a.jqArrTimeSpan.addClass("wide")};removeForecastMarker=function(a){map.removeMarker(a.markerHandle)};removeAllForecastMarkers=function(){for(id in foreMarkers)foreMarker=
104foreMarkers[id],delete foreMarkers[id],removeForecastMarker(foreMarker)};getVehicleForecastId=function(a){return a.vehicleId+"_"+a.stationId}}stationForecastsMapWorks=null;
105function StationForecastsMapWorks(c){var b=null,a=null,d=null;map.addPopupCloseHandler(function(c){d=a=b=null});this.showStationForecasts=function(c,q,e,m,f,p){map._map.closePopup();b=c;a=m;d=createWindowHtml(q,e);map.addPopup(d,f,p);$(d).parent().css("height","310px");updateWindowRoutine()};createWindowHtml=function(a,b){var c=$("#stationForecastWindowTemplate").clone();$(c).find("#forecastLines").text("");$(c).find("#stationForecastHeaderName").text(a+"("+b+")");$(c).attr("id","");$(c).find("#stationForecastHeaderClose").click(function(){map._map.closePopup()});
106c.css("display","");return c.get(0)};updateWindowRoutine=function(){if(b){var c=0;"\u0422\u0440"==a&&(c="1");serverDataSource.getStationForecasts(b,c,function(a){Math.random();var b={},c={};$(d).find("#forecastLines").text("");for(i in a){var f=a[i],k=f.routeType+"-"+f.routeNum;if(b[k])n=b[k],c[k]||($(n).find("#arrTime2").text(Math.round(f.arrTime/60).toString()+" \u043c\u0438\u043d."),c[k]=n);else{var n=$("#stationForecastLineTemplate").clone().css("display","").attr("id","");$(n).find("#stationForecastRouteNameSpan").text(f.routeType+
107"-"+f.routeNum);var g=objectsStorage.getRouteTypeByShortName(f.routeType);g&&$(n).find("#stationForecastRouteNameSpan").addClass(g.get("code"));$(n).find("#arrTime1").text(Math.round(f.arrTime/60).toString()+" \u043c\u0438\u043d.");$(n).find("#arrTime2").text("");$(n).find("#whereGo").text(f.whereGo);$(n).appendTo($(d).find("#forecastLines"));b[k]=n}}setTimeout(updateWindowRoutine,5E3)},function(){setTimeout(updateWindowRoutine,5E3)})}}}stationsPanelWorks=null;
108function StationsPanelWorks(c){SMT.eventObject.call(this);var b=jQuery("#stationsPanelTemplate").attr("id",""),a=b.find("#stationsListBlocksContainer"),d=b.find("#stationsSearchPanelInput");this.showPanel=function(){b.css("height",(jQuery(window).height()-config.top_height-config.bottom_height).toString()+"px");a.css("height",(jQuery(window).height()-config.top_height-config.bottom_height-77).toString()+"px");b.css("display","inherit")};this.hidePanel=function(){b.css("display","none")};var k=[],
109q=[],e={},m={};showStations=function(){a.children().detach();var b=q.filter(function(a){return"0"==a.type}),c=q.filter(function(a){return"1"==a.type});if(0<b.length){var d=jQuery("#stationsBlockTemplate").clone().css("display","").attr("id","");d.find("#stationsListBlockHeaderName").text("\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438").addClass("bus");d.find("#stationsListBlockHeaderIco").addClass("bus");var g=d.find("#stationsListBlockItems"),l;for(l in b){var h=b[l],r=e[h.get("id")];r||
110(r=jQuery("#stationsListBlockOneItemTemplate").clone().css("display","").attr("id",""),r.find("#stationsListRouteTag").addClass("bus"),r.f
110ind("#stationsListStationName").text(h.name),r.find("#stationsListStationDescription").text(h.description),r.find("#stationsListForecastButton").click(h,function(a){a=a.data;stationForecastsMapWorks.showStationForecasts(a.id,a.name,a.description,"\u0410",a.lat,a.lng)}),r.find("#stationsListFavButton").click(h,function(a){a.data.toggle("isFav");a=k.filter(function(a){return a.isFav});
111persistentStorage.saveFavStationsToStorage(a);favPanelWorks.updateFavStations()}),new SMT.htmlLinker(h,"onchanged",r,{"#stationsListFavButton":{"class":"isFav:isDown:"}}),e[h.get("id")]=r);r.appendTo(g)}d.appendTo(a)}if(0<c.length){d=jQuery("#stationsBlockTemplate").clone().css("display","").attr("id","");d.find("#stationsListBlockHeaderName").text("\u0422\u0440\u0430\u043c\u0432\u0430\u0439\u043d\u044b\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438").addClass("bus");d.find("#stationsListBlockHeaderIco").addClass("tram");
112g=d.find("#stationsListBlockItems");for(l in c)b=c[l],r=m[b.get("id")],r||(r=jQuery("#stationsListBlockOneItemTemplate").clone().css("display","").attr("id",""),r.find("#stationsListRouteTag").addClass("tram"),r.find("#stationsListStationName").text(b.name),r.find("#stationsListStationDescription").text(b.description),r.find("#stationsListForecastButton").click(b,function(a){a=a.data;stationForecastsMapWorks.showStationForecasts(a.id,a.name,a.description,"\u0422\u0440",a.lat,a.lng)}),r.find("#stationsListFavButton").click(h,
113function(a){a.data.toggle("isFav");a=k.filter(function(a){return a.isFav});persistentStorage.saveFavStationsToStorage(a);favPanelWorks.updateFavStations()}),new SMT.htmlLinker(b,"onchanged",r,{"#stationsListFavButton":{"class":"isFav:isDown:"}}),m[b.get("id")]=r),r.appendTo(g);d.appendTo(a)}};d.keyup(function(){var a=d.val().toLowerCase();0==a.length?(q=k,showStations()):2<d.val().length&&(q=k.filter(function(b){return-1!=b.name.toLowerCase().indexOf(a)}),showStations())});serverDataSource.getAllStations(function(a){q=
114k=a;showStations()},function(){})};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.