// O3AjaxHandler static object
var O3AjaxHandler = new function()
{
  var aPreHandlers  = Array();
  var aHandlers     = Array();
  var fncIncPending = null;
  var fncDecPending = null;

  // Public functions
  function preHandle(iCode, oResponse)
  {
    if(typeof aPreHandlers[iCode] == 'function')
      aPreHandlers[iCode](oResponse);
  }

  function handle(iCode, oResponse)
  {
    if(typeof aHandlers[iCode] == 'function')
      aHandlers[iCode](oResponse);
  }

  function setGlobalPreHandler(iCode, fncHandler)
  {
    aPreHandlers[iCode] = fncHandler;
  }

  function setGlobalHandler(iCode, fncHandler)
  {
    aHandlers[iCode] = fncHandler;
  }

  function setIncPendingHandler(fncHandler)
  {
    fncIncPending = fncHandler;
  }

  function setDecPendingHandler(fncHandler)
  {
    fncDecPending = fncHandler;
  }

  function incrementPending()
  {
    if(typeof fncIncPending == 'function')
      fncIncPending();
  }

  function decrementPending()
  {
    if(typeof fncDecPending == 'function')
      fncDecPending();
  }

  // Bind public functions
  this.preHandle            = preHandle;
  this.handle               = handle;
  this.setGlobalPreHandler  = setGlobalPreHandler;
  this.setGlobalHandler     = setGlobalHandler;
  this.setIncPendingHandler = setIncPendingHandler;
  this.setDecPendingHandler = setDecPendingHandler;
  this.incrementPending     = incrementPending;
  this.decrementPending     = decrementPending;
}

// Create & add some generic handlers (if not overridden codes)
if(AjaxCodeConfig.STRUCTURAL_NO_XML)
  O3AjaxHandler.setGlobalHandler(AjaxCodeConfig.STRUCTURAL_NO_XML, function(oResponse) { alert('Structural error: no XML'); });

if(AjaxCodeConfig.STRUCTURAL_NO_CODE)
  O3AjaxHandler.setGlobalHandler(AjaxCodeConfig.STRUCTURAL_NO_CODE, function(oResponse) { alert('Structural error: no Code');});

if(AjaxCodeConfig.NO_LOGIN)
  O3AjaxHandler.setGlobalHandler(AjaxCodeConfig.NO_LOGIN, function(oResponse) { top.location = Ozone.BASE_LINK + Ozone.LOGIN_MODULE; });

if(AjaxCodeConfig.ERROR)
{
  var fncHandleError = function(oResponse)
  {
    // Fetch message
    var sMessage = oResponse.getElementsByTagName('message')[0].firstChild.data;

    // Show
    alert(sMessage);
  }

  O3AjaxHandler.setGlobalHandler(AjaxCodeConfig.ERROR, fncHandleError);
}