// Default button functionality
// ----------------------------


var currentFocus = null;
var defaultButton = null;
var currentDefaultButton = null;


// Changes the default button
// If the element is a button, set it as default button; otherwise set the actual default button
function setCurrentDefaultButton(o)
{
  if (o == currentDefaultButton) return;
  var oldCurrentDefault = currentDefaultButton;
  if (isButton(o, false)) currentDefaultButton = o; else currentDefaultButton = defaultButton;
  setDefaultVisuals(currentDefaultButton, true);
  if (oldCurrentDefault != currentDefaultButton) setDefaultVisuals(oldCurrentDefault, false);
}

// Installs the focus tracker on the given array of elements; returns the first element of them that could receive the focus, and the
// default button if requested through the DefaultButtonName variable
function reinstallFocusTracker(fields, defButtonName)
{
	var i = 0, firstButton = null, defButton = null;
	for (; i < fields.length; i++)
    if ((fields[i].nodeName == "INPUT" && fields[i].type.toUpperCase() != "HIDDEN") || (fields[i].nodeName == "SELECT") || (fields[i].nodeName == "TEXTAREA") || (fields[i].nodeName == "A")) {
      addEventHandler(fields[i], "blur", function() { currentFocus = null; } );
      addEventHandler(fields[i], "focus", function() { currentFocus = this; setCurrentDefaultButton(this); } );
      if (isButton(fields[i], true) && isVisible(fields[i]) && !fields[i].disabled) {
        if (!firstButton) firstButton = fields[i];
        if (!defButton && defButtonName != "" && fields[i].name == defButtonName) defButton = fields[i];
      }
    }
  return [firstButton, defButton];
}

// Installs the focus tracker and determines the default button
function installFocusTracker()
{
	var result = reinstallFocusTracker(getAllElements(""), DefaultButtonName), firstButton = result[0];
	defaultButton = result[1];
  if (!defaultButton && DefaultButtonName != "NoDefault") defaultButton = firstButton;
  currentDefaultButton = defaultButton;
  setDefaultVisuals(currentDefaultButton, true);
}

function kH(e) {
	var pK = e.which;
  if (pK != 13) return true;
  if (currentFocus && (currentFocus.tagName == 'A' ||
	                     (currentFocus.tagName == 'SELECT' && currentFocus.size == 1) ||
											 (currentFocus.tagName == 'TEXTAREA'))) return true;
  if (currentDefaultButton) {
		if (currentDefaultButton.tagName == 'A') {
      if (hasEventHandler(currentDefaultButton)) fireEvent(currentDefaultButton, "click");
      else if (currentDefaultButton.onclick) currentDefaultButton.onclick();
      else window.location = currentDefaultButton.href;
    } else if (currentDefaultButton.click && !isParentOf(currentDefaultButton, lastButtonPressed)) currentDefaultButton.click();
  }
  return false;
}

addEventHandler(document, "keypress", kH);
addEventHandler(null, "domready", installFocusTracker);