]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-includes/class-simplepie.php
WordPress 4.2.4-scripts
[autoinstalls/wordpress.git] / wp-includes / class-simplepie.php
index 21cc5d24eb02247a0c3c68212a8e1b63420f741b..64f9fa9be4fcdf63f46d9798326424145a4bd9b6 100644 (file)
@@ -1,11 +1,71 @@
 <?php
+if ( ! class_exists( 'SimplePie' ) ) :
+
+// Load classes we will need.
+require ABSPATH . WPINC . '/SimplePie/Misc.php';
+require ABSPATH . WPINC . '/SimplePie/Cache.php';
+require ABSPATH . WPINC . '/SimplePie/File.php';
+require ABSPATH . WPINC . '/SimplePie/Sanitize.php';
+require ABSPATH . WPINC . '/SimplePie/Registry.php';
+require ABSPATH . WPINC . '/SimplePie/IRI.php';
+require ABSPATH . WPINC . '/SimplePie/Locator.php';
+require ABSPATH . WPINC . '/SimplePie/Content/Type/Sniffer.php';
+require ABSPATH . WPINC . '/SimplePie/XML/Declaration/Parser.php';
+require ABSPATH . WPINC . '/SimplePie/Parser.php';
+require ABSPATH . WPINC . '/SimplePie/Item.php';
+require ABSPATH . WPINC . '/SimplePie/Parse/Date.php';
+require ABSPATH . WPINC . '/SimplePie/Author.php';
+
+/**
+ * WordPress autoloader for SimplePie.
+ *
+ * @since 3.5.0
+ */
+function wp_simplepie_autoload( $class ) {
+       if ( 0 !== strpos( $class, 'SimplePie_' ) )
+               return;
+
+       $file = ABSPATH . WPINC . '/' . str_replace( '_', '/', $class ) . '.php';
+       include( $file );
+}
+
+if ( function_exists( 'spl_autoload_register' ) ) {
+       /**
+        * We autoload classes we may not need.
+        *
+        * If SPL is disabled, we load all of SimplePie manually.
+        *
+        * Core.php is not loaded manually, because SimplePie_Core (a deprecated class)
+        * was never included in WordPress core.
+        */
+       spl_autoload_register( 'wp_simplepie_autoload' );
+} else {
+       require ABSPATH . WPINC . '/SimplePie/Cache/Base.php';
+       require ABSPATH . WPINC . '/SimplePie/Cache/DB.php';
+       require ABSPATH . WPINC . '/SimplePie/Cache/File.php';
+       require ABSPATH . WPINC . '/SimplePie/Cache/Memcache.php';
+       require ABSPATH . WPINC . '/SimplePie/Cache/MySQL.php';
+       require ABSPATH . WPINC . '/SimplePie/Caption.php';
+       require ABSPATH . WPINC . '/SimplePie/Category.php';
+       require ABSPATH . WPINC . '/SimplePie/Copyright.php';
+       require ABSPATH . WPINC . '/SimplePie/Credit.php';
+       require ABSPATH . WPINC . '/SimplePie/Decode/HTML/Entities.php';
+       require ABSPATH . WPINC . '/SimplePie/Enclosure.php';
+       require ABSPATH . WPINC . '/SimplePie/gzdecode.php';
+       require ABSPATH . WPINC . '/SimplePie/HTTP/Parser.php';
+       require ABSPATH . WPINC . '/SimplePie/Net/IPv6.php';
+       require ABSPATH . WPINC . '/SimplePie/Rating.php';
+       require ABSPATH . WPINC . '/SimplePie/Restriction.php';
+       require ABSPATH . WPINC . '/SimplePie/Source.php';
+}
+
 /**
  * SimplePie
  *
  * A PHP-Based RSS and Atom Feed Framework.
  * Takes the hard work out of managing a complete RSS/Atom solution.
  *
- * Copyright (c) 2004-2008, Ryan Parman and Geoffrey Sneddon
+ * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without modification, are
  * POSSIBILITY OF SUCH DAMAGE.
  *
  * @package SimplePie
- * @version 1.1.3
- * @copyright 2004-2008 Ryan Parman, Geoffrey Sneddon
+ * @version 1.3.1
+ * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue
  * @author Ryan Parman
  * @author Geoffrey Sneddon
+ * @author Ryan McCue
  * @link http://simplepie.org/ SimplePie
- * @link http://simplepie.org/support/ Please submit all bug reports and feature requests to the SimplePie forums
  * @license http://www.opensource.org/licenses/bsd-license.php BSD License
- * @todo phpDoc comments
  */
 
 /**
@@ -51,12 +110,13 @@ define('SIMPLEPIE_NAME', 'SimplePie');
 /**
  * SimplePie Version
  */
-define('SIMPLEPIE_VERSION', '1.1.3');
+define('SIMPLEPIE_VERSION', '1.3.1');
 
 /**
  * SimplePie Build
+ * @todo Hardcode for release (there's no need to have to call SimplePie_Misc::get_build() only every load of simplepie.inc)
  */
-define('SIMPLEPIE_BUILD', 20081219);
+define('SIMPLEPIE_BUILD', gmdate('YmdHis', SimplePie_Misc::get_build()));
 
 /**
  * SimplePie Website URL
@@ -241,6 +301,21 @@ define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', 32);
  */
 define('SIMPLEPIE_CONSTRUCT_ALL', 63);
 
+/**
+ * Don't change case
+ */
+define('SIMPLEPIE_SAME_CASE', 1);
+
+/**
+ * Change to lowercase
+ */
+define('SIMPLEPIE_LOWERCASE', 2);
+
+/**
+ * Change to uppercase
+ */
+define('SIMPLEPIE_UPPERCASE', 4);
+
 /**
  * PCRE for HTML attributes
  */
@@ -318,10 +393,30 @@ define('SIMPLEPIE_NAMESPACE_GEORSS', 'http://www.georss.org/georss');
 define('SIMPLEPIE_NAMESPACE_MEDIARSS', 'http://search.yahoo.com/mrss/');
 
 /**
- * Wrong Media RSS Namespace
+ * Wrong Media RSS Namespace. Caused by a long-standing typo in the spec.
  */
 define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG', 'http://search.yahoo.com/mrss');
 
+/**
+ * Wrong Media RSS Namespace #2. New namespace introduced in Media RSS 1.5.
+ */
+define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG2', 'http://video.search.yahoo.com/mrss');
+
+/**
+ * Wrong Media RSS Namespace #3. A possible typo of the Media RSS 1.5 namespace.
+ */
+define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG3', 'http://video.search.yahoo.com/mrss/');
+
+/**
+ * Wrong Media RSS Namespace #4. New spec location after the RSS Advisory Board takes it over, but not a valid namespace.
+ */
+define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG4', 'http://www.rssboard.org/media-rss');
+
+/**
+ * Wrong Media RSS Namespace #5. A possible typo of the RSS Advisory Board URL.
+ */
+define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG5', 'http://www.rssboard.org/media-rss/');
+
 /**
  * iTunes RSS Namespace
  */
@@ -337,11 +432,6 @@ define('SIMPLEPIE_NAMESPACE_XHTML', 'http://www.w3.org/1999/xhtml');
  */
 define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', 'http://www.iana.org/assignments/relation/');
 
-/**
- * Whether we're running on PHP5
- */
-define('SIMPLEPIE_PHP5', version_compare(PHP_VERSION, '5.0.0', '>='));
-
 /**
  * No file source
  */
@@ -372,15 +462,13 @@ define('SIMPLEPIE_FILE_SOURCE_CURL', 8);
  */
 define('SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS', 16);
 
+
+
 /**
  * SimplePie
  *
  * @package SimplePie
- * @version "Razzleberry"
- * @copyright 2004-2007 Ryan Parman, Geoffrey Sneddon
- * @author Ryan Parman
- * @author Geoffrey Sneddon
- * @todo Option for type of fetching (cache, not modified header, fetch, etc.)
+ * @subpackage API
  */
 class SimplePie
 {
@@ -388,55 +476,55 @@ class SimplePie
         * @var array Raw data
         * @access private
         */
-       var $data = array();
+       public $data = array();
 
        /**
         * @var mixed Error string
         * @access private
         */
-       var $error;
+       public $error;
 
        /**
         * @var object Instance of SimplePie_Sanitize (or other class)
         * @see SimplePie::set_sanitize_class()
         * @access private
         */
-       var $sanitize;
+       public $sanitize;
 
        /**
         * @var string SimplePie Useragent
         * @see SimplePie::set_useragent()
         * @access private
         */
-       var $useragent = SIMPLEPIE_USERAGENT;
+       public $useragent = SIMPLEPIE_USERAGENT;
 
        /**
         * @var string Feed URL
         * @see SimplePie::set_feed_url()
         * @access private
         */
-       var $feed_url;
+       public $feed_url;
 
        /**
         * @var object Instance of SimplePie_File to use as a feed
         * @see SimplePie::set_file()
         * @access private
         */
-       var $file;
+       public $file;
 
        /**
         * @var string Raw feed data
         * @see SimplePie::set_raw_data()
         * @access private
         */
-       var $raw_data;
+       public $raw_data;
 
        /**
         * @var int Timeout for fetching remote files
         * @see SimplePie::set_timeout()
         * @access private
         */
-       var $timeout = 10;
+       public $timeout = 10;
 
        /**
         * @var bool Forces fsockopen() to be used for remote files instead
@@ -444,7 +532,7 @@ class SimplePie
         * @see SimplePie::force_fsockopen()
         * @access private
         */
-       var $force_fsockopen = false;
+       public $force_fsockopen = false;
 
        /**
         * @var bool Force the given data/URL to be treated as a feed no matter what
@@ -452,56 +540,49 @@ class SimplePie
         * @see SimplePie::force_feed()
         * @access private
         */
-       var $force_feed = false;
-
-       /**
-        * @var bool Enable/Disable XML dump
-        * @see SimplePie::enable_xml_dump()
-        * @access private
-        */
-       var $xml_dump = false;
+       public $force_feed = false;
 
        /**
         * @var bool Enable/Disable Caching
         * @see SimplePie::enable_cache()
         * @access private
         */
-       var $cache = true;
+       public $cache = true;
 
        /**
         * @var int Cache duration (in seconds)
         * @see SimplePie::set_cache_duration()
         * @access private
         */
-       var $cache_duration = 3600;
+       public $cache_duration = 3600;
 
        /**
         * @var int Auto-discovery cache duration (in seconds)
         * @see SimplePie::set_autodiscovery_cache_duration()
         * @access private
         */
-       var $autodiscovery_cache_duration = 604800; // 7 Days.
+       public $autodiscovery_cache_duration = 604800; // 7 Days.
 
        /**
         * @var string Cache location (relative to executing script)
         * @see SimplePie::set_cache_location()
         * @access private
         */
-       var $cache_location = './cache';
+       public $cache_location = './cache';
 
        /**
         * @var string Function that creates the cache filename
         * @see SimplePie::set_cache_name_function()
         * @access private
         */
-       var $cache_name_function = 'md5';
+       public $cache_name_function = 'md5';
 
        /**
         * @var bool Reorder feed by date descending
         * @see SimplePie::enable_order_by_date()
         * @access private
         */
-       var $order_by_date = true;
+       public $order_by_date = true;
 
        /**
         * @var mixed Force input encoding to be set to the follow value
@@ -509,239 +590,132 @@ class SimplePie
         * @see SimplePie::set_input_encoding()
         * @access private
         */
-       var $input_encoding = false;
+       public $input_encoding = false;
 
        /**
         * @var int Feed Autodiscovery Level
         * @see SimplePie::set_autodiscovery_level()
         * @access private
         */
-       var $autodiscovery = SIMPLEPIE_LOCATOR_ALL;
-
-       /**
-        * @var string Class used for caching feeds
-        * @see SimplePie::set_cache_class()
-        * @access private
-        */
-       var $cache_class = 'SimplePie_Cache';
-
-       /**
-        * @var string Class used for locating feeds
-        * @see SimplePie::set_locator_class()
-        * @access private
-        */
-       var $locator_class = 'SimplePie_Locator';
-
-       /**
-        * @var string Class used for parsing feeds
-        * @see SimplePie::set_parser_class()
-        * @access private
-        */
-       var $parser_class = 'SimplePie_Parser';
-
-       /**
-        * @var string Class used for fetching feeds
-        * @see SimplePie::set_file_class()
-        * @access private
-        */
-       var $file_class = 'SimplePie_File';
-
-       /**
-        * @var string Class used for items
-        * @see SimplePie::set_item_class()
-        * @access private
-        */
-       var $item_class = 'SimplePie_Item';
-
-       /**
-        * @var string Class used for authors
-        * @see SimplePie::set_author_class()
-        * @access private
-        */
-       var $author_class = 'SimplePie_Author';
-
-       /**
-        * @var string Class used for categories
-        * @see SimplePie::set_category_class()
-        * @access private
-        */
-       var $category_class = 'SimplePie_Category';
-
-       /**
-        * @var string Class used for enclosures
-        * @see SimplePie::set_enclosures_class()
-        * @access private
-        */
-       var $enclosure_class = 'SimplePie_Enclosure';
-
-       /**
-        * @var string Class used for Media RSS <media:text> captions
-        * @see SimplePie::set_caption_class()
-        * @access private
-        */
-       var $caption_class = 'SimplePie_Caption';
-
-       /**
-        * @var string Class used for Media RSS <media:copyright>
-        * @see SimplePie::set_copyright_class()
-        * @access private
-        */
-       var $copyright_class = 'SimplePie_Copyright';
-
-       /**
-        * @var string Class used for Media RSS <media:credit>
-        * @see SimplePie::set_credit_class()
-        * @access private
-        */
-       var $credit_class = 'SimplePie_Credit';
-
-       /**
-        * @var string Class used for Media RSS <media:rating>
-        * @see SimplePie::set_rating_class()
-        * @access private
-        */
-       var $rating_class = 'SimplePie_Rating';
-
-       /**
-        * @var string Class used for Media RSS <media:restriction>
-        * @see SimplePie::set_restriction_class()
-        * @access private
-        */
-       var $restriction_class = 'SimplePie_Restriction';
-
-       /**
-        * @var string Class used for content-type sniffing
-        * @see SimplePie::set_content_type_sniffer_class()
-        * @access private
-        */
-       var $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer';
-
-       /**
-        * @var string Class used for item sources.
-        * @see SimplePie::set_source_class()
-        * @access private
-        */
-       var $source_class = 'SimplePie_Source';
+       public $autodiscovery = SIMPLEPIE_LOCATOR_ALL;
 
        /**
-        * @var mixed Set javascript query string parameter (false, or
-        * anything type-cast to false, disables this feature)
-        * @see SimplePie::set_javascript()
-        * @access private
+        * Class registry object
+        *
+        * @var SimplePie_Registry
         */
-       var $javascript = 'js';
+       public $registry;
 
        /**
         * @var int Maximum number of feeds to check with autodiscovery
         * @see SimplePie::set_max_checked_feeds()
         * @access private
         */
-       var $max_checked_feeds = 10;
+       public $max_checked_feeds = 10;
 
        /**
-        * @var string Web-accessible path to the handler_favicon.php file.
-        * @see SimplePie::set_favicon_handler()
+        * @var array All the feeds found during the autodiscovery process
+        * @see SimplePie::get_all_discovered_feeds()
         * @access private
         */
-       var $favicon_handler = '';
+       public $all_discovered_feeds = array();
 
        /**
         * @var string Web-accessible path to the handler_image.php file.
         * @see SimplePie::set_image_handler()
         * @access private
         */
-       var $image_handler = '';
+       public $image_handler = '';
 
        /**
         * @var array Stores the URLs when multiple feeds are being initialized.
         * @see SimplePie::set_feed_url()
         * @access private
         */
-       var $multifeed_url = array();
+       public $multifeed_url = array();
 
        /**
         * @var array Stores SimplePie objects when multiple feeds initialized.
         * @access private
         */
-       var $multifeed_objects = array();
+       public $multifeed_objects = array();
 
        /**
         * @var array Stores the get_object_vars() array for use with multifeeds.
         * @see SimplePie::set_feed_url()
         * @access private
         */
-       var $config_settings = null;
+       public $config_settings = null;
 
        /**
         * @var integer Stores the number of items to return per-feed with multifeeds.
         * @see SimplePie::set_item_limit()
         * @access private
         */
-       var $item_limit = 0;
+       public $item_limit = 0;
 
        /**
         * @var array Stores the default attributes to be stripped by strip_attributes().
         * @see SimplePie::strip_attributes()
         * @access private
         */
-       var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
+       public $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
 
        /**
         * @var array Stores the default tags to be stripped by strip_htmltags().
         * @see SimplePie::strip_htmltags()
         * @access private
         */
-       var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
+       public $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
 
        /**
         * The SimplePie class contains feed level data and options
         *
-        * There are two ways that you can create a new SimplePie object. The first
-        * is by passing a feed URL as a parameter to the SimplePie constructor
-        * (as well as optionally setting the cache location and cache expiry). This
-        * will initialise the whole feed with all of the default settings, and you
-        * can begin accessing methods and properties immediately.
-        *
-        * The second way is to create the SimplePie object with no parameters
-        * at all. This will enable you to set configuration options. After setting
+        * To use SimplePie, create the SimplePie object with no parameters. You can
+        * then set configuration options using the provided methods. After setting
         * them, you must initialise the feed using $feed->init(). At that point the
-        * object's methods and properties will be available to you. This format is
-        * what is used throughout this documentation.
+        * object's methods and properties will be available to you.
+        *
+        * Previously, it was possible to pass in the feed URL along with cache
+        * options directly into the constructor. This has been removed as of 1.3 as
+        * it caused a lot of confusion.
         *
-        * @access public
         * @since 1.0 Preview Release
-        * @param string $feed_url This is the URL you want to parse.
-        * @param string $cache_location This is where you want the cache to be stored.
-        * @param int $cache_duration This is the number of seconds that you want to store the cache file for.
         */
-       function SimplePie($feed_url = null, $cache_location = null, $cache_duration = null)
+       public function __construct()
        {
-               // Other objects, instances created here so we can set options on them
-               $this->sanitize =& new SimplePie_Sanitize;
-
-               // Set options if they're passed to the constructor
-               if ($cache_location !== null)
+               if (version_compare(PHP_VERSION, '5.2', '<'))
                {
-                       $this->set_cache_location($cache_location);
+                       trigger_error('PHP 4.x, 5.0 and 5.1 are no longer supported. Please upgrade to PHP 5.2 or newer.');
+                       die();
                }
 
-               if ($cache_duration !== null)
-               {
-                       $this->set_cache_duration($cache_duration);
-               }
+               // Other objects, instances created here so we can set options on them
+               $this->sanitize = new SimplePie_Sanitize();
+               $this->registry = new SimplePie_Registry();
 
-               // Only init the script if we're passed a feed URL
-               if ($feed_url !== null)
+               if (func_num_args() > 0)
                {
-                       $this->set_feed_url($feed_url);
-                       $this->init();
+                       $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
+                       trigger_error('Passing parameters to the constructor is no longer supported. Please use set_feed_url(), set_cache_location(), and set_cache_location() directly.', $level);
+
+                       $args = func_get_args();
+                       switch (count($args)) {
+                               case 3:
+                                       $this->set_cache_duration($args[2]);
+                               case 2:
+                                       $this->set_cache_location($args[1]);
+                               case 1:
+                                       $this->set_feed_url($args[0]);
+                                       $this->init();
+                       }
                }
        }
 
        /**
         * Used for converting object to a string
         */
-       function __toString()
+       public function __toString()
        {
                return md5(serialize($this->data));
        }
@@ -749,41 +723,45 @@ class SimplePie
        /**
         * Remove items that link back to this before destroying this object
         */
-       function __destruct()
+       public function __destruct()
        {
-               if (!empty($this->data['items']))
+               if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode'))
                {
-                       foreach ($this->data['items'] as $item)
+                       if (!empty($this->data['items']))
                        {
-                               $item->__destruct();
+                               foreach ($this->data['items'] as $item)
+                               {
+                                       $item->__destruct();
+                               }
+                               unset($item, $this->data['items']);
                        }
-                       unset($this->data['items']);
-               }
-               if (!empty($this->data['ordered_items']))
-               {
-                       foreach ($this->data['ordered_items'] as $item)
+                       if (!empty($this->data['ordered_items']))
                        {
-                               $item->__destruct();
+                               foreach ($this->data['ordered_items'] as $item)
+                               {
+                                       $item->__destruct();
+                               }
+                               unset($item, $this->data['ordered_items']);
                        }
-                       unset($this->data['ordered_items']);
                }
        }
 
        /**
-        * Force the given data/URL to be treated as a feed no matter what it
-        * appears like
+        * Force the given data/URL to be treated as a feed
+        *
+        * This tells SimplePie to ignore the content-type provided by the server.
+        * Be careful when using this option, as it will also disable autodiscovery.
         *
-        * @access public
         * @since 1.1
         * @param bool $enable Force the given data/URL to be treated as a feed
         */
-       function force_feed($enable = false)
+       public function force_feed($enable = false)
        {
                $this->force_feed = (bool) $enable;
        }
 
        /**
-        * This is the URL of the feed you want to parse.
+        * Set the URL of the feed you want to parse
         *
         * This allows you to enter the URL of the feed you want to parse, or the
         * website you want to try to use auto-discovery on. This takes priority
@@ -793,37 +771,35 @@ class SimplePie
         * of a string for the $url. Remember that with each additional feed comes
         * additional processing and resources.
         *
-        * @access public
         * @since 1.0 Preview Release
-        * @param mixed $url This is the URL (or array of URLs) that you want to parse.
-        * @see SimplePie::set_raw_data()
+        * @see set_raw_data()
+        * @param string|array $url This is the URL (or array of URLs) that you want to parse.
         */
-       function set_feed_url($url)
+       public function set_feed_url($url)
        {
+               $this->multifeed_url = array();
                if (is_array($url))
                {
-                       $this->multifeed_url = array();
                        foreach ($url as $value)
                        {
-                               $this->multifeed_url[] = SimplePie_Misc::fix_protocol($value, 1);
+                               $this->multifeed_url[] = $this->registry->call('Misc', 'fix_protocol', array($value, 1));
                        }
                }
                else
                {
-                       $this->feed_url = SimplePie_Misc::fix_protocol($url, 1);
+                       $this->feed_url = $this->registry->call('Misc', 'fix_protocol', array($url, 1));
                }
        }
 
        /**
-        * Provides an instance of SimplePie_File to use as a feed
+        * Set an instance of {@see SimplePie_File} to use as a feed
         *
-        * @access public
-        * @param object &$file Instance of SimplePie_File (or subclass)
+        * @param SimplePie_File &$file
         * @return bool True on success, false on failure
         */
-       function set_file(&$file)
+       public function set_file(&$file)
        {
-               if (is_a($file, 'SimplePie_File'))
+               if ($file instanceof SimplePie_File)
                {
                        $this->feed_url = $file->url;
                        $this->file =& $file;
@@ -833,138 +809,113 @@ class SimplePie
        }
 
        /**
+        * Set the raw XML data to parse
+        *
         * Allows you to use a string of RSS/Atom data instead of a remote feed.
         *
         * If you have a feed available as a string in PHP, you can tell SimplePie
         * to parse that data string instead of a remote feed. Any set feed URL
         * takes precedence.
         *
-        * @access public
         * @since 1.0 Beta 3
         * @param string $data RSS or Atom data as a string.
-        * @see SimplePie::set_feed_url()
+        * @see set_feed_url()
         */
-       function set_raw_data($data)
+       public function set_raw_data($data)
        {
                $this->raw_data = $data;
        }
 
        /**
-        * Allows you to override the default timeout for fetching remote feeds.
+        * Set the the default timeout for fetching remote feeds
         *
         * This allows you to change the maximum time the feed's server to respond
         * and send the feed back.
         *
-        * @access public
         * @since 1.0 Beta 3
         * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed.
         */
-       function set_timeout($timeout = 10)
+       public function set_timeout($timeout = 10)
        {
                $this->timeout = (int) $timeout;
        }
 
        /**
-        * Forces SimplePie to use fsockopen() instead of the preferred cURL
-        * functions.
+        * Force SimplePie to use fsockopen() instead of cURL
         *
-        * @access public
         * @since 1.0 Beta 3
         * @param bool $enable Force fsockopen() to be used
         */
-       function force_fsockopen($enable = false)
+       public function force_fsockopen($enable = false)
        {
                $this->force_fsockopen = (bool) $enable;
        }
 
        /**
-        * Outputs the raw XML content of the feed, after it has gone through
-        * SimplePie's filters.
-        *
-        * Used only for debugging, this function will output the XML content as
-        * text/xml. When SimplePie reads in a feed, it does a bit of cleaning up
-        * before trying to parse it. Many parts of the feed are re-written in
-        * memory, and in the end, you have a parsable feed. XML dump shows you the
-        * actual XML that SimplePie tries to parse, which may or may not be very
-        * different from the original feed.
-        *
-        * @access public
-        * @since 1.0 Preview Release
-        * @param bool $enable Enable XML dump
-        */
-       function enable_xml_dump($enable = false)
-       {
-               $this->xml_dump = (bool) $enable;
-       }
-
-       /**
-        * Enables/disables caching in SimplePie.
+        * Enable/disable caching in SimplePie.
         *
         * This option allows you to disable caching all-together in SimplePie.
         * However, disabling the cache can lead to longer load times.
         *
-        * @access public
         * @since 1.0 Preview Release
         * @param bool $enable Enable caching
         */
-       function enable_cache($enable = true)
+       public function enable_cache($enable = true)
        {
                $this->cache = (bool) $enable;
        }
 
        /**
-        * Set the length of time (in seconds) that the contents of a feed
-        * will be cached.
+        * Set the length of time (in seconds) that the contents of a feed will be
+        * cached
         *
-        * @access public
-        * @param int $seconds The feed content cache duration.
+        * @param int $seconds The feed content cache duration
         */
-       function set_cache_duration($seconds = 3600)
+       public function set_cache_duration($seconds = 3600)
        {
                $this->cache_duration = (int) $seconds;
        }
 
        /**
-        * Set the length of time (in seconds) that the autodiscovered feed
-        * URL will be cached.
+        * Set the length of time (in seconds) that the autodiscovered feed URL will
+        * be cached
         *
-        * @access public
         * @param int $seconds The autodiscovered feed URL cache duration.
         */
-       function set_autodiscovery_cache_duration($seconds = 604800)
+       public function set_autodiscovery_cache_duration($seconds = 604800)
        {
                $this->autodiscovery_cache_duration = (int) $seconds;
        }
 
        /**
-        * Set the file system location where the cached files should be stored.
+        * Set the file system location where the cached files should be stored
         *
-        * @access public
         * @param string $location The file system location.
         */
-       function set_cache_location($location = './cache')
+       public function set_cache_location($location = './cache')
        {
                $this->cache_location = (string) $location;
        }
 
        /**
-        * Determines whether feed items should be sorted into reverse chronological order.
+        * Set whether feed items should be sorted into reverse chronological order
         *
-        * @access public
         * @param bool $enable Sort as reverse chronological order.
         */
-       function enable_order_by_date($enable = true)
+       public function enable_order_by_date($enable = true)
        {
                $this->order_by_date = (bool) $enable;
        }
 
        /**
-        * Allows you to override the character encoding reported by the feed.
+        * Set the character encoding used to parse the feed
+        *
+        * This overrides the encoding reported by the feed, however it will fall
+        * back to the normal encoding detection if the override fails
         *
-        * @access public
-        * @param string $encoding Character encoding.
+        * @param string $encoding Character encoding
         */
-       function set_input_encoding($encoding = false)
+       public function set_input_encoding($encoding = false)
        {
                if ($encoding)
                {
@@ -979,7 +930,6 @@ class SimplePie
        /**
         * Set how much feed autodiscovery to do
         *
-        * @access public
         * @see SIMPLEPIE_LOCATOR_NONE
         * @see SIMPLEPIE_LOCATOR_AUTODISCOVERY
         * @see SIMPLEPIE_LOCATOR_LOCAL_EXTENSION
@@ -987,325 +937,168 @@ class SimplePie
         * @see SIMPLEPIE_LOCATOR_REMOTE_EXTENSION
         * @see SIMPLEPIE_LOCATOR_REMOTE_BODY
         * @see SIMPLEPIE_LOCATOR_ALL
-        * @param int $level Feed Autodiscovery Level (level can be a
-        * combination of the above constants, see bitwise OR operator)
+        * @param int $level Feed Autodiscovery Level (level can be a combination of the above constants, see bitwise OR operator)
         */
-       function set_autodiscovery_level($level = SIMPLEPIE_LOCATOR_ALL)
+       public function set_autodiscovery_level($level = SIMPLEPIE_LOCATOR_ALL)
        {
                $this->autodiscovery = (int) $level;
        }
 
        /**
-        * Allows you to change which class SimplePie uses for caching.
-        * Useful when you are overloading or extending SimplePie's default classes.
+        * Get the class registry
         *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Use this to override SimplePie's default classes
+        * @see SimplePie_Registry
+        * @return SimplePie_Registry
         */
-       function set_cache_class($class = 'SimplePie_Cache')
+       public function &get_registry()
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Cache'))
-               {
-                       $this->cache_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry;
        }
 
-       /**
-        * Allows you to change which class SimplePie uses for auto-discovery.
+       /**#@+
         * Useful when you are overloading or extending SimplePie's default classes.
         *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @deprecated Use {@see get_registry()} instead
         * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * @param string $class Name of custom class
+        * @return boolean True on success, false otherwise
+        */
+       /**
+        * Set which class SimplePie uses for caching
         */
-       function set_locator_class($class = 'SimplePie_Locator')
+       public function set_cache_class($class = 'SimplePie_Cache')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Locator'))
-               {
-                       $this->locator_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('Cache', $class, true);
        }
 
        /**
-        * Allows you to change which class SimplePie uses for XML parsing.
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Set which class SimplePie uses for auto-discovery
         */
-       function set_parser_class($class = 'SimplePie_Parser')
+       public function set_locator_class($class = 'SimplePie_Locator')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Parser'))
-               {
-                       $this->parser_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('Locator', $class, true);
        }
 
        /**
-        * Allows you to change which class SimplePie uses for remote file fetching.
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Set which class SimplePie uses for XML parsing
         */
-       function set_file_class($class = 'SimplePie_File')
+       public function set_parser_class($class = 'SimplePie_Parser')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_File'))
-               {
-                       $this->file_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('Parser', $class, true);
        }
 
        /**
-        * Allows you to change which class SimplePie uses for data sanitization.
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Set which class SimplePie uses for remote file fetching
         */
-       function set_sanitize_class($class = 'SimplePie_Sanitize')
+       public function set_file_class($class = 'SimplePie_File')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Sanitize'))
-               {
-                       $this->sanitize =& new $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('File', $class, true);
        }
 
        /**
-        * Allows you to change which class SimplePie uses for handling feed items.
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Set which class SimplePie uses for data sanitization
         */
-       function set_item_class($class = 'SimplePie_Item')
+       public function set_sanitize_class($class = 'SimplePie_Sanitize')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Item'))
-               {
-                       $this->item_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('Sanitize', $class, true);
        }
 
        /**
-        * Allows you to change which class SimplePie uses for handling author data.
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Set which class SimplePie uses for handling feed items
         */
-       function set_author_class($class = 'SimplePie_Author')
+       public function set_item_class($class = 'SimplePie_Item')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Author'))
-               {
-                       $this->author_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('Item', $class, true);
        }
 
        /**
-        * Allows you to change which class SimplePie uses for handling category data.
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Set which class SimplePie uses for handling author data
         */
-       function set_category_class($class = 'SimplePie_Category')
+       public function set_author_class($class = 'SimplePie_Author')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Category'))
-               {
-                       $this->category_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('Author', $class, true);
        }
 
        /**
-        * Allows you to change which class SimplePie uses for feed enclosures.
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Set which class SimplePie uses for handling category data
         */
-       function set_enclosure_class($class = 'SimplePie_Enclosure')
+       public function set_category_class($class = 'SimplePie_Category')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Enclosure'))
-               {
-                       $this->enclosure_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('Category', $class, true);
        }
 
        /**
-        * Allows you to change which class SimplePie uses for <media:text> captions
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Set which class SimplePie uses for feed enclosures
         */
-       function set_caption_class($class = 'SimplePie_Caption')
+       public function set_enclosure_class($class = 'SimplePie_Enclosure')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Caption'))
-               {
-                       $this->caption_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('Enclosure', $class, true);
        }
 
        /**
-        * Allows you to change which class SimplePie uses for <media:copyright>
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Set which class SimplePie uses for `<media:text>` captions
         */
-       function set_copyright_class($class = 'SimplePie_Copyright')
+       public function set_caption_class($class = 'SimplePie_Caption')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Copyright'))
-               {
-                       $this->copyright_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('Caption', $class, true);
        }
 
        /**
-        * Allows you to change which class SimplePie uses for <media:credit>
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Set which class SimplePie uses for `<media:copyright>`
         */
-       function set_credit_class($class = 'SimplePie_Credit')
+       public function set_copyright_class($class = 'SimplePie_Copyright')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Credit'))
-               {
-                       $this->credit_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('Copyright', $class, true);
        }
 
        /**
-        * Allows you to change which class SimplePie uses for <media:rating>
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Set which class SimplePie uses for `<media:credit>`
         */
-       function set_rating_class($class = 'SimplePie_Rating')
+       public function set_credit_class($class = 'SimplePie_Credit')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Rating'))
-               {
-                       $this->rating_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('Credit', $class, true);
        }
 
        /**
-        * Allows you to change which class SimplePie uses for <media:restriction>
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Set which class SimplePie uses for `<media:rating>`
         */
-       function set_restriction_class($class = 'SimplePie_Restriction')
+       public function set_rating_class($class = 'SimplePie_Rating')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Restriction'))
-               {
-                       $this->restriction_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('Rating', $class, true);
        }
 
        /**
-        * Allows you to change which class SimplePie uses for content-type sniffing.
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Set which class SimplePie uses for `<media:restriction>`
         */
-       function set_content_type_sniffer_class($class = 'SimplePie_Content_Type_Sniffer')
+       public function set_restriction_class($class = 'SimplePie_Restriction')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Content_Type_Sniffer'))
-               {
-                       $this->content_type_sniffer_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('Restriction', $class, true);
        }
 
        /**
-        * Allows you to change which class SimplePie uses item sources.
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @access public
-        * @param string $class Name of custom class.
-        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        * Set which class SimplePie uses for content-type sniffing
         */
-       function set_source_class($class = 'SimplePie_Source')
+       public function set_content_type_sniffer_class($class = 'SimplePie_Content_Type_Sniffer')
        {
-               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Source'))
-               {
-                       $this->source_class = $class;
-                       return true;
-               }
-               return false;
+               return $this->registry->register('Content_Type_Sniffer', $class, true);
+       }
+
+       /**
+        * Set which class SimplePie uses item sources
+        */
+       public function set_source_class($class = 'SimplePie_Source')
+       {
+               return $this->registry->register('Source', $class, true);
        }
+       /**#@-*/
 
        /**
-        * Allows you to override the default user agent string.
+        * Set the user agent string
         *
-        * @access public
         * @param string $ua New user agent string.
         */
-       function set_useragent($ua = SIMPLEPIE_USERAGENT)
+       public function set_useragent($ua = SIMPLEPIE_USERAGENT)
        {
                $this->useragent = (string) $ua;
        }
@@ -1313,10 +1106,9 @@ class SimplePie
        /**
         * Set callback function to create cache filename with
         *
-        * @access public
         * @param mixed $function Callback function
         */
-       function set_cache_name_function($function = 'md5')
+       public function set_cache_name_function($function = 'md5')
        {
                if (is_callable($function))
                {
@@ -1325,31 +1117,14 @@ class SimplePie
        }
 
        /**
-        * Set javascript query string parameter
+        * Set options to make SP as fast as possible
         *
-        * @access public
-        * @param mixed $get Javascript query string parameter
-        */
-       function set_javascript($get = 'js')
-       {
-               if ($get)
-               {
-                       $this->javascript = (string) $get;
-               }
-               else
-               {
-                       $this->javascript = false;
-               }
-       }
-
-       /**
-        * Set options to make SP as fast as possible.  Forgoes a
-        * substantial amount of data sanitization in favor of speed.
+        * Forgoes a substantial amount of data sanitization in favor of speed. This
+        * turns SimplePie into a dumb parser of feeds.
         *
-        * @access public
         * @param bool $set Whether to set them or not
         */
-       function set_stupidly_fast($set = false)
+       public function set_stupidly_fast($set = false)
        {
                if ($set)
                {
@@ -1365,20 +1140,19 @@ class SimplePie
        /**
         * Set maximum number of feeds to check with autodiscovery
         *
-        * @access public
         * @param int $max Maximum number of feeds to check
         */
-       function set_max_checked_feeds($max = 10)
+       public function set_max_checked_feeds($max = 10)
        {
                $this->max_checked_feeds = (int) $max;
        }
 
-       function remove_div($enable = true)
+       public function remove_div($enable = true)
        {
                $this->sanitize->remove_div($enable);
        }
 
-       function strip_htmltags($tags = '', $encode = null)
+       public function strip_htmltags($tags = '', $encode = null)
        {
                if ($tags === '')
                {
@@ -1391,12 +1165,12 @@ class SimplePie
                }
        }
 
-       function encode_instead_of_strip($enable = true)
+       public function encode_instead_of_strip($enable = true)
        {
                $this->sanitize->encode_instead_of_strip($enable);
        }
 
-       function strip_attributes($attribs = '')
+       public function strip_attributes($attribs = '')
        {
                if ($attribs === '')
                {
@@ -1405,12 +1179,34 @@ class SimplePie
                $this->sanitize->strip_attributes($attribs);
        }
 
-       function set_output_encoding($encoding = 'UTF-8')
+       /**
+        * Set the output encoding
+        *
+        * Allows you to override SimplePie's output to match that of your webpage.
+        * This is useful for times when your webpages are not being served as
+        * UTF-8.  This setting will be obeyed by {@see handle_content_type()}, and
+        * is similar to {@see set_input_encoding()}.
+        *
+        * It should be noted, however, that not all character encodings can support
+        * all characters.  If your page is being served as ISO-8859-1 and you try
+        * to display a Japanese feed, you'll likely see garbled characters.
+        * Because of this, it is highly recommended to ensure that your webpages
+        * are served as UTF-8.
+        *
+        * The number of supported character encodings depends on whether your web
+        * host supports {@link http://php.net/mbstring mbstring},
+        * {@link http://php.net/iconv iconv}, or both. See
+        * {@link http://simplepie.org/wiki/faq/Supported_Character_Encodings} for
+        * more information.
+        *
+        * @param string $encoding
+        */
+       public function set_output_encoding($encoding = 'UTF-8')
        {
                $this->sanitize->set_output_encoding($encoding);
        }
 
-       function strip_comments($strip = false)
+       public function strip_comments($strip = false)
        {
                $this->sanitize->strip_comments($strip);
        }
@@ -1419,44 +1215,27 @@ class SimplePie
         * Set element/attribute key/value pairs of HTML attributes
         * containing URLs that need to be resolved relative to the feed
         *
-        * @access public
+        * Defaults to |a|@href, |area|@href, |blockquote|@cite, |del|@cite,
+        * |form|@action, |img|@longdesc, |img|@src, |input|@src, |ins|@cite,
+        * |q|@cite
+        *
         * @since 1.0
-        * @param array $element_attribute Element/attribute key/value pairs
+        * @param array|null $element_attribute Element/attribute key/value pairs, null for default
         */
-       function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite'))
+       public function set_url_replacements($element_attribute = null)
        {
                $this->sanitize->set_url_replacements($element_attribute);
        }
 
-       /**
-        * Set the handler to enable the display of cached favicons.
-        *
-        * @access public
-        * @param str $page Web-accessible path to the handler_favicon.php file.
-        * @param str $qs The query string that the value should be passed to.
-        */
-       function set_favicon_handler($page = false, $qs = 'i')
-       {
-               if ($page != false)
-               {
-                       $this->favicon_handler = $page . '?' . $qs . '=';
-               }
-               else
-               {
-                       $this->favicon_handler = '';
-               }
-       }
-
        /**
         * Set the handler to enable the display of cached images.
         *
-        * @access public
         * @param str $page Web-accessible path to the handler_image.php file.
         * @param str $qs The query string that the value should be passed to.
         */
-       function set_image_handler($page = false, $qs = 'i')
+       public function set_image_handler($page = false, $qs = 'i')
        {
-               if ($page != false)
+               if ($page !== false)
                {
                        $this->sanitize->set_image_handler($page . '?' . $qs . '=');
                }
@@ -1467,372 +1246,425 @@ class SimplePie
        }
 
        /**
-        * Set the limit for items returned per-feed with multifeeds.
+        * Set the limit for items returned per-feed with multifeeds
         *
-        * @access public
         * @param integer $limit The maximum number of items to return.
         */
-       function set_item_limit($limit = 0)
+       public function set_item_limit($limit = 0)
        {
                $this->item_limit = (int) $limit;
        }
 
-       function init()
+       /**
+        * Initialize the feed object
+        *
+        * This is what makes everything happen.  Period.  This is where all of the
+        * configuration options get processed, feeds are fetched, cached, and
+        * parsed, and all of that other good stuff.
+        *
+        * @return boolean True if successful, false otherwise
+        */
+       public function init()
        {
-               if ((function_exists('version_compare') && version_compare(PHP_VERSION, '4.3.0', '<')) || !extension_loaded('xml') || !extension_loaded('pcre'))
+               // Check absolute bare minimum requirements.
+               if (!extension_loaded('xml') || !extension_loaded('pcre'))
                {
                        return false;
                }
-               if (isset($_GET[$this->javascript]))
+               // Then check the xml extension is sane (i.e., libxml 2.7.x issue on PHP < 5.2.9 and libxml 2.7.0 to 2.7.2 on any version) if we don't have xmlreader.
+               elseif (!extension_loaded('xmlreader'))
                {
-                       if (function_exists('ob_gzhandler'))
+                       static $xml_is_sane = null;
+                       if ($xml_is_sane === null)
                        {
-                               ob_start('ob_gzhandler');
+                               $parser_check = xml_parser_create();
+                               xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values);
+                               xml_parser_free($parser_check);
+                               $xml_is_sane = isset($values[0]['value']);
                        }
-                       header('Content-type: text/javascript; charset: UTF-8');
-                       header('Cache-Control: must-revalidate');
-                       header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days
-                       ?>
-function embed_odeo(link) {
-       document.writeln('<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url='+link+'"></embed>');
-}
-
-function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) {
-       if (placeholder != '') {
-               document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
-       }
-       else {
-               document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
-       }
-}
-
-function embed_flash(bgcolor, width, height, link, loop, type) {
-       document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>');
-}
-
-function embed_flv(width, height, link, placeholder, loop, player) {
-       document.writeln('<embed src="'+player+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="'+width+'" height="'+height+'" wmode="transparent" flashvars="file='+link+'&autostart=false&repeat='+loop+'&showdigits=true&showfsbutton=false"></embed>');
-}
+                       if (!$xml_is_sane)
+                       {
+                               return false;
+                       }
+               }
 
-function embed_wmedia(width, height, link) {
-       document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>');
-}
-                       <?php
-                       exit;
+               if (method_exists($this->sanitize, 'set_registry'))
+               {
+                       $this->sanitize->set_registry($this->registry);
                }
 
                // Pass whatever was set with config options over to the sanitizer.
-               $this->sanitize->pass_cache_data($this->cache, $this->cache_location, $this->cache_name_function, $this->cache_class);
-               $this->sanitize->pass_file_data($this->file_class, $this->timeout, $this->useragent, $this->force_fsockopen);
+               // Pass the classes in for legacy support; new classes should use the registry instead
+               $this->sanitize->pass_cache_data($this->cache, $this->cache_location, $this->cache_name_function, $this->registry->get_class('Cache'));
+               $this->sanitize->pass_file_data($this->registry->get_class('File'), $this->timeout, $this->useragent, $this->force_fsockopen);
 
-               if ($this->feed_url !== null || $this->raw_data !== null)
+               if (!empty($this->multifeed_url))
                {
-                       $this->data = array();
+                       $i = 0;
+                       $success = 0;
                        $this->multifeed_objects = array();
-                       $cache = false;
-
-                       if ($this->feed_url !== null)
+                       $this->error = array();
+                       foreach ($this->multifeed_url as $url)
                        {
-                               $parsed_feed_url = SimplePie_Misc::parse_url($this->feed_url);
-                               // Decide whether to enable caching
-                               if ($this->cache && $parsed_feed_url['scheme'] !== '')
-                               {
-                                       $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc');
-                               }
-                               // If it's enabled and we don't want an XML dump, use the cache
-                               if ($cache && !$this->xml_dump)
-                               {
-                                       // Load the Cache
-                                       $this->data = $cache->load();
-                                       if (!empty($this->data))
-                                       {
-                                               // If the cache is for an outdated build of SimplePie
-                                               if (!isset($this->data['build']) || $this->data['build'] != SIMPLEPIE_BUILD)
-                                               {
-                                                       $cache->unlink();
-                                                       $this->data = array();
-                                               }
-                                               // If we've hit a collision just rerun it with caching disabled
-                                               elseif (isset($this->data['url']) && $this->data['url'] != $this->feed_url)
-                                               {
-                                                       $cache = false;
-                                                       $this->data = array();
-                                               }
-                                               // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL.
-                                               elseif (isset($this->data['feed_url']))
-                                               {
-                                                       // If the autodiscovery cache is still valid use it.
-                                                       if ($cache->mtime() + $this->autodiscovery_cache_duration > time())
-                                                       {
-                                                               // Do not need to do feed autodiscovery yet.
-                                                               if ($this->data['feed_url'] == $this->data['url'])
-                                                               {
-                                                                       $cache->unlink();
-                                                                       $this->data = array();
-                                                               }
-                                                               else
-                                                               {
-                                                                       $this->set_feed_url($this->data['feed_url']);
-                                                                       return $this->init();
-                                                               }
-                                                       }
-                                               }
-                                               // Check if the cache has been updated
-                                               elseif ($cache->mtime() + $this->cache_duration < time())
-                                               {
-                                                       // If we have last-modified and/or etag set
-                                                       if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag']))
-                                                       {
-                                                               $headers = array();
-                                                               if (isset($this->data['headers']['last-modified']))
-                                                               {
-                                                                       $headers['if-modified-since'] = $this->data['headers']['last-modified'];
-                                                               }
-                                                               if (isset($this->data['headers']['etag']))
-                                                               {
-                                                                       $headers['if-none-match'] = '"' . $this->data['headers']['etag'] . '"';
-                                                               }
-                                                               $file =& new $this->file_class($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen);
-                                                               if ($file->success)
-                                                               {
-                                                                       if ($file->status_code == 304)
-                                                                       {
-                                                                               $cache->touch();
-                                                                               return true;
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               $headers = $file->headers;
-                                                                       }
-                                                               }
-                                                               else
-                                                               {
-                                                                       unset($file);
-                                                               }
-                                                       }
-                                               }
-                                               // If the cache is still valid, just return true
-                                               else
-                                               {
-                                                       return true;
-                                               }
-                                       }
-                                       // If the cache is empty, delete it
-                                       else
-                                       {
-                                               $cache->unlink();
-                                               $this->data = array();
-                                       }
-                               }
-                               // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it.
-                               if (!isset($file))
-                               {
-                                       if (is_a($this->file, 'SimplePie_File') && $this->file->url == $this->feed_url)
-                                       {
-                                               $file =& $this->file;
-                                       }
-                                       else
-                                       {
-                                               $file =& new $this->file_class($this->feed_url, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen);
-                                       }
-                               }
-                               // If the file connection has an error, set SimplePie::error to that and quit
-                               if (!$file->success)
+                               $this->multifeed_objects[$i] = clone $this;
+                               $this->multifeed_objects[$i]->set_feed_url($url);
+                               $single_success = $this->multifeed_objects[$i]->init();
+                               $success |= $single_success;
+                               if (!$single_success)
                                {
-                                       $this->error = $file->error;
-                                       if (!empty($this->data))
-                                       {
-                                               return true;
-                                       }
-                                       else
-                                       {
-                                               return false;
-                                       }
+                                       $this->error[$i] = $this->multifeed_objects[$i]->error();
                                }
+                               $i++;
+                       }
+                       return (bool) $success;
+               }
+               elseif ($this->feed_url === null && $this->raw_data === null)
+               {
+                       return false;
+               }
 
-                               if (!$this->force_feed)
-                               {
-                                       // Check if the supplied URL is a feed, if it isn't, look for it.
-                                       $locate =& new $this->locator_class($file, $this->timeout, $this->useragent, $this->file_class, $this->max_checked_feeds, $this->content_type_sniffer_class);
-                                       if (!$locate->is_feed($file))
-                                       {
-                                               // We need to unset this so that if SimplePie::set_file() has been called that object is untouched
-                                               unset($file);
-                                               if ($file = $locate->find($this->autodiscovery))
-                                               {
-                                                       if ($cache)
-                                                       {
-                                                               $this->data = array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD);
-                                                               if (!$cache->save($this))
-                                                               {
-                                                                       trigger_error("$cache->name is not writeable", E_USER_WARNING);
-                                                               }
-                                                               $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc');
-                                                       }
-                                                       $this->feed_url = $file->url;
-                                               }
-                                               else
-                                               {
-                                                       $this->error = "A feed could not be found at $this->feed_url";
-                                                       SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
-                                                       return false;
-                                               }
-                                       }
-                                       $locate = null;
-                               }
+               $this->error = null;
+               $this->data = array();
+               $this->multifeed_objects = array();
+               $cache = false;
+
+               if ($this->feed_url !== null)
+               {
+                       $parsed_feed_url = $this->registry->call('Misc', 'parse_url', array($this->feed_url));
 
-                               $headers = $file->headers;
-                               $data = $file->body;
-                               $sniffer = new $this->content_type_sniffer_class($file);
-                               $sniffed = $sniffer->get_type();
+                       // Decide whether to enable caching
+                       if ($this->cache && $parsed_feed_url['scheme'] !== '')
+                       {
+                               $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc'));
                        }
-                       else
+
+                       // Fetch the data via SimplePie_File into $this->raw_data
+                       if (($fetched = $this->fetch_data($cache)) === true)
                        {
-                               $data = $this->raw_data;
+                               return true;
+                       }
+                       elseif ($fetched === false) {
+                               return false;
                        }
 
-                       // Set up array of possible encodings
-                       $encodings = array();
+                       list($headers, $sniffed) = $fetched;
+               }
+
+               // Set up array of possible encodings
+               $encodings = array();
+
+               // First check to see if input has been overridden.
+               if ($this->input_encoding !== false)
+               {
+                       $encodings[] = $this->input_encoding;
+               }
+
+               $application_types = array('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity');
+               $text_types = array('text/xml', 'text/xml-external-parsed-entity');
 
-                       // First check to see if input has been overridden.
-                       if ($this->input_encoding !== false)
+               // RFC 3023 (only applies to sniffed content)
+               if (isset($sniffed))
+               {
+                       if (in_array($sniffed, $application_types) || substr($sniffed, 0, 12) === 'application/' && substr($sniffed, -4) === '+xml')
+                       {
+                               if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset))
+                               {
+                                       $encodings[] = strtoupper($charset[1]);
+                               }
+                               $encodings = array_merge($encodings, $this->registry->call('Misc', 'xml_encoding', array($this->raw_data, &$this->registry)));
+                               $encodings[] = 'UTF-8';
+                       }
+                       elseif (in_array($sniffed, $text_types) || substr($sniffed, 0, 5) === 'text/' && substr($sniffed, -4) === '+xml')
+                       {
+                               if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset))
+                               {
+                                       $encodings[] = $charset[1];
+                               }
+                               $encodings[] = 'US-ASCII';
+                       }
+                       // Text MIME-type default
+                       elseif (substr($sniffed, 0, 5) === 'text/')
                        {
-                               $encodings[] = $this->input_encoding;
+                               $encodings[] = 'US-ASCII';
                        }
+               }
+
+               // Fallback to XML 1.0 Appendix F.1/UTF-8/ISO-8859-1
+               $encodings = array_merge($encodings, $this->registry->call('Misc', 'xml_encoding', array($this->raw_data, &$this->registry)));
+               $encodings[] = 'UTF-8';
+               $encodings[] = 'ISO-8859-1';
 
-                       $application_types = array('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity');
-                       $text_types = array('text/xml', 'text/xml-external-parsed-entity');
+               // There's no point in trying an encoding twice
+               $encodings = array_unique($encodings);
 
-                       // RFC 3023 (only applies to sniffed content)
-                       if (isset($sniffed))
+               // Loop through each possible encoding, till we return something, or run out of possibilities
+               foreach ($encodings as $encoding)
+               {
+                       // Change the encoding to UTF-8 (as we always use UTF-8 internally)
+                       if ($utf8_data = $this->registry->call('Misc', 'change_encoding', array($this->raw_data, $encoding, 'UTF-8')))
                        {
-                               if (in_array($sniffed, $application_types) || substr($sniffed, 0, 12) === 'application/' && substr($sniffed, -4) === '+xml')
+                               // Create new parser
+                               $parser = $this->registry->create('Parser');
+
+                               // If it's parsed fine
+                               if ($parser->parse($utf8_data, 'UTF-8'))
                                {
-                                       if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset))
+                                       $this->data = $parser->get_data();
+                                       if (!($this->get_type() & ~SIMPLEPIE_TYPE_NONE))
                                        {
-                                               $encodings[] = strtoupper($charset[1]);
+                                               $this->error = "A feed could not be found at $this->feed_url. This does not appear to be a valid RSS or Atom feed.";
+                                               $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
+                                               return false;
                                        }
-                                       $encodings = array_merge($encodings, SimplePie_Misc::xml_encoding($data));
-                                       $encodings[] = 'UTF-8';
-                               }
-                               elseif (in_array($sniffed, $text_types) || substr($sniffed, 0, 5) === 'text/' && substr($sniffed, -4) === '+xml')
-                               {
-                                       if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset))
+
+                                       if (isset($headers))
                                        {
-                                               $encodings[] = $charset[1];
+                                               $this->data['headers'] = $headers;
                                        }
-                                       $encodings[] = 'US-ASCII';
-                               }
-                               // Text MIME-type default
-                               elseif (substr($sniffed, 0, 5) === 'text/')
-                               {
-                                       $encodings[] = 'US-ASCII';
+                                       $this->data['build'] = SIMPLEPIE_BUILD;
+
+                                       // Cache the file if caching is enabled
+                                       if ($cache && !$cache->save($this))
+                                       {
+                                               trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
+                                       }
+                                       return true;
                                }
                        }
+               }
 
-                       // Fallback to XML 1.0 Appendix F.1/UTF-8/ISO-8859-1
-                       $encodings = array_merge($encodings, SimplePie_Misc::xml_encoding($data));
-                       $encodings[] = 'UTF-8';
-                       $encodings[] = 'ISO-8859-1';
+               if (isset($parser))
+               {
+                       // We have an error, just set SimplePie_Misc::error to it and quit
+                       $this->error = sprintf('This XML document is invalid, likely due to invalid characters. XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column());
+               }
+               else
+               {
+                       $this->error = 'The data could not be converted to UTF-8. You MUST have either the iconv or mbstring extension installed. Upgrading to PHP 5.x (which includes iconv) is highly recommended.';
+               }
 
-                       // There's no point in trying an encoding twice
-                       $encodings = array_unique($encodings);
+               $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
 
-                       // If we want the XML, just output that with the most likely encoding and quit
-                       if ($this->xml_dump)
-                       {
-                               header('Content-type: text/xml; charset=' . $encodings[0]);
-                               echo $data;
-                               exit;
-                       }
+               return false;
+       }
 
-                       // Loop through each possible encoding, till we return something, or run out of possibilities
-                       foreach ($encodings as $encoding)
+       /**
+        * Fetch the data via SimplePie_File
+        *
+        * If the data is already cached, attempt to fetch it from there instead
+        * @param SimplePie_Cache|false $cache Cache handler, or false to not load from the cache
+        * @return array|true Returns true if the data was loaded from the cache, or an array of HTTP headers and sniffed type
+        */
+       protected function fetch_data(&$cache)
+       {
+               // If it's enabled, use the cache
+               if ($cache)
+               {
+                       // Load the Cache
+                       $this->data = $cache->load();
+                       if (!empty($this->data))
                        {
-                               // Change the encoding to UTF-8 (as we always use UTF-8 internally)
-                               if ($utf8_data = SimplePie_Misc::change_encoding($data, $encoding, 'UTF-8'))
+                               // If the cache is for an outdated build of SimplePie
+                               if (!isset($this->data['build']) || $this->data['build'] !== SIMPLEPIE_BUILD)
+                               {
+                                       $cache->unlink();
+                                       $this->data = array();
+                               }
+                               // If we've hit a collision just rerun it with caching disabled
+                               elseif (isset($this->data['url']) && $this->data['url'] !== $this->feed_url)
+                               {
+                                       $cache = false;
+                                       $this->data = array();
+                               }
+                               // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL.
+                               elseif (isset($this->data['feed_url']))
                                {
-                                       // Create new parser
-                                       $parser =& new $this->parser_class();
+                                       // If the autodiscovery cache is still valid use it.
+                                       if ($cache->mtime() + $this->autodiscovery_cache_duration > time())
+                                       {
+                                               // Do not need to do feed autodiscovery yet.
+                                               if ($this->data['feed_url'] !== $this->data['url'])
+                                               {
+                                                       $this->set_feed_url($this->data['feed_url']);
+                                                       return $this->init();
+                                               }
 
-                                       // If it's parsed fine
-                                       if ($parser->parse($utf8_data, 'UTF-8'))
+                                               $cache->unlink();
+                                               $this->data = array();
+                                       }
+                               }
+                               // Check if the cache has been updated
+                               elseif ($cache->mtime() + $this->cache_duration < time())
+                               {
+                                       // If we have last-modified and/or etag set
+                                       if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag']))
                                        {
-                                               $this->data = $parser->get_data();
-                                               if ($this->get_type() & ~SIMPLEPIE_TYPE_NONE)
+                                               $headers = array(
+                                                       'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
+                                               );
+                                               if (isset($this->data['headers']['last-modified']))
                                                {
-                                                       if (isset($headers))
-                                                       {
-                                                               $this->data['headers'] = $headers;
-                                                       }
-                                                       $this->data['build'] = SIMPLEPIE_BUILD;
+                                                       $headers['if-modified-since'] = $this->data['headers']['last-modified'];
+                                               }
+                                               if (isset($this->data['headers']['etag']))
+                                               {
+                                                       $headers['if-none-match'] = $this->data['headers']['etag'];
+                                               }
 
-                                                       // Cache the file if caching is enabled
-                                                       if ($cache && !$cache->save($this))
+                                               $file = $this->registry->create('File', array($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen));
+
+                                               if ($file->success)
+                                               {
+                                                       if ($file->status_code === 304)
                                                        {
-                                                               trigger_error("$cache->name is not writeable", E_USER_WARNING);
+                                                               $cache->touch();
+                                                               return true;
                                                        }
-                                                       return true;
                                                }
                                                else
                                                {
-                                                       $this->error = "A feed could not be found at $this->feed_url";
-                                                       SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
-                                                       return false;
+                                                       unset($file);
                                                }
                                        }
                                }
+                               // If the cache is still valid, just return true
+                               else
+                               {
+                                       $this->raw_data = false;
+                                       return true;
+                               }
+                       }
+                       // If the cache is empty, delete it
+                       else
+                       {
+                               $cache->unlink();
+                               $this->data = array();
                        }
-                       // We have an error, just set SimplePie::error to it and quit
-                       $this->error = sprintf('XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column());
-                       SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
-                       return false;
                }
-               elseif (!empty($this->multifeed_url))
+               // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it.
+               if (!isset($file))
                {
-                       $i = 0;
-                       $success = 0;
-                       $this->multifeed_objects = array();
-                       foreach ($this->multifeed_url as $url)
+                       if ($this->file instanceof SimplePie_File && $this->file->url === $this->feed_url)
+                       {
+                               $file =& $this->file;
+                       }
+                       else
+                       {
+                               $headers = array(
+                                       'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
+                               );
+                               $file = $this->registry->create('File', array($this->feed_url, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen));
+                       }
+               }
+               // If the file connection has an error, set SimplePie::error to that and quit
+               if (!$file->success && !($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300)))
+               {
+                       $this->error = $file->error;
+                       return !empty($this->data);
+               }
+
+               if (!$this->force_feed)
+               {
+                       // Check if the supplied URL is a feed, if it isn't, look for it.
+                       $locate = $this->registry->create('Locator', array(&$file, $this->timeout, $this->useragent, $this->max_checked_feeds));
+
+                       if (!$locate->is_feed($file))
                        {
-                               if (SIMPLEPIE_PHP5)
+                               // We need to unset this so that if SimplePie::set_file() has been called that object is untouched
+                               unset($file);
+                               try
                                {
-                                       // This keyword needs to defy coding standards for PHP4 compatibility
-                                       $this->multifeed_objects[$i] = clone($this);
+                                       if (!($file = $locate->find($this->autodiscovery, $this->all_discovered_feeds)))
+                                       {
+                                               $this->error = "A feed could not be found at $this->feed_url. A feed with an invalid mime type may fall victim to this error, or " . SIMPLEPIE_NAME . " was unable to auto-discover it.. Use force_feed() if you are certain this URL is a real feed.";
+                                               $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
+                                               return false;
+                                       }
                                }
-                               else
+                               catch (SimplePie_Exception $e)
                                {
-                                       $this->multifeed_objects[$i] = $this;
+                                       // This is usually because DOMDocument doesn't exist
+                                       $this->error = $e->getMessage();
+                                       $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, $e->getFile(), $e->getLine()));
+                                       return false;
                                }
-                               $this->multifeed_objects[$i]->set_feed_url($url);
-                               $success |= $this->multifeed_objects[$i]->init();
-                               $i++;
+                               if ($cache)
+                               {
+                                       $this->data = array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD);
+                                       if (!$cache->save($this))
+                                       {
+                                               trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
+                                       }
+                                       $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc'));
+                               }
+                               $this->feed_url = $file->url;
                        }
-                       return (bool) $success;
-               }
-               else
-               {
-                       return false;
+                       $locate = null;
                }
+
+               $this->raw_data = $file->body;
+
+               $headers = $file->headers;
+               $sniffer = $this->registry->create('Content_Type_Sniffer', array(&$file));
+               $sniffed = $sniffer->get_type();
+
+               return array($headers, $sniffed);
        }
 
        /**
-        * Return the error message for the occured error
+        * Get the error message for the occurred error.
         *
-        * @access public
-        * @return string Error message
+        * @return string|array Error message, or array of messages for multifeeds
         */
-       function error()
+       public function error()
        {
                return $this->error;
        }
 
-       function get_encoding()
+       /**
+        * Get the raw XML
+        *
+        * This is the same as the old `$feed->enable_xml_dump(true)`, but returns
+        * the data instead of printing it.
+        *
+        * @return string|boolean Raw XML data, false if the cache is used
+        */
+       public function get_raw_data()
+       {
+               return $this->raw_data;
+       }
+
+       /**
+        * Get the character encoding used for output
+        *
+        * @since Preview Release
+        * @return string
+        */
+       public function get_encoding()
        {
                return $this->sanitize->output_encoding;
        }
 
-       function handle_content_type($mime = 'text/html')
+       /**
+        * Send the content-type header with correct encoding
+        *
+        * This method ensures that the SimplePie-enabled page is being served with
+        * the correct {@link http://www.iana.org/assignments/media-types/ mime-type}
+        * and character encoding HTTP headers (character encoding determined by the
+        * {@see set_output_encoding} config option).
+        *
+        * This won't work properly if any content or whitespace has already been
+        * sent to the browser, because it relies on PHP's
+        * {@link http://php.net/header header()} function, and these are the
+        * circumstances under which the function works.
+        *
+        * Because it's setting these settings for the entire page (as is the nature
+        * of HTTP headers), this should only be used once per page (again, at the
+        * top).
+        *
+        * @param string $mime MIME type to serve the page as
+        */
+       public function handle_content_type($mime = 'text/html')
        {
                if (!headers_sent())
                {
@@ -1849,7 +1681,33 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_type()
+       /**
+        * Get the type of the feed
+        *
+        * This returns a SIMPLEPIE_TYPE_* constant, which can be tested against
+        * using {@link http://php.net/language.operators.bitwise bitwise operators}
+        *
+        * @since 0.8 (usage changed to using constants in 1.0)
+        * @see SIMPLEPIE_TYPE_NONE Unknown.
+        * @see SIMPLEPIE_TYPE_RSS_090 RSS 0.90.
+        * @see SIMPLEPIE_TYPE_RSS_091_NETSCAPE RSS 0.91 (Netscape).
+        * @see SIMPLEPIE_TYPE_RSS_091_USERLAND RSS 0.91 (Userland).
+        * @see SIMPLEPIE_TYPE_RSS_091 RSS 0.91.
+        * @see SIMPLEPIE_TYPE_RSS_092 RSS 0.92.
+        * @see SIMPLEPIE_TYPE_RSS_093 RSS 0.93.
+        * @see SIMPLEPIE_TYPE_RSS_094 RSS 0.94.
+        * @see SIMPLEPIE_TYPE_RSS_10 RSS 1.0.
+        * @see SIMPLEPIE_TYPE_RSS_20 RSS 2.0.x.
+        * @see SIMPLEPIE_TYPE_RSS_RDF RDF-based RSS.
+        * @see SIMPLEPIE_TYPE_RSS_SYNDICATION Non-RDF-based RSS (truly intended as syndication format).
+        * @see SIMPLEPIE_TYPE_RSS_ALL Any version of RSS.
+        * @see SIMPLEPIE_TYPE_ATOM_03 Atom 0.3.
+        * @see SIMPLEPIE_TYPE_ATOM_10 Atom 1.0.
+        * @see SIMPLEPIE_TYPE_ATOM_ALL Any version of Atom.
+        * @see SIMPLEPIE_TYPE_ALL Any known/supported feed type.
+        * @return int SIMPLEPIE_TYPE_* constant
+        */
+       public function get_type()
        {
                if (!isset($this->data['type']))
                {
@@ -1879,18 +1737,18 @@ function embed_wmedia(width, height, link) {
                                        $this->data['type'] &= SIMPLEPIE_TYPE_RSS_090;
                                }
                        }
-                       elseif (isset($this->data['child']['']['rss']))
+                       elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss']))
                        {
                                $this->data['type'] &= SIMPLEPIE_TYPE_RSS_ALL;
-                               if (isset($this->data['child']['']['rss'][0]['attribs']['']['version']))
+                               if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version']))
                                {
-                                       switch (trim($this->data['child']['']['rss'][0]['attribs']['']['version']))
+                                       switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version']))
                                        {
                                                case '0.91':
                                                        $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091;
-                                                       if (isset($this->data['child']['']['rss'][0]['child']['']['skiphours']['hour'][0]['data']))
+                                                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data']))
                                                        {
-                                                               switch (trim($this->data['child']['']['rss'][0]['child']['']['skiphours']['hour'][0]['data']))
+                                                               switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data']))
                                                                {
                                                                        case '0':
                                                                                $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_NETSCAPE;
@@ -1930,119 +1788,22 @@ function embed_wmedia(width, height, link) {
        }
 
        /**
-        * Returns the URL for the favicon of the feed's website.
+        * Get the URL for the feed
         *
-        * @todo Cache atom:icon
-        * @access public
-        * @since 1.0
+        * May or may not be different from the URL passed to {@see set_feed_url()},
+        * depending on whether auto-discovery was used.
+        *
+        * @since Preview Release (previously called `get_feed_url()` since SimplePie 0.8.)
+        * @todo If we have a perm redirect we should return the new URL
+        * @todo When we make the above change, let's support <itunes:new-feed-url> as well
+        * @todo Also, |atom:link|@rel=self
+        * @return string|null
         */
-       function get_favicon()
+       public function subscribe_url()
        {
-               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon'))
+               if ($this->feed_url !== null)
                {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
-               }
-               elseif (($url = $this->get_link()) !== null && preg_match('/^http(s)?:\/\//i', $url))
-               {
-                       $favicon = SimplePie_Misc::absolutize_url('/favicon.ico', $url);
-
-                       if ($this->cache && $this->favicon_handler)
-                       {
-                               $favicon_filename = call_user_func($this->cache_name_function, $favicon);
-                               $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, $favicon_filename, 'spi');
-
-                               if ($cache->load())
-                               {
-                                       return $this->sanitize($this->favicon_handler . $favicon_filename, SIMPLEPIE_CONSTRUCT_IRI);
-                               }
-                               else
-                               {
-                                       $file =& new $this->file_class($favicon, $this->timeout / 10, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen);
-
-                                       if ($file->success && ($file->status_code == 200 || ($file->status_code > 206 && $file->status_code < 300)) && strlen($file->body) > 0)
-                                       {
-                                               $sniffer = new $this->content_type_sniffer_class($file);
-                                               if (substr($sniffer->get_type(), 0, 6) === 'image/')
-                                               {
-                                                       if ($cache->save(array('headers' => $file->headers, 'body' => $file->body)))
-                                                       {
-                                                               return $this->sanitize($this->favicon_handler . $favicon_filename, SIMPLEPIE_CONSTRUCT_IRI);
-                                                       }
-                                                       else
-                                                       {
-                                                               trigger_error("$cache->name is not writeable", E_USER_WARNING);
-                                                               return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI);
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI);
-                       }
-               }
-               return false;
-       }
-
-       /**
-        * @todo If we have a perm redirect we should return the new URL
-        * @todo When we make the above change, let's support <itunes:new-feed-url> as well
-        * @todo Also, |atom:link|@rel=self
-        */
-       function subscribe_url()
-       {
-               if ($this->feed_url !== null)
-               {
-                       return $this->sanitize($this->feed_url, SIMPLEPIE_CONSTRUCT_IRI);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function subscribe_feed()
-       {
-               if ($this->feed_url !== null)
-               {
-                       return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function subscribe_outlook()
-       {
-               if ($this->feed_url !== null)
-               {
-                       return 'outlook' . $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function subscribe_podcast()
-       {
-               if ($this->feed_url !== null)
-               {
-                       return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 3), SIMPLEPIE_CONSTRUCT_IRI);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function subscribe_itunes()
-       {
-               if ($this->feed_url !== null)
-               {
-                       return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 4), SIMPLEPIE_CONSTRUCT_IRI);
+                       return $this->sanitize($this->feed_url, SIMPLEPIE_CONSTRUCT_IRI);
                }
                else
                {
@@ -2051,107 +1812,37 @@ function embed_wmedia(width, height, link) {
        }
 
        /**
-        * Creates the subscribe_* methods' return data
+        * Get data for an feed-level element
         *
-        * @access private
-        * @param string $feed_url String to prefix to the feed URL
-        * @param string $site_url String to prefix to the site URL (and
-        * suffix to the feed URL)
-        * @return mixed URL if feed exists, false otherwise
+        * This method allows you to get access to ANY element/attribute that is a
+        * sub-element of the opening feed tag.
+        *
+        * The return value is an indexed array of elements matching the given
+        * namespace and tag name. Each element has `attribs`, `data` and `child`
+        * subkeys. For `attribs` and `child`, these contain namespace subkeys.
+        * `attribs` then has one level of associative name => value data (where
+        * `value` is a string) after the namespace. `child` has tag-indexed keys
+        * after the namespace, each member of which is an indexed array matching
+        * this same format.
+        *
+        * For example:
+        * <pre>
+        * // This is probably a bad example because we already support
+        * // <media:content> natively, but it shows you how to parse through
+        * // the nodes.
+        * $group = $item->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group');
+        * $content = $group[0]['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'];
+        * $file = $content[0]['attribs']['']['url'];
+        * echo $file;
+        * </pre>
+        *
+        * @since 1.0
+        * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
+        * @param string $namespace The URL of the XML namespace of the elements you're trying to access
+        * @param string $tag Tag name
+        * @return array
         */
-       function subscribe_service($feed_url, $site_url = null)
-       {
-               if ($this->subscribe_url())
-               {
-                       $return = $this->sanitize($feed_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->feed_url);
-                       if ($site_url !== null && $this->get_link() !== null)
-                       {
-                               $return .= $this->sanitize($site_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_link());
-                       }
-                       return $return;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function subscribe_aol()
-       {
-               return $this->subscribe_service('http://feeds.my.aol.com/add.jsp?url=');
-       }
-
-       function subscribe_bloglines()
-       {
-               return urldecode($this->subscribe_service('http://www.bloglines.com/sub/'));
-       }
-
-       function subscribe_eskobo()
-       {
-               return $this->subscribe_service('http://www.eskobo.com/?AddToMyPage=');
-       }
-
-       function subscribe_feedfeeds()
-       {
-               return $this->subscribe_service('http://www.feedfeeds.com/add?feed=');
-       }
-
-       function subscribe_feedster()
-       {
-               return $this->subscribe_service('http://www.feedster.com/myfeedster.php?action=addrss&confirm=no&rssurl=');
-       }
-
-       function subscribe_google()
-       {
-               return $this->subscribe_service('http://fusion.google.com/add?feedurl=');
-       }
-
-       function subscribe_gritwire()
-       {
-               return $this->subscribe_service('http://my.gritwire.com/feeds/addExternalFeed.aspx?FeedUrl=');
-       }
-
-       function subscribe_msn()
-       {
-               return $this->subscribe_service('http://my.msn.com/addtomymsn.armx?id=rss&ut=', '&ru=');
-       }
-
-       function subscribe_netvibes()
-       {
-               return $this->subscribe_service('http://www.netvibes.com/subscribe.php?url=');
-       }
-
-       function subscribe_newsburst()
-       {
-               return $this->subscribe_service('http://www.newsburst.com/Source/?add=');
-       }
-
-       function subscribe_newsgator()
-       {
-               return $this->subscribe_service('http://www.newsgator.com/ngs/subscriber/subext.aspx?url=');
-       }
-
-       function subscribe_odeo()
-       {
-               return $this->subscribe_service('http://www.odeo.com/listen/subscribe?feed=');
-       }
-
-       function subscribe_podnova()
-       {
-               return $this->subscribe_service('http://www.podnova.com/index_your_podcasts.srf?action=add&url=');
-       }
-
-       function subscribe_rojo()
-       {
-               return $this->subscribe_service('http://www.rojo.com/add-subscription?resource=');
-       }
-
-       function subscribe_yahoo()
-       {
-               return $this->subscribe_service('http://add.my.yahoo.com/rss?url=');
-       }
-
-       function get_feed_tags($namespace, $tag)
+       public function get_feed_tags($namespace, $tag)
        {
                $type = $this->get_type();
                if ($type & SIMPLEPIE_TYPE_ATOM_10)
@@ -2177,15 +1868,29 @@ function embed_wmedia(width, height, link) {
                }
                if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
                {
-                       if (isset($this->data['child']['']['rss'][0]['child'][$namespace][$tag]))
+                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag]))
                        {
-                               return $this->data['child']['']['rss'][0]['child'][$namespace][$tag];
+                               return $this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag];
                        }
                }
                return null;
        }
 
-       function get_channel_tags($namespace, $tag)
+       /**
+        * Get data for an channel-level element
+        *
+        * This method allows you to get access to ANY element/attribute in the
+        * channel/header section of the feed.
+        *
+        * See {@see SimplePie::get_feed_tags()} for a description of the return value
+        *
+        * @since 1.0
+        * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
+        * @param string $namespace The URL of the XML namespace of the elements you're trying to access
+        * @param string $tag Tag name
+        * @return array
+        */
+       public function get_channel_tags($namespace, $tag)
        {
                $type = $this->get_type();
                if ($type & SIMPLEPIE_TYPE_ATOM_ALL)
@@ -2217,7 +1922,7 @@ function embed_wmedia(width, height, link) {
                }
                if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
                {
-                       if ($channel = $this->get_feed_tags('', 'channel'))
+                       if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'channel'))
                        {
                                if (isset($channel[0]['child'][$namespace][$tag]))
                                {
@@ -2228,7 +1933,21 @@ function embed_wmedia(width, height, link) {
                return null;
        }
 
-       function get_image_tags($namespace, $tag)
+       /**
+        * Get data for an channel-level element
+        *
+        * This method allows you to get access to ANY element/attribute in the
+        * image/logo section of the feed.
+        *
+        * See {@see SimplePie::get_feed_tags()} for a description of the return value
+        *
+        * @since 1.0
+        * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
+        * @param string $namespace The URL of the XML namespace of the elements you're trying to access
+        * @param string $tag Tag name
+        * @return array
+        */
+       public function get_image_tags($namespace, $tag)
        {
                $type = $this->get_type();
                if ($type & SIMPLEPIE_TYPE_RSS_10)
@@ -2253,7 +1972,7 @@ function embed_wmedia(width, height, link) {
                }
                if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
                {
-                       if ($image = $this->get_channel_tags('', 'image'))
+                       if ($image = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'image'))
                        {
                                if (isset($image[0]['child'][$namespace][$tag]))
                                {
@@ -2264,7 +1983,19 @@ function embed_wmedia(width, height, link) {
                return null;
        }
 
-       function get_base($element = array())
+       /**
+        * Get the base URL value from the feed
+        *
+        * Uses `<xml:base>` if available, otherwise uses the first link in the
+        * feed, or failing that, the URL of the feed itself.
+        *
+        * @see get_link
+        * @see subscribe_url
+        *
+        * @param array $element
+        * @return string
+        */
+       public function get_base($element = array())
        {
                if (!($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION) && !empty($element['xml_base_explicit']) && isset($element['xml_base']))
                {
@@ -2280,20 +2011,38 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function sanitize($data, $type, $base = '')
+       /**
+        * Sanitize feed data
+        *
+        * @access private
+        * @see SimplePie_Sanitize::sanitize()
+        * @param string $data Data to sanitize
+        * @param int $type One of the SIMPLEPIE_CONSTRUCT_* constants
+        * @param string $base Base URL to resolve URLs against
+        * @return string Sanitized data
+        */
+       public function sanitize($data, $type, $base = '')
        {
                return $this->sanitize->sanitize($data, $type, $base);
        }
 
-       function get_title()
+       /**
+        * Get the title of the feed
+        *
+        * Uses `<atom:title>`, `<title>` or `<dc:title>`
+        *
+        * @since 1.0 (previously called `get_feed_title` since 0.8)
+        * @return string|null
+        */
+       public function get_title()
        {
                if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
                {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
                }
                elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
                {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
                }
                elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
                {
@@ -2303,7 +2052,7 @@ function embed_wmedia(width, height, link) {
                {
                        return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
                }
-               elseif ($return = $this->get_channel_tags('', 'title'))
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title'))
                {
                        return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
                }
@@ -2321,7 +2070,14 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_category($key = 0)
+       /**
+        * Get a category for the feed
+        *
+        * @since Unknown
+        * @param int $key The category that you want to return.  Remember that arrays begin with 0, not 1
+        * @return SimplePie_Category|null
+        */
+       public function get_category($key = 0)
        {
                $categories = $this->get_categories();
                if (isset($categories[$key]))
@@ -2334,7 +2090,15 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_categories()
+       /**
+        * Get all categories for the feed
+        *
+        * Uses `<atom:category>`, `<category>` or `<dc:subject>`
+        *
+        * @since Unknown
+        * @return array|null List of {@see SimplePie_Category} objects
+        */
+       public function get_categories()
        {
                $categories = array();
 
@@ -2355,24 +2119,35 @@ function embed_wmedia(width, height, link) {
                        {
                                $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
                        }
-                       $categories[] =& new $this->category_class($term, $scheme, $label);
+                       $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
                }
-               foreach ((array) $this->get_channel_tags('', 'category') as $category)
+               foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category)
                {
-                       $categories[] =& new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+                       // This is really the label, but keep this as the term also for BC.
+                       // Label will also work on retrieving because that falls back to term.
+                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                       if (isset($category['attribs']['']['domain']))
+                       {
+                               $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT);
+                       }
+                       else
+                       {
+                               $scheme = null;
+                       }
+                       $categories[] = $this->registry->create('Category', array($term, $scheme, null));
                }
                foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
                {
-                       $categories[] =& new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+                       $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
                }
                foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
                {
-                       $categories[] =& new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+                       $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
                }
 
                if (!empty($categories))
                {
-                       return SimplePie_Misc::array_unique($categories);
+                       return array_unique($categories);
                }
                else
                {
@@ -2380,7 +2155,14 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_author($key = 0)
+       /**
+        * Get an author for the feed
+        *
+        * @since 1.1
+        * @param int $key The author that you want to return.  Remember that arrays begin with 0, not 1
+        * @return SimplePie_Author|null
+        */
+       public function get_author($key = 0)
        {
                $authors = $this->get_authors();
                if (isset($authors[$key]))
@@ -2393,7 +2175,15 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_authors()
+       /**
+        * Get all authors for the feed
+        *
+        * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`
+        *
+        * @since 1.1
+        * @return array|null List of {@see SimplePie_Author} objects
+        */
+       public function get_authors()
        {
                $authors = array();
                foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
@@ -2415,7 +2205,7 @@ function embed_wmedia(width, height, link) {
                        }
                        if ($name !== null || $email !== null || $uri !== null)
                        {
-                               $authors[] =& new $this->author_class($name, $uri, $email);
+                               $authors[] = $this->registry->create('Author', array($name, $uri, $email));
                        }
                }
                if ($author = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
@@ -2437,25 +2227,25 @@ function embed_wmedia(width, height, link) {
                        }
                        if ($name !== null || $email !== null || $url !== null)
                        {
-                               $authors[] =& new $this->author_class($name, $url, $email);
+                               $authors[] = $this->registry->create('Author', array($name, $url, $email));
                        }
                }
                foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
                {
-                       $authors[] =& new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+                       $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
                }
                foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
                {
-                       $authors[] =& new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+                       $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
                }
                foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
                {
-                       $authors[] =& new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+                       $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
                }
 
                if (!empty($authors))
                {
-                       return SimplePie_Misc::array_unique($authors);
+                       return array_unique($authors);
                }
                else
                {
@@ -2463,7 +2253,14 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_contributor($key = 0)
+       /**
+        * Get a contributor for the feed
+        *
+        * @since 1.1
+        * @param int $key The contrbutor that you want to return.  Remember that arrays begin with 0, not 1
+        * @return SimplePie_Author|null
+        */
+       public function get_contributor($key = 0)
        {
                $contributors = $this->get_contributors();
                if (isset($contributors[$key]))
@@ -2476,7 +2273,15 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_contributors()
+       /**
+        * Get all contributors for the feed
+        *
+        * Uses `<atom:contributor>`
+        *
+        * @since 1.1
+        * @return array|null List of {@see SimplePie_Author} objects
+        */
+       public function get_contributors()
        {
                $contributors = array();
                foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor)
@@ -2498,7 +2303,7 @@ function embed_wmedia(width, height, link) {
                        }
                        if ($name !== null || $email !== null || $uri !== null)
                        {
-                               $contributors[] =& new $this->author_class($name, $uri, $email);
+                               $contributors[] = $this->registry->create('Author', array($name, $uri, $email));
                        }
                }
                foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor)
@@ -2520,13 +2325,13 @@ function embed_wmedia(width, height, link) {
                        }
                        if ($name !== null || $email !== null || $url !== null)
                        {
-                               $contributors[] =& new $this->author_class($name, $url, $email);
+                               $contributors[] = $this->registry->create('Author', array($name, $url, $email));
                        }
                }
 
                if (!empty($contributors))
                {
-                       return SimplePie_Misc::array_unique($contributors);
+                       return array_unique($contributors);
                }
                else
                {
@@ -2534,7 +2339,15 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_link($key = 0, $rel = 'alternate')
+       /**
+        * Get a single link for the feed
+        *
+        * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8)
+        * @param int $key The link that you want to return.  Remember that arrays begin with 0, not 1
+        * @param string $rel The relationship of the link to return
+        * @return string|null Link URL
+        */
+       public function get_link($key = 0, $rel = 'alternate')
        {
                $links = $this->get_links($rel);
                if (isset($links[$key]))
@@ -2548,14 +2361,31 @@ function embed_wmedia(width, height, link) {
        }
 
        /**
-        * Added for parity between the parent-level and the item/entry-level.
+        * Get the permalink for the item
+        *
+        * Returns the first link available with a relationship of "alternate".
+        * Identical to {@see get_link()} with key 0
+        *
+        * @see get_link
+        * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8)
+        * @internal Added for parity between the parent-level and the item/entry-level.
+        * @return string|null Link URL
         */
-       function get_permalink()
+       public function get_permalink()
        {
                return $this->get_link(0);
        }
 
-       function get_links($rel = 'alternate')
+       /**
+        * Get all links for the feed
+        *
+        * Uses `<atom:link>` or `<link>`
+        *
+        * @since Beta 2
+        * @param string $rel The relationship of links to return
+        * @return array|null Links found for the feed (strings)
+        */
+       public function get_links($rel = 'alternate')
        {
                if (!isset($this->data['links']))
                {
@@ -2591,7 +2421,7 @@ function embed_wmedia(width, height, link) {
                        {
                                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
                        }
-                       if ($links = $this->get_channel_tags('', 'link'))
+                       if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link'))
                        {
                                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
                        }
@@ -2599,7 +2429,7 @@ function embed_wmedia(width, height, link) {
                        $keys = array_keys($this->data['links']);
                        foreach ($keys as $key)
                        {
-                               if (SimplePie_Misc::is_isegment_nz_nc($key))
+                               if ($this->registry->call('Misc', 'is_isegment_nz_nc', array($key)))
                                {
                                        if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
                                        {
@@ -2611,7 +2441,7 @@ function embed_wmedia(width, height, link) {
                                                $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
                                        }
                                }
-                               elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
+                               elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
                                {
                                        $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
                                }
@@ -2629,15 +2459,29 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_description()
+       public function get_all_discovered_feeds()
+       {
+               return $this->all_discovered_feeds;
+       }
+
+       /**
+        * Get the content for the item
+        *
+        * Uses `<atom:subtitle>`, `<atom:tagline>`, `<description>`,
+        * `<dc:description>`, `<itunes:summary>` or `<itunes:subtitle>`
+        *
+        * @since 1.0 (previously called `get_feed_description()` since 0.8)
+        * @return string|null
+        */
+       public function get_description()
        {
                if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle'))
                {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
                }
                elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline'))
                {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
                }
                elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
                {
@@ -2647,9 +2491,9 @@ function embed_wmedia(width, height, link) {
                {
                        return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
                }
-               elseif ($return = $this->get_channel_tags('', 'description'))
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description'))
                {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
                }
                elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
                {
@@ -2673,17 +2517,25 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_copyright()
+       /**
+        * Get the copyright info for the feed
+        *
+        * Uses `<atom:rights>`, `<atom:copyright>` or `<dc:rights>`
+        *
+        * @since 1.0 (previously called `get_feed_copyright()` since 0.8)
+        * @return string|null
+        */
+       public function get_copyright()
        {
                if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
                {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
                }
                elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright'))
                {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
                }
-               elseif ($return = $this->get_channel_tags('', 'copyright'))
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright'))
                {
                        return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
                }
@@ -2701,9 +2553,17 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_language()
+       /**
+        * Get the language for the feed
+        *
+        * Uses `<language>`, `<dc:language>`, or @xml_lang
+        *
+        * @since 1.0 (previously called `get_feed_language()` since 0.8)
+        * @return string|null
+        */
+       public function get_language()
        {
-               if ($return = $this->get_channel_tags('', 'language'))
+               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language'))
                {
                        return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
                }
@@ -2737,13 +2597,26 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_latitude()
+       /**
+        * Get the latitude coordinates for the item
+        *
+        * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
+        *
+        * Uses `<geo:lat>` or `<georss:point>`
+        *
+        * @since 1.0
+        * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
+        * @link http://www.georss.org/ GeoRSS
+        * @return string|null
+        */
+       public function get_latitude()
        {
+
                if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
                {
                        return (float) $return[0]['data'];
                }
-               elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
+               elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
                {
                        return (float) $match[1];
                }
@@ -2753,7 +2626,19 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_longitude()
+       /**
+        * Get the longitude coordinates for the feed
+        *
+        * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
+        *
+        * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>`
+        *
+        * @since 1.0
+        * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
+        * @link http://www.georss.org/ GeoRSS
+        * @return string|null
+        */
+       public function get_longitude()
        {
                if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
                {
@@ -2763,7 +2648,7 @@ function embed_wmedia(width, height, link) {
                {
                        return (float) $return[0]['data'];
                }
-               elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
+               elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
                {
                        return (float) $match[2];
                }
@@ -2773,7 +2658,16 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_image_title()
+       /**
+        * Get the feed logo's title
+        *
+        * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a "feed logo" title.
+        *
+        * Uses `<image><title>` or `<image><dc:title>`
+        *
+        * @return string|null
+        */
+       public function get_image_title()
        {
                if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
                {
@@ -2783,7 +2677,7 @@ function embed_wmedia(width, height, link) {
                {
                        return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
                }
-               elseif ($return = $this->get_image_tags('', 'title'))
+               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title'))
                {
                        return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
                }
@@ -2801,7 +2695,18 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_image_url()
+       /**
+        * Get the feed logo's URL
+        *
+        * RSS 0.9.0, 2.0, Atom 1.0, and feeds with iTunes RSS tags are allowed to
+        * have a "feed logo" URL. This points directly to the image itself.
+        *
+        * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`,
+        * `<image><title>` or `<image><dc:title>`
+        *
+        * @return string|null
+        */
+       public function get_image_url()
        {
                if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image'))
                {
@@ -2823,7 +2728,7 @@ function embed_wmedia(width, height, link) {
                {
                        return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
                }
-               elseif ($return = $this->get_image_tags('', 'url'))
+               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url'))
                {
                        return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
                }
@@ -2833,7 +2738,19 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_image_link()
+
+       /**
+        * Get the feed logo's link
+        *
+        * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a "feed logo" link. This
+        * points to a human-readable page that the image should link to.
+        *
+        * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`,
+        * `<image><title>` or `<image><dc:title>`
+        *
+        * @return string|null
+        */
+       public function get_image_link()
        {
                if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
                {
@@ -2843,7 +2760,7 @@ function embed_wmedia(width, height, link) {
                {
                        return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
                }
-               elseif ($return = $this->get_image_tags('', 'link'))
+               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link'))
                {
                        return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
                }
@@ -2853,13 +2770,23 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_image_width()
+       /**
+        * Get the feed logo's link
+        *
+        * RSS 2.0 feeds are allowed to have a "feed logo" width.
+        *
+        * Uses `<image><width>` or defaults to 88.0 if no width is specified and
+        * the feed is an RSS 2.0 feed.
+        *
+        * @return int|float|null
+        */
+       public function get_image_width()
        {
-               if ($return = $this->get_image_tags('', 'width'))
+               if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'width'))
                {
                        return round($return[0]['data']);
                }
-               elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags('', 'url'))
+               elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url'))
                {
                        return 88.0;
                }
@@ -2869,13 +2796,23 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_image_height()
+       /**
+        * Get the feed logo's height
+        *
+        * RSS 2.0 feeds are allowed to have a "feed logo" height.
+        *
+        * Uses `<image><height>` or defaults to 31.0 if no height is specified and
+        * the feed is an RSS 2.0 feed.
+        *
+        * @return int|float|null
+        */
+       public function get_image_height()
        {
-               if ($return = $this->get_image_tags('', 'height'))
+               if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'height'))
                {
                        return round($return[0]['data']);
                }
-               elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags('', 'url'))
+               elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url'))
                {
                        return 31.0;
                }
@@ -2885,10 +2822,20 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_item_quantity($max = 0)
+       /**
+        * Get the number of items in the feed
+        *
+        * This is well-suited for {@link http://php.net/for for()} loops with
+        * {@see get_item()}
+        *
+        * @param int $max Maximum value to return. 0 for no limit
+        * @return int Number of items in the feed
+        */
+       public function get_item_quantity($max = 0)
        {
+               $max = (int) $max;
                $qty = count($this->get_items());
-               if ($max == 0)
+               if ($max === 0)
                {
                        return $qty;
                }
@@ -2898,7 +2845,19 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_item($key = 0)
+       /**
+        * Get a single item from the feed
+        *
+        * This is better suited for {@link http://php.net/for for()} loops, whereas
+        * {@see get_items()} is better suited for
+        * {@link http://php.net/foreach foreach()} loops.
+        *
+        * @see get_item_quantity()
+        * @since Beta 2
+        * @param int $key The item that you want to return.  Remember that arrays begin with 0, not 1
+        * @return SimplePie_Item|null
+        */
+       public function get_item($key = 0)
        {
                $items = $this->get_items();
                if (isset($items[$key]))
@@ -2911,52 +2870,69 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function get_items($start = 0, $end = 0)
+       /**
+        * Get all items from the feed
+        *
+        * This is better suited for {@link http://php.net/for for()} loops, whereas
+        * {@see get_items()} is better suited for
+        * {@link http://php.net/foreach foreach()} loops.
+        *
+        * @see get_item_quantity
+        * @since Beta 2
+        * @param int $start Index to start at
+        * @param int $end Number of items to return. 0 for all items after `$start`
+        * @return array|null List of {@see SimplePie_Item} objects
+        */
+       public function get_items($start = 0, $end = 0)
        {
-               if (!empty($this->multifeed_objects))
-               {
-                       return SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit);
-               }
-               elseif (!isset($this->data['items']))
+               if (!isset($this->data['items']))
                {
-                       if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry'))
+                       if (!empty($this->multifeed_objects))
                        {
-                               $keys = array_keys($items);
-                               foreach ($keys as $key)
-                               {
-                                       $this->data['items'][] =& new $this->item_class($this, $items[$key]);
-                               }
+                               $this->data['items'] = SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit);
                        }
-                       if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry'))
+                       else
                        {
-                               $keys = array_keys($items);
-                               foreach ($keys as $key)
+                               $this->data['items'] = array();
+                               if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry'))
                                {
-                                       $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+                                       $keys = array_keys($items);
+                                       foreach ($keys as $key)
+                                       {
+                                               $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
+                                       }
                                }
-                       }
-                       if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item'))
-                       {
-                               $keys = array_keys($items);
-                               foreach ($keys as $key)
+                               if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry'))
                                {
-                                       $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+                                       $keys = array_keys($items);
+                                       foreach ($keys as $key)
+                                       {
+                                               $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
+                                       }
                                }
-                       }
-                       if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item'))
-                       {
-                               $keys = array_keys($items);
-                               foreach ($keys as $key)
+                               if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item'))
+                               {
+                                       $keys = array_keys($items);
+                                       foreach ($keys as $key)
+                                       {
+                                               $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
+                                       }
+                               }
+                               if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item'))
                                {
-                                       $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+                                       $keys = array_keys($items);
+                                       foreach ($keys as $key)
+                                       {
+                                               $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
+                                       }
                                }
-                       }
-                       if ($items = $this->get_channel_tags('', 'item'))
-                       {
-                               $keys = array_keys($items);
-                               foreach ($keys as $key)
+                               if ($items = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'item'))
                                {
-                                       $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+                                       $keys = array_keys($items);
+                                       foreach ($keys as $key)
+                                       {
+                                               $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
+                                       }
                                }
                        }
                }
@@ -2964,7 +2940,7 @@ function embed_wmedia(width, height, link) {
                if (!empty($this->data['items']))
                {
                        // If we want to order it by date, check if all items have a date, and then sort it
-                       if ($this->order_by_date)
+                       if ($this->order_by_date && empty($this->multifeed_objects))
                        {
                                if (!isset($this->data['ordered_items']))
                                {
@@ -2981,7 +2957,7 @@ function embed_wmedia(width, height, link) {
                                        $this->data['ordered_items'] = $this->data['items'];
                                        if ($do_sort)
                                        {
-                                               usort($this->data['ordered_items'], array(&$this, 'sort_items'));
+                                               usort($this->data['ordered_items'], array(get_class($this), 'sort_items'));
                                        }
                                }
                                $items = $this->data['ordered_items'];
@@ -2992,7 +2968,7 @@ function embed_wmedia(width, height, link) {
                        }
 
                        // Slice the data as desired
-                       if ($end == 0)
+                       if ($end === 0)
                        {
                                return array_slice($items, $start);
                        }
@@ -3007,19 +2983,99 @@ function embed_wmedia(width, height, link) {
                }
        }
 
-       function sort_items($a, $b)
+       /**
+        * Set the favicon handler
+        *
+        * @deprecated Use your own favicon handling instead
+        */
+       public function set_favicon_handler($page = false, $qs = 'i')
+       {
+               $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
+               trigger_error('Favicon handling has been removed, please use your own handling', $level);
+               return false;
+       }
+
+       /**
+        * Get the favicon for the current feed
+        *
+        * @deprecated Use your own favicon handling instead
+        */
+       public function get_favicon()
+       {
+               $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
+               trigger_error('Favicon handling has been removed, please use your own handling', $level);
+
+               if (($url = $this->get_link()) !== null)
+               {
+                       return 'http://g.etfv.co/' . urlencode($url);
+               }
+
+               return false;
+       }
+
+       /**
+        * Magic method handler
+        *
+        * @param string $method Method name
+        * @param array $args Arguments to the method
+        * @return mixed
+        */
+       public function __call($method, $args)
+       {
+               if (strpos($method, 'subscribe_') === 0)
+               {
+                       $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
+                       trigger_error('subscribe_*() has been deprecated, implement the callback yourself', $level);
+                       return '';
+               }
+               if ($method === 'enable_xml_dump')
+               {
+                       $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
+                       trigger_error('enable_xml_dump() has been deprecated, use get_raw_data() instead', $level);
+                       return false;
+               }
+
+               $class = get_class($this);
+               $trace = debug_backtrace();
+               $file = $trace[0]['file'];
+               $line = $trace[0]['line'];
+               trigger_error("Call to undefined method $class::$method() in $file on line $line", E_USER_ERROR);
+       }
+
+       /**
+        * Sorting callback for items
+        *
+        * @access private
+        * @param SimplePie $a
+        * @param SimplePie $b
+        * @return boolean
+        */
+       public static function sort_items($a, $b)
        {
                return $a->get_date('U') <= $b->get_date('U');
        }
 
-       function merge_items($urls, $start = 0, $end = 0, $limit = 0)
+       /**
+        * Merge items from several feeds into one
+        *
+        * If you're merging multiple feeds together, they need to all have dates
+        * for the items or else SimplePie will refuse to sort them.
+        *
+        * @link http://simplepie.org/wiki/tutorial/sort_multiple_feeds_by_time_and_date#if_feeds_require_separate_per-feed_settings
+        * @param array $urls List of SimplePie feed objects to merge
+        * @param int $start Starting item
+        * @param int $end Number of items to return
+        * @param int $limit Maximum number of items per feed
+        * @return array
+        */
+       public static function merge_items($urls, $start = 0, $end = 0, $limit = 0)
        {
                if (is_array($urls) && sizeof($urls) > 0)
                {
                        $items = array();
                        foreach ($urls as $arg)
                        {
-                               if (is_a($arg, 'SimplePie'))
+                               if ($arg instanceof SimplePie)
                                {
                                        $items = array_merge($items, $arg->get_items(0, $limit));
                                }
@@ -3041,10 +3097,10 @@ function embed_wmedia(width, height, link) {
                        $item = null;
                        if ($do_sort)
                        {
-                               usort($items, array('SimplePie', 'sort_items'));
+                               usort($items, array(get_class($urls[0]), 'sort_items'));
                        }
 
-                       if ($end == 0)
+                       if ($end === 0)
                        {
                                return array_slice($items, $start);
                        }
@@ -3060,10613 +3116,4 @@ function embed_wmedia(width, height, link) {
                }
        }
 }
-
-class SimplePie_Item
-{
-       var $feed;
-       var $data = array();
-
-       function SimplePie_Item($feed, $data)
-       {
-               $this->feed = $feed;
-               $this->data = $data;
-       }
-
-       function __toString()
-       {
-               return md5(serialize($this->data));
-       }
-
-       /**
-        * Remove items that link back to this before destroying this object
-        */
-       function __destruct()
-       {
-               unset($this->feed);
-       }
-
-       function get_item_tags($namespace, $tag)
-       {
-               if (isset($this->data['child'][$namespace][$tag]))
-               {
-                       return $this->data['child'][$namespace][$tag];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_base($element = array())
-       {
-               return $this->feed->get_base($element);
-       }
-
-       function sanitize($data, $type, $base = '')
-       {
-               return $this->feed->sanitize($data, $type, $base);
-       }
-
-       function get_feed()
-       {
-               return $this->feed;
-       }
-
-       function get_id($hash = false)
-       {
-               if (!$hash)
-               {
-                       if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id'))
-                       {
-                               return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id'))
-                       {
-                               return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       elseif ($return = $this->get_item_tags('', 'guid'))
-                       {
-                               return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier'))
-                       {
-                               return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier'))
-                       {
-                               return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       elseif (($return = $this->get_permalink()) !== null)
-                       {
-                               return $return;
-                       }
-                       elseif (($return = $this->get_title()) !== null)
-                       {
-                               return $return;
-                       }
-               }
-               if ($this->get_permalink() !== null || $this->get_title() !== null)
-               {
-                       return md5($this->get_permalink() . $this->get_title());
-               }
-               else
-               {
-                       return md5(serialize($this->data));
-               }
-       }
-
-       function get_title()
-       {
-               if (!isset($this->data['title']))
-               {
-                       if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
-                       {
-                               $this->data['title'] = $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
-                       {
-                               $this->data['title'] = $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
-                       {
-                               $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
-                       {
-                               $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-                       }
-                       elseif ($return = $this->get_item_tags('', 'title'))
-                       {
-                               $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
-                       {
-                               $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
-                       {
-                               $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       else
-                       {
-                               $this->data['title'] = null;
-                       }
-               }
-               return $this->data['title'];
-       }
-
-       function get_description($description_only = false)
-       {
-               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary'))
-               {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary'))
-               {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags('', 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif (!$description_only)
-               {
-                       return $this->get_content(true);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_content($content_only = false)
-       {
-               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content'))
-               {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_content_construct_type($return[0]['attribs']), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content'))
-               {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
-               }
-               elseif (!$content_only)
-               {
-                       return $this->get_description(true);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_category($key = 0)
-       {
-               $categories = $this->get_categories();
-               if (isset($categories[$key]))
-               {
-                       return $categories[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_categories()
-       {
-               $categories = array();
-
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
-               {
-                       $term = null;
-                       $scheme = null;
-                       $label = null;
-                       if (isset($category['attribs']['']['term']))
-                       {
-                               $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($category['attribs']['']['scheme']))
-                       {
-                               $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($category['attribs']['']['label']))
-                       {
-                               $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       $categories[] =& new $this->feed->category_class($term, $scheme, $label);
-               }
-               foreach ((array) $this->get_item_tags('', 'category') as $category)
-               {
-                       $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
-               }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
-               {
-                       $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
-               }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
-               {
-                       $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
-               }
-
-               if (!empty($categories))
-               {
-                       return SimplePie_Misc::array_unique($categories);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_author($key = 0)
-       {
-               $authors = $this->get_authors();
-               if (isset($authors[$key]))
-               {
-                       return $authors[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_contributor($key = 0)
-       {
-               $contributors = $this->get_contributors();
-               if (isset($contributors[$key]))
-               {
-                       return $contributors[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_contributors()
-       {
-               $contributors = array();
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor)
-               {
-                       $name = null;
-                       $uri = null;
-                       $email = null;
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
-                       {
-                               $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $uri !== null)
-                       {
-                               $contributors[] =& new $this->feed->author_class($name, $uri, $email);
-                       }
-               }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor)
-               {
-                       $name = null;
-                       $url = null;
-                       $email = null;
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
-                       {
-                               $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $url !== null)
-                       {
-                               $contributors[] =& new $this->feed->author_class($name, $url, $email);
-                       }
-               }
-
-               if (!empty($contributors))
-               {
-                       return SimplePie_Misc::array_unique($contributors);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * @todo Atom inheritance (item author, source author, feed author)
-        */
-       function get_authors()
-       {
-               $authors = array();
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
-               {
-                       $name = null;
-                       $uri = null;
-                       $email = null;
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
-                       {
-                               $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
-                       }
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $uri !== null)
-                       {
-                               $authors[] =& new $this->feed->author_class($name, $uri, $email);
-                       }
-               }
-               if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
-               {
-                       $name = null;
-                       $url = null;
-                       $email = null;
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
-                       {
-                               $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
-                       }
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $url !== null)
-                       {
-                               $authors[] =& new $this->feed->author_class($name, $url, $email);
-                       }
-               }
-               if ($author = $this->get_item_tags('', 'author'))
-               {
-                       $authors[] =& new $this->feed->author_class(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-               }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
-               {
-                       $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
-               }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
-               {
-                       $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
-               }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
-               {
-                       $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
-               }
-
-               if (!empty($authors))
-               {
-                       return SimplePie_Misc::array_unique($authors);
-               }
-               elseif (($source = $this->get_source()) && ($authors = $source->get_authors()))
-               {
-                       return $authors;
-               }
-               elseif ($authors = $this->feed->get_authors())
-               {
-                       return $authors;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_copyright()
-       {
-               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_date($date_format = 'j F Y, g:i a')
-       {
-               if (!isset($this->data['date']))
-               {
-                       if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-                       elseif ($return = $this->get_item_tags('', 'pubDate'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-
-                       if (!empty($this->data['date']['raw']))
-                       {
-                               $parser = SimplePie_Parse_Date::get();
-                               $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']);
-                       }
-                       else
-                       {
-                               $this->data['date'] = null;
-                       }
-               }
-               if ($this->data['date'])
-               {
-                       $date_format = (string) $date_format;
-                       switch ($date_format)
-                       {
-                               case '':
-                                       return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT);
-
-                               case 'U':
-                                       return $this->data['date']['parsed'];
-
-                               default:
-                                       return date($date_format, $this->data['date']['parsed']);
-                       }
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_local_date($date_format = '%c')
-       {
-               if (!$date_format)
-               {
-                       return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif (($date = $this->get_date('U')) !== null)
-               {
-                       return strftime($date_format, $date);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_permalink()
-       {
-               $link = $this->get_link();
-               $enclosure = $this->get_enclosure(0);
-               if ($link !== null)
-               {
-                       return $link;
-               }
-               elseif ($enclosure !== null)
-               {
-                       return $enclosure->get_link();
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_link($key = 0, $rel = 'alternate')
-       {
-               $links = $this->get_links($rel);
-               if ($links[$key] !== null)
-               {
-                       return $links[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_links($rel = 'alternate')
-       {
-               if (!isset($this->data['links']))
-               {
-                       $this->data['links'] = array();
-                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
-                       {
-                               if (isset($link['attribs']['']['href']))
-                               {
-                                       $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
-                                       $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
-
-                               }
-                       }
-                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
-                       {
-                               if (isset($link['attribs']['']['href']))
-                               {
-                                       $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
-                                       $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
-                               }
-                       }
-                       if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-                       if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-                       if ($links = $this->get_item_tags('', 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-                       if ($links = $this->get_item_tags('', 'guid'))
-                       {
-                               if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) == 'true')
-                               {
-                                       $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                               }
-                       }
-
-                       $keys = array_keys($this->data['links']);
-                       foreach ($keys as $key)
-                       {
-                               if (SimplePie_Misc::is_isegment_nz_nc($key))
-                               {
-                                       if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
-                                       {
-                                               $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
-                                               $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
-                                       }
-                                       else
-                                       {
-                                               $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
-                                       }
-                               }
-                               elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
-                               {
-                                       $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
-                               }
-                               $this->data['links'][$key] = array_unique($this->data['links'][$key]);
-                       }
-               }
-               if (isset($this->data['links'][$rel]))
-               {
-                       return $this->data['links'][$rel];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * @todo Add ability to prefer one type of content over another (in a media group).
-        */
-       function get_enclosure($key = 0, $prefer = null)
-       {
-               $enclosures = $this->get_enclosures();
-               if (isset($enclosures[$key]))
-               {
-                       return $enclosures[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Grabs all available enclosures (podcasts, etc.)
-        *
-        * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
-        *
-        * At this point, we're pretty much assuming that all enclosures for an item are the same content.  Anything else is too complicated to properly support.
-        *
-        * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4).
-        * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists).
-        */
-       function get_enclosures()
-       {
-               if (!isset($this->data['enclosures']))
-               {
-                       $this->data['enclosures'] = array();
-
-                       // Elements
-                       $captions_parent = null;
-                       $categories_parent = null;
-                       $copyrights_parent = null;
-                       $credits_parent = null;
-                       $description_parent = null;
-                       $duration_parent = null;
-                       $hashes_parent = null;
-                       $keywords_parent = null;
-                       $player_parent = null;
-                       $ratings_parent = null;
-                       $restrictions_parent = null;
-                       $thumbnails_parent = null;
-                       $title_parent = null;
-
-                       // Let's do the channel and item-level ones first, and just re-use them if we need to.
-                       $parent = $this->get_feed();
-
-                       // CAPTIONS
-                       if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
-                       {
-                               foreach ($captions as $caption)
-                               {
-                                       $caption_type = null;
-                                       $caption_lang = null;
-                                       $caption_startTime = null;
-                                       $caption_endTime = null;
-                                       $caption_text = null;
-                                       if (isset($caption['attribs']['']['type']))
-                                       {
-                                               $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['attribs']['']['lang']))
-                                       {
-                                               $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['attribs']['']['start']))
-                                       {
-                                               $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['attribs']['']['end']))
-                                       {
-                                               $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['data']))
-                                       {
-                                               $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $captions_parent[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
-                               }
-                       }
-                       elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
-                       {
-                               foreach ($captions as $caption)
-                               {
-                                       $caption_type = null;
-                                       $caption_lang = null;
-                                       $caption_startTime = null;
-                                       $caption_endTime = null;
-                                       $caption_text = null;
-                                       if (isset($caption['attribs']['']['type']))
-                                       {
-                                               $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['attribs']['']['lang']))
-                                       {
-                                               $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['attribs']['']['start']))
-                                       {
-                                               $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['attribs']['']['end']))
-                                       {
-                                               $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['data']))
-                                       {
-                                               $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $captions_parent[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
-                               }
-                       }
-                       if (is_array($captions_parent))
-                       {
-                               $captions_parent = array_values(SimplePie_Misc::array_unique($captions_parent));
-                       }
-
-                       // CATEGORIES
-                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
-                       {
-                               $term = null;
-                               $scheme = null;
-                               $label = null;
-                               if (isset($category['data']))
-                               {
-                                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               if (isset($category['attribs']['']['scheme']))
-                               {
-                                       $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               else
-                               {
-                                       $scheme = 'http://search.yahoo.com/mrss/category_schema';
-                               }
-                               if (isset($category['attribs']['']['label']))
-                               {
-                                       $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
-                       }
-                       foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
-                       {
-                               $term = null;
-                               $scheme = null;
-                               $label = null;
-                               if (isset($category['data']))
-                               {
-                                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               if (isset($category['attribs']['']['scheme']))
-                               {
-                                       $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               else
-                               {
-                                       $scheme = 'http://search.yahoo.com/mrss/category_schema';
-                               }
-                               if (isset($category['attribs']['']['label']))
-                               {
-                                       $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
-                       }
-                       foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category)
-                       {
-                               $term = null;
-                               $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
-                               $label = null;
-                               if (isset($category['attribs']['']['text']))
-                               {
-                                       $label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
-
-                               if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category']))
-                               {
-                                       foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory)
-                                       {
-                                               if (isset($subcategory['attribs']['']['text']))
-                                               {
-                                                       $label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
-                                       }
-                               }
-                       }
-                       if (is_array($categories_parent))
-                       {
-                               $categories_parent = array_values(SimplePie_Misc::array_unique($categories_parent));
-                       }
-
-                       // COPYRIGHT
-                       if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
-                       {
-                               $copyright_url = null;
-                               $copyright_label = null;
-                               if (isset($copyright[0]['attribs']['']['url']))
-                               {
-                                       $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               if (isset($copyright[0]['data']))
-                               {
-                                       $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               $copyrights_parent =& new $this->feed->copyright_class($copyright_url, $copyright_label);
-                       }
-                       elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
-                       {
-                               $copyright_url = null;
-                               $copyright_label = null;
-                               if (isset($copyright[0]['attribs']['']['url']))
-                               {
-                                       $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               if (isset($copyright[0]['data']))
-                               {
-                                       $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               $copyrights_parent =& new $this->feed->copyright_class($copyright_url, $copyright_label);
-                       }
-
-                       // CREDITS
-                       if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
-                       {
-                               foreach ($credits as $credit)
-                               {
-                                       $credit_role = null;
-                                       $credit_scheme = null;
-                                       $credit_name = null;
-                                       if (isset($credit['attribs']['']['role']))
-                                       {
-                                               $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($credit['attribs']['']['scheme']))
-                                       {
-                                               $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       else
-                                       {
-                                               $credit_scheme = 'urn:ebu';
-                                       }
-                                       if (isset($credit['data']))
-                                       {
-                                               $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $credits_parent[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
-                               }
-                       }
-                       elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
-                       {
-                               foreach ($credits as $credit)
-                               {
-                                       $credit_role = null;
-                                       $credit_scheme = null;
-                                       $credit_name = null;
-                                       if (isset($credit['attribs']['']['role']))
-                                       {
-                                               $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($credit['attribs']['']['scheme']))
-                                       {
-                                               $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       else
-                                       {
-                                               $credit_scheme = 'urn:ebu';
-                                       }
-                                       if (isset($credit['data']))
-                                       {
-                                               $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $credits_parent[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
-                               }
-                       }
-                       if (is_array($credits_parent))
-                       {
-                               $credits_parent = array_values(SimplePie_Misc::array_unique($credits_parent));
-                       }
-
-                       // DESCRIPTION
-                       if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
-                       {
-                               if (isset($description_parent[0]['data']))
-                               {
-                                       $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                       }
-                       elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
-                       {
-                               if (isset($description_parent[0]['data']))
-                               {
-                                       $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                       }
-
-                       // DURATION
-                       if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration'))
-                       {
-                               $seconds = null;
-                               $minutes = null;
-                               $hours = null;
-                               if (isset($duration_parent[0]['data']))
-                               {
-                                       $temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                       if (sizeof($temp) > 0)
-                                       {
-                                               (int) $seconds = array_pop($temp);
-                                       }
-                                       if (sizeof($temp) > 0)
-                                       {
-                                               (int) $minutes = array_pop($temp);
-                                               $seconds += $minutes * 60;
-                                       }
-                                       if (sizeof($temp) > 0)
-                                       {
-                                               (int) $hours = array_pop($temp);
-                                               $seconds += $hours * 3600;
-                                       }
-                                       unset($temp);
-                                       $duration_parent = $seconds;
-                               }
-                       }
-
-                       // HASHES
-                       if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
-                       {
-                               foreach ($hashes_iterator as $hash)
-                               {
-                                       $value = null;
-                                       $algo = null;
-                                       if (isset($hash['data']))
-                                       {
-                                               $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($hash['attribs']['']['algo']))
-                                       {
-                                               $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       else
-                                       {
-                                               $algo = 'md5';
-                                       }
-                                       $hashes_parent[] = $algo.':'.$value;
-                               }
-                       }
-                       elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
-                       {
-                               foreach ($hashes_iterator as $hash)
-                               {
-                                       $value = null;
-                                       $algo = null;
-                                       if (isset($hash['data']))
-                                       {
-                                               $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($hash['attribs']['']['algo']))
-                                       {
-                                               $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       else
-                                       {
-                                               $algo = 'md5';
-                                       }
-                                       $hashes_parent[] = $algo.':'.$value;
-                               }
-                       }
-                       if (is_array($hashes_parent))
-                       {
-                               $hashes_parent = array_values(SimplePie_Misc::array_unique($hashes_parent));
-                       }
-
-                       // KEYWORDS
-                       if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
-                       {
-                               if (isset($keywords[0]['data']))
-                               {
-                                       $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                       foreach ($temp as $word)
-                                       {
-                                               $keywords_parent[] = trim($word);
-                                       }
-                               }
-                               unset($temp);
-                       }
-                       elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
-                       {
-                               if (isset($keywords[0]['data']))
-                               {
-                                       $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                       foreach ($temp as $word)
-                                       {
-                                               $keywords_parent[] = trim($word);
-                                       }
-                               }
-                               unset($temp);
-                       }
-                       elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
-                       {
-                               if (isset($keywords[0]['data']))
-                               {
-                                       $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                       foreach ($temp as $word)
-                                       {
-                                               $keywords_parent[] = trim($word);
-                                       }
-                               }
-                               unset($temp);
-                       }
-                       elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
-                       {
-                               if (isset($keywords[0]['data']))
-                               {
-                                       $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                       foreach ($temp as $word)
-                                       {
-                                               $keywords_parent[] = trim($word);
-                                       }
-                               }
-                               unset($temp);
-                       }
-                       if (is_array($keywords_parent))
-                       {
-                               $keywords_parent = array_values(SimplePie_Misc::array_unique($keywords_parent));
-                       }
-
-                       // PLAYER
-                       if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
-                       {
-                               if (isset($player_parent[0]['attribs']['']['url']))
-                               {
-                                       $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                               }
-                       }
-                       elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
-                       {
-                               if (isset($player_parent[0]['attribs']['']['url']))
-                               {
-                                       $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                               }
-                       }
-
-                       // RATINGS
-                       if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
-                       {
-                               foreach ($ratings as $rating)
-                               {
-                                       $rating_scheme = null;
-                                       $rating_value = null;
-                                       if (isset($rating['attribs']['']['scheme']))
-                                       {
-                                               $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       else
-                                       {
-                                               $rating_scheme = 'urn:simple';
-                                       }
-                                       if (isset($rating['data']))
-                                       {
-                                               $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
-                               }
-                       }
-                       elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
-                       {
-                               foreach ($ratings as $rating)
-                               {
-                                       $rating_scheme = 'urn:itunes';
-                                       $rating_value = null;
-                                       if (isset($rating['data']))
-                                       {
-                                               $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
-                               }
-                       }
-                       elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
-                       {
-                               foreach ($ratings as $rating)
-                               {
-                                       $rating_scheme = null;
-                                       $rating_value = null;
-                                       if (isset($rating['attribs']['']['scheme']))
-                                       {
-                                               $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       else
-                                       {
-                                               $rating_scheme = 'urn:simple';
-                                       }
-                                       if (isset($rating['data']))
-                                       {
-                                               $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
-                               }
-                       }
-                       elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
-                       {
-                               foreach ($ratings as $rating)
-                               {
-                                       $rating_scheme = 'urn:itunes';
-                                       $rating_value = null;
-                                       if (isset($rating['data']))
-                                       {
-                                               $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
-                               }
-                       }
-                       if (is_array($ratings_parent))
-                       {
-                               $ratings_parent = array_values(SimplePie_Misc::array_unique($ratings_parent));
-                       }
-
-                       // RESTRICTIONS
-                       if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
-                       {
-                               foreach ($restrictions as $restriction)
-                               {
-                                       $restriction_relationship = null;
-                                       $restriction_type = null;
-                                       $restriction_value = null;
-                                       if (isset($restriction['attribs']['']['relationship']))
-                                       {
-                                               $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($restriction['attribs']['']['type']))
-                                       {
-                                               $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($restriction['data']))
-                                       {
-                                               $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
-                               }
-                       }
-                       elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
-                       {
-                               foreach ($restrictions as $restriction)
-                               {
-                                       $restriction_relationship = 'allow';
-                                       $restriction_type = null;
-                                       $restriction_value = 'itunes';
-                                       if (isset($restriction['data']) && strtolower($restriction['data']) == 'yes')
-                                       {
-                                               $restriction_relationship = 'deny';
-                                       }
-                                       $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
-                               }
-                       }
-                       elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
-                       {
-                               foreach ($restrictions as $restriction)
-                               {
-                                       $restriction_relationship = null;
-                                       $restriction_type = null;
-                                       $restriction_value = null;
-                                       if (isset($restriction['attribs']['']['relationship']))
-                                       {
-                                               $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($restriction['attribs']['']['type']))
-                                       {
-                                               $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($restriction['data']))
-                                       {
-                                               $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
-                               }
-                       }
-                       elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
-                       {
-                               foreach ($restrictions as $restriction)
-                               {
-                                       $restriction_relationship = 'allow';
-                                       $restriction_type = null;
-                                       $restriction_value = 'itunes';
-                                       if (isset($restriction['data']) && strtolower($restriction['data']) == 'yes')
-                                       {
-                                               $restriction_relationship = 'deny';
-                                       }
-                                       $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
-                               }
-                       }
-                       if (is_array($restrictions_parent))
-                       {
-                               $restrictions_parent = array_values(SimplePie_Misc::array_unique($restrictions_parent));
-                       }
-
-                       // THUMBNAILS
-                       if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
-                       {
-                               foreach ($thumbnails as $thumbnail)
-                               {
-                                       if (isset($thumbnail['attribs']['']['url']))
-                                       {
-                                               $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                       }
-                               }
-                       }
-                       elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
-                       {
-                               foreach ($thumbnails as $thumbnail)
-                               {
-                                       if (isset($thumbnail['attribs']['']['url']))
-                                       {
-                                               $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                       }
-                               }
-                       }
-
-                       // TITLES
-                       if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
-                       {
-                               if (isset($title_parent[0]['data']))
-                               {
-                                       $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                       }
-                       elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
-                       {
-                               if (isset($title_parent[0]['data']))
-                               {
-                                       $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                       }
-
-                       // Clear the memory
-                       unset($parent);
-
-                       // Attributes
-                       $bitrate = null;
-                       $channels = null;
-                       $duration = null;
-                       $expression = null;
-                       $framerate = null;
-                       $height = null;
-                       $javascript = null;
-                       $lang = null;
-                       $length = null;
-                       $medium = null;
-                       $samplingrate = null;
-                       $type = null;
-                       $url = null;
-                       $width = null;
-
-                       // Elements
-                       $captions = null;
-                       $categories = null;
-                       $copyrights = null;
-                       $credits = null;
-                       $description = null;
-                       $hashes = null;
-                       $keywords = null;
-                       $player = null;
-                       $ratings = null;
-                       $restrictions = null;
-                       $thumbnails = null;
-                       $title = null;
-
-                       // If we have media:group tags, loop through them.
-                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group)
-                       {
-                               // If we have media:content tags, loop through them.
-                               foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
-                               {
-                                       if (isset($content['attribs']['']['url']))
-                                       {
-                                               // Attributes
-                                               $bitrate = null;
-                                               $channels = null;
-                                               $duration = null;
-                                               $expression = null;
-                                               $framerate = null;
-                                               $height = null;
-                                               $javascript = null;
-                                               $lang = null;
-                                               $length = null;
-                                               $medium = null;
-                                               $samplingrate = null;
-                                               $type = null;
-                                               $url = null;
-                                               $width = null;
-
-                                               // Elements
-                                               $captions = null;
-                                               $categories = null;
-                                               $copyrights = null;
-                                               $credits = null;
-                                               $description = null;
-                                               $hashes = null;
-                                               $keywords = null;
-                                               $player = null;
-                                               $ratings = null;
-                                               $restrictions = null;
-                                               $thumbnails = null;
-                                               $title = null;
-
-                                               // Start checking the attributes of media:content
-                                               if (isset($content['attribs']['']['bitrate']))
-                                               {
-                                                       $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['channels']))
-                                               {
-                                                       $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['duration']))
-                                               {
-                                                       $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               else
-                                               {
-                                                       $duration = $duration_parent;
-                                               }
-                                               if (isset($content['attribs']['']['expression']))
-                                               {
-                                                       $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['framerate']))
-                                               {
-                                                       $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['height']))
-                                               {
-                                                       $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['lang']))
-                                               {
-                                                       $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['fileSize']))
-                                               {
-                                                       $length = ceil($content['attribs']['']['fileSize']);
-                                               }
-                                               if (isset($content['attribs']['']['medium']))
-                                               {
-                                                       $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['samplingrate']))
-                                               {
-                                                       $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['type']))
-                                               {
-                                                       $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['width']))
-                                               {
-                                                       $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-
-                                               // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
-
-                                               // CAPTIONS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
-                                                       {
-                                                               $caption_type = null;
-                                                               $caption_lang = null;
-                                                               $caption_startTime = null;
-                                                               $caption_endTime = null;
-                                                               $caption_text = null;
-                                                               if (isset($caption['attribs']['']['type']))
-                                                               {
-                                                                       $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['attribs']['']['lang']))
-                                                               {
-                                                                       $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['attribs']['']['start']))
-                                                               {
-                                                                       $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['attribs']['']['end']))
-                                                               {
-                                                                       $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['data']))
-                                                               {
-                                                                       $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
-                                                       }
-                                                       if (is_array($captions))
-                                                       {
-                                                               $captions = array_values(SimplePie_Misc::array_unique($captions));
-                                                       }
-                                               }
-                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
-                                               {
-                                                       foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
-                                                       {
-                                                               $caption_type = null;
-                                                               $caption_lang = null;
-                                                               $caption_startTime = null;
-                                                               $caption_endTime = null;
-                                                               $caption_text = null;
-                                                               if (isset($caption['attribs']['']['type']))
-                                                               {
-                                                                       $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['attribs']['']['lang']))
-                                                               {
-                                                                       $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['attribs']['']['start']))
-                                                               {
-                                                                       $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['attribs']['']['end']))
-                                                               {
-                                                                       $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['data']))
-                                                               {
-                                                                       $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
-                                                       }
-                                                       if (is_array($captions))
-                                                       {
-                                                               $captions = array_values(SimplePie_Misc::array_unique($captions));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $captions = $captions_parent;
-                                               }
-
-                                               // CATEGORIES
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
-                                               {
-                                                       foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
-                                                       {
-                                                               $term = null;
-                                                               $scheme = null;
-                                                               $label = null;
-                                                               if (isset($category['data']))
-                                                               {
-                                                                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($category['attribs']['']['scheme']))
-                                                               {
-                                                                       $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $scheme = 'http://search.yahoo.com/mrss/category_schema';
-                                                               }
-                                                               if (isset($category['attribs']['']['label']))
-                                                               {
-                                                                       $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $categories[] =& new $this->feed->category_class($term, $scheme, $label);
-                                                       }
-                                               }
-                                               if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
-                                               {
-                                                       foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
-                                                       {
-                                                               $term = null;
-                                                               $scheme = null;
-                                                               $label = null;
-                                                               if (isset($category['data']))
-                                                               {
-                                                                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($category['attribs']['']['scheme']))
-                                                               {
-                                                                       $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $scheme = 'http://search.yahoo.com/mrss/category_schema';
-                                                               }
-                                                               if (isset($category['attribs']['']['label']))
-                                                               {
-                                                                       $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $categories[] =& new $this->feed->category_class($term, $scheme, $label);
-                                                       }
-                                               }
-                                               if (is_array($categories) && is_array($categories_parent))
-                                               {
-                                                       $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent)));
-                                               }
-                                               elseif (is_array($categories))
-                                               {
-                                                       $categories = array_values(SimplePie_Misc::array_unique($categories));
-                                               }
-                                               elseif (is_array($categories_parent))
-                                               {
-                                                       $categories = array_values(SimplePie_Misc::array_unique($categories_parent));
-                                               }
-
-                                               // COPYRIGHTS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
-                                               {
-                                                       $copyright_url = null;
-                                                       $copyright_label = null;
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
-                                                       {
-                                                               $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
-                                                       {
-                                                               $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
-                                               }
-                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
-                                               {
-                                                       $copyright_url = null;
-                                                       $copyright_label = null;
-                                                       if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
-                                                       {
-                                                               $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
-                                                       {
-                                                               $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
-                                               }
-                                               else
-                                               {
-                                                       $copyrights = $copyrights_parent;
-                                               }
-
-                                               // CREDITS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
-                                                       {
-                                                               $credit_role = null;
-                                                               $credit_scheme = null;
-                                                               $credit_name = null;
-                                                               if (isset($credit['attribs']['']['role']))
-                                                               {
-                                                                       $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($credit['attribs']['']['scheme']))
-                                                               {
-                                                                       $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $credit_scheme = 'urn:ebu';
-                                                               }
-                                                               if (isset($credit['data']))
-                                                               {
-                                                                       $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
-                                                       }
-                                                       if (is_array($credits))
-                                                       {
-                                                               $credits = array_values(SimplePie_Misc::array_unique($credits));
-                                                       }
-                                               }
-                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
-                                               {
-                                                       foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
-                                                       {
-                                                               $credit_role = null;
-                                                               $credit_scheme = null;
-                                                               $credit_name = null;
-                                                               if (isset($credit['attribs']['']['role']))
-                                                               {
-                                                                       $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($credit['attribs']['']['scheme']))
-                                                               {
-                                                                       $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $credit_scheme = 'urn:ebu';
-                                                               }
-                                                               if (isset($credit['data']))
-                                                               {
-                                                                       $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
-                                                       }
-                                                       if (is_array($credits))
-                                                       {
-                                                               $credits = array_values(SimplePie_Misc::array_unique($credits));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $credits = $credits_parent;
-                                               }
-
-                                               // DESCRIPTION
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
-                                               {
-                                                       $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
-                                               {
-                                                       $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               else
-                                               {
-                                                       $description = $description_parent;
-                                               }
-
-                                               // HASHES
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
-                                                       {
-                                                               $value = null;
-                                                               $algo = null;
-                                                               if (isset($hash['data']))
-                                                               {
-                                                                       $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($hash['attribs']['']['algo']))
-                                                               {
-                                                                       $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $algo = 'md5';
-                                                               }
-                                                               $hashes[] = $algo.':'.$value;
-                                                       }
-                                                       if (is_array($hashes))
-                                                       {
-                                                               $hashes = array_values(SimplePie_Misc::array_unique($hashes));
-                                                       }
-                                               }
-                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
-                                               {
-                                                       foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
-                                                       {
-                                                               $value = null;
-                                                               $algo = null;
-                                                               if (isset($hash['data']))
-                                                               {
-                                                                       $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($hash['attribs']['']['algo']))
-                                                               {
-                                                                       $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $algo = 'md5';
-                                                               }
-                                                               $hashes[] = $algo.':'.$value;
-                                                       }
-                                                       if (is_array($hashes))
-                                                       {
-                                                               $hashes = array_values(SimplePie_Misc::array_unique($hashes));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $hashes = $hashes_parent;
-                                               }
-
-                                               // KEYWORDS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
-                                               {
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
-                                                       {
-                                                               $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                                               foreach ($temp as $word)
-                                                               {
-                                                                       $keywords[] = trim($word);
-                                                               }
-                                                               unset($temp);
-                                                       }
-                                                       if (is_array($keywords))
-                                                       {
-                                                               $keywords = array_values(SimplePie_Misc::array_unique($keywords));
-                                                       }
-                                               }
-                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
-                                               {
-                                                       if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
-                                                       {
-                                                               $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                                               foreach ($temp as $word)
-                                                               {
-                                                                       $keywords[] = trim($word);
-                                                               }
-                                                               unset($temp);
-                                                       }
-                                                       if (is_array($keywords))
-                                                       {
-                                                               $keywords = array_values(SimplePie_Misc::array_unique($keywords));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $keywords = $keywords_parent;
-                                               }
-
-                                               // PLAYER
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
-                                               {
-                                                       $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                               }
-                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
-                                               {
-                                                       $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                               }
-                                               else
-                                               {
-                                                       $player = $player_parent;
-                                               }
-
-                                               // RATINGS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
-                                                       {
-                                                               $rating_scheme = null;
-                                                               $rating_value = null;
-                                                               if (isset($rating['attribs']['']['scheme']))
-                                                               {
-                                                                       $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $rating_scheme = 'urn:simple';
-                                                               }
-                                                               if (isset($rating['data']))
-                                                               {
-                                                                       $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
-                                                       }
-                                                       if (is_array($ratings))
-                                                       {
-                                                               $ratings = array_values(SimplePie_Misc::array_unique($ratings));
-                                                       }
-                                               }
-                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
-                                               {
-                                                       foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
-                                                       {
-                                                               $rating_scheme = null;
-                                                               $rating_value = null;
-                                                               if (isset($rating['attribs']['']['scheme']))
-                                                               {
-                                                                       $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $rating_scheme = 'urn:simple';
-                                                               }
-                                                               if (isset($rating['data']))
-                                                               {
-                                                                       $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
-                                                       }
-                                                       if (is_array($ratings))
-                                                       {
-                                                               $ratings = array_values(SimplePie_Misc::array_unique($ratings));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $ratings = $ratings_parent;
-                                               }
-
-                                               // RESTRICTIONS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
-                                                       {
-                                                               $restriction_relationship = null;
-                                                               $restriction_type = null;
-                                                               $restriction_value = null;
-                                                               if (isset($restriction['attribs']['']['relationship']))
-                                                               {
-                                                                       $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($restriction['attribs']['']['type']))
-                                                               {
-                                                                       $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($restriction['data']))
-                                                               {
-                                                                       $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
-                                                       }
-                                                       if (is_array($restrictions))
-                                                       {
-                                                               $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
-                                                       }
-                                               }
-                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
-                                               {
-                                                       foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
-                                                       {
-                                                               $restriction_relationship = null;
-                                                               $restriction_type = null;
-                                                               $restriction_value = null;
-                                                               if (isset($restriction['attribs']['']['relationship']))
-                                                               {
-                                                                       $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($restriction['attribs']['']['type']))
-                                                               {
-                                                                       $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($restriction['data']))
-                                                               {
-                                                                       $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
-                                                       }
-                                                       if (is_array($restrictions))
-                                                       {
-                                                               $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $restrictions = $restrictions_parent;
-                                               }
-
-                                               // THUMBNAILS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
-                                                       {
-                                                               $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                                       }
-                                                       if (is_array($thumbnails))
-                                                       {
-                                                               $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
-                                                       }
-                                               }
-                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
-                                               {
-                                                       foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
-                                                       {
-                                                               $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                                       }
-                                                       if (is_array($thumbnails))
-                                                       {
-                                                               $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $thumbnails = $thumbnails_parent;
-                                               }
-
-                                               // TITLES
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
-                                               {
-                                                       $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
-                                               {
-                                                       $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               else
-                                               {
-                                                       $title = $title_parent;
-                                               }
-
-                                               $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width);
-                                       }
-                               }
-                       }
-
-                       // If we have standalone media:content tags, loop through them.
-                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
-                       {
-                               foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
-                               {
-                                       if (isset($content['attribs']['']['url']))
-                                       {
-                                               // Attributes
-                                               $bitrate = null;
-                                               $channels = null;
-                                               $duration = null;
-                                               $expression = null;
-                                               $framerate = null;
-                                               $height = null;
-                                               $javascript = null;
-                                               $lang = null;
-                                               $length = null;
-                                               $medium = null;
-                                               $samplingrate = null;
-                                               $type = null;
-                                               $url = null;
-                                               $width = null;
-
-                                               // Elements
-                                               $captions = null;
-                                               $categories = null;
-                                               $copyrights = null;
-                                               $credits = null;
-                                               $description = null;
-                                               $hashes = null;
-                                               $keywords = null;
-                                               $player = null;
-                                               $ratings = null;
-                                               $restrictions = null;
-                                               $thumbnails = null;
-                                               $title = null;
-
-                                               // Start checking the attributes of media:content
-                                               if (isset($content['attribs']['']['bitrate']))
-                                               {
-                                                       $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['channels']))
-                                               {
-                                                       $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['duration']))
-                                               {
-                                                       $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               else
-                                               {
-                                                       $duration = $duration_parent;
-                                               }
-                                               if (isset($content['attribs']['']['expression']))
-                                               {
-                                                       $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['framerate']))
-                                               {
-                                                       $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['height']))
-                                               {
-                                                       $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['lang']))
-                                               {
-                                                       $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['fileSize']))
-                                               {
-                                                       $length = ceil($content['attribs']['']['fileSize']);
-                                               }
-                                               if (isset($content['attribs']['']['medium']))
-                                               {
-                                                       $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['samplingrate']))
-                                               {
-                                                       $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['type']))
-                                               {
-                                                       $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['width']))
-                                               {
-                                                       $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-
-                                               // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
-
-                                               // CAPTIONS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
-                                                       {
-                                                               $caption_type = null;
-                                                               $caption_lang = null;
-                                                               $caption_startTime = null;
-                                                               $caption_endTime = null;
-                                                               $caption_text = null;
-                                                               if (isset($caption['attribs']['']['type']))
-                                                               {
-                                                                       $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['attribs']['']['lang']))
-                                                               {
-                                                                       $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['attribs']['']['start']))
-                                                               {
-                                                                       $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['attribs']['']['end']))
-                                                               {
-                                                                       $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['data']))
-                                                               {
-                                                                       $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
-                                                       }
-                                                       if (is_array($captions))
-                                                       {
-                                                               $captions = array_values(SimplePie_Misc::array_unique($captions));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $captions = $captions_parent;
-                                               }
-
-                                               // CATEGORIES
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
-                                               {
-                                                       foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
-                                                       {
-                                                               $term = null;
-                                                               $scheme = null;
-                                                               $label = null;
-                                                               if (isset($category['data']))
-                                                               {
-                                                                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($category['attribs']['']['scheme']))
-                                                               {
-                                                                       $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $scheme = 'http://search.yahoo.com/mrss/category_schema';
-                                                               }
-                                                               if (isset($category['attribs']['']['label']))
-                                                               {
-                                                                       $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $categories[] =& new $this->feed->category_class($term, $scheme, $label);
-                                                       }
-                                               }
-                                               if (is_array($categories) && is_array($categories_parent))
-                                               {
-                                                       $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent)));
-                                               }
-                                               elseif (is_array($categories))
-                                               {
-                                                       $categories = array_values(SimplePie_Misc::array_unique($categories));
-                                               }
-                                               elseif (is_array($categories_parent))
-                                               {
-                                                       $categories = array_values(SimplePie_Misc::array_unique($categories_parent));
-                                               }
-                                               else
-                                               {
-                                                       $categories = null;
-                                               }
-
-                                               // COPYRIGHTS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
-                                               {
-                                                       $copyright_url = null;
-                                                       $copyright_label = null;
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
-                                                       {
-                                                               $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
-                                                       {
-                                                               $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
-                                               }
-                                               else
-                                               {
-                                                       $copyrights = $copyrights_parent;
-                                               }
-
-                                               // CREDITS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
-                                                       {
-                                                               $credit_role = null;
-                                                               $credit_scheme = null;
-                                                               $credit_name = null;
-                                                               if (isset($credit['attribs']['']['role']))
-                                                               {
-                                                                       $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($credit['attribs']['']['scheme']))
-                                                               {
-                                                                       $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $credit_scheme = 'urn:ebu';
-                                                               }
-                                                               if (isset($credit['data']))
-                                                               {
-                                                                       $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
-                                                       }
-                                                       if (is_array($credits))
-                                                       {
-                                                               $credits = array_values(SimplePie_Misc::array_unique($credits));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $credits = $credits_parent;
-                                               }
-
-                                               // DESCRIPTION
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
-                                               {
-                                                       $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               else
-                                               {
-                                                       $description = $description_parent;
-                                               }
-
-                                               // HASHES
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
-                                                       {
-                                                               $value = null;
-                                                               $algo = null;
-                                                               if (isset($hash['data']))
-                                                               {
-                                                                       $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($hash['attribs']['']['algo']))
-                                                               {
-                                                                       $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $algo = 'md5';
-                                                               }
-                                                               $hashes[] = $algo.':'.$value;
-                                                       }
-                                                       if (is_array($hashes))
-                                                       {
-                                                               $hashes = array_values(SimplePie_Misc::array_unique($hashes));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $hashes = $hashes_parent;
-                                               }
-
-                                               // KEYWORDS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
-                                               {
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
-                                                       {
-                                                               $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                                               foreach ($temp as $word)
-                                                               {
-                                                                       $keywords[] = trim($word);
-                                                               }
-                                                               unset($temp);
-                                                       }
-                                                       if (is_array($keywords))
-                                                       {
-                                                               $keywords = array_values(SimplePie_Misc::array_unique($keywords));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $keywords = $keywords_parent;
-                                               }
-
-                                               // PLAYER
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
-                                               {
-                                                       $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                               }
-                                               else
-                                               {
-                                                       $player = $player_parent;
-                                               }
-
-                                               // RATINGS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
-                                                       {
-                                                               $rating_scheme = null;
-                                                               $rating_value = null;
-                                                               if (isset($rating['attribs']['']['scheme']))
-                                                               {
-                                                                       $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $rating_scheme = 'urn:simple';
-                                                               }
-                                                               if (isset($rating['data']))
-                                                               {
-                                                                       $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
-                                                       }
-                                                       if (is_array($ratings))
-                                                       {
-                                                               $ratings = array_values(SimplePie_Misc::array_unique($ratings));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $ratings = $ratings_parent;
-                                               }
-
-                                               // RESTRICTIONS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
-                                                       {
-                                                               $restriction_relationship = null;
-                                                               $restriction_type = null;
-                                                               $restriction_value = null;
-                                                               if (isset($restriction['attribs']['']['relationship']))
-                                                               {
-                                                                       $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($restriction['attribs']['']['type']))
-                                                               {
-                                                                       $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($restriction['data']))
-                                                               {
-                                                                       $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
-                                                       }
-                                                       if (is_array($restrictions))
-                                                       {
-                                                               $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $restrictions = $restrictions_parent;
-                                               }
-
-                                               // THUMBNAILS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
-                                                       {
-                                                               $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                                       }
-                                                       if (is_array($thumbnails))
-                                                       {
-                                                               $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $thumbnails = $thumbnails_parent;
-                                               }
-
-                                               // TITLES
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
-                                               {
-                                                       $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               else
-                                               {
-                                                       $title = $title_parent;
-                                               }
-
-                                               $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width);
-                                       }
-                               }
-                       }
-
-                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
-                       {
-                               if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] == 'enclosure')
-                               {
-                                       // Attributes
-                                       $bitrate = null;
-                                       $channels = null;
-                                       $duration = null;
-                                       $expression = null;
-                                       $framerate = null;
-                                       $height = null;
-                                       $javascript = null;
-                                       $lang = null;
-                                       $length = null;
-                                       $medium = null;
-                                       $samplingrate = null;
-                                       $type = null;
-                                       $url = null;
-                                       $width = null;
-
-                                       $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
-                                       if (isset($link['attribs']['']['type']))
-                                       {
-                                               $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($link['attribs']['']['length']))
-                                       {
-                                               $length = ceil($link['attribs']['']['length']);
-                                       }
-
-                                       // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
-                                       $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
-                               }
-                       }
-
-                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
-                       {
-                               if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] == 'enclosure')
-                               {
-                                       // Attributes
-                                       $bitrate = null;
-                                       $channels = null;
-                                       $duration = null;
-                                       $expression = null;
-                                       $framerate = null;
-                                       $height = null;
-                                       $javascript = null;
-                                       $lang = null;
-                                       $length = null;
-                                       $medium = null;
-                                       $samplingrate = null;
-                                       $type = null;
-                                       $url = null;
-                                       $width = null;
-
-                                       $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
-                                       if (isset($link['attribs']['']['type']))
-                                       {
-                                               $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($link['attribs']['']['length']))
-                                       {
-                                               $length = ceil($link['attribs']['']['length']);
-                                       }
-
-                                       // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
-                                       $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
-                               }
-                       }
-
-                       if ($enclosure = $this->get_item_tags('', 'enclosure'))
-                       {
-                               if (isset($enclosure[0]['attribs']['']['url']))
-                               {
-                                       // Attributes
-                                       $bitrate = null;
-                                       $channels = null;
-                                       $duration = null;
-                                       $expression = null;
-                                       $framerate = null;
-                                       $height = null;
-                                       $javascript = null;
-                                       $lang = null;
-                                       $length = null;
-                                       $medium = null;
-                                       $samplingrate = null;
-                                       $type = null;
-                                       $url = null;
-                                       $width = null;
-
-                                       $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0]));
-                                       if (isset($enclosure[0]['attribs']['']['type']))
-                                       {
-                                               $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($enclosure[0]['attribs']['']['length']))
-                                       {
-                                               $length = ceil($enclosure[0]['attribs']['']['length']);
-                                       }
-
-                                       // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
-                                       $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
-                               }
-                       }
-
-                       if (sizeof($this->data['enclosures']) == 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width))
-                       {
-                               // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
-                               $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
-                       }
-
-                       $this->data['enclosures'] = array_values(SimplePie_Misc::array_unique($this->data['enclosures']));
-               }
-               if (!empty($this->data['enclosures']))
-               {
-                       return $this->data['enclosures'];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_latitude()
-       {
-               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
-               {
-                       return (float) $match[1];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_longitude()
-       {
-               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
-               {
-                       return (float) $match[2];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_source()
-       {
-               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'source'))
-               {
-                       return new $this->feed->source_class($this, $return[0]);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Creates the add_to_* methods' return data
-        *
-        * @access private
-        * @param string $item_url String to prefix to the item permalink
-        * @param string $title_url String to prefix to the item title
-        * (and suffix to the item permalink)
-        * @return mixed URL if feed exists, false otherwise
-        */
-       function add_to_service($item_url, $title_url = null, $summary_url = null)
-       {
-               if ($this->get_permalink() !== null)
-               {
-                       $return = $this->sanitize($item_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_permalink());
-                       if ($title_url !== null && $this->get_title() !== null)
-                       {
-                               $return .= $this->sanitize($title_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_title());
-                       }
-                       if ($summary_url !== null && $this->get_description() !== null)
-                       {
-                               $return .= $this->sanitize($summary_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_description());
-                       }
-                       return $return;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function add_to_blinklist()
-       {
-               return $this->add_to_service('http://www.blinklist.com/index.php?Action=Blink/addblink.php&Description=&Url=', '&Title=');
-       }
-
-       function add_to_blogmarks()
-       {
-               return $this->add_to_service('http://blogmarks.net/my/new.php?mini=1&simple=1&url=', '&title=');
-       }
-
-       function add_to_delicious()
-       {
-               return $this->add_to_service('http://del.icio.us/post/?v=4&url=', '&title=');
-       }
-
-       function add_to_digg()
-       {
-               return $this->add_to_service('http://digg.com/submit?url=', '&title=', '&bodytext=');
-       }
-
-       function add_to_furl()
-       {
-               return $this->add_to_service('http://www.furl.net/storeIt.jsp?u=', '&t=');
-       }
-
-       function add_to_magnolia()
-       {
-               return $this->add_to_service('http://ma.gnolia.com/bookmarklet/add?url=', '&title=');
-       }
-
-       function add_to_myweb20()
-       {
-               return $this->add_to_service('http://myweb2.search.yahoo.com/myresults/bookmarklet?u=', '&t=');
-       }
-
-       function add_to_newsvine()
-       {
-               return $this->add_to_service('http://www.newsvine.com/_wine/save?u=', '&h=');
-       }
-
-       function add_to_reddit()
-       {
-               return $this->add_to_service('http://reddit.com/submit?url=', '&title=');
-       }
-
-       function add_to_segnalo()
-       {
-               return $this->add_to_service('http://segnalo.com/post.html.php?url=', '&title=');
-       }
-
-       function add_to_simpy()
-       {
-               return $this->add_to_service('http://www.simpy.com/simpy/LinkAdd.do?href=', '&title=');
-       }
-
-       function add_to_spurl()
-       {
-               return $this->add_to_service('http://www.spurl.net/spurl.php?v=3&url=', '&title=');
-       }
-
-       function add_to_wists()
-       {
-               return $this->add_to_service('http://wists.com/r.php?c=&r=', '&title=');
-       }
-
-       function search_technorati()
-       {
-               return $this->add_to_service('http://www.technorati.com/search/');
-       }
-}
-
-class SimplePie_Source
-{
-       var $item;
-       var $data = array();
-
-       function SimplePie_Source($item, $data)
-       {
-               $this->item = $item;
-               $this->data = $data;
-       }
-
-       function __toString()
-       {
-               return md5(serialize($this->data));
-       }
-
-       /**
-        * Remove items that link back to this before destroying this object
-        */
-       function __destruct()
-       {
-               unset($this->item);
-       }
-
-       function get_source_tags($namespace, $tag)
-       {
-               if (isset($this->data['child'][$namespace][$tag]))
-               {
-                       return $this->data['child'][$namespace][$tag];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_base($element = array())
-       {
-               return $this->item->get_base($element);
-       }
-
-       function sanitize($data, $type, $base = '')
-       {
-               return $this->item->sanitize($data, $type, $base);
-       }
-
-       function get_item()
-       {
-               return $this->item;
-       }
-
-       function get_title()
-       {
-               if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags('', 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_category($key = 0)
-       {
-               $categories = $this->get_categories();
-               if (isset($categories[$key]))
-               {
-                       return $categories[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_categories()
-       {
-               $categories = array();
-
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
-               {
-                       $term = null;
-                       $scheme = null;
-                       $label = null;
-                       if (isset($category['attribs']['']['term']))
-                       {
-                               $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($category['attribs']['']['scheme']))
-                       {
-                               $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($category['attribs']['']['label']))
-                       {
-                               $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       $categories[] =& new $this->item->feed->category_class($term, $scheme, $label);
-               }
-               foreach ((array) $this->get_source_tags('', 'category') as $category)
-               {
-                       $categories[] =& new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
-               }
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
-               {
-                       $categories[] =& new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
-               }
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
-               {
-                       $categories[] =& new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
-               }
-
-               if (!empty($categories))
-               {
-                       return SimplePie_Misc::array_unique($categories);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_author($key = 0)
-       {
-               $authors = $this->get_authors();
-               if (isset($authors[$key]))
-               {
-                       return $authors[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_authors()
-       {
-               $authors = array();
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
-               {
-                       $name = null;
-                       $uri = null;
-                       $email = null;
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
-                       {
-                               $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
-                       }
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $uri !== null)
-                       {
-                               $authors[] =& new $this->item->feed->author_class($name, $uri, $email);
-                       }
-               }
-               if ($author = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
-               {
-                       $name = null;
-                       $url = null;
-                       $email = null;
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
-                       {
-                               $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
-                       }
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $url !== null)
-                       {
-                               $authors[] =& new $this->item->feed->author_class($name, $url, $email);
-                       }
-               }
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
-               {
-                       $authors[] =& new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
-               }
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
-               {
-                       $authors[] =& new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
-               }
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
-               {
-                       $authors[] =& new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
-               }
-
-               if (!empty($authors))
-               {
-                       return SimplePie_Misc::array_unique($authors);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_contributor($key = 0)
-       {
-               $contributors = $this->get_contributors();
-               if (isset($contributors[$key]))
-               {
-                       return $contributors[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_contributors()
-       {
-               $contributors = array();
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor)
-               {
-                       $name = null;
-                       $uri = null;
-                       $email = null;
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
-                       {
-                               $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $uri !== null)
-                       {
-                               $contributors[] =& new $this->item->feed->author_class($name, $uri, $email);
-                       }
-               }
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor)
-               {
-                       $name = null;
-                       $url = null;
-                       $email = null;
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
-                       {
-                               $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $url !== null)
-                       {
-                               $contributors[] =& new $this->item->feed->author_class($name, $url, $email);
-                       }
-               }
-
-               if (!empty($contributors))
-               {
-                       return SimplePie_Misc::array_unique($contributors);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_link($key = 0, $rel = 'alternate')
-       {
-               $links = $this->get_links($rel);
-               if (isset($links[$key]))
-               {
-                       return $links[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Added for parity between the parent-level and the item/entry-level.
-        */
-       function get_permalink()
-       {
-               return $this->get_link(0);
-       }
-
-       function get_links($rel = 'alternate')
-       {
-               if (!isset($this->data['links']))
-               {
-                       $this->data['links'] = array();
-                       if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link'))
-                       {
-                               foreach ($links as $link)
-                               {
-                                       if (isset($link['attribs']['']['href']))
-                                       {
-                                               $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
-                                               $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
-                                       }
-                               }
-                       }
-                       if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link'))
-                       {
-                               foreach ($links as $link)
-                               {
-                                       if (isset($link['attribs']['']['href']))
-                                       {
-                                               $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
-                                               $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
-
-                                       }
-                               }
-                       }
-                       if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-                       if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-                       if ($links = $this->get_source_tags('', 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-
-                       $keys = array_keys($this->data['links']);
-                       foreach ($keys as $key)
-                       {
-                               if (SimplePie_Misc::is_isegment_nz_nc($key))
-                               {
-                                       if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
-                                       {
-                                               $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
-                                               $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
-                                       }
-                                       else
-                                       {
-                                               $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
-                                       }
-                               }
-                               elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
-                               {
-                                       $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
-                               }
-                               $this->data['links'][$key] = array_unique($this->data['links'][$key]);
-                       }
-               }
-
-               if (isset($this->data['links'][$rel]))
-               {
-                       return $this->data['links'][$rel];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_description()
-       {
-               if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle'))
-               {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline'))
-               {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags('', 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_copyright()
-       {
-               if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright'))
-               {
-                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags('', 'copyright'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_language()
-       {
-               if ($return = $this->get_source_tags('', 'language'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif (isset($this->data['xml_lang']))
-               {
-                       return $this->sanitize($this->data['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_latitude()
-       {
-               if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
-               {
-                       return (float) $match[1];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_longitude()
-       {
-               if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
-               {
-                       return (float) $match[2];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_image_url()
-       {
-               if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image'))
-               {
-                       return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-class SimplePie_Author
-{
-       var $name;
-       var $link;
-       var $email;
-
-       // Constructor, used to input the data
-       function SimplePie_Author($name = null, $link = null, $email = null)
-       {
-               $this->name = $name;
-               $this->link = $link;
-               $this->email = $email;
-       }
-
-       function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       function get_name()
-       {
-               if ($this->name !== null)
-               {
-                       return $this->name;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_link()
-       {
-               if ($this->link !== null)
-               {
-                       return $this->link;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_email()
-       {
-               if ($this->email !== null)
-               {
-                       return $this->email;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-class SimplePie_Category
-{
-       var $term;
-       var $scheme;
-       var $label;
-
-       // Constructor, used to input the data
-       function SimplePie_Category($term = null, $scheme = null, $label = null)
-       {
-               $this->term = $term;
-               $this->scheme = $scheme;
-               $this->label = $label;
-       }
-
-       function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       function get_term()
-       {
-               if ($this->term !== null)
-               {
-                       return $this->term;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_scheme()
-       {
-               if ($this->scheme !== null)
-               {
-                       return $this->scheme;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_label()
-       {
-               if ($this->label !== null)
-               {
-                       return $this->label;
-               }
-               else
-               {
-                       return $this->get_term();
-               }
-       }
-}
-
-class SimplePie_Enclosure
-{
-       var $bitrate;
-       var $captions;
-       var $categories;
-       var $channels;
-       var $copyright;
-       var $credits;
-       var $description;
-       var $duration;
-       var $expression;
-       var $framerate;
-       var $handler;
-       var $hashes;
-       var $height;
-       var $javascript;
-       var $keywords;
-       var $lang;
-       var $length;
-       var $link;
-       var $medium;
-       var $player;
-       var $ratings;
-       var $restrictions;
-       var $samplingrate;
-       var $thumbnails;
-       var $title;
-       var $type;
-       var $width;
-
-       // Constructor, used to input the data
-       function SimplePie_Enclosure($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null)
-       {
-               $this->bitrate = $bitrate;
-               $this->captions = $captions;
-               $this->categories = $categories;
-               $this->channels = $channels;
-               $this->copyright = $copyright;
-               $this->credits = $credits;
-               $this->description = $description;
-               $this->duration = $duration;
-               $this->expression = $expression;
-               $this->framerate = $framerate;
-               $this->hashes = $hashes;
-               $this->height = $height;
-               $this->javascript = $javascript;
-               $this->keywords = $keywords;
-               $this->lang = $lang;
-               $this->length = $length;
-               $this->link = $link;
-               $this->medium = $medium;
-               $this->player = $player;
-               $this->ratings = $ratings;
-               $this->restrictions = $restrictions;
-               $this->samplingrate = $samplingrate;
-               $this->thumbnails = $thumbnails;
-               $this->title = $title;
-               $this->type = $type;
-               $this->width = $width;
-               if (class_exists('idna_convert'))
-               {
-                       $idn =& new idna_convert;
-                       $parsed = SimplePie_Misc::parse_url($link);
-                       $this->link = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
-               }
-               $this->handler = $this->get_handler(); // Needs to load last
-       }
-
-       function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       function get_bitrate()
-       {
-               if ($this->bitrate !== null)
-               {
-                       return $this->bitrate;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_caption($key = 0)
-       {
-               $captions = $this->get_captions();
-               if (isset($captions[$key]))
-               {
-                       return $captions[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_captions()
-       {
-               if ($this->captions !== null)
-               {
-                       return $this->captions;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_category($key = 0)
-       {
-               $categories = $this->get_categories();
-               if (isset($categories[$key]))
-               {
-                       return $categories[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_categories()
-       {
-               if ($this->categories !== null)
-               {
-                       return $this->categories;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_channels()
-       {
-               if ($this->channels !== null)
-               {
-                       return $this->channels;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_copyright()
-       {
-               if ($this->copyright !== null)
-               {
-                       return $this->copyright;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_credit($key = 0)
-       {
-               $credits = $this->get_credits();
-               if (isset($credits[$key]))
-               {
-                       return $credits[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_credits()
-       {
-               if ($this->credits !== null)
-               {
-                       return $this->credits;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_description()
-       {
-               if ($this->description !== null)
-               {
-                       return $this->description;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_duration($convert = false)
-       {
-               if ($this->duration !== null)
-               {
-                       if ($convert)
-                       {
-                               $time = SimplePie_Misc::time_hms($this->duration);
-                               return $time;
-                       }
-                       else
-                       {
-                               return $this->duration;
-                       }
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_expression()
-       {
-               if ($this->expression !== null)
-               {
-                       return $this->expression;
-               }
-               else
-               {
-                       return 'full';
-               }
-       }
-
-       function get_extension()
-       {
-               if ($this->link !== null)
-               {
-                       $url = SimplePie_Misc::parse_url($this->link);
-                       if ($url['path'] !== '')
-                       {
-                               return pathinfo($url['path'], PATHINFO_EXTENSION);
-                       }
-               }
-               return null;
-       }
-
-       function get_framerate()
-       {
-               if ($this->framerate !== null)
-               {
-                       return $this->framerate;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_handler()
-       {
-               return $this->get_real_type(true);
-       }
-
-       function get_hash($key = 0)
-       {
-               $hashes = $this->get_hashes();
-               if (isset($hashes[$key]))
-               {
-                       return $hashes[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_hashes()
-       {
-               if ($this->hashes !== null)
-               {
-                       return $this->hashes;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_height()
-       {
-               if ($this->height !== null)
-               {
-                       return $this->height;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_language()
-       {
-               if ($this->lang !== null)
-               {
-                       return $this->lang;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_keyword($key = 0)
-       {
-               $keywords = $this->get_keywords();
-               if (isset($keywords[$key]))
-               {
-                       return $keywords[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_keywords()
-       {
-               if ($this->keywords !== null)
-               {
-                       return $this->keywords;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_length()
-       {
-               if ($this->length !== null)
-               {
-                       return $this->length;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_link()
-       {
-               if ($this->link !== null)
-               {
-                       return urldecode($this->link);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_medium()
-       {
-               if ($this->medium !== null)
-               {
-                       return $this->medium;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_player()
-       {
-               if ($this->player !== null)
-               {
-                       return $this->player;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_rating($key = 0)
-       {
-               $ratings = $this->get_ratings();
-               if (isset($ratings[$key]))
-               {
-                       return $ratings[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_ratings()
-       {
-               if ($this->ratings !== null)
-               {
-                       return $this->ratings;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_restriction($key = 0)
-       {
-               $restrictions = $this->get_restrictions();
-               if (isset($restrictions[$key]))
-               {
-                       return $restrictions[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_restrictions()
-       {
-               if ($this->restrictions !== null)
-               {
-                       return $this->restrictions;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_sampling_rate()
-       {
-               if ($this->samplingrate !== null)
-               {
-                       return $this->samplingrate;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_size()
-       {
-               $length = $this->get_length();
-               if ($length !== null)
-               {
-                       return round($length/1048576, 2);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_thumbnail($key = 0)
-       {
-               $thumbnails = $this->get_thumbnails();
-               if (isset($thumbnails[$key]))
-               {
-                       return $thumbnails[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_thumbnails()
-       {
-               if ($this->thumbnails !== null)
-               {
-                       return $this->thumbnails;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_title()
-       {
-               if ($this->title !== null)
-               {
-                       return $this->title;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_type()
-       {
-               if ($this->type !== null)
-               {
-                       return $this->type;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_width()
-       {
-               if ($this->width !== null)
-               {
-                       return $this->width;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function native_embed($options='')
-       {
-               return $this->embed($options, true);
-       }
-
-       /**
-        * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'.
-        */
-       function embed($options = '', $native = false)
-       {
-               // Set up defaults
-               $audio = '';
-               $video = '';
-               $alt = '';
-               $altclass = '';
-               $loop = 'false';
-               $width = 'auto';
-               $height = 'auto';
-               $bgcolor = '#ffffff';
-               $mediaplayer = '';
-               $widescreen = false;
-               $handler = $this->get_handler();
-               $type = $this->get_real_type();
-
-               // Process options and reassign values as necessary
-               if (is_array($options))
-               {
-                       extract($options);
-               }
-               else
-               {
-                       $options = explode(',', $options);
-                       foreach($options as $option)
-                       {
-                               $opt = explode(':', $option, 2);
-                               if (isset($opt[0], $opt[1]))
-                               {
-                                       $opt[0] = trim($opt[0]);
-                                       $opt[1] = trim($opt[1]);
-                                       switch ($opt[0])
-                                       {
-                                               case 'audio':
-                                                       $audio = $opt[1];
-                                                       break;
-
-                                               case 'video':
-                                                       $video = $opt[1];
-                                                       break;
-
-                                               case 'alt':
-                                                       $alt = $opt[1];
-                                                       break;
-
-                                               case 'altclass':
-                                                       $altclass = $opt[1];
-                                                       break;
-
-                                               case 'loop':
-                                                       $loop = $opt[1];
-                                                       break;
-
-                                               case 'width':
-                                                       $width = $opt[1];
-                                                       break;
-
-                                               case 'height':
-                                                       $height = $opt[1];
-                                                       break;
-
-                                               case 'bgcolor':
-                                                       $bgcolor = $opt[1];
-                                                       break;
-
-                                               case 'mediaplayer':
-                                                       $mediaplayer = $opt[1];
-                                                       break;
-
-                                               case 'widescreen':
-                                                       $widescreen = $opt[1];
-                                                       break;
-                                       }
-                               }
-                       }
-               }
-
-               $mime = explode('/', $type, 2);
-               $mime = $mime[0];
-
-               // Process values for 'auto'
-               if ($width == 'auto')
-               {
-                       if ($mime == 'video')
-                       {
-                               if ($height == 'auto')
-                               {
-                                       $width = 480;
-                               }
-                               elseif ($widescreen)
-                               {
-                                       $width = round((intval($height)/9)*16);
-                               }
-                               else
-                               {
-                                       $width = round((intval($height)/3)*4);
-                               }
-                       }
-                       else
-                       {
-                               $width = '100%';
-                       }
-               }
-
-               if ($height == 'auto')
-               {
-                       if ($mime == 'audio')
-                       {
-                               $height = 0;
-                       }
-                       elseif ($mime == 'video')
-                       {
-                               if ($width == 'auto')
-                               {
-                                       if ($widescreen)
-                                       {
-                                               $height = 270;
-                                       }
-                                       else
-                                       {
-                                               $height = 360;
-                                       }
-                               }
-                               elseif ($widescreen)
-                               {
-                                       $height = round((intval($width)/16)*9);
-                               }
-                               else
-                               {
-                                       $height = round((intval($width)/4)*3);
-                               }
-                       }
-                       else
-                       {
-                               $height = 376;
-                       }
-               }
-               elseif ($mime == 'audio')
-               {
-                       $height = 0;
-               }
-
-               // Set proper placeholder value
-               if ($mime == 'audio')
-               {
-                       $placeholder = $audio;
-               }
-               elseif ($mime == 'video')
-               {
-                       $placeholder = $video;
-               }
-
-               $embed = '';
-
-               // Make sure the JS library is included
-               if (!$native)
-               {
-                       static $javascript_outputted = null;
-                       if (!$javascript_outputted && $this->javascript)
-                       {
-                               $embed .= '<script type="text/javascript" src="?' . htmlspecialchars($this->javascript) . '"></script>';
-                               $javascript_outputted = true;
-                       }
-               }
-
-               // Odeo Feed MP3's
-               if ($handler == 'odeo')
-               {
-                       if ($native)
-                       {
-                               $embed .= '<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://adobe.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url=' . $this->get_link() . '"></embed>';
-                       }
-                       else
-                       {
-                               $embed .= '<script type="text/javascript">embed_odeo("' . $this->get_link() . '");</script>';
-                       }
-               }
-
-               // Flash
-               elseif ($handler == 'flash')
-               {
-                       if ($native)
-                       {
-                               $embed .= "<embed src=\"" . $this->get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\"></embed>";
-                       }
-                       else
-                       {
-                               $embed .= "<script type='text/javascript'>embed_flash('$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$loop', '$type');</script>";
-                       }
-               }
-
-               // Flash Media Player file types.
-               // Preferred handler for MP3 file types.
-               elseif ($handler == 'fmedia' || ($handler == 'mp3' && $mediaplayer != ''))
-               {
-                       $height += 20;
-                       if ($native)
-                       {
-                               $embed .= "<embed src=\"$mediaplayer\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" quality=\"high\" width=\"$width\" height=\"$height\" wmode=\"transparent\" flashvars=\"file=" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\"></embed>";
-                       }
-                       else
-                       {
-                               $embed .= "<script type='text/javascript'>embed_flv('$width', '$height', '" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "', '$placeholder', '$loop', '$mediaplayer');</script>";
-                       }
-               }
-
-               // QuickTime 7 file types.  Need to test with QuickTime 6.
-               // Only handle MP3's if the Flash Media Player is not present.
-               elseif ($handler == 'quicktime' || ($handler == 'mp3' && $mediaplayer == ''))
-               {
-                       $height += 16;
-                       if ($native)
-                       {
-                               if ($placeholder != ""){
-                                       $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" href=\"" . $this->get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
-                               }
-                               else {
-                                       $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" src=\"" . $this->get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
-                               }
-                       }
-                       else
-                       {
-                               $embed .= "<script type='text/javascript'>embed_quicktime('$type', '$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$placeholder', '$loop');</script>";
-                       }
-               }
-
-               // Windows Media
-               elseif ($handler == 'wmedia')
-               {
-                       $height += 45;
-                       if ($native)
-                       {
-                               $embed .= "<embed type=\"application/x-mplayer2\" src=\"" . $this->get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\"></embed>";
-                       }
-                       else
-                       {
-                               $embed .= "<script type='text/javascript'>embed_wmedia('$width', '$height', '" . $this->get_link() . "');</script>";
-                       }
-               }
-
-               // Everything else
-               else $embed .= '<a href="' . $this->get_link() . '" class="' . $altclass . '">' . $alt . '</a>';
-
-               return $embed;
-       }
-
-       function get_real_type($find_handler = false)
-       {
-               // If it's Odeo, let's get it out of the way.
-               if (substr(strtolower($this->get_link()), 0, 15) == 'http://odeo.com')
-               {
-                       return 'odeo';
-               }
-
-               // Mime-types by handler.
-               $types_flash = array('application/x-shockwave-flash', 'application/futuresplash'); // Flash
-               $types_fmedia = array('video/flv', 'video/x-flv','flv-application/octet-stream'); // Flash Media Player
-               $types_quicktime = array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video'); // QuickTime
-               $types_wmedia = array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx'); // Windows Media
-               $types_mp3 = array('audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg'); // MP3
-
-               if ($this->get_type() !== null)
-               {
-                       $type = strtolower($this->type);
-               }
-               else
-               {
-                       $type = null;
-               }
-
-               // If we encounter an unsupported mime-type, check the file extension and guess intelligently.
-               if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3)))
-               {
-                       switch (strtolower($this->get_extension()))
-                       {
-                               // Audio mime-types
-                               case 'aac':
-                               case 'adts':
-                                       $type = 'audio/acc';
-                                       break;
-
-                               case 'aif':
-                               case 'aifc':
-                               case 'aiff':
-                               case 'cdda':
-                                       $type = 'audio/aiff';
-                                       break;
-
-                               case 'bwf':
-                                       $type = 'audio/wav';
-                                       break;
-
-                               case 'kar':
-                               case 'mid':
-                               case 'midi':
-                               case 'smf':
-                                       $type = 'audio/midi';
-                                       break;
-
-                               case 'm4a':
-                                       $type = 'audio/x-m4a';
-                                       break;
-
-                               case 'mp3':
-                               case 'swa':
-                                       $type = 'audio/mp3';
-                                       break;
-
-                               case 'wav':
-                                       $type = 'audio/wav';
-                                       break;
-
-                               case 'wax':
-                                       $type = 'audio/x-ms-wax';
-                                       break;
-
-                               case 'wma':
-                                       $type = 'audio/x-ms-wma';
-                                       break;
-
-                               // Video mime-types
-                               case '3gp':
-                               case '3gpp':
-                                       $type = 'video/3gpp';
-                                       break;
-
-                               case '3g2':
-                               case '3gp2':
-                                       $type = 'video/3gpp2';
-                                       break;
-
-                               case 'asf':
-                                       $type = 'video/x-ms-asf';
-                                       break;
-
-                               case 'flv':
-                                       $type = 'video/x-flv';
-                                       break;
-
-                               case 'm1a':
-                               case 'm1s':
-                               case 'm1v':
-                               case 'm15':
-                               case 'm75':
-                               case 'mp2':
-                               case 'mpa':
-                               case 'mpeg':
-                               case 'mpg':
-                               case 'mpm':
-                               case 'mpv':
-                                       $type = 'video/mpeg';
-                                       break;
-
-                               case 'm4v':
-                                       $type = 'video/x-m4v';
-                                       break;
-
-                               case 'mov':
-                               case 'qt':
-                                       $type = 'video/quicktime';
-                                       break;
-
-                               case 'mp4':
-                               case 'mpg4':
-                                       $type = 'video/mp4';
-                                       break;
-
-                               case 'sdv':
-                                       $type = 'video/sd-video';
-                                       break;
-
-                               case 'wm':
-                                       $type = 'video/x-ms-wm';
-                                       break;
-
-                               case 'wmv':
-                                       $type = 'video/x-ms-wmv';
-                                       break;
-
-                               case 'wvx':
-                                       $type = 'video/x-ms-wvx';
-                                       break;
-
-                               // Flash mime-types
-                               case 'spl':
-                                       $type = 'application/futuresplash';
-                                       break;
-
-                               case 'swf':
-                                       $type = 'application/x-shockwave-flash';
-                                       break;
-                       }
-               }
-
-               if ($find_handler)
-               {
-                       if (in_array($type, $types_flash))
-                       {
-                               return 'flash';
-                       }
-                       elseif (in_array($type, $types_fmedia))
-                       {
-                               return 'fmedia';
-                       }
-                       elseif (in_array($type, $types_quicktime))
-                       {
-                               return 'quicktime';
-                       }
-                       elseif (in_array($type, $types_wmedia))
-                       {
-                               return 'wmedia';
-                       }
-                       elseif (in_array($type, $types_mp3))
-                       {
-                               return 'mp3';
-                       }
-                       else
-                       {
-                               return null;
-                       }
-               }
-               else
-               {
-                       return $type;
-               }
-       }
-}
-
-class SimplePie_Caption
-{
-       var $type;
-       var $lang;
-       var $startTime;
-       var $endTime;
-       var $text;
-
-       // Constructor, used to input the data
-       function SimplePie_Caption($type = null, $lang = null, $startTime = null, $endTime = null, $text = null)
-       {
-               $this->type = $type;
-               $this->lang = $lang;
-               $this->startTime = $startTime;
-               $this->endTime = $endTime;
-               $this->text = $text;
-       }
-
-       function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       function get_endtime()
-       {
-               if ($this->endTime !== null)
-               {
-                       return $this->endTime;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_language()
-       {
-               if ($this->lang !== null)
-               {
-                       return $this->lang;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_starttime()
-       {
-               if ($this->startTime !== null)
-               {
-                       return $this->startTime;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_text()
-       {
-               if ($this->text !== null)
-               {
-                       return $this->text;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_type()
-       {
-               if ($this->type !== null)
-               {
-                       return $this->type;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-class SimplePie_Credit
-{
-       var $role;
-       var $scheme;
-       var $name;
-
-       // Constructor, used to input the data
-       function SimplePie_Credit($role = null, $scheme = null, $name = null)
-       {
-               $this->role = $role;
-               $this->scheme = $scheme;
-               $this->name = $name;
-       }
-
-       function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       function get_role()
-       {
-               if ($this->role !== null)
-               {
-                       return $this->role;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_scheme()
-       {
-               if ($this->scheme !== null)
-               {
-                       return $this->scheme;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_name()
-       {
-               if ($this->name !== null)
-               {
-                       return $this->name;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-class SimplePie_Copyright
-{
-       var $url;
-       var $label;
-
-       // Constructor, used to input the data
-       function SimplePie_Copyright($url = null, $label = null)
-       {
-               $this->url = $url;
-               $this->label = $label;
-       }
-
-       function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       function get_url()
-       {
-               if ($this->url !== null)
-               {
-                       return $this->url;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_attribution()
-       {
-               if ($this->label !== null)
-               {
-                       return $this->label;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-class SimplePie_Rating
-{
-       var $scheme;
-       var $value;
-
-       // Constructor, used to input the data
-       function SimplePie_Rating($scheme = null, $value = null)
-       {
-               $this->scheme = $scheme;
-               $this->value = $value;
-       }
-
-       function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       function get_scheme()
-       {
-               if ($this->scheme !== null)
-               {
-                       return $this->scheme;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_value()
-       {
-               if ($this->value !== null)
-               {
-                       return $this->value;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-class SimplePie_Restriction
-{
-       var $relationship;
-       var $type;
-       var $value;
-
-       // Constructor, used to input the data
-       function SimplePie_Restriction($relationship = null, $type = null, $value = null)
-       {
-               $this->relationship = $relationship;
-               $this->type = $type;
-               $this->value = $value;
-       }
-
-       function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       function get_relationship()
-       {
-               if ($this->relationship !== null)
-               {
-                       return $this->relationship;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_type()
-       {
-               if ($this->type !== null)
-               {
-                       return $this->type;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       function get_value()
-       {
-               if ($this->value !== null)
-               {
-                       return $this->value;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-/**
- * @todo Move to properly supporting RFC2616 (HTTP/1.1)
- */
-class SimplePie_File
-{
-       var $url;
-       var $useragent;
-       var $success = true;
-       var $headers = array();
-       var $body;
-       var $status_code;
-       var $redirects = 0;
-       var $error;
-       var $method = SIMPLEPIE_FILE_SOURCE_NONE;
-
-       function SimplePie_File($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false)
-       {
-               if (class_exists('idna_convert'))
-               {
-                       $idn =& new idna_convert;
-                       $parsed = SimplePie_Misc::parse_url($url);
-                       $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
-               }
-               $this->url = $url;
-               $this->useragent = $useragent;
-               if (preg_match('/^http(s)?:\/\//i', $url))
-               {
-                       if ($useragent === null)
-                       {
-                               $useragent = ini_get('user_agent');
-                               $this->useragent = $useragent;
-                       }
-                       if (!is_array($headers))
-                       {
-                               $headers = array();
-                       }
-                       if (!$force_fsockopen && function_exists('curl_exec'))
-                       {
-                               $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_CURL;
-                               $fp = curl_init();
-                               $headers2 = array();
-                               foreach ($headers as $key => $value)
-                               {
-                                       $headers2[] = "$key: $value";
-                               }
-                               if (version_compare(SimplePie_Misc::get_curl_version(), '7.10.5', '>='))
-                               {
-                                       curl_setopt($fp, CURLOPT_ENCODING, '');
-                               }
-                               curl_setopt($fp, CURLOPT_URL, $url);
-                               curl_setopt($fp, CURLOPT_HEADER, 1);
-                               curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
-                               curl_setopt($fp, CURLOPT_TIMEOUT, $timeout);
-                               curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout);
-                               curl_setopt($fp, CURLOPT_REFERER, $url);
-                               curl_setopt($fp, CURLOPT_USERAGENT, $useragent);
-                               curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2);
-                               if (!ini_get('open_basedir') && !ini_get('safe_mode') && version_compare(SimplePie_Misc::get_curl_version(), '7.15.2', '>='))
-                               {
-                                       curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1);
-                                       curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects);
-                               }
-
-                               $this->headers = curl_exec($fp);
-                               if (curl_errno($fp) == 23 || curl_errno($fp) == 61)
-                               {
-                                       curl_setopt($fp, CURLOPT_ENCODING, 'none');
-                                       $this->headers = curl_exec($fp);
-                               }
-                               if (curl_errno($fp))
-                               {
-                                       $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp);
-                                       $this->success = false;
-                               }
-                               else
-                               {
-                                       $info = curl_getinfo($fp);
-                                       curl_close($fp);
-                                       $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 1);
-                                       $this->headers = array_pop($this->headers);
-                                       $parser =& new SimplePie_HTTP_Parser($this->headers);
-                                       if ($parser->parse())
-                                       {
-                                               $this->headers = $parser->headers;
-                                               $this->body = $parser->body;
-                                               $this->status_code = $parser->status_code;
-                                               if (($this->status_code == 300 || $this->status_code == 301 || $this->status_code == 302 || $this->status_code == 303 || $this->status_code == 307 || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
-                                               {
-                                                       $this->redirects++;
-                                                       $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url);
-                                                       return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen);
-                                               }
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_FSOCKOPEN;
-                               $url_parts = parse_url($url);
-                               if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) == 'https')
-                               {
-                                       $url_parts['host'] = "ssl://$url_parts[host]";
-                                       $url_parts['port'] = 443;
-                               }
-                               if (!isset($url_parts['port']))
-                               {
-                                       $url_parts['port'] = 80;
-                               }
-                               $fp = @fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, $timeout);
-                               if (!$fp)
-                               {
-                                       $this->error = 'fsockopen error: ' . $errstr;
-                                       $this->success = false;
-                               }
-                               else
-                               {
-                                       stream_set_timeout($fp, $timeout);
-                                       if (isset($url_parts['path']))
-                                       {
-                                               if (isset($url_parts['query']))
-                                               {
-                                                       $get = "$url_parts[path]?$url_parts[query]";
-                                               }
-                                               else
-                                               {
-                                                       $get = $url_parts['path'];
-                                               }
-                                       }
-                                       else
-                                       {
-                                               $get = '/';
-                                       }
-                                       $out = "GET $get HTTP/1.0\r\n";
-                                       $out .= "Host: $url_parts[host]\r\n";
-                                       $out .= "User-Agent: $useragent\r\n";
-                                       if (extension_loaded('zlib'))
-                                       {
-                                               $out .= "Accept-Encoding: x-gzip,gzip,deflate\r\n";
-                                       }
-
-                                       if (isset($url_parts['user']) && isset($url_parts['pass']))
-                                       {
-                                               $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n";
-                                       }
-                                       foreach ($headers as $key => $value)
-                                       {
-                                               $out .= "$key: $value\r\n";
-                                       }
-                                       $out .= "Connection: Close\r\n\r\n";
-                                       fwrite($fp, $out);
-
-                                       $info = stream_get_meta_data($fp);
-
-                                       $this->headers = '';
-                                       while (!$info['eof'] && !$info['timed_out'])
-                                       {
-                                               $this->headers .= fread($fp, 1160);
-                                               $info = stream_get_meta_data($fp);
-                                       }
-                                       if (!$info['timed_out'])
-                                       {
-                                               $parser =& new SimplePie_HTTP_Parser($this->headers);
-                                               if ($parser->parse())
-                                               {
-                                                       $this->headers = $parser->headers;
-                                                       $this->body = $parser->body;
-                                                       $this->status_code = $parser->status_code;
-                                                       if (($this->status_code == 300 || $this->status_code == 301 || $this->status_code == 302 || $this->status_code == 303 || $this->status_code == 307 || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
-                                                       {
-                                                               $this->redirects++;
-                                                               $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url);
-                                                               return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen);
-                                                       }
-                                                       if (isset($this->headers['content-encoding']))
-                                                       {
-                                                               // Hey, we act dumb elsewhere, so let's do that here too
-                                                               switch (strtolower(trim($this->headers['content-encoding'], "\x09\x0A\x0D\x20")))
-                                                               {
-                                                                       case 'gzip':
-                                                                       case 'x-gzip':
-                                                                               $decoder = new SimplePie_gzdecode($this->body);
-                                                                               if (!$decoder->parse())
-                                                                               {
-                                                                                       $this->error = 'Unable to decode HTTP "gzip" stream';
-                                                                                       $this->success = false;
-                                                                               }
-                                                                               else
-                                                                               {
-                                                                                       $this->body = $decoder->data;
-                                                                               }
-                                                                               break;
-
-                                                                       case 'deflate':
-                                                                               if (($body = gzuncompress($this->body)) === false)
-                                                                               {
-                                                                                       if (($body = gzinflate($this->body)) === false)
-                                                                                       {
-                                                                                               $this->error = 'Unable to decode HTTP "deflate" stream';
-                                                                                               $this->success = false;
-                                                                                       }
-                                                                               }
-                                                                               $this->body = $body;
-                                                                               break;
-
-                                                                       default:
-                                                                               $this->error = 'Unknown content coding';
-                                                                               $this->success = false;
-                                                               }
-                                                       }
-                                               }
-                                       }
-                                       else
-                                       {
-                                               $this->error = 'fsocket timed out';
-                                               $this->success = false;
-                                       }
-                                       fclose($fp);
-                               }
-                       }
-               }
-               else
-               {
-                       $this->method = SIMPLEPIE_FILE_SOURCE_LOCAL | SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS;
-                       if (!$this->body = file_get_contents($url))
-                       {
-                               $this->error = 'file_get_contents could not read the file';
-                               $this->success = false;
-                       }
-               }
-       }
-}
-
-/**
- * HTTP Response Parser
- *
- * @package SimplePie
- */
-class SimplePie_HTTP_Parser
-{
-       /**
-        * HTTP Version
-        *
-        * @access public
-        * @var float
-        */
-       var $http_version = 0.0;
-
-       /**
-        * Status code
-        *
-        * @access public
-        * @var int
-        */
-       var $status_code = 0;
-
-       /**
-        * Reason phrase
-        *
-        * @access public
-        * @var string
-        */
-       var $reason = '';
-
-       /**
-        * Key/value pairs of the headers
-        *
-        * @access public
-        * @var array
-        */
-       var $headers = array();
-
-       /**
-        * Body of the response
-        *
-        * @access public
-        * @var string
-        */
-       var $body = '';
-
-       /**
-        * Current state of the state machine
-        *
-        * @access private
-        * @var string
-        */
-       var $state = 'http_version';
-
-       /**
-        * Input data
-        *
-        * @access private
-        * @var string
-        */
-       var $data = '';
-
-       /**
-        * Input data length (to avoid calling strlen() everytime this is needed)
-        *
-        * @access private
-        * @var int
-        */
-       var $data_length = 0;
-
-       /**
-        * Current position of the pointer
-        *
-        * @var int
-        * @access private
-        */
-       var $position = 0;
-
-       /**
-        * Name of the hedaer currently being parsed
-        *
-        * @access private
-        * @var string
-        */
-       var $name = '';
-
-       /**
-        * Value of the hedaer currently being parsed
-        *
-        * @access private
-        * @var string
-        */
-       var $value = '';
-
-       /**
-        * Create an instance of the class with the input data
-        *
-        * @access public
-        * @param string $data Input data
-        */
-       function SimplePie_HTTP_Parser($data)
-       {
-               $this->data = $data;
-               $this->data_length = strlen($this->data);
-       }
-
-       /**
-        * Parse the input data
-        *
-        * @access public
-        * @return bool true on success, false on failure
-        */
-       function parse()
-       {
-               while ($this->state && $this->state !== 'emit' && $this->has_data())
-               {
-                       $state = $this->state;
-                       $this->$state();
-               }
-               $this->data = '';
-               if ($this->state === 'emit' || $this->state === 'body')
-               {
-                       return true;
-               }
-               else
-               {
-                       $this->http_version = '';
-                       $this->status_code = '';
-                       $this->reason = '';
-                       $this->headers = array();
-                       $this->body = '';
-                       return false;
-               }
-       }
-
-       /**
-        * Check whether there is data beyond the pointer
-        *
-        * @access private
-        * @return bool true if there is further data, false if not
-        */
-       function has_data()
-       {
-               return (bool) ($this->position < $this->data_length);
-       }
-
-       /**
-        * See if the next character is LWS
-        *
-        * @access private
-        * @return bool true if the next character is LWS, false if not
-        */
-       function is_linear_whitespace()
-       {
-               return (bool) ($this->data[$this->position] === "\x09"
-                       || $this->data[$this->position] === "\x20"
-                       || ($this->data[$this->position] === "\x0A"
-                               && isset($this->data[$this->position + 1])
-                               && ($this->data[$this->position + 1] === "\x09" || $this->data[$this->position + 1] === "\x20")));
-       }
-
-       /**
-        * Parse the HTTP version
-        *
-        * @access private
-        */
-       function http_version()
-       {
-               if (strpos($this->data, "\x0A") !== false && strtoupper(substr($this->data, 0, 5)) === 'HTTP/')
-               {
-                       $len = strspn($this->data, '0123456789.', 5);
-                       $this->http_version = substr($this->data, 5, $len);
-                       $this->position += 5 + $len;
-                       if (substr_count($this->http_version, '.') <= 1)
-                       {
-                               $this->http_version = (float) $this->http_version;
-                               $this->position += strspn($this->data, "\x09\x20", $this->position);
-                               $this->state = 'status';
-                       }
-                       else
-                       {
-                               $this->state = false;
-                       }
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       /**
-        * Parse the status code
-        *
-        * @access private
-        */
-       function status()
-       {
-               if ($len = strspn($this->data, '0123456789', $this->position))
-               {
-                       $this->status_code = (int) substr($this->data, $this->position, $len);
-                       $this->position += $len;
-                       $this->state = 'reason';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       /**
-        * Parse the reason phrase
-        *
-        * @access private
-        */
-       function reason()
-       {
-               $len = strcspn($this->data, "\x0A", $this->position);
-               $this->reason = trim(substr($this->data, $this->position, $len), "\x09\x0D\x20");
-               $this->position += $len + 1;
-               $this->state = 'new_line';
-       }
-
-       /**
-        * Deal with a new line, shifting data around as needed
-        *
-        * @access private
-        */
-       function new_line()
-       {
-               $this->value = trim($this->value, "\x0D\x20");
-               if ($this->name !== '' && $this->value !== '')
-               {
-                       $this->name = strtolower($this->name);
-                       if (isset($this->headers[$this->name]))
-                       {
-                               $this->headers[$this->name] .= ', ' . $this->value;
-                       }
-                       else
-                       {
-                               $this->headers[$this->name] = $this->value;
-                       }
-               }
-               $this->name = '';
-               $this->value = '';
-               if (substr($this->data[$this->position], 0, 2) === "\x0D\x0A")
-               {
-                       $this->position += 2;
-                       $this->state = 'body';
-               }
-               elseif ($this->data[$this->position] === "\x0A")
-               {
-                       $this->position++;
-                       $this->state = 'body';
-               }
-               else
-               {
-                       $this->state = 'name';
-               }
-       }
-
-       /**
-        * Parse a header name
-        *
-        * @access private
-        */
-       function name()
-       {
-               $len = strcspn($this->data, "\x0A:", $this->position);
-               if (isset($this->data[$this->position + $len]))
-               {
-                       if ($this->data[$this->position + $len] === "\x0A")
-                       {
-                               $this->position += $len;
-                               $this->state = 'new_line';
-                       }
-                       else
-                       {
-                               $this->name = substr($this->data, $this->position, $len);
-                               $this->position += $len + 1;
-                               $this->state = 'value';
-                       }
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       /**
-        * Parse LWS, replacing consecutive LWS characters with a single space
-        *
-        * @access private
-        */
-       function linear_whitespace()
-       {
-               do
-               {
-                       if (substr($this->data, $this->position, 2) === "\x0D\x0A")
-                       {
-                               $this->position += 2;
-                       }
-                       elseif ($this->data[$this->position] === "\x0A")
-                       {
-                               $this->position++;
-                       }
-                       $this->position += strspn($this->data, "\x09\x20", $this->position);
-               } while ($this->has_data() && $this->is_linear_whitespace());
-               $this->value .= "\x20";
-       }
-
-       /**
-        * See what state to move to while within non-quoted header values
-        *
-        * @access private
-        */
-       function value()
-       {
-               if ($this->is_linear_whitespace())
-               {
-                       $this->linear_whitespace();
-               }
-               else
-               {
-                       switch ($this->data[$this->position])
-                       {
-                               case '"':
-                                       $this->position++;
-                                       $this->state = 'quote';
-                                       break;
-
-                               case "\x0A":
-                                       $this->position++;
-                                       $this->state = 'new_line';
-                                       break;
-
-                               default:
-                                       $this->state = 'value_char';
-                                       break;
-                       }
-               }
-       }
-
-       /**
-        * Parse a header value while outside quotes
-        *
-        * @access private
-        */
-       function value_char()
-       {
-               $len = strcspn($this->data, "\x09\x20\x0A\"", $this->position);
-               $this->value .= substr($this->data, $this->position, $len);
-               $this->position += $len;
-               $this->state = 'value';
-       }
-
-       /**
-        * See what state to move to while within quoted header values
-        *
-        * @access private
-        */
-       function quote()
-       {
-               if ($this->is_linear_whitespace())
-               {
-                       $this->linear_whitespace();
-               }
-               else
-               {
-                       switch ($this->data[$this->position])
-                       {
-                               case '"':
-                                       $this->position++;
-                                       $this->state = 'value';
-                                       break;
-
-                               case "\x0A":
-                                       $this->position++;
-                                       $this->state = 'new_line';
-                                       break;
-
-                               case '\\':
-                                       $this->position++;
-                                       $this->state = 'quote_escaped';
-                                       break;
-
-                               default:
-                                       $this->state = 'quote_char';
-                                       break;
-                       }
-               }
-       }
-
-       /**
-        * Parse a header value while within quotes
-        *
-        * @access private
-        */
-       function quote_char()
-       {
-               $len = strcspn($this->data, "\x09\x20\x0A\"\\", $this->position);
-               $this->value .= substr($this->data, $this->position, $len);
-               $this->position += $len;
-               $this->state = 'value';
-       }
-
-       /**
-        * Parse an escaped character within quotes
-        *
-        * @access private
-        */
-       function quote_escaped()
-       {
-               $this->value .= $this->data[$this->position];
-               $this->position++;
-               $this->state = 'quote';
-       }
-
-       /**
-        * Parse the body
-        *
-        * @access private
-        */
-       function body()
-       {
-               $this->body = substr($this->data, $this->position);
-               $this->state = 'emit';
-       }
-}
-
-/**
- * gzdecode
- *
- * @package SimplePie
- */
-class SimplePie_gzdecode
-{
-       /**
-        * Compressed data
-        *
-        * @access private
-        * @see gzdecode::$data
-        */
-       var $compressed_data;
-
-       /**
-        * Size of compressed data
-        *
-        * @access private
-        */
-       var $compressed_size;
-
-       /**
-        * Minimum size of a valid gzip string
-        *
-        * @access private
-        */
-       var $min_compressed_size = 18;
-
-       /**
-        * Current position of pointer
-        *
-        * @access private
-        */
-       var $position = 0;
-
-       /**
-        * Flags (FLG)
-        *
-        * @access private
-        */
-       var $flags;
-
-       /**
-        * Uncompressed data
-        *
-        * @access public
-        * @see gzdecode::$compressed_data
-        */
-       var $data;
-
-       /**
-        * Modified time
-        *
-        * @access public
-        */
-       var $MTIME;
-
-       /**
-        * Extra Flags
-        *
-        * @access public
-        */
-       var $XFL;
-
-       /**
-        * Operating System
-        *
-        * @access public
-        */
-       var $OS;
-
-       /**
-        * Subfield ID 1
-        *
-        * @access public
-        * @see gzdecode::$extra_field
-        * @see gzdecode::$SI2
-        */
-       var $SI1;
-
-       /**
-        * Subfield ID 2
-        *
-        * @access public
-        * @see gzdecode::$extra_field
-        * @see gzdecode::$SI1
-        */
-       var $SI2;
-
-       /**
-        * Extra field content
-        *
-        * @access public
-        * @see gzdecode::$SI1
-        * @see gzdecode::$SI2
-        */
-       var $extra_field;
-
-       /**
-        * Original filename
-        *
-        * @access public
-        */
-       var $filename;
-
-       /**
-        * Human readable comment
-        *
-        * @access public
-        */
-       var $comment;
-
-       /**
-        * Don't allow anything to be set
-        *
-        * @access public
-        */
-       function __set($name, $value)
-       {
-               trigger_error("Cannot write property $name", E_USER_ERROR);
-       }
-
-       /**
-        * Set the compressed string and related properties
-        *
-        * @access public
-        */
-       function SimplePie_gzdecode($data)
-       {
-               $this->compressed_data = $data;
-               $this->compressed_size = strlen($data);
-       }
-
-       /**
-        * Decode the GZIP stream
-        *
-        * @access public
-        */
-       function parse()
-       {
-               if ($this->compressed_size >= $this->min_compressed_size)
-               {
-                       // Check ID1, ID2, and CM
-                       if (substr($this->compressed_data, 0, 3) !== "\x1F\x8B\x08")
-                       {
-                               return false;
-                       }
-
-                       // Get the FLG (FLaGs)
-                       $this->flags = ord($this->compressed_data[3]);
-
-                       // FLG bits above (1 << 4) are reserved
-                       if ($this->flags > 0x1F)
-                       {
-                               return false;
-                       }
-
-                       // Advance the pointer after the above
-                       $this->position += 4;
-
-                       // MTIME
-                       $mtime = substr($this->compressed_data, $this->position, 4);
-                       // Reverse the string if we're on a big-endian arch because l is the only signed long and is machine endianness
-                       if (current(unpack('S', "\x00\x01")) === 1)
-                       {
-                               $mtime = strrev($mtime);
-                       }
-                       $this->MTIME = current(unpack('l', $mtime));
-                       $this->position += 4;
-
-                       // Get the XFL (eXtra FLags)
-                       $this->XFL = ord($this->compressed_data[$this->position++]);
-
-                       // Get the OS (Operating System)
-                       $this->OS = ord($this->compressed_data[$this->position++]);
-
-                       // Parse the FEXTRA
-                       if ($this->flags & 4)
-                       {
-                               // Read subfield IDs
-                               $this->SI1 = $this->compressed_data[$this->position++];
-                               $this->SI2 = $this->compressed_data[$this->position++];
-
-                               // SI2 set to zero is reserved for future use
-                               if ($this->SI2 === "\x00")
-                               {
-                                       return false;
-                               }
-
-                               // Get the length of the extra field
-                               $len = current(unpack('v', substr($this->compressed_data, $this->position, 2)));
-                               $position += 2;
-
-                               // Check the length of the string is still valid
-                               $this->min_compressed_size += $len + 4;
-                               if ($this->compressed_size >= $this->min_compressed_size)
-                               {
-                                       // Set the extra field to the given data
-                                       $this->extra_field = substr($this->compressed_data, $this->position, $len);
-                                       $this->position += $len;
-                               }
-                               else
-                               {
-                                       return false;
-                               }
-                       }
-
-                       // Parse the FNAME
-                       if ($this->flags & 8)
-                       {
-                               // Get the length of the filename
-                               $len = strspn($this->compressed_data, "\x00", $this->position);
-
-                               // Check the length of the string is still valid
-                               $this->min_compressed_size += $len + 1;
-                               if ($this->compressed_size >= $this->min_compressed_size)
-                               {
-                                       // Set the original filename to the given string
-                                       $this->filename = substr($this->compressed_data, $this->position, $len);
-                                       $this->position += $len + 1;
-                               }
-                               else
-                               {
-                                       return false;
-                               }
-                       }
-
-                       // Parse the FCOMMENT
-                       if ($this->flags & 16)
-                       {
-                               // Get the length of the comment
-                               $len = strspn($this->compressed_data, "\x00", $this->position);
-
-                               // Check the length of the string is still valid
-                               $this->min_compressed_size += $len + 1;
-                               if ($this->compressed_size >= $this->min_compressed_size)
-                               {
-                                       // Set the original comment to the given string
-                                       $this->comment = substr($this->compressed_data, $this->position, $len);
-                                       $this->position += $len + 1;
-                               }
-                               else
-                               {
-                                       return false;
-                               }
-                       }
-
-                       // Parse the FHCRC
-                       if ($this->flags & 2)
-                       {
-                               // Check the length of the string is still valid
-                               $this->min_compressed_size += $len + 2;
-                               if ($this->compressed_size >= $this->min_compressed_size)
-                               {
-                                       // Read the CRC
-                                       $crc = current(unpack('v', substr($this->compressed_data, $this->position, 2)));
-
-                                       // Check the CRC matches
-                                       if ((crc32(substr($this->compressed_data, 0, $this->position)) & 0xFFFF) === $crc)
-                                       {
-                                               $this->position += 2;
-                                       }
-                                       else
-                                       {
-                                               return false;
-                                       }
-                               }
-                               else
-                               {
-                                       return false;
-                               }
-                       }
-
-                       // Decompress the actual data
-                       if (($this->data = gzinflate(substr($this->compressed_data, $this->position, -8))) === false)
-                       {
-                               return false;
-                       }
-                       else
-                       {
-                               $this->position = $this->compressed_size - 8;
-                       }
-
-                       // Check CRC of data
-                       $crc = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
-                       $this->position += 4;
-                       /*if (extension_loaded('hash') && sprintf('%u', current(unpack('V', hash('crc32b', $this->data)))) !== sprintf('%u', $crc))
-                       {
-                               return false;
-                       }*/
-
-                       // Check ISIZE of data
-                       $isize = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
-                       $this->position += 4;
-                       if (sprintf('%u', strlen($this->data) & 0xFFFFFFFF) !== sprintf('%u', $isize))
-                       {
-                               return false;
-                       }
-
-                       // Wow, against all odds, we've actually got a valid gzip string
-                       return true;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-}
-
-class SimplePie_Cache
-{
-       /**
-        * Don't call the constructor. Please.
-        *
-        * @access private
-        */
-       function SimplePie_Cache()
-       {
-               trigger_error('Please call SimplePie_Cache::create() instead of the constructor', E_USER_ERROR);
-       }
-
-       /**
-        * Create a new SimplePie_Cache object
-        *
-        * @static
-        * @access public
-        */
-       function create($location, $filename, $extension)
-       {
-               return new SimplePie_Cache_File($location, $filename, $extension);
-       }
-}
-
-class SimplePie_Cache_File
-{
-       var $location;
-       var $filename;
-       var $extension;
-       var $name;
-
-       function SimplePie_Cache_File($location, $filename, $extension)
-       {
-               $this->location = $location;
-               $this->filename = rawurlencode($filename);
-               $this->extension = rawurlencode($extension);
-               $this->name = "$location/$this->filename.$this->extension";
-       }
-
-       function save($data)
-       {
-               if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location))
-               {
-                       if (is_a($data, 'SimplePie'))
-                       {
-                               $data = $data->data;
-                       }
-
-                       $data = serialize($data);
-
-                       if (function_exists('file_put_contents'))
-                       {
-                               return (bool) file_put_contents($this->name, $data);
-                       }
-                       else
-                       {
-                               $fp = fopen($this->name, 'wb');
-                               if ($fp)
-                               {
-                                       fwrite($fp, $data);
-                                       fclose($fp);
-                                       return true;
-                               }
-                       }
-               }
-               return false;
-       }
-
-       function load()
-       {
-               if (file_exists($this->name) && is_readable($this->name))
-               {
-                       return unserialize(file_get_contents($this->name));
-               }
-               return false;
-       }
-
-       function mtime()
-       {
-               if (file_exists($this->name))
-               {
-                       return filemtime($this->name);
-               }
-               return false;
-       }
-
-       function touch()
-       {
-               if (file_exists($this->name))
-               {
-                       return touch($this->name);
-               }
-               return false;
-       }
-
-       function unlink()
-       {
-               if (file_exists($this->name))
-               {
-                       return unlink($this->name);
-               }
-               return false;
-       }
-}
-
-class SimplePie_Misc
-{
-       function time_hms($seconds)
-       {
-               $time = '';
-
-               $hours = floor($seconds / 3600);
-               $remainder = $seconds % 3600;
-               if ($hours > 0)
-               {
-                       $time .= $hours.':';
-               }
-
-               $minutes = floor($remainder / 60);
-               $seconds = $remainder % 60;
-               if ($minutes < 10 && $hours > 0)
-               {
-                       $minutes = '0' . $minutes;
-               }
-               if ($seconds < 10)
-               {
-                       $seconds = '0' . $seconds;
-               }
-
-               $time .= $minutes.':';
-               $time .= $seconds;
-
-               return $time;
-       }
-
-       function absolutize_url($relative, $base)
-       {
-               if ($relative !== '')
-               {
-                       $relative = SimplePie_Misc::parse_url($relative);
-                       if ($relative['scheme'] !== '')
-                       {
-                               $target = $relative;
-                       }
-                       elseif ($base !== '')
-                       {
-                               $base = SimplePie_Misc::parse_url($base);
-                               $target = SimplePie_Misc::parse_url('');
-                               if ($relative['authority'] !== '')
-                               {
-                                       $target = $relative;
-                                       $target['scheme'] = $base['scheme'];
-                               }
-                               else
-                               {
-                                       $target['scheme'] = $base['scheme'];
-                                       $target['authority'] = $base['authority'];
-                                       if ($relative['path'] !== '')
-                                       {
-                                               if (strpos($relative['path'], '/') === 0)
-                                               {
-                                                       $target['path'] = $relative['path'];
-                                               }
-                                               elseif ($base['authority'] !== '' && $base['path'] === '')
-                                               {
-                                                       $target['path'] = '/' . $relative['path'];
-                                               }
-                                               elseif (($last_segment = strrpos($base['path'], '/')) !== false)
-                                               {
-                                                       $target['path'] = substr($base['path'], 0, $last_segment + 1) . $relative['path'];
-                                               }
-                                               else
-                                               {
-                                                       $target['path'] = $relative['path'];
-                                               }
-                                               $target['query'] = $relative['query'];
-                                       }
-                                       else
-                                       {
-                                               $target['path'] = $base['path'];
-                                               if ($relative['query'] !== '')
-                                               {
-                                                       $target['query'] = $relative['query'];
-                                               }
-                                               elseif ($base['query'] !== '')
-                                               {
-                                                       $target['query'] = $base['query'];
-                                               }
-                                       }
-                               }
-                               $target['fragment'] = $relative['fragment'];
-                       }
-                       else
-                       {
-                               // No base URL, just return the relative URL
-                               $target = $relative;
-                       }
-                       $return = SimplePie_Misc::compress_parse_url($target['scheme'], $target['authority'], $target['path'], $target['query'], $target['fragment']);
-               }
-               else
-               {
-                       $return = $base;
-               }
-               $return = SimplePie_Misc::normalize_url($return);
-               return $return;
-       }
-
-       function remove_dot_segments($input)
-       {
-               $output = '';
-               while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input == '.' || $input == '..')
-               {
-                       // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise,
-                       if (strpos($input, '../') === 0)
-                       {
-                               $input = substr($input, 3);
-                       }
-                       elseif (strpos($input, './') === 0)
-                       {
-                               $input = substr($input, 2);
-                       }
-                       // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise,
-                       elseif (strpos($input, '/./') === 0)
-                       {
-                               $input = substr_replace($input, '/', 0, 3);
-                       }
-                       elseif ($input == '/.')
-                       {
-                               $input = '/';
-                       }
-                       // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise,
-                       elseif (strpos($input, '/../') === 0)
-                       {
-                               $input = substr_replace($input, '/', 0, 4);
-                               $output = substr_replace($output, '', strrpos($output, '/'));
-                       }
-                       elseif ($input == '/..')
-                       {
-                               $input = '/';
-                               $output = substr_replace($output, '', strrpos($output, '/'));
-                       }
-                       // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise,
-                       elseif ($input == '.' || $input == '..')
-                       {
-                               $input = '';
-                       }
-                       // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer
-                       elseif (($pos = strpos($input, '/', 1)) !== false)
-                       {
-                               $output .= substr($input, 0, $pos);
-                               $input = substr_replace($input, '', 0, $pos);
-                       }
-                       else
-                       {
-                               $output .= $input;
-                               $input = '';
-                       }
-               }
-               return $output . $input;
-       }
-
-       function get_element($realname, $string)
-       {
-               $return = array();
-               $name = preg_quote($realname, '/');
-               if (preg_match_all("/<($name)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE))
-               {
-                       for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++)
-                       {
-                               $return[$i]['tag'] = $realname;
-                               $return[$i]['full'] = $matches[$i][0][0];
-                               $return[$i]['offset'] = $matches[$i][0][1];
-                               if (strlen($matches[$i][3][0]) <= 2)
-                               {
-                                       $return[$i]['self_closing'] = true;
-                               }
-                               else
-                               {
-                                       $return[$i]['self_closing'] = false;
-                                       $return[$i]['content'] = $matches[$i][4][0];
-                               }
-                               $return[$i]['attribs'] = array();
-                               if (isset($matches[$i][2][0]) && preg_match_all('/[\x09\x0A\x0B\x0C\x0D\x20]+([^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*)(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"([^"]*)"|\'([^\']*)\'|([^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?/', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER))
-                               {
-                                       for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++)
-                                       {
-                                               if (count($attribs[$j]) == 2)
-                                               {
-                                                       $attribs[$j][2] = $attribs[$j][1];
-                                               }
-                                               $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = SimplePie_Misc::entities_decode(end($attribs[$j]), 'UTF-8');
-                                       }
-                               }
-                       }
-               }
-               return $return;
-       }
-
-       function element_implode($element)
-       {
-               $full = "<$element[tag]";
-               foreach ($element['attribs'] as $key => $value)
-               {
-                       $key = strtolower($key);
-                       $full .= " $key=\"" . htmlspecialchars($value['data']) . '"';
-               }
-               if ($element['self_closing'])
-               {
-                       $full .= ' />';
-               }
-               else
-               {
-                       $full .= ">$element[content]</$element[tag]>";
-               }
-               return $full;
-       }
-
-       function error($message, $level, $file, $line)
-       {
-               switch ($level)
-               {
-                       case E_USER_ERROR:
-                               $note = 'PHP Error';
-                               break;
-                       case E_USER_WARNING:
-                               $note = 'PHP Warning';
-                               break;
-                       case E_USER_NOTICE:
-                               $note = 'PHP Notice';
-                               break;
-                       default:
-                               $note = 'Unknown Error';
-                               break;
-               }
-               error_log("$note: $message in $file on line $line", 0);
-               return $message;
-       }
-
-       /**
-        * If a file has been cached, retrieve and display it.
-        *
-        * This is most useful for caching images (get_favicon(), etc.),
-        * however it works for all cached files.  This WILL NOT display ANY
-        * file/image/page/whatever, but rather only display what has already
-        * been cached by SimplePie.
-        *
-        * @access public
-        * @see SimplePie::get_favicon()
-        * @param str $identifier_url URL that is used to identify the content.
-        * This may or may not be the actual URL of the live content.
-        * @param str $cache_location Location of SimplePie's cache.  Defaults
-        * to './cache'.
-        * @param str $cache_extension The file extension that the file was
-        * cached with.  Defaults to 'spc'.
-        * @param str $cache_class Name of the cache-handling class being used
-        * in SimplePie.  Defaults to 'SimplePie_Cache', and should be left
-        * as-is unless you've overloaded the class.
-        * @param str $cache_name_function Obsolete. Exists for backwards
-        * compatibility reasons only.
-        */
-       function display_cached_file($identifier_url, $cache_location = './cache', $cache_extension = 'spc', $cache_class = 'SimplePie_Cache', $cache_name_function = 'md5')
-       {
-               $cache = call_user_func(array($cache_class, 'create'), $cache_location, $identifier_url, $cache_extension);
-
-               if ($file = $cache->load())
-               {
-                       if (isset($file['headers']['content-type']))
-                       {
-                               header('Content-type:' . $file['headers']['content-type']);
-                       }
-                       else
-                       {
-                               header('Content-type: application/octet-stream');
-                       }
-                       header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days
-                       echo $file['body'];
-                       exit;
-               }
-
-               die('Cached file for ' . $identifier_url . ' cannot be found.');
-       }
-
-       function fix_protocol($url, $http = 1)
-       {
-               $url = SimplePie_Misc::normalize_url($url);
-               $parsed = SimplePie_Misc::parse_url($url);
-               if ($parsed['scheme'] !== '' && $parsed['scheme'] != 'http' && $parsed['scheme'] != 'https')
-               {
-                       return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http);
-               }
-
-               if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url))
-               {
-                       return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http);
-               }
-
-               if ($http == 2 && $parsed['scheme'] !== '')
-               {
-                       return "feed:$url";
-               }
-               elseif ($http == 3 && strtolower($parsed['scheme']) == 'http')
-               {
-                       return substr_replace($url, 'podcast', 0, 4);
-               }
-               elseif ($http == 4 && strtolower($parsed['scheme']) == 'http')
-               {
-                       return substr_replace($url, 'itpc', 0, 4);
-               }
-               else
-               {
-                       return $url;
-               }
-       }
-
-       function parse_url($url)
-       {
-               static $cache = array();
-               if (isset($cache[$url]))
-               {
-                       return $cache[$url];
-               }
-               elseif (preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/', $url, $match))
-               {
-                       for ($i = count($match); $i <= 9; $i++)
-                       {
-                               $match[$i] = '';
-                       }
-                       return $cache[$url] = array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[7], 'fragment' => $match[9]);
-               }
-               else
-               {
-                       return $cache[$url] = array('scheme' => '', 'authority' => '', 'path' => '', 'query' => '', 'fragment' => '');
-               }
-       }
-
-       function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '')
-       {
-               $return = '';
-               if ($scheme !== '')
-               {
-                       $return .= "$scheme:";
-               }
-               if ($authority !== '')
-               {
-                       $return .= "//$authority";
-               }
-               if ($path !== '')
-               {
-                       $return .= $path;
-               }
-               if ($query !== '')
-               {
-                       $return .= "?$query";
-               }
-               if ($fragment !== '')
-               {
-                       $return .= "#$fragment";
-               }
-               return $return;
-       }
-
-       function normalize_url($url)
-       {
-               $url = preg_replace_callback('/%([0-9A-Fa-f]{2})/', array('SimplePie_Misc', 'percent_encoding_normalization'), $url);
-               $url = SimplePie_Misc::parse_url($url);
-               $url['scheme'] = strtolower($url['scheme']);
-               if ($url['authority'] !== '')
-               {
-                       $url['authority'] = strtolower($url['authority']);
-                       $url['path'] = SimplePie_Misc::remove_dot_segments($url['path']);
-               }
-               return SimplePie_Misc::compress_parse_url($url['scheme'], $url['authority'], $url['path'], $url['query'], $url['fragment']);
-       }
-
-       function percent_encoding_normalization($match)
-       {
-               $integer = hexdec($match[1]);
-               if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer == 0x2D || $integer == 0x2E || $integer == 0x5F || $integer == 0x7E)
-               {
-                       return chr($integer);
-               }
-               else
-               {
-                       return strtoupper($match[0]);
-               }
-       }
-
-       /**
-        * Remove bad UTF-8 bytes
-        *
-        * PCRE Pattern to locate bad bytes in a UTF-8 string comes from W3C
-        * FAQ: Multilingual Forms (modified to include full ASCII range)
-        *
-        * @author Geoffrey Sneddon
-        * @see http://www.w3.org/International/questions/qa-forms-utf-8
-        * @param string $str String to remove bad UTF-8 bytes from
-        * @return string UTF-8 string
-        */
-       function utf8_bad_replace($str)
-       {
-               if (function_exists('iconv') && ($return = @iconv('UTF-8', 'UTF-8//IGNORE', $str)))
-               {
-                       return $return;
-               }
-               elseif (function_exists('mb_convert_encoding') && ($return = @mb_convert_encoding($str, 'UTF-8', 'UTF-8')))
-               {
-                       return $return;
-               }
-               elseif (preg_match_all('/(?:[\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})+/', $str, $matches))
-               {
-                       return implode("\xEF\xBF\xBD", $matches[0]);
-               }
-               elseif ($str !== '')
-               {
-                       return "\xEF\xBF\xBD";
-               }
-               else
-               {
-                       return '';
-               }
-       }
-
-       /**
-        * Converts a Windows-1252 encoded string to a UTF-8 encoded string
-        *
-        * @static
-        * @access public
-        * @param string $string Windows-1252 encoded string
-        * @return string UTF-8 encoded string
-        */
-       function windows_1252_to_utf8($string)
-       {
-               static $convert_table = array("\x80" => "\xE2\x82\xAC", "\x81" => "\xEF\xBF\xBD", "\x82" => "\xE2\x80\x9A", "\x83" => "\xC6\x92", "\x84" => "\xE2\x80\x9E", "\x85" => "\xE2\x80\xA6", "\x86" => "\xE2\x80\xA0", "\x87" => "\xE2\x80\xA1", "\x88" => "\xCB\x86", "\x89" => "\xE2\x80\xB0", "\x8A" => "\xC5\xA0", "\x8B" => "\xE2\x80\xB9", "\x8C" => "\xC5\x92", "\x8D" => "\xEF\xBF\xBD", "\x8E" => "\xC5\xBD", "\x8F" => "\xEF\xBF\xBD", "\x90" => "\xEF\xBF\xBD", "\x91" => "\xE2\x80\x98", "\x92" => "\xE2\x80\x99", "\x93" => "\xE2\x80\x9C", "\x94" => "\xE2\x80\x9D", "\x95" => "\xE2\x80\xA2", "\x96" => "\xE2\x80\x93", "\x97" => "\xE2\x80\x94", "\x98" => "\xCB\x9C", "\x99" => "\xE2\x84\xA2", "\x9A" => "\xC5\xA1", "\x9B" => "\xE2\x80\xBA", "\x9C" => "\xC5\x93", "\x9D" => "\xEF\xBF\xBD", "\x9E" => "\xC5\xBE", "\x9F" => "\xC5\xB8", "\xA0" => "\xC2\xA0", "\xA1" => "\xC2\xA1", "\xA2" => "\xC2\xA2", "\xA3" => "\xC2\xA3", "\xA4" => "\xC2\xA4", "\xA5" => "\xC2\xA5", "\xA6" => "\xC2\xA6", "\xA7" => "\xC2\xA7", "\xA8" => "\xC2\xA8", "\xA9" => "\xC2\xA9", "\xAA" => "\xC2\xAA", "\xAB" => "\xC2\xAB", "\xAC" => "\xC2\xAC", "\xAD" => "\xC2\xAD", "\xAE" => "\xC2\xAE", "\xAF" => "\xC2\xAF", "\xB0" => "\xC2\xB0", "\xB1" => "\xC2\xB1", "\xB2" => "\xC2\xB2", "\xB3" => "\xC2\xB3", "\xB4" => "\xC2\xB4", "\xB5" => "\xC2\xB5", "\xB6" => "\xC2\xB6", "\xB7" => "\xC2\xB7", "\xB8" => "\xC2\xB8", "\xB9" => "\xC2\xB9", "\xBA" => "\xC2\xBA", "\xBB" => "\xC2\xBB", "\xBC" => "\xC2\xBC", "\xBD" => "\xC2\xBD", "\xBE" => "\xC2\xBE", "\xBF" => "\xC2\xBF", "\xC0" => "\xC3\x80", "\xC1" => "\xC3\x81", "\xC2" => "\xC3\x82", "\xC3" => "\xC3\x83", "\xC4" => "\xC3\x84", "\xC5" => "\xC3\x85", "\xC6" => "\xC3\x86", "\xC7" => "\xC3\x87", "\xC8" => "\xC3\x88", "\xC9" => "\xC3\x89", "\xCA" => "\xC3\x8A", "\xCB" => "\xC3\x8B", "\xCC" => "\xC3\x8C", "\xCD" => "\xC3\x8D", "\xCE" => "\xC3\x8E", "\xCF" => "\xC3\x8F", "\xD0" => "\xC3\x90", "\xD1" => "\xC3\x91", "\xD2" => "\xC3\x92", "\xD3" => "\xC3\x93", "\xD4" => "\xC3\x94", "\xD5" => "\xC3\x95", "\xD6" => "\xC3\x96", "\xD7" => "\xC3\x97", "\xD8" => "\xC3\x98", "\xD9" => "\xC3\x99", "\xDA" => "\xC3\x9A", "\xDB" => "\xC3\x9B", "\xDC" => "\xC3\x9C", "\xDD" => "\xC3\x9D", "\xDE" => "\xC3\x9E", "\xDF" => "\xC3\x9F", "\xE0" => "\xC3\xA0", "\xE1" => "\xC3\xA1", "\xE2" => "\xC3\xA2", "\xE3" => "\xC3\xA3", "\xE4" => "\xC3\xA4", "\xE5" => "\xC3\xA5", "\xE6" => "\xC3\xA6", "\xE7" => "\xC3\xA7", "\xE8" => "\xC3\xA8", "\xE9" => "\xC3\xA9", "\xEA" => "\xC3\xAA", "\xEB" => "\xC3\xAB", "\xEC" => "\xC3\xAC", "\xED" => "\xC3\xAD", "\xEE" => "\xC3\xAE", "\xEF" => "\xC3\xAF", "\xF0" => "\xC3\xB0", "\xF1" => "\xC3\xB1", "\xF2" => "\xC3\xB2", "\xF3" => "\xC3\xB3", "\xF4" => "\xC3\xB4", "\xF5" => "\xC3\xB5", "\xF6" => "\xC3\xB6", "\xF7" => "\xC3\xB7", "\xF8" => "\xC3\xB8", "\xF9" => "\xC3\xB9", "\xFA" => "\xC3\xBA", "\xFB" => "\xC3\xBB", "\xFC" => "\xC3\xBC", "\xFD" => "\xC3\xBD", "\xFE" => "\xC3\xBE", "\xFF" => "\xC3\xBF");
-
-               return strtr($string, $convert_table);
-       }
-
-       function change_encoding($data, $input, $output)
-       {
-               $input = SimplePie_Misc::encoding($input);
-               $output = SimplePie_Misc::encoding($output);
-
-               // We fail to fail on non US-ASCII bytes
-               if ($input === 'US-ASCII')
-               {
-                       static $non_ascii_octects = '';
-                       if (!$non_ascii_octects)
-                       {
-                               for ($i = 0x80; $i <= 0xFF; $i++)
-                               {
-                                       $non_ascii_octects .= chr($i);
-                               }
-                       }
-                       $data = substr($data, 0, strcspn($data, $non_ascii_octects));
-               }
-
-               // This is first, as behaviour of this is completely predictable
-               if ($input === 'Windows-1252' && $output === 'UTF-8')
-               {
-                       return SimplePie_Misc::windows_1252_to_utf8($data);
-               }
-               // This is second, as behaviour of this varies only with PHP version
-               elseif (function_exists('mb_convert_encoding') && ($return = @mb_convert_encoding($data, $output, $input)))
-               {
-                       return $return;
-               }
-               // This is last, as behaviour of this varies with OS userland and PHP version
-               elseif (function_exists('iconv') && ($return = @iconv($input, $output, $data)))
-               {
-                       return $return;
-               }
-               // If we can't do anything, just fail
-               else
-               {
-                       return false;
-               }
-       }
-
-       function encoding($charset)
-       {
-               /* Character sets are case-insensitive, and also need some further
-               normalization in the real world (though we'll return them in the form given
-               in their registration). */
-               switch (strtolower(preg_replace('/[\x09-\x0D\x20-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]/', '', $charset)))
-               {
-                       case 'adobestandardencoding':
-                       case 'csadobestandardencoding':
-                               return 'Adobe-Standard-Encoding';
-
-                       case 'adobesymbolencoding':
-                       case 'cshppsmath':
-                               return 'Adobe-Symbol-Encoding';
-
-                       case 'ami1251':
-                       case 'ami1251':
-                       case 'amiga1251':
-                       case 'amiga1251':
-                               return 'Amiga-1251';
-
-                       case 'ansix31101983':
-                       case 'csat5001983':
-                       case 'csiso99naplps':
-                       case 'isoir99':
-                       case 'naplps':
-                               return 'ANSI_X3.110-1983';
-
-                       case 'arabic7':
-                       case 'asmo449':
-                       case 'csiso89asmo449':
-                       case 'isoir89':
-                       case 'iso9036':
-                               return 'ASMO_449';
-
-                       case 'big5':
-                       case 'csbig5':
-                       case 'xxbig5':
-                               return 'Big5';
-
-                       case 'big5hkscs':
-                               return 'Big5-HKSCS';
-
-                       case 'bocu1':
-                       case 'csbocu1':
-                               return 'BOCU-1';
-
-                       case 'brf':
-                       case 'csbrf':
-                               return 'BRF';
-
-                       case 'bs4730':
-                       case 'csiso4unitedkingdom':
-                       case 'gb':
-                       case 'isoir4':
-                       case 'iso646gb':
-                       case 'uk':
-                               return 'BS_4730';
-
-                       case 'bsviewdata':
-                       case 'csiso47bsviewdata':
-                       case 'isoir47':
-                               return 'BS_viewdata';
-
-                       case 'cesu8':
-                       case 'cscesu8':
-                               return 'CESU-8';
-
-                       case 'ca':
-                       case 'csa71':
-                       case 'csaz243419851':
-                       case 'csiso121canadian1':
-                       case 'isoir121':
-                       case 'iso646ca':
-                               return 'CSA_Z243.4-1985-1';
-
-                       case 'csa72':
-                       case 'csaz243419852':
-                       case 'csiso122canadian2':
-                       case 'isoir122':
-                       case 'iso646ca2':
-                               return 'CSA_Z243.4-1985-2';
-
-                       case 'csaz24341985gr':
-                       case 'csiso123csaz24341985gr':
-                       case 'isoir123':
-                               return 'CSA_Z243.4-1985-gr';
-
-                       case 'csiso139csn369103':
-                       case 'csn369103':
-                       case 'isoir139':
-                               return 'CSN_369103';
-
-                       case 'csdecmcs':
-                       case 'dec':
-                       case 'decmcs':
-                               return 'DEC-MCS';
-
-                       case 'csiso21german':
-                       case 'de':
-                       case 'din66003':
-                       case 'isoir21':
-                       case 'iso646de':
-                               return 'DIN_66003';
-
-                       case 'csdkus':
-                       case 'dkus':
-                               return 'dk-us';
-
-                       case 'csiso646danish':
-                       case 'dk':
-                       case 'ds2089':
-                       case 'ds2089':
-                       case 'iso646dk':
-                               return 'DS_2089';
-
-                       case 'csibmebcdicatde':
-                       case 'ebcdicatde':
-                               return 'EBCDIC-AT-DE';
-
-                       case 'csebcdicatdea':
-                       case 'ebcdicatdea':
-                               return 'EBCDIC-AT-DE-A';
-
-                       case 'csebcdiccafr':
-                       case 'ebcdiccafr':
-                               return 'EBCDIC-CA-FR';
-
-                       case 'csebcdicdkno':
-                       case 'ebcdicdkno':
-                               return 'EBCDIC-DK-NO';
-
-                       case 'csebcdicdknoa':
-                       case 'ebcdicdknoa':
-                               return 'EBCDIC-DK-NO-A';
-
-                       case 'csebcdices':
-                       case 'ebcdices':
-                               return 'EBCDIC-ES';
-
-                       case 'csebcdicesa':
-                       case 'ebcdicesa':
-                               return 'EBCDIC-ES-A';
-
-                       case 'csebcdicess':
-                       case 'ebcdicess':
-                               return 'EBCDIC-ES-S';
-
-                       case 'csebcdicfise':
-                       case 'ebcdicfise':
-                               return 'EBCDIC-FI-SE';
-
-                       case 'csebcdicfisea':
-                       case 'ebcdicfisea':
-                               return 'EBCDIC-FI-SE-A';
-
-                       case 'csebcdicfr':
-                       case 'ebcdicfr':
-                               return 'EBCDIC-FR';
-
-                       case 'csebcdicit':
-                       case 'ebcdicit':
-                               return 'EBCDIC-IT';
-
-                       case 'csebcdicpt':
-                       case 'ebcdicpt':
-                               return 'EBCDIC-PT';
-
-                       case 'csebcdicuk':
-                       case 'ebcdicuk':
-                               return 'EBCDIC-UK';
-
-                       case 'csebcdicus':
-                       case 'ebcdicus':
-                               return 'EBCDIC-US';
-
-                       case 'csiso111ecmacyrillic':
-                       case 'ecmacyrillic':
-                       case 'isoir111':
-                       case 'koi8e':
-                               return 'ECMA-cyrillic';
-
-                       case 'csiso17spanish':
-                       case 'es':
-                       case 'isoir17':
-                       case 'iso646es':
-                               return 'ES';
-
-                       case 'csiso85spanish2':
-                       case 'es2':
-                       case 'isoir85':
-                       case 'iso646es2':
-                               return 'ES2';
-
-                       case 'cseucfixwidjapanese':
-                       case 'extendedunixcodefixedwidthforjapanese':
-                               return 'Extended_UNIX_Code_Fixed_Width_for_Japanese';
-
-                       case 'cseucpkdfmtjapanese':
-                       case 'eucjp':
-                       case 'extendedunixcodepackedformatforjapanese':
-                               return 'Extended_UNIX_Code_Packed_Format_for_Japanese';
-
-                       case 'gb18030':
-                               return 'GB18030';
-
-                       case 'cp936':
-                       case 'gbk':
-                       case 'ms936':
-                       case 'windows936':
-                       case 'csgb2312':
-                       case 'gb2312':
-                       case 'chinese':
-                       case 'csiso58gb231280':
-                       case 'gb231280':
-                       case 'isoir58':
-                               return 'GBK';
-
-                       case 'cn':
-                       case 'csiso57gb1988':
-                       case 'gb198880':
-                       case 'isoir57':
-                       case 'iso646cn':
-                               return 'GB_1988-80';
-
-                       case 'csiso153gost1976874':
-                       case 'gost1976874':
-                       case 'isoir153':
-                       case 'stsev35888':
-                               return 'GOST_19768-74';
-
-                       case 'csiso150':
-                       case 'csiso150greekccitt':
-                       case 'greekccitt':
-                       case 'isoir150':
-                               return 'greek-ccitt';
-
-                       case 'csiso88greek7':
-                       case 'greek7':
-                       case 'isoir88':
-                               return 'greek7';
-
-                       case 'csiso18greek7old':
-                       case 'greek7old':
-                       case 'isoir18':
-                               return 'greek7-old';
-
-                       case 'cshpdesktop':
-                       case 'hpdesktop':
-                               return 'HP-DeskTop';
-
-                       case 'cshplegal':
-                       case 'hplegal':
-                               return 'HP-Legal';
-
-                       case 'cshpmath8':
-                       case 'hpmath8':
-                               return 'HP-Math8';
-
-                       case 'cshppifont':
-                       case 'hppifont':
-                               return 'HP-Pi-font';
-
-                       case 'cshproman8':
-                       case 'hproman8':
-                       case 'r8':
-                       case 'roman8':
-                               return 'hp-roman8';
-
-                       case 'hzgb2312':
-                               return 'HZ-GB-2312';
-
-                       case 'csibmsymbols':
-                       case 'ibmsymbols':
-                               return 'IBM-Symbols';
-
-                       case 'csibmthai':
-                       case 'ibmthai':
-                               return 'IBM-Thai';
-
-                       case 'ccsid00858':
-                       case 'cp00858':
-                       case 'ibm00858':
-                       case 'pcmultilingual850euro':
-                               return 'IBM00858';
-
-                       case 'ccsid00924':
-                       case 'cp00924':
-                       case 'ebcdiclatin9euro':
-                       case 'ibm00924':
-                               return 'IBM00924';
-
-                       case 'ccsid01140':
-                       case 'cp01140':
-                       case 'ebcdicus37euro':
-                       case 'ibm01140':
-                               return 'IBM01140';
-
-                       case 'ccsid01141':
-                       case 'cp01141':
-                       case 'ebcdicde273euro':
-                       case 'ibm01141':
-                               return 'IBM01141';
-
-                       case 'ccsid01142':
-                       case 'cp01142':
-                       case 'ebcdicdk277euro':
-                       case 'ebcdicno277euro':
-                       case 'ibm01142':
-                               return 'IBM01142';
-
-                       case 'ccsid01143':
-                       case 'cp01143':
-                       case 'ebcdicfi278euro':
-                       case 'ebcdicse278euro':
-                       case 'ibm01143':
-                               return 'IBM01143';
-
-                       case 'ccsid01144':
-                       case 'cp01144':
-                       case 'ebcdicit280euro':
-                       case 'ibm01144':
-                               return 'IBM01144';
-
-                       case 'ccsid01145':
-                       case 'cp01145':
-                       case 'ebcdices284euro':
-                       case 'ibm01145':
-                               return 'IBM01145';
-
-                       case 'ccsid01146':
-                       case 'cp01146':
-                       case 'ebcdicgb285euro':
-                       case 'ibm01146':
-                               return 'IBM01146';
-
-                       case 'ccsid01147':
-                       case 'cp01147':
-                       case 'ebcdicfr297euro':
-                       case 'ibm01147':
-                               return 'IBM01147';
-
-                       case 'ccsid01148':
-                       case 'cp01148':
-                       case 'ebcdicinternational500euro':
-                       case 'ibm01148':
-                               return 'IBM01148';
-
-                       case 'ccsid01149':
-                       case 'cp01149':
-                       case 'ebcdicis871euro':
-                       case 'ibm01149':
-                               return 'IBM01149';
-
-                       case 'cp037':
-                       case 'csibm037':
-                       case 'ebcdiccpca':
-                       case 'ebcdiccpnl':
-                       case 'ebcdiccpus':
-                       case 'ebcdiccpwt':
-                       case 'ibm037':
-                               return 'IBM037';
-
-                       case 'cp038':
-                       case 'csibm038':
-                       case 'ebcdicint':
-                       case 'ibm038':
-                               return 'IBM038';
-
-                       case 'cp273':
-                       case 'csibm273':
-                       case 'ibm273':
-                               return 'IBM273';
-
-                       case 'cp274':
-                       case 'csibm274':
-                       case 'ebcdicbe':
-                       case 'ibm274':
-                               return 'IBM274';
-
-                       case 'cp275':
-                       case 'csibm275':
-                       case 'ebcdicbr':
-                       case 'ibm275':
-                               return 'IBM275';
-
-                       case 'csibm277':
-                       case 'ebcdiccpdk':
-                       case 'ebcdiccpno':
-                       case 'ibm277':
-                               return 'IBM277';
-
-                       case 'cp278':
-                       case 'csibm278':
-                       case 'ebcdiccpfi':
-                       case 'ebcdiccpse':
-                       case 'ibm278':
-                               return 'IBM278';
-
-                       case 'cp280':
-                       case 'csibm280':
-                       case 'ebcdiccpit':
-                       case 'ibm280':
-                               return 'IBM280';
-
-                       case 'cp281':
-                       case 'csibm281':
-                       case 'ebcdicjpe':
-                       case 'ibm281':
-                               return 'IBM281';
-
-                       case 'cp284':
-                       case 'csibm284':
-                       case 'ebcdiccpes':
-                       case 'ibm284':
-                               return 'IBM284';
-
-                       case 'cp285':
-                       case 'csibm285':
-                       case 'ebcdiccpgb':
-                       case 'ibm285':
-                               return 'IBM285';
-
-                       case 'cp290':
-                       case 'csibm290':
-                       case 'ebcdicjpkana':
-                       case 'ibm290':
-                               return 'IBM290';
-
-                       case 'cp297':
-                       case 'csibm297':
-                       case 'ebcdiccpfr':
-                       case 'ibm297':
-                               return 'IBM297';
-
-                       case 'cp420':
-                       case 'csibm420':
-                       case 'ebcdiccpar1':
-                       case 'ibm420':
-                               return 'IBM420';
-
-                       case 'cp423':
-                       case 'csibm423':
-                       case 'ebcdiccpgr':
-                       case 'ibm423':
-                               return 'IBM423';
-
-                       case 'cp424':
-                       case 'csibm424':
-                       case 'ebcdiccphe':
-                       case 'ibm424':
-                               return 'IBM424';
-
-                       case '437':
-                       case 'cp437':
-                       case 'cspc8codepage437':
-                       case 'ibm437':
-                               return 'IBM437';
-
-                       case 'cp500':
-                       case 'csibm500':
-                       case 'ebcdiccpbe':
-                       case 'ebcdiccpch':
-                       case 'ibm500':
-                               return 'IBM500';
-
-                       case 'cp775':
-                       case 'cspc775baltic':
-                       case 'ibm775':
-                               return 'IBM775';
-
-                       case '850':
-                       case 'cp850':
-                       case 'cspc850multilingual':
-                       case 'ibm850':
-                               return 'IBM850';
-
-                       case '851':
-                       case 'cp851':
-                       case 'csibm851':
-                       case 'ibm851':
-                               return 'IBM851';
-
-                       case '852':
-                       case 'cp852':
-                       case 'cspcp852':
-                       case 'ibm852':
-                               return 'IBM852';
-
-                       case '855':
-                       case 'cp855':
-                       case 'csibm855':
-                       case 'ibm855':
-                               return 'IBM855';
-
-                       case '857':
-                       case 'cp857':
-                       case 'csibm857':
-                       case 'ibm857':
-                               return 'IBM857';
-
-                       case '860':
-                       case 'cp860':
-                       case 'csibm860':
-                       case 'ibm860':
-                               return 'IBM860';
-
-                       case '861':
-                       case 'cpis':
-                       case 'cp861':
-                       case 'csibm861':
-                       case 'ibm861':
-                               return 'IBM861';
-
-                       case '862':
-                       case 'cp862':
-                       case 'cspc862latinhebrew':
-                       case 'ibm862':
-                               return 'IBM862';
-
-                       case '863':
-                       case 'cp863':
-                       case 'csibm863':
-                       case 'ibm863':
-                               return 'IBM863';
-
-                       case 'cp864':
-                       case 'csibm864':
-                       case 'ibm864':
-                               return 'IBM864';
-
-                       case '865':
-                       case 'cp865':
-                       case 'csibm865':
-                       case 'ibm865':
-                               return 'IBM865';
-
-                       case '866':
-                       case 'cp866':
-                       case 'csibm866':
-                       case 'ibm866':
-                               return 'IBM866';
-
-                       case 'cpar':
-                       case 'cp868':
-                       case 'csibm868':
-                       case 'ibm868':
-                               return 'IBM868';
-
-                       case '869':
-                       case 'cpgr':
-                       case 'cp869':
-                       case 'csibm869':
-                       case 'ibm869':
-                               return 'IBM869';
-
-                       case 'cp870':
-                       case 'csibm870':
-                       case 'ebcdiccproece':
-                       case 'ebcdiccpyu':
-                       case 'ibm870':
-                               return 'IBM870';
-
-                       case 'cp871':
-                       case 'csibm871':
-                       case 'ebcdiccpis':
-                       case 'ibm871':
-                               return 'IBM871';
-
-                       case 'cp880':
-                       case 'csibm880':
-                       case 'ebcdiccyrillic':
-                       case 'ibm880':
-                               return 'IBM880';
-
-                       case 'cp891':
-                       case 'csibm891':
-                       case 'ibm891':
-                               return 'IBM891';
-
-                       case 'cp903':
-                       case 'csibm903':
-                       case 'ibm903':
-                               return 'IBM903';
-
-                       case '904':
-                       case 'cp904':
-                       case 'csibbm904':
-                       case 'ibm904':
-                               return 'IBM904';
-
-                       case 'cp905':
-                       case 'csibm905':
-                       case 'ebcdiccptr':
-                       case 'ibm905':
-                               return 'IBM905';
-
-                       case 'cp918':
-                       case 'csibm918':
-                       case 'ebcdiccpar2':
-                       case 'ibm918':
-                               return 'IBM918';
-
-                       case 'cp1026':
-                       case 'csibm1026':
-                       case 'ibm1026':
-                               return 'IBM1026';
-
-                       case 'ibm1047':
-                       case 'ibm1047':
-                               return 'IBM1047';
-
-                       case 'csiso143iecp271':
-                       case 'iecp271':
-                       case 'isoir143':
-                               return 'IEC_P27-1';
-
-                       case 'csiso49inis':
-                       case 'inis':
-                       case 'isoir49':
-                               return 'INIS';
-
-                       case 'csiso50inis8':
-                       case 'inis8':
-                       case 'isoir50':
-                               return 'INIS-8';
-
-                       case 'csiso51iniscyrillic':
-                       case 'iniscyrillic':
-                       case 'isoir51':
-                               return 'INIS-cyrillic';
-
-                       case 'csinvariant':
-                       case 'invariant':
-                               return 'INVARIANT';
-
-                       case 'iso2022cn':
-                               return 'ISO-2022-CN';
-
-                       case 'iso2022cnext':
-                               return 'ISO-2022-CN-EXT';
-
-                       case 'csiso2022jp':
-                       case 'iso2022jp':
-                               return 'ISO-2022-JP';
-
-                       case 'csiso2022jp2':
-                       case 'iso2022jp2':
-                               return 'ISO-2022-JP-2';
-
-                       case 'csiso2022kr':
-                       case 'iso2022kr':
-                               return 'ISO-2022-KR';
-
-                       case 'cswindows30latin1':
-                       case 'iso88591windows30latin1':
-                               return 'ISO-8859-1-Windows-3.0-Latin-1';
-
-                       case 'cswindows31latin1':
-                       case 'iso88591windows31latin1':
-                               return 'ISO-8859-1-Windows-3.1-Latin-1';
-
-                       case 'csisolatin2':
-                       case 'iso88592':
-                       case 'isoir101':
-                       case 'iso88592':
-                       case 'iso885921987':
-                       case 'l2':
-                       case 'latin2':
-                               return 'ISO-8859-2';
-
-                       case 'cswindows31latin2':
-                       case 'iso88592windowslatin2':
-                               return 'ISO-8859-2-Windows-Latin-2';
-
-                       case 'csisolatin3':
-                       case 'iso88593':
-                       case 'isoir109':
-                       case 'iso88593':
-                       case 'iso885931988':
-                       case 'l3':
-                       case 'latin3':
-                               return 'ISO-8859-3';
-
-                       case 'csisolatin4':
-                       case 'iso88594':
-                       case 'isoir110':
-                       case 'iso88594':
-                       case 'iso885941988':
-                       case 'l4':
-                       case 'latin4':
-                               return 'ISO-8859-4';
-
-                       case 'csisolatincyrillic':
-                       case 'cyrillic':
-                       case 'iso88595':
-                       case 'isoir144':
-                       case 'iso88595':
-                       case 'iso885951988':
-                               return 'ISO-8859-5';
-
-                       case 'arabic':
-                       case 'asmo708':
-                       case 'csisolatinarabic':
-                       case 'ecma114':
-                       case 'iso88596':
-                       case 'isoir127':
-                       case 'iso88596':
-                       case 'iso885961987':
-                               return 'ISO-8859-6';
-
-                       case 'csiso88596e':
-                       case 'iso88596e':
-                       case 'iso88596e':
-                               return 'ISO-8859-6-E';
-
-                       case 'csiso88596i':
-                       case 'iso88596i':
-                       case 'iso88596i':
-                               return 'ISO-8859-6-I';
-
-                       case 'csisolatingreek':
-                       case 'ecma118':
-                       case 'elot928':
-                       case 'greek':
-                       case 'greek8':
-                       case 'iso88597':
-                       case 'isoir126':
-                       case 'iso88597':
-                       case 'iso885971987':
-                               return 'ISO-8859-7';
-
-                       case 'csisolatinhebrew':
-                       case 'hebrew':
-                       case 'iso88598':
-                       case 'isoir138':
-                       case 'iso88598':
-                       case 'iso885981988':
-                               return 'ISO-8859-8';
-
-                       case 'csiso88598e':
-                       case 'iso88598e':
-                       case 'iso88598e':
-                               return 'ISO-8859-8-E';
-
-                       case 'csiso88598i':
-                       case 'iso88598i':
-                       case 'iso88598i':
-                               return 'ISO-8859-8-I';
-
-                       case 'cswindows31latin5':
-                       case 'iso88599windowslatin5':
-                               return 'ISO-8859-9-Windows-Latin-5';
-
-                       case 'csisolatin6':
-                       case 'iso885910':
-                       case 'isoir157':
-                       case 'iso8859101992':
-                       case 'l6':
-                       case 'latin6':
-                               return 'ISO-8859-10';
-
-                       case 'iso885913':
-                               return 'ISO-8859-13';
-
-                       case 'iso885914':
-                       case 'isoceltic':
-                       case 'isoir199':
-                       case 'iso885914':
-                       case 'iso8859141998':
-                       case 'l8':
-                       case 'latin8':
-                               return 'ISO-8859-14';
-
-                       case 'iso885915':
-                       case 'iso885915':
-                       case 'latin9':
-                               return 'ISO-8859-15';
-
-                       case 'iso885916':
-                       case 'isoir226':
-                       case 'iso885916':
-                       case 'iso8859162001':
-                       case 'l10':
-                       case 'latin10':
-                               return 'ISO-8859-16';
-
-                       case 'iso10646j1':
-                               return 'ISO-10646-J-1';
-
-                       case 'csunicode':
-                       case 'iso10646ucs2':
-                               return 'ISO-10646-UCS-2';
-
-                       case 'csucs4':
-                       case 'iso10646ucs4':
-                               return 'ISO-10646-UCS-4';
-
-                       case 'csunicodeascii':
-                       case 'iso10646ucsbasic':
-                               return 'ISO-10646-UCS-Basic';
-
-                       case 'csunicodelatin1':
-                       case 'iso10646':
-                       case 'iso10646unicodelatin1':
-                               return 'ISO-10646-Unicode-Latin1';
-
-                       case 'csiso10646utf1':
-                       case 'iso10646utf1':
-                               return 'ISO-10646-UTF-1';
-
-                       case 'csiso115481':
-                       case 'iso115481':
-                       case 'iso115481':
-                       case 'isotr115481':
-                               return 'ISO-11548-1';
-
-                       case 'csiso90':
-                       case 'isoir90':
-                               return 'iso-ir-90';
-
-                       case 'csunicodeibm1261':
-                       case 'isounicodeibm1261':
-                               return 'ISO-Unicode-IBM-1261';
-
-                       case 'csunicodeibm1264':
-                       case 'isounicodeibm1264':
-                               return 'ISO-Unicode-IBM-1264';
-
-                       case 'csunicodeibm1265':
-                       case 'isounicodeibm1265':
-                               return 'ISO-Unicode-IBM-1265';
-
-                       case 'csunicodeibm1268':
-                       case 'isounicodeibm1268':
-                               return 'ISO-Unicode-IBM-1268';
-
-                       case 'csunicodeibm1276':
-                       case 'isounicodeibm1276':
-                               return 'ISO-Unicode-IBM-1276';
-
-                       case 'csiso646basic1983':
-                       case 'iso646basic1983':
-                       case 'ref':
-                               return 'ISO_646.basic:1983';
-
-                       case 'csiso2intlrefversion':
-                       case 'irv':
-                       case 'isoir2':
-                       case 'iso646irv1983':
-                               return 'ISO_646.irv:1983';
-
-                       case 'csiso2033':
-                       case 'e13b':
-                       case 'isoir98':
-                       case 'iso20331983':
-                               return 'ISO_2033-1983';
-
-                       case 'csiso5427cyrillic':
-                       case 'isoir37':
-                       case 'iso5427':
-                               return 'ISO_5427';
-
-                       case 'isoir54':
-                       case 'iso5427cyrillic1981':
-                       case 'iso54271981':
-                               return 'ISO_5427:1981';
-
-                       case 'csiso5428greek':
-                       case 'isoir55':
-                       case 'iso54281980':
-                               return 'ISO_5428:1980';
-
-                       case 'csiso6937add':
-                       case 'isoir152':
-                       case 'iso6937225':
-                               return 'ISO_6937-2-25';
-
-                       case 'csisotextcomm':
-                       case 'isoir142':
-                       case 'iso69372add':
-                               return 'ISO_6937-2-add';
-
-                       case 'csiso8859supp':
-                       case 'isoir154':
-                       case 'iso8859supp':
-                       case 'latin125':
-                               return 'ISO_8859-supp';
-
-                       case 'csiso10367box':
-                       case 'isoir155':
-                       case 'iso10367box':
-                               return 'ISO_10367-box';
-
-                       case 'csiso15italian':
-                       case 'isoir15':
-                       case 'iso646it':
-                       case 'it':
-                               return 'IT';
-
-                       case 'csiso13jisc6220jp':
-                       case 'isoir13':
-                       case 'jisc62201969':
-                       case 'jisc62201969jp':
-                       case 'katakana':
-                       case 'x02017':
-                               return 'JIS_C6220-1969-jp';
-
-                       case 'csiso14jisc6220ro':
-                       case 'isoir14':
-                       case 'iso646jp':
-                       case 'jisc62201969ro':
-                       case 'jp':
-                               return 'JIS_C6220-1969-ro';
-
-                       case 'csiso42jisc62261978':
-                       case 'isoir42':
-                       case 'jisc62261978':
-                               return 'JIS_C6226-1978';
-
-                       case 'csiso87jisx0208':
-                       case 'isoir87':
-                       case 'jisc62261983':
-                       case 'jisx02081983':
-                       case 'x0208':
-                               return 'JIS_C6226-1983';
-
-                       case 'csiso91jisc62291984a':
-                       case 'isoir91':
-                       case 'jisc62291984a':
-                       case 'jpocra':
-                               return 'JIS_C6229-1984-a';
-
-                       case 'csiso92jisc62991984b':
-                       case 'isoir92':
-                       case 'iso646jpocrb':
-                       case 'jisc62291984b':
-                       case 'jpocrb':
-                               return 'JIS_C6229-1984-b';
-
-                       case 'csiso93jis62291984badd':
-                       case 'isoir93':
-                       case 'jisc62291984badd':
-                       case 'jpocrbadd':
-                               return 'JIS_C6229-1984-b-add';
-
-                       case 'csiso94jis62291984hand':
-                       case 'isoir94':
-                       case 'jisc62291984hand':
-                       case 'jpocrhand':
-                               return 'JIS_C6229-1984-hand';
-
-                       case 'csiso95jis62291984handadd':
-                       case 'isoir95':
-                       case 'jisc62291984handadd':
-                       case 'jpocrhandadd':
-                               return 'JIS_C6229-1984-hand-add';
-
-                       case 'csiso96jisc62291984kana':
-                       case 'isoir96':
-                       case 'jisc62291984kana':
-                               return 'JIS_C6229-1984-kana';
-
-                       case 'csjisencoding':
-                       case 'jisencoding':
-                               return 'JIS_Encoding';
-
-                       case 'cshalfwidthkatakana':
-                       case 'jisx0201':
-                       case 'x0201':
-                               return 'JIS_X0201';
-
-                       case 'csiso159jisx02121990':
-                       case 'isoir159':
-                       case 'jisx02121990':
-                       case 'x0212':
-                               return 'JIS_X0212-1990';
-
-                       case 'csiso141jusib1002':
-                       case 'isoir141':
-                       case 'iso646yu':
-                       case 'js':
-                       case 'jusib1002':
-                       case 'yu':
-                               return 'JUS_I.B1.002';
-
-                       case 'csiso147macedonian':
-                       case 'isoir147':
-                       case 'jusib1003mac':
-                       case 'macedonian':
-                               return 'JUS_I.B1.003-mac';
-
-                       case 'csiso146serbian':
-                       case 'isoir146':
-                       case 'jusib1003serb':
-                       case 'serbian':
-                               return 'JUS_I.B1.003-serb';
-
-                       case 'koi7switched':
-                               return 'KOI7-switched';
-
-                       case 'cskoi8r':
-                       case 'koi8r':
-                               return 'KOI8-R';
-
-                       case 'koi8u':
-                               return 'KOI8-U';
-
-                       case 'csksc5636':
-                       case 'iso646kr':
-                       case 'ksc5636':
-                               return 'KSC5636';
-
-                       case 'cskz1048':
-                       case 'kz1048':
-                       case 'rk1048':
-                       case 'strk10482002':
-                               return 'KZ-1048';
-
-                       case 'csiso19latingreek':
-                       case 'isoir19':
-                       case 'latingreek':
-                               return 'latin-greek';
-
-                       case 'csiso27latingreek1':
-                       case 'isoir27':
-                       case 'latingreek1':
-                               return 'Latin-greek-1';
-
-                       case 'csiso158lap':
-                       case 'isoir158':
-                       case 'lap':
-                       case 'latinlap':
-                               return 'latin-lap';
-
-                       case 'csmacintosh':
-                       case 'mac':
-                       case 'macintosh':
-                               return 'macintosh';
-
-                       case 'csmicrosoftpublishing':
-                       case 'microsoftpublishing':
-                               return 'Microsoft-Publishing';
-
-                       case 'csmnem':
-                       case 'mnem':
-                               return 'MNEM';
-
-                       case 'csmnemonic':
-                       case 'mnemonic':
-                               return 'MNEMONIC';
-
-                       case 'csiso86hungarian':
-                       case 'hu':
-                       case 'isoir86':
-                       case 'iso646hu':
-                       case 'msz77953':
-                               return 'MSZ_7795.3';
-
-                       case 'csnatsdano':
-                       case 'isoir91':
-                       case 'natsdano':
-                               return 'NATS-DANO';
-
-                       case 'csnatsdanoadd':
-                       case 'isoir92':
-                       case 'natsdanoadd':
-                               return 'NATS-DANO-ADD';
-
-                       case 'csnatssefi':
-                       case 'isoir81':
-                       case 'natssefi':
-                               return 'NATS-SEFI';
-
-                       case 'csnatssefiadd':
-                       case 'isoir82':
-                       case 'natssefiadd':
-                               return 'NATS-SEFI-ADD';
-
-                       case 'csiso151cuba':
-                       case 'cuba':
-                       case 'isoir151':
-                       case 'iso646cu':
-                       case 'ncnc001081':
-                               return 'NC_NC00-10:81';
-
-                       case 'csiso69french':
-                       case 'fr':
-                       case 'isoir69':
-                       case 'iso646fr':
-                       case 'nfz62010':
-                               return 'NF_Z_62-010';
-
-                       case 'csiso25french':
-                       case 'isoir25':
-                       case 'iso646fr1':
-                       case 'nfz620101973':
-                               return 'NF_Z_62-010_(1973)';
-
-                       case 'csiso60danishnorwegian':
-                       case 'csiso60norwegian1':
-                       case 'isoir60':
-                       case 'iso646no':
-                       case 'no':
-                       case 'ns45511':
-                               return 'NS_4551-1';
-
-                       case 'csiso61norwegian2':
-                       case 'isoir61':
-                       case 'iso646no2':
-                       case 'no2':
-                       case 'ns45512':
-                               return 'NS_4551-2';
-
-                       case 'osdebcdicdf03irv':
-                               return 'OSD_EBCDIC_DF03_IRV';
-
-                       case 'osdebcdicdf041':
-                               return 'OSD_EBCDIC_DF04_1';
-
-                       case 'osdebcdicdf0415':
-                               return 'OSD_EBCDIC_DF04_15';
-
-                       case 'cspc8danishnorwegian':
-                       case 'pc8danishnorwegian':
-                               return 'PC8-Danish-Norwegian';
-
-                       case 'cspc8turkish':
-                       case 'pc8turkish':
-                               return 'PC8-Turkish';
-
-                       case 'csiso16portuguese':
-                       case 'isoir16':
-                       case 'iso646pt':
-                       case 'pt':
-                               return 'PT';
-
-                       case 'csiso84portuguese2':
-                       case 'isoir84':
-                       case 'iso646pt2':
-                       case 'pt2':
-                               return 'PT2';
-
-                       case 'cp154':
-                       case 'csptcp154':
-                       case 'cyrillicasian':
-                       case 'pt154':
-                       case 'ptcp154':
-                               return 'PTCP154';
-
-                       case 'scsu':
-                               return 'SCSU';
-
-                       case 'csiso10swedish':
-                       case 'fi':
-                       case 'isoir10':
-                       case 'iso646fi':
-                       case 'iso646se':
-                       case 'se':
-                       case 'sen850200b':
-                               return 'SEN_850200_B';
-
-                       case 'csiso11swedishfornames':
-                       case 'isoir11':
-                       case 'iso646se2':
-                       case 'se2':
-                       case 'sen850200c':
-                               return 'SEN_850200_C';
-
-                       case 'csshiftjis':
-                       case 'mskanji':
-                       case 'shiftjis':
-                               return 'Shift_JIS';
-
-                       case 'csiso102t617bit':
-                       case 'isoir102':
-                       case 't617bit':
-                               return 'T.61-7bit';
-
-                       case 'csiso103t618bit':
-                       case 'isoir103':
-                       case 't61':
-                       case 't618bit':
-                               return 'T.61-8bit';
-
-                       case 'csiso128t101g2':
-                       case 'isoir128':
-                       case 't101g2':
-                               return 'T.101-G2';
-
-                       case 'cstscii':
-                       case 'tscii':
-                               return 'TSCII';
-
-                       case 'csunicode11':
-                       case 'unicode11':
-                               return 'UNICODE-1-1';
-
-                       case 'csunicode11utf7':
-                       case 'unicode11utf7':
-                               return 'UNICODE-1-1-UTF-7';
-
-                       case 'csunknown8bit':
-                       case 'unknown8bit':
-                               return 'UNKNOWN-8BIT';
-
-                       case 'ansix341968':
-                       case 'ansix341986':
-                       case 'ascii':
-                       case 'cp367':
-                       case 'csascii':
-                       case 'ibm367':
-                       case 'isoir6':
-                       case 'iso646us':
-                       case 'iso646irv1991':
-                       case 'us':
-                       case 'usascii':
-                               return 'US-ASCII';
-
-                       case 'csusdk':
-                       case 'usdk':
-                               return 'us-dk';
-
-                       case 'utf7':
-                               return 'UTF-7';
-
-                       case 'utf8':
-                               return 'UTF-8';
-
-                       case 'utf16':
-                               return 'UTF-16';
-
-                       case 'utf16be':
-                               return 'UTF-16BE';
-
-                       case 'utf16le':
-                               return 'UTF-16LE';
-
-                       case 'utf32':
-                               return 'UTF-32';
-
-                       case 'utf32be':
-                               return 'UTF-32BE';
-
-                       case 'utf32le':
-                               return 'UTF-32LE';
-
-                       case 'csventurainternational':
-                       case 'venturainternational':
-                               return 'Ventura-International';
-
-                       case 'csventuramath':
-                       case 'venturamath':
-                               return 'Ventura-Math';
-
-                       case 'csventuraus':
-                       case 'venturaus':
-                               return 'Ventura-US';
-
-                       case 'csiso70videotexsupp1':
-                       case 'isoir70':
-                       case 'videotexsuppl':
-                               return 'videotex-suppl';
-
-                       case 'csviqr':
-                       case 'viqr':
-                               return 'VIQR';
-
-                       case 'csviscii':
-                       case 'viscii':
-                               return 'VISCII';
-
-                       case 'cswindows31j':
-                       case 'windows31j':
-                               return 'Windows-31J';
-
-                       case 'iso885911':
-                       case 'tis620':
-                               return 'Windows-874';
-
-                       case 'cseuckr':
-                       case 'euckr':
-                       case 'windows949':
-                       case 'csksc56011987':
-                       case 'isoir149':
-                       case 'korean':
-                       case 'ksc5601':
-                       case 'ksc56011987':
-                       case 'ksc56011989':
-                               return 'Windows-949';
-
-                       case 'windows1250':
-                               return 'windows-1250';
-
-                       case 'windows1251':
-                               return 'windows-1251';
-
-                       case 'cp819':
-                       case 'csisolatin1':
-                       case 'ibm819':
-                       case 'iso88591':
-                       case 'isoir100':
-                       case 'iso885911987':
-                       case 'l1':
-                       case 'latin1':
-                       case 'windows1252':
-                               return 'Windows-1252';
-
-                       case 'windows1252':
-                               return 'windows-1252';
-
-                       case 'windows1253':
-                               return 'windows-1253';
-
-                       case 'csisolatin5':
-                       case 'iso88599':
-                       case 'isoir148':
-                       case 'iso885991989':
-                       case 'l5':
-                       case 'latin5':
-                       case 'windows1254':
-                               return 'Windows-1254';
-
-                       case 'windows1254':
-                               return 'windows-1254';
-
-                       case 'windows1255':
-                               return 'windows-1255';
-
-                       case 'windows1256':
-                               return 'windows-1256';
-
-                       case 'windows1257':
-                               return 'windows-1257';
-
-                       case 'windows1258':
-                               return 'windows-1258';
-
-                       default:
-                               return $charset;
-               }
-       }
-
-       function get_curl_version()
-       {
-               if (is_array($curl = curl_version()))
-               {
-                       $curl = $curl['version'];
-               }
-               elseif (substr($curl, 0, 5) == 'curl/')
-               {
-                       $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5));
-               }
-               elseif (substr($curl, 0, 8) == 'libcurl/')
-               {
-                       $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8));
-               }
-               else
-               {
-                       $curl = 0;
-               }
-               return $curl;
-       }
-
-       function is_subclass_of($class1, $class2)
-       {
-               if (func_num_args() != 2)
-               {
-                       trigger_error('Wrong parameter count for SimplePie_Misc::is_subclass_of()', E_USER_WARNING);
-               }
-               elseif (version_compare(PHP_VERSION, '5.0.3', '>=') || is_object($class1))
-               {
-                       return is_subclass_of($class1, $class2);
-               }
-               elseif (is_string($class1) && is_string($class2))
-               {
-                       if (class_exists($class1))
-                       {
-                               if (class_exists($class2))
-                               {
-                                       $class2 = strtolower($class2);
-                                       while ($class1 = strtolower(get_parent_class($class1)))
-                                       {
-                                               if ($class1 == $class2)
-                                               {
-                                                       return true;
-                                               }
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               trigger_error('Unknown class passed as parameter', E_USER_WARNNG);
-                       }
-               }
-               return false;
-       }
-
-       /**
-        * Strip HTML comments
-        *
-        * @access public
-        * @param string $data Data to strip comments from
-        * @return string Comment stripped string
-        */
-       function strip_comments($data)
-       {
-               $output = '';
-               while (($start = strpos($data, '<!--')) !== false)
-               {
-                       $output .= substr($data, 0, $start);
-                       if (($end = strpos($data, '-->', $start)) !== false)
-                       {
-                               $data = substr_replace($data, '', 0, $end + 3);
-                       }
-                       else
-                       {
-                               $data = '';
-                       }
-               }
-               return $output . $data;
-       }
-
-       function parse_date($dt)
-       {
-               $parser = SimplePie_Parse_Date::get();
-               return $parser->parse($dt);
-       }
-
-       /**
-        * Decode HTML entities
-        *
-        * @static
-        * @access public
-        * @param string $data Input data
-        * @return string Output data
-        */
-       function entities_decode($data)
-       {
-               $decoder = new SimplePie_Decode_HTML_Entities($data);
-               return $decoder->parse();
-       }
-
-       /**
-        * Remove RFC822 comments
-        *
-        * @access public
-        * @param string $data Data to strip comments from
-        * @return string Comment stripped string
-        */
-       function uncomment_rfc822($string)
-       {
-               $string = (string) $string;
-               $position = 0;
-               $length = strlen($string);
-               $depth = 0;
-
-               $output = '';
-
-               while ($position < $length && ($pos = strpos($string, '(', $position)) !== false)
-               {
-                       $output .= substr($string, $position, $pos - $position);
-                       $position = $pos + 1;
-                       if ($string[$pos - 1] !== '\\')
-                       {
-                               $depth++;
-                               while ($depth && $position < $length)
-                               {
-                                       $position += strcspn($string, '()', $position);
-                                       if ($string[$position - 1] === '\\')
-                                       {
-                                               $position++;
-                                               continue;
-                                       }
-                                       elseif (isset($string[$position]))
-                                       {
-                                               switch ($string[$position])
-                                               {
-                                                       case '(':
-                                                               $depth++;
-                                                               break;
-
-                                                       case ')':
-                                                               $depth--;
-                                                               break;
-                                               }
-                                               $position++;
-                                       }
-                                       else
-                                       {
-                                               break;
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               $output .= '(';
-                       }
-               }
-               $output .= substr($string, $position);
-
-               return $output;
-       }
-
-       function parse_mime($mime)
-       {
-               if (($pos = strpos($mime, ';')) === false)
-               {
-                       return trim($mime);
-               }
-               else
-               {
-                       return trim(substr($mime, 0, $pos));
-               }
-       }
-
-       function htmlspecialchars_decode($string, $quote_style)
-       {
-               if (function_exists('htmlspecialchars_decode'))
-               {
-                       return htmlspecialchars_decode($string, $quote_style);
-               }
-               else
-               {
-                       return strtr($string, array_flip(get_html_translation_table(HTML_SPECIALCHARS, $quote_style)));
-               }
-       }
-
-       function atom_03_construct_type($attribs)
-       {
-               if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) == 'base64'))
-               {
-                       $mode = SIMPLEPIE_CONSTRUCT_BASE64;
-               }
-               else
-               {
-                       $mode = SIMPLEPIE_CONSTRUCT_NONE;
-               }
-               if (isset($attribs['']['type']))
-               {
-                       switch (strtolower(trim($attribs['']['type'])))
-                       {
-                               case 'text':
-                               case 'text/plain':
-                                       return SIMPLEPIE_CONSTRUCT_TEXT | $mode;
-
-                               case 'html':
-                               case 'text/html':
-                                       return SIMPLEPIE_CONSTRUCT_HTML | $mode;
-
-                               case 'xhtml':
-                               case 'application/xhtml+xml':
-                                       return SIMPLEPIE_CONSTRUCT_XHTML | $mode;
-
-                               default:
-                                       return SIMPLEPIE_CONSTRUCT_NONE | $mode;
-                       }
-               }
-               else
-               {
-                       return SIMPLEPIE_CONSTRUCT_TEXT | $mode;
-               }
-       }
-
-       function atom_10_construct_type($attribs)
-       {
-               if (isset($attribs['']['type']))
-               {
-                       switch (strtolower(trim($attribs['']['type'])))
-                       {
-                               case 'text':
-                                       return SIMPLEPIE_CONSTRUCT_TEXT;
-
-                               case 'html':
-                                       return SIMPLEPIE_CONSTRUCT_HTML;
-
-                               case 'xhtml':
-                                       return SIMPLEPIE_CONSTRUCT_XHTML;
-
-                               default:
-                                       return SIMPLEPIE_CONSTRUCT_NONE;
-                       }
-               }
-               return SIMPLEPIE_CONSTRUCT_TEXT;
-       }
-
-       function atom_10_content_construct_type($attribs)
-       {
-               if (isset($attribs['']['type']))
-               {
-                       $type = strtolower(trim($attribs['']['type']));
-                       switch ($type)
-                       {
-                               case 'text':
-                                       return SIMPLEPIE_CONSTRUCT_TEXT;
-
-                               case 'html':
-                                       return SIMPLEPIE_CONSTRUCT_HTML;
-
-                               case 'xhtml':
-                                       return SIMPLEPIE_CONSTRUCT_XHTML;
-                       }
-                       if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) == 'text/')
-                       {
-                               return SIMPLEPIE_CONSTRUCT_NONE;
-                       }
-                       else
-                       {
-                               return SIMPLEPIE_CONSTRUCT_BASE64;
-                       }
-               }
-               else
-               {
-                       return SIMPLEPIE_CONSTRUCT_TEXT;
-               }
-       }
-
-       function is_isegment_nz_nc($string)
-       {
-               return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string);
-       }
-
-       function space_seperated_tokens($string)
-       {
-               $space_characters = "\x20\x09\x0A\x0B\x0C\x0D";
-               $string_length = strlen($string);
-
-               $position = strspn($string, $space_characters);
-               $tokens = array();
-
-               while ($position < $string_length)
-               {
-                       $len = strcspn($string, $space_characters, $position);
-                       $tokens[] = substr($string, $position, $len);
-                       $position += $len;
-                       $position += strspn($string, $space_characters, $position);
-               }
-
-               return $tokens;
-       }
-
-       function array_unique($array)
-       {
-               if (version_compare(PHP_VERSION, '5.2', '>='))
-               {
-                       return array_unique($array);
-               }
-               else
-               {
-                       $array = (array) $array;
-                       $new_array = array();
-                       $new_array_strings = array();
-                       foreach ($array as $key => $value)
-                       {
-                               if (is_object($value))
-                               {
-                                       if (method_exists($value, '__toString'))
-                                       {
-                                               $cmp = $value->__toString();
-                                       }
-                                       else
-                                       {
-                                               trigger_error('Object of class ' . get_class($value) . ' could not be converted to string', E_USER_ERROR);
-                                       }
-                               }
-                               elseif (is_array($value))
-                               {
-                                       $cmp = (string) reset($value);
-                               }
-                               else
-                               {
-                                       $cmp = (string) $value;
-                               }
-                               if (!in_array($cmp, $new_array_strings))
-                               {
-                                       $new_array[$key] = $value;
-                                       $new_array_strings[] = $cmp;
-                               }
-                       }
-                       return $new_array;
-               }
-       }
-
-       /**
-        * Converts a unicode codepoint to a UTF-8 character
-        *
-        * @static
-        * @access public
-        * @param int $codepoint Unicode codepoint
-        * @return string UTF-8 character
-        */
-       function codepoint_to_utf8($codepoint)
-       {
-               static $cache = array();
-               $codepoint = (int) $codepoint;
-               if (isset($cache[$codepoint]))
-               {
-                       return $cache[$codepoint];
-               }
-               elseif ($codepoint < 0)
-               {
-                       return $cache[$codepoint] = false;
-               }
-               else if ($codepoint <= 0x7f)
-               {
-                       return $cache[$codepoint] = chr($codepoint);
-               }
-               else if ($codepoint <= 0x7ff)
-               {
-                       return $cache[$codepoint] = chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f));
-               }
-               else if ($codepoint <= 0xffff)
-               {
-                       return $cache[$codepoint] = chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
-               }
-               else if ($codepoint <= 0x10ffff)
-               {
-                       return $cache[$codepoint] = chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
-               }
-               else
-               {
-                       // U+FFFD REPLACEMENT CHARACTER
-                       return $cache[$codepoint] = "\xEF\xBF\xBD";
-               }
-       }
-
-       /**
-        * Re-implementation of PHP 5's stripos()
-        *
-        * Returns the numeric position of the first occurrence of needle in the
-        * haystack string.
-        *
-        * @static
-        * @access string
-        * @param object $haystack
-        * @param string $needle Note that the needle may be a string of one or more
-        *     characters. If needle is not a string, it is converted to an integer
-        *     and applied as the ordinal value of a character.
-        * @param int $offset The optional offset parameter allows you to specify which
-        *     character in haystack to start searching. The position returned is still
-        *     relative to the beginning of haystack.
-        * @return bool If needle is not found, stripos() will return boolean false.
-        */
-       function stripos($haystack, $needle, $offset = 0)
-       {
-               if (function_exists('stripos'))
-               {
-                       return stripos($haystack, $needle, $offset);
-               }
-               else
-               {
-                       if (is_string($needle))
-                       {
-                               $needle = strtolower($needle);
-                       }
-                       elseif (is_int($needle) || is_bool($needle) || is_double($needle))
-                       {
-                               $needle = strtolower(chr($needle));
-                       }
-                       else
-                       {
-                               trigger_error('needle is not a string or an integer', E_USER_WARNING);
-                               return false;
-                       }
-
-                       return strpos(strtolower($haystack), $needle, $offset);
-               }
-       }
-
-       /**
-        * Similar to parse_str()
-        *
-        * Returns an associative array of name/value pairs, where the value is an
-        * array of values that have used the same name
-        *
-        * @static
-        * @access string
-        * @param string $str The input string.
-        * @return array
-        */
-       function parse_str($str)
-       {
-               $return = array();
-               $str = explode('&', $str);
-
-               foreach ($str as $section)
-               {
-                       if (strpos($section, '=') !== false)
-                       {
-                               list($name, $value) = explode('=', $section, 2);
-                               $return[urldecode($name)][] = urldecode($value);
-                       }
-                       else
-                       {
-                               $return[urldecode($section)][] = null;
-                       }
-               }
-
-               return $return;
-       }
-
-       /**
-        * Detect XML encoding, as per XML 1.0 Appendix F.1
-        *
-        * @todo Add support for EBCDIC
-        * @param string $data XML data
-        * @return array Possible encodings
-        */
-       function xml_encoding($data)
-       {
-               // UTF-32 Big Endian BOM
-               if (substr($data, 0, 4) === "\x00\x00\xFE\xFF")
-               {
-                       $encoding[] = 'UTF-32BE';
-               }
-               // UTF-32 Little Endian BOM
-               elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00")
-               {
-                       $encoding[] = 'UTF-32LE';
-               }
-               // UTF-16 Big Endian BOM
-               elseif (substr($data, 0, 2) === "\xFE\xFF")
-               {
-                       $encoding[] = 'UTF-16BE';
-               }
-               // UTF-16 Little Endian BOM
-               elseif (substr($data, 0, 2) === "\xFF\xFE")
-               {
-                       $encoding[] = 'UTF-16LE';
-               }
-               // UTF-8 BOM
-               elseif (substr($data, 0, 3) === "\xEF\xBB\xBF")
-               {
-                       $encoding[] = 'UTF-8';
-               }
-               // UTF-32 Big Endian Without BOM
-               elseif (substr($data, 0, 20) === "\x00\x00\x00\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C")
-               {
-                       if ($pos = strpos($data, "\x00\x00\x00\x3F\x00\x00\x00\x3E"))
-                       {
-                               $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8'));
-                               if ($parser->parse())
-                               {
-                                       $encoding[] = $parser->encoding;
-                               }
-                       }
-                       $encoding[] = 'UTF-32BE';
-               }
-               // UTF-32 Little Endian Without BOM
-               elseif (substr($data, 0, 20) === "\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C\x00\x00\x00")
-               {
-                       if ($pos = strpos($data, "\x3F\x00\x00\x00\x3E\x00\x00\x00"))
-                       {
-                               $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8'));
-                               if ($parser->parse())
-                               {
-                                       $encoding[] = $parser->encoding;
-                               }
-                       }
-                       $encoding[] = 'UTF-32LE';
-               }
-               // UTF-16 Big Endian Without BOM
-               elseif (substr($data, 0, 10) === "\x00\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C")
-               {
-                       if ($pos = strpos($data, "\x00\x3F\x00\x3E"))
-                       {
-                               $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8'));
-                               if ($parser->parse())
-                               {
-                                       $encoding[] = $parser->encoding;
-                               }
-                       }
-                       $encoding[] = 'UTF-16BE';
-               }
-               // UTF-16 Little Endian Without BOM
-               elseif (substr($data, 0, 10) === "\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C\x00")
-               {
-                       if ($pos = strpos($data, "\x3F\x00\x3E\x00"))
-                       {
-                               $parser = new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8'));
-                               if ($parser->parse())
-                               {
-                                       $encoding[] = $parser->encoding;
-                               }
-                       }
-                       $encoding[] = 'UTF-16LE';
-               }
-               // US-ASCII (or superset)
-               elseif (substr($data, 0, 5) === "\x3C\x3F\x78\x6D\x6C")
-               {
-                       if ($pos = strpos($data, "\x3F\x3E"))
-                       {
-                               $parser = new SimplePie_XML_Declaration_Parser(substr($data, 5, $pos - 5));
-                               if ($parser->parse())
-                               {
-                                       $encoding[] = $parser->encoding;
-                               }
-                       }
-                       $encoding[] = 'UTF-8';
-               }
-               // Fallback to UTF-8
-               else
-               {
-                       $encoding[] = 'UTF-8';
-               }
-               return $encoding;
-       }
-}
-
-/**
- * Decode HTML Entities
- *
- * This implements HTML5 as of revision 967 (2007-06-28)
- *
- * @package SimplePie
- */
-class SimplePie_Decode_HTML_Entities
-{
-       /**
-        * Data to be parsed
-        *
-        * @access private
-        * @var string
-        */
-       var $data = '';
-
-       /**
-        * Currently consumed bytes
-        *
-        * @access private
-        * @var string
-        */
-       var $consumed = '';
-
-       /**
-        * Position of the current byte being parsed
-        *
-        * @access private
-        * @var int
-        */
-       var $position = 0;
-
-       /**
-        * Create an instance of the class with the input data
-        *
-        * @access public
-        * @param string $data Input data
-        */
-       function SimplePie_Decode_HTML_Entities($data)
-       {
-               $this->data = $data;
-       }
-
-       /**
-        * Parse the input data
-        *
-        * @access public
-        * @return string Output data
-        */
-       function parse()
-       {
-               while (($this->position = strpos($this->data, '&', $this->position)) !== false)
-               {
-                       $this->consume();
-                       $this->entity();
-                       $this->consumed = '';
-               }
-               return $this->data;
-       }
-
-       /**
-        * Consume the next byte
-        *
-        * @access private
-        * @return mixed The next byte, or false, if there is no more data
-        */
-       function consume()
-       {
-               if (isset($this->data[$this->position]))
-               {
-                       $this->consumed .= $this->data[$this->position];
-                       return $this->data[$this->position++];
-               }
-               else
-               {
-                       $this->consumed = false;
-                       return false;
-               }
-       }
-
-       /**
-        * Consume a range of characters
-        *
-        * @access private
-        * @param string $chars Characters to consume
-        * @return mixed A series of characters that match the range, or false
-        */
-       function consume_range($chars)
-       {
-               if ($len = strspn($this->data, $chars, $this->position))
-               {
-                       $data = substr($this->data, $this->position, $len);
-                       $this->consumed .= $data;
-                       $this->position += $len;
-                       return $data;
-               }
-               else
-               {
-                       $this->consumed = false;
-                       return false;
-               }
-       }
-
-       /**
-        * Unconsume one byte
-        *
-        * @access private
-        */
-       function unconsume()
-       {
-               $this->consumed = substr($this->consumed, 0, -1);
-               $this->position--;
-       }
-
-       /**
-        * Decode an entity
-        *
-        * @access private
-        */
-       function entity()
-       {
-               switch ($this->consume())
-               {
-                       case "\x09":
-                       case "\x0A":
-                       case "\x0B":
-                       case "\x0B":
-                       case "\x0C":
-                       case "\x20":
-                       case "\x3C":
-                       case "\x26":
-                       case false:
-                               break;
-
-                       case "\x23":
-                               switch ($this->consume())
-                               {
-                                       case "\x78":
-                                       case "\x58":
-                                               $range = '0123456789ABCDEFabcdef';
-                                               $hex = true;
-                                               break;
-
-                                       default:
-                                               $range = '0123456789';
-                                               $hex = false;
-                                               $this->unconsume();
-                                               break;
-                               }
-
-                               if ($codepoint = $this->consume_range($range))
-                               {
-                                       static $windows_1252_specials = array(0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8");
-
-                                       if ($hex)
-                                       {
-                                               $codepoint = hexdec($codepoint);
-                                       }
-                                       else
-                                       {
-                                               $codepoint = intval($codepoint);
-                                       }
-
-                                       if (isset($windows_1252_specials[$codepoint]))
-                                       {
-                                               $replacement = $windows_1252_specials[$codepoint];
-                                       }
-                                       else
-                                       {
-                                               $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint);
-                                       }
-
-                                       if ($this->consume() != ';')
-                                       {
-                                               $this->unconsume();
-                                       }
-
-                                       $consumed_length = strlen($this->consumed);
-                                       $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length);
-                                       $this->position += strlen($replacement) - $consumed_length;
-                               }
-                               break;
-
-                       default:
-                               static $entities = array('Aacute' => "\xC3\x81", 'aacute' => "\xC3\xA1", 'Aacute;' => "\xC3\x81", 'aacute;' => "\xC3\xA1", 'Acirc' => "\xC3\x82", 'acirc' => "\xC3\xA2", 'Acirc;' => "\xC3\x82", 'acirc;' => "\xC3\xA2", 'acute' => "\xC2\xB4", 'acute;' => "\xC2\xB4", 'AElig' => "\xC3\x86", 'aelig' => "\xC3\xA6", 'AElig;' => "\xC3\x86", 'aelig;' => "\xC3\xA6", 'Agrave' => "\xC3\x80", 'agrave' => "\xC3\xA0", 'Agrave;' => "\xC3\x80", 'agrave;' => "\xC3\xA0", 'alefsym;' => "\xE2\x84\xB5", 'Alpha;' => "\xCE\x91", 'alpha;' => "\xCE\xB1", 'AMP' => "\x26", 'amp' => "\x26", 'AMP;' => "\x26", 'amp;' => "\x26", 'and;' => "\xE2\x88\xA7", 'ang;' => "\xE2\x88\xA0", 'apos;' => "\x27", 'Aring' => "\xC3\x85", 'aring' => "\xC3\xA5", 'Aring;' => "\xC3\x85", 'aring;' => "\xC3\xA5", 'asymp;' => "\xE2\x89\x88", 'Atilde' => "\xC3\x83", 'atilde' => "\xC3\xA3", 'Atilde;' => "\xC3\x83", 'atilde;' => "\xC3\xA3", 'Auml' => "\xC3\x84", 'auml' => "\xC3\xA4", 'Auml;' => "\xC3\x84", 'auml;' => "\xC3\xA4", 'bdquo;' => "\xE2\x80\x9E", 'Beta;' => "\xCE\x92", 'beta;' => "\xCE\xB2", 'brvbar' => "\xC2\xA6", 'brvbar;' => "\xC2\xA6", 'bull;' => "\xE2\x80\xA2", 'cap;' => "\xE2\x88\xA9", 'Ccedil' => "\xC3\x87", 'ccedil' => "\xC3\xA7", 'Ccedil;' => "\xC3\x87", 'ccedil;' => "\xC3\xA7", 'cedil' => "\xC2\xB8", 'cedil;' => "\xC2\xB8", 'cent' => "\xC2\xA2", 'cent;' => "\xC2\xA2", 'Chi;' => "\xCE\xA7", 'chi;' => "\xCF\x87", 'circ;' => "\xCB\x86", 'clubs;' => "\xE2\x99\xA3", 'cong;' => "\xE2\x89\x85", 'COPY' => "\xC2\xA9", 'copy' => "\xC2\xA9", 'COPY;' => "\xC2\xA9", 'copy;' => "\xC2\xA9", 'crarr;' => "\xE2\x86\xB5", 'cup;' => "\xE2\x88\xAA", 'curren' => "\xC2\xA4", 'curren;' => "\xC2\xA4", 'Dagger;' => "\xE2\x80\xA1", 'dagger;' => "\xE2\x80\xA0", 'dArr;' => "\xE2\x87\x93", 'darr;' => "\xE2\x86\x93", 'deg' => "\xC2\xB0", 'deg;' => "\xC2\xB0", 'Delta;' => "\xCE\x94", 'delta;' => "\xCE\xB4", 'diams;' => "\xE2\x99\xA6", 'divide' => "\xC3\xB7", 'divide;' => "\xC3\xB7", 'Eacute' => "\xC3\x89", 'eacute' => "\xC3\xA9", 'Eacute;' => "\xC3\x89", 'eacute;' => "\xC3\xA9", 'Ecirc' => "\xC3\x8A", 'ecirc' => "\xC3\xAA", 'Ecirc;' => "\xC3\x8A", 'ecirc;' => "\xC3\xAA", 'Egrave' => "\xC3\x88", 'egrave' => "\xC3\xA8", 'Egrave;' => "\xC3\x88", 'egrave;' => "\xC3\xA8", 'empty;' => "\xE2\x88\x85", 'emsp;' => "\xE2\x80\x83", 'ensp;' => "\xE2\x80\x82", 'Epsilon;' => "\xCE\x95", 'epsilon;' => "\xCE\xB5", 'equiv;' => "\xE2\x89\xA1", 'Eta;' => "\xCE\x97", 'eta;' => "\xCE\xB7", 'ETH' => "\xC3\x90", 'eth' => "\xC3\xB0", 'ETH;' => "\xC3\x90", 'eth;' => "\xC3\xB0", 'Euml' => "\xC3\x8B", 'euml' => "\xC3\xAB", 'Euml;' => "\xC3\x8B", 'euml;' => "\xC3\xAB", 'euro;' => "\xE2\x82\xAC", 'exist;' => "\xE2\x88\x83", 'fnof;' => "\xC6\x92", 'forall;' => "\xE2\x88\x80", 'frac12' => "\xC2\xBD", 'frac12;' => "\xC2\xBD", 'frac14' => "\xC2\xBC", 'frac14;' => "\xC2\xBC", 'frac34' => "\xC2\xBE", 'frac34;' => "\xC2\xBE", 'frasl;' => "\xE2\x81\x84", 'Gamma;' => "\xCE\x93", 'gamma;' => "\xCE\xB3", 'ge;' => "\xE2\x89\xA5", 'GT' => "\x3E", 'gt' => "\x3E", 'GT;' => "\x3E", 'gt;' => "\x3E", 'hArr;' => "\xE2\x87\x94", 'harr;' => "\xE2\x86\x94", 'hearts;' => "\xE2\x99\xA5", 'hellip;' => "\xE2\x80\xA6", 'Iacute' => "\xC3\x8D", 'iacute' => "\xC3\xAD", 'Iacute;' => "\xC3\x8D", 'iacute;' => "\xC3\xAD", 'Icirc' => "\xC3\x8E", 'icirc' => "\xC3\xAE", 'Icirc;' => "\xC3\x8E", 'icirc;' => "\xC3\xAE", 'iexcl' => "\xC2\xA1", 'iexcl;' => "\xC2\xA1", 'Igrave' => "\xC3\x8C", 'igrave' => "\xC3\xAC", 'Igrave;' => "\xC3\x8C", 'igrave;' => "\xC3\xAC", 'image;' => "\xE2\x84\x91", 'infin;' => "\xE2\x88\x9E", 'int;' => "\xE2\x88\xAB", 'Iota;' => "\xCE\x99", 'iota;' => "\xCE\xB9", 'iquest' => "\xC2\xBF", 'iquest;' => "\xC2\xBF", 'isin;' => "\xE2\x88\x88", 'Iuml' => "\xC3\x8F", 'iuml' => "\xC3\xAF", 'Iuml;' => "\xC3\x8F", 'iuml;' => "\xC3\xAF", 'Kappa;' => "\xCE\x9A", 'kappa;' => "\xCE\xBA", 'Lambda;' => "\xCE\x9B", 'lambda;' => "\xCE\xBB", 'lang;' => "\xE3\x80\x88", 'laquo' => "\xC2\xAB", 'laquo;' => "\xC2\xAB", 'lArr;' => "\xE2\x87\x90", 'larr;' => "\xE2\x86\x90", 'lceil;' => "\xE2\x8C\x88", 'ldquo;' => "\xE2\x80\x9C", 'le;' => "\xE2\x89\xA4", 'lfloor;' => "\xE2\x8C\x8A", 'lowast;' => "\xE2\x88\x97", 'loz;' => "\xE2\x97\x8A", 'lrm;' => "\xE2\x80\x8E", 'lsaquo;' => "\xE2\x80\xB9", 'lsquo;' => "\xE2\x80\x98", 'LT' => "\x3C", 'lt' => "\x3C", 'LT;' => "\x3C", 'lt;' => "\x3C", 'macr' => "\xC2\xAF", 'macr;' => "\xC2\xAF", 'mdash;' => "\xE2\x80\x94", 'micro' => "\xC2\xB5", 'micro;' => "\xC2\xB5", 'middot' => "\xC2\xB7", 'middot;' => "\xC2\xB7", 'minus;' => "\xE2\x88\x92", 'Mu;' => "\xCE\x9C", 'mu;' => "\xCE\xBC", 'nabla;' => "\xE2\x88\x87", 'nbsp' => "\xC2\xA0", 'nbsp;' => "\xC2\xA0", 'ndash;' => "\xE2\x80\x93", 'ne;' => "\xE2\x89\xA0", 'ni;' => "\xE2\x88\x8B", 'not' => "\xC2\xAC", 'not;' => "\xC2\xAC", 'notin;' => "\xE2\x88\x89", 'nsub;' => "\xE2\x8A\x84", 'Ntilde' => "\xC3\x91", 'ntilde' => "\xC3\xB1", 'Ntilde;' => "\xC3\x91", 'ntilde;' => "\xC3\xB1", 'Nu;' => "\xCE\x9D", 'nu;' => "\xCE\xBD", 'Oacute' => "\xC3\x93", 'oacute' => "\xC3\xB3", 'Oacute;' => "\xC3\x93", 'oacute;' => "\xC3\xB3", 'Ocirc' => "\xC3\x94", 'ocirc' => "\xC3\xB4", 'Ocirc;' => "\xC3\x94", 'ocirc;' => "\xC3\xB4", 'OElig;' => "\xC5\x92", 'oelig;' => "\xC5\x93", 'Ograve' => "\xC3\x92", 'ograve' => "\xC3\xB2", 'Ograve;' => "\xC3\x92", 'ograve;' => "\xC3\xB2", 'oline;' => "\xE2\x80\xBE", 'Omega;' => "\xCE\xA9", 'omega;' => "\xCF\x89", 'Omicron;' => "\xCE\x9F", 'omicron;' => "\xCE\xBF", 'oplus;' => "\xE2\x8A\x95", 'or;' => "\xE2\x88\xA8", 'ordf' => "\xC2\xAA", 'ordf;' => "\xC2\xAA", 'ordm' => "\xC2\xBA", 'ordm;' => "\xC2\xBA", 'Oslash' => "\xC3\x98", 'oslash' => "\xC3\xB8", 'Oslash;' => "\xC3\x98", 'oslash;' => "\xC3\xB8", 'Otilde' => "\xC3\x95", 'otilde' => "\xC3\xB5", 'Otilde;' => "\xC3\x95", 'otilde;' => "\xC3\xB5", 'otimes;' => "\xE2\x8A\x97", 'Ouml' => "\xC3\x96", 'ouml' => "\xC3\xB6", 'Ouml;' => "\xC3\x96", 'ouml;' => "\xC3\xB6", 'para' => "\xC2\xB6", 'para;' => "\xC2\xB6", 'part;' => "\xE2\x88\x82", 'permil;' => "\xE2\x80\xB0", 'perp;' => "\xE2\x8A\xA5", 'Phi;' => "\xCE\xA6", 'phi;' => "\xCF\x86", 'Pi;' => "\xCE\xA0", 'pi;' => "\xCF\x80", 'piv;' => "\xCF\x96", 'plusmn' => "\xC2\xB1", 'plusmn;' => "\xC2\xB1", 'pound' => "\xC2\xA3", 'pound;' => "\xC2\xA3", 'Prime;' => "\xE2\x80\xB3", 'prime;' => "\xE2\x80\xB2", 'prod;' => "\xE2\x88\x8F", 'prop;' => "\xE2\x88\x9D", 'Psi;' => "\xCE\xA8", 'psi;' => "\xCF\x88", 'QUOT' => "\x22", 'quot' => "\x22", 'QUOT;' => "\x22", 'quot;' => "\x22", 'radic;' => "\xE2\x88\x9A", 'rang;' => "\xE3\x80\x89", 'raquo' => "\xC2\xBB", 'raquo;' => "\xC2\xBB", 'rArr;' => "\xE2\x87\x92", 'rarr;' => "\xE2\x86\x92", 'rceil;' => "\xE2\x8C\x89", 'rdquo;' => "\xE2\x80\x9D", 'real;' => "\xE2\x84\x9C", 'REG' => "\xC2\xAE", 'reg' => "\xC2\xAE", 'REG;' => "\xC2\xAE", 'reg;' => "\xC2\xAE", 'rfloor;' => "\xE2\x8C\x8B", 'Rho;' => "\xCE\xA1", 'rho;' => "\xCF\x81", 'rlm;' => "\xE2\x80\x8F", 'rsaquo;' => "\xE2\x80\xBA", 'rsquo;' => "\xE2\x80\x99", 'sbquo;' => "\xE2\x80\x9A", 'Scaron;' => "\xC5\xA0", 'scaron;' => "\xC5\xA1", 'sdot;' => "\xE2\x8B\x85", 'sect' => "\xC2\xA7", 'sect;' => "\xC2\xA7", 'shy' => "\xC2\xAD", 'shy;' => "\xC2\xAD", 'Sigma;' => "\xCE\xA3", 'sigma;' => "\xCF\x83", 'sigmaf;' => "\xCF\x82", 'sim;' => "\xE2\x88\xBC", 'spades;' => "\xE2\x99\xA0", 'sub;' => "\xE2\x8A\x82", 'sube;' => "\xE2\x8A\x86", 'sum;' => "\xE2\x88\x91", 'sup;' => "\xE2\x8A\x83", 'sup1' => "\xC2\xB9", 'sup1;' => "\xC2\xB9", 'sup2' => "\xC2\xB2", 'sup2;' => "\xC2\xB2", 'sup3' => "\xC2\xB3", 'sup3;' => "\xC2\xB3", 'supe;' => "\xE2\x8A\x87", 'szlig' => "\xC3\x9F", 'szlig;' => "\xC3\x9F", 'Tau;' => "\xCE\xA4", 'tau;' => "\xCF\x84", 'there4;' => "\xE2\x88\xB4", 'Theta;' => "\xCE\x98", 'theta;' => "\xCE\xB8", 'thetasym;' => "\xCF\x91", 'thinsp;' => "\xE2\x80\x89", 'THORN' => "\xC3\x9E", 'thorn' => "\xC3\xBE", 'THORN;' => "\xC3\x9E", 'thorn;' => "\xC3\xBE", 'tilde;' => "\xCB\x9C", 'times' => "\xC3\x97", 'times;' => "\xC3\x97", 'TRADE;' => "\xE2\x84\xA2", 'trade;' => "\xE2\x84\xA2", 'Uacute' => "\xC3\x9A", 'uacute' => "\xC3\xBA", 'Uacute;' => "\xC3\x9A", 'uacute;' => "\xC3\xBA", 'uArr;' => "\xE2\x87\x91", 'uarr;' => "\xE2\x86\x91", 'Ucirc' => "\xC3\x9B", 'ucirc' => "\xC3\xBB", 'Ucirc;' => "\xC3\x9B", 'ucirc;' => "\xC3\xBB", 'Ugrave' => "\xC3\x99", 'ugrave' => "\xC3\xB9", 'Ugrave;' => "\xC3\x99", 'ugrave;' => "\xC3\xB9", 'uml' => "\xC2\xA8", 'uml;' => "\xC2\xA8", 'upsih;' => "\xCF\x92", 'Upsilon;' => "\xCE\xA5", 'upsilon;' => "\xCF\x85", 'Uuml' => "\xC3\x9C", 'uuml' => "\xC3\xBC", 'Uuml;' => "\xC3\x9C", 'uuml;' => "\xC3\xBC", 'weierp;' => "\xE2\x84\x98", 'Xi;' => "\xCE\x9E", 'xi;' => "\xCE\xBE", 'Yacute' => "\xC3\x9D", 'yacute' => "\xC3\xBD", 'Yacute;' => "\xC3\x9D", 'yacute;' => "\xC3\xBD", 'yen' => "\xC2\xA5", 'yen;' => "\xC2\xA5", 'yuml' => "\xC3\xBF", 'Yuml;' => "\xC5\xB8", 'yuml;' => "\xC3\xBF", 'Zeta;' => "\xCE\x96", 'zeta;' => "\xCE\xB6", 'zwj;' => "\xE2\x80\x8D", 'zwnj;' => "\xE2\x80\x8C");
-
-                               for ($i = 0, $match = null; $i < 9 && $this->consume() !== false; $i++)
-                               {
-                                       $consumed = substr($this->consumed, 1);
-                                       if (isset($entities[$consumed]))
-                                       {
-                                               $match = $consumed;
-                                       }
-                               }
-
-                               if ($match !== null)
-                               {
-                                       $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1);
-                                       $this->position += strlen($entities[$match]) - strlen($consumed) - 1;
-                               }
-                               break;
-               }
-       }
-}
-
-/**
- * Date Parser
- *
- * @package SimplePie
- */
-class SimplePie_Parse_Date
-{
-       /**
-        * Input data
-        *
-        * @access protected
-        * @var string
-        */
-       var $date;
-
-       /**
-        * List of days, calendar day name => ordinal day number in the week
-        *
-        * @access protected
-        * @var array
-        */
-       var $day = array(
-               // English
-               'mon' => 1,
-               'monday' => 1,
-               'tue' => 2,
-               'tuesday' => 2,
-               'wed' => 3,
-               'wednesday' => 3,
-               'thu' => 4,
-               'thursday' => 4,
-               'fri' => 5,
-               'friday' => 5,
-               'sat' => 6,
-               'saturday' => 6,
-               'sun' => 7,
-               'sunday' => 7,
-               // Dutch
-               'maandag' => 1,
-               'dinsdag' => 2,
-               'woensdag' => 3,
-               'donderdag' => 4,
-               'vrijdag' => 5,
-               'zaterdag' => 6,
-               'zondag' => 7,
-               // French
-               'lundi' => 1,
-               'mardi' => 2,
-               'mercredi' => 3,
-               'jeudi' => 4,
-               'vendredi' => 5,
-               'samedi' => 6,
-               'dimanche' => 7,
-               // German
-               'montag' => 1,
-               'dienstag' => 2,
-               'mittwoch' => 3,
-               'donnerstag' => 4,
-               'freitag' => 5,
-               'samstag' => 6,
-               'sonnabend' => 6,
-               'sonntag' => 7,
-               // Italian
-               'lunedì' => 1,
-               'martedì' => 2,
-               'mercoledì' => 3,
-               'giovedì' => 4,
-               'venerdì' => 5,
-               'sabato' => 6,
-               'domenica' => 7,
-               // Spanish
-               'lunes' => 1,
-               'martes' => 2,
-               'miércoles' => 3,
-               'jueves' => 4,
-               'viernes' => 5,
-               'sábado' => 6,
-               'domingo' => 7,
-               // Finnish
-               'maanantai' => 1,
-               'tiistai' => 2,
-               'keskiviikko' => 3,
-               'torstai' => 4,
-               'perjantai' => 5,
-               'lauantai' => 6,
-               'sunnuntai' => 7,
-               // Hungarian
-               'hétfő' => 1,
-               'kedd' => 2,
-               'szerda' => 3,
-               'csütörtok' => 4,
-               'péntek' => 5,
-               'szombat' => 6,
-               'vasárnap' => 7,
-               // Greek
-               'Δευ' => 1,
-               'Τρι' => 2,
-               'Τετ' => 3,
-               'Πεμ' => 4,
-               'Παρ' => 5,
-               'Σαβ' => 6,
-               'Κυρ' => 7,
-       );
-
-       /**
-        * List of months, calendar month name => calendar month number
-        *
-        * @access protected
-        * @var array
-        */
-       var $month = array(
-               // English
-               'jan' => 1,
-               'january' => 1,
-               'feb' => 2,
-               'february' => 2,
-               'mar' => 3,
-               'march' => 3,
-               'apr' => 4,
-               'april' => 4,
-               'may' => 5,
-               // No long form of May
-               'jun' => 6,
-               'june' => 6,
-               'jul' => 7,
-               'july' => 7,
-               'aug' => 8,
-               'august' => 8,
-               'sep' => 9,
-               'september' => 8,
-               'oct' => 10,
-               'october' => 10,
-               'nov' => 11,
-               'november' => 11,
-               'dec' => 12,
-               'december' => 12,
-               // Dutch
-               'januari' => 1,
-               'februari' => 2,
-               'maart' => 3,
-               'april' => 4,
-               'mei' => 5,
-               'juni' => 6,
-               'juli' => 7,
-               'augustus' => 8,
-               'september' => 9,
-               'oktober' => 10,
-               'november' => 11,
-               'december' => 12,
-               // French
-               'janvier' => 1,
-               'février' => 2,
-               'mars' => 3,
-               'avril' => 4,
-               'mai' => 5,
-               'juin' => 6,
-               'juillet' => 7,
-               'août' => 8,
-               'septembre' => 9,
-               'octobre' => 10,
-               'novembre' => 11,
-               'décembre' => 12,
-               // German
-               'januar' => 1,
-               'februar' => 2,
-               'märz' => 3,
-               'april' => 4,
-               'mai' => 5,
-               'juni' => 6,
-               'juli' => 7,
-               'august' => 8,
-               'september' => 9,
-               'oktober' => 10,
-               'november' => 11,
-               'dezember' => 12,
-               // Italian
-               'gennaio' => 1,
-               'febbraio' => 2,
-               'marzo' => 3,
-               'aprile' => 4,
-               'maggio' => 5,
-               'giugno' => 6,
-               'luglio' => 7,
-               'agosto' => 8,
-               'settembre' => 9,
-               'ottobre' => 10,
-               'novembre' => 11,
-               'dicembre' => 12,
-               // Spanish
-               'enero' => 1,
-               'febrero' => 2,
-               'marzo' => 3,
-               'abril' => 4,
-               'mayo' => 5,
-               'junio' => 6,
-               'julio' => 7,
-               'agosto' => 8,
-               'septiembre' => 9,
-               'setiembre' => 9,
-               'octubre' => 10,
-               'noviembre' => 11,
-               'diciembre' => 12,
-               // Finnish
-               'tammikuu' => 1,
-               'helmikuu' => 2,
-               'maaliskuu' => 3,
-               'huhtikuu' => 4,
-               'toukokuu' => 5,
-               'kesäkuu' => 6,
-               'heinäkuu' => 7,
-               'elokuu' => 8,
-               'suuskuu' => 9,
-               'lokakuu' => 10,
-               'marras' => 11,
-               'joulukuu' => 12,
-               // Hungarian
-               'január' => 1,
-               'február' => 2,
-               'március' => 3,
-               'április' => 4,
-               'május' => 5,
-               'június' => 6,
-               'július' => 7,
-               'augusztus' => 8,
-               'szeptember' => 9,
-               'október' => 10,
-               'november' => 11,
-               'december' => 12,
-               // Greek
-               'Ιαν' => 1,
-               'Φεβ' => 2,
-               'Μάώ' => 3,
-               'Μαώ' => 3,
-               'Απρ' => 4,
-               'Μάι' => 5,
-               'Μαϊ' => 5,
-               'Μαι' => 5,
-               'Ιούν' => 6,
-               'Ιον' => 6,
-               'Ιούλ' => 7,
-               'Ιολ' => 7,
-               'Αύγ' => 8,
-               'Αυγ' => 8,
-               'Σεπ' => 9,
-               'Οκτ' => 10,
-               'Νοέ' => 11,
-               'Δεκ' => 12,
-       );
-
-       /**
-        * List of timezones, abbreviation => offset from UTC
-        *
-        * @access protected
-        * @var array
-        */
-       var $timezone = array(
-               'ACDT' => 37800,
-               'ACIT' => 28800,
-               'ACST' => 34200,
-               'ACT' => -18000,
-               'ACWDT' => 35100,
-               'ACWST' => 31500,
-               'AEDT' => 39600,
-               'AEST' => 36000,
-               'AFT' => 16200,
-               'AKDT' => -28800,
-               'AKST' => -32400,
-               'AMDT' => 18000,
-               'AMT' => -14400,
-               'ANAST' => 46800,
-               'ANAT' => 43200,
-               'ART' => -10800,
-               'AZOST' => -3600,
-               'AZST' => 18000,
-               'AZT' => 14400,
-               'BIOT' => 21600,
-               'BIT' => -43200,
-               'BOT' => -14400,
-               'BRST' => -7200,
-               'BRT' => -10800,
-               'BST' => 3600,
-               'BTT' => 21600,
-               'CAST' => 18000,
-               'CAT' => 7200,
-               'CCT' => 23400,
-               'CDT' => -18000,
-               'CEDT' => 7200,
-               'CET' => 3600,
-               'CGST' => -7200,
-               'CGT' => -10800,
-               'CHADT' => 49500,
-               'CHAST' => 45900,
-               'CIST' => -28800,
-               'CKT' => -36000,
-               'CLDT' => -10800,
-               'CLST' => -14400,
-               'COT' => -18000,
-               'CST' => -21600,
-               'CVT' => -3600,
-               'CXT' => 25200,
-               'DAVT' => 25200,
-               'DTAT' => 36000,
-               'EADT' => -18000,
-               'EAST' => -21600,
-               'EAT' => 10800,
-               'ECT' => -18000,
-               'EDT' => -14400,
-               'EEST' => 10800,
-               'EET' => 7200,
-               'EGT' => -3600,
-               'EKST' => 21600,
-               'EST' => -18000,
-               'FJT' => 43200,
-               'FKDT' => -10800,
-               'FKST' => -14400,
-               'FNT' => -7200,
-               'GALT' => -21600,
-               'GEDT' => 14400,
-               'GEST' => 10800,
-               'GFT' => -10800,
-               'GILT' => 43200,
-               'GIT' => -32400,
-               'GST' => 14400,
-               'GST' => -7200,
-               'GYT' => -14400,
-               'HAA' => -10800,
-               'HAC' => -18000,
-               'HADT' => -32400,
-               'HAE' => -14400,
-               'HAP' => -25200,
-               'HAR' => -21600,
-               'HAST' => -36000,
-               'HAT' => -9000,
-               'HAY' => -28800,
-               'HKST' => 28800,
-               'HMT' => 18000,
-               'HNA' => -14400,
-               'HNC' => -21600,
-               'HNE' => -18000,
-               'HNP' => -28800,
-               'HNR' => -25200,
-               'HNT' => -12600,
-               'HNY' => -32400,
-               'IRDT' => 16200,
-               'IRKST' => 32400,
-               'IRKT' => 28800,
-               'IRST' => 12600,
-               'JFDT' => -10800,
-               'JFST' => -14400,
-               'JST' => 32400,
-               'KGST' => 21600,
-               'KGT' => 18000,
-               'KOST' => 39600,
-               'KOVST' => 28800,
-               'KOVT' => 25200,
-               'KRAST' => 28800,
-               'KRAT' => 25200,
-               'KST' => 32400,
-               'LHDT' => 39600,
-               'LHST' => 37800,
-               'LINT' => 50400,
-               'LKT' => 21600,
-               'MAGST' => 43200,
-               'MAGT' => 39600,
-               'MAWT' => 21600,
-               'MDT' => -21600,
-               'MESZ' => 7200,
-               'MEZ' => 3600,
-               'MHT' => 43200,
-               'MIT' => -34200,
-               'MNST' => 32400,
-               'MSDT' => 14400,
-               'MSST' => 10800,
-               'MST' => -25200,
-               'MUT' => 14400,
-               'MVT' => 18000,
-               'MYT' => 28800,
-               'NCT' => 39600,
-               'NDT' => -9000,
-               'NFT' => 41400,
-               'NMIT' => 36000,
-               'NOVST' => 25200,
-               'NOVT' => 21600,
-               'NPT' => 20700,
-               'NRT' => 43200,
-               'NST' => -12600,
-               'NUT' => -39600,
-               'NZDT' => 46800,
-               'NZST' => 43200,
-               'OMSST' => 25200,
-               'OMST' => 21600,
-               'PDT' => -25200,
-               'PET' => -18000,
-               'PETST' => 46800,
-               'PETT' => 43200,
-               'PGT' => 36000,
-               'PHOT' => 46800,
-               'PHT' => 28800,
-               'PKT' => 18000,
-               'PMDT' => -7200,
-               'PMST' => -10800,
-               'PONT' => 39600,
-               'PST' => -28800,
-               'PWT' => 32400,
-               'PYST' => -10800,
-               'PYT' => -14400,
-               'RET' => 14400,
-               'ROTT' => -10800,
-               'SAMST' => 18000,
-               'SAMT' => 14400,
-               'SAST' => 7200,
-               'SBT' => 39600,
-               'SCDT' => 46800,
-               'SCST' => 43200,
-               'SCT' => 14400,
-               'SEST' => 3600,
-               'SGT' => 28800,
-               'SIT' => 28800,
-               'SRT' => -10800,
-               'SST' => -39600,
-               'SYST' => 10800,
-               'SYT' => 7200,
-               'TFT' => 18000,
-               'THAT' => -36000,
-               'TJT' => 18000,
-               'TKT' => -36000,
-               'TMT' => 18000,
-               'TOT' => 46800,
-               'TPT' => 32400,
-               'TRUT' => 36000,
-               'TVT' => 43200,
-               'TWT' => 28800,
-               'UYST' => -7200,
-               'UYT' => -10800,
-               'UZT' => 18000,
-               'VET' => -14400,
-               'VLAST' => 39600,
-               'VLAT' => 36000,
-               'VOST' => 21600,
-               'VUT' => 39600,
-               'WAST' => 7200,
-               'WAT' => 3600,
-               'WDT' => 32400,
-               'WEST' => 3600,
-               'WFT' => 43200,
-               'WIB' => 25200,
-               'WIT' => 32400,
-               'WITA' => 28800,
-               'WKST' => 18000,
-               'WST' => 28800,
-               'YAKST' => 36000,
-               'YAKT' => 32400,
-               'YAPT' => 36000,
-               'YEKST' => 21600,
-               'YEKT' => 18000,
-       );
-
-       /**
-        * Cached PCRE for SimplePie_Parse_Date::$day
-        *
-        * @access protected
-        * @var string
-        */
-       var $day_pcre;
-
-       /**
-        * Cached PCRE for SimplePie_Parse_Date::$month
-        *
-        * @access protected
-        * @var string
-        */
-       var $month_pcre;
-
-       /**
-        * Array of user-added callback methods
-        *
-        * @access private
-        * @var array
-        */
-       var $built_in = array();
-
-       /**
-        * Array of user-added callback methods
-        *
-        * @access private
-        * @var array
-        */
-       var $user = array();
-
-       /**
-        * Create new SimplePie_Parse_Date object, and set self::day_pcre,
-        * self::month_pcre, and self::built_in
-        *
-        * @access private
-        */
-       function SimplePie_Parse_Date()
-       {
-               $this->day_pcre = '(' . implode(array_keys($this->day), '|') . ')';
-               $this->month_pcre = '(' . implode(array_keys($this->month), '|') . ')';
-
-               static $cache;
-               if (!isset($cache[get_class($this)]))
-               {
-                       if (extension_loaded('Reflection'))
-                       {
-                               $class = new ReflectionClass(get_class($this));
-                               $methods = $class->getMethods();
-                               $all_methods = array();
-                               foreach ($methods as $method)
-                               {
-                                       $all_methods[] = $method->getName();
-                               }
-                       }
-                       else
-                       {
-                               $all_methods = get_class_methods($this);
-                       }
-
-                       foreach ($all_methods as $method)
-                       {
-                               if (strtolower(substr($method, 0, 5)) === 'date_')
-                               {
-                                       $cache[get_class($this)][] = $method;
-                               }
-                       }
-               }
-
-               foreach ($cache[get_class($this)] as $method)
-               {
-                       $this->built_in[] = $method;
-               }
-       }
-
-       /**
-        * Get the object
-        *
-        * @access public
-        */
-       function get()
-       {
-               static $object;
-               if (!$object)
-               {
-                       $object = new SimplePie_Parse_Date;
-               }
-               return $object;
-       }
-
-       /**
-        * Parse a date
-        *
-        * @final
-        * @access public
-        * @param string $date Date to parse
-        * @return int Timestamp corresponding to date string, or false on failure
-        */
-       function parse($date)
-       {
-               foreach ($this->user as $method)
-               {
-                       if (($returned = call_user_func($method, $date)) !== false)
-                       {
-                               return $returned;
-                       }
-               }
-
-               foreach ($this->built_in as $method)
-               {
-                       if (($returned = call_user_func(array(&$this, $method), $date)) !== false)
-                       {
-                               return $returned;
-                       }
-               }
-
-               return false;
-       }
-
-       /**
-        * Add a callback method to parse a date
-        *
-        * @final
-        * @access public
-        * @param callback $callback
-        */
-       function add_callback($callback)
-       {
-               if (is_callable($callback))
-               {
-                       $this->user[] = $callback;
-               }
-               else
-               {
-                       trigger_error('User-supplied function must be a valid callback', E_USER_WARNING);
-               }
-       }
-
-       /**
-        * Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as
-        * well as allowing any of upper or lower case "T", horizontal tabs, or
-        * spaces to be used as the time seperator (including more than one))
-        *
-        * @access protected
-        * @return int Timestamp
-        */
-       function date_w3cdtf($date)
-       {
-               static $pcre;
-               if (!$pcre)
-               {
-                       $year = '([0-9]{4})';
-                       $month = $day = $hour = $minute = $second = '([0-9]{2})';
-                       $decimal = '([0-9]*)';
-                       $zone = '(?:(Z)|([+\-])([0-9]{1,2}):?([0-9]{1,2}))';
-                       $pcre = '/^' . $year . '(?:-?' . $month . '(?:-?' . $day . '(?:[Tt\x09\x20]+' . $hour . '(?::?' . $minute . '(?::?' . $second . '(?:.' . $decimal . ')?)?)?' . $zone . ')?)?)?$/';
-               }
-               if (preg_match($pcre, $date, $match))
-               {
-                       /*
-                       Capturing subpatterns:
-                       1: Year
-                       2: Month
-                       3: Day
-                       4: Hour
-                       5: Minute
-                       6: Second
-                       7: Decimal fraction of a second
-                       8: Zulu
-                       9: Timezone ±
-                       10: Timezone hours
-                       11: Timezone minutes
-                       */
-
-                       // Fill in empty matches
-                       for ($i = count($match); $i <= 3; $i++)
-                       {
-                               $match[$i] = '1';
-                       }
-
-                       for ($i = count($match); $i <= 7; $i++)
-                       {
-                               $match[$i] = '0';
-                       }
-
-                       // Numeric timezone
-                       if (isset($match[9]) && $match[9] !== '')
-                       {
-                               $timezone = $match[10] * 3600;
-                               $timezone += $match[11] * 60;
-                               if ($match[9] === '-')
-                               {
-                                       $timezone = 0 - $timezone;
-                               }
-                       }
-                       else
-                       {
-                               $timezone = 0;
-                       }
-
-                       // Convert the number of seconds to an integer, taking decimals into account
-                       $second = round($match[6] + $match[7] / pow(10, strlen($match[7])));
-
-                       return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Remove RFC822 comments
-        *
-        * @access protected
-        * @param string $data Data to strip comments from
-        * @return string Comment stripped string
-        */
-       function remove_rfc2822_comments($string)
-       {
-               $string = (string) $string;
-               $position = 0;
-               $length = strlen($string);
-               $depth = 0;
-
-               $output = '';
-
-               while ($position < $length && ($pos = strpos($string, '(', $position)) !== false)
-               {
-                       $output .= substr($string, $position, $pos - $position);
-                       $position = $pos + 1;
-                       if ($string[$pos - 1] !== '\\')
-                       {
-                               $depth++;
-                               while ($depth && $position < $length)
-                               {
-                                       $position += strcspn($string, '()', $position);
-                                       if ($string[$position - 1] === '\\')
-                                       {
-                                               $position++;
-                                               continue;
-                                       }
-                                       elseif (isset($string[$position]))
-                                       {
-                                               switch ($string[$position])
-                                               {
-                                                       case '(':
-                                                               $depth++;
-                                                               break;
-
-                                                       case ')':
-                                                               $depth--;
-                                                               break;
-                                               }
-                                               $position++;
-                                       }
-                                       else
-                                       {
-                                               break;
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               $output .= '(';
-                       }
-               }
-               $output .= substr($string, $position);
-
-               return $output;
-       }
-
-       /**
-        * Parse RFC2822's date format
-        *
-        * @access protected
-        * @return int Timestamp
-        */
-       function date_rfc2822($date)
-       {
-               static $pcre;
-               if (!$pcre)
-               {
-                       $wsp = '[\x09\x20]';
-                       $fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)';
-                       $optional_fws = $fws . '?';
-                       $day_name = $this->day_pcre;
-                       $month = $this->month_pcre;
-                       $day = '([0-9]{1,2})';
-                       $hour = $minute = $second = '([0-9]{2})';
-                       $year = '([0-9]{2,4})';
-                       $num_zone = '([+\-])([0-9]{2})([0-9]{2})';
-                       $character_zone = '([A-Z]{1,5})';
-                       $zone = '(?:' . $num_zone . '|' . $character_zone . ')';
-                       $pcre = '/(?:' . $optional_fws . $day_name . $optional_fws . ',)?' . $optional_fws . $day . $fws . $month . $fws . $year . $fws . $hour . $optional_fws . ':' . $optional_fws . $minute . '(?:' . $optional_fws . ':' . $optional_fws . $second . ')?' . $fws . $zone . '/i';
-               }
-               if (preg_match($pcre, $this->remove_rfc2822_comments($date), $match))
-               {
-                       /*
-                       Capturing subpatterns:
-                       1: Day name
-                       2: Day
-                       3: Month
-                       4: Year
-                       5: Hour
-                       6: Minute
-                       7: Second
-                       8: Timezone ±
-                       9: Timezone hours
-                       10: Timezone minutes
-                       11: Alphabetic timezone
-                       */
-
-                       // Find the month number
-                       $month = $this->month[strtolower($match[3])];
-
-                       // Numeric timezone
-                       if ($match[8] !== '')
-                       {
-                               $timezone = $match[9] * 3600;
-                               $timezone += $match[10] * 60;
-                               if ($match[8] === '-')
-                               {
-                                       $timezone = 0 - $timezone;
-                               }
-                       }
-                       // Character timezone
-                       elseif (isset($this->timezone[strtoupper($match[11])]))
-                       {
-                               $timezone = $this->timezone[strtoupper($match[11])];
-                       }
-                       // Assume everything else to be -0000
-                       else
-                       {
-                               $timezone = 0;
-                       }
-
-                       // Deal with 2/3 digit years
-                       if ($match[4] < 50)
-                       {
-                               $match[4] += 2000;
-                       }
-                       elseif ($match[4] < 1000)
-                       {
-                               $match[4] += 1900;
-                       }
-
-                       // Second is optional, if it is empty set it to zero
-                       if ($match[7] !== '')
-                       {
-                               $second = $match[7];
-                       }
-                       else
-                       {
-                               $second = 0;
-                       }
-
-                       return gmmktime($match[5], $match[6], $second, $month, $match[2], $match[4]) - $timezone;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Parse RFC850's date format
-        *
-        * @access protected
-        * @return int Timestamp
-        */
-       function date_rfc850($date)
-       {
-               static $pcre;
-               if (!$pcre)
-               {
-                       $space = '[\x09\x20]+';
-                       $day_name = $this->day_pcre;
-                       $month = $this->month_pcre;
-                       $day = '([0-9]{1,2})';
-                       $year = $hour = $minute = $second = '([0-9]{2})';
-                       $zone = '([A-Z]{1,5})';
-                       $pcre = '/^' . $day_name . ',' . $space . $day . '-' . $month . '-' . $year . $space . $hour . ':' . $minute . ':' . $second . $space . $zone . '$/i';
-               }
-               if (preg_match($pcre, $date, $match))
-               {
-                       /*
-                       Capturing subpatterns:
-                       1: Day name
-                       2: Day
-                       3: Month
-                       4: Year
-                       5: Hour
-                       6: Minute
-                       7: Second
-                       8: Timezone
-                       */
-
-                       // Month
-                       $month = $this->month[strtolower($match[3])];
-
-                       // Character timezone
-                       if (isset($this->timezone[strtoupper($match[8])]))
-                       {
-                               $timezone = $this->timezone[strtoupper($match[8])];
-                       }
-                       // Assume everything else to be -0000
-                       else
-                       {
-                               $timezone = 0;
-                       }
-
-                       // Deal with 2 digit year
-                       if ($match[4] < 50)
-                       {
-                               $match[4] += 2000;
-                       }
-                       else
-                       {
-                               $match[4] += 1900;
-                       }
-
-                       return gmmktime($match[5], $match[6], $match[7], $month, $match[2], $match[4]) - $timezone;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Parse C99's asctime()'s date format
-        *
-        * @access protected
-        * @return int Timestamp
-        */
-       function date_asctime($date)
-       {
-               static $pcre;
-               if (!$pcre)
-               {
-                       $space = '[\x09\x20]+';
-                       $wday_name = $this->day_pcre;
-                       $mon_name = $this->month_pcre;
-                       $day = '([0-9]{1,2})';
-                       $hour = $sec = $min = '([0-9]{2})';
-                       $year = '([0-9]{4})';
-                       $terminator = '\x0A?\x00?';
-                       $pcre = '/^' . $wday_name . $space . $mon_name . $space . $day . $space . $hour . ':' . $min . ':' . $sec . $space . $year . $terminator . '$/i';
-               }
-               if (preg_match($pcre, $date, $match))
-               {
-                       /*
-                       Capturing subpatterns:
-                       1: Day name
-                       2: Month
-                       3: Day
-                       4: Hour
-                       5: Minute
-                       6: Second
-                       7: Year
-                       */
-
-                       $month = $this->month[strtolower($match[2])];
-                       return gmmktime($match[4], $match[5], $match[6], $month, $match[3], $match[7]);
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Parse dates using strtotime()
-        *
-        * @access protected
-        * @return int Timestamp
-        */
-       function date_strtotime($date)
-       {
-               $strtotime = strtotime($date);
-               if ($strtotime === -1 || $strtotime === false)
-               {
-                       return false;
-               }
-               else
-               {
-                       return $strtotime;
-               }
-       }
-}
-
-/**
- * Content-type sniffing
- *
- * @package SimplePie
- */
-class SimplePie_Content_Type_Sniffer
-{
-       /**
-        * File object
-        *
-        * @var SimplePie_File
-        * @access private
-        */
-       var $file;
-
-       /**
-        * Create an instance of the class with the input file
-        *
-        * @access public
-        * @param SimplePie_Content_Type_Sniffer $file Input file
-        */
-       function SimplePie_Content_Type_Sniffer($file)
-       {
-               $this->file = $file;
-       }
-
-       /**
-        * Get the Content-Type of the specified file
-        *
-        * @access public
-        * @return string Actual Content-Type
-        */
-       function get_type()
-       {
-               if (isset($this->file->headers['content-type']))
-               {
-                       if (!isset($this->file->headers['content-encoding'])
-                               && ($this->file->headers['content-type'] === 'text/plain'
-                                       || $this->file->headers['content-type'] === 'text/plain; charset=ISO-8859-1'
-                                       || $this->file->headers['content-type'] === 'text/plain; charset=iso-8859-1'))
-                       {
-                               return $this->text_or_binary();
-                       }
-
-                       if (($pos = strpos($this->file->headers['content-type'], ';')) !== false)
-                       {
-                               $official = substr($this->file->headers['content-type'], 0, $pos);
-                       }
-                       else
-                       {
-                               $official = $this->file->headers['content-type'];
-                       }
-                       $official = strtolower($official);
-
-                       if ($official === 'unknown/unknown'
-                               || $official === 'application/unknown')
-                       {
-                               return $this->unknown();
-                       }
-                       elseif (substr($official, -4) === '+xml'
-                               || $official === 'text/xml'
-                               || $official === 'application/xml')
-                       {
-                               return $official;
-                       }
-                       elseif (substr($official, 0, 6) === 'image/')
-                       {
-                               if ($return = $this->image())
-                               {
-                                       return $return;
-                               }
-                               else
-                               {
-                                       return $official;
-                               }
-                       }
-                       elseif ($official === 'text/html')
-                       {
-                               return $this->feed_or_html();
-                       }
-                       else
-                       {
-                               return $official;
-                       }
-               }
-               else
-               {
-                       return $this->unknown();
-               }
-       }
-
-       /**
-        * Sniff text or binary
-        *
-        * @access private
-        * @return string Actual Content-Type
-        */
-       function text_or_binary()
-       {
-               if (substr($this->file->body, 0, 2) === "\xFE\xFF"
-                       || substr($this->file->body, 0, 2) === "\xFF\xFE"
-                       || substr($this->file->body, 0, 4) === "\x00\x00\xFE\xFF"
-                       || substr($this->file->body, 0, 3) === "\xEF\xBB\xBF")
-               {
-                       return 'text/plain';
-               }
-               elseif (preg_match('/[\x00-\x08\x0E-\x1A\x1C-\x1F]/', $this->file->body))
-               {
-                       return 'application/octect-stream';
-               }
-               else
-               {
-                       return 'text/plain';
-               }
-       }
-
-       /**
-        * Sniff unknown
-        *
-        * @access private
-        * @return string Actual Content-Type
-        */
-       function unknown()
-       {
-               $ws = strspn($this->file->body, "\x09\x0A\x0B\x0C\x0D\x20");
-               if (strtolower(substr($this->file->body, $ws, 14)) === '<!doctype html'
-                       || strtolower(substr($this->file->body, $ws, 5)) === '<html'
-                       || strtolower(substr($this->file->body, $ws, 7)) === '<script')
-               {
-                       return 'text/html';
-               }
-               elseif (substr($this->file->body, 0, 5) === '%PDF-')
-               {
-                       return 'application/pdf';
-               }
-               elseif (substr($this->file->body, 0, 11) === '%!PS-Adobe-')
-               {
-                       return 'application/postscript';
-               }
-               elseif (substr($this->file->body, 0, 6) === 'GIF87a'
-                       || substr($this->file->body, 0, 6) === 'GIF89a')
-               {
-                       return 'image/gif';
-               }
-               elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A")
-               {
-                       return 'image/png';
-               }
-               elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF")
-               {
-                       return 'image/jpeg';
-               }
-               elseif (substr($this->file->body, 0, 2) === "\x42\x4D")
-               {
-                       return 'image/bmp';
-               }
-               else
-               {
-                       return $this->text_or_binary();
-               }
-       }
-
-       /**
-        * Sniff images
-        *
-        * @access private
-        * @return string Actual Content-Type
-        */
-       function image()
-       {
-               if (substr($this->file->body, 0, 6) === 'GIF87a'
-                       || substr($this->file->body, 0, 6) === 'GIF89a')
-               {
-                       return 'image/gif';
-               }
-               elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A")
-               {
-                       return 'image/png';
-               }
-               elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF")
-               {
-                       return 'image/jpeg';
-               }
-               elseif (substr($this->file->body, 0, 2) === "\x42\x4D")
-               {
-                       return 'image/bmp';
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Sniff HTML
-        *
-        * @access private
-        * @return string Actual Content-Type
-        */
-       function feed_or_html()
-       {
-               $len = strlen($this->file->body);
-               $pos = strspn($this->file->body, "\x09\x0A\x0D\x20");
-
-               while ($pos < $len)
-               {
-                       switch ($this->file->body[$pos])
-                       {
-                               case "\x09":
-                               case "\x0A":
-                               case "\x0D":
-                               case "\x20":
-                                       $pos += strspn($this->file->body, "\x09\x0A\x0D\x20", $pos);
-                                       continue 2;
-
-                               case '<':
-                                       $pos++;
-                                       break;
-
-                               default:
-                                       return 'text/html';
-                       }
-
-                       if (substr($this->file->body, $pos, 3) === '!--')
-                       {
-                               $pos += 3;
-                               if ($pos < $len && ($pos = strpos($this->file->body, '-->', $pos)) !== false)
-                               {
-                                       $pos += 3;
-                               }
-                               else
-                               {
-                                       return 'text/html';
-                               }
-                       }
-                       elseif (substr($this->file->body, $pos, 1) === '!')
-                       {
-                               if ($pos < $len && ($pos = strpos($this->file->body, '>', $pos)) !== false)
-                               {
-                                       $pos++;
-                               }
-                               else
-                               {
-                                       return 'text/html';
-                               }
-                       }
-                       elseif (substr($this->file->body, $pos, 1) === '?')
-                       {
-                               if ($pos < $len && ($pos = strpos($this->file->body, '?>', $pos)) !== false)
-                               {
-                                       $pos += 2;
-                               }
-                               else
-                               {
-                                       return 'text/html';
-                               }
-                       }
-                       elseif (substr($this->file->body, $pos, 3) === 'rss'
-                               || substr($this->file->body, $pos, 7) === 'rdf:RDF')
-                       {
-                               return 'application/rss+xml';
-                       }
-                       elseif (substr($this->file->body, $pos, 4) === 'feed')
-                       {
-                               return 'application/atom+xml';
-                       }
-                       else
-                       {
-                               return 'text/html';
-                       }
-               }
-
-               return 'text/html';
-       }
-}
-
-/**
- * Parses the XML Declaration
- *
- * @package SimplePie
- */
-class SimplePie_XML_Declaration_Parser
-{
-       /**
-        * XML Version
-        *
-        * @access public
-        * @var string
-        */
-       var $version = '1.0';
-
-       /**
-        * Encoding
-        *
-        * @access public
-        * @var string
-        */
-       var $encoding = 'UTF-8';
-
-       /**
-        * Standalone
-        *
-        * @access public
-        * @var bool
-        */
-       var $standalone = false;
-
-       /**
-        * Current state of the state machine
-        *
-        * @access private
-        * @var string
-        */
-       var $state = 'before_version_name';
-
-       /**
-        * Input data
-        *
-        * @access private
-        * @var string
-        */
-       var $data = '';
-
-       /**
-        * Input data length (to avoid calling strlen() everytime this is needed)
-        *
-        * @access private
-        * @var int
-        */
-       var $data_length = 0;
-
-       /**
-        * Current position of the pointer
-        *
-        * @var int
-        * @access private
-        */
-       var $position = 0;
-
-       /**
-        * Create an instance of the class with the input data
-        *
-        * @access public
-        * @param string $data Input data
-        */
-       function SimplePie_XML_Declaration_Parser($data)
-       {
-               $this->data = $data;
-               $this->data_length = strlen($this->data);
-       }
-
-       /**
-        * Parse the input data
-        *
-        * @access public
-        * @return bool true on success, false on failure
-        */
-       function parse()
-       {
-               while ($this->state && $this->state !== 'emit' && $this->has_data())
-               {
-                       $state = $this->state;
-                       $this->$state();
-               }
-               $this->data = '';
-               if ($this->state === 'emit')
-               {
-                       return true;
-               }
-               else
-               {
-                       $this->version = '';
-                       $this->encoding = '';
-                       $this->standalone = '';
-                       return false;
-               }
-       }
-
-       /**
-        * Check whether there is data beyond the pointer
-        *
-        * @access private
-        * @return bool true if there is further data, false if not
-        */
-       function has_data()
-       {
-               return (bool) ($this->position < $this->data_length);
-       }
-
-       /**
-        * Advance past any whitespace
-        *
-        * @return int Number of whitespace characters passed
-        */
-       function skip_whitespace()
-       {
-               $whitespace = strspn($this->data, "\x09\x0A\x0D\x20", $this->position);
-               $this->position += $whitespace;
-               return $whitespace;
-       }
-
-       /**
-        * Read value
-        */
-       function get_value()
-       {
-               $quote = substr($this->data, $this->position, 1);
-               if ($quote === '"' || $quote === "'")
-               {
-                       $this->position++;
-                       $len = strcspn($this->data, $quote, $this->position);
-                       if ($this->has_data())
-                       {
-                               $value = substr($this->data, $this->position, $len);
-                               $this->position += $len + 1;
-                               return $value;
-                       }
-               }
-               return false;
-       }
-
-       function before_version_name()
-       {
-               if ($this->skip_whitespace())
-               {
-                       $this->state = 'version_name';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       function version_name()
-       {
-               if (substr($this->data, $this->position, 7) === 'version')
-               {
-                       $this->position += 7;
-                       $this->skip_whitespace();
-                       $this->state = 'version_equals';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       function version_equals()
-       {
-               if (substr($this->data, $this->position, 1) === '=')
-               {
-                       $this->position++;
-                       $this->skip_whitespace();
-                       $this->state = 'version_value';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       function version_value()
-       {
-               if ($this->version = $this->get_value())
-               {
-                       $this->skip_whitespace();
-                       if ($this->has_data())
-                       {
-                               $this->state = 'encoding_name';
-                       }
-                       else
-                       {
-                               $this->state = 'emit';
-                       }
-               }
-               else
-               {
-                       $this->state = 'standalone_name';
-               }
-       }
-
-       function encoding_name()
-       {
-               if (substr($this->data, $this->position, 8) === 'encoding')
-               {
-                       $this->position += 8;
-                       $this->skip_whitespace();
-                       $this->state = 'encoding_equals';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       function encoding_equals()
-       {
-               if (substr($this->data, $this->position, 1) === '=')
-               {
-                       $this->position++;
-                       $this->skip_whitespace();
-                       $this->state = 'encoding_value';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       function encoding_value()
-       {
-               if ($this->encoding = $this->get_value())
-               {
-                       $this->skip_whitespace();
-                       if ($this->has_data())
-                       {
-                               $this->state = 'standalone_name';
-                       }
-                       else
-                       {
-                               $this->state = 'emit';
-                       }
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       function standalone_name()
-       {
-               if (substr($this->data, $this->position, 10) === 'standalone')
-               {
-                       $this->position += 10;
-                       $this->skip_whitespace();
-                       $this->state = 'standalone_equals';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       function standalone_equals()
-       {
-               if (substr($this->data, $this->position, 1) === '=')
-               {
-                       $this->position++;
-                       $this->skip_whitespace();
-                       $this->state = 'standalone_value';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       function standalone_value()
-       {
-               if ($standalone = $this->get_value())
-               {
-                       switch ($standalone)
-                       {
-                               case 'yes':
-                                       $this->standalone = true;
-                                       break;
-
-                               case 'no':
-                                       $this->standalone = false;
-                                       break;
-
-                               default:
-                                       $this->state = false;
-                                       return;
-                       }
-
-                       $this->skip_whitespace();
-                       if ($this->has_data())
-                       {
-                               $this->state = false;
-                       }
-                       else
-                       {
-                               $this->state = 'emit';
-                       }
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-}
-
-class SimplePie_Locator
-{
-       var $useragent;
-       var $timeout;
-       var $file;
-       var $local = array();
-       var $elsewhere = array();
-       var $file_class = 'SimplePie_File';
-       var $cached_entities = array();
-       var $http_base;
-       var $base;
-       var $base_location = 0;
-       var $checked_feeds = 0;
-       var $max_checked_feeds = 10;
-       var $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer';
-
-       function SimplePie_Locator(&$file, $timeout = 10, $useragent = null, $file_class = 'SimplePie_File', $max_checked_feeds = 10, $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer')
-       {
-               $this->file =& $file;
-               $this->file_class = $file_class;
-               $this->useragent = $useragent;
-               $this->timeout = $timeout;
-               $this->max_checked_feeds = $max_checked_feeds;
-               $this->content_type_sniffer_class = $content_type_sniffer_class;
-       }
-
-       function find($type = SIMPLEPIE_LOCATOR_ALL)
-       {
-               if ($this->is_feed($this->file))
-               {
-                       return $this->file;
-               }
-
-               if ($this->file->method & SIMPLEPIE_FILE_SOURCE_REMOTE)
-               {
-                       $sniffer = new $this->content_type_sniffer_class($this->file);
-                       if ($sniffer->get_type() !== 'text/html')
-                       {
-                               return null;
-                       }
-               }
-
-               if ($type & ~SIMPLEPIE_LOCATOR_NONE)
-               {
-                       $this->get_base();
-               }
-
-               if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery())
-               {
-                       return $working;
-               }
-
-               if ($type & (SIMPLEPIE_LOCATOR_LOCAL_EXTENSION | SIMPLEPIE_LOCATOR_LOCAL_BODY | SIMPLEPIE_LOCATOR_REMOTE_EXTENSION | SIMPLEPIE_LOCATOR_REMOTE_BODY) && $this->get_links())
-               {
-                       if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local))
-                       {
-                               return $working;
-                       }
-
-                       if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local))
-                       {
-                               return $working;
-                       }
-
-                       if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere))
-                       {
-                               return $working;
-                       }
-
-                       if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere))
-                       {
-                               return $working;
-                       }
-               }
-               return null;
-       }
-
-       function is_feed(&$file)
-       {
-               if ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE)
-               {
-                       $sniffer = new $this->content_type_sniffer_class($file);
-                       $sniffed = $sniffer->get_type();
-                       if (in_array($sniffed, array('application/rss+xml', 'application/rdf+xml', 'text/rdf', 'application/atom+xml', 'text/xml', 'application/xml')))
-                       {
-                               return true;
-                       }
-                       else
-                       {
-                               return false;
-                       }
-               }
-               elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL)
-               {
-                       return true;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       function get_base()
-       {
-               $this->http_base = $this->file->url;
-               $this->base = $this->http_base;
-               $elements = SimplePie_Misc::get_element('base', $this->file->body);
-               foreach ($elements as $element)
-               {
-                       if ($element['attribs']['href']['data'] !== '')
-                       {
-                               $this->base = SimplePie_Misc::absolutize_url(trim($element['attribs']['href']['data']), $this->http_base);
-                               $this->base_location = $element['offset'];
-                               break;
-                       }
-               }
-       }
-
-       function autodiscovery()
-       {
-               $links = array_merge(SimplePie_Misc::get_element('link', $this->file->body), SimplePie_Misc::get_element('a', $this->file->body), SimplePie_Misc::get_element('area', $this->file->body));
-               $done = array();
-               foreach ($links as $link)
-               {
-                       if ($this->checked_feeds == $this->max_checked_feeds)
-                       {
-                               break;
-                       }
-                       if (isset($link['attribs']['href']['data']) && isset($link['attribs']['rel']['data']))
-                       {
-                               $rel = array_unique(SimplePie_Misc::space_seperated_tokens(strtolower($link['attribs']['rel']['data'])));
-
-                               if ($this->base_location < $link['offset'])
-                               {
-                                       $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base);
-                               }
-                               else
-                               {
-                                       $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base);
-                               }
-
-                               if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !empty($link['attribs']['type']['data']) && in_array(strtolower(SimplePie_Misc::parse_mime($link['attribs']['type']['data'])), array('application/rss+xml', 'application/atom+xml'))))
-                               {
-                                       $this->checked_feeds++;
-                                       $feed =& new $this->file_class($href, $this->timeout, 5, null, $this->useragent);
-                                       if ($this->is_feed($feed))
-                                       {
-                                               return $feed;
-                                       }
-                               }
-                               $done[] = $href;
-                       }
-               }
-               return null;
-       }
-
-       function get_links()
-       {
-               $links = SimplePie_Misc::get_element('a', $this->file->body);
-               foreach ($links as $link)
-               {
-                       if (isset($link['attribs']['href']['data']))
-                       {
-                               $href = trim($link['attribs']['href']['data']);
-                               $parsed = SimplePie_Misc::parse_url($href);
-                               if ($parsed['scheme'] === '' || preg_match('/^(http(s)|feed)?$/i', $parsed['scheme']))
-                               {
-                                       if ($this->base_location < $link['offset'])
-                                       {
-                                               $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base);
-                                       }
-                                       else
-                                       {
-                                               $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base);
-                                       }
-
-                                       $current = SimplePie_Misc::parse_url($this->file->url);
-
-                                       if ($parsed['authority'] === '' || $parsed['authority'] == $current['authority'])
-                                       {
-                                               $this->local[] = $href;
-                                       }
-                                       else
-                                       {
-                                               $this->elsewhere[] = $href;
-                                       }
-                               }
-                       }
-               }
-               $this->local = array_unique($this->local);
-               $this->elsewhere = array_unique($this->elsewhere);
-               if (!empty($this->local) || !empty($this->elsewhere))
-               {
-                       return true;
-               }
-               return null;
-       }
-
-       function extension(&$array)
-       {
-               foreach ($array as $key => $value)
-               {
-                       if ($this->checked_feeds == $this->max_checked_feeds)
-                       {
-                               break;
-                       }
-                       if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml')))
-                       {
-                               $this->checked_feeds++;
-                               $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent);
-                               if ($this->is_feed($feed))
-                               {
-                                       return $feed;
-                               }
-                               else
-                               {
-                                       unset($array[$key]);
-                               }
-                       }
-               }
-               return null;
-       }
-
-       function body(&$array)
-       {
-               foreach ($array as $key => $value)
-               {
-                       if ($this->checked_feeds == $this->max_checked_feeds)
-                       {
-                               break;
-                       }
-                       if (preg_match('/(rss|rdf|atom|xml)/i', $value))
-                       {
-                               $this->checked_feeds++;
-                               $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent);
-                               if ($this->is_feed($feed))
-                               {
-                                       return $feed;
-                               }
-                               else
-                               {
-                                       unset($array[$key]);
-                               }
-                       }
-               }
-               return null;
-       }
-}
-
-class SimplePie_Parser
-{
-       var $error_code;
-       var $error_string;
-       var $current_line;
-       var $current_column;
-       var $current_byte;
-       var $separator = ' ';
-       var $feed = false;
-       var $namespace = array('');
-       var $element = array('');
-       var $xml_base = array('');
-       var $xml_base_explicit = array(false);
-       var $xml_lang = array('');
-       var $data = array();
-       var $datas = array(array());
-       var $current_xhtml_construct = -1;
-       var $encoding;
-
-       function parse(&$data, $encoding)
-       {
-               // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character
-               if (strtoupper($encoding) == 'US-ASCII')
-               {
-                       $this->encoding = 'UTF-8';
-               }
-               else
-               {
-                       $this->encoding = $encoding;
-               }
-
-               // Strip BOM:
-               // UTF-32 Big Endian BOM
-               if (substr($data, 0, 4) === "\x00\x00\xFE\xFF")
-               {
-                       $data = substr($data, 4);
-               }
-               // UTF-32 Little Endian BOM
-               elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00")
-               {
-                       $data = substr($data, 4);
-               }
-               // UTF-16 Big Endian BOM
-               elseif (substr($data, 0, 2) === "\xFE\xFF")
-               {
-                       $data = substr($data, 2);
-               }
-               // UTF-16 Little Endian BOM
-               elseif (substr($data, 0, 2) === "\xFF\xFE")
-               {
-                       $data = substr($data, 2);
-               }
-               // UTF-8 BOM
-               elseif (substr($data, 0, 3) === "\xEF\xBB\xBF")
-               {
-                       $data = substr($data, 3);
-               }
-
-               if (substr($data, 0, 5) === '<?xml' && strspn(substr($data, 5, 1), "\x09\x0A\x0D\x20") && ($pos = strpos($data, '?>')) !== false)
-               {
-                       $declaration = new SimplePie_XML_Declaration_Parser(substr($data, 5, $pos - 5));
-                       if ($declaration->parse())
-                       {
-                               $data = substr($data, $pos + 2);
-                               $data = '<?xml version="' . $declaration->version . '" encoding="' . $encoding . '" standalone="' . (($declaration->standalone) ? 'yes' : 'no') . '"?>' . $data;
-                       }
-                       else
-                       {
-                               $this->error_string = 'SimplePie bug! Please report this!';
-                               return false;
-                       }
-               }
-
-               // Work around libxml bug
-               $data = str_replace('&lt;', '&#60;', $data);
-               $data = str_replace('&gt;', '&#62;', $data);
-               $data = str_replace('&amp;', '&#38;', $data);
-               $data = str_replace('&apos;', '&#39;', $data);
-               $data = str_replace('&quot;', '&#34;', $data);
-
-               $return = true;
-
-               // Create the parser
-               $xml = xml_parser_create_ns($this->encoding, $this->separator);
-               xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1);
-               xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0);
-               xml_set_object($xml, $this);
-               xml_set_character_data_handler($xml, 'cdata');
-               xml_set_element_handler($xml, 'tag_open', 'tag_close');
-
-               // Parse!
-               if (!xml_parse($xml, $data, true))
-               {
-                       $this->error_code = xml_get_error_code($xml);
-                       $this->error_string = xml_error_string($this->error_code);
-                       $return = false;
-               }
-               $this->current_line = xml_get_current_line_number($xml);
-               $this->current_column = xml_get_current_column_number($xml);
-               $this->current_byte = xml_get_current_byte_index($xml);
-               xml_parser_free($xml);
-               return $return;
-       }
-
-       function get_error_code()
-       {
-               return $this->error_code;
-       }
-
-       function get_error_string()
-       {
-               return $this->error_string;
-       }
-
-       function get_current_line()
-       {
-               return $this->current_line;
-       }
-
-       function get_current_column()
-       {
-               return $this->current_column;
-       }
-
-       function get_current_byte()
-       {
-               return $this->current_byte;
-       }
-
-       function get_data()
-       {
-               return $this->data;
-       }
-
-       function tag_open($parser, $tag, $attributes)
-       {
-               if ($this->feed === 0)
-               {
-                       return;
-               }
-               elseif ($this->feed == false)
-               {
-                       if (in_array($tag, array(
-                               SIMPLEPIE_NAMESPACE_ATOM_10 . $this->separator . 'feed',
-                               SIMPLEPIE_NAMESPACE_ATOM_03 . $this->separator . 'feed',
-                               'rss',
-                               SIMPLEPIE_NAMESPACE_RDF . $this->separator . 'RDF'
-                       )))
-                       {
-                                       $this->feed = 1;
-                       }
-               }
-               else
-               {
-                       $this->feed++;
-               }
-
-               list($this->namespace[], $this->element[]) = $this->split_ns($tag);
-
-               $attribs = array();
-               foreach ($attributes as $name => $value)
-               {
-                       list($attrib_namespace, $attribute) = $this->split_ns($name);
-                       $attribs[$attrib_namespace][$attribute] = $value;
-               }
-
-               if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['base']))
-               {
-                       $this->xml_base[] = SimplePie_Misc::absolutize_url($attribs[SIMPLEPIE_NAMESPACE_XML]['base'], end($this->xml_base));
-                       $this->xml_base_explicit[] = true;
-               }
-               else
-               {
-                       $this->xml_base[] = end($this->xml_base);
-                       $this->xml_base_explicit[] = end($this->xml_base_explicit);
-               }
-
-               if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['lang']))
-               {
-                       $this->xml_lang[] = $attribs[SIMPLEPIE_NAMESPACE_XML]['lang'];
-               }
-               else
-               {
-                       $this->xml_lang[] = end($this->xml_lang);
-               }
-
-               if ($this->current_xhtml_construct >= 0)
-               {
-                       $this->current_xhtml_construct++;
-                       if (end($this->namespace) == SIMPLEPIE_NAMESPACE_XHTML)
-                       {
-                               $this->data['data'] .= '<' . end($this->element);
-                               if (isset($attribs['']))
-                               {
-                                       foreach ($attribs[''] as $name => $value)
-                                       {
-                                               $this->data['data'] .= ' ' . $name . '="' . htmlspecialchars($value, ENT_COMPAT, $this->encoding) . '"';
-                                       }
-                               }
-                               $this->data['data'] .= '>';
-                       }
-               }
-               else
-               {
-                       $this->datas[] =& $this->data;
-                       $this->data =& $this->data['child'][end($this->namespace)][end($this->element)][];
-                       $this->data = array('data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang));
-                       if ((end($this->namespace) == SIMPLEPIE_NAMESPACE_ATOM_03 && in_array(end($this->element), array('title', 'tagline', 'copyright', 'info', 'summary', 'content')) && isset($attribs['']['mode']) && $attribs['']['mode'] == 'xml')
-                       || (end($this->namespace) == SIMPLEPIE_NAMESPACE_ATOM_10 && in_array(end($this->element), array('rights', 'subtitle', 'summary', 'info', 'title', 'content')) && isset($attribs['']['type']) && $attribs['']['type'] == 'xhtml'))
-                       {
-                               $this->current_xhtml_construct = 0;
-                       }
-               }
-       }
-
-       function cdata($parser, $cdata)
-       {
-               if ($this->current_xhtml_construct >= 0)
-               {
-                       $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding);
-               }
-               elseif ($this->feed > 1)
-               {
-                       $this->data['data'] .= $cdata;
-               }
-       }
-
-       function tag_close($parser, $tag)
-       {
-               if (!$this->feed)
-               {
-                       return;
-               }
-
-               if ($this->current_xhtml_construct >= 0)
-               {
-                       $this->current_xhtml_construct--;
-                       if (end($this->namespace) == SIMPLEPIE_NAMESPACE_XHTML && !in_array(end($this->element), array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param')))
-                       {
-                               $this->data['data'] .= '</' . end($this->element) . '>';
-                       }
-               }
-               if ($this->current_xhtml_construct == -1)
-               {
-                       $this->data =& $this->datas[$this->feed];
-                       array_pop($this->datas);
-               }
-
-               array_pop($this->element);
-               array_pop($this->namespace);
-               array_pop($this->xml_base);
-               array_pop($this->xml_base_explicit);
-               array_pop($this->xml_lang);
-               $this->feed--;
-       }
-
-       function split_ns($string)
-       {
-               static $cache = array();
-               if (!isset($cache[$string]))
-               {
-                       if ($pos = strpos($string, $this->separator))
-                       {
-                               static $separator_length;
-                               if (!$separator_length)
-                               {
-                                       $separator_length = strlen($this->separator);
-                               }
-                               $namespace = substr($string, 0, $pos);
-                               $local_name = substr($string, $pos + $separator_length);
-                               if (strtolower($namespace) === SIMPLEPIE_NAMESPACE_ITUNES)
-                               {
-                                       $namespace = SIMPLEPIE_NAMESPACE_ITUNES;
-                               }
-
-                               // Normalize the Media RSS namespaces
-                               if ($namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG)
-                               {
-                                       $namespace = SIMPLEPIE_NAMESPACE_MEDIARSS;
-                               }
-                               $cache[$string] = array($namespace, $local_name);
-                       }
-                       else
-                       {
-                               $cache[$string] = array('', $string);
-                       }
-               }
-               return $cache[$string];
-       }
-}
-
-/**
- * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shorten a string while preserving HTML tags
- */
-class SimplePie_Sanitize
-{
-       // Private vars
-       var $base;
-
-       // Options
-       var $remove_div = true;
-       var $image_handler = '';
-       var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
-       var $encode_instead_of_strip = false;
-       var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
-       var $strip_comments = false;
-       var $output_encoding = 'UTF-8';
-       var $enable_cache = true;
-       var $cache_location = './cache';
-       var $cache_name_function = 'md5';
-       var $cache_class = 'SimplePie_Cache';
-       var $file_class = 'SimplePie_File';
-       var $timeout = 10;
-       var $useragent = '';
-       var $force_fsockopen = false;
-
-       var $replace_url_attributes = array(
-               'a' => 'href',
-               'area' => 'href',
-               'blockquote' => 'cite',
-               'del' => 'cite',
-               'form' => 'action',
-               'img' => array('longdesc', 'src'),
-               'input' => 'src',
-               'ins' => 'cite',
-               'q' => 'cite'
-       );
-
-       function remove_div($enable = true)
-       {
-               $this->remove_div = (bool) $enable;
-       }
-
-       function set_image_handler($page = false)
-       {
-               if ($page)
-               {
-                       $this->image_handler = (string) $page;
-               }
-               else
-               {
-                       $this->image_handler = false;
-               }
-       }
-
-       function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie_Cache')
-       {
-               if (isset($enable_cache))
-               {
-                       $this->enable_cache = (bool) $enable_cache;
-               }
-
-               if ($cache_location)
-               {
-                       $this->cache_location = (string) $cache_location;
-               }
-
-               if ($cache_name_function)
-               {
-                       $this->cache_name_function = (string) $cache_name_function;
-               }
-
-               if ($cache_class)
-               {
-                       $this->cache_class = (string) $cache_class;
-               }
-       }
-
-       function pass_file_data($file_class = 'SimplePie_File', $timeout = 10, $useragent = '', $force_fsockopen = false)
-       {
-               if ($file_class)
-               {
-                       $this->file_class = (string) $file_class;
-               }
-
-               if ($timeout)
-               {
-                       $this->timeout = (string) $timeout;
-               }
-
-               if ($useragent)
-               {
-                       $this->useragent = (string) $useragent;
-               }
-
-               if ($force_fsockopen)
-               {
-                       $this->force_fsockopen = (string) $force_fsockopen;
-               }
-       }
-
-       function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'))
-       {
-               if ($tags)
-               {
-                       if (is_array($tags))
-                       {
-                               $this->strip_htmltags = $tags;
-                       }
-                       else
-                       {
-                               $this->strip_htmltags = explode(',', $tags);
-                       }
-               }
-               else
-               {
-                       $this->strip_htmltags = false;
-               }
-       }
-
-       function encode_instead_of_strip($encode = false)
-       {
-               $this->encode_instead_of_strip = (bool) $encode;
-       }
-
-       function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'))
-       {
-               if ($attribs)
-               {
-                       if (is_array($attribs))
-                       {
-                               $this->strip_attributes = $attribs;
-                       }
-                       else
-                       {
-                               $this->strip_attributes = explode(',', $attribs);
-                       }
-               }
-               else
-               {
-                       $this->strip_attributes = false;
-               }
-       }
-
-       function strip_comments($strip = false)
-       {
-               $this->strip_comments = (bool) $strip;
-       }
-
-       function set_output_encoding($encoding = 'UTF-8')
-       {
-               $this->output_encoding = (string) $encoding;
-       }
-
-       /**
-        * Set element/attribute key/value pairs of HTML attributes
-        * containing URLs that need to be resolved relative to the feed
-        *
-        * @access public
-        * @since 1.0
-        * @param array $element_attribute Element/attribute key/value pairs
-        */
-       function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite'))
-       {
-               $this->replace_url_attributes = (array) $element_attribute;
-       }
-
-       function sanitize($data, $type, $base = '')
-       {
-               $data = trim($data);
-               if ($data !== '' || $type & SIMPLEPIE_CONSTRUCT_IRI)
-               {
-                       if ($type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML)
-                       {
-                               if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>)/', $data))
-                               {
-                                       $type |= SIMPLEPIE_CONSTRUCT_HTML;
-                               }
-                               else
-                               {
-                                       $type |= SIMPLEPIE_CONSTRUCT_TEXT;
-                               }
-                       }
-
-                       if ($type & SIMPLEPIE_CONSTRUCT_BASE64)
-                       {
-                               $data = base64_decode($data);
-                       }
-
-                       if ($type & SIMPLEPIE_CONSTRUCT_XHTML)
-                       {
-                               if ($this->remove_div)
-                               {
-                                       $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '', $data);
-                                       $data = preg_replace('/<\/div>$/', '', $data);
-                               }
-                               else
-                               {
-                                       $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '<div>', $data);
-                               }
-                       }
-
-                       if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML))
-                       {
-                               // Strip comments
-                               if ($this->strip_comments)
-                               {
-                                       $data = SimplePie_Misc::strip_comments($data);
-                               }
-
-                               // Strip out HTML tags and attributes that might cause various security problems.
-                               // Based on recommendations by Mark Pilgrim at:
-                               // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely
-                               if ($this->strip_htmltags)
-                               {
-                                       foreach ($this->strip_htmltags as $tag)
-                                       {
-                                               $pcre = "/<($tag)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$tag" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>|(\/)?>)/siU';
-                                               while (preg_match($pcre, $data))
-                                               {
-                                                       $data = preg_replace_callback($pcre, array(&$this, 'do_strip_htmltags'), $data);
-                                               }
-                                       }
-                               }
-
-                               if ($this->strip_attributes)
-                               {
-                                       foreach ($this->strip_attributes as $attrib)
-                                       {
-                                               $data = preg_replace('/(<[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*)' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . trim($attrib) . '(?:\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>/', '\1\2\3>', $data);
-                                       }
-                               }
-
-                               // Replace relative URLs
-                               $this->base = $base;
-                               foreach ($this->replace_url_attributes as $element => $attributes)
-                               {
-                                       $data = $this->replace_urls($data, $element, $attributes);
-                               }
-
-                               // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags.
-                               if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache)
-                               {
-                                       $images = SimplePie_Misc::get_element('img', $data);
-                                       foreach ($images as $img)
-                                       {
-                                               if (isset($img['attribs']['src']['data']))
-                                               {
-                                                       $image_url = call_user_func($this->cache_name_function, $img['attribs']['src']['data']);
-                                                       $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, $image_url, 'spi');
-
-                                                       if ($cache->load())
-                                                       {
-                                                               $img['attribs']['src']['data'] = $this->image_handler . $image_url;
-                                                               $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data);
-                                                       }
-                                                       else
-                                                       {
-                                                               $file =& new $this->file_class($img['attribs']['src']['data'], $this->timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen);
-                                                               $headers = $file->headers;
-
-                                                               if ($file->success && ($file->status_code == 200 || ($file->status_code > 206 && $file->status_code < 300)))
-                                                               {
-                                                                       if ($cache->save(array('headers' => $file->headers, 'body' => $file->body)))
-                                                                       {
-                                                                               $img['attribs']['src']['data'] = $this->image_handler . $image_url;
-                                                                               $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data);
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               trigger_error("$cache->name is not writeable", E_USER_WARNING);
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-                                       }
-                               }
-
-                               // Having (possibly) taken stuff out, there may now be whitespace at the beginning/end of the data
-                               $data = trim($data);
-                       }
-
-                       if ($type & SIMPLEPIE_CONSTRUCT_IRI)
-                       {
-                               $data = SimplePie_Misc::absolutize_url($data, $base);
-                       }
-
-                       if ($type & (SIMPLEPIE_CONSTRUCT_TEXT | SIMPLEPIE_CONSTRUCT_IRI))
-                       {
-                               $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
-                       }
-
-                       if ($this->output_encoding != 'UTF-8')
-                       {
-                               $data = SimplePie_Misc::change_encoding($data, 'UTF-8', $this->output_encoding);
-                       }
-               }
-               return $data;
-       }
-
-       function replace_urls($data, $tag, $attributes)
-       {
-               if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags))
-               {
-                       $elements = SimplePie_Misc::get_element($tag, $data);
-                       foreach ($elements as $element)
-                       {
-                               if (is_array($attributes))
-                               {
-                                       foreach ($attributes as $attribute)
-                                       {
-                                               if (isset($element['attribs'][$attribute]['data']))
-                                               {
-                                                       $element['attribs'][$attribute]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attribute]['data'], $this->base);
-                                                       $new_element = SimplePie_Misc::element_implode($element);
-                                                       $data = str_replace($element['full'], $new_element, $data);
-                                                       $element['full'] = $new_element;
-                                               }
-                                       }
-                               }
-                               elseif (isset($element['attribs'][$attributes]['data']))
-                               {
-                                       $element['attribs'][$attributes]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attributes]['data'], $this->base);
-                                       $data = str_replace($element['full'], SimplePie_Misc::element_implode($element), $data);
-                               }
-                       }
-               }
-               return $data;
-       }
-
-       function do_strip_htmltags($match)
-       {
-               if ($this->encode_instead_of_strip)
-               {
-                       if (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style')))
-                       {
-                               $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8');
-                               $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8');
-                               return "&lt;$match[1]$match[2]&gt;$match[3]&lt;/$match[1]&gt;";
-                       }
-                       else
-                       {
-                               return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8');
-                       }
-               }
-               elseif (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style')))
-               {
-                       return $match[4];
-               }
-               else
-               {
-                       return '';
-               }
-       }
-}
-
-?>
\ No newline at end of file
+endif;
\ No newline at end of file