    var SlideShow = Class.create();
    SlideShow.prototype = {
      initialize: function(mod_instance,timeout,effect) {

          this.timeout = timeout;
          this.mod_instance = mod_instance;
          this.i = 0;
          this.effect = effect;
      },
      fade: function(){

          Effect.Fade($('slide'+this.mod_instance+'_'+(this.i+1)), {queue:{scope:'scope'+this.mod_instance, position:'end'},duration:2, from:1.0, to:0.0, delay:2.0,beforeStart:function(){this.appear()}.bind(this)});
      },
      appear: function(){
        this.i++;

        if (!$('slide'+this.mod_instance+'_'+(this.i+1))) this.i = 0;

        switch(this.effect){
         case 'appear':
            Effect.Appear($('slide'+this.mod_instance+'_'+(this.i+1)), {queue:{scope:'scope'+this.mod_instance, position:'end'},duration:2, from:0.0, to:1.0, delay:2.0,afterFinish:function(){this.fade()}.bind(this)});
            break;
         case 'grow':
            Effect.Grow($('slide'+this.mod_instance+'_'+(this.i+1)), {queue:{scope:'scope'+this.mod_instance, position:'end'},duration:2, from:0.0, to:1.0, delay:0.0,afterFinish:function(){this.fade()}.bind(this)});
            break;
         case 'puff':
            Effect.Puff($('slide'+this.mod_instance+'_'+(this.i+1)), {queue:{scope:'scope'+this.mod_instance, position:'end'},duration:2, delay:0.0,afterFinish:function(){this.fade()}.bind(this)});
            break;
        }


      },
      start: function(){
          var thisObj = this;
          //setTimeout(function() { thisObj.fade(); }, this.timeout);
          setTimeout(function() { thisObj.new_start(); }, this.timeout);

      }
     ,new_start: function(){


                switch(this.effect){
                 case 'appear':

                    k = this.i;
                    this.i++;
                    if (!$('slide'+this.mod_instance+'_'+(this.i+1))) this.i = 0;

                    new Effect.Parallel(
                        [
                            Effect.Fade($('slide'+this.mod_instance+'_'+(k+1)), {queue:{scope:'scope'+this.mod_instance, position:'end'}, sync: true, from:1.0, to:0.0}),
                            Effect.Appear($('slide'+this.mod_instance+'_'+(this.i+1)), {queue:{scope:'scope'+this.mod_instance, position:'end'}, sync: true, from:0.0, to:1.0})
                        ],
                        {duration: 3,delay:1.0,afterFinish:function(){this.new_start()}.bind(this)}
                    );


                    break;
                 case 'grow':
                    k = this.i;
                    this.i++;
                    if (!$('slide'+this.mod_instance+'_'+(this.i+1))) this.i = 0;

                    /*new Effect.Parallel(
                        [

                            Effect.Fade($('slide'+this.mod_instance+'_'+(k+1)), {queue:{scope:'scope'+this.mod_instance, position:'end'}, sync: true, from:1.0, to:0.0}),
                            Effect.Grow($('slide'+this.mod_instance+'_'+(this.i+1)), {queue:{scope:'scope'+this.mod_instance, position:'end'}, sync: true,from:0.0, to:1.0})

                        ],
                        {duration: 5,delay:4.0,afterFinish:function(){this.new_start()}.bind(this)}
                    );*/

                    new Effect.Parallel(
                        [
                            Effect.Fade($('slide'+this.mod_instance+'_'+(k+1)), {queue:{scope:'scope'+this.mod_instance, position:'end'}, sync: true, from:1.0, to:0.0}),
                            Effect.Appear($('slide'+this.mod_instance+'_'+(this.i+1)), {queue:{scope:'scope'+this.mod_instance, position:'end'}, sync: true, from:0.0, to:1.0})
                        ],
                        {duration: 2,delay:2.0,afterFinish:function(){this.new_start()}.bind(this)}
                    );

                    break;
                 case 'puff':

                    k = this.i;
                    this.i++;
                    if (!$('slide'+this.mod_instance+'_'+(this.i+1))) this.i = 0;


         /*Effect.Puff($('slide'+this.mod_instance+'_'+(k+1)), {queue:{scope:'scope'+this.mod_instance, position:'end'},delay:4.0, duration: 4, direction:'bottom-right', from:0.5, to:1.0}),
         Effect.Appear($('slide'+this.mod_instance+'_'+(this.i+1)), {queue:{scope:'scope'+this.mod_instance, position:'end'}, delay:3.0, from:0.0, to:1.0,afterFinish:function(){this.new_start()}.bind(this)})
           */
                    new Effect.Parallel(
                        [
                            Effect.Fade($('slide'+this.mod_instance+'_'+(k+1)), {queue:{scope:'scope'+this.mod_instance, position:'end'}, sync: true, from:1.0, to:0.0}),
                            Effect.Appear($('slide'+this.mod_instance+'_'+(this.i+1)), {queue:{scope:'scope'+this.mod_instance, position:'end'}, sync: true, from:0.0, to:1.0})
                        ],
                        {duration: 2,delay:2.0,afterFinish:function(){this.new_start()}.bind(this)}
                    );


                    break;
                }

      }

    }