//++
//
//  JavaScript:
//	enc_base
//
//  Provides:
//	enc_include
//	enc_include_once
//	enc_onload_add
//	enc_onload_execute
//	enc_onload_set
//	enc_set_update
//	enc_trigger_updates
//
//  Locally uses:
//
//  Copyright:
//	Copyright &copy; 1987 - 2009 Corpita Pty Ltd
//	15 Bedford Street, Collingwood 3066, Australia
//
//  History:
//	2009-06-30 by SLJ
//	    Fix enc_onload_execute
//	27-Sep-2007 by SLJ
//	    Allow additional arguments for an update
//	22-Jul-2007 by SLJ
//	    Add enc_include and enc_include_once
//	27-Jan-2007 by Simon L. Jackson
//	    Initial version
//
//--

var gbl_in_update = false;
var gbl_onload_functions = new Array ();
var gbl_updates = new Array ();
var gbl_num_included = 0;
var gbl_num_loaded = 0;

//
//  Function:
//	enc_include
//
//  Purpose:
//	Include an external script
//

function enc_include ( arg_file ) {

  var lcl_script;

  lcl_script = lcl_get_script ( arg_file );

  return ( lcl_include_script ( lcl_script ));

}

function lcl_get_script ( arg_file ) {

  var lcl_script;
  var lcl_script_type;

  lcl_script_type = arg_file.substring ( arg_file.lastIndexOf ( '.' ) + 1 );

  lcl_script = document.createElement ( 'script' );

  switch ( lcl_script_type ) {

    case 'js':
      lcl_script.setAttribute ( 'language', 'javascript' );
      lcl_script.setAttribute ( 'type', 'text/javascript' );
      lcl_script.setAttribute ( 'src', arg_file );
      break;

  }

  return ( lcl_script );

}

function lcl_include_script ( arg_script ) {

  var lcl_head;

  lcl_head = document.getElementsByTagName('head').item(0);

  gbl_num_included++;

// IE
  arg_script.onreadystatechange = function () {
    if ( arg_script.readyState == 'loaded'
     || arg_script.readyState == 'complete' )
      gbl_num_loaded++;
  };

// NS
  arg_script.onload = function () { gbl_num_loaded++; };

//  alert ( 'Including ' + arg_script.src );
  lcl_head.appendChild ( arg_script );

  return ( false );

}


//
//  Function:
//	enc_include_once
//
//  Purpose:
//	Include an external script once
//

function enc_include_once ( arg_file ) {

  var lcl_head;
  var lcl_index;
  var lcl_scripts;
  var lcl_script;

  lcl_head = document.getElementsByTagName('head').item(0);

  lcl_script = lcl_get_script ( arg_file );

  lcl_scripts = lcl_head.getElementsByTagName('script');
  for ( lcl_index = 0 ; lcl_index < lcl_scripts.length ; lcl_index++ ) {
    if ( lcl_scripts[lcl_index].src != '' ) {
//  alert ( 'Trying ' + lcl_scripts[lcl_index].src + ' versus ' + lcl_script.src );
      if ( lcl_scripts[lcl_index].type == lcl_script.type
       && lcl_scripts[lcl_index].src == lcl_script.src ) {
	return ( false );
      }
    }
  }

// If we get here, then this file has not been included yet
  return ( lcl_include_script ( lcl_script ));

}


//
//
//

function enc_onload_add ( arg_function ) {

  gbl_onload_functions[gbl_onload_functions.length] = arg_function;

}


//
//  Function:
//	enc_onload_execute
//

gbl_num_waits = 0;
gbl_onload_executed = false;
gbl_wait_interval = 25;

function enc_onload_execute () {

  if ( gbl_onload_executed ) {
    return ( true );
  }

  if ( gbl_num_loaded < gbl_num_included && gbl_num_waits < 20 ) {
    setTimeout ( 'enc_onload_execute ()', gbl_wait_interval );
    gbl_num_waits++;
    if ( gbl_wait_interval < 100 ) {
      gbl_wait_interval = gbl_wait_interval * 2;
    }
    return ( true );
  }

  gbl_onload_executed = true;

  for ( var i = 0 ; i < gbl_onload_functions.length ;  i++ ) {
    gbl_onload_functions[i] ();
  }

  return ( true );

}


//
//
//

function enc_onload_set () {

  window.onload = function () {
    enc_onload_execute ();
  }

}


//
//
//

function enc_set_update ( arg_item, arg_method, arg_args ) {

  var lcl_index;
  var lcl_itemname;
  var lcl_args;

  lcl_itemname = 'document.' + arg_item.form.name + '.' + arg_item.name;

  for ( lcl_index = 0 ; lcl_index < gbl_updates.length ; lcl_index++ )
    if ( gbl_updates[lcl_index].itemname == lcl_itemname )
      return ( true );

  if ( arg_args == null )
    lcl_args = '';
  else
    lcl_args = arg_args.toString ();

  if ( lcl_args != '' )
    if ( lcl_args.substring ( 0, 1 ) != ',' )
      lcl_args = ', ' + lcl_args;

  gbl_updates[gbl_updates.length] =
    { method : arg_method, itemname : lcl_itemname, args : lcl_args };

  return ( true );

}


//
//
//

function enc_trigger_updates () {

  var lcl_index;
  var lcl_statement;
  var lcl_update;

  gbl_in_update = true;

  for ( lcl_index = 0 ; lcl_index < gbl_updates.length ; lcl_index++ ) {
    lcl_update = gbl_updates[lcl_index];
    lcl_statement = lcl_update.method + '(' + lcl_update.itemname + lcl_update.args + ')';
    eval ( lcl_statement );
  }

  gbl_in_update = false;

  return ( true );

}
