(function () {
  //Inject code v5.2

  var highcharts = document.createElement('script');
  var injectVersion = 6;
  var cdn = 'https://code.highcharts.com/';
  var loaded = 0;  
  var encodedUrl = encodeURI('https://https://app.everviz.com//show/77m4nFdyJ');
  var chartCreated = false;
  var delayGen = 0;
  var scripts = [
    "highcharts.js",
    "modules/stock.js",
    "highcharts-more.js",
    "highcharts-3d.js",
    "modules/data.js",
    "modules/exporting.js",
    "modules/funnel.js",
    "modules/solid-gauge.js",
    "modules/export-data.js",
    "modules/accessibility.js"
  ];

  const inEmbedCode = window.location.pathname.indexOf('/embed/') > -1;
  const inEverviz = window.location.origin === 'https://app.everviz.com';
  const loadHighchartsModules = inEverviz && !inEmbedCode;

  var legacyElementClassName = 'highcharts-77m4nFdyJ';
  var elementClassName = 'everviz-77m4nFdyJ';
  var externalCSS = [
    "https://app.everviz.com/resources/css/highcharts-small-screen-annotations.css",
    "https://app.everviz.com/resources/css/highcharts-data-table.css"
  ];

  var extraScripts = [
  "https://code.highcharts.com/modules/annotations.js",
  "https://code.highcharts.com/modules/annotations-advanced.js",
  "https://app.everviz.com/resources/js/highcharts-small-screen-annotations.js",
  "https://app.everviz.com/resources/js/highcharts-scroll-animation.js",
  "https://app.everviz.com/resources/js/everviz-utils.js",
  "https://app.everviz.com/resources/js/highcharts-overrides.js",
  "https://app.everviz.com/resources/js/highcharts-resize.js",
  ];

  var options = {"title":{"text":""},"subtitle":{"text":""},"plotOptions":{"series":{"animation":false,"stacking":"normal","marker":{"fillColor":"#FFFFFF","lineWidth":2,"lineColor":null,"enabled":true}}},"xAxis":{"index":0,"isX":true,"labels":{"style":{"fontSize":"13px"}},"tickInterval":31556952000},"yAxis":{"index":0,"title":{"text":"<div>Yearly person change, ‘000, trend</div>","style":{"fontSize":"19px"},"useHTML":true},"labels":{"style":{"fontSize":"13px"}}},"series":[{"data":[],"turboThreshold":0,"_colorIndex":0,"_symbolIndex":0,"color":"#e91e63","type":"column"},{"data":[],"turboThreshold":0,"_colorIndex":1,"_symbolIndex":0,"type":"column"},{"data":[],"turboThreshold":0,"_colorIndex":2,"_symbolIndex":0,"type":"line"}],"chart":{"polar":false,"backgroundColor":"#fefefe"},"exporting":{"buttons":{"contextButton":{"menuItems":["printChart","separator","downloadPNG","downloadJPEG","downloadPDF","downloadSVG","separator","downloadCSV","downloadXLS"]}},"sourceHeight":null,"url":"https://api.everviz.com/export"},"credits":{"enabled":false},"stockTools":{"gui":{"enabled":false}},"navigation":{"bindingsClassName":"tools-container"},"colors":["#b71a1c","#607D8B","#009688","#FF5722","#2196f3","#9e9e9e"],"legend":{"align":"left"},"pane":{"background":[]},"responsive":{"rules":[]},"annotations":[],"tooltip":{},"data":{"csv":"\"Date\";\"Part-time\";\"Full-time\";\"Total\"\n1401580800000;44.8;-4.2;40.6\n1404172800000;44.3;-13.3;31\n1406851200000;41.3;-21.5;19.8\n1409529600000;35.6;-25.1;10.5\n1412121600000;27.4;-22.4;5.1\n1414800000000;16.6;-14.3;2.3\n1417392000000;4.5;-3.5;1\n1420070400000;-6.8;6.8;0\n1422748800000;-16.4;14.8;-1.7\n1425168000000;-22.8;19;-3.8\n1427846400000;-25.4;19.9;-5.5\n1430438400000;-23.7;19.2;-4.4\n1433116800000;-17.6;18.3;0.6\n1435708800000;-8.5;18.1;9.6\n1438387200000;2;19.2;21.2\n1441065600000;11.6;22.6;34.2\n1443657600000;19.1;27.1;46.2\n1446336000000;25.4;30.5;56\n1448928000000;30.9;30.3;61.2\n1451606400000;35;25.2;60.2\n1454284800000;38;15.9;53.9\n1456790400000;38.6;6.1;44.7\n1459468800000;36.4;-1.7;34.7\n1462060800000;31.1;-6.9;24.2\n1464739200000;23.5;-9.6;14\n1467331200000;15.2;-10.6;4.6\n1470009600000;7.8;-11.4;-3.6\n1472688000000;3.8;-14.9;-11.1\n1475280000000;5.1;-21.7;-16.6\n1477958400000;9.8;-28.5;-18.7\n1480550400000;15.8;-31.7;-15.8\n1483228800000;21.3;-28.5;-7.2\n1485907200000;25.6;-19.7;5.9\n1488326400000;30.4;-8.4;22\n1491004800000;36.6;3;39.6\n1493596800000;44.3;13.8;58.2\n1496275200000;53;23.3;76.3\n1498867200000;60.2;31.4;91.5\n1501545600000;64.2;38.9;103.1\n1504224000000;62.7;48;110.7\n1506816000000;55;59.4;114.4\n1509494400000;44.1;69.6;113.7\n1512086400000;33.2;75.5;108.7\n1514764800000;25.5;75.3;100.7\n1517443200000;22.4;69.1;91.5\n1519862400000;22.4;59.6;82\n1522540800000;22.9;50.1;73\n1525132800000;21.8;42.8;64.6\n1527811200000;17.6;38.9;56.5\n1530403200000;11.8;38.1;49.8\n1533081600000;6.1;38.8;44.8\n1535760000000;2.3;38.7;41\n1538352000000;1.6;37;38.5\n1541030400000;2.8;34.9;37.7\n1543622400000;5.4;33.8;39.3\n1546300800000;7.2;34.7;41.9\n1548979200000;6.4;37.7;44.1\n1551398400000;3.4;41.5;44.9\n1554076800000;-0.5;44.3;43.9\n1556668800000;-3.1;45;41.9\n1559347200000;-3.7;44.3;40.6\n1561939200000;-2.1;42.2;40.1\n1564617600000;1.3;38.8;40.1\n1567296000000;6.2;35;41.1\n1569888000000;11.8;30.6;42.4\n1572566400000;17.8;25.4;43.2\n1575158400000;23.1;20.1;43.1\n1577836800000;28.3;14.1;42.4\n1580515200000;34.7;7.9;42.6\n1583020800000;42;2.4;44.4\n1585699200000;-27.1;-72.7;-99.8\n1588291200000;-22.3;-72.4;-94.7\n1590969600000;-18.8;-69.4;-88.2\n1593561600000;-16.2;-64.1;-80.3\n1596240000000;40;-56.9;-16.9\n1598918400000;42.4;-48.9;-6.5\n1601510400000;43.8;-40;3.8\n1604188800000;43.5;-30.1;13.5\n1606780800000;41.5;-19.5;22.1\n1609459200000;37.6;-7.1;30.5\n1612137600000;31.8;7.1;38.9\n1614556800000;25;21.4;46.4\n1617235200000;94.5;105.7;200.2\n1619827200000;88.7;114.5;203.2\n1622505600000;82.6;119.8;202.4\n1625097600000;75.6;122.2;197.7\n1627776000000;14.4;121.8;136.2\n1630454400000;7.5;120.1;127.6\n1633046400000;2.4;118.7;121.1\n1635724800000;-0.7;118.7;118.1\n1638316800000;-2.4;121.1;118.7\n1640995200000;-4;125.2;121.2\n1643673600000;-6;129.6;123.5\n1646092800000;-7.4;133.4;126\n1648771200000;-6.7;135.3;128.5\n1651363200000;-2.6;133.1;130.5\n1654041600000;4.9;127;131.9\n1656633600000;12.9;119.4;132.3\n1659312000000;18.3;113;131.3\n1661990400000;19.3;108.3;127.6\n1664582400000;16.6;104.2;120.8\n1667260800000;12.8;98.9;111.7\n1669852800000;10.9;90.7;101.6\n1672531200000;12.7;79.3;92\n1675209600000;17.1;66.9;83.9\n1677628800000;21.1;55.8;76.9\n1680307200000;21.9;48.3;70.2\n1682899200000;19;45.6;64.6\n1685577600000;13.5;46.6;60.2\n1688169600000;10;47.9;57.8\n1690848000000;11.4;46.9;58.3\n1693526400000;18.2;44.2;62.4\n1696118400000;28.6;41.4;69.9\n1698796800000;39.2;40.5;79.6\n1701388800000;46.9;42.9;89.8\n1704067200000;50.3;48.8;99\n1706745600000;50.1;56.5;106.5\n1709251200000;48.6;64;112.6\n1711929600000;47.7;70.7;118.4\n1714521600000;48.2;76.2;124.4\n1717200000000;49.9;80.7;130.5","seriesMapping":[{"x":0,"y":1},{"x":0,"y":2},{"x":0,"y":3}],"decimalPoint":".","assignDataFields":[{"labels":"A","values":"B"},{"labels":"A","values":"C"},{"labels":"A","values":"D"}]}};
  var optionsStub;
  
  var templateDataSettings = {};

  var pluginCode = {};;

  function isScriptAlreadyIncluded(src){

    var scripts = document.getElementsByTagName("script");
    for (var i = 0; i < scripts.length; i++) {
      if (scripts[i].hasAttribute('src')) {
        const scriptTag = scripts[i].getAttribute('src') || '';
        if ((scriptTag.indexOf(src) >= 0) || 
            (scriptTag.indexOf('highcharts.src.js') > -1 && src === 'highcharts.js') ||
            ((scriptTag.indexOf('stock/highstock.js') > -1) && src === 'modules/highstock.js') ||
             (loadHighchartsModules && src === 'highcharts.js')) {
          return true;
        }
      }
    }
    return false;
  }

  function loadCSS() {
    var cssLength = externalCSS.length;
    for(var i=0; i < cssLength; i++) {
      var css = document.createElement('link');
      css.rel  = 'stylesheet';
      css.type = "text/css";
      css.href = externalCSS[i];
      document.body.appendChild(css);
    }
  }

  function allScriptsIncluded(){
    var allScripts = scripts.concat(extraScripts);
    var haveAllScriptsBeenIncluded = true;
    var scriptsToUse = document.getElementsByTagName("script");
    for(var n=0;n<allScripts.length;n++) {
      if (!isScriptAlreadyIncluded(allScripts[n], scriptsToUse)) {
        haveAllScriptsBeenIncluded = false;
        break;
      }
    }
    return haveAllScriptsBeenIncluded;
  }

  function modifyOptions(){
    if (options.data && !options.data.complete) {
      options.data.complete = function(chartOptions) {
        const keys = Object.keys(templateDataSettings || {});
        keys.forEach(function(key) {
          const serie = chartOptions.series[key];
          (serie.data || []).forEach(function(d, i) {
            if (templateDataSettings[key].data && templateDataSettings[key].data[i]) {
              window["everviz"].merge(d, templateDataSettings[key].data[i]);
            }
          })
        })

        if (options && options.chart && options.chart.type === 'packedbubble') {
          chartOptions.series.forEach((series) => {
            series.data = series.data.filter((point) => point.value);
          });
        }

        return chartOptions;
      }
    }
    
    optionsStub = window["everviz"].createStub(options);
    window["everviz"].merge(options, pluginCode);
    if ('Chart' === 'Map') window["everviz"].modifyMapType(options);
  }

  function createChart() {
    if(chartCreated) return;

    var hasProj4 = extraScripts.indexOf('https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.3.6/proj4.js') > -1;

    if (!allScriptsIncluded() || 
      (hasProj4 && !window.proj4) || 
      !window["everviz"].merge ||
      !window["everviz"].createStub) {
      setTimeout(createChart, 200);
      return;
    }  

    modifyOptions();

    if (hasProj4) delayGen = 100;

    if (typeof window['Highcharts'] !== 'undefined') {
      
    if (window['everviz'] && window['everviz'].tooltipFormatter && 
        options.everviz && options.everviz.tooltip){
      if (!options.tooltip) options.tooltip = {};
      options.tooltip.formatter = window['everviz'].tooltipFormatter;
    }


    if (options.yAxis && options.yAxis.length === 1) options.yAxis = options.yAxis[0];
    if (options.xAxis && options.xAxis.length === 1) options.xAxis = options.xAxis[0];
    if (options.zAxis && options.zAxis.length === 1) options.zAxis = options.zAxis[0];

    
// Sample of extending options:
Highcharts.merge(true, options, {
    exporting: {
    buttons: {
      contextButton: {
        menuItems: ["printChart",
                    "separator",
                    "downloadPNG",
                    "downloadJPEG",
                    "downloadPDF",
                    "downloadSVG",
                    "separator",
                    "downloadCSV",
                    "downloadXLS"]
      }
    }
  },
    chart: {
        backgroundColor: "#fefefe"
    },
  credits: {
    enabled: false
  },
  colors: [ '#b71a1c', '#607D8B', '#009688', '#FF5722', '#2196f3', '#9e9e9e'],
  plotOptions: {
        series: {
            marker: {
              fillColor: '#FFFFFF',
                lineWidth: 2,
                lineColor: null,
              enabled:true
            }
        }
    },
  legend:{
    align: "left"
  },
  yAxis: {
    title: {
      style: {
        fontSize: "19px"
      }
    },
   labels: {
      style: {
        fontSize: "13px"
      }
    }
  },
  xAxis: {
    labels: {
      style: {
        fontSize: "13px"
      }
    }
  }
});



      if (options && (options.lang || options.global)) {
        Highcharts.setOptions({
          global: options.global || {},
          lang: options.lang || {}
        });
      }

      if (Highcharts.Annotation) {
        Highcharts.Annotation.ControlPoint.prototype.redraw = function (animation) {
          this.graphic[animation ? 'animate' : 'attr'](
              this.options.positioner ? this.options.positioner.call(this, this.target) : null
          );
        };
      }

      chartCreated = true;
      window.HighchartsCloud.hasLoaded = true; 
      setTimeout(function(){
          if (window["everviz"] && window["everviz"].pendingAnim) {
            //TODO: change to using classes instead.
            //Bit of work to do there due to backward compatibility
            const elements = document.querySelectorAll(
              '#' + elementClassName + 
              ', #' + legacyElementClassName
            );
            const elementsArray = Array.prototype.slice.call(elements);
            elementsArray.forEach(function(element, elementIndex) {

              window["everviz"].updateRenderTo(optionsStub, element);
              const stubbedChart = new Highcharts.Chart(optionsStub);
              

              window["everviz"].pendingAnim({
                id: element.id + '-' + elementIndex, 
                loaded: false,
                options: options,
                appear:function(){
                  window.everviz.disconnectResizeObserver(stubbedChart);
                  window["everviz"].updateRenderTo(options, element);
                  new Highcharts.Chart(options);

                },
                element: element
              });
            });

          } else {
            const element = document.querySelector('#' + legacyElementClassName);

            if (element) new Highcharts.Chart(legacyElementClassName, options)
            else new Highcharts.Chart(elementClassName, options) 

            
          }
      }, delayGen);
    }
  }

  function check(scripts, cb) {
    if (loaded === scripts.length) {
      if (cb) {
        cb();
      } else {


        //Create first project
        if (!window.HighchartsCloud.versions ||
           (window.HighchartsCloud.versions && window.HighchartsCloud.versions.length !== window.HighchartsCloud.ondone.length)) {
             
          for (var i = 0; i < window.HighchartsCloud.ondone.length; i++) {
            try {
              window.HighchartsCloud.ondone[i]();
            } catch(e) {
              console.error(e);
            }
          }
        } else {
          if (window.HighchartsCloud.stack.length) {
            window.HighchartsCloud.stack[0]();
            window.HighchartsCloud.stack.shift();
            const shouldRenderNextChart = window.HighchartsCloud.stack.length > 0;
            if (shouldRenderNextChart) {
              window.HighchartsCloud.stack[0](true);
            }
          }
        }
        
      }
    }
  }

  function loadScript(s, scripts, cb) {
    if (!s) next();
    
    function next() {
      ++loaded;
      if (loaded < scripts.length) {
        loadScript(scripts[loaded], scripts, cb);
      }
      check(scripts, cb);
    }

    if (isScriptAlreadyIncluded(s)) {
      return next();
    }

    var n = document.createElement('script');

    n.onload = function () {
      next();
    };

    if (s.indexOf('http') >= 0) {
      n.src = s;
    } else {
      n.src = cdn + s;
    }
    document.body.appendChild(n);
  }

  function loadExtraScripts(){
    if (extraScripts.length > 0) {
      loaded = 0;
      loadScript(extraScripts[0], extraScripts);
    } else {
      check(scripts);
    }
  }

  function loadExtraScriptsAndMakeChart(isUsingStack){
    loaded = 0;
    loadCSS();
    if (extraScripts.length > 0) {
      if (isUsingStack) {
        window.HighchartsCloud.stack[0] = createChart;
        loadScript(extraScripts[0], extraScripts);
      }
      else loadScript(extraScripts[0], extraScripts, createChart);
    } else {
      check(extraScripts);
    }
  }

  function getAllScripts(){
    var evervizScripts = [];
    var allScripts = scripts.map(function(script) {
      return 'highcharts/'+ script.replace('highcharts/highcharts.js', 'highcharts.js').replace('.js', '');
    }).concat(
      extraScripts.map(function(script) {
        if (script.indexOf('https://code.highcharts.com/') > -1) {
          return 'highcharts/'+ script.replace('https://code.highcharts.com/', '').replace('.js', '');
        } else if (script.indexOf('https://app.everviz.com/') > -1) {
          evervizScripts.push(script);
          return null;
        } else return script;
      }).filter(function(s) {
        return s !== null;
      })
    );

    allScripts.forEach(function(script) {
      if (window.HighchartsCloud.allScripts)
        window.HighchartsCloud.allScripts[script] = 1
    });

    return {
      allHighchartsScripts: allScripts,
      evervizScripts: evervizScripts
    }
  }

  function loadRequireJSScript(){
    require.config({
      packages: [{
        name: 'highcharts',
        main: 'highcharts'
      }],
      paths: {
        'highcharts': 'https://code.highcharts.com'
      }
    });

    const allScripts = getAllScripts();

    require(
      allScripts.allHighchartsScripts,
      function (Highcharts) {
        //Attach highcharts to the window for use in the everviz scripts
        window.Highcharts = Highcharts;
        if (allScripts && allScripts.evervizScripts.length) {
          require(allScripts.evervizScripts, function(){
            createChart();
            loadCSS();
          })
        } else {
          createChart();
          loadCSS();
        }
      }
    );
  }

  function loadInitialScript(){
    if (window['require'] && typeof require === "function" && typeof require.specified === "function") {
      loadRequireJSScript();
    } else {
      getAllScripts()
      loadScript(scripts[0], scripts, loadExtraScripts);
      loadCSS();
    }
  }

  if (typeof window['HighchartsCloud'] === 'undefined') {
    window.HighchartsCloud = {
      ondone: [createChart],
      stack: [createChart],
      hasWrapped: false,
      hasLoaded: false,
      externalCSS: externalCSS,
      versions: [injectVersion],
      types: ['chart'],
      allScripts: {},
      projectUUIDs: {'77m4nFdyJ': 1},
    };

    loadInitialScript();

  } else {
    if (window.HighchartsCloud.externalCSS) window.HighchartsCloud.externalCSS.push(externalCSS);
    if (!window.HighchartsCloud.hasLoaded) {
      if (!window.HighchartsCloud.projectUUIDs) window.HighchartsCloud.projectUUIDs = {};

      if (!window.HighchartsCloud.projectUUIDs['77m4nFdyJ']) {

        window.HighchartsCloud.projectUUIDs['77m4nFdyJ'] = 1;
        window.HighchartsCloud.ondone.push(loadExtraScriptsAndMakeChart);
        if (window.HighchartsCloud.stack) {
          window.HighchartsCloud.stack.push(loadExtraScriptsAndMakeChart);
          window.HighchartsCloud.versions.push(injectVersion);
          window.HighchartsCloud.types.push('chart');
        }

      }
      if (window['require'] && typeof require === "function" && typeof require.specified === "function") {
        getAllScripts()
        loadRequireJSScript();
      }
    }
    else {
      if (window['require'] && typeof require === "function" && typeof require.specified === "function") {
        loadRequireJSScript();
      } else {
        getAllScripts()
        loadExtraScriptsAndMakeChart();
      }
    }
  }

}());
