var ival, tout;

(function($){
    $.fn.shuffle = function() {
        return this.each(function(){
            var items = $(this).children();
            return (items.length)
            ? $(this).html($.shuffle(items))
            : this;
        });
    };
    
    $.shuffle = function(arr) {
        for(
            var j, x, i = arr.length; i;
            j = parseInt(Math.random() * i),
            x = arr[--i], arr[i] = arr[j], arr[j] = x
        );
        return arr;
    };
})(jQuery);


(function($){
    $.fn.shufflefade = function() {
        
        var options = $.extend($.fn.shufflefade.defaults, $.fn.shufflefade.options);
        var con = $.fn.shufflefade.container = $(this);
        
        var wids = $.fn.shufflefade.widgets = $.shuffle(con.find('.widget').not('.noslide'));
        
        if (options.widgets.length > 0) {
            //preload and insert widgets
            options.widgets = $.shuffle(options.widgets);
            var links = [];
            var imgs = [];
            var divide = ( $.fn.shufflefade.widgets.length - ( $.fn.shufflefade.widgets.length % options.widgets.length ) ) / options.widgets.length ;
            $.each(options.widgets, function(i, w) {
                links.push(w[0]);
                imgs.push(w[1]);
            });
            var x = - divide;
            var index = 0;
            $.cacheImage(imgs, {
                load : function (e) {
                    var first = x < 0 ? true : false;
                    x = (x + divide) < wids.length ? (x + divide) : 0 ;
                    
                    var im = $.create('img', {'src': $(this).attr('src'), 'alt': ''});
                    $.create('a', {'href': links[index], 'style': 'z-index:0'}, [im]).appendTo($(wids[x]));
                    //$.fn.shufflefade.initCycle(x);
                    index++;
                    if (first === true) {
                        $.fn.shufflefade.timedInit(0);
                    }
                }
            });
        } else {
            $.fn.shufflefade.timedInit(0);
        }
    };
    
    $.fn.shufflefade.timedInit = function(i) {
        var options = $.extend($.fn.shufflefade.defaults, $.fn.shufflefade.options);
        var w = $.fn.shufflefade.widgets;
        $.fn.shufflefade.initCycle(w[i]);
        i++;
        if (i < w.length) {
            window.setTimeout("$.fn.shufflefade.timedInit("+i+")", options.wait);
        }
    }
    
    $.fn.shufflefade.initCycle = function(widget) {
        if (widget) {
            var options = $.extend($.fn.shufflefade.defaults, $.fn.shufflefade.options);
            $(widget).cycle({
                fx: options.fx,
                timeout: options.timeout,
                speed: options.speed,
                delay: options.first,
                pause: 1,
                pager: options.pager,
                pauseOnPagerHover: true,
                before: options.before,
                after: options.after
            });
        }
    };
    
    $.fn.shufflefade.defaults = { 
        fx: 'fade', // transition to use
        timeout: 8000, // time between fades,
        first: -4800,
        speed: 920, // transition speed
        wait: 3854, // time to wait before initialising the next widget
        widgets: [],
        pager: null,
        before: null,
        after: null
    };
    
    $.fn.shufflefade.container = null;
    $.fn.shufflefade.widgets = null;
    
})(jQuery);

