///////////////////////////////////////////////////////////////////////////////////////////////////
// GGGGG L     OOOOO BBBB  AAAAA L     SSSSS
// G     L     O   O B   B A   A L     S    
// G  GG L     O   O BBBB  AAAAA L     SSSSS
// G   G L     O   O B   B A   A L         S
// GGGGG LLLLL OOOOO BBBB  A   A LLLLL SSSSS
///////////////////////////////////////////////////////////////////////////////////////////////////
var szTRACE = null;

//Image variables for the menu
var iAdminOn, iAdminOff;
var iLogonOn, iLogonOff;
var iLogoffOn, iLogoffOff;
var iRegOn, iRegOff;
var iJoinOn, iJoinOff;
var iTestBOn, iTestBOff;
var iAddrBookOn, iAddrBookOff;
var iCreatMeetOn, iCreatMeetOff;
var iDocManOn, iDocManOff;
var iOfficeOn, iOfficeOff;
var iRecMeetOn, iRecMeetOff;
var iInviteOn, iInviteOff;
var iControlsOn, iControlsOff;


///////////////////////////////////////////////////////////////////////////////////////////////////
// IIIII N   N PPPPP U   U TTTTT       CCCCC H   H EEEEE CCCCC K   K IIIII N   N GGGGG
//   I   NN  N P   P U   U   T         C     H   H E     C     K  K    I   NN  N G    
//   I   N N N PPPP  U   U   T         C     HHHHH EEE   C     KKKK    I   N N N G  GG
//   I   N  NN P     U   U   T         C     H   H E     C     K  K    I   N  NN G   G
// IIIII N   N P     UUUUU   T         CCCC  H   H EEEEE CCCCC K   K IIIII N   N GGGGG
///////////////////////////////////////////////////////////////////////////////////////////////////
var gnFieldType;
var aValidChars;
var fpFinalFunction;
var objNext;

var TYPE_NAME = 1;
var TYPE_PHONE = 2;
var TYPE_MEMO = 4;
var TYPE_EMAIL = 8;
var TYPE_LINKID = 16;
var TYPE_ADDRESS = 32;
var TYPE_DATE = 64;
var TYPE_TABONLY = 128;
var TYPE_USER_PASS = 256;
var TYPE_FINAL = 32768;
var FLAG_MASK = TYPE_FINAL - 1;

var VALID_USER_PASS = [
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
   true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false
   ];

var VALID_ALL_DOS = [
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, false, true, true, true, true, true, true, true, false, true, true, true, true, false, 
   true, true, true, true, true, true, true, true, true, true, false, true, false, true, false, false, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   ];

var VALID_ALL = [
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   ];

var VALID_MEMO = [
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
   true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false
   ];

var VALID_EMAIL = [
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
   false, true, false, false, true, true, true, false, false, false, true, true, true, true, true, false, 
   true, true, true, true, true, true, true, true, true, true, false, false, true, false, true, false, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, true, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
   true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false
   ];

var VALID_DATE = [
   false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, 
   true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false
   ];

var VALID_PHONE = [
   false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, 
   true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   true, false, false, false, false, false, false, false, true, true, true, true, true, true, true, false, 
   true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, true, 
   false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, false, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
   true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false
   ];

var VALID_NAME = [
   false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, 
   true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   true, false, false, false, false, false, false, false, true, true, true, false, true, true, true, false, 
   true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, true, 
   false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, false, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
   true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false
   ];

var VALID_LINKID = [
   false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, 
   true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, true, true, true, false, true, false, true, false, 
   true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, true, 
   false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
   true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, false, 
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
   true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
   true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
   false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false
   ];

function SetType(nType,szObjIn){
   gnFieldType = nType;
   objNext = document.getElementById(szObjIn); 
 
   //Get rid of the final flag (if present)
   nType = nType & FLAG_MASK;

   //For multilanguage, drop to our all valid routine.
   if (nType == TYPE_MEMO){
      aValidChars = VALID_ALL;
      }
   else if (nType == TYPE_USER_PASS){
      aValidChars = VALID_USER_PASS;
      }
   else{
      aValidChars = VALID_ALL_DOS; //XYZZY
      }
   }


function CheckKey(objevent){
   var bNetscape, bReturn = true;
   var nKeyCode;
   var szTemp;

   if (objevent == null){
      nKeyCode = event.keyCode;
      bNetscape = false;
      }
   else{
      nKeyCode = objevent.which;
      bNetscape = true;
      }
   
   while (true){
      if (nKeyCode == 0) break;

      //Check if this is an enter for submission
      if  (((nKeyCode == 13)||(nKeyCode == 9)) && (gnFieldType != TYPE_MEMO)){
         if ((gnFieldType&TYPE_FINAL) != 0){
            fpFinalFunction();
            break;
            }
         else{
            objNext.focus();
            bReturn = false;
            break;
            }
         }   
   
      //If not, check the keys based on the validchars
      if (aValidChars[nKeyCode] == false){
         bReturn = false;
         break;
         }
      break;
      }

   //As far as Netscape is concerned, returning false does not block a keypress
   //  at the element level. So we need to manually remove the last character.
   if ((bNetscape == true) && (bReturn == false)){
      szTemp = String(objevent.target.value);
      szTemp = szTemp.replace(String.fromCharCode(nKeyCode), "");
      objevent.target.value = szTemp;
      }
   
   //Return false to block a keypress (in IE only)
   return bReturn;
   }

