function initForms() {
  var forms = document.getElementsByTagName("form");
  for (var i = 0; i < forms.length; i++) {
    if ((forms[i].getAttribute("class") + "").indexOf("spoilerform") > -1) {
      new SpoilerForm(forms[i]);
    }

    if ((forms[i].getAttribute("class") + "").indexOf("hasErrors") > -1) {
      focusError(forms[i]);
    }
  }
}

function focusError(form) {
  var offset = form.offsetTop;
  var offsetParent = form;
  while ((offsetParent = offsetParent.offsetParent) != null) {
    offset += offsetParent.offsetTop;
  }
  document.documentElement.srollTop = offset - 10;
  var divs = form.getElementsByTagName("p");
  for (var i = 0; i < divs.length; i++) {
    if (!divs[i].className || divs[i].className.indexOf("message") < 0) {
      continue;
    }
    if (divs[i].hasAttribute("for")
        && form.elements.namedItem(divs[i].getAttribute("for"))) {
      form.elements.namedItem(divs[i].getAttribute("for")).focus();
      break;
    }
  }
}

function SpoilerForm(form) {
  this.form = form;
  this.init();
}

SpoilerForm.prototype.init = function() {
  var legends = this.form.getElementsByTagName("legend");
  if (legends.length < 1) {
    return;
  }
  var legend = legends[0];
  var me = this;

  var openElement = document.createElement("a");
  openElement.appendChild(document.createTextNode(legend.textContent));
  this.form.insertBefore(openElement, this.form.firstChild);
  openElement.setAttribute("class", "spoileropenener");
  openElement.addEventListener("click", function(){me.open()}, true)
  openElement.href='javascript:;';

  var closeElement = document.createElement("a");
  closeElement.appendChild(document.createTextNode("verstecken"));
  legend.appendChild(document.createTextNode(" "))
  legend.appendChild(closeElement);
  closeElement.addEventListener("click", function(){me.close()}, true)
  closeElement.href='javascript:;';

  if ((this.form.getAttribute("class") + "").indexOf("hasErrors") < 0) {
    this.close();
  }
}
SpoilerForm.prototype.open = function() {
  this.form.setAttribute('class',
      (this.form.getAttribute('class') + '').replace(' closed', ''));
}
SpoilerForm.prototype.close = function() {
  this.form.setAttribute('class', this.form.getAttribute('class') + ' closed');
}



if (window.addEventListener) {
  window.addEventListener("load", initForms, true);
}
