var text_input_hints_selector = 'input[type=text][hint], textarea[hint]';

function textInputHintsFocusHandler(event) {
  var elem = event.element();
  if (elem.hasClassName('text_input_hint')) {
    elem.removeClassName('text_input_hint');
    elem.value = '';
  }
}

function textInputHintsBlurHandler(event) {
  textInputHintsBlur(event.element());
}

function textInputHintsBlur(elem) {
  if (elem.value.empty()) {
    elem.addClassName('text_input_hint');
    elem.value = elem.readAttribute('hint');
  }
}

function textInputHintsSubmit(elem) {
  elem.select(text_input_hints_selector).each(function (e) {
    if (e.hasClassName('text_input_hint'))
      e.value = '';
  });
}

function textInputHintsEnable(elem) {
  var elems;
  if ("string" == typeof elem) {
    elems = $$("#" + elem + " " + text_input_hints_selector);
  } else {
    if (elem.eventName == "dom:loaded")
      elems = $$(text_input_hints_selector);
    else
    if (text_input_hints_selector.split(',').any(function(sel) { return elem.match(sel); }))
      elems = [elem];
    else
      elems = elem.select(text_input_hints_selector);
  }

  elems.each(function (e) {
    Event.observe(e, 'focus', textInputHintsFocusHandler);
    Event.observe(e, 'blur', textInputHintsBlurHandler);
    textInputHintsBlur(e);
  });
}

document.observe('dom:loaded', textInputHintsEnable);

