text: /* W3.JS 1.02 May 2017 by w3schools.com */
  "use strict";
  var w3 = {};
  w3.hide = function(sel) {
      w3.hideElements(w3.getElements(sel));
  };
  w3.hideElements = function(elements) {
      var i, l = elements.length;
      for (i = 0; i < l; i++) {
          w3.hideElement(elements[i]);
      }
  };
  w3.hideElement = function(element) {
      w3.styleElement(element, "display", "none");
  };
  w3.show = function(sel, a) {
      var elements = w3.getElements(sel);
      if (a) { w3.hideElements(elements); }
      w3.showElements(elements);
  };
  w3.showElements = function(elements) {
      var i, l = elements.length;
      for (i = 0; i < l; i++) {
          w3.showElement(elements[i]);
      }
  };
  w3.showElement = function(element) {
      w3.styleElement(element, "display", "block");
  };
  w3.addStyle = function(sel, prop, val) {
      w3.styleElements(w3.getElements(sel), prop, val);
  };
  w3.styleElements = function(elements, prop, val) {
      var i, l = elements.length;
      for (i = 0; i < l; i++) {
          w3.styleElement(elements[i], prop, val);
      }
  };
  w3.styleElement = function(element, prop, val) {
      element.style.setProperty(prop, val);
  };
  w3.toggleShow = function(sel) {
      var i, x = w3.getElements(sel),
          l = x.length;
      for (i = 0; i < l; i++) {
          if (x[i].style.display == "none") {
              w3.styleElement(x[i], "display", "block");
          } else {
              w3.styleElement(x[i], "display", "none");
          }
      }
  };
  w3.addClass = function(sel, name) {
      w3.addClassElements(w3.getElements(sel), name);
  };
  w3.addClassElements = function(elements, name) {
      var i, l = elements.length;
      for (i = 0; i < l; i++) {
          w3.addClassElement(elements[i], name);
      }
  };
  w3.addClassElement = function(element, name) {
      var i, arr1, arr2;
      arr1 = element.className.split(" ");
      arr2 = name.split(" ");
      for (i = 0; i < arr2.length; i++) {
          if (arr1.indexOf(arr2[i]) == -1) { element.className += " " + arr2[i]; }
      }
  };
  w3.removeClass = function(sel, name) {
      w3.removeClassElements(w3.getElements(sel), name);
  };
  w3.removeClassElements = function(elements, name) {
      var i, l = elements.length,
          arr1, arr2, j;
      for (i = 0; i < l; i++) {
          w3.removeClassElement(elements[i], name);
      }
  };
  w3.removeClassElement = function(element, name) {
      var i, arr1, arr2;
      arr1 = element.className.split(" ");
      arr2 = name.split(" ");
      for (i = 0; i < arr2.length; i++) {
          while (arr1.indexOf(arr2[i]) > -1) {
              arr1.splice(arr1.indexOf(arr2[i]), 1);
          }
      }
      element.className = arr1.join(" ");
  };
  w3.toggleClass = function(sel, c1, c2) {
      w3.toggleClassElements(w3.getElements(sel), c1, c2);
  };
  w3.toggleClassElements = function(elements, c1, c2) {
      var i, l = elements.length;
      for (i = 0; i < l; i++) {
          w3.toggleClassElement(elements[i], c1, c2);
      }
  };
  w3.toggleClassElement = function(element, c1, c2) {
      var t1, t2, t1Arr, t2Arr, j, arr, allPresent;
      t1 = (c1 || "");
      t2 = (c2 || "");
      t1Arr = t1.split(" ");
      t2Arr = t2.split(" ");
      arr = element.className.split(" ");
      if (t2Arr.length == 0) {
          allPresent = true;
          for (j = 0; j < t1Arr.length; j++) {
              if (arr.indexOf(t1Arr[j]) == -1) { allPresent = false; }
          }
          if (allPresent) {
              w3.removeClassElement(element, t1);
          } else {
              w3.addClassElement(element, t1);
          }
      } else {
          allPresent = true;
          for (j = 0; j < t1Arr.length; j++) {
              if (arr.indexOf(t1Arr[j]) == -1) { allPresent = false; }
          }
          if (allPresent) {
              w3.removeClassElement(element, t1);
              w3.addClassElement(element, t2);
          } else {
              w3.removeClassElement(element, t2);
              w3.addClassElement(element, t1);
          }
      }
  };
  w3.getElements = function(id) {
      if (typeof id == "object") {
          return [id];
      } else {
          return document.querySelectorAll(id);
      }
  };
  w3.filterHTML = function(id, sel, filter) {
      var a, b, c, i, ii, iii, hit;
      a = w3.getElements(id);
      for (i = 0; i < a.length; i++) {
          b = w3.getElements(sel);
          for (ii = 0; ii < b.length; ii++) {
              hit = 0;
              if (b[ii].innerHTML.toUpperCase().indexOf(filter.toUpperCase()) > -1) {
                  hit = 1;
              }
              c = b[ii].getElementsByTagName("*");
              for (iii = 0; iii < c.length; iii++) {
                  if (c[iii].innerHTML.toUpperCase().indexOf(filter.toUpperCase()) > -1) {
                      hit = 1;
                  }
              }
              if (hit == 1) {
                  b[ii].style.display = "";
              } else {
                  b[ii].style.display = "none";
              }
          }
      }
  };
  w3.sortHTML = function(id, sel, sortvalue) {
      var a, b, i, ii, y, bytt, v1, v2, cc, j;
      a = w3.getElements(id);
      for (i = 0; i < a.length; i++) {
          for (j = 0; j < 2; j++) {
              cc = 0;
              y = 1;
              while (y == 1) {
                  y = 0;
                  b = a[i].querySelectorAll(sel);
                  for (ii = 0; ii < (b.length - 1); ii++) {
                      bytt = 0;
                      if (sortvalue) {
                          v1 = b[ii].querySelector(sortvalue).innerHTML.toLowerCase();
                          v2 = b[ii + 1].querySelector(sortvalue).innerHTML.toLowerCase();
                      } else {
                          v1 = b[ii].innerHTML.toLowerCase();
                          v2 = b[ii + 1].innerHTML.toLowerCase();
                      }
                      if ((j == 0 && (v1 > v2)) || (j == 1 && (v1 < v2))) {
                          bytt = 1;
                          break;
                      }
                  }
                  if (bytt == 1) {
                      b[ii].parentNode.insertBefore(b[ii + 1], b[ii]);
                      y = 1;
                      cc++;
                  }
              }
              if (cc > 0) { break; }
          }
      }
  };
  w3.slideshow = function(sel, ms, func) {
      var i, ss, x = w3.getElements(sel),
          l = x.length;
      ss = {};
      ss.current = 1;
      ss.x = x;
      ss.ondisplaychange = func;
      if (!isNaN(ms) || ms == 0) {
          ss.milliseconds = ms;
      } else {
          ss.milliseconds = 1000;
      }
      ss.start = function() {
          ss.display(ss.current)
          if (ss.ondisplaychange) { ss.ondisplaychange(); }
          if (ss.milliseconds > 0) {
              window.clearTimeout(ss.timeout);
              ss.timeout = window.setTimeout(ss.next, ss.milliseconds);
          }
      };
      ss.next = function() {
          ss.current += 1;
          if (ss.current > ss.x.length) { ss.current = 1; }
          ss.start();
      };
      ss.previous = function() {
          ss.current -= 1;
          if (ss.current < 1) { ss.current = ss.x.length; }
          ss.start();
      };
      ss.display = function(n) {
          w3.styleElements(ss.x, "display", "none");
          w3.styleElement(ss.x[n - 1], "display", "block");
      }
      ss.start();
      return ss;
  };
  w3.includeHTML = function(cb) {
      var z, i, elmnt, file, xhttp;
      z = document.getElementsByTagName("*");
      for (i = 0; i < z.length; i++) {
          elmnt = z[i];
          file = elmnt.getAttribute("w3-include-html");
          if (file) {
              xhttp = new XMLHttpRequest();
              xhttp.onreadystatechange = function() {
                  if (this.readyState == 4 && this.status == 200) {
                      elmnt.innerHTML = this.responseText;
                      elmnt.removeAttribute("w3-include-html");
                      w3.includeHTML(cb);
                  }
              }
              xhttp.open("GET", file, true);
              xhttp.send();
              return;
          }
      }
      if (cb) cb();
  };
  w3.getHttpData = function(file, func) {
      w3.http(file, function() {
          if (this.readyState == 4 && this.status == 200) {
              func(this.responseText);
          }
      });
  };
  w3.getHttpObject = function(file, func) {
      w3.http(file, function() {
          if (this.readyState == 4 && this.status == 200) {
              func(JSON.parse(this.responseText));
          }
      });
  };
  w3.displayHttp = function(id, file) {
      w3.http(file, function() {
          if (this.readyState == 4 && this.status == 200) {
              w3.displayObject(id, JSON.parse(this.responseText));
          }
      });
  };
  w3.http = function(target, readyfunc, xml, method) {
      var httpObj;
      if (!method) { method = "GET"; }
      if (window.XMLHttpRequest) {
          httpObj = new XMLHttpRequest();
      } else if (window.ActiveXObject) {
          httpObj = new ActiveXObject("Microsoft.XMLHTTP");
      }
      if (httpObj) {
          if (readyfunc) { httpObj.onreadystatechange = readyfunc; }
          httpObj.open(method, target, true);
          httpObj.send(xml);
      }
  };
  w3.getElementsByAttribute = function(x, att) {
      var arr = [],
          arrCount = -1,
          i, l, y = x.getElementsByTagName("*"),
          z = att.toUpperCase();
      l = y.length;
      for (i = -1; i < l; i += 1) {
          if (i == -1) { y[i] = x; }
          if (y[i].getAttribute(z) !== null) { arrCount += 1;
              arr[arrCount] = y[i]; }
      }
      return arr;
  };
  w3.dataObject = {},
      w3.displayObject = function(id, data) {
          var htmlObj, htmlTemplate, html, arr = [],
              a, l, rowClone, x, j, i, ii, cc, repeat, repeatObj, repeatX = "";
          htmlObj = document.getElementById(id);
          htmlTemplate = init_template(id, htmlObj);
          html = htmlTemplate.cloneNode(true);
          arr = w3.getElementsByAttribute(html, "w3-repeat");
          l = arr.length;
          for (j = (l - 1); j >= 0; j -= 1) {
              cc = arr[j].getAttribute("w3-repeat").split(" ");
              if (cc.length == 1) {
                  repeat = cc[0];
              } else {
                  repeatX = cc[0];
                  repeat = cc[2];
              }
              arr[j].removeAttribute("w3-repeat");
              repeatObj = data[repeat];
              if (repeatObj && typeof repeatObj == "object" && repeatObj.length != "undefined") {
                  i = 0;
                  for (x in repeatObj) {
                      i += 1;
                      rowClone = arr[j];
                      rowClone = w3_replace_curly(rowClone, "element", repeatX, repeatObj[x]);
                      a = rowClone.attributes;
                      for (ii = 0; ii < a.length; ii += 1) {
                          a[ii].value = w3_replace_curly(a[ii], "attribute", repeatX, repeatObj[x]).value;
                      }
                      (i === repeatObj.length) ? arr[j].parentNode.replaceChild(rowClone, arr[j]): arr[j].parentNode.insertBefore(rowClone, arr[j]);
                  }
              } else {
                  console.log("w3-repeat must be an array. " + repeat + " is not an array.");
                  continue;
              }
          }
          html = w3_replace_curly(html, "element");
          htmlObj.parentNode.replaceChild(html, htmlObj);
  
          function init_template(id, obj) {
              var template;
              template = obj.cloneNode(true);
              if (w3.dataObject.hasOwnProperty(id)) { return w3.dataObject[id]; }
              w3.dataObject[id] = template;
              return template;
          }
  
          function w3_replace_curly(elmnt, typ, repeatX, x) {
              var value, rowClone, pos1, pos2, originalHTML, lookFor, lookForARR = [],
                  i, cc, r;
              rowClone = elmnt.cloneNode(true);
              pos1 = 0;
              while (pos1 > -1) {
                  originalHTML = (typ == "attribute") ? rowClone.value : rowClone.innerHTML;
                  pos1 = originalHTML.indexOf("{{", pos1);
                  if (pos1 === -1) { break; }
                  pos2 = originalHTML.indexOf("}}", pos1 + 1);
                  lookFor = originalHTML.substring(pos1 + 2, pos2);
                  lookForARR = lookFor.split("||");
                  value = undefined;
                  for (i = 0; i < lookForARR.length; i += 1) {
                      lookForARR[i] = lookForARR[i].replace(/^\s+|\s+$/gm, ''); //trim
                      if (x) { value = x[lookForARR[i]]; }
                      if (value == undefined && data) { value = data[lookForARR[i]]; }
                      if (value == undefined) {
                          cc = lookForARR[i].split(".");
                          if (cc[0] == repeatX) { value = x[cc[1]]; }
                      }
                      if (value == undefined) {
                          if (lookForARR[i] == repeatX) { value = x; }
                      }
                      if (value == undefined) {
                          if (lookForARR[i].substr(0, 1) == '"') {
                              value = lookForARR[i].replace(/"/g, "");
                          } else if (lookForARR[i].substr(0, 1) == "'") {
                              value = lookForARR[i].replace(/'/g, "");
                          }
                      }
                      if (value != undefined) { break; }
                  }
                  if (value != undefined) {
                      r = "{{" + lookFor + "}}";
                      if (typ == "attribute") {
                          rowClone.value = rowClone.value.replace(r, value);
                      } else {
                          w3_replace_html(rowClone, r, value);
                      }
                  }
                  pos1 = pos1 + 1;
              }
              return rowClone;
          }
  
          function w3_replace_html(a, r, result) {
              var b, l, i, a, x, j;
              if (a.hasAttributes()) {
                  b = a.attributes;
                  l = b.length;
                  for (i = 0; i < l; i += 1) {
                      if (b[i].value.indexOf(r) > -1) { b[i].value = b[i].value.replace(r, result); }
                  }
              }
              x = a.getElementsByTagName("*");
              l = x.length;
              a.innerHTML = a.innerHTML.replace(r, result);
          }
      };