var rootTest = new RegExp("^\\s*(topic|concept|task|reference)\\s*$");

function validateForm(event) {
  var target = getTarget(event);
  for (var i = 0; i < target.elements.length; i++) {
    var elem = target.elements[i]
    if (elem.className === "required") {
      var value;
      switch (elem.nodeName.toLowerCase()) {
      case "select":
        for (var k = 0; k < elem.options.length; k++) {
          if (elem.options[k].selected) {
            value = elem.options[k].value;
            break;
          }
        }
        break;
      default:
        value = elem.value;
      }
      if (value === "") {
        var label = getLabel(elem);
        alert("Required field " + label.toLowerCase() + " has no value set");
        return cancelEvent(event);
      } else if (elem.name === "root" && rootTest.test(value)) {
        var label = getLabel(elem);
        alert("Field " + label.toLowerCase() + " may not use the value '"+ value + "' because specializations may not redefine DITA elements");
        return cancelEvent(event);
      }
    }
  }
  return true;
}

function getLabel(elem) {
	var labels = document.getElementsByTagName("label");
	for (var j = 0; j < labels.length; j++) {
	  if (labels[j].htmlFor === elem.name) {
	    return labels[j].firstChild.data;
	  }
  }
  return undefined;
}

function getTarget(event) {
	return event.target ? event.target : event.srcElement;
}

function cancelEvent(event) {
    if (event.preventDefault) {
      event.stopPropagation();
      event.preventDefault();
    } else {
      event.cancelBubble = true;
      event.returnValue = false;
    }
    return false;
}
