﻿/* Copyright (c) 2008 Kean Loong Tan http://www.gimiti.com/kltan
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* jFlow
* Version: 1.1 (May 22, 2008)
* Requires: jQuery 1.2+
*/
(function(A) {
    A.fn.jFlow = function(D) {
        var E = A.extend({}, A.fn.jFlow.defaults, D);
        var F = 0;
        var B = A(E.parent + " .jFlowControl").length;
        var P = A(E.parent + " " + E.pageControl + " .pages ul");                        // The page control
        if (B == 0) {
            A(E.parent).css("display", "none"); // hide the parent, if there is nothing to display
            return;
        }
        E.slides = E.parent + " " + E.slides;

        P.html("");
        for (var i = 0; i < B; i++) {
            $("<li>&#8226;</li>").appendTo(P);
        }

        A(E.slides).find(".jFlowControl").each(function(G) {
            A(this).click(function() {
                A(E.parent + " .jFlowControl").removeClass("jFlowSelected");
                A(this).addClass("jFlowSelected");
                var H = Math.abs(F - G);
                A(E.slides).animate(
                    { marginLeft: "-" + (G * A(E.slides).find(":first-child").width() + "px") },
                    E.duration * (H)); F = G
            })
        });
        A(E.slides).before('<div class="jFlowSlide"></div>').appendTo(E.parent + " .jFlowSlide");
        A(E.slides).find("div" + E.item).each(function() {
            A(this).before('<div class="jFlowSlideContainer"></div>').appendTo(A(this).prev())
        });
        A(E.parent + " " + E.pageControl + " li").eq(F).addClass("selected");
        A(E.parent + " .jFlowControl").eq(F).addClass("jFlowSelected");
        var C = function(G) {
            A(E.parent + " .jFlowSlide").css({
                position: "relative",
                width: E.width,
                height: E.height,
                overflow: "hidden"
            });
            A(E.slides).css({
                position: "relative",
                width: A(E.parent + " .jFlowSlide").width() * A(E.parent + " .jFlowControl").length + "px",
                height: A(E.parent + " .jFlowSlide").height() + "px",
                overflow: "hidden"
            });
            A(E.slides).children().css({
                position: "relative",
                width: A(E.parent + " .jFlowSlide").width() + "px",
                height: A(E.parent + " .jFlowSlide").height() + "px",
                "float": "left"
            });
            A(E.slides).css({
                marginLeft: "-" + (F * A(E.slides).find(":first-child").width() + "px")
            })
        };
        C();
        A(window).resize(function() { C() });
        A(E.parent + " .jFlowPrev").click(function() {
            if (F > 0) { F-- } else { F = B - 1 }
            A(E.parent + " .jFlowControl").removeClass("jFlowSelected");
            A(E.pageControl + " li").removeClass("selected");

            A(E.slides).animate({ marginLeft: "-" + (F * A(E.slides).find(":first-child").width() + "px") }, E.duration);

            A(E.pageControl + " li").eq(F).addClass("selected");
            A(E.parent + " .jFlowControl").eq(F).addClass("jFlowSelected")
        });
        A(E.parent + " .jFlowNext").click(function() {
            if (F < B - 1) { F++ } else { F = 0 }
            A(E.parent + " .jFlowControl").removeClass("jFlowSelected");
            A(E.pageControl + " li").removeClass("selected");

            A(E.slides).animate({ marginLeft: "-" + (F * A(E.slides).find(":first-child").width() + "px") }, E.duration);

            A(E.pageControl + " li").eq(F).addClass("selected");
            A(E.parent + " .jFlowControl").eq(F).addClass("jFlowSelected")
        });

        var mouseIsOver = false;
        A(E.parent).hover(function() {
            mouseIsOver = true;
        }, function() {
            mouseIsOver = false;
        });

        var handler = function() {
            if (mouseIsOver) return;
            if (F < B - 1) { F++; } else { F = 0; }
            A(E.parent + " .jFlowControl").removeClass("jFlowSelected");
            A(E.pageControl + " li").removeClass("selected");

            A(E.slides).animate({ marginLeft: "-" + (F * A(E.slides).find(":first-child").width() + "px") }, E.duration);

            A(E.pageControl + " li").eq(F).addClass("selected");
            A(E.parent + " .jFlowControl").eq(F).addClass("jFlowSelected")
        }
        if (E.autoplay == "true") {
            setInterval(handler, E.interval * 1000);
        }
    };
    A.fn.jFlow.defaults = { easing: "swing", duration: 400, width: "100%", item: "imgItem" }
})(jQuery);
