/*

 * 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: "fade",

        slices: 15,

        animSpeed: 1000,

        pauseTime: 3E3,

        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);
