var Portal_AutoSignoffID = 0;
var Portal_AutoSignoffOverride = false;
var Portal_SessionTimeout = 1200000; // = 20 * 60 * 1000 ms = 20 min; reset by page
var PortalPage_ProxyInterval = null;

function Portal_OpenWindow(vsUrl, vsName, vsFeatures) {
   var ow = null;

   if ((vsFeatures == undefined) || (vsFeatures == null) || (vsFeatures == '')) {
      ow = window.open('', vsName);
   }
   else {
      ow = window.open('', vsName, vsFeatures);
   }

   if (ow.document.forms.length == 0) {
      ow.location.href = ReplaceScriptVariables(vsUrl);
      ow.opener = window;
   }

   ow.focus();
   return false;
}

function Portal_CloseMyself() {
   window.open('', '_self');
   window.close();
}

function ToggleVisibility(sID) {
   var oField = document.getElementById(sID);
   if (oField != null) oField.style.display = (oField.style.display == 'inline') ? 'none' : 'inline';
}

function Portal_UpdateModuleStateAsync(userID, moduleID, collapsed) {
   Boss.Portal.Pages.DesktopDefault.UpdateModuleStateAsync(userID, moduleID, collapsed);
   return true;
}

// dialogs
function PopupHelp(vsHelpCode, vsLabel) {
	var sFeatures = 'top=' + ((screen.height - 600) / 2) + ',left=' + ((screen.width - 800) / 2) + ',height=600,width=800,resizable=no';
	//Portal_OpenWindow(APP_ROOT_PATH + 'Portal/Pages/Help.aspx?HelpCode=' + vsHelpCode + '&HelpLabel=' + vsLabel, 'SelfHelp', sFeatures);
	ShowPortalDialog(APP_ROOT_PATH + 'Portal/Pages/Help.aspx?HelpCode=' + vsHelpCode + '&HelpLabel=' + vsLabel, 'SelfHelp', 800, 600, true, true);
}

function PopupPortalSettings() {
   var sUrl = '{apppath}Portal/Dialogs/PortalSettingsDialog.aspx';
   var result = ShowPortalDialog(sUrl, 'Portal Settings', 725, 380, false);
   return (result.button == 'ok');
}

function DisplayPortalDialog() {
   var sUrl = '{apppath}Portal/Dialogs/ConfigurePortalDialog.aspx';
   var result = ShowPortalDialog(sUrl, 'Configure Portals', 500, 380, false);
   __doPostBack('', 'refresh');
   return false;
}

function PopupBackgroundThread(ThreadName) {
   var sUrl = '{apppath}Portal/Dialogs/PortalThreadDialog.aspx?PortalThreadName=' + ThreadName;
   var result = ShowPortalDialog(sUrl, 'Portal Thread - ' + ThreadName, 600, 275, false);
   __doPostBack('', 'refresh');
   return false;
}

// Ajax SQL
function Portal_ExecuteExists(vsSql) {
   return Boss.Portal.PortalObjects.PortalBasePage.PortalExecuteExists(vsSql);
}

function Portal_ExecuteScalar(vsSql) {
   return Boss.Portal.PortalObjects.PortalBasePage.PortalExecuteScalar(vsSql);
}

function Portal_ExecuteScalar(vsSql) {
   return Boss.Portal.PortalObjects.PortalBasePage.PortalRetrieveStatic(vsSql);
}

// AutoSignoff
function Portal_Ping() {
   var result = Boss.Portal.PortalObjects.PortalUtility.PortalPing();

   if (result.error == null) {
      // reset timeout
      Portal_RegisterAutoSignoff();
   }
   else {
      // problem, so autosignoff
      location.href = APP_ROOT_PATH + 'Portal/Pages/SignOffPage.aspx';
   }
}

function Portal_RegisterAutoSignoff() {
   if (Portal_AutoSignoffOverride) {
      // ping the app 1 minute before session should timeout
      Portal_AutoSignoffID = setTimeout('Portal_Ping()', Portal_SessionTimeout - 60000);
   }
   else {
      Portal_AutoSignoffID = setTimeout('location.href=\'' + APP_ROOT_PATH + 'Portal/Pages/SignOffPage.aspx\';', Portal_SessionTimeout);
   }
}

function Portal_DisableAutoSignoff() {
   if (Portal_AutoSignoffID != 0) clearTimeout(Portal_AutoSignoffID);
   Portal_AutoSignoffID = 0;
}

function Portal_ResetAutoSignoff() {
   Portal_DisableAutoSignoff();
   Portal_RegisterAutoSignoff();
}

// Portal Banner, Page Footer, and scrolling body
function PortalPage_ResizeBody() {
   var hdr = document.getElementById('trPageHead');
   var bdy = document.getElementById('divPageBody');
   var ftr = document.getElementById('trPageFoot');
   var cpy = document.getElementById('spnCopyright');

   if (bdy != null) {
      bdy.style.width  = document.body.clientWidth;
      bdy.style.height = document.body.clientHeight - hdr.offsetHeight - ((ftr != null) ? ftr.offsetHeight : 0);
      bdy.style.display = '';
   }

   if (cpy != null) {
      cpy.style.top = document.body.clientHeight - cpy.offsetHeight;
   }
}

function PortalPage_SetProxyInterval() {
   if (PortalPage_ProxyInterval != null) return;
   PortalPage_ProxyInterval = setInterval('CreateProxyButtons()', 100);
}

function PortalPage_ClickProxyButton() {
   var frm = document.forms[0];

   if (frm != null) {
      var btn = frm.elements[event.srcElement.id];

      if (btn != null) btn.click();
         else alert('Cannot find button on underlying dialog!\n\nAction cancelled.');
   }
   else alert('Cannot find button on underlying dialog!\n\nAction cancelled.');

   event.cancelBubble = true;
   event.returnValue = false;
}

function PortalPage_CreateProxyButtons(sClass, tdID) {
   if ((document == null) || (document.forms.length == 0) || (document.forms[0].elements.length == 0)) return;

   clearInterval(PortalPage_ProxyInterval);
   PortalPage_ProxyInterval = null;

   var td = document.getElementById(tdID);
   if (td == null) return;

   while (td.children.length > 0) {
      td.removeChild(td.children(0));
   }

   var frm = document.forms[0];
   var ctl = null;
   var btn = null;

   for (var i = 0; i < frm.elements.length; i++) {
      ctl = frm.elements[i];

      if ((ctl.className.toLowerCase() == sClass.toLowerCase()) && 
          ((ctl.type.toLowerCase() == 'button') || (ctl.type.toLowerCase() == 'submit'))) {

         // create a copy of the button and duplicate visual aspects
         btn = document.createElement('input');
         btn = ctl.cloneNode(true);

         // tie new button to call child button
         btn.onclick = null;
         btn.className = 'CommandButton';

         td.insertAdjacentHTML('beforeEnd', '&nbsp;');
         td.insertAdjacentElement('beforeEnd', btn);
         btn.attachEvent('onclick', PortalPage_ClickProxyButton);
      }
   }
}

function PageFooter_ToggleMessageSection() {
   var img = document.getElementById('trPageFoot_imgMessagesToggle');
   var tr  = document.getElementById('trPageFoot_trMessages');

   // toggle
   if (tr.style.display == 'none') {
      tr.style.display = '';
      img.src = INTEGRA_IMAGES_PATH + 'expand.gif';
   }
   else {
      tr.style.display = 'none';
      img.src = INTEGRA_IMAGES_PATH + 'collapse.gif';
   }

   return false;
}

