Element.prototype.detachEvent = function(type, fn) {};
+/**
+ * @typedef {function(
+ * (number|Date),
+ * number,
+ * function(string):*,
+ * (Dygraph|undefined)
+ * ):string}
+ */
+var AxisLabelFormatter;
+
+
+/**
+ * @typedef {function(number,function(string),Dygraph):string}
+ */
+var ValueFormatter;
+
+
+/**
+ * @typedef {Array.<Array.<string|number|Array.<number>>>}
+ */
+var DygraphDataArray;
+
+/**
+ * @constructor
+ */
+function GVizDataTable() {}
+
// TODO(danvk): move the Dygraph definitions out of here once I closure-ify dygraphs.js
+/**
+ * @param {!HTMLDivElement|string} div
+ * @param {DygraphDataArray|
+ * GVizDataTable|
+ * string|
+ * function():(DygraphDataArray|GVizDataTable|string)} file
+ * @param {Object} attrs
+ * @constructor
+ */
+function Dygraph(div, file, attrs) {}
/**
* @constructor
*/
-function Dygraph() {}
+function DygraphLayout() {}
+
+/**
+ * @type {Array}
+ */
+DygraphLayout.prototype.datasets;
+
+/**
+ * @type {DygraphLayout}
+ */
+Dygraph.prototype.layout_;
/** @type {Array.<{elem:Element,type:string,fn:function(!Event):(boolean|undefined|null)}>} */
Dygraph.prototype.registeredEvents_;
/** @type {Object} */
Dygraph.DEFAULT_ATTRS;
-
-/**
- * @typedef {function(
- * (number|Date),
- * number,
- * function(string):*,
- * (Dygraph|undefined)
- * ):string}
- */
-Dygraph.AxisLabelFormatter;