/*
*  faded 0.3.1 - jQuery plugin
*  written by Nathan Searles   
*  http://nathansearles.com/faded/
*
*  Copyright (c) 2009 Nathan Searles (http://nathansearles.com/)
*  Dual licensed under the MIT (MIT-LICENSE.txt)
*  and GPL (GPL-LICENSE.txt) licenses.
*
*  Built for jQuery library
*  http://jquery.com
*  Compatible with jQuery 1.3.2+
*
*/
if (typeof jQuery != "undefined") {
    jQuery(function ($) {
        $.fn.extend({
            faded: function (options) {
                var settings = $.extend({}, $.fn.faded.defaults, options);
                return this.each(
                    function () {
                        if ($.fn.jquery < "1.3.1") { return; }
                        var $t = $(this);
                        var $c = $t.children(":nth-child(1)");
                        var o = $.metadata ? $.extend({}, settings, $t.metadata()) : settings;
                        var total = $c.children().size();
                        var next = 0, prev = 0, number = 0, currentitem = 0, restart = 0, restartinterval = 0;
                        var loaded, active, imgSrc, clicked, current;
                        if (o.random) {
                            $.fn.reorder = function (callback) {
                                function randOrd() { return (Math.round(Math.random()) - 0.5); }
                                return ($(this).each(function () {
                                    var $this = $(this);
                                    var $children = $this.children();
                                    var childCount = $children.length;
                                    if (childCount > 1) {
                                        $children.hide();
                                        var indices = new Array();
                                        for (i = 0; i < childCount; i++) { indices[indices.length] = i; }
                                        indices = indices.sort(randOrd);
                                        $.each(indices, function (j, k) {
                                            var $child = $children.eq(k);
                                            var $clone = $child.clone(true);
                                            $clone.show().appendTo($this);
                                            if (callback !== undefined) {
                                                callback($child, $clone);
                                            }
                                            $child.remove();
                                        });
                                    }
                                }));
                            };
                            $c.reorder();
                        }
                        function pause() {
                            clearInterval(autoplay);
                            clearTimeout(restart);
                            restart = setTimeout(function () {
                                autoplay = setInterval(function () {
                                    animate("next");
                                }, o.autoplay);
                            }, o.autorestart);
                        }
                        $c.css({ position: "relative" });
                        $c.children().css({
                            position: "absolute",
                            top: 0,
                            left: 0,
                            zIndex: 0,
                            display: "none"
                        });
                        if (o.autoheight) {
                            $c.animate({ height: $c.children(":eq(0)").outerHeight() }, o.autoheight);
                        }
                        if (o.pagination) {
                            if (o.autopagination) {
                                $t.append("<ul class=" + o.pagination + "></ul>");
                                $c.children().each(function () {
                                    $("." + o.pagination + "", $t).append("<li><a rel=" + number + " href=\"#\" >" + (number + 1) + "</a></li>");
                                    number++;
                                });
                            }
                            $("." + o.pagination + " li a:eq(0)", $t).parent().addClass("current");
                            $("." + o.pagination + " li a", $t).click(function () {
                                current = $("." + o.pagination + " li.current a", $t).attr("rel");
                                clicked = $(this).attr("rel");
                                if (current != clicked) { animate("pagination", clicked, current); }
                                if (o.autoplay) { pause(); }
                                return false;
                            });
                        }
                        if (o.sequentialloading && $c.children()[0].tagName == "IMG") {
                            $c.css({ background: "url(" + o.loadingimg + ") no-repeat 50% 50%" });
                            imgSrc = $("img:eq(0)", $c).attr("src");
                            $("img:eq(0)", $c).attr("src", imgSrc).load(function () {
                                $(this).fadeIn(o.speed, function () {
                                    loaded = true;
                                });
                            });
                        } else {
                            $c.find(":eq(0)").fadeIn(o.speed, function () {
                                loaded = true;
                            });
                        }
                        if (o.bigtarget) {
                            $c.css({ "cursor": "pointer" });
                            $c.click(function () {
                                animate("next");
                                if (o.autoplay) {
                                    if (o.autorestart) {
                                        pause();
                                    } else {
                                        clearInterval(autoplay);
                                    }
                                }
                                return false;
                            });
                        }
                        if (o.autoplay) {
                            autoplay = setInterval(function () {
                                animate("next");
                            }, o.autoplay);
                            pause();
                        }
                        $("." + o.nextbtn, $t).click(function () {
                            animate("next");
                            if (o.autoplay) {
                                if (o.autorestart) {
                                    pause();
                                } else {
                                    clearInterval(autoplay);
                                }
                            }
                            return false;
                        });
                        $("." + o.prevbtn, $t).click(function () {
                            animate("prev");
                            if (o.autoplay) {
                                if (o.autorestart) {
                                    pause();
                                } else {
                                    clearInterval(autoplay);
                                }
                            }
                            return false;
                        });
                        function animate(dir, clicked, current) {
                            if (!active && loaded) {
                                active = true;
                                switch (dir) {
                                    case "next":
                                        prev = next;
                                        next = currentitem * 1 + 1;
                                        if (total === next) { next = 0; }
                                        break;
                                    case "prev":
                                        prev = next;
                                        next = currentitem * 1 - 1;
                                        if (next === -1) { next = total - 1; }
                                        break;
                                    case "pagination":
                                        next = clicked;
                                        prev = current;
                                        break;
                                }
                                if (o.pagination) {
                                    $(".pagination li.current", $t).removeClass("current");
                                    $(".pagination li a:eq(" + next + ")", $t).parent().addClass("current");
                                }
                                if (o.crossfade) {
                                    $c.children(":eq(" + next + ")").css({ zIndex: 10 }).fadeIn(o.speed, function () {
                                        $c.children(":eq(" + prev + ")").css({ display: "none", zIndex: 0 });
                                        $(this).css({ zIndex: 0 });
                                        currentitem = next;
                                        active = false;
                                    });
                                } else {
                                    $c.children(":eq(" + prev + ")").fadeOut(o.speed, function () {
                                        if (o.autoheight) {
                                            $c.animate({ height: $c.children(":eq(" + next + ")").outerHeight() }, o.autoheight, function () {
                                                $c.children(":eq(" + next + ")").fadeIn(o.speed);
                                            });
                                        } else {
                                            $c.children(":eq(" + next + ")").fadeIn(o.speed);
                                        }
                                        currentitem = next;
                                        active = false;
                                    });
                                }
                            }
                        }
                    }
                );
            }
        });
        $.fn.faded.defaults = {
            speed: 300,
            crossfade: false,
            bigtarget: false,
            sequentialloading: false,
            autoheight: false,
            pagination: "pagination",
            autopagination: true,
            nextbtn: "next",
            prevbtn: "prev",
            loadingimg: false,
            autoplay: false,
            autorestart: false,
            random: false
        };
    });
}
