/*

 * Slides, A Slideshow Plugin for jQuery

 * Intructions: http://slidesjs.com

 * By: Nathan Searles, http://nathansearles.com

 * Version: 1.1.8

 * Updated: June 1st, 2011

 *

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 * http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */

(function (A) {

    A.fn.slides = function (B) {

        B = A.extend({}, A.fn.slides.option, B);

        return this.each(function () {

            A("." + B.container, A(this)).children().wrapAll('<div class="slides_control"/>');

            var V = A(this),

                J = A(".slides_control", V),

                Z = J.children().size(),

                Q = J.children().outerWidth(),

                M = J.children().outerHeight(),

                D = B.start - 1,

                L = B.effect.indexOf(",") < 0 ? B.effect : B.effect.replace(" ", "").split(",")[0],

                S = B.effect.indexOf(",") < 0 ? L : B.effect.replace(" ", "").split(",")[1],

                O = 0,

                N = 0,

                C = 0,

                P = 0,

                U, H, I, X, W, T, K, F;



            function E(c, b, a) {

                if (!H && U) {

                    H = true;

                    B.animationStart(P + 1);

                    switch (c) {

                    case "next":

                        N = P;

                        O = P + 1;

                        O = Z === O ? 0 : O;

                        X = Q * 2;

                        c = -Q * 2;

                        P = O;

                        break;

                    case "prev":

                        N = P;

                        O = P - 1;

                        O = O === -1 ? Z - 1 : O;

                        X = 0;

                        c = 0;

                        P = O;

                        break;

                    case "pagination":

                        O = parseInt(a, 10);

                        N = A("." + B.paginationClass + " li." + B.currentClass + " a", V).attr("href").match("[^#/]+$");

                        if (O > N) {

                            X = Q * 2;

                            c = -Q * 2;

                        } else {

                            X = 0;

                            c = 0;

                        }

                        P = O;

                        break;

                    }

                    if (b === "fade") {

                        if (B.crossfade) {

                            J.children(":eq(" + O + ")", V).css({

                                zIndex: 10

                            }).fadeIn(B.fadeSpeed, B.fadeEasing, function () {

                                if (B.autoHeight) {

                                    J.animate({

                                        height: J.children(":eq(" + O + ")", V).outerHeight()

                                    }, B.autoHeightSpeed, function () {

                                        J.children(":eq(" + N + ")", V).css({

                                            display: "none",

                                            zIndex: 0

                                        });

                                        J.children(":eq(" + O + ")", V).css({

                                            zIndex: 0

                                        });

                                        B.animationComplete(O + 1);

                                        H = false;

                                    });

                                } else {

                                    J.children(":eq(" + N + ")", V).css({

                                        display: "none",

                                        zIndex: 0

                                    });

                                    J.children(":eq(" + O + ")", V).css({

                                        zIndex: 0

                                    });

                                    B.animationComplete(O + 1);

                                    H = false;

                                }

                            });

                        } else {

                            J.children(":eq(" + N + ")", V).fadeOut(B.fadeSpeed, B.fadeEasing, function () {

                                if (B.autoHeight) {

                                    J.animate({

                                        height: J.children(":eq(" + O + ")", V).outerHeight()

                                    }, B.autoHeightSpeed, function () {

                                        J.children(":eq(" + O + ")", V).fadeIn(B.fadeSpeed, B.fadeEasing);

                                    });

                                } else {

                                    J.children(":eq(" + O + ")", V).fadeIn(B.fadeSpeed, B.fadeEasing, function () {

                                        if (A.browser.msie) {

                                            A(this).get(0).style.removeAttribute("filter");

                                        }

                                    });

                                }

                                B.animationComplete(O + 1);

                                H = false;

                            });

                        }

                    } else {

                        J.children(":eq(" + O + ")").css({

                            left: X,

                            display: "block"

                        });

                        if (B.autoHeight) {

                            J.animate({

                                left: c,

                                height: J.children(":eq(" + O + ")").outerHeight()

                            }, B.slideSpeed, B.slideEasing, function () {

                                J.css({

                                    left: -Q

                                });

                                J.children(":eq(" + O + ")").css({

                                    left: Q,

                                    zIndex: 5

                                });

                                J.children(":eq(" + N + ")").css({

                                    left: Q,

                                    display: "none",

                                    zIndex: 0

                                });

                                B.animationComplete(O + 1);

                                H = false;

                            });

                        } else {

                            J.animate({

                                left: c

                            }, B.slideSpeed, B.slideEasing, function () {

                                J.css({

                                    left: -Q

                                });

                                J.children(":eq(" + O + ")").css({

                                    left: Q,

                                    zIndex: 5

                                });

                                J.children(":eq(" + N + ")").css({

                                    left: Q,

                                    display: "none",

                                    zIndex: 0

                                });

                                B.animationComplete(O + 1);

                                H = false;

                            });

                        }

                    }

                    if (B.pagination) {

                        A("." + B.paginationClass + " li." + B.currentClass, V).removeClass(B.currentClass);

                        A("." + B.paginationClass + " li:eq(" + O + ")", V).addClass(B.currentClass);

                    }

                }

            }

            function R() {

                clearInterval(V.data("interval"));

            }

            function G() {

                if (B.pause) {

                    clearTimeout(V.data("pause"));

                    clearInterval(V.data("interval"));

                    K = setTimeout(function () {

                        clearTimeout(V.data("pause"));

                        F = setInterval(function () {

                            E("next", L);

                        }, B.play);

                        V.data("interval", F);

                    }, B.pause);

                    V.data("pause", K);

                } else {

                    R();

                }

            }

            if (Z < 2) {

                return;

            }

            if (D < 0) {

                D = 0;

            }

            if (D > Z) {

                D = Z - 1;

            }

            if (B.start) {

                P = D;

            }

            if (B.randomize) {

                J.randomize();

            }

            A("." + B.container, V).css({

                overflow: "hidden",

                position: "relative"

            });

            J.children().css({

                position: "absolute",

                top: 0,

                left: J.children().outerWidth(),

                zIndex: 0,

                display: "none"

            });

            J.css({

                position: "relative",

                width: (Q * 3),

                height: M,

                left: -Q

            });

            A("." + B.container, V).css({

                display: "block"

            });

            if (B.autoHeight) {

                J.children().css({

                    height: "auto"

                });

                J.animate({

                    height: J.children(":eq(" + D + ")").outerHeight()

                }, B.autoHeightSpeed);

            }

            if (B.preload && J.find("img:eq(" + D + ")").length) {

                A("." + B.container, V).css({

                    background: "url(" + B.preloadImage + ") no-repeat 50% 50%"

                });

                var Y = J.find("img:eq(" + D + ")").attr("src") + "?" + (new Date()).getTime();

                if (A("img", V).parent().attr("class") != "slides_control") {

                    T = J.children(":eq(0)")[0].tagName.toLowerCase();

                } else {

                    T = J.find("img:eq(" + D + ")");

                }

                J.find("img:eq(" + D + ")").attr("src", Y).load(function () {

                    J.find(T + ":eq(" + D + ")").fadeIn(B.fadeSpeed, B.fadeEasing, function () {

                        A(this).css({

                            zIndex: 5

                        });

                        A("." + B.container, V).css({

                            background: ""

                        });

                        U = true;

                        B.slidesLoaded();

                    });

                });

            } else {

                J.children(":eq(" + D + ")").fadeIn(B.fadeSpeed, B.fadeEasing, function () {

                    U = true;

                    B.slidesLoaded();

                });

            }

            if (B.bigTarget) {

                J.children().css({

                    cursor: "pointer"

                });

                J.children().click(function () {

                    E("next", L);

                    return false;

                });

            }

            if (B.hoverPause && B.play) {

                J.bind("mouseover", function () {

                    R();

                });

                J.bind("mouseleave", function () {

                    G();

                });

            }

            if (B.generateNextPrev) {

                A("." + B.container, V).after('<a href="#" class="' + B.prev + '">Prev</a>');

                A("." + B.prev, V).after('<a href="#" class="' + B.next + '">Next</a>');

            }

            A("." + B.next, V).click(function (a) {

                a.preventDefault();

                if (B.play) {

                    G();

                }

                E("next", L);

            });

            A("." + B.prev, V).click(function (a) {

                a.preventDefault();

                if (B.play) {

                    G();

                }

                E("prev", L);

            });

            if (B.generatePagination) {

                if (B.prependPagination) {

                    V.prepend("<ul class=" + B.paginationClass + "></ul>");

                } else {

                    V.append("<ul class=" + B.paginationClass + "></ul>");

                }

                J.children().each(function () {

                    A("." + B.paginationClass, V).append('<li><a href="#' + C + '">' + (C + 1) + "</a></li>");

                    C++;

                });

            } else {

                A("." + B.paginationClass + " li a", V).each(function () {

                    A(this).attr("href", "#" + C);

                    C++;

                });

            }

            A("." + B.paginationClass + " li:eq(" + D + ")", V).addClass(B.currentClass);

            A("." + B.paginationClass + " li a", V).click(function () {

                if (B.play) {

                    G();

                }

                I = A(this).attr("href").match("[^#/]+$");

                if (P != I) {

                    E("pagination", S, I);

                }

                return false;

            });

            A("a.link", V).click(function () {

                if (B.play) {

                    G();

                }

                I = A(this).attr("href").match("[^#/]+$") - 1;

                if (P != I) {

                    E("pagination", S, I);

                }

                return false;

            });

            if (B.play) {

                F = setInterval(function () {

                    E("next", L);

                }, B.play);

                V.data("interval", F);

            }

        });

    };

    A.fn.slides.option = {

        preload: false,

        preloadImage: "/img/loading.gif",

        container: "slides_container",

        generateNextPrev: false,

        next: "next",

        prev: "prev",

        pagination: true,

        generatePagination: true,

        prependPagination: false,

        paginationClass: "pagination",

        currentClass: "current",

        fadeSpeed: 350,

        fadeEasing: "",

        slideSpeed: 350,

        slideEasing: "",

        start: 1,

        effect: "slide",

        crossfade: false,

        randomize: false,

        play: 0,

        pause: 0,

        hoverPause: false,

        autoHeight: false,

        autoHeightSpeed: 350,

        bigTarget: false,

        animationStart: function () {},

        animationComplete: function () {},

        slidesLoaded: function () {}

    };

    A.fn.randomize = function (C) {

        function B() {

            return (Math.round(Math.random()) - 0.5);

        }

        return (A(this).each(function () {

            var F = A(this);

            var E = F.children();

            var D = E.length;

            if (D > 1) {

                E.hide();

                var G = [];

                for (i = 0; i < D; i++) {

                    G[G.length] = i;

                }

                G = G.sort(B);

                A.each(G, function (I, H) {

                    var K = E.eq(H);

                    var J = K.clone(true);

                    J.show().appendTo(F);

                    if (C !== undefined) {

                        C(K, J);

                    }

                    K.remove();

                });

            }

        }));

    };

})(jQuery);
