//=============================================================================
// GoodHeavens:
// Global object that provides client-side document event handlers used by
// GoodHeavens.Web.UI controls.
// Call AddOnXXX with script as argument to hook into the OnXXX events.
//=============================================================================
function GoodHeavens_Handlers ()
{
  this._OnDocumentLoaded = new Array ();
  this.Event = null;
}
GoodHeavens = new GoodHeavens_Handlers ();

function GoodHeavens_AddOnDocumentLoaded (AHandler)
{
  this._OnDocumentLoaded[this._OnDocumentLoaded.length] = AHandler;
}
GoodHeavens.AddOnDocumentLoaded = GoodHeavens_AddOnDocumentLoaded;

function GoodHeavens_OnDocumentLoadedHandler ()
{
  for (var iEvent = 0; iEvent < this._OnDocumentLoaded.length; iEvent++)
  {
    eval (this._OnDocumentLoaded[iEvent]);
  }
}
GoodHeavens.OnDocumentLoadedHandler = GoodHeavens_OnDocumentLoadedHandler;
window.onload = new Function ('GoodHeavens.OnDocumentLoadedHandler();');

function GoodHeavens_RegisterEvent (e)
{
  this.Event = new GoodHeavens_Event (e);
}
GoodHeavens.RegisterEvent = GoodHeavens_RegisterEvent;

function GoodHeavens_Event (e)
{
  this._Event = e;
  if (typeof (e) != 'undefined')
  {
    if (typeof (e.srcElement) != 'undefined')
    {
      this.srcElement = this._Event.srcElement;
    }
    else if (typeof (e) != 'undefined')
    {
      this.srcElement = this._Event.currentTarget || this._Event.target;
    }
    this.clientX = this._Event.clientX;
    this.clientY = this._Event.clientY;
  }
}

function GoodHeavens_CancelEvent ()
{
  if (this._Event)
  {
    if (typeof (this._Event._Event.returnValue) != 'undefined')
    {
      this._Event._Event.returnValue = false;
    }
    this._Event._Event.cancelBubble = true;
  }
}
GoodHeavens.CancelEvent = GoodHeavens_CancelEvent;

function GetElement (AName)
{
  var
    elt = document.getElementById (AName);
  if (elt)
  {
    if (typeof (elt.length) != 'undefined')
    {
      var all = elt;
      elt = elt[0];
      for (var i = 0; i < all.length; i++)
      {
        if (all[i].id == AName)
        {
          elt = all[i];
          break;
        }
      }
    }
  }
  return elt;
}

function AddEventHandler (AElt, AEventType, AHandlerName)
{
  if (typeof (AElt.addEventListener) == 'undefined')
  {
    var sHandler = AHandlerName + '();';
    var fnHandler;
    eval ('fnHandler = AElt.on' + AEventType);
    if (typeof (fnHandler) == 'function')
    {
      var sOld = fnHandler.toString();
      sHandler += ';' + sOld.substring (sOld.indexOf('{') + 1, sOld.lastIndexOf('}'));
    }
    eval ('AElt.on' + AEventType + ' = new Function (sHandler)');
  }
  else
  {
    eval ('AElt.addEventListener (AEventType.toLower(), ' + AHandlerName + ', true)');
  }
}
