(function($) {

    $.extend(jQuery.fn, {

        feed: function(params) {

            var $this = $(this);

            var $ajaxMgr = $.manageAjax({
                manageType: 'abortOld',
                maxReq: 3,
                blockSameRequest: true
            });

            // Set the variables to be used within the class
            var $url = params.url;
            var $count = params.count || 1;
            var $vars = params.vars || ["title", "description", "link", "pubDate"];
            var $template = params.template || $this.html();
            var $errortext = params.errortext || "An error has occured";

            $.replaceAll = function(needle, value, subject) {
                var $subject = subject;
                if (needle == "pubDate") {
                    //We need to format the pud date.
                    $dateParts = value.split(' ');
                    value = $dateParts[0] + ' ' + $dateParts[1] + ' ' + $dateParts[2] + ' ' + $dateParts[3];
                }
                if (needle == "description") {
                    value = value.replace("[...]", "") + "...";
                }
                while ($subject.indexOf("@" + needle) != -1) {
                    $subject = $subject.replace("@" + needle, value);
                }

                return $subject;
            };

            // What to do after a request has been completed
            $this.complete = params.complete || function(html) {
                $this.html(html);
            };

            // What to do while a request is in progress
            $this.loading = params.loading || function() {
                $this.html("<span class=\"loading\">Loading...</span>");
            };

            // Make a request
            $this.request = function(url) {
                $this.loading();

                $ajaxMgr.add({
                    success: function(html) {
                        html = html.replace(/content:encoded/g, "content"); //ZOOMIN specific hack !!
                        var rssLength = $.xmlDOM(html).find("rss > channel > item").length;
                        if (rssLength > 0) {
                            var $v = [];
                            var $t = [];
                            var $tmp = "";

                            if (rssLength < $count) $count = rssLength;
                            // Grab values from the feed
                            for (var i in $vars) {
                                $v[i] = $.xmlDOM(html).find("rss > channel > item > " + $vars[i]);
                            }

                            // Build the html
                            for (i = 0; i < $count; i++) {
                                $t[i] = $template;

                                for (var n in $v) {
                                    $t[i] = $.replaceAll($vars[n], $($($v[n])[i]).text(), $t[i]);
                                }

                                $tmp += $t[i];

                            }

                            $this.complete($tmp);
                        }
                        else {
                            $this.complete(params.errortext);
                        }
                    },
                    url: url
                });

            };

            $this.request($url);

        }

    });

})(jQuery);
