| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583 | 
							- /**
 
-  * @license Highcharts JS v3.0.6 (2013-10-04)
 
-  *
 
-  * Standalone Highcharts Framework
 
-  *
 
-  * License: MIT License
 
-  */
 
- /*global Highcharts */
 
- var HighchartsAdapter = (function () {
 
- var UNDEFINED,
 
- 	doc = document,
 
- 	emptyArray = [],
 
- 	timers = [],
 
- 	timerId,
 
- 	Fx;
 
- Math.easeInOutSine = function (t, b, c, d) {
 
- 	return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;
 
- };
 
- /**
 
-  * Extend given object with custom events
 
-  */
 
- function augment(obj) {
 
- 	function removeOneEvent(el, type, fn) {
 
- 		el.removeEventListener(type, fn, false);
 
- 	}
 
- 	function IERemoveOneEvent(el, type, fn) {
 
- 		fn = el.HCProxiedMethods[fn.toString()];
 
- 		el.detachEvent('on' + type, fn);
 
- 	}
 
- 	function removeAllEvents(el, type) {
 
- 		var events = el.HCEvents,
 
- 			remove,
 
- 			types,
 
- 			len,
 
- 			n;
 
- 		if (el.removeEventListener) {
 
- 			remove = removeOneEvent;
 
- 		} else if (el.attachEvent) {
 
- 			remove = IERemoveOneEvent;
 
- 		} else {
 
- 			return; // break on non-DOM events
 
- 		}
 
- 		if (type) {
 
- 			types = {};
 
- 			types[type] = true;
 
- 		} else {
 
- 			types = events;
 
- 		}
 
- 		for (n in types) {
 
- 			if (events[n]) {
 
- 				len = events[n].length;
 
- 				while (len--) {
 
- 					remove(el, n, events[n][len]);
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- 	if (!obj.HCExtended) {
 
- 		Highcharts.extend(obj, {
 
- 			HCExtended: true,
 
- 			HCEvents: {},
 
- 			bind: function (name, fn) {
 
- 				var el = this,
 
- 					events = this.HCEvents,
 
- 					wrappedFn;
 
- 				// handle DOM events in modern browsers
 
- 				if (el.addEventListener) {
 
- 					el.addEventListener(name, fn, false);
 
- 				// handle old IE implementation
 
- 				} else if (el.attachEvent) {
 
- 					
 
- 					wrappedFn = function (e) {
 
- 						fn.call(el, e);
 
- 					};
 
- 					if (!el.HCProxiedMethods) {
 
- 						el.HCProxiedMethods = {};
 
- 					}
 
- 					// link wrapped fn with original fn, so we can get this in removeEvent
 
- 					el.HCProxiedMethods[fn.toString()] = wrappedFn;
 
- 					el.attachEvent('on' + name, wrappedFn);
 
- 				}
 
- 				if (events[name] === UNDEFINED) {
 
- 					events[name] = [];
 
- 				}
 
- 				events[name].push(fn);
 
- 			},
 
- 			unbind: function (name, fn) {
 
- 				var events,
 
- 					index;
 
- 				if (name) {
 
- 					events = this.HCEvents[name] || [];
 
- 					if (fn) {
 
- 						index = HighchartsAdapter.inArray(fn, events);
 
- 						if (index > -1) {
 
- 							events.splice(index, 1);
 
- 							this.HCEvents[name] = events;
 
- 						}
 
- 						if (this.removeEventListener) {
 
- 							removeOneEvent(this, name, fn);
 
- 						} else if (this.attachEvent) {
 
- 							IERemoveOneEvent(this, name, fn);
 
- 						}
 
- 					} else {
 
- 						removeAllEvents(this, name);
 
- 						this.HCEvents[name] = [];
 
- 					}
 
- 				} else {
 
- 					removeAllEvents(this);
 
- 					this.HCEvents = {};
 
- 				}
 
- 			},
 
- 			trigger: function (name, args) {
 
- 				var events = this.HCEvents[name] || [],
 
- 					target = this,
 
- 					len = events.length,
 
- 					i,
 
- 					preventDefault,
 
- 					fn;
 
- 				// Attach a simple preventDefault function to skip default handler if called
 
- 				preventDefault = function () {
 
- 					args.defaultPrevented = true;
 
- 				};
 
- 				
 
- 				for (i = 0; i < len; i++) {
 
- 					fn = events[i];
 
- 					// args is never null here
 
- 					if (args.stopped) {
 
- 						return;
 
- 					}
 
- 					args.preventDefault = preventDefault;
 
- 					args.target = target;
 
- 					args.type = name; // #2297	
 
- 					
 
- 					// If the event handler return false, prevent the default handler from executing
 
- 					if (fn.call(this, args) === false) {
 
- 						args.preventDefault();
 
- 					}
 
- 				}
 
- 			}
 
- 		});
 
- 	}
 
- 	return obj;
 
- }
 
- return {
 
- 	/**
 
- 	 * Initialize the adapter. This is run once as Highcharts is first run.
 
- 	 */
 
- 	init: function (pathAnim) {
 
- 		/**
 
- 		 * Compatibility section to add support for legacy IE. This can be removed if old IE 
 
- 		 * support is not needed.
 
- 		 */
 
- 		if (!doc.defaultView) {
 
- 			this._getStyle = function (el, prop) {
 
- 				var val;
 
- 				if (el.style[prop]) {
 
- 					return el.style[prop];
 
- 				} else {
 
- 					if (prop === 'opacity') {
 
- 						prop = 'filter';
 
- 					}
 
- 					/*jslint unparam: true*/
 
- 					val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b) { return b.toUpperCase(); })];
 
- 					if (prop === 'filter') {
 
- 						val = val.replace(
 
- 							/alpha\(opacity=([0-9]+)\)/, 
 
- 							function (a, b) { 
 
- 								return b / 100; 
 
- 							}
 
- 						);
 
- 					}
 
- 					/*jslint unparam: false*/
 
- 					return val === '' ? 1 : val;
 
- 				} 
 
- 			};
 
- 			this.adapterRun = function (elem, method) {
 
- 				var alias = { width: 'clientWidth', height: 'clientHeight' }[method];
 
- 				if (alias) {
 
- 					elem.style.zoom = 1;
 
- 					return elem[alias] - 2 * parseInt(HighchartsAdapter._getStyle(elem, 'padding'), 10);
 
- 				}
 
- 			};
 
- 		}
 
- 		if (!Array.prototype.forEach) {
 
- 			this.each = function (arr, fn) { // legacy
 
- 				var i = 0, 
 
- 					len = arr.length;
 
- 				for (; i < len; i++) {
 
- 					if (fn.call(arr[i], arr[i], i, arr) === false) {
 
- 						return i;
 
- 					}
 
- 				}
 
- 			};
 
- 		}
 
- 		if (!Array.prototype.indexOf) {
 
- 			this.inArray = function (item, arr) {
 
- 				var len, 
 
- 					i = 0;
 
- 				if (arr) {
 
- 					len = arr.length;
 
- 					
 
- 					for (; i < len; i++) {
 
- 						if (arr[i] === item) {
 
- 							return i;
 
- 						}
 
- 					}
 
- 				}
 
- 				return -1;
 
- 			};
 
- 		}
 
- 		if (!Array.prototype.filter) {
 
- 			this.grep = function (elements, callback) {
 
- 				var ret = [],
 
- 					i = 0,
 
- 					length = elements.length;
 
- 				for (; i < length; i++) {
 
- 					if (!!callback(elements[i], i)) {
 
- 						ret.push(elements[i]);
 
- 					}
 
- 				}
 
- 				return ret;
 
- 			};
 
- 		}
 
- 		//--- End compatibility section ---
 
- 		/**
 
- 		 * Start of animation specific code
 
- 		 */
 
- 		Fx = function (elem, options, prop) {
 
- 			this.options = options;
 
- 			this.elem = elem;
 
- 			this.prop = prop;
 
- 		};
 
- 		Fx.prototype = {
 
- 			
 
- 			update: function () {
 
- 				var styles,
 
- 					paths = this.paths,
 
- 					elem = this.elem,
 
- 					elemelem = elem.element; // if destroyed, it is null
 
- 				// Animating a path definition on SVGElement
 
- 				if (paths && elemelem) {
 
- 					elem.attr('d', pathAnim.step(paths[0], paths[1], this.now, this.toD));
 
- 				
 
- 				// Other animations on SVGElement
 
- 				} else if (elem.attr) {
 
- 					if (elemelem) {
 
- 						elem.attr(this.prop, this.now);
 
- 					}
 
- 				// HTML styles
 
- 				} else {
 
- 					styles = {};
 
- 					styles[elem] = this.now + this.unit;
 
- 					Highcharts.css(elem, styles);
 
- 				}
 
- 				
 
- 				if (this.options.step) {
 
- 					this.options.step.call(this.elem, this.now, this);
 
- 				}
 
- 			},
 
- 			custom: function (from, to, unit) {
 
- 				var self = this,
 
- 					t = function (gotoEnd) {
 
- 						return self.step(gotoEnd);
 
- 					},
 
- 					i;
 
- 				this.startTime = +new Date();
 
- 				this.start = from;
 
- 				this.end = to;
 
- 				this.unit = unit;
 
- 				this.now = this.start;
 
- 				this.pos = this.state = 0;
 
- 				t.elem = this.elem;
 
- 				if (t() && timers.push(t) === 1) {
 
- 					timerId = setInterval(function () {
 
- 						
 
- 						for (i = 0; i < timers.length; i++) {
 
- 							if (!timers[i]()) {
 
- 								timers.splice(i--, 1);
 
- 							}
 
- 						}
 
- 						if (!timers.length) {
 
- 							clearInterval(timerId);
 
- 						}
 
- 					}, 13);
 
- 				}
 
- 			},
 
- 			
 
- 			step: function (gotoEnd) {
 
- 				var t = +new Date(),
 
- 					ret,
 
- 					done,
 
- 					options = this.options,
 
- 					i;
 
- 				if (this.elem.stopAnimation) {
 
- 					ret = false;
 
- 				} else if (gotoEnd || t >= options.duration + this.startTime) {
 
- 					this.now = this.end;
 
- 					this.pos = this.state = 1;
 
- 					this.update();
 
- 					this.options.curAnim[this.prop] = true;
 
- 					done = true;
 
- 					for (i in options.curAnim) {
 
- 						if (options.curAnim[i] !== true) {
 
- 							done = false;
 
- 						}
 
- 					}
 
- 					if (done) {
 
- 						if (options.complete) {
 
- 							options.complete.call(this.elem);
 
- 						}
 
- 					}
 
- 					ret = false;
 
- 				} else {
 
- 					var n = t - this.startTime;
 
- 					this.state = n / options.duration;
 
- 					this.pos = options.easing(n, 0, 1, options.duration);
 
- 					this.now = this.start + ((this.end - this.start) * this.pos);
 
- 					this.update();
 
- 					ret = true;
 
- 				}
 
- 				return ret;
 
- 			}
 
- 		};
 
- 		/**
 
- 		 * The adapter animate method
 
- 		 */
 
- 		this.animate = function (el, prop, opt) {
 
- 			var start,
 
- 				unit = '',
 
- 				end,
 
- 				fx,
 
- 				args,
 
- 				name;
 
- 			el.stopAnimation = false; // ready for new
 
- 			if (typeof opt !== 'object' || opt === null) {
 
- 				args = arguments;
 
- 				opt = {
 
- 					duration: args[2],
 
- 					easing: args[3],
 
- 					complete: args[4]
 
- 				};
 
- 			}
 
- 			if (typeof opt.duration !== 'number') {
 
- 				opt.duration = 400;
 
- 			}
 
- 			opt.easing = Math[opt.easing] || Math.easeInOutSine;
 
- 			opt.curAnim = Highcharts.extend({}, prop);
 
- 			
 
- 			for (name in prop) {
 
- 				fx = new Fx(el, opt, name);
 
- 				end = null;
 
- 				
 
- 				if (name === 'd') {
 
- 					fx.paths = pathAnim.init(
 
- 						el,
 
- 						el.d,
 
- 						prop.d
 
- 					);
 
- 					fx.toD = prop.d;
 
- 					start = 0;
 
- 					end = 1;
 
- 				} else if (el.attr) {
 
- 					start = el.attr(name);
 
- 				} else {
 
- 					start = parseFloat(HighchartsAdapter._getStyle(el, name)) || 0;
 
- 					if (name !== 'opacity') {
 
- 						unit = 'px';
 
- 					}
 
- 				}
 
- 	
 
- 				if (!end) {
 
- 					end = parseFloat(prop[name]);
 
- 				}
 
- 				fx.custom(start, end, unit);
 
- 			}	
 
- 		};
 
- 	},
 
- 	/**
 
- 	 * Internal method to return CSS value for given element and property
 
- 	 */
 
- 	_getStyle: function (el, prop) {
 
- 		return window.getComputedStyle(el).getPropertyValue(prop);
 
- 	},
 
- 	/**
 
- 	 * Downloads a script and executes a callback when done.
 
- 	 * @param {String} scriptLocation
 
- 	 * @param {Function} callback
 
- 	 */
 
- 	getScript: function (scriptLocation, callback) {
 
- 		// We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.
 
- 		var head = doc.getElementsByTagName('head')[0],
 
- 			script = doc.createElement('script');
 
- 		script.type = 'text/javascript';
 
- 		script.src = scriptLocation;
 
- 		script.onload = callback;
 
- 		head.appendChild(script);
 
- 	},
 
- 	/**
 
- 	 * Return the index of an item in an array, or -1 if not found
 
- 	 */
 
- 	inArray: function (item, arr) {
 
- 		return arr.indexOf ? arr.indexOf(item) : emptyArray.indexOf.call(arr, item);
 
- 	},
 
- 	/**
 
- 	 * A direct link to adapter methods
 
- 	 */
 
- 	adapterRun: function (elem, method) {
 
- 		return parseInt(HighchartsAdapter._getStyle(elem, method), 10);
 
- 	},
 
- 	/**
 
- 	 * Filter an array
 
- 	 */
 
- 	grep: function (elements, callback) {
 
- 		return emptyArray.filter.call(elements, callback);
 
- 	},
 
- 	/**
 
- 	 * Map an array
 
- 	 */
 
- 	map: function (arr, fn) {
 
- 		var results = [], i = 0, len = arr.length;
 
- 		for (; i < len; i++) {
 
- 			results[i] = fn.call(arr[i], arr[i], i, arr);
 
- 		}
 
- 		return results;
 
- 	},
 
- 	offset: function (el) {
 
- 		var left = 0,
 
- 			top = 0;
 
- 		while (el) {
 
- 			left += el.offsetLeft;
 
- 			top += el.offsetTop;
 
- 			el = el.offsetParent;
 
- 		}
 
- 		return {
 
- 			left: left,
 
- 			top: top
 
- 		};
 
- 	},
 
- 	/**
 
- 	 * Add an event listener
 
- 	 */
 
- 	addEvent: function (el, type, fn) {
 
- 		augment(el).bind(type, fn);
 
- 	},
 
- 	/**
 
- 	 * Remove event added with addEvent
 
- 	 */
 
- 	removeEvent: function (el, type, fn) {
 
- 		augment(el).unbind(type, fn);
 
- 	},
 
- 	/**
 
- 	 * Fire an event on a custom object
 
- 	 */
 
- 	fireEvent: function (el, type, eventArguments, defaultFunction) {
 
- 		var e;
 
- 		if (doc.createEvent && (el.dispatchEvent || el.fireEvent)) {
 
- 			e = doc.createEvent('Events');
 
- 			e.initEvent(type, true, true);
 
- 			e.target = el;
 
- 			Highcharts.extend(e, eventArguments);
 
- 			if (el.dispatchEvent) {
 
- 				el.dispatchEvent(e);
 
- 			} else {
 
- 				el.fireEvent(type, e);
 
- 			}
 
- 		} else if (el.HCExtended === true) {
 
- 			eventArguments = eventArguments || {};
 
- 			el.trigger(type, eventArguments);
 
- 		}
 
- 		if (eventArguments && eventArguments.defaultPrevented) {
 
- 			defaultFunction = null;
 
- 		}
 
- 		if (defaultFunction) {
 
- 			defaultFunction(eventArguments);
 
- 		}
 
- 	},
 
- 	washMouseEvent: function (e) {
 
- 		return e;
 
- 	},
 
- 	/**
 
- 	 * Stop running animation
 
- 	 */
 
- 	stop: function (el) {
 
- 		el.stopAnimation = true;
 
- 	},
 
- 	/**
 
- 	 * Utility for iterating over an array. Parameters are reversed compared to jQuery.
 
- 	 * @param {Array} arr
 
- 	 * @param {Function} fn
 
- 	 */
 
- 	each: function (arr, fn) { // modern browsers
 
- 		return Array.prototype.forEach.call(arr, fn);
 
- 	}
 
- };
 
- }());
 
 
  |