function runtimeRegistry() {
   var _hashEvt     = {};
   var _hashHandler = {};

   function _findCode( strCode, arr ) {
      for( var iii = 0; iii < arr.length; iii++ ) {
         if( arr[iii] == strCode ) {
            return true;
         }
      }
      return false;
   };

   function _fncDefer( voidCode, bRunMany ) {
      this.code     = voidCode;
      this.runOnce  = !bRunMany;
      this.executed = false;

      return this;
   }

   function _addEvent( strCode, strEvt, bDupeOk, bRunMany ) {
      if( strCode ) {
         var arr = _hashEvt[strEvt];
         if( !arr ) { arr = _hashEvt[strEvt] = []; }
         if( bRunMany == null ) { bRunMany = false; }
         if( bDupeOk == true ) {
            arr.push( new _fncDefer( strCode, bRunMany ) );
            _attachHandler( strEvt );
            return true;
         } else if( arr && !_findCode( strCode, arr ) ) {
            arr.push( new _fncDefer( strCode, bRunMany ) );
            _attachHandler( strEvt );
            return true;
         }
      }
      return false;
   };

   function _attachHandler( strEvt ) {
      var eh = _hashHandler[strEvt];
      if( !eh ) {
         _hashHandler[strEvt] = true;
         if( typeof window.addEventListener != 'undefined' ) {           // DOM2
            window.addEventListener( strEvt, _execute, false );
         } else if( typeof window.attachEvent != 'undefined' ) {           // IE
            window.attachEvent( 'on' + strEvt, _execute );
         } else {
            if( window.onload != null ) {
               var oldOnload = window.onload;
               window.onload = function( e ) {
                     oldOnload( e );
                     _execute( e );
                  };
            } else {
               window.onload = _execute( e );
            }
            if( window.onresize != null ) {
               var oldResize = window.onresize;
               window.onresize = function( e ) {
                     oldResize( e );
                     _execute( e ) ;
                  };
            } else {
               window.onresize = _execute( e );
            }
         }
      }
      return false;
   }

   function _execute( evt ) {
      if( evt && evt.type ) {
         var arr = _hashEvt[evt.type];
         if( arr ) {
            for( var iii = 0; iii < arr.length; iii++ ) {
               var dfnc = arr[iii];
               if( !( dfnc.executed && dfnc.runOnce ) ) {
                  switch( typeof ( dfnc.code ) ) {
                     case 'string':
                        var lparen = dfnc.code.indexOf( '(' );
                        if( lparen < 0 ) { dfnc.code += '()'; }
                        eval( dfnc.code );
                        break;
                     case 'function':
                        dfnc.code();
                        break;
                     default:
                        break;
                  }
                  dfnc.executed = true;
               }
            }
         }
      }
      return false;
   };

   this.addEvent       = function( strCode, strEvent, bDupeOk, bRunMany ) {
      return _addEvent( strCode, strEvent, bDupeOk, bRunMany );
   };
   this.addLoadEvent   = function( strCode, bDupeOk ) {
      return _addEvent( strCode, 'load', bDupeOk, this.RUNONCE );
   };
   this.addResizeEvent = function( strCode, bDupeOk ) {
      return _addEvent( strCode, 'resize', bDupeOk, this.RUNMANY );
   };
   this.addUnloadEvent = function( strCode, bDupeOk ) {
      return _addEvent( strCode, 'unload', bDupeOk, this.RUNONCE );
   };

   this.DUPE_OK = true; // use as a documenting constant in calling code like:
                        // RTReg.addLoadEvent( 'false', RTReg.DUPE_OK );

   this.RUNONCE = false;
   this.RUNMANY = true;
   // this.execute = function( strEvt ) { return _execute( strEvt ); }
   this.handle_event = _execute;

   return this;
} // RuntimeRegistry object
var RuntimeRegistry = new runtimeRegistry();
var RTReg = RuntimeRegistry;
// These are kept to maintain backwards compatibility
var RegisterRuntimeFunction = RTReg.addLoadEvent;
var ExecuteRegisteredFunctions = function() { return; }

function BuildQSObject() {
   var obj = {};
	if( self.location.search ) {
		var strSch = self.location.search.substr( 1 );
		var arrSch = strSch.split( '&' );
		for( var iii = 0; iii < arrSch.length; iii++ ) {
			var arrFld = arrSch[iii].split( '=' );
			if( arrFld[0].substr( 0, 4 ) == 'amp;' ) {
				arrFld[0] = arrFld[0].substr( 4 );
			}
			obj[arrFld[0]] = arrFld[1];
		}
	}
	return obj;
}
//RTReg.addLoadEvent( 'BuildQSObject();' );
var gObjQS = BuildQSObject();
