window.addEvent('domready', function() {

  var teaserSlideshow = new Slideshow({containerElement: $('teaser_slides')});
  // var newsTicker = new Ticker({containerElement: $('newsticker')});
  
});

/*
var Ticker = new Class({


  Implements: [Options, Events],


  options: {
    containerElement: null,
    intervalTime: 50,
    pixelsPerInterval: 1,
  },


  initialize: function(options) {
    
    this.setOptions(options);
    this.listElement    = this.options.containerElement.getFirst('ul');
    this.previousSlide  = null;
    this.currentSlide   = null;
    this.nextSlide      = null;

    var move = function() {
      var currentLeft = this.listElement.getStyle('left').toInt();
      this.listElement.setStyle('left', (currentLeft - this.options.pixelsPerInterval) + 'px');
    }
    move.periodical(this.options.intervalTime, this);
    
  },



  log: function(x) {
  
    if (typeof(console) !== 'undefined' && console != null) {
        console.log(x);
    }
  
  }
  
  
});
*/


var Slideshow = new Class({


  Implements: [Options, Events],


  options: {
    containerElement: null,
    slideUrl: 'images/photo_home_',
    totalSlides: 13,
    fadeDuration: 1500,
    waitTime: 2000
  },


  initialize: function(options) {
    
    this.setOptions(options);

    this.previousSlide  = null;
    this.currentSlide   = null;
    this.nextSlide      = null;

    this.loadNextSlide();
    
  },


  loadNextSlide: function() {
    
    if(this.currentSlide == null) {
      this.nextSlide = Number.random(1, this.options.totalSlides);
    } else {
      this.nextSlide = (this.currentSlide >= this.options.totalSlides) ? 1 : this.currentSlide + 1;
    }
    var nextSlideImageUrl = this.options.slideUrl + String.from(this.nextSlide).pad(2, '0', 'left') + '.jpg';
    var self = this;
    var image = Asset.image(nextSlideImageUrl, {
      id: 'slide_' + this.nextSlide,
      onLoad: function(imageElement) {
        self.options.containerElement.grab(imageElement);
        self.fadeToNextSlide();
      }
    });
    
  },


  fadeToNextSlide: function() {

    var self = this;
    var fade1 = new Fx.Tween($('slide_' + this.nextSlide), {
      duration: this.options.fadeDuration,
      transition: 'linear',
      property: 'opacity',
      'onComplete' : function() {

        self.previousSlide = self.currentSlide;
        self.currentSlide = self.nextSlide;
        if(self.previousSlide != null) {
          $('slide_' + self.previousSlide).destroy();
        }



        var currentLiElement = $('newsticker').getElement('li[class="current"]');
        if(currentLiElement == null) {
          var nextLiElement = $('newsticker').getFirst('ul').getFirst('li');
        } else {
          var nextLiElement = currentLiElement.getNext();
          if(nextLiElement == null) {
            nextLiElement = currentLiElement.getParent().getFirst();
          }
        }
        var myFunction = function() {
          self.crossFade(currentLiElement, nextLiElement);
        };
        myFunction.delay(self.options.waitTime);
        




      }
    });

    fade1.start(1);
    
  },






	crossFade: function(fromElement, toElement) {
		
		var self = this;
		var fade1 = new Fx.Tween(fromElement, {
	    duration: 500,
	    transition: 'linear',
	    property: 'opacity',
	    'onComplete' : function() {
				fromElement.setStyle('display', 'none');
				toElement.setStyle('opacity', 0);
				toElement.setStyle('display', 'inline');
				fade2.start(1);
			}
		});
		var fade2 = new Fx.Tween(toElement, {
	    duration: 500,
	    transition: 'linear',
	    property: 'opacity',
	    'onComplete' : function() {
	      // self.log(toElement);
	      if(fromElement != null) {
	        fromElement.removeClass('current');
	      }
	      toElement.addClass('current');
        var myFunction = function() {
          self.loadNextSlide();
        };
        myFunction.delay(self.options.waitTime);
	    }
		});
		if(fromElement == null) {
      toElement.setStyle('opacity', 0);
			toElement.setStyle('display', 'inline');
		  fade2.start(1);
  	} else {
  	  fade1.start(0);
  	}
		
	},





  log: function(x) {
  
    if (typeof(console) !== 'undefined' && console != null) {
        console.log(x);
    }
  
  }
    
    
});