///////////////////////////////////////////////////////////////////////////////////////////////////
// M   M IIIII SSSSS CCCCC         FFFFF U   U N   N CCCCC TTTTT IIIII OOOOO N   N SSSSS
// MM MM   I   S     C             F     U   U NN  N C       T     I   O   O NN  N S    
// M M M   I   SSSSS C             FFF   U   U N N N C       T     I   O   O N N N SSSSS
// M   M   I       S C     ..      F     U   U N  NN C       T     I   O   O N  NN     S
// M   M IIIII SSSSS CCCCC ..      F     UUUUU N   N CCCCC   T   IIIII OOOOO N   N SSSSS
///////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: CheckCookie
//purpose: Check if the passed in cookie exists
///////////////////////////////////////////////////////////////////////////////////////////////////
function CheckCookie(szCName){
   var szTemp, szCookieName;
   var bReturn;
   var nCount;
   var aCookieArray, aCookie;

   //assume failure
   bReturn = false;
   
   //enter main t.s. loo
   while(true){
      //put the passed in cookie name in a string, to be sure comparisons work
      szCookieName = new String(szCName);
      
      //Grab the cookie
      szTemp = new String(document.cookie);
      
      //Split the string by the semicolons
      aCookieArray = szTemp.split(";");
      
      //iterate through the cookies
      for (nCount=0;nCount<aCookieArray.length;nCount++){
         //split based on the  = sign
         szTemp = new String(aCookieArray[nCount]);
         aCookie = szTemp.split("=");

         //Grab the cookie name, and be sure to trim any spaces
         szTemp = aCookie[0];
         szTemp = szTemp.replace(" ","");
         
         //if we have a match, signal success, and break out
         if (szCookieName == szTemp){
            bReturn = true;
            break;
            }
         }
      
      //Exit fake loop      
      break;
      }      

   return (bReturn);   
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: CheckOffice
//purpose: Send the user to his/her office
///////////////////////////////////////////////////////////////////////////////////////////////////
function CheckOffice(){
   window.location = "Office.asp";
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: CheckPopup
//purpose: Checks to see if the popupassociated with the top hwnd was launched succesfully.
///////////////////////////////////////////////////////////////////////////////////////////////////
function CheckPopup(){
   var bSuccess = false;
   var szVal;

   //check if the thing has loaded the window yet
   try{
      szVal = top.hWnd.document.PTest.PopTest.value;
      if (szVal == "LOADED"){
         bSuccess = true;
         }
      }
   catch(e){
      }   

   //Return whether or not we found the thing
   return bSuccess;
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: ClearAEInfo
//purpose: Destroys an AEInfo cookie
///////////////////////////////////////////////////////////////////////////////////////////////////
function ClearAEInfo(){
   ClearCookie("AEINFO");
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: ClearCookie
//purpose: clears an arbitrary cookie
///////////////////////////////////////////////////////////////////////////////////////////////////
function ClearCookie(szCName){
   document.cookie = szCName + "=;path=/;";
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: DocumentManager
//purpose: Start a document management session
///////////////////////////////////////////////////////////////////////////////////////////////////
function DocumentManager(szUID, bCookie){
   var bTest, bCookie, bNew = false, bWI = true;

   //Check for a WebInteractive Session
   try{bTest = top.hWnd.Controls.Connection.document.Manager.isActive();}
   catch(CError){bWI = false;}

   //Check for a WebDemo Session
   try{bTest = top.hWnd.Connection.document.Manager.isActive();}
   catch(CError){bNew = true;}
      
   if (bWI == true){
      alert(szAlreadyInSess_Feature);
      }
   else if ((bNew == true) && (bCookie == false)){
      top.bPopup = false;
      top.bRedir = true;
      top.szUrl = '/docmgr/webuser.asp?SID=1000002&UID=' + szUID;
      top.szPopOpts = null;
      top.szPopName = null;
      top.szPopUrl = null;
      top.Display.location= "/InteractiveDemo/TestSystem.asp";
      }
   else if ((bNew == true) && (bCookie == true)){
      window.location = '/docmgr/webuser.asp?SID=1000002&UID=' + szUID;
      }
   else{
      window.location = '/docmgr/UserNav.asp';
      }
   }

///////////////////////////////////////////////////////////////////////////////////////////////////
//Function: GetCharFromNibble
//Purpose: 
///////////////////////////////////////////////////////////////////////////////////////////////////
function GetCharFromNibble(nNibble){
   var CCharArray = new Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P");
   
   return CCharArray[nNibble];
   }

///////////////////////////////////////////////////////////////////////////////////////////////////
//function: GetHandle
//purpose: 
///////////////////////////////////////////////////////////////////////////////////////////////////
function GetHandle(szObjID){
   return document.getElementById(szObjID);
}

///////////////////////////////////////////////////////////////////////////////////////////////////
//Function: GetNibbleFromChar
//Purpose: 
///////////////////////////////////////////////////////////////////////////////////////////////////
function GetNibbleFromChar(cInChar){
   var nReturn;
   
   switch (cInChar){
      case "A":    nReturn = 0; break;
      case "B":    nReturn = 1; break;
      case "C":    nReturn = 2; break;
      case "D":    nReturn = 3; break;
      case "E":    nReturn = 4; break;
      case "F":    nReturn = 5; break;
      case "G":    nReturn = 6; break;
      case "H":    nReturn = 7; break;
      case "I":    nReturn = 8; break;
      case "J":    nReturn = 9; break;
      case "K":    nReturn = 10; break;
      case "L":    nReturn = 11; break;
      case "M":    nReturn = 12; break;
      case "N":    nReturn = 13; break;
      case "O":    nReturn = 14; break;
      case "P":    nReturn = 15; break;
      default:    nReturn = 0; break;
      }

   //pass back the result
   return nReturn;
   }

///////////////////////////////////////////////////////////////////////////////////////////////////
//function: GetOffsetLeft
//purpose: 
///////////////////////////////////////////////////////////////////////////////////////////////////
function GetOffsetLeft(hObject){
   var nOffset = 0;
   
   if (hObject.offsetParent != null){
      nOffset = GetOffsetLeft(hObject.offsetParent);
      }

   nOffset += hObject.offsetLeft;
   
   return nOffset
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: GetOffsetTop
//purpose: 
///////////////////////////////////////////////////////////////////////////////////////////////////
function GetOffsetTop(hObject){
   var nOffset = 0;
   
   if (hObject.offsetParent != null){
      nOffset = GetOffsetTop(hObject.offsetParent);
      }

   nOffset += hObject.offsetTop;
   
   return nOffset
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: HideNode
//purpose: When passed in a node handle, ensures the node, and all child nodes have their
//          visibility style property set to "hidden"
///////////////////////////////////////////////////////////////////////////////////////////////////
function HideNode(CNode){
   var nCount;
   
   //recurse for all child nodes of the current node
   for (nCount=0;nCount<CNode.childNodes.length;nCount++){
      HideNode(CNode.childNodes[nCount]);
      }

   //hide the current node
   if (CNode.tagName != null){
      CNode.style.visibility = "hidden";
      }
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: IsUSSystem
//purpose: Determines if the current system is a US system
///////////////////////////////////////////////////////////////////////////////////////////////////
function IsUSSystem(){
   var bUS = false;
   var szLanguage;

   //Grab the language from the browser
   szLanguage = TestStr(navigator.language);
   if (szLanguage == null){
      szLanguage = TestStr(navigator.browserLanguage);
      if (szLanguage == null)
         szLanguage = "en-us"; 		      			
      }

   szLanguage = szLanguage.toLowerCase();
   
   //check if this is a US system
   if (szLanguage.indexOf("en-us") != -1) bUS = true;
   
   return bUS;
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: LaunchControls
//purpose: Launches WebInteractive control panel
///////////////////////////////////////////////////////////////////////////////////////////////////
function LaunchControls(bCookie, szServer){         
   var nXMax, nXOffset, nXSize;
   var szPage, szSessID, szUserID, szUIType;
   var szLocation, szTitle, szOptions;
   var szMessage;
   var bWI = true, bWD = true;
   var szaRTUrlParams, szaRTUrlVals;
      
   //Set the width of the window
   nXSize = 272;  
   
   //Get the max screen size
   nXMax = screen.width;
   nXOffset = nXMax - nXSize;
   
   //Set our window options
   szPage = "WIConsole/WebInteractive/WebHost.asp";
   szTitle = "HOST_WINDOW";
   szOptions = 'location=0,menubar=0,status=0,resizable=0,height=374,width=262,top=0,left='+nXOffset+';';

   //Set a cookie to indicate what to do in the event of a disconnect
   szaRTUrlParams = new Array("RetryUrl");
   szaRTUrlVals = new Array((szServer + "/interactivedemo/" + szPage));
   SetCookie("TempInfo", szaRTUrlParams, szaRTUrlVals)

   if (bCookie == true){

      //Only launch if we already do not have a session going
      try{bTest = top.hWnd.Connection.document.Manager.isActive();}
      catch(CError){bWD = false;}
      
      try{bTest = top.hWnd.Controls.Connection.document.Manager.isActive();}
      catch(CError){bWI = false;}

      if ((bWD == false) && (bWI == false)){
         top.hWnd = window.open(szPage,szTitle,szOptions);
         top.hWnd.focus();
         }
      else{
         alert(szAlreadyInSess_Feature);
         }
      }
   else{
      top.bPopup = true;
      top.bRedir = true;
      top.szUrl = "/InteractiveDemo/office.asp";
      top.szPopOpts = szOptions;
      top.szPopName = szTitle;
      top.szPopUrl = szPage;
      window.location= "/InteractiveDemo/TestSystem.asp";
      }
   } 


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: LaunchLinktivity
//purpose: Loads the linktivity home page
///////////////////////////////////////////////////////////////////////////////////////////////////
function LaunchLinktivity(){
   var hWnd = window.open("http://www.linktivity.com","Linktivity");
   }

///////////////////////////////////////////////////////////////////////////////////////////////////
//function: LoadImage
//purpose: Loads an image (for mouseovers etc.)
///////////////////////////////////////////////////////////////////////////////////////////////////
function LoadImage(szImg, iImage){
   var fpTest1, fpTest2;
   document.images[szImg].src = iImage.src;
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: LoadMenu
//purpose: Preload menu images for faster swapping
///////////////////////////////////////////////////////////////////////////////////////////////////
function LoadMenu(){
   var hImg;
   var bUS;

   //Check what flag we need to load for English
   hImg = document.getElementById("EngFlag"); 
   bUS = IsUSSystem();
   if (bUS == true)
      hImg.src = "/interactivedemo/images/b_us_flag.gif";
   else
      hImg.src = "/interactivedemo/images/b_uk_flag.gif";
      
   //Load the Logon button
   if (document.images["Logon"] != null){
      //Load the images
      iLogonOn = new Image();iLogonOn.src = "/interactivedemo/images/b_logon_on.gif";
      iLogonOff = new Image();iLogonOff.src = "/interactivedemo/images/b_logon_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["Logon"].onmouseover = Function("LoadImage('Logon',iLogonOn);");
      document.images["Logon"].onmouseout = Function("LoadImage('Logon',iLogonOff);");
      }

   //Load the Logon button
   if (document.images["Logoff"] != null){
      //Load the images
      iLogoffOn = new Image();iLogoffOn.src = "/interactivedemo/images/b_logout_on.gif";
      iLogoffOff = new Image();iLogoffOff.src = "/interactivedemo/images/b_logout_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["Logoff"].onmouseover = Function("LoadImage('Logoff',iLogoffOn);");
      document.images["Logoff"].onmouseout = Function("LoadImage('Logoff',iLogoffOff);");
      }

   //Load the Register button
   if (document.images["Register"] != null){
      //Load the images
      iRegOn = new Image();iRegOn.src = "/interactivedemo/images/b_register_on.gif";
      iRegOff = new Image();iRegOff.src = "/interactivedemo/images/b_register_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["Register"].onmouseover = Function("LoadImage('Register',iRegOn);");
      document.images["Register"].onmouseout = Function("LoadImage('Register',iRegOff);");
      }

   //Load the Superadmin button
   if (document.images["SAdmin"] != null){
      //Load the images
      iAdminOn = new Image();iAdminOn.src = "/interactivedemo/images/b_administration_on.gif";
      iAdminOff = new Image();iAdminOff.src = "/interactivedemo/images/b_administration_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["SAdmin"].onmouseover = Function("LoadImage('SAdmin',iAdminOn);");
      document.images["SAdmin"].onmouseout = Function("LoadImage('SAdmin',iAdminOff);");
      }

   //Load the Join Public Meetings button
   if (document.images["WDJoinPub"] != null){
      //Load the images
      iJoinOn = new Image();iJoinOn.src = "/interactivedemo/images/b_join_meeting_on.gif";
      iJoinOff = new Image();iJoinOff.src = "/interactivedemo/images/b_join_meeting_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["WDJoinPub"].onmouseover = Function("LoadImage('WDJoinPub',iJoinOn);");
      document.images["WDJoinPub"].onmouseout = Function("LoadImage('WDJoinPub',iJoinOff);");
      }

   //Load the test browser button
   if (document.images["WDTestBrwsr"] != null){
      //Load the images
      iTestBOn = new Image();iTestBOn.src = "/interactivedemo/images/b_test_browser_on.gif";
      iTestBOff = new Image();iTestBOff.src = "/interactivedemo/images/b_test_browser_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["WDTestBrwsr"].onmouseover = Function("LoadImage('WDTestBrwsr',iTestBOn);");
      document.images["WDTestBrwsr"].onmouseout = Function("LoadImage('WDTestBrwsr',iTestBOff);");
      }

   //Load the Address Book button
   if (document.images["WDAddrBook"] != null){
      //Load the images
      iAddrBookOn = new Image();iAddrBookOn.src = "/interactivedemo/images/b_address_book_on.gif";
      iAddrBookOff = new Image();iAddrBookOff.src = "/interactivedemo/images/b_address_book_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["WDAddrBook"].onmouseover = Function("LoadImage('WDAddrBook',iAddrBookOn);");
      document.images["WDAddrBook"].onmouseout = Function("LoadImage('WDAddrBook',iAddrBookOff);");
      }

   //Load the create meeting button
   if (document.images["WDCreateMeet"] != null){
      //Load the images
      iCreatMeetOn = new Image();iCreatMeetOn.src = "/interactivedemo/images/b_create_meetings_on.gif";
      iCreatMeetOff = new Image();iCreatMeetOff.src = "/interactivedemo/images/b_create_meetings_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["WDCreateMeet"].onmouseover = Function("LoadImage('WDCreateMeet',iCreatMeetOn);");
      document.images["WDCreateMeet"].onmouseout = Function("LoadImage('WDCreateMeet',iCreatMeetOff);");
      }

   //Load the document management button
   if (document.images["WDDocMan"] != null){
      //Load the images
      iDocManOn = new Image();iDocManOn.src = "/interactivedemo/images/b_document_manager_on.gif";
      iDocManOff = new Image();iDocManOff.src = "/interactivedemo/images/b_document_manager_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["WDDocMan"].onmouseover = Function("LoadImage('WDDocMan',iDocManOn);");
      document.images["WDDocMan"].onmouseout = Function("LoadImage('WDDocMan',iDocManOff);");
      }

   //Load the WD Office button
   if (document.images["WDOffice"] != null){
      //Load the images
      iOfficeOn = new Image();iOfficeOn.src = "/interactivedemo/images/b_my_office_on.gif";
      iOfficeOff = new Image();iOfficeOff.src = "/interactivedemo/images/b_my_office_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["WDOffice"].onmouseover = Function("LoadImage('WDOffice',iOfficeOn);");
      document.images["WDOffice"].onmouseout = Function("LoadImage('WDOffice',iOfficeOff);");
      }

   //Load the recorded meetings button
   if (document.images["WDRecMeet"] != null){
      //Load the images
      iRecMeetOn = new Image();iRecMeetOn.src = "/interactivedemo/images/b_recorded_meetings_on.gif";
      iRecMeetOff = new Image();iRecMeetOff.src = "/interactivedemo/images/b_recorded_meetings_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["WDRecMeet"].onmouseover = Function("LoadImage('WDRecMeet',iRecMeetOn);");
      document.images["WDRecMeet"].onmouseout = Function("LoadImage('WDRecMeet',iRecMeetOff);");
      }

   //Load the WebDemo Admin button
   if (document.images["WDAdmin"] != null){
      //Load the images
      iAdminOn = new Image();iAdminOn.src = "/interactivedemo/images/b_administration_on.gif";
      iAdminOff = new Image();iAdminOff.src = "/interactivedemo/images/b_administration_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["WDAdmin"].onmouseover = Function("LoadImage('WDAdmin',iAdminOn);");
      document.images["WDAdmin"].onmouseout = Function("LoadImage('WDAdmin',iAdminOff);");
      }

   //Load the test browser button
   if (document.images["WITestBrwsr"] != null){
      //Load the images
      iTestBOn = new Image();iTestBOn.src = "/interactivedemo/images/b_test_browser_on.gif";
      iTestBOff = new Image();iTestBOff.src = "/interactivedemo/images/b_test_browser_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["WITestBrwsr"].onmouseover = Function("LoadImage('WITestBrwsr',iTestBOn);");
      document.images["WITestBrwsr"].onmouseout = Function("LoadImage('WITestBrwsr',iTestBOff);");
      }

   //Load the Invite button
   if (document.images["WIInvite"] != null){
      //Load the images
      iInviteOn = new Image();iInviteOn.src = "/interactivedemo/images/b_invite_on.gif";
      iInviteOff = new Image();iInviteOff.src = "/interactivedemo/images/b_invite_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["WIInvite"].onmouseover = Function("LoadImage('WIInvite',iInviteOn);");
      document.images["WIInvite"].onmouseout = Function("LoadImage('WIInvite',iInviteOff);");
      }

   //Load the launch controls button
   if (document.images["WIControls"] != null){
      //Load the images
      iControlsOn = new Image();iControlsOn.src = "/interactivedemo/images/b_launch_controls_on.gif";
      iControlsOff = new Image();iControlsOff.src = "/interactivedemo/images/b_launch_controls_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["WIControls"].onmouseover = Function("LoadImage('WIControls',iControlsOn);");
      document.images["WIControls"].onmouseout = Function("LoadImage('WIControls',iControlsOff);");
      }

   //Load the WD Office button
   if (document.images["WIOffice"] != null){
      //Load the images
      iOfficeOn = new Image();iOfficeOn.src = "/interactivedemo/images/b_my_office_on.gif";
      iOfficeOff = new Image();iOfficeOff.src = "/interactivedemo/images/b_my_office_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["WIOffice"].onmouseover = Function("LoadImage('WIOffice',iOfficeOn);");
      document.images["WIOffice"].onmouseout = Function("LoadImage('WIOffice',iOfficeOff);");
      }

   //Load the WebDemo Admin button
   if (document.images["WIAdmin"] != null){
      //Load the images
      iAdminOn = new Image();iAdminOn.src = "/interactivedemo/images/b_administration_on.gif";
      iAdminOff = new Image();iAdminOff.src = "/interactivedemo/images/b_administration_off.gif";

      //Setup our mousein/out functions for all menu items
      document.images["WIAdmin"].onmouseover = Function("LoadImage('WIAdmin',iAdminOn);");
      document.images["WIAdmin"].onmouseout = Function("LoadImage('WIAdmin',iAdminOff);");
      }

   //Now fall through to our boodleheimer onload function
   Boodleheimer();        
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: Logoff
//purpose: Logs off the user
///////////////////////////////////////////////////////////////////////////////////////////////////
function Logoff(){
   var dDate;
   
   dDate = new Date();
   dDate.setTime(dDate.getTime() - 7000);
   
   //kill the logon cookie
   document.cookie = "LoginInfo=; path=/;";
   SetLocation("home.asp");
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: onInvite
//purpose: pop up the invitation window
///////////////////////////////////////////////////////////////////////////////////////////////////
function onInvite(){
   hWnd = window.open("invite.asp","Invitation","location=0,menubar=0,status=0,resizable=0,height=350,width=400");
   hWnd.focus();            
   } 


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: onlaunch
//purpose: Send the user to his/her office
///////////////////////////////////////////////////////////////////////////////////////////////////
function onlaunch(nType){         
   var nXMax, nXOffset, nXSize;
   var hWnd;
   var szPage, szSessID, szUserID, szUIType;
   var szLocation, szTitle, szOptions;
   var szMessage;
      
   //Set the width of the window
   nXSize = 396;  
   
   //Get the max screen size
   nXMax = screen.width;
   nXOffset = nXMax - nXSize;
   
   szPage = "/webinteractive/WebHost.asp?";
   szSessID = "SID=<%Response.Write(szSessID)%>";
   szUserID = "UID=<%Response.Write(szUniqueID)%>";
   szUIType = "UIType=<%Response.Write(szUI)%>";
   szQueue = "QUEUE=<%Response.Write(szQueue)%>";
   szLocation = szPage + szSessID + "&" + szUserID + "&" + szUIType + "&" + szQueue;
   szTitle = "HOST_<%Response.Write(szSessID)%>";
   if (nType == 1)
      szOptions = 'location=0,menubar=0,status=0,resizable=0,height=450,width=386,top=0,left='+nXOffset+';';
   else
      szOptions = 'location=0,menubar=0,status=0,resizable=0,height=470,width=386,top=0,left='+nXOffset+';';

   hWnd = window.open(szLocation,szTitle,szOptions);

   hWnd.focus();             
   } 


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: onLogOut
//purpose: delete logon cookie
///////////////////////////////////////////////////////////////////////////////////////////////////
function onLogOut(){                       
   return 0;
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//Function: POINTER
//Purpose: 
///////////////////////////////////////////////////////////////////////////////////////////////////
function POINTER(){
   var pVoid;
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//Function: PTDecode
//Purpose: 
///////////////////////////////////////////////////////////////////////////////////////////////////
function PTDecode(szInStr, pOutStr, STR_CODEKEY){
   var nReturn, nStrLen, nKeyLen, nCount, nKeyCount, nHighNibble, nLowNibble;
   var cLowChar, cHighChar, cOrigChar;
   var szKey = STR_CODEKEY, szDecoded = "";
   
   try{
   
      //Generate a code key that is at least half as long as the encoded string
      nStrLen = szInStr.length;
      nKeyLen = STR_CODEKEY.length;
      for (nCount=0;nCount<Math.floor(nStrLen/nKeyLen);nCount++){
         szKey += STR_CODEKEY;
         }

      //Print out debug info if needed
      TRACE("PTDecode: KeyString is (" + szKey + ")");
      TRACE("PTDecode: PlainString is (" + szInStr + ")");

      //Now loop through the input string, and decode it
      nKeyCount = 0;
      for (nCount=0;nCount<nStrLen;nCount+=2){
         //Grab the current characters 
         cLowChar = szInStr.substr(nCount,1);
         cHighChar = szInStr.substr(nCount + 1,1);
         
         //convert to nibbles
         nLowNibble = GetNibbleFromChar(cLowChar);
         nHighNibble = GetNibbleFromChar(cHighChar);
         
         //Get the original character now
         cOrigChar = (nHighNibble << 4) | nLowNibble;

         //Now decode it
         cOrigChar ^= szKey.charCodeAt(nKeyCount,1)
         nKeyCount ++;

         szDecoded += String.fromCharCode(cOrigChar);

         //Print out debug info if needed
         TRACE("PTDecode: cLowChar is (" + cLowChar + ")");
         TRACE("PTDecode: cHighChar is (" + cHighChar + ")");
         TRACE("PTDecode: KeyChar is (" + szKey.charAt(nKeyCount,1) + ")");
         TRACE("PTDecode: Decoded char is (" + String.fromCharCode(cOrigChar) + ")");
         }
  
      //if we are still here, all is well
      pOutStr.pVoid = szDecoded;
      nReturn = 0;
      }
      
   catch(eError){
      alert("PTDecode: ERROR CAUGHT!! - " + eError.description);
      nReturn = -1;
      }

   return nReturn;
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//Function: PTEncode
//Purpose: 
///////////////////////////////////////////////////////////////////////////////////////////////////
function PTEncode(szInStr, pOutStr, STR_CODEKEY){
   var nReturn, nStrLen, nKeyLen, nCount, nHighNibble, nLowNibble;
   var nStrChar, nKeyChar, nEncoded;
   var szKey = "", szEncoded = "";
   
   try{
   
      //First thing to do is generate a code string at least as long as the string to encode
      nStrLen = szInStr.length;
      nKeyLen = STR_CODEKEY.length;
      for (nCount=0;nCount<Math.floor(nStrLen/nKeyLen) + 1;nCount++){
         szKey += STR_CODEKEY;
         }
      
      //Print out debug info if needed
      TRACE("PTEncode: KeyString is (" + szKey + ")");
      TRACE("PTEncode: Encoded is (" + szInStr + ")");

      //Now loop through the input string, and encode it
      for (nCount=0;nCount<nStrLen;nCount++){
         //Grab the current characters 
         nStrChar = szInStr.charCodeAt(nCount);
         nKeyChar = szKey.charCodeAt(nCount);
         
         //XOR the two together
         nEncoded = nKeyChar ^ nStrChar;
         
         //Break the byte into nibbles
         nLowNibble = nEncoded & 15;
         nHighNibble = nEncoded >> 4;
         
         //Convert the nibbles to characters and add them to the string
         szEncoded += GetCharFromNibble(nLowNibble);
         szEncoded += GetCharFromNibble(nHighNibble);

         //Print out debug info if needed
         TRACE("PTEncode: nStrChar is (" + nStrChar + ")");
         TRACE("PTEncode: nKeyChar is (" + nKeyChar + ")");
         TRACE("PTEncode: nEncoded is (" + nEncoded + ")");
         TRACE("PTEncode: EncodedOne is (" + GetCharFromNibble(nLowNibble) + ")");
         TRACE("PTEncode: EncodedOne is (" + GetCharFromNibble(nHighNibble) + ")");
         }
  
      //if we are still here, all is well
      pOutStr.pVoid = szEncoded;
      nReturn = 0;
      }
      
   catch(eError){
      alert("PTEncode: ERROR CAUGHT!! - " + eError.description);
      nReturn = -1;
      }

   return nReturn;
   }

///////////////////////////////////////////////////////////////////////////////////////////////////
//function: RecordPlayback
//purpose: Start a record/PBack session
///////////////////////////////////////////////////////////////////////////////////////////////////
function RecordPlayback(szUID, bCookie){
   var bTest, bCookie, bNew = false, bWI = true;

   //Check for a WebInteractive Session
   try{bTest = top.hWnd.Controls.Connection.document.Manager.isActive();}
   catch(CError){bWI = false;}

   //Check for a WebDemo Session
   try{bTest = top.hWnd.Connection.document.Manager.isActive();}
   catch(CError){bNew = true;}
      
   if (bWI == true){
      alert(szAlreadyInSess_Feature);
      }
   else if ((bNew == true) && (bCookie == false)){
      top.bPopup = false;
      top.bRedir = true;
      top.szUrl = '/recorder/webuser.asp?SID=1000001&UID=' + szUID;
      top.szPopOpts = null;
      top.szPopName = null;
      top.szPopUrl = null;
      top.Display.location= "/InteractiveDemo/TestSystem.asp";
      }
   else if ((bNew == true) && (bCookie == true)){
      window.location = '/recorder/webuser.asp?SID=1000001&UID=' + szUID;
      }
   else{
      window.location = '/recorder/UserNav.asp';
      }
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: SetAEInfo
//purpose: Sets information that can be read by an Add/Edit page
///////////////////////////////////////////////////////////////////////////////////////////////////
function SetAEInfo(szMode, szID1, szID2, szRetPage){
   var aParams = new Array("Mode", "ID1", "ID2", "RP");
   var aValues = new Array(szMode, szID1, szID2, szRetPage);

   SetCookie("AEINFO", aParams, aValues);
   }

///////////////////////////////////////////////////////////////////////////////////////////////////
//function: SetFormInputs
//purpose: 
///////////////////////////////////////////////////////////////////////////////////////////////////
function SetFormInputs(aInputs, aTypes, fpFinalFunc){
   var hItem;
   var nCount, nTemp;
   var szFunction, szTemp;
   var bDebug = false;
   var aTemp;
   
   //Start by setting the final function
   fpFinalFunction = fpFinalFunc;
   
   for (nCount=0;nCount<aInputs.length;nCount++){
      //Get a hold of the current input, try next if not available
      hItem = document.getElementById(aInputs[nCount]); 
      if (hItem == null) continue;
      
      //set the tab order on this guy based on the index, if that's all we need to do try next
      hItem.tabIndex = (nCount + 1);
      if (aTypes[nCount] == TYPE_TABONLY) continue;
      
      //Set the onfocus function 
      if (nCount == (aInputs.length - 1))
         szFunction = "SetType(" + String(aTypes[nCount]) + ", '" + aInputs[nCount] + "');return true;";
      else
         szFunction = "SetType(" + String(aTypes[nCount]) + ", '" + aInputs[nCount + 1] + "');return true;";
      hItem.onfocus = new Function(szFunction);
      
      //Now set the onkeypress function
      hItem.onkeypress = CheckKey;
      }      

   //If we have debug mode set, grab info about the inputs we have.
   if (bDebug == true){
      for (nCount=0;nCount<aInputs.length;nCount++){
         hItem = document.getElementById(aInputs[nCount]); 
         szTemp = "ID (" + aInputs[nCount] + ")\n";
         szTemp += "Tag(" + String(hItem.tagName) + ") tabIndex(" + String(hItem.tabIndex) + ") Type(" + String(hItem.nodeName) + ")\n";

         aTemp = hItem.attributes;
         for (nTemp=0;nTemp<aTemp.length;nTemp++){
            szTemp += "Attribute(" + String(aTemp[nTemp].name) + ")\tvalue(" + String(aTemp[nTemp].value) + ")\t";
            if (nTemp % 3 == 0) szTemp += "\n";
            }
         alert(szTemp);
         }
      }

   
   //As a parting blow, give focus to the first item
   hItem = document.getElementById(aInputs[0]); 
   if (hItem != null) hItem.focus();
   }
   

///////////////////////////////////////////////////////////////////////////////////////////////////
//function: SetInnerHTML
//purpose: Used to set an items inner HTML
///////////////////////////////////////////////////////////////////////////////////////////////////
function SetInnerHTML(szItemID, szInText){
   var hItem;

   hItem = document.getElementById(szItemID);
   hItem.innerHTML = szInText;
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: SetLanguage
//purpose: Sets Language cookie
///////////////////////////////////////////////////////////////////////////////////////////////////
function SetLanguage(szLanguage,nDays){
   var aParams = new Array("UserLanguage");
   var aValues = new Array(szLanguage);
   var szURL = location.href;

   SetPCookie("LANGUAGE", aParams, aValues, nDays);
   location.replace(szURL);
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: SetPCookie
//purpose: Creates an arbitrary persistent cookie
///////////////////////////////////////////////////////////////////////////////////////////////////
function SetPCookie(szCName, aParams, aValues, nDays){
   var szTemp = "";
   var nCount;
   var nTTL;

   //generate Time To Live
   nTTL=new Date((new Date()).getTime()+nDays*86400000);

   //generate the parameter value pairs   
   for (nCount=0;nCount<aParams.length;nCount++){
      szTemp += escape(aValues[nCount]);
      }

   //build the actual cookie string
   document.cookie = szCName + "=" + szTemp + "; expires=" + nTTL.toGMTString() + "; path=/;";
   }



///////////////////////////////////////////////////////////////////////////////////////////////////
//function: SetCookie
//purpose: Creates an arbitrary cookie
///////////////////////////////////////////////////////////////////////////////////////////////////
function SetCookie(szCName, aParams, aValues){
   var szTemp = "";
   var nCount;

   //generate the parameter value pairs   
   for (nCount=0;nCount<aParams.length;nCount++){
      szTemp += aParams[nCount] + "=" + escape(aValues[nCount]) + "&";
      }

   //build the actual cookie string
   document.cookie = szCName + "=" + szTemp + "; path=/;";
   
   }
   

///////////////////////////////////////////////////////////////////////////////////////////////////
//function: SetLocation
//purpose: Ensures that we redirect the entier browser (nut just a frame) to the input page.
//          also ensures that directory safety.
///////////////////////////////////////////////////////////////////////////////////////////////////
function SetLocation(szUrl){
   var szRedirect;
   
   szRedirect = "/InteractiveDemo/" + szUrl;
   
   top.Display.location = szRedirect;
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: ShowNode
//purpose: When passed in a node handle, ensures the node, and all child nodes have their
//          visibility style property set to "visible"
///////////////////////////////////////////////////////////////////////////////////////////////////
function ShowNode(CNode){
   var nCount;
   
   //recurse for all child nodes of the current node
   for (nCount=0;nCount<CNode.childNodes.length;nCount++){
      ShowNode(CNode.childNodes[nCount]);
      }

   //show the current node (if it is a real tag)
   if (CNode.tagName != null){
      CNode.style.visibility = "visible";
      }
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//Function: TestStr
//Purpose: 
///////////////////////////////////////////////////////////////////////////////////////////////////
function TestStr(szIn){
   var pReturn = null;
   var szTest;
   
   while (true){ //not a real loop
      //Bail on nulls
      if (szIn == null) break;

      //Handle undefined objects
      if (typeof(szIn) == "undefined") break;
      
      //Now wrap in a string obj, and test length
      szTest = new String(szIn);
      if (szTest == "undefined") break;
      if (szTest.length <= 0) break;
      
      //If we are still here, return the string
      pReturn = szTest.toString();
            
      //exit fake loop
      break;
      }

   return pReturn;
   }


///////////////////////////////////////////////////////////////////////////////////////////////////
//function: TestSystem
//purpose: Only allow a testsystem if we are not in a meeting
///////////////////////////////////////////////////////////////////////////////////////////////////
function TestSystem(){
   var bWI = true, bWD = true;
   
   //Only launch if we already do not have a session going
   try{bTest = top.hWnd.Connection.document.Manager.isActive();}
   catch(CError){bWD = false;}
   
   try{bTest = top.hWnd.Controls.Connection.document.Manager.isActive();}
   catch(CError){bWI = false;}

   if ((bWD == false) && (bWI == false)){
      top.bPopup = false;
      top.bRedir = true;
      top.szUrl = "/InteractiveDemo/home.asp";
      top.szPopOpts = null;
      top.szPopName = null;
      top.szPopUrl = null;
      SetLocation("TestSystem.asp?mode=user");
      }
   else{
      alert(szAlreadyInSess_BrowserTest);
      }
   }

///////////////////////////////////////////////////////////////////////////////////////////////////
//Function: TRACE
//Purpose: 
///////////////////////////////////////////////////////////////////////////////////////////////////
function TRACE(szIn){
   szTRACE += szIn;
   }

////////////////////////////////////////////////////////////////////////////////////////////////
//Function Name: SetLang
//Purpose: Set language text
////////////////////////////////////////////////////////////////////////////////////////////////
   function SetLang(szInText){
      var hItem;
            
      hItem = document.getElementById('Lang');
      hItem.innerHTML = szInText;      
   }

///////////////////////////////////////////////////////////////////////////////////////////////////
//function: InstantLaunch
//purpose: Launches WebInteractive control panel
///////////////////////////////////////////////////////////////////////////////////////////////////
function InstantLaunch(bCookie, szServer, bCompact){         
   var nXMax, nXOffset, nXSize;
   var szPage, szSessID, szUserID, szUIType;
   var szLocation, szTitle, szOptions;
   var szMessage;
   var bWI = true, bWD = true;
   var szaRTUrlParams, szaRTUrlVals;
  
   //Set the width of the window
   nXSize = 272;  
   
   //Get the max screen size
   nXMax = screen.width;
   nXOffset = nXMax - nXSize;
   
   //Set our window options
   szPage = "WIConsole/WebInteractive/WebHost.asp";
   szTitle = "HOST_WINDOW";
   szOptions = 'location=0,menubar=0,status=0,resizable=0,height=374,width=272,top=0,left='+nXOffset+';';

   if (bCompact) szPage += "?mode=iec";

   //Set a cookie to indicate what to do in the event of a disconnect
   szaRTUrlParams = new Array("RetryUrl");
   szaRTUrlVals = new Array(("http://" + szServer + "/interactivedemo/" + szPage));
   SetCookie("TempInfo", szaRTUrlParams, szaRTUrlVals)

   if (bCookie == true){

      //Only launch if we already do not have a session going
      try{bTest = top.hWnd.Connection.document.Manager.isActive();}
      catch(CError){bWD = false;}
      
      try{bTest = top.hWnd.Controls.Connection.document.Manager.isActive();}
      catch(CError){bWI = false;}

      if ((bWD == false) && (bWI == false)){
         window.location=szPage;
         }
      else{
         alert(szAlreadyInSess_Feature);
         }
      }
   else{
      top.bPopup = false;
      top.bRedir = true;
      top.szUrl = szPage;
      top.szPopOpts = szOptions;
      top.szPopName = szTitle;
      top.szPopUrl = szPage;
      top.szNoPopUrl = szPage;
      if (bCompact){
         top.window.resizeTo(420,260);
         window.status = "cw=400 ch=220 cp=CR";
         window.status = "";
         window.location= "/InteractiveDemo/TestSystem.asp?TYPE=compact";
         }
      else
         window.location= "/InteractiveDemo/TestSystem.asp";
      }
   } 

///////////////////////////////////////////////////////////////////////////////////////////////////
//function: SetClientArea
//purpose: Resizes a window to fit a desired client area
///////////////////////////////////////////////////////////////////////////////////////////////////

function SetClientArea(nWidth, nHeight, wnd, pDw, pDh)
{
   var ref, current_width, current_height;
   var dw = 0;
   var dh = 0;

   // first shot
   wnd.resizeTo(nWidth, nHeight, wnd);

   // create reference to check size
   var ref = wnd.document.createElement("input");

   ref.style.position  = "absolute";
   ref.style.width     = "0px";
   ref.style.height    = "1px";
   ref.style.right     = "0px";
   ref.style.bottom    = "0px";

   // insert it into document and get its position
   wnd.document.body.appendChild(ref);

   current_width =  ref.offsetLeft;
   current_height = ref.offsetTop;

   // this is how much we need to resize to get the desired client area

   var dw = nWidth  - current_width;
   var dh = nHeight - current_height;

   // now set the window to a size that will give us 
   // the correct client area

   wnd.resizeTo(nWidth + dw, nHeight + dh);

   // delete the reference point
   wnd.document.body.removeChild(ref);

   // return the additional size we used so that the caller can use resizeTo instead of
   // calling this function again

   pDw.pVoid = dw;
   pDh.pVoid = dh;
}

