(function($) {
    $.fn.contentSwitcher = function(settings) {
        settings = $.extend({
    }, settings);

    var matches = this;

    function _initialize() {
        if (matches.length <= 0)
            return;

        matches.connector = $('<div class="connector"></div>')
        $('#wrapper').prepend(matches.connector);
        matches.currentTarget = null;
        matches.each(function(index, el) {
            var jEl = $(el);
            var href = jEl.attr('href');
            var target = null;
            if (href.length > 0 && href.charAt(0) == '#') {
                var targetId = href.substring(1);
                var targets = $('a#' + targetId + '+.container, a[name=' + targetId + ']+.container');
                if (targets.length > 0) {
                    target = targets.get(0);
                    jEl.data('target', target);
                    if (null == matches.currentTarget) {
                        matches.currentTarget = target;
                        var container = jEl.parents('.container');
                        // fixes position change when dnn control panel is collapsed/expanded
                        $('#dnn_IconBar\\.ascx_imgVisibility').click(function() {
                                matches.connector.css({ top: Math.floor(container.offset().top) + Math.floor(container.height()) - 10 });
                            });
                        matches.connector.css({ top: Math.floor(container.offset().top) + Math.floor(container.height()) - 10, left: jEl.position().left + Math.floor(jEl.width() / 2) - 17 });
                    }
                    else {
                        $(target).hide();
                    }
                }
            }
            if (null != target) {
                var self = this;
                jEl.click(function() {
                    $(matches.currentTarget).hide();
                    var tgt = jEl.data('target');
                    $(tgt).show();
                    matches.currentTarget = tgt;
                    matches.connector.stop().animate({ left: jEl.position().left + (jEl.width() / 2) - 17 });
                    return false;
                });
            }
        });
        if (null == matches.currentTarget) {
            matches.connector.remove();
        }
    }

    _initialize();
    return this;
}
})(jQuery);