/*
 * Functions:
 *   ignoreEnter(e)
 *   pressedEnter(e)
 *   clickOnEnter(e, button)
 *   cancelEvent(e)
 *
 * This file should be suitable for script inclusion in a jsp or html file.
 */

// Capture events for NS4 (not really necessary i think but can't hurt)
if (document.captureEvents) document.captureEvents(Event.KEYPRESS);

/*
 * ignoreEnter
 * ------------
 * Ignores a keypress event when the key is the Enter key.  This function can
 * be used to prevent a form from being submitted by the user pressing enter.
 * Put the following:
 *
 *   onKeyPress="return ignoreEnter(event)"
 *
 * as an attribute of the input field in question.
 *
 * Browser that this doesn't work for:
 *   Safari 1.0: does not halt event when onKeyPress event handler returns false
 *   Netscape 4.7/PC: form elements do not run onKeyPress event handlers
 *                    note default for N4.7 is to ignore enter for forms
 *                    with multiple input text fields
 */
function ignoreEnter(e) {
  // Determine if user pressed enter
  var didPressEnter = pressedEnter(e);

  // Cancel event
  if (didPressEnter) cancelEvent(e);

  // Return value
  // (Note: checking if e.returnValue != null causes Safari to crash)
  e.returnValue = !didPressEnter;
  return !didPressEnter;
}

/*
 * pressedEnter
 * ------------
 * Determines if the key pressed in an event is the Enter key.
 */
function pressedEnter(e) {
  // Route event, if necessary
  if (self.routeEvent) routeEvent(e);

  // Get event
  if (!e) e = window.event;

  // Get key code
  var code = 0;
  if (e.keyCode) code = e.keyCode;
  else if (e.which) code = e.which;

  // Determine if key is Enter key
  var didPressEnter = false;
  if (code == 13) didPressEnter = true;

  return didPressEnter;
}

/*
 * clickOnEnter
 * ------------
 * Click a button if the key pressed in an event is the Enter key.  Always
 * returns false.
 */
function clickOnEnter(e, button) {
  var didPressEnter = pressedEnter(e);

  if (didPressEnter) {
    // Click button
    button.click();

    // Cancel event
    cancelEvent(e);

    // Return value
    // (Note: checking if e.returnValue != null causes Safari to crash)
    e.returnValue = false;
    return false;
  }

  return true;
}

function cancelEvent(e) {
  e.cancelBubble = true;
  if (e.stopPropagation) e.stopPropagation();
}