// ----------------------------------------------------------------------------
// OVERALL SUPPORT FOR MANAGING JAVASCRIPT MODULES (and dependencies)
// ----------------------------------------------------------------------------
// *                                                                          *
// *                           Copyright 2002                                 *
// *                        CHECCO SERVICES, INC.                             *
// *                         All Rights Reserved.                             *
// *                                                                          *
// *     This software contains proprietary and confidential information      *
// *     belonging to CHECCO SERVICES, INC., and may not be decompiled,       *
// *     disassembled, disclosed, reproduced or copied without the prior      *
// *     written consent of CHECCO SERVICES, INC..                            *
// *                                                                          *
// ----------------------------------------------------------------------------

// ----------------------------------------------------------------------------
// Reference Guide
// ----------------------------------------------------------------------------
// Static Objects:
//	jsRegistry (static class)
// Properties:
//	.debug
//	.gArrModules
// Methods:
//	.setDebug (level)
// 	.add (module, dep1, dep2, ..., depN);
// 	.validate (dep1, dep2, ..., depN);
//	.isLoaded (module)
//	.load (src)
// ----------------------------------------------------------------------------

// ----------------------------------------------------------------------------
// Example Usage
// ----------------------------------------------------------------------------
// -- in BrowserUtil.js --
// jsRegistry.add('BrowserUtil','Browser');
// ...
// -- in FormUtil.js --
// jsRegistry.add('FormUtil','BrowserUtil');
// ...
// -- in Calendar.js --
// jsRegistry.add('Calendar','FormUtil');
// ...
// ----------------------------------------------------------------

// ----------------------------------------------------------------------------
// Change History
// ----------------------------------------------------------------------------
// Modified:  John C. Checco
// Web Site:  http://www.checco.com
// History:  2002-08-23
// 	- original 
// ----------------------------------------------------------------------------

// ----------------------------------------------------------------------------
// static object
// ----------------------------------------------------------------------------
var jsRegistry = new Object();
// ----------------------------------------------------------------------------
// static variables
// ----------------------------------------------------------------------------
jsRegistry.gArrModules = new Array('JSREGISTRY');
jsRegistry.debug = 0;
// ----------------------------------------------------------------------------
// static functions
// ----------------------------------------------------------------------------
jsRegistry.add = jsRegistry_add;
jsRegistry.validate = jsRegistry_validate;
jsRegistry.isLoaded = jsRegistry_isLoaded;
jsRegistry.load = jsRegistry_load;

// ----------------------------------------------------------------------------
function jsRegistry_load(src)
{
   document.write("<script language=\"JavaScript\" src=\"" + src + "\"></script>");
}

// ----------------------------------------------------------------------------
function jsRegistry_isLoaded(modname)
{
      var modname = modname.toUpperCase();
      for ( var j = 0; j < jsRegistry.gArrModules.length; j ++ )
      {
         if ( modname == jsRegistry.gArrModules[j] ) return 1;
      }
      return 0;
}

// ----------------------------------------------------------------------------
// jsRegistry_add (module, dep1, dep2, ..., depN)
//
// Returns:   Array of Dependencies not met
//
// UI:        Displays Array of Dependencies not met
// ----------------------------------------------------------------------------
function jsRegistry_add()
{
   var modname = arguments[0];
   // check dependencies first
   var arrFAULT = new Array();
   if ( jsRegistry.debug > 0 ) 
   	alert("jsRegistry.add(" + arguments[0] + ")");
   for ( var i = 1; i < arguments.length; i ++ )
   {
      var arrRET = jsRegistry.validate(arguments[i]);
      if ( arrRET.length ) arrFAULT.push(arrRET);
   }
   if ( arrFAULT.length > 0 ) {
      if ( modname )
      	errmsg = "Javascript [" + modname + "] requires the following modules:\n";
      else
      	errmsg = "The following Javascript dependencies were not met:\n";
      alert(errmsg + arrFAULT.join("\n"));
   }
   // add module when it is satisfied
   if ( modname ) {
      jsRegistry.gArrModules.push(modname.toUpperCase());
   }
   return arrFAULT.length;
}

// ----------------------------------------------------------------------------
// jsRegistry_validate (dep1, dep2, ..., depN)
//
// Returns:   Array of Dependencies not met
// ----------------------------------------------------------------------------
function jsRegistry_validate()
{
   var idx = 0;
   var arrFAULT = new Array();
   if ( jsRegistry.debug > 1 ) 
   	alert("jsRegistry.validate(" + arguments[0] + ")");
   for ( var i = 0; i < arguments.length; i ++ )
   {
      var modname = arguments[i];
      if ( !jsRegistry.isLoaded(modname) ) arrFAULT.push(modname);
   }
   return arrFAULT;
}

