/*
 * jQuery xFade 1.0
 * http://labs.firmanw.com/jquery-xfade
 * Copyright (c) 2011 Firman Wandayandi
 * Dual licensed under the MIT and GPL licenses.
 */
 
 /*
(function(c){var b=[];var a=[];c.fn.xfade=function(d){return this.each(function(e){a.push(c(this));b[e]={container:null,settings:{effect:"fade",speed:"normal",order:"sequence",timeout:2000,height:"auto",containerClass:false,children:false,onBefore:false},timeout:200,current:1,last:0,init:function(f,g){var j=this;j.container=f;if(g){c.extend(j.settings,g)}var k=j.items();if(k.length>1){c(j.container).css({position:"relative",height:j.settings.height});if(j.settings.containerClass){c(j.container).addClass(j.settings.containerClass)}for(var h=0;h<k.length;h++){c(k[h]).css("z-index",String(k.length-h)).css("position","absolute").hide()}if(j.settings.order=="sequence"){j.onBefore(0,null,c(k[0]),null,k);j.timeout=setTimeout(function(){j.next()},j.settings.timeout);c(k[j.last]).show()}else{if(j.settings.order=="random"){j.last=Math.floor(Math.random()*k.length);do{j.current=Math.floor(Math.random()*k.length)}while(j.last==j.current);j.onBefore(j.current,j.last,c(k[j.current]),c(k[j.last]),k);j.timeout=setTimeout(function(){j.next()},j.settings.timeout);c(k[j.current]).show()}else{if(j.settings.order=="random-start"){j.settings.order="sequence";j.current=Math.floor(Math.random()*k.length);j.onBefore(j.current,j.last,c(k[j.current]),c(k[j.last]),k);j.timeout=setTimeout(function(){j.next()},j.settings.timeout);c(k[j.current]).show()}else{alert("xfade:order must either be 'sequence', 'random' or 'random-start'")}}}}},items:function(){var f=this;if(f.settings.children){return c(f.container).children()}else{return c(f.container).children(f.settings.children)}},next:function(){var f=this;var g=f.items();f.onBefore(f.current,f.last,c(g[f.current]),c(g[f.last]),g);if(f.settings.effect=="slide"){c(g[f.last]).slideUp(f.settings.speed);c(g[f.current]).slideDown(f.settings.speed)}else{if(f.settings.effect=="fade"){c(g[f.last]).fadeOut(f.settings.speed);c(g[f.current]).fadeIn(f.settings.speed,function(){removeFilter(c(this)[0])})}else{alert("xfade:effect must either be 'slide' or 'fade'")}}if(f.settings.order=="sequence"){if((f.current+1)<g.length){f.current+=1;f.last=f.current-1}else{f.current=0;f.last=g.length-1}}else{if(f.settings.order=="random"){f.last=f.current;while(f.current==f.last){f.current=Math.floor(Math.random()*g.length)}}else{alert("xfade:order must either be 'sequence', 'random' or 'random-start'")}}f.timeout=setTimeout((function(){f.next(g)}),f.settings.timeout)},to:function(f){var g=this;if(typeof(f)=="object"&&f.jquery){if(f.length==0){return false}c.each(g.items(),function(h){if(c(this)[0]==f[0]){f=h}})}c.each(g.items(),function(){if(c(this).css("display")!="none"){c(this).fadeOut()}});clearTimeout(g.timeout);g.current=f;g.next()},refresh:function(){var f=this;var g=f.items();c.each(g,function(h){c(this).css({"z-index":String(g.length-h),position:"absolute"});if(h!=f.last){c(this).css({display:"none"})}})},onBefore:function(k,i,f,g,j){var h=this;if(typeof(h.settings.onBefore)=="function"){h.settings.onBefore(k,i,f,g,j)}}};b[e].init(this,d)})};c.xfadeInstance=function(d){var e=0;do{if(c(a[e]).get(0)==c(d).get(0)){return b[e]}e++}while(e<a.length-1);return false};c.fn.xfadeNext=function(){var d=c.xfadeInstance(this);if(d){d.next()}};c.fn.xfadeTo=function(e){var d=c.xfadeInstance(this);if(d){d.to(e)}};c.fn.xfadeRefresh=function(e){var d=c.xfadeInstance(this);if(d){d.refresh(e)}}})(jQuery);function removeFilter(a){if(a.style.removeAttribute){a.style.removeAttribute("filter")}};
*/

