//
// 

/*
requires:

JavaScript
    ~/js/site.js

HTML
  (old style)
	<div id="overlayPanel" style="visibility:hidden;display:none;">
	</div>
    <div id="overlayContent" style="visibility:hidden;display:none;">
	</div> 
OR
  (new style)
	<div id="overlayPanel" style="visibility:hidden;display:none;">
	</div>
	<div id="overlayContent" style="visibility:hidden;display:none;">
		<table style="width:100%;height:100%;">
			<tr><td style="height:18px;text-align:center;border-bottom:solid 1px black;"><h2 id="overlayTitle" style="margin:0px;padding:0px;"></h2></td></tr>
			<tr><td style="height:auto;text-align:center;" id="overlayText"></td></tr>
			<tr><td style="height:22px;text-align:center;"><p id="overlayButtons"></p></td></tr>
		</table>
	</div> 
*/

function setOverlayTitle(html)
{
    var ob = e('overlayTitle')
    if (ob)
        ob.innerHTML = html
    else
        setOverlayContent(html)
}
function setOverlayContent(html)
{
    var ob = e('overlayText')
    if (! ob) ob = e('overlayContent')
    if (ob) ob.innerHTML = html
}

function appendOverlayContent(html)
{
    var ob = e('overlayText')
    if (! ob) ob = e('overlayContent')
    if (ob) ob.innerHTML = ob.innerHTML + html
}

function setOverlayButtons(buttons)
{
    var html = ""
    if (buttons)
        for (var i=0;i<buttons.length;i++)
        {
            var b = buttons[i]
            if (! b) continue
            if (typeof(b.label) != "string") continue
            
            html += "<input type=\"button\" value=\""+b.label+"\" onclick=\""+b.action+"\" "
            html += " class=\"b80\" onmouseover=\"obOv(this)\" onmouseout=\"obOu(this)\" "
            html += "  onmouseup=\"obUp(this)\" onmousedown=\"obDn(this)\" "
            if (b.active)
                html += " active=\"1\" style=\"background-image:url(/images/b80_a.png);\" "
            html += "/> " 
        }

    var ob = e('overlayButtons')
    if (ob)
        ob.innerHTML = html
    else
        appendOverlayContent("<p>"+html+"</p>")        
}

function clearOverlayButtons()
{
    var ob = e('overlayButtons')
    if (ob)
        ob.innerHTML = ""
}

function showOverlay()
{
    setVisibility('overlayPanel', true)
    setVisibility('overlayContent', true)
}

function hideOverlay()
{
    setOverlayTitle('')
    setOverlayContent('')
    setOverlayButtons('')
    
    setVisibility('overlayPanel', false)
    setVisibility('overlayContent', false)
}

// ****** Happy button code! *******

// Bits represent Hovered, Focused, and Down states in highest to lowest, left to right order.
// 010 = 2 -> Focused
// 111 = 7 -> Hovered, focused and down

var btnStateAttribute = "buttonState"
var btnTrackFocus = false;

function btnInit()
{
  var inputs = document.getElementsByTagName("input");
  
  var i = inputs.length;
  while (i--)
  {
    if (inputs[i].className == "button80" ||
        inputs[i].className == "button116" ||
        inputs[i].className == "buttonSearch")
    {
      btnSinkEvent(inputs[i], "keydown", btnOnKeyDown);
      btnSinkEvent(inputs[i], "keyup", btnOnKeyUp);
    
      btnSinkEvent(inputs[i], "mousedown", btnOnMouseDown);
      btnSinkEvent(inputs[i], "mouseup", btnOnMouseUp);
      
      if (document.location.toString().toLowerCase().indexOf("e=yes") != -1 &&
          navigator.userAgent.indexOf("MSIE 7") >= 0 &&
          navigator.userAgent.indexOf("Windows NT 6") >= 0)
      {
        btnTrackFocus = true;
      
        btnSinkEvent(inputs[i], "focus", btnOnFocus);
        btnSinkEvent(inputs[i], "blur", btnOnLostFocus);
      }
    
      btnSinkEvent(inputs[i], "mouseover", btnOnMouseOver);
      btnSinkEvent(inputs[i], "mouseout", btnOnMouseOut);
    }
  }
}

function btnGetStateBit(button, index)
{
  var state = button.getAttribute(btnStateAttribute);
  if (!state || index >= state.length)
    return false;
  
  return state.charAt(index) == "1";
}

function btnSetStateBit(button, index, value)
{
  var state = button.getAttribute(btnStateAttribute);
  if (!state || state.length != 3)
    state = "000";
  
  state = state.split("");
  
  state[index] = value ? "1" : "0";
  
  button.setAttribute(btnStateAttribute, state.join(""));
  
  btnRecalculateShift(button);
}

function btnRecalculateShift(button)
{
  if (!button)
    return;
  
  var height = button.offsetHeight;
  
  var offset = 0; 
  
  if (btnGetStateBit(button, 2)) // Down
    offset -= height;
  
  if (btnGetStateBit(button, 1)) // Focused
    offset -= height * 2;
  
  if (btnGetStateBit(button, 0)) // Hovered
    offset -= height * 4;
    
  button.style.backgroundPosition = "0 " + offset + "px";
}

function btnGetEventSource(evt)
{
  if (!evt)
    var evt = window.event;
  
  var source = evt.target;
  if (!source)
    source = evt.srcElement;
    
  if (source.nodeType == 3) // Some Safari silliness.
    source = source.parentNode;
    
  return source;
}

function btnOnKeyDown(evt)
{
  if (!evt)
    var evt = window.event;
  
  if (btnIsActivateKey(evt.keyCode))
    btnOnMouseDown(evt);
}

function btnOnKeyUp(evt)
{
  if (!evt)
    var evt = window.event;
  
  if (btnIsActivateKey(evt.keyCode))
    btnOnMouseUp(evt);
}

function btnIsActivateKey(keyCode)
{
  if (keyCode == 13 || // Carriage Return
      keyCode == 32)   // Space
    return true;
  else
    return false;
}

function btnOnMouseDown(evt)
{
  var button = btnGetEventSource(evt);
  if (!button)
    return;

  btnSetStateBit(button, 2, true);
}

function btnOnMouseUp(evt)
{
  var button = btnGetEventSource(evt);
  if (!button)
    return;

  btnSetStateBit(button, 2, false);
}

function btnOnFocus(evt)
{
  var button = btnGetEventSource(evt);
  if (!button)
    return;

  btnSetStateBit(button, 1, true);
}

function btnOnLostFocus(evt)
{
  var button = btnGetEventSource(evt);
  if (!button)
    return;

  btnSetStateBit(button, 1, false);
}

function btnOnMouseOver(evt)
{
  var button = btnGetEventSource(evt);
  if (!button)
    return;

  btnSetStateBit(button, 0, true);
}

function btnOnMouseOut(evt)
{
  var button = btnGetEventSource(evt);
  if (!button)
    return;
  
  btnSetStateBit(button, 0, false);
  btnSetStateBit(button, 2, false);
}

function btnSinkEvent(ob, event, handler)
{
  if (!ob || !event || !handler)
    return;
    
  if(ob.addEventListener)
    ob.addEventListener(event, handler, false);
  else if (ob.attachEvent)
    var success = ob.attachEvent("on" + event, handler);
}