// Similar to "window.onload...", but both identifies browser by DOM-handling peculiarities // and/or tests whether Javascript is enabled.
if (supportsDynamicLabels()) {
  document.writeln('<style type="text/css">');
  document.writeln('label.dynamic { display:none; }');
  document.writeln('</style>');

  addEvent(window, "load", setupLabels);
}

function setupLabels() {
// get all the labels on the entire page
  var objLabels = document.getElementsByTagName("LABEL");
  var objField;

  for (var i = 0; i < objLabels.length; i++) {
// If label class is "dynamic"...
    if ("dynamic" == objLabels[i].className) {
// ...get its associated form field
      objField = document.getElementById(objLabels[i].aspFor);
// Add event handlers to the 'onfocus' and 'onblur' events
      addEvent(objField, "focus", focusDynamicLabel);
      addEvent(objField, "blur", blurDynamicLabel);
// Save a copy of the label text
      objField._labelText = objLabels[i].firstChild.nodeValue;
// Initialize the display of the label
      objField.value = objField._labelText;
    }
  }

// For every form on page, handle 'onsubmit' event with resetLabels function
  for (var i = 0; i < document.forms.length; i++) {
    addEvent(document.forms[i], "submit", resetLabels);
  }
}

function resetLabels(event) {
// Get all label elements in this form
  var elm = getEventSrc(event);
  var objLabels = elm.getElementsByTagName("LABEL");
  var objField;

  for (var i = 0; i < objLabels.length; i++) {
// If label class is "dynamic"...
    if ("dynamic" == objLabels[i].className) {
// ...get its associated form field
      objField = document.getElementById(objLabels[i].aspFor);
      if (objField._labelText == objField.value) {
        objField.value = "";
      }
    }
  }
}

function addEvent(objObject, strEventName, fnHandler) {
  if (objObject.addEventListener) // For DOM-compliant browsers
    objObject.addEventListener(strEventName, fnHandler, false);
  else if (objObject.attachEvent) // Test for 'attachEvent' object (IE-Win)
    objObject.attachEvent("on" + strEventName, fnHandler);
}

function focusDynamicLabel(event) {
// Get the form field that fired this event
  var elm = getEventSrc(event);
  if (elm._labelText == elm.value) {
    elm.value = "";
  }
}

function blurDynamicLabel(event) {
  var elm = getEventSrc(event);
  if ("" == elm.value) {
    elm.value = elm._labelText;
  }
}

function getEventSrc(e) { // Test for 'EventSrc' object (IE-Win)
  if (!e) e = window.event;

  if (e.originalTarget) // For DOM-compliant browsers
    return e.originalTarget;
  else if (e.srcElement) // Test for 'EventSrc' object (IE-Win)
    return e.srcElement;
}

function supportsDynamicLabels() {
  return document.getElementById && (window.attachEvent || window.addEventListener);
}