var dOffsets    = null;
var MSGQUEUE = new MessageQueue();

function MessageQueue()
{
    this.uniqueID    = 0;
    this.msgList     = new Array();

    this.addMessage = function( msg )
    {
        ++this.uniqueID;
        var alertObj = new MessageAlert(msg, "msg_"+this.uniqueID, $('msg_'+(this.uniqueID-1)));
        this.msgList.push( alertObj );

        /*
        if ( this.msgList.length >= 6 ) {
            var ref = this.msgList.shift();
            if ( ref && ref.refDiv ) {
                this.remMessage( ref.refDiv );
            }
        }
        */
    }

    this.remMessage = function( refDiv )
    {
        for(var idx=0; idx<this.msgList.length; idx++) {
            if ( this.msgList[idx].refDiv == refDiv ) {
                this.msgList.slice(idx, 1);
                break;
            }
        }

        $('alert_box').removeChild( refDiv );
    }
}


function MessageAlert( msg, msgID, refBefore )
{
    this.strMsg  = msg;
    this.refDiv  = null;

    this.refDiv    = document.createElement('div');
    this.refDiv.setAttribute('id',         msgID);
    this.refDiv.setAttribute("class",      "alert_notice");
    this.refDiv.setAttribute("className",  "alert_notice");
    this.refDiv.setAttribute("onClick",    "MSGQUEUE.remMessage( this );");

    reposition_alert();

    $('alert_box').insertBefore( this.refDiv, refBefore );

    this.refDiv.innerHTML = '<div style="padding:10px;" align="left"><img src="/gfx/EVENT.png" align="left">'+this.strMsg+'</div>';
}




function reposition_alert()
{
    dOffsets = document.viewport.getScrollOffsets();
    var ab = $('alert_box');
    if ( ab == null ) return;
    ab.style.top = dOffsets.top + "px";
}





function getMessage()
{
  var grabAjax = new Ajax.Request( '/xmlhttp/check_messages.php', { method: 'post', onComplete: onGetMessage} );
}



function onGetMessage( originalReq )
{
  var obj = JSON.parse(originalReq.responseText);
  if ( obj.total_messages == 0 ) return;

  if ( String(obj.exp_points) == 'null' ) return;

  if ( obj.exp_points != 0 )
  {
    if ( obj.exp_points < 0 ) MSGQUEUE.addMessage( obj.message + '<br>' + obj.exp_points + ' pts.');
    else  MSGQUEUE.addMessage( obj.message + '<br>+' + obj.exp_points + ' pts.');
  }
  else
  {
    MSGQUEUE.addMessage( obj.message);
  }

  if ( obj.command_stack.length > 0 )
  {
      var i;
      for(i=0; i<obj.command_stack.length; i++) {
          eval( obj.command_stack[i] );
      }
  }
}



setInterval( "reposition_alert()", 1000);
setInterval( "getMessage()",       4000);