date picker
[scannr.git] / js / script.js~
blob:a/js/script.js~ -> blob:b/js/script.js~
--- a/js/script.js~
+++ b/js/script.js~
@@ -1,1 +1,136 @@
+$(function() {
 
+	// Set the default dates
+	var startDate	= Date.create().addDays(-6),	// 7 days ago
+		endDate		= Date.create(); 				// today
+
+	var range = $('#range');
+
+	// Show the dates in the range input
+	range.val(startDate.format('{MM}/{dd}/{yyyy}') + ' - ' + endDate.format('{MM}/{dd}/{yyyy}'));
+
+	// Load chart
+	ajaxLoadChart(startDate,endDate);
+	
+	range.daterangepicker({
+		
+		startDate: startDate,
+		endDate: endDate,
+		
+		ranges: {
+            'Today': ['today', 'today'],
+            'Yesterday': ['yesterday', 'yesterday'],
+            'Last 7 Days': [Date.create().addDays(-6), 'today'],
+            'Last 30 Days': [Date.create().addDays(-29), 'today']
+        }
+	},function(start, end){
+		
+		ajaxLoadChart(start, end);
+		
+	});
+	
+	// The tooltip shown over the chart
+	var tt = $('<div class="ex-tooltip">').appendTo('body'),
+		topOffset = -32;
+
+	var data = {
+		"xScale" : "time",
+		"yScale" : "linear",
+		"main" : [{
+			className : ".stats",
+			"data" : []
+		}]
+	};
+
+	var opts = {
+		paddingLeft : 50,
+		paddingTop : 20,
+		paddingRight : 10,
+		axisPaddingLeft : 25,
+		tickHintX: 9, // How many ticks to show horizontally
+
+		dataFormatX : function(x) {
+			
+			// This turns converts the timestamps coming from
+			// ajax.php into a proper JavaScript Date object
+			
+			return Date.create(x);
+		},
+
+		tickFormatX : function(x) {
+			
+			// Provide formatting for the x-axis tick labels.
+			// This uses sugar's format method of the date object. 
+
+			return x.format('{MM}/{dd}');
+		},
+		
+		"mouseover": function (d, i) {
+			var pos = $(this).offset();
+			
+			tt.text(d.x.format('{Month} {ord}') + ': ' + d.y).css({
+				
+				top: topOffset + pos.top,
+				left: pos.left
+				
+			}).show();
+		},
+		
+		"mouseout": function (x) {
+			tt.hide();
+		}
+	};
+
+	// Create a new xChart instance, passing the type
+	// of chart a data set and the options object
+	
+	var chart = new xChart('line-dotted', data, '#chart' , opts);
+	
+	// Function for loading data via AJAX and showing it on the chart
+	function ajaxLoadChart(startDate,endDate) {
+
+		// If no data is passed (the chart was cleared)
+		
+		if(!startDate || !endDate){
+			chart.setData({
+				"xScale" : "time",
+				"yScale" : "linear",
+				"main" : [{
+					className : ".stats",
+					data : []
+				}]
+			});
+			
+			return;
+		}
+
+		// Otherwise, issue an AJAX request
+
+		$.getJSON('ajax.php', {
+			
+			start:	startDate.format('{yyyy}-{MM}-{dd}'),
+			end:	endDate.format('{yyyy}-{MM}-{dd}')
+			
+		}, function(data) {
+			
+			var set = [];
+			$.each(data, function() {
+				set.push({
+					x : this.label,
+					y : parseInt(this.value, 10)
+				});
+			});
+			
+			chart.setData({
+				"xScale" : "time",
+				"yScale" : "linear",
+				"main" : [{
+					className : ".stats",
+					data : set
+				}]
+			});
+
+		});
+	}
+});
+