var AutoForm = Class.create();
AutoForm.prototype = {
  initialize: function(form_id) {
    this.name           = form_id;
    this.form_elements  = $$(".validation-advice");
    this.initializeEvents();
  },

  initializeEvents : function() {
    // Event.observe(document, 'keypress', this.validateOnReturnKey.bindAsEventListener(this));
    Event.observe('submit', 'click', this.validateFields.bindAsEventListener(this));
    
    $('vehicle1_make').observe('change', this.loadVehicleModels);
    this.loadVehicleModels();
    
    // $$(".textfield").each( this.addDefaultValue );
    
    // $$(".textfield").each(function(el) {
    //   el.observe('focus', function(event) {
    //     var el = Event.element(event);
    //     if ($F(el) == el.title) {
    //       el.value = '';
    //       el.removeClassName("default-text");
    //     }
    //   });
    // 
    //   el.observe('blur', function(event) {
    //     var el = Event.element(event);
    //     if ($F(el) == '') {
    //       el.value = el.title;
    //       el.addClassName("default-text");
    //     }
    //   });
    // });
  },
  
  loadVehicleModels: function() {
    new Ajax.Request("vehicles.php?m=" + $F('vehicle1_make'), {
      method: 'get',
      evalJSON: true,
      onSuccess: function(transport, json) {
        var el = $('vehicle1_model');
        
        // Clear options
        while ( el.hasChildNodes() ) {
           el.removeChild( el.firstChild );
        }
        
        if (json.length > 0 || $F('vehicle1_make') == 'Other') json.push('OTHER');
        
        // Add first option
        var opt = document.createElement('OPTION');
        opt.setAttribute('value','');
        var text = document.createTextNode('--');
        opt.appendChild(text);
        el.appendChild(opt);

        // Add the rest of the options
        for (var i=0; i < json.length; i++) {
          var opt = document.createElement('OPTION');
          opt.setAttribute('value',json[i]);
          var text = document.createTextNode(json[i]);
          opt.appendChild(text);
          el.appendChild(opt);
        };        
      }
    });
  },

  addDefaultValue: function(el) {
    if ($F(el) == '' || $F(el) == el.title) {
      el.value = el.title;
      el.addClassName("default-text");
    }
  },
  
  removeDefaultValue: function(el) {
    if ($F(el) == el.title) {
      el.value = '';
      el.removeClassName("default-text");
    }
  },

  /***************************************************************************************************
   *show/add functions
   *takes hidden row, element and validation to apply/remove
   */
  showAddValidations: function(name, element, validation_name) {
    var name = String(name);
    $$(name).each(function(element) { element.show(); });
    $(element.id).addClassName(validation_name);
  },

  hideRemoveValidations: function(name, element, validation_name) {
    var name = String(name);
    $$(name).each(function(element) { element.hide(); });
    $(element.id).hide();
    $(element.id).removeClassName(validation_name);
  },

  validateFields: function(e) {
    // $$(".textfield").each( this.removeDefaultValue );
    
    var form      = new Validator(this.form_elements);
    var is_valid  = form.isFormValid();
    
    if ( $("privacy_policy") ) {
      if ( !$("privacy_policy").checked ) {
        is_valid = false;
        $("privacy_policy_error").show();
      } else {
        $("privacy_policy_error").hide();
      }
    }
    
    if (!is_valid) Event.stop(e);
  },

  validateOnReturnKey: function(e) {
    if (e.keyCode == Event.KEY_RETURN) {
      this.validateFields(e);
      Event.stop(e);
    }
  }
}

if (!(BrowserDetect.browser == 'Explorer' && BrowserDetect.version < 6)) {
  Event.observe(window, 'load', function() {
    var auto_form = new AutoForm();
  });
}

function isAnyChecked(parent_id) {
  var is_valid  = true;
  is_valid      =  Form.getElements($(parent_id)).any(function(e) { return (e.checked); });
  if (!is_valid) {
    $("pre_existing_conditions_error").addClassName("validation-advice");
  } else {
    $("pre_existing_conditions_error").removeClassName("validation-advice");
  }
  return is_valid
}
