/*

* ActiveCharts 
* ============
* package for chart interactivity 
* no dependencies
* browser support: IE 9+, Firefox, Chrome, Safari
*/
var ActiveCharts = (function() {

  var tooltip_triggers = [];
  var tooltips = [];

  function setTriggers(classNames) {
    for (var i = 0; i < classNames.length; i++) {
      tooltip_triggers.push.apply(tooltip_triggers, document.getElementsByClassName(classNames[i]));
    }
  }

  function setTooltips(classNames) {
    for (var i = 0; i < classNames.length; i++) {
      tooltips.push.apply(tooltips, document.getElementsByClassName(classNames[i]));
    }
  }

  function toggleTooltip(triggerEl, tooltipEl) {
    if (hasClass(triggerEl, 'ac-highlight')) {
      removeClass(triggerEl, 'ac-highlight');
      removeClass(tooltipEl, 'ac-visible');
    } else {
      addClass(triggerEl, 'ac-highlight');
      addClass(tooltipEl, 'ac-visible');
    }
  }

  function addClass(el, className) {
    if (el.classList)
      el.classList.add(className);
    else
      el.className += ' ' + className;
  }

  function removeClass(el, className) {
    if (el.classList)
      el.classList.remove(className);
    else
      el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
  }

  function hasClass(el, className) {
    if (el.classList)
      return el.classList.contains(className);
    else
      return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className);
  }

  return {

    activateTooltips: function(triggerClassNames, tooltipClassNames, eventName) {
      setTriggers(triggerClassNames);
      setTooltips(tooltipClassNames)

      for (var i = 0; i < tooltip_triggers.length; i++) {
        tooltip_triggers[i].addEventListener(eventName, function(e){
          toggleTooltip(e.target, e.target.nextElementSibling);
        });
      }

      for (i = 0; i < tooltips.length; i++) {
        tooltips[i].addEventListener(eventName, function(e){
          toggleTooltip(e.target.previousElementSibling, e.target);
        });
      }
    },

    // expose some private methods
    toggleTooltip: toggleTooltip,
    addClass: addClass,
    removeClass: removeClass,
    hasClass: hasClass

  };

})();

ActiveCharts.activateTooltips(, ['ac-toggleable'], 'click');