dojo.require('dojo.io.cookie');
dojo.require('dojo.widget.Dialog');

var monitorID;
var monitorContext;
var sessionExpiredDialog;
var messageDialog;
var messageVisible;

function setAppletVisibility(myChildNodes,visibility)
{
   for (var i = 0; i < myChildNodes.length; i++)
   {
      var child = myChildNodes[i];

      //if (child.nodeType != document.ELEMENT_NODE)
      //   continue;

      if (child.tagName == 'APPLET' || child.tagName == 'OBJECT' || child.tagName == 'EMBED')
         child.style.visibility = visibility;

      if (child.tagName == 'IFRAME')
         setAppletVisibility(child.contentWindow.document.childNodes,visibility);
      else if (child.childNodes.length > 0)
         setAppletVisibility(child.childNodes,visibility);
   }
}

function sessionExpired()
{
   clearInterval(monitorID);

   setAppletVisibility(document.childNodes,'hidden');

   sessionExpiredDialog.show();
}

function sessionValid()
{
}

function displayMessage(msg)
{
   if (messageVisible)
      return;

   setAppletVisibility(document.childNodes,'hidden');

   document.getElementById("msg_text").innerHTML = msg;

   messageDialog.show();

   messageVisible = true;
}

function messageDialogClosed()
{
   messageVisible = false;

   document.getElementById("msg_text").innerHTML = "There is no system message.";

   setAppletVisibility(document.childNodes,'visible');
}

function checkSession()
{
   var jsessionid = dojo.io.cookie.getCookie('JSESSIONID');

   if (jsessionid == null)
      return;

   dojo.io.bind(
   {
      url: monitorContext + "/checkSession?sessionIdToCheck=" + jsessionid,
      method: 'post',
      load: function(type, data, evt) { if (data == "expired") sessionExpired(); else if (data == "valid") sessionValid(); else displayMessage(data); },
      error: function(type, data, evt) { alert('AJAX Error occurred.'); }
   });
}

function initSessionDialogs()
{
   sessionExpiredDialog = dojo.widget.byId('sessionExpiredDialog');
   sessionExpiredDialog.setCloseControl(document.getElementById('session_ok'));
   sessionExpiredDialog.setCloseControl(document.getElementById('session_close'));

   messageDialog = dojo.widget.byId('messageDialog');
   messageDialog.setCloseControl(document.getElementById('msg_ok'));
   messageDialog.setCloseControl(document.getElementById('msg_close'));
}

function startSessionMonitor(contextPath,monitorInterval)
{
   initSessionDialogs();

   if (!monitorInterval)
      monitorInterval = 60000;

   monitorContext  = contextPath;
   monitorID       = setInterval(checkSession,monitorInterval);
}
