/* Element Hints with auto show/hide
 * Taken from http://www.letsfreckle.com
*/

Element.addMethods({
  initializeHint: function(element){
    element = $(element);
    defaultValue = element.getAttribute('hint');
    element._default = defaultValue;
    if(element.value == "" || element.value == defaultValue) {
      element.value = defaultValue;   /* initialize element value if necessary */
      element.addClassName('hint');
    }
    element.activateDefaultValueActsAsHint();
    
    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;
    });
    var form = element.up('form');
    if (form) {
      form.observe('submit', function(){ /* observe form submit */
        if (!element._defaultValueActsAsHintActive) 
          return;
        if (element._default == element.value) {
          element.value = '' /* clear value if it is the default */
        }
      });
    }
    return element;
  },
  
  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.hasClassName('hint') && (element.value == element._default)))
      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;
  }
});