/*
* jQuery xFade 1.0
* http://labs.firmanw.com/jquery-xfade
*
* Copyright (c) 2011 Firman Wandayandi
* Dual licensed under the MIT and GPL licenses.
*
* Based on jQuery InnerFade by Torsten Baldes http://medienfreunde.com/lab/innerfade/
*
* Available options:
* effect: Animation effect. Can be set to 'fade' or 'slide'. (Default: 'fade'),
* speed: Transition speed in milliseconds or keywords 'slow', 'normal' or 'fast'. (Default: 'normal'),
* timeout: Delay between transitions in milliseconds (Default: '2000'),
* order: Items order. Can be set to 'sequence', 'random' or 'random-start'. (Default: 'sequence'),
* height: Container height. (Default: 'auto'),
* containerClass: CSS class to added into container. (Default: false),
* children: jQuery children selector (Default: false)
* onBefore: Callback that fires right before the transition. It receives the following arguments:
* current item index, last item index, current item, last item and items. (Default: false)
*/

(function($) {

    var xfade = [];
    var $xfadeContainers = [];

    $.fn.xfade = function(options) {
        return this.each(function(i) {
            $xfadeContainers.push($(this));

            xfade[i] = {
                container: null,
                settings: {
                    'effect': 'fade',
                    'speed': 'normal',
                    'order': 'sequence',
                    'timeout': 2000,
                    'height': 'auto',
                    'containerClass': false,
                    'children': false,
                    'onBefore': false
                },
                timeout: 200,
                current: 1,
                last: 0,
                init: function(container, options) {
                    var me = this;
                    me.container = container;

                    if (options) $.extend(me.settings, options);

                    var elements = me.items();

                    if (elements.length > 1) {
                        $(me.container).css({position: 'relative', height: me.settings.height});
                        if (me.settings.containerClass) $(me.container).addClass(me.settings.containerClass);

                        for (var i = 0; i < elements.length; i++) {
                            $(elements[i]).css('z-index', String(elements.length-i)).css('position', 'absolute').hide();
                        };

                        if (me.settings.order == 'sequence') {
                            me.onBefore(0, null, $(elements[0]), null, elements);
                            /*me.timeout = setTimeout(function() {
                                me.next();
                            }, me.settings.timeout);
                            */
                            setTimeout(function() {me.timeout = setTimeout(function() {
                                me.next();
                            }, me.settings.timeout);}, 1200); //MI 20110430 setto tempodi attesa prima di far partire le transizioni

                            $(elements[me.last]).show();
                        } else if (me.settings.order == 'random') {
                            //me.last = Math.floor (Math.random() * elements.length);
                            
                            me.last = Math.floor (Math.random() * (elements.length -1)); //MI 20110713 faccio in modo che non venga preso ultimo elemento con la scritta
                           
                            do {
                                //me.current = Math.floor (Math.random() * elements.length);
                                me.current = Math.floor (Math.random() * (elements.length-1)); //MI 20110713 faccio in modo che non venga preso ultimo elemento con la scritta
                            } while (me.last == me.current );
                            me.onBefore(me.current, me.last, $(elements[me.current]), $(elements[me.last]), elements);
                     
                            setTimeout(function() {me.timeout = setTimeout(function() {
                                me.next();
                            }, me.settings.timeout);}, 1200); //MI 20110430 setto tempodi attesa prima di far partire le transizioni

                            //$(elements[me.current]).show();
                            $(elements[0]).show(); //MI 20110430 visualizzo al primo giro la prima immagie (grigia)
                            
                        } else if (me.settings.order == 'random-start') {
                            me.settings.order = 'sequence';
                            me.current = Math.floor (Math.random() * elements.length);

                            me.onBefore(me.current, me.last, $(elements[me.current]), $(elements[me.last]), elements);
                            me.timeout = setTimeout(function(){
                                me.next();
                            }, me.settings.timeout);
                            $(elements[me.current]).show();
                        } else {
                            alert('xfade:order must either be \'sequence\', \'random\' or \'random-start\'');
                        }
                    }
                },
                items: function() {
                    var me = this;
                    if (me.settings.children) return $(me.container).children();
                    else return $(me.container).children(me.settings.children);
                },
                next: function() {
                    var me = this;
                    var elements = me.items();
                    
                    me.onBefore(me.current, me.last, $(elements[me.current]), $(elements[me.last]), elements);

                    if (me.settings.effect == 'slide') {
                        $(elements[me.last]).slideUp(me.settings.speed);
                        $(elements[me.current]).slideDown(me.settings.speed);
                    } else if (me.settings.effect == 'fade') {
                        $(elements[me.last]).fadeOut(me.settings.speed);
                        $(elements[me.current]).fadeIn(me.settings.speed, function() {
                            removeFilter($(this)[0]);
                        });
                    } else
                        alert('xfade:effect must either be \'slide\' or \'fade\'');

                    if (me.settings.order == 'sequence') {
                        //if ((me.current + 1) < elements.length) {  
												if ((me.current + 1) < elements.length -1) { //MarcoI non visualizzo l'ultimo elmento
                            me.current += 1;
                            me.last = me.current - 1;
                        } else {
                            me.current = 0;
                            me.last = elements.length - 1;
                        }
                    } else if (me.settings.order == 'random') {
                        me.last = me.current;
                        //while (me.current == me.last) me.current = Math.floor(Math.random() * elements.length); 
                        while (me.current == me.last) me.current = Math.floor(Math.random() * (elements.length-1)); //MI 20110713 faccio in modo che non venga preso ultimo elemento con la scritta
                    } else {
                        alert('xfade:order must either be \'sequence\', \'random\' or \'random-start\'');
                    }

                    me.timeout = setTimeout((function() {
                        me.next(elements);
                    }), me.settings.timeout);
                },
                to: function(element) {
                    var me = this;

                    if (typeof(element) == 'object' && element.jquery) {
                        if (element.length == 0) return false;

                        $.each(me.items(), function(i) {
                            if ($(this)[0] == element[0]) element = i;
                        });
                    }

                    $.each(me.items(), function() {
                        if ($(this).css('display') != 'none') $(this).fadeOut();
                    })

                    clearTimeout(me.timeout);
                    me.current = element;
                    me.next();
                },
                refresh: function() {
                    var me = this;
                    var elements = me.items();

                    $.each(elements, function(i) {
                        $(this).css({'z-index': String(elements.length - i), 'position': 'absolute'});
                        if (i != me.last) $(this).css({'display': 'none'});
                    });
                },
                onBefore: function(current, last, e_current, e_last, elements) {
                    var me = this;
										 
                    if (typeof(me.settings.onBefore) == 'function') me.settings.onBefore(current, last, e_current, e_last, elements);
                }
            };

            xfade[i].init(this, options);

        });
    };

    $.xfadeInstance = function(container) {
        var i = 0;

        do {
          if ($($xfadeContainers[i]).get(0) == $(container).get(0)) return xfade[i];
          i++;
        } while (i < $xfadeContainers.length )
        
        return false;
    };

    $.fn.xfadeNext = function() {
      var xfade = $.xfadeInstance(this);
      if (xfade) xfade.next();
    };

    $.fn.xfadeTo = function(item) {
        var xfade = $.xfadeInstance(this);
        if (xfade) xfade.to(item);
    };

    $.fn.xfadeRefresh = function(item) {
        var xfade = $.xfadeInstance(this);
        if (xfade) xfade.refresh(item);
    };

})(jQuery);

// **** remove Opacity-Filter in ie ****
function removeFilter(element) {
    if(element.style.removeAttribute){
        element.style.removeAttribute('filter');
    }
}
