/**
  * Dispatch an event to the modules, will call the
  *  modules with the EventListener() function.
  *
  * @see http://www.nsslive.net/codon/docs/events
  * @param string $eventname
  * @param string $origin
  * @param list $params list additional parameters after $origin
  * @return boolean true by default
  */
 public static function Dispatch($eventname, $origin)
 {
     // if there are parameters added, then call the function
     //	using those additional params
     $params = array();
     $params[0] = $eventname;
     $params[1] = $origin;
     $args = func_num_args();
     if ($args > 2) {
         for ($i = 2; $i < $args; $i++) {
             $tmp = func_get_arg($i);
             array_push($params, $tmp);
         }
     }
     # Load each module and call the EventListen function
     if (!self::$listeners) {
         self::$listeners = array();
     }
     foreach (self::$listeners as $ModuleName => $Events) {
         $ModuleName = strtoupper($ModuleName);
         global ${$ModuleName};
         # Run if no specific events specified, or if the eventname is there
         if (!$Events || in_array($eventname, $Events)) {
             self::$lastevent = $eventname;
             MainController::Run($ModuleName, 'EventListener', $params);
             if (isset(self::$stopList[$eventname]) && self::$stopList[$eventname] == true) {
                 unset(self::$stopList[$eventname]);
                 return false;
             }
         }
     }
     return true;
 }