var BanerSlider = new Class({

    Implements: [Options],
    container: null,
    wrapper: null,
    navigation: null,
    slides: null,
    activeSlide: null,
    mouseOver: false,
    options: {
        fadeDuration: 500,
        animFirst: true,
        delayDuration: 2000,
		showNavigation: true,
        showNavText: true,
        prevText: 'Poprzedni',
        nextText: 'Następny',
        pauseOnHover: true
    },

    initialize: function (container, options)
    {
		
		this.container = $(container);
        this.setOptions(options);
        
        this.wrapper = new Element('div#'+this.container.id+'-wrapper').inject(this.container, 'before');
        this.container.inject(this.wrapper);
		
        this.slides = this.container.getChildren();
        if(this.slideslangth < 2) return false;
        
		if(this.options.showNavigation) {
			this.navigation = new Element('ul.navigation').inject(this.wrapper);
			
			new Element('a.prev', { href: 'javascript:void(0)', events: {'click': this.previousSlide.bind(this) } }).inject(new Element('li').inject(this.navigation)).set('html', this.options.showNavText ? this.options.prevText : null);
			for(var i=0, l = this.slides.length; i < l; i++) { 
				if(!this.slides[i].id) this.slides[i].id = this.container.id+'-'+i;
				var el = new Element('a.item', { href: 'javascript:void(0)', rel: i, events: {'click': this.getSlide.bind(this, i) } }).inject(new Element('li').inject(this.navigation)).set('text', this.options.showNavText ? i+1 : null);
				el.addClass('cufon').addClass('cufonCaps'); //special mod
				if(i == 0) {
					this.activeSlide = this.slides[0];
					el.addClass('active-item');
				}
				if(i > 0 || (i == 0 && this.options.animFirst)) this.slides[i].setStyle('opacity', 0);            
			};
			new Element('a.next', { href: 'javascript:void(0)', events: {'click': this.nextSlide.bind(this) } }).inject(new Element('li').inject(this.navigation)).set('html', this.options.showNavText ? this.options.nextText : null);
		}
		
		if(this.options.animFirst) new Fx.Tween(this.slides[0], {duration: this.options.fadeDuration}).start('opacity', 0, 1);
		this.wrapper.addClass(this.container.id+'-0');

        if(this.options.pauseOnHover) this.wrapper.addEvent('mouseenter', this.autoSlideOff.bind(this) ).addEvent('mouseleave', this.autoSlideOn.bind(this) );
        this.autoSlide.periodical(this.options.delayDuration, this);
    },
    
    animateSlides: function (slide)
    {
		if(this.activeSlide === slide) return false;
		
        this.slides.each(function(el){el.setStyle('zIndex', 5)});
        slide.setStyle('zIndex', 10);
        
        new Fx.Tween(slide, {
            duration: this.options.fadeDuration, 
            onComplete: function(slide){
                slide.getParent().getChildren().each(function(el){
                    el.setStyle('opacity', el == slide ? 1 : 0);
                }, slide);
            }
        }).start('opacity', 0, 1);
		
        this.activeSlide = slide;
        this.wrapper.erase('class');
        this.wrapper.addClass(this.activeSlide.id);
		
		if(this.options.showNavigation) {
			var navItems = this.navigation.getElements('a.item');
			navItems.each(function(a){ a.removeClass('active-item'); });
			for(var i=0, l = this.slides.length; i<l; i++) {
				if(this.slides[i] === slide) {
					navItems[i].addClass('active-item');
					break;
				}
			}
		}
		
    },

	getSlide: function ()
    {
        this.animateSlides(this.slides[arguments[0]]);
    },

	previousSlide: function ()
    {
        this.animateSlides(this.activeSlide.getPrevious() ? this.activeSlide.getPrevious() : this.activeSlide.getParent().getLast());
    },

	nextSlide: function ()
    {
        this.animateSlides(this.activeSlide.getNext() ? this.activeSlide.getNext() : this.activeSlide.getParent().getFirst());
    },

	autoSlide: function ()
    {
        if(!this.mouseOver) this.nextSlide();
    },
     
    autoSlideOn: function()
    {
        this.mouseOver = false;
    },
     
    autoSlideOff: function()
    {
        this.mouseOver = true;
    }
    
});

