Element.addMethods({
  defaultValueActsAsHint: function(element){
    element = $(element);
    element._default = element.value;
    element.activateDefaultValueActsAsHint();
    
    return element.observe('focus', function(){
      if(!element._defaultValueActsAsHintActive) return;
      if(element._default != element.value) return;
      element.removeClassName('hint').value = '';
    }).observe('blur', function(){
      if(!element._defaultValueActsAsHintActive) return;
      if(element.value.strip() != '') return;
      element.addClassName('hint').value = element._default;
    }).addClassName('hint');
  },
  
  activateDefaultValueActsAsHint: function(element){
    element = $(element);
    element._defaultValueActsAsHintActive = true;
    return element;
  },
  
  deactivateDefaultValueActsAsHint: function(element){
    element = $(element);
    element._defaultValueActsAsHintActive = false;
    return element;
  },
  
  refreshDefaultValueActsAsHint: function(element){
    element = $(element);
    if(element.value.strip() == '')
      element.addClassName('hint').value = element._default;
    return element;
  },
  
  isDefaultValue: function(element){
    element = $(element);
    return (element._default && element._default == element.value);
  },
  
  clearDefaultValues: function(element){
    element = $(element);
    if(element._default && element._default == element.value) element.value = "";
    return element;
  },
  
  setDefaultValues: function(element){
    element = $(element);
    if(element._default && element.value == "") element.value = element._default;
    return element;
  }
});