//scriptaculous based slideshow
//copyright 2007, Doodle Walker, doodlewalker.com
//all rights reserved.
//used with permission.

var frame = 0;
var repeat = false;
var epoch = 0;
var prefix = "li_";
var delay = 10000;
var slides = [

"images/slides/image_0000.jpg",
"images/slides/image_0001.jpg",
"images/slides/image_0002.jpg",
"images/slides/image_0003.jpg",
"images/slides/image_0004.jpg",
"images/slides/image_0005.jpg",
"images/slides/image_0006.jpg",
"images/slides/image_0007.jpg",
"images/slides/image_0008.jpg",
"images/slides/image_0009.jpg",
"images/slides/image_0010.jpg",
"images/slides/image_0011.jpg",
"images/slides/image_0012.jpg",
"images/slides/image_0013.jpg",
"images/slides/image_0014.jpg",
"images/slides/image_0015.jpg",
"images/slides/image_0016.jpg",
"images/slides/image_0017.jpg",
"images/slides/image_0018.jpg",
"images/slides/image_0019.jpg",
"images/slides/image_0020.jpg",
"images/slides/image_0021.jpg",
"images/slides/image_0022.jpg",
"images/slides/image_0023.jpg",
"images/slides/image_0024.jpg",
"images/slides/image_0025.jpg",
"images/slides/image_0026.jpg",
"images/slides/image_0027.jpg",
"images/slides/image_0028.jpg",
"images/slides/image_0029.jpg",
"images/slides/image_0030.jpg",
"images/slides/image_0031.jpg",
"images/slides/image_0032.jpg",
"images/slides/image_0033.jpg",
"images/slides/image_0034.jpg",
"images/slides/image_0035.jpg",
"images/slides/image_0036.jpg",
"images/slides/image_0037.jpg",
"images/slides/image_0038.jpg",
"images/slides/image_0039.jpg",
  ];

  shuffle = function(o){
  	//fisher yates algorithm based shuffle
  	for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
  	return o;
  };
  // mix it up
  shuffle(slides);
  initSlideshow = function() {
    new Effect.Preload('slide', 5, {queue: 'front'}); //preload 6 frames
    slideshow();
  }
  slideshow = function() {

    var img = $('slide');


       if (frame < (slides.length-1)){
          frame++;
       }
       else {
         // reset
         frame = 0;
         // cleanup
         for(i=0;i < slides.length; i++) {
           Element.remove(prefix+i); // delete
         }
         // shuffle
         shuffle(slides);
        }
                        // go
                        new Effect.AddItem(img, frame, {fps: 60, queue: {position: 'front', scope: 'exchangescope'} });
                        new Effect.DropLeft(prefix+epoch, {fps: 60, queue: {position: 'end', scope: 'exchangescope'} });
                        // new Effect.Opacity(prefix+epoch, {fps: 60, from: 30.0, to: 0.0, queue: {position: 'front', scope: 'exchangescope'} });
                        // step
                        epoch++;
                
               window.setTimeout("slideshow()",delay+1000);//for the fades and a 2-second delay
  }
  Effect.Preload = function(element, preload)
  {
    frame = preload-1; //0-4
    //preload showw with 5 items
    for(i=0;i < preload;i++){
      new Effect.AddItem(element, i);

    }

  }
  Effect.DeleteLi = function(element) {
    element = $(element);
    Element.remove(element);
  };
  Effect.AddItem = function(element, frame) {
        var zindex_var = slides.length - frame;
        var id = prefix+frame;
        new Insertion.Bottom(element, '<li style="position: absolute; left: 0px; right: 0px; z-index: '+zindex_var+ '" id="'+id+'"><img src="'+slides[frame]+'" border="0" /></li>');
  };


  Effect.DropLeft = function(element) {
    element = $(element);
    distance = -1*($(element).getWidth()+500);
    var oldStyle = {
      top: element.getStyle('top'),
      left: element.getStyle('left'),
      opacity: element.getInlineOpacity() };
    return new Effect.Parallel(
      [ new Effect.Move(element, {fps: 60, x: distance, y: 0, sync: true }), 
        new Effect.Opacity(element, {fps: 60, sync: true, to: 0.0 }) ],
      Object.extend(
        { duration: 4.5,
          beforeSetup: function(effect) {
            effect.effects[0].element.makePositioned(); 
          },
          afterFinishInternal: function(effect) {
            effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
          } 
        }, arguments[1] || {}));
  }