/**
* $Date: 2009-08-27 13:32:21 +0200 (Thu, 27 Aug 2009) $
* $Author: olov.nilzen $
* $Revision: 622 $
**/

jQuery.fn.mediaView = function(settings) {

    var settings = jQuery.extend({
        auto_play: false,
        fade_speed: 2000,
        interval: 7000,
        panel_selector: ".panel",
        navigator_selector: ".navigator",
        next_selector: ".next",
        prev_selector: ".prev",
        active_class: "active",
        nav_thumb_selector: null,
        hide_prev: false,
        hide_next: false,
        onpreinit: null,
        oninit: null,
        onnavitemrendered: null,
        onnavitemprerender: null,
        onpanelprechange: null,
        onpanelchanged: null
    }, settings);

    this.each(function() {

        var m = this;
        var c = 0;
        var t = $(settings.panel_selector, this).length;
        var inv;

        if (typeof settings.onpreinit == 'function') settings.onpreinit($(settings.navigator_selector, m));

        $(settings.panel_selector, this).each(function(i, item) {

            if (typeof settings.onnavitemprerender == 'function') settings.onnavitemprerender(item);

            var n = $("<a />")
                .attr("href", "#")
                .attr("rel", i)
                .click(function() {
                    showPanel(this.rel);
                    return false;
                });

            if (settings.nav_thumb_selector == null)
                n.text(i + 1);
            else
                n.append($(settings.nav_thumb_selector, this).clone());

            $(settings.next_selector, m)
                .before($("<li />").append(n));

            if (typeof settings.onnavitemrendered == 'function') settings.onnavitemrendered(item, n);

            if (i > 0) $(item).hide();
        });

        $(m).mouseover(function() {
            clearInterval(inv);
        }).mouseout(function() {
            setupAutoplay();
        });

        $(settings.navigator_selector + " li a", m).eq(1).addClass(settings.active_class);

        if (settings.hide_next) $(settings.next_selector, m).hide();
        if (settings.hide_prev) $(settings.prev_selector, m).hide();

        $(settings.next_selector + " a", m).click(function() {
            var n = c + 1;
            if (n == t) n = 0;
            showPanel(n);
            return false;
        });

        $(settings.prev_selector + " a", m).click(function() {
            var n = c - 1;
            if (n < 0) n = t - 1;
            showPanel(n);
            return false;
        });

        if (typeof settings.oninit == 'function') settings.oninit(m, $(settings.navigator_selector, m).eq(0), $(settings.panel_selector, m).eq(c));

        var setupAutoplay = function() {

            if (settings.auto_play == false)
                return;

            inv = setInterval(function() {
                $(settings.next_selector + " a", m).trigger("click");
            }, settings.interval);
        };

        var showPanel = function(p) {

            p = parseInt(p);
            if (p == c) return;

            var current = $(settings.panel_selector, m).eq(c);
            var next = $(settings.panel_selector, m).eq(p);
            if (typeof settings.onpanelprechange == 'function') settings.onpanelprechange(current, next, m);

            next.fadeIn(settings.fade_speed);
            current.fadeOut(settings.fade_speed, function() {
                if (typeof settings.onpanelchanged == 'function') settings.onpanelchanged(next, current, m);
            });

            $(settings.navigator_selector + " li a[rel=" + p + "]", m).addClass(settings.active_class);
            $(settings.navigator_selector + " li a[rel=" + c + "]", m).removeClass(settings.active_class);

            c = p;
        };

        setupAutoplay();
    });
}