//NI umgeschrieben fuer mootools 1.2.5
//http://www.siafoo.net/article/62


var SimpleSlideShowDemo = new Class({

	Implements : [Options,Events],

	options: {
		slides: [],
		startIndex: 0,
		wrap: true,
		onShow: Class.empty,
		onRotate: Class.empty,
		onStop: Class.empty,
		onAutoPlay: Class.empty,
		onShowSlide: Class.empty,
		slideInterval: 2500,
		auto:false,
		transitionDuration: 700,
		splitter:"&middot;",
		prev:"&laquo; ",
		next:" &raquo",
		play:"&infin;",
		stop:"&phi;",
		bigNavigation : true,
		smallNavigation: true,
		browser:true,
		addBarInside:true,
		hideText:false

	},
	//---------------------------------------------------------------------------------
	initialize: function(container,options){

		if (container[0].getParent().get('tag')=='a') {
			// if (container[0].getParent().getTag()=='a') { // Mootools 1.2
			this.containerNest = container[0].getParent().getParent();
		} else {
			this.containerNest = container[0].getParent();
		}
		this.container = container;
		this.setOptions(options);
		this.slides = [];
		this.title = [];
		this.descr = [];
		this.effects = [];
		this.browserArr = [];
		this.playStatus = false;
		if (this.options.auto) this.playStatus = true;
		
		this.createStructure();
		
		this.addSlides(this.container);
		if(this.slides.length) this.showSlide(this.options.startIndex);
		if (this.options.auto) {
			this.autoplay();
		}
	},
	//---------------------------------------------------------------------------------
	createFx: function(){
		this.slideFx = new Fx.Elements(this.slides, {duration: this.options.transitionDuration});
		this.slides.each(function(slide){
			slide.setStyle('opacity',0);
		});
	},
	//---------------------------------------------------------------------------------
	createStructure: function() {

		var oldClass = this.containerNest.getProperty("class");
		this.containerNest.setProperty('class', '');
		//NI VON DER EXTENSION SCHREIBEN LASSEN this.containerNest.setProperty('style', 'width:500px;height:400px;');
		this.containerNest.addClass('rgslideshow');
		  
		this.test = new Element('div').addClass(oldClass).inject(this.containerNest,'before');
		this.containerNest.inject(this.test,'inside');
		  
		if (!this.options.hideText) {
		  
			if (this.options.addBarInside) {
				this.nestAll = new Element('div').setProperty('class', 'rgsnest').inject(this.containerNest,'top');    
				this.title = new Element('div').setProperty('class', 'rgstitle').inject(this.nestAll,'inside');
				this.description = new Element('div').setProperty('class', 'rgsdescription').inject(this.nestAll,'inside');
			}
			  
			if(this.options.browser) {
			       
				this.navigation = new Element('div').setProperty('class', 'rgslideshownav').inject(this.containerNest,'after');
				this.innerNavigation = new Element('div').setProperty('class', 'rgsnav2').inject(this.navigation,'inside');
				
				if(this.options.smallNavigation) this.prevEl = new Element('span').setProperty('class', 'rgsprev').inject(this.innerNavigation,'inside').set('html',this.options.prev).addEvent('click', this.cycleBack.bind(this));
				this.browser = new Element('div').setProperty('class', 'rgsbrowser').inject(this.innerNavigation,'inside');
				if(this.options.smallNavigation)  this.nextEl = new Element('span').setProperty('class', 'rgsnext').inject(this.innerNavigation,'inside').set('html',this.options.next).addEvent('click', this.cycleForward.bind(this));
				  
				this.play = new Element('span').setProperty('class', 'rgsplay').inject(this.innerNavigation,'inside').addEvent('click', this.togglePlay.bind(this));    
				  
				if (!this.playStatus) {
					//NI this.play.setHTML(this.options.play).setProperty('title',"Play");
					this.play.set('html',this.options.play).setProperty('title',"Play");
				} else {
					//NI this.play.setHTML(this.options.stop).setProperty('title',"Stop");
					this.play.set('html',this.options.stop).setProperty('title',"Stop");
				}
			} 
		}
		
		if (this.options.bigNavigation) {
			this.bigPrev = new Element('a').setProperties({'class': 'rgsbigprev', 'href': "javascript:void(0);"}).inject(this.containerNest,'inside').addEvent('click', this.cycleBack.bind(this));
			this.bigNext = new Element('a').setProperties({'class': 'rgsbignext', 'href': "javascript:void(0);"}).inject(this.containerNest,'inside').addEvent('click', this.cycleForward.bind(this));
		}    
		    
		this.createFx();

  },
  //---------------------------------------------------------------------------------
	addSlides: function(slides){
		var i =1;
		
		slides.each(function(slide){
			this.slides.include($(slide));
			
			//this.effects[this.slides.indexOf(slide)] = new Fx.Style(slide, 'opacity'); // Mootools 1.2
			this.effects[this.slides.indexOf(slide)] = new Fx.Tween(slide);
			
			slide.addClass('rgssimg');
			var title="&nbsp;";
			var descr="";
			if (slide.getProperty("title")) {
				split = slide.getProperty("title").split("|");
				if (split[0]) {
					title = split[0];
					slide.setProperty("title",title);
				}
				if (split[1]) descr = split[1];
			}
			
			this.descr[this.slides.indexOf(slide)] = descr;      
			this.title[this.slides.indexOf(slide)] = title;
			
			if(this.options.browser) {
				//NI this.browserEl = new Element('span').setProperties({'class': 'rgsbrowserEl', 'title': title}).setHTML(this.slides.indexOf(slide)+1).injectInside(this.browser);
				this.browserEl = new Element('span').setProperties({'class': 'rgsbrowserEl', 'title': title}).set('html',this.slides.indexOf(slide)+1).inject(this.browser,'inside');
				this.browserEl.addEvent('click', this.cycleTo.bind(this,this.slides.indexOf(slide)));
				this.browserArr[this.slides.indexOf(slide)] = this.browserEl;
				//---->
			}
					
			if (i!=1) {
				//NI if(this.options.browser)		this.splitter = new Element('span').setProperty('class', 'rgssplitEl').setHTML(this.options.splitter).injectBefore(this.browserEl);
				if(this.options.browser)		this.splitter = new Element('span').setProperty('class', 'rgssplitEl').set('html',this.options.splitter).inject(this.browserEl,'before');
				slide.setStyle('display','none');
			} else {
				if (!this.options.hideText && this.options.addBarInside) {
					var nestDiv = this.nestAll.getSize();
				} else {
					var nestDiv = this.containerNest.getSize();
				}
				var img = slide.getSize();
				
				if(this.options.bigNavigation) {
					//NI this.bigPrev.setStyle('height',(slide.getProperty("height")-nestDiv.size.y)+'px');
					//NI this.bigNext.setStyle('height',(slide.getProperty("height")-nestDiv.size.y)+'px');
					this.bigPrev.setStyle('height',(slide.getProperty("height")-nestDiv.y)+'px');
					this.bigNext.setStyle('height',(slide.getProperty("height")-nestDiv.y)+'px');
					if(!this.options.addBarInside) {
						this.bigPrev.setStyle('height',(slide.getProperty("height"))+'px');
						this.bigNext.setStyle('height',(slide.getProperty("height"))+'px');
					}					 
				}
				if(this.options.addBarInside) { 
					this.nestAll.setStyle('width',slide.getProperty("width")+'px');
				}
				if(this.options.browser) {
					var width =  this.containerNest.getSize();
					//NI this.navigation.setStyle('width',width.size.x-1+'px');
					this.navigation.setStyle('width',width.x-1+'px');
				}
			  
			}
			i++;
		}, this);
	},
	//---------------------------------------------------------------------------------
	addSlide: function(slide){
		this.addSlides([slide]);
	},
	//---------------------------------------------------------------------------------
	cycleForward: function(){
		if($chk(this.now) && this.now < this.slides.length-1) this.showSlide(this.now+1);
		else if ((this.now) && this.options.wrap) this.showSlide(0);
		else if(!$defined(this.now)) this.showSlide(this.options.startIndex);
	},
	//---------------------------------------------------------------------------------
	cycleBack: function(){
		if(this.now > 0) this.showSlide(this.now-1);
		else if(this.options.wrap) this.showSlide(this.slides.length-1);
	},
	//---------------------------------------------------------------------------------
	cycleTo: function(i){
		if(this.playStatus) {
	      this.togglePlay();
	    }	
	    this.showSlide(i);
	},
	//---------------------------------------------------------------------------------
	togglePlay: function() {
	    if (this.playStatus) {
	      this.stop();
	      this.playStatus = false;
	      this.play.innerHTML = this.options.play;
	      this.play.setProperty('title',"Play");
	    }
	    else {
	      this.autoplay();
	      this.playStatus = true;
	      this.play.innerHTML = this.options.stop;
	      this.play.setProperty('title',"Stop");
	    }
	},
	//---------------------------------------------------------------------------------
	autoplay: function(){
		this.slideshowInt = this.rotate.periodical(this.options.slideInterval, this);
		this.fireEvent('onAutoPlay');
	},
	//---------------------------------------------------------------------------------
	stop: function(){
		clearInterval(this.slideshowInt);
		this.fireEvent('onStop');
	},  	
	rotate: function(){
		this.cycleForward();
		this.fireEvent('onRotate');
	},
	//---------------------------------------------------------------------------------
	showSlide: function(iToShow){

		var now = this.now;		
		var currentSlide = this.slides[now];
		var slide = this.slides[iToShow];

		
		function fadeIn(s){
			s.setStyles({
				display:'block',
				visibility: 'visible',
				opacity: 0
			});
			//this.effects[this.slides.indexOf(s)].start(1); // Mootools 1.2
			this.effects[this.slides.indexOf(s)].start('opacity', 1);
			this.fireEvent('onShow', [slide, iToShow]);
		};
    
    if (!this.options.hideText) {
      if (this.options.addBarInside) this.description.innerHTML = this.title.innerHTML = "&nbsp;";
      if(this.options.browser) {
        this.browserArr.each(function(el) {
          el.removeClass("rgsact");
        });
      }
    }

		if(slide) {    
			if($chk(now) && now != iToShow){
				// this.effects[now].start(0).chain(function(){ // Mootools 1.2
				this.effects[now].start('opacity', 0).chain(function(){
					this.slides[now].setStyle('display', 'none');
					fadeIn.apply(this, [slide]);
          if (!this.options.hideText && this.options.addBarInside) {
            this.description.innerHTML  = this.descr[iToShow];
            this.title.innerHTML  = this.title[iToShow];
            if(this.options.browser) this.browserArr[this.now].addClass("rgsact");
          }
				}.bind(this));
			} else {
        fadeIn.apply(this, [slide]);
          if (!this.options.hideText && this.options.addBarInside) {
  		      this.description.innerHTML  = this.descr[iToShow];
            this.title.innerHTML  = this.title[iToShow];
            if(this.options.browser) this.browserArr[0].addClass("rgsact");
          }
      }
			this.now = iToShow;
		}
		

	}
	//---------------------------------------------------------------------------------
});
//NI
//SimpleSlideShowDemo.implement(new Options, new Events);

