/** Add a formatter and create a chain in the Gdn factory.
  *  This is a conveinience method for chaining formatters without having to deal with the object creation logic.
  *
  * @param string $Type The type of formatter.
  * @param object $Formatter The formatter to install.
  * @param int $Priority The priority of the formatter in the chain. High priorities come first.
  * @return Gdn_FormatterChain The chain object that was created.
  */
 public static function Chain($Type, $Formatter, $Priority = Gdn_FormatterChain::PRIORITY_DEFAULT)
 {
     // Grab the existing formatter from the factory.
     $Formatter = Gdn::Factory($Type . 'Formatter');
     if ($Formatter === NULL) {
         $Chain = new Gdn_FormatterChain();
         Gdn::FactoryInstall($Type . 'Formatter', 'Gdn_FormatterChain', __FILE__, Gdn::FactorySingleton, $Chain);
     } elseif (is_a($Formatter, 'Gdn_FormatterChain')) {
         $Chain = $Formatter;
     } else {
         Gdn::FactoryUninstall($Type . 'Formatter');
         // Look for a priority on the existing object.
         if (property_exists($Formatter, 'Priority')) {
             $Priority = $Formatter->Priority;
         } else {
             $Priority = self::PRIORITY_DEFAULT;
         }
         $Chain = new Gdn_FormatterChain();
         $Chain->Add($Formatter, $Priority);
         Gdn::FactoryInstall($Type . 'Formatter', 'Gdn_FormatterChain', __FILE__, Gdn::FactorySingleton, $Chain);
     }
     $Chain->Add($Formatter, $Priority);
     return $Chain;
 }