//  Event handlers
RadioClick = function() {
  var fields = document.getElementById(this.name + "-fields");
  if (!fields) {
    //  No fields are controlled by this radio button
    return;
  }
  
  //  Get disabled state
  var disabled = this.checked && (this.value == "false" || this.value == "no");
  
  //  Toggle fields
  var inputs = fields.getElementsByTagName("input");
  for(var i = 0; i < inputs.length; i++) {
    var input = inputs[i];
    
    input.disabled = disabled;

    //  Clear class name
    input.className = input.className.replace("disabled", "");
    
    //  Set class name
    if (disabled) {
      //  Mark as disabled
      input.className += " disabled";
    }
  }
}

SubmitClick = function() {
  
  //  Validate <input> fields
  var input = document.getElementsByTagName("input");
  for(var i = 0; i < input.length; i++) {
    var field = input[i];
    
    if (field.type != "text" || field.disabled || field.className.indexOf("optional") >= 0) {
      //  Skip this field
      continue;
    }
    
    if (field.value == undefined || field.value == "") {
      //  Blank field
      alert("Please complete form before submitting!\n\n(" + field.name + " is blank)");
      return false;
    }
  }
  
  //  Validate <textarea> fields
  var textarea = document.getElementsByTagName("textarea");
  for(var i = 0; i < textarea.length; i++) {
    var field = textarea[i];
    if (field.type != "text" || field.disabled || field.className.indexOf("optional") >= 0) {
      //  Skip this field
      continue;
    }
    
    if (field.innerText == undefined || field.innerText == "") {
      //  Blank field
      alert("Please complete form before submitting!\n\n(" + field.name + " is blank)");
      return false;
    }
  }
  
  //  Validate email address
  var email = document.getElementById("email").value;
  if (email.indexOf("@") < 0 || email.indexOf(".") < 0) {
    alert("Please enter a valid email address.");
    return false;
  }
}

TextUpdate = function()
{
  //  Get counter
  var textCounter = document.getElementById(this.id + "-counter");
  if (!textCounter) {
    return;
  }
  
  //  Get max length
  var maxLength = this.getAttribute("maxlength");
  if (!maxLength) {
    //  Maximum length not specified
    return;
  }

  //  Check length
  var diff = maxLength - this.value.length;
  if (diff < 0) {
    message = "Too long";
  } else if (diff == 1) {
    message = "1 char left";
  } else {
    message = diff + " chars left";
  }
  
  //  Update page
  textCounter.innerHTML = message;
}

//  Functions
InitRadios = function() {
  var radios = document.getElementsByTagName("input");
  for(var i = 0; i < radios.length; i++) {
    var radio = radios[i];
    if (radio.type != "radio") {
      //  Skip this <input>
      continue;
    }
    radio.onclick = RadioClick;
    
    if (radio.checked) {
      //  Execute the RadioClick function for selected button
      radio.click();
    }
  }
}

InitTextFields = function() {
  var fields = document.getElementsByTagName("textarea");
  for(var i = 0; i < fields.length; i++) {
    var field = fields[i];
    field.onchange = TextUpdate;
  }
}

//  Attach event handlers
document.getElementById("submit").onclick = SubmitClick;

//  Initialize
InitRadios();
InitTextFields();