// Provides helper functionality for buttons on a page
// ---------------------------------------------------


var lastButtonPressed = null;

// "Disables" element in question. It is not really disabled. Instead,
// a div is placed above it which makes it impossible to click it again
// This should prevent double-clicks and is only to be used for submit buttons
var disableDivTimeoutID = 0;
function disableMe(button)
{
	if (!button) return true;
  if (lastButtonPressed == button) return false;
  var x = getX(button), y = getY(button), width = getWidth(button), height = getHeight(button);
  var disableDiv = findObject("DisableDiv");
  if (!disableDiv) disableDiv = document.createElement("div");
  if (disableDiv) addEventHandlerOnce(disableDiv, "click", function(e) { e.stopPropagation(); } );
	if (!disableDiv.style) return true;
  button.appendChild(disableDiv);
  disableDiv.id = "DisableDiv";
  disableDiv.style.position = "absolute";
  disableDiv.style.zIndex = 90;
  disableDiv.style.backgroundColor = '#ffffff';
  disableDiv.style.borderStyle = 'none';
  setOpacity(disableDiv, 40);
  moveTo(disableDiv, x, y);
  resizeTo(disableDiv, width, height);
  appear(disableDiv);
  lastButtonPressed = button;
  window.clearTimeout(disableDivTimeoutID);
  disableDivTimeoutID = window.setTimeout(function() { var f = findObject("DisableDiv"); if (f) disappear(f); lastButtonPressed = null; }, 7000);
  return true;
}

// Adds the Self Disable event handler to a button
function addSelfDisableHandler(button, buttonPrefix)
{
	var input = button.firstChild;
	while (input && (!input.className || (input.className && input.className.substr(0, buttonPrefix.length) != buttonPrefix))) input = input.nextSibling;
	if (input) addEventHandler(input, "click", function() { disableMe(button); });
}

// Adds various event handling functions to the buttons of a page
// - Class change during mouse-over
// - Automatic disabling when clicked
function applyButtonEventHandlers(fields, buttonPrefix)
{
	var allDivs = fields || getAllElements("div"), i;
	for (i = 0; i < allDivs.length; i++)
		if (allDivs[i].className.substring(0, buttonPrefix.length) == buttonPrefix) {
      if (allDivs[i].className.substr(allDivs[i].className.length - (" NoDisable").length) != " NoDisable") addSelfDisableHandler(allDivs[i], buttonPrefix);
      else allDivs[i].className = allDivs[i].className.replace(/ NoDisable/g, "");
      addEventHandler(allDivs[i], "mouseover", function() { buttonClassSwitch(this, "On"); } );
			addEventHandler(allDivs[i], "mouseout", function() { buttonClassSwitch(this, "On"); } );
		}
}

addEventHandler(null, "domready", function() { applyButtonEventHandlers(null, "Button"); } );
addEventHandler(window, "unload", function() { var f = findObject("DisableDiv"); if (f) disappear(f); lastButtonPressed = null; } );