var SimpleSlideShowDemo = new Class({
    options: {
        slides: [],
        startIndex: 0,
        wrap: true,
        onShow: Class.empty, //Mootools 1.2: $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().getTag() == 'a') {
            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();
            // this.playStatus = true;
        }
    },
    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', '');
        this.containerNest.addClass('rgslideshow');
        
        this.test = new Element('div').addClass(oldClass).injectBefore(this.containerNest);
        this.containerNest.injectInside(this.test);
        
        if (!this.options.hideText) {
       
            if (this.options.addBarInside) {
                this.nestAll = new Element('div').setProperty('class', 'headbox filiaorange').injectAfter(this.containerNest);
                //this.title = new Element('div').setProperty('class', 'rgstitle').injectInside(this.nestAll);
                this.title = new Element('h2').injectInside(this.nestAll);
                //this.description = new Element('div').setProperty('class', 'rgsdescription').injectInside(this.nestAll);
				this.description = new Element('p').injectInside(this.nestAll);
				//this.title = new Element('a').injectInside(this.nestAll);
            }
            
            //	  this.nestAll = new Element('div').setProperty('class', 'rgslideshow').injectAfter(this.containerNest);
            
            // if (this.options.addBarInside) this.titleOp = new Element('div').setProperty('class', 'optitle').injectInside(this.nestAll);
            //  this.nestDescription = new Element('div').setProperty('class', 'descr').injectInside(this.nestAll);
            //  if (this.options.addBarInside) this.descriptionOp = new Element('div').setProperty('class', 'opdescr').injectInside(this.nestAll);
            
            
            if (this.options.browser) {
            
                this.navigation = new Element('div').setProperty('class', 'rgslideshownav').injectAfter(this.containerNest);
                this.innerNavigation = new Element('div').setProperty('class', 'rgsnav2').injectInside(this.navigation);
                
                if (this.options.smallNavigation) 
                    this.prevEl = new Element('span').setProperty('class', 'rgsprev').injectInside(this.innerNavigation).setHTML(this.options.prev).addEvent('click', this.cycleBack.bind(this));
                this.browser = new Element('div').setProperty('class', 'rgsbrowser').injectInside(this.innerNavigation);
                if (this.options.smallNavigation) 
                    this.nextEl = new Element('span').setProperty('class', 'rgsnext').injectInside(this.innerNavigation).setHTML(this.options.next).addEvent('click', this.cycleForward.bind(this));
                
                this.play = new Element('span').setProperty('class', 'rgsplay').injectInside(this.innerNavigation).addEvent('click', this.togglePlay.bind(this));
                
                if (!this.playStatus) {
                    this.play.setHTML(this.options.play).setProperty('title', "Play");
                }
                else {
                    this.play.setHTML(this.options.stop).setProperty('title', "Stop");
                }
            }
        }
        
        if (this.options.bigNavigation) {
            this.bigPrev = new Element('a').setProperties({
                'class': 'rgsbigprev',
                'href': "javascript:void(0);"
            }).injectInside(this.containerNest).addEvent('click', this.cycleBack.bind(this));
            this.bigNext = new Element('a').setProperties({
                'class': 'rgsbignext',
                'href': "javascript:void(0);"
            }).injectInside(this.containerNest).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');
            
            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) {
                this.browserEl = new Element('span').setProperties({
                    'class': 'rgsbrowserEl',
                    'title': title
                }).setHTML(this.slides.indexOf(slide) + 1).injectInside(this.browser);
                //    this.browserEl.setProperty('id',this.options.paginationSelector+i);
                this.browserEl.addEvent('click', this.cycleTo.bind(this, this.slides.indexOf(slide)));
                this.browserArr[this.slides.indexOf(slide)] = this.browserEl;
            }
            
            if (i != 1) {
                if (this.options.browser) 
                    this.splitter = new Element('span').setProperty('class', 'rgssplitEl').setHTML(this.options.splitter).injectBefore(this.browserEl);
                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) {
                    this.bigPrev.setStyle('height', (slide.getProperty("height") - nestDiv.size.y) + 'px');
                    this.bigNext.setStyle('height', (slide.getProperty("height") - nestDiv.size.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();
                    this.navigation.setStyle('width', width.size.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);
            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(){
                    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;
        }
        
        
    }
});
SimpleSlideShowDemo.implement(new Options, new Events);
