/*
 * jQuery Nivo Slider v2.4
 * http://nivo.dev7studios.com
 *
 * Copyright 2011, Gilbert Pellegrom
 * Free to use and abuse under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 */

(function (a) {
    var A = function (s, v) {
            var f = a.extend({}, a.fn.nivoSlider.defaults, v),
                g = {
                    currentSlide: 0,
                    currentImage: "",
                    totalSlides: 0,
                    randAnim: "",
                    running: false,
                    paused: false,
                    stop: false
                },
                e = a(s);
            e.data("nivo:vars", g);
            e.css("position", "relative");
            e.addClass("nivoSlider");
            var j = e.children();
            j.each(function () {
                var b = a(this),
                    h = "";
                if (!b.is("img")) {
                    if (b.is("a")) {
                        b.addClass("nivo-imageLink");
                        h = b
                    }
                    b = b.find("img:first")
                }
                var c = b.width();
                if (c == 0) c = b.attr("width");
                var o = b.height();
                if (o == 0) o = b.attr("height");
                c > e.width() && e.width(c);
                o > e.height() && e.height(o);
                h != "" && h.css("display", "none");
                b.css("display", "none");
                g.totalSlides++
            });
            if (f.startSlide > 0) {
                if (f.startSlide >= g.totalSlides) f.startSlide = g.totalSlides - 1;
                g.currentSlide = f.startSlide
            }
            g.currentImage = a(j[g.currentSlide]).is("img") ? a(j[g.currentSlide]) : a(j[g.currentSlide]).find("img:first");
            a(j[g.currentSlide]).is("a") && a(j[g.currentSlide]).css("display", "block");
            e.css("background", 'url("' + g.currentImage.attr("src") + '") no-repeat');
            for (var k = 0; k < f.slices; k++) {
                var p = Math.round(e.width() / f.slices);
                k == f.slices - 1 ? e.append(a('<div class="nivo-slice"></div>').css({
                    left: p * k + "px",
                    width: e.width() - p * k + "px"
                })) : e.append(a('<div class="nivo-slice"></div>').css({
                    left: p * k + "px",
                    width: p + "px"
                }))
            }
            e.append(a('<div class="nivo-caption"><p></p></div>').css({
                display: "none",
                opacity: f.captionOpacity
            }));
            if (g.currentImage.attr("title") != "") {
                k = g.currentImage.attr("title");
                if (k.substr(0, 1) == "#") k = a(k).html();
                a(".nivo-caption p", e).html(k);
                a(".nivo-caption", e).fadeIn(f.animSpeed)
            }
            var l = 0;
            if (!f.manualAdvance && j.length > 1) l = setInterval(function () {
                r(e, j, f, false)
            }, f.pauseTime);
            if (f.directionNav) {
                e.append('<div class="nivo-directionNav"><a class="nivo-prevNav">Zurück</a><a class="nivo-nextNav">Weiter</a></div>');
                if (f.directionNavHide) {
                    a(".nivo-directionNav", e).hide();
                    e.hover(function () {
                        a(".nivo-directionNav", e).show()
                    }, function () {
                        a(".nivo-directionNav", e).hide()
                    })
                }
                a("a.nivo-prevNav", e).live("click", function () {
                    if (g.running) return false;
                    clearInterval(l);
                    l = "";
                    g.currentSlide -= 2;
                    r(e, j, f, "prev")
                });
                a("a.nivo-nextNav", e).live("click", function () {
                    if (g.running) return false;
                    clearInterval(l);
                    l = "";
                    r(e, j, f, "next")
                })
            }
            if (f.controlNav) {
                p = a('<div class="nivo-controlNav"></div>');
                e.append(p);
                for (k = 0; k < j.length; k++) if (f.controlNavThumbs) {
                    var t = j.eq(k);
                    t.is("img") || (t = t.find("img:first"));
                    f.controlNavThumbsFromRel ? p.append('<a class="nivo-control" rel="' + k + '"><img src="' + t.attr("rel") + '" alt="" /></a>') : p.append('<a class="nivo-control" rel="' + k + '"><img src="' + t.attr("src").replace(f.controlNavThumbsSearch, f.controlNavThumbsReplace) + '" alt="" /></a>')
                } else p.append('<a class="nivo-control" rel="' + k + '">' + (k + 1) + "</a>");
                a(".nivo-controlNav a:eq(" + g.currentSlide + ")", e).addClass("active");
                a(".nivo-controlNav a", e).live("click", function () {
                    if (g.running) return false;
                    if (a(this).hasClass("active")) return false;
                    clearInterval(l);
                    l = "";
                    e.css("background", 'url("' + g.currentImage.attr("src") + '") no-repeat');
                    g.currentSlide = a(this).attr("rel") - 1;
                    r(e, j, f, "control")
                })
            }
            f.keyboardNav && a(window).keypress(function (b) {
                if (b.keyCode == "37") {
                    if (g.running) return false;
                    clearInterval(l);
                    l = "";
                    g.currentSlide -= 2;
                    r(e, j, f, "prev")
                }
                if (b.keyCode == "39") {
                    if (g.running) return false;
                    clearInterval(l);
                    l = "";
                    r(e, j, f, "next")
                }
            });
            f.pauseOnHover && e.hover(function () {
                g.paused = true;
                clearInterval(l);
                l = ""
            }, function () {
                g.paused = false;
                if (l == "" && !f.manualAdvance) l = setInterval(function () {
                    r(e, j, f, false)
                }, f.pauseTime)
            });
            e.bind("nivo:animFinished", function () {
                g.running = false;
                a(j).each(function () {
                    a(this).is("a") && a(this).css("display", "none")
                });
                a(j[g.currentSlide]).is("a") && a(j[g.currentSlide]).css("display", "block");
                if (l == "" && !g.paused && !f.manualAdvance) l = setInterval(function () {
                    r(e, j, f, false)
                }, f.pauseTime);
                f.afterChange.call(this)
            });
            var w = function (b, h) {
                    var c = 0;
                    a(".nivo-slice", b).each(function () {
                        var o = a(this),
                            d = Math.round(b.width() / h.slices);
                        c == h.slices - 1 ? o.css("width", b.width() - d * c + "px") : o.css("width", d + "px");
                        c++
                    })
                },
                r = function (b, h, c, o) {
                    var d = b.data("nivo:vars");
                    d && d.currentSlide == d.totalSlides - 1 && c.lastSlide.call(this);
                    if ((!d || d.stop) && !o) return false;
                    c.beforeChange.call(this);
                    if (o) {
                        o == "prev" && b.css("background", 'url("' + d.currentImage.attr("src") + '") no-repeat');
                        o == "next" && b.css("background", 'url("' + d.currentImage.attr("src") + '") no-repeat')
                    } else b.css("background", 'url("' + d.currentImage.attr("src") + '") no-repeat');
                    d.currentSlide++;
                    if (d.currentSlide == d.totalSlides) {
                        d.currentSlide = 0;
                        c.slideshowEnd.call(this)
                    }
                    if (d.currentSlide < 0) d.currentSlide = d.totalSlides - 1;
                    d.currentImage = a(h[d.currentSlide]).is("img") ? a(h[d.currentSlide]) : a(h[d.currentSlide]).find("img:first");
                    if (c.controlNav) {
                        a(".nivo-controlNav a", b).removeClass("active");
                        a(".nivo-controlNav a:eq(" + d.currentSlide + ")", b).addClass("active")
                    }
                    if (d.currentImage.attr("title") != "") {
                        var u = d.currentImage.attr("title");
                        if (u.substr(0, 1) == "#") u = a(u).html();
                        a(".nivo-caption", b).css("display") == "block" ? a(".nivo-caption p", b).fadeOut(c.animSpeed, function () {
                            a(this).html(u);
                            a(this).fadeIn(c.animSpeed)
                        }) : a(".nivo-caption p", b).html(u);
                        a(".nivo-caption", b).fadeIn(c.animSpeed)
                    } else a(".nivo-caption", b).fadeOut(c.animSpeed);
                    var m = 0;
                    a(".nivo-slice", b).each(function () {
                        var i = Math.round(b.width() / c.slices);
                        a(this).css({
                            height: "0px",
                            opacity: "0",
                            background: 'url("' + d.currentImage.attr("src") + '") no-repeat -' + (i + m * i - i) + "px 0%"
                        });
                        m++
                    });
                    if (c.effect == "random") {
                        h = ["sliceDownRight", "sliceDownLeft", "sliceUpRight", "sliceUpLeft", "sliceUpDown", "sliceUpDownLeft", "fold", "fade", "slideInRight", "slideInLeft"];
                        d.randAnim = h[Math.floor(Math.random() * (h.length + 1))];
                        if (d.randAnim == undefined) d.randAnim = "fade"
                    }
                    if (c.effect.indexOf(",") != -1) {
                        h = c.effect.split(",");
                        d.randAnim = h[Math.floor(Math.random() * h.length)];
                        if (d.randAnim == undefined) d.randAnim = "fade"
                    }
                    d.running = true;
                    if (c.effect == "sliceDown" || c.effect == "sliceDownRight" || d.randAnim == "sliceDownRight" || c.effect == "sliceDownLeft" || d.randAnim == "sliceDownLeft") {
                        var n = 0;
                        m = 0;
                        w(b, c);
                        h = a(".nivo-slice", b);
                        if (c.effect == "sliceDownLeft" || d.randAnim == "sliceDownLeft") h = a(".nivo-slice", b)._reverse();
                        h.each(function () {
                            var i = a(this);
                            i.css({
                                top: "0px"
                            });
                            m == c.slices - 1 ? setTimeout(function () {
                                i.animate({
                                    height: "100%",
                                    opacity: "1.0"
                                }, c.animSpeed, "", function () {
                                    b.trigger("nivo:animFinished")
                                })
                            }, 100 + n) : setTimeout(function () {
                                i.animate({
                                    height: "100%",
                                    opacity: "1.0"
                                }, c.animSpeed)
                            }, 100 + n);
                            n += 50;
                            m++
                        })
                    } else if (c.effect == "sliceUp" || c.effect == "sliceUpRight" || d.randAnim == "sliceUpRight" || c.effect == "sliceUpLeft" || d.randAnim == "sliceUpLeft") {
                        m = n = 0;
                        w(b, c);
                        h = a(".nivo-slice", b);
                        if (c.effect == "sliceUpLeft" || d.randAnim == "sliceUpLeft") h = a(".nivo-slice", b)._reverse();
                        h.each(function () {
                            var i = a(this);
                            i.css({
                                bottom: "0px"
                            });
                            m == c.slices - 1 ? setTimeout(function () {
                                i.animate({
                                    height: "100%",
                                    opacity: "1.0"
                                }, c.animSpeed, "", function () {
                                    b.trigger("nivo:animFinished")
                                })
                            }, 100 + n) : setTimeout(function () {
                                i.animate({
                                    height: "100%",
                                    opacity: "1.0"
                                }, c.animSpeed)
                            }, 100 + n);
                            n += 50;
                            m++
                        })
                    } else if (c.effect == "sliceUpDown" || c.effect == "sliceUpDownRight" || d.randAnim == "sliceUpDown" || c.effect == "sliceUpDownLeft" || d.randAnim == "sliceUpDownLeft") {
                        var x = m = n = 0;
                        w(b, c);
                        h = a(".nivo-slice", b);
                        if (c.effect == "sliceUpDownLeft" || d.randAnim == "sliceUpDownLeft") h = a(".nivo-slice", b)._reverse();
                        h.each(function () {
                            var i = a(this);
                            if (m == 0) {
                                i.css("top", "0px");
                                m++
                            } else {
                                i.css("bottom", "0px");
                                m = 0
                            }
                            x == c.slices - 1 ? setTimeout(function () {
                                i.animate({
                                    height: "100%",
                                    opacity: "1.0"
                                }, c.animSpeed, "", function () {
                                    b.trigger("nivo:animFinished")
                                })
                            }, 100 + n) : setTimeout(function () {
                                i.animate({
                                    height: "100%",
                                    opacity: "1.0"
                                }, c.animSpeed)
                            }, 100 + n);
                            n += 50;
                            x++
                        })
                    } else if (c.effect == "fold" || d.randAnim == "fold") {
                        m = n = 0;
                        w(b, c);
                        a(".nivo-slice", b).each(function () {
                            var i = a(this),
                                y = i.width();
                            i.css({
                                top: "0px",
                                height: "100%",
                                width: "0px"
                            });
                            m == c.slices - 1 ? setTimeout(function () {
                                i.animate({
                                    width: y,
                                    opacity: "1.0"
                                }, c.animSpeed, "", function () {
                                    b.trigger("nivo:animFinished")
                                })
                            }, 100 + n) : setTimeout(function () {
                                i.animate({
                                    width: y,
                                    opacity: "1.0"
                                }, c.animSpeed)
                            }, 100 + n);
                            n += 50;
                            m++
                        })
                    } else if (c.effect == "fade" || d.randAnim == "fade") {
                        var q = a(".nivo-slice:first", b);
                        q.css({
                            height: "100%",
                            width: b.width() + "px"
                        });
                        q.animate({
                            opacity: "1.0"
                        }, c.animSpeed * 2, "", function () {
                            b.trigger("nivo:animFinished")
                        })
                    } else if (c.effect == "slideInRight" || d.randAnim == "slideInRight") {
                        q = a(".nivo-slice:first", b);
                        q.css({
                            height: "100%",
                            width: "0px",
                            opacity: "1"
                        });
                        q.animate({
                            width: b.width() + "px"
                        }, c.animSpeed * 2, "", function () {
                            b.trigger("nivo:animFinished")
                        })
                    } else if (c.effect == "slideInLeft" || d.randAnim == "slideInLeft") {
                        q = a(".nivo-slice:first", b);
                        q.css({
                            height: "100%",
                            width: "0px",
                            opacity: "1",
                            left: "",
                            right: "0px"
                        });
                        q.animate({
                            width: b.width() + "px"
                        }, c.animSpeed * 2, "", function () {
                            q.css({
                                left: "0px",
                                right: ""
                            });
                            b.trigger("nivo:animFinished")
                        })
                    }
                },
                z = function (b) {
                    this.console && typeof console.log != "undefined" && console.log(b)
                };
            this.stop = function () {
                if (!a(s).data("nivo:vars").stop) {
                    a(s).data("nivo:vars").stop = true;
                    z("Stop Slider")
                }
            };
            this.start = function () {
                if (a(s).data("nivo:vars").stop) {
                    a(s).data("nivo:vars").stop = false;
                    z("Start Slider")
                }
            };
            f.afterLoad.call(this)
        };
    a.fn.nivoSlider = function (s) {
        return this.each(function () {
            var v = a(this);
            if (!v.data("nivoslider")) {
                var f = new A(this, s);
                v.data("nivoslider", f)
            }
        })
    };
    a.fn.nivoSlider.defaults = {
        effect: "random",
        slices: 15,
        animSpeed: 500,
        pauseTime: 3E3,
        startSlide: 0,
        directionNav: true,
        directionNavHide: false,
        controlNav: true,
        controlNavThumbs: false,
        controlNavThumbsFromRel: false,
        controlNavThumbsSearch: ".jpg",
        controlNavThumbsReplace: "_thumb.jpg",
        keyboardNav: true,
        pauseOnHover: true,
        manualAdvance: false,
        captionOpacity: 1, // 0.8,
        beforeChange: function () {},
        afterChange: function () {},
        slideshowEnd: function () {},
        lastSlide: function () {},
        afterLoad: function () {}
    };
    a.fn._reverse = [].reverse
})(jQuery);
