Event.observe(window, 'load', function() {
  if ($('send-to-a-friend')) {
    // Send to a Friend holder
    var handle_staf = function() {
      var target = 'tell-a-friend-email-addresses-holder';
      var params = {
        duration: 0.5,
        afterFinish: function() { $(target).style.height = "auto"; }
      };
      $('send-to-a-friend').checked ? new Effect.BlindDown(target, params) : new Effect.BlindUp(target, params);
    };

    Event.observe('send-to-a-friend', 'click', handle_staf);
    handle_staf();
  }

  // Set up email validation checks
  $$('input[class*="email"]').each(function(element) {
    var warning_span = Builder.node("span", { className: "email-warning", style: "display:none" }, [ "Address invalid" ]);
    element.insert({ after: warning_span });

    var handle_email_check = function(e) {
      var elem = Event.element(e);
      var my_warning = elem.next(".email-warning");
      var address = elem.value.strip();
      if (/\S/.test(address)) {
        if (emailPattern.test(address)) {
          if (my_warning.visible()) {
            my_warning.hide();
          }
        } else {
          if (!my_warning.visible()) { 
            my_warning.show();
          }
        }
      } else {
        if (my_warning.visible()) {
          my_warning.hide();
        }
      }
    };

    Event.observe(element, 'blur', handle_email_check);
    if (/\?selenium/.test(document.location.href)) {
      Event.observe(element, 'keyup', handle_email_check);
    }
  });

  var generic_error_message_handler = function(target, error_messages) {
    var holder = $(target);

    holder.innerHTML = error_messages.join("<br />");
    if (!holder.visible()) {
      new Effect.BlindDown(holder, { duration: 0.25, afterFinish: function() { holder.style.height = "auto"; } });
    }
  };

  var error_logger = function() {
    if (top.console) { top.console.log("Error in submitting form"); }
  };

  // Install form validation handlers
  new FormValidator('email-form-holder',
    [
      { type: "any_checked", name: "action[]", message: "Please select at least one choice." },
      { type: "required_email", name: "email-address", message: "Please provide a valid e-mail address." },
      { type: "validate_email", name: "friends-email-address[]", message: "Please provide valid e-mail addresses for your friends.", conditions: [ { id: 'send-to-a-friend', checked: true } ] },
      { type: "not_empty", name: "visitors-name", conditions: [ { id: 'send-to-a-friend', checked: true } ], message: "Please provide your name." }
    ],
    function(form) {
      var holder = $('error-messages-holder');

      if (holder.visible()) { holder.hide(); }
      holder.innerHTML = "";
      
      if ($('winning-image-text')) {
        new Effect.BlindUp('email-form-holder', { duration: 0.25 });
      } else {
        new Effect.BlindUp('visitor-email-submit-holder', { duration: 0.25 });
      }
      new Effect.BlindDown('demographic-form-holder', 
                           { 
                             duration: 0.25,
                             afterFinish: function() { $('demographic-form-holder').style.height = "auto"; }
                           });

      new Ajax.Request('/lib/handler.php', {
        method: 'post',
        parameters: form.serialize(),
        onSuccess: function(response) {
          if (!response.headerJSON) { error_logger(); }
        },
        onFailure: function(response) { error_logger(); }
      });
    },
    function(error_messages) {
      generic_error_message_handler('error-messages-holder', error_messages);
    }
  );

  new FormValidator('demographic-form-holder',
    [
      { type: "any_radio_selected", name: "demographic", message: "Please select a group." }
    ],
    function(form) {
      generic_error_message_handler(
        'demographic-submit-results-holder',
        [ "Thank you!" ]
      );
      $('demographic-submit-button-holder').hide();

      new Ajax.Request('/lib/handler.php', {
        method: 'post',
        parameters: form.serialize(),
        onSuccess: function(response) {
          if (!response.headerJSON) { error_logger(); }
        },
        onFailure: function(response) { error_logger(); }
      });
    },
    function(error_messages) {
      generic_error_message_handler('demographic-submit-results-holder', error_messages);
    }
  );

});