function validate ( e) {
  var valid = true;
  var fields = [];
  $$( "#new_sweepstakes_registration .inactive").each( function( field) {
    if ( field.value != "") {
      fields.push( field.value);
      valid = false;
    }
  });
  if ( !valid) {
    alert( "Please make sure to enter the following fields:\n\t" + fields.join( "\n\t"));
    e.stop();
    return;
  }
  if ( $F( "sweepstakes_registration_future_surveys_true") == null && $F( "sweepstakes_registration_future_surveys_false") == null) {
    alert( "Please indicate whether you are willing to participate in future surveys.");
    e.stop();
    return;
  }
}

function clear_prompts( form) {
  form = $( form);
  form.select( ".inactive").each( function( field) {
    field.value = "";
  });
}

function restore_prompts( form) {
  for_each_labelled_field( form, function( label, obj) {
    if ( obj.readAttribute( "type") != "text" && obj.tagName.toLowerCase() != "textarea") return;
    if ( obj.value == "") obj.value = label.firstChild.data;
  });
}

function for_each_labelled_field( form, callback) {
  form = $( form);
  form.getElementsBySelector( "label").each( function( label) {
    var obj = $( label.readAttribute( "for"));
    if ( obj == null) obj = $( label.getAttribute( "for")); // Ugly, stupid, hack because IE8 doesn't handle readAttribute correctly.
    callback( label, obj);
  });
}

function use_internal_prompts( form) {
  form = $( form);
  for_each_labelled_field( form, function( label, obj) {
    if ( obj.readAttribute( "type") != "text" && obj.tagName.toLowerCase() != "textarea") return;
    obj.addClassName( "inactive");
    label.setStyle({ display: "none" });
    var text = label.firstChild.data;
    if ( obj.value == "") {
      obj.value = text;
    } else {
      obj.removeClassName( "inactive");
      obj.addClassName( "active");
    }
    obj.observe( "focus", function( e) {
      var field = e.element();
      field.addClassName( "focused");
      field.removeClassName( "inactive");
      if ( field.value == text) field.value = "";
    });
    obj.observe( "blur", function( e) {
      var field = e.element();
      field.removeClassName( "focused");
      if ( field.value == "") {
        field.value = text;
        field.addClassName( "inactive");
      } else {
        field.addClassName( "active");
      }
    });
  });
}
