(function(){
var $ = document.id;
var slideTimer = null;
this.SlideShow = new Class({
    
    firstSlide: 0,  
    lastSlide:  3,  
    currentSlide: null,  
    timerOn: 1,  
    nav: true,

	initialize: function(container, slides, timing, howmany, nav) {
	       this.lastSlide = howmany ? howmany - 1 : this.lastSlide;
	    this.timing = timing || 5000; 
	    var slides = slides || '.slide'; 
	    this.nav = (nav !== null) ? nav : this.nav; 
	    this.container = container ? $(container) : $('slideshow'); 
		this.slides = this.container.getElements(slides);
		this.currentSlide = 0;
		this.prepareSlideShow(); 
	}, 
	
    prepareSlideShow: function() {
        var lex = this;
        this.slides.setStyle('z-index', 100); 
        this.slides.fade('hide'); 
        this.slides[0].fade('show'); 
        
        
        //Slideshow Nav
        var slideshowNav = $('slideshow-nav'); 
        if(slideshowNav) {
            slideshowNav.getElements('a').addEvent('click', function(e) {
                e.stop(); 
                if(slideTimer){
                    clearTimeout(slideTimer);
                }
                //Not sure if this will work, but it might. 
                var selectedSlide = this.get('id'); 
                lex.getSlide(selectedSlide); 
            }); 
        }
        
        //Previous Button
        var previous = $('previous'); 
        if(previous) {
            previous.addEvent('click', function(e){
                e.stop(); 
                if(slideTimer){
                    clearTimeout(slideTimer);
                }
               lex.previousSlide();    
            });
        }
        
        //Next Button
        var next = $('next'); 
        if(next) {
            next.addEvent('click', function(e){
                e.stop(); 
                this.timerOn = 0;
                if(slideTimer){
                    clearTimeout(slideTimer);
                }
                lex.nextSlide(true);    
            });
        }
    
      //Rinse and Repeat...  
      var nextBind = function(){this.nextSlide()}.bind(this); 
      var time = this.timing; 
      setTimeout(nextBind, time);  
    }, 
    
    nextSlide: function(stop) {
        var lex = this;
       // Hide current picture
       
       var slide = this.slides[this.currentSlide];
       slide.fade(0); 
       slide.setStyle('z-index', 100); 
       
       // Show next picture, if last, loop back to front
       if (this.currentSlide == this.lastSlide) { 
            this.currentSlide = 0; 
       }
       else { 
            this.currentSlide++;
       }
       
       //Reset the new slide and switch indicators
       slide = this.slides[this.currentSlide];
       slide.setStyle('z-index', 101); 
       
        //var slideshowNav = $('slideshow-nav'); 
        if(this.nav) {
           $('slideshow-nav').getElements('a').removeClass('selected'); 
           $(this.currentSlide + '').set('class', 'selected'); 
       }
        //fade in new slide 
        slide.fade(1)
        
        //Rinse & Repeat unless user has clicked next slide
        if(!stop) {
           if(this.timerOn == 1) {
                var nextBind = function(){
                    this.nextSlide()
                }.bind(this); 
               var time = this.timing; 
               slideTimer = setTimeout(nextBind, time); 
           }
        }
   },

   previousSlide: function() {
       // Hide current picture
       var slide = this.slides[this.currentSlide];
       slide.fade(0);
       
        if (this.currentSlide == this.firstSlide) { 
            this.currentSlide = this.lastSlide; 
        }
        else { 
            this.currentSlide--; 
        }
        
       slide = this.slides[this.currentSlide];
       
        var slideshowNav = $('slideshow-nav'); 
        if(slideshowNav) {
            $('slideshow-nav').getElements('a').removeClass('selected'); 
            $(this.currentSlide + '').set('class', 'selected'); 
        }
       slide.fade(1); 
   },

   getSlide: function(requestedSlide) {
        //Fade out current Slide
       var slide = this.slides[this.currentSlide];
       slide.fade(0);
       
       //Find selected slide
       slide = this.slides[requestedSlide];
       this.currentSlide = requestedSlide; 
       
        var slideshowNav = $('slideshow-nav'); 
        if(slideshowNav) {
            $('slideshow-nav').getElements('a').removeClass('selected'); 
            $(requestedSlide + '').set('class', 'selected'); 
        }
       slide.fade(1); 
   }
}); 
})();
