/**
 * Functions for use with forms. These must be available on every form, any theme.
 */

/**
 * Replace all fieldset legends with h3 headers.
 */
function changeFieldsetHeadings() {
  var fieldsets = $('#content form fieldset');
  var fieldset, legend, header;
  for (var i = 0; i < fieldsets.length; i++) {
    fieldset = fieldsets.eq(i);
    legend = fieldset.find('legend').eq(0);
    if (legend) {
      header = legend.text();
      legend.remove();
      if (header) {
        fieldset.before("<h3>" + header + "</h3>");
      }
    }
  }
}

/**
 * Function to link Forms API with jQuery validate, to make a radio button group required.
 * @param string radioGroupName The name attribute of the group.
 */
function radioButtonsRequired(radioGroupName, required) {
  if (required === undefined) {
    required = true;
  }
  if (required) {
    $("input[name='" + radioGroupName + "']").eq(0).addClass('required');
  }
  else {
    $("input[name='" + radioGroupName + "']").eq(0).removeClass('required');
  }
}


////////////////////////////////////////////////////////////////////////////////////////////////////
// Common validation stuff

var validator;
var submit_clicked = false;

/**
 * Setup common validation stuff.
 */
$(function() {

  // DEBUG clear radios for testing:
  // $('input[type=radio]').attr('checked', false);

  // auto-create validator object for webforms:
  if ($(".webform-client-form").length > 0) {
    validator = $(".webform-client-form").validate({
      errorPlacement: showValidationError
    });

    // for webforms select boxes, replace "select..." with "Please Select":
    var selectBoxes = $('select');
    var selectBox;
    for (var i = 0; i < selectBoxes.length; i++) {
      selectBox = selectBoxes.get(i);
      if (selectBox.options[0].text == "select...") {
        selectBox.options[0].text = "Please Select";
      }
    }
  }

  if ($(".form-validate").length > 0) {
    validator = $(".form-validate").validate({
      errorPlacement: showValidationError
    });

    // for webforms select boxes, replace "select..." with "Please Select":
    var selectBoxes = $('select');
    var selectBox;
    for (var i = 0; i < selectBoxes.length; i++) {
      selectBox = selectBoxes.get(i);
      if (selectBox.options[0].text == "select...") {
        selectBox.options[0].text = "Please Select";
      }
    }
  }

    // auto-create validator object for feedback node:
    // .feedback-node currently only user node validated - JT
  if ($(".feedback-node").length > 0) {
    validator = $(".feedback-node").validate({
      errorPlacement: showValidationError
    });

    // for webforms select boxes, replace "select..." with "Please Select":
    var selectBoxes = $('select');
    var selectBox;
    for (var i = 0; i < selectBoxes.length; i++) {
      selectBox = selectBoxes.get(i);
      if (selectBox.options[0].text == "select...") {
        selectBox.options[0].text = "Please Select";
      }
    }
  }

  // for date fields, disable autcomplete, and validate date on change:
  $('.container-inline-date input').attr('autocomplete', 'off').change(function() {
    if (submit_clicked) {
      validator.element(this);
    }
  }).each(function() {
    // if the span.form-required is present, add the required class to the textfield:
    if ($(this).parents('.container-inline-date:first').find('.form-required').length > 0) {
      $(this).addClass('required');
    }
  });

  // add required class to required radio button groups:
  $('.form-radios').each(function() {
    if ($(this).parents('.form-item:first').find('.form-required').length > 0) {
      $(this).find('input:radio:first').addClass('required');
    }
  });

  // add required class to required checkboxes:
  $('.form-checkboxes').each(function() {
    if ($(this).parents('.form-item:first').find('.form-required').length > 0) {
      $(this).find('input:checkbox').addClass('required');
    }

  });

  // Keep track of whether the submit button has been clicked or not, because we don't want to
  // validate any fields until after then:
  $('input[id*="edit-submit"]').click(function() {
    submit_clicked = true;
  });

  if ($('#node-form').length > 0) {
//  Removing autocomplete from itinerary nodereference field
    $('input[id^=edit-field-itinerary-trip]').attr('autocomplete', 'off');
    $('#edit-field-itinerary-trip-0-nid-nid').removeClass('form-autocomplete');
    $('input[id^=edit-field-itinerary-trip]').attr('class', 'form-text required text fluid nodereference');
  }

//  if($('#edit-tell-a-friend-node-form').length > 0) {
    $('.group-your-details > legend:first').after($('#edit-title-wrapper'));
//  }

  // if radio-button or checkbox add additional class to error

});



/**
 * Common error placement function for jQuery validation.
 */
function showValidationError(error, element) {
  // don't display the error for password 1:
  if (element.attr('id') == 'edit-pass-pass1') {
    // do nothing:
  }
  else if (element.attr('type') == 'checkbox') {
    // insert after the surrounding label:
    error.insertAfter(element.parent());
  }
  else if (element.attr('type') == 'radio') {
    // insert after the div surrounding the group:
    error.insertAfter(element.parents('.form-radios'));
  }
  else if (element.attr('id') == 'edit-expiry-month' || element.attr('id') == 'edit-expiry-year') {
    // place the error message after the year selector:
    error.insertAfter('#edit-expiry-year');
  }
  else if (element.attr('id') == 'recaptcha_response_field') {
    error.insertAfter('#recaptcha_table');
  }
  else {
    // default:
    error.insertAfter(element);
  }
}

