/*
 * 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">Prev</a><a class="nivo-nextNav">Next</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: "fold",
        slices: 15,
        animSpeed: 500,
        pauseTime: 5E3,
        startSlide: 0,
        directionNav: true,
        directionNavHide: true,
        controlNav: true,
        controlNavThumbs: false,
        controlNavThumbsFromRel: false,
        controlNavThumbsSearch: ".jpg",
        controlNavThumbsReplace: "_thumb.jpg",
        keyboardNav: true,
        pauseOnHover: true,
        manualAdvance: false,
        //captionOpacity: 0.8,
        beforeChange: function () {},
        afterChange: function () {},
        slideshowEnd: function () {},
        lastSlide: function () {},
        afterLoad: function () {}
    };
    a.fn._reverse = [].reverse
})(jQuery);
