var ImgSlideShow = Class.create({

	 /**
     * Array of slide elements
     * @type  {array}
     */
    aSlides: [],

     /**
     * Actual position
     * @type  {int}
     */
    current: 0,

    /**
     * Time to wait between fades
     * @type  {int}
     */
    timeout: 8000,


    /**
     * Constructor
     *
     * @param  {string}  Id of element which contains the images
     * @param  {int}     Time between two slides
     */
	initialize: function( elemContainer, timeout) {
		var nl = $(elemContainer).getElementsByTagName('div');
        for (var i = 0; i < nl.length; i++) {
            if (Element.hasClassName(nl[i], 'slide')) {
                nl[i].style.zIndex = nl.length - i;
                Element.hide(nl[i]);
                this.aSlides.push(nl[i]);
            }
        }
        this.timeout = timeout;

        Element.show(elemContainer);

        //alert('length: '+ this.aSlides.length +'\ncurrent: '+ this.current);

        Element.setStyle(this.aSlides[this.current], {display: 'inline'});
        //Element.show(this.aSlides[this.current]);
        setTimeout((function(){this._next();}).bind(this), this.timeout);
	},

	  /**
     * Runs fade effect and prepares next fade
     */
    _next: function() {

//alert('length: '+ this.aSlides.length +'\ncurrent: '+ this.current);

        for (var i = 0; i < this.aSlides.length; i++) {
            var slide = this.aSlides[(this.current + i) % this.aSlides.length];
            slide.style.zIndex = this.aSlides.length - i;
			//Element.hide(slide);

        }
		 //alert(this.aSlides[this.current].firstDescendant().src +' z: '+this.aSlides[this.current].style.zIndex);

		 Effect.Fade(this.aSlides[this.current], {
            afterFinish: function(effect) {
                effect.element.style.zIndex = 0;
                //Element.show(effect.element);
                //Element.setOpacity(effect.element, 1);
                //alert(effect.element.firstDescendant().src);
            }
        });

this.current = (this.current + 1) % this.aSlides.length;
//Element.setStyle(this.aSlides[this.current], {display: 'inline'});
//alert('length: '+ this.aSlides.length +'\ncurrent: '+ this.current);
        // show next element
        //
        Element.show(this.aSlides[this.current]);
        //alert(this.aSlides[this.current].firstDescendant().src +' z: '+this.aSlides[this.current].style.zIndex);
        setTimeout((function(){this._next();}).bind(this), this.timeout);
    }
});