//------------------------------------------------------------------------------
// PROJECT:      Stainless SteelCAL
// VERSION:      3.00.024
// Copyright:    © The Steel Construction Institute, 2002-2005, All Rights Reserved
// Developed by: FreeSTYLE Software Ltd.
//_____________________________________________________________________________
// FILE NAME:       Scripts/Frames.js
// FILE LANGUAGE:   [Independent]
// DESCRIPTION:     Top frameset common scripts
// AUTHOR:          Rezo Mesarkishvili
// LATEST REVISION: 20 December 2006
// BY:              Rezo Mesarkishvili
//------------------------------------------------------------------------------

   var Module    = 0;
   var Options   = 0;

   // See checker.js for the rest of Options flags
   var FLG_LOWVERSION = 0x00000010;
   var FLG_SOUNDMUTE  = 0x00000020;
   var FLG_SHOWTREE   = 0x00000040;
   var VAL_SPEEDINDEX = 0x0000000F;

   var NavigVersion = 0;
   var FullVer      = true;
   var ApplyFilters = true;
   var UseLog       = false;
   var SpeedIndex   = 3;

   //----- Search page options ---
   var ClickCounter   = 0;
   var SearchURL      = '';
   var SearchStr      = '';
   var SearchParams   = '';
   var SearchTopPos   = 0;
   var SearchScroll   = false;

   var Resubmit       = false;
   var SessionId      = 0;
   var EMail          = '';
   var Subscribe      = 0;
   var NumbSessions   = 1;
   var SiteAbsPath    = '';
   var SiteURL        = '';
   var IsRegistered   = false;
   
   var TotalArchEvents = 109;
   var TotalEngEvents  = 122;
   var ArchCompleted   = 0;
   var EngCompleted    = 0;
   var TotalCompleted  = 0;

   var ReadyChecker    = null;
   
   var ShColumns        = new Array ( 'Fit', 'Art', 'Fix', 'Str', 'Stc', 'Env' );
   var ShRows           = new Array ( 'Mat', 'Stl', 'Fab', 'Det', 'Env', 'Mar' );   
   var ArchCompletionFlags = new Array ( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
   var EngCompletionFlags  = new Array ( 0, 0, 0, 0, 0, 0, 0, 0 );
   
   var LogRecords = null;
   var GuideWin   = null;

   var Signature = GetParam ( document.location, 'Signature' );
   if ( Signature != 'CMP669' )
   {
      document.location = '../Default.htm';
   }
   
//TMPLNG
var SupportedLanguages = new Array ( 'EN', 'ES', 'PT', null );
//var SupportedLanguages = new Array ( 'EN', 'FR', 'PT', 'CH' );

   var CharSets    = new Array ( 'windows-1252', 'windows-1252', 'windows-1252', 'GB2312' );
   var CharSet     = 'windows-1252';
   var Language    = GetLanguage ();
   var CheckClient = GetParam ( document.location, 'Check' );
   var Resubmit    = GetParam ( document.location, 'RSB' );

   var MainColor  = 'rgb(56,80,114)';
   var LightColor = 'rgb(69,90,119)';
   var DarkColor  = 'rgb(50,72,102)';

   LangDepStrings.charset = CharSet;
   LangDepStrings.src = '../' + Language + '/Scripts/Strings.js';

//-------------------------------------------------------------/ GetParam /-----
function GetParam ( Location, ParamName )
{
   var URL = '' + Location;
   var ParamsInd  = URL.indexOf ( '?' );
   var ParamValue = '';
   if ( ParamsInd > -1 )
   {
      URL = URL.substr ( ParamsInd + 1 ).toUpperCase ();
      var ParamNameUpper = ParamName.toUpperCase ();
      var Params = URL.split ( '&' );
      for ( var i in Params )
      {
         var Param = Params [i].split ( '=' );
         if ( Param [0] == ParamNameUpper )
         {
            ParamValue = unescape ( Param [1] );
            break;
         }
      }
   }
   return ParamValue;
}

//-------------------------------------------------------/ SetupEnvironment /---
function SetupEnvironment ( ModuleId )
{
   switch  ( ModuleId )
   {
      case 2:
         MainColor  = 'rgb(68,108,105)';
         LightColor = 'rgb(82,129,126)';
         DarkColor  = 'rgb(61,88,85)';
         break;
         
      default:
         MainColor  = 'rgb(56,80,114)';
         LightColor = 'rgb(69,90,119)';
         DarkColor  = 'rgb(50,72,102)';
   }
   document.frames.Bl1.document.body.bgColor = MainColor;
   document.frames.Bl2.document.body.bgColor = MainColor;
   document.frames.Bl3.document.body.bgColor = MainColor;
   document.frames.GridStorage.document.body.style.backgroundColor = MainColor;
}

//----------------------------------------------------------/ GetLanguage /-----
function GetLanguage ()
{
   var Lang = GetParam ( document.location, 'Lang' );
   if ( Lang == '' )
   {
      Lang = GetCookie ( 'StlC2Lang' );
   }
   if ( Lang == '' )
   {
      Lang = window.clientInformation.userLanguage.substr ( 0, 2 ).toUpperCase ();
   }
   var IsSupported = false;
   for ( var i in SupportedLanguages )
   {
      if ( Lang == SupportedLanguages [i] )
      {
         CharSet = CharSets [i];
         IsSupported = true;
         break;
      }
   }
   if ( ! IsSupported )
   {
      CharSet = CharSets [0];
      Lang    = SupportedLanguages [0];
   }
   return Lang;
}

//-------------------------------------------------------------/ WriteLog /-----
function WriteLog ( Record )
{
   if (    UseLog
        && LogRecords
      )
   {
      LogRecords [LogRecords.length] = Record;
   }
}

//-----------------------------------------------------------/ CheckReady /-----
function CheckReady ()
{
   if (    LangDepStrings.readyState == 'complete'
        || LangDepStrings.readyState == 'loaded'
      )
   {
      if ( ReadyChecker )
      {
         clearInterval ( ReadyChecker );
         ReadyChecker = null;
      }
      window.top.status = PleaseWait;

      Options = parseInt ( GetCookie ( 'CMP669Options2' ));
      if ( isNaN ( Options ))
      {
         Options = 0;
      }
      else
      {
         SpeedIndex = ( Options & VAL_SPEEDINDEX );
      }
      if (    SpeedIndex <= 0
           || SpeedIndex >  5
         )
      {
         SpeedIndex = 3;
      }
      var LowVerParam  = GetParam ( document.location, 'Low' );
      if ( LowVerParam == 'YES' || LowVerParam == 'TRUE'  )
      {
         FullVer = false;
         Options |= FLG_LOWVERSION;
      }
      else
      if ( LowVerParam == 'NO'  || LowVerParam == 'FALSE' )
      {
         FullVer = true;
         Options &= ~FLG_LOWVERSION;
      }
      else
      {
         FullVer = null; // Get from cookie or detect automatically
      }

      //--- Get registration and other cookies ---
      EMail = GetCookie ( 'StlC2Email' );

      //--- Retrieve completition flags ---
      //--- Module 1 ---
      var CF = GetCookie ( 'CMP669rCF' );
      if ( CF )
      {
         var ValuesArray = CF.split ( '&' );
         for ( var i in ValuesArray )
         {
            var Param = ValuesArray [i].split ( '=' );
            if ( Param [0].substr ( 0, 2 ) == 'CF' )
            {
               var Index    = parseInt ( Param [0].substr ( 2 ));
               var NewFlags = parseInt ( unescape ( Param [1] ));
               if (    ! isNaN ( Index )
                    && ! isNaN ( NewFlags )
                  )
               {
                  ArchCompletionFlags [Index] = NewFlags;
               }
            }
         }
         ArchCompleted = 0;
         for ( var i = 5; i < 16; i ++ )
         {
            for ( var j = 0; j < 32; j ++ )
            {
               if ( ArchCompletionFlags [i] & ( 1 << j ))
               {
                  ArchCompleted ++;
               }
            }
         }
      }
      //--- Module 2 ---
      var CF2 = GetCookie ( 'CMP671rCF' );
      if ( CF2 )
      {
         var ValuesArray2 = CF2.split ( '&' );
         for ( var i in ValuesArray2 )
         {
            var Param2 = ValuesArray2 [i].split ( '=' );
            if ( Param2 [0].substr ( 0, 2 ) == 'CF' )
            {
               var Index2    = parseInt ( Param2 [0].substr ( 2 ));
               var NewFlags2 = parseInt ( unescape ( Param2 [1] ));
               if (    ! isNaN ( Index2 )
                    && ! isNaN ( NewFlags2 )
                  )
               {
                  EngCompletionFlags [Index2] = NewFlags2;
               }
            }
         }
         EngCompleted = 0;
         for ( var i = 4; i < 8; i ++ )
         {
            for ( var j = 0; j < 32; j ++ )
            {
               if ( EngCompletionFlags [i] & ( 1 << j ))
               {
                  EngCompleted ++;
               }
            }
         }
      }
      //--- Run Checker page to verify all necessary features ---
      document.frames.Main.document.location.replace ( '../' + Language + '/Checker.htm' );
      if ( UseLog )
      {
         LogRecords = new Array ();
      }
      return true;
   }
   else
   if ( ! ReadyChecker )
   {
      ReadyChecker = setInterval ( 'CheckReady()', 1000 );
   }
   return false;
}

//------------------------------------------------------------/ OpenGuide /-----
function OpenGuide ( URL, ParentFold )
{
   var GuideURL = ( ParentFold ? '../' : '' ) + '../' + Language;
   if ( URL )
   {
      GuideURL = URL;
   }
   else
   switch ( Module )
   {
      case 1:
         GuideURL += '/UserGuide/Default.htm'
         break;

      case 2:
         GuideURL += '3/UserGuide/Default.htm';
         break;

      default:
         GuideURL += '3/UserGuide/Default0.htm';
         break;
   }
   if (    GuideWin
        && ! GuideWin.closed
      )
   {
      GuideWin.navigate ( GuideURL );
      GuideWin.focus ();
   }
   else
   {
      var Features = 'fullscreen=0,channelmode=0,toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,top=0,left=0,width=';
      Features += ( window.screen.availWidth *  0.6 ) + ',height=';
      Features += ( window.screen.availHeight * 0.9 );
      GuideWin = window.open ( GuideURL, '', Features );
   }
   window.status = ProjectTitle;
}

//----------------------------------------------------------/ OpenSummary /-----
function OpenSummary ( URL )
{
   window.status = ProjectTitle;
   var Features = 'fullscreen=0,channelmode=0,toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,top=0,left=0,width=';
   Features += ( window.screen.availWidth *  0.5 ) + ',height=';
   Features += ( window.screen.availHeight * 0.7 );
   window.open ( URL, '', Features );
}

//-------------------------------------------------------------/ ExitPage /-----
function ExitPage ()
{
   var IsFirst = true;
   var CF = '';
   for ( var i = 0; i < ArchCompletionFlags.length; i ++ )
   {
      if ( ArchCompletionFlags [i] != 0 )
      {
         if ( ! IsFirst )
         {
            CF += '&';
         }
         CF += 'CF' + i + '=' + ArchCompletionFlags [i];
         IsFirst = false;
      }
   }
   SetCookie ( 'CMP669rCF', CF );

   IsFirst = true;
   var CF2 = '';
   for ( var i = 0; i < EngCompletionFlags.length; i ++ )
   {
      if ( EngCompletionFlags [i] != 0 )
      {
         if ( ! IsFirst )
         {
            CF2 += '&';
         }
         CF2 += 'CF' + i + '=' + EngCompletionFlags [i];
         IsFirst = false;
      }
   }
   SetCookie ( 'CMP671rCF', ( CF2 == '0' ? '' : CF2 ));
   SetCookie ( 'StlC2Lang',       Language  );
   SetCookie ( 'StlC2Email', EMail );
   Options &= ~VAL_SPEEDINDEX;
   Options |= SpeedIndex;
   SetCookie ( 'CMP669Options2', Options );
   if (    GuideWin
        && ! GuideWin.closed
      )
   {
      GuideWin.self.close  ();
   }
}

//------------------------------------------------------/ GetActvComplete /-----
function GetActvComplete ( Column, Row, Quadrant, PageVal )
{
   var ActivityInd = ( PageVal != null ? PageVal : ( Column - 1 ) * 20 + ( Row - 1 ) * 4 + ( Quadrant - 1 ));
   return (( EngCompletionFlags [ parseInt ( ActivityInd / 32 ) ] & ( 1 << ( ActivityInd % 32 ))) != 0 );
}

//--------------------------------------------------------/ GetAcComplete /-----
function GetAcComplete ( Column, Row, Quadrant, PageVal )
{
   var ActivityInd = ( PageVal != null ? PageVal : Column * 24 + Row * 4 + Quadrant );
   return (( ArchCompletionFlags [ parseInt ( ActivityInd / 32 ) ] & ( 1 << ( ActivityInd % 32 ))) != 0 );
}

//------------------------------------------------------/ SetActvComplete /-----
function SetActvComplete ( Column, Row, Quadrant, ActvEvents, Index )
{
   var ActvCompleted = true;
   var ArrayInd  = 0;
   var ArrayMask = 0;

   for ( var i = 0; i < ActvEvents.length; i ++ )
   {
      ArrayInd  = parseInt ( ActvEvents [i] / 32 );
      ArrayMask = ( 1 << ( ActvEvents [i] % 32 ));
      if ( i == Index )
      {
         EngCompletionFlags [ArrayInd] |= ArrayMask;
      }
      else
      if (( EngCompletionFlags [ArrayInd] & ArrayMask ) == 0 )
      {
         ActvCompleted = false;
      }
   }
   Main.document.all ( 'Ev' + Index ).src = Main.Evnt1.src;
   Main.document.all ( 'Ev' + Index ).style.display = 'block';

   ShowActvProgress ();
   if ( ActvCompleted )
   {
      UpdateDBProgress ();

      document.frames.Main.document.all.RMMenu.setNodeIcon ( 'N' + Column + Row + Quadrant, 'Ev1.gif' );

      var ActivityInd = ( Column - 1 ) * 20 + ( Row - 1 ) * 4 + ( Quadrant - 1 );
      EngCompletionFlags [ parseInt ( ActivityInd / 32 ) ] |= ( 1 << ( ActivityInd % 32 ));

      var NumbActv = ( document.frames.Main.TopicFlags [ ( Column - 1 ) * 5 + Row - 1 ] & document.frames.Main.FLG_NUMBACTV );
      var CellCompleted = false;
      
      switch ( NumbActv )
      {
         case 1:
            CellCompleted = GetActvComplete ( Column, Row, 1 );
            break;

         case 2:
            CellCompleted =  GetActvComplete ( Column, Row, 1 )
                          && GetActvComplete ( Column, Row, 2 );
            break;

         case 3:
            CellCompleted =  GetActvComplete ( Column, Row, 1 )
                          && GetActvComplete ( Column, Row, 2 )
                          && GetActvComplete ( Column, Row, 3 );
            break;

         case 4:
            CellCompleted =  GetActvComplete ( Column, Row, 1 )
                          && GetActvComplete ( Column, Row, 2 )
                          && GetActvComplete ( Column, Row, 3 )
                          && GetActvComplete ( Column, Row, 4 );
            break;
      }
      if ( CellCompleted )
      {
         Main.Grid.SetGridImage ( Column, Row );
      }
   }
   return ActvCompleted;
}

//--------------------------------------------------------/ SetAcComplete /-----
function SetAcComplete ( Column, Row, Quadrant, ActvEvents, Index )
{
   var AcCompleted = true;
   var ArrayInd  = 0;
   var ArrayMask = 0;

   for ( var i = 0; i < ActvEvents.length; i ++ )
   {
      ArrayInd  = parseInt ( ActvEvents [i] / 32 );
      ArrayMask = ( 1 << ( ActvEvents [i] % 32 ));
      if ( i == Index )
      {
         ArchCompletionFlags [ArrayInd] |= ArrayMask;
      }
      else
      if (( ArchCompletionFlags [ArrayInd] & ArrayMask ) == 0 )
      {
         AcCompleted = false;
      }
   }
   Main.document.all ( 'Ev' + Index ).src = Main.Evnt1.src;
   Main.document.all ( 'Ev' + Index ).style.display = 'block';

   ShowAcProgress ();
   if ( AcCompleted )
   {
      UpdateDBProgress ();
      var ActivityInd = Column * 24 + Row * 4 + Quadrant;
      ArchCompletionFlags [ parseInt ( ActivityInd / 32 ) ] |= ( 1 << ( ActivityInd % 32 ));
      var CellCompleted = Main.CellCompleted ( Column, Row );
      if ( CellCompleted )
      {
         Main.Grid.SetGridImage ( Column, Row );
      }
   }
   return AcCompleted;
}

//---------------------------------------------------------------/ GoHome /-----
function GoHome ( ParentFold )
{
   window.top.open (( ParentFold ? '../' : '' ) + '../' + Language + '/Home.asp?SI=' + window.top.SessionId + '&LG=' + window.top.Language + '&UL=' + window.navigator.userLanguage + '&SC=' + ( '' + window.screen.width + 'x' + window.screen.height + 'x' + window.screen.colorDepth ) + '&EM=' + window.top.EMail + '&SB=' + window.top.Subscribe + '&VN=' + window.top.ProjectVers + '&UA=' + window.navigator.userAgent + '&PL=' + window.navigator.platform + '&LR=' + ( window.top.FullVer == true ? 0 : 1 ) + ( Resubmit == '1' ? '&RSB=1' : '' ));
}

//----------------------------------------------------/ ResetActvComplete /-----
function ResetActvComplete ()
{
   if ( window.confirm ( ProgressConf ) == true )
   {
      for ( var i = 0; i < 8; i ++ )
      {
         EngCompletionFlags [i] = 0;
      }
      EngCompleted   = 0;
      TotalCompleted = 0;

      Main.document.all.Progress.style.display      = 'none';
      Main.document.all.ActvEvents.style.visibility = 'hidden';
      Main.ShowSubtopic ( 0, 0, true );
      Main.EraseProcHelp ( 0 );
      Main.EraseProcHelp ( 1 );
      Main.EraseConcHelp ();
      document.frames.Main.document.all.RMMenu.setAllIcons ( 'Ev0.gif' );
      document.frames.Main.document.all.RMMenu.selectNode ( document.frames.Main.document.all.RMMenu.getSelected (), false );
      return true;
   }
   return false;
}

//------------------------------------------------------/ ResetAcComplete /-----
function ResetAcComplete ()
{
   if ( window.confirm ( ProgressConf ) == true )
   {
      for ( var i = 0; i < 16; i ++ )
      {
         ArchCompletionFlags [i] = 0;
      }
      ArchCompleted  = 0;
      TotalCompleted = 0;

      Main.document.all.Progress.style.display      = 'none';
      Main.document.all.ActvEvents.style.visibility = 'hidden';
      Main.Grid.EraseAllCells ( 'f' );
      Main.CloseActivity ();
      return true;
   }
   return false;
}

//-----------------------------------------------------/ ShowActvProgress /-----
function ShowActvProgress ()
{
   var Completed = 0;
   for ( var i = 4; i < 8; i ++ )
   {
      for ( var j = 0; j < 32; j ++ )
      {
         if ( EngCompletionFlags [i] & ( 1 << j ))
         {
            Completed ++;
         }
      }
   }
   if ( Completed > 0 )
   {
      if ( EngCompleted < Completed )
      {
         EngCompleted = Completed;
      }
      var ProgressPrcnt = Math.round ( 100.0 * Completed / TotalEngEvents );
      if (    Completed == TotalEngEvents
           || ProgressPrcnt > 100
         )
      {
         ProgressPrcnt = 100;
      }
      Main.document.all.ProgressSlide.style.width = ProgressPrcnt;
      Main.document.all.ProgressPrcnt.innerText = ProgressPrcnt + '%';
      Main.document.all.Progress.style.display = 'block';
   }
   else
   {
      Main.document.all.Progress.style.display = 'none';
   }
}

//-------------------------------------------------------/ ShowAcProgress /-----
function ShowAcProgress ()
{
   var Completed = 0;
   for ( var i = 5; i < 16; i ++ )
   {
      for ( var j = 0; j < 32; j ++ )
      {
         if ( ArchCompletionFlags [i] & ( 1 << j ))
         {
            Completed ++;
         }
      }
   }
   if ( Completed > 0 )
   {
      if ( ArchCompleted < Completed )
      {
         ArchCompleted = Completed;
      }
      var ProgressPrcnt = Math.round ( 100.0 * Completed / TotalArchEvents );
      if (    Completed == TotalArchEvents
           || ProgressPrcnt > 100
         )
      {
         ProgressPrcnt = 100;
      }
      Main.document.all.ProgressSlide.style.width = ProgressPrcnt;
      Main.document.all.ProgressPrcnt.innerText = ProgressPrcnt + '%';
      Main.document.all.Progress.style.display = 'block';
   }
   else
   {
      Main.document.all.Progress.style.display = 'none';
   }
}

//-----------------------------------------------------/ UpdateDBProgress /-----
function UpdateDBProgress ()
{
   if (    TotalCompleted < ArchCompleted + EngCompleted
        && Main
        && Main.frames.ServerFrm
      )
   {
      TotalCompleted = ArchCompleted + EngCompleted;
      Main.frames.ServerFrm.navigate ( SiteURL + '/Support/Progress.asp?SID=' + SessionId + '&UP=' + TotalCompleted + '&OP=' + ( TotalArchEvents + TotalEngEvents ));
   }
}

//____________________________________________________________ End of File _____
