var init = function(){
  if (!("open" in document.getElementsByTagName("details")[0])){
    var elements = document.getElementsByTagName("details");
    
    var onClick = function(e){
      var summary = e.target;
      var parent = e.target.parentElement;
      var contents = e.target.nextElementSibling;
      
      if (parent.hasAttribute("open")){
        parent.removeAttribute("open");
        summary.setAttribute("aria-expanded", "false");
        contents.setAttribute("aria-hidden", "true");
        contents.style.display = "none";
      }
      else{
        parent.setAttribute("open", "");
        summary.setAttribute("aria-expanded", "true");
        contents.setAttribute("aria-hidden", "false");
        contents.style.display = "block";
      }
    };
    
    var onKey = function(e){
      if (e.keyCode === 13 || e.keyCode === 32){
        onClick(e);
      }
    };
    
    for(var index = 0; index < elements.length; index++){
      var ele = elements[index];
      
      if (ele.childElementCount === 2){
        var summary = ele.children[0];
        var contents = ele.children[1];
        
        ele.style.display = "block";
        ele.setAttribute("role", "group");
        
        summary.setAttribute("role", "button");
        summary.setAttribute("aria-expanded", "false");
        summary.setAttribute("tabindex", 0);
        summary.addEventListener("click", onClick);
        summary.addEventListener("keydown", onKey);
        
        contents.setAttribute("aria-hidden", "true");
        contents.style.display = "none";
      }
    }
  }
  else if ("WebkitAppearance" in document.documentElement.style){
    var elements = document.getElementsByTagName("summary");
    
    var onMouseDown = function(e){
      e.target.classList.add("webkit-workaround");
    };
    
    var onMouseUp = function(e){
      e.target.classList.remove("webkit-workaround");
      e.target.blur();
    };
    
    for(var index = 0; index < elements.length; index++){
      elements[index].addEventListener("mousedown", onMouseDown);
      elements[index].addEventListener("mouseup", onMouseUp);
    }
  }
  
  if (location.hash.length > 1){
    var element = document.getElementById(location.hash.substring(1));
    
    if (element && element.tagName === "SUMMARY"){
      element.click();
      element.blur();
      element.scrollIntoView(true);
      
      if (window.innerWidth === 0){
        var ffs = function(){
          element.scrollIntoView(true);
          window.removeEventListener("resize", ffs);
        };
        
        window.addEventListener("resize", ffs);
      }
    }
  }
};

if (document.readyState !== "loading"){
  init();
}
else{
  document.addEventListener("DOMContentLoaded", init);
}