Sanitize timeliness data more
[busui.git] / labs / myway_timeliness.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
include ('../include/common.inc.php');
include_header("MyWay Deltas", "mywayDelta");
?>
 
    <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../js/flot/excanvas.min.js"></script><![endif]--> 
 
    <script language="javascript" type="text/javascript" src="../js/flot/jquery.flot.js"></script> 
  <div id="placeholder" style="width:1000px;height:600px"></div> 
<script type="text/javascript"> 
$(function () {
    var d = new Date();
                                                d.setUTCMinutes(0);
                                                d.setUTCHours(0);
    var midnight = d.getTime();
 
<?php
$query = "select * from myway_timingdeltas where abs(timing_delta) < 2*(select stddev(timing_delta) from myway_timingdeltas)  order by route_full_name;";
$query = $conn->prepare($query);
$query->execute();
if (!$query) {
        databaseError($conn->errorInfo());
        return Array();
}
$i = 0;
$labels = Array();
$lastRoute = "";
foreach ($query->fetchAll() as $delta) {
    $routeName = $delta['route_full_name'];
    if (strstr($routeName," 3")) $routeName = "312-319";
    else $routeName = preg_replace('/\D/', '', $routeName);
    if ($routeName != $lastRoute) {
                $i++;
                echo "    var d$i = [];";
                $lastRoute = $routeName;
                $labels[$i] = $routeName;
    }
        echo "d$i.push([ midnight+ (1000*" . midnight_seconds(strtotime($delta['time'])) . "), {$delta['timing_delta']}]); \n";
};
?>
 
       var placeholder = $("#placeholder");
 
    var plot = $.plot(placeholder, [
<?php
foreach ($labels as $key => $label) {
    echo "        {
            data: d$key,
            points: { show: true },
            label: '$label'
        },";
}
        ?>
    ],
        {
            xaxis: {
                mode: "time",
                min: midnight + (1000*60*60*8),
                max: midnight + (1000*60*60*23.5)
            },
            yaxis: {
                tickFormatter: yformatter
            },
            grid: { hoverable: true, clickable: true },
    });
        var o;
    o = plot.pointOffset({ x: midnight+ (9*60*60*1000), y: -1.2});
    placeholder.append('<div style="position:absolute;left:' + (o.left + 4) + 'px;top:' + o.top + 'px;color:#666;font-size:smaller">9am</div>');
  o = plot.pointOffset({ x: midnight+ (16*60*60*1000), y: -1.2});
    placeholder.append('<div style="position:absolute;left:' + (o.left + 4) + 'px;top:' + o.top + 'px;color:#666;font-size:smaller">4pm</div>');
 
 });
function yformatter(v) {
    return Math.floor(v/60) + " minutes " + (v == 0 ? "" : (v >0 ? "early":"late"))
}
  function showTooltip(x, y, contents) {
        $('<div id="tooltip">' + contents + '</div>').css( {
            position: 'absolute',
            display: 'none',
            top: y + 5,
            left: x + 5,
            border: '1px solid #fdd',
            padding: '2px',
            'background-color': '#fee',
            opacity: 0.80
        }).appendTo("body").fadeIn(200);
    }
 
    var previousPoint = null;
    $("#placeholder").bind("plothover", function (event, pos, item) {
        $("#x").text(pos.x.toFixed(2));
        $("#y").text(pos.y.toFixed(2));
 
            if (item) {
                if (previousPoint != item.dataIndex) {
                    previousPoint = item.dataIndex;
                    
                    $("#tooltip").remove();
                    var x = item.datapoint[0].toFixed(2),
                        y = item.datapoint[1].toFixed(2);
                    
                    var d = new Date();
d.setTime(x);
var time = d.getUTCHours() +':'+ (d.getUTCMinutes().toString().length == 1 ? '0'+ d.getMinutes():  d.getUTCMinutes())
 
                    
                    showTooltip(item.pageX, item.pageY,
                                item.series.label + " at "+ time +" = " + y +" ( "+ y/60+" minutes )");
                }
            }
            else {
                $("#tooltip").remove();
                previousPoint = null;            
            }
    });
 
</script>