var csMessageBoxUIDIn = 0;
var csMessageBox = null;
var queuedMessageBoxes = null;
var csMessageBoxFinishFn = null;
var csMessageBoxUID = null;

var csMessageBoxMonitors = null;

csMessageBox = new generalMessageBox(100, "cs_message_box", "session_timeout_box_fv");
csMessageBox.setForceView();
queuedMessageBoxes = new Array();
csMessageBoxMonitors = new Array();

function csMessageBoxAddMonitor(cbFn, messageBoxIDs)
  {
  for(var i = 0; i < messageBoxIDs.length; i++)
    {
    var found = false;
    if (messageBoxIDs[i] == csMessageBoxUID) {found = true;}
    for(var j = 0; j < queuedMessageBoxes.length && !found; j++)
      {
      if (queuedMessageBoxes[j]['uid'] == messageBoxIDs[i])
        {
        found = true;
        break;
        }
      }
    if (!found)
      {
      alert('Unable to add CS Message Box monitor, because message box id '+messageBoxIDs[i]+' does not exist!');
      return;
      }
    }

  var freeSpot = csMessageBoxMonitors.length;
  for(var i = 0; i < csMessageBoxMonitors.length; i++)
    {
    if (csMessageBoxMonitors[i] == null)
      {
      freeSpot = i;
      break;
      }
    }
  csMessageBoxMonitors[freeSpot] = {'cbFn':cbFn, 'mbIDs':messageBoxIDs};
  }

function csMessageBoxCheckTriggerMonitor(clearingID)
  {
  for(var i = 0; i < csMessageBoxMonitors.length; i++)
    {
    if (csMessageBoxMonitors[i] != null)
      {
      var foundID = false;
      for(var j = 0; j < csMessageBoxMonitors[i]['mbIDs'].length; j++)
        {
        if (csMessageBoxMonitors[i]['mbIDs'][j] == clearingID)
          {
          csMessageBoxMonitors[i]['mbIDs'][j] = null;
          }
        if (csMessageBoxMonitors[i]['mbIDs'][j] != null)
          {
          foundID = true;
          }
        }
      if (!foundID)
        {
        csMessageBoxMonitors[i]['cbFn']();
        csMessageBoxMonitors[i] = null;
        }
      }
    }
  }

function csMessageBoxQueue(bodyDiv, finishFn)
  {
  var uid = csMessageBoxUIDIn++;
  if (csMessageBox.isDisplaying())
    {
    queuedMessageBoxes[queuedMessageBoxes.length] = {'div':bodyDiv,'finishFn':finishFn,'uid':uid};
    return uid;
    }
  csMessageBox.set(bodyDiv);
  csMessageBoxFinishFn = finishFn;
  csMessageBoxUID = uid;
  return uid;
  }

function csMessageBoxClear(result)
  {
  csMessageBox.clear();
  if (csMessageBoxFinishFn != null)
    {
    csMessageBoxFinishFn(result);
    csMessageBoxFinishFn = null;
    }
  csMessageBoxCheckTriggerMonitor(csMessageBoxUID);

  if (queuedMessageBoxes.length != 0)
    {
    var element = queuedMessageBoxes.shift();
    csMessageBox.set(element['div']);
    csMessageBoxFinishFn = element['finishFn'];
    csMessageBoxUID = element['uid'];
    }
  }

/*
buttons = new Array();
buttons[0] = {'label':'Yes', 'value':true}
buttons[1] = {'label':'No', 'value':false}
*/
function createCSMessageBox(title, body, buttons)
  {
  var mbNode = document.createElement('div');
  var mbTitle = document.createElement('div');
  var mbButtons = document.createElement('div');
  var mbBody = document.createElement('div');
  mbBody.className = "cs_message_box_text_container";
  mbBody.appendChild(body);

  mbTitle.appendChild(document.createTextNode(title));
  mbTitle.className = "cs_message_box_title";
  mbButtons.className = "cs_message_box_button_container";

  for(var i = buttons.length - 1; i >= 0; i--)
    {
    var buttonNode = document.createElement('input');
    buttonNode.type = "button";
//    buttonNode.appendChild(document.createTextNode(buttons[i]['label']));
    buttonNode.tabIndex = i+1;
    buttonNode.value = buttons[i]['label'];
    buttonNode.retValue = buttons[i]['value'];
    buttonNode.onclick = function()
      {
      csMessageBoxClear(this.retValue);
      }
    buttonNode.className = "cs_message_box_button";
    mbButtons.appendChild(buttonNode);
    }

  mbNode.appendChild(mbTitle);
  mbNode.appendChild(mbBody);
  mbNode.appendChild(mbButtons);

  return mbNode;
  }

function csConfirm(message, finishFn, title)
  {

  if (title == null)
    {
    title = "Confirm...";
    }

  var buttons = new Array();
  buttons[0] = {'label':'Cancel', 'value':false};
  buttons[1] = {'label':'Ok', 'value':true};

  var body = document.createElement('div');
  body.appendChild(document.createTextNode(message));

  return csMessageBoxQueue(createCSMessageBox(title, body, buttons), finishFn);
  }


function csAlert(message, finishFn, title)
  {
  if (title == null)
    {
    title = "Notice...";
    }

  var buttons = new Array();
  buttons[0] = {'label':'Ok', 'value':null};

  var body = document.createElement('div');
  body.appendChild(document.createTextNode(message));

  return csMessageBoxQueue(createCSMessageBox(title, body, buttons), finishFn);
  }
