/*

 *  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

        };

    });

}
