/*
 *	faded 0.3.2 - jQuery plugin
 *	written by Nathan Searles
 *	http://nathansearles.com/faded/
 *
 *	Copyright (c) 2010 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.loading&&$c.children()[0].tagName=="IMG") {
                            $c.css({
                                background:"url("+o.loadingimg+") no-repeat 50% 50%"
                                });
                            imgSrc = $("img:eq(0)",$c).attr("src") + "?" + (new Date()).getTime();
                            $("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,
            loading: false,
            autoheight: false,
            pagination: "pagination",
            autopagination: true,
            nextbtn: "next",
            prevbtn: "prev",
            loadingimg: false,
            autoplay: false,
            autorestart: false,
            random: false
        };
    });
}
