(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(),
	            //Q = "400px"
                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);
