highcharts-rails 3.0.3 → 3.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,313 +1,13 @@
1
- /**
2
- * @license Highcharts JS v3.0.3 (2013-07-31)
3
- * MooTools adapter
4
- *
5
- * (c) 2010-2013 Torstein Hønsi
6
- *
7
- * License: www.highcharts.com/license
8
- */
9
-
10
- // JSLint options:
11
- /*global Fx, $, $extend, $each, $merge, Events, Event, DOMEvent */
12
-
13
- (function () {
14
-
15
- var win = window,
16
- doc = document,
17
- mooVersion = win.MooTools.version.substring(0, 3), // Get the first three characters of the version number
18
- legacy = mooVersion === '1.2' || mooVersion === '1.1', // 1.1 && 1.2 considered legacy, 1.3 is not.
19
- legacyEvent = legacy || mooVersion === '1.3', // In versions 1.1 - 1.3 the event class is named Event, in newer versions it is named DOMEvent.
20
- $extend = win.$extend || function () {
21
- return Object.append.apply(Object, arguments);
22
- };
23
-
24
- win.HighchartsAdapter = {
25
- /**
26
- * Initialize the adapter. This is run once as Highcharts is first run.
27
- * @param {Object} pathAnim The helper object to do animations across adapters.
28
- */
29
- init: function (pathAnim) {
30
- var fxProto = Fx.prototype,
31
- fxStart = fxProto.start,
32
- morphProto = Fx.Morph.prototype,
33
- morphCompute = morphProto.compute;
34
-
35
- // override Fx.start to allow animation of SVG element wrappers
36
- /*jslint unparam: true*//* allow unused parameters in fx functions */
37
- fxProto.start = function (from, to) {
38
- var fx = this,
39
- elem = fx.element;
40
-
41
- // special for animating paths
42
- if (from.d) {
43
- //this.fromD = this.element.d.split(' ');
44
- fx.paths = pathAnim.init(
45
- elem,
46
- elem.d,
47
- fx.toD
48
- );
49
- }
50
- fxStart.apply(fx, arguments);
51
-
52
- return this; // chainable
53
- };
54
-
55
- // override Fx.step to allow animation of SVG element wrappers
56
- morphProto.compute = function (from, to, delta) {
57
- var fx = this,
58
- paths = fx.paths;
59
-
60
- if (paths) {
61
- fx.element.attr(
62
- 'd',
63
- pathAnim.step(paths[0], paths[1], delta, fx.toD)
64
- );
65
- } else {
66
- return morphCompute.apply(fx, arguments);
67
- }
68
- };
69
- /*jslint unparam: false*/
70
- },
71
-
72
- /**
73
- * Run a general method on the framework, following jQuery syntax
74
- * @param {Object} el The HTML element
75
- * @param {String} method Which method to run on the wrapped element
76
- */
77
- adapterRun: function (el, method) {
78
-
79
- // This currently works for getting inner width and height. If adding
80
- // more methods later, we need a conditional implementation for each.
81
- if (method === 'width' || method === 'height') {
82
- return parseInt($(el).getStyle(method), 10);
83
- }
84
- },
85
-
86
- /**
87
- * Downloads a script and executes a callback when done.
88
- * @param {String} scriptLocation
89
- * @param {Function} callback
90
- */
91
- getScript: function (scriptLocation, callback) {
92
- // We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.
93
- var head = doc.getElementsByTagName('head')[0];
94
- var script = doc.createElement('script');
95
-
96
- script.type = 'text/javascript';
97
- script.src = scriptLocation;
98
- script.onload = callback;
99
-
100
- head.appendChild(script);
101
- },
102
-
103
- /**
104
- * Animate a HTML element or SVG element wrapper
105
- * @param {Object} el
106
- * @param {Object} params
107
- * @param {Object} options jQuery-like animation options: duration, easing, callback
108
- */
109
- animate: function (el, params, options) {
110
- var isSVGElement = el.attr,
111
- effect,
112
- complete = options && options.complete;
113
-
114
- if (isSVGElement && !el.setStyle) {
115
- // add setStyle and getStyle methods for internal use in Moo
116
- el.getStyle = el.attr;
117
- el.setStyle = function () { // property value is given as array in Moo - break it down
118
- var args = arguments;
119
- this.attr.call(this, args[0], args[1][0]);
120
- };
121
- // dirty hack to trick Moo into handling el as an element wrapper
122
- el.$family = function () { return true; };
123
- }
124
-
125
- // stop running animations
126
- win.HighchartsAdapter.stop(el);
127
-
128
- // define and run the effect
129
- effect = new Fx.Morph(
130
- isSVGElement ? el : $(el),
131
- $extend({
132
- transition: Fx.Transitions.Quad.easeInOut
133
- }, options)
134
- );
135
-
136
- // Make sure that the element reference is set when animating svg elements
137
- if (isSVGElement) {
138
- effect.element = el;
139
- }
140
-
141
- // special treatment for paths
142
- if (params.d) {
143
- effect.toD = params.d;
144
- }
145
-
146
- // jQuery-like events
147
- if (complete) {
148
- effect.addEvent('complete', complete);
149
- }
150
-
151
- // run
152
- effect.start(params);
153
-
154
- // record for use in stop method
155
- el.fx = effect;
156
- },
157
-
158
- /**
159
- * MooTool's each function
160
- *
161
- */
162
- each: function (arr, fn) {
163
- return legacy ?
164
- $each(arr, fn) :
165
- Array.each(arr, fn);
166
- },
167
-
168
- /**
169
- * Map an array
170
- * @param {Array} arr
171
- * @param {Function} fn
172
- */
173
- map: function (arr, fn) {
174
- return arr.map(fn);
175
- },
176
-
177
- /**
178
- * Grep or filter an array
179
- * @param {Array} arr
180
- * @param {Function} fn
181
- */
182
- grep: function (arr, fn) {
183
- return arr.filter(fn);
184
- },
185
-
186
- /**
187
- * Return the index of an item in an array, or -1 if not matched
188
- */
189
- inArray: function (item, arr, from) {
190
- return arr ? arr.indexOf(item, from) : -1;
191
- },
192
-
193
- /**
194
- * Get the offset of an element relative to the top left corner of the web page
195
- */
196
- offset: function (el) {
197
- var offsets = el.getPosition(); // #1496
198
- return {
199
- left: offsets.x,
200
- top: offsets.y
201
- };
202
- },
203
-
204
- /**
205
- * Extends an object with Events, if its not done
206
- */
207
- extendWithEvents: function (el) {
208
- // if the addEvent method is not defined, el is a custom Highcharts object
209
- // like series or point
210
- if (!el.addEvent) {
211
- if (el.nodeName) {
212
- el = $(el); // a dynamically generated node
213
- } else {
214
- $extend(el, new Events()); // a custom object
215
- }
216
- }
217
- },
218
-
219
- /**
220
- * Add an event listener
221
- * @param {Object} el HTML element or custom object
222
- * @param {String} type Event type
223
- * @param {Function} fn Event handler
224
- */
225
- addEvent: function (el, type, fn) {
226
- if (typeof type === 'string') { // chart broke due to el being string, type function
227
-
228
- if (type === 'unload') { // Moo self destructs before custom unload events
229
- type = 'beforeunload';
230
- }
231
-
232
- win.HighchartsAdapter.extendWithEvents(el);
233
-
234
- el.addEvent(type, fn);
235
- }
236
- },
237
-
238
- removeEvent: function (el, type, fn) {
239
- if (typeof el === 'string') {
240
- // el.removeEvents below apperantly calls this method again. Do not quite understand why, so for now just bail out.
241
- return;
242
- }
243
-
244
- if (el.addEvent) { // If el doesn't have an addEvent method, there are no events to remove
245
- if (type) {
246
- if (type === 'unload') { // Moo self destructs before custom unload events
247
- type = 'beforeunload';
248
- }
249
-
250
- if (fn) {
251
- el.removeEvent(type, fn);
252
- } else if (el.removeEvents) { // #958
253
- el.removeEvents(type);
254
- }
255
- } else {
256
- el.removeEvents();
257
- }
258
- }
259
- },
260
-
261
- fireEvent: function (el, event, eventArguments, defaultFunction) {
262
- var eventArgs = {
263
- type: event,
264
- target: el
265
- };
266
- // create an event object that keeps all functions
267
- event = legacyEvent ? new Event(eventArgs) : new DOMEvent(eventArgs);
268
- event = $extend(event, eventArguments);
269
-
270
- // When running an event on the Chart.prototype, MooTools nests the target in event.event
271
- if (!event.target && event.event) {
272
- event.target = event.event.target;
273
- }
274
-
275
- // override the preventDefault function to be able to use
276
- // this for custom events
277
- event.preventDefault = function () {
278
- defaultFunction = null;
279
- };
280
- // if fireEvent is not available on the object, there hasn't been added
281
- // any events to it above
282
- if (el.fireEvent) {
283
- el.fireEvent(event.type, event);
284
- }
285
-
286
- // fire the default if it is passed and it is not prevented above
287
- if (defaultFunction) {
288
- defaultFunction(event);
289
- }
290
- },
291
-
292
- /**
293
- * Set back e.pageX and e.pageY that MooTools has abstracted away. #1165, #1346.
294
- */
295
- washMouseEvent: function (e) {
296
- if (e.page) {
297
- e.pageX = e.page.x;
298
- e.pageY = e.page.y;
299
- }
300
- return e;
301
- },
302
-
303
- /**
304
- * Stop running animations on the object
305
- */
306
- stop: function (el) {
307
- if (el.fx) {
308
- el.fx.cancel();
309
- }
310
- }
311
- };
312
-
313
- }());
1
+ /*
2
+ Highcharts JS v3.0.5 (2013-08-23)
3
+ MooTools adapter
4
+
5
+ (c) 2010-2013 Torstein Hønsi
6
+
7
+ License: www.highcharts.com/license
8
+ */
9
+ (function(){var e=window,h=document,f=e.MooTools.version.substring(0,3),i=f==="1.2"||f==="1.1",j=i||f==="1.3",g=e.$extend||function(){return Object.append.apply(Object,arguments)};e.HighchartsAdapter={init:function(a){var b=Fx.prototype,c=b.start,d=Fx.Morph.prototype,e=d.compute;b.start=function(b,d){var e=this.element;if(b.d)this.paths=a.init(e,e.d,this.toD);c.apply(this,arguments);return this};d.compute=function(b,c,d){var f=this.paths;if(f)this.element.attr("d",a.step(f[0],f[1],d,this.toD));else return e.apply(this,
10
+ arguments)}},adapterRun:function(a,b){if(b==="width"||b==="height")return parseInt($(a).getStyle(b),10)},getScript:function(a,b){var c=h.getElementsByTagName("head")[0],d=h.createElement("script");d.type="text/javascript";d.src=a;d.onload=b;c.appendChild(d)},animate:function(a,b,c){var d=a.attr,f=c&&c.complete;if(d&&!a.setStyle)a.getStyle=a.attr,a.setStyle=function(){var a=arguments;this.attr.call(this,a[0],a[1][0])},a.$family=function(){return!0};e.HighchartsAdapter.stop(a);c=new Fx.Morph(d?a:$(a),
11
+ g({transition:Fx.Transitions.Quad.easeInOut},c));if(d)c.element=a;if(b.d)c.toD=b.d;f&&c.addEvent("complete",f);c.start(b);a.fx=c},each:function(a,b){return i?$each(a,b):Array.each(a,b)},map:function(a,b){return a.map(b)},grep:function(a,b){return a.filter(b)},inArray:function(a,b,c){return b?b.indexOf(a,c):-1},offset:function(a){a=a.getPosition();return{left:a.x,top:a.y}},extendWithEvents:function(a){a.addEvent||(a.nodeName?$(a):g(a,new Events))},addEvent:function(a,b,c){typeof b==="string"&&(b===
12
+ "unload"&&(b="beforeunload"),e.HighchartsAdapter.extendWithEvents(a),a.addEvent(b,c))},removeEvent:function(a,b,c){typeof a!=="string"&&a.addEvent&&(b?(b==="unload"&&(b="beforeunload"),c?a.removeEvent(b,c):a.removeEvents&&a.removeEvents(b)):a.removeEvents())},fireEvent:function(a,b,c,d){b={type:b,target:a};b=j?new Event(b):new DOMEvent(b);b=g(b,c);if(!b.target&&b.event)b.target=b.event.target;b.preventDefault=function(){d=null};a.fireEvent&&a.fireEvent(b.type,b);d&&d(b)},washMouseEvent:function(a){if(a.page)a.pageX=
13
+ a.page.x,a.pageY=a.page.y;return a},stop:function(a){a.fx&&a.fx.cancel()}}})();
@@ -1,316 +1,15 @@
1
- /**
2
- * @license Highcharts JS v3.0.3 (2013-07-31)
3
- * Prototype adapter
4
- *
5
- * @author Michael Nelson, Torstein Hønsi.
6
- *
7
- * Feel free to use and modify this script.
8
- * Highcharts license: www.highcharts.com/license.
9
- */
10
-
11
- // JSLint options:
12
- /*global Effect, Class, Event, Element, $, $$, $A */
13
-
14
- // Adapter interface between prototype and the Highcharts charting library
15
- var HighchartsAdapter = (function () {
16
-
17
- var hasEffect = typeof Effect !== 'undefined';
18
-
19
- return {
20
-
21
- /**
22
- * Initialize the adapter. This is run once as Highcharts is first run.
23
- * @param {Object} pathAnim The helper object to do animations across adapters.
24
- */
25
- init: function (pathAnim) {
26
- if (hasEffect) {
27
- /**
28
- * Animation for Highcharts SVG element wrappers only
29
- * @param {Object} element
30
- * @param {Object} attribute
31
- * @param {Object} to
32
- * @param {Object} options
33
- */
34
- Effect.HighchartsTransition = Class.create(Effect.Base, {
35
- initialize: function (element, attr, to, options) {
36
- var from,
37
- opts;
38
-
39
- this.element = element;
40
- this.key = attr;
41
- from = element.attr ? element.attr(attr) : $(element).getStyle(attr);
42
-
43
- // special treatment for paths
44
- if (attr === 'd') {
45
- this.paths = pathAnim.init(
46
- element,
47
- element.d,
48
- to
49
- );
50
- this.toD = to;
51
-
52
-
53
- // fake values in order to read relative position as a float in update
54
- from = 0;
55
- to = 1;
56
- }
57
-
58
- opts = Object.extend((options || {}), {
59
- from: from,
60
- to: to,
61
- attribute: attr
62
- });
63
- this.start(opts);
64
- },
65
- setup: function () {
66
- HighchartsAdapter._extend(this.element);
67
- // If this is the first animation on this object, create the _highcharts_animation helper that
68
- // contain pointers to the animation objects.
69
- if (!this.element._highchart_animation) {
70
- this.element._highchart_animation = {};
71
- }
72
-
73
- // Store a reference to this animation instance.
74
- this.element._highchart_animation[this.key] = this;
75
- },
76
- update: function (position) {
77
- var paths = this.paths,
78
- element = this.element,
79
- obj;
80
-
81
- if (paths) {
82
- position = pathAnim.step(paths[0], paths[1], position, this.toD);
83
- }
84
-
85
- if (element.attr) { // SVGElement
86
-
87
- if (element.element) { // If not, it has been destroyed (#1405)
88
- element.attr(this.options.attribute, position);
89
- }
90
-
91
- } else { // HTML, #409
92
- obj = {};
93
- obj[this.options.attribute] = position;
94
- $(element).setStyle(obj);
95
- }
96
-
97
- },
98
- finish: function () {
99
- // Delete the property that holds this animation now that it is finished.
100
- // Both canceled animations and complete ones gets a 'finish' call.
101
- if (this.element && this.element._highchart_animation) { // #1405
102
- delete this.element._highchart_animation[this.key];
103
- }
104
- }
105
- });
106
- }
107
- },
108
-
109
- /**
110
- * Run a general method on the framework, following jQuery syntax
111
- * @param {Object} el The HTML element
112
- * @param {String} method Which method to run on the wrapped element
113
- */
114
- adapterRun: function (el, method) {
115
-
116
- // This currently works for getting inner width and height. If adding
117
- // more methods later, we need a conditional implementation for each.
118
- return parseInt($(el).getStyle(method), 10);
119
-
120
- },
121
-
122
- /**
123
- * Downloads a script and executes a callback when done.
124
- * @param {String} scriptLocation
125
- * @param {Function} callback
126
- */
127
- getScript: function (scriptLocation, callback) {
128
- var head = $$('head')[0]; // Returns an array, so pick the first element.
129
- if (head) {
130
- // Append a new 'script' element, set its type and src attributes, add a 'load' handler that calls the callback
131
- head.appendChild(new Element('script', { type: 'text/javascript', src: scriptLocation}).observe('load', callback));
132
- }
133
- },
134
-
135
- /**
136
- * Custom events in prototype needs to be namespaced. This method adds a namespace 'h:' in front of
137
- * events that are not recognized as native.
138
- */
139
- addNS: function (eventName) {
140
- var HTMLEvents = /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,
141
- MouseEvents = /^(?:click|mouse(?:down|up|over|move|out))$/;
142
- return (HTMLEvents.test(eventName) || MouseEvents.test(eventName)) ?
143
- eventName :
144
- 'h:' + eventName;
145
- },
146
-
147
- // el needs an event to be attached. el is not necessarily a dom element
148
- addEvent: function (el, event, fn) {
149
- if (el.addEventListener || el.attachEvent) {
150
- Event.observe($(el), HighchartsAdapter.addNS(event), fn);
151
-
152
- } else {
153
- HighchartsAdapter._extend(el);
154
- el._highcharts_observe(event, fn);
155
- }
156
- },
157
-
158
- // motion makes things pretty. use it if effects is loaded, if not... still get to the end result.
159
- animate: function (el, params, options) {
160
- var key,
161
- fx;
162
-
163
- // default options
164
- options = options || {};
165
- options.delay = 0;
166
- options.duration = (options.duration || 500) / 1000;
167
- options.afterFinish = options.complete;
168
-
169
- // animate wrappers and DOM elements
170
- if (hasEffect) {
171
- for (key in params) {
172
- // The fx variable is seemingly thrown away here, but the Effect.setup will add itself to the _highcharts_animation object
173
- // on the element itself so its not really lost.
174
- fx = new Effect.HighchartsTransition($(el), key, params[key], options);
175
- }
176
- } else {
177
- if (el.attr) { // #409 without effects
178
- for (key in params) {
179
- el.attr(key, params[key]);
180
- }
181
- }
182
- if (options.complete) {
183
- options.complete();
184
- }
185
- }
186
-
187
- if (!el.attr) { // HTML element, #409
188
- $(el).setStyle(params);
189
- }
190
- },
191
-
192
- // this only occurs in higcharts 2.0+
193
- stop: function (el) {
194
- var key;
195
- if (el._highcharts_extended && el._highchart_animation) {
196
- for (key in el._highchart_animation) {
197
- // Cancel the animation
198
- // The 'finish' function in the Effect object will remove the reference
199
- el._highchart_animation[key].cancel();
200
- }
201
- }
202
- },
203
-
204
- // um.. each
205
- each: function (arr, fn) {
206
- $A(arr).each(fn);
207
- },
208
-
209
- inArray: function (item, arr, from) {
210
- return arr ? arr.indexOf(item, from) : -1;
211
- },
212
-
213
- /**
214
- * Get the cumulative offset relative to the top left of the page. This method, unlike its
215
- * jQuery and MooTools counterpart, still suffers from issue #208 regarding the position
216
- * of a chart within a fixed container.
217
- */
218
- offset: function (el) {
219
- return $(el).cumulativeOffset();
220
- },
221
-
222
- // fire an event based on an event name (event) and an object (el).
223
- // again, el may not be a dom element
224
- fireEvent: function (el, event, eventArguments, defaultFunction) {
225
- if (el.fire) {
226
- el.fire(HighchartsAdapter.addNS(event), eventArguments);
227
- } else if (el._highcharts_extended) {
228
- eventArguments = eventArguments || {};
229
- el._highcharts_fire(event, eventArguments);
230
- }
231
-
232
- if (eventArguments && eventArguments.defaultPrevented) {
233
- defaultFunction = null;
234
- }
235
-
236
- if (defaultFunction) {
237
- defaultFunction(eventArguments);
238
- }
239
- },
240
-
241
- removeEvent: function (el, event, handler) {
242
- if ($(el).stopObserving) {
243
- if (event) {
244
- event = HighchartsAdapter.addNS(event);
245
- }
246
- $(el).stopObserving(event, handler);
247
- } if (window === el) {
248
- Event.stopObserving(el, event, handler);
249
- } else {
250
- HighchartsAdapter._extend(el);
251
- el._highcharts_stop_observing(event, handler);
252
- }
253
- },
254
-
255
- washMouseEvent: function (e) {
256
- return e;
257
- },
258
-
259
- // um, grep
260
- grep: function (arr, fn) {
261
- return arr.findAll(fn);
262
- },
263
-
264
- // um, map
265
- map: function (arr, fn) {
266
- return arr.map(fn);
267
- },
268
-
269
- // extend an object to handle highchart events (highchart objects, not svg elements).
270
- // this is a very simple way of handling events but whatever, it works (i think)
271
- _extend: function (object) {
272
- if (!object._highcharts_extended) {
273
- Object.extend(object, {
274
- _highchart_events: {},
275
- _highchart_animation: null,
276
- _highcharts_extended: true,
277
- _highcharts_observe: function (name, fn) {
278
- this._highchart_events[name] = [this._highchart_events[name], fn].compact().flatten();
279
- },
280
- _highcharts_stop_observing: function (name, fn) {
281
- if (name) {
282
- if (fn) {
283
- this._highchart_events[name] = [this._highchart_events[name]].compact().flatten().without(fn);
284
- } else {
285
- delete this._highchart_events[name];
286
- }
287
- } else {
288
- this._highchart_events = {};
289
- }
290
- },
291
- _highcharts_fire: function (name, args) {
292
- var target = this;
293
- (this._highchart_events[name] || []).each(function (fn) {
294
- // args is never null here
295
- if (args.stopped) {
296
- return; // "throw $break" wasn't working. i think because of the scope of 'this'.
297
- }
298
-
299
- // Attach a simple preventDefault function to skip default handler if called
300
- args.preventDefault = function () {
301
- args.defaultPrevented = true;
302
- };
303
- args.target = target;
304
-
305
- // If the event handler return false, prevent the default handler from executing
306
- if (fn.bind(this)(args) === false) {
307
- args.preventDefault();
308
- }
309
- }
310
- .bind(this));
311
- }
312
- });
313
- }
314
- }
315
- };
316
- }());
1
+ /*
2
+ Highcharts JS v3.0.5 (2013-08-23)
3
+ Prototype adapter
4
+
5
+ @author Michael Nelson, Torstein Hønsi.
6
+
7
+ Feel free to use and modify this script.
8
+ Highcharts license: www.highcharts.com/license.
9
+ */
10
+ var HighchartsAdapter=function(){var f=typeof Effect!=="undefined";return{init:function(a){if(f)Effect.HighchartsTransition=Class.create(Effect.Base,{initialize:function(b,c,d,g){var e;this.element=b;this.key=c;e=b.attr?b.attr(c):$(b).getStyle(c);if(c==="d")this.paths=a.init(b,b.d,d),this.toD=d,e=0,d=1;this.start(Object.extend(g||{},{from:e,to:d,attribute:c}))},setup:function(){HighchartsAdapter._extend(this.element);if(!this.element._highchart_animation)this.element._highchart_animation={};this.element._highchart_animation[this.key]=
11
+ this},update:function(b){var c=this.paths,d=this.element;c&&(b=a.step(c[0],c[1],b,this.toD));d.attr?d.element&&d.attr(this.options.attribute,b):(c={},c[this.options.attribute]=b,$(d).setStyle(c))},finish:function(){this.element&&this.element._highchart_animation&&delete this.element._highchart_animation[this.key]}})},adapterRun:function(a,b){return parseInt($(a).getStyle(b),10)},getScript:function(a,b){var c=$$("head")[0];c&&c.appendChild((new Element("script",{type:"text/javascript",src:a})).observe("load",
12
+ b))},addNS:function(a){var b=/^(?:click|mouse(?:down|up|over|move|out))$/;return/^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/.test(a)||b.test(a)?a:"h:"+a},addEvent:function(a,b,c){a.addEventListener||a.attachEvent?Event.observe($(a),HighchartsAdapter.addNS(b),c):(HighchartsAdapter._extend(a),a._highcharts_observe(b,c))},animate:function(a,b,c){var d,c=c||{};c.delay=0;c.duration=(c.duration||500)/1E3;c.afterFinish=c.complete;if(f)for(d in b)new Effect.HighchartsTransition($(a),
13
+ d,b[d],c);else{if(a.attr)for(d in b)a.attr(d,b[d]);c.complete&&c.complete()}a.attr||$(a).setStyle(b)},stop:function(a){var b;if(a._highcharts_extended&&a._highchart_animation)for(b in a._highchart_animation)a._highchart_animation[b].cancel()},each:function(a,b){$A(a).each(b)},inArray:function(a,b,c){return b?b.indexOf(a,c):-1},offset:function(a){return $(a).cumulativeOffset()},fireEvent:function(a,b,c,d){a.fire?a.fire(HighchartsAdapter.addNS(b),c):a._highcharts_extended&&(c=c||{},a._highcharts_fire(b,
14
+ c));c&&c.defaultPrevented&&(d=null);d&&d(c)},removeEvent:function(a,b,c){$(a).stopObserving&&(b&&(b=HighchartsAdapter.addNS(b)),$(a).stopObserving(b,c));window===a?Event.stopObserving(a,b,c):(HighchartsAdapter._extend(a),a._highcharts_stop_observing(b,c))},washMouseEvent:function(a){return a},grep:function(a,b){return a.findAll(b)},map:function(a,b){return a.map(b)},_extend:function(a){a._highcharts_extended||Object.extend(a,{_highchart_events:{},_highchart_animation:null,_highcharts_extended:!0,
15
+ _highcharts_observe:function(b,a){this._highchart_events[b]=[this._highchart_events[b],a].compact().flatten()},_highcharts_stop_observing:function(b,a){b?a?this._highchart_events[b]=[this._highchart_events[b]].compact().flatten().without(a):delete this._highchart_events[b]:this._highchart_events={}},_highcharts_fire:function(a,c){var d=this;(this._highchart_events[a]||[]).each(function(a){if(!c.stopped)c.preventDefault=function(){c.defaultPrevented=!0},c.target=d,a.bind(this)(c)===!1&&c.preventDefault()}.bind(this))}})}}}();