﻿function baseControls() {
    this.fixLinks = function (content) {
        try {
            var url = /href="(http|https|ftp)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/[^\"\s]*)?"/ig;
            var result = content.replace(url, '$& target="_blank"');
            return result;
        } catch (err) { }
        return content;
    };
    this.getDate = function (rawDate) {
        if (rawDate === undefined || rawDate == '')
            return '';

        var date = new Date(rawDate);
        return date.format('mmm dd') + ' at ' + date.format('hh:MMtt');
    };
    //    this.createRssFeed = function (settings, source, feedFormat, number, processFeed, link, getResult) {
    //        var feed = new google.feeds.Feed(source);
    //        feed.setResultFormat(feedFormat);
    //        feed.setNumEntries(number);
    //        feed.load(function (result) {
    //            if ((result.feed.entries.length == 0 && feedFormat === google.feeds.Feed.JSON_FORMAT) || (result.xmlDocument.getElementsByTagName('item').length == 0 && feedFormat === google.feeds.Feed.XML_FORMAT)) {
    //                $('#' + settings.Id).trigger('dtFeedLoad');
    //                return;
    //            }
    //            processFeeds(getResult(result));
    //            $('#' + settings.Id + ' .url').attr('href', link);
    //            $('#' + settings.Id).trigger('dtFeedLoad');
    //        });
    //    }
}
/*------------presskit----------*/
$.fn.presskit = function (settings) {
    var feedResult = $(this);
    var createFeed = function (source) {
        feedResult.html($('#presskit-template').tmpl(JSON.parse(settings)));
        $('.feed-header div', feedResult).click(function (event) {
            $('.feed-header div', feedResult).removeClass("selected");
            $('div', '.feed-content').hide();
            $(event.currentTarget).addClass("selected");
            var index = $('.feed-header div[class~="selected"]', feedResult).index();
            $($('div', '.feed-content')[index]).show();
        });

        $('.resume-file', feedResult).bind("contextmenu", function (e) {
            var myFileLocation = '/api/v1/root/DownloadFile?filePath=' + $(this).attr('href');
            location.href = myFileLocation;
            return false;
        });
        $('.down-resume-file', feedResult).bind("click", function (e) {
            var myFileLocation = '/api/v1/root/DownloadFile?filePath=' + $(this).attr('href');
            location.href = myFileLocation;
            return false;
        });

        $($('.feed-header div', feedResult)[0]).click();
        var items = $('img', feedResult).click(function () {
            zoomHelper.init("/Areas/Dashboard/Views/Feeds/Controls/Icons/presskit.png", "Media Kit", "", "");
            zoomHelper.apply(items, null, null, null, this.id);
        });
    };
    createFeed();
};
/*------------youtube----------*/
$.fn.youtube = function (settings) {
    var feedResult = $(this);
    var responseHandler = function (data) {
        feedResult.html($('#youtube-template').tmpl(data));
        var items = $('img', feedResult).click(function () {
            zoomHelper.init("/Areas/Dashboard/Views/Feeds/Controls/Icons/youtube.png", "You Tube", "http://www.youtube.com/", "Visit You Tube");
            zoomHelper.apply(items, null, this.id, null, null);
        });
        var fireNextPrev = function () {
            return false;
        };
        items.paginate({ next: $('#' + settings.Id + ' .feed-next'), prev: $('#' + settings.Id + ' .feed-prev'), fireNextPrev: fireNextPrev, size: 25 });
        $('#' + settings.Id).trigger('dtFeedLoad');
    };
    var createFeed = function (url) {
        feedHelpers.youtube.loadData("google", url, responseHandler);
    };
    createFeed(settings.Url);
};
/*------------Vimeo----------*/
$.fn.vimeo = function (settings) {
    var feedResult = $(this);
    var responseHandler = function (data) {
        feedResult.html($('#vimeo-template').tmpl(data));
        var items = $('img', feedResult).click(function () {
            zoomHelper.init("/Areas/Dashboard/Views/Feeds/Controls/Icons/vimeo.png", "Vimeo", "http://www.vimeo.com/", "Visit Vimeo");
            zoomHelper.apply(items, null, null, this.id, null);
        });
        var fireNextPrev = function () {
            return false;
        };
        items.paginate({ next: $('#' + settings.Id + ' .feed-next'), prev: $('#' + settings.Id + ' .feed-prev'), fireNextPrev: fireNextPrev, size: 25 });
        $('#' + settings.Id).trigger('dtFeedLoad');
    };
    var createFeed = function (url) {
        feedHelpers.vimeo.loadData("google", url, responseHandler);
    };
    createFeed(settings.Url);
};
/*------------wordpress----------*/
$.fn.wordpress = function (settings) {
    var feedResult = $(this);
    $('#' + settings.Id + ' .url').attr('href', function () {
        var rawRss = settings.Url;
        var name = /http:\/\/([^\/]+)\/.*/i;
        var result = name.exec(rawRss);
        return result != null ? ("http\://" + name.exec(rawRss)[1]) : "";
    } ());
    var createFeed = function (source) {
        var feed = new google.feeds.Feed(source);
        feed.setResultFormat(google.feeds.Feed.JSON_FORMAT);
        feed.setNumEntries(100);
        feed.load(function (result) {
            if (result.feed.entries.length == 0) {
                $('#' + settings.Id).trigger('dtFeedLoad');
                return;
            }
            feedResult.html($('#wordpress-template').tmpl(result.feed.entries, { formatDate: getDate, formatContent: fixLinks }));
            if (result.feed.description != null && result.feed.description != '') {
                feedResult.prepend('<div class="description">' + result.feed.description + "</div>");
            }
            $('#' + settings.Id).trigger('dtFeedLoad');
        });
    };
    createFeed(settings.Url);
};
$.fn.wordpress.prototype = baseControls();
/*------------twitter----------*/
$.fn.twitter = function (settings) {
    var feedResult = $(this);
    var setUrl = function (url) {
        $('#' + settings.Id + ' .url').attr('href', url);
    };
    var processFeeds = function (entries) {
        if (entries.length == 0) {
            $('#' + settings.Id).trigger('dtFeedLoad');
            return;
        }
        var formatDate = function (rawDate) {
            var date;
            if (rawDate.substring(0, 6) == '/Date(')
                date = new Date(parseInt(rawDate.replace(/\/Date\((-?\d+)\)\//gi, "$1")));
            else
                date = new Date(rawDate);
            return date.format('mmm dd') + ' at ' + date.format('hh:MMtt');
        };
        var formatTweet = function (content) {
            try {
                var groups = /^([^:\s]+:\s)((.|\n)+)/i;
                var result = content;
                if (groups.test(content)) {
                    result = groups.exec(content)[2];
                }
                var url = /(http|https|ftp)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/ig;
                var result = content.replace(url, '<a href="$&" target="_blank">$&</a>');
                return result;
            } catch (err) { }
            return content;
        };
        feedResult.html($('#twitter-template').tmpl(entries, { formatDate: formatDate, formatTweet: formatTweet }));
        $('#' + settings.Id).trigger('dtFeedLoad');
    };
    if (settings.UseRss) {
        var createFeed = function (source) {
            var feed = new google.feeds.Feed(source);
            feed.setResultFormat(google.feeds.Feed.JSON_FORMAT);
            feed.setNumEntries(20);
            feed.load(function (result) {
                processFeeds(result.feed.entries);
                setUrl(result.feed.link);
            });
        }
        createFeed(settings.Url);
    }
    else {
        $.ajax({
            url: settings.AjaxUrl,
            type: 'POST',
            dataType: 'json',
            success: function (data, textStatus, jqXHR) {
                var entries = JSON.parse(data.entries);
                setUrl("http://twitter.com/" + entries.responseData.userName);
                processFeeds(entries.responseData.feed.entries);
            }
        });
    }
};
/*------------modelmayhem----------*/
$.fn.modelmayhem = function (settings) {
    var feedResult = $(this);
    var setUrl = function (url) {
        $('#' + settings.Id + ' .url').attr('href', url);
    };
    var processFeeds = function (info) {
        if (info == null) {
            $('#' + settings.Id).trigger('dtFeedLoad');
            return;
        }
        var userData = { tierInfo: info.userTierInfo, profileData: info.profileData };
        var aboutFull = info.profileData.about_me;
        if (aboutFull.length > 850)
            info.profileData.about_me = info.profileData.about_me.substr(0, info.profileData.about_me.substr(0, 815).lastIndexOf(' ')) + '...';
        feedResult.html($('#modelmayhem-template').tmpl(userData));
        $('#mm-mainTmpl').tmpl(info.albumsInfo).appendTo('#' + settings.Id + ' .mm-main');
        $('#' + settings.Id + ' .mm-main .mm-item-album').live("click", function () {
            $('#' + settings.Id + ' .mm-item-album').hide();
            var _id = $(this).attr('data-id');
            var pics = $.grep(info.albumsInfo.pictures, function (a) {
                return a.group_id == _id;
            });
            $('#mm-picturesTmpl').tmpl(pics).appendTo('#' + settings.Id + ' .mm-photos-section .mm-pics-gallery');
            $('#' + settings.Id + ' .mm-gallery-title').html('View Albums').css('cursor', 'pointer').click(function () { $(this).html('Albums').css('cursor', 'auto'); $('#' + settings.Id + ' .mm-photos-section .mm-pics-gallery').html(''); $('#' + settings.Id + ' .mm-item-album').show(); });
            var items = $('#' + settings.Id + ' .mm-item-picture .mm-thumbnail').click(function () {
                zoomHelper.init("/Areas/Dashboard/Views/Feeds/Controls/Icons/modelmayhem.png", "Model Mayhem", "http://www.modelmayhem.com/" + info.userTierInfo.member_Id, "Visit Model Mayhem");
                zoomHelper.apply(items, this.id, null, null, null);
            });
            var fireNextPrev = function () {
                return false;
            };
        });
        if (aboutFull.length < 850)
            $('#' + settings.Id + ' .modelmayhem .mm-more').hide()
        else
            $('#' + settings.Id + ' .modelmayhem .mm-more').live('click', function () {
                if ($('#' + settings.Id + ' .modelmayhem #mm-close-more').length > 0)
                    $('#' + settings.Id + ' .modelmayhem .mm-about').html(aboutFull.substr(0, aboutFull.substr(0, 815).lastIndexOf(' '))).append('...<br/><i class="mm-more" id="mm-show-more"><a>more</a></i>');
                else
                    $('#' + settings.Id + ' .modelmayhem .mm-about').html(aboutFull).append('<br/><i class="mm-more" id="mm-close-more"><a>less</a></i>');
            });
        $('#' + settings.Id).trigger('dtFeedLoad');
    };
    $.ajax({
        url: settings.AjaxUrl,
        type: 'POST',
        dataType: 'json',
        success: function (data, textStatus, jqXHR) {
            //  console.log(data.entries);
            var userInfo = JSON.parse(data.entries);
            setUrl("http://modelmayhem.com/" + userInfo.userTierInfo.member_Id);
            processFeeds(userInfo);
        }
    });

};
/*------------tumblr----------*/
$.fn.tumblr = function (settings) {
    var feedResult = $(this);
    var createFeed = function (source) {
        var feed = new google.feeds.Feed(source);
        feed.setResultFormat(google.feeds.Feed.JSON_FORMAT);
        feed.setNumEntries(100);
        feed.load(function (result) {
            if (result.feed.entries.length == 0) {
                $('#' + settings.Id).trigger('dtFeedLoad');
                return;
            }
            feedResult.html($('#tumblr-template').tmpl(result.feed.entries, { formatDate: getDate, formatContent: fixLinks }));
            if (result.feed.description != null && result.feed.description != '') {
                feedResult.prepend('<div class="description">' + result.feed.description + "</div>");
            }
            $('#' + settings.Id).trigger('dtFeedLoad');
        });
    };
    createFeed(settings.Url);
};
$.fn.tumblr.prototype = baseControls();
/*------------soundcloud----------*/
$.fn.soundcloud = function (settings) {
    var feedResult = $(this);
    var sf = new SoundcloudFeed();
    sf.initTemplate('soundcloud-band-template', 'soundcloud-track-template');
    sf.initVisit($('#' + settings.Id + ' .url'));
    sf.create(settings.FeedId, settings.Index, feedResult);
    feedHelpers.manager.initMediaplayer('audio_mediaplayer', 1, 1);
}
/*------------linkedin----------*/
$.fn.linkedin = function (settings) {
    var feedResult = $(this);
    var setUrl = function (url) {
        $('#' + settings.Id + ' .url').attr('href', url);
    };
    var processFeeds = function (entries) {
        if (entries.length == 0) {
            $('#' + settings.Id).trigger('dtFeedLoad');
            return;
        }
        var formatDate = function (start, end) {
            var result = '';
            if (start != null) {
                var startDate = new Date(start.Year, start.Month, start.Day);
                result = startDate.format('mmm yyyy');
            }
            if (end != null) {
                var endDate = new Date(end.Year, end.Month, end.Day);
                result += ' - ' + endDate.format('mmm yyyy');
            } else {
                result += ' - Present';
            }

            return result;
        };
        feedResult.html($('#linkedin-template').tmpl(entries, { formatDate: formatDate }));
        $('#' + settings.Id).trigger('dtFeedLoad');
    };
    $.ajax({
        url: settings.AjaxUrl,
        type: 'POST',
        dataType: 'json',
        success: function (data) {
            var entries = JSON.parse(data.entries);
            setUrl(entries.PublicProfileUrl);
            processFeeds(entries);
        }
    });
};
/*------------laughstub----------*/
$.fn.laughstub = function (settings) {
    var feedResult = $(this);
    $('#' + settings.Id + ' .url').attr('href', function () {
        var rawRss = settings.Url;
        var name = /http:\/\/([^\/]+)\/.*/i;
        var result = name.exec(rawRss);
        return result != null ? ("http\://www.laughstub.com/" + name.exec(rawRss)[1]) : "";
    } ());
    var createFeed = function () {
        var source;
        if (settings.Url == null || settings.Url == "") {
            var baseUrl = "http://www.laughstub.com/tickets/";
            source = JSON.parse(settings.Content);
            source = baseUrl + source.firstName + "-" + source.lastName;
        } else {
            source = settings.Url;
        }
        var feed = new google.feeds.Feed(source);
        feed.setResultFormat(google.feeds.Feed.XML_FORMAT);
        feed.setNumEntries(1000);
        feed.load(function (result) {
            var getValue = function (name) {
                if (this.data.getElementsByTagName(name)[0].firstChild == null)
                    return "";
                return this.data.getElementsByTagName(name)[0].firstChild.nodeValue;
            };
            var formatDate = function (rawDate) {
                rawDate = rawDate.replace(' PDT', '').replace(' PST', '');
                var date = new Date(rawDate);
                return date.format('ddd mm/dd  h:MM TT');
            };
            var entries = [];
            var rawEntries = result.xmlDocument.getElementsByTagName('item');
            if (rawEntries.length == 0) {
                $('#' + settings.Id).trigger('dtFeedLoad');
                return;
            }
            for (var i = 0; i < rawEntries.length; i++) {
                entries.push(rawEntries[i]);
            }
            feedResult.html($('#laughstub-template').tmpl(entries, { pubDate: 'pubDate', venueName: 'venueName', venueCity: 'venueCity', venueState: 'venueState', link: 'link', getValue: getValue, formatDate: formatDate }));
            $('#' + settings.Id).trigger('dtFeedLoad');
        });
    };
    createFeed();
};
/*------------foursquare----------*/
$.fn.foursquare = function (settings) {
    var feedResult = $(this);
    var setUrl = function (url) {
        $('#' + settings.Id + ' .url').attr('href', url);
    };
    var formatDate = function (time) {
        var date, diff;
        if (time.toString().substring(3, 4) === ',') {
            date = new Date(time);
            diff = (new Date().getTime() - date.getTime()) / 1000;
        } else {
            date = new Date(time);
            diff = new Date().getTime() / 1000 - date.getTime();
        }
        var day_diff = Math.floor(diff / 86400);

        if (isNaN(day_diff) || day_diff < 0)
            return;

        return day_diff == 0 && (
            diff < 60 && "just now" ||
            diff < 120 && "1 minute ago" ||
            diff < 3600 && Math.floor(diff / 60) + " minutes ago" ||
            diff < 7200 && "1 hour ago" ||
            diff < 86400 && Math.floor(diff / 3600) + " hours ago") ||
        day_diff == 1 && "Yesterday" ||
        day_diff < 7 && day_diff + " days ago" ||
        day_diff < 31 && Math.ceil(day_diff / 7) + " weeks ago" ||
        day_diff >= 31 && Math.ceil(day_diff / 31) + " month ago";
    };
    var processFeeds = function (entries) {
        if (entries.length == 0) {
            $('#' + settings.Id).trigger('dtFeedLoad');
            return;
        }

        feedResult.html($('#foursquare-template').tmpl(entries, { formatDate: formatDate }));
        $('#' + settings.Id).trigger('dtFeedLoad');
    };
    var processFeedsRss = function (feed) {
        if (feed.entries.length == 0) {
            $('#' + settings.Id).trigger('dtFeedLoad');
            return;
        }
        feedResult.html($('#foursquare-rss-template').tmpl(feed, { formatDate: formatDate }));
        $('#' + settings.Id).trigger('dtFeedLoad');
    };
    if (settings.UseRss) {
        var createFeed = function (source) {
            var feed = new google.feeds.Feed(source);
            feed.setResultFormat(google.feeds.Feed.JSON_FORMAT);
            feed.setNumEntries(20);
            feed.load(function (result) {
                processFeedsRss(result.feed);
                setUrl(result.feed.link);
            });
        };
        createFeed(settings.Id);
    } else {
        $.ajax({
            url: settings.AjaxUrl,
            type: 'POST',
            dataType: 'json',
            success: function (data) {
                var entries = JSON.parse(data.entries);
                setUrl("http://foursquare.com/user/" + entries.user.id);
                processFeeds(entries);
            }
        });
    }
};
/*------------flickr----------*/
$.fn.flickr = function (settings) {
    var feedResult = $(this);
    var responseHandler = function (data) {
        feedResult.html($('#flickr-template').tmpl(data));
        var items = $('img', feedResult).click(function () {
            zoomHelper.init("/Areas/Dashboard/Views/Feeds/Controls/Icons/flickr.png", "Flickr", "http://www.flickr.com", "Visit Flickr");
            zoomHelper.apply(items, this.id, null, null, null);
        });
        var fireNextPrev = function () {
            return false;
        };
        items.paginate({ next: $('#' + settings.Id + ' .feed-next'), prev: $('#' + settings.Id + ' .feed-prev'), fireNextPrev: fireNextPrev, size: 25 });
        $('#' + settings.Id).trigger('dtFeedLoad');
    };

    if (settings.UseRss) {
        feedHelpers.flickr.loadData("google", settings.Url, responseHandler);
    } else {
        feedHelpers.flickr.loadData("server", settings.FeedId, responseHandler);
    }
};
/*------------facebook----------*/
$.fn.facebook = function (settings) {
    var $feed = $(this);
    $(".main-tabs, .facebook-photos", $feed).tabs();

    var $detailsDialog = $("." + settings.detailsId).dialog({
        autoOpen: false,
        position: ['center', 50],
        dialogClass: "facebook-details-dialog",
        resizable: false,
        width: "auto",
        height: "auto",
        modal: true,
        closeText: "X",
        title: "Facebook",
        closeOnEscape: true,
        close: function () {
            $(".content", $detailsDialog).html("");
        }
    });

    function detalize($el) {
        if ($el.length == 0) {
            return;
        }

        var $targetContent = settings.data[$el.attr("id")];
        $(".content", $detailsDialog).html($targetContent);
        $detailsDialog.data("content-el", $el);
        $detailsDialog.dialog("open");
    }

    $(".paging .prev", $detailsDialog).click(function () {
        var $detalized = $detailsDialog.data("content-el");
        detalize($detalized.prev());
    });

    $(".paging .next", $detailsDialog).click(function () {
        var $detalized = $detailsDialog.data("content-el");
        detalize($detalized.next());
    });

    $(".detalizable", $feed).click(function () {
        detalize($(this));
    });

    $('#' + settings.id).trigger('dtFeedLoad');
};
/*------------blogger----------*/
$.fn.blogger = function (settings) {
    var feedResult = $(this);
    $('#' + settings.Id + ' .url').attr('href', function () {
        var rawRss = settings.Url;
        var name = /http:\/\/([^\/]+)\/.*/i;
        var result = name.exec(rawRss);
        return result != null ? ("http\://" + name.exec(rawRss)[1]) : "";
    } ());
    var createFeed = function (source) {
        var feed = new google.feeds.Feed(source);
        feed.setResultFormat(google.feeds.Feed.XML_FORMAT);
        feed.setNumEntries(20);
        feed.load(function (result) {
            var useRss = result.xmlDocument.getElementsByTagName('rss').length > 0;
            var useAtom = result.xmlDocument.getElementsByTagName('feed').length > 0;

            var getNodeText = function (xmlNode) {
                if (!xmlNode) return '';
                if (typeof (xmlNode.textContent) != "undefined") return xmlNode.textContent;
                if (typeof (xmlNode.text) != "undefined") return xmlNode.text;
                return xmlNode.firstChild.nodeValue;
            };

            var getValue = function (data, name) {
                var dataEl = data.getElementsByTagName(name);
                if (dataEl.length == 0) {
                    return "";
                }
                return getNodeText(dataEl[0]);
            };
            var getTitle = function () {
                return getValue(this.data, 'title');
            };
            var getLink = function () {
                var links = this.data.getElementsByTagName('link');
                if (links.length <= 0)
                    return "";
                if (links.length == 1 && (links[0].firstChild.attributes == 0 || links[0].firstChild.attributes == null))
                    return links.value;
                try {
                    for (var link in links) {
                        var attributes = links[link].attributes;
                        for (var attribute in attributes) {
                            if (attributes[attribute].name == 'rel' && attributes[attribute].value == 'alternate') {
                                for (var attr in attributes) {
                                    if (attributes[attr].name == 'href') {
                                        return attributes[attr].value;
                                    }
                                }
                            }
                        }
                    }
                }
                catch (e) {
                    return "";
                }
                return "";
            };
            var getContent = function () {
                var content = getValue(this.data, useRss ? 'description' : 'content');
                try {
                    var url = /href="(http|https|ftp)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/[^\"\s]*)?"/ig;
                    var result = content.replace(url, '$& target="_blank"');
                    return result;
                } catch (err) { }
                return content;
            };
            var formatDate = function () {
                var rawDate = this.data.getElementsByTagName('dc:date')[0];
                if (rawDate == null) {
                    rawDate = this.data.getElementsByTagName('date')[0];
                    if (rawDate == null)
                        return;
                }
                rawDate = rawDate.firstChild;
                var date = new Date(rawDate.data);

                if (isNaN(date))
                    return "";

                return date.format('mmmm dd') + " at " + date.format('hh:MMtt');
            };
            var entries = [];
            var rawEntries = null;
            var description = null;
            if (useAtom) {
                description = getValue(result.xmlDocument, 'subtitle');
            } else if (useRss) {
                description = getValue(result.xmlDocument, 'description');
            }
            if (!useRss && !useAtom) {
                $('#' + settings.Id).trigger('dtFeedLoad');
                return;
            }
            if (useAtom) {
                rawEntries = result.xmlDocument.getElementsByTagName('entry');
            } else {
                rawEntries = result.xmlDocument.getElementsByTagName('item');
            }
            for (var i = 0; i < rawEntries.length; i++) {
                entries.push(rawEntries[i]);
            }
            feedResult.html($('#blogger-template').tmpl(entries, { formatDate: formatDate, getContent: getContent, getLink: getLink, getTitle: getTitle }));
            if (description != null && description != '') {
                feedResult.prepend('<div class="description">' + description + "</div>");
            }
            $('#' + settings.Id).trigger('dtFeedLoad');
        });
    };
    createFeed(settings.Url);
};
/*------------bandcamp----------*/
$.fn.bandcamp = function (settings) {
    var bf = new BandcampFeed();
    bf.initTemplate('band-template', 'small-album-template', 'big-album-template', 'track-template');
    bf.initVisit(settings.Url, $('#' + settings.Id + ' .url'));
    var $feedResult = $('.feed-result', $('#' + settings.Id));
    bf.create(settings.FeedId, settings.Index, $feedResult);
    feedHelpers.manager.initMediaplayer('audio_mediaplayer', 1, 1);
};

$.fn.indexPage = function (settings, layout, mediaType, sliderMode, showSlider) {
    if (settings.Position > -1 && !sliderMode) {
        $('.' + layout + mediaType).relativePosition(settings.Position, null, $(".feeds-page"));
    }
    var posX = settings.IconsPositionX != null ? settings.IconsPositionX : 0;
    var posY = settings.IconsPositionY != null ? settings.IconsPositionY : 0;
    $(".owner .feeds-controls").relativePosition(posX, posY, $(".feeds-page"));
    var overlay = $('.feeds-overlay' + showSlider);
    var storage = $(this);
    var feedButtons = $('.feeds-controls .feed-tab');
    var flash = $('#animated-background');
    var overlayParent = $('.overlay-parent');
    var toggleCount = 0;
    var toggleAnimation = function (startAnimation) {
        if (flash.length > 0) {
            if (startAnimation) {
                flash[0].resumeFlashVideo();
                toggleCount = 0;
            } else if (toggleCount == 0) {
                flash[0].pauseFlashVideo();
                toggleCount++;
            }
        }
    };
    var getValue = function (obj, prop) {
        var result = null;
        try {
            result = obj[prop]();
        } catch (err) { }
        if (result == null) {
            try {
                result = obj.attr(prop);
            } catch (err) { }
        }
        if (result == 0 || result == null) {
            try {
                result = obj[0][prop];
            } catch (err) { }
        }
        return result;
    };
    var fixWidth = function (obj, width) {
        obj.each(function (index, value) {
            var val = $(value);
            try {
                val.css('top', '');
                val.css('left', '');
                val.css('right', '');
                val.css('bottom', '');
                var widthValue = getValue(val, 'width');
                if (widthValue > width) {
                    var heightValue = getValue(val, 'height');
                    val.attr('width', width);
                    val.attr('width', width).css('width', '');
                    var height = parseInt(width * heightValue / widthValue);
                    val.attr('height', height).css('height', '');
                    //val.parent().css('margin', '0');
                }
            } catch (err) { }
        });
    };

    var fixIframesHeight = function () {
        var iFrames = $("iframe.html-feed-content");

        function resize() {
            for (var i = 0, j = iFrames.length; i < j; i++) {
                var height = iFrames[i].contentWindow.document.body.offsetHeight + 70;
                $(iFrames[i]).height(height);
                $(iFrames[i]).parent().height(height);
            }
        }

        function resizeCommon(el) {
            var height = el.contentWindow.document.body.offsetHeight + 50;
            $(el).height(height);
            $(el).parent().height(height);
        }

        if ($.browser.safari || $.browser.opera || $.browser.msie) {
            iFrames.load(function () {
                setTimeout(resize, 0);
            });

            for (var i = 0, j = iFrames.length; i < j; i++) {
                var iSource = iFrames[i].src;
                iFrames[i].src = '';
                iFrames[i].src = iSource;
            }
        } else {
            iFrames.load(function () {
                resizeCommon(this);
            });
            iFrames.each(function (index, el) {
                resizeCommon(el);
            });

            setTimeout(function () {
                iFrames.each(function (index, el) {
                    resizeCommon(el);
                });
            }, 5000);
        }
    };

    var fixLocation = function (ref, val) {
        document.location.hash = val == null ? '/' : val;
    };


    if (!sliderMode) {
        var resizeHandler = function (e) {
            var wh = $('body').height();
            var feedResult = $('.overlay-parent .feed-result').first();
            var controlsHeight = $('.overlay-parent .pagination-controls').outerHeight(true);
            feedResult.css('height', '');
            var header = $('.overlay-parent .feed-header-owner');
            var headerHeight = header.outerHeight(true);
            var feedsHeight = feedResult.outerHeight(true);
            var paddingHeight = feedsHeight - feedResult.height();
            feedResult.css("min-height", wh - headerHeight - paddingHeight - controlsHeight);
        };

        // Slide overlays to the top of we scroll up
        $(window).scroll(function () {
            var scrollTop = $('html, body, .page').scrollTop();
            var overlayTop = parseInt(overlayParent.css('top'));

            if (scrollTop < overlayTop) {
                overlayParent.stop().animate({ top: scrollTop }, 500);
            }
        });

        var fixedWidthIndexes = [];
        for (var i = 0; i < $('.feeds').length; i++) { fixedWidthIndexes[i] = false; }
        var api = null;
        feedButtons.click(function (e) {
            var index = feedButtons.index(this);
            feedHelpers.manager.onFeedButtonClick(index);
            if ($('#rss-feed' + index, overlay).length > 0) {
                if (api != null)
                    api.close();
                return false;
            }
            if (api != null)
                api.close();
            var target = $(e.currentTarget);
            target.attr('checked', 'checked');
            overlay.prepend($('#rss-feed' + index));
            overlayParent.css("top", $('html, body, .page').scrollTop());

            api = $(this).overlay({
                fixed: false,
                mask: {
                    color: '#000',
                    loadSpeed: 200,
                    opacity: 0
                },
                left: overlay.css("left"),
                top: overlay.css("top"),
                api: true,
                target: overlay,
                load: false,
                onLoad: function () {
                    var feedResult = $('.feed-result, .compositefeed-result').first();
                    feedResult.css('height', '');
                    overlayParent.show();
                    if (!fixedWidthIndexes[index]) {
                        var width = feedResult.width();
                        setTimeout(function () { fixWidth($('img', overlay), width); }, 10);
                        setTimeout(function () { fixWidth($('iframe', overlay), width); }, 10);
                        setTimeout(function () { fixWidth($('embed', overlay), width); }, 10);
                        setTimeout(function () { fixWidth($('object', overlay), width); }, 10);
                        fixedWidthIndexes[index] = true;
                    }
                    fixLocation(target, target.attr('href'));
                    var close = $('.close', overlay);
                    close.html('X');
                    var closeClass = $('.feed', overlay).attr('id') + "close";
                    close.addClass(closeClass);
                    $('.close-bottom').addClass(closeClass);
                    $(window).bind('resize', resizeHandler);
                    $(window).resize();
                    fixIframesHeight();
                },
                onBeforeClose: function () {
                    overlayParent.hide();
                    var content = $('.feed', overlay);
                    var val = $.trim(content.html());
                    if (val != '' && val != null) {
                        $('.feed', overlay).appendTo(storage);
                    }
                    var button = $('.feeds[checked="checked"]', feedButtons.parent());
                    button.removeAttr('checked');
                    toggleAnimation(true);
                    api = null;
                    fixLocation(target);
                    $(window).unbind('resize', resizeHandler);
                },
                onClose: function () {
                    $(this).remove();
                    feedHelpers.manager.onFeedClose();
                },
                closeOnClick: false
            });
            toggleAnimation(false);
            api.load();
            $('.close-bottom').click(function () {
                api.close();
            });
        });
    } else {
        var feedsControls = $('.feeds-controls');
        var zoomOverlay = $('.zoom-overlay');
        if (feedButtons.length > 0) {
            var src = $(feedButtons[0]).css('background-image');
            var padding = $(feedButtons[0]).css('padding-left').replace('px', '');
            if (src && src != "" && src != "none") {
                var srcreg = /\(\"?(http\:\/\/.+.(png|jpg|gif))\"?\)/i;
                var img = $('<img />');
                img.one('load', function () {
                    var wim = img[0].width - 2 * padding;
                    var him = img[0].height - 2 * padding;
                    feedButtons.each(function (index, value) {
                        $(value).css('width', wim);
                        $(value).css('height', him);
                    });
                });
                img.attr('src', srcreg.exec(src)[1]);
            } else {
                var wim = 610 - 2 * padding;
                var him = 41 - 2 * padding;
                feedButtons.each(function (index, value) {
                    $(value).css('width', wim);
                    $(value).css('height', him);
                });
            }
        }
        $('.feed').bind('dtFeedLoad', function () {
            var model = $(this).parent('.feed-parent');
            $('.overlay', model).overlay({
                top: 10,
                mask: {
                    color: '#000',
                    loadSpeed: 200,
                    opacity: 0
                },
                closeOnClick: false
            });
        });
        var closeClick = function (event, feed) {
            toggleAnimation(true);
            feed.appendTo(storage);
            fixLocation($(event.currentTarget));
            event.preventDefault();
            feedHelpers.manager.onFeedClose();
        };
        feedButtons.click(function (event) {
            var target = $(event.currentTarget);
            var index = target.index('.feed-tab');
            feedHelpers.manager.onFeedButtonClick(index);
            overlay.hide();
            zoomOverlay.hide();
            var rss = $('#rss-feed' + index);
            $('.feeds[checked="checked"]', feedButtons.parent()).removeAttr('checked');
            var zoomplace = $('.zoomplace', zoomOverlay);
            var feed = $('.feed', overlay);
            if (zoomplace.length > 0) {
                $('.zoomowner', feed).append(zoomplace);
            }
            if ($('#rss-feed' + index, overlay).length > 0) {
                closeClick(event, feed);
                return;
            }
            toggleAnimation(false);
            feed.appendTo(storage);
            $(this).attr('checked', 'checked');
            $(this).after(overlay);
            var width = target.innerWidth() + overlay.width() - overlay.outerWidth();
            overlay.css('width', width);

            overlay.html(rss);
            setTimeout(function () { fixWidth($('img:not([class~="zoomplace"])', overlay), width); }, 10);
            setTimeout(function () { fixWidth($('iframe:not([class~="zoomplace"])', overlay), width); }, 10);
            setTimeout(function () { fixWidth($('embed:not([class~="zoomplace"])', overlay), width); }, 10);
            setTimeout(function () { fixWidth($('object:not([class~="zoomplace"])', overlay), width); }, 10);

            zoomplace = $('.zoomplace', overlay);
            if (zoomplace.length > 0) {
                $('.feed', zoomOverlay).html(zoomplace);
            }
            fixLocation(target, target.attr('href'));
            $('.close-bottom').one('click', function (event) {
                overlay.hide();
                closeClick(event, $('.feed', overlay));
            });

            fixIframesHeight();

            overlay.show();

        });
    }
    var loadedFeed = [];
    for (var i = 0; i < $('.feeds').length; i++) { loadedFeed[i] = false; }
    $('.feed').live('dtFeedLoad', function () {
        var model = $(this).parent('.feed-parent');
        var index = model.index('.feed-parent');
        loadedFeed[index] = true;
    });
    $('.feeds').live('dtShow', function () {
        var target = $(this);
        var index = target.index('a') - 1;
        if (loadedFeed[index]) {
            target.click();
        } else {
            $($('.feed', $('.rss-storage'))[index]).one('dtFeedLoad', function () {
                target.click();
            });
        }
    });
};

$.fn.defer = function () {
    var _ = $(this);
    $.each(_, function (index, value) {
        var val = $(value);
        val.load(val.attr('action'), function () {
            $(val.children()[0]).unwrap();
        });
    });
    if (document.location.hash) {
        var splits = document.location.hash.substring(1).split('/');
        var url = splits[0];
        try {
            $("#" + url, $(".feeds-controls")).trigger('dtShow');
        } catch (e) { }
    }
}
